waw Posted September 8, 2016 Share Posted September 8, 2016 Hi, I would want to add a member variable and get it properly saved. AddComponentPostInit("saltlicker", function(comp) comp.lickcount = 0 end) How to do it ? Which function do i need to overide ? Here are the function used while saving/loading function SaltLicker:OnSave() --V2C: can't trigger LoadPostPass unless there is any save data return self.salted and { salted = true } or nil end function SaltLicker:LoadPostPass() -- the timer's save/load has all the data we need... if self.inst.components.timer:TimerExists("salt") then _StopSeeking(self) self:SetSalted(true) end end Thanks Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/ Share on other sites More sharing options...
Serpens Posted September 8, 2016 Share Posted September 8, 2016 56 minutes ago, waw said: Hi, I would want to add a member variable and get it properly saved. AddComponentPostInit("saltlicker", function(comp) comp.lickcount = 0 end) How to do it ? Which function do i need to overide ? Here are the function used while saving/loading function SaltLicker:OnSave() --V2C: can't trigger LoadPostPass unless there is any save data return self.salted and { salted = true } or nil end function SaltLicker:LoadPostPass() -- the timer's save/load has all the data we need... if self.inst.components.timer:TimerExists("salt") then _StopSeeking(self) self:SetSalted(true) end end Thanks so you want to add a variable "lickcount" to the component saltlicker, and save load it correctly, right? Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-811647 Share on other sites More sharing options...
waw Posted September 8, 2016 Author Share Posted September 8, 2016 @Serpens yes Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-811648 Share on other sites More sharing options...
Serpens Posted September 8, 2016 Share Posted September 8, 2016 (edited) hm.... this saltlicker component looks strange... normally you have a OnSave and OnLoad function, dealing with "data". So if it would be normal, you would do it this way eg for prefab teleportato AddPrefabPostInit("teleportato", function(inst) local _OnSave = inst.OnSave local function OnSave(inst,data) _OnSave(inst,data) -- call the previous data.activatedonce = inst.activatedonce end inst.OnSave = OnSave local _OnLoad = inst.OnLoad local function OnLoad(inst,data) _OnLoad(inst,data) -- call the previous if data then if data.activatedonce then inst.activatedonce = data.activatedonce end end end inst.OnLoad = OnLoad end) I have no clue, why it is "LoadPostPass" here... So with saltlicker it seems the OnSave only returns something, to trigger a load function. It seems it is not important what it returns... I would try it that way now: AddComponentPostInit("saltlicker", function(comp) local _OnSave = comp.OnSave local function OnSave() local data = { lickcount = comp.lickcount, } olddata = _OnSave() -- just in case the old data is needed somewhere newdata = GLOBAL.ArrayUnion(data,olddata) -- merge the old and the new data return newdata end comp.OnSave = OnSave local function OnLoad(data) if data then if data.lickcount then comp.lickcount = data.lickcount end end end comp.OnLoad = OnLoad end) The old OnSave function seems not to be important Edited September 9, 2016 by Serpens Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-811666 Share on other sites More sharing options...
waw Posted September 9, 2016 Author Share Posted September 9, 2016 Thanks, but i get a syntax error 12 local data = 13 { 14 data.lickcount = comp.lickcount, 15 } 14: '}' expected (to close '{' at line 13) near '=' Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-811680 Share on other sites More sharing options...
Serpens Posted September 9, 2016 Share Posted September 9, 2016 1 hour ago, waw said: Thanks, but i get a syntax error 12 local data = 13 { 14 data.lickcount = comp.lickcount, 15 } 14: '}' expected (to close '{' at line 13) near '=' ah yes, change "data.lickcount" to "lickcount" I guess there could be even more errors, since I did not tested it... But it should be the right direction. Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-811704 Share on other sites More sharing options...
waw Posted September 9, 2016 Author Share Posted September 9, 2016 (edited) I managed to correct them Thanks a lot, i had similar code but it was crashing when saving EDIT : Everything is working with this final code. AddComponentPostInit("saltlicker", function(comp) comp.lickcount = 0 local old_OnSave = comp.OnSave function comp:OnSave() local data = {} data.lickcount = comp.lickcount data.olddata = old_OnSave(comp) return data end function comp:OnLoad(data) if data and data.lickcount ~= nil then comp.lickcount = data.lickcount else comp.lickcount = 0 end end end) Edited September 9, 2016 by waw Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-811705 Share on other sites More sharing options...
Serpens Posted September 28, 2016 Share Posted September 28, 2016 On 9.9.2016 at 3:18 AM, waw said: I managed to correct them Thanks a lot, i had similar code but it was crashing when saving EDIT : Everything is working with this final code. AddComponentPostInit("saltlicker", function(comp) comp.lickcount = 0 local old_OnSave = comp.OnSave function comp:OnSave() local data = {} data.lickcount = comp.lickcount data.olddata = old_OnSave(comp) return data end function comp:OnLoad(data) if data and data.lickcount ~= nil then comp.lickcount = data.lickcount else comp.lickcount = 0 end end end) ah yes, you fixed some problems. But in your code olddata is not used, since it is not merged. The merge function I used was wrong, it has to be MergeMaps So this should be the final code: AddComponentPostInit("saltlicker", function(comp) comp.lickcount = 0 local old_OnSave = comp.OnSave function comp:OnSave() local data = {} data.lickcount = comp.lickcount local olddata = old_OnSave(comp) local newdata = GLOBAL.MergeMaps(data,olddata) return newdata end function comp:OnLoad(data) if data and data.lickcount ~= nil then comp.lickcount = data.lickcount else comp.lickcount = 0 end end end) Link to comment https://forums.kleientertainment.com/forums/topic/70041-how-to-properly-save-this-overriden-component/#findComment-819345 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