Ordush 185 Posted September 20, 2017 Share Posted September 20, 2017 Hey all This is a followup post from a previous one, i decided to make a new one to clear up all the clutter. I have some code below that is ALMOST working. The problem is: My variables set in the settings of my FC defaults to false when not loaded from in-game lua. Therefor when i reload the game, instead of setting my settings to what they were before, they just default to false. Anyone with more C# experience than me, who can see what is wrong? These variables are set in my lua: HuntersMarkDisabled = true/false When the profile is loaded: LoadedInLua = true <-- This is so it doesn't overwrite it's own settings before the profile is loaded. [Serializable] public class HunterBeastmasterSettings : Settings { const string FILE_PREFIX = "CustomClass-HunterBeastmaster"; [Setting] [DefaultValue(true)] [Category("Combat Spells - Hunter Abilities")] [DisplayName("Hunter's Mark Disabled")] [Description("Is Hunter's Mark Disabled?")] public bool HuntersMark { get; set; } [Setting] [DefaultValue(true)] [Category("Combat Spells - Hunter Abilities")] [DisplayName("Steady Shot")] [Description("Use Steady Shot")] public bool SteadyShot { get; set; } HunterBeastmasterSettings() { ConfigWinForm(new System.Drawing.Point(400, 400), "HunterBeastmaster " + Translate.Get("Settings")); } public static HunterBeastmasterSettings CurrentSetting { get; set; } public static bool Load() { try { if (File.Exists(AdviserFilePathAndName(FILE_PREFIX, ObjectManager.Me.Name + "." + Usefuls.RealmName))) { CurrentSetting = Load<HunterBeastmasterSettings>(AdviserFilePathAndName(FILE_PREFIX, ObjectManager.Me.Name + "." + Usefuls.RealmName)); CurrentSetting.FetchFromLua(); // LOAD SETTINGS FROM LUA return true; } CurrentSetting = new HunterBeastmasterSettings(); } catch (Exception e) { Logging.WriteError(FILE_PREFIX + " load error: " + e); } return false; } public bool Save() { try { CurrentSetting.PushToLua(); // SETTINGS LOADED, MUST BE TRANSLATED TO LUA return Save(AdviserFilePathAndName(FILE_PREFIX, ObjectManager.Me.Name + "." + Usefuls.RealmName)); } catch (Exception e) { Logging.WriteError(FILE_PREFIX + " save error: " + e); return false; } } void FetchFromLua() { var LoadedInLua = Lua.LuaDoString<bool>("return LoadedInLua"); if (LoadedInLua) { HuntersMark = Lua.LuaDoString<bool>("return HuntersMarkDisabled"); } } void PushToLua() { if (HuntersMark) { Lua.LuaDoString("HuntersMarkDisabled = true"); } else { Lua.LuaDoString("HuntersMarkDisabled = false"); } } } Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/ Share on other sites More sharing options...
camelot10 155 Posted September 20, 2017 Share Posted September 20, 2017 (edited) maybe me, but you dont understand how its works. you load config from file to wrobot, and after that you should push settings to lua. when you save settings, you you to fetch values from lua and save to file. your error, as example: HunterMark default value is true, user set in wow HunterMark as false, before saving settings to file, you push settings to lua > override lua HunterMark to true and save HunterMark=true into xml when you load settings from file, HunterMark become true, but after loading you fetch HunterMark from lua and no matter what saved into xml file, its gonna be overriden by lua fetch. how to fix: fetch before save, push after load Edited September 20, 2017 by camelot10 Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32348 Share on other sites More sharing options...
Ordush 185 Posted September 20, 2017 Author Share Posted September 20, 2017 2 minutes ago, camelot10 said: maybe me, but you dont understand how its works. you load config from file to wrobot, and after that you should push settings to lua. when you save settings, you you to fetch values from lua and save to file. your error, as example: HunterMark default value is true, user set in wow HunterMark as false, before saving settings to file, you push settings to lua > override lua HunterMark to true and save HunterMark=true into xml when you load settings from file, HunterMark become true, but after loading you fetch HunterMark from lua and no matter what saved into xml file, its gonna be overriden by lua fetch. how to fix: fetch before save, push after load Yeah, i thought that was the problem, but i tried swapping them around as you just said, but then nothing happens at all, it neither loads nor saves anything, it just stays "false" no matter what. :/ And you are right, i don't fully understand it, since C# is not my strongest. Happy that you are willing to help, i will try swap them around and see if i was mistaken. :) Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32349 Share on other sites More sharing options...
Ordush 185 Posted September 20, 2017 Author Share Posted September 20, 2017 (edited) @camelot10 I have tried this: Just as you told me to, but if i do it like this. It does not work. HuntersMark just defaults to false here for some reason. It is as if it doesn't save. My example i set HuntersMarkDisabled = true in-game. then i close the bot, and do /reloadui so that my lua is cleared, then i load the bot and run it. now HuntersMarkDisabled = false Even SteadyShot which should not in any way be influenced by the game keeps going to "false". :O [Serializable] public class HunterBeastmasterSettings : Settings { const string FILE_PREFIX = "CustomClass-HunterBeastmaster"; [Setting] [DefaultValue(true)] [Category("Combat Spells - Hunter Abilities")] [DisplayName("Hunter's Mark Disabled")] [Description("Is Hunter's Mark Disabled?")] public bool HuntersMark { get; set; } [Setting] [DefaultValue(true)] [Category("Combat Spells - Hunter Abilities")] [DisplayName("Steady Shot")] [Description("Use Steady Shot")] public bool SteadyShot { get; set; } HunterBeastmasterSettings() { ConfigWinForm(new System.Drawing.Point(400, 400), "HunterBeastmaster " + Translate.Get("Settings")); } public static HunterBeastmasterSettings CurrentSetting { get; set; } public static bool Load() { try { if (File.Exists(AdviserFilePathAndName(FILE_PREFIX, ObjectManager.Me.Name + "." + Usefuls.RealmName))) { CurrentSetting = Load<HunterBeastmasterSettings>(AdviserFilePathAndName(FILE_PREFIX, ObjectManager.Me.Name + "." + Usefuls.RealmName)); CurrentSetting.PushToLua(); // SETTINGS LOADED, MUST BE TRANSLATED TO LUA return true; } CurrentSetting = new HunterBeastmasterSettings(); } catch (Exception e) { Logging.WriteError(FILE_PREFIX + " load error: " + e); } return false; } public bool Save() { try { CurrentSetting.FetchFromLua(); // LOAD SETTINGS FROM LUA return Save(AdviserFilePathAndName(FILE_PREFIX, ObjectManager.Me.Name + "." + Usefuls.RealmName)); } catch (Exception e) { Logging.WriteError(FILE_PREFIX + " save error: " + e); return false; } } void FetchFromLua() { HuntersMark = Lua.LuaDoString<bool>("return HuntersMarkDisabled"); } void PushToLua() { if (HuntersMark) { Lua.LuaDoString("HuntersMarkDisabled = true"); } else { Lua.LuaDoString("HuntersMarkDisabled = false"); } } } Edited September 20, 2017 by Ordush Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32351 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark + "; print('PUSHED LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HunterMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result+ " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result+ " "); } as i see, lua also not your strong side. also programming in general same. step by step tracing from point where no bug to point where bug appear called bug hunting. any programming related entity know how to do that do you ever before develop anything related to programming/coding? Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32356 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 (edited) 10 hours ago, camelot10 said: void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark + "; print('PUSHED LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HunterMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result+ " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result+ " "); } as i see, lua also not your strong side. also programming in general same. step by step tracing from point where no bug to point where bug appear called bug hunting. any programming related entity know how to do that do you ever before develop anything related to programming/coding? I really do appreciate your help mate. But do you HAVE to be so condescending? I am not a programmer no, everything i know i have taught myself over the last 6 months. I can promise you that i am not bad with lua at all! And yes i do know what "bug hunting" is, or as it is really called debugging... I already have debugged my lua code. Nothing is wrong with my lua code at all. Everything works perfect from the lua perspective. The only place where i am having issues is using the c#. If i was pro programmer, i would not go to these forums to ask for help. Anyway when i load the bot it gives me: PUSHED TO LUA VALUE HuntersMarkDisabled= When i open fight class settings i get: PUSHED TO LUA VALUE HuntersMarkDisabled= When i close fight class settings i get: FETCH FROM LUA VALUE HuntersMarkDisabled= So it seems as if it does not read the value from neither settings nor in-game. Although i know that earlier it has been reading the settings. Since it did change the value in settings, but it just didn't save them. I allrdy earlier figured that you can't do HuntersMarkDisabled = " + HuntersMark + "; Since it makes HuntersMarkDisabled nil. That is why i did: if (HuntersMark) { Lua.LuaDoString("HuntersMarkDisabled = true"); } else { Lua.LuaDoString("HuntersMarkDisabled = false"); } Edited September 21, 2017 by Ordush Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32381 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 whats in wrobot log? Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32384 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 (edited) 16:48:53 - Wrobot push to LUA HunterMark=False return result=False isCorret=True 16:48:58 - Wrobot fetch from LUA HunterMark=False Edited September 21, 2017 by Ordush Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32385 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 you miss something. review code and check if all code where its should be. report what wrobot logging and wow chat info messages Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32386 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 10 minutes ago, camelot10 said: you miss something. review code and check if all code where its should be. report what wrobot logging and wow chat info messages My lua code is not missing anything, it works just fine without this code. I allready know what the problem is: It's this line: HuntersMarkDisabled = " + HuntersMark + "; It doens't work like that, it will just make HuntersMarkDisabled nil, instead of HuntersMark value. if (HuntersMark) { Lua.LuaDoString("HuntersMarkDisabled = true"); } else { Lua.LuaDoString("HuntersMarkDisabled = false"); } This however, does work. Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32387 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 (edited) so you see difference and didnt understand what happened? there is no such definition in wow lua as False only false thats why is set that var to nil void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark.ToString().ToLower() + "; print('PUSHED LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HunterMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result + " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result + " "); } just make sure for bool in C# before pushing to lua to convert to string and make lowercase ToString().ToLower() Edited September 21, 2017 by camelot10 Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32389 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 1 minute ago, camelot10 said: so you see difference and didnt understand what happened? there is no such definition in wow lua as False only false thats why is set that var to nil void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark.ToString().ToLower() + "; print('PUSHED LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HunterMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result + " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result + " "); } just make sure for bool in C# before pushing to lua to convert to string and make lowercase ToString().ToLower() I see. No hoenestly, i did not notice the Uppercase False. I will try doing lower case. :) Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32390 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 38 minutes ago, camelot10 said: so you see difference and didnt understand what happened? there is no such definition in wow lua as False only false thats why is set that var to nil void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark.ToString().ToLower() + "; print('PUSHED LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HunterMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result + " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HunterMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result + " "); } just make sure for bool in C# before pushing to lua to convert to string and make lowercase ToString().ToLower() It still gives the same result. even with ToLower (I copy pasted your code) Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32392 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 (edited) whats in log? wow & wrobot install bugsack addon for wow and check what error catched Edited September 21, 2017 by camelot10 Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32393 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 9 minutes ago, camelot10 said: whats in log? wow & wrobot install bugsack addon for wow and check what error catched wow is not giving any errors. It's still just writing: PUSHED TO LUA VALUE HuntersMarkDisabled= and WRobot writes the same as before:18:28:49 - Wrobot push to LUA HunterMark=False return result=False isCorret=True 18:28:51 - Wrobot fetch from LUA HunterMark=False Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32394 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 (edited) If i do /run print(HuntersMarkDisabled) it shows false now, instead of nil. So it seems that it worked. But it still doesn't save the settings. Edit: If i stop and start the bot, it also turns HuntersMarkDisabled into false even if it was true before i started the bot. So it just defaults to false for some reason. Just as it did before. Edited September 21, 2017 by Ordush Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32395 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 (edited) void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark.ToString().ToLower() + "; print('PUSHED LUA VALUE HuntersMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result + " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HuntersMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result + " "); } ok. here is main proble. you asked a quick example. i write you quick example in notepad. no spellchecking/code reviewing. there is a simple typo, what lead to 2 hour of my brainf#cking. and main problem here that you refuse to think and analyze code, only copy-pasting and waiting solution Edited September 21, 2017 by camelot10 Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32396 Share on other sites More sharing options...
Ordush 185 Posted September 21, 2017 Author Share Posted September 21, 2017 9 minutes ago, camelot10 said: void PushToLua() { var result = Lua.LuaDoString<bool>("HuntersMarkDisabled = " + HuntersMark.ToString().ToLower() + "; print('PUSHED LUA VALUE HuntersMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled;"); Logging.Write("Wrobot push to LUA HunterMark=" + HuntersMark + " return result=" + result + " isCorret=" + (HuntersMark == result) + " "); } void FetchFromLua() { var result = Lua.LuaDoString<bool>("print('FETCH FROM LUA VALUE HuntersMarkDisabled=', HuntersMarkDisabled); return HuntersMarkDisabled"); HuntersMark = result; Logging.Write("Wrobot fetch from LUA HunterMark=" + result + " "); } ok. here is main proble. you asked a quick example. i write you quick example in notepad. no spellchecking/code reviewing. there is a simple typo, what lead to 2 hour of my brainf#cking. and main problem here that you refuse to think and analyze code, only copy-pasting and waiting solution There it is again, the condescending.. Why do you keep doing that? I did not copy paste your code, i allready did change the typo in HunterMarkDisabled i also changed the typo in LUA HunterMark... This did not change anything at all. Still the same in-game and in the log. Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32397 Share on other sites More sharing options...
camelot10 155 Posted September 21, 2017 Share Posted September 21, 2017 give me full code here and run it once again and show me log from wow and wrobot Link to comment https://wrobot.eu/forums/topic/7144-saving-in-lua-in-c/#findComment-32398 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