The Consistency of Hedgewars Gear References

5 replies [Last post]
UltiMaxKom
UltiMaxKom's picture
User offline. Last seen 4 years 10 weeks ago. Offline
Joined: 2016-06-26
Posts: 381
Hello my dear reader! Here I am again, requesting any help from anybody that could help me (huh... isn't that obvious?) Welp, let's sink into the issue in this very insta: Suppose we test this Hedgewars Lua Script, let's call it as [i]"test.lua".[/i] Which I designed to work this way: Every vgtHealthTag and vgtSmallDamageTag visual gear will be deleted upon creation so there's no message created when a hedgehog is damaged/etc BUT ONLY IF they're not 'approved' [local = GApprovedVG]. Then I try to make one 'approved' vgtHealthTag visual gear at onNewTurn() event. I expect this last created vgtHealthTag showed up, because I mark it as 'approved' by inserting a value into GApprovedVG[vgUid] = 100. A better look at the code should help you wrap what I'm trying/how I try to do the things. Please take look at the code below: [code] local GApprovedVG = {} function onVisualGearAdd(vg) if GetVisualGearType(vg) == vgtHealthTag or GetVisualGearType(vg) == vgtSmallDamageTag then if vg and GApprovedVG[vg] == nil then DeleteVisualGear(vg) end end end function onNewTurn() local x,y = GetGearPosition(CurrentHedgehog) local vg = AddVisualGear(x, y, vgtHealthTag, 100, true) SetVisualGearValues(vg, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0xffffffff) GApprovedVG[vg] = 100 end [/code] And as you can see; I expect that vg created at onNewTurn() should be NOT deleted because the expression "vg and GApprovedVG[vg] == nil" clearly supposed to be false, thus there should be no deletion for any 'approved' vg. But yet, when I debug the expression boolean value, it returned true, but why? Well, I think the question why can be answered by my little hypothesis: "The vgUid reference value over a gear/visual gear isn't consistent through Hedgewars Lua system, or at least there's a problem with the vgUid referencing system itself". But well, that's doesn't make sense, right? Why would the vgUid reference system inconsistent? Or because there's something messed up inside? A problem, OR ISN'T IT? Well, tbh idk for sure, and that's why I bring this personal-little-trivial-issue here, to make sure my thought and to get the right answer... Code Note: If you remove 'DeleteVisualGear(vg)' from the code above, you will find that the vgtHealthTag created at onNewTurn() showed up perfectly. But for now, as my best guess and bet; I just simply messed things up myself here, thus rendering the said test.lua work improperly like it should be. I just wanted to know what's my mistake here, so yeah, don't hesitate to tell my mistake (if I had any) okay =) ? I hope you could understand the issue of me in this post, especially I hope a dev could lend me a little hand on this trivial question, hehe. Thanks ^^ PS: To gain the best clarity, please to consider testing on your own machine by copying the provided code above then run it in Hedgewars. [i][b][Licensed as: CC-O][/b][/i]
[center][color=#FFFFFF]╟───NW──────┼──────N╢[/color][/center] [float=left][color=#FFFFFF]╓──────────────────╖[/color][/float][float=right] [color=#FFFFFF]╓──────────────────╖[/color][/float] [float=left][color=#FFFF00]⠀HP:[/color] [color=#FF0000]██████████[/color] [color=#00FF00]1E9/1E9[/color][/float][float=right][color=#00FF00]1E9/1E9[/color] [color=#0000FF]██████████[/color] [color=#00FFFF]:MP [/color][/float] [float=left][color=#FFFFFF]╙──────────────────╜[/color][/float][float=right] [color=#FFFFFF]╙──────────────────╜[/color][/float]
nemo
nemo's picture
User offline. Last seen 22 hours 24 min ago. Offline
Joined: 2009-01-28
Posts: 1861
14:03 <@nemo_admin> UltiMaxKom: I'm reading your forum post 14:03 <@nemo_admin> UltiMaxKom: local vg = AddVisualGear(x, y, vgtHealthTag, 100, true) 14:03 <@nemo_admin> happens before 14:03 <@nemo_admin> GApprovedVG[vg] = 100 14:03 <@nemo_admin> UltiMaxKom: you call Add 14:03 <+UltiMaxKom> OH MY FFFFFUMES 14:03 <@nemo_admin> then immediately delete it 14:04 <+UltiMaxKom> nemo_admin: DERPFACE 14:04 <@nemo_admin> so the other thing [the insert] never happens [in time] 14:04 <+UltiMaxKom> nemo_admin: I see now, lmao, damnit Ulti! Good job xD 14:04 <+UltiMaxKom> what a big mistake! 14:04 <+UltiMaxKom> ... 14:04 <+UltiMaxKom> nemo_admin: then how I supposed to do it right? 14:05 <@nemo_admin> UltiMaxKom: how about defering the delete? 14:05 <+UltiMaxKom> okay, what is 'defering' anyway? 14:06 <@nemo_admin> another option would be to guard that one particular add 14:06 <@nemo_admin> either one 14:06 <@nemo_admin> set protection flag before the add, remove it after. 14:06 <@nemo_admin> or else stuff the ones for deletion into an array and clean them up later in onGameTick20 or something 14:06 * nemo_admin shrugs 14:06 <+UltiMaxKom> hmmm... 14:07 <+UltiMaxKom> nemo_admin: what do you think for the best? 14:07 <@nemo_admin> protection flag would ensure the delete happened promptly
-- Oh, what the heck. 1PLXzL1CBUD1kdEWqMrwNUfGrGiirV1WpH <= tip a hedgewars dev
UltiMaxKom
UltiMaxKom's picture
User offline. Last seen 4 years 10 weeks ago. Offline
Joined: 2016-06-26
Posts: 381
[quote=nemo] 14:03 <@nemo_admin> UltiMaxKom: I'm reading your forum post 14:03 <@nemo_admin> UltiMaxKom: local vg = AddVisualGear(x, y, vgtHealthTag, 100, true) 14:03 <@nemo_admin> happens before 14:03 <@nemo_admin> GApprovedVG[vg] = 100 14:03 <@nemo_admin> UltiMaxKom: you call Add 14:03 <+UltiMaxKom> OH MY FFFFFUMES 14:03 <@nemo_admin> then immediately delete it 14:04 <+UltiMaxKom> nemo_admin: DERPFACE 14:04 <@nemo_admin> so the other thing [the insert] never happens [in time] 14:04 <+UltiMaxKom> nemo_admin: I see now, lmao, damnit Ulti! Good job xD 14:04 <+UltiMaxKom> what a big mistake! 14:04 <+UltiMaxKom> ... 14:04 <+UltiMaxKom> nemo_admin: then how I supposed to do it right? 14:05 <@nemo_admin> UltiMaxKom: how about defering the delete? 14:05 <+UltiMaxKom> okay, what is 'defering' anyway? 14:06 <@nemo_admin> another option would be to guard that one particular add 14:06 <@nemo_admin> either one 14:06 <@nemo_admin> set protection flag before the add, remove it after. 14:06 <@nemo_admin> or else stuff the ones for deletion into an array and clean them up later in onGameTick20 or something 14:06 * nemo_admin shrugs 14:06 <+UltiMaxKom> hmmm... 14:07 <+UltiMaxKom> nemo_admin: what do you think for the best? 14:07 <@nemo_admin> protection flag would ensure the delete happened promptly [/quote] LMAO! Oh man, nemo forbid me from deleting this post lol Although, this is kinda hilarious xD I'd just hope there's no-one read this post... EVER... AGAIN...
[center][color=#FFFFFF]╟───NW──────┼──────N╢[/color][/center] [float=left][color=#FFFFFF]╓──────────────────╖[/color][/float][float=right] [color=#FFFFFF]╓──────────────────╖[/color][/float] [float=left][color=#FFFF00]⠀HP:[/color] [color=#FF0000]██████████[/color] [color=#00FF00]1E9/1E9[/color][/float][float=right][color=#00FF00]1E9/1E9[/color] [color=#0000FF]██████████[/color] [color=#00FFFF]:MP [/color][/float] [float=left][color=#FFFFFF]╙──────────────────╜[/color][/float][float=right] [color=#FFFFFF]╙──────────────────╜[/color][/float]
mikade
mikade's picture
User offline. Last seen 11 weeks 1 day ago. Offline
Joined: 2010-10-22
Posts: 355
[quote=UltiMaxKom] what a big mistake! I'd just hope there's no-one read this post... EVER... AGAIN... [/quote] [img]https://media1.giphy.com/media/3o7TKKLJavDVEg6fKg/giphy.gif[/img]
[color=white][b]mikade[/b][/color] [color=yellow][i]Hedgewars Developer[/i][/color] [IMG]/images/freeze.png[/IMG]
UltiMaxKom
UltiMaxKom's picture
User offline. Last seen 4 years 10 weeks ago. Offline
Joined: 2016-06-26
Posts: 381
[quote=mikade] [quote=UltiMaxKom] what a big mistake! I'd just hope there's no-one read this post... EVER... AGAIN... [/quote] [img]https://media1.giphy.com/media/3o7TKKLJavDVEg6fKg/giphy.gif[/img] [/quote] Okay, this leads me to my ultimate mental breakdown where it can be over very soon, or else to ask nemo the forbidden ritual itself where I can kill every character in this threadverse including em' beloved lowercase children in an insta; thus ending this cursed, selfblowing-post xD (rofl + sitting in the corner thinking "What have I done") #chokeme #hi #dankface
[center][color=#FFFFFF]╟───NW──────┼──────N╢[/color][/center] [float=left][color=#FFFFFF]╓──────────────────╖[/color][/float][float=right] [color=#FFFFFF]╓──────────────────╖[/color][/float] [float=left][color=#FFFF00]⠀HP:[/color] [color=#FF0000]██████████[/color] [color=#00FF00]1E9/1E9[/color][/float][float=right][color=#00FF00]1E9/1E9[/color] [color=#0000FF]██████████[/color] [color=#00FFFF]:MP [/color][/float] [float=left][color=#FFFFFF]╙──────────────────╜[/color][/float][float=right] [color=#FFFFFF]╙──────────────────╜[/color][/float]
nemo
nemo's picture
User offline. Last seen 22 hours 24 min ago. Offline
Joined: 2009-01-28
Posts: 1861
Heh. BTW. One more (possibly silly) way to protect a VG before it was actually issued would be to create *another* VG immediately before, then "protect" that VG ID+1. Since the IDs are issued sequentially. But I like the flag better since it doesn't rely on unguaranteed engine behaviour Smile
-- Oh, what the heck. 1PLXzL1CBUD1kdEWqMrwNUfGrGiirV1WpH <= tip a hedgewars dev
Copyright © 2004-2023 Hedgewars Project. All rights reserved. [ contact ]