[Вопрос] Не работает код
|
|
Brut@lus | Дата: Воскресенье, 19 Февраля 2012, 20:16:48 | Сообщение # 1 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Помогите с кодом, не пойму, почему не работает. Суть в том чтобы при взрыве бочки (любой) на расстоянии 512 от ней враждебные умирали, а игрокам наносился урон: Code function Trig_barrels_Conditions takes nothing returns boolean return GetDestructableTypeId(GetDyingDestructable()) == 'LTex' endfunction
function Barrels_Loop takes nothing returns nothing local real life = GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) - 50.00 local player owner = GetOwningPlayer(GetEnumUnit()) local player tplayer = Player(PLAYER_NEUTRAL_AGGRESSIVE)
if ( owner == tplayer ) then call KillUnit( GetEnumUnit() ) else call SetUnitState(GetEnumUnit(), UNIT_STATE_LIFE, RMaxBJ(0,life)) endif
set owner = null set tplayer = null endfunction
function Trig_barrels_Actions takes nothing returns nothing set udg_l = Location(GetDestructableX(GetTriggerDestructable()), GetDestructableY(GetTriggerDestructable())) call ForGroup(GetUnitsInRangeOfLocAll (512, udg_l), function Barrels_Loop) endfunction
function InitTrig_barrels takes nothing returns nothing set gg_trg_barrels = CreateTrigger( ) call TriggerRegisterDestDeathInRegionEvent( gg_trg_barrels, gg_rct_ARENA_CRIPS_RUNS ) call TriggerAddCondition( gg_trg_barrels, Condition( function Trig_barrels_Conditions ) ) call TriggerAddAction( gg_trg_barrels, function Trig_barrels_Actions ) endfunction Добавлено (19 Февраль 2012, 20:16:48) --------------------------------------------- Кому не удобно читать, с подсветкой тут
Сообщение отредактировал Brut@lus - Воскресенье, 19 Февраля 2012, 20:09:35 |
|
|
|
SirNikolas | Дата: Воскресенье, 19 Февраля 2012, 20:25:20 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code function Trig_barrels_Actions takes nothing returns boolean local unit u call GroupEnumUnitsInRange(udg_Group, GetWidgetX(GetTriggerDestructable()), GetWidgetY(GetTriggerDestructable()), 512., null) loop set u = FirstOfGroup(udg_Group) exitwhen u == null call GroupRemoveUnit(udg_Group, u) if GetOwningPlayer(u) == Player(12) then call KillUnit(u) else call SetWidgetLife(u, GetWidgetLife(u) - 50.) endif endloop return false endfunction
function Trig_barrels_AddEvents_Filter takes nothing returns boolean return GetDestructableTypeId(GetFilterDestructable()) == 'LTex' endfunction
function Trig_barrels_AddEvents takes nothing returns nothing call TriggerRegisterDeathEvent(gg_trg_barrels, GetEnumDestructable()) endfunction
function InitTrig_barrels takes nothing returns nothing set gg_trg_barrels = CreateTrigger() call EnumDestructablesInRect(gg_rct_ARENA_CRIPS_RUNS, Filter(function Trig_barrels_AddEvents_Filter), function Trig_barrels_AddEvents) call TriggerAddCondition(gg_trg_barrels, Condition(function Trig_barrels_Actions)) endfunction Если не поможет, попробуй GetTriggerWidget().
Добавлено (19 Февраль 2012, 20:25:20) --------------------------------------------- Нужно создать глобальную Group.
Сообщение отредактировал SirNikolas - Воскресенье, 19 Февраля 2012, 20:39:36 |
|
|
|
Ty3uK | Дата: Воскресенье, 19 Февраля 2012, 20:26:59 | Сообщение # 3 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Ты пишешь на жассе, причем юзаешь бж на группу, в которой есть утечка? Смысл? Жизнь лучше получать через GetWidgetLife(), юнитов набирать через GrousEnumUnitsInRange() с нулевым фильтром, а вместо умирающего разрушаемого юзать триггер разрушаемое. Переписал бы весь код, но увы с телефона. Ждем других Добавлено (19 Февраль 2012, 20:26:59) --------------------------------------------- Не успел. Кстати, ник, можно юзать глобальную бж группу
|
|
|
|
SirNikolas | Дата: Воскресенье, 19 Февраля 2012, 20:27:33 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Какую? bj_lastCreatedGroup?
|
|
|
|
Ty3uK | Дата: Воскресенье, 19 Февраля 2012, 20:29:34 | Сообщение # 5 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| И, кстати, совмести условие и действие- режешь один поток (нет triggeraction) Добавлено (19 Февраль 2012, 20:29:34) --------------------------------------------- Вроде она. Не помню точно
|
|
|
|
SirNikolas | Дата: Воскресенье, 19 Февраля 2012, 20:31:02 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| У меня нет условий. Это фильтр для добавления события. Добавлено (19 Февраль 2012, 20:31:02) ---------------------------------------------
Quote (SirNikolas) bj_lastCreatedGroup В начале игры она равна null, принимает значение после ForGroupBJ, да и то, если не была использована bj_wantDestroyGroup. Безопаснее свою глобалку иметь.
|
|
|
|
Ty3uK | Дата: Воскресенье, 19 Февраля 2012, 20:32:14 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Почему бы его не совместить с действием? Добавлено (19 Февраль 2012, 20:32:14) --------------------------------------------- У тебя же тогда ни условия не будет, ни действия. Мечта D:
|
|
|
|
SirNikolas | Дата: Воскресенье, 19 Февраля 2012, 20:35:00 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Эм, посмотри внимательнее код. Действие в триггере у меня есть. А те две функции отвечают за регистрацию событий. Я подумал, что лучше разделить фильтр и callback. На таком примитивном уровне, как перебор destructable'ов, Близзы вряд ли могли сильно накосячить.
|
|
|
|
Ty3uK | Дата: Воскресенье, 19 Февраля 2012, 20:36:33 | Сообщение # 9 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Хм... Видимо, я не прав. Ну да ладно, главное, что код как обычно безупречен
|
|
|
|
SirNikolas | Дата: Воскресенье, 19 Февраля 2012, 20:37:31 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| А хотя ты прав. Вместо действия в триггер лучше добавить условие. Отредактировал.
Сообщение отредактировал SirNikolas - Воскресенье, 19 Февраля 2012, 20:39:02 |
|
|
|
Ty3uK | Дата: Воскресенье, 19 Февраля 2012, 20:38:09 | Сообщение # 11 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
|
|
|
|
|
Brut@lus | Дата: Понедельник, 20 Февраля 2012, 12:52:31 | Сообщение # 12 |
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
| Спасибо всем, клоз.
|
|
|
|