Quantcast
Download
(48 Kb)
Download
Updated: 01/25/19 09:25 AM
Pictures
File Info
Compatibility:
Wrathstone (4.3)
Murkmire (4.2)
Wolfhunter (4.1)
Updated:01/25/19 09:25 AM
Created:10/15/18 11:41 AM
Monthly downloads:445
Total downloads:2,139
Favorites:10
MD5:
4.3
LibZone
Version: 0.4
by: Baertram [More]
LibZone
A library to help with zone information.
It contains:
-Localized zone names for the languages DE, EN, FR
-ZoneId, ZoneIndex, ZoneParentId (beginning with API100025 "Murkmire")

And to help with translations of zone names between different languages.
Use one of the following slash commands in your chat:
Code:
-Added: Slash commans /lzt or /transz:
Enter a zone name afterwards (in your client language) or choose it from the autocompletion list.
Press tab or space to chose the zonename, and you'll see another auto completion which will provide you the translations of this zone to other languages.
Chosing an entry will put the translated zone name into the chat.

-Added slash commands to search in your desired language:
/lztde or /transzde: German
/lzten or /transzen: English
/lztfr or /transzfr: French
/lztjp or /transzjp: Japanese
/lztru or /transzru: Russian
/lztpl or /transzpl: Polish
This library uses SavedVariables and thus needs it's own LibZone.txt manifest file!
This library needs the libraries LibStub and LibSlashCommander installed seperately!


Where is the data?
Your instance of LibZone contains 2 tables.
1 for the localized data:
LibZone.localizedZoneData[language][zoneId] = "Localized name of the zone"
-> Language = String, length 2. Example: "en", "de", "fr"
-> ZoneId = The zone's unique id which you are able to get via some API function like these ones:
Code:
* GetMapInfo(*luaindex* _index_)
** _Returns:_ *string* _name_, *[UIMapType|#UIMapType]* _mapType_, *[MapContentType|#MapContentType]* _mapContentType_, *integer* _zoneId_, *string* _description_

* GetGuildMemberCharacterInfo(*integer* _guildId_, *luaindex* _memberIndex_)
** _Returns:_ *bool* _hasCharacter_, *string* _characterName_, *string* _zoneName_, *integer* _classType_, *integer* _alliance_, *integer* _level_, *integer* _championRank_, *integer* _zoneId_

* GetFriendCharacterInfo(*luaindex* _friendIndex_)
** _Returns:_ *bool* _hasCharacter_, *string* _characterName_, *string* _zoneName_, *integer* _classType_, *integer* _alliance_, *integer* _level_, *integer* _championRank_, *integer* _zoneId_
1 for the non localized data:
LibZone.zoneData[zoneId] = {
["zoneIndex"] = zoneIndex,
["parentZone"] = zoneId of the parent Zone
}

->zoneIndex = The zoneIndex which can be determined via some API functions like these ones:
Code:
* GetCurrentMapZoneIndex()
** _Returns:_ *luaindex* _zoneIndex_

* GetZoneIndex(*integer* _zoneId_)
** _Returns:_ *luaindex* _zoneIndex_
->zoneId = see above


Usage
-Download, use as standalone library or keep (otherwise the SavedVariables are lost!) the manifest txt file and just use the library file within your addon.
-Load the library within your addon code using the versioning library libStub (included):
Lua Code:
  1. local libZone = LibStub('LibZone')

The file LibZone_Data.lua contains the localized zone names for DEn EN and FR language.
The file LibZone.lua contains functions to read this, and the other information, for your addons.

THis function will build new zone data and save them to the savedvariables. It will use the current client's language and will be run once as the library loads. So if you are playing on a non-official client language the data will be read and added to your savedvariables.
Code:
--Check and get all zone's data and save them to the SavedVariables
--Parameters:
-->reBuildNew: Boolean [true=Rebuild the zoneData for all zones, even if they already exist / false=Skip already existing zoneIds]
-->doReloadUI: Boolean [true=If at least one zoneId was added/updated, do a ReloadUI() at the end to update the SavaedVariables now / false=No autoamtic ReloadUI()]
function lib:GetAllZoneDataById(reBuildNew, doReloadUI)

Code:
--Return the zoneData of a zone, determined by help of the subZone ID.
--Parameters:
--subZoneId: Number SubZoneId
--language: String Language for the ParentZoneName
-->Returns table:
--->returnTable[number SubZoneId] = {
--->    ["parentZoneId"] = number ParentZoneId,
--->    ["name]"         = String "ParentZoneName"
--->}
--If no parent zone can be found the return value will be nil.
function lib:GetZoneDataBySubZone(subZoneId, language)

Code:
--Return existing zone/their subZone data to variables.
-- Returns the zoneData, subZoneData tables
-->Contents of zoneData:
-->zoneData = { ["name"] = String "Zone Name^n"
-->             ["zoneIndex"] = number zoneIndex
-- }
-->Contents of subZoneData:
-->subZoneData = { ["name"] = String "Sub zone Name^n"
-->                ["parentZone"] = number zoneId}
-- }
function lib:GetZoneData(zoneId, subZoneId, language)

Code:
--Show existing zone data to the chat now
--Output zone informtaion to the chat, using the zoneId, subZoneId (connected to zoneId via parentZoneId) and the language (e.g. "en" or "fr")
function lib:ShowZoneData(zoneId, subZoneId, language)

Code:
--Get the localized zone name by help of a zoneId
--zoneId: Number containing zoneId
--language: The language to use for the zoneName
--->Returns localized String of the zoneName
function lib:GetZoneName(zoneId, language)

Code:
--Get the localized zone names by help of a table containing the zoneIds
-->zoneIdsTable: Table containing a number index as key and the zoneId as value
-->e.g. zoneIdsTable = {2, 3, 36, 1200} or zoneIdsTable[1] = 1, zoneIdsTable[2] = 3, zoneIdsTable[3] = 36, zoneIdsTable[4] = 1200
--->Returns table containing the zone names
--->Key = zoneId
--->Value = table with the zoneData from the SavedVariables.
--->Example:
---->returnTable[2] = "Clean Test"
---->returnTable[3] = "Gelnumbra"
function lib:GetZoneNamesByIds(zoneIdsTable, language)


Code:
--Get the localized zone data by help of a table containing the zoneIds
-->zoneIdsTable: Table containing a number index as key and the zoneId as value
-->e.g. zoneIdsTable = {2, 3, 36, 1200} or zoneIdsTable[1] = 1, zoneIdsTable[2] = 3, zoneIdsTable[3] = 36, zoneIdsTable[4] = 1200
--->Returns table containing the zoneData
--->Key = zoneId
--->Value = table with the zoneData from the SavedVariables.
--->Example:
---->returnTable[2] = {
---->   ["name"] = "Clean Test",
---->   ["zoneIndex"] = 1,
---->},
---->returnTable[3] = {
---->   ["name"] = "Glenumbra",
---->   ["zoneIndex"] = 2,
---->}
function lib:GetZoneDataByIds(zoneIdsTable, language)
Code:
--Get the localized zone names matching to a localized search string
-->searchStr: The String with the search value of a zone name (using searchLanguage)
-->searchLanguage: The langauge to search the searchStr variable in Format example: "en". Can be nil (<nilable>)! If the searchLangauge is nil the client language will be taken as searchLanguage.
-->returnLanguage: The language for the translated results. e.g. you search for "Ostmar" with search language "de" and the return language "en". The result will be the "Eastmarch" zone.
--->Returns table containing the zoneId as table key and the localized (in language: returnLanguage) full zone name, matching to the search string, as table value
function lib:GetZoneNameByLocalizedSearchString(searchStr, searchLanguage, returnLanguage)
0.4
-Removed LibStub frióm the libs subfolder
-Removed the libs subfolder. This library needs the following libraries installed as standalone versions:
LibStub LibSlashCommander

-Updated Japanese translations
-Added Polish translations and chat commands: /lztpl or /transzpl
Thankls for provided the translations!

0.3
-Fixed localized zone data overwritten (corrected manifest txt)
-Added Japanese translations
-Added Russian translations
-Added ## AddOnVersion tag to manifest txt
-Added function to get localized zoneNames and their zoneIds by help of a search String (zone name) and search language:
--Get the localized zone names matching to a localized search string
-->searchStr: The String with the search value of a zone name (using searchLanguage)
-->searchLanguage: The langauge to search the searchStr variable in Format example: "en". Can be nil (<nilable>)! If the searchLangauge is nil the client language will be taken as searchLanguage.
-->returnLanguage: The language for the translated results. e.g. you search for "Ostmar" with search language "de" and the return language "en". The result will be the "Eastmarch" zone.
--->Returns table containing the zoneId as table key and the localized (in language: returnLanguage) full zone name, matching to the search string, as table value
function lib:GetZoneNameByLocalizedSearchString(searchStr, searchLanguage, returnLanguage)

-Added: Slash commans /lzt or /transz:
Enter a zone name afterwards (in your client language) or choose it from the autocompletion list.
Press tab or space to chose the zonename, and you'll see another auto completion which will provide you the translations of this zone to other languages.
Chosing an entry will put the translated zone name into the chat.

-Added slash commands to search in your desired language:
/lztde or /transzde: German
/lzten or /transzen: English
/lztfr or /transzfr: French
/lztjp or /transzjp: Japanese
/lztru or /transzru: Russian
Optional Files (0)


Archived Files (1)
File Name
Version
Size
Uploader
Date
0.2
29kB
Baertram
10/15/18 11:41 AM


Post A Reply Comment Options
Unread 02/01/19, 10:04 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2064
File comments: 2207
Uploads: 55
Originally Posted by zelenin
feature request:
add functions GetCurrentZone(), IsPublicDungeon(), IsDelvel(), IsTrial(), IsGroupDungeon() etc if this seems possible.
What should GetCurrentZone() return what is not already there?
You are already able to use ingame API functions to get teh current's zone zoneId and then use libZone to get this zones's data.

ZoneId = The zone's unique id which you are able to get via some API function like these ones:
Lua Code:
  1. * GetMapInfo(*luaindex* _index_)
  2. ** _Returns:_ *string* _name_, *[UIMapType|#UIMapType]* _mapType_, *[MapContentType|#MapContentType]* _mapContentType_, *integer* _zoneId_, *string* _description_
  3.  
  4. * GetGuildMemberCharacterInfo(*integer* _guildId_, *luaindex* _memberIndex_)
  5. ** _Returns:_ *bool* _hasCharacter_, *string* _characterName_, *string* _zoneName_, *integer* _classType_, *integer* _alliance_, *integer* _level_, *integer* _championRank_, *integer* _zoneId_
  6.  
  7. * GetFriendCharacterInfo(*luaindex* _friendIndex_)
  8. ** _Returns:_ *bool* _hasCharacter_, *string* _characterName_, *string* _zoneName_, *integer* _classType_, *integer* _
I'm not going to anually mark rentries in the zone list as delve, dungeon etc.! But this would be needed to reliably get the information, and this would me to remark them after each update as there are no API functions to check if a zone is delve, dungeon trial or whatever!

Though game provides some API functions to do some checks if you are in a dungeon, or trial. Please use them if you need to know where you are.

Please check the following addons code if you need an example:
WishList, file src/functions.lua, function WL.getCurrentZoneAndGroupStatus()

Lua Code:
  1. function WL.getCurrentZoneAndGroupStatus()
  2.     local isInPublicDungeon = false
  3.     local isInGroupDungeon = false
  4.     local isInAnyDungeon = false
  5.     local isInRaid = false
  6.     local isInDelve = false
  7.     local isInGroup = false
  8.     local groupSize = 0
  9.     local isInPVP = false
  10.     local zoneId = 0
  11.     local subZoneId = 0
  12.     local currentMapZoneIndex = GetCurrentMapZoneIndex()
  13.     if currentMapZoneIndex ~= nil then
  14.         zoneId = GetZoneId(currentMapZoneIndex)
  15.         if GetParentZoneId ~= nil then
  16.             local parentZoneId = GetParentZoneId(zoneId)
  17.             if parentZoneId ~= nil and parentZoneId ~= 0 then
  18.                 subZoneId = zoneId
  19.                 zoneId = parentZoneId
  20.             end
  21.         end
  22.     end
  23.  
  24.     isInPVP = IsPlayerInAvAWorld()
  25.     isInAnyDungeon = IsAnyGroupMemberInDungeon() -- returns true if not in group and in solo dungeon/delve
  26.     isInRaid = IsPlayerInRaid()
  27.     isInGroup = IsUnitGrouped("player")
  28.  
  29.     --Check if user is in any dungeon
  30.     if not isInGroup then
  31.         isInDelve = isInAnyDungeon
  32.     else
  33.         groupSize = GetGroupSize() --SMALL_GROUP_SIZE_THRESHOLD (4) / RAID_GROUP_SIZE_THRESHOLD (12) / GROUP_SIZE_MAX (24)
  34.         isInDelve = isInAnyDungeon and not isInRaid and groupSize <= SMALL_GROUP_SIZE_THRESHOLD
  35.     end
  36.     --Get POI info for group and public dungeons
  37.     local zoneIndex, poiIndex = GetCurrentSubZonePOIIndices()
  38.     local abort = false
  39.     if zoneIndex == nil then
  40.         abort = true
  41.     end
  42.     if poiIndex == nil then
  43.         abort = true
  44.     end
  45.     if not abort then
  46.         local _, _, _, iconPath = GetPOIMapInfo(zoneIndex, poiIndex)
  47.         if iconPath:find("poi_delve") then
  48.             -- in a delve
  49.             isInDelve = true
  50.         end
  51.         isInPublicDungeon = IsPOIPublicDungeon(zoneIndex, poiIndex)
  52.         isInGroupDungeon = IsPOIGroupDungeon(zoneIndex, poiIndex)
  53.         if isInPublicDungeon then
  54.             isInDelve = false
  55.             isInGroupDungeon = false
  56.         elseif isInGroupDungeon then
  57.             isInDelve = false
  58.             isInPublicDungeon = false
  59.         end
  60.         --[[
  61.             else
  62.                 --Workaround as long as some public dungeons are not determined correctly (e.g. in Reapers March)
  63.                 --Workaround disabled: Delves are not determined correctly this way (you are normally grouped in public dungeons?!)!
  64.                 isInPublicDungeon = (isInAnyDungeon and not isInGroup)
  65.         ]]
  66.     end
  67.     return isInPVP, isInDelve, isInPublicDungeon, isInGroupDungeon, isInRaid, isInGroup, groupSize, zoneId, subZoneId
  68. end

This function is not 100% reliable as Delves are not always recognized. But it helps at least.
Last edited by Baertram : 02/01/19 at 10:24 AM.
Report comment to moderator  
Reply With Quote
Unread 02/01/19, 06:36 AM  
zelenin

Forum posts: 0
File comments: 44
Uploads: 0
feature request:
add functions GetCurrentZone(), IsPublicDungeon(), IsDelvel(), IsTrial(), IsGroupDungeon() etc if this seems possible.
Report comment to moderator  
Reply With Quote
Unread 01/13/19, 08:11 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2064
File comments: 2207
Uploads: 55
New beta version 0.3:

Code:
-Fixed localized zone data overwritten (corrected manifest txt)
-Added Japanese translations
-Added Russian translations
-Added ## AddOnVersion tag to manifest txt
-Added function to get localized zoneNames and their zoneIds by help of a search String (zone name) and search language:
--Get the localized zone names matching to a localized search string
-->searchStr: The String with the search value of a zone name (using searchLanguage)
-->searchLanguage: The langauge to search the searchStr variable in Format example: "en". Can be nil (<nilable>)! If the searchLangauge is nil the client language will be taken as searchLanguage.
-->returnLanguage: The language for the translated results. e.g. you search for "Ostmar" with search language "de" and the return language "en". The result will be the "Eastmarch" zone.
--->Returns table containing the zoneId as table key and the localized (in language: returnLanguage) full zone name, matching to the search string, as table value
function lib:GetZoneNameByLocalizedSearchString(searchStr, searchLanguage, returnLanguage)

-Added: Slash commans /lzt or /transz:
Enter a zone name afterwards (in your client language) or choose it from the autocompletion list.
Press tab or space to chose the zonename, and you'll see another auto completion which will provide you the translations of this zone to other languages.
Chosing an entry will put the translated zone name into the chat.

-Added slash commands to search in your desired language:
/lztde or /transzde: German
/lzten or /transzen: English
/lztfr or /transzfr: French
/lztjp or /transzjp: Japanese
/lztru or /transzru: Russian





You are able to download and test it here:
LibZone v0.3 beta
Last edited by Baertram : 01/21/19 at 04:13 PM.
Report comment to moderator  
Reply With Quote
Unread 10/15/18, 11:51 AM  
Baertram
 
Baertram's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2064
File comments: 2207
Uploads: 55
Be sure to include the LibZone.txt file in your addon if you embed this library into your addon or your savedvariables won't work properly!
-> Be sure to remove the LibStub folder and files + the call to it from LibZone.txt as well if you already have LibStub added to your addon then!

And do not forget to add LibZone to your addon's .txt manifest file:
##OptionalDependsOn: LibZone

Non-official Game client languages or client language "jp"
If you are using a game client which uses another language then "de", "en", "fr" feel freee to send me your SavedVariables so I can add your client language to the LibZone_Data.lua file for next versions!
Last edited by Baertram : 10/15/18 at 11:52 AM.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: