From 2e87e5b65a02d8d9f867a0510f039cc319b3ffcb Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Mon, 6 Jul 2009 11:23:10 -0600 Subject: Add a new trade spam system --- src/map/battle.c | 1304 ++++++++++++++++++++++++++++-------------------------- src/map/battle.h | 31 +- src/map/clif.c | 2 +- src/map/map.h | 35 +- src/map/pc.c | 2 + src/map/tmw.c | 33 ++ src/map/tmw.h | 1 + 7 files changed, 740 insertions(+), 668 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index 45524e5..343b91b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -27,8 +27,8 @@ int attr_fix_table[4][10][10]; struct Battle_Config battle_config; /*========================================== - * 二点間の距離を返す - * 戻りは整数で0以上 + * ソスソスソス_ソスヤの具ソスソスソスソスソスソスヤゑソス + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ static int distance(int x0,int y0,int x1,int y1) @@ -41,8 +41,8 @@ static int distance(int x0,int y0,int x1,int y1) } /*========================================== - * 自分をロックしている対象の数を返す(汎用) - * 戻りは整数で0以上 + * ソスソスソスソスソスソスbソスNソスソスソストゑソスソスソスソスホ象の撰ソスソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv) @@ -55,8 +55,8 @@ int battle_counttargeted(struct block_list *bl,struct block_list *src,int target return 0; } /*========================================== - * 対象のClassを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスClassソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_class(struct block_list *bl) @@ -70,8 +70,8 @@ int battle_get_class(struct block_list *bl) return 0; } /*========================================== - * 対象の方向を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象の包ソスソスソスソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_dir(struct block_list *bl) @@ -85,8 +85,8 @@ int battle_get_dir(struct block_list *bl) return 0; } /*========================================== - * 対象のレベルを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象のソスソスxソスソスソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_lv(struct block_list *bl) @@ -100,8 +100,8 @@ int battle_get_lv(struct block_list *bl) return 0; } /*========================================== - * 対象の射程を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象の射抵ソスソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_range(struct block_list *bl) @@ -115,8 +115,8 @@ int battle_get_range(struct block_list *bl) return 0; } /*========================================== - * 対象のHPを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスHPソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_hp(struct block_list *bl) @@ -130,8 +130,8 @@ int battle_get_hp(struct block_list *bl) return 1; } /*========================================== - * 対象のMHPを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスMHPソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_max_hp(struct block_list *bl) @@ -164,8 +164,8 @@ int battle_get_max_hp(struct block_list *bl) return 1; } /*========================================== - * 対象のStrを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスStrソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_str(struct block_list *bl) @@ -183,20 +183,20 @@ int battle_get_str(struct block_list *bl) if(sc_data) { if(sc_data[SC_LOUD].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC) str += 4; - if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ブレッシング + if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ソスuソスソスソスbソスVソスソスソスO int race=battle_get_race(bl); - if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) str >>= 1; // 悪 魔/不死 - else str += sc_data[SC_BLESSING].val1; // その他 + if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) str >>= 1; // ソスソス ソスソス/ソスsソスソス + else str += sc_data[SC_BLESSING].val1; // ソスソスソスフ托ソス } - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg str += 5; } if(str < 0) str = 0; return str; } /*========================================== - * 対象のAgiを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスAgiソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ @@ -214,26 +214,26 @@ int battle_get_agi(struct block_list *bl) if(sc_data) { if( sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1 && - bl->type != BL_PC) // 速度増加(PCはpc.cで) + bl->type != BL_PC) // ソスソスソスxソスソスソスソス(PCソスソスpc.cソスソス) agi += 2+sc_data[SC_INCREASEAGI].val1; if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC) agi += agi*(2+sc_data[SC_CONCENTRATE].val1)/100; - if(sc_data[SC_DECREASEAGI].timer!=-1) // 速度減少 + if(sc_data[SC_DECREASEAGI].timer!=-1) // ソスソスソスxソスソスソスソス agi -= 2+sc_data[SC_DECREASEAGI].val1; - if(sc_data[SC_QUAGMIRE].timer!=-1 ) // クァグマイア + if(sc_data[SC_QUAGMIRE].timer!=-1 ) // ソスNソス@ソスOソス}ソスCソスA agi >>= 1; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg agi += 5; } if(agi < 0) agi = 0; return agi; } /*========================================== - * 対象のVitを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスVitソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_vit(struct block_list *bl) @@ -250,7 +250,7 @@ int battle_get_vit(struct block_list *bl) if(sc_data) { if(sc_data[SC_STRIPARMOR].timer != -1 && bl->type!=BL_PC) vit = vit*60/100; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg vit += 5; } @@ -258,8 +258,8 @@ int battle_get_vit(struct block_list *bl) return vit; } /*========================================== - * 対象のIntを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスIntソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_int(struct block_list *bl) @@ -275,22 +275,22 @@ int battle_get_int(struct block_list *bl) int_=((struct map_session_data *)bl)->paramc[3]; if(sc_data) { - if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ブレッシング + if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ソスuソスソスソスbソスVソスソスソスO int race=battle_get_race(bl); - if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) int_ >>= 1; // 悪 魔/不死 - else int_ += sc_data[SC_BLESSING].val1; // その他 + if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) int_ >>= 1; // ソスソス ソスソス/ソスsソスソス + else int_ += sc_data[SC_BLESSING].val1; // ソスソスソスフ托ソス } if( sc_data[SC_STRIPHELM].timer != -1 && bl->type != BL_PC) int_ = int_*60/100; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg int_ += 5; } if(int_ < 0) int_ = 0; return int_; } /*========================================== - * 対象のDexを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスDexソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_dex(struct block_list *bl) @@ -309,23 +309,23 @@ int battle_get_dex(struct block_list *bl) if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC) dex += dex*(2+sc_data[SC_CONCENTRATE].val1)/100; - if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ブレッシング + if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ソスuソスソスソスbソスVソスソスソスO int race=battle_get_race(bl); - if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) dex >>= 1; // 悪 魔/不死 - else dex += sc_data[SC_BLESSING].val1; // その他 + if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) dex >>= 1; // ソスソス ソスソス/ソスsソスソス + else dex += sc_data[SC_BLESSING].val1; // ソスソスソスフ托ソス } - if(sc_data[SC_QUAGMIRE].timer!=-1 ) // クァグマイア + if(sc_data[SC_QUAGMIRE].timer!=-1 ) // ソスNソス@ソスOソス}ソスCソスA dex >>= 1; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg dex += 5; } if(dex < 0) dex = 0; return dex; } /*========================================== - * 対象のLukを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスLukソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_luk(struct block_list *bl) @@ -341,11 +341,11 @@ int battle_get_luk(struct block_list *bl) luk=((struct map_session_data *)bl)->paramc[5]; if(sc_data) { - if(sc_data[SC_GLORIA].timer!=-1 && bl->type != BL_PC) // グロリア(PCはpc.cで) + if(sc_data[SC_GLORIA].timer!=-1 && bl->type != BL_PC) // ソスOソスソスソスソスソスA(PCソスソスpc.cソスソス) luk += 30; - if(sc_data[SC_CURSE].timer!=-1 ) // 呪い + if(sc_data[SC_CURSE].timer!=-1 ) // ソスソスソスソス luk=0; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg luk += 5; } if(luk < 0) luk = 0; @@ -353,8 +353,8 @@ int battle_get_luk(struct block_list *bl) } /*========================================== - * 対象のFleeを返す(汎用) - * 戻りは整数で1以上 + * ソスホ象ゑソスFleeソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス *------------------------------------------ */ int battle_get_flee(struct block_list *bl) @@ -375,17 +375,17 @@ int battle_get_flee(struct block_list *bl) +(sc_data[SC_WHISTLE].val3>>16))/100; if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC) flee -= flee*25/100; - if(sc_data[SC_WINDWALK].timer!=-1 && bl->type != BL_PC) // ウィンドウォーク + if(sc_data[SC_WINDWALK].timer!=-1 && bl->type != BL_PC) // ソスEソスBソスソスソスhソスEソスHソス[ソスN flee += flee*(sc_data[SC_WINDWALK].val2)/100; - if(sc_data[SC_SPIDERWEB].timer!=-1 && bl->type != BL_PC) //スパイダーウェブ + if(sc_data[SC_SPIDERWEB].timer!=-1 && bl->type != BL_PC) //ソスXソスpソスCソス_ソス[ソスEソスFソスu flee -= flee*50/100; } if(flee < 1) flee = 1; return flee; } /*========================================== - * 対象のHitを返す(汎用) - * 戻りは整数で1以上 + * ソスホ象ゑソスHitソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス *------------------------------------------ */ int battle_get_hit(struct block_list *bl) @@ -404,19 +404,19 @@ int battle_get_hit(struct block_list *bl) if(sc_data[SC_HUMMING].timer!=-1 && bl->type != BL_PC) // hit += hit*(sc_data[SC_HUMMING].val1*2+sc_data[SC_HUMMING].val2 +sc_data[SC_HUMMING].val3)/100; - if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC) // 呪い + if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC) // ソスソスソスソス hit -= hit*25/100; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg hit += 3*(sc_data[SC_TRUESIGHT].val1); - if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション + if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス hit += (hit*(10*(sc_data[SC_CONCENTRATION].val1)))/100; } if(hit < 1) hit = 1; return hit; } /*========================================== - * 対象の完全回避を返す(汎用) - * 戻りは整数で1以上 + * ソスホ象の奇ソスソスSソスソスソスソスソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス *------------------------------------------ */ int battle_get_flee2(struct block_list *bl) @@ -442,8 +442,8 @@ int battle_get_flee2(struct block_list *bl) return flee2; } /*========================================== - * 対象のクリティカルを返す(汎用) - * 戻りは整数で1以上 + * ソスホ象のクソスソスソスeソスBソスJソスソスソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス *------------------------------------------ */ int battle_get_critical(struct block_list *bl) @@ -466,15 +466,15 @@ int battle_get_critical(struct block_list *bl) +sc_data[SC_FORTUNE].val3)*10; if(sc_data[SC_EXPLOSIONSPIRITS].timer!=-1 && bl->type != BL_PC) critical += sc_data[SC_EXPLOSIONSPIRITS].val2; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) //トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) //ソスgソスDソスソスソス[ソスTソスCソスg critical += critical*sc_data[SC_TRUESIGHT].val1/100; } if(critical < 1) critical = 1; return critical; } /*========================================== - * base_atkの取得 - * 戻りは整数で1以上 + * base_atkソスフ取得 + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス *------------------------------------------ */ int battle_get_baseatk(struct block_list *bl) @@ -485,27 +485,27 @@ int battle_get_baseatk(struct block_list *bl) nullpo_retr(1, bl); sc_data=battle_get_sc_data(bl); if(bl->type==BL_PC && (struct map_session_data *)bl) - batk = ((struct map_session_data *)bl)->base_atk; //設定されているbase_atk - else { //それ以外なら + batk = ((struct map_session_data *)bl)->base_atk; //ソスン定さソスソスソストゑソスソスソスbase_atk + else { //ソスソスソスソスソスネ外ソスネゑソス int str,dstr; str = battle_get_str(bl); //STR dstr = str/10; - batk = dstr*dstr + str; //base_atkを計算する - } - if(sc_data) { //状態異常あり - if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) //PCでプロボック(SM_PROVOKE)状態 - batk = batk*(100+2*sc_data[SC_PROVOKE].val1)/100; //base_atk増加 - if(sc_data[SC_CURSE].timer!=-1 ) //呪われていたら - batk -= batk*25/100; //base_atkが25%減少 - if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション + batk = dstr*dstr + str; //base_atkソスソスソスvソスZソスソスソスソス + } + if(sc_data) { //ソスソスソスヤ異常あソスソス + if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) //PCソスナプソスソスソス{ソスbソスN(SM_PROVOKE)ソスソスソスソス + batk = batk*(100+2*sc_data[SC_PROVOKE].val1)/100; //base_atkソスソスソスソス + if(sc_data[SC_CURSE].timer!=-1 ) //ソスソスソスソスソスソスソストゑソスソスソスソスソス + batk -= batk*25/100; //base_atkソスソス25%ソスソスソスソス + if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス batk += batk*(5*sc_data[SC_CONCENTRATION].val1)/100; } - if(batk < 1) batk = 1; //base_atkは最低でも1 + if(batk < 1) batk = 1; //base_atkソスヘ最抵ソスソスナゑソス1 return batk; } /*========================================== - * 対象のAtkを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスAtkソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_atk(struct block_list *bl) @@ -525,15 +525,15 @@ int battle_get_atk(struct block_list *bl) atk = atk*(100+2*sc_data[SC_PROVOKE].val1)/100; if(sc_data[SC_CURSE].timer!=-1 ) atk -= atk*25/100; - if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション + if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス atk += atk*(5*sc_data[SC_CONCENTRATION].val1)/100; } if(atk < 0) atk = 0; return atk; } /*========================================== - * 対象の左手Atkを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象の搾ソスソスソスAtkソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_atk_(struct block_list *bl) @@ -550,8 +550,8 @@ int battle_get_atk_(struct block_list *bl) return 0; } /*========================================== - * 対象のAtk2を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスAtk2ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_atk2(struct block_list *bl) @@ -577,7 +577,7 @@ int battle_get_atk2(struct block_list *bl) atk2 += sc_data[SC_NIBELUNGEN].val2; if(sc_data[SC_STRIPWEAPON].timer!=-1) atk2 = atk2*90/100; - if(sc_data[SC_CONCENTRATION].timer!=-1) //コンセントレーション + if(sc_data[SC_CONCENTRATION].timer!=-1) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス atk2 += atk2*(5*sc_data[SC_CONCENTRATION].val1)/100; } if(atk2 < 0) atk2 = 0; @@ -586,8 +586,8 @@ int battle_get_atk2(struct block_list *bl) return 0; } /*========================================== - * 対象の左手Atk2を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象の搾ソスソスソスAtk2ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_atk_2(struct block_list *bl) @@ -599,8 +599,8 @@ int battle_get_atk_2(struct block_list *bl) return 0; } /*========================================== - * 対象のMAtk1を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスMAtk1ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_matk1(struct block_list *bl) @@ -623,8 +623,8 @@ int battle_get_matk1(struct block_list *bl) return 0; } /*========================================== - * 対象のMAtk2を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスMAtk2ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_matk2(struct block_list *bl) @@ -646,8 +646,8 @@ int battle_get_matk2(struct block_list *bl) return 0; } /*========================================== - * 対象のDefを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスDefソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_def(struct block_list *bl) @@ -670,35 +670,35 @@ int battle_get_def(struct block_list *bl) if(def < 1000000) { if(sc_data) { - //キーピング時はDEF100 + //ソスLソス[ソスsソスソスソスOソスソスソスソスDEF100 if( sc_data[SC_KEEPING].timer!=-1) def = 100; - //プロボック時は減算 + //ソスvソスソスソス{ソスbソスNソスソスソスヘ鯉ソスソスZ if( sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) def = (def*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; - //戦太鼓の響き時は加算 + //ソス太ソスロの具ソスソスソスソスソスソスヘ会ソスZ if( sc_data[SC_DRUMBATTLE].timer!=-1 && bl->type != BL_PC) def += sc_data[SC_DRUMBATTLE].val3; - //毒にかかっている時は減算 + //ソスナにゑソスソスソスソスソストゑソスソス骼橸ソスヘ鯉ソスソスZ if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC) def = def*75/100; - //ストリップシールド時は減算 + //ソスXソスgソスソスソスbソスvソスVソス[ソスソスソスhソスソスソスヘ鯉ソスソスZ if(sc_data[SC_STRIPSHIELD].timer!=-1 && bl->type != BL_PC) def = def*85/100; - //シグナムクルシス時は減算 + //ソスVソスOソスiソスソスソスNソスソスソスVソスXソスソスソスヘ鯉ソスソスZ if(sc_data[SC_SIGNUMCRUCIS].timer!=-1 && bl->type != BL_PC) def = def * (100 - sc_data[SC_SIGNUMCRUCIS].val2)/100; - //永遠の混沌時はDEF0になる + //ソスiソスソスソスフ搾ソスソスラ趣ソスソスソスDEF0ソスノなゑソス if(sc_data[SC_ETERNALCHAOS].timer!=-1 && bl->type != BL_PC) def = 0; - //凍結、石化時は右シフト + //ソスソスソスソスソスAソスホ会ソスソスソスソスヘ右ソスVソスtソスg if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)) def >>= 1; - //コンセントレーション時は減算 + //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソスソスソスソスヘ鯉ソスソスZ if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) def = (def*(100 - 5*sc_data[SC_CONCENTRATION].val1))/100; } - //詠唱中は詠唱時減算率に基づいて減算 + //ソスrソスソスソスソスソスヘ詠ソスソスソスソスソスソスソスZソスソスソスノ奇ソスソステゑソスソスト鯉ソスソスZ if(skilltimer != -1) { int def_rate = skill_get_castdef(skillid); if(def_rate != 0) @@ -709,8 +709,8 @@ int battle_get_def(struct block_list *bl) return def; } /*========================================== - * 対象のMDefを返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスMDefソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_mdef(struct block_list *bl) @@ -727,7 +727,7 @@ int battle_get_mdef(struct block_list *bl) if(mdef < 1000000) { if(sc_data) { - //バリアー状態時はMDEF100 + //ソスoソスソスソスAソス[ソスソスソスヤ趣ソスソスソスMDEF100 if(mdef < 90 && sc_data[SC_MBARRIER].timer != -1) { mdef += sc_data[SC_MBARRIER].val1; if (mdef > 90) @@ -735,7 +735,7 @@ int battle_get_mdef(struct block_list *bl) } if(sc_data[SC_BARRIER].timer != -1) mdef = 100; - //凍結、石化時は1.25倍 + //ソスソスソスソスソスAソスホ会ソスソスソスソスソス1.25ソス{ if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)) mdef = mdef*125/100; if( sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC) @@ -746,8 +746,8 @@ int battle_get_mdef(struct block_list *bl) return mdef; } /*========================================== - * 対象のDef2を返す(汎用) - * 戻りは整数で1以上 + * ソスホ象ゑソスDef2ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス *------------------------------------------ */ int battle_get_def2(struct block_list *bl) @@ -769,7 +769,7 @@ int battle_get_def2(struct block_list *bl) def2 = (def2*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC) def2 = def2*75/100; - //コンセントレーション時は減算 + //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソスソスソスソスヘ鯉ソスソスZ if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) def2 = def2*(100 - 5*sc_data[SC_CONCENTRATION].val1)/100; } @@ -777,8 +777,8 @@ int battle_get_def2(struct block_list *bl) return def2; } /*========================================== - * 対象のMDef2を返す(汎用) - * 戻りは整数で0以上 + * ソスホ象ゑソスMDef2ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス *------------------------------------------ */ int battle_get_mdef2(struct block_list *bl) @@ -799,9 +799,9 @@ int battle_get_mdef2(struct block_list *bl) return mdef2; } /*========================================== - * 対象のSpeed(移動速度)を返す(汎用) - * 戻りは整数で1以上 - * Speedは小さいほうが移動速度が速い + * ソスホ象ゑソスSpeed(ソスレ難ソスソスソスソスx)ソスソスソスヤゑソス(ソスト用) + * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * Speedソスヘ擾ソスソスソスソスソスソスルゑソスソスソスソスレ難ソスソスソスソスxソスソスソスソスソスソス *------------------------------------------ */ int battle_get_speed(struct block_list *bl) @@ -816,31 +816,31 @@ int battle_get_speed(struct block_list *bl) speed = ((struct mob_data *)bl)->stats[MOB_SPEED]; if(sc_data) { - //速度増加時は25%減算 + //ソスソスソスxソスソスソスソスソスソスソス25%ソスソスソスZ if(sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_DONTFORGETME].timer == -1) speed -= speed*25/100; - //速度減少時は25%加算 + //ソスソスソスxソスソスソスソスソスソスソスソス25%ソスソスZ if(sc_data[SC_DECREASEAGI].timer!=-1) speed = speed*125/100; - //クァグマイア時は50%加算 + //ソスNソス@ソスOソス}ソスCソスAソスソスソスソス50%ソスソスZ if(sc_data[SC_QUAGMIRE].timer!=-1) speed = speed*3/2; - //私を忘れないで…時は加算 + //ソスソスソスソスソスYソスソスソスネゑソスソスナ…ソスソスソスヘ会ソスZ if(sc_data[SC_DONTFORGETME].timer!=-1) speed = speed*(100+sc_data[SC_DONTFORGETME].val1*2 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3&0xffff))/100; - //金剛時は25%加算 + //ソスソスソスソスソスソス25%ソスソスZ if(sc_data[SC_STEELBODY].timer!=-1) speed = speed*125/100; - //ディフェンダー時は加算 + //ソスfソスBソスtソスFソスソスソス_ソス[ソスソスソスヘ会ソスZ if(sc_data[SC_DEFENDER].timer!=-1) speed = (speed * (155 - sc_data[SC_DEFENDER].val1*5)) / 100; - //踊り状態は4倍遅い + //ソスxソスソスソスソスソスヤゑソス4ソス{ソスxソスソス if(sc_data[SC_DANCING].timer!=-1 ) speed*=4; - //呪い時は450加算 + //ソスい趣ソスソスソス450ソスソスZ if(sc_data[SC_CURSE].timer!=-1) speed = speed + 450; - //ウィンドウォーク時はLv*2%減算 + //ソスEソスBソスソスソスhソスEソスHソス[ソスNソスソスソスソスLv*2%ソスソスソスZ if(sc_data[SC_WINDWALK].timer!=-1) speed -= (speed*(sc_data[SC_WINDWALK].val1*2))/100; } @@ -851,8 +851,8 @@ int battle_get_speed(struct block_list *bl) return 1000; } /*========================================== - * 対象のaDelay(攻撃時ディレイ)を返す(汎用) - * aDelayは小さいほうが攻撃速度が速い + * ソスホ象ゑソスaDelay(ソスUソスソスソスソスソスfソスBソスソスソスC)ソスソスソスヤゑソス(ソスト用) + * aDelayソスヘ擾ソスソスソスソスソスソスルゑソスソスソスソスUソスソスソスソスソスxソスソスソスソスソスソス *------------------------------------------ */ int battle_get_adelay(struct block_list *bl) @@ -867,41 +867,41 @@ int battle_get_adelay(struct block_list *bl) adelay = ((struct mob_data *)bl)->stats[MOB_ADELAY]; if(sc_data) { - //ツーハンドクイッケン使用時でクァグマイアでも私を忘れないで…でもない時は3割減算 + //ソスcソス[ソスnソスソスソスhソスNソスCソスbソスPソスソスソスgソスpソスソスソスナクソス@ソスOソス}ソスCソスAソスナゑソスソスソスソスYソスソスソスネゑソスソスナ…ソスナゑソスソスネゑソスソスソスソスソス3ソスソスソスソスソスZ if(sc_data[SC_TWOHANDQUICKEN].timer != -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // 2HQ aspd_rate -= 30; - //アドレナリンラッシュ使用時でツーハンドクイッケンでもクァグマイアでも私を忘れないで…でもない時は + //ソスAソスhソスソスソスiソスソスソスソスソスソスソスbソスVソスソスソスgソスpソスソスソスナツソス[ソスnソスソスソスhソスNソスCソスbソスPソスソスソスナゑソスソスNソス@ソスOソス}ソスCソスAソスナゑソスソスソスソスYソスソスソスネゑソスソスナ…ソスナゑソスソスネゑソスソスソスソスソス if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 && - sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // アドレナリンラッシュ - //使用者とパーティメンバーで格差が出る設定でなければ3割減算 + sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // ソスAソスhソスソスソスiソスソスソスソスソスソスソスbソスVソスソス + //ソスgソスpソスメとパソス[ソスeソスBソスソスソスソスソスoソス[ソスナ格ソスソスソスソスソスoソスソスソスン抵ソスソスナなゑソスソスソスソスソス3ソスソスソスソスソスZ if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly) aspd_rate -= 30; - //そうでなければ2.5割減算 + //ソスソスソスソスソスナなゑソスソスソスソスソス2.5ソスソスソスソスソスZ else aspd_rate -= 25; } - //スピアクィッケン時は減算 + //ソスXソスsソスAソスNソスBソスbソスPソスソスソスソスソスヘ鯉ソスソスZ if(sc_data[SC_SPEARSQUICKEN].timer != -1 && sc_data[SC_ADRENALINE].timer == -1 && - sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // スピアクィッケン + sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // ソスXソスsソスAソスNソスBソスbソスPソスソス aspd_rate -= sc_data[SC_SPEARSQUICKEN].val2; - //夕日のアサシンクロス時は減算 - if(sc_data[SC_ASSNCROS].timer!=-1 && // 夕陽のアサシンクロス + //ソス[ソスソスソスフアソスTソスVソスソスソスNソスソスソスXソスソスソスヘ鯉ソスソスZ + if(sc_data[SC_ASSNCROS].timer!=-1 && // ソス[ソスzソスフアソスTソスVソスソスソスNソスソスソスX sc_data[SC_TWOHANDQUICKEN].timer==-1 && sc_data[SC_ADRENALINE].timer==-1 && sc_data[SC_SPEARSQUICKEN].timer==-1 && sc_data[SC_DONTFORGETME].timer == -1) aspd_rate -= 5+sc_data[SC_ASSNCROS].val1+sc_data[SC_ASSNCROS].val2+sc_data[SC_ASSNCROS].val3; - //私を忘れないで…時は加算 - if(sc_data[SC_DONTFORGETME].timer!=-1) // 私を忘れないで + //ソスソスソスソスソスYソスソスソスネゑソスソスナ…ソスソスソスヘ会ソスZ + if(sc_data[SC_DONTFORGETME].timer!=-1) // ソスソスソスソスソスYソスソスソスネゑソスソスソス aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16); - //金剛時25%加算 - if(sc_data[SC_STEELBODY].timer!=-1) // 金剛 + //ソスソスソスソス25%ソスソスZ + if(sc_data[SC_STEELBODY].timer!=-1) // ソスソス aspd_rate += 25; - //増速ポーション使用時は減算 + //ソスソスソスソスソス|ソス[ソスVソスソスソスソスソスgソスpソスソスソスヘ鯉ソスソスZ if(sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1) aspd_rate -= sc_data[i].val1; // Fate's `haste' spell works the same as the above if (sc_data[SC_HASTE].timer != -1) aspd_rate -= sc_data[SC_HASTE].val1; - //ディフェンダー時は加算 + //ソスfソスBソスtソスFソスソスソス_ソス[ソスソスソスヘ会ソスZ if(sc_data[SC_DEFENDER].timer != -1) adelay += (1100 - sc_data[SC_DEFENDER].val1*100); } @@ -928,22 +928,22 @@ int battle_get_amotion(struct block_list *bl) if(sc_data[SC_TWOHANDQUICKEN].timer != -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // 2HQ aspd_rate -= 30; if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 && - sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // アドレナリンラッシュ + sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // ソスAソスhソスソスソスiソスソスソスソスソスソスソスbソスVソスソス if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly) aspd_rate -= 30; else aspd_rate -= 25; } if(sc_data[SC_SPEARSQUICKEN].timer != -1 && sc_data[SC_ADRENALINE].timer == -1 && - sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // スピアクィッケン + sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // ソスXソスsソスAソスNソスBソスbソスPソスソス aspd_rate -= sc_data[SC_SPEARSQUICKEN].val2; - if(sc_data[SC_ASSNCROS].timer!=-1 && // 夕陽のアサシンクロス + if(sc_data[SC_ASSNCROS].timer!=-1 && // ソス[ソスzソスフアソスTソスVソスソスソスNソスソスソスX sc_data[SC_TWOHANDQUICKEN].timer==-1 && sc_data[SC_ADRENALINE].timer==-1 && sc_data[SC_SPEARSQUICKEN].timer==-1 && sc_data[SC_DONTFORGETME].timer == -1) aspd_rate -= 5+sc_data[SC_ASSNCROS].val1+sc_data[SC_ASSNCROS].val2+sc_data[SC_ASSNCROS].val3; - if(sc_data[SC_DONTFORGETME].timer!=-1) // 私を忘れないで + if(sc_data[SC_DONTFORGETME].timer!=-1) // ソスソスソスソスソスYソスソスソスネゑソスソスソス aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16); - if(sc_data[SC_STEELBODY].timer!=-1) // 金剛 + if(sc_data[SC_STEELBODY].timer!=-1) // ソスソス aspd_rate += 25; if(sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1) aspd_rate -= sc_data[i].val1; @@ -993,15 +993,15 @@ int battle_get_element(struct block_list *bl) nullpo_retr(ret, bl); sc_data = battle_get_sc_data(bl); - if(bl->type==BL_MOB && (struct mob_data *)bl) // 10の位=Lv*2、1の位=属性 + if(bl->type==BL_MOB && (struct mob_data *)bl) // 10ソスフ位ソスLv*2ソスAソスPソスフ位ソスソスソスソスソス ret=((struct mob_data *)bl)->def_ele; else if(bl->type==BL_PC && (struct map_session_data *)bl) - ret=20+((struct map_session_data *)bl)->def_ele; // 防御属性Lv1 + ret=20+((struct map_session_data *)bl)->def_ele; // ソスhソス苟ョソスソスLv1 if(sc_data) { - if( sc_data[SC_BENEDICTIO].timer!=-1 ) // 聖体降福 + if( sc_data[SC_BENEDICTIO].timer!=-1 ) // ソスソスソスフ降ソスソス ret=26; - if( sc_data[SC_FREEZE].timer!=-1 ) // 凍結 + if( sc_data[SC_FREEZE].timer!=-1 ) // ソスソスソスソス ret=21; if( sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0) ret=22; @@ -1021,17 +1021,17 @@ int battle_get_attack_element(struct block_list *bl) ret=((struct map_session_data *)bl)->atk_ele; if(sc_data) { - if( sc_data[SC_FROSTWEAPON].timer!=-1) // フロストウェポン + if( sc_data[SC_FROSTWEAPON].timer!=-1) // ソスtソスソスソスXソスgソスEソスFソス|ソスソス ret=1; - if( sc_data[SC_SEISMICWEAPON].timer!=-1) // サイズミックウェポン + if( sc_data[SC_SEISMICWEAPON].timer!=-1) // ソスTソスCソスYソス~ソスbソスNソスEソスFソス|ソスソス ret=2; - if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // フレームランチャー + if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // ソスtソスソスソス[ソスソスソスソスソスソスソス`ソスソスソス[ ret=3; - if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ライトニングローダー + if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ソスソスソスCソスgソスjソスソスソスOソスソスソス[ソス_ソス[ ret=4; - if( sc_data[SC_ENCPOISON].timer!=-1) // エンチャントポイズン + if( sc_data[SC_ENCPOISON].timer!=-1) // ソスGソスソスソス`ソスソスソスソスソスgソス|ソスCソスYソスソス ret=5; - if( sc_data[SC_ASPERSIO].timer!=-1) // アスペルシオ + if( sc_data[SC_ASPERSIO].timer!=-1) // ソスAソスXソスyソスソスソスVソスI ret=6; } @@ -1045,17 +1045,17 @@ int battle_get_attack_element2(struct block_list *bl) struct status_change *sc_data = ((struct map_session_data *)bl)->sc_data; if(sc_data) { - if( sc_data[SC_FROSTWEAPON].timer!=-1) // フロストウェポン + if( sc_data[SC_FROSTWEAPON].timer!=-1) // ソスtソスソスソスXソスgソスEソスFソス|ソスソス ret=1; - if( sc_data[SC_SEISMICWEAPON].timer!=-1) // サイズミックウェポン + if( sc_data[SC_SEISMICWEAPON].timer!=-1) // ソスTソスCソスYソス~ソスbソスNソスEソスFソス|ソスソス ret=2; - if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // フレームランチャー + if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // ソスtソスソスソス[ソスソスソスソスソスソスソス`ソスソスソス[ ret=3; - if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ライトニングローダー + if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ソスソスソスCソスgソスjソスソスソスOソスソスソス[ソス_ソス[ ret=4; - if( sc_data[SC_ENCPOISON].timer!=-1) // エンチャントポイズン + if( sc_data[SC_ENCPOISON].timer!=-1) // ソスGソスソスソス`ソスソスソスソスソスgソス|ソスCソスYソスソス ret=5; - if( sc_data[SC_ASPERSIO].timer!=-1) // アスペルシオ + if( sc_data[SC_ASPERSIO].timer!=-1) // ソスAソスXソスyソスソスソスVソスI ret=6; } return ret; @@ -1116,7 +1116,7 @@ int battle_get_mode(struct block_list *bl) if(bl->type==BL_MOB && (struct mob_data *)bl) return mob_db[((struct mob_data *)bl)->class].mode; else - return 0x01; // とりあえず動くということで1 + return 0x01; // ソスニりあソスソスソスソスソスソスソスソスソスニゑソスソスソスソスソスソスニゑソス1 } int battle_get_mexp(struct block_list *bl) @@ -1132,7 +1132,7 @@ int battle_get_mexp(struct block_list *bl) return 0; } -// StatusChange系の所得 +// StatusChangeソスnソスフ擾ソスソスソス struct status_change *battle_get_sc_data(struct block_list *bl) { nullpo_retr(NULL, bl); @@ -1198,7 +1198,7 @@ short *battle_get_option(struct block_list *bl) //------------------------------------------------------------------- -// ダメージの遅延 +// ソス_ソスソスソス[ソスWソスフ遅ソスソス struct battle_delay_damage_ { struct block_list *src,*target; int damage; @@ -1228,7 +1228,7 @@ int battle_delay_damage(unsigned int tick,struct block_list *src,struct block_li return 0; } -// 実際にHPを操作 +// ソスソスロゑソスHPソス操搾ソス int battle_damage(struct block_list *bl,struct block_list *target,int damage,int flag) { struct map_session_data *sd=NULL; @@ -1236,7 +1236,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int short *sc_count; int i; - nullpo_retr(0, target); //blはNULLで呼ばれることがあるので他でチェック + nullpo_retr(0, target); //blソスソスNULLソスナ呼ばゑソスソス驍アソスニゑソスソスソスソスソスソスフで托ソスソスナチソスFソスbソスN if(damage==0) return 0; @@ -1256,7 +1256,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int return battle_heal(bl,target,-damage,0,flag); if(!flag && (sc_count=battle_get_sc_count(target))!=NULL && *sc_count>0){ - // 凍結、石化、睡眠を消去 + // ソスソスソスソスソスAソスホ会ソスソスAソスソスソスソスソスソスソスソスソス if(sc_data[SC_FREEZE].timer!=-1) skill_status_change_end(target,SC_FREEZE,-1); if(sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0) @@ -1267,7 +1267,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int if(target->type==BL_MOB){ // MOB struct mob_data *md=(struct mob_data *)target; - if(md && md->skilltimer!=-1 && md->state.skillcastcancel) // 詠唱妨害 + if(md && md->skilltimer!=-1 && md->state.skillcastcancel) // ソスrソスソスソスWソスQ skill_castcancel(target,0); return mob_damage(bl,md,damage,0); } @@ -1275,7 +1275,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int struct map_session_data *tsd=(struct map_session_data *)target; - if(tsd && tsd->sc_data && tsd->sc_data[SC_DEVOTION].val1){ // ディボーションをかけられている + if(tsd && tsd->sc_data && tsd->sc_data[SC_DEVOTION].val1){ // ソスfソスBソス{ソス[ソスVソスソスソスソスソスソスソスソスソスソスソスソストゑソスソスソス struct map_session_data *md = map_id2sd(tsd->sc_data[SC_DEVOTION].val1); if(md && skill_devotion3(&md->bl,target->id)){ skill_devotion(md,target->id); @@ -1291,8 +1291,8 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int } } - if(tsd && tsd->skilltimer!=-1){ // 詠唱妨害 - // フェンカードや妨害されないスキルかの検査 + if(tsd && tsd->skilltimer!=-1){ // ソスrソスソスソスWソスQ + // ソスtソスFソスソスソスJソス[ソスhソスソスソスWソスQソスソスソスソスソスネゑソスソスXソスLソスソスソスソスソスフ鯉ソスソスソス if( (!tsd->special_state.no_castcancel || map[bl->m].flag.gvg) && tsd->state.skillcastcancel && !tsd->special_state.no_castcancel2) skill_castcancel(target,0); @@ -1307,7 +1307,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int } int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,int flag) { - nullpo_retr(0, target); //blはNULLで呼ばれることがあるので他でチェック + nullpo_retr(0, target); //blソスソスNULLソスナ呼ばゑソスソス驍アソスニゑソスソスソスソスソスソスフで托ソスソスナチソスFソスbソスN if( target->type ==BL_PC && pc_isdead((struct map_session_data *)target) ) return 0; @@ -1324,7 +1324,7 @@ int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,in return 0; } -// 攻撃停止 +// ソスUソスソスソスソスソス~ int battle_stopattack(struct block_list *bl) { nullpo_retr(0, bl); @@ -1334,7 +1334,7 @@ int battle_stopattack(struct block_list *bl) return pc_stopattack((struct map_session_data*)bl); return 0; } -// 移動停止 +// ソスレ難ソスソスソスソス~ int battle_stopwalking(struct block_list *bl,int type) { nullpo_retr(0, bl); @@ -1347,7 +1347,7 @@ int battle_stopwalking(struct block_list *bl,int type) /*========================================== - * ダメージの属性修正 + * ソス_ソスソスソス[ソスWソスフ托ソスソスソスソスCソスソス *------------------------------------------ */ int battle_attr_fix(int damage,int atk_elem,int def_elem) @@ -1355,7 +1355,7 @@ int battle_attr_fix(int damage,int atk_elem,int def_elem) int def_type= def_elem%10, def_lv=def_elem/10/2; if( atk_elem<0 || atk_elem>9 || def_type<0 || def_type>9 || - def_lv<1 || def_lv>4){ // 属 性値がおかしいのでとりあえずそのまま返す + def_lv<1 || def_lv>4){ // ソスソス ソスソスソスlソスソスソスソスソスソスソスソスソスソスソスフでとりあソスソスソスソスソスソスソスフまま返ゑソス if(battle_config.error_log) printf("battle_attr_fix: unknown attr type: atk=%d def_type=%d def_lv=%d\n",atk_elem,def_type,def_lv); return damage; @@ -1366,7 +1366,7 @@ int battle_attr_fix(int damage,int atk_elem,int def_elem) /*========================================== - * ダメージ最終計算 + * ソス_ソスソスソス[ソスWソスナ終ソスvソスZ *------------------------------------------ */ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag) @@ -1389,52 +1389,52 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i if(sc_count!=NULL && *sc_count>0){ if(sc_data[SC_SAFETYWALL].timer!=-1 && damage>0 && flag&BF_WEAPON && flag&BF_SHORT && skill_num != NPC_GUIDEDATTACK){ - // セーフティウォール + // ソスZソス[ソスtソスeソスBソスEソスHソス[ソスソス struct skill_unit *unit=(struct skill_unit*)sc_data[SC_SAFETYWALL].val2; if( unit && unit->alive && (--unit->group->val2)<=0 ) skill_delunit(unit); - skill_unit_move(bl,gettick(),1); // 重ね掛けチェック + skill_unit_move(bl,gettick(),1); // ソスdソスヒ掛ソスソスソス`ソスFソスbソスN damage=0; } if(sc_data[SC_PNEUMA].timer!=-1 && damage>0 && flag&BF_WEAPON && flag&BF_LONG && skill_num != NPC_GUIDEDATTACK){ - // ニューマ + // ソスjソスソスソス[ソス} damage=0; } if(sc_data[SC_ROKISWEIL].timer!=-1 && damage>0 && flag&BF_MAGIC ){ - // ニューマ + // ソスjソスソスソス[ソス} damage=0; } - if(sc_data[SC_AETERNA].timer!=-1 && damage>0){ // レックスエーテルナ + if(sc_data[SC_AETERNA].timer!=-1 && damage>0){ // ソスソスソスbソスNソスXソスGソス[ソスeソスソスソスi damage<<=1; skill_status_change_end( bl,SC_AETERNA,-1 ); } - //属性場のダメージ増加 - if(sc_data[SC_VOLCANO].timer!=-1){ // ボルケーノ + //ソスソスソスソスソスソスソスフダソスソスソス[ソスWソスソスソスソス + if(sc_data[SC_VOLCANO].timer!=-1){ // ソス{ソスソスソスPソス[ソスm if(flag&BF_SKILL && skill_get_pl(skill_num)==3) damage += damage*sc_data[SC_VOLCANO].val4/100; else if(!flag&BF_SKILL && battle_get_attack_element(bl)==3) damage += damage*sc_data[SC_VOLCANO].val4/100; } - if(sc_data[SC_VIOLENTGALE].timer!=-1){ // バイオレントゲイル + if(sc_data[SC_VIOLENTGALE].timer!=-1){ // ソスoソスCソスIソスソスソスソスソスgソスQソスCソスソス if(flag&BF_SKILL && skill_get_pl(skill_num)==4) damage += damage*sc_data[SC_VIOLENTGALE].val4/100; else if(!flag&BF_SKILL && battle_get_attack_element(bl)==4) damage += damage*sc_data[SC_VIOLENTGALE].val4/100; } - if(sc_data[SC_DELUGE].timer!=-1){ // デリュージ + if(sc_data[SC_DELUGE].timer!=-1){ // ソスfソスソスソスソスソス[ソスW if(flag&BF_SKILL && skill_get_pl(skill_num)==1) damage += damage*sc_data[SC_DELUGE].val4/100; else if(!flag&BF_SKILL && battle_get_attack_element(bl)==1) damage += damage*sc_data[SC_DELUGE].val4/100; } - if(sc_data[SC_ENERGYCOAT].timer!=-1 && damage>0 && flag&BF_WEAPON){ // エナジーコート + if(sc_data[SC_ENERGYCOAT].timer!=-1 && damage>0 && flag&BF_WEAPON){ // ソスGソスiソスWソス[ソスRソス[ソスg if(sd){ if(sd->status.sp>0){ int per = sd->status.sp * 5 / (sd->status.max_sp + 1); @@ -1450,7 +1450,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i damage -= damage * (sc_data[SC_ENERGYCOAT].val1 * 6) / 100; } - if(sc_data[SC_KYRIE].timer!=-1 && damage > 0){ // キリエエレイソン + if(sc_data[SC_KYRIE].timer!=-1 && damage > 0){ // ソスLソスソスソスGソスGソスソスソスCソス\ソスソス sc=&sc_data[SC_KYRIE]; sc->val2-=damage; if(flag&BF_WEAPON){ @@ -1462,11 +1462,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i } if(sc_data[SC_BASILICA].timer!=-1 && damage > 0){ - // ニューマ + // ソスjソスソスソス[ソス} damage=0; } if(sc_data[SC_LANDPROTECTOR].timer!=-1 && damage>0 && flag&BF_MAGIC){ - // ニューマ + // ソスjソスソスソス[ソス} damage=0; } @@ -1488,14 +1488,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i clif_skill_nodamage(bl,bl,LK_PARRYING,sc_data[SC_PARRYING].val1,1); } } - // リジェクトソード + // ソスソスソスWソスFソスNソスgソス\ソス[ソスh if(sc_data[SC_REJECTSWORD].timer!=-1 && damage > 0 && flag&BF_WEAPON && ((src->type==BL_PC && ((struct map_session_data *)src)->status.weapon == (1 || 2 || 3)) || src->type==BL_MOB )){ - if(MRAND(100) < (10+5*sc_data[SC_REJECTSWORD].val1)){ //反射確率は10+5*Lv + if(MRAND(100) < (10+5*sc_data[SC_REJECTSWORD].val1)){ //ソスソスソスヒ確ソスソスソスソス10+5*Lv damage = damage*50/100; battle_damage(bl,src,damage,0); - //ダメージを与えたのは良いんだが、ここからどうして表示するんだかわかんねぇ - //エフェクトもこれでいいのかわかんねぇ + //ソス_ソスソスソス[ソスWソスソスソス^ソスソスソスソスソスフは良ゑソスソスだゑソスソスAソスソスソスソスソスソスソスソスソスヌゑソスソスソスソスト表ソスソスソスソスソスソスソスだゑソスソスかソスソスソスヒゑソス + //ソスGソスtソスFソスNソスgソスソスソスソスソスナゑソスソスソスソスフゑソスソスかソスソスソスヒゑソス clif_skill_nodamage(bl,bl,ST_REJECTSWORD,sc_data[SC_REJECTSWORD].val1,1); if((--sc_data[SC_REJECTSWORD].val2)<=0) skill_status_change_end(bl, SC_REJECTSWORD, -1); @@ -1515,11 +1515,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i if(gc && agit_flag==0 && class != 1288) // guardians cannot be damaged during non-woe [Valaris] damage=0; // end woe check [Valaris] if(g == NULL) - damage=0;//ギルド未加入ならダメージ無し + damage=0;//ソスMソスソスソスhソスソスソスソスソスソスネゑソスソス_ソスソスソス[ソスWソスソスソスソス else if((gc != NULL) && guild_isallied(g, gc)) - damage=0;//自占領ギルドのエンペならダメージ無し + damage=0;//ソスソスソスソスソスフギソスソスソスhソスフエソスソスソスyソスネゑソスソス_ソスソスソス[ソスWソスソスソスソス else if(g && guild_checkskill(g,GD_APPROVAL) <= 0) - damage=0;//正規ギルド承認がないとダメージ無し + damage=0;//ソスソスソスKソスMソスソスソスhソスソスソスFソスソスソスネゑソスソスニダソスソスソス[ソスWソスソスソスソス else if (battle_config.guild_max_castles != 0 && guild_checkcastles(g)>=battle_config.guild_max_castles) damage = 0; // [MouseJstr] } @@ -1549,14 +1549,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i damage = 3; } - if( md!=NULL && md->hp>0 && damage > 0 ) // 反撃などのMOBスキル判定 + if( md!=NULL && md->hp>0 && damage > 0 ) // ソスソスソスソスソスネどゑソスMOBソスXソスLソスソスソスソスソスソス mobskill_event(md,flag); return damage; } /*========================================== - * 修練ダメージ + * ソスCソスソスソス_ソスソスソス[ソスW *------------------------------------------ */ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type) @@ -1568,11 +1568,11 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int nullpo_retr(0, sd); - // デーモンベイン(+3 〜 +30) vs 不死 or 悪魔 (死人は含めない?) + // ソスfソス[ソスソスソスソスソスxソスCソスソス(+3 ソス` +30) vs ソスsソスソス or ソスソスソスソス (ソスソスソスlソスヘ含めなゑソスソスH) if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 && (battle_check_undead(race,battle_get_elem_type(target)) || race==6) ) damage += (skill * 3); - // ビーストベイン(+4 〜 +40) vs 動物 or 昆虫 + // ソスrソス[ソスXソスgソスxソスCソスソス(+4 ソス` +40) vs ソスソスソスソス or ソスソスソスソス if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (race==2 || race==4) ) damage += (skill * 4); @@ -1582,10 +1582,10 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int weapon = sd->weapontype2; switch(weapon) { - case 0x01: // 短剣 (Updated By AppleGirl) + case 0x01: // ソスZソスソス (Updated By AppleGirl) case 0x02: // 1HS { - // 剣修練(+4 〜 +40) 片手剣 短剣含む + // ソスソスソスCソスソス(+4 ソス` +40) ソスミ手剣 ソスZソスソスソスワゑソス if((skill = pc_checkskill(sd,SM_SWORD)) > 0) { damage += (skill * 4); } @@ -1593,7 +1593,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x03: // 2HS { - // 両手剣修練(+4 〜 +40) 両手剣 + // ソスソスソス闌包ソスCソスソス(+4 ソス` +40) ソスソスソス闌 if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0) { damage += (skill * 4); } @@ -1601,27 +1601,27 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x04: // 1HL { - // 槍修練(+4 〜 +40,+5 〜 +50) 槍 + // ソスソスソスCソスソス(+4 ソス` +40,+5 ソス` +50) ソスソス if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) { if(!pc_isriding(sd)) - damage += (skill * 4); // ペコに乗ってない + damage += (skill * 4); // ソスyソスRソスノ擾ソスソスソストなゑソス else - damage += (skill * 5); // ペコに乗ってる + damage += (skill * 5); // ソスyソスRソスノ擾ソスソスソストゑソス } break; } case 0x05: // 2HL { - // 槍修練(+4 〜 +40,+5 〜 +50) 槍 + // ソスソスソスCソスソス(+4 ソス` +40,+5 ソス` +50) ソスソス if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) { if(!pc_isriding(sd)) - damage += (skill * 4); // ペコに乗ってない + damage += (skill * 4); // ソスyソスRソスノ擾ソスソスソストなゑソス else - damage += (skill * 5); // ペコに乗ってる + damage += (skill * 5); // ソスyソスRソスノ擾ソスソスソストゑソス } break; } - case 0x06: // 片手斧 + case 0x06: // ソスミ手斧 { if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) { damage += (skill * 3); @@ -1635,24 +1635,24 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } break; } - case 0x08: // メイス + case 0x08: // ソスソスソスCソスX { - // メイス修練(+3 〜 +30) メイス + // ソスソスソスCソスXソスCソスソス(+3 ソス` +30) ソスソスソスCソスX if((skill = pc_checkskill(sd,PR_MACEMASTERY)) > 0) { damage += (skill * 3); } break; } - case 0x09: // なし? + case 0x09: // ソスネゑソス? break; - case 0x0a: // 杖 + case 0x0a: // ソスソス break; - case 0x0b: // 弓 + case 0x0b: // ソス| break; - case 0x00: // 素手 + case 0x00: // ソスfソスソス case 0x0c: // Knuckles { - // 鉄拳(+3 〜 +30) 素手,ナックル + // ソスSソスソス(+3 ソス` +30) ソスfソスソス,ソスiソスbソスNソスソス if((skill = pc_checkskill(sd,MO_IRONHAND)) > 0) { damage += (skill * 3); } @@ -1660,7 +1660,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x0d: // Musical Instrument { - // 楽器の練習(+3 〜 +30) 楽器 + // ソスyソスソスソスフ暦ソスソスK(+3 ソス` +30) ソスyソスソス if((skill = pc_checkskill(sd,BA_MUSICALLESSON)) > 0) { damage += (skill * 3); } @@ -1668,7 +1668,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x0e: // Dance Mastery { - // Dance Lesson Skill Effect(+3 damage for every lvl = +30) 鞭 + // Dance Lesson Skill Effect(+3 damage for every lvl = +30) ソスソス if((skill = pc_checkskill(sd,DC_DANCINGLESSON)) > 0) { damage += (skill * 3); } @@ -1684,9 +1684,9 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x10: // Katars { - // カタール修練(+3 〜 +30) カタール + // ソスJソス^ソス[ソスソスソスCソスソス(+3 ソス` +30) ソスJソス^ソス[ソスソス if((skill = pc_checkskill(sd,AS_KATAR)) > 0) { - //ソニックブロー時は別処理(1撃に付き1/8適応) + //ソス\ソスjソスbソスNソスuソスソスソス[ソスソスソスヘ別擾ソスソスソスソスi1ソスソスソスノ付ソスソス1/8ソスKソスソス) damage += (skill * 3); } break; @@ -1714,7 +1714,7 @@ static struct Damage battle_calc_mob_weapon_attack( short *sc_count; short *option, *opt1, *opt2; - //return前の処理があるので情報出力部のみ変更 + //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 if( src == NULL || target == NULL || md == NULL ){ nullpo_info(NLP_MARK); memset(&wd,0,sizeof(wd)); @@ -1729,7 +1729,7 @@ static struct Damage battle_calc_mob_weapon_attack( opt1=battle_get_opt1(src); opt2=battle_get_opt2(src); - // ターゲット + // ソス^ソス[ソスQソスbソスg if(target->type==BL_PC) tsd=(struct map_session_data *)target; else if(target->type==BL_MOB) @@ -1759,9 +1759,9 @@ static struct Damage battle_calc_mob_weapon_attack( else ac_flag = 1; } } - flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // 攻撃の種類の設定 + flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // ソスUソスソスソスフ趣ソスソズの設抵ソス - // 回避率計算、回避判定は後で + // ソスソスソス率計ソスZソスAソスソスソス判抵ソスソスヘ鯉ソスソスソス flee = battle_get_flee(target); if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); @@ -1785,7 +1785,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage = battle_get_baseatk(src); else damage = 0; - if(skill_num==HW_MAGICCRASHER){ /* マジッククラッシャーはMATKで殴る */ + if(skill_num==HW_MAGICCRASHER){ /* ソス}ソスWソスbソスNソスNソスソスソスbソスVソスソスソス[ソスソスMATKソスナ会ソスソスソス */ atkmin = battle_get_matk1(src); atkmax = battle_get_matk2(src); }else{ @@ -1797,7 +1797,7 @@ static struct Damage battle_calc_mob_weapon_attack( if(atkmin > atkmax) atkmin = atkmax; - if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // マキシマイズパワー + if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // ソス}ソスLソスVソス}ソスCソスYソスpソスソスソス[ atkmin=atkmax; } @@ -1808,7 +1808,7 @@ static struct Damage battle_calc_mob_weapon_attack( if(cri < 1) cri = 1; } - if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // 睡眠中はクリティカルが倍に + if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // ソスソスソスソスソスソスソスヘクソスソスソスeソスBソスJソスソスソスソスソス{ソスソス cri <<=1; if(ac_flag) cri = 1000; @@ -1823,8 +1823,8 @@ static struct Damage battle_calc_mob_weapon_attack( if(tsd && tsd->critical_def) cri = cri * (100 - tsd->critical_def) / 100; - if((skill_num == 0 || skill_num == KN_AUTOCOUNTER) && skill_lv >= 0 && battle_config.enemy_critical && (MRAND(1000)) < cri) // 判定(スキルの場合は無視) - // 敵の判定 + if((skill_num == 0 || skill_num == KN_AUTOCOUNTER) && skill_lv >= 0 && battle_config.enemy_critical && (MRAND(1000)) < cri) // ソスソスソスソスソスiソスXソスLソスソスソスフ場合ソスヘ厄ソスソスソスソスj + // ソスGソスフ費ソスソスソス { damage += atkmax; type = 0x0a; @@ -1836,19 +1836,19 @@ static struct Damage battle_calc_mob_weapon_attack( damage += atkmin + MRAND((atkmax-atkmin + 1)); else damage += atkmin ; - // スキル修正1(攻撃力倍化系) - // オーバートラスト(+5% 〜 +25%),他攻撃系スキルの場合ここで補正 - // バッシュ,マグナムブレイク, - // ボーリングバッシュ,スピアブーメラン,ブランディッシュスピア,スピアスタッブ, - // メマーナイト,カートレボリューション - // ダブルストレイフィング,アローシャワー,チャージアロー, - // ソニックブロー - if(sc_data){ //状態異常中のダメージ追加 - if(sc_data[SC_OVERTHRUST].timer!=-1) // オーバートラスト + // ソスXソスLソスソスソスCソスソスソスPソスiソスUソスソスソスヘ倍ソスソスソスnソスj + // ソスIソス[ソスoソス[ソスgソスソスソスXソスg(+5% ソス` +25%),ソスソスソスUソスソスソスnソスXソスLソスソスソスフ場合ソスソスソスソスソスナ補正 + // ソスoソスbソスVソスソス,ソス}ソスOソスiソスソスソスuソスソスソスCソスN, + // ソス{ソス[ソスソスソスソスソスOソスoソスbソスVソスソス,ソスXソスsソスAソスuソス[ソスソスソスソスソスソス,ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA,ソスXソスsソスAソスXソス^ソスbソスu, + // ソスソスソス}ソス[ソスiソスCソスg,ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス + // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO,ソスAソスソスソス[ソスVソスソスソスソスソス[,ソス`ソスソスソス[ソスWソスAソスソスソス[, + // ソス\ソスjソスbソスNソスuソスソスソス[ + if(sc_data){ //ソスソスソスヤ異常中ソスフダソスソスソス[ソスWソスヌ会ソス + if(sc_data[SC_OVERTHRUST].timer!=-1) // ソスIソス[ソスoソス[ソスgソスソスソスXソスg damage += damage*(5*sc_data[SC_OVERTHRUST].val1)/100; - if(sc_data[SC_TRUESIGHT].timer!=-1) // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1) // ソスgソスDソスソスソス[ソスTソスCソスg damage += damage*(2*sc_data[SC_TRUESIGHT].val1)/100; - if(sc_data[SC_BERSERK].timer!=-1) // バーサーク + if(sc_data[SC_BERSERK].timer!=-1) // ソスoソス[ソスTソス[ソスN damage += damage*50/100; } @@ -1859,43 +1859,43 @@ static struct Damage battle_calc_mob_weapon_attack( flag=(flag&~BF_SKILLMASK)|BF_SKILL; switch( skill_num ){ - case SM_BASH: // バッシュ + case SM_BASH: // ソスoソスbソスVソスソス damage = damage*(100+ 30*skill_lv)/100; hitrate = (hitrate*(100+5*skill_lv))/100; break; - case SM_MAGNUM: // マグナムブレイク + case SM_MAGNUM: // ソス}ソスOソスiソスソスソスuソスソスソスCソスN damage = damage*(5*skill_lv +(wflag)?65:115 )/100; break; - case MC_MAMMONITE: // メマーナイト + case MC_MAMMONITE: // ソスソスソス}ソス[ソスiソスCソスg damage = damage*(100+ 50*skill_lv)/100; break; - case AC_DOUBLE: // ダブルストレイフィング + case AC_DOUBLE: // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO damage = damage*(180+ 20*skill_lv)/100; div_=2; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case AC_SHOWER: // アローシャワー + case AC_SHOWER: // ソスAソスソスソス[ソスVソスソスソスソスソス[ damage = damage*(75 + 5*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case AC_CHARGEARROW: // チャージアロー + case AC_CHARGEARROW: // ソス`ソスソスソス[ソスWソスAソスソスソス[ damage = damage*150/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case KN_PIERCE: // ピアース + case KN_PIERCE: // ソスsソスAソス[ソスX damage = damage*(100+ 10*skill_lv)/100; hitrate=hitrate*(100+5*skill_lv)/100; div_=t_size+1; damage*=div_; break; - case KN_SPEARSTAB: // スピアスタブ + case KN_SPEARSTAB: // ソスXソスsソスAソスXソス^ソスu damage = damage*(100+ 15*skill_lv)/100; break; - case KN_SPEARBOOMERANG: // スピアブーメラン + case KN_SPEARBOOMERANG: // ソスXソスsソスAソスuソス[ソスソスソスソスソスソス damage = damage*(100+ 50*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case KN_BRANDISHSPEAR: // ブランディッシュスピア + case KN_BRANDISHSPEAR: // ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA damage = damage*(100+ 20*skill_lv)/100; if(skill_lv>3 && wflag==1) damage2+=damage/2; if(skill_lv>6 && wflag==1) damage2+=damage/4; @@ -1906,7 +1906,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage +=damage2; blewcount=0; break; - case KN_BOWLINGBASH: // ボウリングバッシュ + case KN_BOWLINGBASH: // ソス{ソスEソスソスソスソスソスOソスoソスbソスVソスソス damage = damage*(100+ 50*skill_lv)/100; blewcount=0; break; @@ -1917,25 +1917,25 @@ static struct Damage battle_calc_mob_weapon_attack( hitrate = 1000000; flag=(flag&~BF_SKILLMASK)|BF_NORMAL; break; - case AS_SONICBLOW: // ソニックブロウ + case AS_SONICBLOW: // ソス\ソスjソスbソスNソスuソスソスソスE damage = damage*(300+ 50*skill_lv)/100; div_=8; break; - case TF_SPRINKLESAND: // 砂まき + case TF_SPRINKLESAND: // ソスソスソスワゑソス damage = damage*125/100; break; - case MC_CARTREVOLUTION: // カートレボリューション + case MC_CARTREVOLUTION: // ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス damage = (damage*150)/100; break; - // 以下MOB - case NPC_COMBOATTACK: // 多段攻撃 + // ソスネ会ソスMOB + case NPC_COMBOATTACK: // ソスソスソスiソスUソスソス div_=skill_get_num(skill_num,skill_lv); damage *= div_; break; - case NPC_RANDOMATTACK: // ランダムATK攻撃 + case NPC_RANDOMATTACK: // ソスソスソスソスソス_ソスソスATKソスUソスソス damage = damage*(MPRAND(50, 150))/100; break; - // 属性攻撃(適当) + // ソスソスソスソスソスUソスソスソスiソスKソスソスソスj case NPC_WATERATTACK: case NPC_GROUNDATTACK: case NPC_FIREATTACK: @@ -1955,115 +1955,115 @@ static struct Damage battle_calc_mob_weapon_attack( case NPC_PIERCINGATT: flag=(flag&~BF_RANGEMASK)|BF_SHORT; break; - case RG_BACKSTAP: // バックスタブ + case RG_BACKSTAP: // ソスoソスbソスNソスXソス^ソスu damage = damage*(300+ 40*skill_lv)/100; hitrate = 1000000; break; - case RG_RAID: // サプライズアタック + case RG_RAID: // ソスTソスvソスソスソスCソスYソスAソス^ソスbソスN damage = damage*(100+ 40*skill_lv)/100; break; - case RG_INTIMIDATE: // インティミデイト + case RG_INTIMIDATE: // ソスCソスソスソスeソスBソス~ソスfソスCソスg damage = damage*(100+ 30*skill_lv)/100; break; - case CR_SHIELDCHARGE: // シールドチャージ + case CR_SHIELDCHARGE: // ソスVソス[ソスソスソスhソス`ソスソスソス[ソスW damage = damage*(100+ 20*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_SHORT; s_ele = 0; break; - case CR_SHIELDBOOMERANG: // シールドブーメラン + case CR_SHIELDBOOMERANG: // ソスVソス[ソスソスソスhソスuソス[ソスソスソスソスソスソス damage = damage*(100+ 30*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; s_ele = 0; break; - case CR_HOLYCROSS: // ホーリークロス + case CR_HOLYCROSS: // ソスzソス[ソスソスソス[ソスNソスソスソスX damage = damage*(100+ 35*skill_lv)/100; div_=2; break; case CR_GRANDCROSS: hitrate= 1000000; break; - case AM_DEMONSTRATION: // デモンストレーション + case AM_DEMONSTRATION: // ソスfソスソスソスソスソスXソスgソスソスソス[ソスVソスソスソスソス damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case AM_ACIDTERROR: // アシッドテラー + case AM_ACIDTERROR: // ソスAソスVソスbソスhソスeソスソスソス[ damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; - case MO_FINGEROFFENSIVE: //指弾 + case MO_FINGEROFFENSIVE: //ソスwソスe damage = damage * (100 + 50 * skill_lv) / 100; div_ = 1; break; - case MO_INVESTIGATE: // 発 勁 + case MO_INVESTIGATE: // ソスソス ソスソス if(def1 < 1000000) damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100; hitrate = 1000000; s_ele = 0; break; - case MO_EXTREMITYFIST: // 阿修羅覇鳳拳 + case MO_EXTREMITYFIST: // ソスソスソスCソスソスソスeソスPソスソス damage = damage * 8 + 250 + (skill_lv * 150); hitrate = 1000000; s_ele = 0; break; - case MO_CHAINCOMBO: // 連打掌 + case MO_CHAINCOMBO: // ソスAソスナ擾ソス damage = damage*(150+ 50*skill_lv)/100; div_=4; break; - case BA_MUSICALSTRIKE: // ミュージカルストライク + case BA_MUSICALSTRIKE: // ソス~ソスソスソス[ソスWソスJソスソスソスXソスgソスソスソスCソスN damage = damage*(100+ 50 * skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case DC_THROWARROW: // 矢撃ち + case DC_THROWARROW: // ソス撃ソスソス damage = damage*(100+ 50 * skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case MO_COMBOFINISH: // 猛龍拳 + case MO_COMBOFINISH: // ソスメ暦ソスソスソス damage = damage*(240+ 60*skill_lv)/100; break; - case CH_TIGERFIST: // 伏虎拳 + case CH_TIGERFIST: // ソスソスソスユ鯉ソス damage = damage*(100+ 20*skill_lv)/100; break; - case CH_CHAINCRUSH: // 連柱崩撃 + case CH_CHAINCRUSH: // ソスAソスソスソスソスソスソス damage = damage*(100+ 20*skill_lv)/100; div_=skill_get_num(skill_num,skill_lv); break; - case CH_PALMSTRIKE: // 猛虎硬派山 + case CH_PALMSTRIKE: // ソスメ虎硬ソスhソスR damage = damage*(50+ 100*skill_lv)/100; break; - case LK_SPIRALPIERCE: /* スパイラルピアース */ - damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に + case LK_SPIRALPIERCE: /* ソスXソスpソスCソスソスソスソスソスsソスAソス[ソスX */ + damage = damage*(100+ 50*skill_lv)/100; //ソスソスソスソスハゑソスソスソスソスソスソスソスソスネゑソスソスフで適ソスソスソスソス div_=5; if(tsd) tsd->canmove_tick = gettick() + 1000; else if(tmd) tmd->canmove_tick = gettick() + 1000; break; - case LK_HEADCRUSH: /* ヘッドクラッシュ */ + case LK_HEADCRUSH: /* ソスwソスbソスhソスNソスソスソスbソスVソスソス */ damage = damage*(100+ 20*skill_lv)/100; break; - case LK_JOINTBEAT: /* ジョイントビート */ + case LK_JOINTBEAT: /* ソスWソスソスソスCソスソスソスgソスrソス[ソスg */ damage = damage*(50+ 10*skill_lv)/100; break; - case ASC_METEORASSAULT: /* メテオアサルト */ + case ASC_METEORASSAULT: /* ソスソスソスeソスIソスAソスTソスソスソスg */ damage = damage*(40+ 40*skill_lv)/100; break; - case SN_SHARPSHOOTING: /* シャープシューティング */ + case SN_SHARPSHOOTING: /* ソスVソスソスソス[ソスvソスVソスソスソス[ソスeソスBソスソスソスO */ damage += damage*(30*skill_lv)/100; break; - case CG_ARROWVULCAN: /* アローバルカン */ + case CG_ARROWVULCAN: /* ソスAソスソスソス[ソスoソスソスソスJソスソス */ damage = damage*(160+40*skill_lv)/100; div_=9; break; - case AS_SPLASHER: /* ベナムスプラッシャー */ + case AS_SPLASHER: /* ソスxソスiソスソスソスXソスvソスソスソスbソスVソスソスソス[ */ damage = damage*(200+20*skill_lv)/100; break; } } if( skill_num!=NPC_CRITICALSLASH ){ - // 対 象の防御力によるダメージの減少 - // ディバインプロテクション(ここでいいのかな?) - if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VIT無視 + // ソスソス ソスロの防ソスソスソスヘにゑソスソスソスソス_ソスソスソス[ソスWソスフ鯉ソスソスソス + // ソスfソスBソスoソスCソスソスソスvソスソスソスeソスNソスVソスソスソスソスソスiソスソスソスソスソスナゑソスソスソスソスフゑソスソスネ?ソスj + if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VITソスソスソスソス int t_def; target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv); if(battle_config.vit_penaly_type > 0) { @@ -2099,16 +2099,16 @@ static struct Damage battle_calc_mob_weapon_attack( } } - // 0未満だった場合1に補正 + // 0ソスソスソスソスソスソスソスソスソスソス鼾1ソスノ補正 if(damage<1) damage=1; - // 回避修正 + // ソスソスソスソスソスCソスソス if(hitrate < 1000000) hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) ); - if( hitrate < 1000000 && // 必中攻撃 - (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // 睡眠は必中 - t_sc_data[SC_STAN].timer!=-1 || // スタンは必中 - t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // 凍結は必中 + if( hitrate < 1000000 && // ソスKソスソスソスUソスソス + (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // ソスソスソスソスソスヘ必ソスソス + t_sc_data[SC_STAN].timer!=-1 || // ソスXソス^ソスソスソスヘ必ソスソス + t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // ソスソスソスソスソスヘ必ソスソス hitrate = 1000000; if(type == 0 && MRAND(100) >= hitrate) { damage = damage2 = 0; @@ -2119,8 +2119,8 @@ static struct Damage battle_calc_mob_weapon_attack( if(tsd){ int cardfix=100,i; - cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属 性によるダメージ耐性 - cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subele[s_ele])/100; // ソスソス ソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subrace[s_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス if(mob_db[md->class].mode & 0x20) cardfix=cardfix*(100-tsd->subrace[10])/100; else @@ -2144,7 +2144,7 @@ static struct Damage battle_calc_mob_weapon_attack( if(cardfix != 100) damage=damage*cardfix/100; } - if(t_sc_data && t_sc_data[SC_ASSUMPTIO].timer != -1){ //アシャンプティオ + if(t_sc_data && t_sc_data[SC_ASSUMPTIO].timer != -1){ //ソスAソスVソスソスソスソスソスvソスeソスBソスI if(!map[target->m].flag.pvp) damage=damage/3; else @@ -2153,19 +2153,19 @@ static struct Damage battle_calc_mob_weapon_attack( if(damage < 0) damage = 0; - // 属 性の適用 + // ソスソス ソスソスソスフ適ソスp if (!((battle_config.mob_ghostring_fix == 1) && (battle_get_element(target) == 8) && (target->type==BL_PC))) // [MouseJstr] if(skill_num != 0 || s_ele != 0 || !battle_config.mob_attack_attr_none) damage=battle_attr_fix(damage, s_ele, battle_get_element(target) ); - if(sc_data && sc_data[SC_AURABLADE].timer!=-1) /* オーラブレード 必中 */ + if(sc_data && sc_data[SC_AURABLADE].timer!=-1) /* ソスIソス[ソスソスソスuソスソスソス[ソスh ソスKソスソス */ damage += sc_data[SC_AURABLADE].val1 * 10; - if(skill_num==PA_PRESSURE) /* プレッシャー 必中? */ + if(skill_num==PA_PRESSURE) /* ソスvソスソスソスbソスVソスソスソス[ ソスKソスソス? */ damage = 700+100*skill_lv; - // インベナム修正 + // ソスCソスソスソスxソスiソスソスソスCソスソス if(skill_num==TF_POISON){ damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) ); } @@ -2173,7 +2173,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage = battle_attr_fix(damage, 0, battle_get_element(target) ); } - // 完全回避の判定 + // ソスソスソスSソスソスソスソスソスフ費ソスソスソス if(skill_num == 0 && skill_lv >= 0 && tsd!=NULL && MRAND(1000) < battle_get_flee2(target) ){ damage=0; type=0x0b; @@ -2213,7 +2213,7 @@ static struct Damage battle_calc_mob_weapon_attack( } /* * ========================================================================= - * PCの武器による攻撃 + * PCソスフ包ソスソスソスソスノゑソスソスソスソスUソスソス *------------------------------------------------------------------------- */ static struct Damage battle_calc_pc_weapon_attack( @@ -2233,81 +2233,81 @@ static struct Damage battle_calc_pc_weapon_attack( struct status_change *sc_data,*t_sc_data; short *sc_count; short *option, *opt1, *opt2; - int atkmax_=0, atkmin_=0, s_ele_; //二刀流用 + int atkmax_=0, atkmin_=0, s_ele_; //ソス刀暦ソスソスp int watk,watk_,cardfix,t_ele; int da=0,i,t_class,ac_flag = 0; int idef_flag=0,idef_flag_=0; - //return前の処理があるので情報出力部のみ変更 + //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 if( src == NULL || target == NULL || sd == NULL ){ nullpo_info(NLP_MARK); memset(&wd,0,sizeof(wd)); return wd; } - // アタッカー - s_race=battle_get_race(src); //種族 - s_ele=battle_get_attack_element(src); //属性 - s_ele_=battle_get_attack_element2(src); //左手属性 - sc_data=battle_get_sc_data(src); //ステータス異常 - sc_count=battle_get_sc_count(src); //ステータス異常の数 - option=battle_get_option(src); //鷹とかペコとかカートとか - opt1=battle_get_opt1(src); //石化、凍結、スタン、睡眠、暗闇 - opt2=battle_get_opt2(src); //毒、呪い、沈黙、暗闇? - - if(skill_num != CR_GRANDCROSS) //グランドクロスでないなら - sd->state.attack_type = BF_WEAPON; //攻撃タイプは武器攻撃 - - // ターゲット - if(target->type==BL_PC) //対象がPCなら - tsd=(struct map_session_data *)target; //tsdに代入(tmdはNULL) - else if(target->type==BL_MOB) //対象がMobなら - tmd=(struct mob_data *)target; //tmdに代入(tsdはNULL) - t_race=battle_get_race( target ); //対象の種族 - t_ele=battle_get_elem_type(target); //対象の属性 - t_size=battle_get_size( target ); //対象のサイズ - t_mode=battle_get_mode( target ); //対象のMode - t_sc_data=battle_get_sc_data( target ); //対象のステータス異常 - -//オートカウンター処理ここから + // ソスAソス^ソスbソスJソス[ + s_race=battle_get_race(src); //ソス族 + s_ele=battle_get_attack_element(src); //ソスソスソスソス + s_ele_=battle_get_attack_element2(src); //ソスソスソス闡ョソスソス + sc_data=battle_get_sc_data(src); //ソスXソスeソス[ソス^ソスXソスル擾ソス + sc_count=battle_get_sc_count(src); //ソスXソスeソス[ソス^ソスXソスル擾ソスソスフ撰ソス + option=battle_get_option(src); //ソスソスソスニゑソスソスyソスRソスニゑソスソスJソス[ソスgソスニゑソス + opt1=battle_get_opt1(src); //ソスホ会ソスソスAソスソスソスソスソスAソスXソス^ソスソスソスAソスソスソスソスソスAソステ茨ソス + opt2=battle_get_opt2(src); //ソスナ、ソスい、ソスソスソスル、ソステ闇? + + if(skill_num != CR_GRANDCROSS) //ソスOソスソスソスソスソスhソスNソスソスソスXソスナなゑソスソスネゑソス + sd->state.attack_type = BF_WEAPON; //ソスUソスソスソス^ソスCソスvソスヘ包ソスソスソスソスUソスソス + + // ソス^ソス[ソスQソスbソスg + if(target->type==BL_PC) //ソスホ象ゑソスPCソスネゑソス + tsd=(struct map_session_data *)target; //tsdソスノ托ソスソスソス(tmdソスソスNULL) + else if(target->type==BL_MOB) //ソスホ象ゑソスMobソスネゑソス + tmd=(struct mob_data *)target; //tmdソスノ托ソスソスソス(tsdソスソスNULL) + t_race=battle_get_race( target ); //ソスホ象の種族 + t_ele=battle_get_elem_type(target); //ソスホ象の托ソスソスソス + t_size=battle_get_size( target ); //ソスホ象のサソスCソスY + t_mode=battle_get_mode( target ); //ソスホ象ゑソスMode + t_sc_data=battle_get_sc_data( target ); //ソスホ象のスソスeソス[ソス^ソスXソスル擾ソス + +//ソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスソスソスソスソスソスソスソスソスソス if((skill_num == 0 || (target->type == BL_PC && battle_config.pc_auto_counter_type&2) || (target->type == BL_MOB && battle_config.monster_auto_counter_type&2)) && skill_lv >= 0) { - if(skill_num != CR_GRANDCROSS && t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1) { //グランドクロスでなく、対象がオートカウンター状態の場合 + if(skill_num != CR_GRANDCROSS && t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1) { //ソスOソスソスソスソスソスhソスNソスソスソスXソスナなゑソスソスAソスホ象ゑソスソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスヤの場合 int dir = map_calc_dir(src,target->x,target->y),t_dir = battle_get_dir(target); int dist = distance(src->x,src->y,target->x,target->y); - if(dist <= 0 || map_check_dir(dir,t_dir) ) { //対象との距離が0以下、または対象の正面? + if(dist <= 0 || map_check_dir(dir,t_dir) ) { //ソスホ象との具ソスソスソスソスソス0ソスネ会ソスソスAソスワゑソスソスヘ対象の撰ソスソスハ? memset(&wd,0,sizeof(wd)); t_sc_data[SC_AUTOCOUNTER].val3 = 0; t_sc_data[SC_AUTOCOUNTER].val4 = 1; - if(sc_data && sc_data[SC_AUTOCOUNTER].timer == -1) { //自分がオートカウンター状態 + if(sc_data && sc_data[SC_AUTOCOUNTER].timer == -1) { //ソスソスソスソスソスソスソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスソス int range = battle_get_range(target); - if((target->type == BL_PC && ((struct map_session_data *)target)->status.weapon != 11 && dist <= range+1) || //対象がPCで武器が弓矢でなく射程内 - (target->type == BL_MOB && range <= 3 && dist <= range+1) ) //または対象がMobで射程が3以下で射程内 + if((target->type == BL_PC && ((struct map_session_data *)target)->status.weapon != 11 && dist <= range+1) || //ソスホ象ゑソスPCソスナ包ソスソスがソス|ソスソスソスナなゑソスソスヒ抵ソスソスソス + (target->type == BL_MOB && range <= 3 && dist <= range+1) ) //ソスワゑソスソスヘ対象ゑソスMobソスナ射抵ソスソスソス3ソスネ会ソスソスナ射抵ソスソスソス t_sc_data[SC_AUTOCOUNTER].val3 = src->id; } - return wd; //ダメージ構造体を返して終了 + return wd; //ソス_ソスソスソス[ソスWソス\ソスソスソスフゑソスソスヤゑソスソスト終ソスソス } else ac_flag = 1; } } -//オートカウンター処理ここまで +//ソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスソスソスソスソスソスソスワゑソス - flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // 攻撃の種類の設定 + flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // ソスUソスソスソスフ趣ソスソズの設抵ソス - // 回避率計算、回避判定は後で + // ソスソスソス率計ソスZソスAソスソスソス判抵ソスソスヘ鯉ソスソスソス flee = battle_get_flee(target); - if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) //AGI、VITペナルティ設定が有効 - target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); //対象の数を算出 + if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) //AGIソスAVITソスyソスiソスソスソスeソスBソスン定がソスLソスソス + target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); //ソスホ象の撰ソスソスソスソスZソスo if(battle_config.agi_penaly_type > 0) { - if(target_count >= battle_config.agi_penaly_count) { //ペナルティ設定より対象が多い - if(battle_config.agi_penaly_type == 1) //回避率がagi_penaly_num%ずつ減少 + if(target_count >= battle_config.agi_penaly_count) { //ソスyソスiソスソスソスeソスBソスン抵ソスソスソスソスソスソスホ象ゑソスソスソスソスソス + if(battle_config.agi_penaly_type == 1) //ソスソスソス率ゑソスagi_penaly_num%ソスソスソスツ鯉ソスソスソス flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100; - else if(battle_config.agi_penaly_type == 2) //回避率がagi_penaly_num分減少 + else if(battle_config.agi_penaly_type == 2) //ソスソスソス率ゑソスagi_penaly_numソスソスソスソスソスソス flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num; - if(flee < 1) flee = 1; //回避率は最低でも1 + if(flee < 1) flee = 1; //ソスソスソス率は最抵ソスソスナゑソス1 } } - hitrate=battle_get_hit(src) - flee + 80; //命中率計算 + hitrate=battle_get_hit(src) - flee + 80; //ソスソスソスソスソスソスソスvソスZ { // [Fate] Reduce hit chance by distance int dx = abs(src->x - target->x); int dy = abs(src->y - target->y); @@ -2321,31 +2321,31 @@ static struct Damage battle_calc_pc_weapon_attack( dex=battle_get_dex(src); //DEX luk=battle_get_luk(src); //LUK watk = battle_get_atk(src); //ATK - watk_ = battle_get_atk_(src); //ATK左手 + watk_ = battle_get_atk_(src); //ATKソスソスソスソス - if(skill_num==HW_MAGICCRASHER){ /* マジッククラッシャーはMATKで殴る */ - damage = damage2 = battle_get_matk1(src); //damega,damega2初登場、base_atkの取得 + if(skill_num==HW_MAGICCRASHER){ /* ソス}ソスWソスbソスNソスNソスソスソスbソスVソスソスソス[ソスソスMATKソスナ会ソスソスソス */ + damage = damage2 = battle_get_matk1(src); //damega,damega2ソスソスソスoソスソスソスAbase_atkソスフ取得 }else{ - damage = damage2 = battle_get_baseatk(&sd->bl); //damega,damega2初登場、base_atkの取得 + damage = damage2 = battle_get_baseatk(&sd->bl); //damega,damega2ソスソスソスoソスソスソスAbase_atkソスフ取得 } - atkmin = atkmin_ = dex; //最低ATKはDEXで初期化? - sd->state.arrow_atk = 0; //arrow_atk初期化 + atkmin = atkmin_ = dex; //ソスナ抵ソスATKソスソスDEXソスナ擾ソスソスソスソスソスソスH + sd->state.arrow_atk = 0; //arrow_atkソスソスソスソスソスソス if(sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]]) atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[9]]->wlv*20)/100; if(sd->equip_index[8] >= 0 && sd->inventory_data[sd->equip_index[8]]) atkmin_ = atkmin_*(80 + sd->inventory_data[sd->equip_index[8]]->wlv*20)/100; - if(sd->status.weapon == 11) { //武器が弓矢の場合 - atkmin = watk * ((atkminarrow_ele > 0) //属性矢なら属性を矢の属性に変更 + if(sd->status.weapon == 11) { //ソスソスソスがソス|ソスソスソスフ場合 + atkmin = watk * ((atkminarrow_ele > 0) //ソスソスソスソスソスソスソスネら属ソスソスソスソスソスソスソスフ托ソスソスソスソスノ変更 s_ele = sd->arrow_ele; - sd->state.arrow_atk = 1; //arrow_atk有効化 + sd->state.arrow_atk = 1; //arrow_atkソスLソスソスソスソス } - // サイズ修正 - // ペコ騎乗していて、槍で攻撃した場合は中型のサイズ修正を100にする - // ウェポンパーフェクション,ドレイクC - if(((sd->special_state.no_sizefix) || (pc_isriding(sd) && (sd->status.weapon==4 || sd->status.weapon==5) && t_size==1) || skill_num == MO_EXTREMITYFIST)){ //ペコ騎乗していて、槍で中型を攻撃 + // ソスTソスCソスYソスCソスソス + // ソスyソスRソスRソス謔オソストゑソスソスト、ソスソスソスナ攻ソスソスソスソスソスソスソス鼾ソスヘ抵ソスソス^ソスフサソスCソスYソスCソスソスソスソス100ソスノゑソスソスソス + // ソスEソスFソス|ソスソスソスpソス[ソスtソスFソスNソスVソスソスソスソス,ソスhソスソスソスCソスNC + if(((sd->special_state.no_sizefix) || (pc_isriding(sd) && (sd->status.weapon==4 || sd->status.weapon==5) && t_size==1) || skill_num == MO_EXTREMITYFIST)){ //ソスyソスRソスRソス謔オソストゑソスソスト、ソスソスソスナ抵ソスソス^ソスソスソスUソスソス atkmax = watk; atkmax_ = watk_; } else { @@ -2354,26 +2354,26 @@ static struct Damage battle_calc_pc_weapon_attack( atkmax_ = (watk_ * sd->atkmods_[ t_size ]) / 100; atkmin_ = (atkmin_ * sd->atkmods[ t_size ]) / 100; } - if( (sc_data != NULL && sc_data[SC_WEAPONPERFECTION].timer!=-1) || (sd->special_state.no_sizefix)) { // ウェポンパーフェクション || ドレイクカード + if( (sc_data != NULL && sc_data[SC_WEAPONPERFECTION].timer!=-1) || (sd->special_state.no_sizefix)) { // ソスEソスFソス|ソスソスソスpソス[ソスtソスFソスNソスVソスソスソスソス || ソスhソスソスソスCソスNソスJソス[ソスh atkmax = watk; atkmax_ = watk_; } - if(atkmin > atkmax && !(sd->state.arrow_atk)) atkmin = atkmax; //弓は最低が上回る場合あり + if(atkmin > atkmax && !(sd->state.arrow_atk)) atkmin = atkmax; //ソス|ソスヘ最低がソスソスソスソスソスソスソス鼾ソスソスソスソス if(atkmin_ > atkmax_) atkmin_ = atkmax_; - if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // マキシマイズパワー + if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // ソス}ソスLソスVソス}ソスCソスYソスpソスソスソス[ atkmin=atkmax; atkmin_=atkmax_; } - //ダブルアタック判定 + //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソス if(sd->weapontype1 == 0x01) { if(skill_num == 0 && skill_lv >= 0 && (skill = pc_checkskill(sd,TF_DOUBLE)) > 0) da = (MRAND(100) < (skill*5)) ? 1:0; } - //三段掌 + //ソスOソスiソスソス if(skill_num == 0 && skill_lv >= 0 && (skill = pc_checkskill(sd,MO_TRIPLEATTACK)) > 0 && sd->status.weapon <= 16 && !sd->state.arrow_atk) { da = (MRAND(100) < (30 - skill)) ? 2:0; } @@ -2381,23 +2381,23 @@ static struct Damage battle_calc_pc_weapon_attack( if(sd->double_rate > 0 && da == 0 && skill_num == 0 && skill_lv >= 0) da = (MRAND(100) < sd->double_rate) ? 1:0; - // 過剰精錬ボーナス + // ソス゚剰精ソスBソス{ソス[ソスiソスX if(sd->overrefine>0 ) damage+=MPRAND(1, sd->overrefine); if(sd->overrefine_>0 ) damage2+=MPRAND(1, sd->overrefine_); - if(da == 0){ //ダブルアタックが発動していない - // クリティカル計算 + if(da == 0){ //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソスソスソスソスソスソストゑソスソスネゑソス + // ソスNソスソスソスeソスBソスJソスソスソスvソスZ cri = battle_get_critical(src); if(sd->state.arrow_atk) cri += sd->arrow_cri; if(sd->status.weapon == 16) - // カタールの場合、クリティカルを倍に + // ソスJソス^ソス[ソスソスソスフ場合ソスAソスNソスソスソスeソスBソスJソスソスソスソスソス{ソスソス cri <<=1; cri -= battle_get_luk(target) * 3; - if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // 睡眠中はクリティカルが倍に + if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // ソスソスソスソスソスソスソスヘクソスソスソスeソスBソスJソスソスソスソスソス{ソスソス cri <<=1; if(ac_flag) cri = 1000; @@ -2415,8 +2415,8 @@ static struct Damage battle_calc_pc_weapon_attack( if(tsd && tsd->critical_def) cri = cri * (100-tsd->critical_def) / 100; - if(da == 0 && (skill_num==0 || skill_num == KN_AUTOCOUNTER || skill_num == SN_SHARPSHOOTING) && skill_lv >= 0 && //ダブルアタックが発動していない - (MRAND(1000)) < cri) // 判定(スキルの場合は無視) + if(da == 0 && (skill_num==0 || skill_num == KN_AUTOCOUNTER || skill_num == SN_SHARPSHOOTING) && skill_lv >= 0 && //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソスソスソスソスソスソストゑソスソスネゑソス + (MRAND(1000)) < cri) // ソスソスソスソスソスiソスXソスLソスソスソスフ場合ソスヘ厄ソスソスソスソスj { damage += atkmax; damage2 += atkmax_; @@ -2512,23 +2512,23 @@ static struct Damage battle_calc_pc_weapon_attack( } } - // スキル修正1(攻撃力倍化系) - // オーバートラスト(+5% 〜 +25%),他攻撃系スキルの場合ここで補正 - // バッシュ,マグナムブレイク, - // ボーリングバッシュ,スピアブーメラン,ブランディッシュスピア,スピアスタッブ, - // メマーナイト,カートレボリューション - // ダブルストレイフィング,アローシャワー,チャージアロー, - // ソニックブロー - if(sc_data){ //状態異常中のダメージ追加 - if(sc_data[SC_OVERTHRUST].timer!=-1){ // オーバートラスト + // ソスXソスLソスソスソスCソスソスソスPソスiソスUソスソスソスヘ倍ソスソスソスnソスj + // ソスIソス[ソスoソス[ソスgソスソスソスXソスg(+5% ソス` +25%),ソスソスソスUソスソスソスnソスXソスLソスソスソスフ場合ソスソスソスソスソスナ補正 + // ソスoソスbソスVソスソス,ソス}ソスOソスiソスソスソスuソスソスソスCソスN, + // ソス{ソス[ソスソスソスソスソスOソスoソスbソスVソスソス,ソスXソスsソスAソスuソス[ソスソスソスソスソスソス,ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA,ソスXソスsソスAソスXソス^ソスbソスu, + // ソスソスソス}ソス[ソスiソスCソスg,ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス + // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO,ソスAソスソスソス[ソスVソスソスソスソスソス[,ソス`ソスソスソス[ソスWソスAソスソスソス[, + // ソス\ソスjソスbソスNソスuソスソスソス[ + if(sc_data){ //ソスソスソスヤ異常中ソスフダソスソスソス[ソスWソスヌ会ソス + if(sc_data[SC_OVERTHRUST].timer!=-1){ // ソスIソス[ソスoソス[ソスgソスソスソスXソスg damage += damage*(5*sc_data[SC_OVERTHRUST].val1)/100; damage2 += damage2*(5*sc_data[SC_OVERTHRUST].val1)/100; } - if(sc_data[SC_TRUESIGHT].timer!=-1){ // トゥルーサイト + if(sc_data[SC_TRUESIGHT].timer!=-1){ // ソスgソスDソスソスソス[ソスTソスCソスg damage += damage*(2*sc_data[SC_TRUESIGHT].val1)/100; damage2 += damage2*(2*sc_data[SC_TRUESIGHT].val1)/100; } - if(sc_data[SC_BERSERK].timer!=-1){ // バーサーク + if(sc_data[SC_BERSERK].timer!=-1){ // ソスoソス[ソスTソス[ソスN damage += damage*50/100; damage2 += damage2*50/100; } @@ -2541,20 +2541,20 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_SKILLMASK)|BF_SKILL; switch( skill_num ){ - case SM_BASH: // バッシュ + case SM_BASH: // ソスoソスbソスVソスソス damage = damage*(100+ 30*skill_lv)/100; damage2 = damage2*(100+ 30*skill_lv)/100; hitrate = (hitrate*(100+5*skill_lv))/100; break; - case SM_MAGNUM: // マグナムブレイク + case SM_MAGNUM: // ソス}ソスOソスiソスソスソスuソスソスソスCソスN damage = damage*(5*skill_lv +(wflag)?65:115 )/100; damage2 = damage2*(5*skill_lv +(wflag)?65:115 )/100; break; - case MC_MAMMONITE: // メマーナイト + case MC_MAMMONITE: // ソスソスソス}ソス[ソスiソスCソスg damage = damage*(100+ 50*skill_lv)/100; damage2 = damage2*(100+ 50*skill_lv)/100; break; - case AC_DOUBLE: // ダブルストレイフィング + case AC_DOUBLE: // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2570,7 +2570,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case AC_SHOWER: // アローシャワー + case AC_SHOWER: // ソスAソスソスソス[ソスVソスソスソスソスソス[ if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2585,7 +2585,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case AC_CHARGEARROW: // チャージアロー + case AC_CHARGEARROW: // ソス`ソスソスソス[ソスWソスAソスソスソス[ if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2600,7 +2600,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case KN_PIERCE: // ピアース + case KN_PIERCE: // ソスsソスAソス[ソスX damage = damage*(100+ 10*skill_lv)/100; damage2 = damage2*(100+ 10*skill_lv)/100; hitrate=hitrate*(100+5*skill_lv)/100; @@ -2608,16 +2608,16 @@ static struct Damage battle_calc_pc_weapon_attack( damage*=div_; damage2*=div_; break; - case KN_SPEARSTAB: // スピアスタブ + case KN_SPEARSTAB: // ソスXソスsソスAソスXソス^ソスu damage = damage*(100+ 15*skill_lv)/100; damage2 = damage2*(100+ 15*skill_lv)/100; break; - case KN_SPEARBOOMERANG: // スピアブーメラン + case KN_SPEARBOOMERANG: // ソスXソスsソスAソスuソス[ソスソスソスソスソスソス damage = damage*(100+ 50*skill_lv)/100; damage2 = damage2*(100+ 50*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case KN_BRANDISHSPEAR: // ブランディッシュスピア + case KN_BRANDISHSPEAR: // ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; if(skill_lv>3 && wflag==1) damage3+=damage/2; @@ -2636,7 +2636,7 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 +=damage4; blewcount=0; break; - case KN_BOWLINGBASH: // ボウリングバッシュ + case KN_BOWLINGBASH: // ソス{ソスEソスソスソスソスソスOソスoソスbソスVソスソス damage = damage*(100+ 50*skill_lv)/100; damage2 = damage2*(100+ 50*skill_lv)/100; blewcount=0; @@ -2648,17 +2648,17 @@ static struct Damage battle_calc_pc_weapon_attack( hitrate = 1000000; flag=(flag&~BF_SKILLMASK)|BF_NORMAL; break; - case AS_SONICBLOW: // ソニックブロウ + case AS_SONICBLOW: // ソス\ソスjソスbソスNソスuソスソスソスE hitrate+=30; // hitrate +30, thanks to midas damage = damage*(300+ 50*skill_lv)/100; damage2 = damage2*(300+ 50*skill_lv)/100; div_=8; break; - case TF_SPRINKLESAND: // 砂まき + case TF_SPRINKLESAND: // ソスソスソスワゑソス damage = damage*125/100; damage2 = damage2*125/100; break; - case MC_CARTREVOLUTION: // カートレボリューション + case MC_CARTREVOLUTION: // ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス if(sd->cart_max_weight > 0 && sd->cart_weight > 0) { damage = (damage*(150 + pc_checkskill(sd,BS_WEAPONRESEARCH) + (sd->cart_weight*100/sd->cart_max_weight) ) )/100; damage2 = (damage2*(150 + pc_checkskill(sd,BS_WEAPONRESEARCH) + (sd->cart_weight*100/sd->cart_max_weight) ) )/100; @@ -2668,17 +2668,17 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 = (damage2*150)/100; } break; - // 以下MOB - case NPC_COMBOATTACK: // 多段攻撃 + // ソスネ会ソスMOB + case NPC_COMBOATTACK: // ソスソスソスiソスUソスソス div_=skill_get_num(skill_num,skill_lv); damage *= div_; damage2 *= div_; break; - case NPC_RANDOMATTACK: // ランダムATK攻撃 + case NPC_RANDOMATTACK: // ソスソスソスソスソス_ソスソスATKソスUソスソス damage = damage*(MPRAND(50, 150))/100; damage2 = damage2*(MPRAND(50, 150))/100; break; - // 属性攻撃(適当) + // ソスソスソスソスソスUソスソスソスiソスKソスソスソスj case NPC_WATERATTACK: case NPC_GROUNDATTACK: case NPC_FIREATTACK: @@ -2699,7 +2699,7 @@ static struct Damage battle_calc_pc_weapon_attack( case NPC_PIERCINGATT: flag=(flag&~BF_RANGEMASK)|BF_SHORT; break; - case RG_BACKSTAP: // バックスタブ + case RG_BACKSTAP: // ソスoソスbソスNソスXソス^ソスu if(battle_config.backstab_bow_penalty == 1 && sd->status.weapon == 11){ damage = (damage*(300+ 40*skill_lv)/100)/2; damage2 = (damage2*(300+ 40*skill_lv)/100)/2; @@ -2709,27 +2709,27 @@ static struct Damage battle_calc_pc_weapon_attack( } hitrate = 1000000; break; - case RG_RAID: // サプライズアタック + case RG_RAID: // ソスTソスvソスソスソスCソスYソスAソス^ソスbソスN damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; - case RG_INTIMIDATE: // インティミデイト + case RG_INTIMIDATE: // ソスCソスソスソスeソスBソス~ソスfソスCソスg damage = damage*(100+ 30*skill_lv)/100; damage2 = damage2*(100+ 30*skill_lv)/100; break; - case CR_SHIELDCHARGE: // シールドチャージ + case CR_SHIELDCHARGE: // ソスVソス[ソスソスソスhソス`ソスソスソス[ソスW damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_SHORT; s_ele = 0; break; - case CR_SHIELDBOOMERANG: // シールドブーメラン + case CR_SHIELDBOOMERANG: // ソスVソス[ソスソスソスhソスuソス[ソスソスソスソスソスソス damage = damage*(100+ 30*skill_lv)/100; damage2 = damage2*(100+ 30*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; s_ele = 0; break; - case CR_HOLYCROSS: // ホーリークロス + case CR_HOLYCROSS: // ソスzソス[ソスソスソス[ソスNソスソスソスX damage = damage*(100+ 35*skill_lv)/100; damage2 = damage2*(100+ 35*skill_lv)/100; div_=2; @@ -2737,15 +2737,15 @@ static struct Damage battle_calc_pc_weapon_attack( case CR_GRANDCROSS: hitrate= 1000000; break; - case AM_DEMONSTRATION: // デモンストレーション + case AM_DEMONSTRATION: // ソスfソスソスソスソスソスXソスgソスソスソス[ソスVソスソスソスソス damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case AM_ACIDTERROR: // アシッドテラー + case AM_ACIDTERROR: // ソスAソスVソスbソスhソスeソスソスソス[ damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; - case MO_FINGEROFFENSIVE: //指弾 + case MO_FINGEROFFENSIVE: //ソスwソスe if(battle_config.finger_offensive_type == 0) { damage = damage * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; damage2 = damage2 * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; @@ -2757,7 +2757,7 @@ static struct Damage battle_calc_pc_weapon_attack( div_ = 1; } break; - case MO_INVESTIGATE: // 発 勁 + case MO_INVESTIGATE: // ソスソス ソスソス if(def1 < 1000000) { damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100; damage2 = damage2*(100+ 75*skill_lv)/100 * (def1 + def2)/100; @@ -2766,7 +2766,7 @@ static struct Damage battle_calc_pc_weapon_attack( s_ele = 0; s_ele_ = 0; break; - case MO_EXTREMITYFIST: // 阿修羅覇鳳拳 + case MO_EXTREMITYFIST: // ソスソスソスCソスソスソスeソスPソスソス damage = damage * (8 + ((sd->status.sp)/10)) + 250 + (skill_lv * 150); damage2 = damage2 * (8 + ((sd->status.sp)/10)) + 250 + (skill_lv * 150); sd->status.sp = 0; @@ -2775,16 +2775,16 @@ static struct Damage battle_calc_pc_weapon_attack( s_ele = 0; s_ele_ = 0; break; - case MO_CHAINCOMBO: // 連打掌 + case MO_CHAINCOMBO: // ソスAソスナ擾ソス damage = damage*(150+ 50*skill_lv)/100; damage2 = damage2*(150+ 50*skill_lv)/100; div_=4; break; - case MO_COMBOFINISH: // 猛龍拳 + case MO_COMBOFINISH: // ソスメ暦ソスソスソス damage = damage*(240+ 60*skill_lv)/100; damage2 = damage2*(240+ 60*skill_lv)/100; break; - case BA_MUSICALSTRIKE: // ミュージカルストライク + case BA_MUSICALSTRIKE: // ソス~ソスソスソス[ソスWソスJソスソスソスXソスgソスソスソスCソスN if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2799,7 +2799,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case DC_THROWARROW: // 矢撃ち + case DC_THROWARROW: // ソス撃ソスソス if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2814,50 +2814,50 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case CH_TIGERFIST: // 伏虎拳 + case CH_TIGERFIST: // ソスソスソスユ鯉ソス damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case CH_CHAINCRUSH: // 連柱崩撃 + case CH_CHAINCRUSH: // ソスAソスソスソスソスソスソス damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; div_=skill_get_num(skill_num,skill_lv); break; - case CH_PALMSTRIKE: // 猛虎硬派山 + case CH_PALMSTRIKE: // ソスメ虎硬ソスhソスR damage = damage*(50+ 100*skill_lv)/100; damage2 = damage2*(50+ 100*skill_lv)/100; break; - case LK_SPIRALPIERCE: /* スパイラルピアース */ - damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に - damage2 = damage2*(100+ 50*skill_lv)/100; //増加量が分からないので適当に + case LK_SPIRALPIERCE: /* ソスXソスpソスCソスソスソスソスソスsソスAソス[ソスX */ + damage = damage*(100+ 50*skill_lv)/100; //ソスソスソスソスハゑソスソスソスソスソスソスソスソスネゑソスソスフで適ソスソスソスソス + damage2 = damage2*(100+ 50*skill_lv)/100; //ソスソスソスソスハゑソスソスソスソスソスソスソスソスネゑソスソスフで適ソスソスソスソス div_=5; if(tsd) tsd->canmove_tick = gettick() + 1000; else if(tmd) tmd->canmove_tick = gettick() + 1000; break; - case LK_HEADCRUSH: /* ヘッドクラッシュ */ + case LK_HEADCRUSH: /* ソスwソスbソスhソスNソスソスソスbソスVソスソス */ damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case LK_JOINTBEAT: /* ジョイントビート */ + case LK_JOINTBEAT: /* ソスWソスソスソスCソスソスソスgソスrソス[ソスg */ damage = damage*(50+ 10*skill_lv)/100; damage2 = damage2*(50+ 10*skill_lv)/100; break; - case ASC_METEORASSAULT: /* メテオアサルト */ + case ASC_METEORASSAULT: /* ソスソスソスeソスIソスAソスTソスソスソスg */ damage = damage*(40+ 40*skill_lv)/100; damage2 = damage2*(40+ 40*skill_lv)/100; break; - case SN_SHARPSHOOTING: /* シャープシューティング */ + case SN_SHARPSHOOTING: /* ソスVソスソスソス[ソスvソスVソスソスソス[ソスeソスBソスソスソスO */ damage += damage*(30*skill_lv)/100; damage2 += damage2*(30*skill_lv)/100; break; - case CG_ARROWVULCAN: /* アローバルカン */ + case CG_ARROWVULCAN: /* ソスAソスソスソス[ソスoソスソスソスJソスソス */ damage = damage*(160+40*skill_lv)/100; damage2 = damage2*(160+40*skill_lv)/100; div_=9; break; - case AS_SPLASHER: /* ベナムスプラッシャー */ + case AS_SPLASHER: /* ソスxソスiソスソスソスXソスvソスソスソスbソスVソスソスソス[ */ damage = damage*(200+20*skill_lv+20*pc_checkskill(sd,AS_POISONREACT))/100; damage2 = damage2*(200+20*skill_lv+20*pc_checkskill(sd,AS_POISONREACT))/100; break; @@ -2910,16 +2910,16 @@ static struct Damage battle_calc_pc_weapon_attack( break; } } - if(da == 2) { //三段掌が発動しているか + if(da == 2) { //ソスOソスiソスソスソスソスソスソスソスソスソスソスソストゑソスソス驍ゥ type = 0x08; - div_ = 255; //三段掌用に… + div_ = 255; //ソスOソスiソスソスソスpソスノ… damage = damage * (100 + 20 * pc_checkskill(sd, MO_TRIPLEATTACK)) / 100; } if( skill_num!=NPC_CRITICALSLASH ){ - // 対 象の防御力によるダメージの減少 - // ディバインプロテクション(ここでいいのかな?) - if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VIT無視 + // ソスソス ソスロの防ソスソスソスヘにゑソスソスソスソス_ソスソスソス[ソスWソスフ鯉ソスソスソス + // ソスfソスBソスoソスCソスソスソスvソスソスソスeソスNソスVソスソスソスソスソスiソスソスソスソスソスナゑソスソスソスソスフゑソスソスネ?ソスj + if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VITソスソスソスソス int t_def; target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv); if(battle_config.vit_penaly_type > 0) { @@ -2977,8 +2977,8 @@ static struct Damage battle_calc_pc_weapon_attack( } } } - // 精錬ダメージの追加 - if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) { //DEF, VIT無視 + // ソスソスソスBソス_ソスソスソス[ソスWソスフ追会ソス + if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) { //DEF, VITソスソスソスソス damage += battle_get_atk2(src); damage2 += battle_get_atk_2(src); } @@ -2991,8 +2991,8 @@ static struct Damage battle_calc_pc_weapon_attack( } } } - if(skill_num == LK_SPIRALPIERCE) { /* スパイラルピアース */ - if(sd->equip_index[9] >= 0) { //重量で追加ダメージらしいのでシールドブーメランを参考に追加 + if(skill_num == LK_SPIRALPIERCE) { /* ソスXソスpソスCソスソスソスソスソスsソスAソス[ソスX */ + if(sd->equip_index[9] >= 0) { //ソスdソスハで追会ソス_ソスソスソス[ソスWソス轤オソスソスソスフでシソス[ソスソスソスhソスuソス[ソスソスソスソスソスソスソスソスソスQソスlソスノ追会ソス int index = sd->equip_index[9]; if(sd->inventory_data[index] && sd->inventory_data[index]->type == 4) { damage += (int)(double)(sd->inventory_data[index]->weight*(0.8*skill_lv*4/10)); @@ -3001,13 +3001,13 @@ static struct Damage battle_calc_pc_weapon_attack( } } - // 0未満だった場合1に補正 + // 0ソスソスソスソスソスソスソスソスソスソス鼾1ソスノ補正 if(damage<1) damage=1; if(damage2<1) damage2=1; - // スキル修正2(修練系) - // 修練ダメージ(右手のみ) ソニックブロー時は別処理(1撃に付き1/8適応) - if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != CR_GRANDCROSS) { //修練ダメージ無視 + // ソスXソスLソスソスソスCソスソスソスQソスiソスCソスソスソスnソスj + // ソスCソスソスソス_ソスソスソス[ソスW(ソスEソスソスソスフゑソス) ソス\ソスjソスbソスNソスuソスソスソス[ソスソスソスヘ別擾ソスソスソスソスi1ソスソスソスノ付ソスソス1/8ソスKソスソス) + if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != CR_GRANDCROSS) { //ソスCソスソスソス_ソスソスソス[ソスWソスソスソスソス damage = battle_addmastery(sd,target,damage,0); damage2 = battle_addmastery(sd,target,damage2,1); } @@ -3017,12 +3017,12 @@ static struct Damage battle_calc_pc_weapon_attack( hitrate = 1000000; } - // 回避修正 + // ソスソスソスソスソスCソスソス hitrate = (hitrate<5)?5:hitrate; - if( hitrate < 1000000 && // 必中攻撃 - (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // 睡眠は必中 - t_sc_data[SC_STAN].timer!=-1 || // スタンは必中 - t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // 凍結は必中 + if( hitrate < 1000000 && // ソスKソスソスソスUソスソス + (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // ソスソスソスソスソスヘ必ソスソス + t_sc_data[SC_STAN].timer!=-1 || // ソスXソス^ソスソスソスヘ必ソスソス + t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // ソスソスソスソスソスヘ必ソスソス hitrate = 1000000; if(type == 0 && MRAND(100) >= hitrate) { damage = damage2 = 0; @@ -3030,7 +3030,7 @@ static struct Damage battle_calc_pc_weapon_attack( } else { dmg_lv = ATK_DEF; } - // スキル修正3(武器研究) + // ソスXソスLソスソスソスCソスソスソスRソスiソスソスソス研ソスソスソスj if( (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) { damage+= skill*2; damage2+= skill*2; @@ -3042,48 +3042,48 @@ static struct Damage battle_calc_pc_weapon_attack( } } -//スキルによるダメージ補正ここまで +//ソスXソスLソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソス竦ウソスソスソスソスソスワゑソス -//カードによるダメージ追加処理ここから +//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスヌ会ソスソスソスソスソスソスソスソスソスソスソスソス cardfix=100; - if(!sd->state.arrow_atk) { //弓矢以外 - if(!battle_config.left_cardfix_to_right) { //左手カード補正設定無し - cardfix=cardfix*(100+sd->addrace[t_race])/100; // 種族によるダメージ修正 - cardfix=cardfix*(100+sd->addele[t_ele])/100; // 属性によるダメージ修正 - cardfix=cardfix*(100+sd->addsize[t_size])/100; // サイズによるダメージ修正 + if(!sd->state.arrow_atk) { //ソス|ソスソスソスネ外 + if(!battle_config.left_cardfix_to_right) { //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス + cardfix=cardfix*(100+sd->addrace[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス + cardfix=cardfix*(100+sd->addele[t_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス + cardfix=cardfix*(100+sd->addsize[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス } else { - cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100; // 種族によるダメージ修正(左手による追加あり) - cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100; // 属性によるダメージ修正(左手による追加あり) - cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100; // サイズによるダメージ修正(左手による追加あり) + cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) } } - else { //弓矢 - cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100; // 種族によるダメージ修正(弓矢による追加あり) - cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100; // 属性によるダメージ修正(弓矢による追加あり) - cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100; // サイズによるダメージ修正(弓矢による追加あり) - } - if(t_mode & 0x20) { //ボス - if(!sd->state.arrow_atk) { //弓矢攻撃以外なら - if(!battle_config.left_cardfix_to_right) //左手カード補正設定無し - cardfix=cardfix*(100+sd->addrace[10])/100; //ボスモンスターに追加ダメージ - else //左手カード補正設定あり - cardfix=cardfix*(100+sd->addrace[10]+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ(左手による追加あり) + else { //ソス|ソスソス + cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + } + if(t_mode & 0x20) { //ソス{ソスX + if(!sd->state.arrow_atk) { //ソス|ソスソスソスUソスソスソスネ外ソスネゑソス + if(!battle_config.left_cardfix_to_right) //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス + cardfix=cardfix*(100+sd->addrace[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW + else //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定あソスソス + cardfix=cardfix*(100+sd->addrace[10]+sd->addrace_[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) } - else //弓矢攻撃 - cardfix=cardfix*(100+sd->addrace[10]+sd->arrow_addrace[10])/100; //ボスモンスターに追加ダメージ(弓矢による追加あり) - } - else { //ボスじゃない - if(!sd->state.arrow_atk) { //弓矢攻撃以外 - if(!battle_config.left_cardfix_to_right) //左手カード補正設定無し - cardfix=cardfix*(100+sd->addrace[11])/100; //ボス以外モンスターに追加ダメージ - else //左手カード補正設定あり - cardfix=cardfix*(100+sd->addrace[11]+sd->addrace_[11])/100; //ボス以外モンスターに追加ダメージ(左手による追加あり) + else //ソス|ソスソスソスUソスソス + cardfix=cardfix*(100+sd->addrace[10]+sd->arrow_addrace[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + } + else { //ソス{ソスXソスソスソスソスソスネゑソス + if(!sd->state.arrow_atk) { //ソス|ソスソスソスUソスソスソスネ外 + if(!battle_config.left_cardfix_to_right) //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス + cardfix=cardfix*(100+sd->addrace[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW + else //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定あソスソス + cardfix=cardfix*(100+sd->addrace[11]+sd->addrace_[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) } else - cardfix=cardfix*(100+sd->addrace[11]+sd->arrow_addrace[11])/100; //ボス以外モンスターに追加ダメージ(弓矢による追加あり) + cardfix=cardfix*(100+sd->addrace[11]+sd->arrow_addrace[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) } - //特定Class用補正処理(少女の日記→ボンゴン用?) + //ソスソスソスClassソスpソス竦ウソスソスソスソス(ソスソスソスソスソスフ難ソスソスLソスソスソス{ソスソスソスSソスソスソスpソスH) t_class = battle_get_class(target); for(i=0;iadd_damage_class_count;i++) { if(sd->add_damage_classid[i] == t_class) { @@ -3092,44 +3092,44 @@ static struct Damage battle_calc_pc_weapon_attack( } } if(skill_num != CR_GRANDCROSS || !battle_config.gx_cardfix) - damage=damage*cardfix/100; //カード補正によるダメージ増加 -//カードによるダメージ増加処理ここまで + damage=damage*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソス +//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソスソスソスソスソスソスワゑソス -//カードによるダメージ追加処理(左手)ここから +//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスヌ会ソスソスソスソス(ソスソスソスソス)ソスソスソスソスソスソスソスソス cardfix=100; - if(!battle_config.left_cardfix_to_right) { //左手カード補正設定無し - cardfix=cardfix*(100+sd->addrace_[t_race])/100; // 種族によるダメージ修正左手 - cardfix=cardfix*(100+sd->addele_[t_ele])/100; // 属 性によるダメージ修正左手 - cardfix=cardfix*(100+sd->addsize_[t_size])/100; // サイズによるダメージ修正左手 - if(t_mode & 0x20) //ボス - cardfix=cardfix*(100+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ左手 + if(!battle_config.left_cardfix_to_right) { //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス + cardfix=cardfix*(100+sd->addrace_[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソスソスソスソスソス + cardfix=cardfix*(100+sd->addele_[t_ele])/100; // ソスソス ソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソスソスソスソスソス + cardfix=cardfix*(100+sd->addsize_[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソスソスソスソスソス + if(t_mode & 0x20) //ソス{ソスX + cardfix=cardfix*(100+sd->addrace_[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスWソスソスソスソス else - cardfix=cardfix*(100+sd->addrace_[11])/100; //ボス以外モンスターに追加ダメージ左手 + cardfix=cardfix*(100+sd->addrace_[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスWソスソスソスソス } - //特定Class用補正処理左手(少女の日記→ボンゴン用?) + //ソスソスソスClassソスpソス竦ウソスソスソスソスソスソスソスソス(ソスソスソスソスソスフ難ソスソスLソスソスソス{ソスソスソスSソスソスソスpソスH) for(i=0;iadd_damage_class_count_;i++) { if(sd->add_damage_classid_[i] == t_class) { cardfix=cardfix*(100+sd->add_damage_classrate_[i])/100; break; } } - if(skill_num != CR_GRANDCROSS) damage2=damage2*cardfix/100; //カード補正による左手ダメージ増加 -//カードによるダメージ増加処理(左手)ここまで + if(skill_num != CR_GRANDCROSS) damage2=damage2*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソス骰カソスソスソス_ソスソスソス[ソスWソスソスソスソス +//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソス(ソスソスソスソス)ソスソスソスソスソスワゑソス // -- moonsoul (cardfix for magic damage portion of ASC_BREAKER) if(skill_num == ASC_BREAKER) damage3 = damage3 * cardfix / 100; -//カードによるダメージ減衰処理ここから - if(tsd){ //対象がPCの場合 +//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソスソスソスソスソスソスソスソスソスソス + if(tsd){ //ソスホ象ゑソスPCソスフ場合 cardfix=100; - cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 - cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属性によるダメージ耐性 + cardfix=cardfix*(100-tsd->subrace[s_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subele[s_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス if(battle_get_mode(src) & 0x20) - cardfix=cardfix*(100-tsd->subrace[10])/100; //ボスからの攻撃はダメージ減少 + cardfix=cardfix*(100-tsd->subrace[10])/100; //ソス{ソスXソスソスソスソスソスフ攻ソスソスソスヘダソスソスソス[ソスWソスソスソスソス else - cardfix=cardfix*(100-tsd->subrace[11])/100; //ボス以外からの攻撃はダメージ減少 - //特定Class用補正処理左手(少女の日記→ボンゴン用?) + cardfix=cardfix*(100-tsd->subrace[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスフ攻ソスソスソスヘダソスソスソス[ソスWソスソスソスソス + //ソスソスソスClassソスpソス竦ウソスソスソスソスソスソスソスソス(ソスソスソスソスソスフ難ソスソスLソスソスソス{ソスソスソスSソスソスソスpソスH) for(i=0;iadd_def_class_count;i++) { if(tsd->add_def_classid[i] == sd->status.class) { cardfix=cardfix*(100-tsd->add_def_classrate[i])/100; @@ -3137,24 +3137,24 @@ static struct Damage battle_calc_pc_weapon_attack( } } if(flag&BF_LONG) - cardfix=cardfix*(100-tsd->long_attack_def_rate)/100; //遠距離攻撃はダメージ減少(ホルンCとか) + cardfix=cardfix*(100-tsd->long_attack_def_rate)/100; //ソスソスソスソスソスソスソスUソスソスソスヘダソスソスソス[ソスWソスソスソスソス(ソスzソスソスソスソスCソスニゑソス) if(flag&BF_SHORT) - cardfix=cardfix*(100-tsd->near_attack_def_rate)/100; //近距離攻撃はダメージ減少(該当無し?) - damage=damage*cardfix/100; //カード補正によるダメージ減少 - damage2=damage2*cardfix/100; //カード補正による左手ダメージ減少 + cardfix=cardfix*(100-tsd->near_attack_def_rate)/100; //ソス゚具ソスソスソスソスUソスソスソスヘダソスソスソス[ソスWソスソスソスソス(ソスYソスソスソスソスソスソスソスH) + damage=damage*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソス + damage2=damage2*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソス骰カソスソスソス_ソスソスソス[ソスWソスソスソスソス } -//カードによるダメージ減衰処理ここまで +//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソスソスソスソスソスソスソスワゑソス -//対象にステータス異常がある場合のダメージ減算処理ここから +//ソスホ象にスソスeソス[ソス^ソスXソスル常がソスソスソスソスソス鼾ソスフダソスソスソス[ソスWソスソスソスZソスソスソスソスソスソスソスソスソスソスソスソス if(t_sc_data) { cardfix=100; - if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG) //ディフェンダー状態で遠距離攻撃 - cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100; //ディフェンダーによる減衰 + if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG) //ソスfソスBソスtソスFソスソスソス_ソス[ソスソスソスヤで会ソスソスソスソスソスソスUソスソス + cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100; //ソスfソスBソスtソスFソスソスソス_ソス[ソスノゑソスソス骭クソスソス if(cardfix != 100) { - damage=damage*cardfix/100; //ディフェンダー補正によるダメージ減少 - damage2=damage2*cardfix/100; //ディフェンダー補正による左手ダメージ減少 + damage=damage*cardfix/100; //ソスfソスBソスtソスFソスソスソス_ソス[ソス竦ウソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソス + damage2=damage2*cardfix/100; //ソスfソスBソスtソスFソスソスソス_ソス[ソス竦ウソスノゑソスソス骰カソスソスソス_ソスソスソス[ソスWソスソスソスソス } - if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //アスムプティオ + if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //ソスAソスXソスソスソスvソスeソスBソスI if(!map[target->m].flag.pvp){ damage=damage/3; damage2=damage2/3; @@ -3164,71 +3164,71 @@ static struct Damage battle_calc_pc_weapon_attack( } } } -//対象にステータス異常がある場合のダメージ減算処理ここまで +//ソスホ象にスソスeソス[ソス^ソスXソスル常がソスソスソスソスソス鼾ソスフダソスソスソス[ソスWソスソスソスZソスソスソスソスソスソスソスソスソスワゑソス if(damage < 0) damage = 0; if(damage2 < 0) damage2 = 0; - // 属 性の適用 + // ソスソス ソスソスソスフ適ソスp damage=battle_attr_fix(damage,s_ele, battle_get_element(target) ); damage2=battle_attr_fix(damage2,s_ele_, battle_get_element(target) ); - // 星のかけら、気球の適用 + // ソスソスソスフゑソスソスソスソスソスソスAソスCソスソスソスフ適ソスp damage += sd->star; damage2 += sd->star_; damage += sd->spiritball*3; damage2 += sd->spiritball*3; - if(sc_data && sc_data[SC_AURABLADE].timer!=-1){ /* オーラブレード 必中 */ + if(sc_data && sc_data[SC_AURABLADE].timer!=-1){ /* ソスIソス[ソスソスソスuソスソスソス[ソスh ソスKソスソス */ damage += sc_data[SC_AURABLADE].val1 * 10; damage2 += sc_data[SC_AURABLADE].val1 * 10; } - if(skill_num==PA_PRESSURE){ /* プレッシャー 必中? */ + if(skill_num==PA_PRESSURE){ /* ソスvソスソスソスbソスVソスソスソス[ ソスKソスソス? */ damage = 700+100*skill_lv; damage2 = 700+100*skill_lv; } - // >二刀流の左右ダメージ計算誰かやってくれぇぇぇぇえええ! - // >map_session_data に左手ダメージ(atk,atk2)追加して - // >pc_calcstatus()でやるべきかな? - // map_session_data に左手武器(atk,atk2,ele,star,atkmods)追加して - // pc_calcstatus()でデータを入力しています + // >ソス刀暦ソスソスフ搾ソスソスEソス_ソスソスソス[ソスWソスvソスZソスNソスソスソスソスソスソストゑソスソス黷・ソスソスソスソスソスソスソスソスソスソスソスソスソスI + // >map_session_data ソスノ搾ソスソスソスソス_ソスソスソス[ソスW(atk,atk2)ソスヌ会ソスソスソスソス + // >pc_calcstatus()ソスナゑソスソスソスソスラゑソスソスソスソスネ? + // map_session_data ソスノ搾ソスソス阨撰ソスソス(atk,atk2,ele,star,atkmods)ソスヌ会ソスソスソスソス + // pc_calcstatus()ソスナデソス[ソス^ソスソスソスソスソスヘゑソスソストゑソスソスワゑソス - //左手のみ武器装備 + //ソスソスソスソスソスフみ包ソスソス装ソスソス if(sd->weapontype1 == 0 && sd->weapontype2 > 0) { damage = damage2; damage2 = 0; } - // 右手、左手修練の適用 - if(sd->status.weapon > 16) {// 二刀流か? + // ソスEソスソスソスAソスソスソスソスソスCソスソスソスフ適ソスp + if(sd->status.weapon > 16) {// ソス刀暦ソスソスソス? int dmg = damage, dmg2 = damage2; - // 右手修練(60% 〜 100%) 右手全般 + // ソスEソスソスソスCソスソス(60% ソス` 100%) ソスEソスソスソスSソスソス skill = pc_checkskill(sd,AS_RIGHT); damage = damage * (50 + (skill * 10))/100; if(dmg > 0 && damage < 1) damage = 1; - // 左手修練(40% 〜 80%) 左手全般 + // ソスソスソスソスソスCソスソス(40% ソス` 80%) ソスソスソスソスソスSソスソス skill = pc_checkskill(sd,AS_LEFT); damage2 = damage2 * (30 + (skill * 10))/100; if(dmg2 > 0 && damage2 < 1) damage2 = 1; } - else //二刀流でなければ左手ダメージは0 + else //ソス刀暦ソスソスナなゑソスソスソスソスホ搾ソスソスソスソス_ソスソスソス[ソスWソスソス0 damage2 = 0; - // 右手,短剣のみ - if(da == 1) { //ダブルアタックが発動しているか + // ソスEソスソス,ソスZソスソスソスフゑソス + if(da == 1) { //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソスソスソスソスソスソストゑソスソス驍ゥ div_ = 2; damage += damage; type = 0x08; } if(sd->status.weapon == 16) { - // カタール追撃ダメージ + // ソスJソス^ソス[ソスソスソスヌ鯉ソスソス_ソスソスソス[ソスW skill = pc_checkskill(sd,TF_DOUBLE); damage2 = damage * (1 + (skill * 2))/100; if(damage > 0 && damage2 < 1) damage2 = 1; } - // インベナム修正 + // ソスCソスソスソスxソスiソスソスソスCソスソス if(skill_num==TF_POISON){ damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) ); } @@ -3236,14 +3236,14 @@ static struct Damage battle_calc_pc_weapon_attack( damage = battle_attr_fix(damage, 0, battle_get_element(target) ); } - // 完全回避の判定 + // ソスソスソスSソスソスソスソスソスフ費ソスソスソス if(skill_num == 0 && skill_lv >= 0 && tsd!=NULL && div_ < 255 && MRAND(1000) < battle_get_flee2(target) ){ damage=damage2=0; type=0x0b; dmg_lv = ATK_LUCKY; } - // 対象が完全回避をする設定がONなら + // ソスホ象ゑソスソスソスソスSソスソスソスソスソスソスソスソスン定がONソスネゑソス if(battle_config.enemy_perfect_flee) { if(skill_num == 0 && skill_lv >= 0 && tmd!=NULL && div_ < 255 && MRAND(1000) < battle_get_flee2(target) ) { damage=damage2=0; @@ -3252,7 +3252,7 @@ static struct Damage battle_calc_pc_weapon_attack( } } - //MobのModeに頑強フラグが立っているときの処理 + //MobソスソスModeソスノ頑強ソスtソスソスソスOソスソスソスソスソスソストゑソスソスソスソスニゑソスソスフ擾ソスソスソス if(t_mode&0x40){ if(damage > 0) damage = 1; @@ -3260,16 +3260,16 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 = 1; } - //bNoWeaponDamage(設定アイテム無し?)でグランドクロスじゃない場合はダメージが0 + //bNoWeaponDamage(ソスン抵ソスソスAソスCソスeソスソスソスソスソスソスソスH)ソスナグソスソスソスソスソスhソスNソスソスソスXソスソスソスソスソスネゑソスソス鼾ソスヘダソスソスソス[ソスWソスソス0 if( tsd && tsd->special_state.no_weapon_damage && skill_num != CR_GRANDCROSS) damage = damage2 = 0; if(skill_num != CR_GRANDCROSS && (damage > 0 || damage2 > 0) ) { - if(damage2<1) // ダメージ最終修正 + if(damage2<1) // ソス_ソスソスソス[ソスWソスナ終ソスCソスソス damage=battle_calc_damage(src,target,damage,div_,skill_num,skill_lv,flag); - else if(damage<1) // 右手がミス? + else if(damage<1) // ソスEソス閧ェソス~ソスXソスH damage2=battle_calc_damage(src,target,damage2,div_,skill_num,skill_lv,flag); - else { // 両 手/カタールの場合はちょっと計算ややこしい + else { // ソスソス ソスソス/ソスJソス^ソス[ソスソスソスフ場合ソスヘゑソスソスソスソスソスニ計ソスZソスソスソス竄アソスソスソスソス int d1=damage+damage2,d2=damage2; damage=battle_calc_damage(src,target,damage+damage2,div_,skill_num,skill_lv,flag); damage2=(d2*100/d1)*damage/100; @@ -3309,7 +3309,7 @@ static struct Damage battle_calc_pc_weapon_attack( } /*========================================== - * 武器ダメージ計算 + * ソスソスソスソスソス_ソスソスソス[ソスWソスvソスZ *------------------------------------------ */ struct Damage battle_calc_weapon_attack( @@ -3317,7 +3317,7 @@ struct Damage battle_calc_weapon_attack( { struct Damage wd; - //return前の処理があるので情報出力部のみ変更 + //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 if (src == NULL || target == NULL) { nullpo_info(NLP_MARK); memset(&wd,0,sizeof(wd)); @@ -3365,7 +3365,7 @@ struct Damage battle_calc_weapon_attack( } /*========================================== - * 魔法ダメージ計算 + * ソスソスソス@ソス_ソスソスソス[ソスWソスvソスZ *------------------------------------------ */ struct Damage battle_calc_magic_attack( @@ -3382,7 +3382,7 @@ struct Damage battle_calc_magic_attack( struct mob_data *tmd = NULL; - //return前の処理があるので情報出力部のみ変更 + //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 if( bl == NULL || target == NULL ){ nullpo_info(NLP_MARK); memset(&md,0,sizeof(md)); @@ -3413,24 +3413,24 @@ struct Damage battle_calc_magic_attack( aflag=BF_MAGIC|BF_LONG|BF_SKILL; if(skill_num > 0){ - switch(skill_num){ // 基本ダメージ計算(スキルごとに処理) - // ヒールor聖体 + switch(skill_num){ // ソスソスソス{ソス_ソスソスソス[ソスWソスvソスZ(ソスXソスLソスソスソスソスソスニに擾ソスソスソス) + // ソスqソス[ソスソスorソスソスソスソス case AL_HEAL: case PR_BENEDICTIO: damage = skill_calc_heal(bl,skill_lv)/2; normalmagic_flag=0; break; - case PR_ASPERSIO: /* アスペルシオ */ - damage = 40; //固定ダメージ + case PR_ASPERSIO: /* ソスAソスXソスyソスソスソスVソスI */ + damage = 40; //ソスナ抵ソスソス_ソスソスソス[ソスW normalmagic_flag=0; break; - case PR_SANCTUARY: // サンクチュアリ + case PR_SANCTUARY: // ソスTソスソスソスNソス`ソスソスソスAソスソス damage = (skill_lv>6)?388:skill_lv*50; normalmagic_flag=0; blewcount|=0x10000; break; case ALL_RESURRECTION: - case PR_TURNUNDEAD: // 攻撃リザレクションとターンアンデッド + case PR_TURNUNDEAD: // ソスUソスソスソスソスソスUソスソスソスNソスVソスソスソスソスソスニタソス[ソスソスソスAソスソスソスfソスbソスh if(target->type != BL_PC && battle_check_undead(t_race,t_ele)){ int hp, mhp, thres; hp = battle_get_hp(target); @@ -3440,16 +3440,16 @@ struct Damage battle_calc_magic_attack( ((200 - hp * 200 / mhp)); if(thres > 700) thres = 700; // if(battle_config.battle_log) -// printf("ターンアンデッド! 確率%d ‰(千分率)\n", thres); - if(MRAND(1000) < thres && !(t_mode&0x20)) // 成功 +// printf("ソス^ソス[ソスソスソスAソスソスソスfソスbソスhソスI ソスmソスソス%d ソスソス(ソス逡ェソスソス)\n", thres); + if(MRAND(1000) < thres && !(t_mode&0x20)) // ソスソスソスソス damage = hp; - else // 失敗 + else // ソスソスソスs damage = battle_get_lv(bl) + battle_get_int(bl) + skill_lv * 10; } normalmagic_flag=0; break; - case MG_NAPALMBEAT: // ナパームビート(分散計算込み) + case MG_NAPALMBEAT: // ソスiソスpソス[ソスソスソスrソス[ソスgソスiソスソスソスUソスvソスZソスソスソスン) MATK_FIX(70+ skill_lv*10,100); if(flag>0){ MATK_FIX(1,flag); @@ -3458,7 +3458,7 @@ struct Damage battle_calc_magic_attack( printf("battle_calc_magic_attack(): napam enemy count=0 !\n"); } break; - case MG_FIREBALL: // ファイヤーボール + case MG_FIREBALL: // ソスtソス@ソスCソスソスソス[ソス{ソス[ソスソス { const int drate[]={100,90,70}; if(flag>2) @@ -3467,9 +3467,9 @@ struct Damage battle_calc_magic_attack( MATK_FIX( (95+skill_lv*5)*drate[flag] ,10000 ); } break; - case MG_FIREWALL: // ファイヤーウォール + case MG_FIREWALL: // ソスtソス@ソスCソスソスソス[ソスEソスHソス[ソスソス /* - if( (t_ele!=3 && !battle_check_undead(t_race,t_ele)) || target->type==BL_PC ) //PCは火属性でも飛ぶ?そもそもダメージ受ける? + if( (t_ele!=3 && !battle_check_undead(t_race,t_ele)) || target->type==BL_PC ) //PCソスヘ火托ソスソスソスソスナゑソスソスソスソスヤ?ソスソスソスソスソスソスソス_ソスソスソス[ソスWソスけゑソスソスH blewcount |= 0x10000; else blewcount = 0; @@ -3480,18 +3480,18 @@ struct Damage battle_calc_magic_attack( blewcount |= 0x10000; MATK_FIX( 1,2 ); break; - case MG_THUNDERSTORM: // サンダーストーム + case MG_THUNDERSTORM: // ソスTソスソスソス_ソス[ソスXソスgソス[ソスソス MATK_FIX( 80,100 ); break; - case MG_FROSTDIVER: // フロストダイバ + case MG_FROSTDIVER: // ソスtソスソスソスXソスgソス_ソスCソスo MATK_FIX( 100+skill_lv*10, 100); break; - case WZ_FROSTNOVA: // フロストダイバ + case WZ_FROSTNOVA: // ソスtソスソスソスXソスgソス_ソスCソスo MATK_FIX( ((100+skill_lv*10)*(2/3)), 100); break; - case WZ_FIREPILLAR: // ファイヤーピラー + case WZ_FIREPILLAR: // ソスtソス@ソスCソスソスソス[ソスsソスソスソス[ if(mdef1 < 1000000) - mdef1=mdef2=0; // MDEF無視 + mdef1=mdef2=0; // MDEFソスソスソスソス MATK_FIX( 1,5 ); matk1+=50; matk2+=50; @@ -3500,26 +3500,26 @@ struct Damage battle_calc_magic_attack( MATK_FIX( 100+skill_lv*20, 100); break; case WZ_METEOR: - case WZ_JUPITEL: // ユピテルサンダー + case WZ_JUPITEL: // ソスソスソスsソスeソスソスソスTソスソスソス_ソス[ break; - case WZ_VERMILION: // ロードオブバーミリオン + case WZ_VERMILION: // ソスソスソス[ソスhソスIソスuソスoソス[ソス~ソスソスソスIソスソス MATK_FIX( skill_lv*20+80, 100 ); break; - case WZ_WATERBALL: // ウォーターボール + case WZ_WATERBALL: // ソスEソスHソス[ソス^ソス[ソス{ソス[ソスソス matk1+= skill_lv*30; matk2+= skill_lv*30; break; - case WZ_STORMGUST: // ストームガスト + case WZ_STORMGUST: // ソスXソスgソス[ソスソスソスKソスXソスg MATK_FIX( skill_lv*40+100 ,100 ); blewcount|=0x10000; break; - case AL_HOLYLIGHT: // ホーリーライト + case AL_HOLYLIGHT: // ソスzソス[ソスソスソス[ソスソスソスCソスg MATK_FIX( 125,100 ); break; case AL_RUWACH: MATK_FIX( 145,100 ); break; - case HW_NAPALMVULCAN: // ナパームビート(分散計算込み) + case HW_NAPALMVULCAN: // ソスiソスpソス[ソスソスソスrソス[ソスgソスiソスソスソスUソスvソスZソスソスソスン) MATK_FIX(70+ skill_lv*10,100); if(flag>0){ MATK_FIX(1,flag); @@ -3531,7 +3531,7 @@ struct Damage battle_calc_magic_attack( } } - if(normalmagic_flag){ // 一般魔法ダメージ計算 + if(normalmagic_flag){ // ソスソスソスハ厄ソスソス@ソス_ソスソスソス[ソスWソスvソスZ int imdef_flag=0; if(matk1>matk2) damage= matk2+MRAND((matk1-matk2+1)); @@ -3583,8 +3583,8 @@ struct Damage battle_calc_magic_attack( if( tsd ){ int s_class = battle_get_class(bl); cardfix=100; - cardfix=cardfix*(100-tsd->subele[ele])/100; // 属 性によるダメージ耐性 - cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subele[ele])/100; // ソスソス ソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subrace[race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス cardfix=cardfix*(100-tsd->magic_subrace[race])/100; if(battle_get_mode(bl) & 0x20) cardfix=cardfix*(100-tsd->magic_subrace[10])/100; @@ -3601,14 +3601,14 @@ struct Damage battle_calc_magic_attack( } if(damage < 0) damage = 0; - damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // 属 性修正 + damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // ソスソス ソスソスソスCソスソス - if(skill_num == CR_GRANDCROSS) { // グランドクロス + if(skill_num == CR_GRANDCROSS) { // ソスOソスソスソスソスソスhソスNソスソスソスX struct Damage wd; wd=battle_calc_weapon_attack(bl,target,skill_num,skill_lv,flag); damage = (damage + wd.damage) * (100 + 40*skill_lv)/100; - if(battle_config.gx_dupele) damage=battle_attr_fix(damage, ele, battle_get_element(target) ); //属性2回かかる - if(bl==target) damage=damage/2; //反動は半分 + if(battle_config.gx_dupele) damage=battle_attr_fix(damage, ele, battle_get_element(target) ); //ソスソスソスソス2ソスかゑソスソスソス + if(bl==target) damage=damage/2; //ソスソスソスソスソスヘ費ソスソスソス } div_=skill_get_num( skill_num,skill_lv ); @@ -3625,10 +3625,10 @@ struct Damage battle_calc_magic_attack( if ((map[target->m].flag.pvp || map[target->m].flag.gvg) && target->type==BL_PC) damage = (damage * (100 - battle_config.gtb_pvp_only)) / 100; } else - damage=0; // 黄 金蟲カード(魔法ダメージ0) + damage=0; // ソスソス ソスソス蟲カソス[ソスhソスiソスソスソス@ソス_ソスソスソス[ソスWソスOソスj } - damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // 最終修正 + damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // ソスナ終ソスCソスソス /* magic_damage_return by [AppleGirl] and [Valaris] */ if( target->type==BL_PC && tsd && tsd->magic_damage_return > 0 ){ @@ -3652,7 +3652,7 @@ struct Damage battle_calc_magic_attack( } /*========================================== - * その他ダメージ計算 + * ソスソスソスフ托ソスソス_ソスソスソス[ソスWソスvソスZ *------------------------------------------ */ struct Damage battle_calc_misc_attack( @@ -3669,7 +3669,7 @@ struct Damage battle_calc_misc_attack( int aflag=BF_MISC|BF_LONG|BF_SKILL; - //return前の処理があるので情報出力部のみ変更 + //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 if( bl == NULL || target == NULL ){ nullpo_info(NLP_MARK); memset(&md,0,sizeof(md)); @@ -3686,19 +3686,19 @@ struct Damage battle_calc_misc_attack( switch(skill_num){ - case HT_LANDMINE: // ランドマイン + case HT_LANDMINE: // ソスソスソスソスソスhソス}ソスCソスソス damage=skill_lv*(dex+75)*(100+int_)/100; break; - case HT_BLASTMINE: // ブラストマイン + case HT_BLASTMINE: // ソスuソスソスソスXソスgソス}ソスCソスソス damage=skill_lv*(dex/2+50)*(100+int_)/100; break; - case HT_CLAYMORETRAP: // クレイモアートラップ + case HT_CLAYMORETRAP: // ソスNソスソスソスCソスソスソスAソス[ソスgソスソスソスbソスv damage=skill_lv*(dex/2+75)*(100+int_)/100; break; - case HT_BLITZBEAT: // ブリッツビート + case HT_BLITZBEAT: // ソスuソスソスソスbソスcソスrソス[ソスg if( sd==NULL || (skill = pc_checkskill(sd,HT_STEELCROW)) <= 0) skill=0; damage=(dex/10+int_/2+skill*3+40)*2; @@ -3706,21 +3706,21 @@ struct Damage battle_calc_misc_attack( damage /= flag; break; - case TF_THROWSTONE: // 石投げ + case TF_THROWSTONE: // ソスホ難ソスソスソス damage=30; damagefix=0; break; - case BA_DISSONANCE: // 不協和音 + case BA_DISSONANCE: // ソスsソスソスソスaソスソス damage=(skill_lv)*20+pc_checkskill(sd,BA_MUSICALLESSON)*3; break; - case NPC_SELFDESTRUCTION: // 自爆 + case NPC_SELFDESTRUCTION: // ソスソスソスソス damage=battle_get_hp(bl)-(bl==target?1:0); damagefix=0; break; - case NPC_SMOKING: // タバコを吸う + case NPC_SMOKING: // ソス^ソスoソスRソスソスソスzソスソス damage=3; damagefix=0; break; @@ -3739,7 +3739,7 @@ struct Damage battle_calc_misc_attack( } } break; - case SN_FALCONASSAULT: /* ファルコンアサルト */ + case SN_FALCONASSAULT: /* ソスtソス@ソスソスソスRソスソスソスAソスTソスソスソスg */ skill = pc_checkskill(sd,HT_BLITZBEAT); damage=(100+50*skill_lv+(dex/10+int_/2+skill*3+40)*2); break; @@ -3754,13 +3754,13 @@ struct Damage battle_calc_misc_attack( if( tsd ){ cardfix=100; - cardfix=cardfix*(100-tsd->subele[ele])/100; // 属性によるダメージ耐性 - cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subele[ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subrace[race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス cardfix=cardfix*(100-tsd->misc_def_rate)/100; damage=damage*cardfix/100; } if(damage < 0) damage = 0; - damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // 属性修正 + damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // ソスソスソスソスソスCソスソス } div_=skill_get_num( skill_num,skill_lv ); @@ -3771,7 +3771,7 @@ struct Damage battle_calc_misc_attack( damage = div_; } - damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // 最終修正 + damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // ソスナ終ソスCソスソス md.damage=damage; md.div_=div_; @@ -3785,7 +3785,7 @@ struct Damage battle_calc_misc_attack( } /*========================================== - * ダメージ計算一括処理用 + * ソス_ソスソスソス[ソスWソスvソスZソス鼕ソスソスソスソスソスp *------------------------------------------ */ struct Damage battle_calc_attack( int attack_type, @@ -3809,7 +3809,7 @@ struct Damage battle_calc_attack( int attack_type, return d; } /*========================================== - * 通常攻撃処理まとめ + * ソスハ擾ソスソスUソスソスソスソスソスソスソスワとゑソス *------------------------------------------ */ int battle_weapon_attack( struct block_list *src,struct block_list *target, @@ -3849,7 +3849,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, ele = battle_get_elem_type(target); if(battle_check_target(src,target,BCT_ENEMY) > 0 && battle_check_range(src,target,0)){ - // 攻撃対象となりうるので攻撃 + // ソスUソスソスソスホ象となりうソスソスソスフで攻ソスソス if(sd && sd->status.weapon == 11) { if(sd->equip_index[10] >= 0) { if(battle_config.arrow_decrement) @@ -3910,12 +3910,12 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, clif_damage(src,src,tick, wd.amotion,0,rdamage,1,4,0); } - if (wd.div_ == 255 && sd) { //三段掌 + if (wd.div_ == 255 && sd) { //ソスOソスiソスソス int delay = 1000 - 4 * battle_get_agi(src) - 2 * battle_get_dex(src); int skilllv; if(wd.damage+wd.damage2 < battle_get_hp(target)) { if((skilllv = pc_checkskill(sd, MO_CHAINCOMBO)) > 0) - delay += 300 * battle_config.combo_delay_rate /100; //追加ディレイをconfにより調整 + delay += 300 * battle_config.combo_delay_rate /100; //ソスヌ会ソスfソスBソスソスソスCソスソスconfソスノゑソスソス闥イソスソス skill_status_change_start(src,SC_COMBO,MO_TRIPLEATTACK,skilllv,0,0,delay,0); } @@ -3927,7 +3927,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, else { clif_damage(src,target,tick, wd.amotion, wd.dmotion, wd.damage, wd.div_ , wd.type, wd.damage2); - //二刀流左手とカタール追撃のミス表示(無理やり〜) + //ソス刀暦ソスソスソスソスソスソスニカソス^ソス[ソスソスソスヌ鯉ソスソスフミソスXソス\ソスソス(ソスソスソスソスソスソスソスソスソス`) if(sd && sd->status.weapon >= 16 && wd.damage2 == 0) clif_damage(src,target,tick+10, wd.amotion, wd.dmotion,0, 1, 0, 0); } @@ -3972,7 +3972,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, case 0: case 2: f = skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); break; - case 1:/* 支援系 */ + case 1:/* ソスxソスソスソスn */ if((sc_data[SC_AUTOSPELL].val2==AL_HEAL || (sc_data[SC_AUTOSPELL].val2==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele)) f = skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); else @@ -3991,7 +3991,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, case 0: case 2: skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); break; - case 1:/* 支援系 */ + case 1:/* ソスxソスソスソスn */ if((sc_data[SC_AUTOSPELL].val2==AL_HEAL || (sc_data[SC_AUTOSPELL].val2==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele)) skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); else @@ -4017,7 +4017,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, case 0: case 2: f = skill_castend_damage_id(src,target,sd->autospell_id,skilllv,tick,flag); break; - case 1:/* 支援系 */ + case 1:/* ソスxソスソスソスn */ if((sd->autospell_id==AL_HEAL || (sd->autospell_id==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele)) f = skill_castend_damage_id(src,target,sd->autospell_id,skilllv,tick,flag); else @@ -4067,7 +4067,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, skill_status_change_start(src,SC_BLADESTOP,lv,1,(int)src,(int)target,skill_get_time2(MO_BLADESTOP,lv),0); skill_status_change_start(target,SC_BLADESTOP,lv,2,(int)target,(int)src,skill_get_time2(MO_BLADESTOP,lv),0); } - if(t_sc_data && t_sc_data[SC_SPLASHER].timer!=-1) //殴ったので対象のベナムスプラッシャー状態を解除 + if(t_sc_data && t_sc_data[SC_SPLASHER].timer!=-1) //ソスソスソスソスソスソスフで対象のベソスiソスソスソスXソスvソスソスソスbソスVソスソスソス[ソスソスソスヤゑソスソスソスソスソス skill_status_change_end(target,SC_SPLASHER,-1); map_freeblock_unlock(); @@ -4093,12 +4093,12 @@ int battle_check_undead(int race,int element) } /*========================================== - * 敵味方判定(1=肯定,0=否定,-1=エラー) - * flag&0xf0000 = 0x00000:敵じゃないか判定(ret:1=敵ではない) - * = 0x10000:パーティー判定(ret:1=パーティーメンバ) - * = 0x20000:全て(ret:1=敵味方両方) - * = 0x40000:敵か判定(ret:1=敵) - * = 0x50000:パーティーじゃないか判定(ret:1=パーティでない) + * ソスGソスソスソスソスソスソスソスソス(1=ソスmソスソス,0=ソスロ抵ソス,-1=ソスGソスソスソス[) + * flag&0xf0000 = 0x00000:ソスGソスソスソスソスソスネゑソスソスソスソスソスソスソスソスiret:1ソスソスソスGソスナはなゑソスソスj + * = 0x10000:ソスpソス[ソスeソスBソス[ソスソスソスソスソスiret:1=ソスpソス[ソスeソスBソス[ソスソスソスソスソスo) + * = 0x20000:ソスSソスソス(ret:1=ソスGソスソスソスソスソスソスソスソス) + * = 0x40000:ソスGソスソスソスソスソスソス(ret:1=ソスG) + * = 0x50000:ソスpソス[ソスeソスBソス[ソスソスソスソスソスネゑソスソスソスソスソスソスソス(ret:1=ソスpソス[ソスeソスBソスナなゑソス) *------------------------------------------ */ int battle_check_target( struct block_list *src, struct block_list *target,int flag) @@ -4109,7 +4109,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f nullpo_retr(0, src); nullpo_retr(0, target); - if( flag&0x40000 ){ // 反転フラグ + if( flag&0x40000 ){ // ソスソスソス]ソスtソスソスソスO int ret=battle_check_target(src,target,flag&0x30000); if(ret!=-1) return !ret; @@ -4123,7 +4123,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f return -1; } - if(src->type == BL_SKILL && target->type == BL_SKILL) // 対象がスキルユニットなら無条件肯定 + if(src->type == BL_SKILL && target->type == BL_SKILL) // ソスホ象ゑソスソスXソスLソスソスソスソスソスjソスbソスgソスネら無ソスソスmソスソス return -1; if(target->type == BL_PC && ((struct map_session_data *)target)->invincible_timer != -1) @@ -4139,7 +4139,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } } - // スキルユニットの場合、親を求める + // ソスXソスLソスソスソスソスソスjソスbソスgソスフ場合ソスAソスeソスソス゚ゑソス if( src->type==BL_SKILL) { int inf2 = skill_get_inf2(((struct skill_unit *)src)->group->skill_id); if( (ss=map_id2bl( ((struct skill_unit *)src)->group->src_id))==NULL ) @@ -4157,19 +4157,19 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f return -1; } } - // Mobでmaster_idがあってspecial_mob_aiなら、召喚主を求める + // Mobソスソスmaster_idソスソスソスソスソスソスソスspecial_mob_aiソスネゑソスソスAソスソスソスソスソスソスソスソス゚ゑソス if( src->type==BL_MOB ){ struct mob_data *md=(struct mob_data *)src; if(md && md->master_id>0){ - if(md->master_id==target->id) // 主なら肯定 + if(md->master_id==target->id) // ソスソスソスネゑソスソスmソスソス return 1; if(md->state.special_mob_ai){ - if(target->type==BL_MOB){ //special_mob_aiで対象がMob + if(target->type==BL_MOB){ //special_mob_aiソスナ対象ゑソスMob struct mob_data *tmd=(struct mob_data *)target; if(tmd){ - if(tmd->master_id != md->master_id) //召喚主が一緒でなければ否定 + if(tmd->master_id != md->master_id) //ソスソスソスソスソス蛯ェソス齒擾ソスナなゑソスソスソスソスホ否抵ソス return 0; - else{ //召喚主が一緒なので肯定したいけど自爆は否定 + else{ //ソスソスソスソスソス蛯ェソス齒擾ソスネので肯ソス閧オソスソスソスソスソスソスソスヌ趣ソスソスソスソスヘ否抵ソス if(md->state.special_mob_ai>2) return 0; else @@ -4183,19 +4183,19 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } } - if( src==target || ss==target ) // 同じなら肯定 + if( src==target || ss==target ) // ソスソスソスソスソスネゑソスソスmソスソス return 1; if(target->type == BL_PC && pc_isinvisible((struct map_session_data *)target)) return -1; - if( src->prev==NULL || // 死んでるならエラー + if( src->prev==NULL || // ソスソスソスソスソスナゑソスソスネゑソスソスGソスソスソス[ (src->type==BL_PC && pc_isdead((struct map_session_data *)src) ) ) return -1; if( (ss->type == BL_PC && target->type==BL_MOB) || (ss->type == BL_MOB && target->type==BL_PC) ) - return 0; // PCvsMOBなら否定 + return 0; // PCvsMOBソスネゑソスソスロ抵ソス s_p=battle_get_party_id(ss); s_g=battle_get_guild_id(ss); @@ -4204,19 +4204,19 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f t_g=battle_get_guild_id(target); if(flag&0x10000) { - if(s_p && t_p && s_p == t_p) // 同じパーティなら肯定(味方) + if(s_p && t_p && s_p == t_p) // ソスソスソスソスソスpソス[ソスeソスBソスネゑソスソスmソスソスソスiソスソスソスソスソスj return 1; - else // パーティ検索なら同じパーティじゃない時点で否定 + else // ソスpソス[ソスeソスBソスソスソスソスソスネら同ソスソスソスpソス[ソスeソスBソスソスソスソスソスネゑソスソスソスソス_ソスナ否抵ソス return 0; } - if(ss->type == BL_MOB && s_g > 0 && t_g > 0 && s_g == t_g ) // 同じギルド/mobクラスなら肯定(味方) + if(ss->type == BL_MOB && s_g > 0 && t_g > 0 && s_g == t_g ) // ソスソスソスソスソスMソスソスソスh/mobソスNソスソスソスXソスネゑソスソスmソスソスソスiソスソスソスソスソスj return 1; //printf("ss:%d src:%d target:%d flag:0x%x %d %d ",ss->id,src->id,target->id,flag,src->type,target->type); //printf("p:%d %d g:%d %d\n",s_p,t_p,s_g,t_g); - if( ss->type==BL_PC && target->type==BL_PC) { // 両方PVPモードなら否定(敵) + if( ss->type==BL_PC && target->type==BL_PC) { // ソスソスソスソスPVPソスソスソス[ソスhソスネゑソスソスロ抵ソスソスiソスGソスj struct skill_unit *su=NULL; if(src->type==BL_SKILL) su=(struct skill_unit *)src; @@ -4244,9 +4244,9 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f for(i=0;ialliance[i].guild_id > 0 && g->alliance[i].guild_id == t_g) { if(g->alliance[i].opposition) - return 0;//敵対ギルドなら無条件に敵 + return 0;//ソスGソスホギソスソスソスhソスネら無ソスソスノ敵 else - return 1;//同盟ギルドなら無条件に味方 + return 1;//ソスソスソスソスソスMソスソスソスhソスネら無ソスソスノ厄ソスソスソス } } } @@ -4254,10 +4254,10 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } } - return 1; // 該当しないので無関係人物(まあ敵じゃないので味方) + return 1; // ソスYソスソスソスソスソスネゑソスソスフで厄ソスソスヨ係ソスlソスソスソスiソスワゑソスソスGソスソスソスソスソスネゑソスソスフで厄ソスソスソスソスj } /*========================================== - * 射程判定 + * ソスヒ抵ソスソス *------------------------------------------ */ int battle_check_range(struct block_list *src,struct block_list *bl,int range) @@ -4274,19 +4274,19 @@ int battle_check_range(struct block_list *src,struct block_list *bl,int range) dy=abs(bl->y-src->y); arange=((dx>dy)?dx:dy); - if(src->m != bl->m) // 違うマップ + if(src->m != bl->m) // ソス痰、ソス}ソスbソスv return 0; - if( range>0 && range < arange ) // 遠すぎる + if( range>0 && range < arange ) // ソスソスソスソスソスソスソスソス return 0; - if( arange<2 ) // 同じマスか隣接 + if( arange<2 ) // ソスソスソスソスソス}ソスXソスソスソスラ撰ソス return 1; // if(bl->type == BL_SKILL && ((struct skill_unit *)bl)->group->unit_id == 0x8d) // return 1; - // 障害物判定 + // ソスソスソスQソスソスソスソスソスソス wpd.path_len=0; wpd.path_pos=0; wpd.path_half=0; @@ -4301,7 +4301,7 @@ int battle_check_range(struct block_list *src,struct block_list *bl,int range) /*========================================== * Return numerical value of a switch configuration (modified by [Yor]) - * on/off, english, fran軋is, deutsch, espaol + * on/off, english, franソスais, deutsch, espaソスol *------------------------------------------ */ int battle_config_switch(const char *str) { @@ -4312,7 +4312,7 @@ int battle_config_switch(const char *str) { return atoi(str); } /*========================================== - * 設定ファイルを読み込む + * ソスン抵ソスソスtソス@ソスCソスソスソスソスソスヌみ搾ソスソスソス *------------------------------------------ */ int battle_config_read(const char *cfgName) @@ -4520,6 +4520,11 @@ int battle_config_read(const char *cfgName) battle_config.chat_spam_ban = 1; battle_config.chat_spam_warn = 8; battle_config.chat_maxline = 255; + + battle_config.trade_spam_threshold = 10; + battle_config.trade_spam_flood = 10; + battle_config.trade_spam_ban = 1; + battle_config.trade_spam_warn = 8; } fp = fopen(cfgName,"r"); @@ -4722,12 +4727,16 @@ int battle_config_read(const char *cfgName) { "castrate_dex_scale", &battle_config.castrate_dex_scale }, // added by [MouseJstr] { "area_size", &battle_config.area_size }, // added by [MouseJstr] { "muting_players", &battle_config.muting_players}, // added by [Apple] - { "chat_lame_penalty", &battle_config.chat_lame_penalty }, - { "chat_spam_threshold", &battle_config.chat_spam_threshold }, - { "chat_spam_flood", &battle_config.chat_spam_flood }, - { "chat_spam_ban", &battle_config.chat_spam_ban }, - { "chat_spam_warn", &battle_config.chat_spam_warn }, - { "chat_maxline", &battle_config.chat_maxline } + { "chat_lame_penalty", &battle_config.chat_lame_penalty }, + { "chat_spam_threshold", &battle_config.chat_spam_threshold }, + { "chat_spam_flood", &battle_config.chat_spam_flood }, + { "chat_spam_ban", &battle_config.chat_spam_ban }, + { "chat_spam_warn", &battle_config.chat_spam_warn }, + { "chat_maxline", &battle_config.chat_maxline }, + { "trade_spam_threshold", &battle_config.trade_spam_threshold }, + { "trade_spam_flood", &battle_config.trade_spam_flood }, + { "trade_spam_ban", &battle_config.trade_spam_ban }, + { "trade_spam_warn", &battle_config.trade_spam_warn } }; if (line[0] == '/' && line[1] == '/') @@ -4868,6 +4877,25 @@ int battle_config_read(const char *cfgName) else if (battle_config.chat_maxline > 512) battle_config.chat_maxline = 512; + if (battle_config.trade_spam_ban < 0) + battle_config.trade_spam_ban = 0; + else if (battle_config.trade_spam_ban > 32767) + battle_config.trade_spam_ban = 32767; + + if (battle_config.trade_spam_flood < 0) + battle_config.trade_spam_flood = 0; + else if (battle_config.trade_spam_flood > 32767) + battle_config.trade_spam_flood = 32767; + + if (battle_config.trade_spam_warn < 0) + battle_config.trade_spam_warn = 0; + else if (battle_config.trade_spam_warn > 32767) + battle_config.trade_spam_warn = 32767; + + if (battle_config.trade_spam_threshold < 0) + battle_config.trade_spam_threshold = 0; + else if (battle_config.trade_spam_threshold > 32767) + battle_config.trade_spam_threshold = 32767; // at least 1 client must be accepted if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor] diff --git a/src/map/battle.h b/src/map/battle.h index 3c46586..3a0c380 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -2,24 +2,24 @@ #ifndef _BATTLE_H_ #define _BATTLE_H_ -// ダメージ +// ソス_ソスソスソス[ソスW struct Damage { int damage,damage2; int type,div_; int amotion,dmotion; int blewcount; int flag; - int dmg_lv; //囲まれ減算計算用 0:スキル攻撃 ATK_LUCKY,ATK_FLEE,ATK_DEF + int dmg_lv; //ソスヘまれ減ソスZソスvソスZソスpソス@0:ソスXソスLソスソスソスUソスソス ATK_LUCKY,ATK_FLEE,ATK_DEF }; -// 属性表(読み込みはpc.c、battle_attr_fixで使用) +// ソスソスソスソスソス\ソスiソスヌみ搾ソスソスンゑソスpc.cソスAbattle_attr_fixソスナ使ソスpソスj extern int attr_fix_table[4][10][10]; struct map_session_data; struct mob_data; struct block_list; -// ダメージ計算 +// ソス_ソスソスソス[ソスWソスvソスZ struct Damage battle_calc_attack( int attack_type, struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag); @@ -30,12 +30,12 @@ struct Damage battle_calc_magic_attack( struct Damage battle_calc_misc_attack( struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag); -// 属性修正計算 +// ソスソスソスソスソスCソスソスソスvソスZ int battle_attr_fix(int damage,int atk_elem,int def_elem); -// ダメージ最終計算 +// ソス_ソスソスソス[ソスWソスナ終ソスvソスZ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag); -enum { // 最終計算のフラグ +enum { // ソスナ終ソスvソスZソスフフソスソスソスO BF_WEAPON = 0x0001, BF_MAGIC = 0x0002, BF_MISC = 0x0004, @@ -48,20 +48,20 @@ enum { // BF_SKILLMASK= 0x0f00, }; -// 実際にHPを増減 +// ソスソスロゑソスHPソス増鯉ソス int battle_delay_damage(unsigned int tick,struct block_list *src,struct block_list *target,int damage,int flag); int battle_damage(struct block_list *bl,struct block_list *target,int damage,int flag); int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,int flag); -// 攻撃や移動を止める +// ソスUソスソスソスソスソスレ難ソスソスソスソス~ソス゚ゑソス int battle_stopattack(struct block_list *bl); int battle_stopwalking(struct block_list *bl,int type); -// 通常攻撃処理まとめ +// ソスハ擾ソスソスUソスソスソスソスソスソスソスワとゑソス int battle_weapon_attack( struct block_list *bl,struct block_list *target, unsigned int tick,int flag); -// 各種パラメータを得る +// ソスeソスソスソスpソスソスソスソスソス[ソス^ソス得ゑソス int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv); int battle_get_class(struct block_list *bl); int battle_get_dir(struct block_list *bl); @@ -91,7 +91,7 @@ int battle_get_amotion(struct block_list *bl); int battle_get_dmotion(struct block_list *bl); int battle_get_element(struct block_list *bl); int battle_get_attack_element(struct block_list *bl); -int battle_get_attack_element2(struct block_list *bl); //左手武器属性取得 +int battle_get_attack_element2(struct block_list *bl); //ソスソスソス阨撰ソス属ソスソスソス謫セ #define battle_get_elem_type(bl) (battle_get_element(bl)%10) #define battle_get_elem_level(bl) (battle_get_element(bl)/10/2) int battle_get_party_id(struct block_list *bl); @@ -122,7 +122,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f int battle_check_range(struct block_list *src,struct block_list *bl,int range); -// 設定 +// ソスン抵ソス int battle_config_switch(const char *str); // [Valaris] @@ -318,6 +318,11 @@ extern struct Battle_Config { int chat_spam_ban; int chat_spam_warn; int chat_maxline; + + int trade_spam_threshold; + int trade_spam_flood; + int trade_spam_ban; + int trade_spam_warn; int drop_pickup_safety_zone; // [Fate] Max. distance to an object dropped by a kill by self in which dropsteal protection works diff --git a/src/map/clif.c b/src/map/clif.c index d10effb..1f88ed8 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7084,7 +7084,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) nullpo_retv(sd); if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){ - tmw_CheckChatSpam(sd, NULL); + tmw_CheckTradeSpam(sd); trade_traderequest(sd,RFIFOL(sd->fd,2)); } else clif_skill_fail(sd,1,0,0); diff --git a/src/map/map.h b/src/map/map.h index 7275734..1cdcc2f 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -273,8 +273,8 @@ struct map_session_data { int castrate,hprate,sprate,dsprate; int addele[10],addrace[12],addsize[3],subele[10],subrace[12]; int addeff[10],addeff2[10],reseff[10]; - int watk_,watk_2,atkmods_[3],addele_[10],addrace_[12],addsize_[3]; //二刀流のために追加 - int atk_ele_,star_,overrefine_; //二刀流のために追加 + int watk_,watk_2,atkmods_[3],addele_[10],addrace_[12],addsize_[3]; //ソス刀暦ソスソスフゑソスソス゚に追会ソス + int atk_ele_,star_,overrefine_; //ソス刀暦ソスソスフゑソスソス゚に追会ソス int base_atk,atk_rate; int arrow_atk,arrow_ele,arrow_cri,arrow_hit,arrow_range; int arrow_addele[10],arrow_addrace[12],arrow_addsize[3],arrow_addeff[10],arrow_addeff2[10]; @@ -358,6 +358,9 @@ struct map_session_data { time_t chat_reset_due; int chat_lines_in; char chat_lastmsg[513]; + + time_t trade_reset_due; + int trades_in; }; struct npc_timerevent_list { @@ -400,7 +403,7 @@ struct npc_data { } warp; char *message; // for MESSAGE: only send this message } u; - // ここにメンバを追加してはならない(shop_itemが可変長の為) + // ソスソスソスソスソスノソスソスソスソスoソスソスソスヌ会ソスソスソストはなゑソスソスネゑソス(shop_itemソスソスソスツ変抵ソスソスフ茨ソス) char eventqueue[MAX_EVENTQUEUE][50]; int eventtimer[MAX_EVENTTIMER]; @@ -493,12 +496,12 @@ enum { MS_IDLE,MS_WALK,MS_ATTACK,MS_DEAD,MS_DELAY }; enum { NONE_ATTACKABLE,ATTACKABLE }; -enum { ATK_LUCKY=1,ATK_FLEE,ATK_DEF}; // 囲まれペナルティ計算用 +enum { ATK_LUCKY=1,ATK_FLEE,ATK_DEF}; // ソスヘまゑソスソスyソスiソスソスソスeソスBソスvソスZソスp struct map_data { char name[24]; char alias[24]; // [MouseJstr] - unsigned char *gat; // NULLなら下のmap_data_other_serverとして扱う + unsigned char *gat; // NULLソスネら下ソスソスmap_data_other_serverソスニゑソスソスト茨ソスソスソス struct block_list **block; struct block_list **block_mob; int *block_count,*block_mob_count; @@ -546,7 +549,7 @@ struct map_data { }; struct map_data_other_server { char name[24]; - unsigned char *gat; // NULL固定にして判断 + unsigned char *gat; // NULLソスナ抵ソスソスノゑソスソスト費ソスソスf unsigned long ip; unsigned int port; }; @@ -649,14 +652,14 @@ extern char talkie_mes[]; extern char wisp_server_name[]; -// 鯖全体情報 +// ソスIソスSソスフ擾ソスソスソス void map_setusers(int); int map_getusers(void); -// block削除関連 +// blockソス除ソスヨ連 int map_freeblock( void *bl ); int map_freeblock_lock(void); int map_freeblock_unlock(void); -// block関連 +// blockソスヨ連 int map_addblock(struct block_list *); int map_delblock(struct block_list *); void map_foreachinarea(int (*)(struct block_list*,va_list),int,int,int,int,int,int,...); @@ -664,9 +667,9 @@ void map_foreachinarea(int (*)(struct block_list*,va_list),int,int,int,int,int,i void map_foreachincell(int (*)(struct block_list*,va_list),int,int,int,int,...); void map_foreachinmovearea(int (*)(struct block_list*,va_list),int,int,int,int,int,int,int,int,...); int map_countnearpc(int,int,int); -//block関連に追加 +//blockソスヨ連ソスノ追会ソス int map_count_oncell(int m,int x,int y); -// 一時的object関連 +// ソス齊橸ソスIobjectソスヨ連 int map_addobject(struct block_list *); int map_delobject(int, int type); int map_delobjectnofree(int id, int type); @@ -676,7 +679,7 @@ int map_quit(struct map_session_data *); // npc int map_addnpc(int,struct npc_data *); -// 床アイテム関連 +// ソスソスソスAソスCソスeソスソスソスヨ連 int map_clearflooritem_timer(int,unsigned int,int,int); #define map_clearflooritem(id) map_clearflooritem_timer(0,0,id,1) int map_addflooritem_any(struct item *,int amount,int m,int x,int y, @@ -686,7 +689,7 @@ int map_addflooritem_any(struct item *,int amount,int m,int x,int y, int map_addflooritem(struct item *,int,int,int,int,struct map_session_data *,struct map_session_data *,struct map_session_data *,int); int map_searchrandfreecell(int,int,int,int); -// キャラid=>キャラ名 変換関連 +// ソスLソスソスソスソスidソスソスソスソスソスLソスソスソスソスソスソス ソスマ奇ソスソスヨ連 void map_addchariddb(int charid,char *name); void map_delchariddb(int charid); int map_reqchariddb(struct map_session_data * sd,int charid); @@ -711,15 +714,15 @@ struct map_session_data * map_get_last_session(); struct map_session_data * map_get_next_session(struct map_session_data *current); struct map_session_data * map_get_prev_session(struct map_session_data *current); -// gat関連 +// gatソスヨ連 int map_getcell(int,int,int); int map_setcell(int,int,int,int); -// その他 +// ソスソスソスフ托ソス int map_check_dir(int s_dir,int t_dir); int map_calc_dir( struct block_list *src,int x,int y); -// path.cより +// path.cソスソスソスソス int path_search(struct walkpath_data*,int,int,int,int,int,int); int path_blownpos(int m,int x0,int y0,int dx,int dy,int count); diff --git a/src/map/pc.c b/src/map/pc.c index 630a15b..b3626df 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -815,6 +815,8 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, short tmw_versio sd->chat_reset_due = sd->chat_lines_in = 0; sd->chat_lastmsg[0] = '\0'; + + sd->trade_reset_due = sd->trades_in = 0; // message of the limited time of the account if (connect_until_time != 0) { // don't display if it's unlimited or unknow value diff --git a/src/map/tmw.c b/src/map/tmw.c index ba02189..5d4c991 100644 --- a/src/map/tmw.c +++ b/src/map/tmw.c @@ -116,3 +116,36 @@ void tmw_GmHackMsg(const char *fmt, ...) { intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, outbuf, strlen(outbuf) + 1); } + +int tmw_CheckTradeSpam(struct map_session_data *sd) { + nullpo_retr(1, sd); + time_t now = time(NULL); + + if (pc_isGM(sd)) return 0; + + if (now > sd->trade_reset_due) { + sd->trade_reset_due = now + battle_config.trade_spam_threshold; + sd->trades_in = 0; + } + + sd->trades_in++; + + if (sd->trades_in >= battle_config.trade_spam_flood) { + sd->trades_in = 0; + tmw_GmHackMsg("Trade spam detected from character '%s' (account: %d)", sd->status.name, sd->status.account_id); + + if (battle_config.trade_spam_ban > 0) { + clif_displaymessage(sd->fd, "You have been banned for trade spamming. Please do not trade spam."); + tmw_GmHackMsg("This player has been banned for %d hour(s).", battle_config.trade_spam_ban); + + chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, battle_config.trade_spam_ban, 0, 0); // type: 2 - ban (year, month, day, hour, minute, second) + clif_setwaitclose(sd->fd); + } + } + + if (battle_config.trade_spam_ban && sd->trades_in >= battle_config.trade_spam_warn) { + clif_displaymessage(sd->fd, "WARNING : You are about to be automaticly banned for trade spam!"); + } + + return 0; +} diff --git a/src/map/tmw.h b/src/map/tmw.h index 87066d9..92bcaf4 100644 --- a/src/map/tmw.h +++ b/src/map/tmw.h @@ -5,3 +5,4 @@ int tmw_CheckChatSpam(struct map_session_data *sd, char* message); int tmw_CheckChatLameness(struct map_session_data *sd, char *message); void tmw_GmHackMsg(const char *fmt, ...); +int tmw_CheckTradeSpam(struct map_session_data *sd); -- cgit v1.2.3-70-g09d2 From 2855e018b8e177878ca0d83c61e4442ddf3e505c Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Mon, 6 Jul 2009 14:33:18 -0600 Subject: Revert "Add a new trade spam system" This reverts commit 2e87e5b65a02d8d9f867a0510f039cc319b3ffcb. --- src/map/battle.c | 1304 ++++++++++++++++++++++++++---------------------------- src/map/battle.h | 31 +- src/map/clif.c | 2 +- src/map/map.h | 35 +- src/map/pc.c | 2 - src/map/tmw.c | 33 -- src/map/tmw.h | 1 - 7 files changed, 668 insertions(+), 740 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index 343b91b..45524e5 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -27,8 +27,8 @@ int attr_fix_table[4][10][10]; struct Battle_Config battle_config; /*========================================== - * ソスソスソス_ソスヤの具ソスソスソスソスソスソスヤゑソス - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 二点間の距離を返す + * 戻りは整数で0以上 *------------------------------------------ */ static int distance(int x0,int y0,int x1,int y1) @@ -41,8 +41,8 @@ static int distance(int x0,int y0,int x1,int y1) } /*========================================== - * ソスソスソスソスソスソスbソスNソスソスソストゑソスソスソスソスホ象の撰ソスソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 自分をロックしている対象の数を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv) @@ -55,8 +55,8 @@ int battle_counttargeted(struct block_list *bl,struct block_list *src,int target return 0; } /*========================================== - * ソスホ象ゑソスClassソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のClassを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_class(struct block_list *bl) @@ -70,8 +70,8 @@ int battle_get_class(struct block_list *bl) return 0; } /*========================================== - * ソスホ象の包ソスソスソスソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象の方向を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_dir(struct block_list *bl) @@ -85,8 +85,8 @@ int battle_get_dir(struct block_list *bl) return 0; } /*========================================== - * ソスホ象のソスソスxソスソスソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のレベルを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_lv(struct block_list *bl) @@ -100,8 +100,8 @@ int battle_get_lv(struct block_list *bl) return 0; } /*========================================== - * ソスホ象の射抵ソスソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象の射程を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_range(struct block_list *bl) @@ -115,8 +115,8 @@ int battle_get_range(struct block_list *bl) return 0; } /*========================================== - * ソスホ象ゑソスHPソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のHPを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_hp(struct block_list *bl) @@ -130,8 +130,8 @@ int battle_get_hp(struct block_list *bl) return 1; } /*========================================== - * ソスホ象ゑソスMHPソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のMHPを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_max_hp(struct block_list *bl) @@ -164,8 +164,8 @@ int battle_get_max_hp(struct block_list *bl) return 1; } /*========================================== - * ソスホ象ゑソスStrソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のStrを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_str(struct block_list *bl) @@ -183,20 +183,20 @@ int battle_get_str(struct block_list *bl) if(sc_data) { if(sc_data[SC_LOUD].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC) str += 4; - if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ソスuソスソスソスbソスVソスソスソスO + if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ブレッシング int race=battle_get_race(bl); - if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) str >>= 1; // ソスソス ソスソス/ソスsソスソス - else str += sc_data[SC_BLESSING].val1; // ソスソスソスフ托ソス + if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) str >>= 1; // 悪 魔/不死 + else str += sc_data[SC_BLESSING].val1; // その他 } - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト str += 5; } if(str < 0) str = 0; return str; } /*========================================== - * ソスホ象ゑソスAgiソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のAgiを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ @@ -214,26 +214,26 @@ int battle_get_agi(struct block_list *bl) if(sc_data) { if( sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1 && - bl->type != BL_PC) // ソスソスソスxソスソスソスソス(PCソスソスpc.cソスソス) + bl->type != BL_PC) // 速度増加(PCはpc.cで) agi += 2+sc_data[SC_INCREASEAGI].val1; if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC) agi += agi*(2+sc_data[SC_CONCENTRATE].val1)/100; - if(sc_data[SC_DECREASEAGI].timer!=-1) // ソスソスソスxソスソスソスソス + if(sc_data[SC_DECREASEAGI].timer!=-1) // 速度減少 agi -= 2+sc_data[SC_DECREASEAGI].val1; - if(sc_data[SC_QUAGMIRE].timer!=-1 ) // ソスNソス@ソスOソス}ソスCソスA + if(sc_data[SC_QUAGMIRE].timer!=-1 ) // クァグマイア agi >>= 1; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト agi += 5; } if(agi < 0) agi = 0; return agi; } /*========================================== - * ソスホ象ゑソスVitソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のVitを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_vit(struct block_list *bl) @@ -250,7 +250,7 @@ int battle_get_vit(struct block_list *bl) if(sc_data) { if(sc_data[SC_STRIPARMOR].timer != -1 && bl->type!=BL_PC) vit = vit*60/100; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト vit += 5; } @@ -258,8 +258,8 @@ int battle_get_vit(struct block_list *bl) return vit; } /*========================================== - * ソスホ象ゑソスIntソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のIntを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_int(struct block_list *bl) @@ -275,22 +275,22 @@ int battle_get_int(struct block_list *bl) int_=((struct map_session_data *)bl)->paramc[3]; if(sc_data) { - if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ソスuソスソスソスbソスVソスソスソスO + if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ブレッシング int race=battle_get_race(bl); - if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) int_ >>= 1; // ソスソス ソスソス/ソスsソスソス - else int_ += sc_data[SC_BLESSING].val1; // ソスソスソスフ托ソス + if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) int_ >>= 1; // 悪 魔/不死 + else int_ += sc_data[SC_BLESSING].val1; // その他 } if( sc_data[SC_STRIPHELM].timer != -1 && bl->type != BL_PC) int_ = int_*60/100; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト int_ += 5; } if(int_ < 0) int_ = 0; return int_; } /*========================================== - * ソスホ象ゑソスDexソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のDexを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_dex(struct block_list *bl) @@ -309,23 +309,23 @@ int battle_get_dex(struct block_list *bl) if(sc_data[SC_CONCENTRATE].timer!=-1 && sc_data[SC_QUAGMIRE].timer == -1 && bl->type != BL_PC) dex += dex*(2+sc_data[SC_CONCENTRATE].val1)/100; - if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ソスuソスソスソスbソスVソスソスソスO + if( sc_data[SC_BLESSING].timer != -1 && bl->type != BL_PC){ // ブレッシング int race=battle_get_race(bl); - if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) dex >>= 1; // ソスソス ソスソス/ソスsソスソス - else dex += sc_data[SC_BLESSING].val1; // ソスソスソスフ托ソス + if(battle_check_undead(race,battle_get_elem_type(bl)) || race==6 ) dex >>= 1; // 悪 魔/不死 + else dex += sc_data[SC_BLESSING].val1; // その他 } - if(sc_data[SC_QUAGMIRE].timer!=-1 ) // ソスNソス@ソスOソス}ソスCソスA + if(sc_data[SC_QUAGMIRE].timer!=-1 ) // クァグマイア dex >>= 1; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト dex += 5; } if(dex < 0) dex = 0; return dex; } /*========================================== - * ソスホ象ゑソスLukソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のLukを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_luk(struct block_list *bl) @@ -341,11 +341,11 @@ int battle_get_luk(struct block_list *bl) luk=((struct map_session_data *)bl)->paramc[5]; if(sc_data) { - if(sc_data[SC_GLORIA].timer!=-1 && bl->type != BL_PC) // ソスOソスソスソスソスソスA(PCソスソスpc.cソスソス) + if(sc_data[SC_GLORIA].timer!=-1 && bl->type != BL_PC) // グロリア(PCはpc.cで) luk += 30; - if(sc_data[SC_CURSE].timer!=-1 ) // ソスソスソスソス + if(sc_data[SC_CURSE].timer!=-1 ) // 呪い luk=0; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト luk += 5; } if(luk < 0) luk = 0; @@ -353,8 +353,8 @@ int battle_get_luk(struct block_list *bl) } /*========================================== - * ソスホ象ゑソスFleeソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * 対象のFleeを返す(汎用) + * 戻りは整数で1以上 *------------------------------------------ */ int battle_get_flee(struct block_list *bl) @@ -375,17 +375,17 @@ int battle_get_flee(struct block_list *bl) +(sc_data[SC_WHISTLE].val3>>16))/100; if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC) flee -= flee*25/100; - if(sc_data[SC_WINDWALK].timer!=-1 && bl->type != BL_PC) // ソスEソスBソスソスソスhソスEソスHソス[ソスN + if(sc_data[SC_WINDWALK].timer!=-1 && bl->type != BL_PC) // ウィンドウォーク flee += flee*(sc_data[SC_WINDWALK].val2)/100; - if(sc_data[SC_SPIDERWEB].timer!=-1 && bl->type != BL_PC) //ソスXソスpソスCソス_ソス[ソスEソスFソスu + if(sc_data[SC_SPIDERWEB].timer!=-1 && bl->type != BL_PC) //スパイダーウェブ flee -= flee*50/100; } if(flee < 1) flee = 1; return flee; } /*========================================== - * ソスホ象ゑソスHitソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * 対象のHitを返す(汎用) + * 戻りは整数で1以上 *------------------------------------------ */ int battle_get_hit(struct block_list *bl) @@ -404,19 +404,19 @@ int battle_get_hit(struct block_list *bl) if(sc_data[SC_HUMMING].timer!=-1 && bl->type != BL_PC) // hit += hit*(sc_data[SC_HUMMING].val1*2+sc_data[SC_HUMMING].val2 +sc_data[SC_HUMMING].val3)/100; - if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC) // ソスソスソスソス + if(sc_data[SC_BLIND].timer!=-1 && bl->type != BL_PC) // 呪い hit -= hit*25/100; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) // トゥルーサイト hit += 3*(sc_data[SC_TRUESIGHT].val1); - if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス + if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション hit += (hit*(10*(sc_data[SC_CONCENTRATION].val1)))/100; } if(hit < 1) hit = 1; return hit; } /*========================================== - * ソスホ象の奇ソスソスSソスソスソスソスソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * 対象の完全回避を返す(汎用) + * 戻りは整数で1以上 *------------------------------------------ */ int battle_get_flee2(struct block_list *bl) @@ -442,8 +442,8 @@ int battle_get_flee2(struct block_list *bl) return flee2; } /*========================================== - * ソスホ象のクソスソスソスeソスBソスJソスソスソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * 対象のクリティカルを返す(汎用) + * 戻りは整数で1以上 *------------------------------------------ */ int battle_get_critical(struct block_list *bl) @@ -466,15 +466,15 @@ int battle_get_critical(struct block_list *bl) +sc_data[SC_FORTUNE].val3)*10; if(sc_data[SC_EXPLOSIONSPIRITS].timer!=-1 && bl->type != BL_PC) critical += sc_data[SC_EXPLOSIONSPIRITS].val2; - if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) //ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1 && bl->type != BL_PC) //トゥルーサイト critical += critical*sc_data[SC_TRUESIGHT].val1/100; } if(critical < 1) critical = 1; return critical; } /*========================================== - * base_atkソスフ取得 - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * base_atkの取得 + * 戻りは整数で1以上 *------------------------------------------ */ int battle_get_baseatk(struct block_list *bl) @@ -485,27 +485,27 @@ int battle_get_baseatk(struct block_list *bl) nullpo_retr(1, bl); sc_data=battle_get_sc_data(bl); if(bl->type==BL_PC && (struct map_session_data *)bl) - batk = ((struct map_session_data *)bl)->base_atk; //ソスン定さソスソスソストゑソスソスソスbase_atk - else { //ソスソスソスソスソスネ外ソスネゑソス + batk = ((struct map_session_data *)bl)->base_atk; //設定されているbase_atk + else { //それ以外なら int str,dstr; str = battle_get_str(bl); //STR dstr = str/10; - batk = dstr*dstr + str; //base_atkソスソスソスvソスZソスソスソスソス - } - if(sc_data) { //ソスソスソスヤ異常あソスソス - if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) //PCソスナプソスソスソス{ソスbソスN(SM_PROVOKE)ソスソスソスソス - batk = batk*(100+2*sc_data[SC_PROVOKE].val1)/100; //base_atkソスソスソスソス - if(sc_data[SC_CURSE].timer!=-1 ) //ソスソスソスソスソスソスソストゑソスソスソスソスソス - batk -= batk*25/100; //base_atkソスソス25%ソスソスソスソス - if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス + batk = dstr*dstr + str; //base_atkを計算する + } + if(sc_data) { //状態異常あり + if(sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) //PCでプロボック(SM_PROVOKE)状態 + batk = batk*(100+2*sc_data[SC_PROVOKE].val1)/100; //base_atk増加 + if(sc_data[SC_CURSE].timer!=-1 ) //呪われていたら + batk -= batk*25/100; //base_atkが25%減少 + if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション batk += batk*(5*sc_data[SC_CONCENTRATION].val1)/100; } - if(batk < 1) batk = 1; //base_atkソスヘ最抵ソスソスナゑソス1 + if(batk < 1) batk = 1; //base_atkは最低でも1 return batk; } /*========================================== - * ソスホ象ゑソスAtkソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のAtkを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_atk(struct block_list *bl) @@ -525,15 +525,15 @@ int battle_get_atk(struct block_list *bl) atk = atk*(100+2*sc_data[SC_PROVOKE].val1)/100; if(sc_data[SC_CURSE].timer!=-1 ) atk -= atk*25/100; - if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス + if(sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) //コンセントレーション atk += atk*(5*sc_data[SC_CONCENTRATION].val1)/100; } if(atk < 0) atk = 0; return atk; } /*========================================== - * ソスホ象の搾ソスソスソスAtkソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象の左手Atkを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_atk_(struct block_list *bl) @@ -550,8 +550,8 @@ int battle_get_atk_(struct block_list *bl) return 0; } /*========================================== - * ソスホ象ゑソスAtk2ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のAtk2を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_atk2(struct block_list *bl) @@ -577,7 +577,7 @@ int battle_get_atk2(struct block_list *bl) atk2 += sc_data[SC_NIBELUNGEN].val2; if(sc_data[SC_STRIPWEAPON].timer!=-1) atk2 = atk2*90/100; - if(sc_data[SC_CONCENTRATION].timer!=-1) //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソス + if(sc_data[SC_CONCENTRATION].timer!=-1) //コンセントレーション atk2 += atk2*(5*sc_data[SC_CONCENTRATION].val1)/100; } if(atk2 < 0) atk2 = 0; @@ -586,8 +586,8 @@ int battle_get_atk2(struct block_list *bl) return 0; } /*========================================== - * ソスホ象の搾ソスソスソスAtk2ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象の左手Atk2を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_atk_2(struct block_list *bl) @@ -599,8 +599,8 @@ int battle_get_atk_2(struct block_list *bl) return 0; } /*========================================== - * ソスホ象ゑソスMAtk1ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のMAtk1を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_matk1(struct block_list *bl) @@ -623,8 +623,8 @@ int battle_get_matk1(struct block_list *bl) return 0; } /*========================================== - * ソスホ象ゑソスMAtk2ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のMAtk2を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_matk2(struct block_list *bl) @@ -646,8 +646,8 @@ int battle_get_matk2(struct block_list *bl) return 0; } /*========================================== - * ソスホ象ゑソスDefソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のDefを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_def(struct block_list *bl) @@ -670,35 +670,35 @@ int battle_get_def(struct block_list *bl) if(def < 1000000) { if(sc_data) { - //ソスLソス[ソスsソスソスソスOソスソスソスソスDEF100 + //キーピング時はDEF100 if( sc_data[SC_KEEPING].timer!=-1) def = 100; - //ソスvソスソスソス{ソスbソスNソスソスソスヘ鯉ソスソスZ + //プロボック時は減算 if( sc_data[SC_PROVOKE].timer!=-1 && bl->type != BL_PC) def = (def*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; - //ソス太ソスロの具ソスソスソスソスソスソスヘ会ソスZ + //戦太鼓の響き時は加算 if( sc_data[SC_DRUMBATTLE].timer!=-1 && bl->type != BL_PC) def += sc_data[SC_DRUMBATTLE].val3; - //ソスナにゑソスソスソスソスソストゑソスソス骼橸ソスヘ鯉ソスソスZ + //毒にかかっている時は減算 if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC) def = def*75/100; - //ソスXソスgソスソスソスbソスvソスVソス[ソスソスソスhソスソスソスヘ鯉ソスソスZ + //ストリップシールド時は減算 if(sc_data[SC_STRIPSHIELD].timer!=-1 && bl->type != BL_PC) def = def*85/100; - //ソスVソスOソスiソスソスソスNソスソスソスVソスXソスソスソスヘ鯉ソスソスZ + //シグナムクルシス時は減算 if(sc_data[SC_SIGNUMCRUCIS].timer!=-1 && bl->type != BL_PC) def = def * (100 - sc_data[SC_SIGNUMCRUCIS].val2)/100; - //ソスiソスソスソスフ搾ソスソスラ趣ソスソスソスDEF0ソスノなゑソス + //永遠の混沌時はDEF0になる if(sc_data[SC_ETERNALCHAOS].timer!=-1 && bl->type != BL_PC) def = 0; - //ソスソスソスソスソスAソスホ会ソスソスソスソスヘ右ソスVソスtソスg + //凍結、石化時は右シフト if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)) def >>= 1; - //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソスソスソスソスヘ鯉ソスソスZ + //コンセントレーション時は減算 if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) def = (def*(100 - 5*sc_data[SC_CONCENTRATION].val1))/100; } - //ソスrソスソスソスソスソスヘ詠ソスソスソスソスソスソスソスZソスソスソスノ奇ソスソステゑソスソスト鯉ソスソスZ + //詠唱中は詠唱時減算率に基づいて減算 if(skilltimer != -1) { int def_rate = skill_get_castdef(skillid); if(def_rate != 0) @@ -709,8 +709,8 @@ int battle_get_def(struct block_list *bl) return def; } /*========================================== - * ソスホ象ゑソスMDefソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のMDefを返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_mdef(struct block_list *bl) @@ -727,7 +727,7 @@ int battle_get_mdef(struct block_list *bl) if(mdef < 1000000) { if(sc_data) { - //ソスoソスソスソスAソス[ソスソスソスヤ趣ソスソスソスMDEF100 + //バリアー状態時はMDEF100 if(mdef < 90 && sc_data[SC_MBARRIER].timer != -1) { mdef += sc_data[SC_MBARRIER].val1; if (mdef > 90) @@ -735,7 +735,7 @@ int battle_get_mdef(struct block_list *bl) } if(sc_data[SC_BARRIER].timer != -1) mdef = 100; - //ソスソスソスソスソスAソスホ会ソスソスソスソスソス1.25ソス{ + //凍結、石化時は1.25倍 if(sc_data[SC_FREEZE].timer != -1 || (sc_data[SC_STONE].timer != -1 && sc_data[SC_STONE].val2 == 0)) mdef = mdef*125/100; if( sc_data[SC_MINDBREAKER].timer!=-1 && bl->type != BL_PC) @@ -746,8 +746,8 @@ int battle_get_mdef(struct block_list *bl) return mdef; } /*========================================== - * ソスホ象ゑソスDef2ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス + * 対象のDef2を返す(汎用) + * 戻りは整数で1以上 *------------------------------------------ */ int battle_get_def2(struct block_list *bl) @@ -769,7 +769,7 @@ int battle_get_def2(struct block_list *bl) def2 = (def2*(100 - 6*sc_data[SC_PROVOKE].val1)+50)/100; if(sc_data[SC_POISON].timer!=-1 && bl->type != BL_PC) def2 = def2*75/100; - //ソスRソスソスソスZソスソスソスgソスソスソス[ソスVソスソスソスソスソスソスソスヘ鯉ソスソスZ + //コンセントレーション時は減算 if( sc_data[SC_CONCENTRATION].timer!=-1 && bl->type != BL_PC) def2 = def2*(100 - 5*sc_data[SC_CONCENTRATION].val1)/100; } @@ -777,8 +777,8 @@ int battle_get_def2(struct block_list *bl) return def2; } /*========================================== - * ソスホ象ゑソスMDef2ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス0ソスネ擾ソス + * 対象のMDef2を返す(汎用) + * 戻りは整数で0以上 *------------------------------------------ */ int battle_get_mdef2(struct block_list *bl) @@ -799,9 +799,9 @@ int battle_get_mdef2(struct block_list *bl) return mdef2; } /*========================================== - * ソスホ象ゑソスSpeed(ソスレ難ソスソスソスソスx)ソスソスソスヤゑソス(ソスト用) - * ソス゚ゑソスソスヘ撰ソスソスソスソスソス1ソスネ擾ソス - * Speedソスヘ擾ソスソスソスソスソスソスルゑソスソスソスソスレ難ソスソスソスソスxソスソスソスソスソスソス + * 対象のSpeed(移動速度)を返す(汎用) + * 戻りは整数で1以上 + * Speedは小さいほうが移動速度が速い *------------------------------------------ */ int battle_get_speed(struct block_list *bl) @@ -816,31 +816,31 @@ int battle_get_speed(struct block_list *bl) speed = ((struct mob_data *)bl)->stats[MOB_SPEED]; if(sc_data) { - //ソスソスソスxソスソスソスソスソスソスソス25%ソスソスソスZ + //速度増加時は25%減算 if(sc_data[SC_INCREASEAGI].timer!=-1 && sc_data[SC_DONTFORGETME].timer == -1) speed -= speed*25/100; - //ソスソスソスxソスソスソスソスソスソスソスソス25%ソスソスZ + //速度減少時は25%加算 if(sc_data[SC_DECREASEAGI].timer!=-1) speed = speed*125/100; - //ソスNソス@ソスOソス}ソスCソスAソスソスソスソス50%ソスソスZ + //クァグマイア時は50%加算 if(sc_data[SC_QUAGMIRE].timer!=-1) speed = speed*3/2; - //ソスソスソスソスソスYソスソスソスネゑソスソスナ…ソスソスソスヘ会ソスZ + //私を忘れないで…時は加算 if(sc_data[SC_DONTFORGETME].timer!=-1) speed = speed*(100+sc_data[SC_DONTFORGETME].val1*2 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3&0xffff))/100; - //ソスソスソスソスソスソス25%ソスソスZ + //金剛時は25%加算 if(sc_data[SC_STEELBODY].timer!=-1) speed = speed*125/100; - //ソスfソスBソスtソスFソスソスソス_ソス[ソスソスソスヘ会ソスZ + //ディフェンダー時は加算 if(sc_data[SC_DEFENDER].timer!=-1) speed = (speed * (155 - sc_data[SC_DEFENDER].val1*5)) / 100; - //ソスxソスソスソスソスソスヤゑソス4ソス{ソスxソスソス + //踊り状態は4倍遅い if(sc_data[SC_DANCING].timer!=-1 ) speed*=4; - //ソスい趣ソスソスソス450ソスソスZ + //呪い時は450加算 if(sc_data[SC_CURSE].timer!=-1) speed = speed + 450; - //ソスEソスBソスソスソスhソスEソスHソス[ソスNソスソスソスソスLv*2%ソスソスソスZ + //ウィンドウォーク時はLv*2%減算 if(sc_data[SC_WINDWALK].timer!=-1) speed -= (speed*(sc_data[SC_WINDWALK].val1*2))/100; } @@ -851,8 +851,8 @@ int battle_get_speed(struct block_list *bl) return 1000; } /*========================================== - * ソスホ象ゑソスaDelay(ソスUソスソスソスソスソスfソスBソスソスソスC)ソスソスソスヤゑソス(ソスト用) - * aDelayソスヘ擾ソスソスソスソスソスソスルゑソスソスソスソスUソスソスソスソスソスxソスソスソスソスソスソス + * 対象のaDelay(攻撃時ディレイ)を返す(汎用) + * aDelayは小さいほうが攻撃速度が速い *------------------------------------------ */ int battle_get_adelay(struct block_list *bl) @@ -867,41 +867,41 @@ int battle_get_adelay(struct block_list *bl) adelay = ((struct mob_data *)bl)->stats[MOB_ADELAY]; if(sc_data) { - //ソスcソス[ソスnソスソスソスhソスNソスCソスbソスPソスソスソスgソスpソスソスソスナクソス@ソスOソス}ソスCソスAソスナゑソスソスソスソスYソスソスソスネゑソスソスナ…ソスナゑソスソスネゑソスソスソスソスソス3ソスソスソスソスソスZ + //ツーハンドクイッケン使用時でクァグマイアでも私を忘れないで…でもない時は3割減算 if(sc_data[SC_TWOHANDQUICKEN].timer != -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // 2HQ aspd_rate -= 30; - //ソスAソスhソスソスソスiソスソスソスソスソスソスソスbソスVソスソスソスgソスpソスソスソスナツソス[ソスnソスソスソスhソスNソスCソスbソスPソスソスソスナゑソスソスNソス@ソスOソス}ソスCソスAソスナゑソスソスソスソスYソスソスソスネゑソスソスナ…ソスナゑソスソスネゑソスソスソスソスソス + //アドレナリンラッシュ使用時でツーハンドクイッケンでもクァグマイアでも私を忘れないで…でもない時は if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 && - sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // ソスAソスhソスソスソスiソスソスソスソスソスソスソスbソスVソスソス - //ソスgソスpソスメとパソス[ソスeソスBソスソスソスソスソスoソス[ソスナ格ソスソスソスソスソスoソスソスソスン抵ソスソスナなゑソスソスソスソスソス3ソスソスソスソスソスZ + sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // アドレナリンラッシュ + //使用者とパーティメンバーで格差が出る設定でなければ3割減算 if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly) aspd_rate -= 30; - //ソスソスソスソスソスナなゑソスソスソスソスソス2.5ソスソスソスソスソスZ + //そうでなければ2.5割減算 else aspd_rate -= 25; } - //ソスXソスsソスAソスNソスBソスbソスPソスソスソスソスソスヘ鯉ソスソスZ + //スピアクィッケン時は減算 if(sc_data[SC_SPEARSQUICKEN].timer != -1 && sc_data[SC_ADRENALINE].timer == -1 && - sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // ソスXソスsソスAソスNソスBソスbソスPソスソス + sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // スピアクィッケン aspd_rate -= sc_data[SC_SPEARSQUICKEN].val2; - //ソス[ソスソスソスフアソスTソスVソスソスソスNソスソスソスXソスソスソスヘ鯉ソスソスZ - if(sc_data[SC_ASSNCROS].timer!=-1 && // ソス[ソスzソスフアソスTソスVソスソスソスNソスソスソスX + //夕日のアサシンクロス時は減算 + if(sc_data[SC_ASSNCROS].timer!=-1 && // 夕陽のアサシンクロス sc_data[SC_TWOHANDQUICKEN].timer==-1 && sc_data[SC_ADRENALINE].timer==-1 && sc_data[SC_SPEARSQUICKEN].timer==-1 && sc_data[SC_DONTFORGETME].timer == -1) aspd_rate -= 5+sc_data[SC_ASSNCROS].val1+sc_data[SC_ASSNCROS].val2+sc_data[SC_ASSNCROS].val3; - //ソスソスソスソスソスYソスソスソスネゑソスソスナ…ソスソスソスヘ会ソスZ - if(sc_data[SC_DONTFORGETME].timer!=-1) // ソスソスソスソスソスYソスソスソスネゑソスソスソス + //私を忘れないで…時は加算 + if(sc_data[SC_DONTFORGETME].timer!=-1) // 私を忘れないで aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16); - //ソスソスソスソス25%ソスソスZ - if(sc_data[SC_STEELBODY].timer!=-1) // ソスソス + //金剛時25%加算 + if(sc_data[SC_STEELBODY].timer!=-1) // 金剛 aspd_rate += 25; - //ソスソスソスソスソス|ソス[ソスVソスソスソスソスソスgソスpソスソスソスヘ鯉ソスソスZ + //増速ポーション使用時は減算 if(sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1) aspd_rate -= sc_data[i].val1; // Fate's `haste' spell works the same as the above if (sc_data[SC_HASTE].timer != -1) aspd_rate -= sc_data[SC_HASTE].val1; - //ソスfソスBソスtソスFソスソスソス_ソス[ソスソスソスヘ会ソスZ + //ディフェンダー時は加算 if(sc_data[SC_DEFENDER].timer != -1) adelay += (1100 - sc_data[SC_DEFENDER].val1*100); } @@ -928,22 +928,22 @@ int battle_get_amotion(struct block_list *bl) if(sc_data[SC_TWOHANDQUICKEN].timer != -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // 2HQ aspd_rate -= 30; if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 && - sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // ソスAソスhソスソスソスiソスソスソスソスソスソスソスbソスVソスソス + sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // アドレナリンラッシュ if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly) aspd_rate -= 30; else aspd_rate -= 25; } if(sc_data[SC_SPEARSQUICKEN].timer != -1 && sc_data[SC_ADRENALINE].timer == -1 && - sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // ソスXソスsソスAソスNソスBソスbソスPソスソス + sc_data[SC_TWOHANDQUICKEN].timer == -1 && sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) // スピアクィッケン aspd_rate -= sc_data[SC_SPEARSQUICKEN].val2; - if(sc_data[SC_ASSNCROS].timer!=-1 && // ソス[ソスzソスフアソスTソスVソスソスソスNソスソスソスX + if(sc_data[SC_ASSNCROS].timer!=-1 && // 夕陽のアサシンクロス sc_data[SC_TWOHANDQUICKEN].timer==-1 && sc_data[SC_ADRENALINE].timer==-1 && sc_data[SC_SPEARSQUICKEN].timer==-1 && sc_data[SC_DONTFORGETME].timer == -1) aspd_rate -= 5+sc_data[SC_ASSNCROS].val1+sc_data[SC_ASSNCROS].val2+sc_data[SC_ASSNCROS].val3; - if(sc_data[SC_DONTFORGETME].timer!=-1) // ソスソスソスソスソスYソスソスソスネゑソスソスソス + if(sc_data[SC_DONTFORGETME].timer!=-1) // 私を忘れないで aspd_rate += sc_data[SC_DONTFORGETME].val1*3 + sc_data[SC_DONTFORGETME].val2 + (sc_data[SC_DONTFORGETME].val3>>16); - if(sc_data[SC_STEELBODY].timer!=-1) // ソスソス + if(sc_data[SC_STEELBODY].timer!=-1) // 金剛 aspd_rate += 25; if(sc_data[i=SC_SPEEDPOTION2].timer!=-1 || sc_data[i=SC_SPEEDPOTION1].timer!=-1 || sc_data[i=SC_SPEEDPOTION0].timer!=-1) aspd_rate -= sc_data[i].val1; @@ -993,15 +993,15 @@ int battle_get_element(struct block_list *bl) nullpo_retr(ret, bl); sc_data = battle_get_sc_data(bl); - if(bl->type==BL_MOB && (struct mob_data *)bl) // 10ソスフ位ソスLv*2ソスAソスPソスフ位ソスソスソスソスソス + if(bl->type==BL_MOB && (struct mob_data *)bl) // 10の位=Lv*2、1の位=属性 ret=((struct mob_data *)bl)->def_ele; else if(bl->type==BL_PC && (struct map_session_data *)bl) - ret=20+((struct map_session_data *)bl)->def_ele; // ソスhソス苟ョソスソスLv1 + ret=20+((struct map_session_data *)bl)->def_ele; // 防御属性Lv1 if(sc_data) { - if( sc_data[SC_BENEDICTIO].timer!=-1 ) // ソスソスソスフ降ソスソス + if( sc_data[SC_BENEDICTIO].timer!=-1 ) // 聖体降福 ret=26; - if( sc_data[SC_FREEZE].timer!=-1 ) // ソスソスソスソス + if( sc_data[SC_FREEZE].timer!=-1 ) // 凍結 ret=21; if( sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0) ret=22; @@ -1021,17 +1021,17 @@ int battle_get_attack_element(struct block_list *bl) ret=((struct map_session_data *)bl)->atk_ele; if(sc_data) { - if( sc_data[SC_FROSTWEAPON].timer!=-1) // ソスtソスソスソスXソスgソスEソスFソス|ソスソス + if( sc_data[SC_FROSTWEAPON].timer!=-1) // フロストウェポン ret=1; - if( sc_data[SC_SEISMICWEAPON].timer!=-1) // ソスTソスCソスYソス~ソスbソスNソスEソスFソス|ソスソス + if( sc_data[SC_SEISMICWEAPON].timer!=-1) // サイズミックウェポン ret=2; - if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // ソスtソスソスソス[ソスソスソスソスソスソスソス`ソスソスソス[ + if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // フレームランチャー ret=3; - if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ソスソスソスCソスgソスjソスソスソスOソスソスソス[ソス_ソス[ + if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ライトニングローダー ret=4; - if( sc_data[SC_ENCPOISON].timer!=-1) // ソスGソスソスソス`ソスソスソスソスソスgソス|ソスCソスYソスソス + if( sc_data[SC_ENCPOISON].timer!=-1) // エンチャントポイズン ret=5; - if( sc_data[SC_ASPERSIO].timer!=-1) // ソスAソスXソスyソスソスソスVソスI + if( sc_data[SC_ASPERSIO].timer!=-1) // アスペルシオ ret=6; } @@ -1045,17 +1045,17 @@ int battle_get_attack_element2(struct block_list *bl) struct status_change *sc_data = ((struct map_session_data *)bl)->sc_data; if(sc_data) { - if( sc_data[SC_FROSTWEAPON].timer!=-1) // ソスtソスソスソスXソスgソスEソスFソス|ソスソス + if( sc_data[SC_FROSTWEAPON].timer!=-1) // フロストウェポン ret=1; - if( sc_data[SC_SEISMICWEAPON].timer!=-1) // ソスTソスCソスYソス~ソスbソスNソスEソスFソス|ソスソス + if( sc_data[SC_SEISMICWEAPON].timer!=-1) // サイズミックウェポン ret=2; - if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // ソスtソスソスソス[ソスソスソスソスソスソスソス`ソスソスソス[ + if( sc_data[SC_FLAMELAUNCHER].timer!=-1) // フレームランチャー ret=3; - if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ソスソスソスCソスgソスjソスソスソスOソスソスソス[ソス_ソス[ + if( sc_data[SC_LIGHTNINGLOADER].timer!=-1) // ライトニングローダー ret=4; - if( sc_data[SC_ENCPOISON].timer!=-1) // ソスGソスソスソス`ソスソスソスソスソスgソス|ソスCソスYソスソス + if( sc_data[SC_ENCPOISON].timer!=-1) // エンチャントポイズン ret=5; - if( sc_data[SC_ASPERSIO].timer!=-1) // ソスAソスXソスyソスソスソスVソスI + if( sc_data[SC_ASPERSIO].timer!=-1) // アスペルシオ ret=6; } return ret; @@ -1116,7 +1116,7 @@ int battle_get_mode(struct block_list *bl) if(bl->type==BL_MOB && (struct mob_data *)bl) return mob_db[((struct mob_data *)bl)->class].mode; else - return 0x01; // ソスニりあソスソスソスソスソスソスソスソスソスニゑソスソスソスソスソスソスニゑソス1 + return 0x01; // とりあえず動くということで1 } int battle_get_mexp(struct block_list *bl) @@ -1132,7 +1132,7 @@ int battle_get_mexp(struct block_list *bl) return 0; } -// StatusChangeソスnソスフ擾ソスソスソス +// StatusChange系の所得 struct status_change *battle_get_sc_data(struct block_list *bl) { nullpo_retr(NULL, bl); @@ -1198,7 +1198,7 @@ short *battle_get_option(struct block_list *bl) //------------------------------------------------------------------- -// ソス_ソスソスソス[ソスWソスフ遅ソスソス +// ダメージの遅延 struct battle_delay_damage_ { struct block_list *src,*target; int damage; @@ -1228,7 +1228,7 @@ int battle_delay_damage(unsigned int tick,struct block_list *src,struct block_li return 0; } -// ソスソスロゑソスHPソス操搾ソス +// 実際にHPを操作 int battle_damage(struct block_list *bl,struct block_list *target,int damage,int flag) { struct map_session_data *sd=NULL; @@ -1236,7 +1236,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int short *sc_count; int i; - nullpo_retr(0, target); //blソスソスNULLソスナ呼ばゑソスソス驍アソスニゑソスソスソスソスソスソスフで托ソスソスナチソスFソスbソスN + nullpo_retr(0, target); //blはNULLで呼ばれることがあるので他でチェック if(damage==0) return 0; @@ -1256,7 +1256,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int return battle_heal(bl,target,-damage,0,flag); if(!flag && (sc_count=battle_get_sc_count(target))!=NULL && *sc_count>0){ - // ソスソスソスソスソスAソスホ会ソスソスAソスソスソスソスソスソスソスソスソス + // 凍結、石化、睡眠を消去 if(sc_data[SC_FREEZE].timer!=-1) skill_status_change_end(target,SC_FREEZE,-1); if(sc_data[SC_STONE].timer!=-1 && sc_data[SC_STONE].val2==0) @@ -1267,7 +1267,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int if(target->type==BL_MOB){ // MOB struct mob_data *md=(struct mob_data *)target; - if(md && md->skilltimer!=-1 && md->state.skillcastcancel) // ソスrソスソスソスWソスQ + if(md && md->skilltimer!=-1 && md->state.skillcastcancel) // 詠唱妨害 skill_castcancel(target,0); return mob_damage(bl,md,damage,0); } @@ -1275,7 +1275,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int struct map_session_data *tsd=(struct map_session_data *)target; - if(tsd && tsd->sc_data && tsd->sc_data[SC_DEVOTION].val1){ // ソスfソスBソス{ソス[ソスVソスソスソスソスソスソスソスソスソスソスソスソストゑソスソスソス + if(tsd && tsd->sc_data && tsd->sc_data[SC_DEVOTION].val1){ // ディボーションをかけられている struct map_session_data *md = map_id2sd(tsd->sc_data[SC_DEVOTION].val1); if(md && skill_devotion3(&md->bl,target->id)){ skill_devotion(md,target->id); @@ -1291,8 +1291,8 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int } } - if(tsd && tsd->skilltimer!=-1){ // ソスrソスソスソスWソスQ - // ソスtソスFソスソスソスJソス[ソスhソスソスソスWソスQソスソスソスソスソスネゑソスソスXソスLソスソスソスソスソスフ鯉ソスソスソス + if(tsd && tsd->skilltimer!=-1){ // 詠唱妨害 + // フェンカードや妨害されないスキルかの検査 if( (!tsd->special_state.no_castcancel || map[bl->m].flag.gvg) && tsd->state.skillcastcancel && !tsd->special_state.no_castcancel2) skill_castcancel(target,0); @@ -1307,7 +1307,7 @@ int battle_damage(struct block_list *bl,struct block_list *target,int damage,int } int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,int flag) { - nullpo_retr(0, target); //blソスソスNULLソスナ呼ばゑソスソス驍アソスニゑソスソスソスソスソスソスフで托ソスソスナチソスFソスbソスN + nullpo_retr(0, target); //blはNULLで呼ばれることがあるので他でチェック if( target->type ==BL_PC && pc_isdead((struct map_session_data *)target) ) return 0; @@ -1324,7 +1324,7 @@ int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,in return 0; } -// ソスUソスソスソスソスソス~ +// 攻撃停止 int battle_stopattack(struct block_list *bl) { nullpo_retr(0, bl); @@ -1334,7 +1334,7 @@ int battle_stopattack(struct block_list *bl) return pc_stopattack((struct map_session_data*)bl); return 0; } -// ソスレ難ソスソスソスソス~ +// 移動停止 int battle_stopwalking(struct block_list *bl,int type) { nullpo_retr(0, bl); @@ -1347,7 +1347,7 @@ int battle_stopwalking(struct block_list *bl,int type) /*========================================== - * ソス_ソスソスソス[ソスWソスフ托ソスソスソスソスCソスソス + * ダメージの属性修正 *------------------------------------------ */ int battle_attr_fix(int damage,int atk_elem,int def_elem) @@ -1355,7 +1355,7 @@ int battle_attr_fix(int damage,int atk_elem,int def_elem) int def_type= def_elem%10, def_lv=def_elem/10/2; if( atk_elem<0 || atk_elem>9 || def_type<0 || def_type>9 || - def_lv<1 || def_lv>4){ // ソスソス ソスソスソスlソスソスソスソスソスソスソスソスソスソスソスフでとりあソスソスソスソスソスソスソスフまま返ゑソス + def_lv<1 || def_lv>4){ // 属 性値がおかしいのでとりあえずそのまま返す if(battle_config.error_log) printf("battle_attr_fix: unknown attr type: atk=%d def_type=%d def_lv=%d\n",atk_elem,def_type,def_lv); return damage; @@ -1366,7 +1366,7 @@ int battle_attr_fix(int damage,int atk_elem,int def_elem) /*========================================== - * ソス_ソスソスソス[ソスWソスナ終ソスvソスZ + * ダメージ最終計算 *------------------------------------------ */ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag) @@ -1389,52 +1389,52 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i if(sc_count!=NULL && *sc_count>0){ if(sc_data[SC_SAFETYWALL].timer!=-1 && damage>0 && flag&BF_WEAPON && flag&BF_SHORT && skill_num != NPC_GUIDEDATTACK){ - // ソスZソス[ソスtソスeソスBソスEソスHソス[ソスソス + // セーフティウォール struct skill_unit *unit=(struct skill_unit*)sc_data[SC_SAFETYWALL].val2; if( unit && unit->alive && (--unit->group->val2)<=0 ) skill_delunit(unit); - skill_unit_move(bl,gettick(),1); // ソスdソスヒ掛ソスソスソス`ソスFソスbソスN + skill_unit_move(bl,gettick(),1); // 重ね掛けチェック damage=0; } if(sc_data[SC_PNEUMA].timer!=-1 && damage>0 && flag&BF_WEAPON && flag&BF_LONG && skill_num != NPC_GUIDEDATTACK){ - // ソスjソスソスソス[ソス} + // ニューマ damage=0; } if(sc_data[SC_ROKISWEIL].timer!=-1 && damage>0 && flag&BF_MAGIC ){ - // ソスjソスソスソス[ソス} + // ニューマ damage=0; } - if(sc_data[SC_AETERNA].timer!=-1 && damage>0){ // ソスソスソスbソスNソスXソスGソス[ソスeソスソスソスi + if(sc_data[SC_AETERNA].timer!=-1 && damage>0){ // レックスエーテルナ damage<<=1; skill_status_change_end( bl,SC_AETERNA,-1 ); } - //ソスソスソスソスソスソスソスフダソスソスソス[ソスWソスソスソスソス - if(sc_data[SC_VOLCANO].timer!=-1){ // ソス{ソスソスソスPソス[ソスm + //属性場のダメージ増加 + if(sc_data[SC_VOLCANO].timer!=-1){ // ボルケーノ if(flag&BF_SKILL && skill_get_pl(skill_num)==3) damage += damage*sc_data[SC_VOLCANO].val4/100; else if(!flag&BF_SKILL && battle_get_attack_element(bl)==3) damage += damage*sc_data[SC_VOLCANO].val4/100; } - if(sc_data[SC_VIOLENTGALE].timer!=-1){ // ソスoソスCソスIソスソスソスソスソスgソスQソスCソスソス + if(sc_data[SC_VIOLENTGALE].timer!=-1){ // バイオレントゲイル if(flag&BF_SKILL && skill_get_pl(skill_num)==4) damage += damage*sc_data[SC_VIOLENTGALE].val4/100; else if(!flag&BF_SKILL && battle_get_attack_element(bl)==4) damage += damage*sc_data[SC_VIOLENTGALE].val4/100; } - if(sc_data[SC_DELUGE].timer!=-1){ // ソスfソスソスソスソスソス[ソスW + if(sc_data[SC_DELUGE].timer!=-1){ // デリュージ if(flag&BF_SKILL && skill_get_pl(skill_num)==1) damage += damage*sc_data[SC_DELUGE].val4/100; else if(!flag&BF_SKILL && battle_get_attack_element(bl)==1) damage += damage*sc_data[SC_DELUGE].val4/100; } - if(sc_data[SC_ENERGYCOAT].timer!=-1 && damage>0 && flag&BF_WEAPON){ // ソスGソスiソスWソス[ソスRソス[ソスg + if(sc_data[SC_ENERGYCOAT].timer!=-1 && damage>0 && flag&BF_WEAPON){ // エナジーコート if(sd){ if(sd->status.sp>0){ int per = sd->status.sp * 5 / (sd->status.max_sp + 1); @@ -1450,7 +1450,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i damage -= damage * (sc_data[SC_ENERGYCOAT].val1 * 6) / 100; } - if(sc_data[SC_KYRIE].timer!=-1 && damage > 0){ // ソスLソスソスソスGソスGソスソスソスCソス\ソスソス + if(sc_data[SC_KYRIE].timer!=-1 && damage > 0){ // キリエエレイソン sc=&sc_data[SC_KYRIE]; sc->val2-=damage; if(flag&BF_WEAPON){ @@ -1462,11 +1462,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i } if(sc_data[SC_BASILICA].timer!=-1 && damage > 0){ - // ソスjソスソスソス[ソス} + // ニューマ damage=0; } if(sc_data[SC_LANDPROTECTOR].timer!=-1 && damage>0 && flag&BF_MAGIC){ - // ソスjソスソスソス[ソス} + // ニューマ damage=0; } @@ -1488,14 +1488,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i clif_skill_nodamage(bl,bl,LK_PARRYING,sc_data[SC_PARRYING].val1,1); } } - // ソスソスソスWソスFソスNソスgソス\ソス[ソスh + // リジェクトソード if(sc_data[SC_REJECTSWORD].timer!=-1 && damage > 0 && flag&BF_WEAPON && ((src->type==BL_PC && ((struct map_session_data *)src)->status.weapon == (1 || 2 || 3)) || src->type==BL_MOB )){ - if(MRAND(100) < (10+5*sc_data[SC_REJECTSWORD].val1)){ //ソスソスソスヒ確ソスソスソスソス10+5*Lv + if(MRAND(100) < (10+5*sc_data[SC_REJECTSWORD].val1)){ //反射確率は10+5*Lv damage = damage*50/100; battle_damage(bl,src,damage,0); - //ソス_ソスソスソス[ソスWソスソスソス^ソスソスソスソスソスフは良ゑソスソスだゑソスソスAソスソスソスソスソスソスソスソスソスヌゑソスソスソスソスト表ソスソスソスソスソスソスソスだゑソスソスかソスソスソスヒゑソス - //ソスGソスtソスFソスNソスgソスソスソスソスソスナゑソスソスソスソスフゑソスソスかソスソスソスヒゑソス + //ダメージを与えたのは良いんだが、ここからどうして表示するんだかわかんねぇ + //エフェクトもこれでいいのかわかんねぇ clif_skill_nodamage(bl,bl,ST_REJECTSWORD,sc_data[SC_REJECTSWORD].val1,1); if((--sc_data[SC_REJECTSWORD].val2)<=0) skill_status_change_end(bl, SC_REJECTSWORD, -1); @@ -1515,11 +1515,11 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i if(gc && agit_flag==0 && class != 1288) // guardians cannot be damaged during non-woe [Valaris] damage=0; // end woe check [Valaris] if(g == NULL) - damage=0;//ソスMソスソスソスhソスソスソスソスソスソスネゑソスソス_ソスソスソス[ソスWソスソスソスソス + damage=0;//ギルド未加入ならダメージ無し else if((gc != NULL) && guild_isallied(g, gc)) - damage=0;//ソスソスソスソスソスフギソスソスソスhソスフエソスソスソスyソスネゑソスソス_ソスソスソス[ソスWソスソスソスソス + damage=0;//自占領ギルドのエンペならダメージ無し else if(g && guild_checkskill(g,GD_APPROVAL) <= 0) - damage=0;//ソスソスソスKソスMソスソスソスhソスソスソスFソスソスソスネゑソスソスニダソスソスソス[ソスWソスソスソスソス + damage=0;//正規ギルド承認がないとダメージ無し else if (battle_config.guild_max_castles != 0 && guild_checkcastles(g)>=battle_config.guild_max_castles) damage = 0; // [MouseJstr] } @@ -1549,14 +1549,14 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i damage = 3; } - if( md!=NULL && md->hp>0 && damage > 0 ) // ソスソスソスソスソスネどゑソスMOBソスXソスLソスソスソスソスソスソス + if( md!=NULL && md->hp>0 && damage > 0 ) // 反撃などのMOBスキル判定 mobskill_event(md,flag); return damage; } /*========================================== - * ソスCソスソスソス_ソスソスソス[ソスW + * 修練ダメージ *------------------------------------------ */ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int dmg,int type) @@ -1568,11 +1568,11 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int nullpo_retr(0, sd); - // ソスfソス[ソスソスソスソスソスxソスCソスソス(+3 ソス` +30) vs ソスsソスソス or ソスソスソスソス (ソスソスソスlソスヘ含めなゑソスソスH) + // デーモンベイン(+3 〜 +30) vs 不死 or 悪魔 (死人は含めない?) if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 && (battle_check_undead(race,battle_get_elem_type(target)) || race==6) ) damage += (skill * 3); - // ソスrソス[ソスXソスgソスxソスCソスソス(+4 ソス` +40) vs ソスソスソスソス or ソスソスソスソス + // ビーストベイン(+4 〜 +40) vs 動物 or 昆虫 if((skill = pc_checkskill(sd,HT_BEASTBANE)) > 0 && (race==2 || race==4) ) damage += (skill * 4); @@ -1582,10 +1582,10 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int weapon = sd->weapontype2; switch(weapon) { - case 0x01: // ソスZソスソス (Updated By AppleGirl) + case 0x01: // 短剣 (Updated By AppleGirl) case 0x02: // 1HS { - // ソスソスソスCソスソス(+4 ソス` +40) ソスミ手剣 ソスZソスソスソスワゑソス + // 剣修練(+4 〜 +40) 片手剣 短剣含む if((skill = pc_checkskill(sd,SM_SWORD)) > 0) { damage += (skill * 4); } @@ -1593,7 +1593,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x03: // 2HS { - // ソスソスソス闌包ソスCソスソス(+4 ソス` +40) ソスソスソス闌 + // 両手剣修練(+4 〜 +40) 両手剣 if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0) { damage += (skill * 4); } @@ -1601,27 +1601,27 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x04: // 1HL { - // ソスソスソスCソスソス(+4 ソス` +40,+5 ソス` +50) ソスソス + // 槍修練(+4 〜 +40,+5 〜 +50) 槍 if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) { if(!pc_isriding(sd)) - damage += (skill * 4); // ソスyソスRソスノ擾ソスソスソストなゑソス + damage += (skill * 4); // ペコに乗ってない else - damage += (skill * 5); // ソスyソスRソスノ擾ソスソスソストゑソス + damage += (skill * 5); // ペコに乗ってる } break; } case 0x05: // 2HL { - // ソスソスソスCソスソス(+4 ソス` +40,+5 ソス` +50) ソスソス + // 槍修練(+4 〜 +40,+5 〜 +50) 槍 if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) { if(!pc_isriding(sd)) - damage += (skill * 4); // ソスyソスRソスノ擾ソスソスソストなゑソス + damage += (skill * 4); // ペコに乗ってない else - damage += (skill * 5); // ソスyソスRソスノ擾ソスソスソストゑソス + damage += (skill * 5); // ペコに乗ってる } break; } - case 0x06: // ソスミ手斧 + case 0x06: // 片手斧 { if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) { damage += (skill * 3); @@ -1635,24 +1635,24 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } break; } - case 0x08: // ソスソスソスCソスX + case 0x08: // メイス { - // ソスソスソスCソスXソスCソスソス(+3 ソス` +30) ソスソスソスCソスX + // メイス修練(+3 〜 +30) メイス if((skill = pc_checkskill(sd,PR_MACEMASTERY)) > 0) { damage += (skill * 3); } break; } - case 0x09: // ソスネゑソス? + case 0x09: // なし? break; - case 0x0a: // ソスソス + case 0x0a: // 杖 break; - case 0x0b: // ソス| + case 0x0b: // 弓 break; - case 0x00: // ソスfソスソス + case 0x00: // 素手 case 0x0c: // Knuckles { - // ソスSソスソス(+3 ソス` +30) ソスfソスソス,ソスiソスbソスNソスソス + // 鉄拳(+3 〜 +30) 素手,ナックル if((skill = pc_checkskill(sd,MO_IRONHAND)) > 0) { damage += (skill * 3); } @@ -1660,7 +1660,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x0d: // Musical Instrument { - // ソスyソスソスソスフ暦ソスソスK(+3 ソス` +30) ソスyソスソス + // 楽器の練習(+3 〜 +30) 楽器 if((skill = pc_checkskill(sd,BA_MUSICALLESSON)) > 0) { damage += (skill * 3); } @@ -1668,7 +1668,7 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x0e: // Dance Mastery { - // Dance Lesson Skill Effect(+3 damage for every lvl = +30) ソスソス + // Dance Lesson Skill Effect(+3 damage for every lvl = +30) 鞭 if((skill = pc_checkskill(sd,DC_DANCINGLESSON)) > 0) { damage += (skill * 3); } @@ -1684,9 +1684,9 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int } case 0x10: // Katars { - // ソスJソス^ソス[ソスソスソスCソスソス(+3 ソス` +30) ソスJソス^ソス[ソスソス + // カタール修練(+3 〜 +30) カタール if((skill = pc_checkskill(sd,AS_KATAR)) > 0) { - //ソス\ソスjソスbソスNソスuソスソスソス[ソスソスソスヘ別擾ソスソスソスソスi1ソスソスソスノ付ソスソス1/8ソスKソスソス) + //ソニックブロー時は別処理(1撃に付き1/8適応) damage += (skill * 3); } break; @@ -1714,7 +1714,7 @@ static struct Damage battle_calc_mob_weapon_attack( short *sc_count; short *option, *opt1, *opt2; - //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 + //return前の処理があるので情報出力部のみ変更 if( src == NULL || target == NULL || md == NULL ){ nullpo_info(NLP_MARK); memset(&wd,0,sizeof(wd)); @@ -1729,7 +1729,7 @@ static struct Damage battle_calc_mob_weapon_attack( opt1=battle_get_opt1(src); opt2=battle_get_opt2(src); - // ソス^ソス[ソスQソスbソスg + // ターゲット if(target->type==BL_PC) tsd=(struct map_session_data *)target; else if(target->type==BL_MOB) @@ -1759,9 +1759,9 @@ static struct Damage battle_calc_mob_weapon_attack( else ac_flag = 1; } } - flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // ソスUソスソスソスフ趣ソスソズの設抵ソス + flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // 攻撃の種類の設定 - // ソスソスソス率計ソスZソスAソスソスソス判抵ソスソスヘ鯉ソスソスソス + // 回避率計算、回避判定は後で flee = battle_get_flee(target); if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); @@ -1785,7 +1785,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage = battle_get_baseatk(src); else damage = 0; - if(skill_num==HW_MAGICCRASHER){ /* ソス}ソスWソスbソスNソスNソスソスソスbソスVソスソスソス[ソスソスMATKソスナ会ソスソスソス */ + if(skill_num==HW_MAGICCRASHER){ /* マジッククラッシャーはMATKで殴る */ atkmin = battle_get_matk1(src); atkmax = battle_get_matk2(src); }else{ @@ -1797,7 +1797,7 @@ static struct Damage battle_calc_mob_weapon_attack( if(atkmin > atkmax) atkmin = atkmax; - if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // ソス}ソスLソスVソス}ソスCソスYソスpソスソスソス[ + if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // マキシマイズパワー atkmin=atkmax; } @@ -1808,7 +1808,7 @@ static struct Damage battle_calc_mob_weapon_attack( if(cri < 1) cri = 1; } - if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // ソスソスソスソスソスソスソスヘクソスソスソスeソスBソスJソスソスソスソスソス{ソスソス + if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // 睡眠中はクリティカルが倍に cri <<=1; if(ac_flag) cri = 1000; @@ -1823,8 +1823,8 @@ static struct Damage battle_calc_mob_weapon_attack( if(tsd && tsd->critical_def) cri = cri * (100 - tsd->critical_def) / 100; - if((skill_num == 0 || skill_num == KN_AUTOCOUNTER) && skill_lv >= 0 && battle_config.enemy_critical && (MRAND(1000)) < cri) // ソスソスソスソスソスiソスXソスLソスソスソスフ場合ソスヘ厄ソスソスソスソスj - // ソスGソスフ費ソスソスソス + if((skill_num == 0 || skill_num == KN_AUTOCOUNTER) && skill_lv >= 0 && battle_config.enemy_critical && (MRAND(1000)) < cri) // 判定(スキルの場合は無視) + // 敵の判定 { damage += atkmax; type = 0x0a; @@ -1836,19 +1836,19 @@ static struct Damage battle_calc_mob_weapon_attack( damage += atkmin + MRAND((atkmax-atkmin + 1)); else damage += atkmin ; - // ソスXソスLソスソスソスCソスソスソスPソスiソスUソスソスソスヘ倍ソスソスソスnソスj - // ソスIソス[ソスoソス[ソスgソスソスソスXソスg(+5% ソス` +25%),ソスソスソスUソスソスソスnソスXソスLソスソスソスフ場合ソスソスソスソスソスナ補正 - // ソスoソスbソスVソスソス,ソス}ソスOソスiソスソスソスuソスソスソスCソスN, - // ソス{ソス[ソスソスソスソスソスOソスoソスbソスVソスソス,ソスXソスsソスAソスuソス[ソスソスソスソスソスソス,ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA,ソスXソスsソスAソスXソス^ソスbソスu, - // ソスソスソス}ソス[ソスiソスCソスg,ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス - // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO,ソスAソスソスソス[ソスVソスソスソスソスソス[,ソス`ソスソスソス[ソスWソスAソスソスソス[, - // ソス\ソスjソスbソスNソスuソスソスソス[ - if(sc_data){ //ソスソスソスヤ異常中ソスフダソスソスソス[ソスWソスヌ会ソス - if(sc_data[SC_OVERTHRUST].timer!=-1) // ソスIソス[ソスoソス[ソスgソスソスソスXソスg + // スキル修正1(攻撃力倍化系) + // オーバートラスト(+5% 〜 +25%),他攻撃系スキルの場合ここで補正 + // バッシュ,マグナムブレイク, + // ボーリングバッシュ,スピアブーメラン,ブランディッシュスピア,スピアスタッブ, + // メマーナイト,カートレボリューション + // ダブルストレイフィング,アローシャワー,チャージアロー, + // ソニックブロー + if(sc_data){ //状態異常中のダメージ追加 + if(sc_data[SC_OVERTHRUST].timer!=-1) // オーバートラスト damage += damage*(5*sc_data[SC_OVERTHRUST].val1)/100; - if(sc_data[SC_TRUESIGHT].timer!=-1) // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1) // トゥルーサイト damage += damage*(2*sc_data[SC_TRUESIGHT].val1)/100; - if(sc_data[SC_BERSERK].timer!=-1) // ソスoソス[ソスTソス[ソスN + if(sc_data[SC_BERSERK].timer!=-1) // バーサーク damage += damage*50/100; } @@ -1859,43 +1859,43 @@ static struct Damage battle_calc_mob_weapon_attack( flag=(flag&~BF_SKILLMASK)|BF_SKILL; switch( skill_num ){ - case SM_BASH: // ソスoソスbソスVソスソス + case SM_BASH: // バッシュ damage = damage*(100+ 30*skill_lv)/100; hitrate = (hitrate*(100+5*skill_lv))/100; break; - case SM_MAGNUM: // ソス}ソスOソスiソスソスソスuソスソスソスCソスN + case SM_MAGNUM: // マグナムブレイク damage = damage*(5*skill_lv +(wflag)?65:115 )/100; break; - case MC_MAMMONITE: // ソスソスソス}ソス[ソスiソスCソスg + case MC_MAMMONITE: // メマーナイト damage = damage*(100+ 50*skill_lv)/100; break; - case AC_DOUBLE: // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO + case AC_DOUBLE: // ダブルストレイフィング damage = damage*(180+ 20*skill_lv)/100; div_=2; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case AC_SHOWER: // ソスAソスソスソス[ソスVソスソスソスソスソス[ + case AC_SHOWER: // アローシャワー damage = damage*(75 + 5*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case AC_CHARGEARROW: // ソス`ソスソスソス[ソスWソスAソスソスソス[ + case AC_CHARGEARROW: // チャージアロー damage = damage*150/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case KN_PIERCE: // ソスsソスAソス[ソスX + case KN_PIERCE: // ピアース damage = damage*(100+ 10*skill_lv)/100; hitrate=hitrate*(100+5*skill_lv)/100; div_=t_size+1; damage*=div_; break; - case KN_SPEARSTAB: // ソスXソスsソスAソスXソス^ソスu + case KN_SPEARSTAB: // スピアスタブ damage = damage*(100+ 15*skill_lv)/100; break; - case KN_SPEARBOOMERANG: // ソスXソスsソスAソスuソス[ソスソスソスソスソスソス + case KN_SPEARBOOMERANG: // スピアブーメラン damage = damage*(100+ 50*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case KN_BRANDISHSPEAR: // ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA + case KN_BRANDISHSPEAR: // ブランディッシュスピア damage = damage*(100+ 20*skill_lv)/100; if(skill_lv>3 && wflag==1) damage2+=damage/2; if(skill_lv>6 && wflag==1) damage2+=damage/4; @@ -1906,7 +1906,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage +=damage2; blewcount=0; break; - case KN_BOWLINGBASH: // ソス{ソスEソスソスソスソスソスOソスoソスbソスVソスソス + case KN_BOWLINGBASH: // ボウリングバッシュ damage = damage*(100+ 50*skill_lv)/100; blewcount=0; break; @@ -1917,25 +1917,25 @@ static struct Damage battle_calc_mob_weapon_attack( hitrate = 1000000; flag=(flag&~BF_SKILLMASK)|BF_NORMAL; break; - case AS_SONICBLOW: // ソス\ソスjソスbソスNソスuソスソスソスE + case AS_SONICBLOW: // ソニックブロウ damage = damage*(300+ 50*skill_lv)/100; div_=8; break; - case TF_SPRINKLESAND: // ソスソスソスワゑソス + case TF_SPRINKLESAND: // 砂まき damage = damage*125/100; break; - case MC_CARTREVOLUTION: // ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス + case MC_CARTREVOLUTION: // カートレボリューション damage = (damage*150)/100; break; - // ソスネ会ソスMOB - case NPC_COMBOATTACK: // ソスソスソスiソスUソスソス + // 以下MOB + case NPC_COMBOATTACK: // 多段攻撃 div_=skill_get_num(skill_num,skill_lv); damage *= div_; break; - case NPC_RANDOMATTACK: // ソスソスソスソスソス_ソスソスATKソスUソスソス + case NPC_RANDOMATTACK: // ランダムATK攻撃 damage = damage*(MPRAND(50, 150))/100; break; - // ソスソスソスソスソスUソスソスソスiソスKソスソスソスj + // 属性攻撃(適当) case NPC_WATERATTACK: case NPC_GROUNDATTACK: case NPC_FIREATTACK: @@ -1955,115 +1955,115 @@ static struct Damage battle_calc_mob_weapon_attack( case NPC_PIERCINGATT: flag=(flag&~BF_RANGEMASK)|BF_SHORT; break; - case RG_BACKSTAP: // ソスoソスbソスNソスXソス^ソスu + case RG_BACKSTAP: // バックスタブ damage = damage*(300+ 40*skill_lv)/100; hitrate = 1000000; break; - case RG_RAID: // ソスTソスvソスソスソスCソスYソスAソス^ソスbソスN + case RG_RAID: // サプライズアタック damage = damage*(100+ 40*skill_lv)/100; break; - case RG_INTIMIDATE: // ソスCソスソスソスeソスBソス~ソスfソスCソスg + case RG_INTIMIDATE: // インティミデイト damage = damage*(100+ 30*skill_lv)/100; break; - case CR_SHIELDCHARGE: // ソスVソス[ソスソスソスhソス`ソスソスソス[ソスW + case CR_SHIELDCHARGE: // シールドチャージ damage = damage*(100+ 20*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_SHORT; s_ele = 0; break; - case CR_SHIELDBOOMERANG: // ソスVソス[ソスソスソスhソスuソス[ソスソスソスソスソスソス + case CR_SHIELDBOOMERANG: // シールドブーメラン damage = damage*(100+ 30*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; s_ele = 0; break; - case CR_HOLYCROSS: // ソスzソス[ソスソスソス[ソスNソスソスソスX + case CR_HOLYCROSS: // ホーリークロス damage = damage*(100+ 35*skill_lv)/100; div_=2; break; case CR_GRANDCROSS: hitrate= 1000000; break; - case AM_DEMONSTRATION: // ソスfソスソスソスソスソスXソスgソスソスソス[ソスVソスソスソスソス + case AM_DEMONSTRATION: // デモンストレーション damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case AM_ACIDTERROR: // ソスAソスVソスbソスhソスeソスソスソス[ + case AM_ACIDTERROR: // アシッドテラー damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; - case MO_FINGEROFFENSIVE: //ソスwソスe + case MO_FINGEROFFENSIVE: //指弾 damage = damage * (100 + 50 * skill_lv) / 100; div_ = 1; break; - case MO_INVESTIGATE: // ソスソス ソスソス + case MO_INVESTIGATE: // 発 勁 if(def1 < 1000000) damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100; hitrate = 1000000; s_ele = 0; break; - case MO_EXTREMITYFIST: // ソスソスソスCソスソスソスeソスPソスソス + case MO_EXTREMITYFIST: // 阿修羅覇鳳拳 damage = damage * 8 + 250 + (skill_lv * 150); hitrate = 1000000; s_ele = 0; break; - case MO_CHAINCOMBO: // ソスAソスナ擾ソス + case MO_CHAINCOMBO: // 連打掌 damage = damage*(150+ 50*skill_lv)/100; div_=4; break; - case BA_MUSICALSTRIKE: // ソス~ソスソスソス[ソスWソスJソスソスソスXソスgソスソスソスCソスN + case BA_MUSICALSTRIKE: // ミュージカルストライク damage = damage*(100+ 50 * skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case DC_THROWARROW: // ソス撃ソスソス + case DC_THROWARROW: // 矢撃ち damage = damage*(100+ 50 * skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case MO_COMBOFINISH: // ソスメ暦ソスソスソス + case MO_COMBOFINISH: // 猛龍拳 damage = damage*(240+ 60*skill_lv)/100; break; - case CH_TIGERFIST: // ソスソスソスユ鯉ソス + case CH_TIGERFIST: // 伏虎拳 damage = damage*(100+ 20*skill_lv)/100; break; - case CH_CHAINCRUSH: // ソスAソスソスソスソスソスソス + case CH_CHAINCRUSH: // 連柱崩撃 damage = damage*(100+ 20*skill_lv)/100; div_=skill_get_num(skill_num,skill_lv); break; - case CH_PALMSTRIKE: // ソスメ虎硬ソスhソスR + case CH_PALMSTRIKE: // 猛虎硬派山 damage = damage*(50+ 100*skill_lv)/100; break; - case LK_SPIRALPIERCE: /* ソスXソスpソスCソスソスソスソスソスsソスAソス[ソスX */ - damage = damage*(100+ 50*skill_lv)/100; //ソスソスソスソスハゑソスソスソスソスソスソスソスソスネゑソスソスフで適ソスソスソスソス + case LK_SPIRALPIERCE: /* スパイラルピアース */ + damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に div_=5; if(tsd) tsd->canmove_tick = gettick() + 1000; else if(tmd) tmd->canmove_tick = gettick() + 1000; break; - case LK_HEADCRUSH: /* ソスwソスbソスhソスNソスソスソスbソスVソスソス */ + case LK_HEADCRUSH: /* ヘッドクラッシュ */ damage = damage*(100+ 20*skill_lv)/100; break; - case LK_JOINTBEAT: /* ソスWソスソスソスCソスソスソスgソスrソス[ソスg */ + case LK_JOINTBEAT: /* ジョイントビート */ damage = damage*(50+ 10*skill_lv)/100; break; - case ASC_METEORASSAULT: /* ソスソスソスeソスIソスAソスTソスソスソスg */ + case ASC_METEORASSAULT: /* メテオアサルト */ damage = damage*(40+ 40*skill_lv)/100; break; - case SN_SHARPSHOOTING: /* ソスVソスソスソス[ソスvソスVソスソスソス[ソスeソスBソスソスソスO */ + case SN_SHARPSHOOTING: /* シャープシューティング */ damage += damage*(30*skill_lv)/100; break; - case CG_ARROWVULCAN: /* ソスAソスソスソス[ソスoソスソスソスJソスソス */ + case CG_ARROWVULCAN: /* アローバルカン */ damage = damage*(160+40*skill_lv)/100; div_=9; break; - case AS_SPLASHER: /* ソスxソスiソスソスソスXソスvソスソスソスbソスVソスソスソス[ */ + case AS_SPLASHER: /* ベナムスプラッシャー */ damage = damage*(200+20*skill_lv)/100; break; } } if( skill_num!=NPC_CRITICALSLASH ){ - // ソスソス ソスロの防ソスソスソスヘにゑソスソスソスソス_ソスソスソス[ソスWソスフ鯉ソスソスソス - // ソスfソスBソスoソスCソスソスソスvソスソスソスeソスNソスVソスソスソスソスソスiソスソスソスソスソスナゑソスソスソスソスフゑソスソスネ?ソスj - if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VITソスソスソスソス + // 対 象の防御力によるダメージの減少 + // ディバインプロテクション(ここでいいのかな?) + if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VIT無視 int t_def; target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv); if(battle_config.vit_penaly_type > 0) { @@ -2099,16 +2099,16 @@ static struct Damage battle_calc_mob_weapon_attack( } } - // 0ソスソスソスソスソスソスソスソスソスソス鼾1ソスノ補正 + // 0未満だった場合1に補正 if(damage<1) damage=1; - // ソスソスソスソスソスCソスソス + // 回避修正 if(hitrate < 1000000) hitrate = ( (hitrate>95)?95: ((hitrate<5)?5:hitrate) ); - if( hitrate < 1000000 && // ソスKソスソスソスUソスソス - (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // ソスソスソスソスソスヘ必ソスソス - t_sc_data[SC_STAN].timer!=-1 || // ソスXソス^ソスソスソスヘ必ソスソス - t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // ソスソスソスソスソスヘ必ソスソス + if( hitrate < 1000000 && // 必中攻撃 + (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // 睡眠は必中 + t_sc_data[SC_STAN].timer!=-1 || // スタンは必中 + t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // 凍結は必中 hitrate = 1000000; if(type == 0 && MRAND(100) >= hitrate) { damage = damage2 = 0; @@ -2119,8 +2119,8 @@ static struct Damage battle_calc_mob_weapon_attack( if(tsd){ int cardfix=100,i; - cardfix=cardfix*(100-tsd->subele[s_ele])/100; // ソスソス ソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス - cardfix=cardfix*(100-tsd->subrace[s_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属 性によるダメージ耐性 + cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 if(mob_db[md->class].mode & 0x20) cardfix=cardfix*(100-tsd->subrace[10])/100; else @@ -2144,7 +2144,7 @@ static struct Damage battle_calc_mob_weapon_attack( if(cardfix != 100) damage=damage*cardfix/100; } - if(t_sc_data && t_sc_data[SC_ASSUMPTIO].timer != -1){ //ソスAソスVソスソスソスソスソスvソスeソスBソスI + if(t_sc_data && t_sc_data[SC_ASSUMPTIO].timer != -1){ //アシャンプティオ if(!map[target->m].flag.pvp) damage=damage/3; else @@ -2153,19 +2153,19 @@ static struct Damage battle_calc_mob_weapon_attack( if(damage < 0) damage = 0; - // ソスソス ソスソスソスフ適ソスp + // 属 性の適用 if (!((battle_config.mob_ghostring_fix == 1) && (battle_get_element(target) == 8) && (target->type==BL_PC))) // [MouseJstr] if(skill_num != 0 || s_ele != 0 || !battle_config.mob_attack_attr_none) damage=battle_attr_fix(damage, s_ele, battle_get_element(target) ); - if(sc_data && sc_data[SC_AURABLADE].timer!=-1) /* ソスIソス[ソスソスソスuソスソスソス[ソスh ソスKソスソス */ + if(sc_data && sc_data[SC_AURABLADE].timer!=-1) /* オーラブレード 必中 */ damage += sc_data[SC_AURABLADE].val1 * 10; - if(skill_num==PA_PRESSURE) /* ソスvソスソスソスbソスVソスソスソス[ ソスKソスソス? */ + if(skill_num==PA_PRESSURE) /* プレッシャー 必中? */ damage = 700+100*skill_lv; - // ソスCソスソスソスxソスiソスソスソスCソスソス + // インベナム修正 if(skill_num==TF_POISON){ damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) ); } @@ -2173,7 +2173,7 @@ static struct Damage battle_calc_mob_weapon_attack( damage = battle_attr_fix(damage, 0, battle_get_element(target) ); } - // ソスソスソスSソスソスソスソスソスフ費ソスソスソス + // 完全回避の判定 if(skill_num == 0 && skill_lv >= 0 && tsd!=NULL && MRAND(1000) < battle_get_flee2(target) ){ damage=0; type=0x0b; @@ -2213,7 +2213,7 @@ static struct Damage battle_calc_mob_weapon_attack( } /* * ========================================================================= - * PCソスフ包ソスソスソスソスノゑソスソスソスソスUソスソス + * PCの武器による攻撃 *------------------------------------------------------------------------- */ static struct Damage battle_calc_pc_weapon_attack( @@ -2233,81 +2233,81 @@ static struct Damage battle_calc_pc_weapon_attack( struct status_change *sc_data,*t_sc_data; short *sc_count; short *option, *opt1, *opt2; - int atkmax_=0, atkmin_=0, s_ele_; //ソス刀暦ソスソスp + int atkmax_=0, atkmin_=0, s_ele_; //二刀流用 int watk,watk_,cardfix,t_ele; int da=0,i,t_class,ac_flag = 0; int idef_flag=0,idef_flag_=0; - //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 + //return前の処理があるので情報出力部のみ変更 if( src == NULL || target == NULL || sd == NULL ){ nullpo_info(NLP_MARK); memset(&wd,0,sizeof(wd)); return wd; } - // ソスAソス^ソスbソスJソス[ - s_race=battle_get_race(src); //ソス族 - s_ele=battle_get_attack_element(src); //ソスソスソスソス - s_ele_=battle_get_attack_element2(src); //ソスソスソス闡ョソスソス - sc_data=battle_get_sc_data(src); //ソスXソスeソス[ソス^ソスXソスル擾ソス - sc_count=battle_get_sc_count(src); //ソスXソスeソス[ソス^ソスXソスル擾ソスソスフ撰ソス - option=battle_get_option(src); //ソスソスソスニゑソスソスyソスRソスニゑソスソスJソス[ソスgソスニゑソス - opt1=battle_get_opt1(src); //ソスホ会ソスソスAソスソスソスソスソスAソスXソス^ソスソスソスAソスソスソスソスソスAソステ茨ソス - opt2=battle_get_opt2(src); //ソスナ、ソスい、ソスソスソスル、ソステ闇? - - if(skill_num != CR_GRANDCROSS) //ソスOソスソスソスソスソスhソスNソスソスソスXソスナなゑソスソスネゑソス - sd->state.attack_type = BF_WEAPON; //ソスUソスソスソス^ソスCソスvソスヘ包ソスソスソスソスUソスソス - - // ソス^ソス[ソスQソスbソスg - if(target->type==BL_PC) //ソスホ象ゑソスPCソスネゑソス - tsd=(struct map_session_data *)target; //tsdソスノ托ソスソスソス(tmdソスソスNULL) - else if(target->type==BL_MOB) //ソスホ象ゑソスMobソスネゑソス - tmd=(struct mob_data *)target; //tmdソスノ托ソスソスソス(tsdソスソスNULL) - t_race=battle_get_race( target ); //ソスホ象の種族 - t_ele=battle_get_elem_type(target); //ソスホ象の托ソスソスソス - t_size=battle_get_size( target ); //ソスホ象のサソスCソスY - t_mode=battle_get_mode( target ); //ソスホ象ゑソスMode - t_sc_data=battle_get_sc_data( target ); //ソスホ象のスソスeソス[ソス^ソスXソスル擾ソス - -//ソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスソスソスソスソスソスソスソスソスソス + // アタッカー + s_race=battle_get_race(src); //種族 + s_ele=battle_get_attack_element(src); //属性 + s_ele_=battle_get_attack_element2(src); //左手属性 + sc_data=battle_get_sc_data(src); //ステータス異常 + sc_count=battle_get_sc_count(src); //ステータス異常の数 + option=battle_get_option(src); //鷹とかペコとかカートとか + opt1=battle_get_opt1(src); //石化、凍結、スタン、睡眠、暗闇 + opt2=battle_get_opt2(src); //毒、呪い、沈黙、暗闇? + + if(skill_num != CR_GRANDCROSS) //グランドクロスでないなら + sd->state.attack_type = BF_WEAPON; //攻撃タイプは武器攻撃 + + // ターゲット + if(target->type==BL_PC) //対象がPCなら + tsd=(struct map_session_data *)target; //tsdに代入(tmdはNULL) + else if(target->type==BL_MOB) //対象がMobなら + tmd=(struct mob_data *)target; //tmdに代入(tsdはNULL) + t_race=battle_get_race( target ); //対象の種族 + t_ele=battle_get_elem_type(target); //対象の属性 + t_size=battle_get_size( target ); //対象のサイズ + t_mode=battle_get_mode( target ); //対象のMode + t_sc_data=battle_get_sc_data( target ); //対象のステータス異常 + +//オートカウンター処理ここから if((skill_num == 0 || (target->type == BL_PC && battle_config.pc_auto_counter_type&2) || (target->type == BL_MOB && battle_config.monster_auto_counter_type&2)) && skill_lv >= 0) { - if(skill_num != CR_GRANDCROSS && t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1) { //ソスOソスソスソスソスソスhソスNソスソスソスXソスナなゑソスソスAソスホ象ゑソスソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスヤの場合 + if(skill_num != CR_GRANDCROSS && t_sc_data && t_sc_data[SC_AUTOCOUNTER].timer != -1) { //グランドクロスでなく、対象がオートカウンター状態の場合 int dir = map_calc_dir(src,target->x,target->y),t_dir = battle_get_dir(target); int dist = distance(src->x,src->y,target->x,target->y); - if(dist <= 0 || map_check_dir(dir,t_dir) ) { //ソスホ象との具ソスソスソスソスソス0ソスネ会ソスソスAソスワゑソスソスヘ対象の撰ソスソスハ? + if(dist <= 0 || map_check_dir(dir,t_dir) ) { //対象との距離が0以下、または対象の正面? memset(&wd,0,sizeof(wd)); t_sc_data[SC_AUTOCOUNTER].val3 = 0; t_sc_data[SC_AUTOCOUNTER].val4 = 1; - if(sc_data && sc_data[SC_AUTOCOUNTER].timer == -1) { //ソスソスソスソスソスソスソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスソス + if(sc_data && sc_data[SC_AUTOCOUNTER].timer == -1) { //自分がオートカウンター状態 int range = battle_get_range(target); - if((target->type == BL_PC && ((struct map_session_data *)target)->status.weapon != 11 && dist <= range+1) || //ソスホ象ゑソスPCソスナ包ソスソスがソス|ソスソスソスナなゑソスソスヒ抵ソスソスソス - (target->type == BL_MOB && range <= 3 && dist <= range+1) ) //ソスワゑソスソスヘ対象ゑソスMobソスナ射抵ソスソスソス3ソスネ会ソスソスナ射抵ソスソスソス + if((target->type == BL_PC && ((struct map_session_data *)target)->status.weapon != 11 && dist <= range+1) || //対象がPCで武器が弓矢でなく射程内 + (target->type == BL_MOB && range <= 3 && dist <= range+1) ) //または対象がMobで射程が3以下で射程内 t_sc_data[SC_AUTOCOUNTER].val3 = src->id; } - return wd; //ソス_ソスソスソス[ソスWソス\ソスソスソスフゑソスソスヤゑソスソスト終ソスソス + return wd; //ダメージ構造体を返して終了 } else ac_flag = 1; } } -//ソスIソス[ソスgソスJソスEソスソスソス^ソス[ソスソスソスソスソスソスソスソスソスワゑソス +//オートカウンター処理ここまで - flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // ソスUソスソスソスフ趣ソスソズの設抵ソス + flag=BF_SHORT|BF_WEAPON|BF_NORMAL; // 攻撃の種類の設定 - // ソスソスソス率計ソスZソスAソスソスソス判抵ソスソスヘ鯉ソスソスソス + // 回避率計算、回避判定は後で flee = battle_get_flee(target); - if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) //AGIソスAVITソスyソスiソスソスソスeソスBソスン定がソスLソスソス - target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); //ソスホ象の撰ソスソスソスソスZソスo + if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) //AGI、VITペナルティ設定が有効 + target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); //対象の数を算出 if(battle_config.agi_penaly_type > 0) { - if(target_count >= battle_config.agi_penaly_count) { //ソスyソスiソスソスソスeソスBソスン抵ソスソスソスソスソスソスホ象ゑソスソスソスソスソス - if(battle_config.agi_penaly_type == 1) //ソスソスソス率ゑソスagi_penaly_num%ソスソスソスツ鯉ソスソスソス + if(target_count >= battle_config.agi_penaly_count) { //ペナルティ設定より対象が多い + if(battle_config.agi_penaly_type == 1) //回避率がagi_penaly_num%ずつ減少 flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100; - else if(battle_config.agi_penaly_type == 2) //ソスソスソス率ゑソスagi_penaly_numソスソスソスソスソスソス + else if(battle_config.agi_penaly_type == 2) //回避率がagi_penaly_num分減少 flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num; - if(flee < 1) flee = 1; //ソスソスソス率は最抵ソスソスナゑソス1 + if(flee < 1) flee = 1; //回避率は最低でも1 } } - hitrate=battle_get_hit(src) - flee + 80; //ソスソスソスソスソスソスソスvソスZ + hitrate=battle_get_hit(src) - flee + 80; //命中率計算 { // [Fate] Reduce hit chance by distance int dx = abs(src->x - target->x); int dy = abs(src->y - target->y); @@ -2321,31 +2321,31 @@ static struct Damage battle_calc_pc_weapon_attack( dex=battle_get_dex(src); //DEX luk=battle_get_luk(src); //LUK watk = battle_get_atk(src); //ATK - watk_ = battle_get_atk_(src); //ATKソスソスソスソス + watk_ = battle_get_atk_(src); //ATK左手 - if(skill_num==HW_MAGICCRASHER){ /* ソス}ソスWソスbソスNソスNソスソスソスbソスVソスソスソス[ソスソスMATKソスナ会ソスソスソス */ - damage = damage2 = battle_get_matk1(src); //damega,damega2ソスソスソスoソスソスソスAbase_atkソスフ取得 + if(skill_num==HW_MAGICCRASHER){ /* マジッククラッシャーはMATKで殴る */ + damage = damage2 = battle_get_matk1(src); //damega,damega2初登場、base_atkの取得 }else{ - damage = damage2 = battle_get_baseatk(&sd->bl); //damega,damega2ソスソスソスoソスソスソスAbase_atkソスフ取得 + damage = damage2 = battle_get_baseatk(&sd->bl); //damega,damega2初登場、base_atkの取得 } - atkmin = atkmin_ = dex; //ソスナ抵ソスATKソスソスDEXソスナ擾ソスソスソスソスソスソスH - sd->state.arrow_atk = 0; //arrow_atkソスソスソスソスソスソス + atkmin = atkmin_ = dex; //最低ATKはDEXで初期化? + sd->state.arrow_atk = 0; //arrow_atk初期化 if(sd->equip_index[9] >= 0 && sd->inventory_data[sd->equip_index[9]]) atkmin = atkmin*(80 + sd->inventory_data[sd->equip_index[9]]->wlv*20)/100; if(sd->equip_index[8] >= 0 && sd->inventory_data[sd->equip_index[8]]) atkmin_ = atkmin_*(80 + sd->inventory_data[sd->equip_index[8]]->wlv*20)/100; - if(sd->status.weapon == 11) { //ソスソスソスがソス|ソスソスソスフ場合 - atkmin = watk * ((atkminarrow_ele > 0) //ソスソスソスソスソスソスソスネら属ソスソスソスソスソスソスソスフ托ソスソスソスソスノ変更 + if(sd->status.weapon == 11) { //武器が弓矢の場合 + atkmin = watk * ((atkminarrow_ele > 0) //属性矢なら属性を矢の属性に変更 s_ele = sd->arrow_ele; - sd->state.arrow_atk = 1; //arrow_atkソスLソスソスソスソス + sd->state.arrow_atk = 1; //arrow_atk有効化 } - // ソスTソスCソスYソスCソスソス - // ソスyソスRソスRソス謔オソストゑソスソスト、ソスソスソスナ攻ソスソスソスソスソスソスソス鼾ソスヘ抵ソスソス^ソスフサソスCソスYソスCソスソスソスソス100ソスノゑソスソスソス - // ソスEソスFソス|ソスソスソスpソス[ソスtソスFソスNソスVソスソスソスソス,ソスhソスソスソスCソスNC - if(((sd->special_state.no_sizefix) || (pc_isriding(sd) && (sd->status.weapon==4 || sd->status.weapon==5) && t_size==1) || skill_num == MO_EXTREMITYFIST)){ //ソスyソスRソスRソス謔オソストゑソスソスト、ソスソスソスナ抵ソスソス^ソスソスソスUソスソス + // サイズ修正 + // ペコ騎乗していて、槍で攻撃した場合は中型のサイズ修正を100にする + // ウェポンパーフェクション,ドレイクC + if(((sd->special_state.no_sizefix) || (pc_isriding(sd) && (sd->status.weapon==4 || sd->status.weapon==5) && t_size==1) || skill_num == MO_EXTREMITYFIST)){ //ペコ騎乗していて、槍で中型を攻撃 atkmax = watk; atkmax_ = watk_; } else { @@ -2354,26 +2354,26 @@ static struct Damage battle_calc_pc_weapon_attack( atkmax_ = (watk_ * sd->atkmods_[ t_size ]) / 100; atkmin_ = (atkmin_ * sd->atkmods[ t_size ]) / 100; } - if( (sc_data != NULL && sc_data[SC_WEAPONPERFECTION].timer!=-1) || (sd->special_state.no_sizefix)) { // ソスEソスFソス|ソスソスソスpソス[ソスtソスFソスNソスVソスソスソスソス || ソスhソスソスソスCソスNソスJソス[ソスh + if( (sc_data != NULL && sc_data[SC_WEAPONPERFECTION].timer!=-1) || (sd->special_state.no_sizefix)) { // ウェポンパーフェクション || ドレイクカード atkmax = watk; atkmax_ = watk_; } - if(atkmin > atkmax && !(sd->state.arrow_atk)) atkmin = atkmax; //ソス|ソスヘ最低がソスソスソスソスソスソスソス鼾ソスソスソスソス + if(atkmin > atkmax && !(sd->state.arrow_atk)) atkmin = atkmax; //弓は最低が上回る場合あり if(atkmin_ > atkmax_) atkmin_ = atkmax_; - if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // ソス}ソスLソスVソス}ソスCソスYソスpソスソスソス[ + if(sc_data != NULL && sc_data[SC_MAXIMIZEPOWER].timer!=-1 ){ // マキシマイズパワー atkmin=atkmax; atkmin_=atkmax_; } - //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソス + //ダブルアタック判定 if(sd->weapontype1 == 0x01) { if(skill_num == 0 && skill_lv >= 0 && (skill = pc_checkskill(sd,TF_DOUBLE)) > 0) da = (MRAND(100) < (skill*5)) ? 1:0; } - //ソスOソスiソスソス + //三段掌 if(skill_num == 0 && skill_lv >= 0 && (skill = pc_checkskill(sd,MO_TRIPLEATTACK)) > 0 && sd->status.weapon <= 16 && !sd->state.arrow_atk) { da = (MRAND(100) < (30 - skill)) ? 2:0; } @@ -2381,23 +2381,23 @@ static struct Damage battle_calc_pc_weapon_attack( if(sd->double_rate > 0 && da == 0 && skill_num == 0 && skill_lv >= 0) da = (MRAND(100) < sd->double_rate) ? 1:0; - // ソス゚剰精ソスBソス{ソス[ソスiソスX + // 過剰精錬ボーナス if(sd->overrefine>0 ) damage+=MPRAND(1, sd->overrefine); if(sd->overrefine_>0 ) damage2+=MPRAND(1, sd->overrefine_); - if(da == 0){ //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソスソスソスソスソスソストゑソスソスネゑソス - // ソスNソスソスソスeソスBソスJソスソスソスvソスZ + if(da == 0){ //ダブルアタックが発動していない + // クリティカル計算 cri = battle_get_critical(src); if(sd->state.arrow_atk) cri += sd->arrow_cri; if(sd->status.weapon == 16) - // ソスJソス^ソス[ソスソスソスフ場合ソスAソスNソスソスソスeソスBソスJソスソスソスソスソス{ソスソス + // カタールの場合、クリティカルを倍に cri <<=1; cri -= battle_get_luk(target) * 3; - if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // ソスソスソスソスソスソスソスヘクソスソスソスeソスBソスJソスソスソスソスソス{ソスソス + if(t_sc_data != NULL && t_sc_data[SC_SLEEP].timer!=-1 ) // 睡眠中はクリティカルが倍に cri <<=1; if(ac_flag) cri = 1000; @@ -2415,8 +2415,8 @@ static struct Damage battle_calc_pc_weapon_attack( if(tsd && tsd->critical_def) cri = cri * (100-tsd->critical_def) / 100; - if(da == 0 && (skill_num==0 || skill_num == KN_AUTOCOUNTER || skill_num == SN_SHARPSHOOTING) && skill_lv >= 0 && //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソスソスソスソスソスソストゑソスソスネゑソス - (MRAND(1000)) < cri) // ソスソスソスソスソスiソスXソスLソスソスソスフ場合ソスヘ厄ソスソスソスソスj + if(da == 0 && (skill_num==0 || skill_num == KN_AUTOCOUNTER || skill_num == SN_SHARPSHOOTING) && skill_lv >= 0 && //ダブルアタックが発動していない + (MRAND(1000)) < cri) // 判定(スキルの場合は無視) { damage += atkmax; damage2 += atkmax_; @@ -2512,23 +2512,23 @@ static struct Damage battle_calc_pc_weapon_attack( } } - // ソスXソスLソスソスソスCソスソスソスPソスiソスUソスソスソスヘ倍ソスソスソスnソスj - // ソスIソス[ソスoソス[ソスgソスソスソスXソスg(+5% ソス` +25%),ソスソスソスUソスソスソスnソスXソスLソスソスソスフ場合ソスソスソスソスソスナ補正 - // ソスoソスbソスVソスソス,ソス}ソスOソスiソスソスソスuソスソスソスCソスN, - // ソス{ソス[ソスソスソスソスソスOソスoソスbソスVソスソス,ソスXソスsソスAソスuソス[ソスソスソスソスソスソス,ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA,ソスXソスsソスAソスXソス^ソスbソスu, - // ソスソスソス}ソス[ソスiソスCソスg,ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス - // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO,ソスAソスソスソス[ソスVソスソスソスソスソス[,ソス`ソスソスソス[ソスWソスAソスソスソス[, - // ソス\ソスjソスbソスNソスuソスソスソス[ - if(sc_data){ //ソスソスソスヤ異常中ソスフダソスソスソス[ソスWソスヌ会ソス - if(sc_data[SC_OVERTHRUST].timer!=-1){ // ソスIソス[ソスoソス[ソスgソスソスソスXソスg + // スキル修正1(攻撃力倍化系) + // オーバートラスト(+5% 〜 +25%),他攻撃系スキルの場合ここで補正 + // バッシュ,マグナムブレイク, + // ボーリングバッシュ,スピアブーメラン,ブランディッシュスピア,スピアスタッブ, + // メマーナイト,カートレボリューション + // ダブルストレイフィング,アローシャワー,チャージアロー, + // ソニックブロー + if(sc_data){ //状態異常中のダメージ追加 + if(sc_data[SC_OVERTHRUST].timer!=-1){ // オーバートラスト damage += damage*(5*sc_data[SC_OVERTHRUST].val1)/100; damage2 += damage2*(5*sc_data[SC_OVERTHRUST].val1)/100; } - if(sc_data[SC_TRUESIGHT].timer!=-1){ // ソスgソスDソスソスソス[ソスTソスCソスg + if(sc_data[SC_TRUESIGHT].timer!=-1){ // トゥルーサイト damage += damage*(2*sc_data[SC_TRUESIGHT].val1)/100; damage2 += damage2*(2*sc_data[SC_TRUESIGHT].val1)/100; } - if(sc_data[SC_BERSERK].timer!=-1){ // ソスoソス[ソスTソス[ソスN + if(sc_data[SC_BERSERK].timer!=-1){ // バーサーク damage += damage*50/100; damage2 += damage2*50/100; } @@ -2541,20 +2541,20 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_SKILLMASK)|BF_SKILL; switch( skill_num ){ - case SM_BASH: // ソスoソスbソスVソスソス + case SM_BASH: // バッシュ damage = damage*(100+ 30*skill_lv)/100; damage2 = damage2*(100+ 30*skill_lv)/100; hitrate = (hitrate*(100+5*skill_lv))/100; break; - case SM_MAGNUM: // ソス}ソスOソスiソスソスソスuソスソスソスCソスN + case SM_MAGNUM: // マグナムブレイク damage = damage*(5*skill_lv +(wflag)?65:115 )/100; damage2 = damage2*(5*skill_lv +(wflag)?65:115 )/100; break; - case MC_MAMMONITE: // ソスソスソス}ソス[ソスiソスCソスg + case MC_MAMMONITE: // メマーナイト damage = damage*(100+ 50*skill_lv)/100; damage2 = damage2*(100+ 50*skill_lv)/100; break; - case AC_DOUBLE: // ソス_ソスuソスソスソスXソスgソスソスソスCソスtソスBソスソスソスO + case AC_DOUBLE: // ダブルストレイフィング if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2570,7 +2570,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case AC_SHOWER: // ソスAソスソスソス[ソスVソスソスソスソスソス[ + case AC_SHOWER: // アローシャワー if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2585,7 +2585,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case AC_CHARGEARROW: // ソス`ソスソスソス[ソスWソスAソスソスソス[ + case AC_CHARGEARROW: // チャージアロー if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2600,7 +2600,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case KN_PIERCE: // ソスsソスAソス[ソスX + case KN_PIERCE: // ピアース damage = damage*(100+ 10*skill_lv)/100; damage2 = damage2*(100+ 10*skill_lv)/100; hitrate=hitrate*(100+5*skill_lv)/100; @@ -2608,16 +2608,16 @@ static struct Damage battle_calc_pc_weapon_attack( damage*=div_; damage2*=div_; break; - case KN_SPEARSTAB: // ソスXソスsソスAソスXソス^ソスu + case KN_SPEARSTAB: // スピアスタブ damage = damage*(100+ 15*skill_lv)/100; damage2 = damage2*(100+ 15*skill_lv)/100; break; - case KN_SPEARBOOMERANG: // ソスXソスsソスAソスuソス[ソスソスソスソスソスソス + case KN_SPEARBOOMERANG: // スピアブーメラン damage = damage*(100+ 50*skill_lv)/100; damage2 = damage2*(100+ 50*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; break; - case KN_BRANDISHSPEAR: // ソスuソスソスソスソスソスfソスBソスbソスVソスソスソスXソスsソスA + case KN_BRANDISHSPEAR: // ブランディッシュスピア damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; if(skill_lv>3 && wflag==1) damage3+=damage/2; @@ -2636,7 +2636,7 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 +=damage4; blewcount=0; break; - case KN_BOWLINGBASH: // ソス{ソスEソスソスソスソスソスOソスoソスbソスVソスソス + case KN_BOWLINGBASH: // ボウリングバッシュ damage = damage*(100+ 50*skill_lv)/100; damage2 = damage2*(100+ 50*skill_lv)/100; blewcount=0; @@ -2648,17 +2648,17 @@ static struct Damage battle_calc_pc_weapon_attack( hitrate = 1000000; flag=(flag&~BF_SKILLMASK)|BF_NORMAL; break; - case AS_SONICBLOW: // ソス\ソスjソスbソスNソスuソスソスソスE + case AS_SONICBLOW: // ソニックブロウ hitrate+=30; // hitrate +30, thanks to midas damage = damage*(300+ 50*skill_lv)/100; damage2 = damage2*(300+ 50*skill_lv)/100; div_=8; break; - case TF_SPRINKLESAND: // ソスソスソスワゑソス + case TF_SPRINKLESAND: // 砂まき damage = damage*125/100; damage2 = damage2*125/100; break; - case MC_CARTREVOLUTION: // ソスJソス[ソスgソスソスソス{ソスソスソスソスソス[ソスVソスソスソスソス + case MC_CARTREVOLUTION: // カートレボリューション if(sd->cart_max_weight > 0 && sd->cart_weight > 0) { damage = (damage*(150 + pc_checkskill(sd,BS_WEAPONRESEARCH) + (sd->cart_weight*100/sd->cart_max_weight) ) )/100; damage2 = (damage2*(150 + pc_checkskill(sd,BS_WEAPONRESEARCH) + (sd->cart_weight*100/sd->cart_max_weight) ) )/100; @@ -2668,17 +2668,17 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 = (damage2*150)/100; } break; - // ソスネ会ソスMOB - case NPC_COMBOATTACK: // ソスソスソスiソスUソスソス + // 以下MOB + case NPC_COMBOATTACK: // 多段攻撃 div_=skill_get_num(skill_num,skill_lv); damage *= div_; damage2 *= div_; break; - case NPC_RANDOMATTACK: // ソスソスソスソスソス_ソスソスATKソスUソスソス + case NPC_RANDOMATTACK: // ランダムATK攻撃 damage = damage*(MPRAND(50, 150))/100; damage2 = damage2*(MPRAND(50, 150))/100; break; - // ソスソスソスソスソスUソスソスソスiソスKソスソスソスj + // 属性攻撃(適当) case NPC_WATERATTACK: case NPC_GROUNDATTACK: case NPC_FIREATTACK: @@ -2699,7 +2699,7 @@ static struct Damage battle_calc_pc_weapon_attack( case NPC_PIERCINGATT: flag=(flag&~BF_RANGEMASK)|BF_SHORT; break; - case RG_BACKSTAP: // ソスoソスbソスNソスXソス^ソスu + case RG_BACKSTAP: // バックスタブ if(battle_config.backstab_bow_penalty == 1 && sd->status.weapon == 11){ damage = (damage*(300+ 40*skill_lv)/100)/2; damage2 = (damage2*(300+ 40*skill_lv)/100)/2; @@ -2709,27 +2709,27 @@ static struct Damage battle_calc_pc_weapon_attack( } hitrate = 1000000; break; - case RG_RAID: // ソスTソスvソスソスソスCソスYソスAソス^ソスbソスN + case RG_RAID: // サプライズアタック damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; - case RG_INTIMIDATE: // ソスCソスソスソスeソスBソス~ソスfソスCソスg + case RG_INTIMIDATE: // インティミデイト damage = damage*(100+ 30*skill_lv)/100; damage2 = damage2*(100+ 30*skill_lv)/100; break; - case CR_SHIELDCHARGE: // ソスVソス[ソスソスソスhソス`ソスソスソス[ソスW + case CR_SHIELDCHARGE: // シールドチャージ damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_SHORT; s_ele = 0; break; - case CR_SHIELDBOOMERANG: // ソスVソス[ソスソスソスhソスuソス[ソスソスソスソスソスソス + case CR_SHIELDBOOMERANG: // シールドブーメラン damage = damage*(100+ 30*skill_lv)/100; damage2 = damage2*(100+ 30*skill_lv)/100; flag=(flag&~BF_RANGEMASK)|BF_LONG; s_ele = 0; break; - case CR_HOLYCROSS: // ソスzソス[ソスソスソス[ソスNソスソスソスX + case CR_HOLYCROSS: // ホーリークロス damage = damage*(100+ 35*skill_lv)/100; damage2 = damage2*(100+ 35*skill_lv)/100; div_=2; @@ -2737,15 +2737,15 @@ static struct Damage battle_calc_pc_weapon_attack( case CR_GRANDCROSS: hitrate= 1000000; break; - case AM_DEMONSTRATION: // ソスfソスソスソスソスソスXソスgソスソスソス[ソスVソスソスソスソス + case AM_DEMONSTRATION: // デモンストレーション damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case AM_ACIDTERROR: // ソスAソスVソスbソスhソスeソスソスソス[ + case AM_ACIDTERROR: // アシッドテラー damage = damage*(100+ 40*skill_lv)/100; damage2 = damage2*(100+ 40*skill_lv)/100; break; - case MO_FINGEROFFENSIVE: //ソスwソスe + case MO_FINGEROFFENSIVE: //指弾 if(battle_config.finger_offensive_type == 0) { damage = damage * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; damage2 = damage2 * (100 + 50 * skill_lv) / 100 * sd->spiritball_old; @@ -2757,7 +2757,7 @@ static struct Damage battle_calc_pc_weapon_attack( div_ = 1; } break; - case MO_INVESTIGATE: // ソスソス ソスソス + case MO_INVESTIGATE: // 発 勁 if(def1 < 1000000) { damage = damage*(100+ 75*skill_lv)/100 * (def1 + def2)/100; damage2 = damage2*(100+ 75*skill_lv)/100 * (def1 + def2)/100; @@ -2766,7 +2766,7 @@ static struct Damage battle_calc_pc_weapon_attack( s_ele = 0; s_ele_ = 0; break; - case MO_EXTREMITYFIST: // ソスソスソスCソスソスソスeソスPソスソス + case MO_EXTREMITYFIST: // 阿修羅覇鳳拳 damage = damage * (8 + ((sd->status.sp)/10)) + 250 + (skill_lv * 150); damage2 = damage2 * (8 + ((sd->status.sp)/10)) + 250 + (skill_lv * 150); sd->status.sp = 0; @@ -2775,16 +2775,16 @@ static struct Damage battle_calc_pc_weapon_attack( s_ele = 0; s_ele_ = 0; break; - case MO_CHAINCOMBO: // ソスAソスナ擾ソス + case MO_CHAINCOMBO: // 連打掌 damage = damage*(150+ 50*skill_lv)/100; damage2 = damage2*(150+ 50*skill_lv)/100; div_=4; break; - case MO_COMBOFINISH: // ソスメ暦ソスソスソス + case MO_COMBOFINISH: // 猛龍拳 damage = damage*(240+ 60*skill_lv)/100; damage2 = damage2*(240+ 60*skill_lv)/100; break; - case BA_MUSICALSTRIKE: // ソス~ソスソスソス[ソスWソスJソスソスソスXソスgソスソスソスCソスN + case BA_MUSICALSTRIKE: // ミュージカルストライク if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2799,7 +2799,7 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case DC_THROWARROW: // ソス撃ソスソス + case DC_THROWARROW: // 矢撃ち if(!sd->state.arrow_atk && sd->arrow_atk > 0) { int arr = MRAND((sd->arrow_atk+1)); damage += arr; @@ -2814,50 +2814,50 @@ static struct Damage battle_calc_pc_weapon_attack( flag=(flag&~BF_RANGEMASK)|BF_LONG; sd->state.arrow_atk = 1; break; - case CH_TIGERFIST: // ソスソスソスユ鯉ソス + case CH_TIGERFIST: // 伏虎拳 damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case CH_CHAINCRUSH: // ソスAソスソスソスソスソスソス + case CH_CHAINCRUSH: // 連柱崩撃 damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; div_=skill_get_num(skill_num,skill_lv); break; - case CH_PALMSTRIKE: // ソスメ虎硬ソスhソスR + case CH_PALMSTRIKE: // 猛虎硬派山 damage = damage*(50+ 100*skill_lv)/100; damage2 = damage2*(50+ 100*skill_lv)/100; break; - case LK_SPIRALPIERCE: /* ソスXソスpソスCソスソスソスソスソスsソスAソス[ソスX */ - damage = damage*(100+ 50*skill_lv)/100; //ソスソスソスソスハゑソスソスソスソスソスソスソスソスネゑソスソスフで適ソスソスソスソス - damage2 = damage2*(100+ 50*skill_lv)/100; //ソスソスソスソスハゑソスソスソスソスソスソスソスソスネゑソスソスフで適ソスソスソスソス + case LK_SPIRALPIERCE: /* スパイラルピアース */ + damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に + damage2 = damage2*(100+ 50*skill_lv)/100; //増加量が分からないので適当に div_=5; if(tsd) tsd->canmove_tick = gettick() + 1000; else if(tmd) tmd->canmove_tick = gettick() + 1000; break; - case LK_HEADCRUSH: /* ソスwソスbソスhソスNソスソスソスbソスVソスソス */ + case LK_HEADCRUSH: /* ヘッドクラッシュ */ damage = damage*(100+ 20*skill_lv)/100; damage2 = damage2*(100+ 20*skill_lv)/100; break; - case LK_JOINTBEAT: /* ソスWソスソスソスCソスソスソスgソスrソス[ソスg */ + case LK_JOINTBEAT: /* ジョイントビート */ damage = damage*(50+ 10*skill_lv)/100; damage2 = damage2*(50+ 10*skill_lv)/100; break; - case ASC_METEORASSAULT: /* ソスソスソスeソスIソスAソスTソスソスソスg */ + case ASC_METEORASSAULT: /* メテオアサルト */ damage = damage*(40+ 40*skill_lv)/100; damage2 = damage2*(40+ 40*skill_lv)/100; break; - case SN_SHARPSHOOTING: /* ソスVソスソスソス[ソスvソスVソスソスソス[ソスeソスBソスソスソスO */ + case SN_SHARPSHOOTING: /* シャープシューティング */ damage += damage*(30*skill_lv)/100; damage2 += damage2*(30*skill_lv)/100; break; - case CG_ARROWVULCAN: /* ソスAソスソスソス[ソスoソスソスソスJソスソス */ + case CG_ARROWVULCAN: /* アローバルカン */ damage = damage*(160+40*skill_lv)/100; damage2 = damage2*(160+40*skill_lv)/100; div_=9; break; - case AS_SPLASHER: /* ソスxソスiソスソスソスXソスvソスソスソスbソスVソスソスソス[ */ + case AS_SPLASHER: /* ベナムスプラッシャー */ damage = damage*(200+20*skill_lv+20*pc_checkskill(sd,AS_POISONREACT))/100; damage2 = damage2*(200+20*skill_lv+20*pc_checkskill(sd,AS_POISONREACT))/100; break; @@ -2910,16 +2910,16 @@ static struct Damage battle_calc_pc_weapon_attack( break; } } - if(da == 2) { //ソスOソスiソスソスソスソスソスソスソスソスソスソスソストゑソスソス驍ゥ + if(da == 2) { //三段掌が発動しているか type = 0x08; - div_ = 255; //ソスOソスiソスソスソスpソスノ… + div_ = 255; //三段掌用に… damage = damage * (100 + 20 * pc_checkskill(sd, MO_TRIPLEATTACK)) / 100; } if( skill_num!=NPC_CRITICALSLASH ){ - // ソスソス ソスロの防ソスソスソスヘにゑソスソスソスソス_ソスソスソス[ソスWソスフ鯉ソスソスソス - // ソスfソスBソスoソスCソスソスソスvソスソスソスeソスNソスVソスソスソスソスソスiソスソスソスソスソスナゑソスソスソスソスフゑソスソスネ?ソスj - if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VITソスソスソスソス + // 対 象の防御力によるダメージの減少 + // ディバインプロテクション(ここでいいのかな?) + if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VIT無視 int t_def; target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv); if(battle_config.vit_penaly_type > 0) { @@ -2977,8 +2977,8 @@ static struct Damage battle_calc_pc_weapon_attack( } } } - // ソスソスソスBソス_ソスソスソス[ソスWソスフ追会ソス - if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) { //DEF, VITソスソスソスソス + // 精錬ダメージの追加 + if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST) { //DEF, VIT無視 damage += battle_get_atk2(src); damage2 += battle_get_atk_2(src); } @@ -2991,8 +2991,8 @@ static struct Damage battle_calc_pc_weapon_attack( } } } - if(skill_num == LK_SPIRALPIERCE) { /* ソスXソスpソスCソスソスソスソスソスsソスAソス[ソスX */ - if(sd->equip_index[9] >= 0) { //ソスdソスハで追会ソス_ソスソスソス[ソスWソス轤オソスソスソスフでシソス[ソスソスソスhソスuソス[ソスソスソスソスソスソスソスソスソスQソスlソスノ追会ソス + if(skill_num == LK_SPIRALPIERCE) { /* スパイラルピアース */ + if(sd->equip_index[9] >= 0) { //重量で追加ダメージらしいのでシールドブーメランを参考に追加 int index = sd->equip_index[9]; if(sd->inventory_data[index] && sd->inventory_data[index]->type == 4) { damage += (int)(double)(sd->inventory_data[index]->weight*(0.8*skill_lv*4/10)); @@ -3001,13 +3001,13 @@ static struct Damage battle_calc_pc_weapon_attack( } } - // 0ソスソスソスソスソスソスソスソスソスソス鼾1ソスノ補正 + // 0未満だった場合1に補正 if(damage<1) damage=1; if(damage2<1) damage2=1; - // ソスXソスLソスソスソスCソスソスソスQソスiソスCソスソスソスnソスj - // ソスCソスソスソス_ソスソスソス[ソスW(ソスEソスソスソスフゑソス) ソス\ソスjソスbソスNソスuソスソスソス[ソスソスソスヘ別擾ソスソスソスソスi1ソスソスソスノ付ソスソス1/8ソスKソスソス) - if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != CR_GRANDCROSS) { //ソスCソスソスソス_ソスソスソス[ソスWソスソスソスソス + // スキル修正2(修練系) + // 修練ダメージ(右手のみ) ソニックブロー時は別処理(1撃に付き1/8適応) + if( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != CR_GRANDCROSS) { //修練ダメージ無視 damage = battle_addmastery(sd,target,damage,0); damage2 = battle_addmastery(sd,target,damage2,1); } @@ -3017,12 +3017,12 @@ static struct Damage battle_calc_pc_weapon_attack( hitrate = 1000000; } - // ソスソスソスソスソスCソスソス + // 回避修正 hitrate = (hitrate<5)?5:hitrate; - if( hitrate < 1000000 && // ソスKソスソスソスUソスソス - (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // ソスソスソスソスソスヘ必ソスソス - t_sc_data[SC_STAN].timer!=-1 || // ソスXソス^ソスソスソスヘ必ソスソス - t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // ソスソスソスソスソスヘ必ソスソス + if( hitrate < 1000000 && // 必中攻撃 + (t_sc_data != NULL && (t_sc_data[SC_SLEEP].timer!=-1 || // 睡眠は必中 + t_sc_data[SC_STAN].timer!=-1 || // スタンは必中 + t_sc_data[SC_FREEZE].timer!=-1 || (t_sc_data[SC_STONE].timer!=-1 && t_sc_data[SC_STONE].val2==0) ) ) ) // 凍結は必中 hitrate = 1000000; if(type == 0 && MRAND(100) >= hitrate) { damage = damage2 = 0; @@ -3030,7 +3030,7 @@ static struct Damage battle_calc_pc_weapon_attack( } else { dmg_lv = ATK_DEF; } - // ソスXソスLソスソスソスCソスソスソスRソスiソスソスソス研ソスソスソスj + // スキル修正3(武器研究) if( (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) { damage+= skill*2; damage2+= skill*2; @@ -3042,48 +3042,48 @@ static struct Damage battle_calc_pc_weapon_attack( } } -//ソスXソスLソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソス竦ウソスソスソスソスソスワゑソス +//スキルによるダメージ補正ここまで -//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスヌ会ソスソスソスソスソスソスソスソスソスソスソスソス +//カードによるダメージ追加処理ここから cardfix=100; - if(!sd->state.arrow_atk) { //ソス|ソスソスソスネ外 - if(!battle_config.left_cardfix_to_right) { //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス - cardfix=cardfix*(100+sd->addrace[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス - cardfix=cardfix*(100+sd->addele[t_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス - cardfix=cardfix*(100+sd->addsize[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス + if(!sd->state.arrow_atk) { //弓矢以外 + if(!battle_config.left_cardfix_to_right) { //左手カード補正設定無し + cardfix=cardfix*(100+sd->addrace[t_race])/100; // 種族によるダメージ修正 + cardfix=cardfix*(100+sd->addele[t_ele])/100; // 属性によるダメージ修正 + cardfix=cardfix*(100+sd->addsize[t_size])/100; // サイズによるダメージ修正 } else { - cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) - cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) - cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + cardfix=cardfix*(100+sd->addrace[t_race]+sd->addrace_[t_race])/100; // 種族によるダメージ修正(左手による追加あり) + cardfix=cardfix*(100+sd->addele[t_ele]+sd->addele_[t_ele])/100; // 属性によるダメージ修正(左手による追加あり) + cardfix=cardfix*(100+sd->addsize[t_size]+sd->addsize_[t_size])/100; // サイズによるダメージ修正(左手による追加あり) } } - else { //ソス|ソスソス - cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) - cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) - cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソス(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) - } - if(t_mode & 0x20) { //ソス{ソスX - if(!sd->state.arrow_atk) { //ソス|ソスソスソスUソスソスソスネ外ソスネゑソス - if(!battle_config.left_cardfix_to_right) //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス - cardfix=cardfix*(100+sd->addrace[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW - else //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定あソスソス - cardfix=cardfix*(100+sd->addrace[10]+sd->addrace_[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + else { //弓矢 + cardfix=cardfix*(100+sd->addrace[t_race]+sd->arrow_addrace[t_race])/100; // 種族によるダメージ修正(弓矢による追加あり) + cardfix=cardfix*(100+sd->addele[t_ele]+sd->arrow_addele[t_ele])/100; // 属性によるダメージ修正(弓矢による追加あり) + cardfix=cardfix*(100+sd->addsize[t_size]+sd->arrow_addsize[t_size])/100; // サイズによるダメージ修正(弓矢による追加あり) + } + if(t_mode & 0x20) { //ボス + if(!sd->state.arrow_atk) { //弓矢攻撃以外なら + if(!battle_config.left_cardfix_to_right) //左手カード補正設定無し + cardfix=cardfix*(100+sd->addrace[10])/100; //ボスモンスターに追加ダメージ + else //左手カード補正設定あり + cardfix=cardfix*(100+sd->addrace[10]+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ(左手による追加あり) } - else //ソス|ソスソスソスUソスソス - cardfix=cardfix*(100+sd->addrace[10]+sd->arrow_addrace[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) - } - else { //ソス{ソスXソスソスソスソスソスネゑソス - if(!sd->state.arrow_atk) { //ソス|ソスソスソスUソスソスソスネ外 - if(!battle_config.left_cardfix_to_right) //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス - cardfix=cardfix*(100+sd->addrace[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW - else //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定あソスソス - cardfix=cardfix*(100+sd->addrace[11]+sd->addrace_[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソスソスソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + else //弓矢攻撃 + cardfix=cardfix*(100+sd->addrace[10]+sd->arrow_addrace[10])/100; //ボスモンスターに追加ダメージ(弓矢による追加あり) + } + else { //ボスじゃない + if(!sd->state.arrow_atk) { //弓矢攻撃以外 + if(!battle_config.left_cardfix_to_right) //左手カード補正設定無し + cardfix=cardfix*(100+sd->addrace[11])/100; //ボス以外モンスターに追加ダメージ + else //左手カード補正設定あり + cardfix=cardfix*(100+sd->addrace[11]+sd->addrace_[11])/100; //ボス以外モンスターに追加ダメージ(左手による追加あり) } else - cardfix=cardfix*(100+sd->addrace[11]+sd->arrow_addrace[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスW(ソス|ソスソスソスノゑソスソスソスソスヌ会ソスソスソスソス) + cardfix=cardfix*(100+sd->addrace[11]+sd->arrow_addrace[11])/100; //ボス以外モンスターに追加ダメージ(弓矢による追加あり) } - //ソスソスソスClassソスpソス竦ウソスソスソスソス(ソスソスソスソスソスフ難ソスソスLソスソスソス{ソスソスソスSソスソスソスpソスH) + //特定Class用補正処理(少女の日記→ボンゴン用?) t_class = battle_get_class(target); for(i=0;iadd_damage_class_count;i++) { if(sd->add_damage_classid[i] == t_class) { @@ -3092,44 +3092,44 @@ static struct Damage battle_calc_pc_weapon_attack( } } if(skill_num != CR_GRANDCROSS || !battle_config.gx_cardfix) - damage=damage*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソス -//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソスソスソスソスソスソスワゑソス + damage=damage*cardfix/100; //カード補正によるダメージ増加 +//カードによるダメージ増加処理ここまで -//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスヌ会ソスソスソスソス(ソスソスソスソス)ソスソスソスソスソスソスソスソス +//カードによるダメージ追加処理(左手)ここから cardfix=100; - if(!battle_config.left_cardfix_to_right) { //ソスソスソスソスソスJソス[ソスhソス竦ウソスン定無ソスソス - cardfix=cardfix*(100+sd->addrace_[t_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソスソスソスソスソス - cardfix=cardfix*(100+sd->addele_[t_ele])/100; // ソスソス ソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソスソスソスソスソス - cardfix=cardfix*(100+sd->addsize_[t_size])/100; // ソスTソスCソスYソスノゑソスソスソスソス_ソスソスソス[ソスWソスCソスソスソスソスソスソス - if(t_mode & 0x20) //ソス{ソスX - cardfix=cardfix*(100+sd->addrace_[10])/100; //ソス{ソスXソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスWソスソスソスソス + if(!battle_config.left_cardfix_to_right) { //左手カード補正設定無し + cardfix=cardfix*(100+sd->addrace_[t_race])/100; // 種族によるダメージ修正左手 + cardfix=cardfix*(100+sd->addele_[t_ele])/100; // 属 性によるダメージ修正左手 + cardfix=cardfix*(100+sd->addsize_[t_size])/100; // サイズによるダメージ修正左手 + if(t_mode & 0x20) //ボス + cardfix=cardfix*(100+sd->addrace_[10])/100; //ボスモンスターに追加ダメージ左手 else - cardfix=cardfix*(100+sd->addrace_[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスXソス^ソス[ソスノ追会ソス_ソスソスソス[ソスWソスソスソスソス + cardfix=cardfix*(100+sd->addrace_[11])/100; //ボス以外モンスターに追加ダメージ左手 } - //ソスソスソスClassソスpソス竦ウソスソスソスソスソスソスソスソス(ソスソスソスソスソスフ難ソスソスLソスソスソス{ソスソスソスSソスソスソスpソスH) + //特定Class用補正処理左手(少女の日記→ボンゴン用?) for(i=0;iadd_damage_class_count_;i++) { if(sd->add_damage_classid_[i] == t_class) { cardfix=cardfix*(100+sd->add_damage_classrate_[i])/100; break; } } - if(skill_num != CR_GRANDCROSS) damage2=damage2*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソス骰カソスソスソス_ソスソスソス[ソスWソスソスソスソス -//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソス(ソスソスソスソス)ソスソスソスソスソスワゑソス + if(skill_num != CR_GRANDCROSS) damage2=damage2*cardfix/100; //カード補正による左手ダメージ増加 +//カードによるダメージ増加処理(左手)ここまで // -- moonsoul (cardfix for magic damage portion of ASC_BREAKER) if(skill_num == ASC_BREAKER) damage3 = damage3 * cardfix / 100; -//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソスソスソスソスソスソスソスソスソスソス - if(tsd){ //ソスホ象ゑソスPCソスフ場合 +//カードによるダメージ減衰処理ここから + if(tsd){ //対象がPCの場合 cardfix=100; - cardfix=cardfix*(100-tsd->subrace[s_race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス - cardfix=cardfix*(100-tsd->subele[s_ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subrace[s_race])/100; // 種族によるダメージ耐性 + cardfix=cardfix*(100-tsd->subele[s_ele])/100; // 属性によるダメージ耐性 if(battle_get_mode(src) & 0x20) - cardfix=cardfix*(100-tsd->subrace[10])/100; //ソス{ソスXソスソスソスソスソスフ攻ソスソスソスヘダソスソスソス[ソスWソスソスソスソス + cardfix=cardfix*(100-tsd->subrace[10])/100; //ボスからの攻撃はダメージ減少 else - cardfix=cardfix*(100-tsd->subrace[11])/100; //ソス{ソスXソスネ外ソスソスソスソスソスフ攻ソスソスソスヘダソスソスソス[ソスWソスソスソスソス - //ソスソスソスClassソスpソス竦ウソスソスソスソスソスソスソスソス(ソスソスソスソスソスフ難ソスソスLソスソスソス{ソスソスソスSソスソスソスpソスH) + cardfix=cardfix*(100-tsd->subrace[11])/100; //ボス以外からの攻撃はダメージ減少 + //特定Class用補正処理左手(少女の日記→ボンゴン用?) for(i=0;iadd_def_class_count;i++) { if(tsd->add_def_classid[i] == sd->status.class) { cardfix=cardfix*(100-tsd->add_def_classrate[i])/100; @@ -3137,24 +3137,24 @@ static struct Damage battle_calc_pc_weapon_attack( } } if(flag&BF_LONG) - cardfix=cardfix*(100-tsd->long_attack_def_rate)/100; //ソスソスソスソスソスソスソスUソスソスソスヘダソスソスソス[ソスWソスソスソスソス(ソスzソスソスソスソスCソスニゑソス) + cardfix=cardfix*(100-tsd->long_attack_def_rate)/100; //遠距離攻撃はダメージ減少(ホルンCとか) if(flag&BF_SHORT) - cardfix=cardfix*(100-tsd->near_attack_def_rate)/100; //ソス゚具ソスソスソスソスUソスソスソスヘダソスソスソス[ソスWソスソスソスソス(ソスYソスソスソスソスソスソスソスH) - damage=damage*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソス - damage2=damage2*cardfix/100; //ソスJソス[ソスhソス竦ウソスノゑソスソス骰カソスソスソス_ソスソスソス[ソスWソスソスソスソス + cardfix=cardfix*(100-tsd->near_attack_def_rate)/100; //近距離攻撃はダメージ減少(該当無し?) + damage=damage*cardfix/100; //カード補正によるダメージ減少 + damage2=damage2*cardfix/100; //カード補正による左手ダメージ減少 } -//ソスJソス[ソスhソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソスソスソスソスソスソスソスソスソスソスワゑソス +//カードによるダメージ減衰処理ここまで -//ソスホ象にスソスeソス[ソス^ソスXソスル常がソスソスソスソスソス鼾ソスフダソスソスソス[ソスWソスソスソスZソスソスソスソスソスソスソスソスソスソスソスソス +//対象にステータス異常がある場合のダメージ減算処理ここから if(t_sc_data) { cardfix=100; - if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG) //ソスfソスBソスtソスFソスソスソス_ソス[ソスソスソスヤで会ソスソスソスソスソスソスUソスソス - cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100; //ソスfソスBソスtソスFソスソスソス_ソス[ソスノゑソスソス骭クソスソス + if(t_sc_data[SC_DEFENDER].timer != -1 && flag&BF_LONG) //ディフェンダー状態で遠距離攻撃 + cardfix=cardfix*(100-t_sc_data[SC_DEFENDER].val2)/100; //ディフェンダーによる減衰 if(cardfix != 100) { - damage=damage*cardfix/100; //ソスfソスBソスtソスFソスソスソス_ソス[ソス竦ウソスノゑソスソスソスソス_ソスソスソス[ソスWソスソスソスソス - damage2=damage2*cardfix/100; //ソスfソスBソスtソスFソスソスソス_ソス[ソス竦ウソスノゑソスソス骰カソスソスソス_ソスソスソス[ソスWソスソスソスソス + damage=damage*cardfix/100; //ディフェンダー補正によるダメージ減少 + damage2=damage2*cardfix/100; //ディフェンダー補正による左手ダメージ減少 } - if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //ソスAソスXソスソスソスvソスeソスBソスI + if(t_sc_data[SC_ASSUMPTIO].timer != -1){ //アスムプティオ if(!map[target->m].flag.pvp){ damage=damage/3; damage2=damage2/3; @@ -3164,71 +3164,71 @@ static struct Damage battle_calc_pc_weapon_attack( } } } -//ソスホ象にスソスeソス[ソス^ソスXソスル常がソスソスソスソスソス鼾ソスフダソスソスソス[ソスWソスソスソスZソスソスソスソスソスソスソスソスソスワゑソス +//対象にステータス異常がある場合のダメージ減算処理ここまで if(damage < 0) damage = 0; if(damage2 < 0) damage2 = 0; - // ソスソス ソスソスソスフ適ソスp + // 属 性の適用 damage=battle_attr_fix(damage,s_ele, battle_get_element(target) ); damage2=battle_attr_fix(damage2,s_ele_, battle_get_element(target) ); - // ソスソスソスフゑソスソスソスソスソスソスAソスCソスソスソスフ適ソスp + // 星のかけら、気球の適用 damage += sd->star; damage2 += sd->star_; damage += sd->spiritball*3; damage2 += sd->spiritball*3; - if(sc_data && sc_data[SC_AURABLADE].timer!=-1){ /* ソスIソス[ソスソスソスuソスソスソス[ソスh ソスKソスソス */ + if(sc_data && sc_data[SC_AURABLADE].timer!=-1){ /* オーラブレード 必中 */ damage += sc_data[SC_AURABLADE].val1 * 10; damage2 += sc_data[SC_AURABLADE].val1 * 10; } - if(skill_num==PA_PRESSURE){ /* ソスvソスソスソスbソスVソスソスソス[ ソスKソスソス? */ + if(skill_num==PA_PRESSURE){ /* プレッシャー 必中? */ damage = 700+100*skill_lv; damage2 = 700+100*skill_lv; } - // >ソス刀暦ソスソスフ搾ソスソスEソス_ソスソスソス[ソスWソスvソスZソスNソスソスソスソスソスソストゑソスソス黷・ソスソスソスソスソスソスソスソスソスソスソスソスソスI - // >map_session_data ソスノ搾ソスソスソスソス_ソスソスソス[ソスW(atk,atk2)ソスヌ会ソスソスソスソス - // >pc_calcstatus()ソスナゑソスソスソスソスラゑソスソスソスソスネ? - // map_session_data ソスノ搾ソスソス阨撰ソスソス(atk,atk2,ele,star,atkmods)ソスヌ会ソスソスソスソス - // pc_calcstatus()ソスナデソス[ソス^ソスソスソスソスソスヘゑソスソストゑソスソスワゑソス + // >二刀流の左右ダメージ計算誰かやってくれぇぇぇぇえええ! + // >map_session_data に左手ダメージ(atk,atk2)追加して + // >pc_calcstatus()でやるべきかな? + // map_session_data に左手武器(atk,atk2,ele,star,atkmods)追加して + // pc_calcstatus()でデータを入力しています - //ソスソスソスソスソスフみ包ソスソス装ソスソス + //左手のみ武器装備 if(sd->weapontype1 == 0 && sd->weapontype2 > 0) { damage = damage2; damage2 = 0; } - // ソスEソスソスソスAソスソスソスソスソスCソスソスソスフ適ソスp - if(sd->status.weapon > 16) {// ソス刀暦ソスソスソス? + // 右手、左手修練の適用 + if(sd->status.weapon > 16) {// 二刀流か? int dmg = damage, dmg2 = damage2; - // ソスEソスソスソスCソスソス(60% ソス` 100%) ソスEソスソスソスSソスソス + // 右手修練(60% 〜 100%) 右手全般 skill = pc_checkskill(sd,AS_RIGHT); damage = damage * (50 + (skill * 10))/100; if(dmg > 0 && damage < 1) damage = 1; - // ソスソスソスソスソスCソスソス(40% ソス` 80%) ソスソスソスソスソスSソスソス + // 左手修練(40% 〜 80%) 左手全般 skill = pc_checkskill(sd,AS_LEFT); damage2 = damage2 * (30 + (skill * 10))/100; if(dmg2 > 0 && damage2 < 1) damage2 = 1; } - else //ソス刀暦ソスソスナなゑソスソスソスソスホ搾ソスソスソスソス_ソスソスソス[ソスWソスソス0 + else //二刀流でなければ左手ダメージは0 damage2 = 0; - // ソスEソスソス,ソスZソスソスソスフゑソス - if(da == 1) { //ソス_ソスuソスソスソスAソス^ソスbソスNソスソスソスソスソスソスソスソスソストゑソスソス驍ゥ + // 右手,短剣のみ + if(da == 1) { //ダブルアタックが発動しているか div_ = 2; damage += damage; type = 0x08; } if(sd->status.weapon == 16) { - // ソスJソス^ソス[ソスソスソスヌ鯉ソスソス_ソスソスソス[ソスW + // カタール追撃ダメージ skill = pc_checkskill(sd,TF_DOUBLE); damage2 = damage * (1 + (skill * 2))/100; if(damage > 0 && damage2 < 1) damage2 = 1; } - // ソスCソスソスソスxソスiソスソスソスCソスソス + // インベナム修正 if(skill_num==TF_POISON){ damage = battle_attr_fix(damage + 15*skill_lv, s_ele, battle_get_element(target) ); } @@ -3236,14 +3236,14 @@ static struct Damage battle_calc_pc_weapon_attack( damage = battle_attr_fix(damage, 0, battle_get_element(target) ); } - // ソスソスソスSソスソスソスソスソスフ費ソスソスソス + // 完全回避の判定 if(skill_num == 0 && skill_lv >= 0 && tsd!=NULL && div_ < 255 && MRAND(1000) < battle_get_flee2(target) ){ damage=damage2=0; type=0x0b; dmg_lv = ATK_LUCKY; } - // ソスホ象ゑソスソスソスソスSソスソスソスソスソスソスソスソスン定がONソスネゑソス + // 対象が完全回避をする設定がONなら if(battle_config.enemy_perfect_flee) { if(skill_num == 0 && skill_lv >= 0 && tmd!=NULL && div_ < 255 && MRAND(1000) < battle_get_flee2(target) ) { damage=damage2=0; @@ -3252,7 +3252,7 @@ static struct Damage battle_calc_pc_weapon_attack( } } - //MobソスソスModeソスノ頑強ソスtソスソスソスOソスソスソスソスソスソストゑソスソスソスソスニゑソスソスフ擾ソスソスソス + //MobのModeに頑強フラグが立っているときの処理 if(t_mode&0x40){ if(damage > 0) damage = 1; @@ -3260,16 +3260,16 @@ static struct Damage battle_calc_pc_weapon_attack( damage2 = 1; } - //bNoWeaponDamage(ソスン抵ソスソスAソスCソスeソスソスソスソスソスソスソスH)ソスナグソスソスソスソスソスhソスNソスソスソスXソスソスソスソスソスネゑソスソス鼾ソスヘダソスソスソス[ソスWソスソス0 + //bNoWeaponDamage(設定アイテム無し?)でグランドクロスじゃない場合はダメージが0 if( tsd && tsd->special_state.no_weapon_damage && skill_num != CR_GRANDCROSS) damage = damage2 = 0; if(skill_num != CR_GRANDCROSS && (damage > 0 || damage2 > 0) ) { - if(damage2<1) // ソス_ソスソスソス[ソスWソスナ終ソスCソスソス + if(damage2<1) // ダメージ最終修正 damage=battle_calc_damage(src,target,damage,div_,skill_num,skill_lv,flag); - else if(damage<1) // ソスEソス閧ェソス~ソスXソスH + else if(damage<1) // 右手がミス? damage2=battle_calc_damage(src,target,damage2,div_,skill_num,skill_lv,flag); - else { // ソスソス ソスソス/ソスJソス^ソス[ソスソスソスフ場合ソスヘゑソスソスソスソスソスニ計ソスZソスソスソス竄アソスソスソスソス + else { // 両 手/カタールの場合はちょっと計算ややこしい int d1=damage+damage2,d2=damage2; damage=battle_calc_damage(src,target,damage+damage2,div_,skill_num,skill_lv,flag); damage2=(d2*100/d1)*damage/100; @@ -3309,7 +3309,7 @@ static struct Damage battle_calc_pc_weapon_attack( } /*========================================== - * ソスソスソスソスソス_ソスソスソス[ソスWソスvソスZ + * 武器ダメージ計算 *------------------------------------------ */ struct Damage battle_calc_weapon_attack( @@ -3317,7 +3317,7 @@ struct Damage battle_calc_weapon_attack( { struct Damage wd; - //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 + //return前の処理があるので情報出力部のみ変更 if (src == NULL || target == NULL) { nullpo_info(NLP_MARK); memset(&wd,0,sizeof(wd)); @@ -3365,7 +3365,7 @@ struct Damage battle_calc_weapon_attack( } /*========================================== - * ソスソスソス@ソス_ソスソスソス[ソスWソスvソスZ + * 魔法ダメージ計算 *------------------------------------------ */ struct Damage battle_calc_magic_attack( @@ -3382,7 +3382,7 @@ struct Damage battle_calc_magic_attack( struct mob_data *tmd = NULL; - //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 + //return前の処理があるので情報出力部のみ変更 if( bl == NULL || target == NULL ){ nullpo_info(NLP_MARK); memset(&md,0,sizeof(md)); @@ -3413,24 +3413,24 @@ struct Damage battle_calc_magic_attack( aflag=BF_MAGIC|BF_LONG|BF_SKILL; if(skill_num > 0){ - switch(skill_num){ // ソスソスソス{ソス_ソスソスソス[ソスWソスvソスZ(ソスXソスLソスソスソスソスソスニに擾ソスソスソス) - // ソスqソス[ソスソスorソスソスソスソス + switch(skill_num){ // 基本ダメージ計算(スキルごとに処理) + // ヒールor聖体 case AL_HEAL: case PR_BENEDICTIO: damage = skill_calc_heal(bl,skill_lv)/2; normalmagic_flag=0; break; - case PR_ASPERSIO: /* ソスAソスXソスyソスソスソスVソスI */ - damage = 40; //ソスナ抵ソスソス_ソスソスソス[ソスW + case PR_ASPERSIO: /* アスペルシオ */ + damage = 40; //固定ダメージ normalmagic_flag=0; break; - case PR_SANCTUARY: // ソスTソスソスソスNソス`ソスソスソスAソスソス + case PR_SANCTUARY: // サンクチュアリ damage = (skill_lv>6)?388:skill_lv*50; normalmagic_flag=0; blewcount|=0x10000; break; case ALL_RESURRECTION: - case PR_TURNUNDEAD: // ソスUソスソスソスソスソスUソスソスソスNソスVソスソスソスソスソスニタソス[ソスソスソスAソスソスソスfソスbソスh + case PR_TURNUNDEAD: // 攻撃リザレクションとターンアンデッド if(target->type != BL_PC && battle_check_undead(t_race,t_ele)){ int hp, mhp, thres; hp = battle_get_hp(target); @@ -3440,16 +3440,16 @@ struct Damage battle_calc_magic_attack( ((200 - hp * 200 / mhp)); if(thres > 700) thres = 700; // if(battle_config.battle_log) -// printf("ソス^ソス[ソスソスソスAソスソスソスfソスbソスhソスI ソスmソスソス%d ソスソス(ソス逡ェソスソス)\n", thres); - if(MRAND(1000) < thres && !(t_mode&0x20)) // ソスソスソスソス +// printf("ターンアンデッド! 確率%d ‰(千分率)\n", thres); + if(MRAND(1000) < thres && !(t_mode&0x20)) // 成功 damage = hp; - else // ソスソスソスs + else // 失敗 damage = battle_get_lv(bl) + battle_get_int(bl) + skill_lv * 10; } normalmagic_flag=0; break; - case MG_NAPALMBEAT: // ソスiソスpソス[ソスソスソスrソス[ソスgソスiソスソスソスUソスvソスZソスソスソスン) + case MG_NAPALMBEAT: // ナパームビート(分散計算込み) MATK_FIX(70+ skill_lv*10,100); if(flag>0){ MATK_FIX(1,flag); @@ -3458,7 +3458,7 @@ struct Damage battle_calc_magic_attack( printf("battle_calc_magic_attack(): napam enemy count=0 !\n"); } break; - case MG_FIREBALL: // ソスtソス@ソスCソスソスソス[ソス{ソス[ソスソス + case MG_FIREBALL: // ファイヤーボール { const int drate[]={100,90,70}; if(flag>2) @@ -3467,9 +3467,9 @@ struct Damage battle_calc_magic_attack( MATK_FIX( (95+skill_lv*5)*drate[flag] ,10000 ); } break; - case MG_FIREWALL: // ソスtソス@ソスCソスソスソス[ソスEソスHソス[ソスソス + case MG_FIREWALL: // ファイヤーウォール /* - if( (t_ele!=3 && !battle_check_undead(t_race,t_ele)) || target->type==BL_PC ) //PCソスヘ火托ソスソスソスソスナゑソスソスソスソスヤ?ソスソスソスソスソスソスソス_ソスソスソス[ソスWソスけゑソスソスH + if( (t_ele!=3 && !battle_check_undead(t_race,t_ele)) || target->type==BL_PC ) //PCは火属性でも飛ぶ?そもそもダメージ受ける? blewcount |= 0x10000; else blewcount = 0; @@ -3480,18 +3480,18 @@ struct Damage battle_calc_magic_attack( blewcount |= 0x10000; MATK_FIX( 1,2 ); break; - case MG_THUNDERSTORM: // ソスTソスソスソス_ソス[ソスXソスgソス[ソスソス + case MG_THUNDERSTORM: // サンダーストーム MATK_FIX( 80,100 ); break; - case MG_FROSTDIVER: // ソスtソスソスソスXソスgソス_ソスCソスo + case MG_FROSTDIVER: // フロストダイバ MATK_FIX( 100+skill_lv*10, 100); break; - case WZ_FROSTNOVA: // ソスtソスソスソスXソスgソス_ソスCソスo + case WZ_FROSTNOVA: // フロストダイバ MATK_FIX( ((100+skill_lv*10)*(2/3)), 100); break; - case WZ_FIREPILLAR: // ソスtソス@ソスCソスソスソス[ソスsソスソスソス[ + case WZ_FIREPILLAR: // ファイヤーピラー if(mdef1 < 1000000) - mdef1=mdef2=0; // MDEFソスソスソスソス + mdef1=mdef2=0; // MDEF無視 MATK_FIX( 1,5 ); matk1+=50; matk2+=50; @@ -3500,26 +3500,26 @@ struct Damage battle_calc_magic_attack( MATK_FIX( 100+skill_lv*20, 100); break; case WZ_METEOR: - case WZ_JUPITEL: // ソスソスソスsソスeソスソスソスTソスソスソス_ソス[ + case WZ_JUPITEL: // ユピテルサンダー break; - case WZ_VERMILION: // ソスソスソス[ソスhソスIソスuソスoソス[ソス~ソスソスソスIソスソス + case WZ_VERMILION: // ロードオブバーミリオン MATK_FIX( skill_lv*20+80, 100 ); break; - case WZ_WATERBALL: // ソスEソスHソス[ソス^ソス[ソス{ソス[ソスソス + case WZ_WATERBALL: // ウォーターボール matk1+= skill_lv*30; matk2+= skill_lv*30; break; - case WZ_STORMGUST: // ソスXソスgソス[ソスソスソスKソスXソスg + case WZ_STORMGUST: // ストームガスト MATK_FIX( skill_lv*40+100 ,100 ); blewcount|=0x10000; break; - case AL_HOLYLIGHT: // ソスzソス[ソスソスソス[ソスソスソスCソスg + case AL_HOLYLIGHT: // ホーリーライト MATK_FIX( 125,100 ); break; case AL_RUWACH: MATK_FIX( 145,100 ); break; - case HW_NAPALMVULCAN: // ソスiソスpソス[ソスソスソスrソス[ソスgソスiソスソスソスUソスvソスZソスソスソスン) + case HW_NAPALMVULCAN: // ナパームビート(分散計算込み) MATK_FIX(70+ skill_lv*10,100); if(flag>0){ MATK_FIX(1,flag); @@ -3531,7 +3531,7 @@ struct Damage battle_calc_magic_attack( } } - if(normalmagic_flag){ // ソスソスソスハ厄ソスソス@ソス_ソスソスソス[ソスWソスvソスZ + if(normalmagic_flag){ // 一般魔法ダメージ計算 int imdef_flag=0; if(matk1>matk2) damage= matk2+MRAND((matk1-matk2+1)); @@ -3583,8 +3583,8 @@ struct Damage battle_calc_magic_attack( if( tsd ){ int s_class = battle_get_class(bl); cardfix=100; - cardfix=cardfix*(100-tsd->subele[ele])/100; // ソスソス ソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス - cardfix=cardfix*(100-tsd->subrace[race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subele[ele])/100; // 属 性によるダメージ耐性 + cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 cardfix=cardfix*(100-tsd->magic_subrace[race])/100; if(battle_get_mode(bl) & 0x20) cardfix=cardfix*(100-tsd->magic_subrace[10])/100; @@ -3601,14 +3601,14 @@ struct Damage battle_calc_magic_attack( } if(damage < 0) damage = 0; - damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // ソスソス ソスソスソスCソスソス + damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // 属 性修正 - if(skill_num == CR_GRANDCROSS) { // ソスOソスソスソスソスソスhソスNソスソスソスX + if(skill_num == CR_GRANDCROSS) { // グランドクロス struct Damage wd; wd=battle_calc_weapon_attack(bl,target,skill_num,skill_lv,flag); damage = (damage + wd.damage) * (100 + 40*skill_lv)/100; - if(battle_config.gx_dupele) damage=battle_attr_fix(damage, ele, battle_get_element(target) ); //ソスソスソスソス2ソスかゑソスソスソス - if(bl==target) damage=damage/2; //ソスソスソスソスソスヘ費ソスソスソス + if(battle_config.gx_dupele) damage=battle_attr_fix(damage, ele, battle_get_element(target) ); //属性2回かかる + if(bl==target) damage=damage/2; //反動は半分 } div_=skill_get_num( skill_num,skill_lv ); @@ -3625,10 +3625,10 @@ struct Damage battle_calc_magic_attack( if ((map[target->m].flag.pvp || map[target->m].flag.gvg) && target->type==BL_PC) damage = (damage * (100 - battle_config.gtb_pvp_only)) / 100; } else - damage=0; // ソスソス ソスソス蟲カソス[ソスhソスiソスソスソス@ソス_ソスソスソス[ソスWソスOソスj + damage=0; // 黄 金蟲カード(魔法ダメージ0) } - damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // ソスナ終ソスCソスソス + damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // 最終修正 /* magic_damage_return by [AppleGirl] and [Valaris] */ if( target->type==BL_PC && tsd && tsd->magic_damage_return > 0 ){ @@ -3652,7 +3652,7 @@ struct Damage battle_calc_magic_attack( } /*========================================== - * ソスソスソスフ托ソスソス_ソスソスソス[ソスWソスvソスZ + * その他ダメージ計算 *------------------------------------------ */ struct Damage battle_calc_misc_attack( @@ -3669,7 +3669,7 @@ struct Damage battle_calc_misc_attack( int aflag=BF_MISC|BF_LONG|BF_SKILL; - //returnソスOソスフ擾ソスソスソスソスソスソスソスソスソスソスフで擾ソスソスソスソスoソスヘ包ソスソスフみ変更 + //return前の処理があるので情報出力部のみ変更 if( bl == NULL || target == NULL ){ nullpo_info(NLP_MARK); memset(&md,0,sizeof(md)); @@ -3686,19 +3686,19 @@ struct Damage battle_calc_misc_attack( switch(skill_num){ - case HT_LANDMINE: // ソスソスソスソスソスhソス}ソスCソスソス + case HT_LANDMINE: // ランドマイン damage=skill_lv*(dex+75)*(100+int_)/100; break; - case HT_BLASTMINE: // ソスuソスソスソスXソスgソス}ソスCソスソス + case HT_BLASTMINE: // ブラストマイン damage=skill_lv*(dex/2+50)*(100+int_)/100; break; - case HT_CLAYMORETRAP: // ソスNソスソスソスCソスソスソスAソス[ソスgソスソスソスbソスv + case HT_CLAYMORETRAP: // クレイモアートラップ damage=skill_lv*(dex/2+75)*(100+int_)/100; break; - case HT_BLITZBEAT: // ソスuソスソスソスbソスcソスrソス[ソスg + case HT_BLITZBEAT: // ブリッツビート if( sd==NULL || (skill = pc_checkskill(sd,HT_STEELCROW)) <= 0) skill=0; damage=(dex/10+int_/2+skill*3+40)*2; @@ -3706,21 +3706,21 @@ struct Damage battle_calc_misc_attack( damage /= flag; break; - case TF_THROWSTONE: // ソスホ難ソスソスソス + case TF_THROWSTONE: // 石投げ damage=30; damagefix=0; break; - case BA_DISSONANCE: // ソスsソスソスソスaソスソス + case BA_DISSONANCE: // 不協和音 damage=(skill_lv)*20+pc_checkskill(sd,BA_MUSICALLESSON)*3; break; - case NPC_SELFDESTRUCTION: // ソスソスソスソス + case NPC_SELFDESTRUCTION: // 自爆 damage=battle_get_hp(bl)-(bl==target?1:0); damagefix=0; break; - case NPC_SMOKING: // ソス^ソスoソスRソスソスソスzソスソス + case NPC_SMOKING: // タバコを吸う damage=3; damagefix=0; break; @@ -3739,7 +3739,7 @@ struct Damage battle_calc_misc_attack( } } break; - case SN_FALCONASSAULT: /* ソスtソス@ソスソスソスRソスソスソスAソスTソスソスソスg */ + case SN_FALCONASSAULT: /* ファルコンアサルト */ skill = pc_checkskill(sd,HT_BLITZBEAT); damage=(100+50*skill_lv+(dex/10+int_/2+skill*3+40)*2); break; @@ -3754,13 +3754,13 @@ struct Damage battle_calc_misc_attack( if( tsd ){ cardfix=100; - cardfix=cardfix*(100-tsd->subele[ele])/100; // ソスソスソスソスソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス - cardfix=cardfix*(100-tsd->subrace[race])/100; // ソス族ソスノゑソスソスソスソス_ソスソスソス[ソスWソスマ撰ソス + cardfix=cardfix*(100-tsd->subele[ele])/100; // 属性によるダメージ耐性 + cardfix=cardfix*(100-tsd->subrace[race])/100; // 種族によるダメージ耐性 cardfix=cardfix*(100-tsd->misc_def_rate)/100; damage=damage*cardfix/100; } if(damage < 0) damage = 0; - damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // ソスソスソスソスソスCソスソス + damage=battle_attr_fix(damage, ele, battle_get_element(target) ); // 属性修正 } div_=skill_get_num( skill_num,skill_lv ); @@ -3771,7 +3771,7 @@ struct Damage battle_calc_misc_attack( damage = div_; } - damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // ソスナ終ソスCソスソス + damage=battle_calc_damage(bl,target,damage,div_,skill_num,skill_lv,aflag); // 最終修正 md.damage=damage; md.div_=div_; @@ -3785,7 +3785,7 @@ struct Damage battle_calc_misc_attack( } /*========================================== - * ソス_ソスソスソス[ソスWソスvソスZソス鼕ソスソスソスソスソスp + * ダメージ計算一括処理用 *------------------------------------------ */ struct Damage battle_calc_attack( int attack_type, @@ -3809,7 +3809,7 @@ struct Damage battle_calc_attack( int attack_type, return d; } /*========================================== - * ソスハ擾ソスソスUソスソスソスソスソスソスソスワとゑソス + * 通常攻撃処理まとめ *------------------------------------------ */ int battle_weapon_attack( struct block_list *src,struct block_list *target, @@ -3849,7 +3849,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, ele = battle_get_elem_type(target); if(battle_check_target(src,target,BCT_ENEMY) > 0 && battle_check_range(src,target,0)){ - // ソスUソスソスソスホ象となりうソスソスソスフで攻ソスソス + // 攻撃対象となりうるので攻撃 if(sd && sd->status.weapon == 11) { if(sd->equip_index[10] >= 0) { if(battle_config.arrow_decrement) @@ -3910,12 +3910,12 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, clif_damage(src,src,tick, wd.amotion,0,rdamage,1,4,0); } - if (wd.div_ == 255 && sd) { //ソスOソスiソスソス + if (wd.div_ == 255 && sd) { //三段掌 int delay = 1000 - 4 * battle_get_agi(src) - 2 * battle_get_dex(src); int skilllv; if(wd.damage+wd.damage2 < battle_get_hp(target)) { if((skilllv = pc_checkskill(sd, MO_CHAINCOMBO)) > 0) - delay += 300 * battle_config.combo_delay_rate /100; //ソスヌ会ソスfソスBソスソスソスCソスソスconfソスノゑソスソス闥イソスソス + delay += 300 * battle_config.combo_delay_rate /100; //追加ディレイをconfにより調整 skill_status_change_start(src,SC_COMBO,MO_TRIPLEATTACK,skilllv,0,0,delay,0); } @@ -3927,7 +3927,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, else { clif_damage(src,target,tick, wd.amotion, wd.dmotion, wd.damage, wd.div_ , wd.type, wd.damage2); - //ソス刀暦ソスソスソスソスソスソスニカソス^ソス[ソスソスソスヌ鯉ソスソスフミソスXソス\ソスソス(ソスソスソスソスソスソスソスソスソス`) + //二刀流左手とカタール追撃のミス表示(無理やり〜) if(sd && sd->status.weapon >= 16 && wd.damage2 == 0) clif_damage(src,target,tick+10, wd.amotion, wd.dmotion,0, 1, 0, 0); } @@ -3972,7 +3972,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, case 0: case 2: f = skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); break; - case 1:/* ソスxソスソスソスn */ + case 1:/* 支援系 */ if((sc_data[SC_AUTOSPELL].val2==AL_HEAL || (sc_data[SC_AUTOSPELL].val2==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele)) f = skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); else @@ -3991,7 +3991,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, case 0: case 2: skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); break; - case 1:/* ソスxソスソスソスn */ + case 1:/* 支援系 */ if((sc_data[SC_AUTOSPELL].val2==AL_HEAL || (sc_data[SC_AUTOSPELL].val2==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele)) skill_castend_damage_id(src,target,sc_data[SC_AUTOSPELL].val2,skilllv,tick,flag); else @@ -4017,7 +4017,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, case 0: case 2: f = skill_castend_damage_id(src,target,sd->autospell_id,skilllv,tick,flag); break; - case 1:/* ソスxソスソスソスn */ + case 1:/* 支援系 */ if((sd->autospell_id==AL_HEAL || (sd->autospell_id==ALL_RESURRECTION && target->type != BL_PC)) && battle_check_undead(race,ele)) f = skill_castend_damage_id(src,target,sd->autospell_id,skilllv,tick,flag); else @@ -4067,7 +4067,7 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target, skill_status_change_start(src,SC_BLADESTOP,lv,1,(int)src,(int)target,skill_get_time2(MO_BLADESTOP,lv),0); skill_status_change_start(target,SC_BLADESTOP,lv,2,(int)target,(int)src,skill_get_time2(MO_BLADESTOP,lv),0); } - if(t_sc_data && t_sc_data[SC_SPLASHER].timer!=-1) //ソスソスソスソスソスソスフで対象のベソスiソスソスソスXソスvソスソスソスbソスVソスソスソス[ソスソスソスヤゑソスソスソスソスソス + if(t_sc_data && t_sc_data[SC_SPLASHER].timer!=-1) //殴ったので対象のベナムスプラッシャー状態を解除 skill_status_change_end(target,SC_SPLASHER,-1); map_freeblock_unlock(); @@ -4093,12 +4093,12 @@ int battle_check_undead(int race,int element) } /*========================================== - * ソスGソスソスソスソスソスソスソスソス(1=ソスmソスソス,0=ソスロ抵ソス,-1=ソスGソスソスソス[) - * flag&0xf0000 = 0x00000:ソスGソスソスソスソスソスネゑソスソスソスソスソスソスソスソスiret:1ソスソスソスGソスナはなゑソスソスj - * = 0x10000:ソスpソス[ソスeソスBソス[ソスソスソスソスソスiret:1=ソスpソス[ソスeソスBソス[ソスソスソスソスソスo) - * = 0x20000:ソスSソスソス(ret:1=ソスGソスソスソスソスソスソスソスソス) - * = 0x40000:ソスGソスソスソスソスソスソス(ret:1=ソスG) - * = 0x50000:ソスpソス[ソスeソスBソス[ソスソスソスソスソスネゑソスソスソスソスソスソスソス(ret:1=ソスpソス[ソスeソスBソスナなゑソス) + * 敵味方判定(1=肯定,0=否定,-1=エラー) + * flag&0xf0000 = 0x00000:敵じゃないか判定(ret:1=敵ではない) + * = 0x10000:パーティー判定(ret:1=パーティーメンバ) + * = 0x20000:全て(ret:1=敵味方両方) + * = 0x40000:敵か判定(ret:1=敵) + * = 0x50000:パーティーじゃないか判定(ret:1=パーティでない) *------------------------------------------ */ int battle_check_target( struct block_list *src, struct block_list *target,int flag) @@ -4109,7 +4109,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f nullpo_retr(0, src); nullpo_retr(0, target); - if( flag&0x40000 ){ // ソスソスソス]ソスtソスソスソスO + if( flag&0x40000 ){ // 反転フラグ int ret=battle_check_target(src,target,flag&0x30000); if(ret!=-1) return !ret; @@ -4123,7 +4123,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f return -1; } - if(src->type == BL_SKILL && target->type == BL_SKILL) // ソスホ象ゑソスソスXソスLソスソスソスソスソスjソスbソスgソスネら無ソスソスmソスソス + if(src->type == BL_SKILL && target->type == BL_SKILL) // 対象がスキルユニットなら無条件肯定 return -1; if(target->type == BL_PC && ((struct map_session_data *)target)->invincible_timer != -1) @@ -4139,7 +4139,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } } - // ソスXソスLソスソスソスソスソスjソスbソスgソスフ場合ソスAソスeソスソス゚ゑソス + // スキルユニットの場合、親を求める if( src->type==BL_SKILL) { int inf2 = skill_get_inf2(((struct skill_unit *)src)->group->skill_id); if( (ss=map_id2bl( ((struct skill_unit *)src)->group->src_id))==NULL ) @@ -4157,19 +4157,19 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f return -1; } } - // Mobソスソスmaster_idソスソスソスソスソスソスソスspecial_mob_aiソスネゑソスソスAソスソスソスソスソスソスソスソス゚ゑソス + // Mobでmaster_idがあってspecial_mob_aiなら、召喚主を求める if( src->type==BL_MOB ){ struct mob_data *md=(struct mob_data *)src; if(md && md->master_id>0){ - if(md->master_id==target->id) // ソスソスソスネゑソスソスmソスソス + if(md->master_id==target->id) // 主なら肯定 return 1; if(md->state.special_mob_ai){ - if(target->type==BL_MOB){ //special_mob_aiソスナ対象ゑソスMob + if(target->type==BL_MOB){ //special_mob_aiで対象がMob struct mob_data *tmd=(struct mob_data *)target; if(tmd){ - if(tmd->master_id != md->master_id) //ソスソスソスソスソス蛯ェソス齒擾ソスナなゑソスソスソスソスホ否抵ソス + if(tmd->master_id != md->master_id) //召喚主が一緒でなければ否定 return 0; - else{ //ソスソスソスソスソス蛯ェソス齒擾ソスネので肯ソス閧オソスソスソスソスソスソスソスヌ趣ソスソスソスソスヘ否抵ソス + else{ //召喚主が一緒なので肯定したいけど自爆は否定 if(md->state.special_mob_ai>2) return 0; else @@ -4183,19 +4183,19 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } } - if( src==target || ss==target ) // ソスソスソスソスソスネゑソスソスmソスソス + if( src==target || ss==target ) // 同じなら肯定 return 1; if(target->type == BL_PC && pc_isinvisible((struct map_session_data *)target)) return -1; - if( src->prev==NULL || // ソスソスソスソスソスナゑソスソスネゑソスソスGソスソスソス[ + if( src->prev==NULL || // 死んでるならエラー (src->type==BL_PC && pc_isdead((struct map_session_data *)src) ) ) return -1; if( (ss->type == BL_PC && target->type==BL_MOB) || (ss->type == BL_MOB && target->type==BL_PC) ) - return 0; // PCvsMOBソスネゑソスソスロ抵ソス + return 0; // PCvsMOBなら否定 s_p=battle_get_party_id(ss); s_g=battle_get_guild_id(ss); @@ -4204,19 +4204,19 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f t_g=battle_get_guild_id(target); if(flag&0x10000) { - if(s_p && t_p && s_p == t_p) // ソスソスソスソスソスpソス[ソスeソスBソスネゑソスソスmソスソスソスiソスソスソスソスソスj + if(s_p && t_p && s_p == t_p) // 同じパーティなら肯定(味方) return 1; - else // ソスpソス[ソスeソスBソスソスソスソスソスネら同ソスソスソスpソス[ソスeソスBソスソスソスソスソスネゑソスソスソスソス_ソスナ否抵ソス + else // パーティ検索なら同じパーティじゃない時点で否定 return 0; } - if(ss->type == BL_MOB && s_g > 0 && t_g > 0 && s_g == t_g ) // ソスソスソスソスソスMソスソスソスh/mobソスNソスソスソスXソスネゑソスソスmソスソスソスiソスソスソスソスソスj + if(ss->type == BL_MOB && s_g > 0 && t_g > 0 && s_g == t_g ) // 同じギルド/mobクラスなら肯定(味方) return 1; //printf("ss:%d src:%d target:%d flag:0x%x %d %d ",ss->id,src->id,target->id,flag,src->type,target->type); //printf("p:%d %d g:%d %d\n",s_p,t_p,s_g,t_g); - if( ss->type==BL_PC && target->type==BL_PC) { // ソスソスソスソスPVPソスソスソス[ソスhソスネゑソスソスロ抵ソスソスiソスGソスj + if( ss->type==BL_PC && target->type==BL_PC) { // 両方PVPモードなら否定(敵) struct skill_unit *su=NULL; if(src->type==BL_SKILL) su=(struct skill_unit *)src; @@ -4244,9 +4244,9 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f for(i=0;ialliance[i].guild_id > 0 && g->alliance[i].guild_id == t_g) { if(g->alliance[i].opposition) - return 0;//ソスGソスホギソスソスソスhソスネら無ソスソスノ敵 + return 0;//敵対ギルドなら無条件に敵 else - return 1;//ソスソスソスソスソスMソスソスソスhソスネら無ソスソスノ厄ソスソスソス + return 1;//同盟ギルドなら無条件に味方 } } } @@ -4254,10 +4254,10 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f } } - return 1; // ソスYソスソスソスソスソスネゑソスソスフで厄ソスソスヨ係ソスlソスソスソスiソスワゑソスソスGソスソスソスソスソスネゑソスソスフで厄ソスソスソスソスj + return 1; // 該当しないので無関係人物(まあ敵じゃないので味方) } /*========================================== - * ソスヒ抵ソスソス + * 射程判定 *------------------------------------------ */ int battle_check_range(struct block_list *src,struct block_list *bl,int range) @@ -4274,19 +4274,19 @@ int battle_check_range(struct block_list *src,struct block_list *bl,int range) dy=abs(bl->y-src->y); arange=((dx>dy)?dx:dy); - if(src->m != bl->m) // ソス痰、ソス}ソスbソスv + if(src->m != bl->m) // 違うマップ return 0; - if( range>0 && range < arange ) // ソスソスソスソスソスソスソスソス + if( range>0 && range < arange ) // 遠すぎる return 0; - if( arange<2 ) // ソスソスソスソスソス}ソスXソスソスソスラ撰ソス + if( arange<2 ) // 同じマスか隣接 return 1; // if(bl->type == BL_SKILL && ((struct skill_unit *)bl)->group->unit_id == 0x8d) // return 1; - // ソスソスソスQソスソスソスソスソスソス + // 障害物判定 wpd.path_len=0; wpd.path_pos=0; wpd.path_half=0; @@ -4301,7 +4301,7 @@ int battle_check_range(struct block_list *src,struct block_list *bl,int range) /*========================================== * Return numerical value of a switch configuration (modified by [Yor]) - * on/off, english, franソスais, deutsch, espaソスol + * on/off, english, fran軋is, deutsch, espaol *------------------------------------------ */ int battle_config_switch(const char *str) { @@ -4312,7 +4312,7 @@ int battle_config_switch(const char *str) { return atoi(str); } /*========================================== - * ソスン抵ソスソスtソス@ソスCソスソスソスソスソスヌみ搾ソスソスソス + * 設定ファイルを読み込む *------------------------------------------ */ int battle_config_read(const char *cfgName) @@ -4520,11 +4520,6 @@ int battle_config_read(const char *cfgName) battle_config.chat_spam_ban = 1; battle_config.chat_spam_warn = 8; battle_config.chat_maxline = 255; - - battle_config.trade_spam_threshold = 10; - battle_config.trade_spam_flood = 10; - battle_config.trade_spam_ban = 1; - battle_config.trade_spam_warn = 8; } fp = fopen(cfgName,"r"); @@ -4727,16 +4722,12 @@ int battle_config_read(const char *cfgName) { "castrate_dex_scale", &battle_config.castrate_dex_scale }, // added by [MouseJstr] { "area_size", &battle_config.area_size }, // added by [MouseJstr] { "muting_players", &battle_config.muting_players}, // added by [Apple] - { "chat_lame_penalty", &battle_config.chat_lame_penalty }, - { "chat_spam_threshold", &battle_config.chat_spam_threshold }, - { "chat_spam_flood", &battle_config.chat_spam_flood }, - { "chat_spam_ban", &battle_config.chat_spam_ban }, - { "chat_spam_warn", &battle_config.chat_spam_warn }, - { "chat_maxline", &battle_config.chat_maxline }, - { "trade_spam_threshold", &battle_config.trade_spam_threshold }, - { "trade_spam_flood", &battle_config.trade_spam_flood }, - { "trade_spam_ban", &battle_config.trade_spam_ban }, - { "trade_spam_warn", &battle_config.trade_spam_warn } + { "chat_lame_penalty", &battle_config.chat_lame_penalty }, + { "chat_spam_threshold", &battle_config.chat_spam_threshold }, + { "chat_spam_flood", &battle_config.chat_spam_flood }, + { "chat_spam_ban", &battle_config.chat_spam_ban }, + { "chat_spam_warn", &battle_config.chat_spam_warn }, + { "chat_maxline", &battle_config.chat_maxline } }; if (line[0] == '/' && line[1] == '/') @@ -4877,25 +4868,6 @@ int battle_config_read(const char *cfgName) else if (battle_config.chat_maxline > 512) battle_config.chat_maxline = 512; - if (battle_config.trade_spam_ban < 0) - battle_config.trade_spam_ban = 0; - else if (battle_config.trade_spam_ban > 32767) - battle_config.trade_spam_ban = 32767; - - if (battle_config.trade_spam_flood < 0) - battle_config.trade_spam_flood = 0; - else if (battle_config.trade_spam_flood > 32767) - battle_config.trade_spam_flood = 32767; - - if (battle_config.trade_spam_warn < 0) - battle_config.trade_spam_warn = 0; - else if (battle_config.trade_spam_warn > 32767) - battle_config.trade_spam_warn = 32767; - - if (battle_config.trade_spam_threshold < 0) - battle_config.trade_spam_threshold = 0; - else if (battle_config.trade_spam_threshold > 32767) - battle_config.trade_spam_threshold = 32767; // at least 1 client must be accepted if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor] diff --git a/src/map/battle.h b/src/map/battle.h index 3a0c380..3c46586 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -2,24 +2,24 @@ #ifndef _BATTLE_H_ #define _BATTLE_H_ -// ソス_ソスソスソス[ソスW +// ダメージ struct Damage { int damage,damage2; int type,div_; int amotion,dmotion; int blewcount; int flag; - int dmg_lv; //ソスヘまれ減ソスZソスvソスZソスpソス@0:ソスXソスLソスソスソスUソスソス ATK_LUCKY,ATK_FLEE,ATK_DEF + int dmg_lv; //囲まれ減算計算用 0:スキル攻撃 ATK_LUCKY,ATK_FLEE,ATK_DEF }; -// ソスソスソスソスソス\ソスiソスヌみ搾ソスソスンゑソスpc.cソスAbattle_attr_fixソスナ使ソスpソスj +// 属性表(読み込みはpc.c、battle_attr_fixで使用) extern int attr_fix_table[4][10][10]; struct map_session_data; struct mob_data; struct block_list; -// ソス_ソスソスソス[ソスWソスvソスZ +// ダメージ計算 struct Damage battle_calc_attack( int attack_type, struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag); @@ -30,12 +30,12 @@ struct Damage battle_calc_magic_attack( struct Damage battle_calc_misc_attack( struct block_list *bl,struct block_list *target,int skill_num,int skill_lv,int flag); -// ソスソスソスソスソスCソスソスソスvソスZ +// 属性修正計算 int battle_attr_fix(int damage,int atk_elem,int def_elem); -// ソス_ソスソスソス[ソスWソスナ終ソスvソスZ +// ダメージ最終計算 int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,int div_,int skill_num,int skill_lv,int flag); -enum { // ソスナ終ソスvソスZソスフフソスソスソスO +enum { // 最終計算のフラグ BF_WEAPON = 0x0001, BF_MAGIC = 0x0002, BF_MISC = 0x0004, @@ -48,20 +48,20 @@ enum { // ソスナ終ソスvソスZソスフフソスソスソスO BF_SKILLMASK= 0x0f00, }; -// ソスソスロゑソスHPソス増鯉ソス +// 実際にHPを増減 int battle_delay_damage(unsigned int tick,struct block_list *src,struct block_list *target,int damage,int flag); int battle_damage(struct block_list *bl,struct block_list *target,int damage,int flag); int battle_heal(struct block_list *bl,struct block_list *target,int hp,int sp,int flag); -// ソスUソスソスソスソスソスレ難ソスソスソスソス~ソス゚ゑソス +// 攻撃や移動を止める int battle_stopattack(struct block_list *bl); int battle_stopwalking(struct block_list *bl,int type); -// ソスハ擾ソスソスUソスソスソスソスソスソスソスワとゑソス +// 通常攻撃処理まとめ int battle_weapon_attack( struct block_list *bl,struct block_list *target, unsigned int tick,int flag); -// ソスeソスソスソスpソスソスソスソスソス[ソス^ソス得ゑソス +// 各種パラメータを得る int battle_counttargeted(struct block_list *bl,struct block_list *src,int target_lv); int battle_get_class(struct block_list *bl); int battle_get_dir(struct block_list *bl); @@ -91,7 +91,7 @@ int battle_get_amotion(struct block_list *bl); int battle_get_dmotion(struct block_list *bl); int battle_get_element(struct block_list *bl); int battle_get_attack_element(struct block_list *bl); -int battle_get_attack_element2(struct block_list *bl); //ソスソスソス阨撰ソス属ソスソスソス謫セ +int battle_get_attack_element2(struct block_list *bl); //左手武器属性取得 #define battle_get_elem_type(bl) (battle_get_element(bl)%10) #define battle_get_elem_level(bl) (battle_get_element(bl)/10/2) int battle_get_party_id(struct block_list *bl); @@ -122,7 +122,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f int battle_check_range(struct block_list *src,struct block_list *bl,int range); -// ソスン抵ソス +// 設定 int battle_config_switch(const char *str); // [Valaris] @@ -318,11 +318,6 @@ extern struct Battle_Config { int chat_spam_ban; int chat_spam_warn; int chat_maxline; - - int trade_spam_threshold; - int trade_spam_flood; - int trade_spam_ban; - int trade_spam_warn; int drop_pickup_safety_zone; // [Fate] Max. distance to an object dropped by a kill by self in which dropsteal protection works diff --git a/src/map/clif.c b/src/map/clif.c index 1f88ed8..d10effb 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7084,7 +7084,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) nullpo_retv(sd); if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){ - tmw_CheckTradeSpam(sd); + tmw_CheckChatSpam(sd, NULL); trade_traderequest(sd,RFIFOL(sd->fd,2)); } else clif_skill_fail(sd,1,0,0); diff --git a/src/map/map.h b/src/map/map.h index 1cdcc2f..7275734 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -273,8 +273,8 @@ struct map_session_data { int castrate,hprate,sprate,dsprate; int addele[10],addrace[12],addsize[3],subele[10],subrace[12]; int addeff[10],addeff2[10],reseff[10]; - int watk_,watk_2,atkmods_[3],addele_[10],addrace_[12],addsize_[3]; //ソス刀暦ソスソスフゑソスソス゚に追会ソス - int atk_ele_,star_,overrefine_; //ソス刀暦ソスソスフゑソスソス゚に追会ソス + int watk_,watk_2,atkmods_[3],addele_[10],addrace_[12],addsize_[3]; //二刀流のために追加 + int atk_ele_,star_,overrefine_; //二刀流のために追加 int base_atk,atk_rate; int arrow_atk,arrow_ele,arrow_cri,arrow_hit,arrow_range; int arrow_addele[10],arrow_addrace[12],arrow_addsize[3],arrow_addeff[10],arrow_addeff2[10]; @@ -358,9 +358,6 @@ struct map_session_data { time_t chat_reset_due; int chat_lines_in; char chat_lastmsg[513]; - - time_t trade_reset_due; - int trades_in; }; struct npc_timerevent_list { @@ -403,7 +400,7 @@ struct npc_data { } warp; char *message; // for MESSAGE: only send this message } u; - // ソスソスソスソスソスノソスソスソスソスoソスソスソスヌ会ソスソスソストはなゑソスソスネゑソス(shop_itemソスソスソスツ変抵ソスソスフ茨ソス) + // ここにメンバを追加してはならない(shop_itemが可変長の為) char eventqueue[MAX_EVENTQUEUE][50]; int eventtimer[MAX_EVENTTIMER]; @@ -496,12 +493,12 @@ enum { MS_IDLE,MS_WALK,MS_ATTACK,MS_DEAD,MS_DELAY }; enum { NONE_ATTACKABLE,ATTACKABLE }; -enum { ATK_LUCKY=1,ATK_FLEE,ATK_DEF}; // ソスヘまゑソスソスyソスiソスソスソスeソスBソスvソスZソスp +enum { ATK_LUCKY=1,ATK_FLEE,ATK_DEF}; // 囲まれペナルティ計算用 struct map_data { char name[24]; char alias[24]; // [MouseJstr] - unsigned char *gat; // NULLソスネら下ソスソスmap_data_other_serverソスニゑソスソスト茨ソスソスソス + unsigned char *gat; // NULLなら下のmap_data_other_serverとして扱う struct block_list **block; struct block_list **block_mob; int *block_count,*block_mob_count; @@ -549,7 +546,7 @@ struct map_data { }; struct map_data_other_server { char name[24]; - unsigned char *gat; // NULLソスナ抵ソスソスノゑソスソスト費ソスソスf + unsigned char *gat; // NULL固定にして判断 unsigned long ip; unsigned int port; }; @@ -652,14 +649,14 @@ extern char talkie_mes[]; extern char wisp_server_name[]; -// ソスIソスSソスフ擾ソスソスソス +// 鯖全体情報 void map_setusers(int); int map_getusers(void); -// blockソス除ソスヨ連 +// block削除関連 int map_freeblock( void *bl ); int map_freeblock_lock(void); int map_freeblock_unlock(void); -// blockソスヨ連 +// block関連 int map_addblock(struct block_list *); int map_delblock(struct block_list *); void map_foreachinarea(int (*)(struct block_list*,va_list),int,int,int,int,int,int,...); @@ -667,9 +664,9 @@ void map_foreachinarea(int (*)(struct block_list*,va_list),int,int,int,int,int,i void map_foreachincell(int (*)(struct block_list*,va_list),int,int,int,int,...); void map_foreachinmovearea(int (*)(struct block_list*,va_list),int,int,int,int,int,int,int,int,...); int map_countnearpc(int,int,int); -//blockソスヨ連ソスノ追会ソス +//block関連に追加 int map_count_oncell(int m,int x,int y); -// ソス齊橸ソスIobjectソスヨ連 +// 一時的object関連 int map_addobject(struct block_list *); int map_delobject(int, int type); int map_delobjectnofree(int id, int type); @@ -679,7 +676,7 @@ int map_quit(struct map_session_data *); // npc int map_addnpc(int,struct npc_data *); -// ソスソスソスAソスCソスeソスソスソスヨ連 +// 床アイテム関連 int map_clearflooritem_timer(int,unsigned int,int,int); #define map_clearflooritem(id) map_clearflooritem_timer(0,0,id,1) int map_addflooritem_any(struct item *,int amount,int m,int x,int y, @@ -689,7 +686,7 @@ int map_addflooritem_any(struct item *,int amount,int m,int x,int y, int map_addflooritem(struct item *,int,int,int,int,struct map_session_data *,struct map_session_data *,struct map_session_data *,int); int map_searchrandfreecell(int,int,int,int); -// ソスLソスソスソスソスidソスソスソスソスソスLソスソスソスソスソスソス ソスマ奇ソスソスヨ連 +// キャラid=>キャラ名 変換関連 void map_addchariddb(int charid,char *name); void map_delchariddb(int charid); int map_reqchariddb(struct map_session_data * sd,int charid); @@ -714,15 +711,15 @@ struct map_session_data * map_get_last_session(); struct map_session_data * map_get_next_session(struct map_session_data *current); struct map_session_data * map_get_prev_session(struct map_session_data *current); -// gatソスヨ連 +// gat関連 int map_getcell(int,int,int); int map_setcell(int,int,int,int); -// ソスソスソスフ托ソス +// その他 int map_check_dir(int s_dir,int t_dir); int map_calc_dir( struct block_list *src,int x,int y); -// path.cソスソスソスソス +// path.cより int path_search(struct walkpath_data*,int,int,int,int,int,int); int path_blownpos(int m,int x0,int y0,int dx,int dy,int count); diff --git a/src/map/pc.c b/src/map/pc.c index b3626df..630a15b 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -815,8 +815,6 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, short tmw_versio sd->chat_reset_due = sd->chat_lines_in = 0; sd->chat_lastmsg[0] = '\0'; - - sd->trade_reset_due = sd->trades_in = 0; // message of the limited time of the account if (connect_until_time != 0) { // don't display if it's unlimited or unknow value diff --git a/src/map/tmw.c b/src/map/tmw.c index 5d4c991..ba02189 100644 --- a/src/map/tmw.c +++ b/src/map/tmw.c @@ -116,36 +116,3 @@ void tmw_GmHackMsg(const char *fmt, ...) { intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, outbuf, strlen(outbuf) + 1); } - -int tmw_CheckTradeSpam(struct map_session_data *sd) { - nullpo_retr(1, sd); - time_t now = time(NULL); - - if (pc_isGM(sd)) return 0; - - if (now > sd->trade_reset_due) { - sd->trade_reset_due = now + battle_config.trade_spam_threshold; - sd->trades_in = 0; - } - - sd->trades_in++; - - if (sd->trades_in >= battle_config.trade_spam_flood) { - sd->trades_in = 0; - tmw_GmHackMsg("Trade spam detected from character '%s' (account: %d)", sd->status.name, sd->status.account_id); - - if (battle_config.trade_spam_ban > 0) { - clif_displaymessage(sd->fd, "You have been banned for trade spamming. Please do not trade spam."); - tmw_GmHackMsg("This player has been banned for %d hour(s).", battle_config.trade_spam_ban); - - chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, battle_config.trade_spam_ban, 0, 0); // type: 2 - ban (year, month, day, hour, minute, second) - clif_setwaitclose(sd->fd); - } - } - - if (battle_config.trade_spam_ban && sd->trades_in >= battle_config.trade_spam_warn) { - clif_displaymessage(sd->fd, "WARNING : You are about to be automaticly banned for trade spam!"); - } - - return 0; -} diff --git a/src/map/tmw.h b/src/map/tmw.h index 92bcaf4..87066d9 100644 --- a/src/map/tmw.h +++ b/src/map/tmw.h @@ -5,4 +5,3 @@ int tmw_CheckChatSpam(struct map_session_data *sd, char* message); int tmw_CheckChatLameness(struct map_session_data *sd, char *message); void tmw_GmHackMsg(const char *fmt, ...); -int tmw_CheckTradeSpam(struct map_session_data *sd); -- cgit v1.2.3-70-g09d2 From 03b5e644857f80a23bd8b856b78a10cf0a564a66 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Mon, 6 Jul 2009 14:33:43 -0600 Subject: Add a new trade spam system --- src/map/battle.c | 40 ++++++++++++++++++++++++++++++++++------ src/map/battle.h | 5 +++++ src/map/clif.c | 2 +- src/map/map.h | 3 +++ src/map/pc.c | 2 ++ src/map/tmw.c | 33 +++++++++++++++++++++++++++++++++ src/map/tmw.h | 1 + 7 files changed, 79 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index 45524e5..94d64de 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4520,6 +4520,11 @@ int battle_config_read(const char *cfgName) battle_config.chat_spam_ban = 1; battle_config.chat_spam_warn = 8; battle_config.chat_maxline = 255; + + battle_config.trade_spam_threshold = 10; + battle_config.trade_spam_flood = 10; + battle_config.trade_spam_ban = 1; + battle_config.trade_spam_warn = 8; } fp = fopen(cfgName,"r"); @@ -4722,12 +4727,16 @@ int battle_config_read(const char *cfgName) { "castrate_dex_scale", &battle_config.castrate_dex_scale }, // added by [MouseJstr] { "area_size", &battle_config.area_size }, // added by [MouseJstr] { "muting_players", &battle_config.muting_players}, // added by [Apple] - { "chat_lame_penalty", &battle_config.chat_lame_penalty }, - { "chat_spam_threshold", &battle_config.chat_spam_threshold }, - { "chat_spam_flood", &battle_config.chat_spam_flood }, - { "chat_spam_ban", &battle_config.chat_spam_ban }, - { "chat_spam_warn", &battle_config.chat_spam_warn }, - { "chat_maxline", &battle_config.chat_maxline } + { "chat_lame_penalty", &battle_config.chat_lame_penalty }, + { "chat_spam_threshold", &battle_config.chat_spam_threshold }, + { "chat_spam_flood", &battle_config.chat_spam_flood }, + { "chat_spam_ban", &battle_config.chat_spam_ban }, + { "chat_spam_warn", &battle_config.chat_spam_warn }, + { "chat_maxline", &battle_config.chat_maxline }, + { "trade_spam_threshold", &battle_config.trade_spam_threshold }, + { "trade_spam_flood", &battle_config.trade_spam_flood }, + { "trade_spam_ban", &battle_config.trade_spam_ban }, + { "trade_spam_warn", &battle_config.trade_spam_warn } }; if (line[0] == '/' && line[1] == '/') @@ -4868,6 +4877,25 @@ int battle_config_read(const char *cfgName) else if (battle_config.chat_maxline > 512) battle_config.chat_maxline = 512; + if (battle_config.trade_spam_ban < 0) + battle_config.trade_spam_ban = 0; + else if (battle_config.trade_spam_ban > 32767) + battle_config.trade_spam_ban = 32767; + + if (battle_config.trade_spam_flood < 0) + battle_config.trade_spam_flood = 0; + else if (battle_config.trade_spam_flood > 32767) + battle_config.trade_spam_flood = 32767; + + if (battle_config.trade_spam_warn < 0) + battle_config.trade_spam_warn = 0; + else if (battle_config.trade_spam_warn > 32767) + battle_config.trade_spam_warn = 32767; + + if (battle_config.trade_spam_threshold < 0) + battle_config.trade_spam_threshold = 0; + else if (battle_config.trade_spam_threshold > 32767) + battle_config.trade_spam_threshold = 32767; // at least 1 client must be accepted if ((battle_config.packet_ver_flag & 63) == 0) // added by [Yor] diff --git a/src/map/battle.h b/src/map/battle.h index 3c46586..cdce770 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -318,6 +318,11 @@ extern struct Battle_Config { int chat_spam_ban; int chat_spam_warn; int chat_maxline; + + int trade_spam_threshold; + int trade_spam_flood; + int trade_spam_ban; + int trade_spam_warn; int drop_pickup_safety_zone; // [Fate] Max. distance to an object dropped by a kill by self in which dropsteal protection works diff --git a/src/map/clif.c b/src/map/clif.c index d10effb..1f88ed8 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -7084,7 +7084,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) nullpo_retv(sd); if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 1){ - tmw_CheckChatSpam(sd, NULL); + tmw_CheckTradeSpam(sd); trade_traderequest(sd,RFIFOL(sd->fd,2)); } else clif_skill_fail(sd,1,0,0); diff --git a/src/map/map.h b/src/map/map.h index 7275734..1c49293 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -358,6 +358,9 @@ struct map_session_data { time_t chat_reset_due; int chat_lines_in; char chat_lastmsg[513]; + + time_t trade_reset_due; + int trades_in; }; struct npc_timerevent_list { diff --git a/src/map/pc.c b/src/map/pc.c index 630a15b..b3626df 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -815,6 +815,8 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, short tmw_versio sd->chat_reset_due = sd->chat_lines_in = 0; sd->chat_lastmsg[0] = '\0'; + + sd->trade_reset_due = sd->trades_in = 0; // message of the limited time of the account if (connect_until_time != 0) { // don't display if it's unlimited or unknow value diff --git a/src/map/tmw.c b/src/map/tmw.c index ba02189..5d4c991 100644 --- a/src/map/tmw.c +++ b/src/map/tmw.c @@ -116,3 +116,36 @@ void tmw_GmHackMsg(const char *fmt, ...) { intif_wis_message_to_gm(wisp_server_name, battle_config.hack_info_GM_level, outbuf, strlen(outbuf) + 1); } + +int tmw_CheckTradeSpam(struct map_session_data *sd) { + nullpo_retr(1, sd); + time_t now = time(NULL); + + if (pc_isGM(sd)) return 0; + + if (now > sd->trade_reset_due) { + sd->trade_reset_due = now + battle_config.trade_spam_threshold; + sd->trades_in = 0; + } + + sd->trades_in++; + + if (sd->trades_in >= battle_config.trade_spam_flood) { + sd->trades_in = 0; + tmw_GmHackMsg("Trade spam detected from character '%s' (account: %d)", sd->status.name, sd->status.account_id); + + if (battle_config.trade_spam_ban > 0) { + clif_displaymessage(sd->fd, "You have been banned for trade spamming. Please do not trade spam."); + tmw_GmHackMsg("This player has been banned for %d hour(s).", battle_config.trade_spam_ban); + + chrif_char_ask_name(-1, sd->status.name, 2, 0, 0, 0, battle_config.trade_spam_ban, 0, 0); // type: 2 - ban (year, month, day, hour, minute, second) + clif_setwaitclose(sd->fd); + } + } + + if (battle_config.trade_spam_ban && sd->trades_in >= battle_config.trade_spam_warn) { + clif_displaymessage(sd->fd, "WARNING : You are about to be automaticly banned for trade spam!"); + } + + return 0; +} diff --git a/src/map/tmw.h b/src/map/tmw.h index 87066d9..92bcaf4 100644 --- a/src/map/tmw.h +++ b/src/map/tmw.h @@ -5,3 +5,4 @@ int tmw_CheckChatSpam(struct map_session_data *sd, char* message); int tmw_CheckChatLameness(struct map_session_data *sd, char *message); void tmw_GmHackMsg(const char *fmt, ...); +int tmw_CheckTradeSpam(struct map_session_data *sd); -- cgit v1.2.3-70-g09d2 From 4673fd3ca06010e74f8223486b0f34e58c7b0a7e Mon Sep 17 00:00:00 2001 From: Dennis Friis Date: Tue, 7 Jul 2009 00:52:08 +0200 Subject: Fixes to socket system to make it cope better with fd depletion. Also added timeout for fullconnect, secured map server from stateless connections. --- src/char/char.c | 27 ++++++------- src/char/int_guild.c | 12 +++--- src/char/int_party.c | 4 +- src/char/int_storage.c | 8 ++-- src/char/inter.c | 12 +++--- src/char_sql/char.c | 12 +++--- src/char_sql/int_guild.c | 4 +- src/char_sql/inter.c | 4 +- src/char_sql/itemdb.c | 4 +- src/common/grfio.c | 39 ++++++++++--------- src/common/lock.c | 7 ++-- src/common/socket.c | 65 +++++++++++++++++++++++++++++++ src/common/socket.h | 16 +++++++- src/ladmin/ladmin.c | 11 +++--- src/login/login.c | 40 +++++++++---------- src/login_sql/login.c | 12 +++--- src/map/atcommand.c | 16 ++++---- src/map/battle.c | 5 ++- src/map/chrif.c | 7 ++-- src/map/clif.c | 15 +++++-- src/map/guild.c | 4 +- src/map/itemdb.c | 21 +++++----- src/map/magic-interpreter-parser.c | 2 +- src/map/magic-interpreter.h | 1 + src/map/map.c | 8 ++-- src/map/mob.c | 16 ++++---- src/map/npc.c | 5 ++- src/map/pc.c | 40 +++++++++---------- src/map/script.c | 12 +++--- src/map/skill.c | 17 ++++---- src/tool/adduser.c | 4 +- src/tool/convert.c | 4 +- src/txt-converter/char/char-converter.c | 20 +++++----- src/txt-converter/login/login-converter.c | 12 +++--- 34 files changed, 292 insertions(+), 194 deletions(-) (limited to 'src') diff --git a/src/char/char.c b/src/char/char.c index 3035ce1..37580b6 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -122,7 +122,7 @@ int char_log(char *fmt, ...) { va_start(ap, fmt); - logfp = fopen(char_log_filename, "a"); + logfp = fopen_(char_log_filename, "a"); if (logfp) { if (fmt[0] == '\0') // jump a line if no message fprintf(logfp, RETCODE); @@ -132,7 +132,7 @@ int char_log(char *fmt, ...) { sprintf(tmpstr + 19, ".%03d: %s", (int)tv.tv_usec / 1000, fmt); vfprintf(logfp, tmpstr, ap); } - fclose(logfp); + fclose_(logfp); } va_end(ap); @@ -558,7 +558,7 @@ int mmo_char_init(void) { char_num = 0; - fp = fopen(char_txt, "r"); + fp = fopen_(char_txt, "r"); if (fp == NULL) { printf("Characters file not found: %s.\n", char_txt); char_log("Characters file not found: %s." RETCODE, char_txt); @@ -637,7 +637,7 @@ int mmo_char_init(void) { char_log("%s", line); } } - fclose(fp); + fclose_(fp); if (char_num == 0) { printf("mmo_char_init: No character found in %s.\n", char_txt); @@ -1091,9 +1091,9 @@ void create_online_files(void) { } // write files - fp = fopen(online_txt_filename, "w"); + fp = fopen_(online_txt_filename, "w"); if (fp != NULL) { - fp2 = fopen(online_html_filename, "w"); + fp2 = fopen_(online_html_filename, "w"); if (fp2 != NULL) { // get time time(&time_server); // get time in seconds since 1/1/1970 @@ -1256,9 +1256,9 @@ void create_online_files(void) { } fprintf(fp2, " \n"); fprintf(fp2, "\n"); - fclose(fp2); + fclose_(fp2); } - fclose(fp); + fclose_(fp); } return; @@ -2975,7 +2975,8 @@ int send_users_tologin(int tid, unsigned int tick, int id, int data) { int check_connect_login_server(int tid, unsigned int tick, int id, int data) { if (login_fd <= 0 || session[login_fd] == NULL) { printf("Attempt to connect to login-server...\n"); - login_fd = make_connection(login_ip, login_port); + if ((login_fd = make_connection(login_ip, login_port)) < 0) + return 0; session[login_fd]->func_parse = parse_tologin; realloc_fifo(login_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK); WFIFOW(login_fd,0) = 0x2710; @@ -3027,7 +3028,7 @@ int lan_config_read(const char *lancfgName) { for(j = 0; j < 4; j++) subnetmaski[j] = 255; - fp = fopen(lancfgName, "r"); + fp = fopen_(lancfgName, "r"); if (fp == NULL) { printf("LAN support configuration file not found: %s\n", lancfgName); @@ -3079,7 +3080,7 @@ int lan_config_read(const char *lancfgName) { printf("Sub-network mask of the map-server: %d.%d.%d.%d.\n", subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]); } } - fclose(fp); + fclose_(fp); // sub-network check of the map-server { @@ -3101,7 +3102,7 @@ int lan_config_read(const char *lancfgName) { int char_config_read(const char *cfgName) { struct hostent *h = NULL; char line[1024], w1[1024], w2[1024]; - FILE *fp = fopen(cfgName, "r"); + FILE *fp = fopen_(cfgName, "r"); if (fp == NULL) { printf("Configuration file not found: %s.\n", cfgName); @@ -3231,7 +3232,7 @@ int char_config_read(const char *cfgName) { char_config_read(w2); } } - fclose(fp); + fclose_(fp); return 0; } diff --git a/src/char/int_guild.c b/src/char/int_guild.c index 665e017..f84964c 100644 --- a/src/char/int_guild.c +++ b/src/char/int_guild.c @@ -357,7 +357,7 @@ int inter_guild_readdb() { FILE *fp; char line[1024]; - fp = fopen("db/exp_guild.txt", "r"); + fp = fopen_("db/exp_guild.txt", "r"); if (fp == NULL) { printf("can't read db/exp_guild.txt\n"); return 1; @@ -369,7 +369,7 @@ int inter_guild_readdb() { guild_exp[i] = atoi(line); i++; } - fclose(fp); + fclose_(fp); return 0; } @@ -387,7 +387,7 @@ int inter_guild_init() { guild_db = numdb_init(); castle_db = numdb_init(); - if ((fp = fopen(guild_txt,"r")) == NULL) + if ((fp = fopen_(guild_txt,"r")) == NULL) return 1; while(fgets(line, sizeof(line)-1, fp)) { j = 0; @@ -414,12 +414,12 @@ int inter_guild_init() { } c++; } - fclose(fp); + fclose_(fp); // printf("int_guild: %s read done (%d guilds)\n", guild_txt, c); c = 0;//カウンタ初期化 - if ((fp = fopen(castle_txt, "r")) == NULL) { + if ((fp = fopen_(castle_txt, "r")) == NULL) { return 1; } @@ -481,7 +481,7 @@ int inter_guild_init() { return 0; } - fclose(fp); + fclose_(fp); return 0; } diff --git a/src/char/int_party.c b/src/char/int_party.c index 0fd58fa..f0b06b6 100644 --- a/src/char/int_party.c +++ b/src/char/int_party.c @@ -84,7 +84,7 @@ int inter_party_init() { party_db = numdb_init(); - if ((fp = fopen(party_txt, "r")) == NULL) + if ((fp = fopen_(party_txt, "r")) == NULL) return 1; while(fgets(line, sizeof(line) - 1, fp)) { @@ -111,7 +111,7 @@ int inter_party_init() { } c++; } - fclose(fp); + fclose_(fp); // printf("int_party: %s read done (%d parties)\n", party_txt, c); return 0; diff --git a/src/char/int_storage.c b/src/char/int_storage.c index 8f7f9d7..2612e17 100644 --- a/src/char/int_storage.c +++ b/src/char/int_storage.c @@ -240,7 +240,7 @@ int inter_storage_init() storage_db = numdb_init(); - fp=fopen(storage_txt,"r"); + fp=fopen_(storage_txt,"r"); if(fp==NULL){ printf("cant't read : %s\n",storage_txt); return 1; @@ -263,12 +263,12 @@ int inter_storage_init() } c++; } - fclose(fp); + fclose_(fp); c = 0; guild_storage_db = numdb_init(); - fp=fopen(guild_storage_txt,"r"); + fp=fopen_(guild_storage_txt,"r"); if(fp==NULL){ printf("cant't read : %s\n",guild_storage_txt); return 1; @@ -291,7 +291,7 @@ int inter_storage_init() } c++; } - fclose(fp); + fclose_(fp); return 0; } diff --git a/src/char/inter.c b/src/char/inter.c index 98e7ad0..6e50432 100644 --- a/src/char/inter.c +++ b/src/char/inter.c @@ -108,7 +108,7 @@ int inter_accreg_init() { accreg_db = numdb_init(); - if( (fp = fopen(accreg_txt, "r")) == NULL) + if( (fp = fopen_(accreg_txt, "r")) == NULL) return 1; while(fgets(line, sizeof(line)-1, fp)){ line[sizeof(line)-1] = '\0'; @@ -126,7 +126,7 @@ int inter_accreg_init() { } c++; } - fclose(fp); + fclose_(fp); // printf("inter: %s read done (%d)\n", accreg_txt, c); return 0; @@ -173,7 +173,7 @@ int inter_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; - fp = fopen(cfgName, "r"); + fp = fopen_(cfgName, "r"); if (fp == NULL) { printf("file not found: %s\n", cfgName); return 1; @@ -208,7 +208,7 @@ int inter_config_read(const char *cfgName) { inter_config_read(w2); } } - fclose(fp); + fclose_(fp); return 0; } @@ -219,10 +219,10 @@ int inter_log(char *fmt,...) { va_list ap; va_start(ap,fmt); - logfp = fopen(inter_log_filename, "a"); + logfp = fopen_(inter_log_filename, "a"); if (logfp) { vfprintf(logfp, fmt, ap); - fclose(logfp); + fclose_(logfp); } va_end(ap); diff --git a/src/char_sql/char.c b/src/char_sql/char.c index 11b6a49..789a7c7 100644 --- a/src/char_sql/char.c +++ b/src/char_sql/char.c @@ -2586,7 +2586,7 @@ int char_lan_config_read(const char *lancfgName){ FILE *fp; struct hostent * h = NULL; - if ((fp = fopen(lancfgName, "r")) == NULL) { + if ((fp = fopen_(lancfgName, "r")) == NULL) { printf("file not found: %s\n", lancfgName); return 1; } @@ -2619,7 +2619,7 @@ int char_lan_config_read(const char *lancfgName){ printf("set subnetmask : %s\n", w2); } } - fclose(fp); + fclose_(fp); printf("End reading of Lan Support configuration file\n"); return 0; @@ -2667,7 +2667,7 @@ void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */ printf("reading configure: %s\n", cfgName); - if ((fp = fopen(cfgName, "r")) == NULL) { + if ((fp = fopen_(cfgName, "r")) == NULL) { printf("file not found: %s\n", cfgName); exit(1); } @@ -2737,7 +2737,7 @@ void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */ printf("set lowest_gm_level : %s\n",w2); } } - fclose(fp); + fclose_(fp); printf("reading configure done.....\n"); } @@ -2746,7 +2746,7 @@ int char_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; - if ((fp = fopen(cfgName, "r")) == NULL) { + if ((fp = fopen_(cfgName, "r")) == NULL) { printf("Configuration file not found: %s.\n", cfgName); exit(1); } @@ -2849,7 +2849,7 @@ int char_config_read(const char *cfgName) { char_config_read(w2); } } - fclose(fp); + fclose_(fp); //Read ItemDB do_init_itemdb(); diff --git a/src/char_sql/int_guild.c b/src/char_sql/int_guild.c index 1983896..b9a6e3b 100644 --- a/src/char_sql/int_guild.c +++ b/src/char_sql/int_guild.c @@ -566,7 +566,7 @@ int inter_guild_readdb() char line[1024]; for (i=0;i<100;i++) guild_exp[i]=0; - fp=fopen("db/exp_guild.txt","r"); + fp=fopen_("db/exp_guild.txt","r"); if(fp==NULL){ printf("can't read db/exp_guild.txt\n"); return 1; @@ -578,7 +578,7 @@ int inter_guild_readdb() guild_exp[i]=atoi(line); i++; } - fclose(fp); + fclose_(fp); return 0; } diff --git a/src/char_sql/inter.c b/src/char_sql/inter.c index c8fa9b4..d1ee194 100644 --- a/src/char_sql/inter.c +++ b/src/char_sql/inter.c @@ -157,7 +157,7 @@ int inter_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; - fp=fopen(cfgName,"r"); + fp=fopen_(cfgName,"r"); if(fp==NULL){ printf("file not found: %s\n", cfgName); return 1; @@ -221,7 +221,7 @@ int inter_config_read(const char *cfgName) { printf ("set login_server_db : %s\n",w2); } } - fclose(fp); + fclose_(fp); printf ("success reading interserver configuration\n"); diff --git a/src/char_sql/itemdb.c b/src/char_sql/itemdb.c index 0bed07c..85c4929 100644 --- a/src/char_sql/itemdb.c +++ b/src/char_sql/itemdb.c @@ -105,7 +105,7 @@ static int itemdb_readdb(void) char *str[32],*p,*np; struct item_data *id; - fp=fopen("db/item_db.txt","r"); + fp=fopen_("db/item_db.txt","r"); if(fp==NULL){ printf("can't read db/item_db.txt\n"); exit(1); @@ -134,7 +134,7 @@ static int itemdb_readdb(void) id->type=atoi(str[3]); } - fclose(fp); + fclose_(fp); printf("read db/item_db.txt done (count=%d)\n",ln); return 0; } diff --git a/src/common/grfio.c b/src/common/grfio.c index 08a8b2a..b5f380c 100644 --- a/src/common/grfio.c +++ b/src/common/grfio.c @@ -30,6 +30,7 @@ #include "utils.h" #include "grfio.h" #include "mmo.h" +#include "socket.h" #ifdef MEMWATCH #include "memwatch.h" @@ -414,7 +415,7 @@ char* grfio_resnametable(char* fname, char *lfname) for(p=&restable[0];*p!=0;p++) if (*p=='\\') *p = '/'; - fp = fopen(restable,"rb"); + fp = fopen_(restable,"rb"); if(fp==NULL) { printf("%s not found\n",restable); exit(1); // 1:not found error @@ -423,11 +424,11 @@ char* grfio_resnametable(char* fname, char *lfname) while(fgets(line,508,fp)){ if((sscanf(line,"%[^#]#%[^#]#",w1,w2)==2) && (sscanf(fname,"%*5s%s",lfname)==1) && (!strcmpi(w1,lfname))){ sprintf(lfname,"data\\%s",w2); - fclose(fp); + fclose_(fp); return lfname; } } - fclose(fp); + fclose_(fp); return fname; } @@ -493,7 +494,7 @@ void* grfio_reads(char *fname, int *size) for(p=&lfname[0];*p!=0;p++) if (*p=='\\') *p = '/'; // * At the time of Unix - in = fopen(lfname,"rb"); + in = fopen_(lfname,"rb"); if(in!=NULL) { if (entry!=NULL && entry->gentry==0) { lentry.declen=entry->declen; @@ -508,7 +509,7 @@ void* grfio_reads(char *fname, int *size) goto errret; } fread(buf2,1,lentry.declen,in); - fclose(in); in = NULL; + fclose_(in); in = NULL; strncpy( lentry.fn, fname, sizeof(lentry.fn)-1 ); lentry.gentry = 0; // 0:LocalFile entry = filelist_modify(&lentry); @@ -530,7 +531,7 @@ void* grfio_reads(char *fname, int *size) goto errret; } gfname = gentry_table[entry->gentry-1]; - in = fopen(gfname,"rb"); + in = fopen_(gfname,"rb"); if(in==NULL) { printf("%s not found\n",gfname); //goto errret; @@ -539,7 +540,7 @@ void* grfio_reads(char *fname, int *size) } fseek(in,entry->srcpos,0); fread(buf,1,entry->srclen_aligned,in); - fclose(in); + fclose_(in); buf2=calloc(entry->declen+1024, 1); if (buf2==NULL) { printf("file decode memory allocate error\n"); @@ -567,7 +568,7 @@ void* grfio_reads(char *fname, int *size) errret: if (buf!=NULL) free(buf); if (buf2!=NULL) free(buf2); - if (in!=NULL) fclose(in); + if (in!=NULL) fclose_(in); exit(1); //return NULL; } @@ -609,7 +610,7 @@ static int grfio_entryread(char *gfname,int gentry) unsigned char *fname; unsigned char *grf_filelist; - fp = fopen(gfname,"rb"); + fp = fopen_(gfname,"rb"); if(fp==NULL) { printf("%s not found\n",gfname); return 1; // 1:not found error @@ -620,7 +621,7 @@ static int grfio_entryread(char *gfname,int gentry) fseek(fp,0,0); // SEEK_SET fread(grf_header,1,0x2e,fp); if(strcmp(grf_header,"Master of Magic") || fseek(fp,getlong(grf_header+0x1e),1)){ // SEEK_CUR - fclose(fp); + fclose_(fp); printf("%s read error\n",gfname); return 2; // 2:file format error } @@ -631,12 +632,12 @@ static int grfio_entryread(char *gfname,int gentry) list_size = grf_size-ftell(fp); grf_filelist = calloc(list_size, 1); if(grf_filelist==NULL){ - fclose(fp); + fclose_(fp); printf("out of memory : grf_filelist\n"); return 3; // 3:memory alloc error } fread(grf_filelist,1,list_size,fp); - fclose(fp); + fclose_(fp); entrys = getlong(grf_header+0x26) - getlong(grf_header+0x22) - 7; @@ -699,26 +700,26 @@ static int grfio_entryread(char *gfname,int gentry) eSize = getlong(eheader+4); // Extend Size if (rSize > grf_size-ftell(fp)) { - fclose(fp); + fclose_(fp); printf("Illegal data format : grf compress entry size\n"); return 4; } rBuf = calloc( rSize , 1); // Get a Read Size if (rBuf==NULL) { - fclose(fp); + fclose_(fp); printf("out of memory : grf compress entry table buffer\n"); return 3; } grf_filelist = calloc( eSize , 1); // Get a Extend Size if (grf_filelist==NULL) { free(rBuf); - fclose(fp); + fclose_(fp); printf("out of memory : grf extract entry table buffer\n"); return 3; } fread(rBuf,1,rSize,fp); - fclose(fp); + fclose_(fp); decode_zip(grf_filelist,&eSize,rBuf,rSize); // Decode function list_size = eSize; free(rBuf); @@ -767,7 +768,7 @@ static int grfio_entryread(char *gfname,int gentry) free(grf_filelist); } else { //****** Grf Other version ****** - fclose(fp); + fclose_(fp); printf("not support grf versions : %04x\n",getlong(grf_header+0x2a)); return 4; } @@ -903,7 +904,7 @@ void grfio_init(char *fname) char line[1024], w1[1024], w2[1024]; int result = 0, result2 = 0, result3 = 0; - data_conf = fopen(fname, "r"); + data_conf = fopen_(fname, "r"); // It will read, if there is grf-files.txt. if (data_conf) { @@ -920,7 +921,7 @@ void grfio_init(char *fname) } } - fclose(data_conf); + fclose_(data_conf); printf("read %s done\n",fname); } // end of reading grf-files.txt diff --git a/src/common/lock.c b/src/common/lock.c index 9a2205b..67001f9 100644 --- a/src/common/lock.c +++ b/src/common/lock.c @@ -1,6 +1,7 @@ #include #include "lock.h" +#include "socket.h" // 書き込みファイルの保護処理 // (書き込みが終わるまで、旧ファイルを保管しておく) @@ -14,9 +15,9 @@ FILE* lock_fopen(const char* filename,int *info) { // 安全なファイル名を得る(手抜き) do { sprintf(newfile,"%s_%04d.tmp",filename,++no); - } while((fp = fopen(newfile,"r")) && (fclose(fp), no<9999) ); + } while((fp = fopen_(newfile,"r")) && (fclose_(fp), no<9999) ); *info = no; - return fopen(newfile,"w"); + return fopen_(newfile,"w"); } // 旧ファイルを削除&新ファイルをリネーム @@ -24,7 +25,7 @@ int lock_fclose(FILE *fp,const char* filename,int *info) { int ret = 0; char newfile[512]; if(fp != NULL) { - ret = fclose(fp); + ret = fclose_(fp); sprintf(newfile,"%s_%04d.tmp",filename,*info); remove(filename); // このタイミングで落ちると最悪。 diff --git a/src/common/socket.c b/src/common/socket.c index f968373..886072e 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -4,6 +4,7 @@ #include #include #include +#include #ifdef LCCWIN32 #define WIN32_LEAN_AND_MEAN @@ -30,6 +31,7 @@ fd_set readfds; int fd_max; +int currentuse; int rfifo_size = 65536; int wfifo_size = 65536; @@ -74,6 +76,7 @@ static int recv_to_fifo(int fd) //{ int i; printf("recv %d : ",fd); for(i=0;irdata_size+i)); } printf("\n");} if(len>0){ session[fd]->rdata_size+=len; + if (!session[fd]->connected) session[fd]->connected = 1; } else if(len<=0){ // value of connection is not necessary the same // if (fd == 4) // Removed [Yor] @@ -117,6 +120,7 @@ static int send_from_fifo(int fd) } else { session[fd]->wdata_size=0; } + if (!session[fd]->connected) session[fd]->connected = 1; } else { printf("set eof :%d\n",fd); session[fd]->eof=1; @@ -146,6 +150,8 @@ static int connect_client(int listen_fd) //printf("connect_client : %d\n",listen_fd); + printf("used: %d, max FDs: %d, SOFT: %d\n", currentuse, FD_SETSIZE, SOFT_LIMIT); + len = sizeof(client_address); fd = accept(listen_fd,(struct sockaddr*)&client_address,&len); @@ -155,6 +161,11 @@ static int connect_client(int listen_fd) perror("accept"); return -1; } + if (!free_fds()) { // gracefully end the connecting if no free FD + printf("softlimit reached, disconnecting : %d\n", fd); + delete_session(fd); + return -1; + } // setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,NULL,0); setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char *)&yes,sizeof yes); // reuse fix @@ -186,6 +197,10 @@ static int connect_client(int listen_fd) session[fd]->func_send = send_from_fifo; session[fd]->func_parse = default_func_parse; session[fd]->client_addr = client_address; + session[fd]->created = time(NULL); + session[fd]->connected = 0; + + currentuse++; //printf("new_session : %d %d\n",fd,session[fd]->eof); return fd; @@ -200,6 +215,10 @@ int make_listen_port(int port) fd = socket( AF_INET, SOCK_STREAM, 0 ); if(fd_max<=fd) fd_max=fd+1; + else if (fd == -1) { + perror("connect"); + return -1; + } #ifdef LCCWIN32 { @@ -244,7 +263,10 @@ int make_listen_port(int port) } memset(session[fd],0,sizeof(*session[fd])); session[fd]->func_recv = connect_client; + session[fd]->created = time(NULL); + session[fd]->connected = 1; + currentuse++; return fd; } @@ -257,6 +279,11 @@ int make_connection(long ip,int port) fd = socket( AF_INET, SOCK_STREAM, 0 ); if(fd_max<=fd) fd_max=fd+1; + else if (fd == -1) { + perror("socket"); + return -1; + } + // setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,NULL,0); setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(char *)&yes,sizeof yes); // reuse fix #ifdef SO_REUSEPORT @@ -292,7 +319,10 @@ int make_connection(long ip,int port) session[fd]->func_recv = recv_to_fifo; session[fd]->func_send = send_from_fifo; session[fd]->func_parse = default_func_parse; + session[fd]->created = time(NULL); + session[fd]->connected = 1; + currentuse++; return fd; } @@ -311,6 +341,13 @@ int delete_session(int fd) free(session[fd]); } session[fd]=NULL; + shutdown(fd, SHUT_RDWR); + close(fd); + currentuse--; + if (currentuse<0) { + printf("delete_session: current sessions negative!\n"); + currentuse=0; + } //printf("delete_session:%d\n",fd); return 0; } @@ -390,6 +427,10 @@ int do_parsepacket(void) for(i=0;iconnected && time(NULL)-session[i]->created > CONNECT_TIMEOUT) { + printf("Session #%d timed out\n", i); + session[i]->eof = 1; + } if(session[i]->rdata_size==0 && session[i]->eof==0) continue; if(session[i]->func_parse){ @@ -405,6 +446,7 @@ int do_parsepacket(void) void do_socket(void) { FD_ZERO(&readfds); + currentuse = 2; } int RFIFOSKIP(int fd,int len) @@ -438,3 +480,26 @@ int Net_Init(void) return(0); } +int fclose_(FILE *fp) +{ + int res = fclose(fp); + if (res == 0) + currentuse--; +// printf("file closed: used: %d\n",currentuse); + return res; +} + +FILE *fopen_(const char *path, const char *mode) +{ + FILE *f = fopen(path, mode); + if (f != NULL) + currentuse++; +// printf("file opened: used: %d\n",currentuse); + return f; +} + +int free_fds() +{ + return (currentuse+1 < SOFT_LIMIT) ? 1 : 0; +} + diff --git a/src/common/socket.h b/src/common/socket.h index fe06e40..b67e660 100644 --- a/src/common/socket.h +++ b/src/common/socket.h @@ -12,6 +12,7 @@ #include #include #endif +#include // define declaration @@ -44,13 +45,14 @@ #define FD_SETSIZE 4096 #endif // __INTERIX - /* Removed Cygwin FD_SETSIZE declarations, now are directly passed on to the compiler through Makefile [Valaris] */ // Struct declaration struct socket_data{ int eof; + time_t created; + int connected; unsigned char *rdata,*wdata; int max_rdata,max_wdata; int rdata_size,wdata_size; @@ -71,6 +73,13 @@ struct socket_data{ #endif +// save file descriptors for important stuff +#define SOFT_LIMIT (FD_SETSIZE - 50) + +// socket timeout to establish a full connection in seconds +#define CONNECT_TIMEOUT 15 + + extern struct socket_data *session[FD_SETSIZE]; extern int rfifo_size,wfifo_size; @@ -93,4 +102,9 @@ void set_defaultparse(int (*defaultparse)(int)); int Net_Init(void); +int fclose_(FILE *fp); +FILE *fopen_(const char *path, const char *mode); + +int free_fds(); + #endif // _SOCKET_H_ diff --git a/src/ladmin/ladmin.c b/src/ladmin/ladmin.c index 3cea295..810be57 100644 --- a/src/ladmin/ladmin.c +++ b/src/ladmin/ladmin.c @@ -263,7 +263,7 @@ int ladmin_log(char *fmt, ...) { va_start(ap, fmt); - logfp = fopen(ladmin_log_filename, "a"); + logfp = fopen_(ladmin_log_filename, "a"); if (logfp) { if (fmt[0] == '\0') // jump a line if no message fprintf(logfp, RETCODE); @@ -273,7 +273,7 @@ int ladmin_log(char *fmt, ...) { sprintf(tmpstr + strlen(tmpstr), ".%03d: %s", (int)tv.tv_usec / 1000, fmt); vfprintf(logfp, tmpstr, ap); } - fclose(logfp); + fclose_(logfp); } va_end(ap); @@ -4228,7 +4228,8 @@ int Connect_login_server() { ladmin_log("Attempt to connect to login-server..." RETCODE); } - login_fd = make_connection(login_ip, loginserverport); + if ((login_fd = make_connection(login_ip, loginserverport)) < 0) + return 0; #ifdef PASSWORDENC if (passenc == 0) { @@ -4284,7 +4285,7 @@ int ladmin_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; - fp = fopen(cfgName, "r"); + fp = fopen_(cfgName, "r"); if (fp == NULL) { if (defaultlanguage == 'F') { printf("\033[0mFichier de configuration (%s) non trouv.\n", cfgName); @@ -4356,7 +4357,7 @@ int ladmin_config_read(const char *cfgName) { } } } - fclose(fp); + fclose_(fp); login_ip = inet_addr(loginserverip); diff --git a/src/login/login.c b/src/login/login.c index 40da193..6c4ca82 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -144,7 +144,7 @@ int login_log(char *fmt, ...) { va_start(ap, fmt); - logfp = fopen(login_log_filename, "a"); + logfp = fopen_(login_log_filename, "a"); if (logfp) { if (fmt[0] == '\0') // jump a line if no message fprintf(logfp, RETCODE); @@ -154,7 +154,7 @@ int login_log(char *fmt, ...) { sprintf(tmpstr + strlen(tmpstr), ".%03d: %s", (int)tv.tv_usec / 1000, fmt); vfprintf(logfp, tmpstr, ap); } - fclose(logfp); + fclose_(logfp); } va_end(ap); @@ -194,7 +194,7 @@ int read_gm_account() { else creation_time_GM_account_file = file_stat.st_mtime; - if ((fp = fopen(GM_account_filename, "r")) == NULL) { + if ((fp = fopen_(GM_account_filename, "r")) == NULL) { printf("read_gm_account: GM accounts file [%s] not found.\n", GM_account_filename); printf(" Actually, there is no GM accounts on the server.\n"); login_log("read_gm_account: GM accounts file [%s] not found." RETCODE, GM_account_filename); @@ -239,7 +239,7 @@ int read_gm_account() { } } } - fclose(fp); + fclose_(fp); printf("read_gm_account: file '%s' readed (%d GM accounts found).\n", GM_account_filename, c); login_log("read_gm_account: file '%s' readed (%d GM accounts found)." RETCODE, GM_account_filename, c); @@ -482,7 +482,7 @@ int mmo_auth_init(void) { auth_dat = calloc(sizeof(struct auth_dat) * 256, 1); auth_max = 256; - fp = fopen(account_filename, "r"); + fp = fopen_(account_filename, "r"); if (fp == NULL) { // no account file -> no account -> no login, including char-server (ERROR) printf("\033[1;31mmmo_auth_init: Accounts file [%s] not found.\033[0m\n", account_filename); @@ -744,7 +744,7 @@ int mmo_auth_init(void) { account_id_count = account_id; } } - fclose(fp); + fclose_(fp); if (auth_num == 0) { printf("mmo_auth_init: No account found in %s.\n", account_filename); @@ -1374,13 +1374,13 @@ int parse_fromchar(int fd) { // if we autorise creation if (level_new_gm > 0) { // if we can open the file to add the new GM - if ((fp = fopen(GM_account_filename, "a")) != NULL) { + if ((fp = fopen_(GM_account_filename, "a")) != NULL) { char tmpstr[24]; struct timeval tv; gettimeofday(&tv, NULL); strftime(tmpstr, 23, date_format, gmtime(&(tv.tv_sec))); fprintf(fp, RETCODE "// %s: @GM command on account %d" RETCODE "%d %d" RETCODE, tmpstr, acc, acc, level_new_gm); - fclose(fp); + fclose_(fp); WBUFL(buf,6) = level_new_gm; read_gm_account(); send_GM_accounts(); @@ -1723,7 +1723,7 @@ int parse_fromchar(int fd) { FILE *logfp; char tmpstr[24]; struct timeval tv; - logfp = fopen(login_log_unknown_packets_filename, "a"); + logfp = fopen_(login_log_unknown_packets_filename, "a"); if (logfp) { gettimeofday(&tv, NULL); strftime(tmpstr, 23, date_format, gmtime(&(tv.tv_sec))); @@ -1756,7 +1756,7 @@ int parse_fromchar(int fd) { fprintf(logfp, " %s" RETCODE, tmpstr); } fprintf(logfp, RETCODE); - fclose(logfp); + fclose_(logfp); } } printf("parse_fromchar: Unknown packet 0x%x (from a char-server)! -> disconnection.\n", RFIFOW(fd,0)); @@ -2180,7 +2180,7 @@ int parse_admin(int fd) { char tmpstr[24]; struct timeval tv; if ((fp2 = lock_fopen(GM_account_filename, &lock)) != NULL) { - if ((fp = fopen(GM_account_filename, "r")) != NULL) { + if ((fp = fopen_(GM_account_filename, "r")) != NULL) { gettimeofday(&tv, NULL); strftime(tmpstr, 23, date_format, gmtime(&(tv.tv_sec))); modify_flag = 0; @@ -2206,7 +2206,7 @@ int parse_admin(int fd) { } if (modify_flag == 0) fprintf(fp2, "// %s: 'ladmin' GM level on account %d '%s' (previous level: 0)" RETCODE "%d %d" RETCODE, tmpstr, acc, auth_dat[i].userid, acc, new_gm_level); - fclose(fp); + fclose_(fp); } else { login_log("'ladmin': Attempt to modify of a GM level - impossible to read GM accounts file (account: %s (%d), received GM level: %d, ip: %s)" RETCODE, auth_dat[i].userid, acc, (int)new_gm_level, ip); @@ -2691,7 +2691,7 @@ int parse_admin(int fd) { FILE *logfp; char tmpstr[24]; struct timeval tv; - logfp = fopen(login_log_unknown_packets_filename, "a"); + logfp = fopen_(login_log_unknown_packets_filename, "a"); if (logfp) { gettimeofday(&tv, NULL); strftime(tmpstr, 23, date_format, gmtime(&(tv.tv_sec))); @@ -2724,7 +2724,7 @@ int parse_admin(int fd) { fprintf(logfp, " %s" RETCODE, tmpstr); } fprintf(logfp, RETCODE); - fclose(logfp); + fclose_(logfp); } } login_log("'ladmin': End of connection, unknown packet (ip: %s)" RETCODE, ip); @@ -3150,7 +3150,7 @@ int parse_login(int fd) { FILE *logfp; char tmpstr[24]; struct timeval tv; - logfp = fopen(login_log_unknown_packets_filename, "a"); + logfp = fopen_(login_log_unknown_packets_filename, "a"); if (logfp) { gettimeofday(&tv, NULL); strftime(tmpstr, 23, date_format, gmtime(&(tv.tv_sec))); @@ -3183,7 +3183,7 @@ int parse_login(int fd) { fprintf(logfp, " %s" RETCODE, tmpstr); } fprintf(logfp, RETCODE); - fclose(logfp); + fclose_(logfp); } } login_log("End of connection, unknown packet (ip: %s)" RETCODE, ip); @@ -3226,7 +3226,7 @@ int login_lan_config_read(const char *lancfgName) { for(j = 0; j < 4; j++) subnetmaski[j] = 255; - fp = fopen(lancfgName, "r"); + fp = fopen_(lancfgName, "r"); if (fp == NULL) { printf("***WARNING: LAN Support configuration file is not found: %s\n", lancfgName); @@ -3278,7 +3278,7 @@ int login_lan_config_read(const char *lancfgName) { printf("Sub-network mask of the char-server: %d.%d.%d.%d.\n", subnetmaski[0], subnetmaski[1], subnetmaski[2], subnetmaski[3]); } } - fclose(fp); + fclose_(fp); // log the LAN configuration login_log("The LAN configuration of the server is set:" RETCODE); @@ -3311,7 +3311,7 @@ int login_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; - fp = fopen(cfgName, "r"); + fp = fopen_(cfgName, "r"); if (fp == NULL) { printf("Configuration file (%s) not found.\n", cfgName); return 1; @@ -3483,7 +3483,7 @@ int login_config_read(const char *cfgName) { } } } - fclose(fp); + fclose_(fp); printf("---End reading of Login Server configuration file.\n"); diff --git a/src/login_sql/login.c b/src/login_sql/login.c index 980e454..a46416c 100644 --- a/src/login_sql/login.c +++ b/src/login_sql/login.c @@ -1399,7 +1399,7 @@ int login_lan_config_read(const char *lancfgName){ char line[1024], w1[1024], w2[1024]; FILE *fp; - fp=fopen(lancfgName, "r"); + fp=fopen_(lancfgName, "r"); if (fp == NULL) { printf("file not found: %s\n", lancfgName); @@ -1427,7 +1427,7 @@ int login_lan_config_read(const char *lancfgName){ printf ("set subnetmask : %s\n",w2); } } - fclose(fp); + fclose_(fp); { unsigned int a0, a1, a2, a3; @@ -1466,7 +1466,7 @@ int login_config_read(const char *cfgName){ char line[1024], w1[1024], w2[1024]; FILE *fp; - fp=fopen(cfgName,"r"); + fp=fopen_(cfgName,"r"); if(fp==NULL){ printf("Configuration file (%s) not found.\n", cfgName); @@ -1557,7 +1557,7 @@ int login_config_read(const char *cfgName){ check_ip_flag = config_switch(w2); } } - fclose(fp); + fclose_(fp); printf ("End reading configuration...\n"); return 0; } @@ -1566,7 +1566,7 @@ void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */ int i; char line[1024], w1[1024], w2[1024]; printf("reading configure: %s\n", cfgName); - FILE *fp=fopen(cfgName,"r"); + FILE *fp=fopen_(cfgName,"r"); if(fp==NULL){ printf("file not found: %s\n",cfgName); exit(1); @@ -1619,7 +1619,7 @@ void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */ strcpy(loginlog_db, w2); } } - fclose(fp); + fclose_(fp); printf("reading configure done.....\n"); } diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 6536e00..eb37561 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -574,9 +574,9 @@ void log_atcommand(struct map_session_data *sd, const char *fmt, ...) sprintf(fullname, "%s.%04d-%02d", gm_logfile_name, year, month); if (gm_logfile) - fclose(gm_logfile); + fclose_(gm_logfile); - gm_logfile = fopen(fullname, "a"); + gm_logfile = fopen_(fullname, "a"); free(fullname); if (!gm_logfile) { @@ -729,7 +729,7 @@ int msg_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE *fp; - if ((fp = fopen(cfgName, "r")) == NULL) { + if ((fp = fopen_(cfgName, "r")) == NULL) { printf("Messages file not found: %s\n", cfgName); return 1; } @@ -748,7 +748,7 @@ int msg_config_read(const char *cfgName) { } } } - fclose(fp); + fclose_(fp); return 0; } @@ -776,7 +776,7 @@ int atcommand_config_read(const char *cfgName) { AtCommandInfo* p; FILE* fp; - if ((fp = fopen(cfgName, "r")) == NULL) { + if ((fp = fopen_(cfgName, "r")) == NULL) { printf("At commands configuration file not found: %s\n", cfgName); return 1; } @@ -803,7 +803,7 @@ int atcommand_config_read(const char *cfgName) { w2[0] != '%') // symbol of party chat speaking command_symbol = w2[0]; } - fclose(fp); + fclose_(fp); return 0; } @@ -1934,7 +1934,7 @@ int atcommand_help( memset(buf, '\0', sizeof(buf)); - if ((fp = fopen(help_txt, "r")) != NULL) { + if ((fp = fopen_(help_txt, "r")) != NULL) { clif_displaymessage(fd, msg_table[26]); // Help commands: gm_level = pc_isGM(sd); while(fgets(buf, sizeof(buf) - 1, fp) != NULL) { @@ -1951,7 +1951,7 @@ int atcommand_help( else if (gm_level >= atoi(w1)) clif_displaymessage(fd, w2); } - fclose(fp); + fclose_(fp); } else { clif_displaymessage(fd, msg_table[27]); // File help.txt not found. return -1; diff --git a/src/map/battle.c b/src/map/battle.c index 94d64de..c9f1b59 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -17,6 +17,7 @@ #include "mob.h" #include "pc.h" #include "skill.h" +#include "../common/socket.h" #ifdef MEMWATCH #include "memwatch.h" @@ -4527,7 +4528,7 @@ int battle_config_read(const char *cfgName) battle_config.trade_spam_warn = 8; } - fp = fopen(cfgName,"r"); + fp = fopen_(cfgName,"r"); if (fp == NULL) { printf("file not found: %s\n", cfgName); return 1; @@ -4750,7 +4751,7 @@ int battle_config_read(const char *cfgName) if (strcmpi(w1, "import") == 0) battle_config_read(w2); } - fclose(fp); + fclose_(fp); if (--count == 0) { if(battle_config.flooritem_lifetime < 1000) diff --git a/src/map/chrif.c b/src/map/chrif.c index cc9437a..4318d1a 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -864,7 +864,7 @@ int chrif_reloadGMdb(void) WFIFOW(char_fd,4) = job_rate; WFIFOW(char_fd,6) = drop_rate; - if ((fp = fopen(motd_txt, "r")) != NULL) { + if ((fp = fopen_(motd_txt, "r")) != NULL) { if (fgets(buf, 250, fp) != NULL) { for(i = 0; buf[i]; i++) { if (buf[i] == '\r' || buf[i] == '\n') { @@ -875,7 +875,7 @@ int chrif_reloadGMdb(void) WFIFOW(char_fd,8) = sizeof(buf) + 10; memcpy(WFIFOP(char_fd,10), buf, sizeof(buf)); } - fclose(fp); + fclose_(fp); } else { WFIFOW(char_fd,8) = sizeof(buf) + 10; memcpy(WFIFOP(char_fd,10), buf, sizeof(buf)); @@ -1113,7 +1113,8 @@ int check_connect_char_server(int tid, unsigned int tick, int id, int data) { if (char_fd <= 0 || session[char_fd] == NULL) { printf("Attempt to connect to char-server...\n"); chrif_state = 0; - char_fd = make_connection(char_ip, char_port); + if ((char_fd = make_connection(char_ip, char_port)) < 0) + return 0; session[char_fd]->func_parse = chrif_parse; realloc_fifo(char_fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK); diff --git a/src/map/clif.c b/src/map/clif.c index 1f88ed8..9357084 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8339,9 +8339,18 @@ static void (*clif_parse_func_table[0x220])() = { static int clif_parse(int fd) { int packet_len = 0, cmd=0; struct map_session_data *sd=NULL; - + sd = session[fd]->session_data; + if (!sd || (sd && !sd->state.auth)) { + if (RFIFOREST(fd) < 2) { // too small a packet disconnect + session[fd]->eof = 1; + } + if (RFIFOW(fd,0) != 0x72) { // first packet not auth, disconnect + session[fd]->eof = 1; + } + } + // ソスレ托ソスソスソスソスリゑソスソストゑソスソスフで鯉ソスソスnソスソス if (!chrif_isconnect() || session[fd]->eof) { // charソスIソスノ繋ソスソスソスソストなゑソスソスヤは接托ソスソスヨ止 (!chrif_isconnect()) if (sd && sd->state.auth) { @@ -8433,7 +8442,7 @@ static int clif_parse(int fd) { } else if (sd) // not authentified! (refused by char-server or disconnect before to be authentified) printf("\nAccount ID %d.\n", sd->bl.id); - if ((fp = fopen(packet_txt, "a")) == NULL) { + if ((fp = fopen_(packet_txt, "a")) == NULL) { printf("clif.c: cant write [%s] !!! data is lost !!!\n", packet_txt); return 1; } else { @@ -8454,7 +8463,7 @@ static int clif_parse(int fd) { fprintf(fp, "%02X ", RFIFOB(fd,i)); } fprintf(fp, "\n\n"); - fclose(fp); + fclose_(fp); } } #endif diff --git a/src/map/guild.c b/src/map/guild.c index 9e65c33..1509a37 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -64,7 +64,7 @@ static int guild_read_castledb(void) char *str[32],*p; struct guild_castle *gc; - if( (fp=fopen("db/castle_db.txt","r"))==NULL){ + if( (fp=fopen_("db/castle_db.txt","r"))==NULL){ printf("can't read db/castle_db.txt\n"); return -1; } @@ -97,7 +97,7 @@ static int guild_read_castledb(void) ln++; } - fclose(fp); + fclose_(fp); printf("read db/castle_db.txt done (count=%d)\n",ln); return 0; } diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 44b45ad..d9cb429 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -12,6 +12,7 @@ #include "itemdb.h" #include "script.h" #include "pc.h" +#include "../common/socket.h" #ifdef MEMWATCH #include "memwatch.h" @@ -280,7 +281,7 @@ static int itemdb_readdb(void) for(i=0;i<2;i++){ - fp=fopen(filename[i],"r"); + fp=fopen_(filename[i],"r"); if(fp==NULL){ if(i>0) continue; @@ -348,7 +349,7 @@ static int itemdb_readdb(void) continue; id->equip_script = parse_script(p,lines); } - fclose(fp); + fclose_(fp); printf("read %s done (count=%d)\n",filename[i],ln); } return 0; @@ -388,7 +389,7 @@ static int itemdb_read_randomitem() *pdefault = 0; - if( (fp=fopen(fn,"r"))==NULL ){ + if( (fp=fopen_(fn,"r"))==NULL ){ printf("can't read %s\n",fn); continue; } @@ -424,7 +425,7 @@ static int itemdb_read_randomitem() break; ln++; } - fclose(fp); + fclose_(fp); printf("read %s done (count=%d)\n",fn,*pc); } @@ -442,7 +443,7 @@ static int itemdb_read_itemavail(void) int nameid,j,k; char *str[10],*p; - if( (fp=fopen("db/item_avail.txt","r"))==NULL ){ + if( (fp=fopen_("db/item_avail.txt","r"))==NULL ){ printf("can't read db/item_avail.txt\n"); return -1; } @@ -473,7 +474,7 @@ static int itemdb_read_itemavail(void) id->flag.available = 0; ln++; } - fclose(fp); + fclose_(fp); printf("read db/item_avail.txt done (count=%d)\n",ln); return 0; } @@ -568,7 +569,7 @@ static int itemdb_read_noequip(void) char *str[32],*p; struct item_data *id; - if( (fp=fopen("db/item_noequip.txt","r"))==NULL ){ + if( (fp=fopen_("db/item_noequip.txt","r"))==NULL ){ printf("can't read db/item_noequip.txt\n"); return -1; } @@ -593,7 +594,7 @@ static int itemdb_read_noequip(void) ln++; } - fclose(fp); + fclose_(fp); printf("read db/item_noequip.txt done (count=%d)\n",ln); return 0; } @@ -650,9 +651,9 @@ static int itemdebug(void *key,void *data,va_list ap){ } void itemdebugtxt() { - dfp=fopen("itemdebug.txt","wt"); + dfp=fopen_("itemdebug.txt","wt"); numdb_foreach(item_db,itemdebug); - fclose(dfp); + fclose_(dfp); } */ diff --git a/src/map/magic-interpreter-parser.c b/src/map/magic-interpreter-parser.c index 8cf2312..7ff9fb4 100644 --- a/src/map/magic-interpreter-parser.c +++ b/src/map/magic-interpreter-parser.c @@ -3224,7 +3224,7 @@ magic_init(char *conffile) // must be called after itemdb initialisation INTERN_ASSERT("script_target", VAR_SCRIPTTARGET); INTERN_ASSERT("location", VAR_LOCATION); - magic_frontend_in = fopen(conffile, "r"); + magic_frontend_in = fopen_(conffile, "r"); if (!magic_frontend_in) { fprintf(stderr, "[magic-conf] Magic configuration file `%s' not found -> no magic.\n", conffile); return 0; diff --git a/src/map/magic-interpreter.h b/src/map/magic-interpreter.h index 515b120..4324e53 100644 --- a/src/map/magic-interpreter.h +++ b/src/map/magic-interpreter.h @@ -29,6 +29,7 @@ #include "trade.h" #include "../common/timer.h" +#include "../common/socket.h" #define SPELLARG_NONE 0 /* No spell parameter */ #define SPELLARG_PC 1 /* Spell parameter describes pc (defaults to self) */ diff --git a/src/map/map.c b/src/map/map.c index ee42d3d..86acb62 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1454,7 +1454,7 @@ static void map_readwater(char *watertxt) { FILE *fp=NULL; int n=0; - fp=fopen(watertxt,"r"); + fp=fopen_(watertxt,"r"); if(fp==NULL){ printf("file not found: %s\n",watertxt); return; @@ -1475,7 +1475,7 @@ static void map_readwater(char *watertxt) { waterlist[n].waterheight = 3; n++; } - fclose(fp); + fclose_(fp); } /*========================================== @@ -1665,7 +1665,7 @@ int map_config_read(char *cfgName) { FILE *fp; struct hostent *h = NULL; - fp = fopen(cfgName,"r"); + fp = fopen_(cfgName,"r"); if (fp == NULL) { printf("Map configuration file not found at: %s\n", cfgName); exit(1); @@ -1730,7 +1730,7 @@ int map_config_read(char *cfgName) { } } } - fclose(fp); + fclose_(fp); return 0; } diff --git a/src/map/mob.c b/src/map/mob.c index 51a83d2..09395f6 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -3833,7 +3833,7 @@ static int mob_readdb(void) for(i=0;i<2;i++){ - fp=fopen(filename[i],"r"); + fp=fopen_(filename[i],"r"); if(fp==NULL){ if(i>0) continue; @@ -3966,7 +3966,7 @@ static int mob_readdb(void) if (mob_db[class].base_exp == 0) mob_db[class].base_exp = mob_gen_exp(&mob_db[class]); } - fclose(fp); + fclose_(fp); printf("read %s done\n",filename[i]); } return 0; @@ -3984,7 +3984,7 @@ static int mob_readdb_mobavail(void) int class,j,k; char *str[20],*p,*np; - if( (fp=fopen("db/mob_avail.txt","r"))==NULL ){ + if( (fp=fopen_("db/mob_avail.txt","r"))==NULL ){ printf("can't read db/mob_avail.txt\n"); return -1; } @@ -4031,7 +4031,7 @@ static int mob_readdb_mobavail(void) ln++; } - fclose(fp); + fclose_(fp); printf("read db/mob_avail.txt done (count=%d)\n",ln); return 0; } @@ -4054,7 +4054,7 @@ static int mob_read_randommonster(void) for(i=0;i1000 && class<=2000) || class==0) mob_db[class].summonper[i]=per; } - fclose(fp); + fclose_(fp); printf("read %s done\n",mobfile[i]); } return 0; @@ -4153,7 +4153,7 @@ static int mob_readskilldb(void) for(x=0;x<2;x++){ - fp=fopen(filename[x],"r"); + fp=fopen_(filename[x],"r"); if(fp==NULL){ if(x==0) printf("can't read %s\n",filename[x]); @@ -4231,7 +4231,7 @@ static int mob_readskilldb(void) ms->emotion=-1; mob_db[mob_id].maxskill=i+1; } - fclose(fp); + fclose_(fp); printf("read %s done\n",filename[x]); } return 0; diff --git a/src/map/npc.c b/src/map/npc.c index 11725b3..5fe190b 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -21,6 +21,7 @@ #include "pc.h" #include "script.h" #include "skill.h" +#include "../common/socket.h" #ifdef MEMWATCH #include "memwatch.h" @@ -2008,7 +2009,7 @@ int do_init_npc(void) free(nsl->prev); nsl->prev = NULL; } - fp=fopen(nsl->name,"r"); + fp=fopen_(nsl->name,"r"); if (fp==NULL) { printf("file not found : %s\n",nsl->name); exit(1); @@ -2065,7 +2066,7 @@ int do_init_npc(void) npc_parse_mapflag(w1,w2,w3,w4); } } - fclose(fp); + fclose_(fp); printf("\rLoading NPCs [%d]: %-54s",npc_id-START_NPC_NUM,nsl->name); fflush(stdout); } diff --git a/src/map/pc.c b/src/map/pc.c index b3626df..2e75294 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -798,7 +798,7 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, short tmw_versio { char buf[256]; FILE *fp; - if ((fp = fopen(motd_txt, "r")) != NULL) { + if ((fp = fopen_(motd_txt, "r")) != NULL) { while (fgets(buf, sizeof(buf)-1, fp) != NULL) { int i; for(i=0; buf[i]; i++) { @@ -809,7 +809,7 @@ int pc_authok(int id, int login_id2, time_t connect_until_time, short tmw_versio } clif_displaymessage(sd->fd, buf); } - fclose(fp); + fclose_(fp); } } @@ -7330,7 +7330,7 @@ int pc_readdb(void) // ソスKソスvソスoソスソスソスlソスヌみ搾ソスソスソス - fp=fopen("db/exp.txt","r"); + fp=fopen_("db/exp.txt","r"); if(fp==NULL){ printf("can't read db/exp.txt\n"); return 1; @@ -7360,11 +7360,11 @@ int pc_readdb(void) if(i >= battle_config.maximum_level) break; } - fclose(fp); + fclose_(fp); printf("read db/exp.txt done\n"); // JOBソス竦ウソスソスソスlソスP - fp=fopen("db/job_db1.txt","r"); + fp=fopen_("db/job_db1.txt","r"); if(fp==NULL){ printf("can't read db/job_db1.txt\n"); return 1; @@ -7394,11 +7394,11 @@ int pc_readdb(void) if(i==MAX_PC_CLASS) break; } - fclose(fp); + fclose_(fp); printf("read db/job_db1.txt done\n"); // JOBソス{ソス[ソスiソスX - fp=fopen("db/job_db2.txt","r"); + fp=fopen_("db/job_db2.txt","r"); if(fp==NULL){ printf("can't read db/job_db2.txt\n"); return 1; @@ -7422,11 +7422,11 @@ int pc_readdb(void) if(i==MAX_PC_CLASS) break; } - fclose(fp); + fclose_(fp); printf("read db/job_db2.txt done\n"); // JOBソス{ソス[ソスiソスX2 ソス]ソスソスソスEソスp - fp=fopen("db/job_db2-2.txt","r"); + fp=fopen_("db/job_db2-2.txt","r"); if(fp==NULL){ printf("can't read db/job_db2-2.txt\n"); return 1; @@ -7446,12 +7446,12 @@ int pc_readdb(void) if(i==MAX_PC_CLASS) break; } - fclose(fp); + fclose_(fp); printf("read db/job_db2-2.txt done\n"); // ソスXソスLソスソスソスcソスソスソス[ memset(skill_tree,0,sizeof(skill_tree)); - fp=fopen("db/skill_tree.txt","r"); + fp=fopen_("db/skill_tree.txt","r"); if(fp==NULL){ printf("can't read db/skill_tree.txt\n"); return 1; @@ -7480,7 +7480,7 @@ int pc_readdb(void) skill_tree[2][i][j].need[k].lv=atoi(split[k*2+4]); //ソス{ソスqソスEソスヘ良ゑソスソスソスソスソスソスソスソスネゑソスソスフで暫ソスソス } } - fclose(fp); + fclose_(fp); printf("read db/skill_tree.txt done\n"); // ソスソスソスソスソスCソスソスソスeソス[ソスuソスソス @@ -7488,7 +7488,7 @@ int pc_readdb(void) for(j=0;j<10;j++) for(k=0;k<10;k++) attr_fix_table[i][j][k]=100; - fp=fopen("db/attr_fix.txt","r"); + fp=fopen_("db/attr_fix.txt","r"); if(fp==NULL){ printf("can't read db/attr_fix.txt\n"); return 1; @@ -7526,14 +7526,14 @@ int pc_readdb(void) i++; } } - fclose(fp); + fclose_(fp); printf("read db/attr_fix.txt done\n"); // ソスTソスCソスYソス竦ウソスeソス[ソスuソスソス for(i=0;i<3;i++) for(j=0;j<20;j++) atkmods[i][j]=100; - fp=fopen("db/size_fix.txt","r"); + fp=fopen_("db/size_fix.txt","r"); if(fp==NULL){ printf("can't read db/size_fix.txt\n"); return 1; @@ -7555,7 +7555,7 @@ int pc_readdb(void) atkmods[i][j]=atoi(split[j]); i++; } - fclose(fp); + fclose_(fp); printf("read db/size_fix.txt done\n"); // ソスソスソスBソスfソス[ソス^ソスeソス[ソスuソスソス @@ -7566,7 +7566,7 @@ int pc_readdb(void) refinebonus[i][1]=0; refinebonus[i][2]=10; } - fp=fopen("db/refine_db.txt","r"); + fp=fopen_("db/refine_db.txt","r"); if(fp==NULL){ printf("can't read db/refine_db.txt\n"); return 1; @@ -7591,7 +7591,7 @@ int pc_readdb(void) percentrefinery[i][j]=atoi(split[j+3]); i++; } - fclose(fp); //Lupus. close this file!!! + fclose_(fp); //Lupus. close this file!!! printf("read db/refine_db.txt done\n"); return 0; @@ -7619,7 +7619,7 @@ static void pc_statpointdb(void) FILE *stp; - stp=fopen("db/statpoint.txt","r"); + stp=fopen_("db/statpoint.txt","r"); if(stp==NULL){ printf("can't read db/statpoint.txt\n"); @@ -7632,7 +7632,7 @@ static void pc_statpointdb(void) buf_stat = (char *) malloc (end + 1); l = fread(buf_stat,1,end,stp); - fclose(stp); + fclose_(stp); printf("read db/statpoint.txt done (size=%d)\n",l); for(i=0;i<255;i++) { diff --git a/src/map/script.c b/src/map/script.c index 94f03f7..218c3f3 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -1090,7 +1090,7 @@ static void read_constdb(void) char line[1024],name[1024]; int val,n,i,type; - fp=fopen("db/const.txt","r"); + fp=fopen_("db/const.txt","r"); if(fp==NULL){ printf("can't read db/const.txt\n"); return ; @@ -1111,7 +1111,7 @@ static void read_constdb(void) str_data[n].val=val; } } - fclose(fp); + fclose_(fp); } /*========================================== @@ -6549,7 +6549,7 @@ static int script_load_mapreg() FILE *fp; char line[1024]; - if( (fp=fopen(mapreg_txt,"rt"))==NULL ) + if( (fp=fopen_(mapreg_txt,"rt"))==NULL ) return -1; while(fgets(line,sizeof(line),fp)){ @@ -6576,7 +6576,7 @@ static int script_load_mapreg() numdb_insert(mapreg_db,(i<<24)|s,v); } } - fclose(fp); + fclose_(fp); mapreg_dirty=0; return 0; } @@ -6666,7 +6666,7 @@ int script_config_read(char *cfgName) script_config.check_cmdcount=8192; script_config.check_gotocount=512; - fp=fopen(cfgName,"r"); + fp=fopen_(cfgName,"r"); if(fp==NULL){ printf("file not found: %s\n",cfgName); return 1; @@ -6684,7 +6684,7 @@ int script_config_read(char *cfgName) script_config_read(w2); } } - fclose(fp); + fclose_(fp); return 0; } diff --git a/src/map/skill.c b/src/map/skill.c index 3a777ac..c661dc2 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -21,6 +21,7 @@ #include "pc.h" #include "script.h" #include "skill.h" +#include "../common/socket.h" #ifdef MEMWATCH #include "memwatch.h" @@ -9890,7 +9891,7 @@ int skill_readdb(void) /* The main skill database */ memset(skill_db,0,sizeof(skill_db)); - fp=fopen("db/skill_db.txt","r"); + fp=fopen_("db/skill_db.txt","r"); if(fp==NULL){ printf("can't read db/skill_db.txt\n"); return 1; @@ -9959,10 +9960,10 @@ int skill_readdb(void) for(k=0;k