NIKZ
Изучаю Jass
offline
Опыт:
6,036Активность: |
Что то не так с магией
Помогите поправить спелл
((код jass
scope FirebalMotion initializer Init
group FB_Group=CreateGroup()
struct Firebal
unit u
unit d location l real Angle real distance endstruct
private cond takes nothing returns boolean
return GetSpellAbilityId() == 'A01V' or GetSpellAbilityId() == 'A024' endfunction private function cast takes nothing returns nothing
unit u=GetEnumUnit() Firebal FB=LoadInt(HASHTABLE,GetHandleId(u),2) player p=GetOwningPlayer(FB.u) unit dummy=CreateUnit(GetOwningPlayer(FB.u),'e000', GetUnitX(u),GetUnitY(u),0.) bool check=GetUnitState(u, UNIT_STATE_LIFE) >0 and IsUnitEnemy(u, p) if check then
UnitAddAbility(dummy, 'A05Y') SetUnitAbilityLevel( dummy,'A05Y', GetUnitAbilityLevel(FB.u,'A024')) UnitApplyTimedLife(dummy,'BTLF',1.00 ) IssueTargetOrder(dummy, "thunderbolt", u ) else UnitShareVision( u,p, true ) IssueTargetOrder(dummy, "thunderbolt", u ) UnitShareVision( u,p, false ) endif dummy=null u=null p=null FB.destroy() FlushChildHashtable(HASHTABLE,2) endfunction private function Move takes nothing returns nothing
timer FB_Timer=GetExpiredTimer() Firebal FB=LoadInt(HASHTABLE,GetHandleId(FB_Timer),2) if FB.distance < 0.03 then
call DestroyTimer(FB_Timer) call UnitRemoveAbility(FB.u,'A01V') call SetPlayerAbilityAvailable(GetOwningPlayer(FB.u), 'A024', true) call GroupEnumUnitsInRange(FB_Group,GetUnitX(FB.d),GetUnitY(FB.d),205.,null) call ForGroup(FB_Group,function cast) call GroupClear(FB_Group) call FlushChildHashtable(HASHTABLE,2) FB.destroy() FB_Timer=null else FB.distance - 0.03 SetUnitPosition(FB.d,GetUnitX(FB.d) + 20 * Cos(FB.Angle)* bj_DEGTORAD),GetUnitY(FB.d) + 20* Sin(FB.Angle) * bj_DEGTORAD)) endif endfunction
private function action takes nothing returns nothing
Firebal FB=Firebal.create() location loc=GetSpellTargetLoc() unit FB_Unit=GetSpellAbilityUnit() player p=GetOwningPlayer(FB_Unit) unit FB_Dummy=CreateUnit(p,'e004',GetUnitX(FB_Unit),GetUnitY(FB_Unit),Angle) real Angle=AngleBetweenPoints(GetUnitLoc(FB_Unit),loc) real distance = 10000.00 timer FB_Timer=CreateTimer() set FB.d=FB_Dummy
set FB.u=FB_Unit set FB.l=loc set FB.Angle=Angle set FB.distance = distance call SaveInt(HASHTABLE,GetHandleId(FB_Timer),2,FB)
if ( GetSpellAbilityId() == 'A024' ) then
call SetPlayerAbilityAvailable(p, 'A024', false) call UnitAddAbility(FB_Unit ,'A01V') call SetUnitPathing( FB_Dummy, false ) call TimerStart(FB_Timer,0.03,true,function Move) call SetUnitAnimation(FB_Unit,"stand") call RemoveLocation(loc) set FB_Timer=null set loc=null endif if (GetSpellAbilityId() == 'A01V') then
call UnitRemoveAbility(FB_Unit,'A01V') call SetPlayerAbilityAvailable(p, 'A024', true) call GroupEnumUnitsInRange(FB_Group,GetUnitX(FB_Dummy),GetUnitY(FB_Dummy),205.,null) call ForGroup(FB_Group,function cast) call DestroyTimer(FB_Timer) call GroupClear(FB_Group) endif set FB_Dummy=null set FB_Unit=null endfunction private function Init takes nothing returns nothing
trigger trg = CreateTrigger() call TriggerRegisterAnyUnitEventBJ( trg , EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( trg , Condition( function cond ) ) call TriggerAddAction( trg , function actions ) endfunction endscope )) [+] замечание от Nerevar: АП+тема не в том разделе+ознакомься с этим хотя бы http://xgm.ru/forum/showthread.php?t=5653
Отредактировано Nerevar, 31.07.2012 в 20:21. |
31.07.2012, 16:03 | #1
+0/−7
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
NIKZ, где отладочные сообщения? где описание как должно работать? где описание как оно не работает? где все это? думаете если закинете код то тут провангуют и погадают на коде? |
31.07.2012, 20:14 | #2
+2/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,544Активность: |
NIKZ, ну GetSpellTargetLoc уже не в моде, есть GetSpellTargetX ну и Y разумеется и еще очень было умно юзать область, и разводить панты, чё нельзя всё проще и короче написать? И нафиг, ваще тут структура?, ну зачем? скилл примитивнее некуда, полёт триггерного снаряда, юзай обычный хеш и не парься.... |
01.08.2012, 07:03 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Vadik29
Choice Battle 1.6а
offline
Опыт:
15,245Активность: |
NIKZ, Может сначала выучишь обычный джасс, а уже потом vJass ?
Angle=AngleBetweenPoints(GetUnitLoc(FB_Unit),loc) - фэил + утечка |
01.08.2012, 11:07 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|