summaryrefslogtreecommitdiff
path: root/src/map/mob.c
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-09-25 18:32:08 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-09-25 18:32:08 +0000
commit77b02c49796f442a3ea87bb5bab1b568a4d80a29 (patch)
treeaf359d1fdb161b0ecd330946a2d52dc458f814c1 /src/map/mob.c
parentc92056c063c53cbee4f7004d064f075b3c96c33f (diff)
downloadhercules-77b02c49796f442a3ea87bb5bab1b568a4d80a29.tar.gz
hercules-77b02c49796f442a3ea87bb5bab1b568a4d80a29.tar.bz2
hercules-77b02c49796f442a3ea87bb5bab1b568a4d80a29.tar.xz
hercules-77b02c49796f442a3ea87bb5bab1b568a4d80a29.zip
- Modified a bit the hard/lazy ai triggers to match aegis:
- Mobs go into active AI when they are 2 cells from entering a player's view (ACTIVE_AI_RANGE) - Mobs in passive AI no longer use skills. - Mobs in passive AI do not random walk UNLESS they have entered active AI before (random walk frequency is not lost during passive AI). - Added an additional check to prevent support skills from being blocked if the target has an armor element that blocks it. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11294 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/mob.c')
-rw-r--r--src/map/mob.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/map/mob.c b/src/map/mob.c
index bfa22fe4a..07fc2db22 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -36,17 +36,18 @@
#include <string.h>
#include <math.h>
+#define ACTIVE_AI_RANGE 2 //Distance added on top of 'AREA_SIZE' at which mobs enter active AI mode.
#define IDLE_SKILL_INTERVAL 10 //Active idle skills should be triggered every 1 second (1000/MIN_MOBTHINKTIME)
-#define MOB_LAZYSKILLPERC 10 // Probability for mobs far from players from doing their IDLE skill. (rate of 1000 minute)
-#define MOB_LAZYMOVEPERC 50 // Move probability in the negligent mode MOB (rate of 1000 minute)
+#define MOB_LAZYSKILLPERC 0 // Probability for mobs far from players from doing their IDLE skill. (rate of 1000 minute)
+// Move probability for mobs away from players (rate of 1000 minute)
+// in Aegis, this is 100% for mobs that have been activated by players and none otherwise.
+#define MOB_LAZYMOVEPERC(md) (md->state.spotted?1000:0)
#define MOB_LAZYWARPPERC 20 // Warp probability in the negligent mode MOB (rate of 1000 minute)
#define MAX_MINCHASE 30 //Max minimum chase value to use for mobs.
-
#define RUDE_ATTACKED_COUNT 2 //After how many rude-attacks should the skill be used?
-
//Used to determine default enemy type of mobs (for use in eachinrange calls)
#define DEFAULT_ENEMY_TYPE(md) (md->special_state.ai?BL_CHAR:BL_PC|BL_HOM)
@@ -1129,6 +1130,9 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap)
if(md->bl.prev == NULL || md->status.hp <= 0)
return 1;
+ if(!md->state.spotted) //Hard AI triggered.
+ md->state.spotted = 1;
+
if (DIFF_TICK(tick, md->last_thinktime) < MIN_MOBTHINKTIME)
return 0;
md->last_thinktime = tick;
@@ -1367,7 +1371,7 @@ static int mob_ai_sub_foreachclient(struct map_session_data *sd,va_list ap)
{
unsigned int tick;
tick=va_arg(ap,unsigned int);
- map_foreachinrange(mob_ai_sub_hard,&sd->bl, AREA_SIZE*2, BL_MOB,tick);
+ map_foreachinrange(mob_ai_sub_hard,&sd->bl, AREA_SIZE+ACTIVE_AI_RANGE, BL_MOB,tick);
return 0;
}
@@ -1413,7 +1417,7 @@ static int mob_ai_sub_lazy(DBKey key,void * data,va_list ap)
// Since PC is in the same map, somewhat better negligent processing is carried out.
// It sometimes moves.
- if(rand()%1000<MOB_LAZYMOVEPERC)
+ if(rand()%1000<MOB_LAZYMOVEPERC(md))
mob_randomwalk(md,tick);
else if(rand()%1000<MOB_LAZYSKILLPERC) //Chance to do a mob's idle skill.
mobskill_use(md, tick, -1);