diff options
-rw-r--r-- | Changelog-Trunk.txt | 6 | ||||
-rw-r--r-- | src/map/atcommand.c | 4 | ||||
-rw-r--r-- | src/map/guild.c | 5 | ||||
-rw-r--r-- | src/map/mob.c | 5 | ||||
-rw-r--r-- | src/map/skill.c | 2 |
5 files changed, 15 insertions, 7 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 976c0812d..978b8cdcb 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,12 @@ 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.
2006/04/09
+ * Fixed @npcmove not sending the correct packets to make the moving refresh
+ client-side. [Skotlex]
+ * Fixed mobs with aggressive + looter mode never looting. [Skotlex]
+ * skill_wall_check now also checks for pits so that skill effects don't go
+ through them. [Skotlex]
+ * Now you can't leave/be-kicked from a guild inside guild castles. [Skotlex]
* Fixed map_waterheight prefixing extra "data\" [Lance]
* Mob_ai update. The attacked checks will trigger even if the mob can't
move. Being attacked while the mob can't move no longer will trigger
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 48ee58056..189843fd6 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -7021,13 +7021,13 @@ atcommand_npcmove(const int fd, struct map_session_data* sd, if ((m=nd->bl.m) < 0 || nd->bl.prev == NULL)
return -1; //Not on a map.
- npc_enable(atcmd_player_name, 0);
if (x < 0) x = 0;
else if (x >= map[m].xs) x = map[m].xs-1;
if (y < 0) y = 0;
else if (y >= map[m].ys) y = map[m].ys-1;
+ map_foreachinrange(clif_outsight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl);
map_moveblock(&nd->bl, x, y, gettick());
- npc_enable(atcmd_player_name, 1);
+ map_foreachinrange(clif_insight, &nd->bl, AREA_SIZE, BL_PC, &nd->bl);
return 0;
}
diff --git a/src/map/guild.c b/src/map/guild.c index cc5065c51..473ca6258 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -778,7 +778,8 @@ int guild_leave(struct map_session_data *sd,int guild_id, return 0;
if( sd->status.account_id!=account_id ||
- sd->status.char_id!=char_id || sd->status.guild_id!=guild_id)
+ sd->status.char_id!=char_id || sd->status.guild_id!=guild_id ||
+ map[sd->bl.m].flag.gvg_castle) //Can't leave inside guild castles.
return 0;
for(i=0;i<g->max_member;i++){ // 所属しているか
@@ -804,7 +805,7 @@ int guild_explusion(struct map_session_data *sd,int guild_id, if(g==NULL)
return 0;
- if( sd->status.guild_id!=guild_id)
+ if(sd->status.guild_id!=guild_id || map[sd->bl.m].flag.gvg_castle) //Can't leave inside guild castles.
return 0;
if( (ps=guild_getposition(sd,g))<0 || !(g->position[ps].mode&0x0010) )
diff --git a/src/map/mob.c b/src/map/mob.c index c6248ca56..2fed0ca55 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1195,7 +1195,7 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap) mob_ai_sub_hard_slavemob(md, tick);
// Scan area for targets
- if ((mode&MD_AGGRESSIVE && battle_config.monster_active_enable && !tbl) ||
+ if ((!tbl && mode&MD_AGGRESSIVE && battle_config.monster_active_enable) ||
(mode&MD_ANGRY && md->state.skillstate == MSS_FOLLOW)
) {
map_foreachinrange (mob_ai_sub_hard_activesearch, &md->bl,
@@ -1204,7 +1204,8 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap) search_size = view_range<md->db->range ? view_range:md->db->range;
map_foreachinrange (mob_ai_sub_hard_changechase, &md->bl,
search_size, (md->special_state.ai?BL_CHAR:BL_PC), md, &tbl);
- } else if (!tbl && mode&MD_LOOTER && md->lootitem &&
+ }
+ if (!tbl && mode&MD_LOOTER && md->lootitem &&
(md->lootitem_count < LOOTITEM_SIZE || battle_config.monster_loot_type != 1))
{ // Scan area for items to loot, avoid trying to loot of the mob is full and can't consume the items.
map_foreachinrange (mob_ai_sub_hard_lootsearch, &md->bl,
diff --git a/src/map/skill.c b/src/map/skill.c index 5537e1349..5d2797fe3 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6557,7 +6557,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, if (alive && battle_config.skill_wall_check) {
//Check if there's a path between cell and center of casting.
struct walkpath_data wpd;
- if (path_search2(&wpd,src->m,ux,uy,x,y,0x1)==-1)
+ if (path_search_real(&wpd,src->m,ux,uy,x,y,0x1,CELL_CHKNOREACH) == -1)
alive = 0;
}
|