aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp180
1 files changed, 89 insertions, 91 deletions
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 872be042074..0dfb7181fef 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -33,15 +33,18 @@ EndScriptData */
#include "Player.h"
#include "Pet.h"
-struct NpcFlagText
+template<typename E, typename T = char const*>
+struct EnumName
{
- uint32 flag;
- int32 text;
+ E Value;
+ T Name;
};
+#define CREATE_NAMED_ENUM(VALUE) { VALUE, STRINGIZE(VALUE) }
+
#define NPCFLAG_COUNT 24
-NpcFlagText const npcFlagTexts[NPCFLAG_COUNT] =
+EnumName<NPCFlags, int32> const npcFlagTexts[NPCFLAG_COUNT] =
{
{ UNIT_NPC_FLAG_AUCTIONEER, LANG_NPCINFO_AUCTIONEER },
{ UNIT_NPC_FLAG_BANKER, LANG_NPCINFO_BANKER },
@@ -69,89 +72,76 @@ NpcFlagText const npcFlagTexts[NPCFLAG_COUNT] =
{ UNIT_NPC_FLAG_VENDOR_REAGENT, LANG_NPCINFO_VENDOR_REAGENT }
};
-struct MechanicImmune
-{
- uint32 flag;
- char const* text;
-};
-
-MechanicImmune const mechanicImmunes[MAX_MECHANIC] =
-{
- { MECHANIC_NONE , "MECHANIC_NONE" },
- { MECHANIC_CHARM , "MECHANIC_CHARM" },
- { MECHANIC_DISORIENTED , "MECHANIC_DISORIENTED" },
- { MECHANIC_DISARM , "MECHANIC_DISARM" },
- { MECHANIC_DISTRACT , "MECHANIC_DISTRACT" },
- { MECHANIC_FEAR , "MECHANIC_FEAR" },
- { MECHANIC_GRIP , "MECHANIC_GRIP" },
- { MECHANIC_ROOT , "MECHANIC_ROOT" },
- { MECHANIC_SLOW_ATTACK , "MECHANIC_SLOW_ATTACK" },
- { MECHANIC_SILENCE , "MECHANIC_SILENCE" },
- { MECHANIC_SLEEP , "MECHANIC_SLEEP" },
- { MECHANIC_SNARE , "MECHANIC_SNARE" },
- { MECHANIC_STUN , "MECHANIC_STUN" },
- { MECHANIC_FREEZE , "MECHANIC_FREEZE" },
- { MECHANIC_KNOCKOUT , "MECHANIC_KNOCKOUT" },
- { MECHANIC_BLEED , "MECHANIC_BLEED" },
- { MECHANIC_BANDAGE , "MECHANIC_BANDAGE" },
- { MECHANIC_POLYMORPH , "MECHANIC_POLYMORPH" },
- { MECHANIC_BANISH , "MECHANIC_BANISH" },
- { MECHANIC_SHIELD , "MECHANIC_SHIELD" },
- { MECHANIC_SHACKLE , "MECHANIC_SHACKLE" },
- { MECHANIC_MOUNT , "MECHANIC_MOUNT" },
- { MECHANIC_INFECTED , "MECHANIC_INFECTED" },
- { MECHANIC_TURN , "MECHANIC_TURN" },
- { MECHANIC_HORROR , "MECHANIC_HORROR" },
- { MECHANIC_INVULNERABILITY , "MECHANIC_INVULNERABILITY" },
- { MECHANIC_INTERRUPT , "MECHANIC_INTERRUPT" },
- { MECHANIC_DAZE , "MECHANIC_DAZE" },
- { MECHANIC_DISCOVERY , "MECHANIC_DISCOVERY" },
- { MECHANIC_IMMUNE_SHIELD , "MECHANIC_IMMUNE_SHIELD" },
- { MECHANIC_SAPPED , "MECHANIC_SAPPED" },
- { MECHANIC_ENRAGED , "MECHANIC_ENRAGED" }
-};
-
-
-struct UnitFlag
+EnumName<Mechanics> const mechanicImmunes[MAX_MECHANIC] =
{
- uint32 flag;
- char const* text;
+ CREATE_NAMED_ENUM(MECHANIC_NONE),
+ CREATE_NAMED_ENUM(MECHANIC_CHARM),
+ CREATE_NAMED_ENUM(MECHANIC_DISORIENTED),
+ CREATE_NAMED_ENUM(MECHANIC_DISARM),
+ CREATE_NAMED_ENUM(MECHANIC_DISTRACT),
+ CREATE_NAMED_ENUM(MECHANIC_FEAR),
+ CREATE_NAMED_ENUM(MECHANIC_GRIP),
+ CREATE_NAMED_ENUM(MECHANIC_ROOT),
+ CREATE_NAMED_ENUM(MECHANIC_SLOW_ATTACK),
+ CREATE_NAMED_ENUM(MECHANIC_SILENCE),
+ CREATE_NAMED_ENUM(MECHANIC_SLEEP),
+ CREATE_NAMED_ENUM(MECHANIC_SNARE),
+ CREATE_NAMED_ENUM(MECHANIC_STUN),
+ CREATE_NAMED_ENUM(MECHANIC_FREEZE),
+ CREATE_NAMED_ENUM(MECHANIC_KNOCKOUT),
+ CREATE_NAMED_ENUM(MECHANIC_BLEED),
+ CREATE_NAMED_ENUM(MECHANIC_BANDAGE),
+ CREATE_NAMED_ENUM(MECHANIC_POLYMORPH),
+ CREATE_NAMED_ENUM(MECHANIC_BANISH),
+ CREATE_NAMED_ENUM(MECHANIC_SHIELD),
+ CREATE_NAMED_ENUM(MECHANIC_SHACKLE),
+ CREATE_NAMED_ENUM(MECHANIC_MOUNT),
+ CREATE_NAMED_ENUM(MECHANIC_INFECTED),
+ CREATE_NAMED_ENUM(MECHANIC_TURN),
+ CREATE_NAMED_ENUM(MECHANIC_HORROR),
+ CREATE_NAMED_ENUM(MECHANIC_INVULNERABILITY),
+ CREATE_NAMED_ENUM(MECHANIC_INTERRUPT),
+ CREATE_NAMED_ENUM(MECHANIC_DAZE),
+ CREATE_NAMED_ENUM(MECHANIC_DISCOVERY),
+ CREATE_NAMED_ENUM(MECHANIC_IMMUNE_SHIELD),
+ CREATE_NAMED_ENUM(MECHANIC_SAPPED),
+ CREATE_NAMED_ENUM(MECHANIC_ENRAGED)
};
-UnitFlag const unitFlags[MAX_UNIT_FLAGS] =
+EnumName<UnitFlags> const unitFlags[MAX_UNIT_FLAGS] =
{
- { UNIT_FLAG_SERVER_CONTROLLED , "UNIT_FLAG_SERVER_CONTROLLED" },
- { UNIT_FLAG_NON_ATTACKABLE , "UNIT_FLAG_NON_ATTACKABLE" },
- { UNIT_FLAG_DISABLE_MOVE , "UNIT_FLAG_DISABLE_MOVE" },
- { UNIT_FLAG_PVP_ATTACKABLE , "UNIT_FLAG_PVP_ATTACKABLE" },
- { UNIT_FLAG_RENAME , "UNIT_FLAG_RENAME" },
- { UNIT_FLAG_PREPARATION , "UNIT_FLAG_PREPARATION" },
- { UNIT_FLAG_UNK_6 , "UNIT_FLAG_UNK_6" },
- { UNIT_FLAG_NOT_ATTACKABLE_1 , "UNIT_FLAG_NOT_ATTACKABLE_1" },
- { UNIT_FLAG_IMMUNE_TO_PC , "UNIT_FLAG_IMMUNE_TO_PC" },
- { UNIT_FLAG_IMMUNE_TO_NPC , "UNIT_FLAG_IMMUNE_TO_NPC" },
- { UNIT_FLAG_LOOTING , "UNIT_FLAG_LOOTING" },
- { UNIT_FLAG_PET_IN_COMBAT , "UNIT_FLAG_PET_IN_COMBAT" },
- { UNIT_FLAG_PVP , "UNIT_FLAG_PVP" },
- { UNIT_FLAG_SILENCED , "UNIT_FLAG_SILENCED" },
- { UNIT_FLAG_UNK_14 , "UNIT_FLAG_UNK_14" },
- { UNIT_FLAG_UNK_15 , "UNIT_FLAG_UNK_15" },
- { UNIT_FLAG_UNK_16 , "UNIT_FLAG_UNK_16" },
- { UNIT_FLAG_PACIFIED , "UNIT_FLAG_PACIFIED" },
- { UNIT_FLAG_STUNNED , "UNIT_FLAG_STUNNED" },
- { UNIT_FLAG_IN_COMBAT , "UNIT_FLAG_IN_COMBAT" },
- { UNIT_FLAG_TAXI_FLIGHT , "UNIT_FLAG_TAXI_FLIGHT" },
- { UNIT_FLAG_DISARMED , "UNIT_FLAG_DISARMED" },
- { UNIT_FLAG_CONFUSED , "UNIT_FLAG_CONFUSED" },
- { UNIT_FLAG_FLEEING , "UNIT_FLAG_FLEEING" },
- { UNIT_FLAG_PLAYER_CONTROLLED , "UNIT_FLAG_PLAYER_CONTROLLED" },
- { UNIT_FLAG_NOT_SELECTABLE , "UNIT_FLAG_NOT_SELECTABLE" },
- { UNIT_FLAG_SKINNABLE , "UNIT_FLAG_SKINNABLE" },
- { UNIT_FLAG_MOUNT , "UNIT_FLAG_MOUNT" },
- { UNIT_FLAG_UNK_28 , "UNIT_FLAG_UNK_28" },
- { UNIT_FLAG_UNK_29 , "UNIT_FLAG_UNK_29" },
- { UNIT_FLAG_SHEATHE , "UNIT_FLAG_SHEATHE" },
- { UNIT_FLAG_UNK_31 , "UNIT_FLAG_UNK_31" }
+ CREATE_NAMED_ENUM(UNIT_FLAG_SERVER_CONTROLLED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_NON_ATTACKABLE),
+ CREATE_NAMED_ENUM(UNIT_FLAG_DISABLE_MOVE),
+ CREATE_NAMED_ENUM(UNIT_FLAG_PVP_ATTACKABLE),
+ CREATE_NAMED_ENUM(UNIT_FLAG_RENAME),
+ CREATE_NAMED_ENUM(UNIT_FLAG_PREPARATION),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_6),
+ CREATE_NAMED_ENUM(UNIT_FLAG_NOT_ATTACKABLE_1),
+ CREATE_NAMED_ENUM(UNIT_FLAG_IMMUNE_TO_PC),
+ CREATE_NAMED_ENUM(UNIT_FLAG_IMMUNE_TO_NPC),
+ CREATE_NAMED_ENUM(UNIT_FLAG_LOOTING),
+ CREATE_NAMED_ENUM(UNIT_FLAG_PET_IN_COMBAT),
+ CREATE_NAMED_ENUM(UNIT_FLAG_PVP),
+ CREATE_NAMED_ENUM(UNIT_FLAG_SILENCED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_14),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_15),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_16),
+ CREATE_NAMED_ENUM(UNIT_FLAG_PACIFIED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_STUNNED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_IN_COMBAT),
+ CREATE_NAMED_ENUM(UNIT_FLAG_TAXI_FLIGHT),
+ CREATE_NAMED_ENUM(UNIT_FLAG_DISARMED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_CONFUSED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_FLEEING),
+ CREATE_NAMED_ENUM(UNIT_FLAG_PLAYER_CONTROLLED),
+ CREATE_NAMED_ENUM(UNIT_FLAG_NOT_SELECTABLE),
+ CREATE_NAMED_ENUM(UNIT_FLAG_SKINNABLE),
+ CREATE_NAMED_ENUM(UNIT_FLAG_MOUNT),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_28),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_29),
+ CREATE_NAMED_ENUM(UNIT_FLAG_SHEATHE),
+ CREATE_NAMED_ENUM(UNIT_FLAG_UNK_31)
};
class npc_commandscript : public CommandScript
@@ -242,10 +232,15 @@ public:
char* team = strtok(NULL, " ");
int32 teamval = 0;
- if (team) { teamval = atoi(team); }
- if (teamval < 0) { teamval = 0; }
+ if (team)
+ teamval = atoi(team);
+
+ if (teamval < 0)
+ teamval = 0;
uint32 id = atoi(charID);
+ if (!sObjectMgr->GetCreatureTemplate(id))
+ return false;
Player* chr = handler->GetSession()->GetPlayer();
float x = chr->GetPositionX();
@@ -737,8 +732,8 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS));
for (uint8 i = 0; i < MAX_UNIT_FLAGS; ++i)
- if (target->GetUInt32Value(UNIT_FIELD_FLAGS) & unitFlags[i].flag)
- handler->PSendSysMessage(unitFlags[i].text, unitFlags[i].flag);
+ if (target->GetUInt32Value(UNIT_FIELD_FLAGS) & unitFlags[i].Value)
+ handler->PSendSysMessage("%s (0x%X)", unitFlags[i].Name, unitFlags[i].Value);
handler->PSendSysMessage(LANG_NPCINFO_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS_2), target->GetUInt32Value(UNIT_DYNAMIC_FLAGS), target->getFaction());
handler->PSendSysMessage(LANG_COMMAND_RAWPAWNTIMES, defRespawnDelayStr.c_str(), curRespawnDelayStr.c_str());
@@ -750,13 +745,13 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_AIINFO, target->GetAIName().c_str(), target->GetScriptName().c_str());
for (uint8 i = 0; i < NPCFLAG_COUNT; i++)
- if (npcflags & npcFlagTexts[i].flag)
- handler->PSendSysMessage(npcFlagTexts[i].text, npcFlagTexts[i].flag);
+ if (npcflags & npcFlagTexts[i].Value)
+ handler->PSendSysMessage(npcFlagTexts[i].Name);
handler->PSendSysMessage(LANG_NPCINFO_MECHANIC_IMMUNE, mechanicImmuneMask);
for (uint8 i = 0; i < MAX_MECHANIC; ++i)
- if ((mechanicImmuneMask << 1) & mechanicImmunes[i].flag)
- handler->PSendSysMessage(mechanicImmunes[i].text, mechanicImmunes[i].flag);
+ if ((mechanicImmuneMask << 1) & mechanicImmunes[i].Value)
+ handler->PSendSysMessage("%s (0x%X)", mechanicImmunes[i].Name, mechanicImmunes[i].Value);
return true;
}
@@ -1361,6 +1356,9 @@ public:
if (!id)
return false;
+ if (!sObjectMgr->GetCreatureTemplate(id))
+ return false;
+
chr->SummonCreature(id, *chr, TEMPSUMMON_CORPSE_DESPAWN, 120);
return true;