nobility

11/11/2013 01:07 Eduardo0102#1
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
    }
}
11/11/2013 11:44 Y u k i#2
remove this

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
11/11/2013 12:16 Super Aids#3
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.
11/11/2013 14:36 turk55#4
I didn't expect a source to be a number ? o.o

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?
11/11/2013 19:26 hadeset#5
Who in the hell thinks it is a good idea to use hex numbers for variables like donation? o.O
11/11/2013 20:23 Super Aids#6
Quote:
Originally Posted by hadeset View Post
Who in the hell thinks it is a good idea to use hex numbers for variables like donation? o.O
The source is one of those Egy sources that have been reflected, so everything is in hex
11/12/2013 16:04 hadeset#7
Quote:
Originally Posted by Super Aids View Post
The source is one of those Egy sources that have been reflected, so everything is in hex
Makes sense. :P