Quote:
Originally Posted by shadowman123
PacketHandler.cs / Check EntityCreate Packet 1001 .. then use Console.WriteLine to check the value of the Entered Name and tell me the updates
|
PacketHandler.cs
Code:
#region Create Character Packet 1001
case 1001:
{
EnitityCreate EC = new EnitityCreate(true);
EC.Deserialize(packet);
string Message = "";
Boolean Created = Database.UserTable.CreateEntity(EC, client, ref Message);
client.Send(new GameServer.Network.GamePacket.MessagePacket(Message, "ALLUSERS", System.Drawing.Color.Orange, GameServer.Network.GamePacket.MessagePacket.Dialog));
if (Created)
{
client.Send(Packets.SendMsg(client.Entity.ID, "SYSTEM", "ALLUSERS", "ANSWER_OK", 0x834));
Console.WriteLine(client.Account.Username + " Sucesfully Created a new Character " + EC.CharacterName);
client.JustCreated = true;
}
else
{
client.Disconnect();
return;
}
break;
}
#endregion
EnitityCreate
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);
}
}
Database >> UserTable >> CreateEntity
Code:
public static bool CreateEntity(Network.GamePackets.EnitityCreate eC, Client.GameState client, ref string message)
{
try
{
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;
Console.WriteLine(client.Entity.Name);
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();
Console.WriteLine("cq_user" +
"Name" + eC.CharacterName
+ "Owner" + client.Account.Username
+ "Class" + eC.CharacterClass
+ "ID" + client.Entity.ID
+ "Hitpoints" + client.Entity.Hitpoints
+ "Mana" + client.Entity.Mana
+ "Model" + client.Entity.Model
+ "Avatar" + client.Entity.Avatar
+ "HairStyle" + client.Entity.HairStyle);
MySqlCommand cmd = new MySqlCommand(MySqlCommandType.INSERT);
cmd.Insert("cq_user")
.Insert("Name", client.Entity.Name)
.Insert("Owner", client.Account.Username)
.Insert("Class", client.Entity.Class)
.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;
}
cq_user table
Code:
CREATE TABLE `cq_user` (
`ID` bigint(18) unsigned NOT NULL,
`Name` varchar(16) NOT NULL,
`Owner` varchar(45) NOT NULL,
`Class` tinyint(5) unsigned default '10',
`Spouse` varchar(16) default 'None',
`Model` bigint(255) unsigned NOT NULL,
`Avatar` smallint(12) unsigned NOT NULL,
`HairStyle` smallint(12) unsigned NOT NULL default '430',
`Level` tinyint(5) unsigned default '1',
`Money` bigint(18) unsigned default '0',
`ConquerPoints` bigint(18) unsigned default '0',
`PKPoints` smallint(12) unsigned default '0',
`Hitpoints` mediumint(16) unsigned default '93',
`Mana` mediumint(16) unsigned default '0',
`Strenght` smallint(12) unsigned default '1',
`Agility` smallint(12) unsigned default '1',
`Vitality` smallint(12) unsigned default '1',
`Spirit` smallint(12) unsigned default '0',
`StatPoints` smallint(12) unsigned default '0',
`Experience` bigint(255) unsigned default '0',
`VirtuePoints` bigint(255) unsigned default '0',
`Reborn` tinyint(2) unsigned default '0',
`Map` smallint(12) unsigned default '1002',
`X` smallint(12) unsigned default '430',
`Y` smallint(12) unsigned default '380',
`PreviousMapID` smallint(12) unsigned default '1010',
`PrevX` mediumint(10) default '0',
`PrevY` mediumint(10) default '0',
PRIMARY KEY (`ID`,`Name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
so here i provided all info .. then what ?