diff options
-rw-r--r-- | Changelog-Trunk.txt | 8 | ||||
-rw-r--r-- | src/map/battle.c | 6 | ||||
-rw-r--r-- | src/map/clif.c | 2 | ||||
-rw-r--r-- | src/map/npc.c | 4 | ||||
-rw-r--r-- | src/map/skill.c | 2 |
5 files changed, 17 insertions, 5 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 927e40c26..c39945916 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -5,6 +5,14 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
2006/03/03
+ * Added event 8 for mobspawns that should spawn with special ai set. This
+ means that now in the mob_spawn files if you use 8 as the last entry, the
+ mob will use the special ai, and as such, it will only attack other mobs,
+ not players (can obviously be combined with 2 for small mobs and 4 for
+ large mobs, eg: 10 for a small mob with special ai set) [Skotlex]
+ * Modifed battle_check_target so that mobs with special ai will only target
+ by default mobs without said state (this will prevent normal clones from
+ fighting among themselves, for example) [Skotlex]
* Trick dead now ends on logout [Skotlex]
* Added mapflag nocommand which blocks @/# commands unless your gm level is
above gm_skill_unconditional's level. [Skotlex]
diff --git a/src/map/battle.c b/src/map/battle.c index f985f69f2..f1d03c062 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3387,8 +3387,10 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f state |= BCT_PARTY; //Normal mobs with no ai are friends.
else
state |= BCT_ENEMY; //However, all else are enemies.
- } else if (t_bl->type != BL_PC)
- state |= BCT_ENEMY; //Natural enemy for AI mobs are nonplayers.
+ } else {
+ if (t_bl->type == BL_MOB && !((struct mob_data*)t_bl)->special_state.ai)
+ state |= BCT_ENEMY; //Natural enemy for AI mobs are normal mobs.
+ }
if (md->master_id && (s_bl = map_id2bl(md->master_id)) == NULL)
s_bl = &md->bl; //Fallback on the mob itself, otherwise consider this a "from master" scenario.
break;
diff --git a/src/map/clif.c b/src/map/clif.c index 227e42049..376f15c6d 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -3449,7 +3449,7 @@ int clif_arrow_create_list(struct map_session_data *sd) nullpo_retr(0, sd);
fd = sd->fd;
- WFIFOHEAD(fd, MAX_SKILL_ARROW_DB*2+4);
+ WFIFOHEAD(fd, MAX_SKILL_ARROW_DB*2+4);
WFIFOW(fd,0) = 0x1ad;
for (i = 0, c = 0; i < MAX_SKILL_ARROW_DB; i++) {
diff --git a/src/map/npc.c b/src/map/npc.c index c511c8de4..3c3967762 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -2313,12 +2313,14 @@ int npc_parse_mob2 (struct mob_list *mob, int cached) if (strlen(mob->eventname) >= 4) {
memcpy(md->npc_event, mob->eventname, NAME_LENGTH-1);
- } else if (strlen(mob->eventname) == 1) { //Portable monster big/small implementation. [Skotlex]
+ } else if (strlen(mob->eventname) <= 2) { //Portable monster big/small implementation. [Skotlex]
int size = atoi(mob->eventname);
if (size & 2)
md->special_state.size=1;
else if (size & 4)
md->special_state.size=2;
+ if (size & 8)
+ md->special_state.ai=1;
}
md->bl.type = BL_MOB;
diff --git a/src/map/skill.c b/src/map/skill.c index e552eb657..1d536b8ed 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5118,7 +5118,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in }
if(su->group->unit_id == UNT_ANKLESNARE && su->group->val2){
struct block_list *target=map_id2bl(su->group->val2);
- if(target && (target->type == BL_PC || target->type == BL_MOB))
+ if(target)
status_change_end(target,SC_ANKLE,-1);
}
skill_delunit(su);
|