First of all, make copy of your source, before you start doing anything with it. To avoid any bugs read carefully that guide. I have spent some time to get it work, so press Thank if it helps.
So lets start.
1.Create new class file Guild.cs under GS>Entities and paste whole code:
Code:
/* * Created by Bisiol. */ using System; using System.Collections; using System.Collections.Generic; using System.Timers; using CoEmu_v2_GameServer.Connections; using CoEmu_v2_GameServer.Structs; using CoEmu_v2_GameServer.Packets; using CoEmu_v2_GameServer.Database; namespace CoEmu_v2_GameServer.Entities { /// <summary> /// A conquer online guild. /// </summary> public class Guild { public ushort ID;//Guild ID public string Name;//Guild Name public member Leader;// Guild Leader public Dictionary<int, member> Members = new Dictionary<int, member>();//Members(normal and DL) public int Fund;//Guild Fund public uint MembersCount;//Number of all members public string Bulletin; //Bulletin /// <summary> /// Remove member from guild and sent message to guild members. /// </summary> public void PlayerQuits(Character Quitter) { Members.Remove(Quitter.ID); GuildMessage(Quitter.Name + " has left our guild."); MembersCount--; } public static void refresh(ClientSocket CSocket) { if (CSocket.Client.InGuild && Nano.Guilds.ContainsKey(CSocket.Client.gid)) { Guild gd = Nano.Guilds[CSocket.Client.gid]; CSocket.Send(ConquerPacket.GName(CSocket.Client.gid, CSocket.Client.gna)); CSocket.Send(ConquerPacket.Ginfo(gd, CSocket.Client)); CSocket.Send(ConquerPacket.Chat(0, "SYSTEM", CSocket.Client.Name, gd.Bulletin, Struct.ChatType.GuildBulletin)); } } public void GuildMessage(string Message) { if (Nano.ClientPool.ContainsKey(Leader.ID)) { Nano.ClientPool[Leader.ID].Send(ConquerPacket.Chat(0, "Guild", "All", Message, Struct.ChatType.Guild)); } foreach (KeyValuePair<int, member> mb in Members) { if (Nano.ClientPool.ContainsKey(mb.Value.ID)) { Nano.ClientPool[mb.Value.ID].Send(ConquerPacket.Chat(0, "Guild", "All", Message, Struct.ChatType.Guild)); } } } } public class member : IComparable<member> { public int ID; public string Name = ""; public bool isDL = false; public int lvl; public int Donation = 0; #region IComparable<member> Members public int CompareTo(member other) { return other.lvl.CompareTo(this.lvl); } #endregion } }
Code:
/* * Created by Bisiol. */ using System; using CoEmu_v2_GameServer.Connections; using CoEmu_v2_GameServer.Entities; namespace CoEmu_v2_GameServer.Packets { /// <summary> /// Guild packets. /// </summary> public partial class ConquerPacket { public static byte[] GSend(int GuildID, byte Type) { PacketBuilder Packet = new PacketBuilder(0x453, 12); Packet.Long(Type); Packet.Long(GuildID); return Packet.getFinal(); } public static byte[] Ginfo(Guild gd, Character ch) { PacketBuilder Packet = new PacketBuilder(0x452, 21 + gd.Leader.Name.Length); Packet.Long(gd.ID); //id Packet.Long(ch.donation); //don Packet.Long(gd.Fund); //fund Packet.Long(gd.MembersCount); //mc Packet.Int(ch.gpo); //pos Packet.Text(gd.Leader.Name); //gl return Packet.getFinal(); } public static byte[] GName(ushort ID, string Name) { PacketBuilder Packet = new PacketBuilder(1015, 11 + Name.Length); Packet.Short(ID); Packet.Int(0); Packet.Int(0); Packet.Int(3); Packet.Int(1); Packet.Int(Name.Length); for (int i = 0; i < Name.Length; i++) { Packet.Int(Convert.ToByte(Name[i])); } return Packet.getFinal(); } public static byte[] GList(long CharId, byte Type, string name, byte Count) { PacketBuilder Packet = new PacketBuilder(1015, 10 + name.Length); Packet.Long((uint)CharId); Packet.Int(Type); Packet.Int((byte)Count); Packet.Text(name); return Packet.getFinal(); } } }
Code:
#region CreateCharacter case 1001://Create Character
Code:
#region 3F7(1015),485(1107) guild case 1015://Send guild members { string PackMembers = ""; string OnlineGL = ""; string OfflineGL = ""; string OnlineDL = ""; string OfflineDL = ""; string Online = ""; string Offline = ""; Guild GD = Nano.Guilds[CSocket.Client.gid]; if (Nano.ClientPool.ContainsKey(GD.Leader.ID)) OnlineGL += Convert.ToChar((GD.Leader.Name + " " + GD.Leader.lvl.ToString() + " 1").Length) + GD.Leader.Name + " " + GD.Leader.lvl.ToString() + " 1"; else OfflineGL += Convert.ToChar((GD.Leader.Name + " " + GD.Leader.lvl.ToString() + " 0").Length) + GD.Leader.Name + " " + GD.Leader.lvl.ToString() + " 0"; List<member> ms = new List<member>(); foreach (KeyValuePair<int, member> mb in GD.Members) { ms.Add(mb.Value); } ms.Sort(); foreach (member m in ms) { if (m.isDL) { if (Nano.ClientPool.ContainsKey(m.ID)) OnlineDL += Convert.ToChar((m.Name + " " + m.lvl.ToString() + " 1").Length) + m.Name + " " + m.lvl.ToString() + " 1"; else OfflineDL += Convert.ToChar((m.Name + " " + m.lvl.ToString() + " 0").Length) + m.Name + " " + m.lvl.ToString() + " 0"; } else { if (Nano.ClientPool.ContainsKey(m.ID)) Online += Convert.ToChar((m.Name + " " + m.lvl.ToString() + " 1").Length) + m.Name + " " + m.lvl.ToString() + " 1"; else Offline += Convert.ToChar((m.Name + " " + m.lvl.ToString() + " 0").Length) + m.Name + " " + m.lvl.ToString() + " 0"; } } PackMembers = OnlineGL + OfflineGL + OnlineDL + OfflineDL + Online + Offline; CSocket.Send(ConquerPacket.GList(11, 11, PackMembers, (byte)(1 + GD.Members.Count))); break; } case 1107: { uint UID = BitConverter.ToUInt32(data, 8); byte Typee = Data[4]; switch (Typee) { case 1://Send Join request { ClientSocket target = Nano.ClientPool[(int)UID]; if (!CSocket.Client.InGuild && (target.Client.gpo == 100 || target.Client.gpo == 90)) { target.Send(ConquerPacket.GSend(CSocket.Client.ID, 1)); } break; } case 2://Accept join request { if (Nano.ClientPool.ContainsKey((int)UID)) { ClientSocket target = Nano.ClientPool[(int)UID]; if (!target.Client.InGuild) { Guild gd = Nano.Guilds[CSocket.Client.gid]; target.Client.gid = gd.ID; target.Client.gna = gd.Name; target.Client.gpo = 50; target.Client.InGuild = true; member m = new member(); m.ID = target.Client.ID; m.Name = target.Client.Name; m.lvl = target.Client.Level; gd.Members.Add(m.ID, m); gd.MembersCount++; target.Send(ConquerPacket.GName(target.Client.gid, target.Client.gna)); target.Send(ConquerPacket.Ginfo(gd, target.Client)); target.Send(ConquerPacket.Chat(0, "SYSTEM", target.Client.Name, gd.Bulletin, Struct.ChatType.GuildBulletin)); foreach (KeyValuePair<int, Guild> GD in Nano.Guilds) { CSocket.Send(ConquerPacket.GName(GD.Value.ID, GD.Value.Name)); } Spawn.MeTo(target); Database.Database.UpdateGuild(gd); } } break; } case 3://Leave the guild { if (CSocket.Client.InGuild && CSocket.Client.gpo != 100) { Guild gd = Nano.Guilds[CSocket.Client.gid]; CSocket.Send(ConquerPacket.GSend(CSocket.Client.gid, 19)); gd.PlayerQuits(CSocket.Client); CSocket.Client.donation = 0; CSocket.Client.gid = 0; CSocket.Client.gna = ""; CSocket.Client.gpo = 50; CSocket.Client.InGuild = false; Spawn.MeTo(CSocket); Database.Database.UpdateGuild(gd); } break; } case 6://Get Guild Name { CSocket.Send(ConquerPacket.GName((ushort)UID, Nano.Guilds[(int)UID].Name)); Guild.refresh(CSocket); Spawn.MeTo(CSocket); break; } case 11://Donate { if (CSocket.Client.InGuild) { if (Nano.Guilds.ContainsKey(CSocket.Client.gid)) { Guild GD = Nano.Guilds[CSocket.Client.gid]; int Amount = BitConverter.ToInt32(Data, 8); if (CSocket.Client.Money >= Amount) { GD.Fund += Amount; CSocket.Client.Money -= Amount; CSocket.Client.donation += Amount; if(CSocket.Client.gpo==100) GD.Leader.Donation = CSocket.Client.donation; else GD.Members[CSocket.Client.ID].Donation = CSocket.Client.donation; CSocket.Send(ConquerPacket.Ginfo(GD, CSocket.Client)); CSocket.Send(ConquerPacket.Status(CSocket, 2, CSocket.Client.Money, Struct.StatusTypes.InvMoney)); Database.Database.UpdateGuild(GD); foreach (KeyValuePair<int, ClientSocket> to in Nano.ClientPool) { if (CSocket.Client.Map == to.Value.Client.Map) if (Calculation.CanSeePlus(CSocket.Client.X, CSocket.Client.Y, to.Value.Client.X, to.Value.Client.Y)) to.Value.Send(ConquerPacket.Chat(0, "SYSTEM", "ALL", CSocket.Client.Name + " has donated " + Amount.ToString() + " silvers to " + CSocket.Client.gna + ".", Struct.ChatType.Top)); } } } } break; } case 12://Guild status { Guild.refresh(CSocket); break; } } break; } #endregion
Code:
public Timer UpStam; public Timer FlashTimer;
Code:
// guild public bool InGuild = false; public ushort gid = 0; public int gpo = 0; public string gna = ""; public int donation = 0;
Code:
public static bool CanSee(int SeeX, int SeeY, int MyX, int MyY) { return (Math.Max(Math.Abs(SeeX - MyX), Math.Abs(SeeY - MyY)) <= 15); }
Code:
public static bool CanSeePlus(int SeeX, int SeeY, int MyX, int MyY) { return (Math.Max(Math.Abs(SeeX - MyX), Math.Abs(SeeY - MyY)) <= 25); }
Code:
CSocket.Send(ConquerPacket.Chat(0, "SYSTEM", CSocket.Client.Name, "You have gained three attribute points! Use them wiesely!", Struct.ChatType.Top));
Code:
if (CSocket.Client.InGuild) if (CSocket.Client.gpo == 100) Nano.Guilds[CSocket.Client.gid].Leader.lvl = CSocket.Client.Level; else Nano.Guilds[CSocket.Client.gid].Members[CSocket.Client.ID].lvl = CSocket.Client.Level;
Code:
public static Dictionary<int, Struct.TerrainNPC> TerrainNpcs = new Dictionary<int, Struct.TerrainNPC>();
Code:
public static Dictionary<int, Guild> Guilds = new Dictionary<int, Guild>();
Code:
public class Spawn {
Code:
public static void MeTo(ClientSocket CSocket) { try { Monitor.Enter(Nano.ClientPool); foreach (KeyValuePair<int, ClientSocket> Locals in Nano.ClientPool) { ClientSocket C = Locals.Value; if ((int)C.Client.Map == (int)CSocket.Client.Map && CSocket.Client.ID != C.Client.ID) { if (Calculation.CanSee(CSocket.Client.X, CSocket.Client.Y, C.Client.X, C.Client.Y)) { C.Send(ConquerPacket.General(CSocket.Client.ID, CSocket.Client.PrevX, CSocket.Client.PrevY, 0, 0, 0, Struct.DataType.EntityRemove)); CSocket.Send(ConquerPacket.General(C.Client.ID, C.Client.PrevX, C.Client.PrevY, 0, 0, 0, Struct.DataType.EntityRemove)); All(C); All(CSocket); CSocket.Send(ConquerPacket.SpawnCharacter(C)); C.Send(ConquerPacket.SpawnCharacter(CSocket)); } } } Spawn.All(CSocket); } catch (Exception e) { Console.WriteLine(e.ToString()); } finally { Monitor.Exit(Nano.ClientPool); } }
Code:
case Struct.ChatType.Friend: { ConquerPacket.ToServer(ConquerPacket.Chat(0, From, To, Message, Struct.ChatType.Friend), CSocket.Client.ID); break; }
Code:
case Struct.ChatType.GuildBulletin: { if (CSocket.Client.InGuild) { if (Nano.Guilds.ContainsKey(CSocket.Client.gid)) { Nano.Guilds[CSocket.Client.gid].Bulletin = Message; CSocket.Send(ConquerPacket.Chat(0, "SYSTEM", CSocket.Client.Name, Nano.Guilds[CSocket.Client.gid].Bulletin, Struct.ChatType.GuildBulletin)); Database.Database.UpdateGuild(Nano.Guilds[CSocket.Client.gid]); } } break; } case Struct.ChatType.Guild: { if (Nano.ClientPool.ContainsKey(Nano.Guilds[CSocket.Client.gid].Leader.ID)) if (Nano.Guilds[CSocket.Client.gid].Leader.ID != CSocket.Client.ID) Nano.ClientPool[Nano.Guilds[CSocket.Client.gid].Leader.ID].Send(ConquerPacket.Chat(0, CSocket.Client.Name, To, Message, Type)); foreach (KeyValuePair<int, member> M in Nano.Guilds[CSocket.Client.gid].Members) { if(Nano.ClientPool.ContainsKey(M.Value.ID)) if (M.Value.ID != CSocket.Client.ID) Nano.ClientPool[M.Value.ID].Send(ConquerPacket.Chat(0, CSocket.Client.Name, To, Message, Type)); } break; }
Code:
Client.Vitality = Convert.ToInt32(DR["Vit"]);
Code:
//Guild Client.gid = Convert.ToUInt16(DR["Guild"]); Client.gpo = Convert.ToInt32(DR["GRank"]); Client.donation = Convert.ToInt32(DR["GDonation"]); if (Client.gid != 0 && Nano.Guilds.ContainsKey(Client.gid)) { if (Nano.Guilds[Client.gid].Leader.ID != Client.ID) { if (Nano.Guilds[Client.gid].Members.ContainsKey(Client.ID)) { Nano.Guilds[Client.gid].Members[Client.ID].Donation = Client.donation; Client.gna = Nano.Guilds[Client.gid].Name; Client.InGuild = true; if (Nano.Guilds[Client.gid].Members[Client.ID].isDL) { Client.gpo = 90; } else { Client.gpo = 50; } } else { Client.InGuild = false; Client.gna = ""; Client.gpo = 50; Client.gid = 0; } } else { Nano.Guilds[Client.gid].Leader.Donation = Client.donation; Client.InGuild = true; Client.gna = Nano.Guilds[Client.gid].Name; } } //
Code:
public static void DeleteGuild(int ID) { MySqlCommand Cmd = new MySqlCommand("DELETE FROM `guilds` Where `GuildID` = " + ID + "", DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); }
Code:
public static void LoadGuilds() { MySqlCommand Cmd = new MySqlCommand("SELECT * FROM `guilds`", DatabaseConnection.NewConnection()); MySqlDataReader DR = Cmd.ExecuteReader(CommandBehavior.CloseConnection); MySqlCommand Cmd2 = new MySqlCommand("SELECT Level, CharId FROM `characters`", DatabaseConnection.NewConnection()); MySqlDataReader DR2 = Cmd2.ExecuteReader(CommandBehavior.CloseConnection); Dictionary<int, int> ChLvl = new Dictionary<int, int>(); while (DR2.Read()) { int id = Convert.ToInt32(DR2["CharID"]); int lvl = Convert.ToInt32(DR2["Level"]); ChLvl.Add(id, lvl); } while (DR.Read()) { Guild GD = new Guild(); GD.ID = Convert.ToUInt16(DR["GuildID"]); GD.Name = Convert.ToString(DR["Name"]); GD.Bulletin = Convert.ToString(DR["Bulletin"]); GD.Fund = Convert.ToInt32(DR["Fund"]); member Gl = new member(); string tmp = Convert.ToString(DR["Leader"]); string[] ld = tmp.Split(':'); Gl.ID = int.Parse(ld[0]); Gl.Name = ld[1]; Gl.lvl = ChLvl[Gl.ID]; GD.Leader = Gl; GD.MembersCount = 1; tmp = Convert.ToString(DR["Members"]); if (tmp != "") { string[] mbs = tmp.Split('~'); foreach (string mbr in mbs) { member m = new member(); string[] mb = mbr.Split(':'); m.ID = int.Parse(mb[0]); m.Name = mb[1]; if (mb[2] == "t") m.isDL = true; m.lvl = ChLvl[m.ID]; GD.Members.Add(m.ID, m); GD.MembersCount++; } } if (!Nano.Guilds.ContainsKey(GD.ID)) { Nano.Guilds.Add(GD.ID, GD); } } Console.WriteLine("[GameServer] Loaded " + Nano.Guilds.Count + " guilds from the DB."); DR.Close(); Cmd.Dispose(); DR2.Close(); Cmd2.Dispose(); } public static void NewGuild(Guild GD,Character Creator) { MySqlCommand Cmd = new MySqlCommand("INSERT INTO guilds(GuildID, Name, Bulletin, Fund, Leader) VALUES(" + GD.ID + ",'" + GD.Name + "','" + GD.Bulletin + "', 1000000,'" + GD.Leader.ID+":"+GD.Leader.Name + "')", DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); Cmd = new MySqlCommand("UPDATE `characters` SET `GDonation` = " + Creator.donation + ", `Guild` = " + GD.ID + ", `GRank` = 100 WHERE `CharID` = " + Creator.ID , DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); } public static void UpdateGuild(Guild GD) { MySqlCommand Cmd; string packmemb = ""; bool first = true; foreach (KeyValuePair<int, member> m in GD.Members) { int rank = 50; string rank2="f"; if (m.Value.isDL){ rank = 90; rank2="t"; } Cmd = new MySqlCommand("UPDATE `characters` SET `GDonation` = " + m.Value.Donation + ", `Guild` = " + GD.ID + ", `GRank` = "+rank+" WHERE `CharID` = " + m.Value.ID, DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); if (first) { packmemb = m.Value.ID + ":" + m.Value.Name + ":" + rank2; first = false; } else packmemb += "~" + m.Value.ID + ":" + m.Value.Name + ":" + rank2; } Cmd = new MySqlCommand("UPDATE `characters` SET `GDonation` = " + GD.Leader.Donation + ", `Guild` = " + GD.ID + ", `GRank` = 100 WHERE `CharID` = " + GD.Leader.ID, DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); Cmd = new MySqlCommand("UPDATE `guilds` SET `Bulletin` = '" + GD.Bulletin + "', `Fund` = " + GD.Fund + ", `Members` = '" + packmemb + "', `Leader` = '" + GD.Leader.ID + ":" + GD.Leader.Name + "' WHERE `GuildID` = " + GD.ID, DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); } public static void DeleteGuild(int ID) { MySqlCommand Cmd = new MySqlCommand("DELETE FROM `guilds` Where `GuildID` = " + ID, DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); Cmd = new MySqlCommand("UPDATE `characters` SET `GDonation` = 0, `Guild` = 0, `GRank` = 50 WHERE `CharID` = " + Nano.Guilds[ID].Leader.ID, DatabaseConnection.NewConnection()); Cmd.ExecuteNonQuery(); Cmd.Connection.Close(); Cmd.Connection.Dispose(); Cmd.Dispose(); }
Code:
Packet.Short(0); //TODO: Guilds Packet.Int(0); //Unknown Packet.Int(0); //GuildRank
Code:
Packet.Short(CSocket.Client.gid); //TODO: Guilds Packet.Int(0); //Unknown Packet.Int(CSocket.Client.gpo); //GuildRank
Code:
Database.Database.LoadGuilds();
Code:
public static void NpcTalk(ClientSocket CSocket, int ID, int LinkBack)
Code:
public static void NpcTalk(ClientSocket CSocket, int ID, int LinkBack,byte[] data)
Code:
using CoEmu_v2_GameServer.Calculations;
Code:
using CoEmu_v2_GameServer.Entities;
Code:
case 10003: // Guild Controler { if (LinkBack == 0) { Text("I am in charge of all the guilds in TwinCity, You may consult me for anything related to the guilds.", CSocket); Link("Create a Guild.", 1, CSocket); Link("Deputize.", 2, CSocket); Link("Remove from Office.", 7, CSocket); Link("Disband.", 3, CSocket); Link("No, thanks.", 255, CSocket); End(CSocket); } else if (LinkBack == 1) { if (!CSocket.Client.InGuild) { Text("It will cost you 1,000,000 silvers, and you need to be level 95 at least.", CSocket); Input(4, CSocket); Link("No, thanks.", 255, CSocket); End(CSocket); } else { Text("Sorry. You in a Guild.", CSocket); Link("Ahhh.", 255, CSocket); End(CSocket); } } else if (LinkBack == 2) { if (CSocket.Client.gpo == 100) { int dlcount = 0; foreach (KeyValuePair<int, member> m in Nano.Guilds[CSocket.Client.gid].Members) if (m.Value.isDL) dlcount++; if (dlcount < 6) { Text("Enter the name of your guildmate you want to deputize.", CSocket); Input(5, CSocket); Link("No, thanks.", 255, CSocket); End(CSocket); } else { Text("Sorry. Your guild already have 6 DLs", CSocket); Link("Ahhh.", 255, CSocket); End(CSocket); } } else { Text("Sorry. Only GuildLeader can promote members.", CSocket); Link("Ahhh.", 255, CSocket); End(CSocket); } } else if (LinkBack == 3) { if (CSocket.Client.gpo == 100) { if (Nano.Guilds[CSocket.Client.gid].Members.Count == 0) { Text("Are you sure you want to disband your guild?", CSocket); Link("Yes.", 6, CSocket); Link("No, actually.", 255, CSocket); End(CSocket); } else { Text("You Cant Disband your guild until you have members in.", CSocket); Link("OK.", 255, CSocket); End(CSocket); } } else { Text("Only guild leader can disband his/her guild.", CSocket); Link("Ok.", 255, CSocket); End(CSocket); } } else if (LinkBack == 4) { if (!CSocket.Client.InGuild) { if (CSocket.Client.Money >= 1000000) { if (CSocket.Client.Level >= 95) { string str = ""; for (int i = 14; i < 14 + data[13]; i++) { str += Convert.ToChar(data[i]); } bool chk = true; foreach (KeyValuePair<int, Guild> gd in Nano.Guilds) { if (gd.Value.Name == str) chk = false; } if (chk) { int ngid; do { ngid = Nano.Rand.Next(100, 33333); } while (Nano.Guilds.ContainsKey(ngid)); Money(-1000000, CSocket); Guild GD = new Guild(); GD.Bulletin = "Enter Bulletin Here"; GD.Fund = 1000000; GD.ID = (ushort)ngid; GD.Leader = new member(); GD.Leader.ID = CSocket.Client.ID; GD.Leader.lvl = CSocket.Client.Level; GD.Leader.Name = CSocket.Client.Name; GD.Name = str; GD.MembersCount++; Nano.Guilds.Add(ngid, GD); CSocket.Client.gid = GD.ID; CSocket.Client.gna = str; CSocket.Client.gpo = 100; CSocket.Client.InGuild = true; Guild.refresh(CSocket); foreach (KeyValuePair<int, ClientSocket> C in Nano.ClientPool) C.Value.Send(ConquerPacket.Chat(0, "SYSTEM", "ALL", "Congratulations " + CSocket.Client.Name + " has set up " + str + " successfully!", Struct.ChatType.Talk)); Database.Database.NewGuild(GD, CSocket.Client); } else Text("Guild name are taken.", CSocket); Link("OK.", 255, CSocket); End(CSocket); break; } else Text("You aren't high level enough.", CSocket); Link("OK.", 255, CSocket); End(CSocket); break; } Text("You don't have enough silvers.", CSocket); Link("OK.", 255, CSocket); End(CSocket); break; } Text("Congratulations You have set up a guild.", CSocket); Link("OK.", 255, CSocket); End(CSocket); break; } else if (LinkBack == 5) { string str = ""; for (int i = 14; i < 14 + data[13]; i++) { str += Convert.ToChar(data[i]); } bool t = false; foreach (KeyValuePair<int, member> m in Nano.Guilds[CSocket.Client.gid].Members) if (m.Value.Name == str) { t = true; m.Value.isDL = true; if (Nano.ClientPool.ContainsKey(m.Key)) { Nano.ClientPool[m.Value.ID].Client.gpo = 90; Guild.refresh(Nano.ClientPool[m.Value.ID]); Spawn.All(CSocket); break; } else { Text("The player you want to deputize must be in your guild and online.", CSocket); Link("OK.", 255, CSocket); End(CSocket); break; } } if (!t) { Text("You do not have that member.", CSocket); Link("OK.", 255, CSocket); End(CSocket); } } else if (LinkBack == 6) { foreach (KeyValuePair<int, ClientSocket> C in Nano.ClientPool) C.Value.Send(ConquerPacket.Chat(0, "SYSTEM", "ALL", CSocket.Client.gna + " has been disbanded.", Struct.ChatType.Talk)); Database.Database.DeleteGuild(CSocket.Client.gid); CSocket.Send(ConquerPacket.GSend(CSocket.Client.gid, 19)); CSocket.Client.gid = 0; CSocket.Client.gna = ""; CSocket.Client.gpo = 50; Nano.Guilds.Remove(CSocket.Client.gid); } else if (LinkBack == 7) { if (CSocket.Client.gpo == 100) { Text("Enter the name of your guildmate with you want remove from office.", CSocket); Input(8, CSocket); Link("No, thanks.", 255, CSocket); End(CSocket); } else { Text("Sorry. Only GuildLeader can remove DLs.", CSocket); Link("Ahhh.", 255, CSocket); End(CSocket); } } else if (LinkBack == 8) { string str = ""; for (int i = 14; i < 14 + data[13]; i++) { str += Convert.ToChar(data[i]); } bool t = false; foreach (KeyValuePair<int, member> m in Nano.Guilds[CSocket.Client.gid].Members) if (m.Value.Name == str) { t = true; m.Value.isDL = false; if (Nano.ClientPool.ContainsKey(m.Key)) { Nano.ClientPool[m.Value.ID].Client.gpo = 50; Guild.refresh(Nano.ClientPool[m.Value.ID]); Spawn.All(CSocket); break; } else { Text("The player you want to remove DL must be online.", CSocket); Link("OK.", 255, CSocket); End(CSocket); break; } } if (!t) { Text("You do not have that member.", CSocket); Link("OK.", 255, CSocket); End(CSocket); } } break; }
Code:
case 2031: //Initial NPC talk
Code:
case 2031: //Initial NPC talk { int ID = ReadLong(Data, 4); Handler.NpcTalk(CSocket, ID, 0); break; } case 2032: //Reply NPC Talk { int ID = CSocket.Client.LastNPC; int LinkBack = Data[10]; if(LinkBack != 255) Handler.NpcTalk(CSocket, ID, LinkBack); break; }
Code:
case 2031: //Initial NPC talk { int ID = ReadLong(Data, 4); Handler.NpcTalk(CSocket, ID, 0,data); break; } case 2032: //Reply NPC Talk { int ID = CSocket.Client.LastNPC; int LinkBack = Data[10]; if(LinkBack != 255) Handler.NpcTalk(CSocket, ID, LinkBack,data); break; }
Code:
try { Monitor.Enter(Nano.ClientPool); Nano.ClientPool.Add(CSocket.Client.ID, CSocket);
Code:
foreach (KeyValuePair<int, Guild> GD in Nano.Guilds) CSocket.Send(ConquerPacket.GName(GD.Value.ID, GD.Value.Name)); Guild.refresh(CSocket); Spawn.MeTo(CSocket);
Code:
ALTER TABLE `guilds` CHANGE `Members` `Members` TEXT CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ALTER TABLE `guilds` CHANGE `Leader` `Leader` VARCHAR( 26 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL