Snippet Hero Real Attribute

Dirac

22710180
Reaction score
147
JASS:
library HeroRealAttribute /* v1.00

*/uses/* one of the following
*/  optional AIDS           /* thehelper.net/forums/showthread.php/130752-Advanced-Indexing-Data-Storage
*/  optional UnitIndexer    /* hiveworkshop.com/forums/jass-functions-413/system-unit-indexer-172090/

An useful tool to accurately add stats to your hero

*****************************************************************************

    API:
        
    struct HeroReal
*       Stores the hero's attributes as reals instead of integers.
--->
        real Agi
        real Str
        real Int
        
        static method operator [] takes unit whichUnit returns thistype
    *       HeroReal[unit].Stat=X
    
****************************************************************************/

    struct HeroReal extends array
        //! textmacro HERO_REAL_SETUP takes NAME
            private real S_$NAME$
            method operator $NAME$= takes real howMuch returns nothing
                set this.S_$NAME$=howMuch-R2I(howMuch)
                static if LIBRARY_UnitIndexer then
                    call SetHero$NAME$(GetUnitById(this),R2I(howMuch),true)
                else
                    call SetHero$NAME$(GetIndexUnit(this),R2I(howMuch),true)
                endif
            endmethod
            method operator $NAME$ takes nothing returns real
                static if LIBRARY_UnitIndexer then
                    return this.S_$NAME$+GetHero$NAME$(GetUnitById(this),false)
                else
                    return this.S_$NAME$+GetHero$NAME$(GetIndexUnit(this),false)
                endif
            endmethod
        //! endtextmacro
        
        //! runtextmacro HERO_REAL_SETUP("Str")
        //! runtextmacro HERO_REAL_SETUP("Agi")
        //! runtextmacro HERO_REAL_SETUP("Int")
        
        static method operator [] takes unit whichUnit returns thistype
            return GetUnitUserData(whichUnit)
        endmethod
    endstruct
endlibrary
 

tommerbob

Minecraft. :D
Reaction score
110
A couple thoughts:

- Include some methods for getting the remaining real values for each attribute? Not necessary, but might be good for completeness.

- Include an example of how to use it, and explain why its useful?

- Is it possible to combine both add and lower functions together, and simply allow for a negative amount?

Personally, I think this is really useful, such as increasing the effectiveness hero level-ups over time. Thanks for doing this. :thup:
 

Dirac

22710180
Reaction score
147
The example of how to used is posted below the script, changed the "Add$VAR$" function to "Modify$VAR$" it now allows you to give negative values to hero stats. Added the "Get$VAR$" function
 

NoobImbaPro

You can change this now in User CP.
Reaction score
60
very clever thought, now stats will be more accurate when increased by %
 

Laiev

Hey Listen!!
Reaction score
188
I suggest you to use optional Status/Bonus (and not use the natives one), will be much better to some peoples that use it :p
 

luorax

Invasion in Duskwood
Reaction score
67
JASS:
call SetHero$VAR$(whichHero,GetHero$VAR$(whichHero,true)+i,true)


This will cause errors as I've already mentioned before. GetHeroXXX with true will return the base value plus the bonus value (bonus = the green value) and will set the base value to it. So, for example:
If the hero has 100 strength and 50 bonus (looks like this: "100 + 50") after adding 50 will end with 200 base and 50 bonus (because the native will return 150, you add 50 to it and the bonus 50 is still there).

You better use this:

JASS:
call SetHero$VAR$(whichHero,GetHero$VAR$(whichHero,false)+i,true)
 

Dirac

22710180
Reaction score
147
@Laiev
I'm not sure of what you mean
@luorax
Yes thank you i knew there was a problem somewhere regarding the additional bonus value, and because i originally wrote this on notepad i wasn't able to spot it
 

Laiev

Hey Listen!!
Reaction score
188
JASS:
function ModifyHero$VAR$ takes unit whichHero, real howMuch returns nothing
	local integer i=R2I(howMuch)
	local real whatsLeft=howMuch-i
	set Stat[whichHero].$VAR$=Stat[whichHero].$VAR$+whatsLeft
	if Stat[whichHero].$VAR$>=1 then
		set i=i+1
		set Stat[whichHero].$VAR$=Stat[whichHero].$VAR$-1
	endif
	if Stat[whichHero].$VAR$<=-1 then
		set i=i-1
		set Stat[whichHero].$VAR$=Stat[whichHero].$VAR$+1
	endif
	static if LIBRARY_STATUS then
		call Status[whichHero].mod$VAR$Bonus(i)
	else
		call SetHero$VAR$(whichHero,GetHero$VAR$(whichHero,false)+i,true)
	endif
endfunction
 

tommerbob

Minecraft. :D
Reaction score
110
Update your API:

JASS:
function ModifyStr 
function ModifyAgi 
function ModifyInt


should be

JASS:
function ModifyHeroStr
function ModifyHeroAgi 
function ModifyHeroInt


Also, fix:

JASS:
//! endtexmacro
 

tooltiperror

Super Moderator
Reaction score
231
Add a demo and an imperative (i.e. not OOP) interface, and a demo map too.

In your documentation, "An useful" -> "A useful", because of pronunciation.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top