help with 1.24 coding

masta_orc

Cool Member
Reaction score
0
hi,
well i read many threads about fixing old scripts but.. i cant get this one to work. would be very nice if someone could help me :(

original 1.23 script:
JASS:
function GetSiphonGoldCache takes nothing returns gamecache
    return gg_trg_Siphon_Gold
    call DoNothing()
    return null
endfunction

function Initialize_SiphonGold_Variables takes nothing returns nothing
    local gamecache  g = GetSiphonGoldCache()
    local integer array gold

    local integer SiphonGoldAbility = 'A00C'
    set gold[1] = 8    // Level 1 this value is per second
    set gold[2] = 8    // Level 2 this value is per second
    set gold[3] = 8    // Level 3 this value is per second

    call StoreIntegerBJ( SiphonGoldAbility, "Ability", "Ability", g )
    call StoreIntegerBJ( gold[1], "Level1", "Gold", g )
    call StoreIntegerBJ( gold[2], "Level2", "Gold", g )
    call StoreIntegerBJ( gold[3], "Level3", "Gold", g )
endfunction

function SiphonGoldAbility takes nothing returns integer
    return GetStoredInteger(GetSiphonGoldCache(), "Ability", "Ability")
endfunction

function SiphonGoldGameCache2Trigger takes gamecache g returns trigger
    return g
    call DoNothing()
    return null
endfunction

function SiphonGoldHandle2Integer takes handle h returns integer
    return h
    call DoNothing()
    return 0
endfunction

function SiphonGoldInteger2Effect takes integer i returns effect
    return i
    call DoNothing()
    return null
endfunction

function SiphonGoldInteger2Unit takes integer i returns unit
    return i
    call DoNothing()
    return null
endfunction

function SiphonGoldInteger2Timer takes integer i returns timer
    return i
    call DoNothing()
    return null
endfunction

function SiphonGoldInteger2Trigger takes integer i returns trigger
    return i
    call DoNothing()
    return null
endfunction

function SiphonGoldInteger2TextTag takes integer i returns texttag
    return i
    call DoNothing()
    return null
endfunction

function Trig_Siphon_Gold_Floating takes nothing returns nothing
    local gamecache g = GetSiphonGoldCache()
    local texttag text1 = SiphonGoldInteger2TextTag( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "text1") )
    local texttag text2 = SiphonGoldInteger2TextTag( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "text2") )
    local integer transp = GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "transp")
    if (transp < 100) then
        set transp = transp + 5
        call SetTextTagColorBJ( text1, 100, 100, 0.00, transp )
        call SetTextTagColorBJ( text2, 100, 100, 0.00, transp )
        call StoreIntegerBJ( transp, "transp", I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), g )
    else
        call DestroyTextTag(text1)
        call DestroyTextTag(text2)
        call DestroyTimer(GetExpiredTimer())
        call DestroyTrigger(GetTriggeringTrigger())
    endif
endfunction

function Trig_Siphon_Gold_Timer takes nothing returns nothing
    local gamecache g = GetSiphonGoldCache()
    local unit caster = SiphonGoldInteger2Unit( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "caster") )
    local unit target = SiphonGoldInteger2Unit( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "target") )
    local integer max = GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "max")
    local integer floating = GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), "counter")
    local integer on = GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(caster)), "on")
    local integer floatgold = 0

    local trigger   t
    local timer     c

    if (on == 0) then
        if (floating > 1) then
            set floatgold = floating*2
            call StoreIntegerBJ( 0, "counter", I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), g )
        endif
        call DestroyEffect( SiphonGoldInteger2Effect( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(caster)), "Effect1") ) )
        call DestroyEffect( SiphonGoldInteger2Effect( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(caster)), "Effect2") ) )
        call DestroyTimer( SiphonGoldInteger2Timer( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(caster)), "timer") ) )
        call DestroyTrigger( SiphonGoldInteger2Trigger( GetStoredInteger(g, I2S(SiphonGoldHandle2Integer(caster)), "trigger") ) )
    else
        if ( GetPlayerState(GetOwningPlayer(target), PLAYER_STATE_RESOURCE_GOLD) > 1 ) then
            call AdjustPlayerStateBJ( 2, GetOwningPlayer(caster), PLAYER_STATE_RESOURCE_GOLD )
            call AdjustPlayerStateBJ( -2, GetOwningPlayer(target), PLAYER_STATE_RESOURCE_GOLD )
            if (floating == (max/4)) then
                set floatgold = max*2/4
                set floating = 0
            endif
            call StoreIntegerBJ( floating + 1, "counter", I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), g )
        elseif (floating > 1) then
            set floatgold = (floating-1)*2
            call StoreIntegerBJ( 0, "counter", I2S(SiphonGoldHandle2Integer(GetExpiredTimer())), g )
        endif
    endif
    if (floatgold > 0) then
        set t = CreateTrigger(  )
        set c = CreateTimer()
        call TriggerRegisterTimerExpireEventBJ( t, c )
        call TriggerAddAction( t, function Trig_Siphon_Gold_Floating )
        call StartTimerBJ( c, true, 0.07  )
        call CreateTextTagUnitBJ( "+" + I2S(floatgold), caster, 0, 10, 100, 100, 100, 0 )
        call SetTextTagColorBJ( GetLastCreatedTextTag(), 100, 100, 0.00, 0 )
        call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 100, 90 )
        call StoreIntegerBJ( SiphonGoldHandle2Integer(GetLastCreatedTextTag()), "text1", I2S(SiphonGoldHandle2Integer(c)), g )
        call CreateTextTagUnitBJ( "-" + I2S(floatgold), target, 0, 10, 100, 100, 100, 0 )
        call SetTextTagColorBJ( GetLastCreatedTextTag(), 100, 100, 0.00, 0 )
        call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 100, 90 )
        call StoreIntegerBJ( SiphonGoldHandle2Integer(GetLastCreatedTextTag()), "text2", I2S(SiphonGoldHandle2Integer(c)), g )
        call StoreIntegerBJ( 0, "transp", I2S(SiphonGoldHandle2Integer(c)), g )
    endif
endfunction

function Trig_Siphon_Gold_Conditions takes nothing returns boolean
    return ( GetSpellAbilityId() == SiphonGoldAbility() )
endfunction

function Trig_Siphon_Gold_Actions takes nothing returns nothing
    local unit      caster = GetSpellAbilityUnit()
    local effect    e
    local gamecache g = GetSiphonGoldCache()
    local trigger   t = CreateTrigger(  )
    local timer     c = CreateTimer()
    local integer   level = GetUnitAbilityLevelSwapped(SiphonGoldAbility(), caster)
    set e = AddSpecialEffectTarget("war3mapImported\\goldout.mdx",GetSpellTargetUnit(),"origin")
    call StoreIntegerBJ( SiphonGoldHandle2Integer(e), "Effect1", I2S(SiphonGoldHandle2Integer(caster)), g )
    set e = AddSpecialEffectTarget("war3mapImported\\goldin.mdx",caster,"origin")
    call StoreIntegerBJ( SiphonGoldHandle2Integer(e), "Effect2", I2S(SiphonGoldHandle2Integer(caster)), g )
    call TriggerRegisterTimerExpireEventBJ( t, c )
    call TriggerAddAction( t, function Trig_Siphon_Gold_Timer )
    call StoreIntegerBJ( 1, "on", I2S(SiphonGoldHandle2Integer(caster)), g )
    call StoreIntegerBJ( SiphonGoldHandle2Integer(c), "timer", I2S(SiphonGoldHandle2Integer(caster)), g )
    call StoreIntegerBJ( SiphonGoldHandle2Integer(t), "trigger", I2S(SiphonGoldHandle2Integer(caster)), g )
    call StoreIntegerBJ( SiphonGoldHandle2Integer(GetSpellTargetUnit()), "target", I2S(SiphonGoldHandle2Integer(c)), g )
    call StoreIntegerBJ( SiphonGoldHandle2Integer(caster), "caster", I2S(SiphonGoldHandle2Integer(c)), g )
    call StoreIntegerBJ( 1, "counter", I2S(SiphonGoldHandle2Integer(c)), g )
    call StoreIntegerBJ( GetStoredInteger(g, "Gold", "Level" + I2S(level)), "max", I2S(SiphonGoldHandle2Integer(c)), g )
    call StartTimerBJ( c, true, (I2R(2) / I2R(GetStoredInteger(g, "Gold", "Level" + I2S(level)) ))  )
endfunction

function Trig_Siphon_Gold_End_Actions takes nothing returns nothing
    local unit      caster = GetSpellAbilityUnit()
    local effect    e
    local gamecache g = GetSiphonGoldCache()
    call StoreIntegerBJ( 0, "on", I2S(SiphonGoldHandle2Integer(caster)), g )
endfunction

//===========================================================================
function InitTrig_Siphon_Gold takes nothing returns nothing
    local integer i = 0
    local trigger t1 = CreateTrigger(  )
    local trigger t2 = CreateTrigger(  )
    local trigger g = CreateTrigger(  )
    set gg_trg_Siphon_Gold = SiphonGoldGameCache2Trigger(InitGameCache( "SiphonGold.w3v" ))
    call Initialize_SiphonGold_Variables()
    loop
        exitwhen i > 11
        if ( GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING ) then
            call TriggerRegisterPlayerUnitEventSimple( t1, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT )
            call TriggerRegisterPlayerUnitEventSimple( t2, Player(i), EVENT_PLAYER_UNIT_SPELL_ENDCAST )
        endif
        set i = i + 1
    endloop
    call TriggerAddCondition( t1, Condition( function Trig_Siphon_Gold_Conditions ) )
    call TriggerAddAction( t1, function Trig_Siphon_Gold_Actions )
    call TriggerAddCondition( t2, Condition( function Trig_Siphon_Gold_Conditions ) )
    call TriggerAddAction( t2, function Trig_Siphon_Gold_End_Actions )
endfunction
 

_whelp

New Member
Reaction score
54
Use vJass, it will make your code easier to read and more efficient... and those typecasting things are really outdated... Also, use [noparse]
JASS:
[/noparse] tags.
 

SanKakU

Member
Reaction score
21
and try to replace as many of the red functions as you can...
looks like you are having a gamecache problem, looks like the same one i had...
you'll have to search for thread by my name and hit the one with 1.24 in the title...someone helped me with that already.
well nevermind i don't really understand all that gamecache stuff...your problem may be quite different...

anyway you might need to get someone (perhaps yourself) to convert the jass into vjass so it's easier for some expert here to give you a hand.

oh wait a sec, i looked at your code again and i see your H2I function now...haha yeah...uhm...i'm not sure but it looks like your code is way too complicated...why don't you use for example ISGV and then do //Initialize_SiphonGold_Variables as a comment? it's easier to type ISGV many times and if the code takes up less space, you can read the entire trigger faster. especially if you already read the comments, you can ignore them...
edit: yeah this thread here http://www.thehelper.net/forums/showthread.php?t=137492 might help some...
 

Jesus4Lyf

Good Idea™
Reaction score
397
Everyone else is being kinda not useful.

Basically, your code stores a gamecache object typecasted to a trigger in the trigger variable. You will need to create a gamecache variable or something to store it instead.

This means you either need to indicate you have NewGen, or indicate that you know something about hashtables. If you have NewGen, someone can rewrite this for you a bit. But you haven't said you have NewGen, or are willing to use it.
 

Lyerae

I keep popping up on this site from time to time.
Reaction score
105
Is there such a thing as a JASSer that doesn't use NewGen? (or at least JassHelper.)
 

SerraAvenger

Cuz I can
Reaction score
234
Is there such a thing as a JASSer that doesn't use NewGen? (or at least JassHelper.)

new ones.
actually, if your project is tiny and doesn't need much coding, it's most probably not necessary. But when you start to make more complex maps, it's incredibly helpful...

I guess you need a global hashtable. In this hashtable, you store handles to their handle id.
That way you can do

handle -> handleid:
StoreHandle( myHashTable, GetHandleId( handle ), 0, handle )
return GetHandleId( handle )

handleid -> handle:
return LoadHandle( myHashTable, GetHandleId( handle ), 0 )

This will mess up all your handle recycling, but it is 100% safe to use.

for the gamecache -> trigger...

just store the trigger into the gamecache!

for the gamecache, do what our friend 4Lyf said.
 

Lyerae

I keep popping up on this site from time to time.
Reaction score
105
NewGen is really useful for JASSing.
It has JassHelper and TESH. :D
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top