• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

[JASS] Handling Help

Status
Not open for further replies.
Level 10
Joined
Dec 13, 2008
Messages
222
I want to make MUI knockback ability, so i looked at some tutorials and copied this into my map script, and made init trigger for game cache udg_g (create cache, save, set variable):

JASS:
// ===========================
function H2I takes handle h returns integer
    return h
    return 0
endfunction

// ===========================
function LocalVars takes nothing returns gamecache
    return udg_g
endfunction

function SetHandleHandle takes handle subject, string name, handle value returns nothing
    if value==null then
        call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreInteger(LocalVars(), I2S(H2I(subject)), name, H2I(value))
    endif
endfunction

function SetHandleInt takes handle subject, string name, integer value returns nothing
    if value==0 then
        call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreInteger(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function SetHandleBoolean takes handle subject, string name, boolean value returns nothing
    if value==false then
        call FlushStoredBoolean(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreBoolean(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function SetHandleReal takes handle subject, string name, real value returns nothing
    if value==0 then
        call FlushStoredReal(LocalVars(), I2S(H2I(subject)), name)
    else
        call StoreReal(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function SetHandleString takes handle subject, string name, string value returns nothing
    if value==null then
        call FlushStoredString(LocalVars(), I2S(H2I(subject)), name)
    else
        call StoreString(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function GetHandleHandle takes handle subject, string name returns handle
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleInt takes handle subject, string name returns integer
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
endfunction
function GetHandleBoolean takes handle subject, string name returns boolean
    return GetStoredBoolean(LocalVars(), I2S(H2I(subject)), name)
endfunction
function GetHandleReal takes handle subject, string name returns real
    return GetStoredReal(LocalVars(), I2S(H2I(subject)), name)
endfunction
function GetHandleString takes handle subject, string name returns string
    return GetStoredString(LocalVars(), I2S(H2I(subject)), name)
endfunction

function GetHandleUnit takes handle subject, string name returns unit
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleTimer takes handle subject, string name returns timer
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleTrigger takes handle subject, string name returns trigger
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleEffect takes handle subject, string name returns effect
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleGroup takes handle subject, string name returns group
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleLightning takes handle subject, string name returns lightning
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleWidget takes handle subject, string name returns widget
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction

function FlushHandleLocals takes handle subject returns nothing
    call FlushStoredMission(LocalVars(), I2S(H2I(subject)) )
endfunction

Then, I just copied some example trigger into my map and changed it a bit. But now, there is a problem... Whenever unit is attacked, game crashes :SS

JASS:
function PoisonUnit_Update takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local unit victim = GetHandleUnit(t, "victim")
    local unit source = GetHandleUnit(t, "source")
    local integer steps = GetHandleInt(t, "steps")
    local real angle = GetHandleReal(t, "angle")

call SetUnitPositionLoc( victim, PolarProjectionBJ(GetUnitLoc(victim), 20.00, angle) )   
 
    if ( steps <= 1 ) then
        call FlushHandleLocals(t)
        call DestroyTimer(t)
        endif
    call SetHandleInt(t, "steps", steps-1)
endfunction

function PoisonUnit takes unit source, unit victim, real angle returns nothing
local timer t = CreateTimer()
local real update = 0.03
local unit source = GetAttacker()
local unit victim = GetAttackedUnitBJ()
local real angle = GetUnitFacing(GetAttacker())
local integer steps = 10
    call SetHandleInt(t, "steps", steps)
    call SetHandleHandle(t, "victim", victim)
    call SetHandleHandle(t, "source", source)
    call SetHandleReal(t, "angle", angle)
    call TimerStart(t, update, true, function PoisonUnit_Update)
endfunction

//===========================================================================
function InitTrig_Bash takes nothing returns nothing
    set gg_trg_Bash = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Bash, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddAction( gg_trg_Bash, function PoisonUnit )
endfunction

Please help me correct this trigger.
 
Status
Not open for further replies.
Top