• 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.

Item identify & handleing

Status
Not open for further replies.
Level 17
Joined
Nov 13, 2006
Messages
1,814
I wanna ask if have other way than item custom value how can i attach variable to a item?

lets say if i want refine a weapon and i want make it usefull after save&load/drop&pick?

coz for attach a variable to a item i think i need something unique id like custom item value, (since custom item value we use for detect the item last owner need something else)

exist something to make a id to item? and ofc something what dont get problem if i got more than 9000 item on map (i talk about item not about item type, since during a longer rpg playing u can slaughter alot mob what droping items, the array could be higher than 8k)
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Then take multiple arrays or hashtable. There is the custom value and the handle id (GetHandleId function) you can use to directly index an item.

But 9k+ items on map at the same time sounds ridiculous and slows everything down. Just remove superfluous stuff .

multiple array and harshtable dont have a limit?

i 9k same time is damn much but if u count lets say 10h game play with good drop with 10player isnt that ridicoulos.

what happen with item handle id if item removed? its destoryed?
 
Level 26
Joined
Aug 18, 2009
Messages
4,097
Everything has a limit but I guess before you can max out a hashtable, at least wc3 will crash of its own reasons.

If you probably clear up the item (destroy it and delete all references), then the id will be available again but items are in a mixed id area with other objects.
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Everything has a limit but I guess before you can max out a hashtable, at least wc3 will crash of its own reasons.

If you probably clear up the item (destroy it and delete all references), then the id will be available again but items are in a mixed id area with other objects.

so everybody who use refine item/socket item system in his map make socket/refine variable depend to current armor and if u wear off/drop then item again regular coz dont have any attached bonus?
 
Level 26
Joined
Aug 18, 2009
Messages
4,097
so everybody who use refine item/socket item system in his map make socket/refine variable depend to current armor and if u wear off/drop then item again regular coz dont have any attached bonus?

Do not understand this post at all. Nor the question involved.

You use custom value/handle id to determine a unique index for the item for arrays/hashtable use to be able to save many different things.

If you decay your items in time, even an array should be enough because having 9k items on the floor (I doubt you give them all to units) really seems pointless. JNGP does not give more possibilities.
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Do not understand this post at all. Nor the question involved.

You use custom value/handle id to determine a unique index for the item for arrays/hashtable use to be able to save many different things.

If you decay your items in time, even an array should be enough because having 9k items on the floor (I doubt you give them all to units) really seems pointless. JNGP does not give more possibilities.

yea but somebody said harshtable dont work well in jngp and custom value not enough alone.

handle id is a unique thing? i mean each item get different handle id from system? or it is like mysql table id?
 
Level 26
Joined
Aug 18, 2009
Messages
4,097
yea but somebody said harshtable dont work well in jngp and custom value not enough alone.

The standard JNGP distribution does not highlight/auto-complete hashtable functions because these were added with a later patch and are therefore missing in the list. You can however compile the map flawlessly. Blizzards GUI stuff in constrast has two problems/one in conjunction with JNGP. The Get Handle ID function can normally take any object as all objects are children of handle but the GUI generally did not display any children/there were no functions for parents in the past. That's probably why JNGP does not show the handle functions (do not know how they meddle with GUI or if they do not load patch data or what). And there is another problem with Save Ability Handle. Blizzard included this action in GUI although it does not support the ability type. This is not the one from object editor or that you may use in Unit - Add Ability. The editor will crash when you open a dialog for this type.

handle id is a unique thing? i mean each item get different handle id from system? or it is like mysql table id?

Have already said this above. Items are children of the type agent. All agents share an id area starting from >1mio (2^20) and counting upwards. All agents have a unique id among themselves. Their ids get released for the next agents when they are completely destroyed.
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
Do not understand this post at all. Nor the question involved.

You use custom value/handle id to determine a unique index for the item for arrays/hashtable use to be able to save many different things.

If you decay your items in time, even an array should be enough because having 9k items on the floor (I doubt you give them all to units) really seems pointless. JNGP does not give more possibilities.

i meant in that post, i watched rpg maps, where you can insert stones to items (lets say to weapon you could add 5 stone and lets say 3 stone give 50 hp and 2 stone give 20 armor)
so i thought this i could do 2 way:
1. each player store this stone bonus to a integer variable array and attach to current weapon/armor, if u wear off then set to 0 this variable (example: if u unequip the weapon then decrease from your dmg exactly that much how was the WeaponStones variable and WeaponStones[playernumber]=0)

2.if this boosted item is transferable then somehow the system must give a id to this item when u drop down (example item_bonus is a integer array and u can store the bonus value like this item_bonus[unique item id])

about harshtable i never used yet,i allways made with variables the things and this work in 1st example but in second no.

you can give me a example how can i use agent id thing? lets say to each item what u drop need a id.

@maker i made my item decay system, its here

i know about that memory leak when i create item but its just test map, still i am curios to opionions.

atm its give 100sec time when your item still your and other players cant pick, after 100sec everybody can pick and if over this time and item still on ground then remove it


  • Create item
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • Item - Create (Random level -1 item-type) at (Position of (Dying unit))
      • Item - Set the custom value of (Last created item) to 100
  • Create item
  • Periodic Item count
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Item - Pick every item in (Playable map area) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Custom value of (Picked item)) Equal to 0
            • Then - Actions
              • Item - Remove (Picked item)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Custom value of (Picked item)) Less than or equal to 100
                • Then - Actions
                  • Item - Set the custom value of (Picked item) to ((Custom value of (Picked item)) - 1)
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Custom value of (Picked item)) Less than or equal to 110
                    • Then - Actions
                      • Item - Set the custom value of (Picked item) to 100
                      • Game - Display to (All players) the text: ((Name of (Picked item)) + now lootable)
                    • Else - Actions
                      • Item - Set the custom value of (Picked item) to ((Custom value of (Picked item)) - 10)
  • Pick
    • Events
      • Unit - A unit Acquires an item
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Custom value of (Item being manipulated)) Less than 100
        • Then - Actions
          • Item - Set the custom value of (Item being manipulated) to (1100 + (Player number of (Triggering player)))
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Custom value of (Item being manipulated)) mod 10) Equal to (Player number of (Triggering player))
            • Then - Actions
              • Item - Set the custom value of (Item being manipulated) to (1100 + (Player number of (Triggering player)))
            • Else - Actions
              • Hero - Drop (Item being manipulated) from (Triggering unit)
              • Game - Display to (All players) the text: Not your item
  • Map init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Item - Pick every item in (Playable map area) and do (Actions)
        • Loop - Actions
          • Item - Set the custom value of (Picked item) to 100
  • Unit Drop Item
    • Events
      • Unit - A unit Loses an item
    • Conditions
    • Actions
      • Item - Set the custom value of (Last dropped item) to (1100 + (Player number of (Triggering player)))
 
Level 26
Joined
Aug 18, 2009
Messages
4,097
1. each player store this stone bonus to a integer variable array and attach to current weapon/armor, if u wear off then set to 0 this variable (example: if u unequip the weapon then decrease from your dmg exactly that much how was the WeaponStones variable and WeaponStones[playernumber]=0)

This only works if WeaponStones per player are limited to 1 or I guess you have added an offset for the inventory slot and reassigned the array when an item changed position in inventory.

2.if this boosted item is transferable then somehow the system must give a id to this item when u drop down (example item_bonus is a integer array and u can store the bonus value like this item_bonus[unique item id])

Or directly assign it when the item is enchanted. Well, yeah, if you work in GUI only and use JNGP, you have to use a custom script to get the item's handle id. Of course you can also do it with custom value but then you have to manage the id allocation and deallocation yourself.

id is an integer variable here, item an item variable, table a hashtable variable, all without array and preset does not matter.

  • Set item = <your Item> //Set Variable
  • Custom script: set udg_id = GetHandleId(udg_item) //Custom Script
  • Hashtable - Save <value> as <key> of id in table //Hashtable - Save Integer
<key> can be any integer, hashtables are 2dimensional.

Always use the first two lines when you want to get the item's id.

Another trigger to set up the hashtable is needed, preferably on mapInit.

  • Events
    • Map initialization
  • Conditions
  • Actions
    • Hashtable - Create a hashtable
    • Set table = (Last created hashtable)
And you want to clear the data when the item is destroyed. There is no GUI catch for that but you can create a trigger EnchantedItemDestroy I call it here and use this custom script when the item is enchanted:

  • Custom script: call TriggerRegisterDeathEvent(gg_trg_EnchantedItemDestroy, udg_item)
Save your item in item variable before, of course.

The EnchantedItemDestroy trigger would look like this:

  • Events
  • Conditions
  • Actions
    • Custom script: call FlushChildHashtable(udg_table, GetHandleId(GetTriggerWidget()))
 
Level 17
Joined
Nov 13, 2006
Messages
1,814
This only works if WeaponStones per player are limited to 1 or I guess you have added an offset for the inventory slot and reassigned the array when an item changed position in inventory.

i use multiboard invetory so after quip the original item is consumed
i use atm 4 different stone type, what give different effect to armor/shield/weapon/wings, max 9 gem for each equipment and with dialog choose the target equipment only problem its isnt transferable since if u change example your wing, i create a item what is same item type than my old wing (with item type array, array index is the key for recreate the wings in hero invetory after wing switch)


  • Socket dialog
    • Events
      • Unit - A unit Uses an item
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • (Item-type of (Item being manipulated)) Equal to Gems[1]
          • (Item-type of (Item being manipulated)) Equal to Gems[2]
          • (Item-type of (Item being manipulated)) Equal to Gems[3]
          • (Item-type of (Item being manipulated)) Equal to Gems[4]
    • Actions
      • Set plNR = (Player number of (Triggering player))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Item-type of (Item being manipulated)) Equal to Gems[1]
        • Then - Actions
          • Set Current_Gem[plNR] = 1
          • Set GemString[1] = +3 HP/sec
          • Set GemString[2] = +3 HP/sec
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Weapon[plNR] Greater than or equal to 1000
            • Then - Actions
              • Set GemString[3] = +25 SP
            • Else - Actions
              • Set GemString[3] = +25 DMG
          • Set GemString[4] = +3 HP/sec
          • Set GemString[5] = +2% reflect
          • Set GemString[6] = +2 Att lv
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Item-type of (Item being manipulated)) Equal to Gems[2]
        • Then - Actions
          • Set Current_Gem[plNR] = 2
          • Set GemString[1] = +25 HP
          • Set GemString[2] = +25 HP
          • Set GemString[3] = +2% HP steal
          • Set GemString[4] = +25 HP
          • Set GemString[5] = +2% Block
          • Set GemString[6] = +2 Def lv
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Item-type of (Item being manipulated)) Equal to Gems[3]
        • Then - Actions
          • Set Current_Gem[plNR] = 3
          • Set GemString[1] = +30 Pdef
          • Set GemString[2] = +30 Pdef
          • Set GemString[3] = +2% Crit
          • Set GemString[4] = +30 Pdef
          • Set GemString[5] = +4 HP/sec
          • Set GemString[6] = +5% Crit Dmg
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Item-type of (Item being manipulated)) Equal to Gems[4]
        • Then - Actions
          • Set Current_Gem[plNR] = 4
          • Set GemString[1] = +30 Mdef
          • Set GemString[2] = +30 Mdef
          • Set GemString[3] = +3% MP Steal
          • Set GemString[4] = +30 Mdef
          • Set GemString[5] = +5 MP/sec
          • Set GemString[6] = +3% reflect
        • Else - Actions
      • Dialog - Clear RefineDialog[plNR]
      • Dialog - Change the title of RefineDialog[plNR] to Sockets
      • Set Refine_items[1] = Helm[plNR]
      • Set Refine_items[2] = Armor[plNR]
      • Set Refine_items[3] = Weapon[plNR]
      • Set Refine_items[4] = Boot[plNR]
      • Set Refine_items[5] = Shield[plNR]
      • Set Refine_items[6] = Wings[plNR]
      • For each (Integer A) from 1 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Stat_Sockets[((plNR x 10) + (Integer A))] Less than Item_Socket[Refine_items[(Integer A)]]
            • Then - Actions
              • Custom script: set udg_TempString = ( "|cff995500" + GetObjectName( udg_Item_Type[udg_Refine_items[(GetForLoopIndexA())] ] ) + ( "|r " ) + udg_GemString[GetForLoopIndexA()] )
              • Custom script: set udg_Socket_Dialog_Button[GetForLoopIndexA()] = DialogAddButton(udg_RefineDialog[udg_plNR], udg_TempString,0)
            • Else - Actions
      • Custom script: set udg_Socket_Dialog_Button[0] = DialogAddButton(udg_RefineDialog[udg_plNR], "Cancel",0)
      • Dialog - Show RefineDialog[plNR] for (Player(plNR))
  • Socketable items
    • Events
      • Dialog - A dialog button is clicked for RefineDialog[1]
      • Dialog - A dialog button is clicked for RefineDialog[2]
      • Dialog - A dialog button is clicked for RefineDialog[3]
      • Dialog - A dialog button is clicked for RefineDialog[4]
      • Dialog - A dialog button is clicked for RefineDialog[5]
      • Dialog - A dialog button is clicked for RefineDialog[6]
      • Dialog - A dialog button is clicked for RefineDialog[7]
      • Dialog - A dialog button is clicked for RefineDialog[8]
      • Dialog - A dialog button is clicked for RefineDialog[9]
      • Dialog - A dialog button is clicked for RefineDialog[10]
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • Socket_Dialog_Button[0] Equal to (Clicked dialog button)
          • Socket_Dialog_Button[1] Equal to (Clicked dialog button)
          • Socket_Dialog_Button[2] Equal to (Clicked dialog button)
          • Socket_Dialog_Button[3] Equal to (Clicked dialog button)
          • Socket_Dialog_Button[4] Equal to (Clicked dialog button)
          • Socket_Dialog_Button[5] Equal to (Clicked dialog button)
          • Socket_Dialog_Button[6] Equal to (Clicked dialog button)
    • Actions
      • Set plNR = (Player number of (Triggering player))
      • Set unit = Hero[plNR]
      • For each (Integer A) from 1 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Socket_Dialog_Button[(Integer A)] Equal to (Clicked dialog button)
            • Then - Actions
              • Set TempNr = (Integer A)
            • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Socket_Dialog_Button[0] Equal to (Clicked dialog button)
        • Then - Actions
          • Hero - Create Gems[Current_Gem[plNR]] and give it to unit
        • Else - Actions
          • Set Stat_Sockets[((plNR x 10) + TempNr)] = (Stat_Sockets[((plNR x 10) + TempNr)] + 1)
      • Set TempNr2 = ((plNR x 10) + TempNr)
      • Set TempNr5 = TempNr2
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Or - Any (Conditions) are true
            • Conditions
              • TempNr Equal to 1
              • TempNr Equal to 2
              • TempNr Equal to 4
        • Then - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Current_Gem[plNR] Equal to 1
            • Then - Actions
              • Set Stat_HpRegen[plNR] = (Stat_HpRegen[plNR] + 3)
              • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 1)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Current_Gem[plNR] Equal to 2
                • Then - Actions
                  • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10)
                  • For each (Integer A) from 1 to 2, do (Actions)
                    • Loop - Actions
                      • Unit - Add Add HP to unit
                      • Unit - Set level of Add HP for unit to 4
                      • Unit - Remove Add HP from unit
                  • For each (Integer A) from 1 to 5, do (Actions)
                    • Loop - Actions
                      • Unit - Add Add HP to unit
                      • Unit - Set level of Add HP for unit to 2
                      • Unit - Remove Add HP from unit
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Current_Gem[plNR] Equal to 3
                    • Then - Actions
                      • Set Stat_Pdef[plNR] = (Stat_Pdef[plNR] + 30)
                      • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 100)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Current_Gem[plNR] Equal to 4
                        • Then - Actions
                          • Set Stat_Mdef[plNR] = (Stat_Mdef[plNR] + 30)
                          • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10000)
                        • Else - Actions
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • TempNr Equal to 3
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Current_Gem[plNR] Equal to 1
                • Then - Actions
                  • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 1)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Weapon[plNR] Greater than or equal to 1000
                    • Then - Actions
                      • Set Stat_SpellPower[plNR] = (Stat_SpellPower[plNR] + 25)
                    • Else - Actions
                      • Set Stat_Dmg[plNR] = (Stat_Dmg[plNR] + 25)
                      • Set TempNr2 = (((Stat_Dmg[plNR] - (Stat_Dmg[plNR] mod 1000)) / 1000) + 1)
                      • Unit - Set level of Add Dmg (1000-9000) for unit to TempNr2
                      • Set TempNr3 = (Stat_Dmg[plNR] mod 1000)
                      • Set TempNr2 = (((TempNr3 - (TempNr3 mod 100)) / 100) + 1)
                      • Unit - Set level of Add Dmg (100-900) for unit to TempNr2
                      • Set TempNr3 = (TempNr3 mod 100)
                      • Set TempNr2 = (((TempNr3 - (TempNr3 mod 10)) / 10) + 1)
                      • Unit - Set level of Add Dmg (10-90) for unit to TempNr2
                      • Set TempNr3 = (TempNr3 mod 10)
                      • Set TempNr2 = (TempNr3 + 1)
                      • Unit - Set level of Add Dmg (0-9) for unit to TempNr2
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Current_Gem[plNR] Equal to 2
                    • Then - Actions
                      • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10)
                      • Set Stat_LifeSteal[plNR] = (Stat_LifeSteal[plNR] + 2)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Current_Gem[plNR] Equal to 3
                        • Then - Actions
                          • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 100)
                          • Set Stat_Crit[plNR] = (Stat_Crit[plNR] + 2)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Current_Gem[plNR] Equal to 4
                            • Then - Actions
                              • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10000)
                              • Set Stat_ManaSteal[plNR] = (Stat_ManaSteal[plNR] + 3)
                            • Else - Actions
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempNr Equal to 6
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Current_Gem[plNR] Equal to 1
                    • Then - Actions
                      • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 1)
                      • Set Stat_AttackLv[plNR] = (Stat_AttackLv[plNR] + 2)
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Current_Gem[plNR] Equal to 2
                        • Then - Actions
                          • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10)
                          • Set Stat_DefLv[plNR] = (Stat_DefLv[plNR] + 2)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Current_Gem[plNR] Equal to 3
                            • Then - Actions
                              • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 100)
                              • Set Stat_RageDmg[plNR] = (Stat_RageDmg[plNR] + 5)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Current_Gem[plNR] Equal to 4
                                • Then - Actions
                                  • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10000)
                                  • Set Stat_Reflect[plNR] = (Stat_Reflect[plNR] + 3)
                                • Else - Actions
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TempNr Equal to 5
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Current_Gem[plNR] Equal to 1
                        • Then - Actions
                          • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 1)
                          • Set Stat_Reflect[plNR] = (Stat_Reflect[plNR] + 2)
                        • Else - Actions
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • Current_Gem[plNR] Equal to 2
                            • Then - Actions
                              • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10)
                              • Set Stat_BlockDmg[plNR] = (Stat_BlockDmg[plNR] + 2)
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • Current_Gem[plNR] Equal to 3
                                • Then - Actions
                                  • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 100)
                                  • Set Stat_HpRegen[plNR] = (Stat_HpRegen[plNR] + 4)
                                • Else - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • Current_Gem[plNR] Equal to 4
                                    • Then - Actions
                                      • Set Stat_Socket_Holder[((plNR x 10) + TempNr)] = (Stat_Socket_Holder[((plNR x 10) + TempNr)] + 10000)
                                      • Set Stat_MpRegen[plNR] = (Stat_MpRegen[plNR] + 5)
                                    • Else - Actions
                    • Else - Actions


your harshtable explanation is good, thank you
 
Status
Not open for further replies.
Top