diff --git a/db/re/mob_db.yml b/db/re/mob_db.yml index 6c5944d7b36..22f40721932 100644 --- a/db/re/mob_db.yml +++ b/db/re/mob_db.yml @@ -108822,6 +108822,7 @@ Body: AttackMotion: 864 ClientAttackMotion: 648 DamageMotion: 1440 + DamageTaken: 10 Ai: Abr_Offensive - Id: 20835 AegisName: ABR_DUAL_CANNON @@ -108847,6 +108848,7 @@ Body: AttackMotion: 768 ClientAttackMotion: 576 DamageMotion: 1008 + DamageTaken: 10 Ai: Abr_Offensive - Id: 20836 AegisName: ABR_MOTHER_NET @@ -108872,6 +108874,7 @@ Body: AttackMotion: 1008 ClientAttackMotion: 672 DamageMotion: 576 + DamageTaken: 10 Ai: Abr_Passive - Id: 20837 AegisName: ABR_INFINITY @@ -108897,6 +108900,7 @@ Body: AttackMotion: 1728 ClientAttackMotion: 840 DamageMotion: 1008 + DamageTaken: 10 Ai: Abr_Offensive # - Id: 20838 # AegisName: ELEMETAL_MASTER_S1 diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index b0721f295d1..288260c706a 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -37830,7 +37830,7 @@ Body: Area: 3 - Level: 10 Area: 3 - Cooldown: 60000 + Cooldown: 30000 Duration1: 30000 Duration2: - Level: 1 @@ -37888,54 +37888,37 @@ Body: Description: Attack Machine MaxLevel: 5 Type: Weapon - TargetType: Support + TargetType: Attack DamageFlags: + Critical: true Splash: true Flags: - PartyOnly: true AllowOnMado: true - Range: 1 - Hit: Single - HitCount: 1 + Range: 7 + Hit: Multi_Hit + HitCount: 4 Element: Weapon - SplashArea: - - Level: 1 - Area: 1 - - Level: 2 - Area: 1 - - Level: 3 - Area: 2 - - Level: 4 - Area: 2 - - Level: 5 - Area: 3 - Duration1: - - Level: 1 - Time: 80000 - - Level: 2 - Time: 120000 - - Level: 3 - Time: 160000 - - Level: 4 - Time: 200000 - - Level: 5 - Time: 240000 + SplashArea: 4 + GiveAp: 4 + CastTime: 1000 + AfterCastActDelay: 500 + Cooldown: 700 + FixedCastTime: 500 Requires: SpCost: - Level: 1 - Amount: 43 + Amount: 60 - Level: 2 - Amount: 46 + Amount: 63 - Level: 3 - Amount: 49 + Amount: 66 - Level: 4 - Amount: 52 + Amount: 69 - Level: 5 - Amount: 55 + Amount: 72 ItemCost: - Item: Device_Capsule Amount: 1 - Status: A_Machine - Id: 5299 Name: MT_D_MACHINE Description: Defense Machine @@ -38135,7 +38118,15 @@ Body: Amount: 50 - Level: 4 Amount: 60 - ApCost: 200 + ApCost: + - Level: 1 + Amount: 180 + - Level: 2 + Amount: 160 + - Level: 3 + Amount: 140 + - Level: 4 + Amount: 120 ItemCost: - Item: Auto_Battle_Capsule Amount: 5 @@ -42164,7 +42155,7 @@ Body: MaxLevel: 5 Type: Magic TargetType: Attack - Range: 11 + Range: 9 Hit: Single HitCount: 1 Element: Endowed @@ -42500,7 +42491,7 @@ Body: Amount: 170 - Level: 10 Amount: 180 - ApCost: 180 + ApCost: 160 Status: Heaven_and_Earth - Id: 5449 Name: HN_SELFSTUDY_TATICS diff --git a/db/re/status.yml b/db/re/status.yml index 0025fb922d0..b2a93c90041 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -7949,12 +7949,6 @@ Body: - Status: Axe_Stomp Icon: EFST_AXE_STOMP DurationLookup: MT_AXE_STOMP - - Status: A_Machine - Icon: EFST_A_MACHINE - DurationLookup: MT_A_MACHINE - Flags: - BlEffect: true - DisplayPc: true - Status: D_Machine Icon: EFST_D_MACHINE DurationLookup: MT_D_MACHINE diff --git a/db/status_disabled.txt b/db/status_disabled.txt index a68cf1c43b0..b23f793964a 100644 --- a/db/status_disabled.txt +++ b/db/status_disabled.txt @@ -414,7 +414,6 @@ SC_BENEDICTUM,16 // Meister SC_AXE_STOMP,16 -SC_A_MACHINE,16 SC_D_MACHINE,16 SC_ABR_BATTLE_WARIOR,16 SC_ABR_DUAL_CANNON,16 diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 93524a11d4f..334ff43ef3d 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1769,7 +1769,6 @@ export_constant(SC_RELIGIO); export_constant(SC_BENEDICTUM); export_constant(SC_AXE_STOMP); - export_constant(SC_A_MACHINE); export_constant(SC_D_MACHINE); export_constant(SC_ABR_BATTLE_WARIOR); export_constant(SC_ABR_DUAL_CANNON); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index bcaf8d69e41..27c9e237298 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -2081,7 +2081,7 @@ bool skill_strip_equip(block_list *src, block_list *target, uint16 skill_id, uin status_change *tsc = status_get_sc(target); - if (!tsc || tsc->option&OPTION_MADOGEAR) // Mado Gear cannot be divested [Ind] + if (tsc == nullptr) return false; const int32 pos[6] = { EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HELM, EQP_ACC, EQP_SHADOW_GEAR }; @@ -2193,7 +2193,6 @@ bool skill_strip_equip(block_list *src, block_list *target, uint16 skill_id, uin } if (!location) return false; - for (uint8 i = 0; i < ARRAYLENGTH(pos); i++) { if (location&pos[i] && !sc_start(src, target, sc_atk[i], 100, skill_lv, time)) location &=~ pos[i]; @@ -4643,12 +4642,9 @@ static int8 skill_castend_id_check(block_list *src, block_list *target, uint16 s return USESKILL_FAIL_MAX; // Don't show a skill fail message (NoDamage type doesn't consume requirements) switch (skill_id) { - case AL_HEAL: case AL_INCAGI: case AL_DECAGI: case SA_DISPELL: // Mado Gear is immune to Dispell according to bugreport:49 [Ind] - case AB_RENOVATIO: - case AB_HIGHNESSHEAL: if (tsc && tsc->option&OPTION_MADOGEAR) return USESKILL_FAIL_TOTARGET; break; @@ -7574,9 +7570,6 @@ int32 skill_unit_onplace_timer(skill_unit *unit, block_list *bl, t_tick tick) case UNT_TOTEM_OF_TUTELARY: if( bl->type == BL_PC ) { - if (tsc != nullptr && tsc->option&OPTION_MADOGEAR) - break; - int32 hp = 500; hp += 500 * sg->skill_lv; @@ -10068,6 +10061,10 @@ struct s_skill_condition skill_get_requirement(map_session_data* sd, uint16 skil if (sc != nullptr && sc->hasSCE(SC_RESEARCHREPORT) && req.amount[0] > 0) req.amount[0]--; break; + case MT_A_MACHINE: + if (sc != nullptr && sc->hasSCE(SC_ABR_INFINITY)) + req.amount[0] = 0; + break; } //Check if player is using the copied skill [Cydh] diff --git a/src/map/skills/acolyte/coluceoheal.cpp b/src/map/skills/acolyte/coluceoheal.cpp index d5d069e8f62..5bcd7d5ee3d 100644 --- a/src/map/skills/acolyte/coluceoheal.cpp +++ b/src/map/skills/acolyte/coluceoheal.cpp @@ -15,7 +15,6 @@ void SkillColuceoHeal::castendNoDamageId(block_list *src, block_list *target, ui status_data* tstatus = status_get_status_data(*target); status_change *tsc = status_get_sc(target); map_session_data* sd = BL_CAST( BL_PC, src ); - map_session_data* dstsd = BL_CAST( BL_PC, target ); if( !sd || sd->status.party_id == 0 || flag&1 ) { if( sd && tstatus && !battle_check_undead(tstatus->race, tstatus->def_ele) && !tsc->getSCE(SC_BERSERK) ) { @@ -25,7 +24,7 @@ void SkillColuceoHeal::castendNoDamageId(block_list *src, block_list *target, ui if( partycount > 1 ) i += (i / 100) * (partycount * 10) / 4; - if( (dstsd && pc_ismadogear(dstsd)) || status_isimmune(target)) + if (status_isimmune(target)) i = 0; // Should heal by 0 or won't do anything?? in iRO it breaks the healing to members.. [malufett] clif_skill_nodamage(src, *target, getSkillId(), i); diff --git a/src/map/skills/merchant/attackmachine.cpp b/src/map/skills/merchant/attackmachine.cpp index ee82cdd92fb..a24227c24be 100644 --- a/src/map/skills/merchant/attackmachine.cpp +++ b/src/map/skills/merchant/attackmachine.cpp @@ -5,48 +5,16 @@ #include -#include "map/battle.hpp" -#include "map/clif.hpp" -#include "map/pc.hpp" #include "map/status.hpp" SkillAttackMachine::SkillAttackMachine() : SkillImplRecursiveDamageSplash(MT_A_MACHINE) { } -void SkillAttackMachine::castendNoDamageId(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32& flag) const { - map_session_data* sd = BL_CAST(BL_PC, src); - map_session_data* dstsd = BL_CAST(BL_PC, target); - - if (flag & 1) { - skill_area_temp[1] = 0; - - if (sd && pc_issit(sd)) { // Force player to stand before attacking - pc_setstand(sd, true); - skill_sit(sd, false); - } - - map_foreachinrange(skill_area_sub, target, skill_get_splash(getSkillId(), skill_lv), BL_CHAR | BL_SKILL, src, getSkillId(), skill_lv, tick, flag | BCT_ENEMY | SD_LEVEL | SD_SPLASH, skill_castend_damage_id); - } else { - if (dstsd) { - int32 lv = abs( status_get_lv( src ) - status_get_lv( target ) ); - - if (lv > battle_config.attack_machine_level_difference) { - if (sd) - clif_skill_fail( *sd, getSkillId() ); - - flag |= SKILL_NOCONSUME_REQ; - return; - } - } - - clif_skill_nodamage(src, *target, getSkillId(), skill_lv, sc_start(src, target, skill_get_sc(getSkillId()), 100, skill_lv, skill_get_time(getSkillId(), skill_lv))); - } -} - void SkillAttackMachine::calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& skillratio, int32 mflag) const { const status_data* sstatus = status_get_status_data(*src); - // Formula unknown. Using Dancing Knife's formula for now. [Rytech] - skillratio += -100 + 200 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 150 + 700 * skill_lv; + skillratio += 5 * sstatus->pow; // TODO : unknown pow ratio + RE_LVL_DMOD(100); } diff --git a/src/map/skills/merchant/attackmachine.hpp b/src/map/skills/merchant/attackmachine.hpp index a681d7dbd82..33e7c0ec1a4 100644 --- a/src/map/skills/merchant/attackmachine.hpp +++ b/src/map/skills/merchant/attackmachine.hpp @@ -9,6 +9,5 @@ class SkillAttackMachine : public SkillImplRecursiveDamageSplash { public: SkillAttackMachine(); - void castendNoDamageId(block_list* src, block_list* target, uint16 skill_lv, t_tick tick, int32& flag) const override; void calculateSkillRatio(const Damage* wd, const block_list* src, const block_list* target, uint16 skill_lv, int32& base_skillratio, int32 mflag) const override; }; diff --git a/src/map/skills/taekwon/talismanofbluedragon.cpp b/src/map/skills/taekwon/talismanofbluedragon.cpp index 440ef971015..be1fb5da785 100644 --- a/src/map/skills/taekwon/talismanofbluedragon.cpp +++ b/src/map/skills/taekwon/talismanofbluedragon.cpp @@ -17,11 +17,11 @@ void SkillTalismanOfBlueDragon::calculateSkillRatio(const Damage *wd, const bloc const status_change *sc = status_get_sc(src); const map_session_data* sd = BL_CAST( BL_PC, src ); - skillratio += -100 + 850 + 2250 * skill_lv; + skillratio += -100 + 1250 + 2650 * skill_lv; skillratio += pc_checkskill(sd, SOA_TALISMAN_MASTERY) * 15 * skill_lv; skillratio += 5 * sstatus->spl; if (sc != nullptr && sc->getSCE(SC_T_FIFTH_GOD) != nullptr) - skillratio += 100 + 700 * skill_lv; + skillratio += 850 * skill_lv; RE_LVL_DMOD(100); } diff --git a/src/map/skills/taekwon/talismanofredphoenix.cpp b/src/map/skills/taekwon/talismanofredphoenix.cpp index be25295528e..09e698c0ec4 100644 --- a/src/map/skills/taekwon/talismanofredphoenix.cpp +++ b/src/map/skills/taekwon/talismanofredphoenix.cpp @@ -17,11 +17,11 @@ void SkillTalismanOfRedPhoenix::calculateSkillRatio(const Damage *wd, const bloc const status_change *sc = status_get_sc(src); const map_session_data* sd = BL_CAST( BL_PC, src ); - skillratio += -100 + 1400 + 1450 * skill_lv; + skillratio += -100 + 1650 + 2150 * skill_lv; skillratio += pc_checkskill(sd, SOA_TALISMAN_MASTERY) * 15 * skill_lv; skillratio += 5 * sstatus->spl; if (sc != nullptr && sc->getSCE(SC_T_FIFTH_GOD) != nullptr) - skillratio += 200 + 400 * skill_lv; + skillratio += 600 + 500 * skill_lv; RE_LVL_DMOD(100); } diff --git a/src/map/skills/taekwon/talismanofwhitetiger.cpp b/src/map/skills/taekwon/talismanofwhitetiger.cpp index 71514fa1aaf..9f84106ed06 100644 --- a/src/map/skills/taekwon/talismanofwhitetiger.cpp +++ b/src/map/skills/taekwon/talismanofwhitetiger.cpp @@ -17,11 +17,11 @@ void SkillTalismanOfWhiteTiger::calculateSkillRatio(const Damage *wd, const bloc const status_change *sc = status_get_sc(src); const map_session_data* sd = BL_CAST( BL_PC, src ); - skillratio += -100 + 400 + 1000 * skill_lv; + skillratio += -100 + 600 + 1200 * skill_lv; skillratio += pc_checkskill(sd, SOA_TALISMAN_MASTERY) * 15 * skill_lv; skillratio += 5 * sstatus->spl; if (sc != nullptr && sc->getSCE(SC_T_FIFTH_GOD) != nullptr) - skillratio += 400 * skill_lv; + skillratio += 400 + 400 * skill_lv; RE_LVL_DMOD(100); } diff --git a/src/map/status.cpp b/src/map/status.cpp index e112d748111..87e0d4196c4 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -12864,10 +12864,6 @@ static bool status_change_start_post_delay(block_list* src, block_list* bl, sc_t case SC_POTENT_VENOM: val2 = 2 * val1;// Res Pierce Percentage break; - case SC_A_MACHINE: - val4 = tick / 1000; - tick_time = 1000; - break; case SC_D_MACHINE: val2 = 200 + 50 * val1;// DEF Increase val3 = 20 * val1;// Res Increase @@ -15147,13 +15143,6 @@ TIMER_FUNC(status_change_timer){ } break; - case SC_A_MACHINE: - if (--(sce->val4) >= 0) { - skill_castend_nodamage_id(bl, bl, MT_A_MACHINE, sce->val1, tick, 1); - sc_timer_next(1000 + tick); - return 0; - } - break; case SC_SERVANTWEAPON: if (sce->val4 >= 0) { if( sd && sd->servantball < MAX_SERVANTBALL ){ diff --git a/src/map/status.hpp b/src/map/status.hpp index ced87d11f5d..9cdbba9359b 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -1165,8 +1165,8 @@ enum sc_type : int16 { // Meister SC_AXE_STOMP, - SC_A_MACHINE, - SC_D_MACHINE, + // SC_A_MACHINE, // SC_A_MACHINE not used anymore + SC_D_MACHINE = SC_AXE_STOMP + 2, SC_ABR_BATTLE_WARIOR, SC_ABR_DUAL_CANNON, SC_ABR_MOTHER_NET,