ElSaher
2020-04-04, 10:48 PM
امسح كلاس Clan من عندك وتضيف دا
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Mr_Panda.Client;
using Mr_Panda.Database;
using Mr_Panda.Interfaces;
using Mr_Panda.Network;
using Mr_Panda.Network.GamePackets;
using Mr_Panda.Game;
namespace Mr_Panda
{
public class Clan : Writer, IPacket
{
private Byte[] mData;
private Int32 Position = 17;
private UInt32 mLeader, mFund, mAllyRequest;
private String mName, mInfo, mAnnouncement;
private Byte mLevel, mBPTower;
public Client.GameState client;
public UInt32 WarScore = 0;
public bool PoleKeeper = false;
private Dictionary<UInt32, ClanMember> mMembers;
private Dictionary<UInt32, Clan> mAllies, mEnemies;
public Clan(UInt32 leaderid, UInt32 clanid, String clanname, String leadername)
{
LeaderId = leaderid;
mMembers = new Dictionary<UInt32, ClanMember>();
mAllies = new Dictionary<UInt32, Clan>();
mEnemies = new Dictionary<UInt32, Clan>();
mData = new byte[141 + (Byte)(clanname.Length + leadername.Length) + 8];
WriteUInt16((UInt16)(mData.Length - 8), 0, mData);
WriteUInt16((UInt16)1312, 2, mData);
ID = clanid;
Name = clanname;
}
public Clan()
{
mData = new byte[141 + 8];
WriteUInt16((UInt16)(mData.Length - 8), 0, mData);
WriteUInt16((UInt16)1312, 2, mData);
}
public UInt32 LeaderId
{
get { return mLeader; }
set { mLeader = value; }
}
public Types Type
{
get { return (Types)BitConverter.ToUInt32(mData, 4); }
set { WriteByte((Byte)value, 4, mData); }
}
public UInt32 ID
{
get { return BitConverter.ToUInt32(mData, 8); }
set { WriteUInt32((UInt32)value, 8, mData); }
}
public Byte Offset16
{
get { return mData[16]; }
set { mData[16] = value; }
}
public Byte Offset17
{
get { return mData[17]; }
set { mData[17] = value; }
}
public String Offset18String
{
get { return Program.Encoding.GetString(mData, 18, mData[17]).Trim(new Char[] { '\0' }); }
set { WriteString(value, 18, mData); }
}
public String Name
{
get { return mName; }
set { mName = value; }
}
private string leaderName;
public bool CalnWar;
public string LeaderName
{
get
{
return leaderName;
}
set
{
leaderName = value;
Writer.WriteString(value, 32, mData);
}
}
public UInt32 Fund
{
get { return mFund; }
set { mFund = value; }
}
public Byte Level
{
get { return mLevel; }
set { mLevel = value; }
}
public Byte BPTower
{
get { return mBPTower; }
set { mBPTower = value; }
}
public String Announcement
{
get { return mAnnouncement; }
set { mAnnouncement = value; }
}
public String Info
{
get { return mInfo; }
set { mInfo = value; }
}
public UInt32 AllyRequest
{
get { return mAllyRequest; }
set { mAllyRequest = value; }
}
public void Build(GameState c, Types type)
{
this.Type = type;
switch (type)
{
case Types.Info:
{
ClanMember member;
if (Members.TryGetValue(c.Player.UID, out member))
{
Info = System.String.Format("{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11}"
, ID, mMembers.Count(), 0, Fund, Level - 1, Convert.ToByte(c.Player.ClanRank), 0, BPTower, 0, 0, 0, member.Donation);
Offset16 = 6;
WriteStringWithLength(Info, Position, mData);
Position += Info.Length;
Position++;
WriteStringWithLength(Name, Position, mData);
Position += Name.Length;
Position++;
WriteStringWithLength(LeaderName, Position, mData);
Position += LeaderName.Length;
Position++;
string text2 = "0 0 0 0 0 0 0";
Writer.WriteStringWithLength(text2, Position, mData);
ClanWarArena.ClientWar clientWar;
if (ClanWarArena.GetMyWar(this.ID, out clientWar))
{
string dominationMap = clientWar.DominationMap;
Position += text2.Length;
Position++;
Writer.WriteStringWithLength(dominationMap, Position, mData);
string curentMap = clientWar.CurentMap;
Position += dominationMap.Length;
Position++;
Writer.WriteStringWithLength(curentMap, Position, mData);
}
Position = 17;
}
break;
}
case Types.MyClan:
{
string text = "0 0 0 0 0 0 0";
ClanWarArena.ClientWar clientWar;
if (ClanWarArena.GetMyWar(this.ID, out clientWar))
{
text = string.Concat(new object[]{"1 ",
clientWar.OccupationDays," ",
clientWar.Reward," ",
clientWar.NextReward," 0 0 0"});
}
this.Offset16 = 1;
this.Offset17 = (byte)text.Length;
Writer.WriteString(text, 18, this.mData);
break;
}
}
}
private static void UpdateData(Client.GameState client, string column, object value)
{
using (var cmd = new MySqlCommand(MySqlCommandType.UPDATE))
cmd.Update("clans").Set(column, value).Where("identifier", client.Player.ClanId)
.Execute();
}
public void Save(Client.GameState client, String row, UInt16 value)
{
UpdateData(client, row, value);
}
public void Save(Client.GameState client, String row, Byte value)
{
UpdateData(client, row, value);
}
public void Save(Client.GameState client, String row, String value)
{
UpdateData(client, row, value);
}
public void Save(Client.GameState client, String row, UInt32 value)
{
UpdateData(client, row, value);
}
public UInt32 GetClanId(String name)
{
lock (Kernel.Clans)
{
foreach (Clan clans in Kernel.Clans.Values)
{
if (clans.Name == name)
return clans.ID;
}
}
return 0;
}
public Dictionary<UInt32, ClanMember> Members { get { return this.mMembers; } }
public Dictionary<UInt32, Clan> Allies { get { return this.mAllies; } }
public Dictionary<UInt32, Clan> Enemies { get { return this.mEnemies; } }
public void InfoToMembers()
{
GameState mem;
foreach (ClanMember member in this.Members.Values)
{
if (Kernel.GamePool.TryGetValue(member.Identifier, out mem))
{
mem.Player.GetClan.Build(mem, Types.Info);
mem.Send(mem.Player.GetClan.ToArray());
mem.Send(new ClanMembers(mem.Player.GetClan).ToArray());
}
}
}
public void SendMessage(IPacket packet)
{
GameState mem;
foreach (ClanMember member in this.Members.Values)
{
if (Kernel.GamePool.TryGetValue(member.Identifier, out mem))
mem.Send(packet);
}
}
public static void nobmas(Client.GameState client)
{
Kernel.SendWorldMessage(new Message("Congratulation! " + client.Player.Name + "Donation To " + client.NobilityInformation.Rank + " in Nobility Rank!", System.Drawing.Color.White, 2011), Program.Values);
}
public static UInt32 NextClanId
{
get
{
UInt32 start = 600;
while (Kernel.Clans.ContainsKey(start))
start++;
return start;
}
}
public static Boolean ValidName(String name)
{
if (name.Length < 1 || name.Length > 35) return false;
foreach (Clan clans in Kernel.Clans.Values)
if (clans.Name == name)
return false;
return true;
}
public void AddRelation(UInt32 Relative, ClanRelations.RelationTypes type)
{
try
{
using (var cmd = new MySqlCommand(MySqlCommandType.INSERT).Insert("clanrelation"))
cmd.Insert("id", ID).Insert("clanid", ID).Insert("associatedid", Relative).Insert("type", (byte)type).Execute();
}
catch
{
}
}
public void DeleteRelation(UInt32 Relative, ClanRelations.RelationTypes type)
{
try
{
using (var cmd = new MySqlCommand(MySqlCommandType.DELETE))
cmd.Delete("clanrelation", "clanid", ID).And("associatedid", Relative)
.And("type", (byte)type).Execute();
}
catch
{
}
}
public void Join(GameState c)
{
c.Player.ClanId = ID;
c.Player.ClanRank = Ranks.Member;
c.Player.ClanName = Name;
Database.EntityTable.UpdateClanID(c);
Database.EntityTable.UpdateClanRank(c);
Members.Add(c.Player.UID, new ClanMember()
{
Class = c.Player.Class,
Donation = 0,
Identifier = c.Player.UID,
Level = c.Player.Level,
Name = c.Player.Name,
Rank = c.Player.ClanRank
});
Build(c, Types.Info);
c.Send(this);
c.Player.Teleport(c.Player.MapID, c.Player.X, c.Player.Y);
SendMessage(new Message(System.String.Format("{0} Has Joined the Clan!", c.Player.Name), Color.Red, Message.Clan));
}
public static void CreateClan(GameState c, String cname)
{
UInt32 id = NextClanId;
Clan clan = new Clan(c.Player.UID, id, cname, c.Player.Name);
clan.Fund = 250000;
clan.ID = id;
clan.BPTower = 0;
clan.Level = 1;
clan.Name = cname;
clan.LeaderName = c.Player.Name;
clan.Members.Add(c.Player.UID, new ClanMember()
{
Class = c.Player.Class,
Donation = 250000,
Identifier = c.Player.UID,
Level = c.Player.Level,
Name = c.Player.Name,
Rank = Ranks.ClanLeader
});
Kernel.Clans.Add(id, clan);
Kernel.SendWorldMessage(new Message(System.String.Format("{0} has succesfully set up a new Clan {1}", c.Player.Name, cname), Color.Red,
Message.TopLeft));
using (var cmd = new MySqlCommand(MySqlCommandType.INSERT))
cmd.Insert("clans").Insert("identifier", id)
.Insert("leaderid", clan.LeaderId).Insert("name", clan.Name)
.Insert("fund", clan.Fund).Insert("announcement", "")
.Insert("BPTower", clan.BPTower).Insert("Level", clan.Level)
.Insert("LeaderName", c.Player.Name).Insert("polekeeper", 0).Execute();
c.Player.ClanId = id;
c.Player.ClanRank = Ranks.ClanLeader;
Database.EntityTable.UpdateClanID(c);
Database.EntityTable.UpdateClanRank(c);
c.Player.ClanName = cname;
clan.Build(c, Types.Info);
c.Send(clan);
c.SendScreen(c.Player.SpawnPacket, true);
}
public static void LoadClans()
{
Dictionary<uint, Dictionary<uint, ClanMember>> dict = new Dictionary<uint, Dictionary<uint, ClanMember>>();
using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("entities").Where("clanid", 0, true))
using (var reader = cmd.CreateReader())
{
while (reader.Read())
{
uint clanId = reader.ReadUInt32("clanid");
ClanMember mem = new ClanMember()
{
UID = reader.ReadUInt32("Uid"),
Identifier = reader.ReadUInt32("Uid"),
Class = reader.ReadByte("Class"),
Donation = reader.ReadUInt32("ClanDonation"),
Level = reader.ReadByte("Level"),
Name = reader.ReadString("Name"),
Rank = (Ranks)reader.ReadByte("ClanRank"),
};
if (!dict.ContainsKey(clanId)) dict.Add(clanId, new Dictionary<uint, ClanMember>());
dict[clanId].Add(mem.UID, mem);
}
}
using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("clans"))
using (var reader = cmd.CreateReader())
{
while (reader.Read())
{
UInt32 HeroId = reader.ReadUInt32("LeaderId");
Clan c = new Clan(HeroId, reader.ReadUInt32("Identifier"), reader.ReadString("Name"), reader.ReadString("LeaderName"));
{
c.Announcement = reader.ReadString("Announcement");
c.BPTower = reader.ReadByte("BPTower");
c.ID = reader.ReadUInt32("Identifier");
c.Fund = reader.ReadUInt32("Fund");
c.LeaderId = reader.ReadUInt32("LeaderId");
c.Level = reader.ReadByte("Level");
c.LeaderName = reader.ReadString("LeaderName");
c.PoleKeeper = reader.ReadBoolean("PoleKeeper");
}
Kernel.Clans.Add(c.ID, c);
if (dict.ContainsKey(c.ID))
c.mMembers = dict[c.ID];
else
c.mMembers = new Dictionary<uint, ClanMember>();
}
}
foreach (Clan c in Kernel.Clans.Values)
{
c.LoadAssociates();
}
}
public static void DisbandClan(GameState c)
{
byte[] Packet = new byte[90];
Writer.WriteUInt16(82, 0, Packet);
Writer.WriteUInt16(1312, 2, Packet);
Writer.WriteUInt32(23, 4, Packet);
Writer.WriteUInt32(c.Player.UID, 8, Packet);
if (c.Team != null)
c.Team.GetClanShareBp(c);
Database.EntityTable.RemoveClan(c);
using (var cmd = new MySqlCommand(MySqlCommandType.DELETE))
cmd.Delete("clans", "leaderid", c.Player.UID).Execute();
foreach (var h in c.Player.GetClan.Members.Values)
{
var hero = Program.Values.SingleOrDefault(x => x.Player.UID == h.Identifier);
if (hero != null)
{
hero.Player.ClanRank = Clan.Ranks.None;
hero.Player.ClanName = "";
hero.Player.ClanId = 0;
hero.Send(Packet);
hero.SendScreenSpawn(hero.Player, true);
}
}
Kernel.Clans.Remove(c.Player.ClanId);
}
public static void SaveClan(Clan clan)
{
MySqlCommand cmd = new MySqlCommand(MySqlCommandType.UPDATE);
cmd.Update("Clans").Set("Fund", clan.Fund).Set("Level", clan.Level)
.Set("Bulletin", clan.Announcement).Set("Leader", clan.leaderName).Where("ClanID", clan.ID).Execute();
}
public static void TransferClan(string name)
{
MySqlCommand cmd3 = new MySqlCommand(MySqlCommandType.UPDATE);
cmd3.Update("entities")
.Set("ClanRank", 100).Where("Name", name).Execute();
}
private void LoadAssociates()
{
using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("clanrelation").Where("clanid", this.ID))
using (var reader = cmd.CreateReader())
{
while (reader.Read())
{
UInt32 AssociateId = reader.ReadUInt32("AssociatedId");
ClanRelations.RelationTypes Type = (ClanRelations.RelationTypes)(reader.ReadUInt32("Type"));
Clan c;
if (Kernel.Clans.TryGetValue(AssociateId, out c))
{
if (Type == ClanRelations.RelationTypes.Allies)
this.Allies.Add(AssociateId, c);
else
this.Enemies.Add(AssociateId, c);
}
}
}
}
public enum Types : byte
{
Info = 1,
Members = 4,
Recruit = 9,
AcceptRecruit = 10,
Join = 11,
AcceptJoinRequest = 12,
AddEnemy = 14,
DeleteEnemy = 15,
AddAlly = 17,
AcceptAlliance = 18,
DeleteAlly = 20,
TransferLeader = 21,
Kick = 22,
Quit = 23,
Announce = 24,
SetAnnouncement = 25,
Dedicate = 26,
MyClan = 29
}
public enum Ranks : ushort
{
ClanLeader = 100,
Spouse = 11,
Member = 10,
None = 0
}
public void Send(GameState client) { client.Send(mData); }
public byte[] ToArray() { return mData; }
public void Deserialize(byte[] buffer) { mData = buffer; }
public void SendClanShareBp(uint leaderUID, uint BpShare, Client.GameState client)
{
Network.GamePackets.Update update = new Network.GamePackets.Update(true) { UID = client.Player.UID };
update.Append(Network.GamePackets.Update.ClanShare Bp, leaderUID);
//update.Append4(Network.GamePackets.Update.ClanShar eBp, BpShare);
client.Send(update.ToArray());
}
}
}