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

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

Закрытая тема
 
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
pAxsIs:
DioD:
я очень тонко намекнул что функция всегда возвращает 8, а вы оказывается не лечитесь.
У меня 9 игроков так то)
проще говоря событие у тебя регистрировалось только седьмому игроку.
Старый 30.09.2012, 21:29
adic3x

offline
Опыт: 107,539
Активность:
callback onUnitSpellEffect ('A000') {
    udg_Units[1] = GetSpellAbilityUnit ();
    udg_Units[2] = GetSpellTargetUnit ();
    SetUnitFacingTimed (udg_Units[1], 57.297469 * Atan2(GetUnitY(udg_Units[2])-GetUnitY(udg_Units[1]),GetUnitX(udg_Units[2])-GetUnitX(udg_Units[1])), 0.);
    EnableTrigger (gg_trg_Second_act);
}
Старый 30.09.2012, 22:57
pAxsIs

offline
Опыт: 2,389
Активность:
ADOLF:
callback onUnitSpellEffect ('A000') {
    udg_Units[1] = GetSpellAbilityUnit ();
    udg_Units[2] = GetSpellTargetUnit ();
    SetUnitFacingTimed (udg_Units[1], 57.297469 * Atan2(GetUnitY(udg_Units[2])-GetUnitY(udg_Units[1]),GetUnitX(udg_Units[2])-GetUnitX(udg_Units[1])), 0.);
    EnableTrigger (gg_trg_Second_act);
}
Я только начал изучать jass, поэтому я не понимаю твой код, он написан не на стандартном jass, либо на стандартном, но с использованием библиотек (предположение), я не шарю в видах :)
pAxsIs добавил:
Все я понял) улыбашка, как обычно все разжевал) спасибо всем диоду и улыбашке, можно и Адольфу за старания)
Просто я смотрел на последний код который я написал, а вы о первом) последний ведь верный?
Вот конечный код тему можно уже закрывать) давно пора вроде как.
((код jass
function Trig_First_act_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A000' then
call SetUnitFacingToFaceUnitTimed( GetSpellAbilityUnit(), GetSpellTargetUnit(), 0.00 )
call EnableTrigger( gg_trg_Second_act )
set udg_Units[1] = GetSpellAbilityUnit()
set udg_Units[2] = GetSpellTargetUnit()
endif
return false
endfunction
===========================================================================
function InitTrig_First_act takes nothing returns nothing
local integer index = 0
set gg_trg_First_act = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 8
endloop
call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
endfunction
))
Если этот код нормальный, то все опрос закончен.
Старый 01.10.2012, 01:05
adic3x

offline
Опыт: 107,539
Активность:
Этот код не нормальный, т.к. вызывает BJ функции с утечками.
Старый 01.10.2012, 11:11
pAxsIs

offline
Опыт: 2,389
Активность:
ADOLF:
Этот код не нормальный, т.к. вызывает BJ функции с утечками.
Ткни меня пожалуйста на BJ функцию, где она в этом коде?
Старый 01.10.2012, 11:48
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,598
Активность:
pAxsIs, вот эта функция SetUnitFacingToFaceUnitTimed
((код jass
function SetUnitFacingToFaceUnitTimed takes unit whichUnit, unit target, real duration returns nothing
local location unitLoc = GetUnitLoc(target)
call SetUnitFacingToFaceLocTimed(whichUnit, unitLoc, duration) тоже BJ функция
call RemoveLocation(unitLoc)
endfunction
))
quq_CCCP добавил:
ADOLF, ну а де тут утечки, локейшены удаляются, но тока куча ненужных действий и всякой чепухи с локейшенами...
Старый 01.10.2012, 12:01
pAxsIs

offline
Опыт: 2,389
Активность:
Так лучше?
((код jass
function Trig_First_act_Conditions takes nothing returns boolean
if GetSpellAbilityId() == 'A000' then
local location unitLoc = GetUnitLoc(GetSpellAbilityUnit())
call SetUnitFacingTimed(GetSpellAbilityUnit(), AngleBetweenPoints(unitLoc, GetSpellTargetUnit()), 0.00)
call RemoveLocation(unitLoc)
call EnableTrigger( gg_trg_Second_act )
set udg_Units[1] = GetSpellAbilityUnit()
set udg_Units[2] = GetSpellTargetUnit()
endif
return false
endfunction
===========================================================================
function InitTrig_First_act takes nothing returns nothing
local integer index = 0
set gg_trg_First_act = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 8
endloop
call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
endfunction
))
Старый 01.10.2012, 12:49
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,598
Активность:
pAxsIs, а с какого х локальная переменная после if?
Старый 01.10.2012, 12:49
pAxsIs

offline
Опыт: 2,389
Активность:
Я думал так можно, прям как цикл в событии))
Ну ладно вот так тогда:
((код jass
function Trig_First_act_Conditions takes nothing returns boolean
local location unitLoc = GetUnitLoc(GetSpellAbilityUnit())
if GetSpellAbilityId() == 'A000' then
call SetUnitFacingTimed(GetSpellAbilityUnit(), AngleBetweenPoints(unitLoc, GetSpellTargetUnit()), 0.00)
call RemoveLocation(unitLoc)
call EnableTrigger( gg_trg_Second_act )
set udg_Units[1] = GetSpellAbilityUnit()
set udg_Units[2] = GetSpellTargetUnit()
endif
return false
endfunction
===========================================================================
function InitTrig_First_act takes nothing returns nothing
local integer index = 0
set gg_trg_First_act = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 8
endloop
call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
endfunction
))
Старый 01.10.2012, 12:52
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,598
Активность:
pAxsIs, сall RemoveLocation(unitLoc) после endif ставить нужно
Старый 01.10.2012, 13:03
pAxsIs

offline
Опыт: 2,389
Активность:
я туплю с утра)
Думал написать после endif, но решил, что и так удалит. Забыл, что может и не выполниться условие)
P.S. как можно это забыть...
Ну а теперь?)
((код jass
function Trig_First_act_Conditions takes nothing returns boolean
local location unitLoc = GetUnitLoc(GetSpellAbilityUnit())
if GetSpellAbilityId() == 'A000' then
call SetUnitFacingTimed(GetSpellAbilityUnit(), AngleBetweenPoints(unitLoc, GetSpellTargetUnit()), 0.00)
call EnableTrigger( gg_trg_Second_act )
set udg_Units[1] = GetSpellAbilityUnit()
set udg_Units[2] = GetSpellTargetUnit()
endif
call RemoveLocation(unitLoc)
return false
endfunction
===========================================================================
function InitTrig_First_act takes nothing returns nothing
local integer index = 0
set gg_trg_First_act = CreateTrigger( )
loop
call TriggerRegisterPlayerUnitEvent(gg_trg_First_act, Player( index ), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
set index = index + 1
exitwhen index == 8
endloop
call TriggerAddCondition( gg_trg_First_act, Condition( function Trig_First_act_Conditions ) )
endfunction
))
То есть функция Condition от Action почти не отличается, внутри каждой функции можно выполнять действия (любые, которые в принципе можно), верно?
pAxsIs добавил:
Кстати я только щас понял, Адольфа :D спасибо)
Вопрос:
Принципиально важно в функции использовать переменные:
((код jass
SetUnitFacingTimed (udg_Units[1], 57.297469 * Atan2(GetUnitY(udg_Units[2])-GetUnitY(udg_Units[1]),GetUnitX(udg_Units[2])-GetUnitX(udg_Units[1])), 0.);
))
или можно:
((код jass
SetUnitFacingTimed (GetSpellAbilityUnit(), 57.297469 * Atan2(GetUnitY(GetSpellTargetUnit())-GetUnitY(GetSpellAbilityUnit()),GetUnitX(GetSpellTargetUnit())-​GetUnitX(GetSpellAbilityUnit())), 0.);
))
И кстати если и использовать в функции, переменные, то лучше локальные для mui ИМХО
Старый 01.10.2012, 13:26
Hate
конь вакуумный
offline
Опыт: 43,117
Активность:
если функция вызывается раза 1-2, то локалка не особо критична, а вот если там 10 вызовов GetTriggerUnit() то стоит.
Старый 01.10.2012, 13:37
DioD

offline
Опыт: 45,184
Активность:
не вижу смысла вызывать точку когда можно на прямую обращатся к координатам
Старый 01.10.2012, 14:46
pAxsIs

offline
Опыт: 2,389
Активность:
DioD:
не вижу смысла вызывать точку когда можно на прямую обращатся к координатам
ну да лучше через координаты, но конечный вопрос был другой. Спасибо за помощь диод :)
Вопрос:
Принципиально важно в функции использовать переменные:
((код jass
SetUnitFacingTimed (udg_Units[1], 57.297469 * Atan2(GetUnitY(udg_Units[2])-GetUnitY(udg_Units[1]),GetUnitX(udg_Units[2])-GetUnitX(udg_Units[1])), 0.);
))
или можно?:
((код jass
SetUnitFacingTimed (GetSpellAbilityUnit(), 57.297469 * Atan2(GetUnitY(GetSpellTargetUnit())-GetUnitY(GetSpellAbilityUnit()),GetUnitX(GetSpellTargetUnit())-​​GetUnitX(GetSpellAbilityUnit())), 0.);
))
Старый 01.10.2012, 14:54
DioD

offline
Опыт: 45,184
Активность:
в данном коде переменные только для тебя, они для хранения данных не используются, однако если ты захочешь использовать градусы где-то еще их будет смысл сохранить чтобы не считать дважды.
Старый 01.10.2012, 15:11
pAxsIs

offline
Опыт: 2,389
Активность:
DioD:
в данном коде переменные только для тебя, они для хранения данных не используются, однако если ты захочешь использовать градусы где-то еще их будет смысл сохранить чтобы не считать дважды.
Все понял (ответ ясен). Спасибо еще раз DioD.
Старый 01.10.2012, 15:19
Закрытая тема

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

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

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

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



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