System Heal

Discussion in 'Systems and Snippets' started by kingkingyyk3, Dec 16, 2009.

  1. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    Bump~
     
  2. tooltiperror

    tooltiperror Super Moderator Staff Member

    Ratings:
    +233 / 0 / -0
    Should be reviewed, the code looks fine.
     
  3. HeX.16

    HeX.16 Isn't Trollin You Right Now

    Ratings:
    +131 / 0 / -0
    JASS:
    //
    //      @@   @@   @@@@@@    @@@    @    
    //      @@   @@   @@       @   @   @
    //      @@@@@@@   @@@@@   @ @@@ @  @
    //      @@   @@   @@      @     @  @
    //      @@   @@   @@@@@@  @     @  @@@@@@@@

    Shorten this L and i will use this system in my map.
     
  4. Lyerae

    Lyerae I keep popping up on this site from time to time.

    Ratings:
    +105 / 0 / -0
    JASS:
    //          /\    \                  /\    \                  /\    \                  /\    \ 
    //         /::\____\                /::\    \                /::\    \                /::\____\
    //        /:::/    /               /::::\    \              /::::\    \              /:::/    /
    //       /:::/    /               /::::::\    \            /::::::\    \            /:::/    / 
    //      /:::/    /               /:::/\:::\    \          /:::/\:::\    \          /:::/    /  
    //     /:::/____/               /:::/__\:::\    \        /:::/__\:::\    \        /:::/    /   
    //    /::::\    \              /::::\   \:::\    \      /::::\   \:::\    \      /:::/    /    
    //   /::::::\    \   _____    /::::::\   \:::\    \    /::::::\   \:::\    \    /:::/    /     
    //  /:::/\:::\    \ /\    \  /:::/\:::\   \:::\    \  /:::/\:::\   \:::\    \  /:::/    /      
    // /:::/  \:::\    /::\____\/:::/__\:::\   \:::\____\/:::/  \:::\   \:::\____\/:::/____/       
    // \::/    \:::\  /:::/    /\:::\   \:::\   \::/    /\::/    \:::\  /:::/    /\:::\    \       
    //  \/____/ \:::\/:::/    /  \:::\   \:::\   \/____/  \/____/ \:::\/:::/    /  \:::\    \      
    //           \::::::/    /    \:::\   \:::\    \               \::::::/    /    \:::\    \     
    //            \::::/    /      \:::\   \:::\____\               \::::/    /      \:::\    \    
    //            /:::/    /        \:::\   \::/    /               /:::/    /        \:::\    \   
    //           /:::/    /          \:::\   \/____/               /:::/    /          \:::\    \  
    //          /:::/    /            \:::\    \                  /:::/    /            \:::\    \ 
    //         /:::/    /              \:::\____\                /:::/    /              \:::\____\
    //         \::/    /                \::/    /                \::/    /                \::/    /
    //          \/____/                  \/____/                  \/____/                  \/____/



    Or use that. :p
     
  5. HeX.16

    HeX.16 Isn't Trollin You Right Now

    Ratings:
    +131 / 0 / -0
    Very nice xD
    And ToolTipError dont be so anal about the rules?
     
  6. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    Bump~
     
  7. Furby

    Furby Current occupation: News poster

    Ratings:
    +140 / 0 / -0
    Nice system, can come useful.

    PS. Shorten the fuckin "L". :D
     
  8. Viikuna

    Viikuna No Marlo no game.

    Ratings:
    +265 / 0 / -0
    Heal system is indeed useful, Its like damage detection. After all, you want to be able to control and detect and possibly prevent different kind of health changes.

    Both damage and heal.
     
  9. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    I'm using it in my map. [​IMG]
    It is very useful for me to control the healing and I can use it to do some heal blocking spells.
    I can manipulate the amount of hp bonus regeneration in item by using IDEA and Units' Inventory Data.
    JASS:
    ///////////////////////////////////////////////
    //  
    //  set HPRegenByType['hpea'].amount = 10.
    //  
    //  set UnitBasedRegen[unit].amount = 20.
    //
    ///////////////////////////////////////////////
    library CustomUnitRegenSystem requires T32, AIDS, Heal, Hash
        
        globals
            HealType NORMAL_UNIT_HP_REGEN
        endglobals
        
        struct HPRegenByType extends array
            real hp
            
            static method operator [] takes integer unitType returns thistype
                return Hash(unitType)
            endmethod
            
            method operator amount= takes real r returns nothing
                set .hp = r * T32_PERIOD
            endmethod
            
            method operator amount takes nothing returns real
                return hp * T32_FPS
            endmethod
            
        endstruct
        
        struct UnitBasedRegen extends array
            private real hp
            
            method operator amount= takes real r returns nothing
                set .hp = r * T32_PERIOD
            endmethod
            
            method operator amount takes nothing returns real
                return .hp * T32_FPS
            endmethod
            
            private method periodic takes nothing returns nothing
                call HealUnit(.unit,.unit,HPRegenByType[GetUnitTypeId(.unit)].hp + .hp,NORMAL_UNIT_HP_REGEN)
                                        //Prevent bug when a unit is upgraded/transformed.
            endmethod
            
            implement T32x
            
            private method AIDS_onCreate takes nothing returns nothing
                call .startPeriodic()
            endmethod
            
            private method AIDS_onDestroy takes nothing returns nothing
                set .amount = 0.
                call .stopPeriodic()
            endmethod
        
            //! runtextmacro AIDS()
            
            private static method AIDS_onInit takes nothing returns nothing
                set NORMAL_UNIT_HP_REGEN = HealType.new()
            endmethod
        endstruct
        
    endlibrary


    JASS:
    ///////////////////////////////////////////////
    //  
    //  set ItemRegenAbiltiy['I000'].amount = 10.
    //  
    //  set ItemBasedRegen[item].amount = 20.
    //
    ///////////////////////////////////////////////
    library CIRAS requires IDEA, Heal, UID, T32, Hash
    //Custom Item Regeneration Ability System
        
        globals
            HealType NORMAL_ITEM_HP_REGEN_ABILITY
        endglobals
        
        struct ItemRegenAbility
            real hp
            static method operator [] takes integer itemType returns thistype
                return Hash(itemType)
            endmethod
            
            method operator amount= takes real r returns nothing
                set .hp = r * T32_PERIOD
            endmethod
            
            method operator amount takes nothing returns real
                return hp * T32_FPS
            endmethod
        endstruct
        
        struct ItemBasedRegen
            private real hp
            
            method operator amount= takes real r returns nothing
                set .hp = r * T32_PERIOD
            endmethod
            
            method operator amount takes nothing returns real
                return .hp * T32_FPS
            endmethod
            
            private method periodic takes nothing returns nothing
                call HealUnit(GetItemOwner(.item),GetItemOwner(.item),ItemRegenAbiltiy[GetItemTypeId(.item)].hp + .amount,NORMAL_ITEM_HP_REGEN_ABILITY)
            endmethod
            
            implement T32x
            
            private method IDEA_onCreate takes nothing returns nothing
                call .startPeriodic()
            endmethod
            
            private method IDEA_onDestroy takes nothing returns nothing
                set .amount = 0.
                call .stopPeriodic()
            endmethod
        
            implement IDEA
            
            private static method onInit takes nothing returns nothing
                set NORMAL_ITEM_HP_REGEN_ABILITY = HealType.new()
            endmethod
        endstruct
        
    endlibrary
     
  10. Ghan

    Ghan Administrator - Servers are fun Staff Member

    Ratings:
    +773 / 0 / -0
    Approved.
     
  11. tooltiperror

    tooltiperror Super Moderator Staff Member

    Ratings:
    +233 / 0 / -0
    Finally, congrats, mate.
     
  12. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    Added useful library - HealCraft. ;)
     
  13. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
    New system, new thread, unless it is tightly coupled with the thread the system is about (ie. a plugin). Imagine if I put Damage in the AIDS thread... :)
     
  14. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    Ok, I will move it out. :)
     
    • Like Like x 1
  15. Chaos_Knight

    Chaos_Knight New Member

    Ratings:
    +39 / 0 / -0
    I think HealCraft was cool.. Sad.
     
  16. Jesus4Lyf

    Jesus4Lyf Good Idea™

    Ratings:
    +394 / 0 / -0
  17. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    Then go get it. Who's stopping you?
    Yep. :p
     
  18. hgkjfhfdsj

    hgkjfhfdsj Active Member

    Ratings:
    +55 / 0 / -0
    any chances that this will (internally) support heal/magic resistance, ie without the need to calculate heal amout yourself?
     
  19. kingkingyyk3

    kingkingyyk3 Visitor (Welcome to the Jungle, Baby!)

    Ratings:
    +216 / 0 / -0
    any chances that this will (internally) support heal/magic resistance, ie without the need to calculate heal amout yourself?
    Every map has different blocking algorithm for magic resistance, it is better for user to make themselves.
    Example :
    JASS:
        struct Armor
            real percentageToBlock
            
            private static method [] takes integer whichId returns thistype
                return //Some hashing algorithm.
            endmethod
    
            private static method cond takes nothing returns boolean
                call Heal_Block(Heal_GetAmount()*thistype[GetUnitTypeId(Heal_GetTarget())].percentageToBlock)
                return false
            endmethod
    
            private static method onInit takes nothing returns nothing
                local trigger trig = CreateTrigger()
                call Heal_RegisterEvent(trig)
                call TriggerAddCondition(trig,Condition(function cond))
            endmethod
        endstruct
     
  20. hgkjfhfdsj

    hgkjfhfdsj Active Member

    Ratings:
    +55 / 0 / -0
    oh. ty :D
    1 more question (dont go yet!! xD)
    how would you go amount retrieving the total heal amount? (lol, this again..)
    e.g

    Unit 1 Heals Unit 3 for 100
    Unit 2 Heals Unit 3 for 200 (at the the same time)

    would Heal_GetAmount() be 100/200 depending on the trigger, or 300?
    would adding some condition in set StackLevel = StackLevel + 1 solve this?
    ty
     

Share This Page