502 lines
16 KiB
Lua
502 lines
16 KiB
Lua
-----------------------------------
|
|
-- Garrison Data
|
|
-----------------------------------
|
|
xi = xi or {}
|
|
xi.garrison = xi.garrison or {}
|
|
|
|
-- Garrison Progression
|
|
xi.garrison.state =
|
|
{
|
|
SPAWN_NPCS = 0,
|
|
BATTLE = 1,
|
|
SPAWN_MOBS = 2,
|
|
SPAWN_BOSS = 3,
|
|
ADVANCE_WAVE = 4,
|
|
GRANT_LOOT = 5,
|
|
ENDED = 6,
|
|
}
|
|
|
|
-- Name is Determined by Nation and LevelCap (sandoria, bastok, windurst)
|
|
xi.garrison.allyNames =
|
|
{
|
|
[20] = { [xi.nation.SANDORIA] = 'Patrician', [xi.nation.BASTOK] = 'Recruit', [xi.nation.WINDURST] = 'Candidate' },
|
|
[30] = { [xi.nation.SANDORIA] = 'Trader', [xi.nation.BASTOK] = 'Mariner', [xi.nation.WINDURST] = 'Scholar' },
|
|
[40] = { [xi.nation.SANDORIA] = 'TempleKnight', [xi.nation.BASTOK] = 'GoldMusketeer', [xi.nation.WINDURST] = 'WiseWizard' },
|
|
[50] = { [xi.nation.SANDORIA] = 'RoyalGuard', [xi.nation.BASTOK] = 'Commander', [xi.nation.WINDURST] = 'Patriarch' },
|
|
[99] = { [xi.nation.SANDORIA] = 'MilitaryAttache', [xi.nation.BASTOK] = 'MilitaryAttache', [xi.nation.WINDURST] = 'MilitaryAttache' },
|
|
}
|
|
|
|
-- Group Ids are different per cap due to min / max level requirements
|
|
-- They all use the same pool at the moment, but we could also change families
|
|
-- based on cap, which would change base stats
|
|
-- All these group ids are currently set to 1 and defaulted inside the GM HOME mob_groups section
|
|
xi.garrison.allyGroupInfo =
|
|
{
|
|
-- LvlCap = { groupId, minLevel, maxLevel }
|
|
[20] = { 1, 15, 20 },
|
|
[30] = { 1, 25, 30 },
|
|
[40] = { 1, 35, 40 },
|
|
[50] = { 1, 45, 50 },
|
|
[99] = { 1, 70, 75 },
|
|
}
|
|
|
|
-- Look is Determined by Nation and LevelCap (Appears to be 4 for each outpost - More data needed)
|
|
xi.garrison.allyLooks =
|
|
{
|
|
[20] =
|
|
{
|
|
[xi.nation.SANDORIA] =
|
|
{
|
|
'0x01000C030010262000303A403A5008611B700000',
|
|
'0x01000A040010262019303A40195008611C700000',
|
|
},
|
|
|
|
[xi.nation.BASTOK] =
|
|
{
|
|
-- These commented out entries appear to be missing body and leg pieces
|
|
-- '0x010001017D000000150015001500B70000000000',
|
|
-- '0x010006020F0000000F000F000F00820082000000',
|
|
'0x01000E02000066000100010001009F0000000000',
|
|
'0x01000701361005206630664066500C6129700000',
|
|
'0x0100020103000300000000000000DC0000000000',
|
|
'0x01000402740014000000000003002C0100000000',
|
|
},
|
|
|
|
[xi.nation.WINDURST] =
|
|
{
|
|
'0x010007070110322032300E401550AC6000700000',
|
|
'0x01000E0718101820183015401850B76024700000',
|
|
'0x01000F0514106920693069406950656028700000',
|
|
},
|
|
},
|
|
[30] =
|
|
{
|
|
[xi.nation.SANDORIA] =
|
|
{
|
|
'0x010006030010762076303A400650736000700000',
|
|
'0x01000F0300101520153015401550006000700000',
|
|
'0x010009040010762076303A400650736000700000',
|
|
'0x01000E0400101520003015401550006000700000',
|
|
},
|
|
|
|
[xi.nation.BASTOK] =
|
|
{
|
|
'0x0100040873100020003000400050006000700000',
|
|
'0x01000B0841100F200F300F400F50D86000700000',
|
|
'0x01000F0120100F2000300F407A50AC6000700000',
|
|
},
|
|
|
|
[xi.nation.WINDURST] =
|
|
{
|
|
'0x01000B051C1073201430144014506C6000700000',
|
|
'0x0100010777106920693066406950B46000700000',
|
|
'0x010000067D107820033066406850E96000700000',
|
|
'0x01000605731069201F3008407350E86000700000',
|
|
},
|
|
},
|
|
[40] =
|
|
{
|
|
[xi.nation.SANDORIA] =
|
|
{
|
|
'0x01000E04191019201930194019506B601C700000',
|
|
'0x01000903191019201930194019506B601C700000',
|
|
},
|
|
|
|
[xi.nation.BASTOK] =
|
|
{
|
|
'0x0100020260102420603060406050B56000700000',
|
|
'0x010008083D1024203D3010401050756075700000',
|
|
'0x01000008371024203730374037506F6018700000',
|
|
'0x0100040105102420053005400550BB6000700000',
|
|
},
|
|
|
|
[xi.nation.WINDURST] =
|
|
{
|
|
'0x0100050700104A20003000400650396127700000',
|
|
'0x01000D0634106D206D306D406D501A6123700000',
|
|
},
|
|
},
|
|
[50] =
|
|
{
|
|
[xi.nation.SANDORIA] =
|
|
{
|
|
'0x010008037210722072301C401C50616000700000',
|
|
'0x01000E03421025204230394042508F608F700000',
|
|
'0x010004047910672042300E404250896089700000',
|
|
'0x01000304401022204030404040504A6000700000',
|
|
},
|
|
|
|
[xi.nation.BASTOK] =
|
|
{
|
|
'0x01000C0133106420433064404350866086700000',
|
|
'0x0100010216104120413041404150CA6000700000',
|
|
},
|
|
|
|
[xi.nation.WINDURST] =
|
|
{
|
|
'0x0100020600106320633063406350056122700000',
|
|
'0x010004067C102D20193019401950506100700000',
|
|
'0x0100080669106B206B306B406B50FE6000700000',
|
|
},
|
|
},
|
|
[99] =
|
|
{
|
|
[xi.nation.SANDORIA] =
|
|
{
|
|
'0x010005011D1071201D301D401D50206130700000',
|
|
'0x0100020841107120413041404150036130700000',
|
|
},
|
|
|
|
[xi.nation.BASTOK] =
|
|
{
|
|
'0x010002071C1070201C301C401C50C46000700000',
|
|
},
|
|
|
|
[xi.nation.WINDURST] =
|
|
{
|
|
'0x010009043E106F203E303E403E501C611B700000',
|
|
'0x0100020349106F204930494049501F611B700000',
|
|
},
|
|
},
|
|
}
|
|
|
|
-- Loot is determined by LevelCap
|
|
xi.garrison.loot =
|
|
{
|
|
[20] =
|
|
{
|
|
{ itemId = xi.item.DRAGON_CHRONICLES, weight = 1000 },
|
|
{ itemId = xi.item.GARRISON_TUNICA, weight = 350 },
|
|
{ itemId = xi.item.GARRISON_BOOTS, weight = 350 },
|
|
{ itemId = xi.item.GARRISON_HOSE, weight = 350 },
|
|
{ itemId = xi.item.GARRISON_GLOVES, weight = 350 },
|
|
{ itemId = xi.item.GARRISON_SALLET, weight = 350 },
|
|
},
|
|
[30] =
|
|
{
|
|
{ itemId = xi.item.DRAGON_CHRONICLES, weight = 1000 },
|
|
{ itemId = xi.item.MILITARY_GUN, weight = 350 },
|
|
{ itemId = xi.item.MILITARY_POLE, weight = 350 },
|
|
{ itemId = xi.item.MILITARY_HARP, weight = 350 },
|
|
{ itemId = xi.item.MILITARY_PICK, weight = 350 },
|
|
{ itemId = xi.item.MILITARY_SPEAR, weight = 350 },
|
|
{ itemId = xi.item.MILITARY_AXE, weight = 350 },
|
|
},
|
|
[40] =
|
|
{
|
|
{ itemId = xi.item.DRAGON_CHRONICLES, weight = 1000 },
|
|
{ itemId = xi.item.VARIABLE_MANTLE, weight = 350 },
|
|
{ itemId = xi.item.VARIABLE_CAPE, weight = 350 },
|
|
{ itemId = xi.item.PROTEAN_RING, weight = 350 },
|
|
{ itemId = xi.item.VARIABLE_RING, weight = 350 },
|
|
{ itemId = xi.item.MECURIAL_EARRING, weight = 350 },
|
|
},
|
|
[50] =
|
|
{
|
|
{ itemId = xi.item.DRAGON_CHRONICLES, weight = 1000 },
|
|
{ itemId = xi.item.UNDEAD_EARRING, weight = 350 },
|
|
{ itemId = xi.item.ARCANA_EARRING, weight = 350 },
|
|
{ itemId = xi.item.VERMIN_EARRING, weight = 350 },
|
|
{ itemId = xi.item.BIRD_EARRING, weight = 350 },
|
|
{ itemId = xi.item.AMORPH_EARRING, weight = 350 },
|
|
{ itemId = xi.item.LIZARD_EARRING, weight = 350 },
|
|
{ itemId = xi.item.AQUAN_EARRING, weight = 350 },
|
|
{ itemId = xi.item.PLANTOID_EARRING, weight = 350 },
|
|
{ itemId = xi.item.BEAST_EARRING, weight = 350 },
|
|
{ itemId = xi.item.DEMON_EARRING, weight = 350 },
|
|
{ itemId = xi.item.DRAGON_EARRING, weight = 350 },
|
|
{ itemId = xi.item.REFRESH_EARRING, weight = 350 },
|
|
{ itemId = xi.item.ACCURATE_EARRING, weight = 350 },
|
|
},
|
|
[99] =
|
|
{
|
|
{ itemId = xi.item.MIRATETES_MEMOIRS, weight = 1000 },
|
|
{ itemId = xi.item.MIGHTY_BOW, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_CUDGEL, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_POLE, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_TALWAR, weight = 350 },
|
|
{ itemId = xi.item.RAI_KUNIMITSU, weight = 350 },
|
|
{ itemId = xi.item.NUKEMARU, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_PICK, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_KNIFE, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_ZAGHNAL, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_LANCE, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_AXE, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_PATAS, weight = 350 },
|
|
{ itemId = xi.item.MIGHTY_SWORD, weight = 350 },
|
|
},
|
|
}
|
|
|
|
xi.garrison.waves =
|
|
{
|
|
-- Each wave consists of different 'mini waves' or spawn groups,
|
|
-- which are separated from each other by a certain interval of time.
|
|
--
|
|
-- Flow:
|
|
-- * After all groups in a wave are killed, the wave ends.
|
|
-- * After delayBetweenGroups, the next wave begins.
|
|
-- * When all groups in the last wave have been killed, boss spawns after delayBetweenGroups.
|
|
--
|
|
-- Constraints: A wave can only spawn 8 mobs at a time at most. This is due to the assumption
|
|
-- That the boss is always 8 IDs after the mobs spawning in each wave.
|
|
spawnSchedule =
|
|
{
|
|
-- 1 Party
|
|
[1] =
|
|
{
|
|
[1] = { 2 }, -- Wave 1: 2 Mobs.
|
|
[2] = { 2, 2 }, -- Wave 2: 2 Mobs + 2 Mobs after 'delayBetweenGroups'. 4 total.
|
|
[3] = { 2, 2, 2 }, -- Wave 3: 2 Mobs + 2 Mobs after every 'delayBetweenGroups'. 6 total.
|
|
[4] = { 2, 2, 2, 2 } -- Wave 4: 2 Mobs + 2 Mobs after every 'delayBetweenGroups'. 8 total. Boss after all 8.
|
|
},
|
|
|
|
-- 2 Parties
|
|
[2] =
|
|
{
|
|
[1] = { 4 }, -- Wave 1: 4 Mobs.
|
|
[2] = { 4, 2 }, -- Wave 2: 4 Mobs + 2 Mobs after every 'delayBetweenGroups'. 6 total.
|
|
[3] = { 4, 2, 2 }, -- Wave 3: 4 Mobs + 2 Mobs after every 'delayBetweenGroups'. 8 total.
|
|
[4] = { 4, 2, 2 }, -- Wave 4: 4 Mobs + 2 Mobs after every 'delayBetweenGroups'. 8 total. Boss after all 8.
|
|
},
|
|
|
|
-- 3 Parties
|
|
[3] =
|
|
{
|
|
[1] = { 4, 2 }, -- Wave 1: 4 Mobs + 2 Mobs after 'delayBetweenGroups'. 6 total.
|
|
[2] = { 6, 2 }, -- Wave 2: 6 Mobs + 2 Mobs after 'delayBetweenGroups'. 8 total.
|
|
[3] = { 4, 2, 2 }, -- Wave 3: 4 Mobs + 2 Mobs after every 'delayBetweenGroups'. 8 total. Boss after all 8.
|
|
},
|
|
},
|
|
|
|
-- How many seconds before each group spawns
|
|
delayBetweenGroups = 15,
|
|
}
|
|
|
|
--Zone Data
|
|
xi.garrison.zoneData =
|
|
{
|
|
[xi.zone.WEST_RONFAURE] =
|
|
{
|
|
itemReq = xi.item.RED_CRYPTEX,
|
|
textRegion = 0,
|
|
levelCap = 20,
|
|
mobBoss = 'Orcish_Fighterchief',
|
|
pos = { -438, -20, -223, 0 },
|
|
xChange = 0,
|
|
zChange = 2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
[xi.zone.NORTH_GUSTABERG] =
|
|
{
|
|
itemReq = xi.item.DARKSTEEL_ENGRAVING,
|
|
textRegion = 1,
|
|
levelCap = 20,
|
|
mobBoss = 'Lead_Quadav',
|
|
pos = { -575, 40, 63, 0 },
|
|
xChange = 1,
|
|
zChange = 2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
[xi.zone.WEST_SARUTABARUTA] =
|
|
{
|
|
itemReq = xi.item.SEVEN_KNOT_QUIPU,
|
|
textRegion = 2,
|
|
levelCap = 20,
|
|
mobBoss = 'Yagudo_Condottiere',
|
|
pos = { -19.000, -13.312, 323.000, 128 },
|
|
xChange = 0,
|
|
zChange = 2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
[xi.zone.VALKURM_DUNES] =
|
|
{
|
|
itemReq = xi.item.GALKA_FANG_SACK,
|
|
textRegion = 3,
|
|
levelCap = 30,
|
|
mobBoss = 'Goblin_Swindler',
|
|
pos = { 149, -8, 94, 32 },
|
|
xChange = -2,
|
|
zChange = -2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
[xi.zone.JUGNER_FOREST] =
|
|
{
|
|
itemReq = xi.item.JADE_CRYPTEX,
|
|
textRegion = 4,
|
|
levelCap = 30,
|
|
mobBoss = 'Orcish_Colonel',
|
|
pos = { 60.000, 0.499, -1.000, 192 },
|
|
xChange = -2,
|
|
zChange = 0,
|
|
xSecondLine = 0,
|
|
zSecondLine = 2,
|
|
xThirdLine = 0,
|
|
zThirdLine = 4,
|
|
},
|
|
[xi.zone.PASHHOW_MARSHLANDS] =
|
|
{
|
|
itemReq = xi.item.SILVER_ENGRAVING,
|
|
textRegion = 5,
|
|
levelCap = 30,
|
|
mobBoss = 'Cobalt_Quadav',
|
|
pos = { 462.000, 23.528, 420.000, 160 },
|
|
xChange = -2,
|
|
zChange = -2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
[xi.zone.BUBURIMU_PENINSULA] =
|
|
{
|
|
itemReq = xi.item.MITHRA_FANG_SACK,
|
|
textRegion = 6,
|
|
levelCap = 30,
|
|
mobBoss = 'Goblin_Guide',
|
|
pos = { -484, -30, 60, 64 },
|
|
xChange = -2,
|
|
zChange = 0,
|
|
xSecondLine = 0,
|
|
zSecondLine = -2,
|
|
xThirdLine = 0,
|
|
zThirdLine = -4,
|
|
},
|
|
[xi.zone.MERIPHATAUD_MOUNTAINS] =
|
|
{
|
|
itemReq = xi.item.THIRTEEN_KNOT_QUIPU,
|
|
textRegion = 7,
|
|
levelCap = 30,
|
|
mobBoss = 'Yagudo_Missionary',
|
|
pos = { -293.000, 16.924, 412.000, 96 },
|
|
xChange = 2,
|
|
zChange = -2,
|
|
xSecondLine = 0,
|
|
zSecondLine = 2,
|
|
xThirdLine = 0,
|
|
zThirdLine = 4,
|
|
},
|
|
[xi.zone.QUFIM_ISLAND] =
|
|
{
|
|
itemReq = xi.item.RAM_LEATHER_MISSIVE,
|
|
textRegion = 10,
|
|
levelCap = 30,
|
|
mobBoss = 'Hunting_Chief',
|
|
pos = { -251.000, -20.399, 304.000, 64 },
|
|
xChange = -2,
|
|
zChange = 0,
|
|
xSecondLine = 0,
|
|
zSecondLine = -2,
|
|
xThirdLine = 0,
|
|
zThirdLine = -4,
|
|
},
|
|
[xi.zone.BEAUCEDINE_GLACIER] =
|
|
{
|
|
itemReq = xi.item.TIGER_LEATHER_MISSIVE,
|
|
textRegion = 8,
|
|
levelCap = 40,
|
|
mobBoss = 'Gigas_Overseer',
|
|
pos = { -22.000, -59.900, -112.000, 128 },
|
|
xChange = -2,
|
|
zChange = -1,
|
|
xSecondLine = 0,
|
|
zSecondLine = -1,
|
|
xThirdLine = 0,
|
|
zThirdLine = -2,
|
|
},
|
|
[xi.zone.THE_SANCTUARY_OF_ZITAH] =
|
|
{
|
|
itemReq = xi.item.HOUND_FANG_SACK,
|
|
textRegion = 11,
|
|
levelCap = 40,
|
|
mobBoss = 'Goblin_Doyen',
|
|
pos = { -40.000, 0.299, -136.000, 192 },
|
|
xChange = -2,
|
|
zChange = 0,
|
|
xSecondLine = 0,
|
|
zSecondLine = 2,
|
|
xThirdLine = 0,
|
|
zThirdLine = 4,
|
|
},
|
|
[xi.zone.YUHTUNGA_JUNGLE] =
|
|
{
|
|
itemReq = xi.item.SHEEP_LEATHER_MISSIVE,
|
|
textRegion = 14,
|
|
levelCap = 40,
|
|
mobBoss = 'Sahagin_Patriarch',
|
|
pos = { -248, 1, -392, 180 },
|
|
xChange = -2,
|
|
zChange = 0,
|
|
xSecondLine = 0,
|
|
zSecondLine = 2,
|
|
xThirdLine = 0,
|
|
zThirdLine = 4,
|
|
},
|
|
[xi.zone.XARCABARD] =
|
|
{
|
|
itemReq = xi.item.BEHEMOTH_LEATHER_MISSIVE,
|
|
textRegion = 9,
|
|
levelCap = 50,
|
|
mobBoss = 'Demon_Aristocrat',
|
|
pos = { 219, -21, -208, 64 },
|
|
xChange = 2,
|
|
zChange = 0,
|
|
xSecondLine = 0,
|
|
zSecondLine = 2,
|
|
xThirdLine = 0,
|
|
zThirdLine = 4,
|
|
},
|
|
[xi.zone.EASTERN_ALTEPA_DESERT] =
|
|
{
|
|
itemReq = xi.item.DHALMEL_LEATHER_MISSIVE,
|
|
textRegion = 12,
|
|
levelCap = 50,
|
|
mobBoss = 'Centurio_XIII-V',
|
|
pos = { -245, -9, -249, 0 },
|
|
xChange = 0,
|
|
zChange = 2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
[xi.zone.YHOATOR_JUNGLE] =
|
|
{
|
|
itemReq = xi.item.COEURL_LEATHER_MISSIVE,
|
|
textRegion = 15,
|
|
levelCap = 50,
|
|
mobBoss = 'Tonberry_Decimator',
|
|
pos = { 210.000, -0.049, -85.000, 32 },
|
|
xChange = 1,
|
|
zChange = 2,
|
|
xSecondLine = 2,
|
|
zSecondLine = -1,
|
|
xThirdLine = 4,
|
|
zThirdLine = -2,
|
|
},
|
|
[xi.zone.CAPE_TERIGGAN] =
|
|
{
|
|
itemReq = xi.item.BUNNY_FANG_SACK,
|
|
textRegion = 13,
|
|
levelCap = 99,
|
|
mobBoss = 'Goblin_Boss',
|
|
pos = { -174, 8, -61, 0 },
|
|
xChange = 0,
|
|
zChange = 2,
|
|
xSecondLine = 2,
|
|
zSecondLine = 0,
|
|
xThirdLine = 4,
|
|
zThirdLine = 0,
|
|
},
|
|
}
|