|
|
|
|
Ошибка в триггере, бесконечно наносится урон
|
|
Smartaros | Дата: Пятница, 03 Августа 2012, 20:52:24 | Сообщение # 1 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| У меня есть джас триггер, который при атаке героя создает другой триггер на получение урона атакованным. В создаваемом триггер есть действие на нанесение урона атакованному, тут воззревает ошибка, так как урон наносится бесконечно. Сделал в первом триггере, что при атаке, кастом вэлью атакующего становится равным нулю, в создаваемом триггере условие, что кастом вэлью атакующего должен быть равным нулю, и перед действием на нанесение урона кастом вэлью устанавливаю равным единице, но почему то все равно ошибка. Как иначе решить эту проблему?
|
|
|
|
GameprO | Дата: Пятница, 03 Августа 2012, 21:00:49 | Сообщение # 2 |
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 76
Блокировки:
| Smartaros, Перед нанесением урона сделай "Выключить "этот триггер"" После урона сделай "Включить "этот триггер""
Всё гениальное - просто, но не всё простое - гениально...
|
|
|
|
Smartaros | Дата: Пятница, 03 Августа 2012, 21:07:38 | Сообщение # 3 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| не работает, это джасс
|
|
|
|
kapa6acvlk | Дата: Пятница, 03 Августа 2012, 21:28:17 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, Выложи код
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Пятница, 03 Августа 2012, 21:44:45 | Сообщение # 5 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| Code function Trig_ProlomDo_Conditions takes nothing returns boolean if ( not ( GetUnitAbilityLevelSwapped('A0F6', GetAttacker()) > 0 ) ) then return false endif return true endfunction
function Trig_ProlomDo_Func01 takes nothing returns boolean return ( GetUnitUserData(GetEventDamageSource()) == 0 ) endfunction
function Trig_ProlomDo_Func02 takes nothing returns nothing set udg_Bezlikij_point[2] = GetUnitLoc(GetEventDamageSource()) call CreateNUnitsAtLoc( 1, 'n02K', GetOwningPlayer(GetEventDamageSource()), udg_Bezlikij_point[2], bj_UNIT_FACING ) call RemoveLocation (udg_Bezlikij_point[2]) call UnitAddAbilityBJ( 'A0F7', GetLastCreatedUnit() ) call SetUnitAbilityLevelSwapped( 'A0F7', GetLastCreatedUnit(), GetUnitAbilityLevelSwapped('A0F6', GetEventDamageSource()) ) call IssueTargetOrder( GetLastCreatedUnit(), "innerfire", udg_Bezlikij[1] ) call RemoveUnit( GetLastCreatedUnit() ) call SetUnitUserData( GetEventDamageSource(), 1 ) call DisableTrigger( udg_Prolom_trigger ) call UnitDamageTargetBJ( GetEventDamageSource(), udg_Bezlikij[1], ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A0F6', GetEventDamageSource())) ), ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL ) call EnableTrigger( udg_Prolom_trigger ) endfunction
function Trig_ProlomDo_Actions takes nothing returns nothing call SetUnitUserData( GetAttacker(), 0 ) set udg_Bezlikij[1] = GetAttackedUnitBJ() call TriggerRemoveCondition( udg_Prolom_trigger, udg_Prolom_cond[0] ) call TriggerClearConditions( udg_Prolom_trigger ) call TriggerRemoveAction( udg_Prolom_trigger, udg_Prolom_act[0] ) call TriggerClearActions( udg_Prolom_trigger ) call DestroyTrigger(udg_Prolom_trigger) set udg_Prolom_trigger = CreateTrigger() call TriggerRegisterUnitEvent( udg_Prolom_trigger, udg_Bezlikij[1], EVENT_UNIT_DAMAGED ) set udg_Prolom_cond[0] = TriggerAddCondition( udg_Prolom_trigger, Condition(function Trig_ProlomDo_Func01) ) set udg_Prolom_act[0] = TriggerAddAction( udg_Prolom_trigger, function Trig_ProlomDo_Func02 ) endfunction
//=========================================================================== function InitTrig_ProlomDo takes nothing returns nothing set gg_trg_ProlomDo = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_ProlomDo, EVENT_PLAYER_UNIT_ATTACKED ) call TriggerAddCondition( gg_trg_ProlomDo, Condition( function Trig_ProlomDo_Conditions ) ) call TriggerAddAction( gg_trg_ProlomDo, function Trig_ProlomDo_Actions ) endfunction
|
|
|
|
lawson | Дата: Суббота, 04 Августа 2012, 01:24:49 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Smartaros, О боже, зачем столько мути не понятно чего, какие-то проверки какие то БЖ, создай просто лок. триггер на нанесение урона или если юнит один то просто глоб. триггер и передавай в него все что нужно.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Smartaros | Дата: Суббота, 04 Августа 2012, 02:16:07 | Сообщение # 7 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| ну я в джассе 0 я не знаю как иначе делать манипуляции при нанесении урона с руки
|
|
|
|
kapa6acvlk | Дата: Суббота, 04 Августа 2012, 02:17:54 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| я думаю, должно быть что-то вроде этого, но я даже не проверял, так на глаз Code function Trig_ProlomDo_Conditions takes nothing returns boolean return GetUnitAbilityLevel(GetAttacker(), 'A0F6') > 0 endfunction
function Trig_ProlomDo_Func01 takes nothing returns boolean return GetUnitUserData(GetEventDamageSource()) == 0 endfunction
function Trig_ProlomDo_Func02 takes nothing returns nothing local unit d = GetEventDamageSource() local real x = GetUnitX(d) local real y = GetUnitX(d) local unit u = CreateUnit(GetOwningPlayer(d),'n02K',x,y,0.) call UnitAddAbility(u, 'A0F7') call SetUnitAbilityLevel(u, 'A0F7', GetUnitAbilityLevel(d, 'A0F6')) call IssueTargetOrder( u, "innerfire", udg_Bezlikij[1] ) call UnitApplyTimedLife(u, 'BTLF', 2.0) call SetUnitUserData( d, 1 ) call DisableTrigger( udg_Prolom_trigger ) call UnitDamageTarget(d, udg_Bezlikij[1], 20.*GetUnitAbilityLevel(d, 'A0F6'), true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) call EnableTrigger( udg_Prolom_trigger ) call TriggerRemoveCondition( udg_Prolom_trigger, udg_Prolom_cond[0] ) call TriggerRemoveAction( udg_Prolom_trigger, udg_Prolom_act[0] ) call DestroyTrigger(udg_Prolom_trigger) set d = null set u = null endfunction
function Trig_ProlomDo_Actions takes nothing returns nothing call SetUnitUserData( GetAttacker(), 0 ) set udg_Bezlikij[1] = GetTriggerUnit() set udg_Prolom_trigger = CreateTrigger() call TriggerRegisterUnitEvent( udg_Prolom_trigger, udg_Bezlikij[1], EVENT_UNIT_DAMAGED ) set udg_Prolom_cond[0] = TriggerAddCondition( udg_Prolom_trigger, Condition(function Trig_ProlomDo_Func01) ) set udg_Prolom_act[0] = TriggerAddAction( udg_Prolom_trigger, function Trig_ProlomDo_Func02 ) endfunction
//=========================================================================== function InitTrig_ProlomDo takes nothing returns nothing set gg_trg_ProlomDo = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_ProlomDo, EVENT_PLAYER_UNIT_ATTACKED ) call TriggerAddCondition( gg_trg_ProlomDo, Condition( function Trig_ProlomDo_Conditions ) ) call TriggerAddAction( gg_trg_ProlomDo, function Trig_ProlomDo_Actions ) endfunction
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Суббота, 04 Августа 2012, 15:49:10 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| в строчке damage target хелпер нашел ошибку, не знаю как исправить, стер ее, триггер не работает
|
|
|
|
kapa6acvlk | Дата: Воскресенье, 05 Августа 2012, 15:16:35 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, выложи карту, и скинь ссылку в мне ЛС, я посмотрю, что там не так.
Добавлено (05 Августа 2012, 15:14:05) --------------------------------------------- Набросал системку, тестил на протяжении долгого времени утечек нет.
Code function ta takes nothing returns nothing local trigger t = GetTriggeringTrigger() local unit u = GetEventDamageSource() local unit c = GetTriggerUnit() local triggeraction tra = LoadTriggerActionHandle(udg_Hash,GetHandleId(t),1) if(u == LoadUnitHandle(udg_Hash,GetHandleId(t),0))then //call BJDebugMsg(GetUnitName(u)+" - "+R2S(GetEventDamage())) //тут твои действия call FlushChildHashtable(udg_Hash, GetHandleId(t)) call FlushChildHashtable(udg_Hash, GetHandleId(u)) call TriggerRemoveAction(t,tra) call DestroyTrigger(t) endif set t = null set u = null set c = null set tra = null endfunction
function Trig_DMG_Actions takes nothing returns nothing local unit u = GetAttacker() local unit c = GetTriggerUnit() local trigger t = LoadTriggerHandle(udg_Hash,GetHandleId(u),0) local triggeraction tra = LoadTriggerActionHandle(udg_Hash,GetHandleId(u),1) call TriggerRemoveAction(t,tra) call DestroyTrigger(t) call FlushChildHashtable(udg_Hash, GetHandleId(t)) call FlushChildHashtable(udg_Hash, GetHandleId(u)) set t = CreateTrigger() call TriggerRegisterUnitEvent( t, c, EVENT_UNIT_DAMAGED ) set tra = TriggerAddAction(t, function ta) call SaveUnitHandle(udg_Hash,GetHandleId(t),0,u) call SaveTriggerActionHandle(udg_Hash,GetHandleId(t),1,tra) call SaveTriggerHandle(udg_Hash,GetHandleId(u),0,t) call SaveTriggerActionHandle(udg_Hash,GetHandleId(u),1,tra) set udg_i = udg_i + 1 set u = null set c = null set t = null set tra = null endfunction
//=========================================================================== function InitTrig_DMG takes nothing returns nothing set gg_trg_DMG = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_DMG, EVENT_PLAYER_UNIT_ATTACKED ) call TriggerAddAction( gg_trg_DMG, function Trig_DMG_Actions ) endfunction
http://rghost.ru/39585301Добавлено (05 Августа 2012, 15:16:35) --------------------------------------------- set udg_i = udg_i + 1 - только для подсчета срабатываний, так для интереса
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
Сообщение отредактировал kapa6acvlk - Воскресенье, 05 Августа 2012, 15:14:27 |
|
|
|
Smartaros | Дата: Воскресенье, 05 Августа 2012, 17:26:12 | Сообщение # 11 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| мм а куда вставить условие что нанес урон тот, у которого есть такая то способность?
|
|
|
|
kapa6acvlk | Дата: Воскресенье, 05 Августа 2012, 18:30:36 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Code function ta takes nothing returns nothing local trigger t = GetTriggeringTrigger() local unit u = GetEventDamageSource() local unit c = GetTriggerUnit() local triggeraction tra = LoadTriggerActionHandle(udg_Hash,GetHandleId(t),1) if(u == LoadUnitHandle(udg_Hash,GetHandleId(t),0))then //call BJDebugMsg(GetUnitName(u)+" - "+R2S(GetEventDamage())) //тут твои действия call FlushChildHashtable(udg_Hash, GetHandleId(t)) call FlushChildHashtable(udg_Hash, GetHandleId(u)) call TriggerRemoveAction(t,tra) call DestroyTrigger(t) endif set t = null set u = null set c = null set tra = null endfunction
function Trig_DMG_Conditions takes nothing returns boolean return (GetUnitAbilityLevel(GetAttacker(), 'A000') > 0 endfunction
function Trig_DMG_Actions takes nothing returns nothing local unit u = GetAttacker() local unit c = GetTriggerUnit() local trigger t = LoadTriggerHandle(udg_Hash,GetHandleId(u),0) local triggeraction tra = LoadTriggerActionHandle(udg_Hash,GetHandleId(u),1) call TriggerRemoveAction(t,tra) call DestroyTrigger(t) call FlushChildHashtable(udg_Hash, GetHandleId(t)) call FlushChildHashtable(udg_Hash, GetHandleId(u)) set t = CreateTrigger() call TriggerRegisterUnitEvent( t, c, EVENT_UNIT_DAMAGED ) set tra = TriggerAddAction(t, function ta) call SaveUnitHandle(udg_Hash,GetHandleId(t),0,u) call SaveTriggerActionHandle(udg_Hash,GetHandleId(t),1,tra) call SaveTriggerHandle(udg_Hash,GetHandleId(u),0,t) call SaveTriggerActionHandle(udg_Hash,GetHandleId(u),1,tra) set udg_i = udg_i + 1 set u = null set c = null set t = null set tra = null endfunction
//=========================================================================== function InitTrig_DMG takes nothing returns nothing set gg_trg_DMG = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_DMG, EVENT_PLAYER_UNIT_ATTACKED ) call TriggerAddCondition( gg_trg_DMG, Condition( function Trig_DMG_Conditions ) ) call TriggerAddAction( gg_trg_DMG, function Trig_DMG_Actions ) endfunction
Вместо A000 равкод твоей абилы
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Воскресенье, 05 Августа 2012, 19:22:25 | Сообщение # 13 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| в функции ta я добавил лок.целочисленную, она равна рандом от 1 до 100, как вписать условие, если она меньше или равна 12 + 3*лвл моей абилы, то дальше мои действия, иначе говоря шанс. Прям так в той функции в действиях и писать: if(not i <= блаблабла?
|
|
|
|
Borodach | Дата: Воскресенье, 05 Августа 2012, 20:01:56 | Сообщение # 14 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| i=лок.целочисленную, она равна рандом от 1 до 100, Code if i<=12+3*GetUnitAbilitylLevel(unit,rawcode) then действия endif
Karamba
Сообщение отредактировал Borodach - Воскресенье, 05 Августа 2012, 20:03:31 |
|
|
|
Smartaros | Дата: Воскресенье, 05 Августа 2012, 20:24:50 | Сообщение # 15 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| then же после надо, а не с новой строчки
|
|
|
|
Borodach | Дата: Воскресенье, 05 Августа 2012, 20:45:37 | Сообщение # 16 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| у меня вроде не с новой строчки
Karamba
|
|
|
|
kapa6acvlk | Дата: Воскресенье, 05 Августа 2012, 20:57:02 | Сообщение # 17 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, Измени эту проверку: Code if(u == LoadUnitHandle(udg_Hash,GetHandleId(t),0))then на это: Code if(u == LoadUnitHandle(udg_Hash,GetHandleId(t),0) and i<=12+3*GetUnitAbilitylLevel(unit,rawcode))then соответственно i, unit и rawcode сам пропишешь как тебе надо
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Воскресенье, 05 Августа 2012, 21:57:19 | Сообщение # 18 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| черт, я оказывается все правильно написал, у меня в моих действиях дамми почему то не хочет юзать способность, щас код скину, если в нем нет ошибки значит в ро муть Добавлено (05 Августа 2012, 21:57:19) ---------------------------------------------
Code function ta takes nothing returns nothing local trigger t = GetTriggeringTrigger() local unit u = GetEventDamageSource() local real x = GetUnitX(u) local real y = GetUnitY(u) local unit u2 local unit c = GetTriggerUnit() local triggeraction tra = LoadTriggerActionHandle(udg_Hash,GetHandleId(t),1) local integer i = GetRandomInt(1, 100) if(u == LoadUnitHandle(udg_Hash,GetHandleId(t),0)) and i <= 12 + 3 * GetUnitAbilityLevel(u,'A0F6')then //call BJDebugMsg(GetUnitName(u)+" - "+R2S(GetEventDamage())) //call KillUnit(u) set u2 = CreateUnit(GetOwningPlayer(u),'n02k',x,y,0.) call UnitAddAbility(u2, 'A0F7') call IssueTargetOrder( u2, "innerfire", c ) call UnitApplyTimedLife(u2, 'BTLF',2.0) call FlushChildHashtable(udg_Hash, GetHandleId(t)) call FlushChildHashtable(udg_Hash, GetHandleId(u)) call TriggerRemoveAction(t,tra) call DestroyTrigger(t) endif set t = null set u = null set u2 = null set c = null set tra = null endfunction
|
|
|
|
Borodach | Дата: Воскресенье, 05 Августа 2012, 22:07:27 | Сообщение # 19 |
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
| Smartaros, для начала ты проверил, есть ли мана, разблокирована способность и время для каста хватает?
Karamba
|
|
|
|
Smartaros | Дата: Воскресенье, 05 Августа 2012, 22:13:39 | Сообщение # 20 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| скилл не требует ману, способность просто скопированна с другой, которую другой дамми юзает без проблем, оба дамми отличаются только названиями, у них анимация каста 0, единственное отличие, что та способность на союзников, эта на врагов, допустимые цели скопировал у молота бурь
|
|
|
|
kapa6acvlk | Дата: Воскресенье, 05 Августа 2012, 23:35:55 | Сообщение # 21 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, попробуй своему дамику дать в РО классификацию Является зданием.
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Понедельник, 06 Августа 2012, 13:14:13 | Сообщение # 22 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| уже все что можно перепробовал и перепроверил, дамми просто нихрена не юзает Добавлено (06 Августа 2012, 13:14:13) --------------------------------------------- щас проверил и обнаружил что дамми вообще не создается....
|
|
|
|
kapa6acvlk | Дата: Понедельник, 06 Августа 2012, 13:17:50 | Сообщение # 23 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| Smartaros, для теста (всегда!) не убирай у даммика модель и не ставь москитов. Когда настроишь код, настраивай дамика, я для простоты всегда так делаю. вдруг чего забудешь создать или дать
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
Smartaros | Дата: Понедельник, 06 Августа 2012, 13:34:16 | Сообщение # 24 |
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
| я вот как раз модель поставил, почему он не создается? код же вроде правильный
|
|
|
|
kapa6acvlk | Дата: Понедельник, 06 Августа 2012, 13:38:33 | Сообщение # 25 |
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
| не ошибся ли ты тут: n02k
Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна. © Александр Зорич
|
|
|
|
|
|
|
|
|
|
|