this is the video
this is my char/entity.cs
This is my Packet
My Groundmovement
my movement angle
how do i fix my walking problem? does anyone know how? thanks
|
|
this is my char/entity.cs
Code:
public bool Move(Enums.ConquerAngle Direction)
{
ushort _X = X, _Y = Y;
Facing = Direction;
sbyte xi = 0, yi = 0;
switch (Direction)
{
case Enums.ConquerAngle.North: xi = -1; yi = -1; break;
case Enums.ConquerAngle.South: xi = 1; yi = 1; break;
case Enums.ConquerAngle.East: xi = 1; yi = -1; break;
case Enums.ConquerAngle.West: xi = -1; yi = 1; break;
case Enums.ConquerAngle.NorthWest: xi = -1; break;
case Enums.ConquerAngle.SouthWest: yi = 1; break;
case Enums.ConquerAngle.NorthEast: yi = -1; break;
case Enums.ConquerAngle.SouthEast: xi = 1; break;
}
_X = (ushort)(X + xi);
_Y = (ushort)(Y + yi);
Game.Map Map = null;
if (ServerBase.Kernel.Maps.TryGetValue(MapID, out Map))
{
if (Map.Floor[_X, _Y, MapObjType, this])
{
if (MapObjType == MapObjectType.Monster)
{
Map.Floor[_X, _Y, MapObjType, this] = false;
Map.Floor[X, Y, MapObjType, this] = true;
}
X = _X;
Y = _Y;
return true;
}
else
{
if (Mode == Enums.Mode.None)
{
if (EntityFlag != EntityFlag.Monster)
Teleport(MapID, X, Y);
else
return false;
}
}
}
else
{
if (EntityFlag != EntityFlag.Monster)
Teleport(MapID, X, Y);
else
return false;
}
return true;
}
Code:
static void PlayerGroundMovment(GroundMovement groundMovement, Client.GameState client)
if (client.Entity.ContainsFlag(Update.Flags.Ride))
client.Entity.Vigor -= 1;
// client.Entity.PX = client.Entity.X;
//client.Entity.PY = client.Entity.Y;*/
if (groundMovement.Direction > Enums.ConquerAngle.South)
{
groundMovement.Direction = (JudeProject.Game.Enums.ConquerAngle)((byte)groundMovement.Direction % 8);
}
client.Entity.Move(groundMovement.Direction);
if (groundMovement.GroundMovementType == 9)
{
client.Entity.Move(groundMovement.Direction);
}
client.SendScreen(groundMovement, true);
client.Screen.Reload(groundMovement);
Code:
namespace JudeProject.Network.GamePackets
{
using JudeProject;
using JudeProject.Client;
using JudeProject.Game;
using JudeProject.Interfaces;
using JudeProject.Network;
using System;
public class GroundMovement : Writer, IPacket
{
private byte[] Buffer;
public const uint Run = 1;
public const uint TwoCoordonates = 9;
public const uint Walk = 0;
public GroundMovement(bool CreateInstance)
{
if (CreateInstance)
{
this.Buffer = new byte[32];
Writer.WriteUInt32(24, 0, this.Buffer);
Writer.WriteUInt32(10005, 2, this.Buffer);
}
}
public void Deserialize(byte[] buffer)
{
this.Buffer = buffer;
}
public void Send(GameState client)
{
client.Send(this.Buffer);
}
public byte[] ToArray()
{
return this.Buffer;
}
public Enums.ConquerAngle Direction
{
get
{
return (Enums.ConquerAngle)((byte)(this.Buffer[4] % 8));
}
set
{
this.Buffer[4] = (byte)value;
}
}
public uint GroundMovementType
{
get
{
return JudeProject.BitConverter.ToUInt32(this.Buffer, 12);
}
set
{
Writer.WriteUInt32(value, 12, this.Buffer);
}
}
public uint MapID
{
get
{
return JudeProject.BitConverter.ToUInt32(this.Buffer, 20);
}
set
{
Writer.WriteUInt32(value, 20, this.Buffer);
}
}
public uint TimeStamp
{
get
{
return JudeProject.BitConverter.ToUInt32(this.Buffer, 0x10);
}
set
{
Writer.WriteUInt32(value, 0x10, this.Buffer);
}
}
public uint UID
{
get
{
return JudeProject.BitConverter.ToUInt32(this.Buffer, 8);
}
set
{
Writer.WriteUInt32(value, 8, this.Buffer);
}
}
}
}
Code:
public enum ConquerAngle : byte
{
East = 5,
North = 3,
NorthEast = 4,
NorthWest = 2,
South = 7,
SouthEast = 6,
SouthWest = 0,
West = 1
}