Просмотр исходного кода

Re-phrased the attacker flee/def penalty config descs

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10530 54d463be-8e91-2dee-dedb-b68131a5f0ec
ultramage 18 лет назад
Родитель
Сommit
cc636df44f
5 измененных файлов с 44 добавлено и 40 удалено
  1. 2 0
      Changelog-Trunk.txt
  2. 10 10
      conf-tmpl/battle/battle.conf
  3. 10 10
      src/map/battle.c
  4. 6 1
      src/map/map.h
  5. 16 19
      src/map/unit.c

+ 2 - 0
Changelog-Trunk.txt

@@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2007/05/11
+	* Re-phrased the attacker flee/def penalty config descs [ultramage]
+	  Ref: http://www.eathena.ws/board/index.php?showtopic=150918
 	* Attempt to fix unwanted teleporting of immobile mobs [Playtester]
 2007/05/10
 	* Adapted the shortlist to use a static array instead of a linked list and 

+ 10 - 10
conf-tmpl/battle/battle.conf

@@ -123,18 +123,18 @@ weapon_defense_type: 0
 //MDEF‚same as above....(MDEF*value)
 magic_defense_type: 0
 
-// How to count the number of the enemies who do an agi penalty...
-// 1 or less: It is a count altogether.
-// 2: Full evasion exclusion
-// 3: Full evasion and evasion exclusion 
-// 4 or more: Except all.
+// How to count the number of attackers when applying agi penalty ? (choose one)
+// 1-: Count every attack attempt (even those that were dodged/lucky-dodged)
+// 2 : Count every non-lucky-dodged attack attempt
+// 3 : Count only attacks that actually connect
+// 4+: None of the above, count will always be 0
 agi_penalty_count_lv: 2
 
-// How to count the number of the enemies who do a vit penalty
-// 1 or less: It is a count altogether.
-// 2: Full evasion exclusion
-// 3: Full evasion and evasion exclusion
-// Four or more: Except all.
+// How to count the number of attackers when applying vit penalty ? (choose one)
+// 1-: Count every attack attempt (even those that were dodged/lucky-dodged)
+// 2 : Count every non-lucky-dodged attack attempt
+// 3 : Count only attacks that actually connect
+// 4+: None of the above, count will always be 0
 vit_penalty_count_lv: 3
 
 // Change attacker's direction to face opponent on every attack? (Note 4)

+ 10 - 10
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;
 				}
 			}

+ 6 - 1
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];

+ 16 - 19
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;
 
@@ -1541,6 +1540,15 @@ static int unit_counttargeted_sub(struct block_list *bl, va_list ap)
 	return 0;	
 }
 
+/*==========================================
+ * 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));
-}
 
 /*==========================================
  * 見た目のサイズを変更する