XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
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
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
NIKZ, где отладочные сообщения? где описание как должно работать? где описание как оно не работает? где все это? думаете если закинете код то тут провангуют и погадают на коде?
Старый 31.07.2012, 20:14
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
NIKZ, ну GetSpellTargetLoc уже не в моде, есть GetSpellTargetX ну и Y разумеется
и еще очень было умно юзать область, и разводить панты, чё нельзя всё проще и короче написать?
И нафиг, ваще тут структура?, ну зачем? скилл примитивнее некуда, полёт триггерного снаряда, юзай обычный хеш и не парься....
Старый 01.08.2012, 07:03
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
NIKZ, Может сначала выучишь обычный джасс, а уже потом vJass ?
Angle=AngleBetweenPoints(GetUnitLoc(FB_Unit),loc) - фэил + утечка
Старый 01.08.2012, 11:07
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:23.