diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/atcommand.c | 9 | ||||
-rw-r--r-- | src/map/mob.c | 2 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 395cb1cba..86c14dd29 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -2876,6 +2876,9 @@ ACMD_FUNC(recall) clif_displaymessage(fd, msg_txt(1020)); // You are not authorized to warp this player from their map. return -1; } + if (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y) { + return -1; + } pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, CLR_RESPAWN); sprintf(atcmd_output, msg_txt(46), pl_sd->status.name); // %s recalled! clif_displaymessage(fd, atcmd_output); @@ -3549,6 +3552,8 @@ ACMD_FUNC(recallall) iter = mapit_getallusers(); for (pl_sd = (TBL_PC *)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC *)mapit_next(iter)) { if (sd->status.account_id != pl_sd->status.account_id && pc_get_group_level(sd) >= pc_get_group_level(pl_sd)) { + if (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y) + continue; // Don't waste time warping the character to the same place. if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) count++; else { @@ -3607,7 +3612,7 @@ ACMD_FUNC(guildrecall) iter = mapit_getallusers(); for (pl_sd = (TBL_PC *)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC *)mapit_next(iter)) { if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.guild_id == g->guild_id) { - if (pc_get_group_level(pl_sd) > pc_get_group_level(sd)) + if (pc_get_group_level(pl_sd) > pc_get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y)) continue; //Skip GMs greater than you. if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) count++; @@ -3663,7 +3668,7 @@ ACMD_FUNC(partyrecall) iter = mapit_getallusers(); for (pl_sd = (TBL_PC *)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC *)mapit_next(iter)) { if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.party_id == p->party.party_id) { - if (pc_get_group_level(pl_sd) > pc_get_group_level(sd)) + if (pc_get_group_level(pl_sd) > pc_get_group_level(sd) || (pl_sd->bl.m == sd->bl.m && pl_sd->bl.x == sd->bl.x && pl_sd->bl.y == sd->bl.y)) continue; //Skip GMs greater than you. if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) count++; diff --git a/src/map/mob.c b/src/map/mob.c index 72bc2ad86..acec51df6 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2191,7 +2191,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) else job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map[m].jexp/100., 1, UINT_MAX); - if ((temp = tmpsd[i]->status.party_id)>0 && !md->dmglog[i].flag == MDLF_HOMUN) { //Homun-done damage (flag 1) is not given to party + if ((temp = tmpsd[i]->status.party_id)>0 /*&& !md->dmglog[i].flag == MDLF_HOMUN*/) { //Homun-done damage (flag 1) is given to party int j; for (j=0; j<pnum && pt[j].id!=temp; j++); //Locate party. |