summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/battle.c20
-rw-r--r--src/map/map.h7
-rw-r--r--src/map/unit.c35
3 files changed, 32 insertions, 30 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index 38be508dd..f13125bb7 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -1102,14 +1102,14 @@ static struct Damage battle_calc_weapon_attack(
if(battle_config.agi_penalty_type &&
battle_config.agi_penalty_target&target->type)
{
- unsigned char target_count; //256 max targets should be a sane max
- target_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv);
- if(target_count >= battle_config.agi_penalty_count)
+ unsigned char attacker_count; //256 max targets should be a sane max
+ attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv);
+ if(attacker_count >= battle_config.agi_penalty_count)
{
if (battle_config.agi_penalty_type == 1)
- flee = (flee * (100 - (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
+ flee = (flee * (100 - (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
else //asume type 2: absolute reduction
- flee -= (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
+ flee -= (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
if(flee < 1) flee = 1;
}
}
@@ -2585,14 +2585,14 @@ struct Damage battle_calc_misc_attack(
if(battle_config.agi_penalty_type &&
battle_config.agi_penalty_target&target->type)
{
- unsigned char target_count; //256 max targets should be a sane max
- target_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv);
- if(target_count >= battle_config.agi_penalty_count)
+ unsigned char attacker_count; //256 max targets should be a sane max
+ attacker_count = unit_counttargeted(target,battle_config.agi_penalty_count_lv);
+ if(attacker_count >= battle_config.agi_penalty_count)
{
if (battle_config.agi_penalty_type == 1)
- flee = (flee * (100 - (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
+ flee = (flee * (100 - (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
else //asume type 2: absolute reduction
- flee -= (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
+ flee -= (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
if(flee < 1) flee = 1;
}
}
diff --git a/src/map/map.h b/src/map/map.h
index fc7affdf3..d7ebb3d6c 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -1033,7 +1033,12 @@ struct pet_data {
struct map_session_data *msd;
};
-enum { ATK_LUCKY=1,ATK_FLEE,ATK_DEF}; // 囲まれペナルティ計算用
+// state of a single attack attempt; used in flee/def penalty calculations when mobbed
+enum {
+ ATK_LUCKY=1, // attack was lucky-dodged
+ ATK_FLEE, // attack was dodged
+ ATK_DEF // attack connected
+};
struct map_data {
char name[MAP_NAME_LENGTH];
diff --git a/src/map/unit.c b/src/map/unit.c
index 182133f9b..f8f6daa59 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -1521,15 +1521,14 @@ void unit_dataset(struct block_list *bl) {
}
/*==========================================
- * 自分をロックしているユニットの数を数える(foreachclient)
- *------------------------------------------
- */
-static int unit_counttargeted_sub(struct block_list *bl, va_list ap)
+ * Returns 1 if this unit is attacking target 'id'
+ *------------------------------------------*/
+static int unit_counttargeted_sub(struct block_list* bl, va_list ap)
{
- int id, target_lv;
- struct unit_data *ud;
- id = va_arg(ap,int);
- target_lv = va_arg(ap,int);
+ int id = va_arg(ap, int);
+ int target_lv = va_arg(ap, int); // extra condition
+ struct unit_data* ud;
+
if(bl->id == id)
return 0;
@@ -1542,6 +1541,15 @@ static int unit_counttargeted_sub(struct block_list *bl, va_list ap)
}
/*==========================================
+ * Counts the number of units attacking 'bl'
+ *------------------------------------------*/
+int unit_counttargeted(struct block_list* bl, int target_lv)
+{
+ nullpo_retr(0, bl);
+ return (map_foreachinrange(unit_counttargeted_sub, bl, AREA_SIZE, BL_CHAR, bl->id, target_lv));
+}
+
+/*==========================================
*
*------------------------------------------
*/
@@ -1554,17 +1562,6 @@ int unit_fixdamage(struct block_list *src,struct block_list *target,unsigned int
return status_fix_damage(src,target,damage+damage2,clif_damage(target,target,tick,sdelay,ddelay,damage,div,type,damage2));
}
-/*==========================================
- * 自分をロックしている対象の数を返す
- * 戻りは整数で0以上
- *------------------------------------------
- */
-int unit_counttargeted(struct block_list *bl,int target_lv)
-{
- nullpo_retr(0, bl);
- return (map_foreachinrange(unit_counttargeted_sub, bl, AREA_SIZE, BL_CHAR,
- bl->id, target_lv));
-}
/*==========================================
* 見た目のサイズを変更する