summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt6
-rw-r--r--src/map/atcommand.c4
-rw-r--r--src/map/guild.c5
-rw-r--r--src/map/mob.c5
-rw-r--r--src/map/skill.c2
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;
}