public void Movement()
{
try
{
PacketReader Reader = new PacketReader(PacketInformation.buffer);
Character.Action.PickUping = false;
byte Type = Reader.Byte();
////////////////////////////////////////////////////////////////////////////// Sky drome movement
if (Type == 0)
{
if (!Character.Stall.Stallactive && !Character.Action.PickUping && !Character.State.Die && !Character.Action.sCasting && !Character.Action.sAttack && !Character.Action.nAttack && !Character.Information.Scroll && !Character.State.Sitting && !Character.Information.SkyDroming)
{
/*
if (File.FileLoad.CheckCave(Character.Position.xSec, Character.Position.ySec))
{
return;
}
else
{
Character.Information.SkyDroming = true;
byte info = Reader.Byte();
ushort angle = Reader.UInt16();
Character.Information.Angle = angle / (65535.0 / 360.0);
Character.Position.packetxSec = Character.Position.xSec;
Character.Position.packetySec = Character.Position.ySec;
Character.Position.packetX = (ushort)Game.Formule.packetx(Character.Position.x, Character.Position.xSec);
Character.Position.packetY = (ushort)Game.Formule.packetx(Character.Position.x, Character.Position.xSec);
double distance = Formule.gamedistance(
Character.Position.x,
Character.Position.y,
Formule.gamex(Character.Position.x, Character.Position.xSec),
Formule.gamey(Character.Position.y, Character.Position.ySec));
Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.0768)) * 1000.0;
Character.Position.RecordedTime = Character.Position.Time;
PacketWriter Writer = new PacketWriter();
Writer.Create(Systems.SERVER_MOVEMENT);
Writer.DWord(Character.Information.UniqueID);
Writer.Byte(0);
Writer.Byte(info);
Writer.Word(angle);
Writer.Byte(1);
Writer.Byte(Character.Position.xSec);
Writer.Byte(Character.Position.ySec);
Writer.Word(Character.Position.packetX);
Writer.DWord(Character.Position.z);
Writer.Word(Character.Position.packetY);
Send(Writer.GetBytes());
StartSkyDromeTimer(1000);
}*/
}
}
//------------------------- Normal movement -------------------------//
if (Type == 1)
{
//If character is in a guild
if (Character.Network.Guild.Guildid != 0)
{
//Repeat for each client in the guild
foreach (Client memberclient in Character.Network.Guild.MembersClient)
{
//Make sure the client is not null
if (memberclient != null)
{
//Send update packet for location of player
memberclient.Send(Packet.GuildUpdate(Character, 10, Character.Information.UniqueID, 0, 0));
}
}
}
if (Character.Stall.Stallactive) return;
if (Character.Action.PickUping) return;
StopPickUpTimer();
if (Character.State.Die) return;
if (Character.Information.Scroll) return;
if (Character.State.Sitting) return;
if (Character.Information.SkyDroming)
{
StopSkyDromeTimer();
}
if (Character.Action.nAttack)
{
StopAttackTimer();
Character.Action.nAttack = false;
}
if (Character.Action.sAttack)
{
StopAttackTimer();
Character.Action.sAttack = false;
}
if (Character.Action.sCasting)
{
StopAttackTimer();
Character.Action.sCasting = false;
}
if (Character.Information.PvpWait)
{
Send(Packet.PvpInterupt(Character.Information.UniqueID));
Character.Information.PvpWait = false;
Character.Information.Pvptype = 0;
StopPvpTimer();
}
Character.Position.Walking = true;
byte xsec = Reader.Byte();
byte ysec = Reader.Byte();
float x, y, z;
if (!File.FileLoad.CheckCave(xsec, ysec))
{
x = Reader.Int16();
z = Reader.Int16();
y = Reader.Int16();
double distance = Formule.gamedistance(
Character.Position.x,
Character.Position.y,
Formule.gamex(x, xsec),
Formule.gamey(y, ysec));
Character.Position.xSec = xsec;
Character.Position.ySec = ysec;
Character.Position.wX = Formule.gamex(x, xsec) - Character.Position.x;
Character.Position.wZ = z;
Character.Position.wY = Formule.gamey(y, ysec) - Character.Position.y;
Character.Position.packetxSec = xsec;
Character.Position.packetySec = ysec;
Character.Position.packetX = (ushort)x;
Character.Position.packetZ = (ushort)z;
Character.Position.packetY = (ushort)y;
if (xsec != 0 && ysec != 0)
{
Send(Packet.Movement(new Global.vektor(Character.Information.UniqueID, x, z, y, xsec, ysec)));
}
if (Character.Information.Berserking)
{
Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.109)) * 1000.0;
}
else
{
Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.109)) * 1000.0;
}
}
else // Added for cave telepad locations
{
x = Formule.cavegamex(Reader.Int16(),Reader.Int16()); //Reads the location and retunrs the coords for the cave postion x
z = Formule.cavegamez(Reader.Int16(), Reader.Int16()); //Reads the location and retunrs the coords for the cave postion z
y = Formule.cavegamey(Reader.Int16(), Reader.Int16()); //Reads the location and retunrs the coords for the cave postion y
double distance = Formule.gamedistance(Character.Position.x,Character.Position.y,Formule.cavegamex(x),Formule.cavegamey(y));
Character.Position.xSec = xsec;
Character.Position.ySec = ysec;
Character.Position.wX = Formule.cavegamex(x) - Character.Position.x;
Character.Position.wZ = z;
Character.Position.wY = Formule.cavegamey(y) - Character.Position.y;
Character.Position.packetxSec = xsec;
Character.Position.packetySec = ysec;
Character.Position.packetX = (ushort)x;
Character.Position.packetZ = (ushort)z;
Character.Position.packetY = (ushort)y;
if (xsec != 0 && ysec != 0)
{
Send(Packet.Movement(new Global.vektor(Character.Information.UniqueID, x, z, y, xsec, ysec)));
}
if (Character.Information.Berserking)
{
Character.Position.Time = (distance / (Character.Speed.BerserkSpeed * 0.0768)) * 1000.0;
}
else
{
Character.Position.Time = (distance / (Character.Speed.RunSpeed * 0.0768)) * 1000.0;
}
}
Reader.Close();
if (xsec != 0 && ysec != 0)
{
Send(Packet.Movement(new Global.vektor(Character.Information.UniqueID, x, z, y, xsec, ysec)));
}
if (Character.Grabpet.Active)
{
Send(Packet.Movement(new Global.vektor(Character.Grabpet.Details.UniqueID, x + rnd.Next(10, 25), z, y + rnd.Next(10, 25), xsec, ysec)));
}
if (Character.Attackpet.Active)
{
Send(Packet.Movement(new Global.vektor(Character.Attackpet.Details.UniqueID, x + rnd.Next(10, 25), z, y + rnd.Next(10, 25), xsec, ysec)));
}
Character.Position.RecordedTime = Character.Position.Time;
StartMovementTimer((int)(Character.Position.Time * 0.1));
}
}
catch (Exception ex)
{
Console.WriteLine("Movement error: {0}", ex);
}
}