diff options
Diffstat (limited to 'src/map/pc.cpp')
-rw-r--r-- | src/map/pc.cpp | 576 |
1 files changed, 10 insertions, 566 deletions
diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 118aa1f..dc7c77c 100644 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -714,22 +714,6 @@ int pc_isequip(struct map_session_data *sd, int n) if (map[sd->bl.m].flag.pvp && (item->flag.no_equip == 1 || item->flag.no_equip == 3)) return 0; - if (bool(item->equip & EPOS::WEAPON) - && sc_data - && sc_data[SC_STRIPWEAPON].timer != -1) - return 0; - if (bool(item->equip & EPOS::SHIELD) - && sc_data - && sc_data[SC_STRIPSHIELD].timer != -1) - return 0; - if (bool(item->equip & EPOS::MISC1) - && sc_data - && sc_data[SC_STRIPARMOR].timer != -1) - return 0; - if (bool(item->equip & EPOS::HAT) - && sc_data - && sc_data[SC_STRIPHELM].timer != -1) - return 0; return 1; } @@ -746,8 +730,6 @@ int pc_breakweapon(struct map_session_data *sd) return -1; if (sd->unbreakable >= MRAND(100)) return 0; - if (sd->sc_data[SC_CP_WEAPON].timer != -1) - return 0; for (i = 0; i < MAX_INVENTORY; i++) { @@ -787,8 +769,6 @@ int pc_breakarmor(struct map_session_data *sd) return -1; if (sd->unbreakable >= MRAND(100)) return 0; - if (sd->sc_data[SC_CP_ARMOR].timer != -1) - return 0; for (int i = 0; i < MAX_INVENTORY; i++) { @@ -1533,58 +1513,6 @@ int pc_calcstatus(struct map_session_data *sd, int first) if (sd->aspd_add_rate != 100) sd->aspd_rate += sd->aspd_add_rate - 100; - // ステータス変化による基本パラメータ補正 - if (sd->sc_count) - { - if (sd->sc_data[SC_CONCENTRATE].timer != -1 - && sd->sc_data[SC_QUAGMIRE].timer == -1) - { // 集中力向上 - sd->paramb[ATTR::AGI] += - (sd->status.attrs[ATTR::AGI] + sd->paramb[ATTR::AGI] + sd->parame[ATTR::AGI] - - sd->paramcard[ATTR::AGI]) * (2 + - sd->sc_data[SC_CONCENTRATE].val1) / 100; - sd->paramb[ATTR::DEX] += - (sd->status.attrs[ATTR::DEX] + sd->paramb[ATTR::DEX] + sd->parame[ATTR::DEX] - - sd->paramcard[ATTR::DEX]) * (2 + - sd->sc_data[SC_CONCENTRATE].val1) / 100; - } - if (sd->sc_data[SC_INCREASEAGI].timer != -1 - && sd->sc_data[SC_QUAGMIRE].timer == -1 - && sd->sc_data[SC_DONTFORGETME].timer == -1) - { // 速度増加 - sd->paramb[ATTR::AGI] += 2 + sd->sc_data[SC_INCREASEAGI].val1; - sd->speed -= sd->speed * 25 / 100; - } - if (sd->sc_data[SC_DECREASEAGI].timer != -1) // 速度減少(agiはbattle.cで) - sd->speed = sd->speed * 125 / 100; - if (sd->sc_data[SC_CLOAKING].timer != -1) - sd->speed = - (sd->speed * (76 + (sd->sc_data[SC_INCREASEAGI].val1 * 3))) / - 100; - if (sd->sc_data[SC_BLESSING].timer != -1) - { // ブレッシング - sd->paramb[ATTR::STR] += sd->sc_data[SC_BLESSING].val1; - sd->paramb[ATTR::INT] += sd->sc_data[SC_BLESSING].val1; - sd->paramb[ATTR::DEX] += sd->sc_data[SC_BLESSING].val1; - } - if (sd->sc_data[SC_GLORIA].timer != -1) // グロリア - sd->paramb[ATTR::LUK] += 30; - if (sd->sc_data[SC_LOUD].timer != -1 && sd->sc_data[SC_QUAGMIRE].timer == -1) // ラウドボイス - sd->paramb[ATTR::STR] += 4; - if (sd->sc_data[SC_QUAGMIRE].timer != -1) - { // クァグマイア - sd->speed = sd->speed * 3 / 2; - sd->paramb[ATTR::AGI] -= - (sd->status.attrs[ATTR::AGI] + sd->paramb[ATTR::AGI] + sd->parame[ATTR::AGI]) / 2; - sd->paramb[ATTR::DEX] -= - (sd->status.attrs[ATTR::DEX] + sd->paramb[ATTR::DEX] + sd->parame[ATTR::DEX]) / 2; - } - if (sd->sc_data[SC_TRUESIGHT].timer != -1) - { // トゥルーサイト - for (auto& p : sd->paramb) - p += 5; - } - } sd->speed -= skill_power(sd, TMW_SPEED) >> 3; sd->aspd_rate -= skill_power(sd, TMW_SPEED) / 10; if (sd->aspd_rate < 20) @@ -1710,18 +1638,6 @@ int pc_calcstatus(struct map_session_data *sd, int first) } sd->max_weight += 1000; - if (sd->sc_count) - { - if (sd->sc_data[SC_WINDWALK].timer != -1) //ウィンドウォーク時はLv*2%減算 - sd->speed -= - sd->speed * (sd->sc_data[SC_WINDWALK].val1 * 2) / 100; - if (sd->sc_data[SC_CARTBOOST].timer != -1) // カートブースト - sd->speed -= (DEFAULT_WALK_SPEED * 20) / 100; - if (sd->sc_data[SC_BERSERK].timer != -1) //バーサーク中はIAと同じぐらい速い? - sd->speed -= sd->speed * 25 / 100; - if (sd->sc_data[SC_WEDDING].timer != -1) //結婚中は歩くのが遅い - sd->speed = 2 * DEFAULT_WALK_SPEED; - } bl = sd->status.base_level; @@ -1734,16 +1650,6 @@ int pc_calcstatus(struct map_session_data *sd, int first) if (sd->hprate != 100) sd->status.max_hp = sd->status.max_hp * sd->hprate / 100; - if (sd->sc_data[SC_BERSERK].timer != -1) - { // バーサーク - sd->status.max_hp = sd->status.max_hp * 3; - sd->status.hp = sd->status.hp * 3; - if (sd->status.max_hp > battle_config.max_hp) // removed negative max hp bug by Valaris - sd->status.max_hp = battle_config.max_hp; - if (sd->status.hp > battle_config.max_hp) // removed negative max hp bug by Valaris - sd->status.hp = battle_config.max_hp; - } - if (sd->status.max_hp > battle_config.max_hp) // removed negative max hp bug by Valaris sd->status.max_hp = battle_config.max_hp; if (sd->status.max_hp <= 0) @@ -1783,110 +1689,9 @@ int pc_calcstatus(struct map_session_data *sd, int first) if (sd->sc_count) { // ATK/DEF変化形 - if (sd->sc_data[SC_ANGELUS].timer != -1) // エンジェラス - sd->def2 = - sd->def2 * (110 + 5 * sd->sc_data[SC_ANGELUS].val1) / 100; - if (sd->sc_data[SC_IMPOSITIO].timer != -1) - { // インポシティオマヌス - sd->watk += sd->sc_data[SC_IMPOSITIO].val1 * 5; - index = sd->equip_index[EQUIP::SHIELD]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->type == ItemType::WEAPON) - sd->watk_ += sd->sc_data[SC_IMPOSITIO].val1 * 5; - } - if (sd->sc_data[SC_PROVOKE].timer != -1) - { // プロボック - sd->def2 = - sd->def2 * (100 - 6 * sd->sc_data[SC_PROVOKE].val1) / 100; - sd->base_atk = - sd->base_atk * (100 + 2 * sd->sc_data[SC_PROVOKE].val1) / 100; - sd->watk = - sd->watk * (100 + 2 * sd->sc_data[SC_PROVOKE].val1) / 100; - index = sd->equip_index[EQUIP::SHIELD]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->type == ItemType::WEAPON) - sd->watk_ = - sd->watk_ * (100 + - 2 * sd->sc_data[SC_PROVOKE].val1) / 100; - } - if (sd->sc_data[SC_ENDURE].timer != -1) - sd->mdef2 += sd->sc_data[SC_ENDURE].val1; - if (sd->sc_data[SC_MINDBREAKER].timer != -1) - { // プロボック - sd->mdef2 = - sd->mdef2 * (100 - - 6 * sd->sc_data[SC_MINDBREAKER].val1) / 100; - sd->matk1 = - sd->matk1 * (100 + - 2 * sd->sc_data[SC_MINDBREAKER].val1) / 100; - sd->matk2 = - sd->matk2 * (100 + - 2 * sd->sc_data[SC_MINDBREAKER].val1) / 100; - } if (sd->sc_data[SC_POISON].timer != -1) // 毒状態 sd->def2 = sd->def2 * 75 / 100; - if (sd->sc_data[SC_DRUMBATTLE].timer != -1) - { // 戦太鼓の響き - sd->watk += sd->sc_data[SC_DRUMBATTLE].val2; - sd->def += sd->sc_data[SC_DRUMBATTLE].val3; - index = sd->equip_index[EQUIP::SHIELD]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->type == ItemType::WEAPON) - sd->watk_ += sd->sc_data[SC_DRUMBATTLE].val2; - } - if (sd->sc_data[SC_NIBELUNGEN].timer != -1) - { // ニーベルングの指輪 - index = sd->equip_index[EQUIP::WEAPON]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->wlv == 3) - sd->watk += sd->sc_data[SC_NIBELUNGEN].val3; - index = sd->equip_index[EQUIP::SHIELD]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->wlv == 3) - sd->watk_ += sd->sc_data[SC_NIBELUNGEN].val3; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->wlv == 4) - sd->watk += sd->sc_data[SC_NIBELUNGEN].val2; - index = sd->equip_index[EQUIP::SHIELD]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->wlv == 4) - sd->watk_ += sd->sc_data[SC_NIBELUNGEN].val2; - } - - if (sd->sc_data[SC_VOLCANO].timer != -1 && sd->def_ele == 3) - { // ボルケーノ - sd->watk += sd->sc_data[SC_VIOLENTGALE].val3; - } - - if (sd->sc_data[SC_SIGNUMCRUCIS].timer != -1) - sd->def = - sd->def * (100 - sd->sc_data[SC_SIGNUMCRUCIS].val2) / 100; - if (sd->sc_data[SC_ETERNALCHAOS].timer != -1) // エターナルカオス - sd->def = 0; - - if (sd->sc_data[SC_CONCENTRATION].timer != -1) - { //コンセントレーション - sd->watk = - sd->watk * (100 + - 5 * sd->sc_data[SC_CONCENTRATION].val1) / 100; - index = sd->equip_index[EQUIP::SHIELD]; - if (index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->type == ItemType::WEAPON) - sd->watk_ = - sd->watk * (100 + - 5 * sd->sc_data[SC_CONCENTRATION].val1) / 100; - sd->def = - sd->def * (100 - - 5 * sd->sc_data[SC_CONCENTRATION].val1) / 100; - } - if (sd->sc_data[SC_MAGICPOWER].timer != -1) - { //魔法力増幅 - sd->matk1 = - sd->matk1 * (100 + 2 * sd->sc_data[SC_MAGICPOWER].val1) / 100; - sd->matk2 = - sd->matk2 * (100 + 2 * sd->sc_data[SC_MAGICPOWER].val1) / 100; - } if (sd->sc_data[SC_ATKPOT].timer != -1) sd->watk += sd->sc_data[SC_ATKPOT].val1; if (sd->sc_data[SC_MATKPOT].timer != -1) @@ -1895,48 +1700,9 @@ int pc_calcstatus(struct map_session_data *sd, int first) sd->matk2 += sd->sc_data[SC_MATKPOT].val1; } - // ASPD/移動速度変化系 - if (sd->sc_data[SC_TWOHANDQUICKEN].timer != -1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1) // 2HQ - aspd_rate -= 30; - if (sd->sc_data[SC_ADRENALINE].timer != -1 - && sd->sc_data[SC_TWOHANDQUICKEN].timer == -1 - && sd->sc_data[SC_QUAGMIRE].timer == -1 - && sd->sc_data[SC_DONTFORGETME].timer == -1) - { // アドレナリンラッシュ - if (sd->sc_data[SC_ADRENALINE].val2 - || !battle_config.party_skill_penaly) - aspd_rate -= 30; - else - aspd_rate -= 25; - } - if (sd->sc_data[SC_SPEARSQUICKEN].timer != -1 && sd->sc_data[SC_ADRENALINE].timer == -1 && sd->sc_data[SC_TWOHANDQUICKEN].timer == -1 && sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1) // スピアクィッケン - aspd_rate -= sd->sc_data[SC_SPEARSQUICKEN].val2; - if (sd->sc_data[SC_ASSNCROS].timer != -1 && // 夕陽のアサシンクロス - sd->sc_data[SC_TWOHANDQUICKEN].timer == -1 - && sd->sc_data[SC_ADRENALINE].timer == -1 - && sd->sc_data[SC_SPEARSQUICKEN].timer == -1 - && sd->sc_data[SC_DONTFORGETME].timer == -1) - aspd_rate -= - 5 + sd->sc_data[SC_ASSNCROS].val1 + - sd->sc_data[SC_ASSNCROS].val2 + sd->sc_data[SC_ASSNCROS].val3; - if (sd->sc_data[SC_DONTFORGETME].timer != -1) - { // 私を忘れないで - aspd_rate += - sd->sc_data[SC_DONTFORGETME].val1 * 3 + - sd->sc_data[SC_DONTFORGETME].val2 + - (sd->sc_data[SC_DONTFORGETME].val3 >> 16); - sd->speed = - sd->speed * (100 + sd->sc_data[SC_DONTFORGETME].val1 * 2 + - sd->sc_data[SC_DONTFORGETME].val2 + - (sd->sc_data[SC_DONTFORGETME].val3 & 0xffff)) / - 100; - } { - StatusChange i; - if (sd->sc_data[i = SC_SPEEDPOTION2].timer != -1 - || sd->sc_data[i = SC_SPEEDPOTION1].timer != -1 - || sd->sc_data[i = SC_SPEEDPOTION0].timer != -1) - aspd_rate -= sd->sc_data[i].val1; + if (sd->sc_data[SC_SPEEDPOTION0].timer != -1) + aspd_rate -= sd->sc_data[SC_SPEEDPOTION0].val1; } if (sd->sc_data[SC_HASTE].timer != -1) @@ -1948,122 +1714,14 @@ int pc_calcstatus(struct map_session_data *sd, int first) aspd_rate += sd->sc_data[SC_PHYS_SHIELD].val1; // HIT/FLEE変化系 - if (sd->sc_data[SC_WHISTLE].timer != -1) - { // 口笛 - sd->flee += sd->flee * (sd->sc_data[SC_WHISTLE].val1 - + sd->sc_data[SC_WHISTLE].val2 + - (sd->sc_data[SC_WHISTLE].val3 >> 16)) / - 100; - sd->flee2 += - (sd->sc_data[SC_WHISTLE].val1 + sd->sc_data[SC_WHISTLE].val2 + - (sd->sc_data[SC_WHISTLE].val3 & 0xffff)) * 10; - } - if (sd->sc_data[SC_HUMMING].timer != -1) // ハミング - sd->hit += - (sd->sc_data[SC_HUMMING].val1 * 2 + - sd->sc_data[SC_HUMMING].val2 + - sd->sc_data[SC_HUMMING].val3) * sd->hit / 100; - if (sd->sc_data[SC_VIOLENTGALE].timer != -1 && sd->def_ele == 4) - { // バイオレントゲイル - sd->flee += sd->flee * sd->sc_data[SC_VIOLENTGALE].val3 / 100; - } if (sd->sc_data[SC_BLIND].timer != -1) { // 暗黒 sd->hit -= sd->hit * 25 / 100; sd->flee -= sd->flee * 25 / 100; } - if (sd->sc_data[SC_WINDWALK].timer != -1) // ウィンドウォーク - sd->flee += sd->flee * (sd->sc_data[SC_WINDWALK].val2) / 100; - if (sd->sc_data[SC_SPIDERWEB].timer != -1) //スパイダーウェブ - sd->flee -= sd->flee * 50 / 100; - if (sd->sc_data[SC_TRUESIGHT].timer != -1) //トゥルーサイト - sd->hit += 3 * (sd->sc_data[SC_TRUESIGHT].val1); - if (sd->sc_data[SC_CONCENTRATION].timer != -1) //コンセントレーション - sd->hit += (10 * (sd->sc_data[SC_CONCENTRATION].val1)); - - // その他 - if (sd->sc_data[SC_APPLEIDUN].timer != -1) - { // イドゥンの林檎 - sd->status.max_hp += - ((5 + sd->sc_data[SC_APPLEIDUN].val1 * 2 + - ((sd->sc_data[SC_APPLEIDUN].val2 + 1) >> 1) + - sd->sc_data[SC_APPLEIDUN].val3 / 10) * sd->status.max_hp) / - 100; - if (sd->status.max_hp < 0 - || sd->status.max_hp > battle_config.max_hp) - sd->status.max_hp = battle_config.max_hp; - } - if (sd->sc_data[SC_DELUGE].timer != -1 && sd->def_ele == 1) - { // デリュージ - sd->status.max_hp += - sd->status.max_hp * sd->sc_data[SC_DELUGE].val3 / 100; - if (sd->status.max_hp < 0 - || sd->status.max_hp > battle_config.max_hp) - sd->status.max_hp = battle_config.max_hp; - } - if (sd->sc_data[SC_SERVICE4U].timer != -1) - { // サービスフォーユー - sd->status.max_sp += - sd->status.max_sp * (10 + sd->sc_data[SC_SERVICE4U].val1 + - sd->sc_data[SC_SERVICE4U].val2 + - sd->sc_data[SC_SERVICE4U].val3) / 100; - if (sd->status.max_sp < 0 - || sd->status.max_sp > battle_config.max_sp) - sd->status.max_sp = battle_config.max_sp; - sd->dsprate -= - (10 + sd->sc_data[SC_SERVICE4U].val1 * 3 + - sd->sc_data[SC_SERVICE4U].val2 + - sd->sc_data[SC_SERVICE4U].val3); - if (sd->dsprate < 0) - sd->dsprate = 0; - } - - if (sd->sc_data[SC_FORTUNE].timer != -1) // 幸運のキス - sd->critical += - (10 + sd->sc_data[SC_FORTUNE].val1 + - sd->sc_data[SC_FORTUNE].val2 + - sd->sc_data[SC_FORTUNE].val3) * 10; - if (sd->sc_data[SC_EXPLOSIONSPIRITS].timer != -1) - { // 爆裂波動 - sd->critical += sd->sc_data[SC_EXPLOSIONSPIRITS].val2; - } - - if (sd->sc_data[SC_STEELBODY].timer != -1) - { // 金剛 - sd->def = 90; - sd->mdef = 90; - aspd_rate += 25; - sd->speed = (sd->speed * 125) / 100; - } - if (sd->sc_data[SC_DEFENDER].timer != -1) - { - sd->aspd += (550 - sd->sc_data[SC_DEFENDER].val1 * 50); - sd->speed = - (sd->speed * (155 - sd->sc_data[SC_DEFENDER].val1 * 5)) / 100; - } - if (sd->sc_data[SC_ENCPOISON].timer != -1) - sd->addeff[BadSC::POISON] += sd->sc_data[SC_ENCPOISON].val2; - - if (sd->sc_data[SC_DANCING].timer != -1) - { // 演奏/ダンス使用中 - sd->speed *= 4; - sd->nhealsp = 0; - sd->nshealsp = 0; - sd->nsshealsp = 0; - } if (sd->sc_data[SC_CURSE].timer != -1) sd->speed += 450; - - if (sd->sc_data[SC_TRUESIGHT].timer != -1) //トゥルーサイト - sd->critical += - sd->critical * (sd->sc_data[SC_TRUESIGHT].val1) / 100; - -/* if (sd->sc_data[SC_VOLCANO].timer!=-1) // エンチャントポイズン(属性はbattle.cで) - sd->addeff[2]+=sd->sc_data[SC_VOLCANO].val2;//% of granting - if (sd->sc_data[SC_DELUGE].timer!=-1) // エンチャントポイズン(属性はbattle.cで) - sd->addeff[0]+=sd->sc_data[SC_DELUGE].val2;//% of granting - */ } if (sd->speed_rate != 100) @@ -2468,10 +2126,6 @@ int pc_bonus(struct map_session_data *sd, SP type, int val) if (sd->state.lr_flag != 2) sd->special_state.no_gemstone = 1; break; - case SP_INFINITE_ENDURE: - if (sd->state.lr_flag != 2) - sd->special_state.infinite_endure = 1; - break; case SP_SPLASH_RANGE: if (sd->state.lr_flag != 2 && sd->splash_range < val) sd->splash_range = val; @@ -3126,7 +2780,7 @@ int pc_useitem(struct map_session_data *sd, int n) amount = sd->status.inventory[n].amount; if (sd->status.inventory[n].nameid <= 0 || sd->status.inventory[n].amount <= 0 - || sd->sc_data[SC_BERSERK].timer != -1 || !pc_isUseitem(sd, n)) + || !pc_isUseitem(sd, n)) { clif_useitemack(sd, n, 0, 0); return 1; @@ -3328,16 +2982,8 @@ int pc_setpos(struct map_session_data *sd, const char *mapname_org, int x, int y skill_gangsterparadise(sd, 0); } - if (sd->sc_data[SC_TRICKDEAD].timer != -1) - skill_status_change_end(&sd->bl, SC_TRICKDEAD, -1); if (bool(sd->status.option & Option::HIDE2)) skill_status_change_end(&sd->bl, SC_HIDING, -1); - if (bool(sd->status.option & Option::CLOAK)) - skill_status_change_end(&sd->bl, SC_CLOAKING, -1); - if (bool(sd->status.option & (Option::CHASEWALK | Option::HIDE2))) - skill_status_change_end(&sd->bl, SC_CHASEWALK, -1); - if (sd->sc_data[SC_DANCING].timer != -1) // clear dance effect when warping [Valaris] - skill_stop_dancing(&sd->bl, 0); memcpy(mapname, mapname_org, 24); mapname[16] = 0; @@ -3579,11 +3225,6 @@ void pc_walk(timer_id tid, tick_t tick, custom_id_t id, custom_data_t data) if (moveblock) map_addblock(&sd->bl); - if (sd->sc_data[SC_DANCING].timer != -1) - skill_unit_move_unit_group((struct skill_unit_group *) - sd->sc_data[SC_DANCING].val2, - sd->bl.m, dx, dy); - map_foreachinmovearea(std::bind(clif_pcinsight, ph::_1, sd), sd->bl.m, x - AREA_SIZE, y - AREA_SIZE, x + AREA_SIZE, y + AREA_SIZE, @@ -3616,11 +3257,6 @@ void pc_walk(timer_id tid, tick_t tick, custom_id_t id, custom_data_t data) skill_devotion3(&sd->bl, sd->dev.val1[i]); break; } - // 被ディボーション検査 - if (sd->sc_data[SC_DEVOTION].val1) - { - skill_devotion2(&sd->bl, sd->sc_data[SC_DEVOTION].val1); - } skill_unit_move(&sd->bl, tick, 1); // スキルユニットの検査 @@ -3823,74 +3459,6 @@ int pc_checkskill(struct map_session_data *sd, SkillID skill_id) } /*========================================== - * 武器変更によるスキルの継続チェック - * 引数: - * struct map_session_data *sd セッションデータ - * int nameid 装備品ID - * 返り値: - * 0 変更なし - * -1 スキルを解除 - *------------------------------------------ - */ -static -int pc_checkallowskill(struct map_session_data *sd) -{ - nullpo_ret(sd); - - if (sd->sc_data[SC_TWOHANDQUICKEN].timer != -1) - { // 2HQ - skill_status_change_end(&sd->bl, SC_TWOHANDQUICKEN, -1); // 2HQを解除 - return -1; - } - if (sd->sc_data[SC_AURABLADE].timer != -1) - { // オーラブレード - skill_status_change_end(&sd->bl, SC_AURABLADE, -1); // オーラブレードを解除 - return -1; - } - if (sd->sc_data[SC_PARRYING].timer != -1) - { // パリイング - skill_status_change_end(&sd->bl, SC_PARRYING, -1); // パリイングを解除 - return -1; - } - if (sd->sc_data[SC_CONCENTRATION].timer != -1) - { // コンセントレーション - skill_status_change_end(&sd->bl, SC_CONCENTRATION, -1); // コンセントレーションを解除 - return -1; - } - if (sd->sc_data[SC_SPEARSQUICKEN].timer != -1) - { // スピアクィッケン - skill_status_change_end(&sd->bl, SC_SPEARSQUICKEN, -1); // スピアクイッケンを解除 - return -1; - } - if (sd->sc_data[SC_ADRENALINE].timer != -1) - { // アドレナリンラッシュ - skill_status_change_end(&sd->bl, SC_ADRENALINE, -1); // アドレナリンラッシュを解除 - return -1; - } - - if (sd->status.shield <= 0) - { - if (sd->sc_data[SC_AUTOGUARD].timer != -1) - { // オートガード - skill_status_change_end(&sd->bl, SC_AUTOGUARD, -1); - return -1; - } - if (sd->sc_data[SC_DEFENDER].timer != -1) - { // ディフェンダー - skill_status_change_end(&sd->bl, SC_DEFENDER, -1); - return -1; - } - if (sd->sc_data[SC_REFLECTSHIELD].timer != -1) - { //リフレクトシールド - skill_status_change_end(&sd->bl, SC_REFLECTSHIELD, -1); - return -1; - } - } - - return 0; -} - -/*========================================== * 装 備品のチェック *------------------------------------------ */ @@ -3954,11 +3522,6 @@ void pc_attack_timer(timer_id tid, tick_t tick, custom_id_t id, custom_data_t) Option *opt = battle_get_option(bl); if (opt != NULL && bool(*opt & Option::REAL_ANY_HIDE)) return; - if (((sc_data = battle_get_sc_data(bl)) - && sc_data[SC_TRICKDEAD].timer != -1) - || ((sc_data = battle_get_sc_data(bl)) - && sc_data[SC_BASILICA].timer != -1)) - return; if (sd->skilltimer != -1) return; @@ -3998,9 +3561,7 @@ void pc_attack_timer(timer_id tid, tick_t tick, custom_id_t id, custom_data_t) if (dist <= range && !battle_check_range(&sd->bl, bl, range)) { - if (pc_can_reach(sd, bl->x, bl->y) && sd->canmove_tick < tick - && (sd->sc_data[SC_ANKLE].timer == -1 - || sd->sc_data[SC_SPIDERWEB].timer == -1)) + if (pc_can_reach(sd, bl->x, bl->y) && sd->canmove_tick < tick) // TMW client doesn't support this //pc_walktoxy(sd,bl->x,bl->y); clif_movetoattack(sd, bl); @@ -4019,9 +3580,6 @@ void pc_attack_timer(timer_id tid, tick_t tick, custom_id_t id, custom_data_t) pc_stop_walking(sd, 0); sd->attacktarget_lv = battle_weapon_attack(&sd->bl, bl, tick, BCT_ZERO); - if (!(battle_config.pc_cloak_check_type & 2) - && sd->sc_data[SC_CLOAKING].timer != -1) - skill_status_change_end(&sd->bl, SC_CLOAKING, -1); map_freeblock_unlock(); sd->attackabletime = tick + (sd->aspd << 1); } @@ -4219,15 +3777,6 @@ int pc_gainexp_reason(struct map_session_data *sd, int base_exp, int job_exp, }}; MAP_LOG_PC(sd, "GAINXP %d %d %s", base_exp, job_exp, reasons[reason]); - if (sd->sc_data[SC_RICHMANKIM].timer != -1) - { - // added bounds checking [Vaalris] - base_exp += - base_exp * (25 + sd->sc_data[SC_RICHMANKIM].val1 * 25) / 100; - job_exp += - job_exp * (25 + sd->sc_data[SC_RICHMANKIM].val1 * 25) / 100; - } - if (!battle_config.multi_level_up && pc_nextbaseafter(sd)) { while (sd->status.base_exp + base_exp >= pc_nextbaseafter(sd) @@ -4636,24 +4185,15 @@ int pc_damage(struct block_list *src, struct map_session_data *sd, else MAP_LOG_PC(sd, "INJURED-BY null FOR %d", damage); - // 歩 いていたら足を止める - if (sd->sc_data[SC_ENDURE].timer == -1 - && !sd->special_state.infinite_endure) - pc_stop_walking(sd, 3); + pc_stop_walking(sd, 3); // 演奏/ダンスの中断 if (damage > sd->status.max_hp >> 2) skill_stop_dancing(&sd->bl, 0); sd->status.hp -= damage; - if (sd->sc_data[SC_TRICKDEAD].timer != -1) - skill_status_change_end(&sd->bl, SC_TRICKDEAD, -1); if (bool(sd->status.option & Option::HIDE2)) skill_status_change_end(&sd->bl, SC_HIDING, -1); - if (bool(sd->status.option & Option::CLOAK)) - skill_status_change_end(&sd->bl, SC_CLOAKING, -1); - if (bool(sd->status.option & Option::CHASEWALK)) - skill_status_change_end(&sd->bl, SC_CHASEWALK, -1); if (sd->status.hp > 0) { @@ -4699,8 +4239,6 @@ int pc_damage(struct block_list *src, struct map_session_data *sd, for (i = 0; i < 5; i++) if (sd->dev.val1[i]) { - skill_status_change_end(&map_id2sd(sd->dev.val1[i])->bl, - SC_DEVOTION, -1); sd->dev.val1[i] = sd->dev.val2[i] = 0; } @@ -5088,9 +4626,6 @@ int pc_heal(struct map_session_data *sd, int hp, int sp) sp = 0; } - if (sd->sc_data[SC_BERSERK].timer != -1) //バーサーク中は回復させないらしい - return 0; - if (hp + sd->status.hp > sd->status.max_hp) hp = sd->status.max_hp - sd->status.hp; if (sp + sd->status.sp > sd->status.max_sp) @@ -5199,9 +4734,6 @@ int pc_itemheal_effect(struct map_session_data *sd, int hp, int sp) { nullpo_ret(sd); - if (sd->sc_data[SC_GOSPEL].timer != -1) //バーサーク中は回復させないらしい - return 0; - if (sd->state.potionpitcher_flag) { sd->potion_hp = hp; @@ -5858,12 +5390,6 @@ int pc_equipitem(struct map_session_data *sd, int n, EPOS) // -- moonsoul (if player is berserk then cannot equip) // - if (sd->sc_data[SC_BERSERK].timer != -1) - { - clif_equipitemack(sd, n, EPOS::ZERO, 0); // fail - return 0; - } - if (pos == (EPOS::MISC2 | EPOS::CAPE)) { // アクセサリ用例外処理 @@ -5963,7 +5489,6 @@ int pc_equipitem(struct map_session_data *sd, int n, EPOS) } pc_signal_advanced_equipment_change(sd, n); - pc_checkallowskill(sd); // 装備品でスキルか解除されるかチェック if (itemdb_look(sd->status.inventory[n].nameid) == 11 && arrow) { // Added by RoVeRT clif_arrowequip(sd, arrow); @@ -5971,24 +5496,6 @@ int pc_equipitem(struct map_session_data *sd, int n, EPOS) } pc_calcstatus(sd, 0); - if (sd->special_state.infinite_endure) - { - if (sd->sc_data[SC_ENDURE].timer == -1) - skill_status_change_start(&sd->bl, SC_ENDURE, 10, 1, 0, 0, 0, 0); - } - else - { - if (sd->sc_data[SC_ENDURE].timer != -1 && sd->sc_data[SC_ENDURE].val2) - skill_status_change_end(&sd->bl, SC_ENDURE, -1); - } - - if (sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 - && !battle_check_undead(7, sd->def_ele)) - skill_status_change_end(&sd->bl, SC_SIGNUMCRUCIS, -1); - if (sd->sc_data[SC_DANCING].timer != -1 - && (sd->status.weapon != 13 && sd->status.weapon != 14)) - skill_stop_dancing(&sd->bl, 0); - return 0; } @@ -6002,12 +5509,6 @@ int pc_unequipitem(struct map_session_data *sd, int n, CalcStatus type) // -- moonsoul (if player is berserk then cannot unequip) // - if (sd->sc_data[SC_BERSERK].timer != -1) - { - clif_unequipitemack(sd, n, EPOS::ZERO, 0); - return 0; - } - if (battle_config.battle_log) PRINTF("unequip %d %x:%x\n", n, pc_equippoint(sd, n), @@ -6057,10 +5558,6 @@ int pc_unequipitem(struct map_session_data *sd, int n, CalcStatus type) clif_unequipitemack(sd, n, sd->status.inventory[n].equip, 1); sd->status.inventory[n].equip = EPOS::ZERO; - if (type == CalcStatus::NOW) - pc_checkallowskill(sd); - if (sd->weapontype1 == 0 && sd->weapontype2 == 0) - skill_encchant_eremental_end(&sd->bl, StatusChange::NEGATIVE1); } else { @@ -6069,9 +5566,6 @@ int pc_unequipitem(struct map_session_data *sd, int n, CalcStatus type) if (type == CalcStatus::NOW) { pc_calcstatus(sd, 0); - if (sd->sc_data[SC_SIGNUMCRUCIS].timer != -1 - && !battle_check_undead(7, sd->def_ele)) - skill_status_change_end(&sd->bl, SC_SIGNUMCRUCIS, -1); } return 0; @@ -6384,8 +5878,6 @@ int pc_spheal(struct map_session_data *sd) a = natural_heal_diff_tick; if (pc_issit(sd)) a += a; - if (sd->sc_data[SC_MAGNIFICAT].timer != -1) // マグニフィカート - a += a; return a; } @@ -6404,8 +5896,6 @@ int pc_hpheal(struct map_session_data *sd) a = natural_heal_diff_tick; if (pc_issit(sd)) a += a; - if (sd->sc_data[SC_MAGNIFICAT].timer != -1) // Modified by RoVeRT - a += a; return a; } @@ -6414,13 +5904,10 @@ static int pc_natural_heal_hp(struct map_session_data *sd) { int bhp; - int inc_num, bonus, skill; + int inc_num, bonus; nullpo_ret(sd); - if (sd->sc_data[SC_TRICKDEAD].timer != -1) // Modified by RoVeRT - return 0; - if (pc_checkoverhp(sd)) { sd->hp_sub = sd->inchealhptick = 0; @@ -6432,16 +5919,8 @@ int pc_natural_heal_hp(struct map_session_data *sd) if (sd->walktimer == -1) { inc_num = pc_hpheal(sd); - if (sd->sc_data[SC_TENSIONRELAX].timer != -1) - { // テンションリラックス - sd->hp_sub += 2 * inc_num; - sd->inchealhptick += 3 * natural_heal_diff_tick; - } - else - { - sd->hp_sub += inc_num; - sd->inchealhptick += natural_heal_diff_tick; - } + sd->hp_sub += inc_num; + sd->inchealhptick += natural_heal_diff_tick; } else { @@ -6493,30 +5972,6 @@ int pc_natural_heal_hp(struct map_session_data *sd) sd->inchealhptick = 0; return 0; - - if (sd->sc_data[SC_APPLEIDUN].timer != -1) - { // Apple of Idun - if (sd->inchealhptick >= 6000 && sd->status.hp < sd->status.max_hp) - { - bonus = skill * 20; - while (sd->inchealhptick >= 6000) - { - sd->inchealhptick -= 6000; - if (sd->status.hp + bonus <= sd->status.max_hp) - sd->status.hp += bonus; - else - { - bonus = sd->status.max_hp - sd->status.hp; - sd->status.hp = sd->status.max_hp; - sd->hp_sub = sd->inchealhptick = 0; - } - } - } - } - else - sd->inchealhptick = 0; - - return 0; } static @@ -6527,9 +5982,6 @@ int pc_natural_heal_sp(struct map_session_data *sd) nullpo_ret(sd); - if (sd->sc_data[SC_TRICKDEAD].timer != -1) // Modified by RoVeRT - return 0; - if (pc_checkoversp(sd)) { sd->sp_sub = sd->inchealsptick = 0; @@ -6539,8 +5991,7 @@ int pc_natural_heal_sp(struct map_session_data *sd) bsp = sd->status.sp; inc_num = pc_spheal(sd); - if (sd->sc_data[SC_EXPLOSIONSPIRITS].timer == -1) - sd->sp_sub += inc_num; + sd->sp_sub += inc_num; if (sd->walktimer == -1) sd->inchealsptick += natural_heal_diff_tick; else @@ -6669,11 +6120,7 @@ void pc_natural_heal_sub(struct map_session_data *sd) && !pc_ishiding(sd) && sd->sc_data[SC_POISON].timer == -1) { pc_natural_heal_hp(sd); - if (sd->sc_data[SC_EXTREMITYFIST].timer == -1 && //阿修羅状態ではSPが回復しない - sd->sc_data[SC_DANCING].timer == -1 && //ダンス状態ではSPが回復しない - sd->sc_data[SC_BERSERK].timer == -1 //バーサーク状態ではSPが回復しない - ) - pc_natural_heal_sp(sd); + pc_natural_heal_sp(sd); } else { @@ -6844,9 +6291,6 @@ void pc_setstand(struct map_session_data *sd) { nullpo_retv(sd); - if (sd->sc_data[SC_TENSIONRELAX].timer != -1) - skill_status_change_end(&sd->bl, SC_TENSIONRELAX, -1); - sd->state.dead_sit = 0; } |