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

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

Ответ
 
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Заклинание в JNGP
Прошу помощи у соображающих людей,посмотрите код,я знаю что он ужасен помогите его привести в нормальный вид,работает спелл всё нормально,но хотелось бы научиться в дальнейшем использовать код не такой замудреный, и скажите как сделать его для мультиплеерного использования,у меня есть идея ну она опять глупая,записывая данные в хеш для каждого игрока отдельно

Код:
function Fiery_destruction_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A005' ) ) then
        return false
    endif
    return true
endfunction

function FilterFD takes nothing returns boolean
   return IsUnitAlly(GetFilterUnit(),GetOwningPlayer(GetSpellAbilityUnit())) == false and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) >= 0
endfunction

function ActionFD takes nothing returns nothing
   local unit u = CreateUnit(Player(LoadInteger(HashInit,8,1)),'h002',LoadReal(HashInit,8,2),LoadR  eal(HashInit,8,3),0)
   call IssueTargetOrder(u,"firebolt",GetEnumUnit())
   call UnitApplyTimedLife(u,'BTFL',1.00)
   set u = null
endfunction

function DamageFD takes nothing returns nothing
    local real r = 120*BrightSun()*I2R(GetPlayerState(Player(LoadInteger(HashInit,8,1)),PLAYER_STAT  E_RESOURCE_LUMBER))/10
    call DisplayTextToPlayer(GetLocalPlayer(),0,0,R2S(r))
    call UnitDamageTarget(LoadUnitHandle(HashInit,8,4),GetEnumUnit(),r,true,false,ATTACK_  TYPE_HERO,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
endfunction

function TimerFD takes nothing returns nothing
    call ForGroup(LoadGroupHandle(HashInit,8,5),function DamageFD)
    call DestroyTimer(LoadTimerHandle(HashInit,8,6))
    call DestroyGroup(LoadGroupHandle(HashInit,8,5))
    call FlushChildHashtable(HashInit,8)
endfunction

function Fiery_destruction_Actions takes nothing returns nothing
    local integer i = GetPlayerId(GetTriggerPlayer())
    local boolexpr b = Condition(function FilterFD)
    local real x = GetSpellTargetX()
    local real y = GetSpellTargetY()
    local group g = CreateGroup()
    local timer t = CreateTimer()
    call SaveInteger(HashInit,8,1,i)
    call SaveReal(HashInit,8,2,GetUnitX(GetSpellAbilityUnit()))
    call SaveReal(HashInit,8,3,GetUnitY(GetSpellAbilityUnit()))
    call SaveUnitHandle(HashInit,8,4,GetSpellAbilityUnit())
    call GroupEnumUnitsInRange(g,x,y,300,b)
    call ForGroup(g,function ActionFD)
    call SaveGroupHandle(HashInit,8,5,g)
    call TimerStart(t,Distance(LoadUnitHandle(HashInit,8,4),x,y)/1000,false,function TimerFD)
    call SaveTimerHandle(HashInit,8,6,t)
    call DestroyBoolExpr(b)
    set b = null
    set t = null
    set g = null
endfunction

//===========================================================================
function InitTrig_Fiery_destruction takes nothing returns nothing
    local integer i = 0
    set gg_trg_Fiery_destruction = CreateTrigger(  )
    loop
    call TriggerRegisterPlayerUnitEvent(gg_trg_Fiery_destruction, Player(i),EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    set i = i + 1
    exitwhen i == 11
    endloop
    call TriggerAddCondition( gg_trg_Fiery_destruction, Condition( function Fiery_destruction_Conditions ) )
    call TriggerAddAction( gg_trg_Fiery_destruction, function Fiery_destruction_Actions )
endfunction

Отредактировано Mr_KLOP, 18.10.2010 в 15:51.
Старый 18.10.2010, 15:42
Ответ

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

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

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

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



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