void MovementSkill(PacketReader Reader)
{
try
{
if (!Character.Action.movementskill)
{
Character.Action.movementskill = true;
MovementSkillTimer(Data.SkillBase[Character.Action.UsingSkillID].Properties1["tele"] + 500);
if (Character.Action.sAttack || Character.Action.sCasting) return;
if (Character.Stat.SecondMP < Data.SkillBase[Character.Action.UsingSkillID].Mana) { client.Send(Packet.ActionPacket(2, 4)); return; }
else
{
Character.Stat.SecondMP -= Data.SkillBase[Character.Action.UsingSkillID].Mana;
UpdateMp();
if (Timer.Movement != null) { Timer.Movement.Dispose(); Character.Position.Walking = false; }
byte xSec = Reader.Byte(), ySec = Reader.Byte();
int x = Reader.Int32(), z = Reader.Int32(), y = Reader.Int32();
Reader.Close();
float gamex = DarkEmu_GameServer.Formule.gamex((float)x, xSec);
float gamey = DarkEmu_GameServer.Formule.gamey((float)y, ySec);
float farkx = gamex - Character.Position.x;
float farky = gamey - Character.Position.y;
float hesapy = 0, hesapx = 0;
while (hesapx + hesapy < Data.SkillBase[Character.Action.UsingSkillID].Properties2["tele"] / 10)
{
Character.Position.x += (farkx / 30);
Character.Position.y += (farky / 30);
hesapx += Math.Abs((farkx / 30));
hesapy += Math.Abs((farky / 30));
}
PacketWriter Writer = new PacketWriter();
Writer.Create(SERVER_ACTION_DATA);
Writer.Byte(1);
Writer.Byte(2);
Writer.Byte(0x30);
int overid = Character.Ids.GetCastingID();
Writer.DWord(Character.Action.UsingSkillID);//skillid
Writer.DWord(Character.Information.UniqueID); //charid
Writer.DWord(overid);//overid
Writer.DWord(0);
Writer.Byte(8);
Writer.Byte(xSec);
Writer.Byte(ySec);
Writer.DWord(Formule.packetx(Character.Position.x, xSec));
Writer.DWord(0);
Writer.DWord(Formule.packety(Character.Position.y, ySec));
Send(Writer.GetBytes());
client.Send(Packet.ActionState(2, 0));
ObjectSpawnCheck();
}
}
}
catch (Exception ex)
{
Systems.Debugger.Write(ex);
}
}