Fredson Posted January 8, 2015 Share Posted January 8, 2015 Hello!I,ve imported a DS character to DST and without his prefabs and componets it works well but when i add them i get this: Disabling Custom because it had an error. [string "../mods/Custom/modmain.lua"]:40: attempt to index global 'player' (a nil value)LUA ERROR stack traceback: ../mods/Custom/modmain.lua(40,1) =(tail call) ? =[C] in function 'xpcall' scripts/mods.lua(105,1) scripts/mods.lua(547,1) in function 'SimPostInit' scripts/gamelogic.lua(881,1) in function 'DoInitGame' scripts/gamelogic.lua(971,1) in function 'cb' scripts/saveindex.lua(640,1) =[C] in function 'SetPersistentString' scripts/saveindex.lua(84,1) in function 'Save' scripts/saveindex.lua(669,1) =[C] in function 'SetPersistentString' scripts/saveindex.lua(672,1) in function 'OnGenerateNewWorld' scripts/gamelogic.lua(981,1) in function 'cb' scripts/screens/worldgenscreen.lua(183,1) in function 'cb' scripts/frontend.lua(424,1) in function 'DoFadingUpdate' scripts/frontend.lua(479,1) in function 'Update' scripts/update.lua(91,1)What is wrong with it ? Link to comment Share on other sites More sharing options...
Aquaterion Posted January 8, 2015 Share Posted January 8, 2015 Well it seems like you have a problem with "player" on line 40, in modmain.lua but without posting the code, I doubt you'll get that much help. Link to comment Share on other sites More sharing options...
Fredson Posted January 8, 2015 Author Share Posted January 8, 2015 modmain.lua PrefabFiles = {"mabel","sweaterbal","sweaterber","sweaterbol","sweaterclo","sweatercre","sweaterhea","sweaterind","sweaterlla","sweatermab","sweatermeo","sweatermus","sweaternot","sweatersco","sweatersta","sweaterumb"}ComponentFiles = {"sweaterswitch",}Assets = { Asset( "IMAGE", "images/saveslot_portraits/mabel.tex" ),Asset( "ATLAS", "images/saveslot_portraits/mabel.xml" ), Asset( "IMAGE", "images/selectscreen_portraits/mabel.tex" ),Asset( "ATLAS", "images/selectscreen_portraits/mabel.xml" ), Asset( "IMAGE", "images/selectscreen_portraits/mabel_silho.tex" ),Asset( "ATLAS", "images/selectscreen_portraits/mabel_silho.xml" ), Asset( "IMAGE", "bigportraits/mabel.tex" ),Asset( "ATLAS", "bigportraits/mabel.xml" ),}function sSwitch(player) if player.components.sweaterswitch then player.components.sweaterswitch:RanSweater() endendlocal STRINGS = GLOBAL.STRINGSlocal Ingredient = GLOBAL.Ingredientlocal RECIPETABS = GLOBAL.RECIPETABSGLOBAL.STRINGS.NAMES.SWEATERBAL = "Basketball Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERBAL = "Barkley for 2!"GLOBAL.STRINGS.NAMES.SWEATERBER = "Strawberry Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERBER = "Does not come with shortcake sweater."GLOBAL.STRINGS.NAMES.SWEATERBOL = "Bolt Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERBOL = "A bolt of lightning!"GLOBAL.STRINGS.NAMES.SWEATERCLO = "Clover Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERCLO = "Today's my lucky day!"GLOBAL.STRINGS.NAMES.SWEATERCRE = "Crest Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERCRE = "Trust no-one."GLOBAL.STRINGS.NAMES.SWEATERHEA = "Cool Heart Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERHEA = "Too radicool for you!"GLOBAL.STRINGS.NAMES.SWEATERIND = "Pattern Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERIND = "It's so cute!"GLOBAL.STRINGS.NAMES.SWEATERLLA = "LLama Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERLLA = "Here's a llama, there's a llama!"GLOBAL.STRINGS.NAMES.SWEATERMAB = "Mabel Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERMAB = "Lights not included."GLOBAL.STRINGS.NAMES.SWEATERMEO = "Meow Wow Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERMEO = "Wow!"GLOBAL.STRINGS.NAMES.SWEATERMUS = "Mushroom Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERMUS = "Practically camouflage!"GLOBAL.STRINGS.NAMES.SWEATERNOT = "Music Note Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERNOT = "Because you're F A B!"GLOBAL.STRINGS.NAMES.SWEATERSCO = "Promise Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERSCO = "Scouts honour!"GLOBAL.STRINGS.NAMES.SWEATERSTA = "Star Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERSTA = "Make a wish!"GLOBAL.STRINGS.NAMES.SWEATERUMB = "Umbrella Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERUMB = "Ella, ella, ay, ay, ay."AddSimPostInit(sSwitch)AddPrefabPostInit('sweaterbal')AddPrefabPostInit('sweaterber')AddPrefabPostInit('sweaterbol')AddPrefabPostInit('sweaterclo')AddPrefabPostInit('sweatercre')AddPrefabPostInit('sweaterhea')AddPrefabPostInit('sweaterind')AddPrefabPostInit('sweaterlla')AddPrefabPostInit('sweatermab')AddPrefabPostInit('sweatermeo')AddPrefabPostInit('sweatermus')AddPrefabPostInit('sweaternot')AddPrefabPostInit('sweatersco')AddPrefabPostInit('sweatersta')AddPrefabPostInit('sweaterumb')AddComponentPostInit('sweaterswitch')AddModCharacter("mabel")AddSimPostInit(pcHat)STRINGS.CHARACTERS.GENERIC.DESCRIBE.MABEL = {GENERIC = "It's Mabel!",ATTACKER = "That Mabel looks shifty...",MURDERER = "Murderer!",REVIVER = "Mabel, friend of ghosts.",GHOST = "Mabel could use a heart.",}prefab custom character.lua local MakePlayerCharacter = require "prefabs/player_common"local assets = { Asset( "ANIM", "anim/player_basic.zip" ), Asset( "ANIM", "anim/player_idles_shiver.zip" ), Asset( "ANIM", "anim/player_actions.zip" ), Asset( "ANIM", "anim/player_actions_axe.zip" ), Asset( "ANIM", "anim/player_actions_pickaxe.zip" ), Asset( "ANIM", "anim/player_actions_shovel.zip" ), Asset( "ANIM", "anim/player_actions_blowdart.zip" ), Asset( "ANIM", "anim/player_actions_eat.zip" ), Asset( "ANIM", "anim/player_actions_item.zip" ), Asset( "ANIM", "anim/player_actions_uniqueitem.zip" ), Asset( "ANIM", "anim/player_actions_bugnet.zip" ), Asset( "ANIM", "anim/player_actions_fishing.zip" ), Asset( "ANIM", "anim/player_actions_boomerang.zip" ), Asset( "ANIM", "anim/player_bush_hat.zip" ), Asset( "ANIM", "anim/player_attacks.zip" ), Asset( "ANIM", "anim/player_idles.zip" ), Asset( "ANIM", "anim/player_rebirth.zip" ), Asset( "ANIM", "anim/player_jump.zip" ), Asset( "ANIM", "anim/player_amulet_resurrect.zip" ), Asset( "ANIM", "anim/player_teleport.zip" ), Asset( "ANIM", "anim/wilson_fx.zip" ), Asset( "ANIM", "anim/player_one_man_band.zip" ), Asset( "ANIM", "anim/shadow_hands.zip" ), Asset( "SOUND", "sound/sfx.fsb" ), Asset( "SOUND", "sound/wilson.fsb" ), Asset( "ANIM", "anim/beard.zip" ),-- Don't forget to include your character's custom assets! Asset( "ANIM", "anim/mabel.zip" ), Asset( "ANIM", "anim/ghost_mabel_build.zip" ),Asset( "ANIM", "anim/mabel_bal.zip" ),Asset( "ANIM", "anim/mabel_ber.zip" ),Asset( "ANIM", "anim/mabel_bol.zip" ),Asset( "ANIM", "anim/mabel_clo.zip" ),Asset( "ANIM", "anim/mabel_cre.zip" ),Asset( "ANIM", "anim/mabel_hea.zip" ),Asset( "ANIM", "anim/mabel_ind.zip" ),Asset( "ANIM", "anim/mabel_lla.zip" ),Asset( "ANIM", "anim/mabel_mab.zip" ),Asset( "ANIM", "anim/mabel_meo.zip" ),Asset( "ANIM", "anim/mabel_mus.zip" ),Asset( "ANIM", "anim/mabel_not.zip" ),Asset( "ANIM", "anim/mabel_sco.zip" ),Asset( "ANIM", "anim/mabel_sta.zip" ),Asset( "ANIM", "anim/mabel_umb.zip" ),Asset("IMAGE", "images/hud/tab_sweater.tex"), Asset("ATLAS", "images/hud/tab_sweater.xml"),Asset("IMAGE", "images/inventoryimages/sweaterbal.tex"), Asset("ATLAS", "images/inventoryimages/sweaterbal.xml")}local prefabs = { "piggyback", "sweaternot"}local start_inv = { "piggyback"}local fn = function(inst)-- choose which sounds this character will playinst.soundsname = "willow"-- a minimap icon must be specifiedinst.MiniMapEntity:SetIcon( "wendy.png" )inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1.15)inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1.2)inst.components.combat.damagemultiplier = 0.9inst.components.sanity.dapperness = TUNING.DAPPERNESS_LARGE-- todo: Add an example special power here.inst:AddComponent("sweaterswitch")local sweatertab = {str = "Sweaters", sort=999, icon = "clock_NIGHT.tex"}inst.components.builder:AddRecipeTab(sweatertab)local s01Recipe = Recipe("sweaterbal", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s01Recipe.atlas = "images/inventoryimages/sweaterbal.xml"local s02Recipe = Recipe("sweaterber", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s02Recipe.atlas = "images/inventoryimages/sweaterber.xml"local s03Recipe = Recipe("sweaterbol", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s03Recipe.atlas = "images/inventoryimages/sweaterbol.xml"local s04Recipe = Recipe("sweaterclo", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s04Recipe.atlas = "images/inventoryimages/sweaterclo.xml"local s05Recipe = Recipe("sweatercre", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s05Recipe.atlas = "images/inventoryimages/sweatercre.xml"local s06Recipe = Recipe("sweaterhea", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s06Recipe.atlas = "images/inventoryimages/sweaterhea.xml"local s07Recipe = Recipe("sweaterind", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s07Recipe.atlas = "images/inventoryimages/sweaterind.xml"local s08Recipe = Recipe("sweaterlla", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s08Recipe.atlas = "images/inventoryimages/sweaterlla.xml"local s09Recipe = Recipe("sweatermab", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s09Recipe.atlas = "images/inventoryimages/sweatermab.xml"local s10Recipe = Recipe("sweatermeo", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s10Recipe.atlas = "images/inventoryimages/sweatermeo.xml"local s11Recipe = Recipe("sweatermus", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s11Recipe.atlas = "images/inventoryimages/sweatermus.xml"local s12Recipe = Recipe("sweaternot", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s12Recipe.atlas = "images/inventoryimages/sweaternot.xml"local s13Recipe = Recipe("sweatersco", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s13Recipe.atlas = "images/inventoryimages/sweatersco.xml"local s14Recipe = Recipe("sweatersta", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s14Recipe.atlas = "images/inventoryimages/sweatersta.xml"local s15Recipe = Recipe("sweaterumb", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s15Recipe.atlas = "images/inventoryimages/sweaterumb.xml"end-- strings! Any "WOD" below would have to be replaced by the prefab name of your character.-- First up, the character select screen lines -- note: these are lower-case character nameSTRINGS.CHARACTER_TITLES.mabel = "The Eccentric Sister"STRINGS.CHARACTER_NAMES.mabel = "Mabel"STRINGS.CHARACTER_DESCRIPTIONS.mabel = "*Has a lot of sweaters\n*Loves her pet pig\n*Tends to look on the bright side of things"STRINGS.CHARACTER_QUOTES.mabel = "\"We're somewhere where it looks like we're nowhere.\""-- You can also add any kind of custom dialogue that you would like. Don't forget to make-- categores that don't exist yet using = {}-- note: these are UPPER-CASE charcacter nameSTRINGS.CHARACTERS.MABEL = require "speech_mabel"return MakePlayerCharacter("mabel", prefabs, assets, fn, start_inv)component sweaterswitch.lua: local Sweater = Class(function(self, inst) self.inst = instself.fLoad = falseself.sName = ""self.sweaters = {"bal", "ber", "bol", "clo", "cre", "hea", "ind", "lla", "mab", "meo", "mus", "not", "sco", "sta", "umb"}end)function Sweater:SetSweater(name)GetPlayer().AnimState:SetBuild("mabel_"..name)self.sName = nameendfunction Sweater:RanSweater()if self.fLoad == false thenself.sName = self.sweaters[math.random(#self.sweaters)]GetPlayer().AnimState:SetBuild("mabel_"..self.sName)self.fLoad = trueendendfunction Sweater:OnSave()local data ={fLoad = self.fLoad,sName = self.sName}return dataendfunction Sweater:OnLoad(data) if data.fLoad thenself.fLoad = data.fLoadself.sName = data.sNameGetPlayer().AnimState:SetBuild("mabel_"..self.sName)endendreturn Sweater Link to comment Share on other sites More sharing options...
Fredson Posted January 8, 2015 Author Share Posted January 8, 2015 its in line 45 Link to comment Share on other sites More sharing options...
rezecib Posted January 9, 2015 Share Posted January 9, 2015 @Fredson, You can't use AddSimPostInit for this. The player doesn't exist yet when the Sim is initialized, and as you're finding from your error, there's no argument being passed to your function (that's why player is nil). Instead, you should probably just be putting that code directly into the character's prefab. Also, you should look at some DST character prefab files, you just have fn in yours, and that needs to be split into common_postinit and master_postinit. Link to comment Share on other sites More sharing options...
Fredson Posted January 9, 2015 Author Share Posted January 9, 2015 @Fredson, You can't use AddSimPostInit for this. The player doesn't exist yet when the Sim is initialized, and as you're finding from your error, there's no argument being passed to your function (that's why player is nil). Instead, you should probably just be putting that code directly into the character's prefab. Also, you should look at some DST character prefab files, you just have fn in yours, and that needs to be split into common_postinit and master_postinit.:/ the thing is i dont know how to do it, im beginning in this, i followed the extended character tutorial to import a character from DS, and that character has a sweater switch component Link to comment Share on other sites More sharing options...
Fredson Posted January 9, 2015 Author Share Posted January 9, 2015 i have fixed the prefab: local MakePlayerCharacter = require "prefabs/player_common"local assets = { Asset( "ANIM", "anim/player_basic.zip" ), Asset( "ANIM", "anim/player_idles_shiver.zip" ), Asset( "ANIM", "anim/player_actions.zip" ), Asset( "ANIM", "anim/player_actions_axe.zip" ), Asset( "ANIM", "anim/player_actions_pickaxe.zip" ), Asset( "ANIM", "anim/player_actions_shovel.zip" ), Asset( "ANIM", "anim/player_actions_blowdart.zip" ), Asset( "ANIM", "anim/player_actions_eat.zip" ), Asset( "ANIM", "anim/player_actions_item.zip" ), Asset( "ANIM", "anim/player_actions_uniqueitem.zip" ), Asset( "ANIM", "anim/player_actions_bugnet.zip" ), Asset( "ANIM", "anim/player_actions_fishing.zip" ), Asset( "ANIM", "anim/player_actions_boomerang.zip" ), Asset( "ANIM", "anim/player_bush_hat.zip" ), Asset( "ANIM", "anim/player_attacks.zip" ), Asset( "ANIM", "anim/player_idles.zip" ), Asset( "ANIM", "anim/player_rebirth.zip" ), Asset( "ANIM", "anim/player_jump.zip" ), Asset( "ANIM", "anim/player_amulet_resurrect.zip" ), Asset( "ANIM", "anim/player_teleport.zip" ), Asset( "ANIM", "anim/wilson_fx.zip" ), Asset( "ANIM", "anim/player_one_man_band.zip" ), Asset( "ANIM", "anim/shadow_hands.zip" ), Asset( "SOUND", "sound/sfx.fsb" ), Asset( "SOUND", "sound/wilson.fsb" ), Asset( "ANIM", "anim/beard.zip" ), Asset( "ANIM", "anim/mabel.zip" ), Asset( "ANIM", "anim/ghost_mabel_build.zip" ),Asset( "ANIM", "anim/mabel_bal.zip" ),Asset( "ANIM", "anim/mabel_ber.zip" ),Asset( "ANIM", "anim/mabel_bol.zip" ),Asset( "ANIM", "anim/mabel_clo.zip" ),Asset( "ANIM", "anim/mabel_cre.zip" ),Asset( "ANIM", "anim/mabel_hea.zip" ),Asset( "ANIM", "anim/mabel_ind.zip" ),Asset( "ANIM", "anim/mabel_lla.zip" ),Asset( "ANIM", "anim/mabel_mab.zip" ),Asset( "ANIM", "anim/mabel_meo.zip" ),Asset( "ANIM", "anim/mabel_mus.zip" ),Asset( "ANIM", "anim/mabel_not.zip" ),Asset( "ANIM", "anim/mabel_sco.zip" ),Asset( "ANIM", "anim/mabel_sta.zip" ),Asset( "ANIM", "anim/mabel_umb.zip" ),Asset("IMAGE", "images/hud/tab_sweater.tex"), Asset("ATLAS", "images/hud/tab_sweater.xml"),Asset("IMAGE", "images/inventoryimages/sweaterbal.tex"), Asset("ATLAS", "images/inventoryimages/sweaterbal.xml")}local prefabs = { "piggyback", "sweaternot"}local start_inv = { "piggyback"}AddSimPostInit(sSwitch)AddPrefabPostInit('sweaterbal')AddPrefabPostInit('sweaterber')AddPrefabPostInit('sweaterbol')AddPrefabPostInit('sweaterclo')AddPrefabPostInit('sweatercre')AddPrefabPostInit('sweaterhea')AddPrefabPostInit('sweaterind')AddPrefabPostInit('sweaterlla')AddPrefabPostInit('sweatermab')AddPrefabPostInit('sweatermeo')AddPrefabPostInit('sweatermus')AddPrefabPostInit('sweaternot')AddPrefabPostInit('sweatersco')AddPrefabPostInit('sweatersta')AddPrefabPostInit('sweaterumb')AddComponentPostInit('sweaterswitch')AddModCharacter("mabel")AddSimPostInit(pcHat)function sSwitch(player) if player.components.sweaterswitch then player.components.sweaterswitch:RanSweater() endend-- This initializes for both clients and the hostlocal common_postinit = function(inst) -- Minimap iconinst.MiniMapEntity:SetIcon( "mabel.tex" )end-- This initializes for the host onlylocal master_postinit = function(inst)-- choose which sounds this character will playinst.soundsname = "willow"-- Stats inst.components.health:SetMaxHealth(200)inst.components.hunger:SetMax(150)inst.components.sanity:SetMax(200) inst.components.locomotor.walkspeed = (TUNING.WILSON_WALK_SPEED * 1.15)inst.components.locomotor.runspeed = (TUNING.WILSON_RUN_SPEED * 1.3)inst.components.combat.damagemultiplier = 1.2inst.components.sanity.dapperness = TUNING.DAPPERNESS_LARGE-- todo: Add an example special power here.inst:AddComponent("sweaterswitch")local sweatertab = {str = "Sweaters", sort=999, icon = "clock_NIGHT.tex"}inst.components.builder:AddRecipeTab(sweatertab)local s01Recipe = Recipe("sweaterbal", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s01Recipe.atlas = "images/inventoryimages/sweaterbal.xml"local s02Recipe = Recipe("sweaterber", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s02Recipe.atlas = "images/inventoryimages/sweaterber.xml"local s03Recipe = Recipe("sweaterbol", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s03Recipe.atlas = "images/inventoryimages/sweaterbol.xml"local s04Recipe = Recipe("sweaterclo", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s04Recipe.atlas = "images/inventoryimages/sweaterclo.xml"local s05Recipe = Recipe("sweatercre", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s05Recipe.atlas = "images/inventoryimages/sweatercre.xml"local s06Recipe = Recipe("sweaterhea", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s06Recipe.atlas = "images/inventoryimages/sweaterhea.xml"local s07Recipe = Recipe("sweaterind", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s07Recipe.atlas = "images/inventoryimages/sweaterind.xml"local s08Recipe = Recipe("sweaterlla", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s08Recipe.atlas = "images/inventoryimages/sweaterlla.xml"local s09Recipe = Recipe("sweatermab", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s09Recipe.atlas = "images/inventoryimages/sweatermab.xml"local s10Recipe = Recipe("sweatermeo", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s10Recipe.atlas = "images/inventoryimages/sweatermeo.xml"local s11Recipe = Recipe("sweatermus", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s11Recipe.atlas = "images/inventoryimages/sweatermus.xml"local s12Recipe = Recipe("sweaternot", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s12Recipe.atlas = "images/inventoryimages/sweaternot.xml"local s13Recipe = Recipe("sweatersco", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s13Recipe.atlas = "images/inventoryimages/sweatersco.xml"local s14Recipe = Recipe("sweatersta", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s14Recipe.atlas = "images/inventoryimages/sweatersta.xml"local s15Recipe = Recipe("sweaterumb", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s15Recipe.atlas = "images/inventoryimages/sweaterumb.xml"endreturn MakePlayerCharacter("mabel", prefabs, assets, common_postinit, master_postinit, start_inv)but still crashes Link to comment Share on other sites More sharing options...
rezecib Posted January 9, 2015 Share Posted January 9, 2015 Well... I think this isn't a good starter project. You will have to do quite a bit of work to get character-specific recipes/recipetabs working, and the recipe system right now totally bugs out if you have more than one recipe mod. But if you do get back to it later, you can't have recipes in character prefabs anymore, because the recipe table needs to be the same for everyone (so you put them in the modmain instead). Also, since you removed sSwitch, you should comment out or remove the AddSimPostInit. I don't know why the sweaterswitch needs a call outside of the prefab like that, but I guess there's probably a reason. Hard to say where and how to place it without seeing that component. Link to comment Share on other sites More sharing options...
Fredson Posted January 9, 2015 Author Share Posted January 9, 2015 so the sweater function cannot work in DST ?btw heres the component: local Sweater = Class(function(self, inst) self.inst = instself.fLoad = falseself.sName = ""self.sweaters = {"bal", "ber", "bol", "clo", "cre", "hea", "ind", "lla", "mab", "meo", "mus", "not", "sco", "sta", "umb"}end)function Sweater:SetSweater(name)GetPlayer().AnimState:SetBuild("mabel_"..name)self.sName = nameendfunction Sweater:RanSweater()if self.fLoad == false thenself.sName = self.sweaters[math.random(#self.sweaters)]GetPlayer().AnimState:SetBuild("mabel_"..self.sName)self.fLoad = trueendendfunction Sweater:OnSave()local data ={fLoad = self.fLoad,sName = self.sName}return dataendfunction Sweater:OnLoad(data) if data.fLoad thenself.fLoad = data.fLoadself.sName = data.sNameGetPlayer().AnimState:SetBuild("mabel_"..self.sName)endendreturn Sweater Link to comment Share on other sites More sharing options...
rezecib Posted January 9, 2015 Share Posted January 9, 2015 @Fredson, Oh... I think the author just wanted it to run after the OnLoad. So the easy solution is to put it in the OnLoad instead...function Sweater:OnLoad(data) if data.fLoad then self.fLoad = data.fLoad self.sName = data.sName self.inst.AnimState:SetBuild("mabel_"..self.sName) end self:RanSweater()endAlso, wherever you see GetPlayer() you'll have to change it. Inside the sweaterswitch component, it should be using self.inst instead, but elsewhere it will vary. Link to comment Share on other sites More sharing options...
Fredson Posted January 9, 2015 Author Share Posted January 9, 2015 ok so replace GetPlayer in component for self.inst and the onload where do i put it ? (sorry, like i said im new to the components) Link to comment Share on other sites More sharing options...
rezecib Posted January 9, 2015 Share Posted January 9, 2015 @Fredson, The OnLoad is already there in your component. I just edited it a little. Link to comment Share on other sites More sharing options...
Fredson Posted January 9, 2015 Author Share Posted January 9, 2015 ok, and this goes in prefabs right ? but in any order ? AddSimPostInit(sSwitch)AddPrefabPostInit('sweaterbal')AddPrefabPostInit('sweaterber')AddPrefabPostInit('sweaterbol')AddPrefabPostInit('sweaterclo')AddPrefabPostInit('sweatercre')AddPrefabPostInit('sweaterhea')AddPrefabPostInit('sweaterind')AddPrefabPostInit('sweaterlla')AddPrefabPostInit('sweatermab')AddPrefabPostInit('sweatermeo')AddPrefabPostInit('sweatermus')AddPrefabPostInit('sweaternot')AddPrefabPostInit('sweatersco')AddPrefabPostInit('sweatersta')AddPrefabPostInit('sweaterumb')AddComponentPostInit('sweaterswitch')AddModCharacter("mabel")AddSimPostInit(pcHat)function sSwitch(player) if player.components.sweaterswitch then player.components.sweaterswitch:RanSweater() endend Link to comment Share on other sites More sharing options...
rezecib Posted January 10, 2015 Share Posted January 10, 2015 (edited) AddPrefabPostInit('sweaterbal') AddPrefabPostInit('sweaterber') AddPrefabPostInit('sweaterbol') AddPrefabPostInit('sweaterclo') AddPrefabPostInit('sweatercre') AddPrefabPostInit('sweaterhea') AddPrefabPostInit('sweaterind') AddPrefabPostInit('sweaterlla') AddPrefabPostInit('sweatermab') AddPrefabPostInit('sweatermeo') AddPrefabPostInit('sweatermus') AddPrefabPostInit('sweaternot') AddPrefabPostInit('sweatersco') AddPrefabPostInit('sweatersta') AddPrefabPostInit('sweaterumb')You don't need to do any of this. Although it does seem like the function is saying it's adding the prefab after initialization, what it's actually doing is adding a post-initialization function to a prefab (or component). So if you're not giving it a function as the second argument, it's not really doing anything. Edit: Going back and looking at the modmain, it looks like the original author did this in place of declaring them in the PrefabFiles table, which is definitely the nicer way to make sure they get loaded:PrefabFiles = { "sweaterbal", "sweaterber", "sweaterbol", "sweaterclo", "sweatercre", "sweaterhea",}... and so on Edited January 10, 2015 by rezecib Link to comment Share on other sites More sharing options...
Fredson Posted January 10, 2015 Author Share Posted January 10, 2015 ok, i think evrything is fine but it crashed loading the last part of the mabel.lua prefab string "../mods/Mabel Pines/scripts/prefabs/mabel.l..."]:93: attempt to call method 'AddRecipeTab' (a nil value)LUA ERROR stack traceback:../mods/Mabel Pines/scripts/prefabs/mabel.lua:93 in (upvalue) master_postinit (Lua) <76-140> inst = 116954 - (valid:true) sweatertab = table: 327941B0scripts/prefabs/player_common.lua:1188 in (upvalue) oldfn (Lua) <969-1217> inst = 116954 - (valid:true)../mods/workshop-359424598/modmain.lua:41 in (upvalue) oldfn (Lua) <40-51>../mods/workshop-359424598/modmain.lua:65 in (field) fn (Lua) <64-69>scripts/mainfunctions.lua:147 in () ? (Lua) <136-167> name = mabel prefab = Prefab mabel - =[C]:-1 in (method) SendSpawnRequestToServer (C) <-1--1>scripts/mainfunctions.lua:1134 in (local) cb (Lua) <1132-1138>scripts/frontend.lua:424 in (method) DoFadingUpdate (Lua) <388-428>heres the crashing line:inst:AddComponent("sweaterswitch")local sweatertab = {str = "Sweaters", sort=999, icon = "clock_NIGHT.tex"}inst.components.builder:AddRecipeTab(sweatertab)local s01Recipe = Recipe("sweaterbal", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s01Recipe.atlas = "images/inventoryimages/sweaterbal.xml"local s02Recipe = Recipe("sweaterber", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s02Recipe.atlas = "images/inventoryimages/sweaterber.xml"local s03Recipe = Recipe("sweaterbol", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s03Recipe.atlas = "images/inventoryimages/sweaterbol.xml"local s04Recipe = Recipe("sweaterclo", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s04Recipe.atlas = "images/inventoryimages/sweaterclo.xml"local s05Recipe = Recipe("sweatercre", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s05Recipe.atlas = "images/inventoryimages/sweatercre.xml"local s06Recipe = Recipe("sweaterhea", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s06Recipe.atlas = "images/inventoryimages/sweaterhea.xml"local s07Recipe = Recipe("sweaterind", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s07Recipe.atlas = "images/inventoryimages/sweaterind.xml"local s08Recipe = Recipe("sweaterlla", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s08Recipe.atlas = "images/inventoryimages/sweaterlla.xml"local s09Recipe = Recipe("sweatermab", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s09Recipe.atlas = "images/inventoryimages/sweatermab.xml"local s10Recipe = Recipe("sweatermeo", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s10Recipe.atlas = "images/inventoryimages/sweatermeo.xml"local s11Recipe = Recipe("sweatermus", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s11Recipe.atlas = "images/inventoryimages/sweatermus.xml"local s12Recipe = Recipe("sweaternot", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s12Recipe.atlas = "images/inventoryimages/sweaternot.xml"local s13Recipe = Recipe("sweatersco", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s13Recipe.atlas = "images/inventoryimages/sweatersco.xml"local s14Recipe = Recipe("sweatersta", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s14Recipe.atlas = "images/inventoryimages/sweatersta.xml"local s15Recipe = Recipe("sweaterumb", {}, sweatertab, {SCIENCE = 0, MAGIC = 0, ANCIENT = 0})s15Recipe.atlas = "images/inventoryimages/sweaterumb.xml"also in the crash made reference to another mod lines that said AddComponent Link to comment Share on other sites More sharing options...
rezecib Posted January 10, 2015 Share Posted January 10, 2015 @Fredson, Recipe tabs are very difficult to add right now. I think the Tiny Tina mod adds one, so you can look at how that does it. And I think I said this before, but you can't have recipes in the prefab, they need to be in the modmain or the entire recipe system will break. Link to comment Share on other sites More sharing options...
Fredson Posted January 10, 2015 Author Share Posted January 10, 2015 (edited) ok it doesnt crash anymore, but the sweatertab does not appear, this appears in tiny tina modmain.lua not sure if this is for the CUSTOM_RECIPETAB : AddClassPostConstruct("widgets/crafttabs", function(class)if class.owner:HasTag("bombzerker") thenlocal v = CUSTOM_RECIPETABS.ORDINANCElocal k = #class.tab_order + 1local tab_bg = {normal = "tab_normal.tex",selected = "tab_selected.tex",highlight = "tab_highlight.tex",bufferedhighlight = "tab_place.tex",overlay = "tab_researchable.tex",}class.tabs.spacing = 750/klocal tab = class.tabs:AddTab(STRINGS.TABS[v.str], resolvefilepath("images/hud.xml"), v.icon_atlas or resolvefilepath("images/hud.xml"), v.icon, tab_bg.normal, tab_bg.selected, tab_bg.highlight, tab_bg.bufferedhighlight, tab_bg.overlay, function() --select fn if not class.controllercraftingopen then if class.craft_idx_by_tab[k] then class.crafting.idx = class.craft_idx_by_tab[k] end class.crafting:SetFilter( function(recipe) local rec = GLOBAL.AllRecipes[recipe] return rec and rec.tab == v end) class.crafting:Open() end end, function() --deselect fn class.craft_idx_by_tab[k] = class.crafting.idx class.crafting:Close() end) tab.filter = v tab.icon = v.icon tab.icon_atlas = v.icon_atlas or resolvefilepath("images/hud.xml") tab.tabname = STRINGS.TABS[v.str] class.tabbyfilter[v] = tab table.insert(class.tab_order, tab)endend)also, were should i put this ? inst:AddComponent("sweaterswitch")it was written before the sweater recipes Edited January 10, 2015 by Fredson Link to comment Share on other sites More sharing options...
Fredson Posted January 10, 2015 Author Share Posted January 10, 2015 the modmain.lua of my mod modfified if you need it : PrefabFiles = {"mabel","sweaterbal","sweaterber","sweaterbol","sweaterclo","sweatercre","sweaterhea","sweaterind","sweaterlla","sweatermab","sweatermeo","sweatermus","sweaternot","sweatersco","sweatersta","sweaterumb"}Assets = { Asset( "IMAGE", "images/saveslot_portraits/mabel.tex" ), Asset( "ATLAS", "images/saveslot_portraits/mabel.xml" ), Asset( "IMAGE", "images/selectscreen_portraits/mabel.tex" ), Asset( "ATLAS", "images/selectscreen_portraits/mabel.xml" ), Asset( "IMAGE", "images/selectscreen_portraits/mabel_silho.tex" ), Asset( "ATLAS", "images/selectscreen_portraits/mabel_silho.xml" ), Asset( "IMAGE", "bigportraits/mabel.tex" ), Asset( "ATLAS", "bigportraits/mabel.xml" ),Asset( "IMAGE", "images/map_icons/mabel.tex" ),Asset( "ATLAS", "images/map_icons/mabel.xml" ),Asset( "IMAGE", "images/avatars/avatar_mabel.tex" ), Asset( "ATLAS", "images/avatars/avatar_mabel.xml" ),Asset( "IMAGE", "images/avatars/avatar_ghost_mabel.tex" ), Asset( "ATLAS", "images/avatars/avatar_ghost_mabel.xml" ),}GLOBAL.STRINGS.NAMES.SWEATERBAL = "Basketball Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERBAL = "Barkley for 2!"GLOBAL.STRINGS.NAMES.SWEATERBER = "Strawberry Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERBER = "Does not come with shortcake sweater."GLOBAL.STRINGS.NAMES.SWEATERBOL = "Bolt Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERBOL = "A bolt of lightning!"GLOBAL.STRINGS.NAMES.SWEATERCLO = "Clover Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERCLO = "Today's my lucky day!"GLOBAL.STRINGS.NAMES.SWEATERCRE = "Crest Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERCRE = "Trust no-one."GLOBAL.STRINGS.NAMES.SWEATERHEA = "Cool Heart Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERHEA = "Too radicool for you!"GLOBAL.STRINGS.NAMES.SWEATERIND = "Pattern Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERIND = "It's so cute!"GLOBAL.STRINGS.NAMES.SWEATERLLA = "LLama Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERLLA = "Here's a llama, there's a llama!"GLOBAL.STRINGS.NAMES.SWEATERMAB = "Mabel Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERMAB = "Lights not included."GLOBAL.STRINGS.NAMES.SWEATERMEO = "Meow Wow Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERMEO = "Wow!"GLOBAL.STRINGS.NAMES.SWEATERMUS = "Mushroom Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERMUS = "Practically camouflage!"GLOBAL.STRINGS.NAMES.SWEATERNOT = "Music Note Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERNOT = "Because you're F A B!"GLOBAL.STRINGS.NAMES.SWEATERSCO = "Promise Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERSCO = "Scouts honour!"GLOBAL.STRINGS.NAMES.SWEATERSTA = "Star Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERSTA = "Make a wish!"GLOBAL.STRINGS.NAMES.SWEATERUMB = "Umbrella Sweater"GLOBAL.STRINGS.RECIPE_DESC.SWEATERUMB = "Ella, ella, ay, ay, ay."local require = GLOBAL.requirelocal STRINGS = GLOBAL.STRINGS local resolvefilepath = GLOBAL.resolvefilepath local TECH = GLOBAL.TECH local CUSTOM_RECIPETABS = GLOBAL.CUSTOM_RECIPETABS GLOBAL.CUSTOM_RECIPETABS.SWEATERS = { str = "SWEATERS", sort = 998, icon = "tab_sweater.tex", icon_atlas = resolvefilepath("images/hud/tab_sweater.xml")} STRINGS.TABS.SWEATERS = "Sweaters"--local sweatertab = {str = "Sweaters", sort=999, icon = "tab_sweater.tex", icon_atlas = resolvefilepath("images/hud/tab_sweater.xml")}--inst.components.builder:AddRecipeTab(GLOBAL.CUSTOM_RECIPETABS.SWEATERS)local s01Recipe = Recipe("sweaterbal", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s01Recipe.atlas = "images/inventoryimages/sweaterbal.xml"local s02Recipe = Recipe("sweaterber", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s02Recipe.atlas = "images/inventoryimages/sweaterber.xml"local s03Recipe = Recipe("sweaterbol", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s03Recipe.atlas = "images/inventoryimages/sweaterbol.xml"local s04Recipe = Recipe("sweaterclo", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s04Recipe.atlas = "images/inventoryimages/sweaterclo.xml"local s05Recipe = Recipe("sweatercre", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s05Recipe.atlas = "images/inventoryimages/sweatercre.xml"local s06Recipe = Recipe("sweaterhea", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s06Recipe.atlas = "images/inventoryimages/sweaterhea.xml"local s07Recipe = Recipe("sweaterind", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s07Recipe.atlas = "images/inventoryimages/sweaterind.xml"local s08Recipe = Recipe("sweaterlla", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s08Recipe.atlas = "images/inventoryimages/sweaterlla.xml"local s09Recipe = Recipe("sweatermab", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s09Recipe.atlas = "images/inventoryimages/sweatermab.xml"local s10Recipe = Recipe("sweatermeo", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s10Recipe.atlas = "images/inventoryimages/sweatermeo.xml"local s11Recipe = Recipe("sweatermus", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s11Recipe.atlas = "images/inventoryimages/sweatermus.xml"local s12Recipe = Recipe("sweaternot", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s12Recipe.atlas = "images/inventoryimages/sweaternot.xml"local s13Recipe = Recipe("sweatersco", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s13Recipe.atlas = "images/inventoryimages/sweatersco.xml"local s14Recipe = Recipe("sweatersta", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s14Recipe.atlas = "images/inventoryimages/sweatersta.xml"local s15Recipe = Recipe("sweaterumb", {}, GLOBAL.CUSTOM_RECIPETABS.SWEATERS, TECH.NONE, nil, nil, nil, nil, true)s15Recipe.atlas = "images/inventoryimages/sweaterumb.xml"s01Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterbal.xml")s02Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterber.xml")s03Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterbol.xml")s04Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterclo.xml")s05Recipe.atlas = resolvefilepath("images/inventoryimages/sweatercre.xml")s06Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterhea.xml")s07Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterind.xml")s08Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterlla.xml")s09Recipe.atlas = resolvefilepath("images/inventoryimages/sweatermab.xml")s10Recipe.atlas = resolvefilepath("images/inventoryimages/sweatermeo.xml")s11Recipe.atlas = resolvefilepath("images/inventoryimages/sweatermus.xml")s12Recipe.atlas = resolvefilepath("images/inventoryimages/sweaternot.xml")s13Recipe.atlas = resolvefilepath("images/inventoryimages/sweatersco.xml")s14Recipe.atlas = resolvefilepath("images/inventoryimages/sweatersta.xml")s15Recipe.atlas = resolvefilepath("images/inventoryimages/sweaterumb.xml")-- The character select screen linesSTRINGS.CHARACTER_TITLES.mabel = "The Eccentric Sister"STRINGS.CHARACTER_NAMES.mabel = "Mabel"STRINGS.CHARACTER_DESCRIPTIONS.mabel = "*Has a lot of sweaters\n*Loves her pet pig\n*Tends to look on the bright side of things"STRINGS.CHARACTER_QUOTES.mabel = "\"We're somewhere where it looks loke we're nowhere\""-- Custom speech stringsSTRINGS.CHARACTERS.MABEL = require "speech_mabel"-- The character's name as appears in-game STRINGS.NAMES.MABEL = "Mabel Pines"-- The default responses of examining the characterSTRINGS.CHARACTERS.GENERIC.DESCRIBE.MABEL = {GENERIC = "It's Mabel!",ATTACKER = "That Mabel looks shifty...",MURDERER = "Murderer!",REVIVER = "Mabel, friend of ghosts.",GHOST = "Mabel could use a heart.",}-- Let the game know character is male, female, or robottable.insert(GLOBAL.CHARACTER_GENDERS.FEMALE, "mabel")AddMinimapAtlas("images/map_icons/mabel.xml")AddModCharacter("mabel") Link to comment Share on other sites More sharing options...
Fredson Posted January 11, 2015 Author Share Posted January 11, 2015 Ok its done, thank you very very VERY much for assisting me in this mod, ill give you credit in the port 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