From 29b2c804497bdedc136b00b75493c823838a7229 Mon Sep 17 00:00:00 2001 From: NoFantasy Date: Fri, 12 Mar 2010 17:31:44 +0100 Subject: [PATCH] [9577] Implement SCRIPT_COMMAND_DESPAWN_SELF (self = creature in this context) Signed-off-by: NoFantasy --- src/game/Map.cpp | 21 +++++++++++++++++++++ src/game/ObjectMgr.cpp | 5 +++++ src/game/World.h | 1 + src/shared/revision_nr.h | 2 +- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 97d849a30..a1e5a846a 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -3506,6 +3506,27 @@ void Map::ScriptsProcess() break; } + case SCRIPT_COMMAND_DESPAWN_SELF: + { + if (!target && !source) + { + sLog.outError("SCRIPT_COMMAND_DESPAWN_SELF call for NULL object."); + break; + } + + // only creature + if ((!target || target->GetTypeId() != TYPEID_UNIT) && (!source || source->GetTypeId() != TYPEID_UNIT)) + { + sLog.outError("SCRIPT_COMMAND_DESPAWN_SELF call for non-creature (TypeIdSource: %u)(TypeIdTarget: %u), skipping.", source ? source->GetTypeId() : 0, target ? target->GetTypeId() : 0); + break; + } + + Creature* pCreature = target && target->GetTypeId() == TYPEID_UNIT ? (Creature*)target : (Creature*)source; + + pCreature->ForcedDespawn(step.script->datalong); + + break; + } default: sLog.outError("Unknown script command %u called.",step.script->command); break; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 04981f0fb..b6997b746 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4386,6 +4386,11 @@ void ObjectMgr::LoadScripts(ScriptMapMap& scripts, char const* tablename) } break; } + case SCRIPT_COMMAND_DESPAWN_SELF: + { + // for later, we might consider despawn by database guid, and define in datalong2 as option to despawn self. + break; + } } if (scripts.find(tmp.id) == scripts.end()) diff --git a/src/game/World.h b/src/game/World.h index 7547ddb6e..3c201437c 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -370,6 +370,7 @@ enum RealmZone #define SCRIPT_COMMAND_CAST_SPELL 15 // source/target cast spell at target/source (script->datalong2: 0: s->t 1: s->s 2: t->t 3: t->s #define SCRIPT_COMMAND_PLAY_SOUND 16 // source = any object, target=any/player, datalong (sound_id), datalong2 (bitmask: 0/1=anyone/target, 0/2=with distance dependent, so 1|2 = 3 is target with distance dependent) #define SCRIPT_COMMAND_CREATE_ITEM 17 // source or target must be player, datalong = item entry, datalong2 = amount +#define SCRIPT_COMMAND_DESPAWN_SELF 18 // source or target must be creature, datalong = despawn delay /// Storage class for commands issued for delayed execution struct CliCommandHolder diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ffcd3d8fa..6309ed85d 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9576" + #define REVISION_NR "9577" #endif // __REVISION_NR_H__