Thread Tools Display Modes
08/02/16, 11:49 AM   #1
kerb9729
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 56
A plea to ZOS

Dear ZOS API devs,

I'd love to be able to code my addon so that if I take a break for 6 months, it keeps working as new zones are added.

Please give us a way to query the zones accessible to a player. Currently I hardcode some zone ids, which makes extra work when new zones are added because I need to update my addon when new content is added to keep it working.

Currently we can halfway achieve this with GetNumZonesForDifficultyLevel and GetCadwellZoneInfo
However, DLC zones aren't included, so must be hard coded.
The beginner zones are not included, either. I don't so much mind hardcoding those because they are unlikely to change.

Hopefully I'm overlooking something and one of the experienced addon authors will tell me "Just do it this way, stupid!"
but if not, please consider my request. Thank you.

Signed: An addon dev with not enough free time who could really use a way to query a list of zones available/accessible to a character
  Reply With Quote
08/02/16, 12:44 PM   #2
Ayantir
 
Ayantir's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2014
Posts: 1,019
There's a guy which add things in wiki.

http://wiki.esoui.com/Maps
http://wiki.esoui.com/Zones

I could help.
  Reply With Quote
08/02/16, 01:56 PM   #3
ZOS_ChipHilseberg
ZOS Staff!
Premium Member
Yes this person is from ZeniMax!
Join Date: Oct 2014
Posts: 551
Can you give me an example of the API function you'd like to see added?
  Reply With Quote
08/02/16, 02:00 PM   #4
votan
 
votan's Avatar
AddOn Author - Click to view addons
Join Date: Oct 2014
Posts: 577
There are the functions:
* GetZoneIndex(*integer* _zoneId_)
** _Returns:_ *luaindex* _zoneIndex_

* GetZoneId(*luaindex* _zoneIndex_)
** _Returns:_ *integer* _zoneId_

* GetZoneNameByIndex(*luaindex* _zoneIndex_)
** _Returns:_ *string* _zoneName_

* GetUnitZoneIndex(*string* _unitTag_)
** _Returns:_ *luaindex:nilable* _zoneIndex_

for example:
local zoneId = GetZoneId(GetUnitZoneIndex("player"))

zoneId is promised to be more stable than zoneIndex.
  Reply With Quote
08/02/16, 02:15 PM   #5
sirinsidiator
 
sirinsidiator's Avatar
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 1,566
and a mapping between ZoneId/Index and MapId/Index would also be great
  Reply With Quote
08/03/16, 10:05 AM   #6
kerb9729
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 56
After thinking about it some more, I'm modifying my request =P

Example:
One of my guildmates is in a zone which has zoneid 1234

If I can't access (fast travel to) that zone for whatever reason, I want to filter this guildmate from my list of possible fast travel destinations.


A function like:
isZoneUnlocked(zoneid)

or something similar which returns a boolean would do everything I need.

The TLDR:
Currently I make a list of major accessible zones and filter what my addon displays based on that list.
But creating the list is problematic without hardcoding. If I had a function such as the one above, I wouldn't need to make a list at all. Well technically I guess it's a dictionary. But you get the point.

In case someone did need to create a list of zones, (and assuming there aren't gaps in zoneids), then at least a function like

getMaxZoneId()

would be helpful.
  Reply With Quote
08/03/16, 10:38 AM   #7
Ayantir
 
Ayantir's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2014
Posts: 1,019
You have


GetUnitAlliance() , GetGuildMemberCharacterInfo() , GetFriendCharacterInfo() to known alliance

Then :

GetCadwellProgressionLevel() for base zones

Then for DLC :

Originally Posted by Ayantir View Post

491 - SoH
306 - Dark brotherhood
254 - Thieves Guild
215 - Orsinium
154 - Imperial City

List : http://wiki.esoui.com/Collectibles

For the list :
Lua Code:
  1. local name, _, numCollectibles, unlockedCollectibles, _, _, collectibleCategoryType = GetCollectibleCategoryInfo(COLLECTIBLE_CATEGORY_TYPE_DLC)
  2.  
  3. for i=1, numCollectibles do
  4.     local collectibleId = GetCollectibleId(COLLECTIBLE_CATEGORY_TYPE_DLC, nil, i)
  5.     local collectibleName, _, _, _, unlocked = GetCollectibleInfo(collectibleId) -- Will return true or false. If the user unlocked throught ESO+ without buying DLC it will return true.
  6.     d("DLC ".. collectibleName .. "( ".. collectibleId .. ") unlocked : " .. tostring(unlocked))
  7. end
Edit : there is also dungeons you can't go in, look at the Zones page on esoui wiki. this include trials, dungeons and group dungeons in craglorn too.

Last edited by Ayantir : 08/03/16 at 10:43 AM.
  Reply With Quote
08/12/16, 05:38 PM   #8
kerb9729
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 56
Thank you Ayantir

How was teh zone list at http://wiki.esoui.com/Zones generated?
  Reply With Quote
08/12/16, 06:32 PM   #9
Ayantir
 
Ayantir's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2014
Posts: 1,019
Lua Code:
  1. for zoneIndex = 1, 9999 do
  2.     local zoneName = GetZoneNameByIndex(zoneIndex)
  3.     if zoneName ~= "" then
  4.         GLOBAL_DUMPER[zoneIndex] = zoneName
  5.     end
  6. end

PS: You should not use zoneIndex as they move at each DLC, but zoneId. You have few functions to get zoneId from zoneIndex and viceversa. (generally 2/3 index of public playable zones are moved)

Last edited by Ayantir : 08/12/16 at 06:57 PM.
  Reply With Quote
08/19/16, 12:16 PM   #10
kerb9729
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 56
I was playing around with this today, and I find that GetZoneIndex returns "1" for

Gold Coast (zoneid 518)
Hew's Bane (zoneid 512)
Craglorn (zoneid 352)
Khenarthi's Roost (zoneid 293)

and quite a few others actually.

For some zones, it returns a number like you'd expect.

I'm calling bug.

Last edited by kerb9729 : 08/19/16 at 12:19 PM. Reason: clarification
  Reply With Quote
09/03/16, 07:22 AM   #11
Ayantir
 
Ayantir's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2014
Posts: 1,019
Originally Posted by kerb9729 View Post
I was playing around with this today, and I find that GetZoneIndex returns "1" for

Gold Coast (zoneid 518)
Hew's Bane (zoneid 512)
Craglorn (zoneid 352)
Khenarthi's Roost (zoneid 293)

and quite a few others actually.

For some zones, it returns a number like you'd expect.

I'm calling bug.
While doing the 100017 dump, I looked at this. In fact , it's working as intended.
If the zoneId don't have a zoneIndex, it returns 1.

You have the complete list of zoneId on http://wiki.esoui.com/Zones now.

zoneId which exists without zoneIndex link are listed as ID_WITHOUT_INDEX.
PS: I've added the #1 but in fact, it should not, it's the dummy value.


Lua Code:
  1. [1] = "ID_WITHOUT_INDEX",
  2.     [2] = "ID_WITHOUT_INDEX",
  3.     [4] = "ID_WITHOUT_INDEX",
  4.     [5] = "ID_WITHOUT_INDEX",
  5.     [6] = "ID_WITHOUT_INDEX",
  6.     [7] = "ID_WITHOUT_INDEX",
  7.     [8] = "ID_WITHOUT_INDEX",
  8.     [9] = "ID_WITHOUT_INDEX",
  9.     [10] = "ID_WITHOUT_INDEX",
  10.     [12] = "ID_WITHOUT_INDEX",
  11.     [13] = "ID_WITHOUT_INDEX",
  12.     [14] = "ID_WITHOUT_INDEX",
  13.     [15] = "ID_WITHOUT_INDEX",
  14.     [16] = "ID_WITHOUT_INDEX",
  15.     [17] = "ID_WITHOUT_INDEX",
  16.     [18] = "ID_WITHOUT_INDEX",
  17.     [21] = "ID_WITHOUT_INDEX",
  18.     [23] = "ID_WITHOUT_INDEX",
  19.     [24] = "ID_WITHOUT_INDEX",
  20.     [25] = "ID_WITHOUT_INDEX",
  21.     [26] = "ID_WITHOUT_INDEX",
  22.     [27] = "ID_WITHOUT_INDEX",
  23.     [28] = "ID_WITHOUT_INDEX",
  24.     [29] = "ID_WITHOUT_INDEX",
  25.     [30] = "ID_WITHOUT_INDEX",
  26.     [32] = "ID_WITHOUT_INDEX",
  27.     [33] = "ID_WITHOUT_INDEX",
  28.     [34] = "ID_WITHOUT_INDEX",
  29.     [35] = "ID_WITHOUT_INDEX",
  30.     [36] = "ID_WITHOUT_INDEX",
  31.     [37] = "ID_WITHOUT_INDEX",
  32.     [39] = "ID_WITHOUT_INDEX",
  33.     [40] = "ID_WITHOUT_INDEX",
  34.     [42] = "ID_WITHOUT_INDEX",
  35.     [43] = "ID_WITHOUT_INDEX",
  36.     [44] = "ID_WITHOUT_INDEX",
  37.     [45] = "ID_WITHOUT_INDEX",
  38.     [46] = "ID_WITHOUT_INDEX",
  39.     [47] = "ID_WITHOUT_INDEX",
  40.     [48] = "ID_WITHOUT_INDEX",
  41.     [49] = "ID_WITHOUT_INDEX",
  42.     [50] = "ID_WITHOUT_INDEX",
  43.     [51] = "ID_WITHOUT_INDEX",
  44.     [52] = "ID_WITHOUT_INDEX",
  45.     [53] = "ID_WITHOUT_INDEX",
  46.     [54] = "ID_WITHOUT_INDEX",
  47.     [55] = "ID_WITHOUT_INDEX",
  48.     [56] = "ID_WITHOUT_INDEX",
  49.     [59] = "ID_WITHOUT_INDEX",
  50.     [60] = "ID_WITHOUT_INDEX",
  51.     [61] = "ID_WITHOUT_INDEX",
  52.     [62] = "ID_WITHOUT_INDEX",
  53.     [65] = "ID_WITHOUT_INDEX",
  54.     [66] = "ID_WITHOUT_INDEX",
  55.     [67] = "ID_WITHOUT_INDEX",
  56.     [68] = "ID_WITHOUT_INDEX",
  57.     [69] = "ID_WITHOUT_INDEX",
  58.     [70] = "ID_WITHOUT_INDEX",
  59.     [71] = "ID_WITHOUT_INDEX",
  60.     [72] = "ID_WITHOUT_INDEX",
  61.     [73] = "ID_WITHOUT_INDEX",
  62.     [74] = "ID_WITHOUT_INDEX",
  63.     [75] = "ID_WITHOUT_INDEX",
  64.     [76] = "ID_WITHOUT_INDEX",
  65.     [77] = "ID_WITHOUT_INDEX",
  66.     [78] = "ID_WITHOUT_INDEX",
  67.     [79] = "ID_WITHOUT_INDEX",
  68.     [80] = "ID_WITHOUT_INDEX",
  69.     [81] = "ID_WITHOUT_INDEX",
  70.     [82] = "ID_WITHOUT_INDEX",
  71.     [83] = "ID_WITHOUT_INDEX",
  72.     [84] = "ID_WITHOUT_INDEX",
  73.     [85] = "ID_WITHOUT_INDEX",
  74.     [86] = "ID_WITHOUT_INDEX",
  75.     [87] = "ID_WITHOUT_INDEX",
  76.     [88] = "ID_WITHOUT_INDEX",
  77.     [89] = "ID_WITHOUT_INDEX",
  78.     [90] = "ID_WITHOUT_INDEX",
  79.     [91] = "ID_WITHOUT_INDEX",
  80.     [93] = "ID_WITHOUT_INDEX",
  81.     [94] = "ID_WITHOUT_INDEX",
  82.     [95] = "ID_WITHOUT_INDEX",
  83.     [96] = "ID_WITHOUT_INDEX",
  84.     [97] = "ID_WITHOUT_INDEX",
  85.     [98] = "ID_WITHOUT_INDEX",
  86.     [99] = "ID_WITHOUT_INDEX",
  87.     [100] = "ID_WITHOUT_INDEX",
  88.     [102] = "ID_WITHOUT_INDEX",
  89.     [105] = "ID_WITHOUT_INDEX",
  90.     [106] = "ID_WITHOUT_INDEX",
  91.     [109] = "ID_WITHOUT_INDEX",
  92.     [110] = "ID_WITHOUT_INDEX",
  93.     [111] = "ID_WITHOUT_INDEX",
  94.     [112] = "ID_WITHOUT_INDEX",
  95.     [113] = "ID_WITHOUT_INDEX",
  96.     [114] = "ID_WITHOUT_INDEX",
  97.     [115] = "ID_WITHOUT_INDEX",
  98.     [116] = "ID_WITHOUT_INDEX",
  99.     [118] = "ID_WITHOUT_INDEX",
  100.     [119] = "ID_WITHOUT_INDEX",
  101.     [120] = "ID_WITHOUT_INDEX",
  102.     [121] = "ID_WITHOUT_INDEX",
  103.     [122] = "ID_WITHOUT_INDEX",
  104.     [123] = "ID_WITHOUT_INDEX",
  105.     [125] = "ID_WITHOUT_INDEX",
  106.     [127] = "ID_WITHOUT_INDEX",
  107.     [128] = "ID_WITHOUT_INDEX",
  108.     [129] = "ID_WITHOUT_INDEX",
  109.     [132] = "ID_WITHOUT_INDEX",
  110.     [133] = "ID_WITHOUT_INDEX",
  111.     [135] = "ID_WITHOUT_INDEX",
  112.     [136] = "ID_WITHOUT_INDEX",
  113.     [139] = "ID_WITHOUT_INDEX",
  114.     [140] = "ID_WITHOUT_INDEX",
  115.     [141] = "ID_WITHOUT_INDEX",
  116.     [143] = "ID_WITHOUT_INDEX",
  117.     [145] = "ID_WITHOUT_INDEX",
  118.     [147] = "ID_WITHOUT_INDEX",
  119.     [149] = "ID_WITHOUT_INDEX",
  120.     [150] = "ID_WITHOUT_INDEX",
  121.     [151] = "ID_WITHOUT_INDEX",
  122.     [152] = "ID_WITHOUT_INDEX",
  123.     [153] = "ID_WITHOUT_INDEX",
  124.     [154] = "ID_WITHOUT_INDEX",
  125.     [155] = "ID_WITHOUT_INDEX",
  126.     [156] = "ID_WITHOUT_INDEX",
  127.     [157] = "ID_WITHOUT_INDEX",
  128.     [158] = "ID_WITHOUT_INDEX",
  129.     [160] = "ID_WITHOUT_INDEX",
  130.     [161] = "ID_WITHOUT_INDEX",
  131.     [163] = "ID_WITHOUT_INDEX",
  132.     [164] = "ID_WITHOUT_INDEX",
  133.     [165] = "ID_WITHOUT_INDEX",
  134.     [167] = "ID_WITHOUT_INDEX",
  135.     [170] = "ID_WITHOUT_INDEX",
  136.     [171] = "ID_WITHOUT_INDEX",
  137.     [172] = "ID_WITHOUT_INDEX",
  138.     [173] = "ID_WITHOUT_INDEX",
  139.     [174] = "ID_WITHOUT_INDEX",
  140.     [175] = "ID_WITHOUT_INDEX",
  141.     [177] = "ID_WITHOUT_INDEX",
  142.     [178] = "ID_WITHOUT_INDEX",
  143.     [179] = "ID_WITHOUT_INDEX",
  144.     [180] = "ID_WITHOUT_INDEX",
  145.     [182] = "ID_WITHOUT_INDEX",
  146.     [183] = "ID_WITHOUT_INDEX",
  147.     [184] = "ID_WITHOUT_INDEX",
  148.     [185] = "ID_WITHOUT_INDEX",
  149.     [186] = "ID_WITHOUT_INDEX",
  150.     [194] = "ID_WITHOUT_INDEX",
  151.     [195] = "ID_WITHOUT_INDEX",
  152.     [196] = "ID_WITHOUT_INDEX",
  153.     [197] = "ID_WITHOUT_INDEX",
  154.     [198] = "ID_WITHOUT_INDEX",
  155.     [202] = "ID_WITHOUT_INDEX",
  156.     [204] = "ID_WITHOUT_INDEX",
  157.     [205] = "ID_WITHOUT_INDEX",
  158.     [206] = "ID_WITHOUT_INDEX",
  159.     [210] = "ID_WITHOUT_INDEX",
  160.     [211] = "ID_WITHOUT_INDEX",
  161.     [220] = "ID_WITHOUT_INDEX",
  162.     [221] = "ID_WITHOUT_INDEX",
  163.     [225] = "ID_WITHOUT_INDEX",
  164.     [226] = "ID_WITHOUT_INDEX",
  165.     [230] = "ID_WITHOUT_INDEX",
  166.     [240] = "ID_WITHOUT_INDEX",
  167.     [244] = "ID_WITHOUT_INDEX",
  168.     [251] = "ID_WITHOUT_INDEX",
  169.     [276] = "ID_WITHOUT_INDEX",
  170.     [277] = "ID_WITHOUT_INDEX",
  171.     [278] = "ID_WITHOUT_INDEX",
  172.     [282] = "ID_WITHOUT_INDEX",
  173.     [285] = "ID_WITHOUT_INDEX",
  174.     [286] = "ID_WITHOUT_INDEX",
  175.     [292] = "ID_WITHOUT_INDEX",
  176.     [293] = "ID_WITHOUT_INDEX",
  177.     [294] = "ID_WITHOUT_INDEX",
  178.     [295] = "ID_WITHOUT_INDEX",
  179.     [297] = "ID_WITHOUT_INDEX",
  180.     [298] = "ID_WITHOUT_INDEX",
  181.     [299] = "ID_WITHOUT_INDEX",
  182.     [300] = "ID_WITHOUT_INDEX",
  183.     [301] = "ID_WITHOUT_INDEX",
  184.     [302] = "ID_WITHOUT_INDEX",
  185.     [303] = "ID_WITHOUT_INDEX",
  186.     [304] = "ID_WITHOUT_INDEX",
  187.     [305] = "ID_WITHOUT_INDEX",
  188.     [307] = "ID_WITHOUT_INDEX",
  189.     [340] = "ID_WITHOUT_INDEX",
  190.     [342] = "ID_WITHOUT_INDEX",
  191.     [343] = "ID_WITHOUT_INDEX",
  192.     [344] = "ID_WITHOUT_INDEX",
  193.     [345] = "ID_WITHOUT_INDEX",
  194.     [348] = "ID_WITHOUT_INDEX",
  195.     [349] = "ID_WITHOUT_INDEX",
  196.     [350] = "ID_WITHOUT_INDEX",
  197.     [351] = "ID_WITHOUT_INDEX",
  198.     [352] = "ID_WITHOUT_INDEX",
  199.     [355] = "ID_WITHOUT_INDEX",
  200.     [356] = "ID_WITHOUT_INDEX",
  201.     [357] = "ID_WITHOUT_INDEX",
  202.     [358] = "ID_WITHOUT_INDEX",
  203.     [373] = "ID_WITHOUT_INDEX",
  204.     [384] = "ID_WITHOUT_INDEX",
  205.     [391] = "ID_WITHOUT_INDEX",
  206.     [474] = "ID_WITHOUT_INDEX",
  207.     [476] = "ID_WITHOUT_INDEX",
  208.     [479] = "ID_WITHOUT_INDEX",
  209.     [483] = "ID_WITHOUT_INDEX",
  210.     [488] = "ID_WITHOUT_INDEX",
  211.     [489] = "ID_WITHOUT_INDEX",
  212.     [490] = "ID_WITHOUT_INDEX",
  213.     [491] = "ID_WITHOUT_INDEX",
  214.     [508] = "ID_WITHOUT_INDEX",
  215.     [509] = "ID_WITHOUT_INDEX",
  216.     [510] = "ID_WITHOUT_INDEX",
  217.     [511] = "ID_WITHOUT_INDEX",
  218.     [513] = "ID_WITHOUT_INDEX",
  219.     [514] = "ID_WITHOUT_INDEX",
  220.     [515] = "ID_WITHOUT_INDEX",
  221.     [516] = "ID_WITHOUT_INDEX",
  222.     [517] = "ID_WITHOUT_INDEX",
  223.     [518] = "ID_WITHOUT_INDEX",
  224.     [519] = "ID_WITHOUT_INDEX",

Last edited by Ayantir : 09/03/16 at 07:25 AM.
  Reply With Quote
10/06/16, 01:01 PM   #12
kerb9729
AddOn Author - Click to view addons
Join Date: Apr 2014
Posts: 56
Thanks for this Ayantir!
  Reply With Quote

ESOUI » Developer Discussions » General Authoring Discussion » A plea to ZOS

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