Okay guys now i got it .. i don`t get this error if i comment those two lines
Code:
.Insert("Name", eC.CharacterName)
.Insert("Class", eC.CharacterClass)
but i get it again if i uncommented them .. i don`t know why is that .. although the character class is correct as its was selected but the name always comes have wrong chars ...
Example :
if i set my char name this : Abdeen
i get it A@^de%n
something like this .. here is my code for entity create :
Code:
public static bool CreateEntity(Network.GamePackets.EnitityCreate eC, Client.GameState client, ref string message)
{
try
{
if (eC.CharacterName.Length > 16)
eC.CharacterName = eC.CharacterName.Substring(0, 16);
if (eC.CharacterName == "")
return false;
if (InvalidCharacters(eC.Name))
{
message = "The chosen name is contains Invalid characters .";
return false;
}
var rdr = new MySqlReader(new MySqlCommand(MySqlCommandType.SELECT).Select("cq_user").Where("name", eC.CharacterName));
if (rdr.Read())
{
rdr.Close();
message = "The chosen name is already in use.";
return false;
}
rdr.Close();
client.Entity = new Entity(EntityFlag.Player, false);
client.Entity.Name = eC.CharacterName;
DataHolder.GetStats((byte)eC.CharacterClass, 1, client);
client.Entity.ID = Program.EntityUID.Next;
new MySqlCommand(MySqlCommandType.UPDATE).Update("configuration").Set("EntityID", client.Entity.ID).Where("Server", ServerBase.Constants.ServerName).Execute();
//client.CalculateStatBonus();
//client.CalculateHPBonus();
client.Entity.Hitpoints = client.Entity.MaxHitpoints;
client.Entity.Mana = (ushort)(client.Entity.Spirit * 5);
client.Entity.Class = (byte)eC.CharacterClass;
client.Entity.Model = eC.CharacterModel;
if (eC.CharacterModel == 1003 && eC.CharacterClass == 10 || eC.CharacterModel == 1003 && eC.CharacterClass == 20 || eC.CharacterModel == 1003 && eC.CharacterClass == 40 || eC.CharacterModel == 1003 && eC.CharacterClass == 100 || eC.CharacterModel == 1004 && eC.CharacterClass == 10 || eC.CharacterModel == 1004 && eC.CharacterClass == 20 || eC.CharacterModel == 1004 && eC.CharacterClass == 40 || eC.CharacterModel == 1004 && eC.CharacterClass == 100)
{
client.Entity.Avatar = (ushort)ServerBase.Kernel.Random.Next(1, 50);
}
else
{
client.Entity.Avatar = (ushort)ServerBase.Kernel.Random.Next(201, 250);
}
byte Color = (byte)ServerBase.Kernel.Random.Next(4, 8);
client.Entity.HairStyle = (ushort)(Color * 100 + 10 + (byte)ServerBase.Kernel.Random.Next(4, 9));
client.Account.EntityID = client.Entity.ID;
client.Account.Save();
MySqlCommand cmd = new MySqlCommand(MySqlCommandType.INSERT);
cmd.Insert("cq_user")
.Insert("Name", eC.CharacterName)
.Insert("Owner", client.Account.Username)
.Insert("Class", eC.CharacterClass)
.Insert("ID", client.Entity.ID)
.Insert("Hitpoints", client.Entity.Hitpoints)
.Insert("Mana", client.Entity.Mana)
.Insert("Model", client.Entity.Model)
.Insert("Avatar", client.Entity.Avatar)
.Insert("HairStyle", client.Entity.HairStyle)
.Insert("Strenght", client.Entity.Strenght)
.Insert("Agility", client.Entity.Agility)
.Insert("Vitality", client.Entity.Vitality)
.Insert("Spirit", client.Entity.Spirit);
cmd.Execute();
client.Account.LoginState = AccountTable.AccountLoginState.Login;
new MySqlCommand(MySqlCommandType.UPDATE)
.Update("accounts")
.Set("LoginState", (byte)client.Account.LoginState)
.Where("EntityID", client.Entity.ID)
.Execute();
message = "ANSWER_OK";
}
catch (Exception cc) { GameServer.ServerBase.ErrorHandler.Catch(cc); message = "A problem when we registering your character , please try again later !!"; return false; }
return true;
}
and here is my Create Entity Packet :
Code:
public class EnitityCreate : Interfaces.IPacket
{
byte[] Buffer;
public EnitityCreate(bool Create)
{
if (Create)
{
this.Buffer = new byte[60];
WriteUInt16(60, this.Buffer, 0);
WriteUInt16(0x3E9, this.Buffer, 2);
}
}
public string AccountName
{
get
{
return Encoding.ASCII.GetString(Buffer, 4, 16);
}
set
{
Network.Writer.WriteString(value, 4, Buffer);
}
}
public string AccountPassword
{
get
{
return Encoding.ASCII.GetString(Buffer, 36, 16);
}
set
{
Network.Writer.WriteString(value, 36, Buffer);
}
}
public string CharacterName
{
get
{
return Encoding.ASCII.GetString(Buffer, 20, 16);
}
set
{
Network.Writer.WriteString(value, 20, Buffer);
}
}
public ushort CharacterModel
{
get
{
return BitConverter.ToUInt16(Buffer, 52);
}
set
{
Network.Writer.WriteUInt16(value, 52, Buffer);
}
}
public ushort CharacterClass
{
get
{
return BitConverter.ToUInt16(Buffer, 54);
}
set
{
Network.Writer.WriteUInt16(value, 54, Buffer);
}
}
public uint AccountUniqueID
{
get
{
return BitConverter.ToUInt32(Buffer, 56);
}
set
{
Network.Writer.WriteUInt32(value, 56, Buffer);
}
}
public byte[] Serialize()
{
return this.Buffer;
}
public void Deserialize(byte[] buffer)
{
Buffer = buffer;
}
public byte[] ToArray()
{
return Buffer;
}
public void Send(Client.GameState client)
{
client.Send(Buffer);
}
public static void ZeroFill(byte[] Buffer, ushort Offset, ushort Count)
{
for (ushort i = 0; i < Count; i++)
Buffer[i + Offset] = 0x00;
}
public static void WriteStringWithLength(string Arg, byte[] Buffer, ushort Offset)
{
Buffer[Offset] = (byte)Arg.Length;
Offset++;
ushort i = 0;
while (i < Arg.Length)
{
Buffer[(ushort)(i + Offset)] = (byte)Arg[i];
i = (ushort)(i + 1);
}
}
public static void WriteString(string Arg, byte[] Buffer, ushort Offset)
{
ushort i = 0;
while (i < Arg.Length)
{
Buffer[(ushort)(i + Offset)] = (byte)Arg[i];
i = (ushort)(i + 1);
}
}
public static void WriteUInt16(ushort Arg, byte[] Buffer, ushort Offset)
{
Buffer[Offset] = (byte)(Arg);
Buffer[Offset + 1] = (byte)(Arg >> 8);
}
public static void WriteUInt32(uint Arg, byte[] Buffer, ushort Offset)
{
Buffer[Offset] = (byte)(Arg);
Buffer[Offset + 1] = (byte)(Arg >> 8);
Buffer[Offset + 2] = (byte)(Arg >> 16);
Buffer[Offset + 3] = (byte)(Arg >> 24);
}
}
any help with this shit which i don't know why i get it or why i get the name is not which one i inserted ?