Code:
using System;
using System.Collections.Generic;
namespace COServer.Network.GamePackets
{
public unsafe class MsgName : Writer, Interfaces.IPacket
{
byte[] Packet;
public const byte
None = 0,
Fireworks = 1,
CreateSyn = 2,
GuildName = 3,
ChangeTitle = 4,
DeleteRole = 5,
Spouse = 6,
QueryNPC = 7,
Wanted = 8,
MapEffect = 9,
Effect = 10,
GuildList = 11,
KickOut_SynMem = 12,
QueryWanted = 13,
QueryPoliceWanted = 14,
PoliceWanted = 15,
QuerySpouse = 16,
BeginGamble = 17,
EndGamble = 18,
BonusGamble = 19,
Sound = 20,
GuildAllies = 21,
GuildEnemies = 22,
WhisperDetails = 26,
ServerName = 60,
ServerName2 = 61;
public MsgName(bool Create)
{
if (Create)
{
Packet = new byte[23];
Writer.Write(17, 0, Packet);
Writer.Write(1015, 2, Packet);
Write((uint)Time32.timeGetTime().GetHashCode(), 4, Packet);
Texts = new List<string>();
}
}
public MsgName(Client.GameState client, ushort X, ushort Y, byte type, string effect)
{
MsgName str2 = new MsgName(true);
str2.TextsCount = 1;
str2.PositionX = X;
str2.PositionY = Y;
str2.Type = type;
str2.Texts.Add(effect);
client.SendScreen(str2, true);
}
public MsgName(Client.GameState client, byte type, uint UID, string effect)
{
MsgName str = new MsgName(true)
{
Type = type,
UID = UID
};
str.Texts.Add(effect);
client.SendScreen(str.ToArray(), true);
}
public ushort PositionX
{
get { return BitConverter.ToUInt16(Packet, 8); }
set { Write(value, 8, Packet); }
}
public ushort PositionY
{
get { return BitConverter.ToUInt16(Packet, 10); }
set { Write(value, 10, Packet); }
}
public uint UID
{
get { return BitConverter.ToUInt32(Packet, 8); }//
set { WriteUInt32(value, 8, Packet); }
}
public byte Action
{
get { return Packet[12]; }//
set { Packet[12] = (byte)value; }
}
public byte TextsCount
{
get { return Packet[13]; }//
set { Packet[13] = value; }
}
public List<string> Texts;
public byte[] ToArray()
{
ushort entirelength = 26;//23
foreach (string list in Texts)
entirelength += (ushort)list.Length;
byte[] buffer = new byte[entirelength];
WriteUInt16((ushort)(entirelength - 8), 0, buffer);
WriteUInt16((ushort)MsgTypes.MsgName, 2, buffer);
WriteUInt32(UID, 8, buffer);
WriteUInt32((uint)Time32.timeGetTime().GetHashCode(), 4, buffer);
buffer[12] = Action;
Packet = buffer;
WriteStringList(Texts, 13, Packet);
return Packet;
}
public void Deserialize(byte[] buffer)
{
Packet = buffer;
Texts = new List<string>(buffer[13]);
ushort offset = 14;
byte count = 0;
while (count != TextsCount)
{
ushort textlength = buffer[offset]; offset++;
string text = Server.Encoding.GetString(buffer, offset, textlength);
offset += textlength;
Texts.Add(text);
count++;
}
}
public ushort X
{
get { return BitConverter.ToUInt16(Packet, 8); }
set { Write(value, 8, Packet); }
}
public ushort Y
{
get { return BitConverter.ToUInt16(Packet, 10); }
set { Write(value, 8, Packet); }
}
public int Type;
public void Send(Client.GameState client)
{
client.Send(Packet);
}
public static void Process(byte[] packet, Client.GameState client)
{
if (client.Action != 2) return;
MsgName Name = new MsgName(false);
Name.Deserialize(packet);
switch (Name.Action)
{
case MsgName.ServerName:
{
Name = new MsgName(true);
Name.Action = MsgName.ServerName;
Name.Texts.Add("Ketos");
client.Send(Name);
client.Player.PKMode = Game.Enums.PKMode.CS;
client.Send(new MsgAction(true)
{
UID = client.Player.UID,
ID = MsgAction.Mode.ChangePKMode,
dwParam = (uint)Game.Enums.PKMode.CS
});
client.Send(Name);
break;
}
case MsgName.ServerName2:
{
Name = new MsgName(true);
Name.Action = MsgName.ServerName2;
Name.Texts.Add("CS_1");
client.Send(Name);
client.Player.PKMode = Game.Enums.PKMode.Invade;
client.Send(new MsgAction(true)
{
UID = client.Player.UID,
ID = MsgAction.Mode.ChangePKMode,
dwParam = (uint)Game.Enums.PKMode.Invade
});
break;
}
case MsgName.BeginGamble:
{
client.Player.MsgDice = new MsgDice(true);
client.Player.MsgDice.Action = MsgDice.Mode.BeginGamble;
client.Player.MsgDice.StartTime = DateTime.Now;
client.Player.MsgDice.Seconds = 50;
client.Player.MsgDice.ID = (ushort)Name.UID;
client.Send(packet);
client.Send(client.Player.MsgDice.ToArray());
break;
}
case MsgName.EndGamble:
{
if (client.Player.MsgDice != null)
{
client.Player.MsgDice.Seconds = 0;
client.Player.MsgDice.Action = MsgDice.Mode.EndGamble;
client.Send(client.Player.MsgDice.ToArray());
client.Player.MsgDice = null;
}
break;
}
case MsgName.QuerySpouse:
{
Client.GameState Client;
if (Kernel.GamePool.TryGetValue(Name.UID, out Client))
{
Name = new MsgName(true);
Name.Action = MsgName.QuerySpouse;
Name.UID = client.Player.UID;
Name.TextsCount = 1;
Name.Texts = new List<string>()
{
Client.Player.Spouse
};
client.Send(Name);
Client.Send(client.Player.Name + " is checking your equipment");
}
break;
}
case MsgName.WhisperDetails:
{
if (Name.Texts.Count > 0)
{
foreach (var pClient in Kernel.GamePool.Values)
{
if (pClient.Player.Name == Name.Texts[0])
{
string otherstring = "";
otherstring += pClient.Player.UID + " ";
otherstring += pClient.Player.Level + " ";
otherstring += pClient.Player.BattlePower + " #";
if (pClient.Player.GuildID != 0)
otherstring += pClient.Guild.Name + " # ";
else
otherstring += "None # ";
otherstring += pClient.Player.Spouse + " ";
otherstring += (byte)(pClient.Player.NobilityRank) + " ";
if (pClient.Player.Body % 10 < 6)
otherstring += "2 ";
else
otherstring += "1 ";
Name.Texts.Add(otherstring);
client.Send(Name);
}
}
}
break;
}
default: Console.WriteLine("MsgName Unknown Action " + Name.Action); break;
}
}
}
}
Code:
using System;
using System.Linq;
using System.Text;
using COServer.Game;
using System.Collections.Generic;
namespace COServer.Network.GamePackets
{
public unsafe class MsgSyndicate : Writer, Interfaces.IPacket
{
public enum Mode : uint
{
None = 0,
JoinRequest = 1,
InviteRequest = 2,
Quit = 3,
Info = 6,
Allied = 7,
RemoveAlly = 8,
Enemied = 9,
RemoveEnemy = 10,
DonateSilvers = 11,
Refresh = 12,
Disband = 19,
DonateConquerPoints = 20,
ChangeGuildRequirements = 24,
GuildRequirements = 25,
Bulletin = 27,
PromoteSendRequest = 28,
PromoteAcceptRequest = 29,
Discharge = 30,
ConfirmPromote = 34,
Diseharge = 36,
Promote = 37,
PromoteInfo = 38,
Unknown = 45,
GuildBlackList = 47,
MakeBlackList = 48,
SmsBlackList = 49,
RemoveBlackList = 50
}
byte[] Packet;
public MsgSyndicate(bool Create)
{
if (Create)
{
Packet = new byte[36];
WriteUInt16((ushort)(Packet.Length - 8), 0, Packet);
WriteUInt16((ushort)MsgTypes.MsgSyndicate, 2, Packet);
}
}
public MsgSyndicate(uint Date)
{
Packet = new byte[36 + Date];
WriteUInt16((ushort)(Packet.Length - 8), 0, Packet);
WriteUInt16((ushort)MsgTypes.MsgSyndicate, 2, Packet);
}
public Mode Action
{
get { return (Mode)Packet[4]; }
set { fixed (byte* Pack = Packet) *((uint*)(Pack + 4)) = (uint)value; }
}
public uint dwParam
{
get { return BitConverter.ToUInt32(Packet, 8); }
set { WriteUInt32(value, 8, Packet); }
}
public uint Level
{
get { return BitConverter.ToUInt32(Packet, 12); }
set { WriteUInt32(value, 12, Packet); }
}
public uint Reborn
{
get { return BitConverter.ToUInt32(Packet, 16); }
set { WriteUInt32(value, 16, Packet); }
}
public uint Class
{
get { return BitConverter.ToUInt32(Packet, 20); }
set { WriteUInt32(value, 20, Packet); }
}
public string BulletinTime
{
set
{
WriteByte(1, 24, Packet);
WriteByte((byte)(value.Length), 25, Packet);
WriteString(value, 26, Packet);
}
}
public byte[] ToArray()
{
return Packet;
}
public void Deserialize(byte[] Data)
{
Packet = Data;
}
public void Send(Client.GameState client)
{
client.Send(Packet);
}
static void AllyGuilds(string name, Client.GameState client)
{
foreach (var guild in Kernel.Guilds.Values)
{
if (guild.Name == name && client.Guild.Name != name)
{
if (guild.Leader != null)
{
if (guild.Leader.IsOnline)
{
guild.Leader.Client.OnMessageBoxEventParams = new object[] { guild, client.Guild };
client.OnMessageBoxEventParams = new object[] { guild, client.Guild };
Client.GameState Leader = guild.Leader.Client;
Leader.MessageOK = delegate
{
Game.ConquerStructures.Society.Guild Guild1 = Leader.OnMessageBoxEventParams[0] as Game.ConquerStructures.Society.Guild;
Game.ConquerStructures.Society.Guild Guild2 = Leader.OnMessageBoxEventParams[1] as Game.ConquerStructures.Society.Guild;
if (Guild1.Ally.Count == 6 || Guild2.Ally.Count == 6) return;
Guild1.AddAlly(Guild2.Name);
Guild2.AddAlly(Guild1.Name);
if (Guild1.Leader.Client != null)
{
if (Guild1.Leader.Client.Socket.Alive)
{
if (Guild2.Leader.Client != null && Guild2.Leader.Client.Socket.Alive)
{
Guild2.Leader.Client.Send(new MsgTalk(Guild1.Leader.Name + " has accepted your ally request.", System.Drawing.Color.Blue, MsgTalk.TopLeft));
}
}
}
};
guild.Leader.Client.MessageCancel = delegate
{
try
{
if (guild.Leader.Client != null)
{
if (guild.Leader.Client.Socket.Alive)
{
if (guild.Leader.Client.OnMessageBoxEventParams != null)
{
Game.ConquerStructures.Society.Guild Guild2 = guild.Leader.Client.OnMessageBoxEventParams[1] as Game.ConquerStructures.Society.Guild;
Game.ConquerStructures.Society.Guild Guild1 = guild.Leader.Client.OnMessageBoxEventParams[0] as Game.ConquerStructures.Society.Guild;
if (Guild2.Leader.IsOnline)
{
Guild2.Leader.Client.Send(new MsgTalk(Guild1.Leader.Name + " has declined your ally request.", System.Drawing.Color.Blue, MsgTalk.TopLeft));
}
}
}
}
}
catch (Exception e)
{
Server.SaveException(e);
}
};
guild.Leader.Client.Send(new NpcReply(NpcReply.MessageBox, client.Player.Name + " , GuildLeader of " + client.Guild.Name + " wants to make with you an alliance."));
}
}
}
}
}
public void SendPromote(Client.GameState client, ushort typ)
{
if (client == null) return;
if (client.AsMember == null) return;
List<string> list = new List<string>();
StringBuilder builder = new StringBuilder();
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.GuildLeader, 1, 1, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.DeputyLeader, (int)client.Guild.RanksCounts[990], 10, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HDeputyLeader, (int)client.Guild.RanksCounts[980], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 650));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonoraryManager, (int)client.Guild.RanksCounts[880], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 320));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonorarySuperv, (int)client.Guild.RanksCounts[840], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 270));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonorarySteward, (int)client.Guild.RanksCounts[680], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 100));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Aide, (int)client.Guild.RanksCounts[602], 6, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Steward, (int)client.Guild.RanksCounts[690], 3, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Follower, (int)client.Guild.RanksCounts[490], 10, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
}
if (client.AsMember.Rank == Enums.GuildMemberRank.LeaderSpouse)
{
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HDeputyLeader, (int)client.Guild.RanksCounts[980], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 650));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonoraryManager, (int)client.Guild.RanksCounts[880], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 320));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonorarySuperv, (int)client.Guild.RanksCounts[840], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 270));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonorarySteward, (int)client.Guild.RanksCounts[680], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 100));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Aide, (int)client.Guild.RanksCounts[602], 10, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Steward, (int)client.Guild.RanksCounts[690], 3, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Follower, (int)client.Guild.RanksCounts[490], 10, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
}
if (client.AsMember.Rank == Enums.GuildMemberRank.Manager || client.AsMember.Rank == Enums.GuildMemberRank.HonoraryManager)
{
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Aide, (int)client.Guild.RanksCounts[602], 6, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
}
if (client.AsMember.Rank == Enums.GuildMemberRank.DeputyLeader)
{
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HDeputyLeader, (int)client.Guild.RanksCounts[980], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 650));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonoraryManager, (int)client.Guild.RanksCounts[880], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 320));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonorarySuperv, (int)client.Guild.RanksCounts[840], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 270));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.HonorarySteward, (int)client.Guild.RanksCounts[680], 4, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 100));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Steward, (int)client.Guild.RanksCounts[690], 3, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Aide, (int)client.Guild.RanksCounts[602], 6, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
list.Add(this.CreatePromotionString(builder, Enums.GuildMemberRank.Follower, (int)client.Guild.RanksCounts[490], 10, (int)client.Guild.GetMemberPotency(Enums.GuildMemberRank.GuildLeader), 0));
}
int extraLength = 0;
foreach (var str in list) extraLength += str.Length + 1;
byte[] packet = new byte[28 + 8 + extraLength];
WriteUInt16((ushort)(packet.Length - 8), 0, packet);
WriteUInt16((ushort)MsgTypes.MsgSyndicate, 2, packet);
WriteByte((byte)typ, 4, packet);
WriteStringList(list, 24, packet);
client.Send(packet);
}
private string CreatePromotionString(StringBuilder builder, Enums.GuildMemberRank rank, int occupants, int maxOccupants, int extraBattlePower, int conquerPoints)
{
builder.Remove(0, builder.Length);
builder.Append((int)rank);
builder.Append(" ");
builder.Append(occupants);
builder.Append(" ");
builder.Append(maxOccupants);
builder.Append(" ");
builder.Append(extraBattlePower);
builder.Append(" ");
builder.Append(conquerPoints);
builder.Append(" ");
return builder.ToString();
}
public static void Process(byte[] Packet, Client.GameState client)
{
MsgSyndicate command = new MsgSyndicate(false);
command.Deserialize(Packet);
switch (command.Action)
{
case Mode.Info:
{
var Guild = Kernel.Guilds[command.dwParam];
if (Guild != null)
Guild.SendName(client);
break;
}
case Mode.ChangeGuildRequirements:
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
client.Guild.LevelRequirement = Math.Min(command.Level, 140);
client.Guild.RebornRequirement = Math.Min(command.Reborn, 2);
client.Guild.ClassRequirement = Math.Min(command.Class, 127);
foreach (var member in client.Guild.Members.Values)
if (member.IsOnline)
client.Guild.SendGuild(member.Client);
Database.GuildTable.SaveRequirements(client.Guild);
}
break;
}
case Mode.RemoveAlly:
case Mode.RemoveEnemy:
{
string name = Encoding.Default.GetString(Packet, 26, Packet[25]);
if (client.Guild != null)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
client.Guild.RemoveAlly(name);
foreach (var guild in Kernel.Guilds.Values)
{
if (guild.Name == name && client.Guild.Name != name)
{
guild.RemoveAlly(client.Guild.Name);
}
}
client.Guild.RemoveEnemy(name);
}
}
break;
}
case Mode.Allied:
{
string name = Encoding.Default.GetString(Packet, 26, Packet[25]);
if (client.Guild != null)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
if (client.Guild.Ally.Count < 6)
{
AllyGuilds(name, client);
}
}
}
break;
}
case Mode.Enemied:
{
string name = Encoding.Default.GetString(Packet, 26, Packet[25]);
if (client.Guild != null)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
if (client.Guild.Enemy.Count < 6)
{
client.Guild.AddEnemy(name);
}
}
}
break;
}
case Mode.Bulletin:
{
string message = Encoding.Default.GetString(Packet, 26, Packet[25]);
if (client.Guild != null)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
client.Guild.Bulletin = message;
client.Guild.CreateBuletinTime();
client.Guild.SendGuild(client);
}
}
break;
}
case Mode.DonateSilvers:
{
if (client.Guild != null)
{
if (client.Trade.InTrade) return;
if (client.PokerPlayer != null)
return;
if (client.Player.Money >= command.dwParam)
{
client.Guild.SilverFund += command.dwParam;
Database.GuildTable.SaveFunds(client.Guild);
client.AsMember.SilverDoantion += command.dwParam;
client.Player.Money -= command.dwParam;
client.Guild.SendGuild(client);
client.Guild.SendGuildMessage(new MsgTalk((client.Player.Name + " Donate " + command.dwParam + " Guild " + client.Guild.Name + " Silvers"), System.Drawing.Color.Red, MsgTalk.TopLeft));
}
}
break;
}
case Mode.DonateConquerPoints:
{
if (client.Guild != null)
{
if (client.Trade.InTrade) return;
if (client.PokerPlayer != null)
return;
if (client.Player.ConquerPoints >= (ulong)command.dwParam)
{
client.Guild.ConquerPointFund += command.dwParam;
Database.GuildTable.SaveFunds(client.Guild);
client.AsMember.ConquerPointDonation += command.dwParam;
client.Player.ConquerPoints -= (uint)command.dwParam;
client.Guild.SendGuild(client);
client.Guild.SendGuildMessage(new MsgTalk((client.Player.Name + " Donate " + command.dwParam + " Guild " + client.Guild.Name + " ConquerPoints"), System.Drawing.Color.Red, MsgTalk.TopLeft));
}
}
break;
}
case Mode.Refresh:
{
if (client.AsMember != null)
{
if (client.Guild != null)
client.Guild.SendGuild(client);
}
break;
}
case Mode.PromoteInfo:
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
SafeDictionary<uint, Game.ConquerStructures.Society.Guild.Member> array2 = new SafeDictionary<uint, Game.ConquerStructures.Society.Guild.Member>();
foreach (var p in client.Guild.Members.Values)
{
if (p.Rank == (Enums.GuildMemberRank)command.dwParam)
{
array2.Add(p.ID, p);
}
}
var array = array2.Values.ToArray();
if (array != null)
{
byte[] Buffer = new byte[8 + 48 + array.Length * 32];
WriteUInt16((ushort)(Buffer.Length - 8), 0, Buffer);
WriteUInt16((ushort)MsgTypes.MsgSynMemberList, 2, Buffer);
Uint(1, 4, Buffer);
Uint((uint)array.Length, 12, Buffer);
int offset = 16;
for (int i = 0; i < array.Length; i++)
{
Uint((uint)array[i].Level, offset, Buffer);//Level
offset += 4;
Uint((uint)(array[i].IsOnline ? 1 : 0), offset, Buffer);//Online
offset += 4;
if (array[i].IsOnline)
Uint((uint)array[i].Client.Player.BattlePower, offset, Buffer);//BattlePower
offset += 4;
offset += 4;
WriteString(array[i].Name, offset, Buffer);//Name
offset += 16;
}
client.Send(Buffer);
}
}
client.Send(Packet);
break;
}
case Mode.Discharge:
{
string name = Encoding.Default.GetString(Packet, 26, Packet[25]);
if (client.Guild != null)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
var member = client.Guild.GetMemberByName(name);
if (member.ID != client.Player.UID)
{
if (member.Rank == Enums.GuildMemberRank.DeputyLeader)
{
member.Rank = Enums.GuildMemberRank.Member;
if (member.IsOnline)
{
client.Guild.SendGuild(member.Client);
member.Client.Player.GuildRank = (ushort)member.Rank;
member.Client.Screen.FullWipe();
member.Client.Screen.Reload(null);
member.Client.Player.GuildSharedBp = member.Guild.GetSharedBattlepower(member.Rank);
}
Database.EntityTable.UpdateData(member.ID, "GuildRank", (int)member.Rank);
client.Guild.SendGuildMessage(new MsgTalk((member.Name + " was discharged from " + member.Rank + " position."), System.Drawing.Color.Yellow, MsgTalk.Guild));
}
}
}
}
break;
}
case Mode.Promote:
{
if (client.Guild == null || client.AsMember == null) return;
command.SendPromote(client, 37);
return;
}
case Mode.PromoteAcceptRequest:
case Mode.ConfirmPromote:
case Mode.PromoteSendRequest:
{
if (client.Guild != null && client.AsMember != null)
{
string GetMemberName = GeneralData.ReadString(Packet, 26, Packet[25]);
ushort GetMemberRank = BitConverter.ToUInt16(Packet, 8);
Game.ConquerStructures.Society.Guild.Member MemberPromote = null;
if (client.Guild.GetMember(GetMemberName, out MemberPromote))
{
if (client.AsMember.Rank < MemberPromote.Rank)
{
client.Send("Sorry, you have small rank for change he position!");
break;
}
if (client.AsMember.Rank == Enums.GuildMemberRank.DeputyLeader)
{
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Steward)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 3)
{
client.Send("Sorry all Steward`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Follower)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 10)
{
client.Send("Sorry all Follower`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Aide)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 6)
{
client.Send("Sorry all Aide`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
}
if (client.AsMember.Rank == Enums.GuildMemberRank.Manager || client.AsMember.Rank == Enums.GuildMemberRank.HonoraryManager)
{
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Aide)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 6)
{
client.Send("Sorry all Aide`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
}
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader || client.AsMember.Rank == Enums.GuildMemberRank.LeaderSpouse)
{
if (GetMemberRank == (ushort)Enums.GuildMemberRank.GuildLeader)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.LeaderSpouse) return;
MemberPromote.Rank = Game.Enums.GuildMemberRank.GuildLeader;
client.Guild.LeaderName = MemberPromote.Name;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
client.AsMember.Rank = Game.Enums.GuildMemberRank.DeputyLeader;
client.Player.GuildRank = (ushort)client.AsMember.Rank;
client.Guild.SendGuild(client);
client.Screen.FullWipe();
client.Screen.Reload(null);
Database.GuildTable.SaveLeader(client.Guild);
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.DeputyLeader)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 6)
{
client.Send("Sorry all DeputyLeader`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Aide)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.LeaderSpouse) return;
if (client.Guild.RanksCounts[GetMemberRank] >= 6)
{
client.Send("Sorry all Aide`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Steward)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 3)
{
client.Send("Sorry all Steward`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.HDeputyLeader)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 4)
{
client.Send("Sorry all HDeputyLeader`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.HonoraryManager)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 4)
{
client.Send("Sorry all HonoraryManager`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.HonorarySuperv)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 4)
{
client.Send("Sorry all HonorarySuperv`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.HonorarySteward)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 4)
{
client.Send("Sorry all HonorarySteward`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Follower)
{
if (client.Guild.RanksCounts[GetMemberRank] >= 10)
{
client.Send("Sorry all Follower`s ranks its ocupated!");
return;
}
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
if (GetMemberRank == (ushort)Enums.GuildMemberRank.Member)
{
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]--;
MemberPromote.Rank = (Enums.GuildMemberRank)GetMemberRank;
client.Guild.RanksCounts[(ushort)MemberPromote.Rank]++;
if (MemberPromote.IsOnline)
{
client.Guild.SendGuild(MemberPromote.Client);
MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
MemberPromote.Client.Player.GuildRank = (ushort)MemberPromote.Rank;
MemberPromote.Client.Screen.FullWipe();
MemberPromote.Client.Screen.Reload(null);
}
}
}
client.Guild.SendGuildMessage(new MsgTalk((client.Player.Name + " has appointed " + MemberPromote.Name + " as " + MemberPromote.Rank), System.Drawing.Color.Yellow, MsgTalk.Guild));
//MemberPromote.Client.Player.GuildSharedBp = client.Guild.GetSharedBattlepower(MemberPromote.Rank);
}
else client.Send("Sorry Can't Find " + GetMemberName);
}
break;
}
case Mode.JoinRequest:
{
Client.GameState Target;
if (Kernel.GamePool.TryGetValue(command.dwParam, out Target))
{
if (Target.Guild.BlackList.Contains(client.Player.UID))
{
command.Action = Mode.GuildBlackList;
client.Send(command);
return;
}
client.GuildJoinTarget = Target.Player.UID;
if (client.GuildJoinTarget == Target.Player.UID && Target.GuildJoinTarget == client.Player.UID)
{
client.GuildJoinTarget = 0;
Target.GuildJoinTarget = 0;
Game.ConquerStructures.Society.Guild g;
if (Kernel.Guilds.TryGetValue(Target.Player.GuildID, out g))
{
if (Target.AsMember.Rank != Game.Enums.GuildMemberRank.Member)
{
if (client.Player.GuildID == 0)
{
if (client.Union != null)
{
var Union = Kernel.Unions[client.UnionIDX];
Union.RemoveMember(client);
}
g.AddMember(client);
}
}
}
}
else
{
Game.ConquerStructures.Society.Guild tG;
if (Kernel.Guilds.TryGetValue(Target.Player.GuildID, out tG))
{
if (Target.AsMember.Rank != Game.Enums.GuildMemberRank.Member)
{
if (MsgSynRecruitAdvertisingList.PassJoinRequirements(client, tG))
{
client.Player.GuildRequest = Time32.Now;
command.dwParam = client.Player.UID;
MsgRelation Relation = new MsgRelation();
Relation.Level = (uint)client.Player.Level;
Relation.BattlePower = (uint)client.Player.BattlePower;
Relation.Receiver = Target.Player.UID;
Relation.Requester = client.Player.UID;
Relation.Spouse = Target.Player.Name == client.Player.Spouse;
Relation.Friend = client.Friends.ContainsKey(Target.Player.UID);
Relation.TradePartner = client.Partners.ContainsKey(Target.Player.UID);
if (client.Mentor != null)
Relation.Mentor = client.Mentor.ID == Target.Player.UID;
Relation.Apprentice = client.Apprentices.ContainsKey(Target.Player.UID);
if (client.Team != null)
Relation.Teammate = client.Team.IsTeammate(Target.Player.UID);
if (client.Guild != null)
Relation.GuildMember = client.Guild.Members.ContainsKey(Target.Player.UID);
Relation.Enemy = client.Enemy.ContainsKey(Target.Player.UID);
Target.Send(Relation.ToArray());
Target.Send(command);
}
}
}
}
}
break;
}
case Mode.InviteRequest:
{
Client.GameState Target;
if (Kernel.GamePool.TryGetValue(command.dwParam, out Target))
{
if (client.Guild.BlackList.Contains(Target.Player.UID))
{
command.Action = Mode.SmsBlackList;
client.Send(command);
return;
}
client.GuildJoinTarget = Target.Player.UID;
if (client.GuildJoinTarget == Target.Player.UID && Target.GuildJoinTarget == client.Player.UID)
{
client.GuildJoinTarget = 0;
Target.GuildJoinTarget = 0;
Game.ConquerStructures.Society.Guild g;
if (Kernel.Guilds.TryGetValue(client.Player.GuildID, out g))
{
if (client.AsMember.Rank != Game.Enums.GuildMemberRank.Member)
{
if (Target.Union != null)
{
var Union = Kernel.Unions[Target.Union.ID];
Union.RemoveMember(Target);
}
g.AddMember(Target);
}
}
}
else
{
if (client.AsMember.Rank != Game.Enums.GuildMemberRank.Member)
{
client.Player.GuildRequest = Time32.Now;
command.dwParam = client.Player.UID;
MsgRelation Relation = new MsgRelation();
Relation.Level = (uint)client.Player.Level;
Relation.BattlePower = (uint)client.Player.BattlePower;
Relation.Receiver = Target.Player.UID;
Relation.Requester = client.Player.UID;
Relation.Spouse = Target.Player.Name == client.Player.Spouse;
Relation.Friend = client.Friends.ContainsKey(Target.Player.UID);
Relation.TradePartner = client.Partners.ContainsKey(Target.Player.UID);
if (client.Mentor != null)
Relation.Mentor = client.Mentor.ID == Target.Player.UID;
Relation.Apprentice = client.Apprentices.ContainsKey(Target.Player.UID);
if (client.Team != null)
Relation.Teammate = client.Team.IsTeammate(Target.Player.UID);
if (client.Guild != null)
Relation.GuildMember = client.Guild.Members.ContainsKey(Target.Player.UID);
Relation.Enemy = client.Enemy.ContainsKey(Target.Player.UID);
Target.Send(Relation.ToArray());
Target.Send(command);
}
}
}
break;
}
case Mode.Unknown:
{
client.Send(command);
break;
}
case Mode.MakeBlackList:
{
if (client.Guild != null)
{
uint UID = command.dwParam;
if (Kernel.GamePool.ContainsKey(UID))
{
var c = Kernel.GamePool[UID];
if (!client.Guild.BlackList.Contains(UID))
client.Guild.BlackList.Add(UID);
c.Send(command);
}
client.Send("Tha target is addad to the Guild Blacklist.");
}
break;
}
case Mode.RemoveBlackList:
{
if (client.Guild != null)
{
uint UID = command.dwParam;
if (client.Guild.BlackList.Contains(UID))
client.Guild.BlackList.Remove(UID);
client.Send(command);
}
client.Send("Removed from blacklist successfully. The target is recruitable, now.");
break;
}
case Mode.Quit:
{
if (client.Guild != null)
{
if (client.AsMember.Rank != Enums.GuildMemberRank.GuildLeader)
{
client.Guild.ExpelMember(client.Player.Name, true);
}
if (client.AsMember.Rank != Enums.GuildMemberRank.DeputyLeader)
{
client.Guild.ExpelMember(client.Player.Name, true);
}
}
break;
}
case Mode.Diseharge:
{
string name = Encoding.Default.GetString(Packet, 26, Packet[25]);
if (client.Guild != null)
{
if (client.AsMember.Rank == Enums.GuildMemberRank.GuildLeader)
{
var member = client.Guild.GetMemberByName(name);
client.Guild.SendGuildMessage(new MsgTalk((member.Name + " was discharged from " + member.Rank + " position."), System.Drawing.Color.Yellow, MsgTalk.Guild));
if (member.ID != client.Player.UID)
{
member.Rank = Enums.GuildMemberRank.Member;
if (member.IsOnline)
{
client.Guild.SendGuild(member.Client);
member.Client.Player.GuildRank = (ushort)member.Rank;
member.Client.Screen.FullWipe();
member.Client.Screen.Reload(null);
member.Client.Player.GuildSharedBp = member.Guild.GetSharedBattlepower(member.Rank);
}
Database.EntityTable.UpdateData(member.ID, "GuildRank", (int)member.Rank);
}
}
}
break;
}
default: Console.WriteLine("[GuildCommand] Unknown Action: " + command.Action + ""); break;
}
}
}
}