mirror of
https://codeberg.org/Duvelcorp/MetaHunt.git
synced 2026-09-30 19:40:01 +00:00
First version
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,250 @@
|
||||
-- MetaHunt Beast Families Database
|
||||
-- Food map sourced from Turtle WoW Hunter Pets wiki
|
||||
-- Total: 19 families
|
||||
|
||||
if not MTH_DS then MTH_DS = {} end
|
||||
|
||||
MTH_DS_Families = {
|
||||
["Bats"] = {
|
||||
["named"] = 20,
|
||||
["coords"] = 18,
|
||||
["food"] = {
|
||||
"fruit",
|
||||
"fungus",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Cower",
|
||||
"Dive",
|
||||
"Screech",
|
||||
},
|
||||
},
|
||||
["Bears"] = {
|
||||
["named"] = 45,
|
||||
["coords"] = 45,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fruit",
|
||||
"fish",
|
||||
"fungus",
|
||||
"cheese",
|
||||
"bread",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Claw",
|
||||
"Roar of Fortitude",
|
||||
},
|
||||
},
|
||||
["Boars"] = {
|
||||
["named"] = 45,
|
||||
["coords"] = 87,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fruit",
|
||||
"fish",
|
||||
"fungus",
|
||||
"cheese",
|
||||
"bread",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Charge",
|
||||
"Dash",
|
||||
},
|
||||
},
|
||||
["Carrion Birds"] = {
|
||||
["named"] = 36,
|
||||
["coords"] = 101,
|
||||
["food"] = {
|
||||
"meat",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Dive",
|
||||
"Screech",
|
||||
},
|
||||
},
|
||||
["Cats"] = {
|
||||
["named"] = 85,
|
||||
["coords"] = 88,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fish",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Claw",
|
||||
"Cower",
|
||||
"Dash",
|
||||
"Prowl",
|
||||
},
|
||||
},
|
||||
["Crabs"] = {
|
||||
["named"] = 32,
|
||||
["coords"] = 74,
|
||||
["food"] = {
|
||||
"fruit",
|
||||
"fish",
|
||||
"fungus",
|
||||
"bread",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bubble Barrier",
|
||||
"Claw",
|
||||
},
|
||||
},
|
||||
["Crocolisks"] = {
|
||||
["named"] = 27,
|
||||
["coords"] = 71,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fish",
|
||||
},
|
||||
["abilities"] = {
|
||||
"BIte",
|
||||
"Bite",
|
||||
"Claw",
|
||||
"Death Roll",
|
||||
},
|
||||
},
|
||||
["Foxes"] = {
|
||||
["named"] = 9,
|
||||
["coords"] = 51,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fruit",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Grace",
|
||||
},
|
||||
},
|
||||
["Gorillas"] = {
|
||||
["named"] = 24,
|
||||
["coords"] = 117,
|
||||
["food"] = {
|
||||
"fruit",
|
||||
"fungus",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Thunderstomp",
|
||||
},
|
||||
},
|
||||
["Hyenas"] = {
|
||||
["named"] = 26,
|
||||
["coords"] = 36,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fruit",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Dash",
|
||||
"Packleader",
|
||||
},
|
||||
},
|
||||
["Owls"] = {
|
||||
["named"] = 16,
|
||||
["coords"] = 59,
|
||||
["food"] = {
|
||||
"meat",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Claw",
|
||||
"Dive",
|
||||
"Screech",
|
||||
},
|
||||
},
|
||||
["Raptors"] = {
|
||||
["named"] = 51,
|
||||
["coords"] = 115,
|
||||
["food"] = {
|
||||
"meat",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Savage Rend",
|
||||
},
|
||||
},
|
||||
["Scorpids"] = {
|
||||
["named"] = 38,
|
||||
["coords"] = 36,
|
||||
["food"] = {
|
||||
"meat",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Claw",
|
||||
"Scorpid Poison",
|
||||
},
|
||||
},
|
||||
["Serpents (Cobra)"] = {
|
||||
["named"] = 10,
|
||||
["coords"] = 13,
|
||||
["food"] = {
|
||||
"meat",
|
||||
"fish",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Poison Spit",
|
||||
},
|
||||
},
|
||||
["Spiders"] = {
|
||||
["named"] = 91,
|
||||
["coords"] = 213,
|
||||
["food"] = {
|
||||
"meat",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Web",
|
||||
},
|
||||
},
|
||||
["Tallstriders"] = {
|
||||
["named"] = 15,
|
||||
["coords"] = 112,
|
||||
["food"] = {
|
||||
"fruit",
|
||||
"fungus",
|
||||
"bread",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Cower",
|
||||
"Strider Presence",
|
||||
},
|
||||
},
|
||||
["Turtles"] = {
|
||||
["named"] = 25,
|
||||
["coords"] = 42,
|
||||
["food"] = {
|
||||
"fruit",
|
||||
"fish",
|
||||
"fungus",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Shell Shield",
|
||||
},
|
||||
},
|
||||
["Wind Serpents"] = {
|
||||
["named"] = 27,
|
||||
["coords"] = 42,
|
||||
["food"] = {
|
||||
"fish",
|
||||
"cheese",
|
||||
"bread",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Dive",
|
||||
"Lightning Breath",
|
||||
},
|
||||
},
|
||||
["Wolves"] = {
|
||||
["named"] = 81,
|
||||
["coords"] = 99,
|
||||
["food"] = {
|
||||
"meat",
|
||||
},
|
||||
["abilities"] = {
|
||||
"Bite",
|
||||
"Dash",
|
||||
"Furious Howl",
|
||||
},
|
||||
},
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
+8840
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,150 @@
|
||||
-- MetaHunt Atlas Source Enrichment
|
||||
-- Adds Atlas-derived source category hints to existing ranged/ammo item entries
|
||||
if not MTH_DS then MTH_DS = {} end
|
||||
if not MTH_DS_AmmoItems then MTH_DS_AmmoItems = {} end
|
||||
|
||||
local MTH_DS_AtlasSources = {
|
||||
[10567] = {["boss"] = true, },
|
||||
[10624] = {["boss"] = true, },
|
||||
[11628] = {["boss"] = true, },
|
||||
[11629] = {["boss"] = true, },
|
||||
[11630] = {["boss"] = true, },
|
||||
[12651] = {["boss"] = true, },
|
||||
[12653] = {["boss"] = true, },
|
||||
[12654] = {["boss"] = true, },
|
||||
[13019] = {["worlddrop"] = true, },
|
||||
[13020] = {["worlddrop"] = true, },
|
||||
[13021] = {["worlddrop"] = true, },
|
||||
[13022] = {["worlddrop"] = true, },
|
||||
[13023] = {["worlddrop"] = true, },
|
||||
[13037] = {["worlddrop"] = true, },
|
||||
[13038] = {["worlddrop"] = true, },
|
||||
[13039] = {["worlddrop"] = true, },
|
||||
[13040] = {["worlddrop"] = true, },
|
||||
[13136] = {["worlddrop"] = true, },
|
||||
[13137] = {["worlddrop"] = true, },
|
||||
[13138] = {["worlddrop"] = true, },
|
||||
[13139] = {["worlddrop"] = true, },
|
||||
[13146] = {["worlddrop"] = true, },
|
||||
[13248] = {["boss"] = true, },
|
||||
[13377] = {["boss"] = true, },
|
||||
[13380] = {["boss"] = true, ["crafted"] = true, },
|
||||
[15294] = {["crafted"] = true, },
|
||||
[15295] = {["crafted"] = true, },
|
||||
[15296] = {["crafted"] = true, },
|
||||
[16992] = {["crafted"] = true, },
|
||||
[17042] = {["quest"] = true, },
|
||||
[17069] = {["boss"] = true, },
|
||||
[17072] = {["boss"] = true, },
|
||||
[17717] = {["boss"] = true, },
|
||||
[17753] = {["quest"] = true, },
|
||||
[18282] = {["worlddrop"] = true, },
|
||||
[18323] = {["boss"] = true, },
|
||||
[18388] = {["boss"] = true, },
|
||||
[18460] = {["boss"] = true, },
|
||||
[18482] = {["boss"] = true, },
|
||||
[18680] = {["boss"] = true, },
|
||||
[18729] = {["boss"] = true, },
|
||||
[18738] = {["boss"] = true, },
|
||||
[18755] = {["boss"] = true, },
|
||||
[18833] = {["pvp"] = true, },
|
||||
[18835] = {["pvp"] = true, },
|
||||
[18836] = {["pvp"] = true, },
|
||||
[18837] = {["pvp"] = true, },
|
||||
[18855] = {["pvp"] = true, },
|
||||
[18860] = {["pvp"] = true, },
|
||||
[19082] = {["crafted"] = true, },
|
||||
[19107] = {["crafted"] = true, ["quest"] = true, },
|
||||
[19316] = {["vendor"] = true, },
|
||||
[19317] = {["vendor"] = true, },
|
||||
[19350] = {["boss"] = true, },
|
||||
[19361] = {["boss"] = true, },
|
||||
[19368] = {["boss"] = true, },
|
||||
[19558] = {["vendor"] = true, },
|
||||
[19559] = {["vendor"] = true, },
|
||||
[19560] = {["vendor"] = true, },
|
||||
[19561] = {["vendor"] = true, },
|
||||
[19562] = {["vendor"] = true, },
|
||||
[19563] = {["vendor"] = true, },
|
||||
[19564] = {["vendor"] = true, },
|
||||
[19565] = {["vendor"] = true, },
|
||||
[19853] = {["boss"] = true, },
|
||||
[19993] = {["boss"] = true, },
|
||||
[20038] = {["boss"] = true, },
|
||||
[20437] = {["vendor"] = true, },
|
||||
[20438] = {["vendor"] = true, },
|
||||
[20599] = {["world"] = true, },
|
||||
[20663] = {["event"] = true, },
|
||||
[20722] = {["worlddrop"] = true, },
|
||||
[2098] = {["worlddrop"] = true, },
|
||||
[2099] = {["worlddrop"] = true, },
|
||||
[2100] = {["worlddrop"] = true, },
|
||||
[21459] = {["boss"] = true, },
|
||||
[21478] = {["boss"] = true, },
|
||||
[21616] = {["boss"] = true, },
|
||||
[21800] = {["boss"] = true, },
|
||||
[22318] = {["boss"] = true, },
|
||||
[22347] = {["quest"] = true, },
|
||||
[22656] = {["vendor"] = true, },
|
||||
[22810] = {["boss"] = true, },
|
||||
[22811] = {["boss"] = true, },
|
||||
[22812] = {["boss"] = true, },
|
||||
[23557] = {["boss"] = true, },
|
||||
[2824] = {["worlddrop"] = true, },
|
||||
[2825] = {["worlddrop"] = true, },
|
||||
[3021] = {["worlddrop"] = true, },
|
||||
[3078] = {["boss"] = true, },
|
||||
[3493] = {["crafted"] = true, },
|
||||
[3778] = {["crafted"] = true, },
|
||||
[3780] = {["crafted"] = true, },
|
||||
[41023] = {["crafted"] = true, },
|
||||
[41725] = {["boss"] = true, },
|
||||
[51780] = {["world"] = true, },
|
||||
[55096] = {["boss"] = true, },
|
||||
[55346] = {["boss"] = true, },
|
||||
[55379] = {["boss"] = true, },
|
||||
[5748] = {["vendor"] = true, },
|
||||
[58083] = {["quest"] = true, },
|
||||
[58193] = {["boss"] = true, },
|
||||
[60440] = {["world"] = true, },
|
||||
[60506] = {["boss"] = true, },
|
||||
[60545] = {["boss"] = true, },
|
||||
[60624] = {["quest"] = true, },
|
||||
[60882] = {["vendor"] = true, },
|
||||
[61011] = {["vendor"] = true, },
|
||||
[61068] = {["quest"] = true, },
|
||||
[61248] = {["boss"] = true, },
|
||||
[61307] = {["boss"] = true, },
|
||||
[61383] = {["quest"] = true, },
|
||||
[61525] = {["boss"] = true, },
|
||||
[61569] = {["boss"] = true, },
|
||||
[61629] = {["quest"] = true, },
|
||||
[6469] = {["boss"] = true, },
|
||||
[6696] = {["boss"] = true, },
|
||||
[7729] = {["boss"] = true, },
|
||||
[80503] = {["vendor"] = true, },
|
||||
[80546] = {["vendor"] = true, },
|
||||
[80603] = {["vendor"] = true, },
|
||||
[80646] = {["vendor"] = true, },
|
||||
[80745] = {["boss"] = true, },
|
||||
[83225] = {["boss"] = true, },
|
||||
[83257] = {["world"] = true, },
|
||||
[83452] = {["boss"] = true, },
|
||||
[9399] = {["boss"] = true, },
|
||||
[9400] = {["boss"] = true, },
|
||||
[9412] = {["boss"] = true, },
|
||||
[9422] = {["boss"] = true, },
|
||||
[9426] = {["boss"] = true, },
|
||||
[9456] = {["boss"] = true, },
|
||||
[9487] = {["boss"] = true, },
|
||||
}
|
||||
|
||||
for itemId, sourceMap in pairs(MTH_DS_AtlasSources) do
|
||||
local item = MTH_DS_AmmoItems[itemId]
|
||||
if item then
|
||||
if not item["atlas_sources"] then item["atlas_sources"] = {} end
|
||||
for sourceType, enabled in pairs(sourceMap) do
|
||||
if enabled then item["atlas_sources"][sourceType] = true end
|
||||
end
|
||||
end
|
||||
end
|
||||
File diff suppressed because it is too large
Load Diff
+1133
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,121 @@
|
||||
if not MTH_DS then MTH_DS = {} end
|
||||
|
||||
MTH_DS_MinimapSizes = {
|
||||
[0] = { 0, 0 },
|
||||
[1] = { 4925, 3283.34 },
|
||||
[3] = { 2487.5, 1658.34 },
|
||||
[4] = { 3350, 2233.3 },
|
||||
[8] = { 2293.75, 1529.17 },
|
||||
[10] = { 2700, 1800.03 },
|
||||
[11] = { 4135.42, 2756.25 },
|
||||
[12] = { 3470.84, 2314.62 },
|
||||
[14] = { 5287.5, 3525 },
|
||||
[15] = { 5250, 3500 },
|
||||
[16] = { 5070.84, 3381.25 },
|
||||
[17] = { 10133.34, 6756.25 },
|
||||
[25] = { 711.56, 468.68 },
|
||||
[28] = { 4300, 2866.67 },
|
||||
[33] = { 6381.25, 4254.1 },
|
||||
[36] = { 2800, 1866.67 },
|
||||
[38] = { 2758.33, 1839.58 },
|
||||
[40] = { 3500, 2333.3 },
|
||||
[41] = { 2500, 1666.63 },
|
||||
[44] = { 2170.84, 1447.9 },
|
||||
[45] = { 3600, 2400 },
|
||||
[46] = { 2929.16, 1952.08 },
|
||||
[47] = { 3850, 2566.67 },
|
||||
[51] = { 2231.25, 1487.5 },
|
||||
[85] = { 4518.75, 3012.5 },
|
||||
[130] = { 4200, 2800 },
|
||||
[139] = { 3870.83, 2581.25 },
|
||||
[141] = { 5091.66, 3393.7 },
|
||||
[148] = { 6550, 4366.66 },
|
||||
[209] = { 381, 254 },
|
||||
[215] = { 5137.5, 3425 },
|
||||
[267] = { 3200, 2133.33 },
|
||||
[331] = { 5766.67, 3843.75 },
|
||||
[357] = { 6950, 4633.33 },
|
||||
[361] = { 5750, 3833.33 },
|
||||
[400] = { 4400, 2933.33 },
|
||||
[405] = { 4495.83, 2997.91 },
|
||||
[406] = { 6018, 4010 },
|
||||
[408] = { 3092.1, 2047 },
|
||||
[409] = { 2901.45, 1915.9 },
|
||||
[440] = { 6900, 4600 },
|
||||
[490] = { 3700, 2466.66 },
|
||||
[491] = { 736.45, 490.96 },
|
||||
[493] = { 2308.33, 1539.59 },
|
||||
[616] = { 3206, 2142 },
|
||||
[618] = { 7100, 4733.33 },
|
||||
[717] = { 378.15, 252.1 },
|
||||
[718] = { 572.78, 381.85 },
|
||||
[719] = { 1221.87, 806.42 },
|
||||
[721] = { 769.67, 513.11 },
|
||||
[722] = { 881, 589 },
|
||||
[796] = { 203.66, 135.04 },
|
||||
[876] = { 828, 541 },
|
||||
[1176] = { 1383.33, 922.91 },
|
||||
[1337] = { 893.67, 595.78 },
|
||||
[1377] = { 3483.33, 2322.92 },
|
||||
[1477] = { 695.03, 463.35 },
|
||||
[1497] = { 959.37, 640.11 },
|
||||
[1519] = { 1737.5, 1158.34 },
|
||||
[1537] = { 790.63, 527.61 },
|
||||
[1581] = { 449.89, 300 },
|
||||
[1583] = { 886.84, 591.23 },
|
||||
[1584] = { 1985, 1268 },
|
||||
[1637] = { 1402.61, 935.42 },
|
||||
[1638] = { 1043.75, 695.83 },
|
||||
[1657] = { 1058.33, 705.71 },
|
||||
[1941] = { 1348.24, 888.09 },
|
||||
[1977] = { 2120.83, 1414.6 },
|
||||
[2017] = { 1185.35, 789.86 },
|
||||
[2040] = { 1468, 976 },
|
||||
[2057] = { 320.05, 213.37 },
|
||||
[2100] = { 2112.09, 1410.89 },
|
||||
[2159] = { 483.11, 322.08 },
|
||||
[2257] = { 312, 208 },
|
||||
[2366] = { 1085.86, 726.61 },
|
||||
[2437] = { 738.86, 492.57 },
|
||||
[2557] = { 1324, 869 },
|
||||
[2597] = { 4237.5, 2825 },
|
||||
[2677] = { 499.43, 332.95 },
|
||||
[2717] = { 1495, 983 },
|
||||
[3277] = { 1145.84, 764.58 },
|
||||
[3358] = { 1756.25, 1170.83 },
|
||||
[3428] = { 977.56, 651.7 },
|
||||
[3429] = { 2512.5, 1675 },
|
||||
[3456] = { 1991.69, 1318.42 },
|
||||
[3457] = { 823, 549 },
|
||||
[3478] = { 4139.02, 2946 },
|
||||
[4012] = { 3159, 2108 },
|
||||
[5023] = { 988.63, 1393.17 },
|
||||
[5024] = { 1608, 1075 },
|
||||
[5053] = { 1007.7, 671.8 },
|
||||
[5077] = { 2643.21, 1751.16 },
|
||||
[5086] = { 546.75, 391.9 },
|
||||
[5087] = { 354.5, 234.74 },
|
||||
[5097] = { 1273.1, 853.72 },
|
||||
[5103] = { 752.12, 510.33 },
|
||||
[5121] = { 3227, 2187 },
|
||||
[5130] = { 1432, 977 },
|
||||
[5135] = { 320.19, 213.46 },
|
||||
[5136] = { 619.98, 413.32 },
|
||||
[5138] = { 656.59, 434.97 },
|
||||
[5144] = { 309, 208 },
|
||||
[5147] = { 2777.54, 1851.69 },
|
||||
[5148] = { 652.1, 439.67 },
|
||||
[5153] = { 612.69, 408.46 },
|
||||
[5163] = { 703.3, 468.87 },
|
||||
[5179] = { 3666, 2442 },
|
||||
[5204] = { 1271.99, 845.48 },
|
||||
[5208] = { 1250.18, 837.44 },
|
||||
[5225] = { 3082, 2061 },
|
||||
[5536] = { 2472, 1665 },
|
||||
[5557] = { 2800, 1868 },
|
||||
[5561] = { 3098, 2068 },
|
||||
[5581] = { 3241, 2157 },
|
||||
[5601] = { 1634, 1073 },
|
||||
[5602] = { 5387, 3584 },
|
||||
[5628] = { 1980, 1350 },
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
-- MetaHunt Pet Spells Trainer Overlay
|
||||
-- Adds trainer-learned pet abilities and normalizes learn method metadata.
|
||||
|
||||
if not MTH_DS_PetSpells then
|
||||
return
|
||||
end
|
||||
|
||||
local function MTH_DSPS_EnsureArray(tbl)
|
||||
if type(tbl) ~= "table" then
|
||||
return {}
|
||||
end
|
||||
return tbl
|
||||
end
|
||||
|
||||
MTH_DS_PetSpells.abilitiesDiscovered = MTH_DSPS_EnsureArray(MTH_DS_PetSpells.abilitiesDiscovered)
|
||||
MTH_DS_PetSpells.allSpells = MTH_DSPS_EnsureArray(MTH_DS_PetSpells.allSpells)
|
||||
MTH_DS_PetSpells.byAbility = MTH_DSPS_EnsureArray(MTH_DS_PetSpells.byAbility)
|
||||
|
||||
for _, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and not row.learnMethod then
|
||||
row.learnMethod = "beast"
|
||||
end
|
||||
end
|
||||
|
||||
for _, bundle in pairs(MTH_DS_PetSpells.byAbility) do
|
||||
if type(bundle) == "table" and type(bundle.spells) == "table" then
|
||||
for _, row in ipairs(bundle.spells) do
|
||||
if type(row) == "table" and not row.learnMethod then
|
||||
row.learnMethod = "beast"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local growlTrainerRows = {
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 50",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 2649,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 1",
|
||||
["rankNumber"] = 1,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=2649",
|
||||
["trainLevel"] = 1,
|
||||
},
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 65",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 14916,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 2",
|
||||
["rankNumber"] = 2,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=14916",
|
||||
["trainLevel"] = 10,
|
||||
},
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 110",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 14917,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 3",
|
||||
["rankNumber"] = 3,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=14917",
|
||||
["trainLevel"] = 20,
|
||||
},
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 170",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 14918,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 4",
|
||||
["rankNumber"] = 4,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=14918",
|
||||
["trainLevel"] = 30,
|
||||
},
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 240",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 14919,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 5",
|
||||
["rankNumber"] = 5,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=14919",
|
||||
["trainLevel"] = 40,
|
||||
},
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 320",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 14920,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 6",
|
||||
["rankNumber"] = 6,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=14920",
|
||||
["trainLevel"] = 50,
|
||||
},
|
||||
{
|
||||
["ability"] = "Growl",
|
||||
["castTime"] = "Instant",
|
||||
["categoryCooldown"] = "5 seconds",
|
||||
["cooldown"] = "n/a",
|
||||
["cost"] = "10 mana",
|
||||
["description"] = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
["effects"] = {
|
||||
"(63) Threat Value: 415",
|
||||
},
|
||||
["icon"] = "Ability_Physical_Taunt",
|
||||
["id"] = 14921,
|
||||
["learnMethod"] = "trainer",
|
||||
["name"] = "Growl",
|
||||
["range"] = "5 yards (Combat Range)",
|
||||
["rank"] = "Rank 7",
|
||||
["rankNumber"] = 7,
|
||||
["school"] = "Physical",
|
||||
["sourceUrl"] = "https://database.turtlecraft.gg/?spell=14921",
|
||||
["trainLevel"] = 60,
|
||||
},
|
||||
}
|
||||
|
||||
local function MTH_DSPS_Contains(array, value)
|
||||
for _, item in ipairs(array) do
|
||||
if item == value then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
if not MTH_DSPS_Contains(MTH_DS_PetSpells.abilitiesDiscovered, "Growl") then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Growl")
|
||||
table.sort(MTH_DS_PetSpells.abilitiesDiscovered)
|
||||
end
|
||||
|
||||
local allById = {}
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
for _, row in ipairs(growlTrainerRows) do
|
||||
local idx = allById[row.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(MTH_DS_PetSpells.allSpells, function(a, b)
|
||||
local aa = (a and a.ability) or ""
|
||||
local bb = (b and b.ability) or ""
|
||||
if aa ~= bb then
|
||||
return aa < bb
|
||||
end
|
||||
local ar = (a and a.rankNumber) or 0
|
||||
local br = (b and b.rankNumber) or 0
|
||||
if ar ~= br then
|
||||
return ar < br
|
||||
end
|
||||
return ((a and a.id) or 0) < ((b and b.id) or 0)
|
||||
end)
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Growl"] = {
|
||||
["ability"] = "Growl",
|
||||
["searchUrl"] = "https://database.turtlecraft.gg/?search=Growl",
|
||||
["spellCount"] = table.getn(growlTrainerRows),
|
||||
["spells"] = growlTrainerRows,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.totalSpellRows = table.getn(MTH_DS_PetSpells.allSpells)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,70 @@
|
||||
if not MTH_DS_Racial then
|
||||
MTH_DS_Racial = {}
|
||||
end
|
||||
|
||||
MTH_DS_Racial = {
|
||||
version = "1.0",
|
||||
generatedAtUTC = "2026-02-20T00:00:00Z",
|
||||
source = {
|
||||
site = "https://database.turtlecraft.gg",
|
||||
runRoot = ".TurtleDBparsing/racial-audit/runs/20260220-164554Z",
|
||||
selection = "user-curated-approved",
|
||||
},
|
||||
stats = {
|
||||
raceCount = 9,
|
||||
spellCount = 41,
|
||||
},
|
||||
byRace = {
|
||||
["Tauren"] = { 20549, 20550, 20552, 20551 },
|
||||
["Orc"] = { 20572, 20573, 20574, 20575, 20576, 21563 },
|
||||
["Troll"] = { 20554, 26296, 26297, 20555, 20557, 20558, 26290 },
|
||||
["Undead"] = { 7744, 20577, 20579, 5227, 52522 },
|
||||
["Night Elf"] = { 20580, 21009, 20582, 20585, 20583 },
|
||||
["Gnome"] = { 20589, 20591, 20592, 20593, 7340 },
|
||||
["Dwarf"] = { 2481, 20596, 20595, 20594 },
|
||||
["Human"] = { 20599, 20600, 20597, 20864, 20598 },
|
||||
},
|
||||
spellsById = {
|
||||
[2481] = { id = 2481, name = "Find Treasure", rank = "Racial", level = 1, school = 0, race = "Dwarf", sourceUrl = "https://database.turtlecraft.gg/?spell=2481" },
|
||||
[5227] = { id = 5227, name = "Underwater Breathing", rank = "Racial Passive", level = 0, school = 0, race = "Undead", sourceUrl = "https://database.turtlecraft.gg/?spell=5227" },
|
||||
[7340] = { id = 7340, name = "Language Gnomish", rank = "", level = 1, school = 0, race = "Gnome", sourceUrl = "https://database.turtlecraft.gg/?spell=7340" },
|
||||
[7744] = { id = 7744, name = "Will of the Forsaken", rank = "Racial", level = 0, school = 0, race = "Undead", sourceUrl = "https://database.turtlecraft.gg/?spell=7744" },
|
||||
[20549] = { id = 20549, name = "War Stomp", rank = "Racial", level = 0, school = 0, race = "Tauren", sourceUrl = "https://database.turtlecraft.gg/?spell=20549" },
|
||||
[20550] = { id = 20550, name = "Endurance", rank = "Racial Passive", level = 0, school = 0, race = "Tauren", sourceUrl = "https://database.turtlecraft.gg/?spell=20550" },
|
||||
[20551] = { id = 20551, name = "Nature Resistance", rank = "Racial Passive", level = 0, school = 0, race = "Tauren", raceGuess = true, sourceUrl = "https://database.turtlecraft.gg/?spell=20551" },
|
||||
[20552] = { id = 20552, name = "Cultivation", rank = "Racial Passive", level = 0, school = 0, race = "Tauren", sourceUrl = "https://database.turtlecraft.gg/?spell=20552" },
|
||||
[20554] = { id = 20554, name = "Berserking", rank = "Racial", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=20554" },
|
||||
[20555] = { id = 20555, name = "Regeneration", rank = "Racial Passive", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=20555" },
|
||||
[20557] = { id = 20557, name = "Beast Slaying", rank = "Racial Passive", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=20557" },
|
||||
[20558] = { id = 20558, name = "Throwing Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=20558" },
|
||||
[20572] = { id = 20572, name = "Blood Fury", rank = "Racial", level = 0, school = 0, race = "Orc", sourceUrl = "https://database.turtlecraft.gg/?spell=20572" },
|
||||
[20573] = { id = 20573, name = "Hardiness", rank = "Racial Passive", level = 0, school = 0, race = "Orc", sourceUrl = "https://database.turtlecraft.gg/?spell=20573" },
|
||||
[20574] = { id = 20574, name = "Axe Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Orc", sourceUrl = "https://database.turtlecraft.gg/?spell=20574" },
|
||||
[20575] = { id = 20575, name = "Command", rank = "Racial Passive", level = 0, school = 0, race = "Orc", sourceUrl = "https://database.turtlecraft.gg/?spell=20575" },
|
||||
[20576] = { id = 20576, name = "Command", rank = "Racial Passive", level = 0, school = 0, race = "Orc", sourceUrl = "https://database.turtlecraft.gg/?spell=20576" },
|
||||
[20577] = { id = 20577, name = "Cannibalize", rank = "Racial", level = 0, school = 0, race = "Undead", sourceUrl = "https://database.turtlecraft.gg/?spell=20577" },
|
||||
[20579] = { id = 20579, name = "Shadow Resistance", rank = "Racial Passive", level = 0, school = 0, race = "Undead", sourceUrl = "https://database.turtlecraft.gg/?spell=20579" },
|
||||
[20580] = { id = 20580, name = "Shadowmeld", rank = "Racial", level = 1, school = 0, race = "Night Elf", sourceUrl = "https://database.turtlecraft.gg/?spell=20580" },
|
||||
[20582] = { id = 20582, name = "Quickness", rank = "Racial Passive", level = 0, school = 0, race = "Night Elf", sourceUrl = "https://database.turtlecraft.gg/?spell=20582" },
|
||||
[20583] = { id = 20583, name = "Nature Resistance", rank = "Racial Passive", level = 0, school = 0, race = "Night Elf", raceGuess = true, sourceUrl = "https://database.turtlecraft.gg/?spell=20583" },
|
||||
[20585] = { id = 20585, name = "Wisp Spirit", rank = "Racial Passive", level = 0, school = 0, race = "Night Elf", sourceUrl = "https://database.turtlecraft.gg/?spell=20585" },
|
||||
[20589] = { id = 20589, name = "Escape Artist", rank = "Racial", level = 0, school = 0, race = "Gnome", sourceUrl = "https://database.turtlecraft.gg/?spell=20589" },
|
||||
[20591] = { id = 20591, name = "Expansive Mind", rank = "Racial Passive", level = 0, school = 0, race = "Gnome", sourceUrl = "https://database.turtlecraft.gg/?spell=20591" },
|
||||
[20592] = { id = 20592, name = "Arcane Resistance", rank = "Racial Passive", level = 0, school = 0, race = "Gnome", sourceUrl = "https://database.turtlecraft.gg/?spell=20592" },
|
||||
[20593] = { id = 20593, name = "Engineering Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Gnome", sourceUrl = "https://database.turtlecraft.gg/?spell=20593" },
|
||||
[20594] = { id = 20594, name = "Stoneform", rank = "Racial", level = 0, school = 0, race = "Dwarf", sourceUrl = "https://database.turtlecraft.gg/?spell=20594" },
|
||||
[20595] = { id = 20595, name = "Gun Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Dwarf", sourceUrl = "https://database.turtlecraft.gg/?spell=20595" },
|
||||
[20596] = { id = 20596, name = "Frost Resistance", rank = "Racial Passive", level = 0, school = 0, race = "Dwarf", sourceUrl = "https://database.turtlecraft.gg/?spell=20596" },
|
||||
[20597] = { id = 20597, name = "Sword Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Human", sourceUrl = "https://database.turtlecraft.gg/?spell=20597" },
|
||||
[20598] = { id = 20598, name = "The Human Spirit", rank = "Racial Passive", level = 0, school = 0, race = "Human", sourceUrl = "https://database.turtlecraft.gg/?spell=20598" },
|
||||
[20599] = { id = 20599, name = "Diplomacy", rank = "Racial Passive", level = 0, school = 0, race = "Human", sourceUrl = "https://database.turtlecraft.gg/?spell=20599" },
|
||||
[20600] = { id = 20600, name = "Perception", rank = "Racial", level = 0, school = 0, race = "Human", sourceUrl = "https://database.turtlecraft.gg/?spell=20600" },
|
||||
[20864] = { id = 20864, name = "Mace Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Human", sourceUrl = "https://database.turtlecraft.gg/?spell=20864" },
|
||||
[21009] = { id = 21009, name = "Shadowmeld Passive", rank = "Racial Passive", level = 0, school = 0, race = "Night Elf", sourceUrl = "https://database.turtlecraft.gg/?spell=21009" },
|
||||
[21563] = { id = 21563, name = "Command", rank = "Racial Passive", level = 0, school = 0, race = "Orc", sourceUrl = "https://database.turtlecraft.gg/?spell=21563" },
|
||||
[26290] = { id = 26290, name = "Bow Specialization", rank = "Racial Passive", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=26290" },
|
||||
[26296] = { id = 26296, name = "Berserking", rank = "Racial", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=26296" },
|
||||
[26297] = { id = 26297, name = "Berserking", rank = "Racial", level = 0, school = 0, race = "Troll", sourceUrl = "https://database.turtlecraft.gg/?spell=26297" },
|
||||
[52522] = { id = 52522, name = "Vengeance", rank = "Racial Passive", level = 0, school = 0, race = "Undead", sourceUrl = "https://database.turtlecraft.gg/?spell=52522" },
|
||||
},
|
||||
}
|
||||
+25145
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+2229
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,75 @@
|
||||
-- Auto-generated fallback zone names for beast/vendor coordinate zone IDs
|
||||
MTH_DS_ZoneNamesFallback = {
|
||||
[1] = "Dun Morogh",
|
||||
[3] = "Badlands",
|
||||
[4] = "Blasted Lands",
|
||||
[8] = "Swamp of Sorrows",
|
||||
[10] = "Duskwood",
|
||||
[11] = "Wetlands",
|
||||
[12] = "Elwynn Forest",
|
||||
[14] = "Durotar",
|
||||
[15] = "Dustwallow Marsh",
|
||||
[16] = "Azshara",
|
||||
[17] = "The Barrens",
|
||||
[28] = "Western Plaguelands",
|
||||
[33] = "Stranglethorn Vale",
|
||||
[36] = "Alterac Mountains",
|
||||
[38] = "Loch Modan",
|
||||
[40] = "Westfall",
|
||||
[41] = "Deadwind Pass",
|
||||
[44] = "Redridge Mountains",
|
||||
[45] = "Arathi Highlands",
|
||||
[46] = "Burning Steppes",
|
||||
[47] = "The Hinterlands",
|
||||
[51] = "Searing Gorge",
|
||||
[85] = "Tirisfal Glades",
|
||||
[130] = "Silverpine Forest",
|
||||
[139] = "Eastern Plaguelands",
|
||||
[141] = "Teldrassil",
|
||||
[148] = "Darkshore",
|
||||
[209] = "Shadowfang Keep",
|
||||
[215] = "Mulgore",
|
||||
[267] = "Hillsbrad Foothills",
|
||||
[331] = "Ashenvale",
|
||||
[357] = "Feralas",
|
||||
[361] = "Felwood",
|
||||
[400] = "Thousand Needles",
|
||||
[405] = "Desolace",
|
||||
[406] = "Stonetalon Mountains",
|
||||
[408] = "Gillijim's Isle",
|
||||
[409] = "Lapidis Isle",
|
||||
[440] = "Tanaris",
|
||||
[490] = "Un'Goro Crater",
|
||||
[491] = "Razorfen Kraul",
|
||||
[493] = "Moonglade",
|
||||
[616] = "Hyjal",
|
||||
[618] = "Winterspring",
|
||||
[718] = "Wailing Caverns",
|
||||
[719] = "Blackfathom Deeps",
|
||||
[721] = "Gnomeregan",
|
||||
[1176] = "Zul'Farrak",
|
||||
[1337] = "Uldaman",
|
||||
[1377] = "Silithus",
|
||||
[1477] = "The Temple of Atal'Hakkar",
|
||||
[1519] = "Stormwind City",
|
||||
[1537] = "Ironforge",
|
||||
[1583] = "Blackrock Spire",
|
||||
[1941] = "Caverns of Time",
|
||||
[1977] = "Zul'Gurub",
|
||||
[2040] = "Alah'Thalas",
|
||||
[2100] = "Maraudon",
|
||||
[2597] = "Alterac Valley",
|
||||
[3456] = "Naxxramas",
|
||||
[3457] = "Tower of Karazhan",
|
||||
[4012] = "Scarlet Enclave",
|
||||
[5077] = "Crescent Grove",
|
||||
[5121] = "Tel'Abim",
|
||||
[5135] = "Scarlet Monastery Library",
|
||||
[5179] = "Gilneas",
|
||||
[5225] = "Thalassian Highlands",
|
||||
[5536] = "Blackstone Island",
|
||||
[5561] = "Balor",
|
||||
[5581] = "Northwind",
|
||||
[5601] = "Dragonmaw Retreat",
|
||||
[5602] = "Grim Reaches",
|
||||
}
|
||||
+12054
File diff suppressed because it is too large
Load Diff
+598
@@ -0,0 +1,598 @@
|
||||
|
||||
if not MTH_DS then
|
||||
MTH_DS = {}
|
||||
end
|
||||
|
||||
MTH_DS.version = "1.0"
|
||||
MTH_DS.loaded = false
|
||||
|
||||
local function MTH_DS_MarkNotInGameRangedWeapons()
|
||||
if not MTH_DS_AmmoItems then return end
|
||||
for _, item in pairs(MTH_DS_AmmoItems) do
|
||||
if type(item) == "table" then
|
||||
local name = string.lower(tostring(item.name or ""))
|
||||
if string.find(name, "monster - ", 1, true) == 1 or string.find(name, "90 green", 1, true) == 1 then
|
||||
local subtype = string.lower(tostring(item.subtype or ""))
|
||||
if subtype == "bow" or subtype == "bows"
|
||||
or subtype == "gun" or subtype == "rifle" or subtype == "rifles"
|
||||
or subtype == "crossbow" or subtype == "crossbows" or subtype == "cross bow" or subtype == "cross-bow"
|
||||
then
|
||||
item.notingame = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
MTH_DS_MarkNotInGameRangedWeapons()
|
||||
|
||||
local function MTH_DS_EnsurePetSpellsTrainerGrowl()
|
||||
if not MTH_DS_PetSpells then return end
|
||||
if type(MTH_DS_PetSpells.allSpells) ~= "table" then MTH_DS_PetSpells.allSpells = {} end
|
||||
if type(MTH_DS_PetSpells.byAbility) ~= "table" then MTH_DS_PetSpells.byAbility = {} end
|
||||
if type(MTH_DS_PetSpells.abilitiesDiscovered) ~= "table" then MTH_DS_PetSpells.abilitiesDiscovered = {} end
|
||||
|
||||
for _, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and not row.learnMethod then
|
||||
row.learnMethod = "beast"
|
||||
end
|
||||
end
|
||||
|
||||
local hasGrowlAbility = false
|
||||
local hasGreatStaminaAbility = false
|
||||
local hasNaturalArmorAbility = false
|
||||
local hasFireResistanceAbility = false
|
||||
local hasFrostResistanceAbility = false
|
||||
local hasArcaneResistanceAbility = false
|
||||
local hasNatureResistanceAbility = false
|
||||
local hasShadowResistanceAbility = false
|
||||
for i = 1, table.getn(MTH_DS_PetSpells.abilitiesDiscovered) do
|
||||
if MTH_DS_PetSpells.abilitiesDiscovered[i] == "Growl" then
|
||||
hasGrowlAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Great Stamina" then
|
||||
hasGreatStaminaAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Natural Armor" then
|
||||
hasNaturalArmorAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Fire Resistance" then
|
||||
hasFireResistanceAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Frost Resistance" then
|
||||
hasFrostResistanceAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Arcane Resistance" then
|
||||
hasArcaneResistanceAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Nature Resistance" then
|
||||
hasNatureResistanceAbility = true
|
||||
elseif MTH_DS_PetSpells.abilitiesDiscovered[i] == "Shadow Resistance" then
|
||||
hasShadowResistanceAbility = true
|
||||
end
|
||||
if hasGrowlAbility and hasGreatStaminaAbility and hasNaturalArmorAbility and hasFireResistanceAbility and hasFrostResistanceAbility and hasArcaneResistanceAbility and hasNatureResistanceAbility and hasShadowResistanceAbility then break end
|
||||
end
|
||||
if not hasGrowlAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Growl")
|
||||
end
|
||||
if not hasGreatStaminaAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Great Stamina")
|
||||
end
|
||||
if not hasNaturalArmorAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Natural Armor")
|
||||
end
|
||||
if not hasFireResistanceAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Fire Resistance")
|
||||
end
|
||||
if not hasFrostResistanceAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Frost Resistance")
|
||||
end
|
||||
if not hasArcaneResistanceAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Arcane Resistance")
|
||||
end
|
||||
if not hasNatureResistanceAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Nature Resistance")
|
||||
end
|
||||
if not hasShadowResistanceAbility then
|
||||
table.insert(MTH_DS_PetSpells.abilitiesDiscovered, "Shadow Resistance")
|
||||
end
|
||||
table.sort(MTH_DS_PetSpells.abilitiesDiscovered)
|
||||
|
||||
local growlRows = {
|
||||
{ id = 2649, rank = "Rank 1", rankNumber = 1, trainLevel = 1, effect = "(63) Threat Value: 50" },
|
||||
{ id = 14916, rank = "Rank 2", rankNumber = 2, trainLevel = 10, effect = "(63) Threat Value: 65" },
|
||||
{ id = 14917, rank = "Rank 3", rankNumber = 3, trainLevel = 20, effect = "(63) Threat Value: 110" },
|
||||
{ id = 14918, rank = "Rank 4", rankNumber = 4, trainLevel = 30, effect = "(63) Threat Value: 170" },
|
||||
{ id = 14919, rank = "Rank 5", rankNumber = 5, trainLevel = 40, effect = "(63) Threat Value: 240" },
|
||||
{ id = 14920, rank = "Rank 6", rankNumber = 6, trainLevel = 50, effect = "(63) Threat Value: 320" },
|
||||
{ id = 14921, rank = "Rank 7", rankNumber = 7, trainLevel = 60, effect = "(63) Threat Value: 415" },
|
||||
}
|
||||
|
||||
local allById = {}
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local growlSpells = {}
|
||||
for i = 1, table.getn(growlRows) do
|
||||
local src = growlRows[i]
|
||||
local row = {
|
||||
ability = "Growl",
|
||||
castTime = "Instant",
|
||||
categoryCooldown = "5 seconds",
|
||||
cooldown = "n/a",
|
||||
cost = "10 mana",
|
||||
description = "Taunt the target, increasing the likelihood the creature will focus attacks on you.",
|
||||
effects = { src.effect },
|
||||
icon = "Ability_Physical_Taunt",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Growl",
|
||||
range = "5 yards (Combat Range)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(growlSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
local staminaRows = {
|
||||
{ id = 4187, rank = "Rank 1", rankNumber = 1, trainLevel = 10, description = "Stamina increased by 3.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 3" },
|
||||
{ id = 4188, rank = "Rank 2", rankNumber = 2, trainLevel = 12, description = "Stamina increased by 5.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 5" },
|
||||
{ id = 4189, rank = "Rank 3", rankNumber = 3, trainLevel = 18, description = "Stamina increased by 7.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 7" },
|
||||
{ id = 4190, rank = "Rank 4", rankNumber = 4, trainLevel = 24, description = "Stamina increased by 10.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 10" },
|
||||
{ id = 4191, rank = "Rank 5", rankNumber = 5, trainLevel = 30, description = "Stamina increased by 13.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 13" },
|
||||
{ id = 4192, rank = "Rank 6", rankNumber = 6, trainLevel = 36, description = "Stamina increased by 17.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 17" },
|
||||
{ id = 4193, rank = "Rank 7", rankNumber = 7, trainLevel = 42, description = "Stamina increased by 21.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 21" },
|
||||
{ id = 4194, rank = "Rank 8", rankNumber = 8, trainLevel = 48, description = "Stamina increased by 26.", effect = "(6) Apply Aura #29: Mod Stat (2) Value: 26" },
|
||||
{ id = 5048, rank = "Rank 9", rankNumber = 9, trainLevel = 54, description = "Stamina increased by 32.", effect = "(36) Learn Spell Great Stamina" },
|
||||
{ id = 5049, rank = "Rank 10", rankNumber = 10, trainLevel = 60, description = "Stamina increased by 40.", effect = "(36) Learn Spell Great Stamina" },
|
||||
}
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local staminaSpells = {}
|
||||
for i = 1, table.getn(staminaRows) do
|
||||
local src = staminaRows[i]
|
||||
local row = {
|
||||
ability = "Great Stamina",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Nature_UnyeildingStamina",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Great Stamina",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(staminaSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local armorRows = {
|
||||
{ id = 24545, rank = "Rank 1", rankNumber = 1, trainLevel = 10, description = "Armor increased by 50.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 50" },
|
||||
{ id = 24549, rank = "Rank 2", rankNumber = 2, trainLevel = 12, description = "Armor increased by 100.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 100" },
|
||||
{ id = 24550, rank = "Rank 3", rankNumber = 3, trainLevel = 18, description = "Armor increased by 160.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 160" },
|
||||
{ id = 24551, rank = "Rank 4", rankNumber = 4, trainLevel = 24, description = "Armor increased by 240.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 240" },
|
||||
{ id = 24552, rank = "Rank 5", rankNumber = 5, trainLevel = 30, description = "Armor increased by 330.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 330" },
|
||||
{ id = 24553, rank = "Rank 6", rankNumber = 6, trainLevel = 36, description = "Armor increased by 430.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 430" },
|
||||
{ id = 24554, rank = "Rank 7", rankNumber = 7, trainLevel = 42, description = "Armor increased by 550.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 550" },
|
||||
{ id = 24555, rank = "Rank 8", rankNumber = 8, trainLevel = 48, description = "Armor increased by 675.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 675" },
|
||||
{ id = 24629, rank = "Rank 9", rankNumber = 9, trainLevel = 54, description = "Armor increased by 810.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 810" },
|
||||
{ id = 24630, rank = "Rank 10", rankNumber = 10, trainLevel = 60, description = "Armor increased by 1000.", effect = "(6) Apply Aura #22: Mod Resistance (1) Value: 1000" },
|
||||
}
|
||||
|
||||
local armorSpells = {}
|
||||
for i = 1, table.getn(armorRows) do
|
||||
local src = armorRows[i]
|
||||
local row = {
|
||||
ability = "Natural Armor",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Nature_SpiritArmor",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Natural Armor",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(armorSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local fireResRows = {
|
||||
{ id = 23992, rank = "Rank 1", rankNumber = 1, trainLevel = 20, description = "Increases Fire resistance by 30.", effect = "(6) Apply Aura #22: Mod Resistance (4) Value: 30" },
|
||||
{ id = 24439, rank = "Rank 2", rankNumber = 2, trainLevel = 30, description = "Increases Fire resistance by 60.", effect = "(6) Apply Aura #22: Mod Resistance (4) Value: 60" },
|
||||
{ id = 24444, rank = "Rank 3", rankNumber = 3, trainLevel = 40, description = "Increases Fire resistance by 90.", effect = "(6) Apply Aura #22: Mod Resistance (4) Value: 90" },
|
||||
{ id = 24445, rank = "Rank 4", rankNumber = 4, trainLevel = 50, description = "Increases Fire resistance by 120.", effect = "(6) Apply Aura #22: Mod Resistance (4) Value: 120" },
|
||||
}
|
||||
|
||||
local fireResSpells = {}
|
||||
for i = 1, table.getn(fireResRows) do
|
||||
local src = fireResRows[i]
|
||||
local row = {
|
||||
ability = "Fire Resistance",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Fire_FireArmor",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Fire Resistance",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(fireResSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local frostResRows = {
|
||||
{ id = 24446, rank = "Rank 1", rankNumber = 1, trainLevel = 20, description = "Increases Frost resistance by 30.", effect = "(6) Apply Aura #22: Mod Resistance (16) Value: 30" },
|
||||
{ id = 24447, rank = "Rank 2", rankNumber = 2, trainLevel = 30, description = "Increases Frost resistance by 60.", effect = "(6) Apply Aura #22: Mod Resistance (16) Value: 60" },
|
||||
{ id = 24448, rank = "Rank 3", rankNumber = 3, trainLevel = 40, description = "Increases Frost resistance by 90.", effect = "(6) Apply Aura #22: Mod Resistance (16) Value: 90" },
|
||||
{ id = 24449, rank = "Rank 4", rankNumber = 4, trainLevel = 50, description = "Increases Frost resistance by 120.", effect = "(6) Apply Aura #22: Mod Resistance (16) Value: 120" },
|
||||
}
|
||||
|
||||
local frostResSpells = {}
|
||||
for i = 1, table.getn(frostResRows) do
|
||||
local src = frostResRows[i]
|
||||
local row = {
|
||||
ability = "Frost Resistance",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Frost_FrostWard",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Frost Resistance",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(frostResSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local arcaneResRows = {
|
||||
{ id = 24493, rank = "Rank 1", rankNumber = 1, trainLevel = 20, description = "Increases Arcane resistance by 30.", effect = "(6) Apply Aura #22: Mod Resistance (64) Value: 30" },
|
||||
{ id = 24497, rank = "Rank 2", rankNumber = 2, trainLevel = 30, description = "Increases Arcane resistance by 60.", effect = "(6) Apply Aura #22: Mod Resistance (64) Value: 60" },
|
||||
{ id = 24500, rank = "Rank 3", rankNumber = 3, trainLevel = 40, description = "Increases Arcane resistance by 90.", effect = "(6) Apply Aura #22: Mod Resistance (64) Value: 90" },
|
||||
{ id = 24501, rank = "Rank 4", rankNumber = 4, trainLevel = 50, description = "Increases Arcane resistance by 120.", effect = "(6) Apply Aura #22: Mod Resistance (64) Value: 120" },
|
||||
}
|
||||
|
||||
local arcaneResSpells = {}
|
||||
for i = 1, table.getn(arcaneResRows) do
|
||||
local src = arcaneResRows[i]
|
||||
local row = {
|
||||
ability = "Arcane Resistance",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Nature_StarFall",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Arcane Resistance",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(arcaneResSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local natureResRows = {
|
||||
{ id = 24492, rank = "Rank 1", rankNumber = 1, trainLevel = 20, description = "Increases Nature resistance by 30.", effect = "(6) Apply Aura #22: Mod Resistance (8) Value: 30" },
|
||||
{ id = 24502, rank = "Rank 2", rankNumber = 2, trainLevel = 30, description = "Increases Nature resistance by 60.", effect = "(6) Apply Aura #22: Mod Resistance (8) Value: 60" },
|
||||
{ id = 24503, rank = "Rank 3", rankNumber = 3, trainLevel = 40, description = "Increases Nature resistance by 90.", effect = "(6) Apply Aura #22: Mod Resistance (8) Value: 90" },
|
||||
{ id = 24504, rank = "Rank 4", rankNumber = 4, trainLevel = 50, description = "Increases Nature resistance by 120.", effect = "(6) Apply Aura #22: Mod Resistance (8) Value: 120" },
|
||||
}
|
||||
|
||||
local natureResSpells = {}
|
||||
for i = 1, table.getn(natureResRows) do
|
||||
local src = natureResRows[i]
|
||||
local row = {
|
||||
ability = "Nature Resistance",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Nature_ResistNature",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Nature Resistance",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(natureResSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
for i, row in ipairs(MTH_DS_PetSpells.allSpells) do
|
||||
if type(row) == "table" and row.id then
|
||||
allById[row.id] = i
|
||||
end
|
||||
end
|
||||
|
||||
local shadowResRows = {
|
||||
{ id = 24488, rank = "Rank 1", rankNumber = 1, trainLevel = 20, description = "Increases Shadow resistance by 30.", effect = "(6) Apply Aura #22: Mod Resistance (32) Value: 30" },
|
||||
{ id = 24505, rank = "Rank 2", rankNumber = 2, trainLevel = 30, description = "Increases Shadow resistance by 60.", effect = "(6) Apply Aura #22: Mod Resistance (32) Value: 60" },
|
||||
{ id = 24506, rank = "Rank 3", rankNumber = 3, trainLevel = 40, description = "Increases Shadow resistance by 90.", effect = "(6) Apply Aura #22: Mod Resistance (32) Value: 90" },
|
||||
{ id = 24507, rank = "Rank 4", rankNumber = 4, trainLevel = 50, description = "Increases Shadow resistance by 120.", effect = "(6) Apply Aura #22: Mod Resistance (32) Value: 120" },
|
||||
}
|
||||
|
||||
local shadowResSpells = {}
|
||||
for i = 1, table.getn(shadowResRows) do
|
||||
local src = shadowResRows[i]
|
||||
local row = {
|
||||
ability = "Shadow Resistance",
|
||||
castTime = "Passive",
|
||||
categoryCooldown = "n/a",
|
||||
cooldown = "n/a",
|
||||
cost = "None",
|
||||
description = src.description,
|
||||
effects = { src.effect },
|
||||
icon = "Spell_Shadow_AntiShadow",
|
||||
id = src.id,
|
||||
learnMethod = "trainer",
|
||||
name = "Shadow Resistance",
|
||||
range = "0 yards (Self Only)",
|
||||
rank = src.rank,
|
||||
rankNumber = src.rankNumber,
|
||||
school = "Physical",
|
||||
sourceUrl = "https://database.turtlecraft.gg/?spell=" .. tostring(src.id),
|
||||
trainLevel = src.trainLevel,
|
||||
}
|
||||
table.insert(shadowResSpells, row)
|
||||
local idx = allById[src.id]
|
||||
if idx then
|
||||
MTH_DS_PetSpells.allSpells[idx] = row
|
||||
else
|
||||
table.insert(MTH_DS_PetSpells.allSpells, row)
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(MTH_DS_PetSpells.allSpells, function(a, b)
|
||||
local aa = (a and a.ability) or ""
|
||||
local bb = (b and b.ability) or ""
|
||||
if aa ~= bb then return aa < bb end
|
||||
local ar = (a and a.rankNumber) or 0
|
||||
local br = (b and b.rankNumber) or 0
|
||||
if ar ~= br then return ar < br end
|
||||
return ((a and a.id) or 0) < ((b and b.id) or 0)
|
||||
end)
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Growl"] = {
|
||||
ability = "Growl",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Growl",
|
||||
spellCount = table.getn(growlSpells),
|
||||
spells = growlSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Great Stamina"] = {
|
||||
ability = "Great Stamina",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Great+Stamina",
|
||||
spellCount = table.getn(staminaSpells),
|
||||
spells = staminaSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Natural Armor"] = {
|
||||
ability = "Natural Armor",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Natural+Armor",
|
||||
spellCount = table.getn(armorSpells),
|
||||
spells = armorSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Fire Resistance"] = {
|
||||
ability = "Fire Resistance",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Fire+Resistance",
|
||||
spellCount = table.getn(fireResSpells),
|
||||
spells = fireResSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Frost Resistance"] = {
|
||||
ability = "Frost Resistance",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Frost+Resistance",
|
||||
spellCount = table.getn(frostResSpells),
|
||||
spells = frostResSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Arcane Resistance"] = {
|
||||
ability = "Arcane Resistance",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Arcane+Resistance",
|
||||
spellCount = table.getn(arcaneResSpells),
|
||||
spells = arcaneResSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Nature Resistance"] = {
|
||||
ability = "Nature Resistance",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Nature+Resistance",
|
||||
spellCount = table.getn(natureResSpells),
|
||||
spells = natureResSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.byAbility["Shadow Resistance"] = {
|
||||
ability = "Shadow Resistance",
|
||||
searchUrl = "https://database.turtlecraft.gg/?search=Shadow+Resistance",
|
||||
spellCount = table.getn(shadowResSpells),
|
||||
spells = shadowResSpells,
|
||||
}
|
||||
|
||||
MTH_DS_PetSpells.totalSpellRows = table.getn(MTH_DS_PetSpells.allSpells)
|
||||
end
|
||||
|
||||
function MTH_DS_OnLoad()
|
||||
if MTH_DS.loaded then
|
||||
return
|
||||
end
|
||||
|
||||
-- Database files loaded via TOC
|
||||
-- Check if all tables are present
|
||||
|
||||
if MTH_DS_Beasts and MTH_DS_Vendors and MTH_DS_AmmoItems and MTH_DS_Zones and MTH_DS_Families then
|
||||
MTH_DS_EnsurePetSpellsTrainerGrowl()
|
||||
MTH_DS.loaded = true
|
||||
|
||||
-- Count entries
|
||||
MTH_DS.beastCount = 0
|
||||
for _ in pairs(MTH_DS_Beasts) do
|
||||
MTH_DS.beastCount = MTH_DS.beastCount + 1
|
||||
end
|
||||
|
||||
MTH_DS.vendorCount = 0
|
||||
for _ in pairs(MTH_DS_Vendors) do
|
||||
MTH_DS.vendorCount = MTH_DS.vendorCount + 1
|
||||
end
|
||||
|
||||
MTH_DS.ammoItemCount = 0
|
||||
for _ in pairs(MTH_DS_AmmoItems) do
|
||||
MTH_DS.ammoItemCount = MTH_DS.ammoItemCount + 1
|
||||
end
|
||||
|
||||
MTH_DS.zoneCount = 0
|
||||
for _ in pairs(MTH_DS_Zones) do
|
||||
MTH_DS.zoneCount = MTH_DS.zoneCount + 1
|
||||
end
|
||||
|
||||
MTH_DS.familyCount = 0
|
||||
for _ in pairs(MTH_DS_Families) do
|
||||
MTH_DS.familyCount = MTH_DS.familyCount + 1
|
||||
end
|
||||
|
||||
MTH_DS.petSpellRowCount = 0
|
||||
if MTH_DS_PetSpells and MTH_DS_PetSpells.allSpells then
|
||||
for _ in pairs(MTH_DS_PetSpells.allSpells) do
|
||||
MTH_DS.petSpellRowCount = MTH_DS.petSpellRowCount + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- Delayed message to ensure chat frame is ready
|
||||
local frame = CreateFrame("Frame")
|
||||
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
frame:SetScript("OnEvent", function()
|
||||
this:UnregisterAllEvents()
|
||||
end)
|
||||
else
|
||||
local missing = {}
|
||||
if not MTH_DS_Beasts then table.insert(missing, "MTH_DS_Beasts") end
|
||||
if not MTH_DS_Vendors then table.insert(missing, "MTH_DS_Vendors") end
|
||||
if not MTH_DS_AmmoItems then table.insert(missing, "MTH_DS_AmmoItems") end
|
||||
if not MTH_DS_Zones then table.insert(missing, "MTH_DS_Zones") end
|
||||
if not MTH_DS_Families then table.insert(missing, "MTH_DS_Families") end
|
||||
local msg = "|cFFFF3333[MTH] ERROR:|r Database failed to load! Missing: " .. table.concat(missing, ", ")
|
||||
local frame = CreateFrame("Frame")
|
||||
frame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
frame:SetScript("OnEvent", function()
|
||||
this:UnregisterAllEvents()
|
||||
MTH:Print(msg, "error")
|
||||
end)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user