Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions db/re/mob_db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108822,6 +108822,7 @@ Body:
AttackMotion: 864
ClientAttackMotion: 648
DamageMotion: 1440
DamageTaken: 10
Ai: Abr_Offensive
- Id: 20835
AegisName: ABR_DUAL_CANNON
Expand All @@ -108847,6 +108848,7 @@ Body:
AttackMotion: 768
ClientAttackMotion: 576
DamageMotion: 1008
DamageTaken: 10
Ai: Abr_Offensive
- Id: 20836
AegisName: ABR_MOTHER_NET
Expand All @@ -108872,6 +108874,7 @@ Body:
AttackMotion: 1008
ClientAttackMotion: 672
DamageMotion: 576
DamageTaken: 10
Ai: Abr_Passive
- Id: 20837
AegisName: ABR_INFINITY
Expand All @@ -108897,6 +108900,7 @@ Body:
AttackMotion: 1728
ClientAttackMotion: 840
DamageMotion: 1008
DamageTaken: 10
Ai: Abr_Offensive
# - Id: 20838
# AegisName: ELEMETAL_MASTER_S1
Expand Down
65 changes: 28 additions & 37 deletions db/re/skill_db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37830,7 +37830,7 @@ Body:
Area: 3
- Level: 10
Area: 3
Cooldown: 60000
Cooldown: 30000
Duration1: 30000
Duration2:
- Level: 1
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -42164,7 +42155,7 @@ Body:
MaxLevel: 5
Type: Magic
TargetType: Attack
Range: 11
Range: 9
Hit: Single
HitCount: 1
Element: Endowed
Expand Down Expand Up @@ -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
Expand Down
6 changes: 0 additions & 6 deletions db/re/status.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion db/status_disabled.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion src/map/script_constants.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
13 changes: 5 additions & 8 deletions src/map/skill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 };
Expand Down Expand Up @@ -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];
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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]
Expand Down
3 changes: 1 addition & 2 deletions src/map/skills/acolyte/coluceoheal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) ) {
Expand All @@ -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);
Expand Down
38 changes: 3 additions & 35 deletions src/map/skills/merchant/attackmachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,48 +5,16 @@

#include <config/core.hpp>

#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);
}
1 change: 0 additions & 1 deletion src/map/skills/merchant/attackmachine.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
4 changes: 2 additions & 2 deletions src/map/skills/taekwon/talismanofbluedragon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
4 changes: 2 additions & 2 deletions src/map/skills/taekwon/talismanofredphoenix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
4 changes: 2 additions & 2 deletions src/map/skills/taekwon/talismanofwhitetiger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
11 changes: 0 additions & 11 deletions src/map/status.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 ){
Expand Down
4 changes: 2 additions & 2 deletions src/map/status.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading