diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-04-09 18:11:32 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-04-09 18:11:32 +0000 |
commit | 0638d728c718e648e622a524e5c3010d23b049d0 (patch) | |
tree | 5f7786bcb230531682387b34e77598c7a4bbfbc7 /src | |
parent | d9cf596186c4432f100a70a5395587536a879223 (diff) | |
download | hercules-0638d728c718e648e622a524e5c3010d23b049d0.tar.gz hercules-0638d728c718e648e622a524e5c3010d23b049d0.tar.bz2 hercules-0638d728c718e648e622a524e5c3010d23b049d0.tar.xz hercules-0638d728c718e648e622a524e5c3010d23b049d0.zip |
- Fixed @npcmove not sending the correct packets to make the moving refresh client-side.
- Fixed mobs with aggressive + looter mode never looting.
- skill_wall_check now also checks for pits so that skill effects don't go through them.
- Now you can't leave/be-kicked from a guild inside guild castles.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5969 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-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 |
4 files changed, 9 insertions, 7 deletions
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;
}
|