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

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

Ответ
 
Redok

offline
Опыт: 2,249
Активность:
Починка и оптимизация
Помогите разобратся почему не работает крюк Meat Hook из доты вот весь триггеры

Код:
function uh takes nothing returns boolean
return GetSpellAbilityId()=='A003'
endfunction

function e8 takes handle h returns integer
return h
return 0
endfunction

function Ea takes handle h returns string
return I2S(e8(h))
endfunction

function EB takes string Eb,string Ec,handle EC returns nothing
call StoreInteger(udg_AG,Eb,Ec,e8(EC))
endfunction

function Ee takes string Eb,string Ec,real ED returns nothing
call StoreReal(udg_AG,Eb,Ec,ED)
endfunction

function EK takes string Eb,string Ec returns integer
return GetStoredInteger(udg_AG,Eb,Ec)
endfunction

function EF takes string Eb,string Ec returns unit
return GetStoredInteger(udg_AG,Eb,Ec)
return null
endfunction

function El takes string Eb,string Ec returns real
return GetStoredReal(udg_AG,Eb,Ec)
endfunction

function Ed takes string Eb,string Ec,integer ED returns nothing
call StoreInteger(udg_AG,Eb,Ec,ED)
endfunction

function uk takes nothing returns boolean
if(IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) or GetUnitAbilityLevel(GetFilterUnit(),'A004')==1)or GetFilterUnit()==udg_Ai then
return false
endif
if GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE)<=0 or GetUnitTypeId(GetFilterUnit())=='u000'or GetUnitTypeId(GetFilterUnit())=='H004'or IsUnitType(GetFilterUnit(),UNIT_TYPE_ANCIENT) then
return false
endif
return true
endfunction

function uH takes unit FF,unit Fg returns nothing
local unit kd=CreateUnit(GetOwningPlayer(FF),'u000',GetUnitX(Fg),GetUnitY(Fg),0)
call UnitAddAbility(kd,'A005')
call IssueTargetOrderById(kd,852095,Fg)
endfunction

function EG takes string Eb,string Ec returns timer
return GetStoredInteger(udg_AG,Eb,Ec)
return null
endfunction

function EA takes string Eb returns nothing
call FlushStoredMission(udg_AG,Eb)
endfunction

function ui takes nothing returns nothing
local timer t=GetExpiredTimer()
local timer uI=EG(Ea(t),"ExtendCache")
local string Fc=Ea(uI)
local integer uj=EK(Fc,"ChainLinkNumber")
local unit Fg=EF(Fc,"Target")
local unit uJ=EF(Fc,"Pudge")
local unit gR=EF(Fc,"ChainLinks"+I2S(uj))
if(Fg!=null)then
call SetUnitX(Fg,GetUnitX(gR))
call SetUnitY(Fg,GetUnitY(gR))
endif
call RemoveUnit(gR)
call Ed(Fc,"ChainLinkNumber",uj-1)
if(uj==1)then
call PauseTimer(t)
call EA(Fc)
call EA(Ea(t))
call PolledWait(1)
call DestroyTimer(t)
call DestroyTimer(uI)
endif
endfunction

function uK takes nothing returns nothing
local timer t=GetExpiredTimer()
local string Fc=Ea(t)
local integer uj=EK(Fc,"ChainLinkNumber")
local unit uJ=EF(Fc,"Pudge")
local real Nm=El(Fc,"Angle")
local integer MZ=GetUnitAbilityLevel(uJ,'A003')
local unit gR
local group E1
local real x
local real y
local boolexpr ul
local timer uL
local string Cache2
if(uj<5+6*MZ)then
set uj=uj+1
set x=GetUnitX(uJ)+uj*40*Cos(Nm*bj_DEGTORAD)
set y=GetUnitY(uJ)+uj*40*Sin(Nm*bj_DEGTORAD)
set gR=CreateUnit(GetOwningPlayer(uJ),'u000',x,y,Nm)
call EB(Fc,"ChainLinks"+I2S(uj),gR)
call Ed(Fc,"ChainLinkNumber",uj)
set E1=CreateGroup()
set udg_Ai=uJ
set ul=Condition(function uk)
call GroupEnumUnitsInRange(E1,x,y,'}',ul)
call DestroyBoolExpr(ul)
set gR=FirstOfGroup(E1)
call DestroyGroup(E1)
if(gR!=null)then
call uH(uJ,gR)
call EB(Fc,"Target",gR)
if IsUnitEnemy(gR,GetOwningPlayer(uJ))then
call UnitDamageTargetBJ(uJ,gR,MZ*'d',ATTACK_TYPE_NORMAL,DAMAGE_TYPE_ENHANCED)
call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\BloodElfSpellThiefBlood.mdl",gR,"origin"))
endif
call PauseTimer(t)
set uL=CreateTimer()
call EB(Ea(uL),"ExtendCache",t)
call TimerStart(uL,.03,true,function ui)
endif
else
call PauseTimer(t)
set uL=CreateTimer()
call EB(Ea(uL),"ExtendCache",t)
call TimerStart(uL,.03,true,function ui)
endif
endfunction

function um takes nothing returns nothing
local location uM=GetUnitLoc(GetSpellAbilityUnit())
local location Nf=GetSpellTargetLoc()
local timer t=CreateTimer()
local unit uJ=GetTriggerUnit()
local real Nm=AngleBetweenPoints(uM,Nf)
local string Fc=Ea(t)
call EB(Fc,"Pudge",uJ)
call Ee(Fc,"Angle",Nm)
call TimerStart(t,.03,true,function uK)
call RemoveLocation(uM)
call RemoveLocation(Nf)
endfunction

//===========================================================================
function InitTrig_hU takes nothing returns nothing
set udg_dF=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(udg_dF,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(udg_dF,Condition(function uh))
call TriggerAddAction(udg_dF,function um)
endfunction
Старый 21.02.2009, 23:44
agentex

offline
Опыт: 34,834
Активность:
О ужас :О мне кажется намного легче с нуля написать, чем разбираться в ЭТОМ

agentex добавил:
Тем более он тут на кеше :х
Старый 22.02.2009, 02:36
Redok

offline
Опыт: 2,249
Активность:
Блин, просто крюк который был выложен на сайте, на гуи, он вроде нормально работал, но позже, я заметил что иногда, он при притягивании останавливается на половину ) Вот за этого я и решил с доты выдрать ))
Старый 22.02.2009, 09:34
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
Redok Просто этот хук сделанный на GUI не предзначен для нескольких пуджей...

Вот я бы тоже попросил у кого-нибудь пример MUI хука..=)
Старый 22.02.2009, 09:39
Redok

offline
Опыт: 2,249
Активность:
Блин, вот у меня новый код появился, вот он по проще будет, вот обьясните мне, почему тут предупреждение при сохранение карты вылетает ?

Код:
function Con takes nothing returns boolean
    return GetSpellAbilityId()=='A003'
endfunction

function Con2 takes nothing returns boolean
    return IsUnitAliveBJ(GetFilterUnit())==true 
endfunction

function Con4 takes nothing returns boolean
    return IsUnitAlly(udg_H_Unit[2],GetOwningPlayer(udg_H_Unit[1]))==false
endfunction

function Con3 takes nothing returns boolean
    return udg_H_Links>3
endfunction

function Con5 takes nothing returns boolean
    return udg_H_Unit[2]!=null
endfunction

function Con1 takes nothing returns boolean
    return udg_H_Links<(5+(udg_H_Level*6))
endfunction

function Con6 takes nothing returns boolean
    return udg_H_Links==0
endfunction

function Down takes nothing returns nothing
    call SetUnitPositionLoc(udg_H_Unit[2],GetUnitLoc(udg_H_Link[udg_H_Links]))
    call RemoveUnit(udg_H_Link[udg_H_Links])
    set udg_H_Links=(udg_H_Links-1)
    if Con6() then
        set udg_H_Unit[2]=null
        set udg_H_Unit[1]=null
        return
    endif
endfunction

function Up takes nothing returns boolean
    if Con1() then
        set udg_H_Links=(udg_H_Links+1)
        call CreateNUnitsAtLoc(1,'u000',GetOwningPlayer(udg_H_Unit[1]),PolarProjectionBJ(GetUnitLoc(udg_H_Unit[1]),I2R((40*udg_H_Links)),udg_H_Angle),udg_H_Angle)
        set udg_H_Link[udg_H_Links]=GetLastCreatedUnit()
        call PauseUnit(udg_H_Link[udg_H_Links],true)
        set udg_H_Group=GetUnitsInRangeOfLocMatching(115.00,GetUnitLoc(udg_H_Unit[udg_H_Links]),Condition(function Con2))
        if Con3() then
            set udg_H_Unit[2]=GroupPickRandomUnit(udg_H_Group)
            call DestroyGroup(udg_H_Group)
            set udg_H_Group=null
            if Con4() then
                call UnitDamageTargetBJ(udg_H_Unit[1],udg_H_Unit[2],(100.00*I2R(udg_H_Level)),ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL)
            endif
        endif
        if Con5() then
            call Down()
            return
        endif
    else
        call Down()
        return
    endif
endfunction

function General takes nothing returns nothing
    local trigger tr=CreateTrigger()
    set udg_H_Level=GetUnitAbilityLevelSwapped('A003',GetSpellAbilityUnit())
    set udg_H_Angle=AngleBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()),GetSpellTargetL  oc())
    set udg_H_Unit[1]=GetSpellAbilityUnit()
    call TriggerRegisterTimerEventPeriodic(tr,0.04)
    call TriggerAddAction(tr,function Up)
    set tr=null
endfunction

//===========================================================================
function InitTrig_Ant takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(t,Condition(function Con))
    call TriggerAddAction(t,function General)
    set t=null
endfunction
Старый 22.02.2009, 13:23
Ответ

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

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

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

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



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