mrboosch Posted April 22, 2017 Share Posted April 22, 2017 (edited) Hey all, I've got a custom character resource (filth) for a goblin character I'm working on. I've got the resource ticking away, interactable, with the same sort of interfaces available to health and sanity (I think). I am currently trying to add some character-specific recipes which use this resource in the same way that a reviver uses a chunk of current health. I have added my FILTH value to CHARACTER_INGREDIENTS I have added recipes to modmain in the structure of: AddRecipe("takblowdart_poison", { Ingredient("cutreeds", 1), Ingredient("flint", 1), Ingredient(GLOBAL.CHARACTER_INGREDIENT.FILTH, 25) }, RECIPETABS.WAR, { SCIENCE = 0 }, nil, nil, nil, nil, "TakTheGoblin", "images/inventoryimages/blowdart_purple.xml", "blowdart_purple.tex" ) The issue APPEARS to be that I don't know how to inform the game about my new resource as an ingredient. I have started looking at the code around recipe & builder, but I'm rapidly leaving my depth (given that not too long ago I didn't know lua, I feel OK about this). I have tried to inject my own logic into some of recipe & builder's work by adding the following to my modmain trying to make anywhere I can see the game evaluate character ingredients also evaluate mine... but it's not working, and I'm stuck. For reference: local recipeclass = G.Ingredient--require "recipe" local old_IsCharacterIngredient = recipeclass.IsCharacterIngredient recipeclass.IsCharacterIngredient = function (ingredienttype) local oici = old_IsCharacterIngredient(ingredienttype) print("INJECT:recipe.IsCharIngredient1") print("INJECT:recipe.IsCharIngredient["..oici.ingredienttype.."]["..oici.is_character_ingredient[ingredienttype].."]["..oici.."]") return oici end local builder = require "components/builder" local old_RemoveIngredients = builder.RemoveIngredients builder.RemoveIngredients = function(ingredients, recname) local ori = old_RemoveIngredients(ingredients, recname) local recipe = G.AllRecipes[recname] if recipe then for k,v in pairs(recipe.character_ingredients) do print("INJECT: evaluating an ingredient with type "..tostring(v.type)) if v.type == CHARACTER_INGREDIENT.FILTH then print("INJECT: found filth to remove ingredient") self.inst.components.filth:DoDelta(-v.amount) elseif v.type == CHARACTER_INGREDIENT.MAX_FILTH then local b = nil --intentionally blank, dnt want anything modifying maxfilth end end end --self.inst:PushEvent("consumeingredients") return ori end local old_HasCharacterIngredient = builder.HasCharacterIngredient builder.HasCharacterInrgedient = function(ingredient) local ohci = old_HasCharacterIngredient(ingredient) print("INJECT: HasCharIngredient") if ingredient.type == CHARACTER_INGREDIENT.FILTH then print("INJECT: found filth in ingredient") if self.inst.components.filth ~= nil then --round up filth to match UI display local current = math.ceil(self.inst.components.filth:GetFilth()) return current >= ingredient.amount, current end elseif ingredient.type == CHARACTER_INGREDIENT.MAX_FILTH then if self.inst.components.filth ~= nil then local penalty = self.inst.components.filth:GetPenaltyPercent() return penalty + ingredient.amount <= TUNING.MAXIMUM_SANITY_PENALTY, 1 - penalty end end return So a few questions: Can someone please explain to me how saving a function from a class and returning it works? Am I doing it right? I feel like I should be able to somehow access members of the function as if it were a table, but I cant figure out how to do so (for example in the code above, how can I access AllRecipes as the Builder class knows it during runtime? It always appears to be empty when this code runs?) Is there a 'checklist' of things to do to add a custom CHARACTER_INGREDIENT to the game such that it is recognized in the recipe tab/chooser and build processes? What am I missing? Thanks in advance, Regards, Mr Boosch Edited April 22, 2017 by mrboosch Link to comment https://forums.kleientertainment.com/forums/topic/78041-help-request-custom-character-resource-in-recipes/ 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