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
This commit is contained in:
parent
3b8fb2fe6f
commit
cc636df44f
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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];
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* 見た目のサイズを変更する
|
||||
|
Loading…
x
Reference in New Issue
Block a user