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

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

Ответ
 
MANDARIN

offline
Опыт: 24
Активность:
Ошибка движении!
function Trig_spell_1_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'AOsh'
endfunction
function Move takes nothing returns nothing
local unit u1 = GetSpellAbilityUnit()
local unit u2 = GetSpellTargetUnit()
local location p1 = GetUnitLoc(u1)
local location p2 = GetUnitLoc(u2)
local real a = AngleBetweenPoints(p1, p2)
call MoveLocation(p1, GetLocationX(p1) + 50 * CosBJ(a), GetLocationY(p1) + 50 * SinBJ(a))
call SetUnitPositionLoc( u1, p1 )
set u1 = null
set u2 = null
call RemoveLocation(p1)
call RemoveLocation(p2)
set p1 = null
set p2 = null
set a = 0
endfunction
function Trig_spell_1_Actions takes nothing returns nothing
local timer t = CreateTimer()
call TimerStart(t, 0.01, true, function Move)
endfunction
===========================================================================
function InitTrig_spell_1 takes nothing returns nothing
set gg_trg_spell_1 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_spell_1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_spell_1, Condition( function Trig_spell_1_Conditions ) )
call TriggerAddAction( gg_trg_spell_1, function Trig_spell_1_Actions )
endfunction
Движение не происходит! В чем ошибка?
Старый 30.08.2010, 19:36
reALien

offline
Опыт: 29,211
Активность:
иначе это вынлядит так:
call SetUnitPositionLoc(u1, GetUnitLoc(u1))
короче, ты двигаешь юнита в его текущее местоположение, поробуй:
call SetUnitPositionLoc(u1, p2)
Старый 30.08.2010, 19:40
MANDARIN

offline
Опыт: 24
Активность:
Все так же ничего не происходит!
MANDARIN добавил:
Может дело в самом заклинании?
Триггер срабатывает при активации Волна Силы!
Старый 30.08.2010, 20:01
Scarecrow
Иннеар ORPG
offline
Опыт: 3,289
Активность:
MANDARIN, волна силы не даст тебе GetSpellTargetUnit. Ибо она с целью-точкой. Сделай или из канала с целью-юнитом, или из цепи молний, к примеру...
Старый 30.08.2010, 20:15
MANDARIN

offline
Опыт: 24
Активность:
Поменял на цепь молний! все так же как и было!
Код хотя бы правильно написан?
call SetUnitPositionLoc( u1, p1 ) - это исправлено!
Старый 30.08.2010, 20:29
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
MANDARIN,
  1. 0.01 - недопустимый период для спела, минимум - 0.025
local unit u1 = GetSpellAbilityUnit()
local unit u2 = GetSpellTargetUnit()
а теперь выведи имена u1 и u2, если выведет не null, с меня печенька ._.
Поясню. Переменные которым ты приравниваешь локалки доступны только в функции Trig_spell_1_Actions, далее их использовать нельзя их заносят в ячейки хранения(глобалки, хеш, кеш) и потом загружают и используют.
3.
Вот код с использованием хеша, для работы нужна глобалка в редакторе переменных Hash - хештаблица:
function Trig_spell_1_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'AOsh'
endfunction

function Move takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = GetHandleId(t)
local unit u1 = LoadUnitHandle(udg_Hash,i,0) //загружаем кастера
local unit u2 = LoadUnitHandle(udg_Hash,i,1) //загружаем тагрет
local real x = GetUnitX(u1)
local real y = GetUnitY(u1)
local real a = Atan2(GetUnitY(u2)-y,GetUnitX(u2)-x)
call SetUnitPosition(u1, x+50.00*Cos(a), y+50.00*Sin(a))
set u1 = null
set u2 = null
set t = null //не забываем обнулять таймер
endfunction

function Trig_spell_1_Actions takes nothing returns nothing
local timer t = CreateTimer()
local integer i = GetHandleId(t)
call SaveUnitHandle(udg_Hash,i,0,GetTriggerUnit())
call SaveUnitHandle(udg_Hash,i,1,GetSpellTargetUnit())
call TimerStart(t, 0.035, true, function Move)
set t = null //не забываем обнулять таймер
endfunction
//===========================================================================
function InitTrig_spell_1 takes nothing returns nothing
set gg_trg_spell_1 = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_spell_1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_spell_1, Condition( function Trig_spell_1_Conditions ) )
call TriggerAddAction( gg_trg_spell_1, function Trig_spell_1_Actions )
endfunction
Еще лучше сделать вместо сет юнит посишн это:
call SetUnitX(u1, x+50.00*Cos(a))
call SetUnitY(u1, y+50.00*Sin(a))
быстрее, надежнее, не ресурсоемко

Отредактировано AlexKARASb, 30.08.2010 в 20:54.
Старый 30.08.2010, 20:41
MANDARIN

offline
Опыт: 24
Активность:
Теперь все ясно! Всем спасибо!
Старый 30.08.2010, 21:36
Ответ

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

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

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

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



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