InvinciBULL Posted January 3, 2015 Share Posted January 3, 2015 So I decided to try and make my own custom character for don't starve together and it was all going well until I hit a wall - I have no idea how to make it so that he either is able to eat cut grass in his inventory with right click, or just eat grass off of the ground by right clicking it. Would anyone be able to show me how I would code this? The character's name is "InvinciBULL" My steam name is also invicnibull so you could contact me there if it's complicated, and I would really appreciate it if someone could mentor me about how I could do some more advanced modding, like making custom items. Thanks Link to comment Share on other sites More sharing options...
Kzisor Posted January 3, 2015 Share Posted January 3, 2015 @InvinciBULL, try something like the following. -- This goes in modmain.luaGrassPostInit = function(inst) inst:AddComponent("edible") inst.components.edible.ismeat = false inst.components.edible.foodtype = FOODTYPE.VEGGIE inst.components.edible.healthvalue = -TUNING.HEALING_SMALL inst.components.edible.hungervalue = TUNING.CALORIES_SMALL inst.components.edible.sanityvalue = -TUNING.SANITY_SMALL return instend AddComponentPostInit("cutgrass", GrassPostInit) This makes it so that every one can eat grass. If you're wanting to make it so that only your character can eat grass you will need to modify this a little. Link to comment Share on other sites More sharing options...
InvinciBULL Posted January 3, 2015 Author Share Posted January 3, 2015 @Kzisor Thank you for the help, but unfortunately after trying multiple times I can't seem to get the character to eat the grass, the right mouse click instead still only being used to examine it in the inventory. If it is it possible to replace the examine option witht he eat option for the character, would it also be possible to limit the amount of grass that could be eaten each day, or maybe have it so grass can spoil? Link to comment Share on other sites More sharing options...
rezecib Posted January 4, 2015 Share Posted January 4, 2015 @InvinciBULL, Grass actually already has an edible component, and foodtype wood. You can do something like what was used for Wark: To add the food type:GLOBAL.FOODTYPE.BIRDFOOD = "BIRDFOOD"local bird_food = {"bird_egg", "bird_egg_cooked", "fish", "fish_cooked", "cutgrass"}local function AddBirdFood(inst) inst:AddTag("edible_"..GLOBAL.FOODTYPE.BIRDFOOD)endfor k,v in pairs(bird_food) do AddPrefabPostInit(v, AddBirdFood)endTo give it custom stats for your character (this should be in a postinit on cutgrass):inst.components.edible.oneaten = function(inst, eater) if eater.prefab == "wark" then eater.components.health:DoDelta(health_amount) eater.components.hunger:DoDelta(hunger_amount) --note that this is in addition to whatever it has already eater.components.sanity:DoDelta(sanity_amount) endendTo set your character's food preferences to include the new type: inst.components.eater.foodprefs = { FOODTYPE.VEGGIE, FOODTYPE.INSECT, FOODTYPE.SEEDS, FOODTYPE.GENERIC, FOODTYPE.BIRDFOOD } Link to comment Share on other sites More sharing options...
InvinciBULL Posted January 4, 2015 Author Share Posted January 4, 2015 @rezecib Thank you kindly, seems to be working great now. This is kind of off-topic but it's for the same character so there's no point in me making a new topic;Is there anyway for me to have it so that after a certain amout of time moving (say for example after moving for 5 seconds continuously) that the character's walkspeed would increase, but he loses this increase when he stops moving and has to "rev it up" so to speak when he starts moving again? If that's as complicated as it sounds then don't worry about it, the grass was already a big help. Link to comment Share on other sites More sharing options...
Kzisor Posted January 4, 2015 Share Posted January 4, 2015 @rezecib, I actually did not realize that cutgrass already had an edible component attached to it. Learn something new ever day. Who specifically can eat "wood" other than Woodie? Link to comment Share on other sites More sharing options...
rezecib Posted January 4, 2015 Share Posted January 4, 2015 Who specifically can eat "wood" other than Woodie? Just Woodie, I think xD. They had to write so much to make Woodie work, even in single-player o_o @InvinciBULL, I believe a component like this will do what you describelocal Accelerator = Class(function(self, inst) self.inst = inst -- self.basewalkspeed = inst.components.locomotor.walkspeed --by default, this is 4, but do players ever walk? I'm not sure self.base_runspeed = inst.components.locomotor.runspeed --by default, this is 6 self.bonus_runspeed = 0 self.acceleration = 0.5 self.max_bonus_speed = 3 self.inst:StartUpdatingComponent(self)end,nil,{})function Accelerator:OnUpdate(dt) local speed_delta = dt*self.acceleration if not self.inst.components.locomotor.isrunning then -- the line below would cause his bonus speed to drain while standing still speed_delta = -speed_delta -- if instead you want the speed to disappear all at once, use the line below: -- speed_delta = -self.bonus_runspeed end self.bonus_runspeed = math.max(0, math.min(self.max_bonus_speed, self.bonus_runspeed + speed_delta)) -- this clamps the bonus speed between 0 and max self.inst.components.locomotor.runspeed = self.base_runspeed + self.bonus_runspeedendreturn Accelerator However, I expect this will run into rather intractable issues with client action prediction... (the clients will think they still have normal speed, so they will rubberband) I'm not sure exactly how to go about fixing that. Link to comment Share on other sites More sharing options...
InvinciBULL Posted January 4, 2015 Author Share Posted January 4, 2015 @rezecib Hey thanks again for the help, but I can't seem to get it to have any effect in game, though I have a feeling this is my fault for putting the script in the wrong place. I changed the code to "speed_delta = -self.bonus_runspeed" so that the speed is instantly taken away when the player stops moving, and then first placed the code in modmain.lua, then invincibull.lua, and finally tried making a new .lua called "accelerator.lua" which I stuck under the local prefabs in invincibull.lua, but none of the three seemed to work. Was there a value I had to fiddle with, or am I just putting it in the wrong part of the file? Link to comment Share on other sites More sharing options...
rezecib Posted January 4, 2015 Share Posted January 4, 2015 @InvinciBULL, That should be its own file, accelerator.lua, stored in scripts/components. You should be adding the component to your character in the prefab file. I didn't test it myself-- it's possible that player movement doesn't actually populate isrunning, so if that's the case you might have to detect it another way (such as comparing the last position and current position, perhaps). 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