From 1300e71f7b19b820dae2a984c9f59ac32c13d6c7 Mon Sep 17 00:00:00 2001 From: Lance Date: Wed, 7 Jun 2006 02:51:50 +0000 Subject: * [Improved]: - mob_dead not to remove script controlled monsters with player sprites. (can be removed later using removemob command, it can be resurrected too :D) * [Added]: - buildin_mobdeadsit :D git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@7024 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 4 ++++ src/map/mob.c | 10 +++++++--- src/map/script.c | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index aa6bee75e..5174a1165 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,10 @@ 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/06/07 + * [Improved]: + - mob_dead not to remove script controlled monsters with player sprites. + [Added]: + - buildin_mobdeadsit :D [Lance] * [Fixed]: - temp++ gets issued before if(mvp_damage<(unsigned int)md->dmglog[i].dmg) in mob_damage. Thanks to seahorsix. [Lance] 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; -- cgit v1.2.3-70-g09d2