Не хочет правильно запоминать переменную local location l = GetSpellTargetLoc() . Вместо правильной позиции запоминает центр карты, пересмотрел почти весь код, вроде все нормально, не пойму в чем проблема.

Принятый ответ

Попробуй заменить,
EVENT_PLAYER_UNIT_SPELL_ENDCAST
на
EVENT_PLAYER_UNIT_SPELL_EFFECT
И да, nvc123 прав на счёт координат.
Зачем использовать наркоманский wait, когда можно всё сделать в таймере?
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
9
8 лет назад
Отредактирован Fa1korn
0
Попробуй так,
local location l = location( GetLocationX(GetSpellTargetLoc()), GetLocationY(GetSpellTargetLoc()) )
0
29
8 лет назад
0
Не хочет правильно запоминать переменную local location l = GetSpellTargetLoc() . Вместо правильной позиции запоминает центр карты, пересмотрел почти весь код, вроде все нормально, не пойму в чем проблема.
Причины: У заклинание нет цели, т.е. не указывается точка. Или заклинание может быть нацелено на боевую единицу или предмет или разрушаемое. (Во большинстве случаев возвращает 0.,0. при указании на декорацию или предметы)
Лучше использовать способность на основе канала с параметром цели "боевая единица или точка"
GetSpellTargetLoc - получает току(местоположения) для заклинания.
В центр карты возвращает по умолчанию, если её нет.
Требую изъяснить, для чего используете сие данную переменную и при каких действиях и событиях.
0
28
8 лет назад
0
Fa1korn, это типо быстрый способ забить оперативку?
если да то создать 10000 юнитов циклом будет быстрее
0
29
8 лет назад
Отредактирован Волчачка
0
nvc123:
Fa1korn, это типо быстрый способ забить оперативку?
если да то создать 10000 юнитов циклом будет быстрее
Скорее он не знает о существовании (пр. ниже), али просто троллит.
GetSpellTargetX()
GetSpellTargetY()
0
5
8 лет назад
Отредактирован Megacomp
0
KingMaximax, Способность сделана на основе канал, с параметром точка . Скинул скриншот моего кода.
Загруженные файлы
0
29
8 лет назад
0
Megacomp:
KingMaximax, Способность сделана на основе канал, с параметром точка . Скинул скриншот моего кода.
В вашем много утечек и лишнего мусора. А ещё хотел бы увидеть что в TrigUltra_Conditions и InitTrig_ultra

// Будьте любезны добавить свой код:
// В блоке переменных
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()

// ниже блока
call BJDebugMsg("SX: " + R2SW(x,8,2) + "SY: " +  R2SW(y,8,2) )
call BJDebugMsg("LX: " + R2SW(GetLocationX(l),8,2) + "LY: " + R2SW(GetLocationY(l),8,2) )
Потом покажите результат, выведенный на экране.
0
9
8 лет назад
0
KingMaximax:
GetSpellTargetX()
GetSpellTargetY()
О.о действительно не знал, в jngp почему-то нет этой функции
0
28
8 лет назад
0
Fa1korn, вообще то есть
0
5
8 лет назад
0
Сделал как и сказал, всё осталось по прежнему. С этой переменной local location l = location( GetLocationX(GetSpellTargetLoc()), GetLocationY(GetSpellTargetLoc()) ) выдаёт ошибку, с обычной l location = GetSpellTargetLoc() идёт без ошибок, но область по прежнему не заноситься в переменную. Прилагаю карту с кодом, если не сложно можете указать на мою ошибку и что я делал не так.
Загруженные файлы
0
28
8 лет назад
0
Megacomp, скинь код триггера в текстовый файл и скинь
Megacomp, и попробуй юзать координаты вместо локейшинов
намного удобнее и память не утекает
0
5
8 лет назад
Отредактирован Megacomp
0
function Fly_Timer takes nothing returns nothing
local timer t = GetExpiredTimer()
local effect e
local unit dumma = LoadUnitHandle(udg_Hesh, GetHandleId(t),0)
  if (  (GetUnitFlyHeight(dumma) > 30) ) then
     call SetUnitFlyHeight( dumma , ( GetUnitFlyHeight(dumma)-10),0)
      else
     call DestroyTimer(t)
   call AddSpecialEffectLocBJ( GetUnitLoc(dumma), "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl" )
   set e = GetLastCreatedEffectBJ()
   call TriggerSleepAction ( 0.5 )
   call DestroyEffect(e)
   endif 
endfunction  
function Trig_ultra_Actions takes nothing returns nothing
local location l = GetSpellTargetLoc()
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local integer ablevel = GetUnitAbilityLevelSwapped('A004', GetSpellAbilityUnit())
local integer damag = 10
local integer radius = 200
local timer t = CreateTimer()
local integer str = GetHeroStatBJ(bj_HEROSTAT_STR, GetSpellAbilityUnit(), true)
local effect e
local unit u = GetSpellAbilityUnit()
local unit dumma
call BJDebugMsg("SX: " + R2SW(x,8,2) + "SY: " +  R2SW(y,8,2) )
call BJDebugMsg("LX: " + R2SW(GetLocationX(l),8,2) + "LY: " + R2SW(GetLocationY(l),8,2) )
call DisplayTextToForce( GetPlayersAll(), "TRIGSTR_286" )
     
call CreateFogModifierRadiusLocBJ( true, GetOwningPlayer(u), FOG_OF_WAR_VISIBLE, l, 1000.00 )
    
call CreateNUnitsAtLoc( 1, 'h005', GetOwningPlayer(u), GetUnitLoc(u), GetUnitFacing(u) )
set dumma  = GetLastCreatedUnit()
call IssuePointOrderLocBJ( dumma, "move", l )
loop
    exitwhen( DistanceBetweenPoints( l, GetUnitLoc( dumma )) <= 50.00 )
    call TriggerSleepAction(RMaxBJ(bj_WAIT_FOR_COND_MIN_INTERVAL, 0.10))
endloop
      
    call SaveUnitHandle(udg_Hesh,GetHandleId(t),0,dumma)
    call TimerStart(t,0.05,true,function Fly_Timer)
  
    call UnitDamagePointLoc( dumma, 0.00, ( ablevel * radius ), l, ( str * damag ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL )
      
endfunction
function Trig_ultra_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A004' ) ) then
        return false
    endif
    return true
endfunction
//===========================================================================
function InitTrig_ultra takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_ENDCAST )
    call TriggerAddCondition( t, Condition( function Trig_ultra_Conditions ) )
    call TriggerAddAction( t, function Trig_ultra_Actions )
    set t = null
endfunction
1
29
8 лет назад
1
Попробуй заменить,
EVENT_PLAYER_UNIT_SPELL_ENDCAST
на
EVENT_PLAYER_UNIT_SPELL_EFFECT
И да, nvc123 прав на счёт координат.
Зачем использовать наркоманский wait, когда можно всё сделать в таймере?
Принятый ответ
0
5
8 лет назад
0
KingMaximax, только начал изучать Jass, можно сказать как неделю назад начал, многое не знал, так что потихоньку исправляюсь.
Спасибо помогло, изменил EVENT_PLAYER_UNIT_SPELL_EFFECT, и всё работает как надо.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.