Help with simple addon - enforcing cvars
So i'm looking for a little help with this personal addon i made to enforce a list of cvars, keybinds and other fixes across all characters.
I am not really a coder, so i don't know much about this other than the most basic principles. This mod should run these cvars when i log on a character as is. Problem is that both config-cache.wtf and AdvancedInterfaceOptions has some of these cvars, and i want this to override any other settings set by either the game or other addons. I'm not sure if this already does that by running on every character login entering the world, either way i want to be sure this works as intended. Now i' thinking maybe i need either to name the mod so it is loaded after? before? all other mods, like calling it !MyCvars. Or the code needs to be executed at a point later than what the game config and AdvancedInterfaceOptions does. Anyone maybe able to help me with this? X33STORM.lua Code:
local function eventHandler(self,event,...) |
Alter your .toc and add an optional dependency for AIO.
Code:
# OptionalDeps: AdvancedInterfaceOptions |
Quote:
|
Does it matter the order the addon loads because the function isn't being called until PLAYER_ENTERING_WORLD, unless of course addons receive events in the order they loaded which I have no idea about.
Doesn't AIO only set CVars when you action them in its UI?. That said, this function will fire every time you see a loading screen. If you want a single event when the game loads use PLAYER_LOGIN. |
Quote:
If you want to ensure your frame goes first, you can do the same thing but with the first return of GetFramesRegisteredForEvent("event"), which returns an ordered list of frames, the first one being the first one that was registered. “Lua” Code:
|
Now I know, thank you.
|
Quote:
It's meant to keep a global list of settings so if you change something it stays changed across your whole account. Originally it was intended to prevent other addons from modifying cvars that you set manually through AIO, but I modified it to allow the changes but track which addon last touched the cvar so you can see it in the cvar browser. Loading after AIO does might not always work. It reapplies the settings only after both VARIABLES_LOADED and ADDON_LOADED fires for it. If VARIABLES_LOADED fires after ADDON_LOADED does, setting it as an optional dependency won't be enough, and you'll have to wait for VARIABLES_LOADED to fire before overriding the settings. Unfortunately, tracking settings that addons apply before AIO loads is considerably more complicated than the current setup, and would probably actually require loading a separate module before any other addons load, so it hasn't been done yet. Also, this seems like a lot of personalized settings for an addon to change if this is something that's going to be distributed to other people, and the exact reason AIO tracks which addon modified which cvar, because these are things that persist after your addon is disabled and people get confused about why their settings are all different from what they had set when they turn it off and it doesn't go back to the way it was before. |
Quote:
|
Quote:
|
Depends on whether they want to have AIO installed or not, to be fair.
|
Quote:
It does not matter whether he has it installed or not. |
It sounded to me like they wanted to ensure it would override settings set by any addons. Though I guess my point is moot because OP is using AIO, but other people finding this thread from Google might not be. :p
|
Quote:
Since any addon can change any cvar at any point while the game is running, to actually prevent a cvar from being changed requires actively monitoring for any future cvar changes and reversing them (which could cause an infinite loop if someone else has the same idea that their settings are actually more important than your settings and tries to reinforce them too), and would prevent you from doing things like toggling nameplate visibility on the fly (although I believe those are combat-protected so you'd have to take that into account as well). To anyone finding this thread later: Don't automatically change cvars in your addon unless you have a very good reason to do so, and make it clear to your users that this is something you're doing. These settings are generally permanent, and many of them can't be set through the interface, so even if your addon is disabled its changes will remain in-place and not easily reverted. |
Quote:
If so, I imagine a (partial) solution to this could be for an addon author to revert affected CVars back to defaults at logout. Partial, because it wouldn't work if the user incorrectly exited the game before removing the addon, without explicitly logging out properly, but for the average user, this would effectively ensure that any changes to CVars from the addon wouldn't remain after uninstalling. |
Quote:
|
Quote:
|
Wouldn't really help anyway, even if it worked, because the hypothetical situation is that the user removed that addon following a crash.
Remove the addon, and you'd also be removing the code which would be checking for said flag anyway. So there isn't really a point, heh, and if you aren't removing the addon it'll just resume proper functionality the next time you start the game. btw, probably a stupid question: X-ing out of the game improperly exits the game and doesn't save saved variables, right? I can imagine a lot of less knowledgeable players doing just that in the same way that people remove usb devices without doing the whole "remove safely" thing first. |
Quote:
|
EDIT: What I say bellow is WRONG. See Ammako's reply immediately bellow for details.
Quote:
1. Check the saved flag, say "cleanExit", and do the necessary fixups if it's false or nil; 2. Set cleanExit to false upon PLAYER_LOGIN; 3. Change the CVars and whatnot; 4. Set cleanExit to true on PLAYER_LOGOUT. The absence of write on game crash implies NO evidence of a clean exit. |
Quote:
You could have that variable set to true at login, change it to false at step 2. Game crashes, the change isn't saved, and it will still be set to true. Saved Variables don't get written to until you reload/logout/exit the game, no matter how many changes you make. |
All times are GMT -6. The time now is 10:36 PM. |
vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI