FatalBlade | Дата: Пятница, 23 Сентября 2011, 19:17:13 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Допустим у меня есть триггер, который активирует другой триггер, который каждые 0.05 секунд что то делает. Через например 2 секунды (таймер) с третьего триггера деактивирует тот триггер который каждые 0.05 секунд что то делает. Это всё 3 триггера, а мне нужно перевести это в джасс, в 1 триггер. Ок, первый и третий триггер я могу свести в 1, это не проблема. Но вот как туда всунуть триггер с событием на 0.05 секунд? Например это отталкивание юнита, или волна взрывов, где фигурируют переменные, которые я не хочу что бы были глобальными.
|
|
|
|
wetalq | Дата: Пятница, 23 Сентября 2011, 19:51:52 | Сообщение # 2 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| используй Хеш Таблицу и таймер, для движения юнита, а потом когда нужно прервать движения уничтожай таймер Добавлено (23 Сентябрь 2011, 19:51:52) --------------------------------------------- вот пример движения юнита в точку (цель заклинания) Code function Shunpo_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A000' endfunction
function Shunpo_Loop takes nothing returns nothing local timer t = GetExpiredTimer () local unit UnitCaster = LoadUnitHandle(udg_Hash,GetHandleId(t),1) local real Angle = LoadReal(udg_Hash,GetHandleId(t),2) local real Speed = LoadReal(udg_Hash,GetHandleId(t),3) local real Root = LoadReal(udg_Hash,GetHandleId(t),4) local real Range = LoadReal(udg_Hash,GetHandleId(t),5) local real x1 local real y1 local real x3 local real y3 set x1 = GetUnitX(UnitCaster) set y1 = GetUnitY(UnitCaster) set x3 = (x1 + Speed * Cos(Angle)) set y3 = (y1 + Speed * Sin(Angle)) call SetUnitPosition(UnitCaster,x3,y3) set Range = Range + Speed call SaveReal(udg_Hash,GetHandleId(t),5,Range) set t = null if Root <= Range then call DestroyTimer(GetExpiredTimer()) call PauseUnit(UnitCaster, FALSE) call SetUnitVertexColor(UnitCaster,255,255,255,255) call SetUnitPathing(UnitCaster,true) endif set t = null set UnitCaster = null endfunction
function Shunpo_Actions takes nothing returns nothing local unit UnitCaster = GetSpellAbilityUnit() local real x1 = GetUnitX(UnitCaster) local real y1 = GetUnitY(UnitCaster) local real x2 = GetLocationX(GetSpellTargetLoc()) local real y2 = GetLocationY(GetSpellTargetLoc()) local real Angle = Atan2(y2 - y1, x2 - x1) local real Speed = 30 local real Root = SquareRoot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)) local real Range = 0 local real Interval = 0.005 local timer t = CreateTimer () call PauseUnit(UnitCaster, true) call SetUnitVertexColor(UnitCaster,25,25,25,75) call SetUnitPathing(UnitCaster,false) call SaveUnitHandle(udg_Hash,GetHandleId(t),1,UnitCaster) call SaveReal(udg_Hash,GetHandleId(t),2,Angle) call SaveReal(udg_Hash,GetHandleId(t),3,Speed) call SaveReal(udg_Hash,GetHandleId(t),4,Root) call SaveReal(udg_Hash,GetHandleId(t),5,Range) call TimerStart(t,Interval,true,function Shunpo_Loop) set t = null set UnitCaster = null endfunction
function InitTrig_Shunpo takes nothing returns nothing local trigger t = CreateTrigger( ) local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(t, Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) set i = i + 1 exitwhen i == 16 endloop call TriggerAddCondition( t, Condition( function Shunpo_Conditions ) ) call TriggerAddAction( t, function Shunpo_Actions ) set t = null endfunction
|
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 20:43:34 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (wetalq) call SaveReal(udg_Hash,GetHandleId(t),5,Range) А разве можно каждый раз перезаписывать значение в хэш?
|
|
|
|
wetalq | Дата: Пятница, 23 Сентября 2011, 20:55:15 | Сообщение # 4 |
8 уровень
Группа: Проверенные
Сообщений: 550
Награды: 0
Репутация: 117
Блокировки:
| FatalBlade, можно насколько я знаю
|
|
|
|
lawson | Дата: Пятница, 23 Сентября 2011, 21:02:24 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (FatalBlade) А разве можно каждый раз перезаписывать значение в хэш? ДА сколько угодно.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
|
|
|
|
FatalBlade | Дата: Пятница, 23 Сентября 2011, 21:18:20 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (lawson) ДА сколько угодно. Еслиб я знал об этом я бы не создавал тему про спелл со взрыванием трупов Или создал бы но там небыло бы 6-ти страниц)))) Я то был уверен что невозможно записать какое либо значение в ячейку хэша если там уже что то есть...
|
|
|
|
Ty3uK | Дата: Пятница, 23 Сентября 2011, 21:36:38 | Сообщение # 7 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Хм... Ты вообще читал статью про хэш? Там это написано в части про удаление значений ячеек
|
|
|
|