diff --git a/Source/Framework/Constants/GuildConst.cs b/Source/Framework/Constants/GuildConst.cs
index bcbb66600..2e86d63f6 100644
--- a/Source/Framework/Constants/GuildConst.cs
+++ b/Source/Framework/Constants/GuildConst.cs
@@ -45,6 +45,8 @@ namespace Framework.Constants
public static uint MinNewsItemLevel = 353;
public static byte OldMaxLevel = 25;
+
+ public static uint MasterDethroneInactiveDays = 90;
}
public enum GuildRankRights
diff --git a/Source/Framework/GameMath/Matrix2.cs b/Source/Framework/GameMath/Matrix2.cs
index e17e04ea0..722071e8f 100644
--- a/Source/Framework/GameMath/Matrix2.cs
+++ b/Source/Framework/GameMath/Matrix2.cs
@@ -504,7 +504,7 @@ namespace Framework.GameMath
/// A new instance containing the sum.
public static Matrix2 operator +(Matrix2 left, Matrix2 right)
{
- return Matrix2.Add(left, right); ;
+ return Matrix2.Add(left, right);
}
///
/// Adds a matrix and a scalar.
@@ -534,7 +534,7 @@ namespace Framework.GameMath
/// A new instance containing the difference.
public static Matrix2 operator -(Matrix2 left, Matrix2 right)
{
- return Matrix2.Subtract(left, right); ;
+ return Matrix2.Subtract(left, right);
}
///
/// Subtracts a scalar from a matrix.
@@ -554,7 +554,7 @@ namespace Framework.GameMath
/// A new instance containing the result.
public static Matrix2 operator *(Matrix2 left, Matrix2 right)
{
- return Matrix2.Multiply(left, right); ;
+ return Matrix2.Multiply(left, right);
}
///
/// Transforms a given vector by a matrix.
diff --git a/Source/Framework/GameMath/Matrix3.cs b/Source/Framework/GameMath/Matrix3.cs
index 6f43c22ef..ab5ead942 100644
--- a/Source/Framework/GameMath/Matrix3.cs
+++ b/Source/Framework/GameMath/Matrix3.cs
@@ -693,7 +693,7 @@ namespace Framework.GameMath
/// A new instance containing the sum.
public static Matrix3 operator +(Matrix3 left, Matrix3 right)
{
- return Matrix3.Add(left, right); ;
+ return Matrix3.Add(left, right);
}
///
/// Adds a matrix and a scalar.
@@ -723,7 +723,7 @@ namespace Framework.GameMath
/// A new instance containing the difference.
public static Matrix3 operator -(Matrix3 left, Matrix3 right)
{
- return Matrix3.Subtract(left, right); ;
+ return Matrix3.Subtract(left, right);
}
///
/// Subtracts a scalar from a matrix.
@@ -743,7 +743,7 @@ namespace Framework.GameMath
/// A new instance containing the result.
public static Matrix3 operator *(Matrix3 left, Matrix3 right)
{
- return Matrix3.Multiply(left, right); ;
+ return Matrix3.Multiply(left, right);
}
///
/// Transforms a given vector by a matrix.
diff --git a/Source/Framework/GameMath/Matrix4.cs b/Source/Framework/GameMath/Matrix4.cs
index 4f1b36ce5..2ea893873 100644
--- a/Source/Framework/GameMath/Matrix4.cs
+++ b/Source/Framework/GameMath/Matrix4.cs
@@ -780,7 +780,7 @@ namespace Framework.GameMath
/// A new instance containing the sum.
public static Matrix4 operator +(Matrix4 left, Matrix4 right)
{
- return Matrix4.Add(left, right); ;
+ return Matrix4.Add(left, right);
}
///
/// Adds a matrix and a scalar.
@@ -810,7 +810,7 @@ namespace Framework.GameMath
/// A new instance containing the difference.
public static Matrix4 operator -(Matrix4 left, Matrix4 right)
{
- return Matrix4.Subtract(left, right); ;
+ return Matrix4.Subtract(left, right);
}
///
/// Subtracts a scalar from a matrix.
@@ -830,7 +830,7 @@ namespace Framework.GameMath
/// A new instance containing the result.
public static Matrix4 operator *(Matrix4 left, Matrix4 right)
{
- return Matrix4.Multiply(left, right); ;
+ return Matrix4.Multiply(left, right);
}
///
/// Transforms a given vector by a matrix.
diff --git a/Source/Framework/RecastDetour/Detour/DetourNavMesh.cs b/Source/Framework/RecastDetour/Detour/DetourNavMesh.cs
index 423ee1da3..5efe2f026 100644
--- a/Source/Framework/RecastDetour/Detour/DetourNavMesh.cs
+++ b/Source/Framework/RecastDetour/Detour/DetourNavMesh.cs
@@ -834,7 +834,7 @@ public static partial class Detour
vArrays[k] = tile.detailVerts;
}
}
- float h = .0f; ;
+ float h = .0f;
if (dtClosestHeightPointTriangle(pos, posStart, vArrays[0], vIndices[0], vArrays[1], vIndices[1], vArrays[2], vIndices[2], ref h))
{
closest[1] = h;
diff --git a/Source/Game/DungeonFinding/LFGQueue.cs b/Source/Game/DungeonFinding/LFGQueue.cs
index 2f0ca8f7f..8faa54311 100644
--- a/Source/Game/DungeonFinding/LFGQueue.cs
+++ b/Source/Game/DungeonFinding/LFGQueue.cs
@@ -366,7 +366,7 @@ namespace Game.DungeonFinding
foreach (var guid in check)
{
if (!(numLfgGroups < 2) && !(numPlayers <= MapConst.MaxGroupSize))
- break; ;
+ break;
var itQueue = QueueDataStore.LookupByKey(guid);
if (itQueue == null)
diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs
index eb94ba3ff..2ff76aaf9 100644
--- a/Source/Game/Entities/Creature/Creature.cs
+++ b/Source/Game/Entities/Creature/Creature.cs
@@ -2448,7 +2448,7 @@ namespace Game.Entities
if (vItem.maxcount == 0)
return 0;
- VendorItemCount vCount = null; ;
+ VendorItemCount vCount = null;
for (var i = 0; i < m_vendorItemCounts.Count; i++)
{
vCount = m_vendorItemCounts[i];
diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs
index 2b6213d66..0c5c99da0 100644
--- a/Source/Game/Entities/Player/Player.cs
+++ b/Source/Game/Entities/Player/Player.cs
@@ -4759,7 +4759,7 @@ namespace Game.Entities
if ((pvp && WorldConfig.GetBoolValue(WorldCfg.DeathCorpseReclaimDelayPvp)) ||
(!pvp && WorldConfig.GetBoolValue(WorldCfg.DeathCorpseReclaimDelayPve)))
{
- count = (ulong)(m_deathExpireTime - corpse.GetGhostTime()) / PlayerConst.DeathExpireStep; ;
+ count = (ulong)(m_deathExpireTime - corpse.GetGhostTime()) / PlayerConst.DeathExpireStep;
if (count >= PlayerConst.MaxDeathCount)
count = PlayerConst.MaxDeathCount - 1;
diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs
index f6ebccc69..5707e6a75 100644
--- a/Source/Game/Guilds/Guild.cs
+++ b/Source/Game/Guilds/Guild.cs
@@ -228,7 +228,7 @@ namespace Game.Guilds
memberData.AreaID = (int)member.GetZoneId();
memberData.PersonalAchievementPoints = (int)member.GetAchievementPoints();
memberData.GuildReputation = (int)member.GetTotalReputation();
- memberData.LastSave = (member.IsOnline() ? 0.0f : ((ulong)Time.UnixTime - member.GetLogoutTime()) / Time.Day);
+ memberData.LastSave = member.GetInactiveDays();
//GuildRosterProfessionData
@@ -405,30 +405,45 @@ namespace Game.Guilds
}
}
- public void HandleSetNewGuildMaster(WorldSession session, string name)
+ public void HandleSetNewGuildMaster(WorldSession session, string name, bool isSelfPromote)
{
Player player = session.GetPlayer();
- // Only the guild master can throne a new guild master
- if (!_IsLeader(player))
- SendCommandResult(session, GuildCommandType.ChangeLeader, GuildCommandError.Permissions);
- // Old GM must be a guild member
- Member oldGuildMaster = GetMember(player.GetGUID());
- if (oldGuildMaster != null)
+ Member oldGuildMaster = GetMember(GetLeaderGUID());
+
+ Member newGuildMaster;
+ if (isSelfPromote)
{
- // Same for the new one
- Member newGuildMaster = GetMember(name);
- if (newGuildMaster != null)
+ newGuildMaster = GetMember(player.GetGUID());
+ if (newGuildMaster == null)
+ return;
+
+ if (!newGuildMaster.IsRankNotLower(GuildDefaultRanks.Member) || oldGuildMaster.GetInactiveDays() < GuildConst.MasterDethroneInactiveDays)
{
- SQLTransaction trans = new SQLTransaction();
-
- _SetLeader(trans, newGuildMaster);
- oldGuildMaster.ChangeRank(trans, GuildDefaultRanks.Initiate);
-
- SendEventNewLeader(newGuildMaster, oldGuildMaster);
-
- DB.Characters.CommitTransaction(trans);
+ SendCommandResult(session, GuildCommandType.ChangeLeader, GuildCommandError.Permissions);
+ return;
}
}
+ else
+ {
+ if (!_IsLeader(player))
+ {
+ SendCommandResult(session, GuildCommandType.ChangeLeader, GuildCommandError.Permissions);
+ return;
+ }
+
+ newGuildMaster = GetMember(name);
+ if (newGuildMaster == null)
+ return;
+ }
+
+ SQLTransaction trans = new SQLTransaction();
+
+ _SetLeader(trans, newGuildMaster);
+ oldGuildMaster.ChangeRank(trans, GuildDefaultRanks.Initiate);
+
+ SendEventNewLeader(newGuildMaster, oldGuildMaster, isSelfPromote);
+
+ DB.Characters.CommitTransaction(trans);
}
public void HandleSetBankTabInfo(WorldSession session, byte tabId, string name, string icon)
@@ -2581,6 +2596,13 @@ namespace Game.Guilds
return true;
}
+ public float GetInactiveDays()
+ {
+ if (IsOnline())
+ return 0.0f;
+ return (float)((Time.UnixTime - (long)GetLogoutTime()) / (float)Time.Day);
+ }
+
// Decreases amount of slots left for today.
public void UpdateBankTabWithdrawValue(SQLTransaction trans, byte tabId, uint amount)
{
diff --git a/Source/Game/Handlers/GuildHandler.cs b/Source/Game/Handlers/GuildHandler.cs
index bb599e7f4..3a569953a 100644
--- a/Source/Game/Handlers/GuildHandler.cs
+++ b/Source/Game/Handlers/GuildHandler.cs
@@ -440,12 +440,20 @@ namespace Game
guild.HandleNewsSetSticky(this, (uint)packet.NewsID, packet.Sticky);
}
+ [WorldPacketHandler(ClientOpcodes.GuildReplaceGuildMaster)]
+ void HandleGuildReplaceGuildMaster(GuildReplaceGuildMaster replaceGuildMaster)
+ {
+ Guild guild = GetPlayer().GetGuild();
+ if (guild)
+ guild.HandleSetNewGuildMaster(this, "", true);
+ }
+
[WorldPacketHandler(ClientOpcodes.GuildSetGuildMaster)]
void HandleGuildSetGuildMaster(GuildSetGuildMaster packet)
{
Guild guild = GetPlayer().GetGuild();
if (guild)
- guild.HandleSetNewGuildMaster(this, packet.NewMasterName);
+ guild.HandleSetNewGuildMaster(this, packet.NewMasterName, false);
}
[WorldPacketHandler(ClientOpcodes.GuildSetAchievementTracking)]
diff --git a/Source/Game/Handlers/LootHandler.cs b/Source/Game/Handlers/LootHandler.cs
index 176620870..f334c072d 100644
--- a/Source/Game/Handlers/LootHandler.cs
+++ b/Source/Game/Handlers/LootHandler.cs
@@ -534,7 +534,7 @@ namespace Game
LootItem item = slotid >= loot.items.Count ? loot.quest_items[slotid - loot.items.Count] : loot.items[slotid];
- List dest = new List(); ;
+ List dest = new List();
InventoryResult msg = target.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, item.itemid, item.count);
if (item.follow_loot_rules && !item.AllowedForPlayer(target))
msg = InventoryResult.CantEquipEver;
diff --git a/Source/Game/Network/Packets/CharacterPackets.cs b/Source/Game/Network/Packets/CharacterPackets.cs
index e509e58b7..794db81f5 100644
--- a/Source/Game/Network/Packets/CharacterPackets.cs
+++ b/Source/Game/Network/Packets/CharacterPackets.cs
@@ -1000,7 +1000,7 @@ namespace Game.Network.Packets
public override void Read()
{
- Player = _worldPacket.ReadPackedGuid(); ;
+ Player = _worldPacket.ReadPackedGuid();
byte[] stringLengths = new byte[SharedConst.MaxDeclinedNameCases];
diff --git a/Source/Game/Network/Packets/GuildPackets.cs b/Source/Game/Network/Packets/GuildPackets.cs
index 3ca83f9eb..0c787357d 100644
--- a/Source/Game/Network/Packets/GuildPackets.cs
+++ b/Source/Game/Network/Packets/GuildPackets.cs
@@ -438,16 +438,16 @@ namespace Game.Network.Packets
public override void Write()
{
_worldPacket.WriteBit(SelfPromoted);
- _worldPacket.WriteBits(NewLeaderName.GetByteCount(), 6);
_worldPacket.WriteBits(OldLeaderName.GetByteCount(), 6);
+ _worldPacket.WriteBits(NewLeaderName.GetByteCount(), 6);
_worldPacket.WritePackedGuid(OldLeaderGUID);
_worldPacket.WriteUInt32(OldLeaderVirtualRealmAddress);
_worldPacket.WritePackedGuid(NewLeaderGUID);
_worldPacket.WriteUInt32(NewLeaderVirtualRealmAddress);
- _worldPacket.WriteString(NewLeaderName);
_worldPacket.WriteString(OldLeaderName);
+ _worldPacket.WriteString(NewLeaderName);
}
public ObjectGuid NewLeaderGUID;
@@ -981,7 +981,7 @@ namespace Game.Network.Packets
public override void Write()
{
- _worldPacket .WriteInt64( RemainingWithdrawMoney);
+ _worldPacket.WriteInt64(RemainingWithdrawMoney);
}
public long RemainingWithdrawMoney;
@@ -1023,7 +1023,7 @@ namespace Game.Network.Packets
{
_worldPacket.WriteUInt32(tab.TabIndex);
_worldPacket.WriteBits(tab.Name.GetByteCount(), 7);
- _worldPacket.WriteBits(tab.Icon.GetByteCount(), 9);;
+ _worldPacket.WriteBits(tab.Icon.GetByteCount(), 9);
_worldPacket.WriteString(tab.Name);
_worldPacket.WriteString(tab.Icon);
@@ -1245,6 +1245,13 @@ namespace Game.Network.Packets
public bool Sticky;
}
+ class GuildReplaceGuildMaster : ClientPacket
+ {
+ public GuildReplaceGuildMaster(WorldPacket packet) : base(packet) { }
+
+ public override void Read() { }
+ }
+
public class GuildSetGuildMaster : ClientPacket
{
public GuildSetGuildMaster(WorldPacket packet) : base(packet) { }
diff --git a/Source/Game/Network/Packets/ItemPackets.cs b/Source/Game/Network/Packets/ItemPackets.cs
index 14c033ccb..5b155a9d7 100644
--- a/Source/Game/Network/Packets/ItemPackets.cs
+++ b/Source/Game/Network/Packets/ItemPackets.cs
@@ -724,7 +724,7 @@ namespace Game.Network.Packets
public void Read(WorldPacket data)
{
Context = data.ReadUInt8();
- uint bonusListIdSize = data.ReadUInt32(); ;
+ uint bonusListIdSize = data.ReadUInt32();
BonusListIDs = new List();
for (uint i = 0u; i < bonusListIdSize; ++i)
diff --git a/Source/Game/Network/Packets/VehiclePackets.cs b/Source/Game/Network/Packets/VehiclePackets.cs
index 935f2be65..763e1e6d2 100644
--- a/Source/Game/Network/Packets/VehiclePackets.cs
+++ b/Source/Game/Network/Packets/VehiclePackets.cs
@@ -43,7 +43,7 @@ namespace Game.Network.Packets
public override void Read()
{
Data.Read(_worldPacket);
- VehicleRecID = _worldPacket.ReadInt32(); ;
+ VehicleRecID = _worldPacket.ReadInt32();
}
public MovementAck Data;