Триггер на воскрешение крипов
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 15:40:12 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Вот триггер: Code function Trig_Creeps_Conditions takes nothing returns boolean if ( not ( GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) ) ) then return false endif if ( GetDyingUnit() == gg_unit_h03E_0015 ) then return false endif if ( GetDyingUnit() == gg_unit_h03F_0014 ) then return false endif return true endfunction
function Trig_Creeps_Actions takes nothing returns nothing local integer i = 1 local integer CreepIndex = 0 local location CreepLoc local integer UT = GetUnitTypeId(GetDyingUnit()) loop exitwhen i > 26 if (( IsUnitInGroup(GetDyingUnit(), udg_CreepUnits[i]) == true ) ) then set CreepIndex = i endif set i = i + 1 endloop
if ( CreepIndex == 0 ) then return endif
call GroupRemoveUnitSimple( GetDyingUnit(), udg_CreepUnits[CreepIndex] ) call TriggerSleepAction( 30.00 ) set CreepLoc = GetRectCenter(udg_CreepsRegions[CreepIndex]) call CreateNUnitsAtLoc( 1, UT, Player(PLAYER_NEUTRAL_AGGRESSIVE), CreepLoc, bj_UNIT_FACING ) call GroupAddUnitSimple( GetLastCreatedUnit(), udg_CreepUnits[CreepIndex] ) call RemoveLocation(CreepLoc) set UT = 0 endfunction
//=========================================================================== function InitTrig_Creeps takes nothing returns nothing set gg_trg_Creeps = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Creeps, EVENT_PLAYER_UNIT_DEATH ) call TriggerAddCondition( gg_trg_Creeps, Condition( function Trig_Creeps_Conditions ) ) call TriggerAddAction( gg_trg_Creeps, function Trig_Creeps_Actions ) endfunction
Он воскрешает убитых крипов на их первоначальной локации. Тут присутствуют массивы - это группы юнитов и области в которых созданны юниты. Т.е. должен вокрешать. Но он почему то не работает. Прошу помоши у джассеров, помогите разобраться в чём проблема. Код простой, не трудно прочитать.
Сообщение отредактировал FatalBlade - Пятница, 22 Июля 2011, 15:41:35 |
|
|
|
FkoFF | Дата: Пятница, 22 Июля 2011, 15:51:31 | Сообщение # 2 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (FatalBlade) call TriggerSleepAction( 30.00 )
FFFFFFFFUUUUUUUUUU, вейты.
Да и условие гуевое. 1\10.
|
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 16:03:36 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (FkoFF) FFFFFFFFUUUUUUUUUU, вейты. Для таймера нужен ещё 1 триггер. Или можно как то создать паузу внутри триггера без вейта.
Quote (FkoFF) Да и условие гуевое. 1\10. Но ведь результат тот же.
|
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 16:23:51 | Сообщение # 4 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| FatalBlade, Если тебе надо воскрешать крипов группами то вот у меня в подписи наработка на воскрешение крипов. А вообще что это за код, ты говоришь лекго читается я вообще не могу понять что ты тут делаешь. Зачем проверять юнита есть ли он в группе, что это такое? Code if ( CreepIndex == 0 ) then return endif Зачем вообще такой триггер если тебе нужно сделать простое вокрешение убитого крипа на его исходной позиции, то попроси кого нибудь и тебе сделают или даже наработку скинут без этого Гкода.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 16:24:55 |
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 16:32:04 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) попроси кого нибудь и тебе сделают или даже наработку скинут без этого Гкода. Я не очень люблю вставлять чужие наработки в свою карту, потому что: 1) - Я не понимаю большинство из того что они написали, и поэтому если я захочу чтото изменить, то я не буду знать где что и как. 2) - Я хочу не просто чтоб мне всё сделали и всё тип топ, а что бы в следущий раз когда мне надо будет сделать чтото подобное, я уже буду знать как это сделать самому.
Quote (lawson) Code if ( CreepIndex == 0 ) then return endif
Зачем вообще такой триггер если тебе нужно сделать простое вокрешение убитого крипа на его исходной позиции Если индекс массива равен нулю, то остановить нынешнее действие триггера. На ГУИ - Skip Remaining Actions.
|
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 16:43:45 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) Я не понимаю большинство из того что они написали, и поэтому если я захочу чтото изменить, то я не буду знать где что и как. Это правильно. Значит попроси кого то тебе объяснить как это реализовать, а не скидывать сюда эти триггеры. Сначала напиши конкретно что ты хочешь сделать, а то что ты написал сильно расходится с кодом который ты выложил.
Добавлено (22-07-2011, 16:36) --------------------------------------------- Quote (FatalBlade) Если индекс массива равен нулю, то остановить нынешнее действие триггера Я про другое, что ты здесь возврашаещь а? return здесь зачем?Добавлено (22-07-2011, 16:43) --------------------------------------------- Еще раз говорю у меня в подписи есть СТАТЬЯ как вокрешать крипов там все елементарно написано и даже с объяснением.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 16:41:19 |
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 16:57:30 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) Еще раз говорю у меня в подписи есть СТАТЬЯ как вокрешать крипов там все елементарно написано и даже с объяснением. Этот код для каждой локации индивидуально???
Почему local trigger t = CreateTrigger() ??? Почему local a не set?
Сообщение отредактировал FatalBlade - Пятница, 22 Июля 2011, 17:01:05 |
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 16:59:30 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) Этот код для каждой локации индивидуально??? Как хочешь можешь сделать чтобы на исходной позиции респавнились или на любой другой.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 17:03:12 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) Как хочешь можешь сделать чтобы на исходной позиции респавнились или на любой другой. Я имею ввиду что для каждой локации в который респавнятся крипы нужно писать такой же код как у тебя? У меня 26 локаций где респавнятся крипы...
|
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 17:07:05 | Сообщение # 10 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) Я имею ввиду что для каждой локации в который респавнятся крипы нужно писать такой же код как у тебя? У меня 26 локаций где респавнятся крипы... Да для каждой локации просто повторять код, я же все описал в статье.
Добавлено (22-07-2011, 17:07) --------------------------------------------- set g = CreateGroup() call GroupEnumUnitsInRect(g, локация 1, null) if GetGroup(g) then call CreateUnitAtLoc(Player(PLAYER_NEUTRAL_AGGRESSIVE), 'otau', GetRectCenter(локация 1), 0) endif call DestroyGroup(g)
set g = CreateGroup() call GroupEnumUnitsInRect(g, локация 2, null) if GetGroup(g) then call CreateUnitAtLoc(Player(PLAYER_NEUTRAL_AGGRESSIVE), 'otau', GetRectCenter(локация 2), 0) endif call DestroyGroup(g)
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 17:08:11 |
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 17:08:02 | Сообщение # 11 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) Да для каждой локации просто повторять код, я же все описал в статье. У меня просто уже есть массив этих 26 локаций. Может как то можно с вспомогательным триггером регулировать индексы массива и сам массив в самом триггере?
|
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 17:10:33 | Сообщение # 12 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) У меня просто уже есть массив этих 26 локаций. Может как то можно с вспомогательным триггером регулировать индексы массива и сам массив в самом триггере? тогда через цикл set g = CreateGroup() call GroupEnumUnitsInRect(g, локации[i], null) if GetGroup(g) then call CreateUnitAtLoc(Player(PLAYER_NEUTRAL_AGGRESSIVE), 'otau', GetRectCenter(локации[i], 0) endif call DestroyGroup(g)
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
Include | Дата: Пятница, 22 Июля 2011, 17:14:52 | Сообщение # 13 |
2 уровень
Группа: Пользователи
Сообщений: 20
Награды: 0
Репутация: 0
Блокировки:
| FatalBlade, Code function Trig_Creeps_Conditions takes nothing returns boolean return GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) and GetDyingUnit() != gg_unit_h03E_0015 and GetDyingUnit() != gg_unit_h03E_0015 endfunction
function TimerCreep takes nothing returns nothing local timer t=GetExpiredTimer() local integer id=GetHandleId(t) local integer ci=LoadInteger(Hash,id,1) call GroupAddUnit(udg_CreepUnits[ci],CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),GetUnitTypeId(LoadUnitHandle(Hash,id,0)),GetRectCenterX(udg_CreepsRegions[ci]),GetRectCenterX(udg_CreepsRegions[ci]),bj_UNIT_FACING) ) set t=null endfunction function Trig_Creeps_Actions takes nothing returns nothing local timer t=CreateTimer() local integer id=GetHandleId(t) local integer i = 0 local unit u=GetTriggerUnit() local integer CreepIndex = 0 loop exitwhen i > 26 if IsUnitInGroup(u, udg_CreepUnits[i]) == true then set CreepIndex=i endif set i = i + 1 endloop call GroupRemoveUnit(udg_CreepUnits[CreepIndex],u) call SaveUnitHandle(Hash,id,0,u) call SaveInteger(Hash,id,1,CreepIndex) call TimerStart(t,2,false,function TimerCreep) set u=null set t=null endfunction
|
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 18:23:53 | Сообщение # 14 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| lawson, А почему call CreateUnitAtLoc а не call CreateNUnitsAtLoc ?
|
|
|
|
Include | Дата: Пятница, 22 Июля 2011, 18:47:30 | Сообщение # 15 |
2 уровень
Группа: Пользователи
Сообщений: 20
Награды: 0
Репутация: 0
Блокировки:
| FatalBlade, Забудь про локи я дал тебе рабочий код
|
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 19:57:26 | Сообщение # 16 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Include) FatalBlade, Забудь про локи я дал тебе рабочий код Он выдаёт кучу ошибок. Ему чёто не нравится Handle'ы и Hash'ы
|
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 19:59:07 | Сообщение # 17 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) Ему чёто не нравится Handle'ы и Hash'ы Там нужно создать хеш таблицу в глобальных переменных создай ее. (В нестандартном коду карты.)
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 20:00:21 |
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 20:07:58 | Сообщение # 18 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Думаешь я знаю как это делать? )))
|
|
|
|
lawson | Дата: Пятница, 22 Июля 2011, 20:13:11 | Сообщение # 19 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Редактор Триггеров - Нестандартый код карты прописываешь внизу hashtable Hash = InitHashtable()
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FatalBlade | Дата: Пятница, 22 Июля 2011, 20:19:01 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Пишет ошибку "Expected end of line"
|
|
|
|
Pa3apT | Дата: Понедельник, 25 Июля 2011, 12:41:01 | Сообщение # 21 |
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
| http://xgm.ru/forum/showthread.php?t=27452
|
|
|
|
xage | Дата: Понедельник, 25 Июля 2011, 12:43:33 | Сообщение # 22 |
1 уровень
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 1
Блокировки:
| ну ок, я тогда тоже порекламлю. http://xgm.ru/forum/showthread.php?t=20448
|
|
|
|