using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ConquerEmulator.Game;
using ConquerEmulator.ServerSystem;
namespace ConquerEmulator.Features
{
public enum GuildRank : byte
{
Member = 50,
InternMgr = 60,
DeputyMgr = 70,
BranchMgr = 80,
DeputyManager = 90,
GuildLeader = 100
}
public class MemberInfo
{
public uint MembID;
public string MembName;
public uint Donation;
public byte Level;
public GuildRank Rank;
public ushort MyGuildID;
public string MemberString
{
get
{
string e = "";
e += MembName + ' ' + Level + ' ' + Convert.ToByte(Kernel.Clients.Contains(MembID));
e = Convert.ToChar((byte)e.Length) + e;
return e;
}
}
public Character Info
{
get
{
return (Character)Kernel.Clients[MembID];
}
}
public void WriteThis(BinaryWriter BW)
{
BW.Write(MembID);
BW.Write(MembName);
BW.Write(Donation);
BW.Write(Level);
BW.Write((byte)Rank);
BW.Write(MyGuildID);
}
public void ReadThis(BinaryReader BR)
{
MembID = BR.ReadUInt32();
MembName = BR.ReadString();
Donation = BR.ReadUInt32();
Level = BR.ReadByte();
Rank = (GuildRank)BR.ReadByte();
MyGuildID = BR.ReadUInt16();
}
}
class Guilds
{
public static Hashtable AllTheGuilds = new Hashtable();
public static bool ValidName(string Name)
{
if (Name.Length < 3 || Name.Length > 16)
return false;
foreach (Guild G in AllTheGuilds.Values)
if (G.GuildName == Name)
return false;
return true;
}
public static void SaveGuilds()
{
FileStream FS = new FileStream(@"C:\OldCODB\Guilds.dat", FileMode.OpenOrCreate);
BinaryWriter BW = new BinaryWriter(FS);
BW.Write(AllTheGuilds.Count);
foreach (Guild G in AllTheGuilds.Values)
G.SaveThis(BW);
if (GuildWars.LastWinner != null)
BW.Write(GuildWars.LastWinner.GuildID);
else
BW.Write((ushort)0);
BW.Close();
FS.Close();
}
public static void LoadGuilds()
{
if (File.Exists(@"C:\OldCODB\Guilds.dat"))
{
FileStream FS = new FileStream(@"C:\OldCODB\Guilds.dat", FileMode.Open);
BinaryReader BR = new BinaryReader(FS);
int GuildsCount = BR.ReadInt32();
for (int i = 0; i < GuildsCount; i++)
{
Guild G = new Guild(BR);
AllTheGuilds.Add(G.GuildID, G);
}
GuildWars.LastWinner = (Guild)AllTheGuilds[BR.ReadUInt16()];
}
}
public static void CreateNewGuild(string GName, ushort GID, Character Creator)
{
Guild G = new Guild(GID, GName);
MemberInfo M = new MemberInfo();
M.Rank = GuildRank.GuildLeader;
M.MembID = Creator.EntityID;
M.Level = Creator.Level;
M.MembName = Creator.Name;
M.Donation = 1000000;
M.MyGuildID = GID;
Creator.MyGuild = G;
Creator.GuildDonation = 1000000;
Creator.GuildRank = GuildRank.GuildLeader;
G.Creator = M;
Creator.MembInfo = M;
((Hashtable)G.Members[(byte)100]).Add(M.MembID, M);
AllTheGuilds.Add(G.GuildID, G);
}
}
public class Guild
{
public MemberInfo Creator;
public Hashtable Members = new Hashtable();
public uint Fund;
public uint Wins;
public ushort GuildID;
public string GuildName;
public string Bulletin = "A guild";
public Guild(ushort guildid, string guildname)
{
Fund = 1000000;
GuildID = guildid;
GuildName = guildname;
Hashtable CreatorHt = new Hashtable();
Hashtable DLs = new Hashtable();
Hashtable Membs = new Hashtable();
Members.Add((byte)100, CreatorHt);
Members.Add((byte)90, DLs);
Members.Add((byte)50, Membs);
}
public void SaveThis(BinaryWriter BW)
{
Creator.WriteThis(BW);
BW.Write(MembersCount);
foreach (Hashtable H in Members.Values)
foreach (MemberInfo M in H.Values)
M.WriteThis(BW);
BW.Write(Fund);
BW.Write(GuildID);
BW.Write(GuildName);
BW.Write(Bulletin);
BW.Write(Wins);
}
public Guild(BinaryReader BR)
{
Creator = new MemberInfo();
Creator.ReadThis(BR);
int MembCount = BR.ReadInt32();
Hashtable CreatorHt = new Hashtable();
Hashtable DLs = new Hashtable();
Hashtable NMs = new Hashtable();
for (int i = 0; i < MembCount; i++)
{
MemberInfo M = new MemberInfo();
M.ReadThis(BR);
if (M.Rank == GuildRank.GuildLeader)
CreatorHt.Add(M.MembID, M);
else if (M.Rank == GuildRank.DeputyManager)
DLs.Add(M.MembID, M);
else if (M.Rank == GuildRank.Member)
NMs.Add(M.MembID, M);
}
Members.Add((byte)100, CreatorHt);
Members.Add((byte)90, DLs);
Members.Add((byte)50, NMs);
Fund = BR.ReadUInt32();
GuildID = BR.ReadUInt16();
GuildName = BR.ReadString();
Bulletin = BR.ReadString();
Wins = BR.ReadUInt32();
}
public int MembersCount
{
get
{
int e = 0;
foreach (Hashtable H in Members.Values)
foreach (MemberInfo M in H.Values)
e++;
return e;
}
}
public void Disband(Character Cc)
{
foreach (DictionaryEntry DE in (Hashtable)Members[(byte)50])
{
MemberInfo M = (MemberInfo)DE.Value;
Character C = M.Info;
if (C != null)
{
C.MyClient.AddSend(GuildPacket.SendGuild(GuildID, 19));
C.MyGuild = null;
C.GuildRank = 0;
C.GuildDonation = 0;
ClientSpawn.Spawn(C, false);
}
}
foreach (DictionaryEntry DE in (Hashtable)Members[(byte)90])
{
MemberInfo M = (MemberInfo)DE.Value;
Character C = M.Info;
if (C != null)
{
C.MyClient.AddSend(GuildPacket.SendGuild(GuildID, 19));
C.MyGuild = null;
C.GuildRank = 0;
C.GuildDonation = 0;
ClientSpawn.Spawn(C, false);
}
}
foreach (DictionaryEntry DE in (Hashtable)Members[(byte)100])
{
MemberInfo M = (MemberInfo)DE.Value;
Character C = M.Info;
if (C != null)
{
C.MyClient.AddSend(GuildPacket.SendGuild(GuildID, 19));
C.MyGuild = null;
C.GuildRank = 0;
C.GuildDonation = 0;
ClientSpawn.Spawn(C, false);
}
}
Members = null;
Creator = null;
WorldMessage.Send("SYSTEM", Cc.Name + " have disbanned " + GuildName + "!", 2000, 0);
Guilds.AllTheGuilds.Remove(GuildID);
}
public bool AddMember(MemberInfo I, bool New)
{
if (Find(I.MembID) == null)
{
((Hashtable)Members[(byte)50]).Add(I.MembID, I);
if (New)
GuildMsg("SYSTEM", "ALL", I.MembName + " has joined our guild.", 0);
return true;
}
else return false;
}
public void NewBulletin(TQPacket Data, string B)
{
Bulletin = B;
foreach (Hashtable H in Members.Values)
{
foreach (MemberInfo M in H.Values)
{
if (Kernel.Clients.Contains(M.MembID))
{
Character C = (Character)Kernel.Clients[M.MembID];
C.MyClient.AddSend(Data);
}
}
}
}
public MemberInfo Find(uint UID)
{
foreach (Hashtable H in Members.Values)
{
if (H.Contains(UID))
return (MemberInfo)H[UID];
}
return null;
}
public void MemberLeaves(uint MID, bool Kick)
{
MemberInfo M = Find(MID);
if (M != null)
{
((Hashtable)Members[(byte)M.Rank]).Remove(MID);
if (Kick)
GuildMsg("SYSTEM", "ALL", M.MembName + " has been kicked out of our guild.", 0);
else
GuildMsg("SYSTEM", "ALL", M.MembName + " has left our guild.", 0);
}
}
public void MemberLeaves(string Name, bool Kick)
{
MemberInfo M = MembOfName(Name);
if (M != null)
{
((Hashtable)Members[(byte)M.Rank]).Remove(M.MembID);
if (Kick)
GuildMsg("SYSTEM", "ALL", M.MembName + " has been kicked out of our guild.", 0);
else
GuildMsg("SYSTEM", "ALL", M.MembName + " has left our guild.", 0);
Character C = M.Info;
if (C != null)
{
C.MyGuild = null;
C.GuildDonation = 0;
C.GuildRank = (GuildRank)0;
C.MyClient.AddSend(GuildPacket.SendGuild(0, 19));
ClientSpawn.Spawn(C, false);
}
}
}
public void GuildMsg(string From, string To, string Msg, uint Mesh)
{
foreach (Hashtable H in Members.Values)
{
foreach (MemberInfo M in H.Values)
{
if (Kernel.Clients.Contains(M.MembID))
{
Character C = (Character)Kernel.Clients[M.MembID];
C.MyClient.AddSend(ChatPacket.ChatMessage(C.MyClient.MessageID, From, To, Msg, 2004, Mesh));
}
}
}
}
public void GuildMsg(TQPacket Data, uint Sender)
{
foreach (Hashtable H in Members.Values)
{
foreach (MemberInfo M in H.Values)
{
if (Kernel.Clients.Contains(M.MembID))
{
Character C = (Character)Kernel.Clients[M.MembID];
if (C.EntityID != Sender)
{
C.MyClient.AddSend(Data);
C.MyClient.EndSend();
}
}
}
}
}
public MemberInfo MembOfName(string Name)
{
foreach(MemberInfo M in ((Hashtable)Members[(byte)50]).Values)
if (M.MembName == Name)
return M;
return null;
}
internal void Disband()
{
throw new NotImplementedException();
}
}
}
Most likely the file stream isnt being closed after 1 save, so the next save it cant read it again. Search for FS.Close();, if u cant find it, thats the issue.
public static void LoadGuilds()
{
if (File.Exists(@"C:\OldCODB\Guilds.dat"))
{
FileStream FS = new FileStream(@"C:\OldCODB\Guilds.dat", FileMode.Open);
BinaryReader BR = new BinaryReader(FS);
int GuildsCount = BR.ReadInt32();
for (int i = 0; i < GuildsCount; i++)
{
Guild G = new Guild(BR);
AllTheGuilds.Add(G.GuildID, G);
}
GuildWars.LastWinner = (Guild)AllTheGuilds[BR.ReadUInt16()];
}
}
with this
Code:
public static void LoadGuilds()
{
if (File.Exists(@"C:\OldCODB\Guilds.dat"))
{
FileStream FS = new FileStream(@"C:\OldCODB\Guilds.dat", FileMode.Open);
BinaryReader BR = new BinaryReader(FS);
int GuildsCount = BR.ReadInt32();
for (int i = 0; i < GuildsCount; i++)
{
Guild G = new Guild(BR);
AllTheGuilds.Add(G.GuildID, G);
}
GuildWars.LastWinner = (Guild)AllTheGuilds[BR.ReadUInt16()];
BR.Close();
FS.Close();
}
}
Here we go again sohaib, one NPC Release, 10 requests? Is that how you are not like 1 month ago?
SIEGE guild problem!!! HELP! 07/22/2010 - Dekaron Private Server - 1 Replies Hy!
I using DK difference client/servefiles/sql db and when I tried to fix the siege with a script (see below) I got this guild error:
http://kepfeltoltes.hu/100720/690529342deka_www.k epfeltoltes.hu_.png
I tried two version:
-I run the script. The script is create a new guild (MadeInHungary) and the picture is the scripts effect .
-I create manually a new guild in the client (MadeInHungary) and I run the script. I restart the client and Im kicked from the new guild and the picture is...
[Help]Guild Problem 07/20/2010 - CO2 Private Server - 3 Replies Hey guys...I've been wondering if some of you can tip me with a good "Pass Leadership" code...
I've made this one
#region Leadership
else if (Control == 7)
{
if ((GC.MyChar.MyGuild != null && GC.MyChar.GuildRank == NewestCOServer.Features.GuildRank.GuildLeader))
{
...
problem with guild 07/18/2010 - Dekaron Private Server - 3 Replies I had problem with creating guild emblem so i checked tables, there wasnt guild ranks so i writed all masterscodes again but if i go in game and try to make a guild it says fail to create a guild! Some1 have any idea what may be a problem?
Guild problem 01/03/2009 - Dekaron Private Server - 8 Replies Hey.
Recently, there's been a bug or something in my guild. Whenever you press "g", you instantly crash. Everyone in my guild has the problem, and i was just wondering if there's another way to leave the guild.
Cheers,
Zenuki