Location.cs 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Numerics;
  5. using FFXIVClientStructs.FFXIV.Client.UI.Agent;
  6. using Lumina.Excel.GeneratedSheets;
  7. using MapType = FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType;
  8. namespace HuntBuddy;
  9. public static class Location {
  10. public class PositionInfo {
  11. public float X {
  12. get;
  13. init;
  14. }
  15. public float Y {
  16. get;
  17. init;
  18. }
  19. public Vector2 Coordinate => new(this.X, this.Y);
  20. }
  21. // MobHuntId as key
  22. public static readonly Dictionary<uint, PositionInfo> Database = new() {
  23. // Heavensward
  24. // Coerthas Western Highlands
  25. { 03481, new PositionInfo { X = 15.0f, Y = 12.0f } }, // Archaeornis
  26. { 03472, new PositionInfo { X = 32.0f, Y = 24.0f } }, // Bergthurs
  27. { 03471, new PositionInfo { X = 30.0f, Y = 31.0f } }, // Deepeye
  28. { 03476, new PositionInfo { X = 28.0f, Y = 12.0f } }, // Frost Grenade
  29. { 03480, new PositionInfo { X = 11.0f, Y = 17.0f } }, // Gelato
  30. { 03484, new PositionInfo { X = 10.0f, Y = 14.0f } }, // Ice Commander
  31. { 03475, new PositionInfo { X = 23.0f, Y = 16.0f } }, // Icetrap
  32. { 03487, new PositionInfo { X = 28.0f, Y = 09.0f } }, // Inland Tursus
  33. { 03483, new PositionInfo { X = 19.0f, Y = 29.0f } }, // Lone Yeti
  34. { 03485, new PositionInfo { X = 22.0f, Y = 21.0f } }, // Polar Bear
  35. { 03482, new PositionInfo { X = 16.0f, Y = 20.0f } }, // Rheum
  36. { 03473, new PositionInfo { X = 26.0f, Y = 24.0f } }, // Silver Wolf
  37. { 03490, new PositionInfo { X = 25.0f, Y = 32.0f } }, // Slate Yeti
  38. { 03478, new PositionInfo { X = 25.0f, Y = 12.0f } }, // Slush Zoblyn
  39. { 03470, new PositionInfo { X = 30.0f, Y = 32.0f } }, // Steinbock
  40. { 03474, new PositionInfo { X = 31.0f, Y = 20.0f } }, // Upland Mylodon
  41. { 03493, new PositionInfo { X = 09.0f, Y = 09.0f } }, // Vindthurs
  42. { 03479, new PositionInfo { X = 15.0f, Y = 17.0f } }, // Wooly Yak
  43. // The Sea of Clouds
  44. { 03524, new PositionInfo { X = 21.0f, Y = 06.0f } }, // Anzu
  45. { 03498, new PositionInfo { X = 28.0f, Y = 29.0f } }, // Cloudworm
  46. { 03496, new PositionInfo { X = 27.0f, Y = 30.0f } }, // Conodont
  47. { 03505, new PositionInfo { X = 19.0f, Y = 30.0f } }, // Dhalmel
  48. { 03511, new PositionInfo { X = 17.0f, Y = 10.0f } }, // Endymion
  49. { 03494, new PositionInfo { X = 11.0f, Y = 33.0f } }, // Gaelicat
  50. { 03495, new PositionInfo { X = 16.0f, Y = 36.0f } }, // Gastornis
  51. { 03512, new PositionInfo { X = 23.0f, Y = 09.0f } }, // Groundskeeper
  52. { 03506, new PositionInfo { X = 20.0f, Y = 30.0f } }, // Korrigan
  53. { 03501, new PositionInfo { X = 36.0f, Y = 24.0f } }, // Lan'laii Gundu
  54. { 03502, new PositionInfo { X = 36.0f, Y = 20.0f } }, // Nat'laii Gundu
  55. { 03516, new PositionInfo { X = 28.0f, Y = 10.0f } }, // Nat'laii Vundu
  56. { 03497, new PositionInfo { X = 29.0f, Y = 30.0f } }, // Obdella
  57. { 03499, new PositionInfo { X = 20.0f, Y = 34.0f } }, // Paissa
  58. { 03500, new PositionInfo { X = 36.0f, Y = 24.0f } }, // Sanuwa
  59. { 03514, new PositionInfo { X = 30.0f, Y = 14.0f } }, // Sanuwa Vundu
  60. { 03525, new PositionInfo { X = 21.0f, Y = 07.0f } }, // Toco Toco
  61. { 03523, new PositionInfo { X = 14.0f, Y = 07.0f } }, // Tsanahale
  62. { 03503, new PositionInfo { X = 35.0f, Y = 25.0f } }, // Vuk'laii Gundu
  63. { 03513, new PositionInfo { X = 18.0f, Y = 17.0f } }, // Vundu Totem
  64. { 03509, new PositionInfo { X = 09.0f, Y = 16.0f } }, // Window Wamoura
  65. { 03510, new PositionInfo { X = 10.0f, Y = 17.0f } }, // Window Wamouracampa
  66. { 03504, new PositionInfo { X = 20.0f, Y = 38.0f } }, // Wisent
  67. // The Dravanian Forelands
  68. { 03565, new PositionInfo { X = 30.0f, Y = 16.0f } }, // Bandersnatch
  69. { 03566, new PositionInfo { X = 26.0f, Y = 11.0f } }, // Brown Bear
  70. { 03570, new PositionInfo { X = 28.0f, Y = 22.0f } }, // Clearwater Nanka
  71. { 03569, new PositionInfo { X = 27.0f, Y = 25.0f } }, // Clearwater Ninki Nanka
  72. { 03572, new PositionInfo { X = 28.0f, Y = 32.0f } }, // Dragonfly Watcher
  73. { 03567, new PositionInfo { X = 27.0f, Y = 22.0f } }, // Dravanian Aevis
  74. { 03576, new PositionInfo { X = 16.0f, Y = 33.0f } }, // Dravanian Wyvern
  75. { 03563, new PositionInfo { X = 36.0f, Y = 24.0f } }, // Feather Flea
  76. { 03578, new PositionInfo { X = 17.0f, Y = 26.0f } }, // Forelands Hippocerf
  77. { 03579, new PositionInfo { X = 18.0f, Y = 12.0f } }, // Gallimimus
  78. { 03571, new PositionInfo { X = 25.0f, Y = 29.0f } }, // Loaghtan
  79. { 03592, new PositionInfo { X = 27.0f, Y = 35.0f } }, // Loth Cultivator
  80. { 03590, new PositionInfo { X = 27.0f, Y = 35.0f } }, // Loth Firedrone
  81. { 03591, new PositionInfo { X = 29.0f, Y = 36.0f } }, // Loth Steeldrone
  82. { 03568, new PositionInfo { X = 28.0f, Y = 25.0f } }, // Melia
  83. { 03577, new PositionInfo { X = 18.0f, Y = 31.0f } }, // Miacid
  84. { 03555, new PositionInfo { X = 18.0f, Y = 12.0f } }, // Syricta
  85. { 03586, new PositionInfo { X = 31.0f, Y = 08.0f } }, // Thunder Dragon
  86. { 03582, new PositionInfo { X = 13.0f, Y = 15.0f } }, // Tyrannosaur
  87. { 03581, new PositionInfo { X = 13.0f, Y = 14.0f } }, // Vinegaroon
  88. { 03564, new PositionInfo { X = 35.0f, Y = 21.0f } }, // Wild Chocobo
  89. // The Churning Mists
  90. { 03619, new PositionInfo { X = 17.0f, Y = 27.0f } }, // Amphiptere
  91. { 03620, new PositionInfo { X = 24.0f, Y = 26.0f } }, // Archaeosaur
  92. { 03625, new PositionInfo { X = 18.0f, Y = 24.0f } }, // Bladed Vinegaroon
  93. { 03630, new PositionInfo { X = 25.0f, Y = 10.0f } }, // Blood Dragon
  94. { 03631, new PositionInfo { X = 09.0f, Y = 36.0f } }, // Cloud Aevis
  95. { 03629, new PositionInfo { X = 08.0f, Y = 19.0f } }, // Diresaur
  96. { 03623, new PositionInfo { X = 20.0f, Y = 12.0f } }, // Dragonet
  97. { 03626, new PositionInfo { X = 34.0f, Y = 21.0f } }, // Elder Syricta
  98. { 03628, new PositionInfo { X = 25.0f, Y = 30.0f } }, // Elder Wyvern
  99. { 03668, new PositionInfo { X = 10.0f, Y = 20.0f } }, // Gnarled Melia
  100. { 03614, new PositionInfo { X = 34.0f, Y = 28.0f } }, // Hropken
  101. { 03621, new PositionInfo { X = 09.0f, Y = 12.0f } }, // Limestone Golem
  102. { 03618, new PositionInfo { X = 20.0f, Y = 28.0f } }, // Lower Skylord
  103. { 03627, new PositionInfo { X = 33.0f, Y = 31.0f } }, // Mists Biast
  104. { 03622, new PositionInfo { X = 10.0f, Y = 18.0f } }, // Mists Drake
  105. { 03617, new PositionInfo { X = 23.0f, Y = 25.0f } }, // Moss Dragon
  106. { 03613, new PositionInfo { X = 28.0f, Y = 32.0f } }, // Sankchinni
  107. { 03615, new PositionInfo { X = 32.0f, Y = 15.0f } }, // Tulihand
  108. { 03624, new PositionInfo { X = 38.0f, Y = 17.7f } }, // Vouivre
  109. { 03616, new PositionInfo { X = 26.0f, Y = 20.0f } }, // Wadjet
  110. // The Dravanian Hinterlands
  111. { 03612, new PositionInfo { X = 25.0f, Y = 37.0f } }, // Bifericeras
  112. { 03609, new PositionInfo { X = 18.0f, Y = 36.0f } }, // Cockatrice
  113. { 03603, new PositionInfo { X = 12.0f, Y = 16.0f } }, // Crawler
  114. { 03594, new PositionInfo { X = 24.0f, Y = 21.0f } }, // Damselfly
  115. { 03598, new PositionInfo { X = 31.0f, Y = 22.0f } }, // Goblin Brandisher
  116. { 03601, new PositionInfo { X = 31.0f, Y = 22.0f } }, // Goblin Glider
  117. { 03600, new PositionInfo { X = 31.0f, Y = 22.0f } }, // Goblin Sharpshooter
  118. { 03599, new PositionInfo { X = 31.0f, Y = 22.0f } }, // Goblin Tinkerer
  119. { 03605, new PositionInfo { X = 10.0f, Y = 21.0f } }, // Great Morbol
  120. { 03597, new PositionInfo { X = 37.0f, Y = 24.0f } }, // Narbrooi
  121. { 03610, new PositionInfo { X = 17.0f, Y = 33.0f } }, // Okeanis
  122. { 03608, new PositionInfo { X = 12.0f, Y = 33.0f } }, // Opken
  123. { 03604, new PositionInfo { X = 11.0f, Y = 27.0f } }, // Orn Kite
  124. { 03607, new PositionInfo { X = 09.0f, Y = 34.0f } }, // Poroggo
  125. { 03595, new PositionInfo { X = 28.0f, Y = 27.0f } }, // Ratel
  126. { 03611, new PositionInfo { X = 12.0f, Y = 32.0f } }, // Sun Leech
  127. { 03593, new PositionInfo { X = 21.0f, Y = 16.0f } }, // Tarantula Hawk
  128. { 03596, new PositionInfo { X = 34.0f, Y = 19.0f } }, // Wildebeest
  129. // Azys Lla
  130. { 03545, new PositionInfo { X = 35.0f, Y = 24.0f } }, // 6th Legion Vanguard
  131. { 03552, new PositionInfo { X = 27.0f, Y = 33.0f } }, // Adamantite Claw
  132. { 03540, new PositionInfo { X = 31.0f, Y = 06.0f } }, // Allagan Chimera
  133. { 03534, new PositionInfo { X = 15.0f, Y = 13.0f } }, // Clockwork Engineer
  134. { 03536, new PositionInfo { X = 13.0f, Y = 08.0f } }, // Clockwork Harvestman
  135. { 03535, new PositionInfo { X = 18.0f, Y = 13.0f } }, // Clockwork Paladin
  136. { 03542, new PositionInfo { X = 35.0f, Y = 09.0f } }, // Corpse Flower
  137. { 03541, new PositionInfo { X = 29.5f, Y = 12.0f } }, // Empuse
  138. { 03537, new PositionInfo { X = 13.0f, Y = 17.0f } }, // Enforcement Droid
  139. { 03539, new PositionInfo { X = 27.0f, Y = 11.0f } }, // Lamia Cybrid
  140. { 03538, new PositionInfo { X = 28.0f, Y = 13.0f } }, // Lamia Thelytoke
  141. { 03580, new PositionInfo { X = 13.0f, Y = 33.0f } }, // Lesser Hydra
  142. { 03559, new PositionInfo { X = 18.0f, Y = 31.0f } }, // Meracydian Amphiptere
  143. { 03557, new PositionInfo { X = 08.0f, Y = 32.0f } }, // Meracydian Brobinyak
  144. { 03560, new PositionInfo { X = 08.0f, Y = 27.0f } }, // Meracydian Dragon
  145. { 03558, new PositionInfo { X = 06.0f, Y = 35.0f } }, // Meracydian Dragonet
  146. { 03554, new PositionInfo { X = 15.0f, Y = 29.0f } }, // Meracydian Falak
  147. { 03556, new PositionInfo { X = 14.0f, Y = 35.0f } }, // Meracydian Vouivre
  148. { 03533, new PositionInfo { X = 12.0f, Y = 15.0f } }, // Owlbear
  149. { 03543, new PositionInfo { X = 35.0f, Y = 08.0f } }, // Proto-naga
  150. { 03544, new PositionInfo { X = 33.0f, Y = 13.0f } }, // Reptoid
  151. { 03532, new PositionInfo { X = 09.0f, Y = 12.0f } }, // Snapper-rook
  152. // Stormblood
  153. // The Fringes
  154. { 05685, new PositionInfo { X = 10.0f, Y = 27.0f } }, // Diakka
  155. { 05674, new PositionInfo { X = 22.0f, Y = 16.0f } }, // Foper
  156. { 05697, new PositionInfo { X = 25.0f, Y = 27.0f } }, // Gazelle
  157. { 05676, new PositionInfo { X = 11.6f, Y = 12.0f } }, // Gazelle Hawk
  158. { 05679, new PositionInfo { X = 25.0f, Y = 15.0f } }, // Gelid Bhoot
  159. { 05686, new PositionInfo { X = 10.0f, Y = 27.0f } }, // Goosefish
  160. { 05671, new PositionInfo { X = 11.0f, Y = 11.0f } }, // Leshy
  161. { 05687, new PositionInfo { X = 11.0f, Y = 17.0f } }, // Mossling
  162. { 05683, new PositionInfo { X = 12.0f, Y = 17.0f } }, // Mountain Grizzly
  163. { 05691, new PositionInfo { X = 35.0f, Y = 25.0f } }, // Qalyana Brahmin
  164. { 05689, new PositionInfo { X = 35.0f, Y = 25.0f } }, // Qalyana Kshatriya
  165. { 05690, new PositionInfo { X = 35.0f, Y = 25.0f } }, // Qalyana Shudra
  166. { 05688, new PositionInfo { X = 35.0f, Y = 25.0f } }, // Sacred Marid
  167. { 05675, new PositionInfo { X = 10.0f, Y = 12.0f } }, // Sapria
  168. { 05677, new PositionInfo { X = 22.0f, Y = 11.0f } }, // Spinner
  169. { 05693, new PositionInfo { X = 29.0f, Y = 24.0f } }, // Teleoceras
  170. { 05678, new PositionInfo { X = 28.0f, Y = 15.0f } }, // Velodyna Pugil
  171. { 05680, new PositionInfo { X = 17.0f, Y = 10.0f } }, // Velodyna Sarcosuchus
  172. // The Peaks
  173. { 05705, new PositionInfo { X = 25.0f, Y = 11.0f } }, // Crag Claw
  174. { 05701, new PositionInfo { X = 18.7f, Y = 12.9f } }, // Bloodglider
  175. { 05702, new PositionInfo { X = 14.0f, Y = 08.0f } }, // Fluturini
  176. { 05703, new PositionInfo { X = 12.0f, Y = 08.0f } }, // Gyr Abanian Hornbill
  177. { 05713, new PositionInfo { X = 25.0f, Y = 33.0f } }, // Highland Eruca
  178. { 05712, new PositionInfo { X = 24.0f, Y = 29.0f } }, // Jhammel
  179. { 05714, new PositionInfo { X = 15.0f, Y = 27.0f } }, // Kongamato
  180. { 05707, new PositionInfo { X = 34.0f, Y = 09.0f } }, // Marble Urolith
  181. { 05715, new PositionInfo { X = 09.0f, Y = 26.0f } }, // Pantera
  182. { 05708, new PositionInfo { X = 24.0f, Y = 14.0f } }, // Scarab Beetle
  183. { 05711, new PositionInfo { X = 24.0f, Y = 24.0f } }, // True Griffin
  184. // The Ruby Sea
  185. { 05737, new PositionInfo { X = 31.0f, Y = 35.0f } }, // Bombfish
  186. { 05736, new PositionInfo { X = 34.0f, Y = 05.0f } }, // Coralshell
  187. { 05740, new PositionInfo { X = 26.0f, Y = 30.0f } }, // Flying Shark
  188. { 05742, new PositionInfo { X = 23.0f, Y = 33.0f } }, // Gasame
  189. { 05734, new PositionInfo { X = 14.0f, Y = 10.0f } }, // Gyuki
  190. { 05751, new PositionInfo { X = 25.0f, Y = 25.0f } }, // Naked Yumemi
  191. { 05743, new PositionInfo { X = 07.0f, Y = 30.0f } }, // Red Bukan
  192. { 05745, new PositionInfo { X = 08.0f, Y = 28.0f } }, // Red Honkan
  193. { 05744, new PositionInfo { X = 09.5f, Y = 25.2f } }, // Red Hyoe
  194. { 05738, new PositionInfo { X = 33.0f, Y = 11.0f } }, // Sea Serpent
  195. { 05739, new PositionInfo { X = 26.0f, Y = 06.0f } }, // Shiranui
  196. { 05746, new PositionInfo { X = 07.0f, Y = 27.0f } }, // Striped Ray
  197. { 05733, new PositionInfo { X = 29.0f, Y = 37.0f } }, // Tatsunoko
  198. { 05735, new PositionInfo { X = 35.0f, Y = 21.0f } }, // Unkiu
  199. { 05750, new PositionInfo { X = 25.0f, Y = 25.0f } }, // Yumemi
  200. // Yanxia
  201. { 05761, new PositionInfo { X = 18.0f, Y = 31.0f } }, // Bi Fang
  202. { 05769, new PositionInfo { X = 28.0f, Y = 08.0f } }, // Ebisu Catfish
  203. { 05752, new PositionInfo { X = 27.0f, Y = 34.0f } }, // Lupin Bladehand
  204. { 05754, new PositionInfo { X = 24.0f, Y = 32.0f } }, // Lupin Bowhand
  205. { 05753, new PositionInfo { X = 23.0f, Y = 28.0f } }, // Lupin Spearhand
  206. { 05768, new PositionInfo { X = 19.0f, Y = 11.0f } }, // Magatsu Kiyofusa
  207. { 05763, new PositionInfo { X = 33.0f, Y = 17.0f } }, // Minobi
  208. { 05757, new PositionInfo { X = 30.0f, Y = 23.0f } }, // Rhino Beetle
  209. { 05765, new PositionInfo { X = 30.0f, Y = 34.0f } }, // Taoquan
  210. { 05755, new PositionInfo { X = 24.0f, Y = 32.0f } }, // Tenaga
  211. { 05764, new PositionInfo { X = 23.0f, Y = 30.0f } }, // Vanara
  212. { 05762, new PositionInfo { X = 25.0f, Y = 26.0f } }, // Water Serpent
  213. // The Azim Steppe
  214. { 05785, new PositionInfo { X = 15.0f, Y = 19.0f } }, // Baras
  215. { 05788, new PositionInfo { X = 17.0f, Y = 26.0f } }, // Chaochu
  216. { 05777, new PositionInfo { X = 23.0f, Y = 15.0f } }, // Halgai
  217. { 05778, new PositionInfo { X = 16.0f, Y = 11.0f } }, // Khun Chuluu
  218. { 05781, new PositionInfo { X = 31.0f, Y = 17.0f } }, // Mammoth
  219. { 05783, new PositionInfo { X = 12.0f, Y = 29.0f } }, // Manzasiri
  220. { 05775, new PositionInfo { X = 28.0f, Y = 13.0f } }, // Matamata
  221. { 05782, new PositionInfo { X = 09.0f, Y = 21.0f } }, // Matanga
  222. { 05779, new PositionInfo { X = 23.0f, Y = 10.0f } }, // Muu Shuwuu
  223. { 05780, new PositionInfo { X = 34.0f, Y = 18.0f } }, // Purbol
  224. { 05776, new PositionInfo { X = 26.0f, Y = 29.0f } }, // Steppe Dhole
  225. { 05773, new PositionInfo { X = 31.0f, Y = 32.0f } }, // Steppe Dzo
  226. // The Lochs
  227. { 05723, new PositionInfo { X = 18.0f, Y = 32.0f } }, // Abaddon
  228. { 05725, new PositionInfo { X = 26.0f, Y = 11.0f } }, // Abalathian Minotaur
  229. { 05720, new PositionInfo { X = 25.0f, Y = 18.0f } }, // Chelone
  230. { 05727, new PositionInfo { X = 29.0f, Y = 15.0f } }, // Creeping Edila
  231. { 05729, new PositionInfo { X = 05.7f, Y = 26.7f } }, // Dark Clay Beast
  232. { 05732, new PositionInfo { X = 23.0f, Y = 10.0f } }, // Guard Bhoot
  233. { 05716, new PositionInfo { X = 08.0f, Y = 17.0f } }, // Kaluk
  234. { 05724, new PositionInfo { X = 16.0f, Y = 12.0f } }, // Loch Leech
  235. { 05730, new PositionInfo { X = 17.0f, Y = 16.0f } }, // Loch Nanka
  236. { 05717, new PositionInfo { X = 20.0f, Y = 18.0f } }, // Phoebad
  237. { 05721, new PositionInfo { X = 16.0f, Y = 21.0f } }, // Soblyn
  238. { 05722, new PositionInfo { X = 22.0f, Y = 23.0f } }, // Salt Dhruva
  239. { 05728, new PositionInfo { X = 17.0f, Y = 08.0f } }, // Specter
  240. { 05726, new PositionInfo { X = 25.0f, Y = 29.0f } }, // Vepar
  241. { 05719, new PositionInfo { X = 20.0f, Y = 25.0f } }, // Yabby
  242. // Shadowbringers
  243. // Lakeland
  244. { 08498, new PositionInfo { X = 19.0f, Y = 09.0f } }, // Chiliad Cama
  245. { 08502, new PositionInfo { X = 28.0f, Y = 23.2f } }, // Violet Triffid
  246. { 08503, new PositionInfo { X = 14.0f, Y = 16.5f } }, // Gnole
  247. { 08504, new PositionInfo { X = 24.4f, Y = 23.9f } }, // Wetland Warg
  248. { 08505, new PositionInfo { X = 33.2f, Y = 10.0f } }, // White Gremlin
  249. { 08507, new PositionInfo { X = 25.8f, Y = 23.3f } }, // Hoptrap
  250. { 08508, new PositionInfo { X = 28.5f, Y = 36.7f } }, // Wolverine
  251. { 08511, new PositionInfo { X = 11.3f, Y = 11.0f } }, // Smilodon
  252. { 08514, new PositionInfo { X = 34.2f, Y = 17.0f } }, // Ya-te-veo
  253. { 08515, new PositionInfo { X = 29.0f, Y = 17.6f } }, // Proterosuchus
  254. { 08786, new PositionInfo { X = 20.5f, Y = 25.3f } }, // Lake Viper
  255. // Kholusia
  256. { 08517, new PositionInfo { X = 31.9f, Y = 18.9f } }, // Ironbeard
  257. { 08518, new PositionInfo { X = 36.4f, Y = 28.7f } }, // Hobgoblin
  258. { 08520, new PositionInfo { X = 17.0f, Y = 18.0f } }, // Defective Talos
  259. { 08522, new PositionInfo { X = 34.8f, Y = 10.5f } }, // Sulfur Byrgen
  260. { 08523, new PositionInfo { X = 35.4f, Y = 29.2f } }, // Maultasche
  261. { 08524, new PositionInfo { X = 14.3f, Y = 11.4f } }, // Huldu
  262. { 08525, new PositionInfo { X = 14.3f, Y = 27.1f } }, // Island Rail
  263. { 08527, new PositionInfo { X = 17.0f, Y = 11.0f } }, // Cliffkite
  264. { 08528, new PositionInfo { X = 27.1f, Y = 13.8f } }, // Cliffmole
  265. { 08529, new PositionInfo { X = 08.0f, Y = 18.0f } }, // Scree Gnome
  266. { 08532, new PositionInfo { X = 17.8f, Y = 26.5f } }, // Wood Eyes
  267. { 08533, new PositionInfo { X = 25.0f, Y = 23.5f } }, // Island Wolf
  268. { 08534, new PositionInfo { X = 10.1f, Y = 29.6f } }, // Kholusian Bison
  269. { 08536, new PositionInfo { X = 32.5f, Y = 26.2f } }, // Whiptail
  270. { 08538, new PositionInfo { X = 22.5f, Y = 09.6f } }, // Highland Hyssop
  271. { 08539, new PositionInfo { X = 19.9f, Y = 33.0f } }, // Tragopan
  272. { 08540, new PositionInfo { X = 13.0f, Y = 15.0f } }, // Saichania
  273. { 08541, new PositionInfo { X = 21.0f, Y = 08.7f } }, // Gulgnu
  274. { 08542, new PositionInfo { X = 21.6f, Y = 32.0f } }, // Germinant
  275. // Amh Araeng
  276. { 08544, new PositionInfo { X = 11.4f, Y = 30.4f } }, // Masterless Talos
  277. { 08545, new PositionInfo { X = 19.1f, Y = 20.9f } }, // Evil Weapon
  278. { 08547, new PositionInfo { X = 30.4f, Y = 12.3f } }, // Gigantender
  279. { 08550, new PositionInfo { X = 29.4f, Y = 25.4f } }, // Ancient Lizard
  280. { 08556, new PositionInfo { X = 29.4f, Y = 21.7f } }, // Sand Mole
  281. { 08557, new PositionInfo { X = 12.7f, Y = 19.0f } }, // Thistle Mole
  282. { 08558, new PositionInfo { X = 30.9f, Y = 27.3f } }, // Scissorjaws
  283. { 08559, new PositionInfo { X = 21.5f, Y = 09.7f } }, // Gnome
  284. { 08561, new PositionInfo { X = 13.9f, Y = 18.2f } }, // Debitage
  285. { 08562, new PositionInfo { X = 27.1f, Y = 29.6f } }, // Ghilman
  286. { 08563, new PositionInfo { X = 25.0f, Y = 34.3f } }, // Flame Zonure
  287. { 08565, new PositionInfo { X = 15.2f, Y = 16.7f } }, // Phorusrhacos
  288. { 08566, new PositionInfo { X = 21.7f, Y = 09.8f } }, // Desert Coyote
  289. { 08567, new PositionInfo { X = 23.9f, Y = 31.8f } }, // Molamander
  290. // Il Mheg
  291. { 08155, new PositionInfo { X = 08.4f, Y = 30.0f } }, // Flower Basket
  292. { 08569, new PositionInfo { X = 18.0f, Y = 31.0f } }, // Echevore
  293. { 08574, new PositionInfo { X = 31.0f, Y = 14.3f } }, // Garden Porxie
  294. { 08575, new PositionInfo { X = 19.9f, Y = 16.3f } }, // Phooka
  295. { 08576, new PositionInfo { X = 11.1f, Y = 26.0f } }, // Etainmoth
  296. { 08577, new PositionInfo { X = 29.4f, Y = 12.7f } }, // Green Glider
  297. { 08578, new PositionInfo { X = 21.0f, Y = 08.8f } }, // Moss Fungus
  298. { 08581, new PositionInfo { X = 07.8f, Y = 18.7f } }, // Hawker
  299. { 08582, new PositionInfo { X = 25.0f, Y = 11.0f } }, // Rainbow Lorikeet
  300. { 08583, new PositionInfo { X = 29.5f, Y = 11.4f } }, // Tot Aevis
  301. { 08584, new PositionInfo { X = 30.4f, Y = 10.6f } }, // Rabbit's Tail
  302. { 08585, new PositionInfo { X = 19.0f, Y = 32.0f } }, // Rosebear
  303. { 08586, new PositionInfo { X = 31.6f, Y = 06.4f } }, // Garden Crocota
  304. { 08587, new PositionInfo { X = 32.0f, Y = 05.8f } }, // Werewood
  305. { 08590, new PositionInfo { X = 09.4f, Y = 15.0f } }, // Killer Bee
  306. // The Rak'tika Greatwood
  307. { 08596, new PositionInfo { X = 08.8f, Y = 35.6f } }, // Tomatl
  308. { 08597, new PositionInfo { X = 27.3f, Y = 25.6f } }, // Forest Echo
  309. { 08598, new PositionInfo { X = 25.1f, Y = 14.2f } }, // Cracked Ronkan Doll
  310. { 08599, new PositionInfo { X = 23.0f, Y = 14.0f } }, // Cracked Ronkan Thorn
  311. { 08600, new PositionInfo { X = 16.0f, Y = 32.0f } }, // Vampire Vine
  312. { 08601, new PositionInfo { X = 23.4f, Y = 07.6f } }, // Greatwood Rail
  313. { 08603, new PositionInfo { X = 29.4f, Y = 21.7f } }, // Snapweed
  314. { 08604, new PositionInfo { X = 12.0f, Y = 34.0f } }, // Atrociraptor
  315. { 08606, new PositionInfo { X = 27.7f, Y = 23.2f } }, // Gizamaluk
  316. { 08609, new PositionInfo { X = 16.9f, Y = 33.3f } }, // Helm Beetle
  317. { 08610, new PositionInfo { X = 34.1f, Y = 16.5f } }, // Floor Mandrill
  318. { 08611, new PositionInfo { X = 15.0f, Y = 19.4f } }, // Wild Swine
  319. { 08612, new PositionInfo { X = 24.9f, Y = 30.2f } }, // Caracal
  320. { 08614, new PositionInfo { X = 25.0f, Y = 07.2f } }, // Woodbat
  321. { 08616, new PositionInfo { X = 27.9f, Y = 21.2f } }, // Tarichuk
  322. { 08789, new PositionInfo { X = 21.1f, Y = 13.2f } }, // Cracked Ronkan Vessel
  323. // The Tempest
  324. { 08618, new PositionInfo { X = 28.6f, Y = 06.2f } }, // Clinoid
  325. { 08619, new PositionInfo { X = 28.2f, Y = 18.3f } }, // Dagon
  326. { 08621, new PositionInfo { X = 22.6f, Y = 31.7f } }, // Cubus
  327. { 08622, new PositionInfo { X = 25.1f, Y = 18.6f } }, // Sea Anemone
  328. { 08623, new PositionInfo { X = 32.1f, Y = 11.7f } }, // Amphisbaena
  329. { 08625, new PositionInfo { X = 32.5f, Y = 21.5f } }, // Morgawr
  330. { 08626, new PositionInfo { X = 36.6f, Y = 16.6f } }, // Trilobite
  331. { 08629, new PositionInfo { X = 27.7f, Y = 08.7f } }, // Sea Gelatin
  332. { 08630, new PositionInfo { X = 29.0f, Y = 21.0f } }, // Tempest Swallow
  333. { 08631, new PositionInfo { X = 35.8f, Y = 07.2f } }, // Blue Swimmer
  334. // Endwalker
  335. // Labyrinthos
  336. { 10668, new PositionInfo { X = 28.8f, Y = 08.8f } }, // Troll
  337. { 10669, new PositionInfo { X = 31.0f, Y = 25.5f } }, // Genomos
  338. { 10670, new PositionInfo { X = 15.0f, Y = 06.5f } }, // Caribou
  339. { 10672, new PositionInfo { X = 32.0f, Y = 08.8f } }, // Limascabra
  340. { 10673, new PositionInfo { X = 21.5f, Y = 13.5f } }, // Luncheon Toad
  341. { 10674, new PositionInfo { X = 17.0f, Y = 12.0f } }, // Yakow
  342. { 10677, new PositionInfo { X = 34.0f, Y = 15.0f } }, // Labyrinth Screamer
  343. { 10678, new PositionInfo { X = 24.0f, Y = 10.7f } }, // Northern Snapweed
  344. { 10679, new PositionInfo { X = 26.0f, Y = 14.5f } }, // Pephredo
  345. { 10683, new PositionInfo { X = 37.5f, Y = 19.5f } }, // Mythrilcap
  346. // Thavnair
  347. { 10697, new PositionInfo { X = 19.0f, Y = 23.9f } }, // Pisaca
  348. { 10698, new PositionInfo { X = 13.8f, Y = 18.5f } }, // Vajralangula
  349. { 10699, new PositionInfo { X = 19.2f, Y = 32.6f } }, // Kacchapa
  350. { 10700, new PositionInfo { X = 18.4f, Y = 26.7f } }, // Hamsa
  351. { 10701, new PositionInfo { X = 29.1f, Y = 12.2f } }, // Asvattha
  352. { 10702, new PositionInfo { X = 27.1f, Y = 27.8f } }, // Guhasaya
  353. { 10703, new PositionInfo { X = 27.0f, Y = 17.4f } }, // Bhujamga
  354. { 10704, new PositionInfo { X = 17.6f, Y = 17.8f } }, // Sotormurg
  355. { 10705, new PositionInfo { X = 22.7f, Y = 30.4f } }, // Gaja
  356. { 10706, new PositionInfo { X = 19.1f, Y = 11.7f } }, // Thavnairian Jhammel
  357. { 10707, new PositionInfo { X = 25.9f, Y = 19.0f } }, // Ufiti
  358. { 10709, new PositionInfo { X = 09.2f, Y = 12.8f } }, // Chamrosh
  359. { 10711, new PositionInfo { X = 16.1f, Y = 09.2f } }, // Starmite
  360. { 10712, new PositionInfo { X = 14.3f, Y = 12.7f } }, // Manjusaka
  361. { 10713, new PositionInfo { X = 23.3f, Y = 19.9f } }, // Odqan
  362. { 10715, new PositionInfo { X = 13.4f, Y = 28.5f } }, // Akyaali Crab
  363. { 10716, new PositionInfo { X = 08.2f, Y = 16.2f } }, // Valras
  364. // Garlemald
  365. { 10648, new PositionInfo { X = 18.8f, Y = 09.8f } }, // Automated Satellite
  366. { 10649, new PositionInfo { X = 25.5f, Y = 17.5f } }, // Automated Death Machine
  367. { 10650, new PositionInfo { X = 15.5f, Y = 19.5f } }, // Automated Cavalry
  368. { 10651, new PositionInfo { X = 21.8f, Y = 17.4f } }, // Automated Bit
  369. { 10652, new PositionInfo { X = 15.7f, Y = 09.8f } }, // Automated Roader
  370. { 10653, new PositionInfo { X = 29.5f, Y = 13.7f } }, // Automated Slasher
  371. { 10654, new PositionInfo { X = 24.3f, Y = 14.9f } }, // Automated Colossus
  372. { 10655, new PositionInfo { X = 12.9f, Y = 11.7f } }, // Automated Avenger
  373. { 10656, new PositionInfo { X = 29.6f, Y = 30.3f } }, // Almasty
  374. { 10657, new PositionInfo { X = 14.6f, Y = 26.1f } }, // Eblan Bear
  375. { 10658, new PositionInfo { X = 31.3f, Y = 17.4f } }, // Eblan Icetrap
  376. { 10659, new PositionInfo { X = 19.8f, Y = 29.1f } }, // Ovibos
  377. { 10660, new PositionInfo { X = 22.3f, Y = 24.9f } }, // Jotunn
  378. { 10661, new PositionInfo { X = 28.4f, Y = 33.0f } }, // Ceruleum Zoblyn
  379. { 10662, new PositionInfo { X = 25.4f, Y = 31.5f } }, // Ilsabardian Tursus
  380. { 10663, new PositionInfo { X = 18.7f, Y = 24.8f } }, // Canis Lupinus
  381. { 10664, new PositionInfo { X = 26.1f, Y = 26.5f } }, // Overgrown Rose
  382. // Mare Lamentorum
  383. { 10458, new PositionInfo { X = 23.9f, Y = 20.0f } }, // Daphnia
  384. { 10459, new PositionInfo { X = 23.7f, Y = 20.3f } }, // Osculator
  385. { 10460, new PositionInfo { X = 08.6f, Y = 35.5f } }, // Sweeper
  386. { 10461, new PositionInfo { X = 27.3f, Y = 26.0f } }, // Wanderer
  387. { 10462, new PositionInfo { X = 31.1f, Y = 32.2f } }, // Weeper
  388. { 10463, new PositionInfo { X = 19.8f, Y = 22.5f } }, // Thinker
  389. { 10464, new PositionInfo { X = 26.0f, Y = 34.0f } }, // Regolith
  390. { 10465, new PositionInfo { X = 21.4f, Y = 32.2f } }, // Trimmer
  391. { 10467, new PositionInfo { X = 12.0f, Y = 36.7f } }, // Panopt
  392. { 10468, new PositionInfo { X = 11.5f, Y = 22.3f } }, // Dynamite
  393. { 10469, new PositionInfo { X = 16.7f, Y = 31.8f } }, // Armalcolite
  394. { 10470, new PositionInfo { X = 12.9f, Y = 09.6f } }, // Caretaker
  395. { 10471, new PositionInfo { X = 16.1f, Y = 24.9f } }, // Mousse
  396. { 10473, new PositionInfo { X = 31.2f, Y = 27.0f } }, // Downfall Alarum
  397. { 10474, new PositionInfo { X = 33.6f, Y = 26.2f } }, // Downfall Droid
  398. { 10475, new PositionInfo { X = 34.5f, Y = 28.0f } }, // Downfall Hunter
  399. { 10476, new PositionInfo { X = 13.0f, Y = 10.0f } }, // Supporter
  400. { 10477, new PositionInfo { X = 30.1f, Y = 11.0f } }, // Scraper
  401. // Elpis
  402. { 10590, new PositionInfo { X = 25.7f, Y = 33.9f } }, // Ophion
  403. { 10591, new PositionInfo { X = 16.5f, Y = 29.9f } }, // Yggdreant
  404. { 10592, new PositionInfo { X = 22.6f, Y = 20.0f } }, // Okyupete
  405. { 10594, new PositionInfo { X = 12.4f, Y = 31.8f } }, // Gryps
  406. { 10595, new PositionInfo { X = 26.6f, Y = 29.7f } }, // Monoceros
  407. { 10596, new PositionInfo { X = 10.1f, Y = 14.1f } }, // Pegasos
  408. { 10597, new PositionInfo { X = 28.7f, Y = 25.6f } }, // Bird of Elpis
  409. { 10599, new PositionInfo { X = 33.4f, Y = 14.3f } }, // Hippe
  410. { 10600, new PositionInfo { X = 14.1f, Y = 09.9f } }, // Harpuia
  411. { 10601, new PositionInfo { X = 25.0f, Y = 10.0f } }, // Morbol Marquis
  412. { 10602, new PositionInfo { X = 29.2f, Y = 09.3f } }, // Akantha
  413. { 10603, new PositionInfo { X = 24.4f, Y = 14.3f } }, // Lykopersikon
  414. { 10606, new PositionInfo { X = 21.5f, Y = 06.3f } }, // Lotis
  415. { 10607, new PositionInfo { X = 10.2f, Y = 34.6f } }, // Phanopsyche
  416. { 10608, new PositionInfo { X = 12.9f, Y = 23.4f } }, // Melanion
  417. { 10609, new PositionInfo { X = 12.9f, Y = 08.7f } }, // Ophiotauros
  418. { 10610, new PositionInfo { X = 13.3f, Y = 15.7f } }, // Elpis Minotaur
  419. { 10611, new PositionInfo { X = 30.7f, Y = 17.1f } }, // Remora
  420. // Ultima Thule
  421. { 10419, new PositionInfo { X = 30.1f, Y = 25.9f } }, // Broken Omicron
  422. { 10420, new PositionInfo { X = 19.3f, Y = 11.8f } }, // Drifting Ea
  423. { 10421, new PositionInfo { X = 34.8f, Y = 28.8f } }, // Beta
  424. { 10422, new PositionInfo { X = 32.9f, Y = 28.8f } }, // Delta
  425. { 10423, new PositionInfo { X = 36.5f, Y = 25.9f } }, // Lambda
  426. { 10424, new PositionInfo { X = 32.1f, Y = 26.6f } }, // Level Tricker
  427. { 10427, new PositionInfo { X = 10.0f, Y = 30.0f } }, // Stellar Amphiptere
  428. { 10430, new PositionInfo { X = 14.4f, Y = 28.2f } }, // Stellar Brobinyak
  429. { 10435, new PositionInfo { X = 16.3f, Y = 14.1f } }, // Other One
  430. // Dawntrail
  431. // Urqopacha
  432. { 13079, new PositionInfo { X = 32.0f, Y = 13.4f } }, // Alpaca
  433. { 13090, new PositionInfo { X = 22.5f, Y = 16.9f } }, // Bandercoeurl
  434. { 13083, new PositionInfo { X = 22.5f, Y = 11.8f } }, // Barbmole
  435. { 13081, new PositionInfo { X = 33.5f, Y = 34.2f } }, // Bloodsucker
  436. { 13087, new PositionInfo { X = 28.7f, Y = 09.1f } }, // Chaba Gedan
  437. { 13084, new PositionInfo { X = 22.4f, Y = 33.9f } }, // Chirwagur Sabreur
  438. { 13085, new PositionInfo { X = 16.6f, Y = 28.0f } }, // Flint
  439. { 13094, new PositionInfo { X = 15.9f, Y = 23.7f } }, // Huallepen
  440. { 13096, new PositionInfo { X = 25.3f, Y = 22.2f } }, // Longjaw
  441. { 13080, new PositionInfo { X = 19.5f, Y = 14.8f } }, // Megamaguey
  442. { 13095, new PositionInfo { X = 35.0f, Y = 27.5f } }, // Molten Phoebad
  443. { 13091, new PositionInfo { X = 19.3f, Y = 17.1f } }, // Mountain Bear
  444. { 13093, new PositionInfo { X = 24.2f, Y = 27.3f } }, // Naryordor
  445. { 13092, new PositionInfo { X = 15.2f, Y = 13.3f } }, // Notocactuar
  446. { 13097, new PositionInfo { X = 09.4f, Y = 22.9f } }, // Ridgetrap
  447. { 13088, new PositionInfo { X = 25.7f, Y = 17.0f } }, // Siehnam
  448. { 13082, new PositionInfo { X = 25.9f, Y = 14.0f } }, // Silver Lobo
  449. { 13086, new PositionInfo { X = 31.9f, Y = 18.5f } }, // Tulichu
  450. { 13098, new PositionInfo { X = 28.1f, Y = 28.4f } }, // Tulidile
  451. { 13089, new PositionInfo { X = 30.8f, Y = 15.4f } }, // Turali Ratel
  452. // Kozama'uka
  453. { 12946, new PositionInfo { X = 19.5f, Y = 23.8f } }, // Bird of Ligaka
  454. { 12935, new PositionInfo { X = 14.0f, Y = 19.3f } }, // Glowfly
  455. { 12930, new PositionInfo { X = 10.2f, Y = 09.5f } }, // Hammerhead Crocodile
  456. { 12936, new PositionInfo { X = 21.1f, Y = 12.7f } }, // Heavy Matamata
  457. { 12952, new PositionInfo { X = 13.2f, Y = 29.6f } }, // Jungle Iguana
  458. { 12934, new PositionInfo { X = 14.2f, Y = 16.3f } }, // Jungle Orobon
  459. { 12938, new PositionInfo { X = 13.8f, Y = 11.2f } }, // Jungle Pelican
  460. { 12943, new PositionInfo { X = 11.2f, Y = 22.8f } }, // Lesser Apollyon
  461. { 12941, new PositionInfo { X = 33.0f, Y = 14.6f } }, // Ocelot
  462. { 12949, new PositionInfo { X = 36.9f, Y = 34.9f } }, // Paper Wasp
  463. { 12939, new PositionInfo { X = 29.9f, Y = 15.5f } }, // Poison Frog
  464. { 12933, new PositionInfo { X = 15.7f, Y = 14.4f } }, // Rhino Beetle
  465. { 12937, new PositionInfo { X = 26.8f, Y = 12.3f } }, // Stinkshell
  466. { 12944, new PositionInfo { X = 19.9f, Y = 28.4f } }, // Swampmonk
  467. { 12948, new PositionInfo { X = 34.2f, Y = 27.5f } }, // Tegu
  468. { 12947, new PositionInfo { X = 08.0f, Y = 32.5f } }, // Tomaton
  469. { 12932, new PositionInfo { X = 20.7f, Y = 15.8f } }, // Toucalibri
  470. { 12950, new PositionInfo { X = 17.9f, Y = 32.2f } }, // Turali Morbol
  471. { 12951, new PositionInfo { X = 08.7f, Y = 26.7f } }, // Turali Netzach
  472. { 12942, new PositionInfo { X = 31.5f, Y = 19.5f } }, // U'out
  473. { 12931, new PositionInfo { X = 14.8f, Y = 05.5f } }, // Uolon
  474. { 12945, new PositionInfo { X = 28.9f, Y = 25.3f } }, // Widowmaker
  475. { 12940, new PositionInfo { X = 33.6f, Y = 08.5f } }, // Woodsman
  476. // Yak T'el
  477. { 12957, new PositionInfo { X = 21.1f, Y = 05.6f } }, // Balyaborr
  478. { 12966, new PositionInfo { X = 07.4f, Y = 24.4f } }, // Blue Leafkin
  479. { 12969, new PositionInfo { X = 16.4f, Y = 28.9f } }, // Blue Morpho
  480. { 12964, new PositionInfo { X = 17.8f, Y = 24.4f } }, // Branchbearer
  481. { 12971, new PositionInfo { X = 16.3f, Y = 37.7f } }, // Fly Agaric
  482. { 12970, new PositionInfo { X = 20.4f, Y = 18.1f } }, // Ja Tiika Moth
  483. { 12958, new PositionInfo { X = 24.3f, Y = 06.3f } }, // Killer Piranha
  484. { 12955, new PositionInfo { X = 09.5f, Y = 20.4f } }, // Leaf Mantis
  485. { 12965, new PositionInfo { X = 30.2f, Y = 28.3f } }, // Mourner
  486. { 12954, new PositionInfo { X = 17.0f, Y = 13.8f } }, // Necrosis
  487. { 12962, new PositionInfo { X = 35.3f, Y = 23.1f } }, // Pitcher Weed
  488. { 12967, new PositionInfo { X = 30.6f, Y = 35.7f } }, // Sarracenia
  489. { 12960, new PositionInfo { X = 28.0f, Y = 18.4f } }, // T'ohsoq
  490. { 12961, new PositionInfo { X = 32.8f, Y = 20.5f } }, // T'ohts'on
  491. { 12953, new PositionInfo { X = 24.0f, Y = 11.8f } }, // Ty'aitya
  492. { 12956, new PositionInfo { X = 12.4f, Y = 09.9f } }, // Vawtsaral Br'aax
  493. { 12959, new PositionInfo { X = 32.2f, Y = 12.7f } }, // Yak T'el Squib
  494. // Shaaloani
  495. { 12990, new PositionInfo { X = 14.7f, Y = 09.4f } }, // Aspis
  496. { 12989, new PositionInfo { X = 27.6f, Y = 13.1f } }, // Ceratoraptor
  497. { 12975, new PositionInfo { X = 11.4f, Y = 17.1f } }, // Cerule Anala
  498. { 12977, new PositionInfo { X = 19.9f, Y = 21.5f } }, // Cerule Bomb
  499. { 12992, new PositionInfo { X = 31.8f, Y = 23.8f } }, // Flying Popoto
  500. { 12996, new PositionInfo { X = 28.8f, Y = 23.5f } }, // Grasslands Worm
  501. { 12995, new PositionInfo { X = 24.4f, Y = 15.6f } }, // Gritclaw
  502. { 12997, new PositionInfo { X = 12.3f, Y = 12.9f } }, // Horned Lizard
  503. { 12988, new PositionInfo { X = 21.4f, Y = 31.8f } }, // Lunyucaua'pya
  504. { 12987, new PositionInfo { X = 18.0f, Y = 31.6f } }, // Lunyuhiyshahe
  505. { 12991, new PositionInfo { X = 24.3f, Y = 11.3f } }, // Rroneek
  506. { 12976, new PositionInfo { X = 25.9f, Y = 29.0f } }, // Sunbeard
  507. { 12993, new PositionInfo { X = 35.1f, Y = 11.1f } }, // Toari Alligator
  508. { 12972, new PositionInfo { X = 30.3f, Y = 33.1f } }, // Tumbleclaw
  509. { 12994, new PositionInfo { X = 29.2f, Y = 07.9f } }, // Turali Hawksbill
  510. { 12978, new PositionInfo { X = 14.1f, Y = 23.3f } }, // Wild Dhara
  511. { 12986, new PositionInfo { X = 12.7f, Y = 30.2f } }, // Yeheheceyaa
  512. // Heritage Found
  513. { 13115, new PositionInfo { X = 09.6f, Y = 19.5f } }, // Asterodia
  514. { 13101, new PositionInfo { X = 33.4f, Y = 27.7f } }, // Axe Beak
  515. { 13103, new PositionInfo { X = 22.5f, Y = 16.7f } }, // Bolt Hound
  516. { 13116, new PositionInfo { X = 28.2f, Y = 26.7f } }, // Cauahealoa
  517. { 13117, new PositionInfo { X = 32.6f, Y = 22.7f } }, // Cauahepya
  518. { 13108, new PositionInfo { X = 15.8f, Y = 22.2f } }, // Defective Aerostat
  519. { 13107, new PositionInfo { X = 15.8f, Y = 22.2f } }, // Defective Sentry R8
  520. { 13106, new PositionInfo { X = 10.6f, Y = 26.2f } }, // Defective Sentry S8
  521. { 13109, new PositionInfo { X = 11.3f, Y = 11.5f } }, // Defective Turret
  522. { 13105, new PositionInfo { X = 21.3f, Y = 27.6f } }, // Eyeclops
  523. { 13104, new PositionInfo { X = 14.8f, Y = 17.2f } }, // Gomphotherium
  524. { 13113, new PositionInfo { X = 35.2f, Y = 14.2f } }, // Katoblepas
  525. { 13112, new PositionInfo { X = 24.3f, Y = 20.9f } }, // Myrmeleon
  526. { 13114, new PositionInfo { X = 11.2f, Y = 33.2f } }, // Python
  527. { 13111, new PositionInfo { X = 30.8f, Y = 13.9f } }, // Thunder Spirit
  528. { 13110, new PositionInfo { X = 15.6f, Y = 32.4f } }, // Woolback
  529. { 13102, new PositionInfo { X = 24.8f, Y = 07.3f } }, // Yyenisheyni Bat
  530. // Living Memory
  531. { 13121, new PositionInfo { X = 33.1f, Y = 34.4f } }, // Acrocat
  532. { 13137, new PositionInfo { X = 12.0f, Y = 18.7f } }, // Agavoides
  533. { 13133, new PositionInfo { X = 30.5f, Y = 17.1f } }, // Alexandrian Clipper
  534. { 13130, new PositionInfo { X = 26.9f, Y = 17.6f } }, // Blazing Soul
  535. { 13127, new PositionInfo { X = 35.9f, Y = 27.2f } }, // Brownie
  536. { 13136, new PositionInfo { X = 17.8f, Y = 21.9f } }, // Everlasting Yew
  537. { 13124, new PositionInfo { X = 09.9f, Y = 36.2f } }, // Fluid Soul
  538. { 13131, new PositionInfo { X = 36.5f, Y = 18.3f } }, // Gargantua
  539. { 13120, new PositionInfo { X = 32.3f, Y = 27.1f } }, // Gemkeeper
  540. { 13129, new PositionInfo { X = 26.6f, Y = 08.7f } }, // Matchlock Scorpion
  541. { 13118, new PositionInfo { X = 33.2f, Y = 16.3f } }, // Outrunner
  542. { 13132, new PositionInfo { X = 30.3f, Y = 12.5f } }, // Pineapple
  543. { 13125, new PositionInfo { X = 13.0f, Y = 34.5f } }, // Remembird
  544. { 13119, new PositionInfo { X = 28.4f, Y = 31.6f } }, // Seeker Bat
  545. { 13139, new PositionInfo { X = 18.0f, Y = 15.2f } }, // Timberman
  546. { 13122, new PositionInfo { X = 17.7f, Y = 30.5f } }, // Torbalan
  547. { 13138, new PositionInfo { X = 11.8f, Y = 12.9f } }, // Walking Tree
  548. };
  549. public enum OpenType {
  550. None, // Just place marker
  551. ShowOpen, // Show special map with radius
  552. MarkerOpen // Show normal map
  553. }
  554. public static unsafe void CreateMapMarker(uint territoryType, uint mapId, uint mobHuntId, string? mobHuntName,
  555. OpenType openType = OpenType.MarkerOpen) {
  556. AgentMap* map = AgentMap.Instance();
  557. if (map == null) {
  558. return;
  559. }
  560. (int X, int Y) pos = MapToWorldCoordinates(Database[mobHuntId].Coordinate, mapId);
  561. map->IsFlagMarkerSet = 0;
  562. map->SetFlagMapMarker(territoryType, mapId, pos.X, pos.Y, 60004);
  563. switch (openType) {
  564. case OpenType.None:
  565. break;
  566. case OpenType.ShowOpen:
  567. map->AgentInterface.Hide();
  568. map->AddGatheringTempMarker(pos.X, pos.Y, 150, 60004, 4, mobHuntName);
  569. map->OpenMap(mapId, territoryType, mobHuntName, MapType.GatheringLog);
  570. break;
  571. case OpenType.MarkerOpen:
  572. map->AgentInterface.Hide();
  573. map->OpenMap(mapId, territoryType);
  574. break;
  575. default:
  576. throw new ArgumentOutOfRangeException(nameof(openType), openType, null);
  577. }
  578. }
  579. private static (int X, int Y) MapToWorldCoordinates(Vector2 pos, uint mapId) {
  580. ushort scale = Service.DataManager.GetExcelSheet<Map>()?.GetRow(mapId)?.SizeFactor ?? 100;
  581. float num = scale / 100f;
  582. float x = (float)(((pos.X - 1.0) * num / 41.0 * 2048.0) - 1024.0) / num * 1000f;
  583. float y = (float)(((pos.Y - 1.0) * num / 41.0 * 2048.0) - 1024.0) / num * 1000f;
  584. x = (int)(MathF.Round(x, 3, MidpointRounding.AwayFromZero) * 1000) * 0.001f / 1000f;
  585. y = (int)(MathF.Round(y, 3, MidpointRounding.AwayFromZero) * 1000) * 0.001f / 1000f;
  586. return ((int)x, (int)y);
  587. }
  588. private static Vector2 ConvertPixelPositionToMapCoordinate(int x, int y, float scale) {
  589. float num = scale / 100f;
  590. return new Vector2(
  591. ConvertRawPositionToMapCoordinate((int)((x - 1024) * num * 1000f), scale),
  592. ConvertRawPositionToMapCoordinate((int)((y - 1024) * num * 1000f), scale));
  593. }
  594. private static float ConvertRawPositionToMapCoordinate(int pos, float scale) {
  595. float num1 = scale / 100f;
  596. float num2 = (float)(pos * (double)num1 / 1000.0f);
  597. return (40.96f / num1 * ((num2 + 1024.0f) / 2048.0f)) + 1.0f;
  598. }
  599. public static void TeleportToNearestAetheryte(uint territoryType, uint mapId, uint mobHuntId) {
  600. Map? mapRow = Service.DataManager.Excel.GetSheet<Map>()?.GetRow(mapId);
  601. if (mapRow == null) {
  602. return;
  603. }
  604. ushort? nearestAetheryteId = Service.DataManager.Excel.GetSheet<MapMarker>()
  605. ?.Where(x => x.DataType == 3 && x.RowId == mapRow.MapMarkerRange)
  606. .Select(
  607. x => new {
  608. distance = Vector2.DistanceSquared(
  609. Database[mobHuntId].Coordinate,
  610. ConvertPixelPositionToMapCoordinate(x.X, x.Y, mapRow.SizeFactor)),
  611. rowId = x.DataKey
  612. })
  613. .OrderBy(x => x.distance)
  614. .FirstOrDefault()?.rowId;
  615. Aetheryte? nearestAetheryte =
  616. territoryType == 399 // Support the unique case of aetheryte not being in the same map
  617. ? mapRow.TerritoryType?.Value?.Aetheryte.Value
  618. : Service.DataManager.Excel.GetSheet<Aetheryte>()?.FirstOrDefault(
  619. x =>
  620. x.IsAetheryte && x.Territory.Row == territoryType && x.RowId == nearestAetheryteId);
  621. if (nearestAetheryte == null) {
  622. return;
  623. }
  624. Plugin.TeleportConsumer?.Teleport(nearestAetheryte.RowId);
  625. }
  626. }