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

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

Ответ
 
Ksan

offline
Опыт: 13,248
Активность:
Отлов урона

Внимание

Текущая вресия: 0.06
Данная наработка позволяет отлавливать нанесенный урон и вставлять (создавать) ГУИ (!) действия.
Для импорта скопировать все триггеры, а так же глобалку Hash
Действия нужно вставлять (создавать) до коммента "-----"

Плюсы

  1. Возможны действия на ГУИ!
  2. Безутечна
  3. Способна выдержать большое количество юнитов [скрин]
  4. Не требует жнгп (нету всяческих private, globals, library и тд)
  5. Используется только 1 глобалка хеш-таблица
  6. Нету "чистого жасса" - только кастом скрипты (разобраться будет проще)

Минусы

  1. Работает только на патче 124+
  2. Тригг TakeDmg должен быть над триггом TakeAttack
  3. Забита хеш-ячейка юнита 999
  4. Триггеры нельзя переименовывать

» Changelog
v0.01
Система создана. Тестируется
v0.02
Теперь нету бесполезного мусора (ф-ции) © reALien
v0.03
Сделал вывод текста через гуи; упростил вставку действий для новичков (теперь нужно вставлять между двумя коментами "-----")
v0.04
Координально изменил отлов юнитов, которые могут получать урон
v0.05
Удалил утечку (дестрой триггер для умершего юнита)
v0.06
Удалил еще 1 утечку - для мертвых создавался триггер

Прикрепленные файлы
Тип файла: w3x Dmg v0.01.w3x (17.9 Кбайт, 34 просмотров )
Тип файла: w3x Dmg v0.02.w3x (17.8 Кбайт, 25 просмотров )
Тип файла: w3x Dmg v0.03.w3x (17.8 Кбайт, 26 просмотров )
Тип файла: w3x Dmg v0.04.w3x (17.9 Кбайт, 17 просмотров )
Тип файла: w3x Dmg v0.05.w3x (17.9 Кбайт, 23 просмотров )
Тип файла: w3x Dmg v0.06.w3x (18.0 Кбайт, 208 просмотров )

Отредактировано Ksan, 02.09.2010 в 18:30.
Старый 22.08.2010, 16:08
П4ела
Сэр. Кухня горит. Снова.
offline
Опыт: 35,447
Активность:
А где сможет помочь твоя система?
Старый 22.08.2010, 16:12
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
баян и этим всё сказано
Старый 22.08.2010, 16:13
Ksan

offline
Опыт: 13,248
Активность:
П4ела, кому что надо.
Во-первых: согласись, людям не знающим жасса проще просто вставить гуи действия, чем спрашивать: "А как сделать, что бы давало столько же золота, сколько урона нанесено?"
Во-вторых: замечал много тем с вопросом: "Как отловить урон?"
Старый 22.08.2010, 16:14
reALien

offline
Опыт: 29,211
Активность:
function Trig_TakeDmg_Actions takes nothing returns nothing
    endfunction
    // -------------------------------------------------
    function Trig_Dmg_RmvTrg takes nothing returns nothing
    local timer Tmr = GetExpiredTimer()
    local trigger Trg = LoadTriggerHandle(udg_Hash, GetHandleId(Tmr), 1)
    call FlushChildHashtable(udg_Hash, GetHandleId(Tmr))
    call DestroyTimer(Tmr)
    set Tmr = null
    call DestroyTrigger(Trg)
    set Trg = null
    endfunction
Trig_TakeDmg_Actions бесполезным мусором выходит при таком раскладе
Старый 22.08.2010, 16:15
Ksan

offline
Опыт: 13,248
Активность:
баян и этим всё сказано
Если ты считаешь свою систему отлова гуи совершенной - пожалуйста, но твоя утечна, а моя - нет.
reALien, я сейчас эксперементирую, скорей всего "бесполезный мусор" станет "полезным", да и пустая ф-ция не загружает память
Ksan добавил:
Обновил 1 пост. В частности загрузил версию 0.02
Ksan добавил:
Добавил версию 0.03 - изменения в ченжлоге
Старый 22.08.2010, 16:31
XOR

offline
Опыт: 38,159
Активность:
Ksan:
Блок TestComands (с TestComands до EndTestComands) можно (и нужно) удалить. Он сделан лишь для наглядности.
Ну и удали.
  1. Возможны действия на ГУИ!
Это д.б. круто?
  1. Не требует жнгп (нету всяческих private, globals, library и тд)
если не умеете ими пользоваться так и скажите.
  1. Используется только 1 глобалка хеш-таблица
хеш-таблица быстрее и работает на всех патчах что ли?
  1. Нету "чистого жасса" - только кастом скрипты (разобраться будет проще)
Кому? Полным нубам?
  1. Используется целая (!) 1 глобалка
no comments
приз за гениальность в барахолке выдать? Извините не сдержался)
Старый 22.08.2010, 16:46
Ksan

offline
Опыт: 13,248
Активность:
XimikS:
Ну и удали.
Уже
Это д.б. круто?
Для людей, не знающих кс и жасс - да
если не умеете ими пользоваться так и скажите.
Это плюс, потому что многие мапмейкеры не знают даже о жнгп
хеш-таблица быстрее и работает на всех патчах что ли?
Работает не на всех. Добавил минусы
Кому? Полным нубам?
Людям, разбирающимся в кс
Используется целая (!) 1 глобалка
no comments
Кто-то считает это sehr schlecht
Старый 22.08.2010, 17:16
JassMan
свободен
offline
Опыт: 4,193
Активность:
Да, Ksan, опять тебя не оценили))
Впрочем, могу сказать, что я бы написал чуток по лучше код (более быстродейственный)
Старый 22.08.2010, 18:12
Ksan

offline
Опыт: 13,248
Активность:
JassMan, канешн те, кто может написать жасс систему, не оценят систему для гуи. Но я-то сделал систему не для них, а для людей, не знающих о жнгп и не смыслящих в жассе, кс и\или осваивающих жасс, кс.
JassMan:
Впрочем, могу сказать, что я бы написал чуток по лучше код (более быстродейственный)
  1. Для гуи?
  2. Не юзая в\сЖасс, приват, глобалс, лайбрари?
Старый 22.08.2010, 18:16
SpiritWolf
Зеленый
offline
Опыт: 20,954
Активность:
JassMan, ну так напиши, кто тебе мешает?
Старый 08.09.2010, 10:13
respect_gg

offline
Опыт: 3,950
Активность:
Вот какую проблему обнаружил :
Если героя (триггерного) начали атаковать и применили на него заклинание (прим. "Молот бурь"), героя как обычно получит урон (от "Молот бурь"), но при следующей атаке его здоровье восстановится, в размере урона, полученного от "Молот бурь".
Надеюсь объяснил доступным языком. Если чего то будет не понятно, то сохраню реплей.
Вот в общем часть кода, где и происходит действие, остальное не подвергалось изменениям :
function Trig_TakeDmg_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local integer id1 = 'B003'
    local real d = GetEventDamage()
    local unitstate t = UNIT_STATE_LIFE
    if GetUnitAbilityLevel(u,id1)>0 then
    call SetUnitState(u,t, GetUnitState(u,t)+(d*(0.10*GetUnitAbilityLevel(u,'A00C'))))
    else
    endif
    set u = null
    endfunction
    // /////////////////////////

function Trig_TakeDmg_Filter takes nothing returns boolean
    return ((LoadTriggerHandle(udg_Hash, GetHandleId(GetFilterUnit()), 999) == null) and (GetWidgetLife(GetFilterUnit()) >= 0.405))
endfunction
    
function Trig_TakeDmg_Pick takes nothing returns nothing
    local trigger Trg = CreateTrigger()
    call TriggerRegisterUnitEvent(Trg, GetEnumUnit(), EVENT_UNIT_DAMAGED)
    call TriggerAddAction(Trg, function Trig_TakeDmg_Actions)
    call SaveTriggerHandle(udg_Hash, GetHandleId(GetEnumUnit()), 999, Trg)
    set Trg = null
endfunction

//===========================================================================
function InitTrig_TakeDmg takes nothing returns nothing
    set gg_trg_TakeDmg = CreateTrigger(  )
    call TriggerAddAction( gg_trg_TakeDmg, function Trig_TakeDmg_Actions )
endfunction

Отредактировано respect_gg, 23.09.2010 в 01:40.
Старый 23.09.2010, 01:28
Ответ

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

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

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

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



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