Implement getpos and teleport commands
This commit is contained in:
parent
3ecc265f4d
commit
06692b4be9
1 changed files with 68 additions and 0 deletions
|
@ -0,0 +1,68 @@
|
||||||
|
using Core.Config;
|
||||||
|
using GameServer.Controllers.Attributes;
|
||||||
|
using GameServer.Models;
|
||||||
|
using GameServer.Models.Chat;
|
||||||
|
using GameServer.Network;
|
||||||
|
using GameServer.Systems.Entity;
|
||||||
|
using Protocol;
|
||||||
|
|
||||||
|
namespace GameServer.Controllers.ChatCommands;
|
||||||
|
|
||||||
|
[ChatCommandCategory("player")]
|
||||||
|
internal class ChatPlayerCommandHandler
|
||||||
|
{
|
||||||
|
private readonly ChatRoom _helperRoom;
|
||||||
|
private readonly PlayerSession _session;
|
||||||
|
private readonly CreatureController _creatureController;
|
||||||
|
|
||||||
|
public ChatPlayerCommandHandler(ModelManager modelManager, PlayerSession session, CreatureController creatureController)
|
||||||
|
{
|
||||||
|
_helperRoom = modelManager.Chat.GetChatRoom(1338);
|
||||||
|
_session = session;
|
||||||
|
_creatureController = creatureController;
|
||||||
|
}
|
||||||
|
|
||||||
|
[ChatCommand("getpos")]
|
||||||
|
[ChatCommandDesc("/player getpos - shows current player coordinates")]
|
||||||
|
public void OnPlayerGetPosCommand(string[] _)
|
||||||
|
{
|
||||||
|
PlayerEntity? entity = _creatureController.GetPlayerEntity();
|
||||||
|
if (entity == null) return;
|
||||||
|
|
||||||
|
_helperRoom.AddMessage(1338, 0, $"Your current position: ({entity.Pos.X / 100}, {entity.Pos.Y / 100}, {entity.Pos.Z / 100})");
|
||||||
|
}
|
||||||
|
|
||||||
|
[ChatCommand("teleport")]
|
||||||
|
[ChatCommandDesc("/player teleport [x] [y] [z] - performing fast travel to specified position")]
|
||||||
|
public async Task OnPlayerTeleportCommand(string[] args)
|
||||||
|
{
|
||||||
|
if (args.Length != 3 || !float.TryParse(args[0], out float x)
|
||||||
|
|| !float.TryParse(args[1], out float y)
|
||||||
|
|| !float.TryParse(args[2], out float z))
|
||||||
|
{
|
||||||
|
_helperRoom.AddMessage(1338, 0, $"Usage: /player teleport [x] [y] [z]");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerEntity? entity = _creatureController.GetPlayerEntity();
|
||||||
|
|
||||||
|
if (entity != null)
|
||||||
|
{
|
||||||
|
await _session.Push(MessageId.TeleportNotify, new TeleportNotify
|
||||||
|
{
|
||||||
|
PosX = x * 100,
|
||||||
|
PosY = y * 100,
|
||||||
|
PosZ = z * 100,
|
||||||
|
PosA = 0,
|
||||||
|
MapId = 8,
|
||||||
|
Reason = (int)TeleportReason.Gm,
|
||||||
|
TransitionOption = new TransitionOptionPb
|
||||||
|
{
|
||||||
|
TransitionType = (int)TransitionType.Empty
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_helperRoom.AddMessage(1338, 0, $"Successfully performed fast travel to ({x}, {y}, {z})");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue