Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
MegaBlax, да это код для изучения глазами, а не для вставки в редактор, я не на компе, писал на коленях, потому тут не сделан триггер, событие и т. д. но суть думаю понять можно |
16.06.2013, 11:44 | #21
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MegaBlax
offline
Опыт:
2,352Активность: |
Sargaraser, можешь оъяснить как передвинуть юнита на определенное растояние через SetUnitX() SetUnitY() |
16.06.2013, 11:50 | #22
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
MegaBlax,
local unit u local real dist = 0 local real angle = 0 local real x = GetUnitX(u) + dist * Cos(angle * bj_DEGTORAD) local real y = GetUnitY(u) + dist * Sin(angle * bj_DEGTORAD) call SetUnitX(u, x) call SetUnitY(u, y) u = твой юнит, dist = твоя дистанция на которую двигать, angle угол куда двигать(в градусах)
Sargaraser добавил: это все есть ещё в статьях Сергея -_- |
16.06.2013, 11:53 | #23
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MegaBlax
offline
Опыт:
2,352Активность: |
там что-то вроде этого да?
((кат
((код jass
local unit u = GetTriggerUnit()
local real x = GetUnitX(u) local real y = GetUnitY(u) local real xx = x + dist * Cos(angle * bj_DEGTORAD) local real yy = y + dist * Sin(angle * bj_DEGTORAD) )) )) MegaBlax добавил:
а еще должна быть вот такая проверк вроде? ((кат
((код jass
globals
real Game_MaxX real Game_MinX real Game_MaxY real Game_MinY endglobals function SetUpSafeXY takes nothing returns nothing
set Game_MaxX = GetRectMaxX(bj_mapInitialPlayableArea)-50. set Game_MinX = GetRectMinX(bj_mapInitialPlayableArea)+50. set Game_MaxY = GetRectMaxY(bj_mapInitialPlayableArea)-50. set Game_MinY = GetRectMinY(bj_mapInitialPlayableArea)+50. endfunction function SafeX takes real x returns real
if x<Game_MinX then return Game_MinX elseif x>Game_MaxX then return Game_MaxX endif return x endfunction function SafeY takes real y returns real if y<Game_MinY then return Game_MinY elseif y>Game_MaxY then return Game_MaxY endif return y endfunction )) )) |
16.06.2013, 11:57 | #24
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
MegaBlax, да все верно |
16.06.2013, 11:58 | #25
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MegaBlax
offline
Опыт:
2,352Активность: |
Да блин, что не так то?! Почему после xx и yy ничего уже дальше не пашет?!
((кат
((код jass
local real x = GetUnitX(u)
local real y = GetUnitY(u) local real xx = SafeX(x+d*Cos(a)) local real yy = SafeY(y+d*Sin(a)) )) )) ((кат
((код jass
globals
real minX real minY real maxX real maxY endglobals function SafeXY takes nothing returns nothing
set minX = GetRectMinX(bj_mapInitialPlayableArea)+50. set minY = GetRectMinY(bj_mapInitialPlayableArea)+50. set maxX = GetRectMaxX(bj_mapInitialPlayableArea)-50. set maxY = GetRectMaxY(bj_mapInitialPlayableArea)-50. endfunction function SafeX takes real x returns real
if x<minX then return minX elseif x>maxX then return maxX endif return x endfunction function SafeY takes real y returns real if y<minY then return minY elseif y>maxY then return maxY endif return y endfunction )) )) |
16.06.2013, 13:14 | #26
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
|
16.06.2013, 13:21 | #27
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,158Активность: |
Sargaraser, у мегаблакса куда адекватнее система, чем отлов всех юнитов. |
16.06.2013, 13:27 | #28
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
Clamp, ты о чем конкретно? какой отлов?
Sargaraser добавил: можно делать и так как он сделал, просто в функции на периодике я бы использовал всего один таймер |
16.06.2013, 13:36 | #29
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,158Активность: |
Я про проверку через SafeX/Y А так да, в периодик мувенте только 1 таймер стоит использовать |
16.06.2013, 13:38 | #30
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
Clamp, да я думаю там проверка вовсе не нужна, ведь спел должен двигать кастера назад во времени на то место где он стоял, и тут вопрос, как этот таракан попадет за границы карты, если фиксируется только то место где он и так стоял?
Sargaraser добавил: SafeX/Y нужно только для движения разнообразных даммиков в периодике снаряды там и т.д. |
16.06.2013, 13:41 | #31
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MegaBlax
offline
Опыт:
2,352Активность: |
Sargaraser, я уже о другом спрашивал, мне именно нужно было движение.
MegaBlax добавил:
Ну-ка гляньте, ((кат
((код jass
globals
hashtable gc = InitHashtable() endglobals function SX takes real ux returns real
if ux > GetRectMaxX(bj_mapInitialPlayableArea)then return GetRectMaxX(bj_mapInitialPlayableArea) elseif ux < GetRectMinX(bj_mapInitialPlayableArea)then return GetRectMinX(bj_mapInitialPlayableArea) else return ux endif endfunction function SY takes real uy returns real
if uy > GetRectMaxY(bj_mapInitialPlayableArea)then return GetRectMaxY(bj_mapInitialPlayableArea) elseif uy < GetRectMinY(bj_mapInitialPlayableArea)then return GetRectMinY(bj_mapInitialPlayableArea) else return uy endif endfunction function Trig_FS_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000' endfunction function Move takes nothing returns nothing
local timer t = GetExpiredTimer() local integer i = GetHandleId(t) local unit u = LoadUnitHandle(gc,i,1) local integer c = LoadInteger(gc,i,2) local real d = 60. local real a = GetUnitFacing(u) local real x = GetUnitX(u)+d*Cos(a*bj_DEGTORAD) local real y = GetUnitY(u)+d*Sin(a*bj_DEGTORAD) if(c!=10)then set c = c + 1 call SetUnitX(u,SX(x)) call SetUnitY(u,SX(y)) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl",x,y)) call SaveInteger(gc,i,2,c) else call PauseTimer(t) call DestroyTimer(t) endif set t = null set u = null endfunction function Trig_FS_Actions takes nothing returns nothing
local timer t = CreateTimer() local integer i = GetHandleId(t) local unit u = GetSpellTargetUnit() local integer c = 0 if(GetSpellTargetItem()!=null)then set u = GetTriggerUnit() endif call SaveUnitHandle(gc,i,1,u) call SaveInteger(gc,i,2,c) call TimerStart(t,.03,true,function Move) set t = null set u = null endfunction function InitTrig_FS takes nothing returns nothing
local trigger t = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(t,Condition (function Trig_FS_Conditions)) call TriggerAddAction(t,function Trig_FS_Actions) set t =null endfunction )) )) Двигает юнита вперед на 600 едениц. MegaBlax добавил:
Ну и кто скаже как этой системой пользоваться?! Где писать SafeX/Y ((кат
((код jass
globals
real Game_MaxX real Game_MinX real Game_MaxY real Game_MinY hashtable gc = InitHashtable() endglobals function SetUpSafeXY takes nothing returns nothing
set Game_MaxX = GetRectMaxX(bj_mapInitialPlayableArea)-50. set Game_MinX = GetRectMinX(bj_mapInitialPlayableArea)+50. set Game_MaxY = GetRectMaxY(bj_mapInitialPlayableArea)-50. set Game_MinY = GetRectMinY(bj_mapInitialPlayableArea)+50. endfunction function SafeX takes real x returns real
if x<Game_MinX then return Game_MinX elseif x>Game_MaxX then return Game_MaxX endif return x endfunction function SafeY takes real y returns real if y<Game_MinY then return Game_MinY elseif y>Game_MaxY then return Game_MaxY endif return y endfunction )) )) |
16.06.2013, 13:53 | #32
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
да правильно, только не знаю звчем перед уничтожением таймер паузить) |
16.06.2013, 13:56 | #33
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
MegaBlax
offline
Опыт:
2,352Активность: |
Sargaraser, так, чисто формальности :)
Так все врубился где-что писать. Вот готово!
((кат
((код jass
function Trig_FS_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A000' endfunction function Move takes nothing returns nothing
local timer t = GetExpiredTimer() local integer i = GetHandleId(t) local unit u = LoadUnitHandle(gc,i,1) local integer c = LoadInteger(gc,i,2) local real d = 60. local real a = GetUnitFacing(u) local real x = GetUnitX(u) local real y = GetUnitY(u) local real xx local real yy if(c!=10)then set c = c + 1 set xx = SafeX(x+d*Cos(a*bj_DEGTORAD)) set yy = SafeY(y+d*Sin(a*bj_DEGTORAD)) call SetUnitX(u,xx) call SetUnitY(u,yy) call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl",x,y)) call SaveInteger(gc,i,2,c) else call PauseTimer(t) call DestroyTimer(t) endif set t = null set u = null endfunction function Trig_FS_Actions takes nothing returns nothing
local timer t = CreateTimer() local integer i = GetHandleId(t) local unit u = GetSpellTargetUnit() local integer c = 0 if(GetSpellTargetItem()!=null)then set u = GetTriggerUnit() endif call SaveUnitHandle(gc,i,1,u) call SaveInteger(gc,i,2,c) call TimerStart(t,.03,true,function Move) set t = null set u = null endfunction function InitTrig_FS takes nothing returns nothing local trigger t = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(t,Condition (function Trig_FS_Conditions)) call TriggerAddAction(t,function Trig_FS_Actions) set t =null endfunction )) )) Отредактировано MegaBlax, 16.06.2013 в 14:10. |
16.06.2013, 13:58 | #34
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Buulichkaa
Делаю спеллы за еду
offline
Опыт:
20,171Активность: |
safex y это своего рода пропускные врата, которые не пропустят дизертира-координату, если он не лежит в ректе, используй так же как и мои функции через x проверяешь х, через у - у, только в инициализации нужно вызвать фукцию которая нам пропишет координаты игровой зоны
Sargaraser добавил: таблицу нужно очищать если данные не используются |
16.06.2013, 14:07 | #35
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,158Активность: |
SetUnitX(unit, SafeX(coord))
Clamp добавил: Даже так: #define SetUnitX(a,b) = SetUnitX(a,SafeX(b)) #define SetUnitY(a,b) = SetUnitY(a,SafeY(b)) |
16.06.2013, 14:44 | #36
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|