66 lines
2.3 KiB
C#
66 lines
2.3 KiB
C#
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("spawn")]
|
|
internal class ChatSpawnCommandHandler
|
|
{
|
|
private readonly ChatRoom _helperRoom;
|
|
private readonly EntitySystem _entitySystem;
|
|
private readonly EntityFactory _entityFactory;
|
|
private readonly PlayerSession _session;
|
|
private readonly ConfigManager _configManager;
|
|
private readonly CreatureController _creatureController;
|
|
|
|
public ChatSpawnCommandHandler(ModelManager modelManager, EntitySystem entitySystem, EntityFactory entityFactory, PlayerSession session, ConfigManager configManager, CreatureController creatureController)
|
|
{
|
|
_helperRoom = modelManager.Chat.GetChatRoom(1338);
|
|
_entitySystem = entitySystem;
|
|
_entityFactory = entityFactory;
|
|
_session = session;
|
|
_configManager = configManager;
|
|
_creatureController = creatureController;
|
|
}
|
|
|
|
[ChatCommand("monster")]
|
|
[ChatCommandDesc("/spawn monster [id] [x] [y] [z] - spawns monster with specified id and coordinates")]
|
|
public async Task OnSpawnMonsterCommand(string[] args)
|
|
{
|
|
if (args.Length != 4 ||
|
|
!(int.TryParse(args[0], out int levelEntityId) &&
|
|
float.TryParse(args[1], out float x) &&
|
|
float.TryParse(args[2], out float y) &&
|
|
float.TryParse(args[3], out float z)))
|
|
{
|
|
_helperRoom.AddMessage(1338, 0, "Usage: /spawn monster [id] [x] [y] [z]");
|
|
return;
|
|
}
|
|
|
|
MonsterEntity monster = _entityFactory.CreateMonster(levelEntityId);
|
|
monster.Pos = new()
|
|
{
|
|
X = x * 100,
|
|
Y = y * 100,
|
|
Z = z * 100
|
|
};
|
|
|
|
_entitySystem.Create(monster);
|
|
monster.InitProps(_configManager.GetConfig<BasePropertyConfig>(600000100)!); // TODO: monster property config
|
|
|
|
await _session.Push(MessageId.EntityAddNotify, new EntityAddNotify
|
|
{
|
|
IsAdd = true,
|
|
EntityPbs = { monster.Pb }
|
|
});
|
|
|
|
await _creatureController.UpdateAiHate();
|
|
|
|
_helperRoom.AddMessage(1338, 0, $"Successfully spawned monster with id {levelEntityId} at ({x}, {y}, {z})");
|
|
}
|
|
}
|