В общем я любитель GUI, и решил переходить на Jass, Мне необходимо узнать/получить часть кода, где юнит двигается по прямой некоторое время, еще лучше было бы, вбросить еще 1 код, где тот же юнит, который перемещается, наносит урон в радиусе от себя, вооот.

Принятый ответ

LainMikoroso, xgm.guru/p/wc3/articles
там есть всё что ты просил и даже больше
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
17
8 лет назад
0
Может выучить тогда полностью Jass, а не по кусочку?)
А то так в будущем будет ещё куча вопросов от тебя с такой темой: "Как делать с помощью что-то без утечек"
В общем, я любитель GUI. Решил переходить на jass.
Мне необходимо узнать/получить часть кода, где что-то там :))
0
14
8 лет назад
0
Не, мне только перемещение, это выводит огромное кол-во утечек, в сравнении с остальным, поэтому я прошу только это.
0
26
8 лет назад
0
Сделай без утечек на GUI
Потом переделай на Jass'е
Всё то же самое, только выглядит чуть иначе, за счёт особенностей скрипта
0
17
8 лет назад
0
С такими потребностями тебе в тему заклинаний на заказ.
0
14
8 лет назад
0
Окес
0
28
8 лет назад
0
LainMikoroso, xgm.guru/p/wc3/articles
там есть всё что ты просил и даже больше
Принятый ответ
1
27
8 лет назад
Отредактирован MpW
1
поизучать jass можно, читая статьи, затем посмотреть многие наработки jass как устроены. И во-вторых на сайте заказать можно способность, чтобы они тебе сделали.
В-третьих, как вы хотите сделать прямое перемещение? Можно создать даймика-эффект и перемещать от кастера к цели, или перемещать подальше от кастера противника (или наоборот).
смотреть сюда
function T_X takes nothing returns nothing
local timer tt=GetExpiredTimer() //запускаемый эту функцию таймер
local integer id=GetHandleId(tt) //номер хэндла таймера
local unit u=LoadUnitHandle(udg_Hash,id,0) //кастер
local unit t=LoadUnitHandle(udg_Hash,id,1) //цель
local unit dd=LoadUnitHandle(udg_Hash,id,2) //юнит-даймик
local real dm=LoadReal(udg_Hash,id,4) //урон
//координаты даймика и цели каста
local real x1=GetUnitX(dd) 
local real y1=GetUnitY(dd)
local real x2=GetUnitX(t)
local real y2=GetUnitY(t)
local real dx=x2-x1
local real dy=y2-y1
local real dist = SquareRoot(dx * dx + dy * dy)
local real angle = Atan2(dy,dx)
local real x
local real y
if dist > 40. then //если расстояние между даймиком и цели все еще больше 40, то премещать даймика поближе
//устанавливаем координаты
set x = (x1 + 40. * Cos(angle))
set y = (y1 + 40. * Sin(angle))
//перемещаем
call SetUnitX(dd,x)
call SetUnitY(dd,y)
//сохраняем
set dx=x2-x
set dy=y2-y
set dist = SquareRoot(dx * dx + dy * dy)
call SaveReal(udg_Hash,GetHandleId(tt),3,dist) //пересохраняем дистинцию
else
    call RemoveUnit(dd) //уничтожаем даймика
    call FlushChildHashtable(udg_Hash,id) //чистим хэш
    call PauseTimer(tt) //паузим таймер
    call DestroyTimer(tt) //уничтожаем таймер
    call UnitDamageTarget(u,tt,dm, true, false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endif

set t=null
set u=null
set tt=null
set dd=null

endfunction
local unit t=GetSpellTargetUnit() //цель каста
local unit u=GetTriggerUnit() //кастер
local integer lv=GetUnitAbilityLevel(u,GetSpellAbilityId()) //уровень абилки
local real dm=(200.00*I2R(lv)) //урон
//координаты кастера и цели каста
local real x1=GetUnitX(u) 
local real y1=GetUnitY(u)
local real x2=GetUnitX(t)
local real y2=GetUnitY(t)
//определение расстояния
local real dx=x2-x1
local real dy=y2-y1
local real dist = SquareRoot(dx * dx + dy * dy)
local timer tt //таймер
local unit dd //юнит-даймик

if dist > 0. and dist < 700. then // если цель каста не находится за пределами каста способности, то ...
    set tt=CreateTimer() //создаем таймер
    set dd=CreateUnit(GetTriggerPlayer(),'h000',x1,y1,0.)
    
    //далее сохраняем все в хэш-таблицу, но не забудьте создать глобалку, и создать в начале игры (при инициализации) хэш-таблицу set udg_Hash = InitHashtable()
    //сохраняются в ячейках хэша, берут GetHandleId - порядковый номер объектов вара
    call SaveUnitHandle(udg_Hash,GetHandleId(tt),0,u) //сохраняем кастера в хэш-таблицу
    call SaveUnitHandle(udg_Hash,GetHandleId(tt),1,t) //сохраняем цель
    call SaveUnitHandle(udg_Hash,GetHandleId(tt),2,dd) //сохраняем даймика
    call SaveReal(udg_Hash,GetHandleId(tt),3,dist) //сохраняем расстояние
    call SaveReal(udg_Hash,GetHandleId(tt),4,dm) //сохраняем урон
    
    call TimerStart(tt,0,02,true,function T_X) //запускаем таймер
    //в функции TimerStart после указа таймера и времени стоит true, короче делаем запуски таймера периодичным или одноразовым
    //после этого всего функцию не забудь указать
endif

set t=null
set u=null
set tt=null
set dd=null
0
24
8 лет назад
0
Steal nerves, а самого кастера переместить не судьба? Как я понимаю автору нужно двигать именно его, а не даммика или противника
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.