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

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

LainMikoroso, xgm.guru/p/wc3/articles
там есть всё что ты просил и даже больше
0
17
7 лет назад
0
Может выучить тогда полностью Jass, а не по кусочку?)
А то так в будущем будет ещё куча вопросов от тебя с такой темой: "Как делать с помощью что-то без утечек"
В общем, я любитель GUI. Решил переходить на jass.
Мне необходимо узнать/получить часть кода, где что-то там :))
0
14
7 лет назад
0
Не, мне только перемещение, это выводит огромное кол-во утечек, в сравнении с остальным, поэтому я прошу только это.
0
26
7 лет назад
0
Сделай без утечек на GUI
Потом переделай на Jass'е
Всё то же самое, только выглядит чуть иначе, за счёт особенностей скрипта
0
17
7 лет назад
0
С такими потребностями тебе в тему заклинаний на заказ.
0
14
7 лет назад
0
Окес
0
28
7 лет назад
0
LainMikoroso, xgm.guru/p/wc3/articles
там есть всё что ты просил и даже больше
Принятый ответ
1
27
7 лет назад
Отредактирован 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
7 лет назад
0
Steal nerves, а самого кастера переместить не судьба? Как я понимаю автору нужно двигать именно его, а не даммика или противника
0
27
7 лет назад
0
darkowlom, не понял, кого автор хочет вращать вперед. Как я понял, он хочет два куска кода (прямолинейное движение, и тоже самое движение юнита, но наносить урон вокруг себя). Это же с даймиком же. тот код, что я скинул -обычно часто повторяющий. Требует доработки, чтобы за границу карты не выходил, сколько расстояния должен переместиться и др.
Ну все то же самое, только вместо даймика перемещается кастер, вместо позиции цели, позиция каста способности (точка каста). Короче все то же самое.
Иначе все будет, если нужно чтобы, перемещался юнит туда, куда смотрит сам юнит (наподобии force staff). Там берется за основу угол. Скинул на GUI (делал не я, а Imba), попробуй на jass переделать и все. Будет тебе формулой
По-поводу второго вопроса, там надо при каждом вызове выбирать группу юнитов вокруг мнимой точки, или вокруг юнита, и наносить урон юнитам в группе и прочее.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.