diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/mob.c | 10 | ||||
-rw-r--r-- | src/map/script.c | 21 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/map/mob.c b/src/map/mob.c index ab25d1779..8e23f9f78 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2125,16 +2125,20 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) delete_timer(md->deletetimer,mob_timer_delete); md->deletetimer=-1; } - if(pcdb_checkid(md->vd->class_)) //Player mobs are not removed automatically by the client. - clif_clearchar_delay(tick+3000,&md->bl,0); mob_deleteslave(md); md->last_deadtime=tick; map_freeblock_unlock(); + if(pcdb_checkid(md->vd->class_)) //Player mobs are not removed automatically by the client. + if(md->nd) + return 1; // Let the dead body stay there.. we have something to do with it :D + else + clif_clearchar_delay(tick+3000,&md->bl,0); + if(!md->spawn) //Tell status_damage to remove it from memory. - return 5; + return 5; // Note: Actually, it's 4. Oh well... mob_setdelayspawn(md); //Set respawning. return 3; //Remove from map. diff --git a/src/map/script.c b/src/map/script.c index 932252cde..181b50084 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -430,6 +430,7 @@ int buildin_mobstop(struct script_state *st); int buildin_mobassist(struct script_state *st); int buildin_mobtalk(struct script_state *st); int buildin_mobemote(struct script_state *st); +int buildin_mobdeadsit(struct script_state *st); int buildin_mobattach(struct script_state *st); // <--- [zBuffer] List of mob control commands int buildin_sleep(struct script_state *st); @@ -770,6 +771,7 @@ struct { {buildin_mobassist,"mobassist","i*"}, {buildin_mobtalk,"mobtalk","is"}, {buildin_mobemote,"mobemote","ii"}, + {buildin_mobdeadsit,"mobdeadsit","ii"}, {buildin_mobattach,"mobattach","i*"}, // <--- [zBuffer] List of mob control commands {buildin_sleep,"sleep","i"}, @@ -10762,6 +10764,25 @@ int buildin_mobemote(struct script_state *st) { return 0; } +int buildin_mobdeadsit(struct script_state *st){ + int id, action; + struct mob_data *md = NULL; + id = conv_num(st, & (st->stack->stack_data[st->start+2])); + action = conv_num(st, & (st->stack->stack_data[st->start+3])); + if((md = (struct mob_data *)map_id2bl(id)) && md->bl.type == BL_MOB){ + if(action > -1 && action < 3){ + md->vd->dead_sit = action; + } else { + ShowError("buildin_mobdeadsit: Unrecognized action.\n"); + report_src(st); + } + } else { + ShowError("buildin_mobdeadsit: Target is not a monster.\n"); + report_src(st); + } + return 0; +} + int buildin_mobattach(struct script_state *st){ int id; struct mob_data *md = NULL; |