anyone know how to set my nobility only able to donate with gold without cps , my source is 5732 and this is the nobility.cs incase u need it to help me..
Code:
using System;
using System.Linq;
using System.Collections.Generic;
using ShekoProject.Network.GamePackets;
using System.IO;
using KinSocket;
namespace ShekoProject.Game.ConquerStructures
{
public class Nobility
{
public static ulong MaxDonation = 0;
public static ulong MaxDonation1 = 0;
public static ulong MaxDonation2 = 0;
public static ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks GetFemale(ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks rank)
{
switch (rank)
{
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Knight:
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Lady;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Lady:
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Baroness:
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Countess:
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Dutchess:
return rank;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Baron:
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Baroness;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Earl:
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Countess;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Duke:
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Dutchess;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Prince:
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Princess;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.King:
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Queen;
}
return rank;
}
public static ulong GetMinimumDonation(ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks Rank)
{
switch (Rank)
{
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Knight:
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Lady:
return 0x1c9c380L;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Baron:
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Baroness:
return 0x5f5e100L;
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Earl:
case ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Countess:
return 0xbebc200L;
}
return MinimumDonationFor(Rank);
}
public static SafeDictionary<uint, NobilityInformation> Board = new SafeDictionary<uint, NobilityInformation>(10000);
public static List<NobilityInformation> BoardList = new List<NobilityInformation>(10000);
public static ulong MinimumDonationFor(ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks Rank)
{
ulong num = 0L;
for (int c = 0; c < BoardList.Count; c++)
{
sbyte place = 0;
ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks commoner = ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Commoner;
uint identifier = BoardList[c].EntityUID;
ulong donation = BoardList[c].Donation;
GetNobilityStats(identifier, donation, ref place, ref commoner);
if ((commoner == Rank) && ((donation < num) || (num == 0L)))
{
num = donation;
}
}
return (num + ((ulong)1L));
}
public static void GetNobilityStats(uint Identifier, ulong Donation, ref sbyte Place, ref ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks Rank)
{
sbyte place = 0;
ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks commoner = ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Commoner;
for (int c = 0; c < 50; c++)
{
if (BoardList[c].EntityUID == Identifier)
{
break;
}
// if (place < 3000)
{
place = (sbyte)(place + 1);
}
}
//Place = (place < 3000) ? place : ((sbyte)(-1));
if (Donation == 0L)
{
Place = -1;
}
commoner = GetRanking(Donation, place);
Rank = commoner;
}
public static ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks GetRanking(ulong Donation, sbyte Place)
{
if ((Donation != 0L) && (Place >= 0))
{
if ((Place < Database.rates.king) && (Donation > 0L))
{
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.King;
}
if ((Place < 0x12) && (Donation > 0L))
{
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Prince;
}
if ((Place < 0x35) && (Donation > 0L))
{
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Duke;
}
if (Donation >= 0xbebc200L)
{
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Earl;
}
if (Donation >= 0x5f5e100L)
{
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Baron;
}
if (Donation >= 0x1c9c380L)
{
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Knight;
}
}
return ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks.Commoner;
}
public static void Handle(NobilityInfo information, Client.GameState client)
{
switch (information.Type)
{
case NobilityInfo.Donate:
{
if (client.Trade.InTrade)
return;
if (client.Entity.MapID == 3031)
return;
uint silvers = information.dwParam;
bool newDonator = false;
if (client.NobilityInformation.Donation == 0)
newDonator = true;
if (client.Entity.Money < information.dwParam)
{
uint cps = silvers / 50000;
if (client.Entity.ConquerPoints >= 500000)
{
if (client.Entity.NobalityDonation == client.NobilityInformation.Donation)
{
client.Entity.ConquerPoints -= 500000;
Database.EntityTable.UpdateCps(client);
client.NobilityInformation.Donation += silvers;
client.Entity.NobalityDonation += silvers;
Database.EntityTable.UpdateDonation(client);
}
else
{
if (client.Entity.NobalityDonation > client.NobilityInformation.Donation)
{
client.Entity.ConquerPoints -= 500000;
Database.EntityTable.UpdateCps(client);
client.Entity.NobalityDonation += silvers;
client.NobilityInformation.Donation = client.Entity.NobalityDonation;
Database.EntityTable.UpdateDonation(client);
}
else
{
if (client.Entity.NobalityDonation < client.NobilityInformation.Donation)
{
client.Entity.ConquerPoints -= 500000;
Database.EntityTable.UpdateCps(client);
client.NobilityInformation.Donation += silvers;
client.Entity.NobalityDonation = client.NobilityInformation.Donation;
Database.EntityTable.UpdateDonation(client);
}
}
}
}
}
else
{
if (client.Entity.Money >= silvers)
{
/*if (client.Entity.NobalityDonation == client.NobilityInformation.Donation)
{
client.Entity.Money -= silvers;
client.NobilityInformation.Donation += silvers;
client.Entity.NobalityDonation += silvers;
Database.EntityTable.UpdateDonation(client);
}
else
{
if (client.Entity.NobalityDonation > client.NobilityInformation.Donation)
{
client.Entity.Money -= silvers;
client.Entity.NobalityDonation += silvers;
client.NobilityInformation.Donation = client.Entity.NobalityDonation;
Database.EntityTable.UpdateDonation(client);
}
else
{
if (client.Entity.NobalityDonation < client.NobilityInformation.Donation)
{
client.Entity.Money -= silvers;
client.NobilityInformation.Donation += silvers;
client.Entity.NobalityDonation = client.NobilityInformation.Donation;
Database.EntityTable.UpdateDonation(client);
}
}
}*/
}
}
if (!Board.ContainsKey(client.Entity.UID) && newDonator)
{
Board.Add(client.Entity.UID, client.NobilityInformation);
try
{
Database.NobilityTable.InsertNobilityInformation(client.NobilityInformation);
}
catch
{
Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
}
}
else
{
Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
}
Sort(client.Entity.UID);
Network.GamePackets.NpcReply npc = new Network.GamePackets.NpcReply(6, "You've donated " + silvers + " Silver. Your total donation is " + client.NobilityInformation.Donation + " silver. You rank at " + client.NobilityInformation.Position + " place in the Donation Ranking.");
npc.OptionID = 255;
client.Send(npc.ToArray());
//return;
break;
}
case NobilityInfo.List:
{
byte Count = 0;
MemoryStream strm = new MemoryStream();
BinaryWriter wtr = new BinaryWriter(strm);
wtr.Write((ushort)0);
wtr.Write((ushort)2064);
wtr.Write((uint)NobilityInfo.List);
wtr.Write((ushort)information.wParam1);
wtr.Write((ushort)5);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
wtr.Write((uint)0);
for (int i = (int)(information.wParam1 * 10); i < information.wParam1 * 10 + 10; i++)
{
if (BoardList.Count > i)
{
Count++;
wtr.Write((uint)BoardList[i].EntityUID);
wtr.Write((uint)BoardList[i].Gender);
wtr.Write((uint)BoardList[i].Mesh);
for (int c = 0; c < 20; c++)
{
if (BoardList[i].Name.Length > c)
wtr.Write((byte)(BoardList[i].Name[c]));
else
wtr.Write((byte)(0));
}
wtr.Write((ulong)BoardList[i].Donation);
wtr.Write((uint)BoardList[i].Rank);
wtr.Write((uint)BoardList[i].Position);
}
}
int packetlength = (int)strm.Length;
strm.Position = 0;
wtr.Write((ushort)packetlength);
strm.Position = strm.Length;
wtr.Write(System.Text.Encoding.ASCII.GetBytes("TQServer"));
strm.Position = 0;
byte[] buf = new byte[strm.Length];
strm.Read(buf, 0, buf.Length);
Network.Writer.WriteUInt32(Count, 12, buf);
client.Send(buf);
information.Type = NobilityInfo.NextRank;
ulong value = 0;
information.dwParam2 = 0;
if (client.NobilityInformation.Rank == NobilityRank.Prince)
value = (ulong)(BoardList[02].Donation - client.NobilityInformation.Donation + 1);
if (client.NobilityInformation.Rank == NobilityRank.Duke)
value = (ulong)(BoardList[14].Donation - client.NobilityInformation.Donation + 1);
if (client.NobilityInformation.Rank == NobilityRank.Earl)
value = (ulong)(BoardList[49].Donation - client.NobilityInformation.Donation + 1);
Network.Writer.WriteUInt64(value, 8, information.ToArray());
information.dwParam3 = 60;
information.dwParam4 = uint.MaxValue;
client.Send(information);
break;
}
case NobilityInfo.NextRank:
{
ShekoProject.Network.GamePackets.nobility.NobilityIcon icon = new ShekoProject.Network.GamePackets.nobility.NobilityIcon(0xa8)
{
Type = ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityTypes.Minimum
};
for (int i = 1; i < 12; i += 2)
{
if (i == 11)
{
i++;
}
ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks rank = (ShekoProject.Network.GamePackets.nobility.NobilityIcon.NobilityRanks)i;
icon.AddMinimum(rank, Nobility.GetMinimumDonation(rank));
}
client.Send((byte[])icon);
break;
}
}
}
public static void Sort(uint updateUID)
{
SortedDictionary<ulong, SortEntry<uint, NobilityInformation>> sortdict = new SortedDictionary<ulong, SortEntry<uint, NobilityInformation>>();
foreach (NobilityInformation info in Board.Values)
{
if (sortdict.ContainsKey(info.Donation))
{
SortEntry<uint, NobilityInformation> entry = sortdict[info.Donation];
entry.Values.Add(info.EntityUID, info);
}
else
{
SortEntry<uint, NobilityInformation> entry = new SortEntry<uint, NobilityInformation>();
entry.Values = new Dictionary<uint, NobilityInformation>();
entry.Values.Add(info.EntityUID, info);
sortdict.Add(info.Donation, entry);
}
}
SafeDictionary<uint, NobilityInformation> sortedBoard = new SafeDictionary<uint, NobilityInformation>(1000000);
sortedBoard.Clear();
int Place = 0;
foreach (KeyValuePair<ulong, SortEntry<uint, NobilityInformation>> entries in sortdict.Reverse())
{
foreach (KeyValuePair<uint, NobilityInformation> value in entries.Value.Values)
{
Client.GameState client = null;
try
{
int previousPlace = value.Value.Position;
value.Value.Position = Place;
NobilityRank Rank = NobilityRank.Serf;
if (Place > 100)
{
if (value.Value.Donation >= 200000000)
{
Rank = NobilityRank.Earl;
}
else if (value.Value.Donation >= 100000000)
{
Rank = NobilityRank.Baron;
}
else if (value.Value.Donation >= 30000000)
{
Rank = NobilityRank.Knight;
}
}
else if (Place < Database.rates.king)
{
Rank = NobilityRank.King;
if (Place < (Database.rates.king - (Database.rates.king - 1)))
{
MaxDonation = value.Value.Donation;
}
}
else if (Place < Database.rates.prince)
{
Rank = NobilityRank.Prince;
if (Place < (Database.rates.king + 2))
{
MaxDonation1 = value.Value.Donation;
}
}
else
{
Rank = NobilityRank.Duke;
if (Place < (Database.rates.prince + 2))
{
MaxDonation2 = value.Value.Donation;
}
}
var oldRank = value.Value.Rank;
value.Value.Rank = Rank;
if (ServerBase.Kernel.GamePool.TryGetValue(value.Key, out client))
{
bool updateTheClient = false;
if (oldRank != Rank)
{
updateTheClient = true;
if (Rank == NobilityRank.Baron)
{
ServerBase.Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " Donation To Baron in Nobility Rank.", System.Drawing.Color.White, Message.TopLeft), ServerBase.Kernel.GamePool.Values);
}
if (Rank == NobilityRank.Earl)
{
ServerBase.Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " Donation To Earl in Nobility Rank.", System.Drawing.Color.White, Message.TopLeft), ServerBase.Kernel.GamePool.Values);
}
if (Rank == NobilityRank.Duke)
{
ServerBase.Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " Donation To Duke in Nobility Rank.", System.Drawing.Color.White, Message.Center), ServerBase.Kernel.GamePool.Values);
}
if (Rank == NobilityRank.Prince)
{
ServerBase.Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " Donation To Prince in Nobility Rank.", System.Drawing.Color.White, Message.Center), ServerBase.Kernel.GamePool.Values);
}
if (Rank == NobilityRank.King)
{
ServerBase.Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " has become the new King/Queen in " + Database.rates.servername + "!", System.Drawing.Color.White, Message.Center), ServerBase.Kernel.GamePool.Values);
}
if (Rank == NobilityRank.Knight)
{
ServerBase.Kernel.SendWorldMessage(new Message("Congratulation! " + client.Entity.Name + " Donation To Knight in Nobility Rank.", System.Drawing.Color.White, Message.TopLeft), ServerBase.Kernel.GamePool.Values);
}
}
else
{
if (previousPlace != Place)
{
updateTheClient = true;
}
}
if (updateTheClient || client.Entity.UID == updateUID)
{
NobilityInfo update = new NobilityInfo(true);
update.Type = NobilityInfo.Icon;
update.dwParam = value.Key;
update.UpdateString(value.Value);
client.SendScreen(update, true);
client.Entity.NobilityRank = value.Value.Rank;
}
}
sortedBoard.Add(value.Key, value.Value);
Place++;
}
catch { }
}
}
Board = sortedBoard;
lock (BoardList)
{
BoardList = Board.Values.ToList();
}
}
}
public class NobilityInformation
{
public string Name;
public uint EntityUID;
public uint Mesh;
public ulong Donation;
public byte Gender;
public int Position;
public NobilityRank Rank;
}
public enum NobilityRank : byte
{
Serf = 0,
Knight = 1,
Baron = 3,
Earl = 5,
Duke = 7,
Prince = 9,
King = 12
}
}
Not to be mean, but I don't think you should be working on a source if you can't figure that out. Maybe start out by actually learning to program in C#, at least the basics.
Super Aids is right, you should atleast learn the basic and move on to the part where you actually understand what is written, otherwise you will be stuck all the time.
You might get an answer this time, but what about next time or the times following next?
nobility 04/19/2010 - CO2 Private Server - 6 Replies any know know which file has to be changed to make it that everyone can be a king/queen if though donate enough?
Help nobility npc 07/24/2009 - CO2 Private Server - 9 Replies i need help to repair the npc for nobility in CoMy source
who can help me ? thanks
how can i put nobility 05/31/2009 - CO2 Private Server - 1 Replies how can i put nobilty in CoEmu do i need to code it?
[NobilitY] 05/05/2009 - CO2 Private Server - 8 Replies Can anyone please post here how to add nobility rank or somehting like nobility in LOFT / 5017
[Help]Nobility 05/01/2009 - CO2 Private Server - 2 Replies I'm looking for a tutorial to the nobility on my server! Thanks to you get what I want!