can someone please post an example of a for in pairs loop that edits customParamiters in unit defs... i have spent weeks reading lua tutorials and searching in the games code for examples and i have tried hundreds of things. and if you will not help me then delete my account so i can never return or dammit atleast tell me why i suck so bad at code... and i expect a few down votes while im at it.. i want so bad to mod this game but i spend more time trying to figure out how then actually getting the mods done for name, ud in pairs(UnitDefs) do if ud.customParams then for wd in pairs(ud.customParams) do if wd.pylonrange then wd.pylonrange = wd.pylonrange * 4 end end end end .... im really on the edge man.. i think maybe i might take up drinking
+0 / -0
|
If you are under stress for whatever reason, learning how to program is not the activity I would recommend to relax - just something to keep in mind. I always think it is best to learn something than to obtain a result fast (helps in the future). What I assume (without knowing much Lua) is that probably UnitDefs and ud.customParams are associative arrays (associate a key to a value), and you would like to change one value of the customParams. When you go over tables you can right "for key, value in pairs(some_array)" which is not what you have in the second for loop. So some questions to help understanding: - do you need to go through all elements of a table to change a specific one? - if answer to first one is yes, how would you rewrite the second for loop to be more like the first (have a key and a value)?
+3 / -0
|
ill wait till the alcohol wears off before i look at this.. but thanks.. i cannot promise i will understand you.. but i do promise not to return to zero-k until i can edit custom params.. as to doing something less stressful i got allot of joy out of the example of how to edit unit defs on the games wiki and my stress in life decreased.. but sadly no example exist of how to edit custom defs so when my modifications had bugs i couldnt fix them.. and then people asked my why things were broken so i tried to fix the mods as best i could.. maybe your right.. sigh
+0 / -0
|
Relevant xkcd for programming and alcohol: https://xkcd.com/323/Another suggestion for frustrating bugs: put a print after each line with the variables. For your example you could add (not sure about syntax or where it is shown, but probably you can find an example of that in other widgets):
-
print("name is " .. name)
-
print("ud is " .. ud)
-
print("wd is " .. wd)
etc. Probably it will flood you with too much info, but you can just stop it after first prints and it might help you understand what the code does.
+1 / -0
|
|
the way im currently testing code is run the game.. see nothing has changed.. change the code.. repeat hundreds of times
+0 / -0
|
The solution here is: for i = 1, #UnitDefs do local customParams = UnitDefs[i].customParams if customParams.pylonrange then customParams.pylonrange = tostring(tonumber(customParams.pylonrange) * 4) end end UnitDefs is an ordered table so you can use a for i = 1, #table iterator instead. One hang up you may have when analyzing this code is that lua tables are pointers to tables in memory (or.. something like that) so as long as the table exists, referencing it will alter the original table instead of the copy of the table. Mostly the "local customParams" here is done for readability, though it can have some speed up properties. The second part of this is this weird if-then statement here. What this is saying is "if this variable is not nil (not set) then do this". The only time pylonrange will not be nil is if it is used for range of the pylon, which is exactly what you're trying to alter. I suggest joining #modding and asking questions there or dming me. And please, do not post requests for help containing things like quote: and if you will not help me then delete my account so i can never return |
This is just bad behavior and I do not want to see these kinds of things as I think they reflect poorly on us as a community. I get coding is frustrating, but you need to hold your composure and approach coding like it's a puzzle. You ever play something like Factorio or the Zacktronics games? Something like that. I'm willing to tutor if you want it or I can stream some of my dev work I do around here.
+4 / -0
|
quote: the way im currently testing code is run the game.. see nothing has changed.. change the code.. repeat hundreds of times |
If you just try too random things you will just get more (and more) frustrated. You need to try to understand small things (like what does pairs do? => allows you in a for loop to get key, values pairs => your second for can't work at all) and so on. Sure, people will give you the code that does what you ask for simple things, but it will come a time where you would need to understand what is possible to add fancier things.
+1 / -0
|
thanks.. for the help.. sorry i think maybe i was getting a bit hysterical.. the community is not bad.. i was wrong to feel as-though nobody cared.. i think coding has made me confused and angry.. i dont feel like i have been myself lately. im going to start back at the beginnings of learning lua and try to get a better base understanding but in the meantime atleast even if i dont fully understand it i can use the code you wrote to implement some fixes to my mods i plan to make many new mods.. that is after i take a few days off too cool down and reset
+3 / -0
|
[Spoiler]quote:
for i = 1, #UnitDefs do
local customParams = UnitDefs[i].customParams
if customParams.pylonrange then customParams.pylonrange = tostring(tonumber(customParams.pylonrange) * 4) end
end
|
i hate to be that guy so soon.. but this doesnt seem to work i cant see any typos and it runs ingame without errors also i played factorio since alpha =D back when trains were new i am interested in adding to this game so in order to do that i will need to learn allot.. to this end i am looking into training. and will most likley pay a tutor for weekly lessons
+0 / -0
|
When I took a high school programming class, the way the class worked was that we would literally transcribe code from a textbook into a compiler. More often than not, the verbatim code never worked. Regardless, the goal was to make a program that could run, so were effectively forced to understand what the code was doing so that we could correct the typos and logic bugs. Weirdly, my classmates and I would were successful at picking up the language despite just transcribing. Not sure if that was the goal, but it was nonetheless a very, very useful learning method whose effectiveness surprises me to this day. In other words: Griping about their code will get you nowhere. But fixing their code gives you an important opportunity to learn. Take the opportunity.
+1 / -0
|
being honest i find coding difficult.. but i am very good at some things.. we all have our preferred area of expertise.. so i found some code that does work inside someone elses mod its all i needed to fix my mods.. as thats all i wanted i am grateful. the goal others have for me im sure is a gift of sorts and indeed they may have good intentions but please understand who i am.. im a creative spirit that wanted simply to design new things.. programming was a means to this but it is not what i enjoy.. im not much of a mathematician.. sorry and thanks anyway.
+0 / -0
|
Been writing code for about 20 years now and.. yeah, it's pretty tough even still. Just one of those things. For sure, syntax and similar stuff gets easier, but a lot of that overall difficulty doesn't go away. Like ZK, there's no skill ceiling. But the game wouldn't be fun if it was easy, eh? It's the same thing. Try to find ways to make your life easier while you're writing code -- if that means writing some program to automate installation, etc, then go for it! A lot of that difficulty you feel comes from trying to figure out many things at once. So working on reducing how much stuff is going on in your head can go a very long way. Maybe that's a pen and paper, or maybe just try: https://en.wikipedia.org/wiki/Rubber_duck_debuggingYou already seem persistent in getting farther, so -- keep trying! You'll get there.
+2 / -0
|
It is particularly helpful as a beginner to ask e.g. chatGPT. Just type "LUA for in pairs loop on an ordered table" and you will get a code example. This may contain errors, but usually provides the correct syntax. You also can ask for additional printouts on console to add to the code.
+1 / -0
|
my current this doesnt work list: quote:
for i = 1, #UnitDefs do
local customParams = UnitDefs[i].customParams
if customParams and customParams.pylonrange then
customParams.pylonrange = customParams.pylonrange * 4
end
end
|
quote:
for name, ud in pairs(UnitDefs) do
if ud.customParams then
for key, value in pairs(ud.customParams) do
if key == "pylonrange" then
ud.customParams[key] = value * 4
end
end
end
end
|
quote:
for name, ud in pairs(UnitDefs) do
if ud.customParams and ud.customParams.pylonrange then
ud.customParams.pylonrange = ud.customParams.pylonrange * 4
end
end
|
quote:
thats enough for today.. 3 weeks and hundreds of attempts.. is enough
im thinking maybe i should just give up altogether
the code from others mods did not work and even ai seems to think the code is valid
these mods will never be made by me..
everything can everything
everything is 10x smaller
everything explodes based on costs
|
+0 / -0
|
For me the 3 code examples look like they do the same thing. "doesnt work list" is too generic. There are multiple possible reasons, and it is important to distinguish between them:
-
"code runs, does not give an error, but does not do what I want"
-
"code runs, gives an error sometimes"
-
"code does not run, gives an error all the time"
So, not sure are you asking:
-
"how to modify the range of pylons in ZK" OR
-
"how do I modify the field pylonrange from associative array customParams from associative array UnitDefs"
+1 / -0
|
i think im asking how do I modify the field pylonrange from associative array customParams from associative array UnitDefs my code runs no errors no effect on pylon range im trying to modify pylonrange for all units in unitdefs where pylon range exsist by a factor of 4 well i was trying..
+0 / -0
|
i asked ai and it said this: To modify the pylonrange field within the customParams associative array of each element in the UnitDefs associative array, you can use a loop to iterate through the elements and update the value. Here’s how you can achieve this in Lua: Lua for name, ud in pairs(UnitDefs) do if ud.customParams and ud.customParams.pylonrange then ud.customParams.pylonrange = ud.customParams.pylonrange * 4 end end AI-generated code. Review and use carefully. More info on FAQ. In this code: We iterate over each element in the UnitDefs associative array using pairs. We check if ud.customParams exists and if pylonrange is defined within it. If both conditions are met, we multiply the existing pylonrange value by 4. this does not work.. so maybe im confused and i dont know how to proceed can somone give me some code that works please?
+0 / -0
|
It is possible that the code does what you want but in order to modify "the pylon range" you must do something else as well (like zerok specific, not programming specific). Also, in Shaman's example he did type conversions (from string to number and back). Do you know what type should pylonrange be? If you set a string "4" and the code expects the number 4, then it might not work. For example (not saying that is the issue, just an example): if some part of the code reads pylon range field at some point at start, only once, before your code executes and you modify the value in unitDefs after, then you will not see the effect, although: the field is correct and the code is correct.
+1 / -0
|
thank you for helping me i will never forget your kindness it matters far less if the code works then if people care yes the ai also said that about the number/string when i asked about shamans code.. "Additionally, you’re converting the value to a string using tostring and then back to a number using tonumber. This conversion is unnecessary if the original value is already numeric" however the key value is a number and not a string like shown bellow: quote:
return {
energypylon = {
customParams = {
pylonrange = 500,
},
}
}
|
+1 / -0
|