From 85699272c0909c42fa23a42f5d70e515e2e7fdb7 Mon Sep 17 00:00:00 2001 From: TracentEden <92269743+TracentEden@users.noreply.github.com> Date: Sun, 13 Apr 2025 18:16:14 +0300 Subject: [PATCH] Add ouryu cometh Co-Authored-By: CriticalXI Co-Authored-By: Frankie-hz Co-Authored-By: siknoz --- .../Riverne_Site_A01/ouryu_cometh.lua | 63 ++++++ scripts/zones/Riverne-Site_A01/IDs.lua | 8 + .../Riverne-Site_A01/mobs/Earth_Elemental.lua | 22 +++ scripts/zones/Riverne-Site_A01/mobs/Ouryu.lua | 182 +++++++++++++++++- .../Riverne-Site_A01/mobs/Water_Elemental.lua | 22 +++ scripts/zones/Riverne-Site_A01/mobs/Ziryu.lua | 76 ++++++++ sql/mob_droplist.sql | 29 ++- sql/mob_groups.sql | 8 +- sql/mob_pools.sql | 2 +- sql/mob_skills.sql | 2 +- sql/mob_spawn_points.sql | 6 +- sql/mob_spell_lists.sql | 16 +- sql/npc_list.sql | 2 +- 13 files changed, 417 insertions(+), 21 deletions(-) create mode 100644 scripts/battlefields/Riverne_Site_A01/ouryu_cometh.lua create mode 100644 scripts/zones/Riverne-Site_A01/mobs/Earth_Elemental.lua create mode 100644 scripts/zones/Riverne-Site_A01/mobs/Water_Elemental.lua create mode 100644 scripts/zones/Riverne-Site_A01/mobs/Ziryu.lua diff --git a/scripts/battlefields/Riverne_Site_A01/ouryu_cometh.lua b/scripts/battlefields/Riverne_Site_A01/ouryu_cometh.lua new file mode 100644 index 00000000000..de5c0d58eb8 --- /dev/null +++ b/scripts/battlefields/Riverne_Site_A01/ouryu_cometh.lua @@ -0,0 +1,63 @@ +----------------------------------- +-- Area: Riverne Site #A01 +-- Name: Ouryu Cometh +-- !pos 187.112 -0.5 346.341 30 +----------------------------------- + +local content = Battlefield:new({ + zoneId = xi.zone.RIVERNE_SITE_A01, + battlefieldId = xi.battlefield.id.OURYU_COMETH, + maxPlayers = 18, + levelCap = 99, + timeLimit = utils.minutes(60), + index = 0, + area = 1, + entryNpc = 'Unstable_Displacement', + exitNpc = 'Spatial_Displacement_BC', + requiredItems = { xi.item.CLOUD_EVOKER } +}) + +local function healCharacter(player) + if player:isAlive() then + player:setHP(player:getMaxHP()) + player:setMP(player:getMaxMP()) + player:setTP(0) + + if player:getPet() ~= nil then + local pet = player:getPet() + pet:setHP(pet:getMaxHP()) + pet:setMP(pet:getMaxMP()) + pet:setTP(0) + end + end +end + +-- players on healed on entry to the battlefield +function content:battlefieldEntry(player, battlefield) + healCharacter(player) +end + +content.groups = +{ + { + mobs = { 'Ouryu' }, + superlinkGroup = 1, + + -- This death handler needs to be defined locally since there is no armoury crate. + allDeath = function(battlefield, mob) + battlefield:setStatus(xi.battlefield.status.WON) + end, + }, + + { + mobs = { 'Ziryu' }, + superlinkGroup = 1, + spawned = false, + }, + + { + mobs = { 'Water_Elemental', 'Earth_Elemental' }, + } +} + +return content:register() diff --git a/scripts/zones/Riverne-Site_A01/IDs.lua b/scripts/zones/Riverne-Site_A01/IDs.lua index 2c110df8aa3..4797fd4edb2 100644 --- a/scripts/zones/Riverne-Site_A01/IDs.lua +++ b/scripts/zones/Riverne-Site_A01/IDs.lua @@ -17,8 +17,14 @@ zones[xi.zone.RIVERNE_SITE_A01] = LOGIN_NUMBER = 7004, -- In celebration of your most recent login (login no. ), we have provided you with points! You currently have a total of points. MEMBERS_LEVELS_ARE_RESTRICTED = 7024, -- Your party is unable to participate because certain members' levels are restricted. CONQUEST_BASE = 7068, -- Tallying conquest results... + TIME_IN_THE_BATTLEFIELD_IS_UP = 7232, -- Your time in the battlefield is up! Now exiting... + PARTY_MEMBERS_ARE_ENGAGED = 7247, -- The battlefield where your party members are engaged in combat is locked. Access is denied. A_GLOWING_MIST = 7263, -- A glowing mist of ever-changing proportions floats before you... + MEMBERS_OF_YOUR_PARTY = 7538, -- Currently, # members of your party (including yourself) have clearance to enter the battlefield. + MEMBERS_OF_YOUR_ALLIANCE = 7539, -- Currently, # members of your alliance (including yourself) have clearance to enter the battlefield. + TIME_LIMIT_FOR_THIS_BATTLE_IS = 7541, -- The time limit for this battle is # minutes. PARTY_MEMBERS_HAVE_FALLEN = 7577, -- All party members have fallen in battle. Now leaving the battlefield. + ENTERING_THE_BATTLEFIELD_FOR = 7604, -- Entering the battlefield for [Ouryu Cometh]. FIX!!!!!! THE_PARTY_WILL_BE_REMOVED = 7584, -- If all party members' HP are still zero after # minute[/s], the party will be removed from the battlefield. SD_VERY_SMALL = 7608, -- The spatial displacement is very small. If you only had some item that could make it bigger... SD_HAS_GROWN = 7609, -- The spatial displacement has grown. @@ -26,12 +32,14 @@ zones[xi.zone.RIVERNE_SITE_A01] = MONUMENT = 7617, -- Something has been engraved on this stone, but the message is too difficult to make out. HOMEPOINT_SET = 7745, -- Home point set! UNITY_WANTED_BATTLE_INTERACT = 7803, -- Those who have accepted % must pay # Unity accolades to participate. The content for this Wanted battle is #. [Ready to begin?/You do not have the appropriate object set, so your rewards will be limited.] + -- NO_BATTLEFIELD_ENTRY = , -- TODO: determine the correct message for NO_BATTLEFIELD_ENTRY }, mob = { HELIODROMOS_OFFSET = GetFirstID('Heliodromos'), CARMINE_DOBSONFLY_OFFSET = GetFirstID('Carmine_Dobsonfly'), AIATAR = GetFirstID('Aiatar'), + ZIRYU = GetTableOfIDs('Ziryu'), }, npc = { diff --git a/scripts/zones/Riverne-Site_A01/mobs/Earth_Elemental.lua b/scripts/zones/Riverne-Site_A01/mobs/Earth_Elemental.lua new file mode 100644 index 00000000000..a47b4e176ad --- /dev/null +++ b/scripts/zones/Riverne-Site_A01/mobs/Earth_Elemental.lua @@ -0,0 +1,22 @@ +----------------------------------- +-- Area: Riverne - Site A01 +-- Mob: Earth Elemental +-- Notes: in Ouryu Cometh +----------------------------------- +---@type TMobEntity +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.ROAM_DISTANCE, 500) +end + +entity.onMobSpawn = function(mob) + -- TODO: add building sleep resistance after added to LSB + -- capture shows about 1 second shorter sleep each time +end + +entity.onMobDespawn = function(mob) + mob:setRespawnTime(120) +end + +return entity diff --git a/scripts/zones/Riverne-Site_A01/mobs/Ouryu.lua b/scripts/zones/Riverne-Site_A01/mobs/Ouryu.lua index abc68683be5..49195eb2570 100644 --- a/scripts/zones/Riverne-Site_A01/mobs/Ouryu.lua +++ b/scripts/zones/Riverne-Site_A01/mobs/Ouryu.lua @@ -1,13 +1,122 @@ ----------------------------------- --- Ouryu Cometh --- Riverne Site A, Cloud Evokers +-- Area: Riverne - Site A01 +-- Mob: Ouryu +-- Notes: in Ouryu Cometh (Cloud Evoker) -- !pos 184 0 344 30 ----------------------------------- +mixins = { require('scripts/mixins/job_special') } +----------------------------------- ---@type TMobEntity local entity = {} +local offsets = { 1, 2, 3, 4 } +local hpToNextPhase = 6000 +local initialPhaseDuration = 120 +local subsequentPhaseDuration = 120 +-- TODO: eventually use animationsub 4, 5, 6 below (as indicated by capture) +-- once touchdown mobskill and mistmelt support +local initialGroundPhaseAnimationSub = 0 +local allFlightPhaseAnimationSub = 1 +local subsequentGroundPhaseAnimationSub = 2 + +local function setNextPhaseTriggers(mob, phaseDuration) + local battleTime = 0 + if mob:isEngaged() then + battleTime = mob:getBattleTime() + end + + mob:setLocalVar('nextPhaseTime', battleTime + phaseDuration) + mob:setLocalVar('nextPhaseHP', math.max(mob:getHP() - hpToNextPhase, 0)) +end + +local function fly(mob) + mob:setAnimationSub(allFlightPhaseAnimationSub) + mob:addStatusEffectEx(xi.effect.ALL_MISS, 0, 1, 0, 0) + mob:setMobSkillAttack(731) + setNextPhaseTriggers(mob, subsequentPhaseDuration) +end + +local function landWithoutTouchdown(mob) + -- if flying + if mob:getAnimationSub() == allFlightPhaseAnimationSub then + -- need to still show the touchdown animation (as per capture) + mob:injectActionPacket(mob:getID(), 11, 974, 0, 0x18, 0, 0, 0) + end + + mob:setAnimationSub(subsequentGroundPhaseAnimationSub) + mob:delStatusEffect(xi.effect.ALL_MISS) + mob:setMobSkillAttack(0) + setNextPhaseTriggers(mob, subsequentPhaseDuration) + -- always set this no matter how ouryu lands to avoid any issues + mob:setLocalVar('mistmeltUsed', 0) +end + entity.onMobSpawn = function(mob) - mob:setMobMod(xi.mobMod.WEAPON_BONUS, 60) -- Level 85 + 60 = 145 Base Weapon Damage + mob:setMobMod(xi.mobMod.ADD_EFFECT, 1) + mob:setMobMod(xi.mobMod.NO_STANDBACK, 1) + -- resetting so it doesn't respawn in flight mode + mob:setMobSkillAttack(0) + -- subanim 0 is only used when it spawns until first flight + mob:setAnimationSub(initialGroundPhaseAnimationSub) + if mob:hasStatusEffect(xi.effect.ALL_MISS) then + mob:delStatusEffect(xi.effect.ALL_MISS) + end + + -- Level 90 + 2 + 53 = 145 Base Weapon Damage + mob:setMobMod(xi.mobMod.WEAPON_BONUS, 53) + mob:setMod(xi.mod.UDMGRANGE, -5000) + mob:setMod(xi.mod.UDMGMAGIC, -5000) + mob:setMod(xi.mod.UDMGBREATH, -5000) + mob:addImmunity(xi.immunity.SLOW) + mob:addImmunity(xi.immunity.TERROR) + mob:addImmunity(xi.immunity.STUN) + mob:addImmunity(xi.immunity.PLAGUE) + mob:addImmunity(xi.immunity.ELEGY) + mob:addImmunity(xi.immunity.PETRIFY) + mob:setMod(xi.mod.UFASTCAST, 90) + mob:setMobMod(xi.mobMod.DETECTION, bit.bor(xi.detects.SIGHT, xi.detects.HEARING)) + mob:setMobMod(xi.mobMod.SIGHT_RANGE, 20) + mob:setMobMod(xi.mobMod.SOUND_RANGE, 15) + -- consider making new mob group so spell list can be set there + mob:setSpellList(548) + mob:setMobMod(xi.mobMod.MAGIC_COOL, 60) + mob:setMod(xi.mod.DOUBLE_ATTACK, 10) + mob:setMod(xi.mod.REFRESH, 200) + + -- can use invincible on ground or air + xi.mix.jobSpecial.config(mob, { + specials = + { + { id = xi.jsa.INVINCIBLE, hpp = math.random(50, 85) }, + }, + }) + + -- set on spawn as the first damage can occur already before onMobEngage + setNextPhaseTriggers(mob, initialPhaseDuration) +end + +entity.onMobEngage = function(mob) + -- spawn ziryu and elementals only on mob engage (not at start of BCNM) + local mobId = mob:getID() + for i, offset in ipairs(offsets) do + local pet = GetMobByID(mobId + offset) + if pet and not pet:isSpawned() then + pet:spawn() + end + end + + -- track if already engaged once so can set the the correct phase duration if roams + if mob:getLocalVar('alreadyEngagedOnce') == 0 then + mob:setLocalVar('alreadyEngagedOnce', 1) + end +end + +entity.onMobRoam = function(mob) + -- if already engaged once then keep setting phase triggers + -- since damage can occur even before onMobEngage + if mob:getLocalVar('alreadyEngagedOnce') == 1 then + setNextPhaseTriggers(mob, subsequentPhaseDuration) + end end entity.onMobFight = function(mob, target) @@ -20,6 +129,73 @@ entity.onMobFight = function(mob, target) position = mob:getPos(), } utils.drawIn(target, drawInTable) + + -- valid conditions for a change + if + mob:actionQueueEmpty() and + mob:canUseAbilities() + then + local nextPhaseTime = mob:getLocalVar('nextPhaseTime') + local nextPhaseHP = mob:getLocalVar('nextPhaseHP') + local mistmeltUsed = mob:getLocalVar('mistmeltUsed') + + if + mob:getBattleTime() > nextPhaseTime or + mob:getHP() < nextPhaseHP + then + -- subanimation 0 is the initial on ground animation, so check if should fly + if mob:getAnimationSub() == initialGroundPhaseAnimationSub then + fly(mob) + -- subanimation 1 is flying animation, so check if should land + elseif mob:getAnimationSub() == allFlightPhaseAnimationSub then + -- use touchdown mobskill + -- touchdown script changes the animation sub, miss status, and mob skill attack + mob:useMobAbility(1302) + -- subanimation 2 is on ground animation, so check if should fly + elseif mob:getAnimationSub() == subsequentGroundPhaseAnimationSub then + fly(mob) + end + -- mistmelt also works on this ouryu + elseif + mistmeltUsed == 1 and + mob:getAnimationSub() == allFlightPhaseAnimationSub + then + landWithoutTouchdown(mob) + end + end + + -- Wakeup from sleep immediately if flying + if mob:getAnimationSub() == allFlightPhaseAnimationSub then + mob:wakeUp() + end +end + +entity.onMobWeaponSkill = function(target, mob, skill) + -- only reset change vars if actually perform touchdown mobskill + if skill:getID() == 1302 then + setNextPhaseTriggers(mob, subsequentPhaseDuration) + -- always set this no matter how ouryu lands to avoid any issues + mob:setLocalVar('mistmeltUsed', 0) + end +end + +entity.onMobDespawn = function(mob) + -- if ouryu despawns then also then despawn all ziryu + local mobId = mob:getID() + for i, offset in ipairs(offsets) do + local pet = GetMobByID(mobId + offset) + if pet and pet:isAlive() then + DespawnMob(mobId + offset) + end + end +end + +entity.onMobDisengage = function(mob) + landWithoutTouchdown(mob) +end + +entity.onAdditionalEffect = function(mob, target, damage) + return xi.mob.onAddEffect(mob, target, damage, xi.mob.ae.ENSTONE, { damage = math.random(89, 111), chance = 10 }) end entity.onMobDeath = function(mob, player, optParams) diff --git a/scripts/zones/Riverne-Site_A01/mobs/Water_Elemental.lua b/scripts/zones/Riverne-Site_A01/mobs/Water_Elemental.lua new file mode 100644 index 00000000000..5c862bf0e73 --- /dev/null +++ b/scripts/zones/Riverne-Site_A01/mobs/Water_Elemental.lua @@ -0,0 +1,22 @@ +----------------------------------- +-- Area: Riverne - Site A01 +-- Mob: Water Elemental +-- Notes: in Ouryu Cometh +----------------------------------- +---@type TMobEntity +local entity = {} + +entity.onMobInitialize = function(mob) + mob:setMobMod(xi.mobMod.ROAM_DISTANCE, 500) +end + +entity.onMobSpawn = function(mob) + -- TODO: add building sleep resistance after added to LSB + -- capture shows about 1 second shorter sleep each time +end + +entity.onMobDespawn = function(mob) + mob:setRespawnTime(60) +end + +return entity diff --git a/scripts/zones/Riverne-Site_A01/mobs/Ziryu.lua b/scripts/zones/Riverne-Site_A01/mobs/Ziryu.lua new file mode 100644 index 00000000000..a9139859207 --- /dev/null +++ b/scripts/zones/Riverne-Site_A01/mobs/Ziryu.lua @@ -0,0 +1,76 @@ +----------------------------------- +-- Area: Riverne - Site A01 +-- Mob: Ziryu +-- Notes: in Ouryu Cometh +----------------------------------- +local ID = zones[xi.zone.RIVERNE_SITE_A01] +----------------------------------- +---@type TMobEntity +local entity = {} + +local ziryuOne = +{ + { 46.836, 76.828, -758.276 }, + { 26.248, 76.607, -750.256 }, + { 42.179, 76.290, -752.683 }, + { 26.127, 76.550, -767.194 }, + { 35.687, 76.152, -757.707 }, + { 48.250, 76.524, -766.964 }, + { 50.825, 76.781, -756.612 }, + { 38.753, 76.809, -771.376 }, +} + +local ziryuTwo = +{ + { -5.680, 76.098, -753.375 }, + { -7.673, 76.109, -753.720 }, + { -5.063, 76.632, -769.115 }, + { 5.228, 76.399, -767.280 }, + { 5.263, 76.308, -757.192 }, + { -4.365, 76.112, -750.562 }, + { -0.636, 76.000, -763.672 }, +} + +local ziryuThree = +{ + { 0.744, 76.462, -712.730 }, + { 3.663, 76.234, -710.823 }, + { 0.834, 76.032, -721.327 }, + { 9.013, 76.413, -722.767 }, + { -2.091, 76.000, -718.037 }, + { 10.238, 76.550, -724.555 }, +} + +local ziryuFour = +{ + { 10.129, 65.914, -736.797 }, + { 9.715, 76.785, -744.856 }, + { 22.027, 76.512, -730.651 }, + { 36.108, 76.590, -710.141 }, + { 49.704, 76.034, -722.611 }, +} + +entity.onMobSpawn = function(mob) + mob:setMobMod(xi.mobMod.CHARMABLE, 1) + mob:setMobMod(xi.mobMod.SOUND_RANGE, 30) +end + +entity.onMobDespawn = function(mob) + mob:setRespawnTime(120) + local randspawn1 = ziryuOne[math.random((1), (8))] + local randspawn2 = ziryuTwo[math.random((1), (7))] + local randspawn3 = ziryuThree[math.random((1), (6))] + local randspawn4 = ziryuFour[math.random((1), (5))] + + if mob:getID() == ID.mob.ZIRYU[1] then + mob:setSpawn(randspawn1[1], randspawn1[2], randspawn1[3]) + elseif mob:getID() == ID.mob.ZIRYU[2] then + mob:setSpawn(randspawn2[1], randspawn2[2], randspawn2[3]) + elseif mob:getID() == ID.mob.ZIRYU[3] then + mob:setSpawn(randspawn3[1], randspawn3[2], randspawn3[3]) + elseif mob:getID() == ID.mob.ZIRYU[4] then + mob:setSpawn(randspawn4[1], randspawn4[2], randspawn4[3]) + end +end + +return entity diff --git a/sql/mob_droplist.sql b/sql/mob_droplist.sql index 89d5b0055ca..5b874ee9328 100644 --- a/sql/mob_droplist.sql +++ b/sql/mob_droplist.sql @@ -16187,7 +16187,30 @@ INSERT INTO `mob_droplist` VALUES (1961,0,0,1000,739,@UNCOMMON); -- Chunk Of O INSERT INTO `mob_droplist` VALUES (1961,0,0,1000,2810,@RARE); -- Vial Of Ebur Pigment (Rare, 5%) INSERT INTO `mob_droplist` VALUES (1961,0,0,1000,19280,@UNCOMMON); -- Narigitsune (Uncommon, 10%) --- 1962 Available +-- Ouryu Cometh BCNM +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,1110,190); -- Beetle Blood +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,655,90); -- Adaman Ingot +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,860,50); -- Behemoth Hide +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,836,140); -- Damascene Cloth +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,658,100); -- Damascus Ingot +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,722,95); -- Divine Log +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,837,185); -- Malboro Fiber +INSERT INTO `mob_droplist` VALUES (1962,1,1,794,1313,150); -- Siren's Hair +INSERT INTO `mob_droplist` VALUES (1962,1,2,775,1133,250); -- Dragon Blood +INSERT INTO `mob_droplist` VALUES (1962,1,2,775,4272,600); -- Dragon Meat +INSERT INTO `mob_droplist` VALUES (1962,1,2,775,903,150); -- Dragon Talon +INSERT INTO `mob_droplist` VALUES (1962,0,0,1000,1703,@ALWAYS); -- Kunwu Ore +INSERT INTO `mob_droplist` VALUES (1962,0,0,1000,1703,@ALWAYS); -- Kunwu Ore +INSERT INTO `mob_droplist` VALUES (1962,0,0,1000,1703,@ALWAYS); -- Kunwu Ore +INSERT INTO `mob_droplist` VALUES (1962,0,0,1000,2108,@ALWAYS); -- Monarch's Orb +INSERT INTO `mob_droplist` VALUES (1962,0,0,1000,17658,@ALWAYS); -- Tutelary +INSERT INTO `mob_droplist` VALUES (1962,0,0,1000,1816,@ALWAYS); -- Wyrm Horn +INSERT INTO `mob_droplist` VALUES (1962,1,3,361,4486,200); -- Dragon Heart +INSERT INTO `mob_droplist` VALUES (1962,1,3,361,836,200); -- Damascene Cloth +INSERT INTO `mob_droplist` VALUES (1962,1,3,361,17799,600); -- Imanotsurugi +INSERT INTO `mob_droplist` VALUES (1962,1,4,216,1133,600); -- Dragon Blood +INSERT INTO `mob_droplist` VALUES (1962,1,4,216,903,250); -- Dragon Talon +INSERT INTO `mob_droplist` VALUES (1962,1,4,216,1311,150); -- Oxblood -- ZoneID: 218 - Ouzelum -- TODO: Abyssea NM INSERT INTO `mob_droplist` VALUES (1963,0,0,1000,19292,@COMMON); -- Kogara (Common, 15%) @@ -23620,8 +23643,8 @@ INSERT INTO `mob_droplist` VALUES (2803,4,0,1000,4409,0); -- Hard-Boiled E INSERT INTO `mob_droplist` VALUES (2803,4,0,1000,4552,0); -- Serving Of Herb Crawler Eggs (Despoil) -- ZoneID: 30 - Ziryu -INSERT INTO `mob_droplist` VALUES (2804,0,0,1000,1830,@UNCOMMON); -- Sack Of Lugworm Sand (Uncommon, 10%) -INSERT INTO `mob_droplist` VALUES (2804,0,0,1000,1831,@UNCOMMON); -- Sack Of Little Worm Mulch (Uncommon, 10%) +INSERT INTO `mob_droplist` VALUES (2804,0,0,1000,1830,@COMMON); -- Sack Of Lugworm Sand (Common, 15%) +INSERT INTO `mob_droplist` VALUES (2804,0,0,1000,1831,@COMMON); -- Sack Of Little Worm Mulch (Common, 15%) -- ZoneID: 65 - Ziz -- ZoneID: 77 - Ziz diff --git a/sql/mob_groups.sql b/sql/mob_groups.sql index b5581acca97..b41233e7629 100644 --- a/sql/mob_groups.sql +++ b/sql/mob_groups.sql @@ -1162,10 +1162,10 @@ INSERT INTO `mob_groups` VALUES (11,1355,30,'Flamedrake',330,0,841,0,0,47,49,0); INSERT INTO `mob_groups` VALUES (12,641,30,'Carmine_Dobsonfly',86400,0,418,1550,0,44,45,0); INSERT INTO `mob_groups` VALUES (13,4532,30,'Darner',330,0,142,0,0,84,85,0); INSERT INTO `mob_groups` VALUES (14,68,30,'Aiatar',0,32,35,6500,0,44,45,0); -INSERT INTO `mob_groups` VALUES (15,4309,30,'Water_Elemental',0,128,2629,0,0,75,75,0); -INSERT INTO `mob_groups` VALUES (16,1160,30,'Earth_Elemental',0,128,733,0,0,75,75,0); -INSERT INTO `mob_groups` VALUES (17,3070,30,'Ouryu',0,128,0,50000,0,85,85,0); -INSERT INTO `mob_groups` VALUES (18,4507,30,'Ziryu',0,128,2804,0,0,75,75,0); +INSERT INTO `mob_groups` VALUES (15,4309,30,'Water_Elemental',0,128,2629,1100,0,72,73,0); +INSERT INTO `mob_groups` VALUES (16,1160,30,'Earth_Elemental',0,128,733,1100,0,72,73,0); +INSERT INTO `mob_groups` VALUES (17,3070,30,'Ouryu',0,128,1962,50000,0,90,90,0); +INSERT INTO `mob_groups` VALUES (18,4507,30,'Ziryu',0,128,2804,0,0,72,74,0); INSERT INTO `mob_groups` VALUES (19,215,30,'Arcane_Phantasm',0,128,0,0,0,44,45,0); INSERT INTO `mob_groups` VALUES (20,3596,30,'Shieldtrap',0,128,2235,0,0,39,44,0); diff --git a/sql/mob_pools.sql b/sql/mob_pools.sql index 830834bc7c2..fa9968805f4 100644 --- a/sql/mob_pools.sql +++ b/sql/mob_pools.sql @@ -4561,7 +4561,7 @@ INSERT INTO `mob_pools` VALUES (4503,'Zikko','Zikko',165,0x0000BE060000000000000 INSERT INTO `mob_pools` VALUES (4504,'Zipacna','Zipacna',135,0x0000B00100000000000000000000000000000000,1,1,11,320,100,0,1,0,0,2,0,0,20,129,0,0,0,0,0,135,135); INSERT INTO `mob_pools` VALUES (4505,'Ziphius','Ziphius',197,0x00005C0100000000000000000000000000000000,1,1,7,240,100,0,0,0,0,2,0,32,5580,153,0,0,0,0,0,197,197); INSERT INTO `mob_pools` VALUES (4506,'Zircon_Quadav','Zircon_Quadav',202,0x0000950200000000000000000000000000000000,4,4,5,265,100,0,1,0,1,0,0,0,126,131,0,0,2,0,0,202,202); -INSERT INTO `mob_pools` VALUES (4507,'Ziryu','Ziryu',258,0x0000A80100000000000000000000000000000000,4,5,7,240,100,0,0,0,1,16,0,0,1466,133,0,0,9,0,64,258,258); +INSERT INTO `mob_pools` VALUES (4507,'Ziryu','Ziryu',258,0x0000A80100000000000000000000000000000000,4,5,7,240,100,0,1,0,1,16,0,0,1466,133,0,0,9,0,64,258,258); INSERT INTO `mob_pools` VALUES (4508,'Ziz','Ziz',70,0x0000210100000000000000000000000000000000,1,1,11,240,100,0,1,0,0,0,0,0,298,131,13,0,0,0,0,70,70); INSERT INTO `mob_pools` VALUES (4509,'Zizzy_Zillah','Zizzy_Zillah',70,0x0000210100000000000000000000000000000000,1,1,5,240,100,0,1,0,0,2,6144,32,0,3,0,0,0,0,0,70,70); INSERT INTO `mob_pools` VALUES (4510,'ZiBhe_Gauntletkeeper','ZiBhe_Gauntletkeeper',202,0x00009D0200000000000000000000000000000000,1,1,7,265,100,0,1,0,1,0,0,0,0,0,0,0,0,0,0,202,202); diff --git a/sql/mob_skills.sql b/sql/mob_skills.sql index bb9cf6d531c..11531b1269d 100644 --- a/sql/mob_skills.sql +++ b/sql/mob_skills.sql @@ -1316,7 +1316,7 @@ INSERT INTO `mob_skills` VALUES (1298,966,'ochre_blast_alt',0,0.0,18.0,2000,0,4, INSERT INTO `mob_skills` VALUES (1299,653,'typhoon_wing',1,0.0,30.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (1300,654,'spike_flail',1,0.0,23.0,2000,2000,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (1301,965,'geotic_breath',4,0.0,18.0,2000,1500,4,0,0,0,0,0,0); -INSERT INTO `mob_skills` VALUES (1302,656,'touchdown',1,0.0,6.0,2000,0,4,0,0,0,0,0,0); +INSERT INTO `mob_skills` VALUES (1302,656,'touchdown',1,0.0,30.0,2000,0,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (1303,967,'ochre_blast',1,0.0,23.0,2000,2000,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (1304,658,'bai_wing',1,0.0,30.0,2000,1500,4,0,0,0,0,0,0); INSERT INTO `mob_skills` VALUES (1305,659,'absolute_terror',1,0.0,18.0,4000,1500,4,0,0,0,0,0,0); diff --git a/sql/mob_spawn_points.sql b/sql/mob_spawn_points.sql index 05e76b22bff..8a41d38a267 100644 --- a/sql/mob_spawn_points.sql +++ b/sql/mob_spawn_points.sql @@ -6174,11 +6174,11 @@ INSERT INTO `mob_spawn_points` VALUES (16900308,'Atomic_Cluster','Atomic Cluster INSERT INTO `mob_spawn_points` VALUES (16900309,'Atomic_Cluster','Atomic Cluster',10,-61.948,0.385,723.499,255); INSERT INTO `mob_spawn_points` VALUES (16900310,'Atomic_Cluster','Atomic Cluster',10,-71.947,0.316,695.067,112); INSERT INTO `mob_spawn_points` VALUES (16900311,'Atomic_Cluster','Atomic Cluster',10,-61.079,0.213,704.609,133); -INSERT INTO `mob_spawn_points` VALUES (16900312,'Water_Elemental','Water Elemental',15,45.802,76.114,-711.050,165); -INSERT INTO `mob_spawn_points` VALUES (16900313,'Earth_Elemental','Earth Elemental',16,43.430,75.886,-711.758,214); +INSERT INTO `mob_spawn_points` VALUES (16900312,'Water_Elemental','Water Elemental',15,9.27,75.83,-721.02,0); +INSERT INTO `mob_spawn_points` VALUES (16900313,'Earth_Elemental','Earth Elemental',16,-0.28,76.34,-737.49,41); -- Ouryu Cometh -INSERT INTO `mob_spawn_points` VALUES (16900314,'Ouryu','Ouryu',17,43.295,76.478,-739.572,8); +INSERT INTO `mob_spawn_points` VALUES (16900314,'Ouryu','Ouryu',17,18.67,76.18,-740.65,224); INSERT INTO `mob_spawn_points` VALUES (16900315,'Ziryu','Ziryu',18,-8.300,75.828,-757.276,100); INSERT INTO `mob_spawn_points` VALUES (16900316,'Ziryu','Ziryu',18,0.680,76.098,-728.375,143); INSERT INTO `mob_spawn_points` VALUES (16900317,'Ziryu','Ziryu',18,20.744,76.462,-756.730,229); diff --git a/sql/mob_spell_lists.sql b/sql/mob_spell_lists.sql index d44a82aec77..76927733038 100644 --- a/sql/mob_spell_lists.sql +++ b/sql/mob_spell_lists.sql @@ -1429,10 +1429,10 @@ INSERT INTO `mob_spell_lists` VALUES ('Diabolos_Club',108,360,1,255); -- dispelg INSERT INTO `mob_spell_lists` VALUES ('Diabolos_Club',108,361,1,255); -- blindga (1~255) INSERT INTO `mob_spell_lists` VALUES ('Diabolos_Club',108,367,1,255); -- death (1~255) --- Ouryu (109) -INSERT INTO `mob_spell_lists` VALUES ('Ouryu',109,54,1,255); -- stoneskin (1~255) -INSERT INTO `mob_spell_lists` VALUES ('Ouryu',109,190,1,255); -- stonega_ii (1~255) -INSERT INTO `mob_spell_lists` VALUES ('Ouryu',109,357,1,255); -- slowga (1~255) +-- Ouryu (Ouryu from CoP 4-3 The Savage) (109) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_The_Savage',109,54,1,255); -- stoneskin (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_The_Savage',109,190,1,255); -- stonega_ii (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_The_Savage',109,357,1,255); -- slowga (1~255) -- Pasuk (110) INSERT INTO `mob_spell_lists` VALUES ('Pasuk',110,245,1,255); -- drain (1~255) @@ -5599,7 +5599,13 @@ INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,34,1,255); -- Diaga INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,40,1,255); -- Banishga III (1~255) INSERT INTO `mob_spell_lists` VALUES ('Alexander_Image',547,112,1,255); -- Flash (1~255) --- Next Available: 548 +-- Ouryu (Ouryu from Ouryu Cometh) (548) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_Ouryu_Cometh',548,54,1,255); -- stoneskin (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_Ouryu_Cometh',548,191,1,255); -- stonega_iii (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_Ouryu_Cometh',548,365,1,255); -- breakga (1~255) +INSERT INTO `mob_spell_lists` VALUES ('Ouryu_Ouryu_Cometh',548,255,1,255); -- break (1~255) + +-- Next Available: 549 /*!40000 ALTER TABLE `mob_spell_lists` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/npc_list.sql b/sql/npc_list.sql index ce82ea90cf9..34c2ca03df4 100644 --- a/sql/npc_list.sql +++ b/sql/npc_list.sql @@ -2418,7 +2418,7 @@ INSERT INTO `npc_list` VALUES (16900355,'Spatial_Displacement','Spatial Displace INSERT INTO `npc_list` VALUES (16900356,'Spatial_Displacement','Spatial Displacement',0,297.180,72.820,-899.780,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); INSERT INTO `npc_list` VALUES (16900357,'Spatial_Displacement','Spatial Displacement',0,259.510,72.820,-902.880,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); INSERT INTO `npc_list` VALUES (16900358,'Spatial_Displacement','Spatial Displacement',0,306.880,29.820,-786.860,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); -INSERT INTO `npc_list` VALUES (16900359,'Spatial_Displacement','Spatial Displacement',0,55.110,72.750,-702.920,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); +INSERT INTO `npc_list` VALUES (16900359,'Spatial_Displacement_BC','Spatial Displacement',0,55.110,72.750,-702.920,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); INSERT INTO `npc_list` VALUES (16900360,'Spatial_Displacement','Spatial Displacement',0,-218.620,44.820,-824.020,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); INSERT INTO `npc_list` VALUES (16900361,'Spatial_Displacement','Spatial Displacement',0,219.590,92.810,-896.660,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1); INSERT INTO `npc_list` VALUES (16900362,'Spatial_Displacement','Spatial Displacement',0,-386.760,-18.180,-507.350,32769,50,50,0,0,0,0,3,0x0000320000000000000000000000000000000000,0,'COP',1);