|
You last visited: Today at 21:16
Advertisement
nobility rank 5375
Discussion on nobility rank 5375 within the CO2 Private Server forum part of the Conquer Online 2 category.
10/14/2011, 08:54
|
#1
|
elite*gold: 0
Join Date: Jul 2011
Posts: 21
Received Thanks: 0
|
nobility rank 5375
is their a solution to make the rank work? like in 5095..king can hit 3 times if he or she is a prince or princess..anyone pls and also with duke..
|
|
|
10/14/2011, 10:09
|
#2
|
elite*gold: 0
Join Date: May 2011
Posts: 1,769
Received Thanks: 756
|
Yes. It's called coding it.
|
|
|
10/14/2011, 12:33
|
#3
|
elite*gold: 0
Join Date: Jul 2011
Posts: 21
Received Thanks: 0
|
Quote:
Originally Posted by BaussHacker
Yes. It's called coding it.
|
so how to code it? pls
|
|
|
10/14/2011, 15:52
|
#4
|
elite*gold: 0
Join Date: Sep 2011
Posts: 40
Received Thanks: 8
|
open Nobility.cs and replace all in it
Code:
using System;
using System.Linq;
using System.Collections.Generic;
using Conquer_Online_Server.Network.GamePackets;
using System.IO;
namespace Conquer_Online_Server.Game.ConquerStructures
{
public class Nobility
{
public static SafeDictionary<uint, NobilityInformation> Board = new SafeDictionary<uint, NobilityInformation>(10000);
public static List<NobilityInformation> BoardList = new List<NobilityInformation>(10000);
public static void Handle(NobilityInfo information, Client.GameState client)
{
switch (information.Type)
{
case NobilityInfo.Donate:
{
uint silvers = information.dwParam;
if (information.dwParam2 == 1)
{
uint cps = silvers / 50000;
if (client.Entity.ConquerPoints >= cps)
{
client.Entity.ConquerPoints = (int)Math.Max(0, (int)((int)client.Entity.ConquerPoints - (int)cps));
client.NobilityInformation.Donation += silvers;
}
}
else
{
if (client.Entity.Money >= silvers)
{
client.Entity.Money -= silvers;
client.NobilityInformation.Donation += silvers;
}
}
if (!Board.ContainsKey(client.Entity.UID) && client.NobilityInformation.Donation == silvers)
{
Board.Add(client.Entity.UID, client.NobilityInformation);
Database.NobilityTable.InsertNobilityInformation(client.NobilityInformation);
}
else
{
Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
}
Sort(client.Entity.UID);
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);
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;
}
}
}
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>(10000);
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;
int previousPlace = value.Value.Position;
value.Value.Position = Place;
NobilityRank Rank = NobilityRank.Serf;
if (Place >= 50)
{
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 < 3)
{
Rank = NobilityRank.King;
}
else if (Place < 15)
{
Rank = NobilityRank.Prince;
}
else
{
Rank = NobilityRank.Duke;
}
}
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;
}
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.Screen.SendScreen(update, true);
client.Entity.NobilityRank = value.Value.Rank;
}
}
sortedBoard.Add(value.Key, value.Value);
Place++;
}
}
Board = sortedBoard;
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
}
}
now NobilityInfo.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Conquer_Online_Server.Network.GamePackets
{
public class NobilityInfo : Writer, Interfaces.IPacket
{
public const uint
Donate = 1,
List = 2,
Icon = 3,
NextRank = 4;
byte[] Buffer;
public NobilityInfo(bool Create)
{
if (Create)
{
Buffer = new byte[33 + 8];
WriteUInt16(33, 0, Buffer);
WriteUInt16(2064, 2, Buffer);
}
Strings = new List<string>();
}
public uint Type
{
get { return BitConverter.ToUInt32(Buffer, 4); }
set { WriteUInt32(value, 4, Buffer); }
}
public ulong dwParam
{
get { return BitConverter.ToUInt64(Buffer, 8); }
set { WriteUInt64(value, 8, Buffer); }
}
public ushort wParam1
{
get { return BitConverter.ToUInt16(Buffer, 8); }
set { WriteUInt16(value, 8, Buffer); }
}
public ushort wParam2
{
get { return BitConverter.ToUInt16(Buffer, 10); }
set { WriteUInt16(value, 10, Buffer); }
}
public uint dwParam2
{
get { return BitConverter.ToUInt32(Buffer, 16); }
set { WriteUInt32(value, 16, Buffer); }
}
public uint dwParam3
{
get { return BitConverter.ToUInt32(Buffer, 20); }
set { WriteUInt32(value, 20, Buffer); }
}
public uint dwParam4
{
get { return BitConverter.ToUInt32(Buffer, 24); }
set { WriteUInt32(value, 24, Buffer); }
}
//Thanks to ImmuneOne, who fixed the strings offsets, I managed to get nobility done.
public byte StringCount
{
get { return Buffer[32]; }
set { Buffer[32] = value; }
}
public List<string> DecodedStrings
{
get
{
List<string> list = new List<string>(StringCount);
int offset = 33;
for (int count = 0; count < StringCount; count++)
{
byte stringLength = Buffer[offset]; offset++;
string String = Encoding.ASCII.GetString(Buffer, offset, stringLength);
offset += stringLength;
list.Add(String);
}
return list;
}
}
public List<string> Strings;
public void UpdateString(Game.ConquerStructures.NobilityInformation info)
{
string buildString = info.EntityUID + " " + info.Donation + " " + (byte)info.Rank + " " + info.Position;
buildString = (char)buildString.Length + buildString;
Strings.Add(buildString);
}
public void ListString(Game.ConquerStructures.NobilityInformation info)
{
string buildString = info.EntityUID + " " + info.Gender + " 0 " + info.Name + " " + info.Donation + " " + (byte)info.Rank + " " + info.Position;
buildString = (char)buildString.Length + buildString;
Strings.Add(buildString);
}
public void Send(Client.GameState client)
{
client.Send(ToArray());
}
public byte[] ToArray()
{
if (Strings.Count == 0)
return Buffer;
string theString = "";
for (int count = 0; count < Strings.Count; count++)
{
theString += Strings[count];
}
byte[] newBuffer = new byte[33 + 8 + theString.Length];
Buffer.CopyTo(newBuffer, 0);
WriteUInt16((ushort)(newBuffer.Length - 8), 0, newBuffer);
newBuffer[32] = (byte)Strings.Count;
WriteString(theString, 33, newBuffer);
return newBuffer;
}
public void Deserialize(byte[] buffer)
{
Buffer = buffer;
}
}
}
|
|
|
10/15/2011, 13:05
|
#5
|
elite*gold: 0
Join Date: Jul 2011
Posts: 21
Received Thanks: 0
|
Quote:
Originally Posted by DontSpeakToMe
open Nobility.cs and replace all in it
Code:
using System;
using System.Linq;
using System.Collections.Generic;
using Conquer_Online_Server.Network.GamePackets;
using System.IO;
namespace Conquer_Online_Server.Game.ConquerStructures
{
public class Nobility
{
public static SafeDictionary<uint, NobilityInformation> Board = new SafeDictionary<uint, NobilityInformation>(10000);
public static List<NobilityInformation> BoardList = new List<NobilityInformation>(10000);
public static void Handle(NobilityInfo information, Client.GameState client)
{
switch (information.Type)
{
case NobilityInfo.Donate:
{
uint silvers = information.dwParam;
if (information.dwParam2 == 1)
{
uint cps = silvers / 50000;
if (client.Entity.ConquerPoints >= cps)
{
client.Entity.ConquerPoints = (int)Math.Max(0, (int)((int)client.Entity.ConquerPoints - (int)cps));
client.NobilityInformation.Donation += silvers;
}
}
else
{
if (client.Entity.Money >= silvers)
{
client.Entity.Money -= silvers;
client.NobilityInformation.Donation += silvers;
}
}
if (!Board.ContainsKey(client.Entity.UID) && client.NobilityInformation.Donation == silvers)
{
Board.Add(client.Entity.UID, client.NobilityInformation);
Database.NobilityTable.InsertNobilityInformation(client.NobilityInformation);
}
else
{
Database.NobilityTable.UpdateNobilityInformation(client.NobilityInformation);
}
Sort(client.Entity.UID);
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);
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;
}
}
}
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>(10000);
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;
int previousPlace = value.Value.Position;
value.Value.Position = Place;
NobilityRank Rank = NobilityRank.Serf;
if (Place >= 50)
{
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 < 3)
{
Rank = NobilityRank.King;
}
else if (Place < 15)
{
Rank = NobilityRank.Prince;
}
else
{
Rank = NobilityRank.Duke;
}
}
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;
}
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.Screen.SendScreen(update, true);
client.Entity.NobilityRank = value.Value.Rank;
}
}
sortedBoard.Add(value.Key, value.Value);
Place++;
}
}
Board = sortedBoard;
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
}
}
now NobilityInfo.cs
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Conquer_Online_Server.Network.GamePackets
{
public class NobilityInfo : Writer, Interfaces.IPacket
{
public const uint
Donate = 1,
List = 2,
Icon = 3,
NextRank = 4;
byte[] Buffer;
public NobilityInfo(bool Create)
{
if (Create)
{
Buffer = new byte[33 + 8];
WriteUInt16(33, 0, Buffer);
WriteUInt16(2064, 2, Buffer);
}
Strings = new List<string>();
}
public uint Type
{
get { return BitConverter.ToUInt32(Buffer, 4); }
set { WriteUInt32(value, 4, Buffer); }
}
public ulong dwParam
{
get { return BitConverter.ToUInt64(Buffer, 8); }
set { WriteUInt64(value, 8, Buffer); }
}
public ushort wParam1
{
get { return BitConverter.ToUInt16(Buffer, 8); }
set { WriteUInt16(value, 8, Buffer); }
}
public ushort wParam2
{
get { return BitConverter.ToUInt16(Buffer, 10); }
set { WriteUInt16(value, 10, Buffer); }
}
public uint dwParam2
{
get { return BitConverter.ToUInt32(Buffer, 16); }
set { WriteUInt32(value, 16, Buffer); }
}
public uint dwParam3
{
get { return BitConverter.ToUInt32(Buffer, 20); }
set { WriteUInt32(value, 20, Buffer); }
}
public uint dwParam4
{
get { return BitConverter.ToUInt32(Buffer, 24); }
set { WriteUInt32(value, 24, Buffer); }
}
//Thanks to ImmuneOne, who fixed the strings offsets, I managed to get nobility done.
public byte StringCount
{
get { return Buffer[32]; }
set { Buffer[32] = value; }
}
public List<string> DecodedStrings
{
get
{
List<string> list = new List<string>(StringCount);
int offset = 33;
for (int count = 0; count < StringCount; count++)
{
byte stringLength = Buffer[offset]; offset++;
string String = Encoding.ASCII.GetString(Buffer, offset, stringLength);
offset += stringLength;
list.Add(String);
}
return list;
}
}
public List<string> Strings;
public void UpdateString(Game.ConquerStructures.NobilityInformation info)
{
string buildString = info.EntityUID + " " + info.Donation + " " + (byte)info.Rank + " " + info.Position;
buildString = (char)buildString.Length + buildString;
Strings.Add(buildString);
}
public void ListString(Game.ConquerStructures.NobilityInformation info)
{
string buildString = info.EntityUID + " " + info.Gender + " 0 " + info.Name + " " + info.Donation + " " + (byte)info.Rank + " " + info.Position;
buildString = (char)buildString.Length + buildString;
Strings.Add(buildString);
}
public void Send(Client.GameState client)
{
client.Send(ToArray());
}
public byte[] ToArray()
{
if (Strings.Count == 0)
return Buffer;
string theString = "";
for (int count = 0; count < Strings.Count; count++)
{
theString += Strings[count];
}
byte[] newBuffer = new byte[33 + 8 + theString.Length];
Buffer.CopyTo(newBuffer, 0);
WriteUInt16((ushort)(newBuffer.Length - 8), 0, newBuffer);
newBuffer[32] = (byte)Strings.Count;
WriteString(theString, 33, newBuffer);
return newBuffer;
}
public void Deserialize(byte[] buffer)
{
Buffer = buffer;
}
}
}
|
i see...why is it when i try to debug it got 3 errors and also with nobility info.cs???
|
|
|
 |
Similar Threads
|
Nobility 5375 Problem
06/23/2011 - CO2 Private Server - 0 Replies
Hello friend I have a problem with my server 5375 is as follows:
when I make a donation to the nobility is not granted any of the range.:handsdown:
|
Need help With Nobility Rank
04/12/2011 - CO2 Private Server - 8 Replies
Hey guys i play in a private server that donation are like 100kkk, i wanted to know how i can donate to the nobility rank more then 999,999,999. I want to know how to edit the client so ican donate more then that. ANyone how i can do that? Thank you very much.
|
[HELP] Nobility Rank
07/31/2009 - CO2 Private Server - 10 Replies
Hey!
This is Mr_BanG,
I would need some help on my PServer, there is a problem. Onto my client. A normal one. Not CoEmu V2 or any other type of servers. I need help on adding the nobility rank. If you don't know what it is, here you have a screnshot.
P.S : Its spanish so don't wonder why it's a random update on the normal CO.
(This is the reall CO. For there, the Spanish CO.):
|
nobility rank
06/19/2009 - CO2 Private Server - 1 Replies
the nobility rank is added in coemu v2?
|
All times are GMT +1. The time now is 21:18.
|
|