Core/Areas: Update AreaFlags
Port From (https://github.com/TrinityCore/TrinityCore/commit/f8f1c3b4f0ca631e76101f8492b9688c6d2dca01)
This commit is contained in:
@@ -887,45 +887,69 @@ namespace Framework.Constants
|
|||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum AreaFlags
|
public enum AreaFlags : uint
|
||||||
{
|
{
|
||||||
Snow = 0x01, // Snow (Only Dun Morogh, Naxxramas, Razorfen Downs And Winterspring)
|
EmitBreathParticles = 0x01,
|
||||||
Unk1 = 0x02, // Razorfen Downs, Naxxramas And Acherus: The Ebon Hold (3.3.5a)
|
BreathParticlesOverrideParent = 0x02,
|
||||||
Unk2 = 0x04, // Only Used For Areas On Map 571 (Development Before)
|
OnMapDungeon = 0x04,
|
||||||
SlaveCapital = 0x08, // City And City Subzones
|
AllowTradeChannel = 0x08,
|
||||||
Unk3 = 0x10, // Can'T Find Common Meaning
|
EnemiesPvPFlagged = 0x10,
|
||||||
SlaveCapital2 = 0x20, // Slave Capital City Flag?
|
AllowResting = 0x20,
|
||||||
AllowDuels = 0x40, // Allow To Duel Here
|
AllowDueling = 0x40,
|
||||||
Arena = 0x80, // Arena, Both Instanced And World Arenas
|
FreeForAllPvP = 0x80,
|
||||||
Capital = 0x100, // Main Capital City Flag
|
LinkedChat = 0x100, // Set in cities
|
||||||
City = 0x200, // Only For One Zone Named "City" (Where It Located?)
|
LinkedChatSpecialArea = 0x200,
|
||||||
Outland = 0x400, // Expansion Zones? (Only Eye Of The Storm Not Have This Flag, But Have 0x4000 Flag)
|
ForceThisAreaWhenOnDynamicTransport = 0x400,
|
||||||
Sanctuary = 0x800, // Sanctuary Area (Pvp Disabled)
|
NoPvP = 0x800,
|
||||||
NeedFly = 0x1000, // Unknown
|
NoGhostOnRelease = 0x1000,
|
||||||
Unused1 = 0x2000, // Unused In 3.3.5a
|
SubZoneAmbientMultiplier = 0x2000,
|
||||||
Outland2 = 0x4000, // Expansion Zones? (Only Circle Of Blood Arena Not Have This Flag, But Have 0x400 Flag)
|
EnableFlightBoundsOnMap = 0x4000,
|
||||||
OutdoorPvp = 0x8000, // Pvp Objective Area? (Death'S Door Also Has This Flag Although It'S No Pvp Object Area)
|
PVPPOI = 0x8000,
|
||||||
ArenaInstance = 0x10000, // Used By Instanced Arenas Only
|
NoChatChannels = 0x10000,
|
||||||
Unused2 = 0x20000, // Unused In 3.3.5a
|
AreaNotInUse = 0x20000,
|
||||||
ContestedArea = 0x40000, // On Pvp Servers These Areas Are Considered Contested, Even Though The Zone It Is Contained In Is A Horde/Alliance Territory.
|
Contested = 0x40000,
|
||||||
Unk6 = 0x80000, // Valgarde And Acherus: The Ebon Hold
|
NoPlayerSummoning = 0x80000,
|
||||||
Lowlevel = 0x100000, // Used For Some Starting Areas With AreaLevel <= 15
|
NoDuelingIfTournamentRealm = 0x100000,
|
||||||
Town = 0x200000, // Small Towns With Inn
|
PlayersCallGuards = 0x200000,
|
||||||
RestZoneHorde = 0x400000, // Warsong Hold, Acherus: The Ebon Hold, New Agamand Inn, Vengeance Landing Inn, Sunreaver Pavilion (Something To Do With Team?)
|
HordeResting = 0x400000,
|
||||||
RestZoneAlliance = 0x800000, // Valgarde, Acherus: The Ebon Hold, Westguard Inn, Silver Covenant Pavilion (Something To Do With Team?)
|
AllianceResting = 0x800000,
|
||||||
Combat = 0x1000000, // "combat" area (Script_GetZonePVPInfo), used
|
CombatZone = 0x1000000,
|
||||||
Inside = 0x2000000, // Used For Determinating Spell Related Inside/Outside Questions In Map.Isoutdoors
|
ForceIndoors = 0x2000000,
|
||||||
Outside = 0x4000000, // Used For Determinating Spell Related Inside/Outside Questions In Map.Isoutdoors
|
ForceOutdoors = 0x4000000,
|
||||||
CanHearthAndResurrect = 0x8000000, // Can Hearth And Resurrect From Area
|
AllowHearthAndRessurectFromArea = 0x08000000,
|
||||||
NoFlyZone = 0x20000000, // Marks Zones Where You Cannot Fly
|
NoLocalDefenseChannel = 0x10000000,
|
||||||
Unk9 = 0x40000000,
|
OnlyEvaluateGhostBindOnce = 0x20000000,
|
||||||
|
IsSubzone = 0x40000000,
|
||||||
|
DontEvaluateGraveyardFromClient = 0x80000000
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum AreaFlags2
|
public enum AreaFlags2
|
||||||
{
|
{
|
||||||
DontShowSanctuary = 0x200, // Hides sanctuary status from zone text color (Script_GetZonePVPInfo)
|
ForceMicroDungeonArtMap = 0x01, // Ask Programmer
|
||||||
CanEnableWarMode = 0x1000, // Allows enabling war mode
|
UseSubzonePlayerLoot = 0x02,
|
||||||
|
AllowPetBattleDuelingEvenIfNoDuelingAllowed = 0x04,
|
||||||
|
UseMapTransferLocsForCemeteries = 0x08,
|
||||||
|
IsGarrison = 0x10,
|
||||||
|
UseSubzoneForChatChannel = 0x20,
|
||||||
|
DontRealmCoalesceChatChannel = 0x40,
|
||||||
|
NotExplorable = 0x80, // Don't assign area bit
|
||||||
|
DontUseParentMapForCemeteries = 0x100,
|
||||||
|
DontShowSanctuaryText = 0x200,
|
||||||
|
CrossFactionZoneChat = 0x400,
|
||||||
|
ForceNoResting = 0x800,
|
||||||
|
AllowWarModeToggle = 0x1000
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum AreaMountFlags
|
||||||
|
{
|
||||||
|
None = 0x0,
|
||||||
|
AllowGroundMounts = 0x1,
|
||||||
|
AllowFlyingMounts = 0x2,
|
||||||
|
AllowSurfaceSwimmingMounts = 0x4,
|
||||||
|
AllowUnderwaterSwimmingMounts = 0x8,
|
||||||
|
ClientEnforcesMount = 0x10
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ArtifactCategory
|
public enum ArtifactCategory
|
||||||
@@ -1702,14 +1726,6 @@ namespace Framework.Constants
|
|||||||
Weekly = 2
|
Weekly = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum AreaMountFlags
|
|
||||||
{
|
|
||||||
GroundAllowed = 0x1,
|
|
||||||
FlyingAllowed = 0x2,
|
|
||||||
FloatAllowed = 0x4,
|
|
||||||
UnderwaterAllowed = 0x8
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum ModifierTreeOperator
|
public enum ModifierTreeOperator
|
||||||
{
|
{
|
||||||
SingleTrue = 2,
|
SingleTrue = 2,
|
||||||
|
|||||||
@@ -1460,9 +1460,8 @@ namespace Game.Achievements
|
|||||||
{
|
{
|
||||||
uint zoneId = referencePlayer.GetAreaId();
|
uint zoneId = referencePlayer.GetAreaId();
|
||||||
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId);
|
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId);
|
||||||
if (areaEntry != null)
|
if (areaEntry != null && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone))
|
||||||
if (areaEntry.HasFlag(AreaFlags.Unk9))
|
zoneId = areaEntry.ParentAreaID;
|
||||||
zoneId = areaEntry.ParentAreaID;
|
|
||||||
if (zoneId != reqValue)
|
if (zoneId != reqValue)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
@@ -1473,9 +1472,8 @@ namespace Game.Achievements
|
|||||||
return false;
|
return false;
|
||||||
uint zoneId = refe.GetAreaId();
|
uint zoneId = refe.GetAreaId();
|
||||||
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId);
|
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(zoneId);
|
||||||
if (areaEntry != null)
|
if (areaEntry != null && areaEntry.GetFlags().HasFlag(AreaFlags.IsSubzone))
|
||||||
if (areaEntry.HasFlag(AreaFlags.Unk9))
|
zoneId = areaEntry.ParentAreaID;
|
||||||
zoneId = areaEntry.ParentAreaID;
|
|
||||||
if (zoneId != reqValue)
|
if (zoneId != reqValue)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -131,25 +131,14 @@ namespace Game.DataStorage
|
|||||||
public uint[] Flags = new uint[2];
|
public uint[] Flags = new uint[2];
|
||||||
public ushort[] LiquidTypeID = new ushort[4];
|
public ushort[] LiquidTypeID = new ushort[4];
|
||||||
|
|
||||||
|
public AreaFlags GetFlags() { return (AreaFlags)Flags[0]; }
|
||||||
|
public AreaFlags2 GetFlags2() { return (AreaFlags2)Flags[1]; }
|
||||||
|
public AreaMountFlags GetMountFlags() { return (AreaMountFlags)MountFlags; }
|
||||||
|
|
||||||
public bool IsSanctuary()
|
public bool IsSanctuary()
|
||||||
{
|
{
|
||||||
return HasFlag(AreaFlags.Sanctuary);
|
return GetFlags().HasFlag(AreaFlags.NoPvP);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsFlyable()
|
|
||||||
{
|
|
||||||
if (HasFlag(AreaFlags.Outland))
|
|
||||||
{
|
|
||||||
if (!HasFlag(AreaFlags.NoFlyZone))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool HasFlag(AreaFlags flag) { return Flags[0].HasAnyFlag((uint)flag); }
|
|
||||||
|
|
||||||
public bool HasFlag2(AreaFlags2 flag) { return Flags[1].HasAnyFlag((uint)flag); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class AreaTriggerRecord
|
public sealed class AreaTriggerRecord
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(newArea);
|
AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(newArea);
|
||||||
bool oldFFAPvPArea = pvpInfo.IsInFFAPvPArea;
|
bool oldFFAPvPArea = pvpInfo.IsInFFAPvPArea;
|
||||||
pvpInfo.IsInFFAPvPArea = area != null && area.HasFlag(AreaFlags.Arena);
|
pvpInfo.IsInFFAPvPArea = area != null && area.GetFlags().HasFlag(AreaFlags.FreeForAllPvP);
|
||||||
UpdatePvPState(true);
|
UpdatePvPState(true);
|
||||||
|
|
||||||
// check if we were in ffa arena and we left
|
// check if we were in ffa arena and we left
|
||||||
@@ -124,8 +124,8 @@ namespace Game.Entities
|
|||||||
else
|
else
|
||||||
RemovePvpFlag(UnitPVPStateFlags.Sanctuary);
|
RemovePvpFlag(UnitPVPStateFlags.Sanctuary);
|
||||||
|
|
||||||
AreaFlags areaRestFlag = (GetTeam() == Team.Alliance) ? AreaFlags.RestZoneAlliance : AreaFlags.RestZoneHorde;
|
AreaFlags areaRestFlag = (GetTeam() == Team.Alliance) ? AreaFlags.AllianceResting : AreaFlags.HordeResting;
|
||||||
if (area != null && area.HasFlag(areaRestFlag))
|
if (area != null && area.GetFlags().HasFlag(areaRestFlag))
|
||||||
_restMgr.SetRestFlag(RestFlag.FactionArea);
|
_restMgr.SetRestFlag(RestFlag.FactionArea);
|
||||||
else
|
else
|
||||||
_restMgr.RemoveRestFlag(RestFlag.FactionArea);
|
_restMgr.RemoveRestFlag(RestFlag.FactionArea);
|
||||||
@@ -181,7 +181,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
UpdateHostileAreaState(zone);
|
UpdateHostileAreaState(zone);
|
||||||
|
|
||||||
if (zone.HasFlag(AreaFlags.Capital)) // Is in a capital city
|
if (zone.GetFlags().HasFlag(AreaFlags.LinkedChat)) // Is in a capital city
|
||||||
{
|
{
|
||||||
if (!pvpInfo.IsInHostileArea || zone.IsSanctuary())
|
if (!pvpInfo.IsInHostileArea || zone.IsSanctuary())
|
||||||
_restMgr.SetRestFlag(RestFlag.City);
|
_restMgr.SetRestFlag(RestFlag.City);
|
||||||
@@ -226,17 +226,17 @@ namespace Game.Entities
|
|||||||
|
|
||||||
if (area.IsSanctuary()) // sanctuary and arena cannot be overriden
|
if (area.IsSanctuary()) // sanctuary and arena cannot be overriden
|
||||||
pvpInfo.IsInHostileArea = false;
|
pvpInfo.IsInHostileArea = false;
|
||||||
else if (area.HasFlag(AreaFlags.Arena))
|
else if (area.GetFlags().HasFlag(AreaFlags.FreeForAllPvP))
|
||||||
pvpInfo.IsInHostileArea = true;
|
pvpInfo.IsInHostileArea = true;
|
||||||
else if (overrideZonePvpType == ZonePVPTypeOverride.None)
|
else if (overrideZonePvpType == ZonePVPTypeOverride.None)
|
||||||
{
|
{
|
||||||
if (area != null)
|
if (area != null)
|
||||||
{
|
{
|
||||||
if (InBattleground() || area.HasFlag(AreaFlags.Combat) || (area.PvpCombatWorldStateID != -1 && Global.WorldStateMgr.GetValue(area.PvpCombatWorldStateID, GetMap()) != 0))
|
if (InBattleground() || area.GetFlags().HasFlag(AreaFlags.CombatZone) || (area.PvpCombatWorldStateID != -1 && Global.WorldStateMgr.GetValue(area.PvpCombatWorldStateID, GetMap()) != 0))
|
||||||
pvpInfo.IsInHostileArea = true;
|
pvpInfo.IsInHostileArea = true;
|
||||||
else if (IsWarModeLocalActive() || area.HasFlag(AreaFlags.Unk3))
|
else if (IsWarModeLocalActive() || area.GetFlags().HasFlag(AreaFlags.EnemiesPvPFlagged))
|
||||||
{
|
{
|
||||||
if (area.HasFlag(AreaFlags.ContestedArea))
|
if (area.GetFlags().HasFlag(AreaFlags.Contested))
|
||||||
pvpInfo.IsInHostileArea = IsWarModeLocalActive();
|
pvpInfo.IsInHostileArea = IsWarModeLocalActive();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -356,7 +356,7 @@ namespace Game.Entities
|
|||||||
if (area.IsSanctuary())
|
if (area.IsSanctuary())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (area.HasFlag(AreaFlags.Arena))
|
if (area.GetFlags().HasFlag(AreaFlags.FreeForAllPvP))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (Global.BattleFieldMgr.IsWorldPvpArea(area.Id))
|
if (Global.BattleFieldMgr.IsWorldPvpArea(area.Id))
|
||||||
|
|||||||
@@ -2738,10 +2738,10 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public bool CanJoinConstantChannelInZone(ChatChannelsRecord channel, AreaTableRecord zone)
|
public bool CanJoinConstantChannelInZone(ChatChannelsRecord channel, AreaTableRecord zone)
|
||||||
{
|
{
|
||||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.HasFlag(AreaFlags.ArenaInstance))
|
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.ZoneDep) && zone.GetFlags().HasFlag(AreaFlags.NoChatChannels))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.HasFlag(AreaFlags.Capital))
|
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly) && !zone.GetFlags().HasFlag(AreaFlags.AllowTradeChannel))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.GuildReq) && GetGuildId() != 0)
|
if (channel.Flags.HasAnyFlag(ChannelDBCFlags.GuildReq) && GetGuildId() != 0)
|
||||||
@@ -4200,7 +4200,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
bool shouldResurrect = false;
|
bool shouldResurrect = false;
|
||||||
// Such zones are considered unreachable as a ghost and the player must be automatically revived
|
// Such zones are considered unreachable as a ghost and the player must be automatically revived
|
||||||
if ((!IsAlive() && zone != null && zone.HasFlag(AreaFlags.NeedFly)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
|
if ((!IsAlive() && zone != null && zone.GetFlags().HasFlag(AreaFlags.NoGhostOnRelease)) || GetTransport() != null || GetPositionZ() < GetMap().GetMinHeight(GetPhaseShift(), GetPositionX(), GetPositionY()))
|
||||||
{
|
{
|
||||||
shouldResurrect = true;
|
shouldResurrect = true;
|
||||||
SpawnCorpseBones();
|
SpawnCorpseBones();
|
||||||
@@ -4787,7 +4787,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ((area.Flags[1] & (uint)AreaFlags2.CanEnableWarMode) != 0)
|
if (area.GetFlags2().HasFlag(AreaFlags2.AllowWarModeToggle))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
area = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID);
|
area = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID);
|
||||||
|
|||||||
@@ -782,13 +782,13 @@ namespace Game.Entities
|
|||||||
|
|
||||||
if (!mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.IgnoreRestrictions))
|
if (!mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.IgnoreRestrictions))
|
||||||
{
|
{
|
||||||
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Ground) && !mountFlags.HasAnyFlag(AreaMountFlags.GroundAllowed))
|
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Ground) && !mountFlags.HasFlag(AreaMountFlags.AllowGroundMounts))
|
||||||
continue;
|
continue;
|
||||||
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Flying) && !mountFlags.HasAnyFlag(AreaMountFlags.FlyingAllowed))
|
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Flying) && !mountFlags.HasFlag(AreaMountFlags.AllowFlyingMounts))
|
||||||
continue;
|
continue;
|
||||||
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Float) && !mountFlags.HasAnyFlag(AreaMountFlags.FloatAllowed))
|
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Float) && !mountFlags.HasFlag(AreaMountFlags.AllowSurfaceSwimmingMounts))
|
||||||
continue;
|
continue;
|
||||||
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Underwater) && !mountFlags.HasAnyFlag(AreaMountFlags.UnderwaterAllowed))
|
if (mountCapability.Flags.HasAnyFlag(MountCapabilityFlags.Underwater) && !mountFlags.HasFlag(AreaMountFlags.AllowUnderwaterSwimmingMounts))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -682,7 +682,7 @@ namespace Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
AreaTableRecord atEntry = CliDB.AreaTableStorage.LookupByKey(GetPlayer().GetAreaId());
|
AreaTableRecord atEntry = CliDB.AreaTableStorage.LookupByKey(GetPlayer().GetAreaId());
|
||||||
if (atEntry == null || !atEntry.HasFlag(AreaFlags.CanHearthAndResurrect))
|
if (atEntry == null || !atEntry.GetFlags().HasFlag(AreaFlags.AllowHearthAndRessurectFromArea))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
GetPlayer().BuildPlayerRepop();
|
GetPlayer().BuildPlayerRepop();
|
||||||
|
|||||||
@@ -479,7 +479,7 @@ namespace Game.Maps
|
|||||||
data.AreaId = gridAreaId;
|
data.AreaId = gridAreaId;
|
||||||
var areaEntry1 = CliDB.AreaTableStorage.LookupByKey(data.AreaId);
|
var areaEntry1 = CliDB.AreaTableStorage.LookupByKey(data.AreaId);
|
||||||
if (areaEntry1 != null)
|
if (areaEntry1 != null)
|
||||||
data.outdoors = ((AreaFlags)areaEntry1.Flags[0] & (AreaFlags.Inside | AreaFlags.Outside)) != AreaFlags.Inside;
|
data.outdoors = areaEntry1.GetFlags().HasFlag(AreaFlags.ForceOutdoors) || !areaEntry1.GetFlags().HasFlag(AreaFlags.ForceIndoors);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.AreaId == 0)
|
if (data.AreaId == 0)
|
||||||
|
|||||||
@@ -5717,11 +5717,9 @@ namespace Game.Spells
|
|||||||
// allow always ghost flight spells
|
// allow always ghost flight spells
|
||||||
if (m_originalCaster != null && m_originalCaster.IsTypeId(TypeId.Player) && m_originalCaster.IsAlive())
|
if (m_originalCaster != null && m_originalCaster.IsTypeId(TypeId.Player) && m_originalCaster.IsAlive())
|
||||||
{
|
{
|
||||||
BattleField Bf = Global.BattleFieldMgr.GetBattlefieldToZoneId(m_originalCaster.GetMap(), m_originalCaster.GetZoneId());
|
BattleField battleField = Global.BattleFieldMgr.GetBattlefieldToZoneId(m_originalCaster.GetMap(), m_originalCaster.GetZoneId());
|
||||||
var area = CliDB.AreaTableStorage.LookupByKey(m_originalCaster.GetAreaId());
|
if (battleField != null && !battleField.CanFlyIn())
|
||||||
if (area != null)
|
return SpellCastResult.NotHere;
|
||||||
if (area.HasFlag(AreaFlags.NoFlyZone) || (Bf != null && !Bf.CanFlyIn()))
|
|
||||||
return SpellCastResult.NotHere;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2827,14 +2827,14 @@ namespace Game.Spells
|
|||||||
|
|
||||||
// Players can only fight a duel in zones with this flag
|
// Players can only fight a duel in zones with this flag
|
||||||
AreaTableRecord casterAreaEntry = CliDB.AreaTableStorage.LookupByKey(caster.GetAreaId());
|
AreaTableRecord casterAreaEntry = CliDB.AreaTableStorage.LookupByKey(caster.GetAreaId());
|
||||||
if (casterAreaEntry != null && !casterAreaEntry.HasFlag(AreaFlags.AllowDuels))
|
if (casterAreaEntry != null && !casterAreaEntry.GetFlags().HasFlag(AreaFlags.AllowDueling))
|
||||||
{
|
{
|
||||||
SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here
|
SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AreaTableRecord targetAreaEntry = CliDB.AreaTableStorage.LookupByKey(target.GetAreaId());
|
AreaTableRecord targetAreaEntry = CliDB.AreaTableStorage.LookupByKey(target.GetAreaId());
|
||||||
if (targetAreaEntry != null && !targetAreaEntry.HasFlag(AreaFlags.AllowDuels))
|
if (targetAreaEntry != null && !targetAreaEntry.GetFlags().HasFlag(AreaFlags.AllowDueling))
|
||||||
{
|
{
|
||||||
SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here
|
SendCastResult(SpellCastResult.NoDueling); // Dueling isn't allowed here
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -842,19 +842,19 @@ namespace Game.Spells
|
|||||||
// continent limitation (virtual continent)
|
// continent limitation (virtual continent)
|
||||||
if (HasAttribute(SpellAttr4.OnlyFlyingAreas))
|
if (HasAttribute(SpellAttr4.OnlyFlyingAreas))
|
||||||
{
|
{
|
||||||
uint mountFlags = 0;
|
AreaMountFlags mountFlags = 0;
|
||||||
if (player && player.HasAuraType(AuraType.MountRestrictions))
|
if (player && player.HasAuraType(AuraType.MountRestrictions))
|
||||||
{
|
{
|
||||||
foreach (AuraEffect auraEffect in player.GetAuraEffectsByType(AuraType.MountRestrictions))
|
foreach (AuraEffect auraEffect in player.GetAuraEffectsByType(AuraType.MountRestrictions))
|
||||||
mountFlags |= (uint)auraEffect.GetMiscValue();
|
mountFlags |= (AreaMountFlags)auraEffect.GetMiscValue();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AreaTableRecord areaTable = CliDB.AreaTableStorage.LookupByKey(area_id);
|
AreaTableRecord areaTable = CliDB.AreaTableStorage.LookupByKey(area_id);
|
||||||
if (areaTable != null)
|
if (areaTable != null)
|
||||||
mountFlags = areaTable.MountFlags;
|
mountFlags = areaTable.GetMountFlags();
|
||||||
}
|
}
|
||||||
if (!Convert.ToBoolean(mountFlags & (uint)AreaMountFlags.FlyingAllowed))
|
if (!mountFlags.HasFlag(AreaMountFlags.AllowFlyingMounts))
|
||||||
return SpellCastResult.IncorrectArea;
|
return SpellCastResult.IncorrectArea;
|
||||||
|
|
||||||
if (player)
|
if (player)
|
||||||
|
|||||||
@@ -2944,9 +2944,8 @@ namespace Scripts.Spells.Items
|
|||||||
void HandleDummy(uint effIndex)
|
void HandleDummy(uint effIndex)
|
||||||
{
|
{
|
||||||
Unit caster = GetCaster();
|
Unit caster = GetCaster();
|
||||||
AreaTableRecord areaEntry = CliDB.AreaTableStorage.LookupByKey(caster.GetAreaId());
|
|
||||||
bool success = true;
|
bool success = true;
|
||||||
if (areaEntry != null && areaEntry.IsFlyable() && !caster.GetMap().IsDungeon())
|
if (!caster.GetMap().IsDungeon())
|
||||||
success = RandomHelper.randChance(95);
|
success = RandomHelper.randChance(95);
|
||||||
caster.CastSpell(caster, success ? SpellIds.NitroBoostsSuccess : SpellIds.NitroBoostsBackfire, new CastSpellExtraArgs(GetCastItem()));
|
caster.CastSpell(caster, success ? SpellIds.NitroBoostsSuccess : SpellIds.NitroBoostsBackfire, new CastSpellExtraArgs(GetCastItem()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user