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

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

Закрытая тема
 
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Наверное самая быстрая функция по касту "тригерных" магий
В общем я наткнулся на это: тык
Мне это очень понравилось и я решил использовать эту системку у себя, но возникла 1 загвоздка.
Сначала код:
1-ый триг - собсно сама системка
» открыть
function Trig_SpellCasts_Conditions takes nothing returns boolean
    local string s = GetObjectName(GetSpellAbilityId())
    if SubString(s, 0, 4) == "Exec" then
        call ExecuteFunc(s)
    endif
    return false
endfunction

//===========================================================================
function InitTrig_SpellCasts takes nothing returns nothing
    local integer i = 0
    set gg_trg_SpellCasts = CreateTrigger(  )
    loop 
    exitwhen i > 15
        call TriggerRegisterPlayerUnitEvent(gg_trg_SpellCasts, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    set i = i + 1
    endloop
    call TriggerAddCondition( gg_trg_SpellCasts, Condition( function Trig_SpellCasts_Conditions ) )
endfunction
и 2-ой триггер пример
» open
function ExecThunderClap takes nothing returns nothing
    call ClearTextMessages()
    BJDebugMsg("Кастер: " + GetUnitName(GetTriggerUnit()))
    BJDebugMsg("Уровень применяемой способности: " + I2S(GetUnitAbilityLevel(GetTriggerUnit(), GetSpellAbilityId())))
endfunction

function ExecHammerOfStorms takes nothing returns nothing
    call ClearTextMessages()
    BJDebugMsg("Цель: " + GetUnitName(GetSpellTargetUnit()))
    BJDebugMsg("Уровень применяемой способности: " + I2S(GetUnitAbilityLevel(GetTriggerUnit(), GetSpellAbilityId())))
endfunction

function ExecPowerOfMountains takes nothing returns nothing
    call ClearTextMessages()
    BJDebugMsg("Кастер: " + GetUnitName(GetTriggerUnit()))
    BJDebugMsg("Уровень применяемой способности: " + I2S(GetUnitAbilityLevel(GetTriggerUnit(), GetSpellAbilityId())))
endfunction
Для тех кто не понял что эта системка делает - ссылочка выше. Собственно проблема в том, что 2-ой триггер пример требует функцию инициализации и отказывается обрабатывать такие нативки как GetSpellTargetUnit() GetSpellTargetLoc() GetSpellAbilityUnit() etc. В общем кто знает как заставить это чудо работать-прошу направить меня.
P.S. JNGP no c/v jass
Прикрепленные файлы
Тип файла: w3x TestSkils FastSystem.w3x (17.5 Кбайт, 1 просмотров )
Старый 14.10.2012, 12:07
YellowStar
poon
offline
Опыт: 15,144
Активность:
Занести в переменные нужные тебе значения.
Код:
globals
    widget SpellTarget
    unit    SpellCast
    real    SpellX
    real    SpellY
endglobals

с ними и работай
Старый 14.10.2012, 12:16
DioD

offline
Опыт: 45,134
Активность:
если используются ожидания где-либо в коде то надо делать вот так:
function Trig_SpellCasts_Conditions takes nothing returns boolean

if HashTable.IsPresent(GetSpellAbilityId()) then
	call SpellEvent.Allocate()
	call ExecuteFunc(HashTable.LastPresent)
andif
return false
endfunction

function ExecThunderClap takes nothing returns nothing
	local SpellEvent THIS = SpellEvent.Last()
    BJDebugMsg("Кастер: " + GetUnitName(THIS.Caster()))
    BJDebugMsg("Уровень применяемой способности: " + I2S(GetUnitAbilityLevel(THIS.Caster(), THIS.ID())))
endfunction
Я привык все результаты кешировать, советую делать также.
Суть такая, как только мы колдуем спелл на который существует обработчик, мы создаём событие с этим спеллом, в которое включаем все желаемые параметры и запускаем функцию обработчика, каждая функция во всех обработчиков должна начинаться с сохранения инстанса ивента, иначе после первого же вызова триггерслипа вылетит такая куча глюков, что вам и не снилось.

Отредактировано Doc, 14.10.2012 в 15:18.
Старый 14.10.2012, 12:51
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
DioD, ниче не понял расскажи это буржуям
YellowStar, Боюсь багов так как будет около 150+ спеллов и 50+ из них на таймерах/периодиках. То есть данные могут перезаписаться. Хотя возможно и так придется.
Старый 14.10.2012, 13:18
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Sladkoegka, тут либо хеш (что порой не очень, но вполне нормально), либо vjass'совские структуры и ресайклы типа timer utils и тп...
Старый 14.10.2012, 14:45
adic3x

offline
Опыт: 108,439
Активность:
cJass предлагает более правильный подход:
callback onUnitSpellCast ('A000') {
    // Сработает при колдовстве заклинания 'A000'
}

callback onUnitSpellCast () {
    // Сработает при любом колдовстве
    // Дополнительные проверки можно сделать тут через if
}

#define MY_SPELL_ID = 'A000'

callback onUnitSpellCast (MY_SPELL_ID) {
    // Можно так
}

int SpellId = 'A000'

callback onUnitSpellCast (SpellId) {
    // И даже так, при этом можно менять значение переменной, все будет корректно
}
При это cJass будет стараться сделать все максимально эффективно, будет создан 1 триггер, и не будет лишних проверок.
Старый 14.10.2012, 15:38
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ADOLF, автор отвергает c\v jass, поэтому этот "подход" исключён...
Старый 14.10.2012, 15:46
Темак
jass for everyone
offline
Опыт: 7,200
Активность:
ADOLF:
callback
где можно почитать про это?
Temak1 добавил:
quq_CCCP:
автор отвергает c\v jass, поэтому этот "подход" исключён...
я - нет, так что расскажи мне)
Старый 14.10.2012, 16:02
Doc

offline
Опыт: 63,163
Активность:
ADOLF, только там короче иногда падает поток и становится очень печально, насколько я помню. Либо просто что-то неправильно компилится.
Старый 14.10.2012, 16:07
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Sladkoegka, Sladkoegka:
P.S. JNGP no c/v jass
Ну а как тогда это понимать?
Старый 14.10.2012, 16:10
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
quq_CCCP, Doc, Temak1, ADOLF,
Да у вас тут своя атмосфера...Кто нить знает варианты решения?
Старый 14.10.2012, 16:49
Doc

offline
Опыт: 63,163
Активность:
Sladkoegka, да. И ВНИМАНИЕ: тебе их уже сказали.
Старый 14.10.2012, 16:57
Sladkoegka
Забыл что хотел...
offline
Опыт: 7,477
Активность:
Doc, единственный адекватный ответ был от YellowStar, но я надеюсь что есть варианты лучше...
Старый 14.10.2012, 17:24
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Sladkoegka, адекватные ответы во 2,3 и 6 постах
научитесь понимать что вам пишут
Старый 14.10.2012, 17:30
Закрытая тема

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

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

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

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



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