Hi, i've been trying to figure out how to check if there is a player near a mob. Here is the code im at right now:
int pc_isnear_sub(struct block_list *bl, va_list args){ int* isnear = va_arg(args, int*); struct map_session_data *sd = (struct map_session_data *)bl; if (sd->sc.data[SC_TRICKDEAD] || sd->sc.data[SC_HIDING] || sd->sc.data[SC_CLOAKING] || pc_isinvisible(sd) || sd->vd.class_ == INVISIBLE_CLASS || pc_isdead(sd)) { return 0; } else{ *isnear++; } return 1;}int pc_isnear_mob(struct mob_data *md) { int *isnear = 0; //map->foreachinarea(pc_isnear_sub, md->bl.m, md->bl.x - AREA_SIZE, md->bl.y - AREA_SIZE, md->bl.x + AREA_SIZE, md->bl.y + AREA_SIZE, BL_PC,isnear, isnear); map->foreachinrange((pc_isnear_sub), &md->bl, AREA_SIZE, BL_PC, isnear); if (isnear > 0){ return true; } return false;}
But it seems like pc_isnear_sub isn't even being called, can anyone tell me what im doing wrong? :/
int pc_isnear_sub(struct block_list *bl, va_list args){ int* isnear = va_arg(args, int*); struct map_session_data *sd = (struct map_session_data *)bl; if (sd->sc.data[SC_TRICKDEAD] || sd->sc.data[SC_HIDING] || sd->sc.data[SC_CLOAKING] || pc_isinvisible(sd) || sd->vd.class_ == INVISIBLE_CLASS || pc_isdead(sd)) { return 0; } else{ *isnear++; } return 1;}int pc_isnear_mob(struct mob_data *md) { int *isnear = 0; //map->foreachinarea(pc_isnear_sub, md->bl.m, md->bl.x - AREA_SIZE, md->bl.y - AREA_SIZE, md->bl.x + AREA_SIZE, md->bl.y + AREA_SIZE, BL_PC,isnear, isnear); map->foreachinrange((pc_isnear_sub), &md->bl, AREA_SIZE, BL_PC, isnear); if (isnear > 0){ return true; } return false;}
But it seems like pc_isnear_sub isn't even being called, can anyone tell me what im doing wrong? :/
Last edited by a moderator: