snakeyarts Posted May 25, 2020 Share Posted May 25, 2020 The title says it all. I'm not the most fluent in lua, I just do this for fun and as a challenge, and I do manage fairly okay for the most part. Right now though I'm working on a character mod with some abilities I've never messed around with and ran into an issue I'd like a second opinion on. Basically what I'm trying to do is make it so that the character gets slower and weaker at low sanity. I've got code, it doesn't give me an error message. But I very strongly suspect it's not actually doing anything/what it should, or that the scaling and effect is way weaker than I'd like. There's no glitching or anything but especially the walking speed (easier to tell) doesn't seem to be changing at all, no matter how i change the values. It's somewhat of a patchwork code. Could someone check it if there's any noticeable flaws I missed? Or any other way for me to fix it? Or is there a smarter way to do this? -- ABOVE LOCAL COMMON_POSTINIT -- sanity damage and speed scaling local function sanitydelta(inst) if inst.components.sanity.current >= 100 then inst.components.combat.damagemultiplier = 1 inst.components.locomotor.SetExternalSpeedMultiplier = 1.5 elseif inst.components.sanity.current > 75 then inst.components.combat.damagemultiplier = 0.75 inst.components.locomotor.SetExternalSpeedMultiplier = 1 elseif inst.components.sanity.current < 50 then inst.components.combat.damagemultiplier = 0.50 inst.components.locomotor.SetExternalSpeedMultiplier = 0.50 end end -- IN LOCAL MASTER_POSTINIT: inst:ListenForEvent("sanitydelta", sanitydelta) -- sanity damage and speed scaling And then just in case it might be necessary, here's the whole prefab folder. I'd appreciate any at all help and tips! hollow.lua Link to comment Share on other sites More sharing options...
AkaiNight Posted May 27, 2020 Share Posted May 27, 2020 (edited) well im not sure but you can try this local function sanitydelta(inst) if inst.components.sanity.current >= 100 then inst.components.combat.damagemultiplier = 1 inst.components.locomotor.SetExternalSpeedMultiplier = 1.5 elseif inst.components.sanity.current >= 75 and < 100 then inst.components.combat.damagemultiplier = 0.75 inst.components.locomotor.SetExternalSpeedMultiplier = 1 elseif inst.components.sanity.current < 50 then inst.components.combat.damagemultiplier = 0.50 inst.components.locomotor.SetExternalSpeedMultiplier = 0.50 end end try this and let me know if there is any problem Edited May 27, 2020 by AkaiNight Link to comment Share on other sites More sharing options...
IronHunter Posted May 28, 2020 Share Posted May 28, 2020 I believe setexternalspeedmultiplier is a function that takes in 2 arguments a key and a value. What it seems you are doing is overriding the function and turning it into a static number. Your lucky you haven't crashed your game. Because if anything else called that function it would of crashed the game. I'll edit this post later with the information on it but I believe its inst.components.locomotor:SetExternalSpeedMultiplier(inst, key, value) with key being a unique name that will override other multipliers with that key and value being the multiplier. The function automatically removes the multiplier if the value is 1. 1 Link to comment Share on other sites More sharing options...
snakeyarts Posted May 29, 2020 Author Share Posted May 29, 2020 @IronHunter Oh woah yea, I'll be honest I never would have caught that, If that's the case I'd very much appreciate that information, since this isn't really something I know much of anything about. Link to comment Share on other sites More sharing options...
AkaiNight Posted May 29, 2020 Share Posted May 29, 2020 10 hours ago, snakeyarts said: @IronHunter Oh woah yea, I'll be honest I never would have caught that, If that's the case I'd very much appreciate that information, since this isn't really something I know much of anything about. I don't know much about coding but why not using inst.components.locomotor.walkspeed = 4.6 inst.components.locomotor.runspeed = 7 something like this? I believe this will not cause any problems Link to comment Share on other sites More sharing options...
IronHunter Posted May 29, 2020 Share Posted May 29, 2020 2 hours ago, AkaiNight said: I don't know much about coding but why not using inst.components.locomotor.walkspeed = 4.6 inst.components.locomotor.runspeed = 7 something like this? I believe this will not cause any problems You could use those, but if they ever get changed in game by some other code then your code might conflict. SetExternalMultiplier is cleaner in its unlikely other code will use the same key as your multiplier. It really just depends how precise you want your stat changes to be. Maybe you only want to make run speed faster and have no effect on walk speed. Also it depends on what mod compatibility you want the mod to have as some mods might change default speeds for characters. The information I provided is also accurate. It is a function with those parameters. 1 Link to comment Share on other sites More sharing options...
AkaiNight Posted May 30, 2020 Share Posted May 30, 2020 2 hours ago, IronHunter said: You could use those, but if they ever get changed in game by some other code then your code might conflict. SetExternalMultiplier is cleaner in its unlikely other code will use the same key as your multiplier. It really just depends how precise you want your stat changes to be. Maybe you only want to make run speed faster and have no effect on walk speed. Also it depends on what mod compatibility you want the mod to have as some mods might change default speeds for characters. The information I provided is also accurate. It is a function with those parameters. I'm using a code for stat changes on moon phases like attack and movement speed and it works fine for me. Just to know Link to comment Share on other sites More sharing options...
IronHunter Posted May 30, 2020 Share Posted May 30, 2020 (edited) 56 minutes ago, AkaiNight said: I'm using a code for stat changes on moon phases like attack and movement speed and it works fine for me. Just to know Ya there is nothing wrong with it, there are multiple ways to get to a similar outcome, the original post was Finding the error in the code which was the SetExternalSpeedMultiplier function was being overriden. Edit: read the attached lua file Ya just change those lines where you override the SetExternalSpeedMultiplier to just using it inst.components.locomotor:SetExternalSpeedMultiplier(inst, "hollow_speed_mod", 1.50) like you have in your onbecamehuman and onbecameghost functions, just change the multiplier to your desired ones. Edited May 30, 2020 by IronHunter read the lua file 3 Link to comment Share on other sites More sharing options...
snakeyarts Posted June 1, 2020 Author Share Posted June 1, 2020 Hi! Sorry for the late reply, I didn't want to rush a reply before I got to test it properly and was unable to do so before just now. It works perfectly! Thanks a ton! 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