XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Абель

offline
Опыт: 149
Активность:
Система отлова урона
Здравствуйте, появился вопрос по поводу довольно-таки популярной темы - "Отлов урона". Я создал свою систему с помощью моего друга, и захотел узнать ваше мнение по поводу неё. Итак, вот код:
» code
library UnitDamageSystem initializer Init

function UnitDamageSystem_Conditions takes nothing returns boolean
return GetEventDamage() > 0.
endfunction

function UnitDamageSystem_Actions takes nothing returns nothing
local unit Caster = GetEventDamageSource()
local unit Target = GetTriggerUnit()
local real Damage = GetEventDamage()

set Caster = null
set Target = null
endfunction

function UnitDamageSystemRemove takes unit Caster returns nothing
local integer Handle = GetHandleId(Caster)


call TriggerRemoveAction(LoadTriggerHandle(Hashtable,Handle,StringHash("Unit Damage System Trigger")),LoadTriggerActionHandle(Hashtable,Handle,StringHash("Unit Damage System Action")))
call TriggerClearActions(LoadTriggerHandle(Hashtable,Handle,StringHash("Unit Damage System Trigger")))
call TriggerClearConditions(LoadTriggerHandle(Hashtable,Handle,StringHash("Unit Damage System Trigger")))
call DestroyTrigger(LoadTriggerHandle(Hashtable,Handle,StringHash("Unit Damage System Trigger")))

call RemoveSavedHandle(Hashtable,Handle,StringHash("Unit Damage System Trigger"))
call RemoveSavedHandle(Hashtable,Handle,StringHash("Unit Damage System Action"))
endfunction

function UnitDamageSystem_Add takes unit Caster returns nothing
local integer Handle = GetHandleId(Caster)
local trigger Trigger = CreateTrigger()

call UnitDamageSystemRemove(Caster)
call TriggerRegisterUnitEvent(Trigger,Caster,EVENT_UNIT_DAMAGED)
call TriggerAddCondition(Trigger, Condition(function UnitDamageSystem_Conditions))
call SaveTriggerActionHandle(Hashtable,Handle,StringHash("Unit Damage System Action"),TriggerAddAction(Trigger, function UnitDamageSystem_Actions))
call SaveTriggerHandle(Hashtable,Handle,StringHash("Unit Damage System Trigger"),Trigger)

set Trigger = null
endfunction

private function Init takes nothing returns nothing
local group Group = CreateGroup()
local unit Picked = null

call GroupEnumUnitsInRect(Group,gg_rct_All_Map,null)

loop
set Picked = FirstOfGroup(Group)
exitwhen Picked == null
call UnitDamageSystem_Add(Picked)
endloop

call DestroyGroup(Group)
set Group = null
set Picked = null
endfunction
endlibrary
Старый 25.06.2011, 15:08
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Clamp добавил:
Было же
Clamp добавил:
только без хеша и в меньше строк
Clamp добавил:
и проще в использовании.
алсо я тоже думал в хеш триггеры писать, но там куча лишних аргументов возникает
Старый 25.06.2011, 15:46
Абель

offline
Опыт: 149
Активность:
У меня лвл маленький, но я не крэб.
так что по поводу исполнения?
Старый 25.06.2011, 15:47
Doc

offline
Опыт: 63,163
Активность:
Зачем так сложно, я делал бз хеша, опять же посмотри систему клампа.
Старый 25.06.2011, 15:50
Абель

offline
Опыт: 149
Активность:
Клампова система не удаляет крипов, плюс каждый должен хоть раз попробовать сделать её сам.
А как удалять, если не через хеш.
Система утечна, учитывая удаления?
Старый 25.06.2011, 16:00
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Абель:
Клампова система не удаляет крипов
лолвут, откуда?
ещё скажи "он не чистит события", заклеймлю раковым.
Старый 25.06.2011, 16:02
Doc

offline
Опыт: 63,163
Активность:
Абель, а тебе не хватает одного триггера на всех?
Старый 25.06.2011, 16:15
Helpmeplz

offline
Опыт: 11,738
Активность:
какой профит делать отлов урона через динамические триггеры?
несколько раз тестил - создавал ~100000 юнитов которые регистрировались на получение урона в один триггер. не было ни одного лага и это при том, что карта не пустая и система отлова законченная с проверкой ~30 параметров юнита.
на компьютере местами тормозит даже дота.
Старый 25.06.2011, 16:22
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:35.