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
1075{
1076 if (gender != GENDER_NONE) // not in expected gender
1077 if (!player || gender != player->getGender())
1078 return false;
1079
1080 if (raceMask) // not in expected race
1081 if (!player || !(raceMask & player->getRaceMask()))
1082 return false;
1083
1084 if (areaId) // not in expected zone
1085 if (newZone != areaId && newArea != areaId)
1086 return false;
1087
1088 if (questStart) // not in expected required quest state
1089 if (!player || (((1 << player->GetQuestStatus(questStart)) & questStartStatus) == 0))
1090 return false;
1091
1092 if (questEnd) // not in expected forbidden quest state
1093 if (!player || (((1 << player->GetQuestStatus(questEnd)) & questEndStatus) == 0))
1094 return false;
1095
1096 if (auraSpell) // not have expected aura
1097 if (!player || (auraSpell > 0 && !player->HasAura(auraSpell)) || (auraSpell < 0 && player->HasAura(-auraSpell)))
1098 return false;
1099
1100 // Extra conditions -- leaving the possibility add extra conditions...
1101 switch (spellId)
1102 {
1103 case 58600: // No fly Zone - Dalaran
1104 {
1105 if (!player)
1106 return false;
1107
1108 AreaTableEntry const* pArea = sAreaTableStore.LookupEntry(player->GetAreaId());
1109 if (!(pArea && pArea->flags & AREA_FLAG_NO_FLY_ZONE))
1110 return false;
1111 if (!player->HasIncreaseMountedFlightSpeedAura() && !player->HasFlyAura())
1112 return false;
1113 // Xinef: Underbelly elixir
1114 if (player->GetPositionZ() < 637.0f && player->HasTransformAura())
1115 return false;
1116 break;
1117 }
1118 case 58730: // No fly Zone - Wintergrasp
1119 {
1120 if (!player)
1121 return false;
1122
1123 Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId());
1124 if (!Bf || Bf->CanFlyIn() || (!player->HasIncreaseMountedFlightSpeedAura() && !player->HasFlyAura()))
1125 return false;
1126 break;
1127 }
1128 // xinef: northrend flying mounts
1129 // xinef: NE wisp and spectral gryphon
1130 case 55164:
1131 case 55173:
1132 {
1133 Battlefield* Bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId());
1134 return !Bf || Bf->CanFlyIn();
1135 }
1136 case 57940: // Essence of Wintergrasp OUTSIDE
1137 case 58045: // Essence of Wintergrasp INSIDE
1138 {
1139 if (!player)
1140 return false;
1141
1142 if (sWorld->getIntConfig(CONFIG_WINTERGRASP_ENABLE) != 1)
1143 return false;
1144
1145 Battlefield* Bf = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
1146 if (!Bf || Bf->IsWarTime())
1147 return false;
1148 if (!sWorld->getBoolConfig(CONFIG_WINTERGRASP_ESSENCE_BOTH_FACTIONS) && player->GetTeamId() != Bf->GetDefenderTeam())
1149 return false;
1150 break;
1151 }
1152 case 74411: // Battleground - Dampening
1153 {
1154 if (!player)
1155 return false;
1156
1157 if (Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId()))
1158 return bf->IsWarTime();
1159 break;
1160 }
1161 case 68719: // Oil Refinery - Isle of Conquest.
1162 case 68720: // Quarry - Isle of Conquest.
1163 {
1164 if (!player)
1165 return false;
1166
1167 Battleground* bg = player->GetBattleground();
1168 if (!bg || bg->GetBgTypeID(true) != BATTLEGROUND_IC)
1169 return false;
1170
1171 uint8 nodeType = spellId == 68719 ? NODE_TYPE_REFINERY : NODE_TYPE_QUARRY;
1172 uint8 nodeState = player->GetTeamId() == TEAM_ALLIANCE ? NODE_STATE_CONTROLLED_A : NODE_STATE_CONTROLLED_H;
1173
1174 return bg->ToBattlegroundIC()->GetNodeState(nodeType) == nodeState;
1175 }
1176 case 56618: // Horde Controls Factory Phase Shift
1177 case 56617: // Alliance Controls Factory Phase Shift
1178 {
1179 if (!player)
1180 return false;
1181
1182 Battlefield* bf = sBattlefieldMgr->GetBattlefieldToZoneId(player->GetZoneId());
1183
1184 if (!bf || bf->GetTypeId() != BATTLEFIELD_WG)
1185 return false;
1186
1187 // team that controls the workshop in the specified area
1188 uint32 team = bf->GetData(newArea);
1189
1190 if (team == TEAM_HORDE)
1191 return spellId == 56618;
1192 else if (team == TEAM_ALLIANCE)
1193 return spellId == 56617;
1194 else
1195 return false;
1196 break;
1197 }
1198 // Hellscream's Warsong
1199 case 73816:
1200 case 73818:
1201 case 73819:
1202 case 73820:
1203 case 73821:
1204 case 73822:
1205 // Strength of Wrynn
1206 case 73762:
1207 case 73824:
1208 case 73825:
1209 case 73826:
1210 case 73827:
1211 case 73828:
1212 if (player)
1213 if (InstanceScript* s = const_cast<Player*>(player)->GetInstanceScript())
1214 return s->GetData(251 /*DATA_BUFF_AVAILABLE*/) != 0;
1215 return false;
1216 break;
1217 }
1218
1219 return true;
1220}
#define sBattlefieldMgr
Definition BattlefieldMgr.h:79
@ 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:3748
@ TEAM_ALLIANCE
Definition SharedDefines.h:748
@ TEAM_HORDE
Definition SharedDefines.h:749
@ CONFIG_WINTERGRASP_ENABLE
Definition WorldConfig.h:292
@ CONFIG_WINTERGRASP_ESSENCE_BOTH_FACTIONS
Definition WorldConfig.h:342
Definition Battlefield.h:196
uint32 GetData(uint32 dataId) const override
Definition Battlefield.h:262
bool IsWarTime() const
Return true if battle is started, false if battle is not started.
Definition Battlefield.h:239
TeamId GetDefenderTeam() const
Definition Battlefield.h:267
uint32 GetTypeId() const
Definition Battlefield.h:233
bool CanFlyIn() const
Return if we can use mount in battlefield.
Definition Battlefield.h:336
uint32 GetNodeState(uint8 nodeType) const
Definition BattlegroundIC.h:923
Definition Battleground.h:304
BattlegroundIC * ToBattlegroundIC()
Definition Battleground.h:609
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:330
Definition InstanceScript.h:143
Definition Player.h:1086
#define sWorld
Definition World.h:337
Definition DBCStructure.h:519
uint32 flags
Definition DBCStructure.h:524
uint32 questEnd
Definition SpellMgr.h:530
uint32 raceMask
Definition SpellMgr.h:532
uint32 questStartStatus
Definition SpellMgr.h:534
uint32 spellId
Definition SpellMgr.h:527
uint32 questEndStatus
Definition SpellMgr.h:535
int32 auraSpell
Definition SpellMgr.h:531
Gender gender
Definition SpellMgr.h:533
uint32 areaId
Definition SpellMgr.h:528
uint32 questStart
Definition SpellMgr.h:529

References AREA_FLAG_NO_FLY_ZONE, areaId, auraSpell, BATTLEFIELD_BATTLEID_WG, BATTLEFIELD_WG, BATTLEGROUND_IC, Battlefield::CanFlyIn(), CONFIG_WINTERGRASP_ENABLE, CONFIG_WINTERGRASP_ESSENCE_BOTH_FACTIONS, 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: