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

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

Закрытая тема
 
Goodie

offline
Опыт: 2,825
Активность:
Проблема с поворотами
У меня такая проблема
Наводишь точку, создается камешек и двигается в определенную сторону, а стороны я показал. Как мне это сделать?
Миниатюры
Кликните на картинку для увеличения
Название:  Снимок.JPG
Просмотров: 37
Размер:  166.2 Кбайт  
Старый 11.03.2013, 13:22
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
молча
где ваши попытки что либо сделать?
Старый 11.03.2013, 13:25
Goodie

offline
Опыт: 2,825
Активность:
Hate, Ах, точно) Эссенция луны и все такое. Забыл =/
Спелл похож на Инвокера из доты. (Тыкать в опен доту толку нету. Его нет там)
((код jass
struct Data_Meteor
unit a
unit b
real f = 1000.
real x
real y
real dist = 700.
integer count = 0
endstruct
function AngleBetweenXY takes real x1, real y1, real x2, real y2 returns real
return bj_RADTODEG * (Atan2(y2 - y1, x2 - x1))
endfunction
function DistanceBetweenXY takes real x1, real y1, real x2, real y2 returns real
return SquareRoot((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1))
endfunction

function OffsetX takes real x1, real dist, real angle returns real
return x1 + dist * Cos(angle * bj_DEGTORAD)
endfunction

function OffsetY takes real y1, real dist, real angle returns real
return y1 + dist * Sin(angle * bj_DEGTORAD)
endfunction
function Trig_SPELL_ll_METEOR_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction
function onDamage takes nothing returns nothing
local timer Timer = GetExpiredTimer()
local Data_Meteor data = GetTimerData(Timer)
local real dist = DistanceBetweenXY(GetUnitX(data.b),GetUnitY(data.b),data.x,data.y)
set data.count = data.count+1
if (data.count >=5) then
set data.count = 0
call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Human\\HCancelDeath\\HCancelDeath.mdl&quo​t;,GetUnitX(data.b),GetUnitY(data.b)))
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\FlameStrike\\FlameStrike1.mdl",G​etUnitX(data.b),GetUnitY(data.b)))
endif
if (dist >= 50)
call SetUnitPosition(data.b,OffsetX(GetUnitX(data.b),15.,AngleBetweenXY(GetUnitX(data.b),GetUnitY(data.b)​,data.x,data.y)),OffsetY(GetUnitY(data.b),15.,AngleBetweenXY(GetUnitX(data.b),GetUnitY(data.b),data.​x,data.y)))
else
call KillUnit(data.b)
call DestroyTimer(Timer)
call data.destroy()
set Timer = null
endif
endfunction
function onFly takes nothing returns nothing
local timer Timer = GetExpiredTimer()
local Data_Meteor data = GetTimerData(Timer)
local real dist = DistanceBetweenXY(GetUnitX(data.b),GetUnitY(data.b),data.x,data.y)
if (dist >= 50.) then
set data.f = data.f-15.
call SetUnitFlyHeight(data.b,data.f,0.00)
call SetUnitPosition(data.b,OffsetX(GetUnitX(data.b),15.,AngleBetweenXY(GetUnitX(data.b),GetUnitY(data.b)​,data.x,data.y)* bj_DEGTORAD),OffsetY(GetUnitY(data.b),15.,AngleBetweenXY(GetUnitX(data.b),GetUnitY(data.b),data.x,da​ta.y)* bj_DEGTORAD))
else
set data.x=data.x+700
call SetUnitTimeScale(data.b,1.0)
call TimerStart(Timer,0.03,true,function onDamage)
set Timer = null
endif
set Timer = null
endfunction
function Trig_SPELL_ll_METEOR_Actions takes nothing returns nothing
local Data_Meteor data = Data_Meteor.create()
local timer Timer = NewTimer()
local real face
local real dist
set data.a= GetTriggerUnit()
set face = GetUnitFacing(data.b)
set data.x = GetSpellTargetX()
set data.y = GetSpellTargetY()
set dist = DistanceBetweenXY(GetUnitX(data.a),GetUnitY(data.a),data.x,data.y)
set data.b = CreateUnit(GetOwningPlayer(data.a),'e000',GetSpellTargetX() - 1000. ,GetSpellTargetY(),face)
call SetUnitFlyHeight(data.b,data.f,0)
call SetUnitTimeScale(data.b,0.05)
call SetTimerData(Timer,data)
call TimerStart(Timer,0.03,true,function onFly)
set Timer = null
endfunction
===========================================================================
function InitTrig_SPELL_ll_METEOR takes nothing returns nothing
set gg_trg_SPELL_ll_METEOR = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_SPELL_ll_METEOR, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_SPELL_ll_METEOR, Condition( function Trig_SPELL_ll_METEOR_Conditions ) )
call TriggerAddAction( gg_trg_SPELL_ll_METEOR, function Trig_SPELL_ll_METEOR_Actions )
endfunction
))

Отредактировано Goodie, 11.03.2013 в 14:26.
Старый 11.03.2013, 13:35
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
второй кэповский вопрос - что не работает?
и третий - где отладка?
Hate добавил:
Спелл похож на Инвокера из доты.
к сожалению это ни о чем не говорит
Старый 11.03.2013, 13:37
Doc

offline
Опыт: 63,163
Активность:
Потому что у инвокера на стандарте сделано, очевидно же.
Укажите, что конкретно не работает, предоставьте данные отладки, весь код рассматривать никому не хочется.
Старый 11.03.2013, 13:53
Goodie

offline
Опыт: 2,825
Активность:
Проблема в первом посте =/
Старый 11.03.2013, 14:17
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
я не понял в чем проблема,может в том что
function Trig_SPELL_ll_METEOR_Actions takes nothing returns nothing
    local Data_Meteor data = Data_Meteor.create()
    local timer Timer = NewTimer()
    local real face
    local real dist
    set data.a= GetTriggerUnit()
    set face =  GetUnitFacing(data.b)
    set data.x = GetSpellTargetX()
    set data.y = GetSpellTargetY()
    set dist = DistanceBetweenXY(GetUnitX(data.a),GetUnitY(data.a),data.x,data.y)
    set data.b = CreateUnit(GetOwningPlayer(data.a),'e000',GetSpellTargetX() - 1000. ,GetSpellTargetY(),face * bj_DEGTORAD)
    call SetUnitFlyHeight(data.b,data.f,0)
    call SetUnitTimeScale(data.b,0.05)
    call SetTimerData(Timer,data)
    call TimerStart(Timer,0.03,true,function onFly)
    set Timer = null
endfunction
=>=>=>
function Trig_SPELL_ll_METEOR_Actions takes nothing returns nothing
...
    set face =  GetUnitFacing(data.b)
...
    set data.b = CreateUnit(GetOwningPlayer(data.a),'e000',GetSpellTargetX() - 1000.,GetSpellTargetY(),face * bj_DEGTORAD)
...
endfunction
Старый 11.03.2013, 14:23
Goodie

offline
Опыт: 2,825
Активность:
Nerevar, Не, эт я удалил, в движениях проблема
Старый 11.03.2013, 14:28
ScorpioT1000
Работаем
online
Опыт: отключен
Отладка будет или закрываем тему?
Старый 11.03.2013, 14:34
Doc

offline
Опыт: 63,163
Активность:
хз короче код у тебя бредовый оче, должно быть примерно так:

struct Meteor
// ....
real a = 0.
// ....
endstruct

void onFly(){
	real x = Cos(data.a) * dist + data.x
	real y = Sin(data.a) * dist + data.y
	
	data.a = data.a + 5. * bj_RADTODEG
	SetUnitX(data.b, x)
	SetUnitY(data.b, y)
}
И не обязательно создавать отдельный таймер на нанесение урона, между прочим.
Старый 11.03.2013, 14:35
Goodie

offline
Опыт: 2,825
Активность:
Doc, Лол. Получилось, что он крутится вокруг героя :D Мне не так надо Вот если тыкнуть в верх спелл, то он будет лететь с лева на право. Если тыкнуть вправо, то он будет лететь с верха вниз. Если тыкнуть вниз, то он будет лететь право на лево. Если тыкнуть влево, то он будет лететь с низа в верх
Старый 11.03.2013, 14:52
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Goodie, ну и в чем проблема?
Nerevar добавил:
как только получу в лс адекватный пост с дебагом,с расписанной проблемой,способами решения и собственными размышлениями,открою тему
Старый 11.03.2013, 15:12
Закрытая тема

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

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

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

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



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