54 lines
No EOL
1.4 KiB
C#
54 lines
No EOL
1.4 KiB
C#
using System.Threading.Tasks;
|
|
using WingsEmu.Game._Guri;
|
|
using WingsEmu.Game._Guri.Event;
|
|
using WingsEmu.Game.Extensions;
|
|
using WingsEmu.Game.Helpers.Damages;
|
|
using WingsEmu.Game.Maps;
|
|
using WingsEmu.Game.Networking;
|
|
using WingsEmu.Packets.Enums.Chat;
|
|
|
|
namespace WingsEmu.Plugins.BasicImplementations.Guri;
|
|
|
|
public class PositionGuriHandler : IGuriHandler
|
|
{
|
|
public long GuriEffectId => 1;
|
|
|
|
public async Task ExecuteAsync(IClientSession session, GuriEvent e)
|
|
{
|
|
session.SendDebugMessage($"[GURI] Old position: {session.PlayerEntity.PositionX}/{session.PlayerEntity.PositionY}", ChatMessageColorType.Red);
|
|
|
|
if (e.Packet.Length <= 4)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!short.TryParse(e.Packet[5], out short newX))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!short.TryParse(e.Packet[6], out short newY))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (session.CurrentMapInstance.IsBlockedZone(newX, newY))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (session.PlayerEntity.IsSeal)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int distance = session.PlayerEntity.Position.GetDistance(newX, newY);
|
|
if (distance > 30)
|
|
{
|
|
return;
|
|
}
|
|
|
|
session.PlayerEntity.TeleportOnMap(newX, newY);
|
|
session.SendDebugMessage($"[GURI] New position: {session.PlayerEntity.PositionX}/{session.PlayerEntity.PositionY}", ChatMessageColorType.Red);
|
|
}
|
|
} |