diff options
Diffstat (limited to 'src/map/skill.cpp')
-rw-r--r-- | src/map/skill.cpp | 68 |
1 files changed, 15 insertions, 53 deletions
diff --git a/src/map/skill.cpp b/src/map/skill.cpp index add6a42..8a397a3 100644 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -39,16 +39,18 @@ #include "../generic/random.hpp" #include "../io/cxxstdio.hpp" -#include "../io/cxxstdio_enums.hpp" +#include "../io/extract.hpp" #include "../io/read.hpp" #include "../net/timer.hpp" -#include "../mmo/extract.hpp" +#include "../mmo/cxxstdio_enums.hpp" #include "../mmo/extract_enums.hpp" #include "battle.hpp" +#include "battle_conf.hpp" #include "clif.hpp" +#include "globals.hpp" #include "magic-stmt.hpp" #include "mob.hpp" #include "pc.hpp" @@ -58,7 +60,10 @@ namespace tmwa { -struct skill_name_db skill_names[] = +namespace map +{ +static +skill_name_db skill_names[] = { {SkillID::AC_OWL, "OWL"_s, "Owl's_Eye"_s}, @@ -90,9 +95,6 @@ struct skill_name_db skill_names[] = {SkillID::ZERO, ""_s, ""_s} }; -earray<skill_db_, SkillID, SkillID::MAX_SKILL_DB> skill_db; - - static int skill_attack(BF attack_type, dumb_ptr<block_list> src, dumb_ptr<block_list> dsrc, dumb_ptr<block_list> bl, @@ -286,7 +288,7 @@ int skill_attack(BF attack_type, dumb_ptr<block_list> src, lv = flag.level; dmg = battle_calc_attack(attack_type, src, bl, skillid, skilllv, flag.lo); //ダメージ計算 - damage = dmg.damage + dmg.damage2; + damage = dmg.damage; if (lv == 15) lv = -1; @@ -347,26 +349,16 @@ int skill_attack(BF attack_type, dumb_ptr<block_list> src, { hp += (dmg.damage * sd->hp_drain_per) / 100; } - if (sd->hp_drain_rate_ && dmg.damage2 > 0 - && random_::chance({sd->hp_drain_rate_, 100})) - { - hp += (dmg.damage2 * sd->hp_drain_per_) / 100; - } if (sd->sp_drain_rate > 0 && dmg.damage > 0 && random_::chance({sd->sp_drain_rate, 100})) { sp += (dmg.damage * sd->sp_drain_per) / 100; } - if (sd->sp_drain_rate_ > 0 && dmg.damage2 > 0 - && random_::chance({sd->sp_drain_rate_, 100})) - { - sp += (dmg.damage2 * sd->sp_drain_per_) / 100; - } if (hp || sp) pc_heal(sd, hp, sp); } - return (dmg.damage + dmg.damage2); /* 与ダメを返す */ + return (dmg.damage); /* 与ダメを返す */ } typedef int(*SkillFunc)(dumb_ptr<block_list>, dumb_ptr<block_list>, @@ -388,17 +380,6 @@ void skill_area_sub(dumb_ptr<block_list> bl, } -/* 範囲スキル使用処理小分けここまで - * ------------------------------------------------------------------------- - */ - -// these variables are set in the 'else' branches, -// and used in the (recursive) 'if' branch -// TODO kill it, kill it with fire. -static BlockId skill_area_temp_id; -static int skill_area_temp_hp; - - /*========================================== * スキル使用(詠唱完了、ID指定攻撃系) * (スパゲッティに向けて1歩前進!(ダメポ)) @@ -712,8 +693,7 @@ void skill_status_change_end(dumb_ptr<block_list> bl, StatusChange type, TimerDa { eptr<struct status_change, StatusChange, StatusChange::MAX_STATUSCHANGE> sc_data; int opt_flag = 0, calc_flag = 0; - short *sc_count; - Option *option; + Opt0 *option; Opt1 *opt1; Opt2 *opt2; Opt3 *opt3; @@ -728,8 +708,6 @@ void skill_status_change_end(dumb_ptr<block_list> bl, StatusChange type, TimerDa sc_data = battle_get_sc_data(bl); if (not sc_data) return; - sc_count = battle_get_sc_count(bl); - nullpo_retv(sc_count); option = battle_get_option(bl); nullpo_retv(option); opt1 = battle_get_opt1(bl); @@ -753,8 +731,6 @@ void skill_status_change_end(dumb_ptr<block_list> bl, StatusChange type, TimerDa // whether we are the timer or a cancel no longer matters assert (!sc_data[type].timer); - assert ((*sc_count) > 0); - (*sc_count)--; switch (type) { /* 異常の種類ごとの処理 */ @@ -835,7 +811,6 @@ void skill_status_change_timer(TimerData *tid, tick_t tick, BlockId id, StatusCh dumb_ptr<block_list> bl; dumb_ptr<map_session_data> sd = nullptr; eptr<struct status_change, StatusChange, StatusChange::MAX_STATUSCHANGE> sc_data; - //short *sc_count; //使ってない? if ((bl = map_id2bl(id)) == nullptr) return; @@ -847,8 +822,6 @@ void skill_status_change_timer(TimerData *tid, tick_t tick, BlockId id, StatusCh if (bl->bl_type == BL::PC) sd = bl->is_player(); - //sc_count=battle_get_sc_count(bl); //使ってない? - if (sc_data[type].spell_invocation) { // Must report termination magic::spell_effect_report_termination(sc_data[type].spell_invocation, @@ -936,8 +909,7 @@ int skill_status_effect(dumb_ptr<block_list> bl, StatusChange type, { dumb_ptr<map_session_data> sd = nullptr; eptr<struct status_change, StatusChange, StatusChange::MAX_STATUSCHANGE> sc_data; - short *sc_count; - Option *option; + Opt0 *option; Opt1 *opt1; Opt2 *opt2; Opt3 *opt3; @@ -949,8 +921,6 @@ int skill_status_effect(dumb_ptr<block_list> bl, StatusChange type, sc_data = battle_get_sc_data(bl); if (not sc_data) return 0; - sc_count = battle_get_sc_count(bl); - nullpo_retz(sc_count); option = battle_get_option(bl); nullpo_retz(option); opt1 = battle_get_opt1(bl); @@ -994,7 +964,6 @@ int skill_status_effect(dumb_ptr<block_list> bl, StatusChange type, /* 継ぎ足しができない状態異常である時は状態異常を行わない */ { - (*sc_count)--; sc_data[type].timer.cancel(); } } @@ -1080,8 +1049,6 @@ int skill_status_effect(dumb_ptr<block_list> bl, StatusChange type, if (opt_flag) /* optionの変更 */ clif_changeoption(bl); - (*sc_count)++; /* ステータス異常の数 */ - sc_data[type].val1 = val1; if (sc_data[type].spell_invocation) // Supplant by newer spell magic::spell_effect_report_termination(sc_data[type].spell_invocation, @@ -1110,8 +1077,7 @@ int skill_status_effect(dumb_ptr<block_list> bl, StatusChange type, int skill_status_change_clear(dumb_ptr<block_list> bl, int type) { eptr<struct status_change, StatusChange, StatusChange::MAX_STATUSCHANGE> sc_data; - short *sc_count; - Option *option; + Opt0 *option; Opt1 *opt1; Opt2 *opt2; Opt3 *opt3; @@ -1120,8 +1086,6 @@ int skill_status_change_clear(dumb_ptr<block_list> bl, int type) sc_data = battle_get_sc_data(bl); if (not sc_data) return 0; - sc_count = battle_get_sc_count(bl); - nullpo_retz(sc_count); option = battle_get_option(bl); nullpo_retz(option); opt1 = battle_get_opt1(bl); @@ -1131,18 +1095,15 @@ int skill_status_change_clear(dumb_ptr<block_list> bl, int type) opt3 = battle_get_opt3(bl); nullpo_retz(opt3); - if (*sc_count == 0) - return 0; for (StatusChange i : erange(StatusChange(), StatusChange::MAX_STATUSCHANGE)) { if (sc_data[i].timer) skill_status_change_end(bl, i, nullptr); } - *sc_count = 0; *opt1 = Opt1::ZERO; *opt2 = Opt2::ZERO; *opt3 = Opt3::ZERO; - *option = Option::ZERO; + *option = Opt0::ZERO; if (type == 0 || type & 2) clif_changeoption(bl); @@ -1319,4 +1280,5 @@ skill_name_db& skill_lookup_by_name(XString name) return ner; return skill_names[num_names - 1]; } +} // namespace map } // namespace tmwa |