summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-06-08 18:35:26 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-06-08 18:35:26 +0000
commit7a914d6f49d6914143fcfdec3fb11b18c9ff7c47 (patch)
tree8807ddad9a061976152d726c81b44a23a37c8cda
parent5ce123adf879f75d82669f50c5c477fd05020fc9 (diff)
downloadhercules-7a914d6f49d6914143fcfdec3fb11b18c9ff7c47.tar.gz
hercules-7a914d6f49d6914143fcfdec3fb11b18c9ff7c47.tar.bz2
hercules-7a914d6f49d6914143fcfdec3fb11b18c9ff7c47.tar.xz
hercules-7a914d6f49d6914143fcfdec3fb11b18c9ff7c47.zip
- Added mob mode 0x4000, MD_TARGETWEAK: It makes aggro monsters only chase characters whose level is no higher than the monster's +5.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13867 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--doc/mob_db_mode_list.txt36
-rw-r--r--src/map/mob.c7
-rw-r--r--src/map/status.h1
3 files changed, 27 insertions, 17 deletions
diff --git a/doc/mob_db_mode_list.txt b/doc/mob_db_mode_list.txt
index 8c35d3ce7..8729fd175 100644
--- a/doc/mob_db_mode_list.txt
+++ b/doc/mob_db_mode_list.txt
@@ -13,21 +13,21 @@
Bit Legend:
-------------------------------------------------------------------------------
-MD_CANMOVE | 0x0001 | 1
-MD_LOOTER | 0x0002 | 2
-MD_AGGRESSIVE | 0x0004 | 4
-MD_ASSIST | 0x0008 | 8
-MD_CASTSENSOR_IDLE | 0x0010 | 16
-MD_BOSS | 0x0020 | 32
-MD_PLANT | 0x0040 | 64
-MD_CANATTACK | 0x0080 | 128
-MD_DETECTOR | 0x0100 | 256
-MD_CASTSENSOR_CHASE | 0x0200 | 512
-MD_CHANGECHASE | 0x0400 | 1024
-MD_ANGRY | 0x0800 | 2048
-MD_CHANGETARGET_MELEE | 0x1000 | 4096
-MD_CHANGETARGET_CHASE | 0x2000 | 8192
-
+MD_CANMOVE | 0x0001 | 1
+MD_LOOTER | 0x0002 | 2
+MD_AGGRESSIVE | 0x0004 | 4
+MD_ASSIST | 0x0008 | 8
+MD_CASTSENSOR_IDLE | 0x0010 | 16
+MD_BOSS | 0x0020 | 32
+MD_PLANT | 0x0040 | 64
+MD_CANATTACK | 0x0080 | 128
+MD_DETECTOR | 0x0100 | 256
+MD_CASTSENSOR_CHASE | 0x0200 | 512
+MD_CHANGECHASE | 0x0400 | 1024
+MD_ANGRY | 0x0800 | 2048
+MD_CHANGETARGET_MELEE | 0x1000 | 4096
+MD_CHANGETARGET_CHASE | 0x2000 | 8192
+MD_TARGETWEAK | 0x4000 | 126384
Explanation for modes:
-------------------------------------------------------------------------------
@@ -70,6 +70,9 @@ Change Target Melee: Enables a mob to switch targets when attacked while
Change Target Chase: Enables a mob to switch targets when attacked while
chasing another character.
+Target Weak: Allows aggressive monsters to only be aggressive against
+ characters that aren't five or more levels above the monster's.
+
Aegis Mob Types:
-------------------------------------------------------------------------------
@@ -85,6 +88,7 @@ Aegis/eA (description)
05: 0x2085 (aggro, change-target chase)
06: 0x0000 (passive, immobile, can't attack) [plants]
07: 0x108B (passive, looter, assist, change-target melee)
+08: 0x6085 (aggro, change-target chase, target weak enemies)
09: 0x3095 (aggro, change-target melee/chase, cast sensor idle) [Guardian]
10: 0x0084 (aggro, immobile)
11: 0x0084 (aggro, immobile) [Guardian]
@@ -95,5 +99,5 @@ Aegis/eA (description)
20: 0x3295 (aggro, change-target melee/chase, cast sensor idle/chase)
21: 0x3695 (aggro, change-target melee/chase, cast sensor idle/chase, chase-change target)
-- Note that the detector bit due to being Insect/Demon, plant and Boss mode
+- Note that the detector bit due to being Insect/Demon, plant and Boss mode
bits need to be added independently of this list.
diff --git a/src/map/mob.c b/src/map/mob.c
index 598389b3f..1dbc29757 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -955,16 +955,21 @@ static int mob_ai_sub_hard_activesearch(struct block_list *bl,va_list ap)
{
struct mob_data *md;
struct block_list **target;
+ int mode;
int dist;
nullpo_retr(0, bl);
md=va_arg(ap,struct mob_data *);
target= va_arg(ap,struct block_list**);
+ mode= va_arg(ap,int);
//If can't seek yet, not an enemy, or you can't attack it, skip.
if ((*target) == bl || !status_check_skilluse(&md->bl, bl, 0, 0))
return 0;
+ if ((mode&MD_TARGETWEAK) && status_get_lv(bl) >= md->level+5)
+ return 0;
+
if(battle_check_target(&md->bl,bl,BCT_ENEMY)<=0)
return 0;
@@ -1414,7 +1419,7 @@ static bool mob_ai_sub_hard(struct mob_data *md, unsigned int tick)
if ((!tbl && mode&MD_AGGRESSIVE) || md->state.skillstate == MSS_FOLLOW)
{
- map_foreachinrange (mob_ai_sub_hard_activesearch, &md->bl, view_range, DEFAULT_ENEMY_TYPE(md), md, &tbl);
+ map_foreachinrange (mob_ai_sub_hard_activesearch, &md->bl, view_range, DEFAULT_ENEMY_TYPE(md), md, &tbl, mode);
}
else
if (mode&MD_CHANGECHASE && (md->state.skillstate == MSS_RUSH || md->state.skillstate == MSS_FOLLOW))
diff --git a/src/map/status.h b/src/map/status.h
index f79deca6f..389817a65 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -668,6 +668,7 @@ extern int percentrefinery[5][MAX_REFINE+1]; //The last slot always has a 0% suc
#define MD_ANGRY 0x0800
#define MD_CHANGETARGET_MELEE 0x1000
#define MD_CHANGETARGET_CHASE 0x2000
+#define MD_TARGETWEAK 0x4000
#define MD_MASK 0xFFFF
//Status change option definitions (options are what makes status changes visible to chars