aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2013-08-05 20:00:08 +0100
committerNay <dnpd.dd@gmail.com>2013-08-05 20:00:08 +0100
commit8af6e6ca79643a2b0d576883a8015a0a9540612a (patch)
tree520e3c71073c80bb72798d92ffab04fb2b06af97 /src
parentccdba0859d07d962e159a830d7cc42f33698a2ca (diff)
parentf37d0495e116fb1f7ad164fdb5d667d1ae5f1d68 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Miscellaneous/Language.h4
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp109
2 files changed, 109 insertions, 4 deletions
diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h
index 0da63a61b43..772d5bcfb75 100644
--- a/src/server/game/Miscellaneous/Language.h
+++ b/src/server/game/Miscellaneous/Language.h
@@ -1083,7 +1083,9 @@ enum TrinityStrings
LANG_COMMAND_NO_OUTDOOR_PVP_FORUND = 5034,
LANG_CALL_FOR_HELP = 5035,
LANG_NPCINFO_EQUIPMENT = 5036,
- // Room for more Trinity strings 5037-9999
+ LANG_NPCINFO_MECHANIC_IMMUNE = 5037,
+ LANG_NPCINFO_UNIT_FIELD_FLAGS = 5038,
+ // Room for more Trinity strings 5039-9999
// Level requirement notifications
LANG_SAY_REQ = 6604,
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 939075690c9..82abd85f1d1 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -41,7 +41,7 @@ struct NpcFlagText
#define NPCFLAG_COUNT 24
-const NpcFlagText npcFlagTexts[NPCFLAG_COUNT] =
+NpcFlagText const npcFlagTexts[NPCFLAG_COUNT] =
{
{ UNIT_NPC_FLAG_AUCTIONEER, LANG_NPCINFO_AUCTIONEER },
{ UNIT_NPC_FLAG_BANKER, LANG_NPCINFO_BANKER },
@@ -69,6 +69,96 @@ const NpcFlagText npcFlagTexts[NPCFLAG_COUNT] =
{ UNIT_NPC_FLAG_VENDOR_REAGENT, LANG_NPCINFO_VENDOR_REAGENT }
};
+struct MechanicImmune
+{
+ uint32 flag;
+ char const* text;
+};
+
+#define MECHANIC_MAX 33
+
+MechanicImmune const mechanicImmunes[MECHANIC_MAX] =
+{
+ { 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" },
+ { MECHANIC_WOUNDED , "MECHANIC_WOUNDED" }
+};
+
+
+struct UnitFlag
+{
+ uint32 flag;
+ char const* text;
+};
+
+#define UNIT_FLAGS_MAX 33
+
+UnitFlag const unitFlags[MECHANIC_MAX] =
+{
+ { 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" }
+};
+
class npc_commandscript : public CommandScript
{
public:
@@ -630,12 +720,14 @@ public:
return false;
}
+ CreatureTemplate const* cInfo = target->GetCreatureTemplate();
+
uint32 faction = target->getFaction();
uint32 npcflags = target->GetUInt32Value(UNIT_NPC_FLAGS);
+ uint32 mechanicImmuneMask = cInfo->MechanicImmuneMask;
uint32 displayid = target->GetDisplayId();
uint32 nativeid = target->GetNativeDisplayId();
uint32 Entry = target->GetEntry();
- CreatureTemplate const* cInfo = target->GetCreatureTemplate();
int64 curRespawnDelay = target->GetRespawnTimeEx()-time(NULL);
if (curRespawnDelay < 0)
@@ -647,7 +739,13 @@ public:
handler->PSendSysMessage(LANG_NPCINFO_LEVEL, target->getLevel());
handler->PSendSysMessage(LANG_NPCINFO_EQUIPMENT, target->GetCurrentEquipmentId(), target->GetOriginalEquipmentId());
handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), target->GetMaxHealth(), target->GetHealth());
- handler->PSendSysMessage(LANG_NPCINFO_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS), target->GetUInt32Value(UNIT_FIELD_FLAGS_2), target->GetUInt32Value(UNIT_DYNAMIC_FLAGS), target->getFaction());
+
+ handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS));
+ for (uint8 i = 0; i < UNIT_FLAGS_MAX; ++i)
+ if (target->GetUInt32Value(UNIT_FIELD_FLAGS) & unitFlags[i].flag)
+ handler->PSendSysMessage(unitFlags[i].text, unitFlags[i].flag);
+
+ 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());
handler->PSendSysMessage(LANG_NPCINFO_LOOT, cInfo->lootid, cInfo->pickpocketLootId, cInfo->SkinLootId);
handler->PSendSysMessage(LANG_NPCINFO_DUNGEON_ID, target->GetInstanceId());
@@ -660,6 +758,11 @@ public:
if (npcflags & npcFlagTexts[i].flag)
handler->PSendSysMessage(npcFlagTexts[i].text, npcFlagTexts[i].flag);
+ handler->PSendSysMessage(LANG_NPCINFO_MECHANIC_IMMUNE, mechanicImmuneMask);
+ for (uint8 i = 0; i < MECHANIC_MAX; ++i)
+ if ((mechanicImmuneMask << 1) & mechanicImmunes[i].flag)
+ handler->PSendSysMessage(mechanicImmunes[i].text, mechanicImmunes[i].flag);
+
return true;
}