MidrealmDM Posted February 23, 2019 Share Posted February 23, 2019 I'm looking to make a mod function that will allow configuration of calories (hunger) satisfied by food items I was simply going to change the tuning ie. TUNING.CALORIES_MEDSMALL = TUNING.CALORIES_MEDSMALL *FOOD_QUALITY where the variable Food_Quality would be set by the configuration But then a thought occurred to me, If I change the tuning for the host, would this also change for the client? Or does the client look at their own tuning.lua on their own machine Unfortunately its hard to test If this would only change the value on the host side, But, if so, then I will have to find another way to approach it. I suppose, it should work that the mod is installed by all clients with the configuration set by the host, so it should work either way? Wondering if anyone who understands the code a bit better would know off hand if this would work. Link to comment Share on other sites More sharing options...
Ultroman Posted February 23, 2019 Share Posted February 23, 2019 (edited) Yes, changing a TUNING-variable affects all things and players in the game, since they're all created/spawned by the server. Be careful changing TUNING-variables, though. They may be used for other things than you think. It's always good practice to search through the game code for your TUNING-variable, to see where it's being used, and for what. In this case, I'm sorry to say, I think that variable is used for more than you're aiming to change. There are other ways to deal with this, though. Something like this: AddComponentPostInit("edible", function(comp) comp.inst:DoTaskInTime(0, function(inst) if inst.components.edible and inst.components.edible.hungervalue ~= nil then inst.components.edible.hungervalue = comp.hungervalue * FOOD_QUALITY end end) end) Put that at the bottom of your modmain.lua, and it should work. AddComponentPostInit runs the given function (parameter 2) for every component of the type given as parameter 1, which in this case would be the "edible"-components. Since components have to be added before you can change their values, these edible prefabs add the component, then our function is called as part of the adding of the component, and then the prefabs set the values. This means we can't just multiply their value immediately, since their starting value hasn't been set yet. We need to delay the running of our code, which is what the DoTaskInTime function is for. We delay the multiplication until next game tick, after which all the prefabs have finished their spawning, by telling it to wait for 0 seconds. Edited February 23, 2019 by Ultroman Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now