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

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: