System BuffStruct

Discussion in 'Systems and Snippets' started by Jesus4Lyf, Jan 28, 2010.

  1. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    What result are you expecting? What is not happening what should, or you wish to have happen?

    Did any of the examples help? ;)
     
  2. AoW_Hun7312

    AoW_Hun7312 I'm a magic man, I've got magic hands.

    Ratings:
    +76 / 0 / -0
    The ability applies the buff, so isn't the onCreate method supposed to run? I just have a BJDebugMsg call there, and it isn't being displayed.
     
  3. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    Can you post code/demo map? It works fine in the examples...

    Edit: I have just tested the onCreate method (which is not static - in case that's your issue) with a BJDebugMsg call for BuffStruct version 1.0.4 and it works fine. :)
     
  4. AoW_Hun7312

    AoW_Hun7312 I'm a magic man, I've got magic hands.

    Ratings:
    +76 / 0 / -0
    JASS:
    //! runtextmacro BuffType("Dummy")
        //! runtextmacro SetBuffName("DummyBuff")
        //! runtextmacro SetBuffAlignment("NEGATIVE")
        //! runtextmacro SetBuffTooltip(" ")
        //! runtextmacro SetBuffIcon("None")
    //! runtextmacro BuffStruct()
        
        method onCreate takes nothing returns nothing
            call BJDebugMsg("Created!")
        endmethod
        method onDamageRecieved takes nothing returns nothing
            call BJDebugMsg("Damaged!")
        endmethod
        method preDestroy takes nothing returns nothing
            call BJDebugMsg("Destroyed!")
        endmethod
    //! runtextmacro EndBuff()


    None of the messages display.
     
  5. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    Should be "onDamageReceived", but aside from that, I can take your buff and put it straight into the demo map and add it in the way the demo map add its buff, and it works 100%.

    Let me know if implementing it in the demo map works for you. Remember that all buffs must be located between the BuffStruct head and footer, as per the documentation. :)
     
  6. AoW_Hun7312

    AoW_Hun7312 I'm a magic man, I've got magic hands.

    Ratings:
    +76 / 0 / -0
    Apparently abilities that use the buffs don't "count" for this system. When I used the demo map and modified the Light Headed buff to display text, it worked. When I added the buff to Storm Bolt and casted it, it didn't work.
     
  7. 13lade619

    13lade619 is now a game developer :)

    Ratings:
    +399 / 0 / -0
    uh.. you need to use the script " BuffName.setUnit(unit) ", not just create a buffstruct.
    Everything is triggered., object editor wont cut it.

    I see no mention of that in your earlier posts.
     
  8. muzk

    muzk Member

    Ratings:
    +3 / 0 / -0
    Is posible something like this:
    JASS:
    
    scope Something
    globals
    //blabla
    endglobals
    //! runtextmacro BuffType("something")
    //.................
    //! runtextmacro BuffStruct()
    //.........................
    //! runtextmacro EndBuff()
    endscope
     
  9. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    Sure, why not...
    Just the BuffStruct won't be private to the scope, I imagine. :)
     
  10. muzk

    muzk Member

    Ratings:
    +3 / 0 / -0
    Because every usage I see is like...

    JASS:
    //! runtextmacro BuffType("tossBuff")
    //.................
    //! runtextmacro BuffStruct()
    //.........................
    //! runtextmacro EndBuff()
    scope tossAbil
    //onEffect tossBuff.create(blabla)
    endscope

    :D

    Btw, thx j4l for your resources, they all are great ones :thup:
     
  11. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    Cheers! Enjoy. :thup:
     
  12. muzk

    muzk Member

    Ratings:
    +3 / 0 / -0
    I have a small problem, sometimes my buffs shows an other buff Icon. I trought it happens cuz I created a lot of buff via this system and there are some that I dont use anymore or I deleted from the object data.

    For example, I have two buffs : A and B. So, sometimes when I cast X spell that applies (via trigger) A, it shows B icon, but it do A actions.
     
  13. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    Odd. I imagine like with any object data issues and this system, it will magically solve itself sooner or later... Usually once people save, restart the editor and save again or something it fixes up..

    Either way, the system recreates all the abilities every time you save it. So deleting a buff should be fine, once it works itself out. :thup:

    Let me know if problems persist...
     
  14. Laiev

    Laiev Hey Listen!!

    Ratings:
    +187 / 0 / -0
    What happen if I use BuffStruct + Status, I mean... Silence already got a buff, if I add status inside the buffstruct the target will get 2 buffs?

    like:

    JASS:
    //! runtextmacro BuffType("Return")
        //! runtextmacro SetBuffName("Return")
        //! runtextmacro SetBuffAlignment("NEUTRAL")
        //! runtextmacro SetBuffTooltip("This unit is being Returned; it will return to its previous location soon.")
        //! runtextmacro SetBuffIcon("ReplaceableTextures\\CommandButtons\\BTNDaggerOfEscape.blp")
    //! runtextmacro BuffStruct()
     
        method onApply takes nothing returns nothing
            call Status[.unit].addSilence()
        endmethod
        method preDestroy takes nothing returns nothing
            call Status[.unit].removeSilence()
        endmethod
    //! runtextmacro EndBuff()
     
  15. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    Yes, unfortunately you will have the "Stunned" or whatever buff from Status as well... it is a Warcraft III limitation, unless you manually create the buffs, this cannot be avoided as far as I know. :)
     
  16. Laiev

    Laiev Hey Listen!!

    Ratings:
    +187 / 0 / -0
    BuffStruct allow dynamic values?

    JASS:
    library A
    globals
        private integer Dynamic = 0
    endglobals
    
    //! runtextmacro BuffType("Return")
        //! runtextmacro SetBuffName("Return")
        //! runtextmacro SetBuffAlignment("NEUTRAL")
        //! runtextmacro SetBuffTooltip("This unit is being Returned; it will return to its previous location soon.")
        //! runtextmacro SetBuffIcon("ReplaceableTextures\\CommandButtons\\BTNDaggerOfEscape.blp")
    //! runtextmacro BuffStruct()
        integer i
        
        method onCreate takes nothing returns nothing
            set .i = Dynamic
        endmethod
        method onApply takes nothing returns nothing
            call Status[.unit].modStrBonus(.i)
        endmethod
        method preDestroy takes nothing returns nothing
            call Status[.unit].modStrBonus(-.i)
        endmethod
    //! runtextmacro EndBuff()
    
    
    
    function B takes unit u, integer h returns nothing
        set Dynamic = h
        call Return.setUnit(u).destroyTimed(20)
    endfunction
    
    endlibrary
     
  17. muzk

    muzk Member

    Ratings:
    +3 / 0 / -0
    Yes, also you can do something like this if you dont beleive
    JASS:
    //! runtextmacro BuffType("Return")
        //! runtextmacro SetBuffName("Return")
        //! runtextmacro SetBuffAlignment("NEUTRAL")
        //! runtextmacro SetBuffTooltip("This unit is being Returned; it will return to its previous location soon.")
        //! runtextmacro SetBuffIcon("ReplaceableTextures\\CommandButtons\\BTNDaggerOfEscape.blp")
    //! runtextmacro BuffStruct()
        private integer i
        method operator str= takes value returns nothing
              set this.i = value
              call Status[.unit].modStrBonus(value)
        endmethod
        method preDestroy takes nothing returns nothing
            call Status[.unit].modStrBonus(-.i)
        endmethod
    //! runtextmacro EndBuff()
    
    function B takes unit u, integer h returns nothing
        local Return k = Return.setUnit(u)
        set k.str = h
        call k.destroyTimed(20)
    endfunction



    Also, I'm not sure if something like this works
    JASS:
        
       //.......
       method str takes value returns thistype
              set this.i = value
              call Status[.unit].modStrBonus(value)
              return this
        endmethod
        //......
    function B takes unit u, integer h returns nothing
        call Return.setUnit(u).str(h).destroyTimed(20)
    endfunction
     
  18. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    I think it should be Return.create not Return.setUnit off memory, but all of the above are fine. I like that chaining one... Usually I write a wrapper constructor, a static method which inside calls create, sets the values, and returns the new instance...
     
  19. 13lade619

    13lade619 is now a game developer :)

    Ratings:
    +399 / 0 / -0
    I want to modify this to check if the buff was destroyed before before calling the callback on timedDestroy..
    so that I wont do a double removal.

    JASS:
            private static method timedDestroyCallback takes nothing returns nothing
                static if LIBRARY_TimerUtils then
                    local timer t=GetExpiredTimer()
                    call thistype(GetTimerData(t)).destroy()
                    call ReleaseTimer(t)
                endif
            endmethod


    Any ideas?
     
  20. muzk

    muzk Member

    Ratings:
    +3 / 0 / -0
    JASS:
    if thistype(GetTimerData(t))==0 then
            call BJDebugMsg("Double free!")
    else
           call thistype(GetTimerData(t)).destroy()
           //etc
    endif

    ??
     

Share This Page