AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellArea Struct Reference

#include "SpellMgr.h"

Public Member Functions

bool IsFitToRequirements (Player const *player, uint32 newZone, uint32 newArea) const
 

Public Attributes

uint32 spellId
 
uint32 areaId
 
uint32 questStart
 
uint32 questEnd
 
int32 auraSpell
 
uint32 raceMask
 
Gender gender
 
uint32 questStartStatus
 
uint32 questEndStatus
 
bool autocast
 

Detailed Description

Member Function Documentation

◆ IsFitToRequirements()

bool SpellArea::IsFitToRequirements ( Player const *  player,
uint32  newZone,
uint32  newArea 
) const
1033{
1034 if (gender != GENDER_NONE) // not in expected gender
1035 if (!player || gender != player->getGender())
1036 return false;
1037
1038 if (raceMask) // not in expected race
1039 if (!player || !(raceMask & player->getRaceMask()))
1040 return false;
1041
1042 if (areaId) // not in expected zone
1043 if (newZone != areaId && newArea != areaId)
1044 return false;
1045
1046 if (questStart) // not in expected required quest state
1047 if (!player || (((1 << player->GetQuestStatus(questStart)) & questStartStatus) == 0))
1048 return false;
1049
1050 if (questEnd) // not in expected forbidden quest state
1051 if (!player || (((1 << player->GetQuestStatus(questEnd)) & questEndStatus) == 0))
1052 return false;
1053
1054 if (auraSpell) // not have expected aura
1055 if (!player || (auraSpell > 0 && !player->HasAura(auraSpell)) || (auraSpell < 0 && player->HasAura(-auraSpell)))
1056 return false;
1057
1058 // Extra conditions -- leaving the possibility add extra conditions...
1059 switch (spellId)
1060 {
1061 case 58600: // No fly Zone - Dalaran
1062 {
1063 if (!player)
1064 return false;
1065
1066 AreaTableEntry const* pArea = sAreaTableStore.LookupEntry(player->GetAreaId());
1067 if (!(pArea && pArea->flags & AREA_FLAG_NO_FLY_ZONE))
1068 return false;
1069 if (!player->HasIncreaseMountedFlightSpeedAura() && !player->HasFlyAura())
1070 return false;
1071 // Xinef: Underbelly elixir
1072 if (player->GetPositionZ() < 637.0f && player->HasTransformAura())
1073 return false;
1074 break;
1075 }
1076 case 58730: // No fly Zone - Wintergrasp
1077 {
1078 if (!player)
1079 return false;
1080
1081 Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId());
1082 if (!Bf || Bf->CanFlyIn() || (!player->HasIncreaseMountedFlightSpeedAura() && !player->HasFlyAura()))
1083 return false;
1084 break;
1085 }
1086 // xinef: northrend flying mounts
1087 // xinef: NE wisp and spectral gryphon
1088 case 55164:
1089 case 55173:
1090 {
1091 Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId());
1092 return !Bf || Bf->CanFlyIn();
1093 }
1094 case 57940: // Essence of Wintergrasp OUTSIDE
1095 case 58045: // Essence of Wintergrasp INSIDE
1096 {
1097 if (!player)
1098 return false;
1099
1100 if (sWorld->getIntConfig(CONFIG_WINTERGRASP_ENABLE) != 1)
1101 return false;
1102
1103 Battlefield* Bf = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
1104 if (!Bf || player->GetTeamId() != Bf->GetDefenderTeam() || Bf->IsWarTime())
1105 return false;
1106 break;
1107 }
1108 case 74411: // Battleground - Dampening
1109 {
1110 if (!player)
1111 return false;
1112
1113 if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId()))
1114 return bf->IsWarTime();
1115 break;
1116 }
1117 case 68719: // Oil Refinery - Isle of Conquest.
1118 case 68720: // Quarry - Isle of Conquest.
1119 {
1120 if (!player)
1121 return false;
1122
1123 Battleground* bg = player->GetBattleground();
1124 if (!bg || bg->GetBgTypeID(true) != BATTLEGROUND_IC)
1125 return false;
1126
1127 uint8 nodeType = spellId == 68719 ? NODE_TYPE_REFINERY : NODE_TYPE_QUARRY;
1128 uint8 nodeState = player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H;
1129
1130 return bg->ToBattlegroundIC()->GetNodeState(nodeType) == nodeState;
1131 }
1132 case 56618: // Horde Controls Factory Phase Shift
1133 case 56617: // Alliance Controls Factory Phase Shift
1134 {
1135 if (!player)
1136 return false;
1137
1138 Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId());
1139
1140 if (!bf || bf->GetTypeId() != BATTLEFIELD_WG)
1141 return false;
1142
1143 // team that controls the workshop in the specified area
1144 uint32 team = bf->GetData(newArea);
1145
1146 if (team == TEAM_HORDE)
1147 return spellId == 56618;
1148 else if (team == TEAM_ALLIANCE)
1149 return spellId == 56617;
1150 else
1151 return false;
1152 break;
1153 }
1154 // Hellscream's Warsong
1155 case 73816:
1156 case 73818:
1157 case 73819:
1158 case 73820:
1159 case 73821:
1160 case 73822:
1161 // Strength of Wrynn
1162 case 73762:
1163 case 73824:
1164 case 73825:
1165 case 73826:
1166 case 73827:
1167 case 73828:
1168 if (player)
1169 if (InstanceScript* s = const_cast<Player*>(player)->GetInstanceScript())
1170 return s->GetData(251 /*DATA_BUFF_AVAILABLE*/) != 0;
1171 return false;
1172 break;
1173 }
1174
1175 return true;
1176}
#define sBattlefieldMgr
Definition BattlefieldMgr.h:76
@ BATTLEFIELD_WG
Definition Battlefield.h:30
@ BATTLEFIELD_BATTLEID_WG
Definition Battlefield.h:36
@ NODE_TYPE_REFINERY
Definition BattlegroundIC.h:759
@ NODE_TYPE_QUARRY
Definition BattlegroundIC.h:760
@ NODE_STATE_CONTROLLED_A
Definition BattlegroundIC.h:777
@ NODE_STATE_CONTROLLED_H
Definition BattlegroundIC.h:778
@ AREA_FLAG_NO_FLY_ZONE
Definition DBCEnums.h:262
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
@ GENDER_NONE
Definition SharedDefines.h:63
@ BATTLEGROUND_IC
Definition SharedDefines.h:3750
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ TEAM_HORDE
Definition SharedDefines.h:749
@ CONFIG_WINTERGRASP_ENABLE
Definition WorldConfig.h:284
Definition Battlefield.h:208
uint32 GetData(uint32 dataId) const override
Definition Battlefield.h:274
bool IsWarTime() const
Return true if battle is started, false if battle is not started.
Definition Battlefield.h:251
TeamId GetDefenderTeam() const
Definition Battlefield.h:279
uint32 GetTypeId() const
Definition Battlefield.h:245
bool CanFlyIn() const
Return if we can use mount in battlefield.
Definition Battlefield.h:343
uint32 GetNodeState(uint8 nodeType) const
Definition BattlegroundIC.h:920
Definition Battleground.h:294
BattlegroundIC * ToBattlegroundIC()
Definition Battleground.h:603
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:320
Definition InstanceScript.h:143
Definition Player.h:1084
#define sWorld
Definition World.h:316
Definition DBCStructure.h:519
uint32 flags
Definition DBCStructure.h:524
uint32 questEnd
Definition SpellMgr.h:521
uint32 raceMask
Definition SpellMgr.h:523
uint32 questStartStatus
Definition SpellMgr.h:525
uint32 spellId
Definition SpellMgr.h:518
uint32 questEndStatus
Definition SpellMgr.h:526
int32 auraSpell
Definition SpellMgr.h:522
Gender gender
Definition SpellMgr.h:524
uint32 areaId
Definition SpellMgr.h:519
uint32 questStart
Definition SpellMgr.h:520

References AREA_FLAG_NO_FLY_ZONE, areaId, auraSpell, BATTLEFIELD_BATTLEID_WG, BATTLEFIELD_WG, BATTLEGROUND_IC, Battlefield::CanFlyIn(), CONFIG_WINTERGRASP_ENABLE, AreaTableEntry::flags, gender, GENDER_NONE, WorldObject::GetAreaId(), Player::GetBattleground(), Battleground::GetBgTypeID(), Battlefield::GetData(), Battlefield::GetDefenderTeam(), Unit::getGender(), BattlegroundIC::GetNodeState(), Position::GetPositionZ(), Player::GetQuestStatus(), Unit::getRaceMask(), Player::GetTeamId(), Battlefield::GetTypeId(), WorldObject::GetZoneId(), Unit::HasAura(), Unit::HasFlyAura(), Unit::HasIncreaseMountedFlightSpeedAura(), Unit::HasTransformAura(), Battlefield::IsWarTime(), NODE_STATE_CONTROLLED_A, NODE_STATE_CONTROLLED_H, NODE_TYPE_QUARRY, NODE_TYPE_REFINERY, questEnd, questEndStatus, questStart, questStartStatus, raceMask, sAreaTableStore, sBattlefieldMgr, spellId, sWorld, TEAM_ALLIANCE, TEAM_HORDE, and Battleground::ToBattlegroundIC().

Member Data Documentation

◆ areaId

uint32 SpellArea::areaId

Referenced by IsFitToRequirements().

◆ auraSpell

int32 SpellArea::auraSpell

Referenced by IsFitToRequirements().

◆ autocast

bool SpellArea::autocast

◆ gender

Gender SpellArea::gender

Referenced by IsFitToRequirements().

◆ questEnd

uint32 SpellArea::questEnd

Referenced by IsFitToRequirements().

◆ questEndStatus

uint32 SpellArea::questEndStatus

Referenced by IsFitToRequirements().

◆ questStart

uint32 SpellArea::questStart

Referenced by IsFitToRequirements().

◆ questStartStatus

uint32 SpellArea::questStartStatus

Referenced by IsFitToRequirements().

◆ raceMask

uint32 SpellArea::raceMask

Referenced by IsFitToRequirements().

◆ spellId

uint32 SpellArea::spellId

The documentation for this struct was generated from the following files: