WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   General Authoring Discussion (https://www.wowinterface.com/forums/forumdisplay.php?f=20)
-   -   need help to learn and compleet my simple addon (https://www.wowinterface.com/forums/showthread.php?t=33286)

b3vad 06-20-10 05:51 AM

need help to learn and compleet my simple addon
 
1 Attachment(s)
Hi I'm new in addon and lua .
I started from wowwiki and did "hello world" tutorial then there was nothing to teach me how to use events - checkbox - and ...
i managed to design my addon's interface with addon studio but my lua file is still empty .
i know few of programing and scripting and just need some push to start my car . just few questions !

1- how i can make my addon to react to events ?
2- is there a list of events?
3- how i can use checkboxes ?
4- witch one of things i want in my(this) addon are possible?
(addon is attached)

please don't complete the addon with a twisted solution ! i need to learn this basics . ty

Soulofsin_007 06-20-10 06:04 AM

1.
Code:

Events = CreateFrame("Frame")
Events:SetScript("OnEvent", function(self, event, ...)
    if event == "PLAYER_ENTERING_WORLD" then
        print("Hello"...UnitName("player"))
    end
end)
Events:RegisterEvent("PLAYER_ENTERING_WORLD")

2. Here

3.
Code:

Parent = CreateFrame("Frame", "ParentingFrames", WorldFrame)
Parent:SetWidth(300)
Parent:SetHeight(300)
Parent:SetPoint("CENTER")
Parent:SetBackdrop(StaticPopup1:GetBackdrop())
Parent:EnableMouse(true)
Parent:SetMovable(true)
Parent:Show()
Parent:SetScript("OnMouseDown", function()
  Parent:StartMoving()
end)
Parent:SetScript("OnMouseUp", function()
  Parent:StopMovingOrSizing()
end)


Parent.text = Parent:CreateFontString(nil, "BACKGROUND", "GameFontNormal")
Parent.text:SetPoint("CENTER",25,0)


CheckButton = CreateFrame("CheckButton", "Button2", Parent, "OptionsCheckButtonTemplate")
CheckButton:SetWidth("25")
CheckButton:SetHeight("25")
CheckButton:SetPoint("CENTER")
CheckButton:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
CheckButton:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
CheckButton:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight", "ADD")
CheckButton:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
CheckButton:Show()

local checkbutton = 0

local function onUpdate(self,elapsed)
    local isChecked = CheckButton:GetChecked()

   
    checkbutton = checkbutton + elapsed
    if checkbutton >= 0.1 then -- how often it checks to see what is checked.
      if(isChecked == 1) then
        Parent.text:SetText("Checked")
        Parent.text:SetPoint("CENTER",35,0)
      else
        Parent.text:SetText("Unchecked")
        Parent.text:SetPoint("CENTER",45,0)
      end
        checkbutton = 0
    end
end

local f = CreateFrame("frame")
f:SetScript("OnUpdate", onUpdate)

4. I didn't see anything were it says what you want your addon to do. Both the lua/xml files are empty
when I open them.

Also the timer part in the end is pry alittle messy, I bet there is a better way to do it. Thats just how I had it saved.

nightcracker 06-20-10 09:49 AM

Am I the only one that has grown a hate against that addon studio because it learns beginners the completely wrong things?

Soulofsin_007 06-20-10 10:00 AM

I couldn't even get the thing to work right. =/

Slakah 06-20-10 01:46 PM

Quote:

Originally Posted by nightcracker (Post 192907)
Am I the only one that has grown a hate against that addon studio because it learns beginners the completely wrong things?

Is this meant to be ironic?

b3vad 06-20-10 03:30 PM

xml
 
ty for answer
what I'm trying to do is making an addon to auto accept release/resurrect/ress/enter arena/leave arena and party messages (any of them that are possible) with a simple interface and some chechboxes .

what i learned so far :
i need register events after function
and few about creating frames - buttons and ... in lua

question 1 : do i have to create frame on lua even when i have some on xml ?
my .xml codes
Code:

<Ui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.blizzard.com/wow/ui/">
        <Script file="Frame.lua" />
        <Frame name="F_K1A" parent="UIParent" toplevel="true" movable="true" enableMouse="true">
                <Size>
                        <AbsDimension x="100" y="22" />
                </Size>
                <Anchors>
                        <Anchor point="TOPLEFT">
                                <Offset>
                                        <AbsDimension x="399" y="-49" />
                                </Offset>
                        </Anchor>
                </Anchors>
                <Scripts>
                        <OnLoad />
                        <OnMouseDown>self:StartMoving();</OnMouseDown>
                        <OnMouseUp>self:StopMovingOrSizing();</OnMouseUp>
                </Scripts>
                <Layers>
                        <Layer>
                                <FontString name="T_Party" inherits="GameFontNormalSmall" text="Party">
                                        <Size x="39" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="510" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                                <FontString name="T_LeaveArena" inherits="GameFontNormalSmall" text="LeaveArena">
                                        <Size x="75" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="417" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                                <FontString name="FontString1" inherits="GameFontNormalSmall" text="K1Acceptor">
                                        <Size x="100" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="0" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                                <FontString name="T_Recurrect" inherits="GameFontNormalSmall" text="Recurrect">
                                        <Size x="63" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="190" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                                <FontString name="T_Release" inherits="GameFontNormalSmall" text="Release">
                                        <Size x="53" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="119" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                                <FontString name="T_Ress" inherits="GameFontNormalSmall" text="Ress">
                                        <Size x="35" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="274" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                                <FontString name="T_EnterArena" inherits="GameFontNormalSmall" text="EnterArena">
                                        <Size x="70" y="20" />
                                        <Anchors>
                                                <Anchor point="TOPLEFT">
                                                        <Offset x="328" y="0" />
                                                </Anchor>
                                        </Anchors>
                                </FontString>
                        </Layer>
                </Layers>
                <Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background" edgeFile="Interface\DialogFrame\UI-DialogBox-Border" tile="true">
                        <BackgroundInsets>
                                <AbsInset left="0" right="0" top="0" bottom="0" />
                        </BackgroundInsets>
                        <TileSize>
                                <AbsValue val="32" />
                        </TileSize>
                        <EdgeSize>
                                <AbsValue val="1" />
                        </EdgeSize>
                </Backdrop>
                <Frames>
                        <CheckButton name="C_Party" inherits="UICheckButtonTemplate">
                                <Size x="20" y="20" />
                                <Anchors>
                                        <Anchor point="TOPLEFT">
                                                <Offset x="497" y="-1" />
                                        </Anchor>
                                </Anchors>
                        </CheckButton>
                        <CheckButton name="C_LeaveArena" inherits="UICheckButtonTemplate" checked="true">
                                <Size x="20" y="20" />
                                <Anchors>
                                        <Anchor point="TOPLEFT">
                                                <Offset x="404" y="-1" />
                                        </Anchor>
                                </Anchors>
                        </CheckButton>
                        <CheckButton name="C_Recurrect" inherits="UICheckButtonTemplate">
                                <Size x="20" y="20" />
                                <Anchors>
                                        <Anchor point="TOPLEFT">
                                                <Offset x="178" y="-1" />
                                        </Anchor>
                                </Anchors>
                        </CheckButton>
                        <CheckButton name="C_Release" inherits="UICheckButtonTemplate" checked="true">
                                <Size x="20" y="20" />
                                <Anchors>
                                        <Anchor point="TOPLEFT">
                                                <Offset x="106" y="-1" />
                                        </Anchor>
                                </Anchors>
                                </CheckButton>
                        <CheckButton name="CheckButton1" inherits="UICheckButtonTemplate" checked="true">
                                <Size x="20" y="20" />
                                <Anchors>
                                        <Anchor point="TOPLEFT">
                                                <Offset x="260" y="-1" />
                                        </Anchor>
                                </Anchors>
                        </CheckButton>
                        <CheckButton name="C_EnterArena" inherits="UICheckButtonTemplate">
                                <Size x="20" y="20" />
                                <Anchors>
                                        <Anchor point="TOPLEFT">
                                                <Offset x="314" y="-1" />
                                        </Anchor>
                                </Anchors>
                        </CheckButton>
                </Frames>
        </Frame>
</Ui>

Question 2 :witch one is better creating frames in lua or xml ?
Question 3 : when i register an event it will react when that event happens and i don't need any other code to call it or something like that . right?
Question 4 :am i asking too much questions?

i will try to fix my addon tomorrow and will come back with more questions
again , ty for support

and about addon studio i think its very good for making xml interfaces but i like coding lua in notepad++ (well i still need to learn lua first then i can talk about it)

Soulofsin_007 06-20-10 03:57 PM

1. You do not need to create the frame through lua if you do it in XML. Just a different way to do it. I prefer lua.

2. Personal preference. Don't know if one is more efficient

3. Yes it will automatically happen. You just have to have the code that does someone then the game calls it.

4. I don't think so.

Torhal 06-20-10 09:31 PM

Quote:

Originally Posted by Soulofsin_007 (Post 192900)
1.
Code:

Events = CreateFrame("Frame")
Events:SetScript("OnEvent", function(self, event, ...)
    if event == "PLAYER_ENTERING_WORLD" then
        print("Hello"...UnitName("player"))
    end
end)
Events:RegisterEvent("PLAYER_ENTERING_WORLD")


My head just exploded because you created those frames in the global namespace instead of locally.

mankeluvsit 06-20-10 09:41 PM

Quote:

Originally Posted by Torhal (Post 192964)
My head just exploded because you created those frames in the global namespace instead of locally.

*boom*

tooshort [;'

Soulofsin_007 06-20-10 09:51 PM

Quote:

Originally Posted by Torhal (Post 192964)
My head just exploded because you created those frames in the global namespace instead of locally.

I didn't even think about that.

Edit:Mhmm brains?

b3vad 06-21-10 01:52 AM

dosent work on my xml
 
i cant make it work on my xml and i don't know why !
i added lines
Code:

  <OnLoad> self:RegisterEvent("PLAYER_ENTERING_WORLD"); </OnLoad>
  <OnEvent> print("Hello World! Hello " .. event); </OnEvent>

in scripts tag (taken from wowwiki sample)
Code:

<Ui>
<Frame name="FooAddonFrame">
 <Scripts>
  <OnLoad> self:RegisterEvent("PLAYER_ENTERING_WORLD"); </OnLoad>
  <OnEvent> print("Hello World! Hello " .. event); </OnEvent>
  </Scripts>
</Frame>
</Ui>

is it because that my xml is not foo (whatever it is)?
or maybe <Script file="Frame.lua" /> tag?

b3vad 06-22-10 11:44 AM

my lua error
 
this is my lua eror
Note: F_K1A is name of my frame
Code:

Message: [string "F_K1A:OnLoad"]:1: attempt to call global 'F_K1A_OnLoad' (a nil value)
Time: 06/22/10 22:08:25
Count: 1
Stack: [string "*:OnLoad"]:1: in function <[string "*:OnLoad"]:1>

Locals: self = F_K1A {
 0 = <userdata>
}
(*temporary) = nil
(*temporary) = "attempt to call global 'F_K1A_OnLoad' (a nil value)"

after adding
Code:

function F_K1A_onLoad()
this.RegisterEvent("PLAYER_TARGET_CHANGED");
end
function F_K1A_onEvent()
if (event == "PLAYER_TARGET_CHANGED") then
print("Hello " .. UnitName("target") .. "!");
end

end

in my lua file and calling them from xml with
Code:

                        <OnLoad>F_K1A_OnLoad();</OnLoad>
                        <OnEvent>F_K1A_OnEvent();</OnEvent>

this little problem really eats my nerves

Xrystal 06-22-10 11:50 AM

are you including the lua file in either the xml file or the toc file before the xml file ?

Seerah 06-22-10 12:01 PM

Also, are these direct copy-pastes?

F_K1A_OnLoad =/= F_K1A_onLoad

b3vad 06-22-10 12:09 PM

Quote:

Originally Posted by Xrystal (Post 193177)
are you including the lua file in either the xml file or the toc file before the xml file ?

yes i did
Quote:

Originally Posted by Seerah (Post 193179)
Also, are these direct copy-pastes?

F_K1A_OnLoad =/= F_K1A_onLoad

that's right my typo mistake (renamed both function and fund another mistake in
Code:

this.RegisterEvent("PLAYER_TARGET_CHANGED");
the dot after this must be :
fixed thanks i will come back with more question and problems :D

for start whats the meaning of .. and "!" in
print("Hello " .. UnitName("target") .. "!");
does .. means that the next word is a code or function not a string?

Seerah 06-22-10 12:15 PM

Two periods (..) mean to concatenate (connect) two things together for the string. So, if UnitName("target") = "b3vad" (string), then "Hello"..UnitName("target") will equal "Hello b3vad". The ! is just an !, since it's in quotes (a string), connected to the rest of the string to print out.

Code:

print("Hello " .. UnitName("target") .. "!")
>> "Hello b3vad!"


b3vad 06-22-10 01:57 PM

CORPSE_IN_RANGE auto Resurrect ?
 
1 Attachment(s)
ty for gr8 answers ^_^
now I'm half way and hard part :D
is Resurrect when CORPSE_IN_RANGE protected?
cause i cant find any event to use when time is over and Resurrect is available and there is nothing like AcceptResurrect(); for Resurrect from crops (i think)
any idea?
and same about entering and leaving arena
--------------------
beta version is ready and attached

b3vad 06-24-10 10:25 AM

save checkboxes status
 
whats your suggestion for saving checkboxes status ?
I'm looking for simplest way possible :D
-------------
and any info about things in my perv post?

b3vad 06-28-10 02:19 AM

soper long (not answered Thread)
 
well i think repeating my question will get some attention again

1- what do you suggest for saving checkboxes status (i think of making some viable and saving them but maybe someone wanna say some tips about it)
2- (if its possible) anyone knows how to automatic accept arena enter / leave massages ?
3- (if its possible) how to Resurrect from crops ?

Sythalin 06-28-10 06:37 PM

Quote:

Originally Posted by b3vad (Post 194807)
well i think repeating my question will get some attention again

1- what do you suggest for saving checkboxes status (i think of making some viable and saving them but maybe someone wanna say some tips about it)
2- (if its possible) anyone knows how to automatic accept arena enter / leave massages ?
3- (if its possible) how to Resurrect from crops ?

1) The only way to save checkbox status is by saved variables. Here's and example of the check to use for it:

lua Code:
  1. if var then -- is var true?
  2.         checkButton:SetChecked() -- check the button
  3.     else
  4.         checkButton:SetChecked(false) -- var is false, uncheck button
  5.     end

2) Try this, since a lot of the battleground API is shared with arena API:
lua Code:
  1. AcceptBattlefieldPort(1,1)

If that doesn't work, let me know and I'll see what I can dig up.

3) I'm not sure what you're asking here. Are you looking to automatically accept player rezzes or corpse release?

As far as .lua vs .xml, I find lua to be easier to manage and work with. I used to use xml, but the problem came in when I realized that a simple mistake would not let the addon load at all, which is hardly useful when looking to squash bugs. If using lua, the addon will always load and errors will pop telling you where your errors are.

b3vad 07-07-10 02:51 PM

variables ?
 
I'm back with more questions :D (and tnx for answers ChaosInc)
-------------
1- to save my settings i need some variables but i cant manage to make variables that addon save and load with
Code:

## SavedVariablesPerCharacter: K1OB_var
and
Code:

K1OB_var = {
["K1OB_FixMe_V"]= false;
}

(is it something like array?)
and i cant find any data in wowwwiki about variables and array and best way to change save and load them
any tip and or guide can be a big help for me

2- how bout saving/loading a list ? (I'm trying to add a list that player can add items to delete when loot) any idea how i can do it very simple?

Xrystal 07-07-10 04:33 PM

You're doing okay there but perhaps it is how you are using it in your addon.


The TOC is correct.

Assuming the code segment is in your code at the top of the lua file then that is correct to, oh wait not quite. The question is how are you accessing it or updating it ?

EG.
K1OB_var = {
["K1OB_FixMe_V"]= false,
... Other default values or settings
}

K10B_var["K10B_FixMe_V"] = true;

if ( K10B_var["K10B_FixMe_V"] ) then
--Lets say you want to add something to a list here, lets use the current list
--or if there isn't one yet create one.
K10B_var["K10B_FixMe_L"] = K10B_var["K10B_FixMe_L"] or {}
--Now we can use it to if we wish, like insert a value to the end of the list
tinsert(K10B_var["K10B_FixMe_L"],"somerandomvalue")
etc
end

--If you want to give the user an option to reset the data at any time then
--do something like this. You can then add in your chosen default values.
function ResetData()
K10B_var = {}
end

Your saved variables data will be restored when the ADDON_LOADED event is triggered for your addon so inside your functions used during game play your data is available by default. Any changes made during play time will be written back during the PLAYER_LOGOUT event. All you need to do is set the values as and when you need. Setting the default values outside of functions will mean you will always have a functional set of data in the case of this being a first use session or the Saved Variable file has been deleted.

b3vad 07-13-10 05:03 AM

still cant get the whole var loading thing
 
1 Attachment(s)
i still don't get it . if i have
Code:

K1OB_var = {
["K1OB_FixMe_V"]= false;
}

as my first lines of my .lua does it makes my var set to "false" every time i load my addon? or i have some other mistake in loading and saving this var because it don't work .
addon is attached
-------------------
and ty Xrystal for answers its really big help

Xrystal 07-13-10 05:30 AM

If you never change the value then yes it will always be false. If you change it before the user shuts down it should update the WTF file for that addon.

Edit: Looked at the code ..

Change the toc so that the lua file is above the xml file. The xml file is trying to access functions that don't exist yet.

Apart from that I can't see anything wrong.

b3vad 07-13-10 06:26 AM

the problem
 
i think the problem is my 3 first line of .lua
Code:

K1OB_var = {
["K1OB_FixMe_V"]= false;
}


function K1OB_Register()
K1OB_SetBoxes();
this:RegisterEvent("MERCHANT_SHOW");
this:RegisterEvent("PLAYER_MONEY");
this:RegisterEvent("RESURRECT_REQUEST");
this:RegisterEvent("PLAYER_DEAD");
this:RegisterEvent("PARTY_INVITE_REQUEST");
this:RegisterEvent("DUEL_REQUESTED");
this:RegisterEvent("GUILD_INVITE_REQUEST");
this:RegisterEvent("ARENA_TEAM_INVITE_REQUEST");
this:RegisterEvent("PETITION_SHOW");

K1OB_Money();
end

function K1OB_SetBoxes()
if K1OB_var["K1OB_FixMe_V"] then
        K1OB_FixMe:SetChecked();
else
        K1OB_FixMe:SetChecked(false);
end
end



function K1OB_EventHandeler()
if (event == "MERCHANT_SHOW") then
K1OB_Merchant();
end
if (event == "PLAYER_MONEY") then
K1OB_Money();
end
if (event == "RESURRECT_REQUEST") then
K1OB_Ress();
end
if (event == "PLAYER_DEAD") then
K1OB_Release();
end
if (event == "PARTY_INVITE_REQUEST") then
K1OB_Party();
end
if (event == "DUEL_REQUESTED") then
K1OB_Duel();
end
if (event == "GUILD_INVITE_REQUEST") then
K1OB_Guild();
end
if (event == "ARENA_TEAM_INVITE_REQUEST") then
K1OB_Arena();
end
if (event == "PETITION_SHOW") then
K1OB_ArenaCharter();
end
if (event == "PETITION_SHOW") then
K1OB_Petition();
end
end

--CheckBoxes
function K1OB_Merchant()
isChecked = K1OB_FixMe:GetChecked();
canRepair = CanMerchantRepair();
AllChecked = K1OB_O1:GetChecked();
if (canRepair == 1)then
if (isChecked == 1 or AllChecked == 1) then
RepairAllItems();
end
end
end

function K1OB_Petition()
petitionType = GetPetitionInfo()
if (petitionType == guild) then
isChecked = K1OB_GuildCharter_C:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
SignPetition();
end
else
isChecked = K1OB_ArenaCharter_C:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
SignPetition();
end
end
end

function K1OB_Ress()
isChecked = K1OB_O4:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
AcceptResurrect();
end
end

function K1OB_Release()
isChecked = K1OB_Release_C:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
RepopMe()
end
end

function K1OB_Party()
isChecked = K1OB_O2:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
AcceptGroup();
end
end

function K1OB_Duel()
isChecked = K1OB_O3:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
AcceptDuel();
end
end

function K1OB_Guild()
isChecked = K1OB_GuildInvite_C:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
AcceptGuild();
end
end

function K1OB_Arena()
isChecked = K1OB_ArenaTeam_C:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
AcceptArenaTeam();
end
end

function K1OB_Summon()
isChecked = K1OB_Summon_C:GetChecked();
AllChecked = K1OB_O1:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
ConfirmSummon();
end
end

--Other
function K1OB_Money()
money = GetMoney();
K1OB_Gold:SetText(GetCoinTextureString(money," "));
end

function K1OB_Main_Show()
if K1OB_OptionFrame:IsShown() then
K1OB_OptionFrame:Hide();
else
K1OB_OptionFrame:Show();
end
end

function K1OB_DeleteItem()
        hasItem = CursorHasItem();
        if (hasItem) then
                DEFAULT_CHAT_FRAME:AddMessage("Deleting Item");
                DeleteCursorItem();
        end
end

function K1OB_FixMe_OnClick()
isChecked = K1OB_FixMe:GetChecked();
if (isChecked == 1) then
K1OB_var["K1OB_FixMe_V"] = true;
                DEFAULT_CHAT_FRAME:AddMessage("True");
else
K1OB_var["K1OB_FixMe_V"] = false;
                DEFAULT_CHAT_FRAME:AddMessage("False");
end
end

yellow parts are codes for create/use/save my variable but it seems every time variable loads create part set it to "false"
i will try to move the create part somewhere else to see if it makes any different
Note : i checked my var is saved = True on disk so problem is after load
----------------
i wonder how to create empty var ?

Xrystal 07-13-10 12:46 PM

Hmm, change the ';' in that first block of code to ','. It may be stopping it from setting the table properly but from the sounds of it maybe not.


Now for some true programming testing.

1. Delete the Saved Variables wtf file for that addon.
2. Log in and note what the settings are set to.
3. Change some of the values you want changing and note them.
4. Log Out and look at the Saved Variables file and note the values ( copy the file possibly - which I do sometimes )
5. Log In and note what the settings are set to.
------- At this point when you log in they should reflect what the wtf file is
------- storing. If not you are not using the values in the right place
6. Change some more values ( different ones ) and note them.
7. Log Out and look at the Saved Variables file and note the values ( copy again if you want so you can compare the files later )
8. You can then repeat steps 5 to 7 with different settings. If you have the code set up right you should see the changes happening on log and the settings stored on log out.


From the sounds of it though the wtf file is being set but the true value is not being set on the check box. That could be due to this line:
K1OB_FixMe:SetChecked();
Try changing that to
K1OB_FixMe:SetChecked(true);
And see if that resolves your problem. A nil value is generally counted as false so possibly could be ignoring your setting.

b3vad 07-14-10 08:12 AM

still not working
 
i tested every line of code every thing works perfect accept
Code:

K1OB_var = {
["K1OB_FixMe_V"]= {};
}

if i don't use this code I'll get lua error . and when i use it . it sets my var to its value each time addon is loaded .
i wonder how do you save your addon's settings? can you give me a very simple example code ?

Xrystal 07-14-10 09:50 AM

Okay, found a simple example of mine.

In TOC I have nUI_ABGDData located in SavedVariables line
Code:

## SavedVariables: nUI_ABGDData
As a new standard since they implemented it I have the following line at the top of all my addon's LUA files just in case I need global access to shared data. This allows me to split the addon into multiple files which can then be used in multiple addons but still be unique to each addon data wise. For small addons that only use 1 LUA file this shouldn't need to be here but it's a nice easy way to store the addon's name in a variable :D
Code:

local addonName,addonData = ...
In LUA I have the following near the top of the file. It is similar to your line except I have split the table setup onto 2 lines. This would be the same as writing nUI_ABGDData = { GridDisplay = "auto", } or nUI_ABGDData = { ["GridDisplay"] = "auto", } etc
Code:

--[[ Initialise Saved Variable Table with Default Values ]]--
nUI_ABGDData = {};
nUI_ABGDData.GridDisplay = "auto";

I then have the following set of functions ( which I have changed to only reflect the parts of the code you would need - naming apart )
Code:

--[[ Make changes based on SavedVariables settings ]]--
local function UseSavedVariables(savedVarValue)
    if ( savedVarValue == "on" ) then
      -- Other settings and actions here
      nUI_ABGDData.GridDisplay = "on"
    elseif ( savedVarValue == "off" ) then
      -- Other settings and actions here
      nUI_ABGDData.GridDisplay = "off"
    elseif ( savedVarValue == "auto" ) then
      -- Other settings and actions here
      nUI_ABGDData.GridDisplay = "auto"
    end                       
  end
end

And these are the functions I pretty much use near the end of my LUA file that are adjusted to suit the individual addon's requirements but is pretty much the basis of all my addons in some form or another.
Code:


--[[ Check the slash commands ]]--
local function SlashCommands(msg)

  -- store both an original version of the message string
  -- as well as a lower case version for testing purposes
  local origMsg = msg
  local lowerMsg = string.lower(msg)

  -- convert to lower case and break up arguments
  local slashArgs = {};
  for word in string.gmatch(lowerMsg,"[^%s]+") do
    table.insert(slashArgs,word)
  end

  -- Set the grid display based on arguments
  if ( slashArgs[1] ) then
    UseSavedVariables(slashArgs[1]);
  else
    -- Maybe the users need to know what options are available
  end

end

-- Blizzard has finished loading their variables so we can override any changes they may have done to our settings
local function LoadVariables(self,event,...)
  -- Set the grid display according to saved variables
  UseSavedVariables(nUI_ABGDData.GridDisplay);
  -- No need to come here again
  self:UnregisterEvent(event);
end

--[[ Our addon variables are loaded so we can do some stuff ]]--
local function AddonLoaded(self,event,...)
  -- If not our addon then go away
  if ( arg1 ~= addonName ) then return end
  -- Set Up the Slash Command Handler
  SLASH_MyAddonCmd1 = '/myaddon';
  SlashCmdList['MyAddonCmd'] = SlashCommands;

  -- Don't need to come back here
  self:UnregisterEvent(event)
end

--[[ Handle the OnEvent for the event frame ]]--
local function OnEvent(self,event,...)       
  if ( event == "VARIABLES_LOADED" ) then
    LoadVariables(self,event,...)
  elseif ( event == "ADDON_LOADED" ) then
    AddonLoaded(self,event,...)
  end
end

--[[ Create the Event Frame and Assign its events to watch ]]--
local EventFrame = CreateFrame("Frame","myUniqueEventFrameName",UIParent);
EventFrame:RegisterEvent("VARIABLES_LOADED");
EventFrame:RegisterEvent("ADDON_LOADED");
EventFrame:SetScript("OnEvent",OnEvent);

Hopefully that is enough for you to get your head around things.

b3vad 07-21-10 03:01 PM

thatnk you for great answer
 
well i finally managed to solve the problem with making several variables and saving them but i needed to learn the standard way too will use it next time ty.

lets not waste a post and ask another question :

i registered
Code:

this:RegisterEvent("TRADE_ACCEPT_UPDATE");
then my event handler
Code:

if (event == "TRADE_ACCEPT_UPDATE") then
K1OB_Trade();
end

and finally my function
Code:

function K1OB_Trade()
isChecked = K1OB_Trade_C:GetChecked();
AllChecked = K1OB_All:GetChecked();
if (isChecked == 1 or AllChecked == 1) then
AcceptTrade();
end
end

just like any other option i added in my addon but it seems have args and i don't know where to put them do you know where? ty again


All times are GMT -6. The time now is 12:53 AM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI