Quantcast
Need help to integrate Addon-Options - Page 2 - WoWInterface
Thread Tools Display Modes
02-24-15, 04:15 PM   #21
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Soo das hier hab ich aus deiner Vorlage gemacht, soweit gibt es keine Fehlermeldungen mehr beim anklicken, jedoch werden auch keine Checkboxen angezeigt

Lua Code:
  1. Options_Child:SetScript("OnShow",
  2.             function(self)
  3.             PlaySound("igMainMenuOptionCheckBoxOn" or "igMainmenuOptionCheckBoxOff")
  4.             --checkboxes begin
  5.             local expansion = Options_Child.name
  6.             print(expansion.." clicked")
  7.  
  8.             --wenn noch keine checkboxen vorhanden dann erstmal erstellen
  9.             if not self.herbCheckboxes then
  10.                 self.herbCheckboxes = {}
  11.                 --alle kräuter der jeweiligen untertabelle durchgehen und jeweils eine checkbox erstellen
  12.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  13.                     --name des krauts für das label der checkbox holen
  14.                     local itemName = GetItemInfo(itemID)
  15.                     --ankerpunkt für die erste checkbox
  16.                     local tAnchorPointY = -10
  17.                     --checkbox erstellen (siehe helper function unten) und für späteren zugriff referenz auf checkbox-objekt mit itemid vom kraut als index in herbCheckboxes speichern
  18.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  19.                     --passend anordnen
  20.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)
  21.                     --ankerpunkt für die nächste checkbox
  22.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
  23.                 end
  24.             end
  25.  
  26.            
  27.             --alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
  28.             for itemID, checkboxObj in pairs(self.herbCheckboxes) do
  29.                 --wert der checkbox entsprechend der tabelle festlegen
  30.                 checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  31.                 --bei wertänderung in der db speichern
  32.                 checkboxObj:SetScript("OnClick", function()
  33.                     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  34.                 end)
  35.             end
  36.  
  37.             --checkboxes end
  38.         end)
  39.        
  40.     end
  41.    
  42.     Options:SetScript("OnShow", nil)
  43.        
  44. end)
  45.    
  46. SLASH_MILLBUTTON1 = "/millbutton"
  47. SLASH_MILLBUTTON2 = "/mbtn"
  48. SlashCmdList.MILLBUTTON = function() InterfaceOptionsFrame_OpenToCategory(Options) end
  49.  
  50.  
  51. -- Checkbox HELPERS Beginn
  52. function Addon:CreateOptionsCheckButton(pParentFrame, pLabelText)
  53.     local tCheckBoxFrame = CreateFrame("CheckButton", nil, pParentFrame)
  54.     tCheckBoxFrame:SetWidth(25)
  55.     tCheckBoxFrame:SetHeight(25)
  56.     tCheckBoxFrame:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
  57.     tCheckBoxFrame:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
  58.     tCheckBoxFrame:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
  59.     tCheckBoxFrame:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
  60.     tCheckBoxFrame:SetDisabledCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check-Disabled")
  61.     tCheckBoxFrame:SetFrameStrata("HIGH")
  62.     tCheckBoxFrame:Show()
  63.  
  64.     local tFS = tCheckBoxFrame:CreateFontString(nil, "OVERLAY")
  65.     tCheckBoxFrame.fontstring = tFS
  66.     tFS:SetFont("Fonts\\ARIALN.TTF", 12)
  67.     tFS:SetFontObject(GameFontNormalSmall)
  68.     tFS:SetText(pLabelText)
  69.     tFS:SetTextColor(1, 1, 1, 1)
  70.     tFS:SetJustifyH("LEFT")
  71.     tFS:SetJustifyV("TOP")
  72.     tFS:SetPoint("LEFT", tCheckBoxFrame, "RIGHT", 0, 0)
  73.     tFS:Show()
  74.  
  75.     return tCheckBoxFrame
  76. end
  77. -- Checkbox HELPERS Ende

Ich hab mich da bestimmt irgendwo "verlaufen"...

/letztes edit für heute:
jetzt bekomm ich die Checkboxen zwar angezeigt aber die hängen alle auf einander..

das hier hab ich geändert, also aus self.parent wurde SubOptionPanel:
Lua Code:
  1. self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", SubOptionPanel, "TOPLEFT", 10, tAnchorPointY)
  2.                     --ankerpunkt für die nächste checkbox
  3.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()

Last edited by flow0284 : 02-24-15 at 05:18 PM.
  Reply With Quote
02-24-15, 05:50 PM   #22
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Ich habe leider kein aktives Account und kann nix ausprobieren. Daher kann ich nur vermuten.

Ich denke mal es liegt an
Lua Code:
  1. --passend anordnen
  2. self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)

self.parent hast Du weiter oben den Namen zugewiesen. Das ist somit ein String.
SetPoint() erwartet aber als zweites Argument ein Objekt. Als eine Referenz auf das Parent-Frame. Nicht dessen Name. Das müsste also so lauten:
Lua Code:
  1. self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self, "TOPLEFT", 10, tAnchorPointY)
Vermutlich wird es trotzdem nicht funktionieren. Ich sehe nämlich gerade, dass
Lua Code:
  1. local tAnchorPointY = -10
natürlich außerhalb der for-Schleife sein muss. Sonst bleibt es ja bei -10. Also
Lua Code:
  1. --ankerpunkt für die erste checkbox
  2.                 local tAnchorPointY = -10
  3.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  4.                     --name des krauts für das label der checkbox holen
  5.                     local itemName = GetItemInfo(itemID)
  Reply With Quote
02-24-15, 06:06 PM   #23
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Joar, dat wars

Sind aber zwei neue Problemchen da...

Zum einen Laufen die Checkboxen der Classickräuter über den Frame hinaus, hier sind senkrecht nur Platz für 19 Checkboxen und wenn ich eine Box anklicke gibts ne Fehlermeldung:

attempt to call method 'GetChecked' (a nil value)
Nochmal vielen vielen Dank für deine Unterstützung!
Ich gehe jetzt aber ins Bett.
  Reply With Quote
02-25-15, 07:51 AM   #24
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Originally Posted by flow0284 View Post
Zum einen Laufen die Checkboxen der Classickräuter über den Frame hinaus, hier sind senkrecht nur Platz für 19 Checkboxen
Ja, habe ich mir ja schon gedacht. Du könntest einfach die Checkboxen in zwei Reihen anordnen. Das wäre wohl am einfachsten. Der vierte Parameter von SetPoint ist der x-Offset (http://wowprogramming.com/docs/widgets/Region/SetPoint).
Oder Du packst sie in ein Scrollframe.
Oder Du verwendest eine andere Lösung. Zum Beispiel eine Scrolllist oder halt ein Dropdown oder sowas.

Originally Posted by flow0284 View Post
und wenn ich eine Box anklicke gibts ne Fehlermeldung
Wie wir ja schon weiter oben gelernt haben, muss der Script-Handler explizit den Parameter "self" haben.
Das muss also so lauten:
Lua Code:
  1. checkboxObj:SetScript("OnClick", function(self)
  Reply With Quote
02-25-15, 12:08 PM   #25
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Originally Posted by Duugu View Post
Ja, habe ich mir ja schon gedacht. Du könntest einfach die Checkboxen in zwei Reihen anordnen. Das wäre wohl am einfachsten. Der vierte Parameter von SetPoint ist der x-Offset (http://wowprogramming.com/docs/widgets/Region/SetPoint).

Wie wir ja schon weiter oben gelernt haben, muss der Script-Handler explizit den Parameter "self" haben.
Stimmt, war aber auch recht spät für mich... sry


Beim anklicken der Checkboxen kommt jetzt ein anderen Fehler:

table index is nil
und es wird auf die 7. zeile verwiesen:
Lua Code:
  1. --alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
  2. for itemID, checkboxObj in pairs(self.herbCheckboxes) do
  3. --wert der checkbox entsprechend der tabelle festlegen
  4. checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  5. --bei wertänderung in der db speichern
  6. checkboxObj:SetScript("OnClick", function(self)
  7.     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  8.     end)
  9. end

Für den Aufbau als 2 Spalten muss ich doch die Anzahl der Checkboxen ermitteln und bei 19 festlegen das x-Offset verschoben und der y-Offset wieder bei "0" anfängt.
  Reply With Quote
02-25-15, 12:20 PM   #26
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Gibt self:GetParent().name denn einen Namen und self.itemID eine Item-ID zurück?

Vermutlich muss es self:GetParent():GetParent().name heißen.


Für den Aufbau als 2 Spalten muss ich doch die Anzahl der Checkboxen ermitteln und bei 19 festlegen das x-Offset verschoben und der y-Offset wieder bei "0" anfängt.
Genau. Wobei Dir die Anzahl ja egal sein kann. Es sie denn, Du gehst davon aus dass es in irgendeiner Erweiterung mehr als 28 Kräuter geben könnte.

Last edited by Duugu : 02-25-15 at 12:24 PM.
  Reply With Quote
02-25-15, 12:41 PM   #27
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Originally Posted by Duugu View Post
Gibt self:GetParent().name denn einen Namen und self.itemID eine Item-ID zurück?

Vermutlich muss es self:GetParent():GetParent().name heißen.
Sorry aber ich steh jetzt echt total aufm schlauch.
self:GetParent():GetParent().name bringt allerdings ebenso diesen fehler.


Originally Posted by Duugu View Post
Genau. Wobei Dir die Anzahl ja egal sein kann. Es sie denn, Du gehst davon aus dass es in irgendeiner Erweiterung mehr als 28 Kräuter geben könnte.
Wie die Anzahl kann mir da eigentlich egal sein?!
Wie soll ich denn sonst diesen Umbruch machen?


Sorry aber ich bin halt echt noch ein Frischling
  Reply With Quote
02-25-15, 02:19 PM   #28
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Ah, nach genauerem Durchgehen fällt mir auf, dass es gar nicht an self:GetParent().name liegt, sondern an self.itemID.

Rausfinden kannst Du das, wenn Du im OnClick-Handler ein paar test-prints einfügst:
Lua Code:
  1. checkboxObj:SetScript("OnClick", function(self)
  2.     print(self:GetParent().name)
  3.     print(self.itemID)
  4.     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  5. end)
Dann wird nämlich beim ersten wie geplant der Name der Erweiterung ausgegeben und beim zweiten Nil.
Das liegt daran, dass "self" ja eine Referenz auf das Checkbox-Objekt ist, und wir nirgendwo das Attribut itemID dafür festlegen.
Das lässt sich so lösen (Zeile 9):
Lua Code:
  1. --alle kräuter der jeweiligen untertabelle durchgehen und jeweils eine checkbox erstellen
  2.                 --ankerpunkt für die erste checkbox
  3.                 local tAnchorPointY = -10
  4.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  5.                     --name des krauts für das label der checkbox holen
  6.                     local itemName = GetItemInfo(itemID)
  7.                     --checkbox erstellen (siehe helper function unten) und für späteren zugriff referenz auf checkbox-objekt mit itemid vom kraut als index in herbCheckboxes speichern
  8.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  9.                     self.herbCheckboxes[itemID].itemID = itemID
  10.                     --passend anordnen
  11.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 10, tAnchorPointY)
  12.                     --ankerpunkt für die nächste checkbox
  13.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
  14.                 end
  15.  
  16.             --alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
  17.             for itemID, checkboxObj in pairs(self.herbCheckboxes) do
  18.                 --wert der checkbox entsprechend der tabelle festlegen
  19.                 checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  20.                 --bei wertänderung in der db speichern
  21.                 checkboxObj:SetScript("OnClick", function(self)
  22.                     MillButton_Herblist[self:GetParent().name][self.itemID] = self:GetChecked()
  23.                 end)
  24.             end

Wie die Anzahl kann mir da eigentlich egal sein?!
Wie soll ich denn sonst diesen Umbruch machen?
Na, Du zählst einfach mit und rechnest alle 19 mal etwas auf den x-Offset drauf.

Lua Code:
  1. local tAnchorPointY = -10
  2.                local tAnchorPointX  = 0
  3.                local tAnchorPointCount  = 0
  4.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  5.                     --name des krauts für das label der checkbox holen
  6.                     local itemName = GetItemInfo(itemID)
  7.                     --checkbox erstellen (siehe helper function unten) und für späteren zugriff referenz auf checkbox-objekt mit itemid vom kraut als index in herbCheckboxes speichern
  8.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  9.                     self.herbCheckboxes[itemID].itemID = itemID
  10.                     --passend anordnen
  11.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self.parent, "TOPLEFT", tAnchorPointX, tAnchorPointY)
  12.                     --ankerpunkt für die nächste checkbox
  13.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
  14.                     tAnchorPointCount = tAnchorPointCount + 1
  15.                     if tAnchorPointCount > 19 then
  16.                                         tAnchorPointX = tAnchorPointX + 50
  17.                                         tAnchorPointY = -10
  18.                                         tAnchorPointCount = 0
  19.                     end
  20.                 end

Das kann man natürlich anders deutlich eleganter lösen, aber ich dachte mir so ists vielleicht erstmal an ersichtlichsten.

[e]
Wenn wir noch weiter darüber diskutieren wäre es gut, wenn Du irgendwo Deinen aktuellen Code einmal komplett bereitstellst. Sonst wird der aktuelle Stand langsam schwer nachvollziehbar.
[e2]
Bei erneutem Lesen bin ich mir unsicher, ob das ganze überhaupt für Dich nachvollziehbar ist oder Du nur das was ich geschrieben habe als Black-Box nutzt. Also z. B. was self.GetParent().name macht und sowas. Wenn Dir also was unklar ist oder Du Fragen hast, dann frag. Es macht langfristig ja nur wenig Sinn wenn Du überhaupt nicht nachvollziehen kannst was einzelne Teile machen und sie nur einfach so verwendest.

Last edited by Duugu : 02-25-15 at 02:23 PM.
  Reply With Quote
02-25-15, 06:15 PM   #29
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Originally Posted by Duugu View Post
Das kann man natürlich anders deutlich eleganter lösen, aber ich dachte mir so ists vielleicht erstmal an ersichtlichsten.

[e]
Wenn wir noch weiter darüber diskutieren wäre es gut, wenn Du irgendwo Deinen aktuellen Code einmal komplett bereitstellst. Sonst wird der aktuelle Stand langsam schwer nachvollziehbar.
[e2]
Bei erneutem Lesen bin ich mir unsicher, ob das ganze überhaupt für Dich nachvollziehbar ist oder Du nur das was ich geschrieben habe als Black-Box nutzt. Also z. B. was self.GetParent().name macht und sowas. Wenn Dir also was unklar ist oder Du Fragen hast, dann frag. Es macht langfristig ja nur wenig Sinn wenn Du überhaupt nicht nachvollziehen kannst was einzelne Teile machen und sie nur einfach so verwendest.
Ja auf die Test Prints hätte ich wirklich kommen müssen, die nutze ich so ja auch gelegentlich wenn ich sehen will was da passiert.


Momentan (!) habe ich deinen Code mehr oder weniger "nur" übernommen. Es gibt definitiv Codefragmente die ich noch nicht so wirklich verstehe. Da mich aber immer mehr die Addonprogrmmierung begeistert werde ich mich in den kommenden Wochen zumindest am Wochenende immer wieder ran setzen und versuchen zu verstehen was dieser Code von Dir genau macht.

Eine Frage stelle ich mir jedoch noch. Was mache ich eigentlich wenn ich mal, wegen eines Contentpatches, die Interne Datenbank Updaten muss. Also wenn z.B. ein paar ItemIDs wegfallen oder hinzukommen sollten. Ich möchte da dann ungerne den Addonuser zwingen seine Einstellungen neu machen zumüssen. Man kann doch bestimmt dann die gespeicherte Datenbank die pro Charakter gespeichert wird mit der internen abgleichen (wenn z.B. eine Versionsnummer der Datenbank oder so) sich ändert.

Ich habe da vorhin schon mal versucht etwas zu finden aber ich bin da noch nicht fündig geworden.

Hier im Anhang ist auch das komplette Addon, so wie es dank Deiner Unterstützung jetzt ist. Und es funktioniert sogar auch, aber ich denke mal einige was ich da "fabriziert" habe lässt sich bestimmt eleganter lösen.
Attached Files
File Type: zip MillButton.zip (14.2 KB, 89 views)
  Reply With Quote
02-27-15, 11:40 AM   #30
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Ich würde an Deiner stelle das Erstellen und Konfigurieren der Checkboxen nicht mit MillbuttonDB (also der Tabelle mit den gespeicherten Werten des Users), sondern mit MillButton_Herblist (also der Default-Tabelle) durchführen.

Erst wenn Du den eigentlichen Wert (checked/unchecked) festlegst und wenn einer klickt und du den aktuellen Wert speicherst solltest Du das mit MillbuttonDB machen.

Also ungefähr so: (Zeile 7 und 22-26 ... wieder ungetestet)

Lua Code:
  1. --wenn noch keine checkboxen vorhanden dann erstmal erstellen
  2.             if not self.herbCheckboxes then
  3.                 self.herbCheckboxes = {}
  4.                 local tAnchorPointY = -64
  5.         local tAnchorPointX  = 30
  6.         local tAnchorPointCount  = 0
  7.                 for itemID, optionValue in pairs(MillButton_Herblist[expansion]) do
  8.                     local itemName = GetItemInfo(itemID)
  9.                     self.herbCheckboxes[itemID] = Addon:CreateOptionsCheckButton(self, itemName)
  10.                     self.herbCheckboxes[itemID].itemID = itemID
  11.                     self.herbCheckboxes[itemID]:SetPoint("TOPLEFT", self, "TOPLEFT", tAnchorPointX, tAnchorPointY)
  12.                     tAnchorPointY = tAnchorPointY - self.herbCheckboxes[itemID]:GetHeight()
  13.                     tAnchorPointCount = tAnchorPointCount + 1
  14.                     if tAnchorPointCount > 18 then
  15.                         tAnchorPointX = tAnchorPointX + 180
  16.                         tAnchorPointY = -64
  17.                         tAnchorPointCount = 0
  18.                     end
  19.                 end
  20.             end
  21.             for itemID, checkboxObj in pairs(self.herbCheckboxes) do
  22.             if MillButtonDB[expansion] and MillButtonDB[expansion][itemID] then
  23.                 checkboxObj:SetChecked(MillButtonDB[expansion][itemID])
  24.             else
  25.                 checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  26.             end
  27.             checkboxObj:SetScript("OnClick", function(self)
  28.                 --  print(self:GetParent().name)
  29.                 --  print(self.itemID)
  30.                     MillButtonDB[self:GetParent().name][self.itemID] = self:GetChecked()
  31.             end)
  32.             end
  33.         end)

So werden dann alle Änderungen die Du an MillButton_Herblist machst automatisch in MillButtonDB durchgereicht. Und wenn es neue Herbs gibt die noch nicht in MillbuttonDB sind, dann wird einfach der Standardwert aus MillButton_Herblist genutzt.
Wenn Du in MillButton_Herblist welche entfernst, dann bleiben die in MillButtonDB zwar bis in alle Ewigkeiten drin, aber da die Liste der Checkboxen ja über MillButton_Herblist erstellt wird kann Dir das egal sein.
  Reply With Quote
02-27-15, 01:57 PM   #31
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Danke.

Aber so werden immer wieder die defaultsettings geladen. kann es daran liegen weil ich beim event addon_loaded die MillButtonDB bereits aus der Herblist erstellen lasse?

Und mir ist eben aufgefallen das nicht immer die Namen bei den Checkboxen stehen. manchmal muss ich das ui ein bis zwei mal neu laden.
  Reply With Quote
02-27-15, 04:13 PM   #32
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Originally Posted by flow0284 View Post
Danke.

Aber so werden immer wieder die defaultsettings geladen. kann es daran liegen weil ich beim event addon_loaded die MillButtonDB bereits aus der Herblist erstellen lasse?

Und mir ist eben aufgefallen das nicht immer die Namen bei den Checkboxen stehen. manchmal muss ich das ui ein bis zwei mal neu laden.
[edit]
Mir fällt gerade auf, dass das was ich zuerst mit variables_loaded geschrieben hatte Quatsch war. Hab ich daher wegeditiert.
Dann musst Du selbst rausfinden was schiefläuft. Wie gesagt, mit print() gucken was wann passiert.

Warum die Labels nicht angezeigt werden musst Du selbst herausfinden. Keine Ahnung. Einfach mal prints einfügen und gucken was wann passiert. Das wirst Du sicher rausbekommen.

Last edited by Duugu : 02-27-15 at 04:19 PM.
  Reply With Quote
03-05-15, 05:49 AM   #33
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Soo,

ich glaube zu wissen warum die Labels nicht mit dem itemName gefüllt werden. Hier scheint es an der API selbst zu liegen. Die API kann mir nur die Namen direkt anzeigen, die ich während der aktuellen Gamesession gesehen habe. Habe ich ein Item noch nicht gesehen wird eine Anfrage an der Server gestellt, hier dauert es scheinbar unterschiedlich lange bis eine Antwort ankommt. Daher kommt dann bei GetItemInfo(itemID) nil als Ergebnis.

Ich befürchte ich muss hier je Lokalisierung die Itemnamen meine kleinen Übersetzungstabellen aufnehmen. Oder gibt es einen anderen Weg vorzeitig an die Itemnamen zu kommen?


Was das Problem mit den immer wieder kehrenden Defaultsettings habe ich so gelöst (Zeile 4):
Lua Code:
  1. --alle inhalte self.herbCheckboxes durchgehen und den aktuellen wert (checked/nicht checked bzw. true/false) für die checkbox entsprechend der db festlegen
  2. for itemID, checkboxObj in pairs(self.herbCheckboxes) do
  3. --wert der checkbox entsprechend der tabelle festlegen
  4.     if MillButtonDB[expansion] and MillButtonDB[expansion][itemID]==false then
  5.         checkboxObj:SetChecked(MillButtonDB[expansion][itemID])
  6.     else
  7.         checkboxObj:SetChecked(MillButton_Herblist[expansion][itemID])
  8.     end
  9.     --bei wertänderung in der db speichern
  10.     checkboxObj:SetScript("OnClick", function(self)
  11.         MillButtonDB[self:GetParent().name][self.itemID] = self:GetChecked()
  12.     end)

Aus MillButtonDB[expansion][itemID] habe ich MillButtonDB[expansion][itemID]==false gemacht und schon gehts.
  Reply With Quote
03-05-15, 07:21 AM   #34
Dorwido
A Wyrmkin Dreamwalker
AddOn Author - Click to view addons
Join Date: Apr 2006
Posts: 54
Ich würde sowas in der art machen:
http://us.battle.net/wow/en/forum/topic/2842565045

Und die namen dann global als savedvariable speichern so muss das addon die nur einmal requesten und kann sie danach aus den saved variablen laden und du sparst dir die arbeit für jede sprache das selbst zu machen oder andere machen zu lassen.
__________________
Auction Analytics
http://www.wowauction.org/
  Reply With Quote
03-05-15, 07:51 AM   #35
Dorwido
A Wyrmkin Dreamwalker
AddOn Author - Click to view addons
Join Date: Apr 2006
Posts: 54
Bei sowas wie Standardeinstellung finde ich übrigens Metatabellen recht handlich:

Code:
local defaultconf = {["GlobalConf"]=true,["TimeOnMission"]=true,["CounterTraits"]=true,["AutoPlace"]=true,["ShowTimeLeft"]=true,["FollowerRequired"]=true,["QuickAssign"]=true,["GoldExpShow"]=true,
					["HideAlert"]=false,["ShowCounterFollower"]=true,["ShowItemlevelFollower"]=true};

local metatable = {};

metatable.__index = function( inTable, inKey )
  value = defaultconf[inKey];
  inTable[ inKey ] = value;
  return value;
end

setmetatable(GarrisonMissonEnhancedGlobalConfig,metatable);
Das ist ne auszug aus eines meiner addons, GarrisonMissonEnhancedGlobalConfig ist dabei die savedvariable, wenn ich nun aufrufe GarrisonMissonEnhancedGlobalConfig["TimeOnMission"] und das existiert nicht in der saved variable dann wird die standardeinstellung übernommen, so kann man problemlos die standard config erweitern ohne das man in der savedvariable checken muss ob die neue option existiert oder nicht und wenn nicht hinzufügen.
__________________
Auction Analytics
http://www.wowauction.org/
  Reply With Quote
03-05-15, 08:13 AM   #36
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Aber dann besteht doch vorerst noch immer das Problem. Die Labels der Checkboxen bleiben doch dann noch immer solange leer bis der itemName vom Server zurückgegeben wurde, oder?
  Reply With Quote
03-05-15, 08:22 AM   #37
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Originally Posted by Dorwido View Post
Bei sowas wie Standardeinstellung finde ich übrigens Metatabellen recht handlich:

Code:
local defaultconf = {["GlobalConf"]=true,["TimeOnMission"]=true,["CounterTraits"]=true,["AutoPlace"]=true,["ShowTimeLeft"]=true,["FollowerRequired"]=true,["QuickAssign"]=true,["GoldExpShow"]=true,
					["HideAlert"]=false,["ShowCounterFollower"]=true,["ShowItemlevelFollower"]=true};

local metatable = {};

metatable.__index = function( inTable, inKey )
  value = defaultconf[inKey];
  inTable[ inKey ] = value;
  return value;
end

setmetatable(GarrisonMissonEnhancedGlobalConfig,metatable);
Das ist ne auszug aus eines meiner addons, GarrisonMissonEnhancedGlobalConfig ist dabei die savedvariable, wenn ich nun aufrufe GarrisonMissonEnhancedGlobalConfig["TimeOnMission"] und das existiert nicht in der saved variable dann wird die standardeinstellung übernommen, so kann man problemlos die standard config erweitern ohne das man in der savedvariable checken muss ob die neue option existiert oder nicht und wenn nicht hinzufügen.
Metatabellen hab ich irgendwo schon mal gelesen aber noch nie mit befasst.
Werden mal demnächst schauen wie Metatabellen funktionieren.
  Reply With Quote
03-05-15, 08:23 AM   #38
Dorwido
A Wyrmkin Dreamwalker
AddOn Author - Click to view addons
Join Date: Apr 2006
Posts: 54
Kannst ja direkt nach dem laden des addons, anfangen die liste zu erstellen denke mal das sollte nicht allzulange dauern
__________________
Auction Analytics
http://www.wowauction.org/
  Reply With Quote
03-05-15, 03:15 PM   #39
flow0284
An Aku'mai Servant
Join Date: Jan 2015
Posts: 39
Da muss ich ma schauen, wie ich das machen kann.
  Reply With Quote
03-05-15, 04:13 PM   #40
Duugu
Premium Member
 
Duugu's Avatar
AddOn Author - Click to view addons
Join Date: Nov 2006
Posts: 851
Wenn Du sichergehen willst, das die Namen definitiv angezeigt werden, dann musst Du die Namen lokalisiert in einer Tabelle ins Addon einfügen.

Diese Namen ändern sich ja eigentlich nie. Über wowhead mit XML kannst Du mit etwas Skripten alle Namen für alle Sprachen automatisch abrufen wenn Du das nicht per Hand erledigen willst (mehr dazu hier: http://www.wowhead.com/tooltips. Müsste btw eigentlich auch über Web-API von WoW gehen.
  Reply With Quote

WoWInterface » Developer Discussions » Lua/XML Help » Need help to integrate Addon-Options

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off