Guten Tag zusammen,
ich habe vor einiger Zeit ein Addon erstellt (Battleground Buddy) welches ich pflege und erweitere und versuche das im Moment, was mir nicht gelingt.
Ich möchte eine Funktion implementieren die es mir gerade schwer macht: Ich benötige die Subzonen-ID (oder wie auch immer es genannt wird).
Beispiel: Die Zonen ID für das Schlachtfeld „Auge des Sturms“ ist 112. Soweit alles gut. Nun möchte ich aber abfragen, wo genau der Spieler sich befindet: Draenei, Teufelshäscher, Magier Turm oder Blutelfenturm.
Wie komme ich an diese Subzonen-ID? Ich möchte aktuelle Chatausgaben in der jeweiligen Clientsprache an manchen Punkten durch englische Begriffe ersetzen:
Aktuell
Inc · Magierturm
Soll erreicht werden:
Inc · Magetower
Die Abfrage kann also nicht nach dem Zonennamen stattfinden, da dieser ja sprachenabhängig ist - ich komme aber nicht an die jeweiligen IDs. Kann ich die ID Abfragen, kann an bestimmten Punkten eine Übersetzung im Hintergrund abgefragt und wenn vorhanden, entsprechend englischer Begriff genutzt werden.
Jemand eine Idee?
Gibts soweit ich weis nur für die map ID selber, aber nicht für die sub zones. Wenn die Bereiche in den PvP Gebeiten eine eigene Zonen ID haben ginge das über C_Map.GetMapInfo( C_Map.GetBestMapForUnit('player') )
da ist dan id, name, etc drinn
Sonst wirst nicht drumherum kommen eine eigene mapping tabelle zu erstellen für alle Sprachen die du supporten willst.[ GetSubZoneText()
→ ID ]
https://wowpedia.fandom.com/wiki/Category:API_namespaces/C_Map
https://wowpedia.fandom.com/wiki/API_C_Map.GetMapInfo
https://wowpedia.fandom.com/wiki/API_GetSubZoneText
2 Likes
Danke für Deine Rückmeldung.
Mittlerweile bin ich dahinter gekommen, dass es keine „Subzonen-IDs“ gibt, die über die freie API zugänglich wären.
Man könnte noch mit Koordinaten innerhalb der Zonen-ID arbeiten, das habe ich bisher aber nicht geschafft zum laufen zu bringen. Das funktioniert zwar in SW in einem Test aber auf dem Schlachtfeld haut es mir nur Fehler raus.
Es wäre so viel einfacher wenn „Magierturm“ eine ID hätte - so sieht es so aus, als müsste ich alle Sprachen mit den jeweiligen „GetMinimapZoneText“ übersetzen und entsprechend ausgeben. Und da ich das weder in allen Sprachen testen kann oder es eine zuverlässige Quelle gibt die mir alle Bezeichnungen wirklich richtig „auflistet“, wird das ein eher weniger umgesetztes Ziel.
Leider kann man sich auf Angaben bei wowhead etc. nicht verlassen, man muss alles händisch erforschen - allein die ganzen Zonen-IDs stimmen nirgendwo und muss ich selbst live herausfinden. Das nun in allen Sprachen mit allen Basen scheint ein Mammutprojekt zu werden.
Außer jemand hat noch einen großartigen Einfall - dafür bin ich zu haben!
Könntest es „dynamisch“ aufbauen, so das bei fehlenden Einträge automatisch einer erzeugt wird und ne message über nen comm channel sendet. (map koordinaten helfen dan vermutlich bei der zuordnung)
Damit könntest du über die Zeit die namen von anderen Clients einsammeln wenn du auch in dem BG bist. Musst dan quasi nur schauen welche einheitliche ID du dem geben willst. Sollte dan ja in einem BG überschaubar sein welche SubZonen da exisiteren.
Kannst auch ne funktion einbauen das addon Nutzer diese Variablen exportieren können und dir manuell zur verfügung stellen.
So oder so aber natürlich handarbeit.
2 Likes
Theoretisch denke ich es gerade so:
Auge des Sturms:
Magierturm
Blutelfen
Draenei
Täufelshäscher
Befindet sich der Spieler in dieser „GetMinimapZoneText“ in einer der hinterlegten Sprachen, welche ich manuell in eine Liste eintrage, dann gebe automatisch die englischen Begriffe aus, welche ebenfalls hinterlegt werden.
Heißt die Arbeit ist „eigentlich“ nur, die richtig zutreffenden Minimap Bezeichnungen der Subzonen in den jeweiligen Sprachen herauszufinden, in die Liste einzutragen und fertig.
Würde eher ne mapping tabelle erstellen für jede sprache die auftaucht und jedem da eine eindeutige ID geben.
ZonID:
‚Magierturm‘ => 1
‚Blutelfen‘ => 2
etc.
Hat den vorteil das du zwichen beliebigen sprachen mappen kannst fals du mal was anderes ausgeben willst.
ggf. hilft dir diese Library auch, scheint auch in die richtung zu gehen. https://www.wowace.com/projects/libbabble-subzone-3-0
2 Likes
Ich glaube wir meinen den gleichen Gedanken, habe ihn wie immer nur falsch herum kommuniziert.
Danke für Deine Hilfe - ich gucke mir das in Ruhe an und sehe, wie ich das einbinden kann!
Edit:
local zoneNameMapping = {
[1121] = "Mage Tower", -- Auge des Sturms Magierturm
[1122] = "Draenei", -- Auge des Sturms Draenei
[1123] = "Fel Reaver", -- Auge des Sturms Teufelshäscher
[1124] = "Blood Elf", -- Auge des Sturms Blutelfenturm
[2751] = "Mines", -- Schlacht um Gilneas Minen
[2752] = "Waterworks", -- Schlacht um Gilneas Wasserwerke
[2753] = "Lighthouse", -- Schlacht um Gilneas Leuchtturm
[1691] = "Docks", -- Insel der Eroberung Hafen
[1692] = "Workshop", -- Insel der Eroberung Werkstatt
[1693] = "Hangar", -- Insel der Eroberung Hangar
[1694] = "Quarry", -- Insel der Eroberung Steinbruch
[1695] = "Refinery", -- Insel der Eroberung Raffinerie
}
local localizedZoneNames = {
-- Auge des Sturms Magierturm
["Magierturm"] = 1121,
-- Auge des Sturms Draenei
["Ruinen der Draenei"] = 1122,
-- Auge des Sturms Teufelshäscher
["Teufelshäscherruinen "] = 1123,
-- Auge des Sturms Blutelfenturm
["Blutelfenturm"] = 1124,
--Schlacht um Gilneas Minen
["Minen"] = 2751,
-- Schlacht um Gilneas Wasserwerke
["Wasserwerke"] = 2752,
-- Schlacht um Gilneas Leuchtturm
["Leuchtturm"] = 2753,
-- Insel der Eroberung Hafen
["Hafen"] = 1691,
-- Insel der Eroberung Werkstatt
["Werkstatt"] = 1692,
-- Insel der Eroberung Hangar
["Hangar"] = 1693,
-- Insel der Eroberung Steinbruch
["Steinbruch"] = 1694,
-- Insel der Eroberung Raffinerie
["Raffinerie"] = 1695,
-- Test
["Der Zwergendistrikt"] = 2753,
}
@Flauschkugel Läuft - perfekt, jetzt einfach Sprache für Sprache Stück für Stück aufbauen. Danke Dir!
2 Likes