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

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

Закрытая тема
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
GetSpellAbilityId выводит ноль
private void Init() {
    trigger t = CreateTrigger()
    //Sound = CreateSoundFromLabel("InterfaceError", false, false, false, 200, 200) 
    TriggerRegisterPlayerUnitEvent(t,Player(0),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
    TriggerRegisterPlayerUnitEvent(t,Player(1),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
    TriggerAddAction(t, function OnAttack)
    TriggerAddCondition(t, lambda bool() {  
        BJDebugMsg(I2S(GetSpellAbilityId()))
        BJDebugMsg(I2S(WaitId))
        IssueImmediateOrder(GetTriggerUnit(),"stop") //остановка повторного каста канала
        SetUnitAnimation(GetTriggerUnit(),"stand") 
        return true })
    t=null }
Собственно недавно начался чудной танец с бубном, дебаг постоянно выдает на кастовую абилку 0, хотя это не так ._.
В чем может быть дело то? просто никак не могу сделать сравнение:
return (GetSpellAbilityId()!=WaitId)
постоянно возвращает тру хотя не должен -.-
Старый 27.08.2010, 14:50
ScorpioT1000
Работаем
offline
Опыт: отключен
покажи конечный код
Старый 27.08.2010, 15:57
JassMan
свободен
offline
Опыт: 4,193
Активность:
так ты Id выводи в функции OnAttack
Старый 27.08.2010, 17:48
Doc

offline
Опыт: 63,163
Активность:
JassMan, с чего ты взял?
Старый 27.08.2010, 18:16
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
так ты Id выводи в функции OnAttack
Еще раз и по русски, в смысле вводи? мне нужно просто чтобы спел с равкодом из дефайна WaitId не срабатывал.
ScorpioT1000, с одной стороны просто, с другой это конечный код + новая ветка вызовов, а в ней еще =O
» full_scope
scope Attack initializer Init
private void OnAttack() {
    Main M = INT
    unit u = GetTriggerUnit()
    player p = GetTriggerPlayer()
    int i = GetSpellAbilityId()
    if i==CancelId then
        Kill_Squares()
        BoolMove = true
        Add_Basic_Skills(u)
        UnitRemoveAbility(u,CancelId)
        if M.cmp > 0 then
            Range_Create(Return_Rect(GetUnitX(u),GetUnitY(u)),M.cmp,true)
        endif
    elseif M.ac==true then
        Kill_Squares()
        BoolMove = false
        SPELLID = i
        UnitAddAbility(u,CancelId)
        Remove_Basic_Skills(u)
        if i==SlashId then
            Line_Create(Return_Rect(GetUnitX(u),GetUnitY(u)),8)
        elseif i==SpearId then
            Line_Create(Return_Rect(GetUnitX(u),GetUnitY(u)),2)
        elseif i==AttackId or i==ArmorId or i==RepeateId then
            Range_Create(Return_Rect(GetUnitX(u),GetUnitY(u)),1,false)
        elseif i==WaveId then
            Range_Create(Return_Rect(GetUnitX(u),GetUnitY(u)),3,false)
        else
            Range_Create(Return_Rect(GetUnitX(u),GetUnitY(u)),6,false)
        endif
    else
        if (GetLocalPlayer()==p) { ClearTextMessages() }
        DisplayTimedTextToPlayer(p, 0.60, -2.00, 2.00, "|cffffcc00Вы исчерпали возможность атаковать.|r")
        StartSound(Sound)
    endif
    u=null }

private void Init() {
    trigger t = CreateTrigger()
    Sound = CreateSoundFromLabel("InterfaceError", false, false, false, 200, 200)
    TriggerRegisterPlayerUnitEvent(t,Player(0),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
    TriggerRegisterPlayerUnitEvent(t,Player(1),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
    TriggerAddAction(t, function OnAttack)
    TriggerAddCondition(t, lambda bool() {  
        BJDebugMsg(I2S(GetSpellAbilityId()))
        BJDebugMsg(I2S(WaitId))
        IssueImmediateOrder(GetTriggerUnit(),"stop")
        SetUnitAnimation(GetTriggerUnit(),"stand")
        return 1==1 })
    t=null }
endscope
Всего отловом каста спела у меня 2, вот еще:
» full_scope_to_find_wait
scope Wait initializer Init
    
private void Actions() {
    eventid i = GetTriggerEventId()
    wait_bool = false
    if i==EVENT_PLAYER_ARROW_LEFT_DOWN then
        SetUnitFacing(UNIT, 180.00)
    elseif i==EVENT_PLAYER_ARROW_RIGHT_DOWN then
        SetUnitFacing(UNIT, 0.00)
    elseif i==EVENT_PLAYER_ARROW_DOWN_DOWN then
        SetUnitFacing(UNIT, 270.00)
    elseif i==EVENT_PLAYER_ARROW_UP_DOWN then
        SetUnitFacing(UNIT, 90.00)
    endif 
    if (GetLocalPlayer()==PLAYER) { ClearTextMessages() }
    Main.End_Turn_Timed(0.5) }
    
private void Init () {
    trigger t = CreateTrigger()
    trigger t2 = CreateTrigger()
    TriggerRegisterPlayerEvent( t, Player(0), EVENT_PLAYER_ARROW_LEFT_DOWN)
    TriggerRegisterPlayerEvent( t, Player(0), EVENT_PLAYER_ARROW_RIGHT_DOWN)
    TriggerRegisterPlayerEvent( t, Player(0), EVENT_PLAYER_ARROW_UP_DOWN)
    TriggerRegisterPlayerEvent( t, Player(0), EVENT_PLAYER_ARROW_DOWN_DOWN)
    TriggerRegisterPlayerEvent( t, Player(1), EVENT_PLAYER_ARROW_LEFT_DOWN)
    TriggerRegisterPlayerEvent( t, Player(1), EVENT_PLAYER_ARROW_RIGHT_DOWN)
    TriggerRegisterPlayerEvent( t, Player(1), EVENT_PLAYER_ARROW_UP_DOWN)
    TriggerRegisterPlayerEvent( t, Player(1), EVENT_PLAYER_ARROW_DOWN_DOWN)
    TriggerAddAction( t, function Actions)
    TriggerAddCondition( t, lambda bool() { return GetTriggerPlayer()==PLAYER and wait_bool==true } ) 
    
    TriggerRegisterPlayerUnitEvent(t2,Player(0),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
    TriggerRegisterPlayerUnitEvent(t2,Player(1),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
    TriggerAddAction(t2, lambda void() { 
        if Count>0 { Kill_Squares() }
        Waiting(GetTriggerUnit()) })
    TriggerAddCondition(t2,lambda bool() { return GetSpellAbilityId()==WaitId }  )
    t=null
    t2=null }
endscope
AlexKARASb добавил:
У меня было простое решение данной проблемы путем отсеивания ифами в функции OnAttack.
Но суть не в этом, если появится нужда в следующем использовании данного события то будет геморой и дальше добавлять новую ветку ифов
Старый 27.08.2010, 19:42
JassMan
свободен
offline
Опыт: 4,193
Активность:
еще раз говорю выводи дебугами свой Id в функции OnAttack
тоесть ты выводи Id при создании событий и прочего а надо чтобы GeSpellAbilityId() срабатывал по событию, тоесть после того как сработает триггер вот в нём и будет работать твой GeSpellAbilityId()
Я конечно могу чего и путать в сJass, но если это то что я представляю в обычном Jass, тогда всё правильно сказал. . .
Старый 27.08.2010, 20:00
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
тоесть ты выводи Id при создании событий и прочего а надо чтобы GeSpellAbilityId() срабатывал по событию, тоесть после того как сработает триггер вот в нём и будет работать твой GeSpellAbilityId()
попрошу еще раз сказать понятным языком. Пока что у меня выражение лица после прочитанного такое: ._.
Кодом опиши тогда, если выразить мысль тяжко. Неважно на каком синтаксисе
Старый 27.08.2010, 20:03
ZeToX2007

offline
Опыт: 7,009
Активность:
AlexKARASb:
TriggerAddCondition(t, lambda bool() {
BJDebugMsg(I2S(GetSpellAbilityId()))
BJDebugMsg(I2S(WaitId))
IssueImmediateOrder(GetTriggerUnit(),"stop") остановка повторного каста канала
SetUnitAnimation(GetTriggerUnit(),"stand")
return true })
Это другая функция вот 0 и выводит.
Старый 27.08.2010, 21:06
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Это другая функция
T_T это кондишн спела, который должен возвращать логическую и нормально работать с равкодами.
пример:
bool -.-() { return GetSpellAbilityId()==RAWCODE }

void T_T() { 
trigger t=CreateTrigger()
TriggerRegisterPlayerUnitEvent(t,Player(0),EVENT_PLAYER_UNIT_SPELL_CAST,null)
TriggerAddCondition(t,Condition(function -.-))
t=null}
Неужели никто не даст дельный совет? или догадку или преположение или любую наводку ._.
Старый 27.08.2010, 21:13
Doc

offline
Опыт: 63,163
Активность:
попробуй без лямбды мб.
Старый 27.08.2010, 21:55
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
AlexKARASb, поверь, вар своеобразен. Он может внезапно отказаться выводить значение этой функции на экран, но работать с ним в условии. Попробуй проверь в функции onAttack.
Старый 27.08.2010, 22:14
ScorpioT1000
Работаем
offline
Опыт: отключен
я говорю конечный jass-код: открой карту через winmpq, вынь war3map.j, найди кусок этого кода и выложи)
Старый 27.08.2010, 22:27
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Попробуй проверь в функции onAttack.
проверил и работает, но это то я знал, тк там сравниваются и другие равкоды
Он может внезапно отказаться выводить значение этой функции на экран, но работать с ним в условии
и не выводится и не работает в кондишене
попробуй без лямбды мб.
неа ._.
найди кусок этого кода и выложи)
все функции написаны в нестандартном коде и каждая вызывает соседнюю => весь код копировать .-.
Ну в принципе проблему решил проверкой в ОнАттак, но все же узнать где клад зарыт интересно.
Хм Хел прав, jass неповторим, только что сохранив карту ничего не меняя условие зароботало. Бредятина. Ну да ладно
Можно закрыть

Отредактировано AlexKARASb, 27.08.2010 в 23:52.
Старый 27.08.2010, 23:36
JassMan
свободен
offline
Опыт: 4,193
Активность:
function Trig_My_Trig_Actions takes nothing returns nothing
call BJDebugMsg(I2S(GetSpellAbilityId())) //Вот тут он его выведет на экран без проблем
endfunction

function InitTrig_My_Trig takes nothing returns nothing
set gg_trg_My_Trig=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_My_Trig,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddAction(gg_trg_My_Trig,function Trig_My_Trig_Actions)
call BJDebugMsg(I2S(GetSpellAbilityId())) //Какой смысл проверять Id в этой функции? Когда это надо делать в функции выше. Так как GetSpellAbilityId() срабатывает от события. А это возможно только в выше указанной функции.
endfunction
Надеюсь ты меня понял теперь . . .
И надеюсь, что, хоть я и не разбираюсь особо в вашем синтаксисе, но понял вроде в чём проблема. . .
Но если это не так, то не пинайте )
Старый 28.08.2010, 09:47
ScorpioT1000
Работаем
offline
Опыт: отключен
JassMan, лямбда и создает функцию выше, видишь там фигурные скобки
Старый 28.08.2010, 22:52
Закрытая тема

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

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

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

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



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