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

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

Ответ
 
PainKonan

offline
Опыт: 227
Активность:
Помогите с PlayerChatEvent
Я создаю триггер с событием, игрок от 0 до 12 - вводит -st,
на каждом этапе провожу отладку, в итоге юнит создается только в центре карты, т.е. отладка работает только на 1 строчки (только событие верно)
МНе нужно чтобы при вводе -st проводилась проверка, есть ли у героя способность и какой это тип юнита, если все верно, то выводить сообщение с информацией об уроне способности.
вот
function Trig_st_Actions takes nothing returns nothing
    call CreateUnit(Player(0),'u000',GetRectCenterX(GetPlayableMapRect()),GetRectCenterY(GetPlayableMapRect()​), 90.00)
    local player p = GetTriggerPlayer()
    local unit u
    set p = GetOwningPlayer(u)
    call CreateUnit(p,'u000',GetRectCenterX(gg_rct_Creeps1),GetRectCenterY(gg_rct_Creeps1), 90.00)
    if (GetUnitAbilityLevelSwapped('A000', u) != 0)  and  (GetUnitTypeId(u) == 'H001') then
    call CreateUnit(p,'u000',GetRectCenterX(gg_rct_Creeps1),GetRectCenterY(gg_rct_Creeps1), 90.00)
    call DisplayTimedTextToPlayer( p, 0, 0, 5, "\n\n\n\n                                                                                " + "|cffffcc00Урон от первой способности составляет:|r" + "\n\n\n\n\n\n\n\n\n\n\n\n")
    endif
endfunction

//===========================================================================
function InitTrig_st takes nothing returns nothing
    set gg_trg_st = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(1), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(2), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(3), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(4), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(5), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(7), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(8), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(9), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(10), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(11), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(12), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(0), "-st", true )
    call TriggerRegisterPlayerChatEvent( gg_trg_st, Player(6), "-st", true )
    call TriggerAddAction( gg_trg_st, function Trig_st_Actions )
endfunction
Старый 16.04.2014, 20:33
Tobi123

offline
Опыт: 7,826
Активность:
Вы знаете, что локалки объявляются только в начале функции, все остальные действия должны идти после объявления локальных переменных.
Tobi123 добавил:
А u то не задан кстати. И скобка не закрыта. Как вы вообще карту запустили с такими синтаксическими ошибками?
Старый 16.04.2014, 20:43
PainKonan

offline
Опыт: 227
Активность:
Tobi123, да, это я случайно добавил, проблема не в этом, если что) я механизм не могу понять
Старый 16.04.2014, 20:43
Srezi
Гость
Опыт: n/a
У него мудрёж с локалками и локалкам не присвоены данные.
Srezi добавил:
local player p = GetTriggerPlayer() установил игрока
local unit u создал переменную без данных
set p = GetOwningPlayer(u) сделал владельца переменной, которая пустая
call CreateUnit(p,'u000',GetRectCenterX(gg_rct_Creeps1),GetRectCenterY(gg_rct_Creeps1), 90.00) создаешь для несуществующего игрока юнита...
дальше конечно всё накрывается...
if (GetUnitAbilityLevelSwapped('A000', u) != 0) and (GetUnitTypeId(u) == 'H001') then
call CreateUnit(p,'u000',GetRectCenterX(gg_rct_Creeps1),GetRectCenterY(gg_rct_Creeps1), 90.00)
call DisplayTimedTextToPlayer( p, 0, 0, 5, "\n\n\n\n " + "|cffffcc00Урон от первой способности составляет:|r" + "\n\n\n\n\n\n\n\n\n\n\n\n")
endif
________________
пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ...
Старый 16.04.2014, 21:23
PainKonan

offline
Опыт: 227
Активность:
Srezi,
как мне тогда все это проверить?
переменные можно же не задавать сразу
игрок вводит этот текст, нужно проверить, есть ли у этого игрока герой, у которого имеется определенная способность, если да - делать действия
если нет - ничего
а юнитов создавал, для отладки, то что перед локалками создал - это фейл конечно
Старый 16.04.2014, 21:38
nvc123
new status
offline
Опыт: 59,284
Активность:
надо хранить героя в массиве где индекс будет являться номером игрока
Старый 19.04.2014, 11:52
PainKonan

offline
Опыт: 227
Активность:
все, сделал, получилось так: (все работает), сойдет?
function Trig_st_Conditions takes nothing returns boolean
    if ( not ( GetLearnedSkillBJ() == 'A000' ) ) then
        return false
    endif
    return true
endfunction

function text takes nothing returns nothing
    local integer lvl = GetUnitAbilityLevel(udg_st[0],'A000')
    local real int = GetHeroInt(udg_st[0],true)
    local real damage = ((30+30*lvl)+(0.6+0.4*lvl)*int)
    call DisplayTimedTextToForce( GetForceOfPlayer(GetOwningPlayer(udg_st[0])), 3.00, ( "Урон от первой способности составляет: " + R2SW(damage,0,1) ) )
endfunction

function Trig_st_Actions takes nothing returns nothing
    if ( GetUnitAbilityLevelSwapped('A000', GetTriggerUnit()) == 1) then
    set udg_st[0] = GetLearningUnit()
    local trigger t
    set t = CreateTrigger()
    call TriggerRegisterPlayerChatEvent( t, GetOwningPlayer(udg_st[0]), "-st", true )
    call TriggerAddAction( t, function text)
    set t = null
    endif
endfunction

//===========================================================================
function InitTrig_st takes nothing returns nothing
    set gg_trg_st = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_st, EVENT_PLAYER_HERO_SKILL )
    call TriggerAddCondition( gg_trg_st, Condition( function Trig_st_Conditions ) )
    call TriggerAddAction( gg_trg_st, function Trig_st_Actions )
endfunction
Старый 19.04.2014, 19:46
nvc123
new status
offline
Опыт: 59,284
Активность:
боже(
function Trig_st_Conditions takes nothing returns boolean
    return GetLearnedSkill() == 'A000'
endfunction

function text takes nothing returns nothing
    local integer lvl = GetUnitAbilityLevel(udg_st[0],'A000')
    local real int = GetHeroInt(udg_st[0],true)
    local real damage = ((30+30*lvl)+(0.6+0.4*lvl)*int)
    call DisplayTimedTextToPlayer(GetOwningPlayer(udg_st[0]),0.8,0,3.00,"Урон от первой способности составляет: "+R2SW(damage,0,1))
endfunction

function Trig_st_Actions takes nothing returns nothing
    local trigger t
    if (GetUnitAbilityLevel(GetTriggerUnit(),'A000')==1) then
    set udg_st[0] =GetLearningUnit()
    set t = CreateTrigger()
    call TriggerRegisterPlayerChatEvent( t, GetOwningPlayer(udg_st[0]), "-st", true )
    call TriggerAddAction( t, function text)
    set t = null
    endif
endfunction

//===========================================================================
function InitTrig_st takes nothing returns nothing
    set gg_trg_st = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_st, EVENT_PLAYER_HERO_SKILL )
    call TriggerAddCondition( gg_trg_st, Condition( function Trig_st_Conditions ) )
    call TriggerAddAction( gg_trg_st, function Trig_st_Actions )
endfunction
и не используй int в качестве названий ибо могут случиться проблемы при компиляции
nvc123 добавил:
и это не муи
Старый 20.04.2014, 13:53
PainKonan

offline
Опыт: 227
Активность:
nvc123, я знаю, что это не муи
я только способности на муи пишу, ибо в данном коде нет смысла использовать муи, потому что лишь один герой в игре у одного игрока с такой способностью. т.е. я лишь создаю тект с выводом информации о способности.
почему нельзя в данном случае так оставить?
Старый 20.04.2014, 14:13
nvc123
new status
offline
Опыт: 59,284
Активность:
PainKonan, я вроде скинул код
Старый 20.04.2014, 16:35
PainKonan

offline
Опыт: 227
Активность:
nvc123, прости, с телефона не заметил)
спасибо большое, понял где ошибки)
Старый 20.04.2014, 16:59
nvc123
new status
offline
Опыт: 59,284
Активность:
PainKonan, если это не муи то нафиг массив
можно просто переменную
Старый 21.04.2014, 16:37
PainKonan

offline
Опыт: 227
Активность:
nvc123, будет несколько разных героев, с разными текстами для вывода
я потом перестрою условие, чтобы все было в одном триггере
тему можно закрыть. всем спасибо)
Старый 21.04.2014, 17:00
Ответ

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

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

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

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



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