From 45b3f244bc213b9c341a4addd0f3869654e41a75 Mon Sep 17 00:00:00 2001 From: Critical <48370698+CriticalXI@users.noreply.github.com> Date: Sat, 14 Feb 2026 22:13:00 -0700 Subject: [PATCH] [lua, sql][module] RNG Era Audit --- modules/abyssea/lua/job_adjustments.lua | 20 +++ modules/abyssea/sql/job_adjustments.sql | 17 ++ modules/rov/lua/job_adjustments.lua | 47 ++++++ modules/rov/sql/job_adjustments.sql | 8 + modules/soa/lua/job_adjustments.lua | 79 +++++++++- modules/soa/lua/scavenge_data.lua | 200 ++++++++++++++++++++++++ modules/soa/sql/job_adjustments.sql | 13 +- modules/soa/sql/weaponskills.sql | 34 ++++ modules/wotg/lua/job_adjustments.lua | 12 ++ modules/wotg/sql/job_adjustments.sql | 14 +- scripts/enum/item.lua | 11 ++ scripts/enum/msg.lua | 3 + scripts/globals/job_utils/ranger.lua | 6 +- 13 files changed, 450 insertions(+), 14 deletions(-) create mode 100644 modules/soa/lua/scavenge_data.lua create mode 100644 modules/soa/sql/weaponskills.sql diff --git a/modules/abyssea/lua/job_adjustments.lua b/modules/abyssea/lua/job_adjustments.lua index bebcd69c3e9..595b5396d82 100644 --- a/modules/abyssea/lua/job_adjustments.lua +++ b/modules/abyssea/lua/job_adjustments.lua @@ -316,4 +316,24 @@ m:addOverride('xi.effects.seigan.onEffectGain', function(target, effect) effect:addMod(xi.mod.DEF, jpValue * 3) end) +----------------------------------- +-- Ranger +----------------------------------- + +-- Flashy Shot: Apply merit recast reduction +m:addOverride('xi.job_utils.ranger.useFlashyShot', function(player, target, ability, action) + local recastReduction = player:getMerit(xi.merit.FLASHY_SHOT) - 150 + action:setRecast(action:getRecast() - recastReduction) + + player:addStatusEffect(xi.effect.FLASHY_SHOT, 1, 0, 60) + + return xi.effect.FLASHY_SHOT +end) + +-- Flashy Shot Effect: Add level correction bypass +m:addOverride('xi.effects.flashy_shot.onEffectGain', function(target, effect) + effect:addMod(xi.mod.ENMITY, 50) + effect:addMod(xi.mod.RA_IGNORE_LVL_DIFF, 1) +end) + return m diff --git a/modules/abyssea/sql/job_adjustments.sql b/modules/abyssea/sql/job_adjustments.sql index cc6bb302b0f..4b58658ed71 100644 --- a/modules/abyssea/sql/job_adjustments.sql +++ b/modules/abyssea/sql/job_adjustments.sql @@ -152,3 +152,20 @@ UPDATE abilities SET recastTime = 900 WHERE name = 'shikikoyo'; -- Shikikoyo merit: Revert value to 150 seconds per level UPDATE merits SET value = 150 WHERE name = 'shikikoyo'; + +------------------------------------ +-- Ranger +-- Source: https://www.bg-wiki.com/ffxi/Version_Update_(05/15/2012) +------------------------------------ + +-- Eagle Eye Shot: Revert range from 20 to 15 yalms +UPDATE abilities SET `range` = 15 WHERE name = 'eagle_eye_shot'; + +-- Shadowbind: Revert range from 20 to 10 yalms +UPDATE abilities SET `range` = 10 WHERE name = 'shadowbind'; + +-- Flashy Shot: revert recast from 10 to 20 minutes +UPDATE abilities SET recastTime = 1200 WHERE name = 'flashy_shot'; + +-- Flashy Shot merit: Revert value to 150 seconds per level +UPDATE merits SET value = 150 WHERE name = 'flashy_shot'; diff --git a/modules/rov/lua/job_adjustments.lua b/modules/rov/lua/job_adjustments.lua index c74bac1fec4..d08308af625 100644 --- a/modules/rov/lua/job_adjustments.lua +++ b/modules/rov/lua/job_adjustments.lua @@ -122,4 +122,51 @@ end) -- Decay Removal: http://forum.square-enix.com/ffxi/threads/46531-Mar-26-2015-%28JST%29-Version-Update -- Duration Change: https://forum.square-enix.com/ffxi/threads/48564-Sep-16-2015-%28JST%29-Version-Update +----------------------------------- +-- Ranger +----------------------------------- + +-- Eagle Eye Shot: Revert shadow bypass +-- Source: https://forum.square-enix.com/ffxi/threads/47481-Jun-25-2015-%28JST%29-Version-Update +m:addOverride('xi.job_utils.ranger.useEagleEyeShot', function(player, target, ability, action) + if player:getWeaponSkillType(xi.slot.RANGED) == xi.skill.MARKSMANSHIP then + action:setAnimation(target:getID(), action:getAnimation(target:getID()) + 1) + end + + local params = {} + + params.numHits = 1 + + -- TP params. + local tp = 1000 -- to ensure ftp multiplier is applied + params.ftpMod = { 5.0, 5.0, 5.0 } + params.critVaries = { 0.0, 0.0, 0.0 } + + -- Stat params. + params.str_wsc = 0 + params.dex_wsc = 0 + params.vit_wsc = 0 + params.agi_wsc = 0 + params.int_wsc = 0 + params.mnd_wsc = 0 + params.chr_wsc = 0 + + params.enmityMult = 0.5 + + -- Job Point Bonus Damage + local jpValue = player:getJobPointLevel(xi.jp.EAGLE_EYE_SHOT_EFFECT) + player:addMod(xi.mod.ALL_WSDMG_ALL_HITS, jpValue * 3) + + local damage, _, tpHits, extraHits = xi.weaponskills.doRangedWeaponskill(player, target, 0, params, tp, action, true) + + -- Set the message id ourselves + if tpHits + extraHits > 0 then + action:messageID(target:getID(), xi.msg.basic.JA_DAMAGE) + else + action:messageID(target:getID(), xi.msg.basic.JA_MISS_2) + end + + return damage +end) + return m diff --git a/modules/rov/sql/job_adjustments.sql b/modules/rov/sql/job_adjustments.sql index 0233e93c449..b2fad687176 100644 --- a/modules/rov/sql/job_adjustments.sql +++ b/modules/rov/sql/job_adjustments.sql @@ -46,3 +46,11 @@ UPDATE merits SET upgrade = 0 WHERE name = 'ele_magic_acc'; UPDATE merits SET upgrade = 0 WHERE name = 'ele_magic_debuff_duration'; UPDATE merits SET upgrade = 0 WHERE name = 'ele_magic_debuff_effect'; UPDATE merits SET upgrade = 0 WHERE name = 'aspir_absorption_amount'; + +------------------------------------ +-- Ranger +-- Source: https://forum.square-enix.com/ffxi/threads/55263-April.-3-2019-%28JST%29-Version-Update +------------------------------------ + +-- Velocity Shot: Revert recast from 1 minute to 5 minutes +UPDATE abilities SET recastTime = 300 WHERE name = 'velocity_shot'; diff --git a/modules/soa/lua/job_adjustments.lua b/modules/soa/lua/job_adjustments.lua index f88791fdb03..ede5598b3de 100644 --- a/modules/soa/lua/job_adjustments.lua +++ b/modules/soa/lua/job_adjustments.lua @@ -3,6 +3,7 @@ -- Desc: Removes traits/abilities/effects that were added to jobs during the SoA era ----------------------------------- require('modules/module_utils') +local scavengeData = require('modules/soa/lua/scavenge_data') ----------------------------------- local m = Module:new('soa_job_adjustments') @@ -13,14 +14,86 @@ local m = Module:new('soa_job_adjustments') -- Last Resort: Reduces attack bonus from 25% to 15% -- Source: https://forum.square-enix.com/ffxi/threads/46976-May-14-2015-%28JST%29-Version-Update m:addOverride('xi.effects.last_resort.onEffectGain', function(target, effect) - local targetMerit = target:getMerit(xi.merit.LAST_RESORT_EFFECT) + local targetMerit = target:getMerit(xi.merit.LAST_RESORT_EFFECT) - -- Merit effect effect:addMod(xi.mod.ATTP, 15 + targetMerit) effect:addMod(xi.mod.RATTP, 15 + targetMerit) effect:addMod(xi.mod.DEFP, -15 - targetMerit) - effect:addMod(xi.mod.TWOHAND_HASTE_ABILITY, target:getMod(xi.mod.DESPERATE_BLOWS) + target:getMerit(xi.merit.DESPERATE_BLOWS)) end) +----------------------------------- +-- Ranger +-- Source: https://www.bg-wiki.com/ffxi/Version_Update_(04/29/2013) +----------------------------------- + +-- Scavenge: Revert to pre-SoA zone-based item gathering and reduce duration with merits +-- Source: https://ffxiclopedia.fandom.com/wiki/Scavenge/Items +m:addOverride('xi.job_utils.ranger.useScavenge', function(player, target, ability, action) + local meritReduction = player:getMerit(xi.merit.SCAVENGE_EFFECT) + ability:setRecast(ability:getRecast() - meritReduction) + + -- RNG AF2 quest check + if xi.job_utils.ranger.tryScavengeQuestItem(player) then + return 0 + end + + local playerID = target:getID() + local zonePool = scavengeData.zonePoolMap[player:getZoneID()] + + -- Zone has no scavenge pool, return nothing + if not zonePool then + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_NOTHING) + + return 0 + end + + -- Anti-camping check: must move at least 2 yalms from last Scavenge position + local curX = math.floor(player:getXPos()) + local curZ = math.floor(player:getZPos()) + local lastX = player:getLocalVar('[Scavenge]LastX') + local lastZ = player:getLocalVar('[Scavenge]LastZ') + player:setLocalVar('[Scavenge]LastX', curX) + player:setLocalVar('[Scavenge]LastZ', curZ) + + if lastX > 0 then + local lastPos = { x = lastX, y = 0, z = lastZ } + local curPos = { x = curX, y = 0, z = curZ } + + if utils.distanceWithin(lastPos, curPos, 2, true) then + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_NOTHING) + + return 0 + end + end + + -- Success rate check + if math.random(1, 100) > 25 + player:getMod(xi.mod.SCAVENGE_EFFECT) then + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_NOTHING) + + return 0 + end + + -- Build item pool from zone-specific and guaranteed items + local itemPool = {} + + for _, v in pairs(zonePool) do + itemPool[#itemPool + 1] = v + end + + itemPool[#itemPool + 1] = scavengeData.guaranteedItems[math.random(1, #scavengeData.guaranteedItems)] + + local selectedItem = itemPool[math.random(1, #itemPool)] + + if player:addItem(selectedItem) then + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_ITEM) + + return selectedItem + end + + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_NOTHING) + + return 0 +end) + return m diff --git a/modules/soa/lua/scavenge_data.lua b/modules/soa/lua/scavenge_data.lua new file mode 100644 index 00000000000..eda1b618b64 --- /dev/null +++ b/modules/soa/lua/scavenge_data.lua @@ -0,0 +1,200 @@ +----------------------------------- +-- Data file consumed by job_adjustments.lua for Scavenge zone pools +-- Source: https://ffxiclopedia.fandom.com/wiki/Scavenge/Items +----------------------------------- + +-- Items available from Scavenge in all zones +local guaranteedItems = +{ + xi.item.JAR_OF_FIRESAND, + xi.item.OLD_QUIVER, + xi.item.OLD_BOLT_BOX, + xi.item.OLD_BULLET_BOX, + xi.item.ROTTEN_QUIVER, + xi.item.RUSTY_BOLT_CASE, +} + +-- Zone-specific scavenge pools: arrowheads, bolt heads, fletchings, and lumber per zone tier +local scavengePools = +{ + -- General Zone Pool Tiers + OUTDOOR_1 = { xi.item.HANDFUL_OF_STONE_ARROWHEADS, xi.item.HANDFUL_OF_BRONZE_BOLT_HEADS, xi.item.BAG_OF_CHOCOBO_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + OUTDOOR_2 = { xi.item.HANDFUL_OF_BONE_ARROWHEADS, xi.item.HANDFUL_OF_BLIND_BOLT_HEADS, xi.item.BAG_OF_YAGUDO_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + OUTDOOR_3 = { xi.item.HANDFUL_OF_FANG_ARROWHEADS, xi.item.HANDFUL_OF_ACID_BOLT_HEADS, xi.item.BAG_OF_YAGUDO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + OUTDOOR_4 = { xi.item.HANDFUL_OF_SILVER_ARROWHEADS, xi.item.HANDFUL_OF_VENOM_BOLT_HEADS, xi.item.BAG_OF_YAGUDO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + OUTDOOR_5 = { xi.item.HANDFUL_OF_SCORPION_ARROWHEADS, xi.item.HANDFUL_OF_DARKSTEEL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + DUNGEON_1 = { xi.item.HANDFUL_OF_BONE_ARROWHEADS, xi.item.HANDFUL_OF_BLIND_BOLT_HEADS, xi.item.BAG_OF_CHOCOBO_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + DUNGEON_2 = { xi.item.HANDFUL_OF_ARMORED_ARROWHEADS, xi.item.HANDFUL_OF_VENOM_BOLT_HEADS, xi.item.BAG_OF_BLACK_CHOCOBO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + DUNGEON_3 = { xi.item.HANDFUL_OF_ARMORED_ARROWHEADS, xi.item.HANDFUL_OF_MYTHRIL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + DUNGEON_4 = { xi.item.HANDFUL_OF_SCORPION_ARROWHEADS, xi.item.HANDFUL_OF_MYTHRIL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + + -- Zone Specific Pools + ROTZ_COP = { xi.item.HANDFUL_OF_HORN_ARROWHEADS, xi.item.HANDFUL_OF_HOLY_BOLT_HEADS, xi.item.BAG_OF_BIRD_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + VALKURM = { xi.item.HANDFUL_OF_BONE_ARROWHEADS, xi.item.HANDFUL_OF_ACID_BOLT_HEADS, xi.item.BAG_OF_YAGUDO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + MOVALPOLOS = { xi.item.HANDFUL_OF_SILVER_ARROWHEADS, xi.item.HANDFUL_OF_VENOM_BOLT_HEADS, xi.item.BAG_OF_YAGUDO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + WEST_ALTEPA = { xi.item.HANDFUL_OF_SCORPION_ARROWHEADS, xi.item.HANDFUL_OF_HOLY_BOLT_HEADS, xi.item.BAG_OF_BIRD_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + QUICKSAND = { xi.item.HANDFUL_OF_ARMORED_ARROWHEADS, xi.item.HANDFUL_OF_HOLY_BOLT_HEADS, xi.item.BAG_OF_BIRD_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + TOAU_OUTDOORS = { xi.item.HANDFUL_OF_ARMORED_ARROWHEADS, xi.item.HANDFUL_OF_VENOM_BOLT_HEADS, xi.item.BAG_OF_BLACK_CHOCOBO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + HALVUNG = { xi.item.HANDFUL_OF_DEMON_ARROWHEADS, xi.item.HANDFUL_OF_DARKSTEEL_BOLT_HEADS, xi.item.BAG_OF_BLACK_CHOCOBO_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + + -- WotG Zones + SANDY_WOTG = { xi.item.HANDFUL_OF_SCORPION_ARROWHEADS, xi.item.HANDFUL_OF_MYTHRIL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + BASTOK_WOTG = { xi.item.HANDFUL_OF_ARMORED_ARROWHEADS, xi.item.HANDFUL_OF_MYTHRIL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, + FORT_KARUGO_S = { xi.item.HANDFUL_OF_ARMORED_ARROWHEADS, xi.item.HANDFUL_OF_MYTHRIL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + WINDY_WOTG = { xi.item.HANDFUL_OF_SCORPION_ARROWHEADS, xi.item.HANDFUL_OF_MYTHRIL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ARROWWOOD_LUMBER }, + NORTHLANDS_WOTG = { xi.item.HANDFUL_OF_DEMON_ARROWHEADS, xi.item.HANDFUL_OF_DARKSTEEL_BOLT_HEADS, xi.item.BAG_OF_INSECT_FLETCHINGS, xi.item.PIECE_OF_ASH_LUMBER }, +} + +-- Zone-to-pool mapping +local zonePoolMap = +{ + -- Starter Zones + [xi.zone.EAST_RONFAURE ] = scavengePools.OUTDOOR_1, + [xi.zone.WEST_RONFAURE ] = scavengePools.OUTDOOR_1, + [xi.zone.NORTH_GUSTABERG ] = scavengePools.OUTDOOR_1, + [xi.zone.SOUTH_GUSTABERG ] = scavengePools.OUTDOOR_1, + [xi.zone.WEST_SARUTABARUTA ] = scavengePools.OUTDOOR_1, + [xi.zone.EAST_SARUTABARUTA ] = scavengePools.OUTDOOR_1, + + -- Starter Dungeons/Beastmen Zones + [xi.zone.YUGHOTT_GROTTO ] = scavengePools.OUTDOOR_1, + [xi.zone.FORT_GHELSBA ] = scavengePools.OUTDOOR_1, + [xi.zone.GHELSBA_OUTPOST ] = scavengePools.OUTDOOR_1, + [xi.zone.KING_RANPERRES_TOMB ] = scavengePools.DUNGEON_1, + [xi.zone.DANGRUF_WADI ] = scavengePools.OUTDOOR_1, + [xi.zone.PALBOROUGH_MINES ] = scavengePools.DUNGEON_1, + [xi.zone.GIDDEUS ] = scavengePools.OUTDOOR_1, + [xi.zone.INNER_HORUTOTO_RUINS ] = scavengePools.DUNGEON_1, + [xi.zone.OUTER_HORUTOTO_RUINS ] = scavengePools.DUNGEON_1, + [xi.zone.KORROLOKA_TUNNEL ] = scavengePools.DUNGEON_1, + + -- Intermediate Outdoor Zones + [xi.zone.LA_THEINE_PLATEAU ] = scavengePools.OUTDOOR_2, + [xi.zone.KONSCHTAT_HIGHLANDS ] = scavengePools.OUTDOOR_2, + [xi.zone.VALKURM_DUNES ] = scavengePools.VALKURM, + [xi.zone.TAHRONGI_CANYON ] = scavengePools.OUTDOOR_2, + [xi.zone.BUBURIMU_PENINSULA ] = scavengePools.OUTDOOR_2, + + -- Intermediate Dungeons + [xi.zone.ORDELLES_CAVES ] = scavengePools.DUNGEON_1, + [xi.zone.MAZE_OF_SHAKHRAMI ] = scavengePools.DUNGEON_1, + [xi.zone.RANGUEMONT_PASS ] = scavengePools.DUNGEON_1, + [xi.zone.GUSGEN_MINES ] = scavengePools.DUNGEON_1, + [xi.zone.LOWER_DELKFUTTS_TOWER ] = scavengePools.DUNGEON_1, + + -- Mid-level field zones + [xi.zone.QUFIM_ISLAND ] = scavengePools.OUTDOOR_2, + [xi.zone.JUGNER_FOREST ] = scavengePools.OUTDOOR_3, + [xi.zone.PASHHOW_MARSHLANDS ] = scavengePools.OUTDOOR_3, + [xi.zone.MERIPHATAUD_MOUNTAINS ] = scavengePools.OUTDOOR_3, + [xi.zone.SAUROMUGUE_CHAMPAIGN ] = scavengePools.OUTDOOR_3, + [xi.zone.BIBIKI_BAY ] = scavengePools.OUTDOOR_3, + [xi.zone.MISAREAUX_COAST ] = scavengePools.OUTDOOR_3, + [xi.zone.BATALLIA_DOWNS ] = scavengePools.OUTDOOR_4, + [xi.zone.ROLANBERRY_FIELDS ] = scavengePools.OUTDOOR_4, + [xi.zone.LUFAISE_MEADOWS ] = scavengePools.OUTDOOR_4, + [xi.zone.THE_SANCTUARY_OF_ZITAH ] = scavengePools.OUTDOOR_4, + + -- Mid-level dungeons + [xi.zone.DAVOI ] = scavengePools.OUTDOOR_4, + [xi.zone.BEADEAUX ] = scavengePools.OUTDOOR_4, + [xi.zone.QULUN_DOME ] = scavengePools.DUNGEON_2, + [xi.zone.CASTLE_OZTROJA ] = scavengePools.OUTDOOR_4, + [xi.zone.THE_ELDIEME_NECROPOLIS ] = scavengePools.DUNGEON_3, + [xi.zone.GARLAIGE_CITADEL ] = scavengePools.DUNGEON_3, + [xi.zone.MONASTIC_CAVERN ] = scavengePools.DUNGEON_3, + [xi.zone.BOSTAUNIEUX_OUBLIETTE ] = scavengePools.DUNGEON_3, + [xi.zone.TORAIMARAI_CANAL ] = scavengePools.DUNGEON_3, + [xi.zone.MIDDLE_DELKFUTTS_TOWER ] = scavengePools.DUNGEON_3, + [xi.zone.OLDTON_MOVALPOLOS ] = scavengePools.MOVALPOLOS, + [xi.zone.NEWTON_MOVALPOLOS ] = scavengePools.MOVALPOLOS, + + -- High-level field zones + [xi.zone.BEAUCEDINE_GLACIER ] = scavengePools.OUTDOOR_5, + [xi.zone.XARCABARD ] = scavengePools.OUTDOOR_5, + [xi.zone.CARPENTERS_LANDING ] = scavengePools.OUTDOOR_4, + [xi.zone.CAPE_TERIGGAN ] = scavengePools.OUTDOOR_5, + [xi.zone.BEHEMOTHS_DOMINION ] = scavengePools.OUTDOOR_4, + [xi.zone.VALLEY_OF_SORROWS ] = scavengePools.OUTDOOR_5, + [xi.zone.ROMAEVE ] = scavengePools.OUTDOOR_5, + [xi.zone.ULEGUERAND_RANGE ] = scavengePools.OUTDOOR_5, + [xi.zone.THE_BOYAHDA_TREE ] = scavengePools.OUTDOOR_5, + + -- High-level dungeons + [xi.zone.CRAWLERS_NEST ] = scavengePools.DUNGEON_4, + [xi.zone.SEA_SERPENT_GROTTO ] = scavengePools.OUTDOOR_4, + [xi.zone.FEIYIN ] = scavengePools.OUTDOOR_4, + [xi.zone.LABYRINTH_OF_ONZOZO ] = scavengePools.OUTDOOR_4, + [xi.zone.GUSTAV_TUNNEL ] = scavengePools.OUTDOOR_4, + [xi.zone.CASTLE_ZVAHL_BAILEYS ] = scavengePools.OUTDOOR_5, + [xi.zone.CASTLE_ZVAHL_KEEP ] = scavengePools.OUTDOOR_5, + [xi.zone.UPPER_DELKFUTTS_TOWER ] = scavengePools.OUTDOOR_5, + + -- Zilart zones + [xi.zone.EASTERN_ALTEPA_DESERT ] = scavengePools.ROTZ_COP, + [xi.zone.WESTERN_ALTEPA_DESERT ] = scavengePools.WEST_ALTEPA, + [xi.zone.YUHTUNGA_JUNGLE ] = scavengePools.ROTZ_COP, + [xi.zone.YHOATOR_JUNGLE ] = scavengePools.ROTZ_COP, + [xi.zone.TEMPLE_OF_UGGALEPIH ] = scavengePools.ROTZ_COP, + [xi.zone.DEN_OF_RANCOR ] = scavengePools.ROTZ_COP, + [xi.zone.IFRITS_CAULDRON ] = scavengePools.ROTZ_COP, + [xi.zone.QUICKSAND_CAVES ] = scavengePools.QUICKSAND, + [xi.zone.KUFTAL_TUNNEL ] = scavengePools.DUNGEON_4, + + -- Chains of Promathia zones + [xi.zone.ATTOHWA_CHASM ] = scavengePools.ROTZ_COP, + [xi.zone.PSOXJA ] = scavengePools.OUTDOOR_4, + [xi.zone.PHOMIUNA_AQUEDUCTS ] = scavengePools.OUTDOOR_4, + [xi.zone.SACRARIUM ] = scavengePools.OUTDOOR_4, + [xi.zone.RIVERNE_SITE_A01 ] = scavengePools.OUTDOOR_4, + [xi.zone.RIVERNE_SITE_B01 ] = scavengePools.OUTDOOR_4, + + -- Aht Urhgan field zones + [xi.zone.BHAFLAU_THICKETS ] = scavengePools.TOAU_OUTDOORS, + [xi.zone.WAJAOM_WOODLANDS ] = scavengePools.TOAU_OUTDOORS, + [xi.zone.CAEDARVA_MIRE ] = scavengePools.TOAU_OUTDOORS, + [xi.zone.ARRAPAGO_REEF ] = scavengePools.OUTDOOR_4, + [xi.zone.MOUNT_ZHAYOLM ] = scavengePools.HALVUNG, + + -- Aht Urhgan dungeons + [xi.zone.HALVUNG ] = scavengePools.HALVUNG, + [xi.zone.MAMOOK ] = scavengePools.DUNGEON_4, + [xi.zone.AYDEEWA_SUBTERRANE ] = scavengePools.DUNGEON_4, + + -- Wings of the Goddess zones + -- San d'Oria Path + [xi.zone.EAST_RONFAURE_S ] = scavengePools.SANDY_WOTG, + [xi.zone.JUGNER_FOREST_S ] = scavengePools.OUTDOOR_4, + [xi.zone.BATALLIA_DOWNS_S ] = scavengePools.OUTDOOR_4, + [xi.zone.LA_VAULE_S ] = scavengePools.OUTDOOR_4, + [xi.zone.THE_ELDIEME_NECROPOLIS_S ] = scavengePools.OUTDOOR_4, + + -- Bastok Path + [xi.zone.NORTH_GUSTABERG_S ] = scavengePools.BASTOK_WOTG, + [xi.zone.ROLANBERRY_FIELDS_S ] = scavengePools.BASTOK_WOTG, + [xi.zone.BEADEAUX_S ] = scavengePools.BASTOK_WOTG, + [xi.zone.CRAWLERS_NEST_S ] = scavengePools.BASTOK_WOTG, + [xi.zone.PASHHOW_MARSHLANDS_S ] = scavengePools.BASTOK_WOTG, + [xi.zone.VUNKERL_INLET_S ] = scavengePools.BASTOK_WOTG, + [xi.zone.GRAUBERG_S ] = scavengePools.BASTOK_WOTG, + + -- Windurst Path + [xi.zone.WEST_SARUTABARUTA_S ] = scavengePools.WINDY_WOTG, + [xi.zone.FORT_KARUGO_NARUGO_S ] = scavengePools.FORT_KARUGO_S, + [xi.zone.MERIPHATAUD_MOUNTAINS_S ] = scavengePools.WINDY_WOTG, + [xi.zone.SAUROMUGUE_CHAMPAIGN_S ] = scavengePools.WINDY_WOTG, + [xi.zone.CASTLE_OZTROJA_S ] = scavengePools.WINDY_WOTG, + [xi.zone.GARLAIGE_CITADEL_S ] = scavengePools.OUTDOOR_4, + + -- Northlands Path + [xi.zone.BEAUCEDINE_GLACIER_S ] = scavengePools.NORTHLANDS_WOTG, + [xi.zone.XARCABARD_S ] = scavengePools.NORTHLANDS_WOTG, + [xi.zone.CASTLE_ZVAHL_BAILEYS_S ] = scavengePools.NORTHLANDS_WOTG, + [xi.zone.CASTLE_ZVAHL_KEEP_S ] = scavengePools.NORTHLANDS_WOTG, +} + +return +{ + guaranteedItems = guaranteedItems, + zonePoolMap = zonePoolMap, +} diff --git a/modules/soa/sql/job_adjustments.sql b/modules/soa/sql/job_adjustments.sql index a3928639144..78d82a519e7 100644 --- a/modules/soa/sql/job_adjustments.sql +++ b/modules/soa/sql/job_adjustments.sql @@ -9,7 +9,7 @@ ------------------------------------ -- Mug: Revert cooldown from 5 minutes to 15 minutes -UPDATE abilities SET recast = 900 WHERE name = 'mug'; +UPDATE abilities SET recastTime = 900 WHERE name = 'mug'; ------------------------------------ -- Dark Knight @@ -32,3 +32,14 @@ UPDATE abilities SET recastTime = 60 WHERE name = 'ready'; -- Sic merit: Revert value from 2 to 4 seconds per level UPDATE merits SET value = 4 WHERE name = 'sic_recast'; + +------------------------------------ +-- Ranger +-- Source: https://www.bg-wiki.com/ffxi/Version_Update_(04/29/2013) +------------------------------------ + +-- Scavenge: Revert recast from 3 to 5 minutes +UPDATE abilities SET recastTime = 300 WHERE name = 'scavenge'; + +-- Scavenge merit: Revert value from increase effect per level to 10 seconds per level +UPDATE merits SET value = 10 WHERE name = 'scavenge'; diff --git a/modules/soa/sql/weaponskills.sql b/modules/soa/sql/weaponskills.sql new file mode 100644 index 00000000000..4ae63eb0ea5 --- /dev/null +++ b/modules/soa/sql/weaponskills.sql @@ -0,0 +1,34 @@ +------------------------------------ +-- Seekers of Adoulin Weaponskill SQL Adjustments +-- This module reverts relevant SQL tables for weaponskills to their pre-SoA values +-- Source: https://www.bg-wiki.com/ffxi/Version_Update_(05/15/2012) +------------------------------------ + +-- Archery Weaponskills: Revert range from 20 to 15 yalms +UPDATE weapon_skills SET `range` = 15 WHERE `name` IN ( + 'flaming_arrow', + 'piercing_arrow', + 'dulling_arrow', + 'sidewinder', + 'arching_arrow', + 'empyreal_arrow', + 'namas_arrow', + 'refulgent_arrow', + 'jishnus_radiance', + 'apex_arrow' +); + +-- Marksmanship Weaponskills: Revert range from 20 to 15 yalms +UPDATE weapon_skills SET `range` = 15 WHERE `name` IN ( + 'hot_shot', + 'split_shot', + 'sniper_shot', + 'slug_shot', + 'heavy_shot', + 'detonator', + 'coronach', + 'trueflight', + 'leaden_salute', + 'wildfire', + 'last_stand' +); diff --git a/modules/wotg/lua/job_adjustments.lua b/modules/wotg/lua/job_adjustments.lua index 326143ad29c..6ee9597847f 100644 --- a/modules/wotg/lua/job_adjustments.lua +++ b/modules/wotg/lua/job_adjustments.lua @@ -16,4 +16,16 @@ m:addOverride('xi.effects.arcane_circle.onEffectGain', function(target, effect) effect:addMod(xi.mod.ARCANA_KILLER, effect:getPower()) end) +----------------------------------- +-- Ranger +----------------------------------- + +-- Camouflage: Remove reduced enmity and chance to retain after ranged attack +m:addOverride('xi.effects.camouflage.onEffectGain', function(target, effect) +end) + +-- Unlimited Shot: In WotG era, removed on any ranged attack, not just successful hits +m:addOverride('xi.effects.unlimited_shot.onEffectGain', function(target, effect) +end) + return m diff --git a/modules/wotg/sql/job_adjustments.sql b/modules/wotg/sql/job_adjustments.sql index 9b755f892dd..5e46d73792d 100644 --- a/modules/wotg/sql/job_adjustments.sql +++ b/modules/wotg/sql/job_adjustments.sql @@ -44,17 +44,17 @@ UPDATE `abilities` SET `recastTime` = 180 WHERE `name` = 'reward'; -- Reward merit: Revert value to 6 seconds per level UPDATE `merits` SET `value` = 6 WHERE `name` = 'reward'; --- Heel: Revert cooldown from 5 seconds to 10 seconds\ +-- Heel: Revert recast from 5 seconds to 10 seconds -- Source: http://www.playonline.com/pcd/update/ff11us/20071120wwnX41/detail.html -UPDATE `abilities` SET `cooldown` = 10 WHERE `name` = 'heel'; +UPDATE `abilities` SET `recastTime` = 10 WHERE `name` = 'heel'; --- Stay: Revert cooldown from 5 seconds to 10 seconds -UPDATE `abilities` SET `cooldown` = 10 WHERE `name` = 'stay'; +-- Stay: Revert recast from 5 seconds to 10 seconds +UPDATE `abilities` SET `recastTime` = 10 WHERE `name` = 'stay'; --- Leave: Revert cooldown from 5 seconds to 10 seconds -UPDATE `abilities` SET `cooldown` = 10 WHERE `name` = 'leave'; +-- Leave: Revert recast from 5 seconds to 10 seconds +UPDATE `abilities` SET `recastTime` = 10 WHERE `name` = 'leave'; --- Heel/Stay/Leave: Remove shared cooldown +-- Heel/Stay/Leave: Remove shared recast UPDATE `abilities` set `recastId` = 0 Where `name` = 'heel'; UPDATE `abilities` set `recastId` = 0 Where `name` = 'leave'; UPDATE `abilities` set `recastId` = 0 Where `name` = 'stay'; diff --git a/scripts/enum/item.lua b/scripts/enum/item.lua index 54c4430aa9a..f28537fbc2f 100644 --- a/scripts/enum/item.lua +++ b/scripts/enum/item.lua @@ -741,6 +741,14 @@ xi.item = GOBLIN_DOLL = 1239, KOMA = 1240, PINCH_OF_TWINKLE_POWDER = 1241, + HANDFUL_OF_BLIND_BOLT_HEADS = 1242, + HANDFUL_OF_ACID_BOLT_HEADS = 1243, + HANDFUL_OF_HOLY_BOLT_HEADS = 1244, + HANDFUL_OF_VENOM_BOLT_HEADS = 1245, + HANDFUL_OF_HORN_ARROWHEADS = 1249, + HANDFUL_OF_SCORPION_ARROWHEADS = 1250, + HANDFUL_OF_DEMON_ARROWHEADS = 1251, + BAG_OF_BLACK_CHOCOBO_FLETCHINGS = 1254, CHUNK_OF_FIRE_ORE = 1255, CHUNK_OF_ICE_ORE = 1256, CHUNK_OF_WIND_ORE = 1257, @@ -2504,6 +2512,7 @@ xi.item = EAST_SANDORIA_GLYPH = 4190, WINDURST_WOODS_GLYPH = 4195, ROTTEN_QUIVER = 4196, + RUSTY_BOLT_CASE = 4197, DRAGON_CHRONICLES = 4198, STRENGTH_POTION = 4199, BOTTLE_OF_MANA_BOOST = 4200, @@ -3207,6 +3216,8 @@ xi.item = MISTMELT = 5265, CHUNK_OF_SHUMEYO_SALT = 5267, CCB_POLYMER = 5268, + OLD_QUIVER = 5270, + OLD_BOLT_BOX = 5278, OLD_BULLET_BOX = 5284, CLUSTER_OF_BURNING_MEMORIES = 5286, CLUSTER_OF_BITTER_MEMORIES = 5287, diff --git a/scripts/enum/msg.lua b/scripts/enum/msg.lua index 8395fd97861..0b66057aa24 100644 --- a/scripts/enum/msg.lua +++ b/scripts/enum/msg.lua @@ -208,6 +208,9 @@ xi.msg.basic = FAMILIAR_MOB = 109, -- The uses .. Pet's powers increase! STEAL_SUCCESS = 125, -- uses . steals from . MUG_SUCCESS = 129, -- uses . mugs gil from . + SCAVENGE_FIND_NOTHING = 139, -- uses , but finds nothing. + SCAVENGE_FIND_ITEM = 140, -- uses , and finds . + SCAVENGE_FIND_ITEMS = 674, -- uses , and finds . STEAL_FAIL = 153, -- uses . fails to steal from . CANNOT_ON_THAT_TARG = 155, -- You cannot perform that action on the specified target. REQUIRES_SHIELD = 199, -- That action requires a shield. diff --git a/scripts/globals/job_utils/ranger.lua b/scripts/globals/job_utils/ranger.lua index 0327d3393c9..93a5aa93d96 100644 --- a/scripts/globals/job_utils/ranger.lua +++ b/scripts/globals/job_utils/ranger.lua @@ -211,7 +211,7 @@ xi.job_utils.ranger.useScavenge = function(player, target, ability, action) local playerID = target:getID() if arrowsToReturn == 0 then - action:messageID(playerID, 139) + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_NOTHING) else if arrowsToReturn > 99 then arrowsToReturn = 99 @@ -221,9 +221,9 @@ xi.job_utils.ranger.useScavenge = function(player, target, ability, action) player:addItem(arrowID, arrowsToReturn) if arrowsToReturn == 1 then - action:messageID(playerID, 140) + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_ITEM) else - action:messageID(playerID, 674) + action:messageID(playerID, xi.msg.basic.SCAVENGE_FIND_ITEMS) action:additionalEffect(playerID, 1) action:addEffectParam(playerID, arrowsToReturn) end