aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Miscellaneous/CommonHelpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Miscellaneous/CommonHelpers.cpp')
-rw-r--r--src/server/game/Miscellaneous/CommonHelpers.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/server/game/Miscellaneous/CommonHelpers.cpp b/src/server/game/Miscellaneous/CommonHelpers.cpp
new file mode 100644
index 00000000000..6dc2adc6fb3
--- /dev/null
+++ b/src/server/game/Miscellaneous/CommonHelpers.cpp
@@ -0,0 +1,96 @@
+/*
+ * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "CommonHelpers.h"
+#include "Common.h"
+#include "Item.h"
+#include "ItemTemplate.h"
+#include "Player.h"
+#include "SharedDefines.h"
+
+uint8 Trinity::Helpers::Entity::GetPlayerSpecialization(Player const* who)
+{
+ if (!who)
+ return 0;
+
+ uint32 tabId = who->GetPrimaryTalentTree();
+ TalentTabEntry const* tabEntry = sTalentTabStore.LookupEntry(tabId);
+ if (!tabEntry)
+ return 0;
+
+ return tabEntry->OrderIndex;
+}
+
+bool Trinity::Helpers::Entity::IsPlayerHealer(Player const* who)
+{
+ if (!who)
+ return false;
+
+ switch (who->GetClass())
+ {
+ case CLASS_WARRIOR:
+ case CLASS_HUNTER:
+ case CLASS_ROGUE:
+ case CLASS_DEATH_KNIGHT:
+ case CLASS_MAGE:
+ case CLASS_WARLOCK:
+ default:
+ return false;
+ case CLASS_PALADIN:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_PALADIN_HOLY);
+ case CLASS_PRIEST:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) != SPEC_PRIEST_SHADOW);
+ case CLASS_SHAMAN:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_SHAMAN_RESTORATION);
+ case CLASS_DRUID:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_DRUID_RESTORATION);
+ }
+}
+
+bool Trinity::Helpers::Entity::IsPlayerRangedAttacker(Player const* who)
+{
+ if (!who)
+ return false;
+
+ switch (who->GetClass())
+ {
+ case CLASS_WARRIOR:
+ case CLASS_PALADIN:
+ case CLASS_ROGUE:
+ case CLASS_DEATH_KNIGHT:
+ default:
+ return false;
+ case CLASS_MAGE:
+ case CLASS_WARLOCK:
+ return true;
+ case CLASS_HUNTER:
+ {
+ // check if we have a ranged weapon equipped
+ Item const* rangedSlot = who->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_RANGED);
+ if (ItemTemplate const* rangedTemplate = rangedSlot ? rangedSlot->GetTemplate() : nullptr)
+ if ((1 << rangedTemplate->GetSubClass()) & ITEM_SUBCLASS_MASK_WEAPON_RANGED)
+ return true;
+ return false;
+ }
+ case CLASS_PRIEST:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_PRIEST_SHADOW);
+ case CLASS_SHAMAN:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_SHAMAN_ELEMENTAL);
+ case CLASS_DRUID:
+ return (Trinity::Helpers::Entity::GetPlayerSpecialization(who) == SPEC_DRUID_BALANCE);
+ }
+}