server-master/srcs/_plugins/WingsEmu.Plugins.Essentials/God/GodSetRankModule.cs
2026-02-10 18:21:30 +01:00

103 lines
No EOL
4 KiB
C#

// WingsEmu
//
// Developed by NosWings Team
using System;
using System.Threading.Tasks;
using Qmmands;
using WingsAPI.Communication;
using WingsAPI.Communication.DbServer.CharacterService;
using WingsAPI.Data.Character;
using WingsEmu.Commands.Checks;
using WingsEmu.Commands.Entities;
using WingsEmu.DTOs.Account;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
namespace WingsEmu.Plugins.Essentials.God;
[Name("Administrator")]
[Description("Module related to God commands.")]
[RequireAuthority(AuthorityType.Root)]
public class GodSetRankModule : SaltyModuleBase
{
private readonly ICharacterService _characterService;
private readonly IPlayerEntityFactory _playerEntityFactory;
public GodSetRankModule(ICharacterService characterService, IPlayerEntityFactory playerEntityFactory)
{
_characterService = characterService;
_playerEntityFactory = playerEntityFactory;
}
[Command("setrank")]
[Description("Sets the rank of the given player")]
public async Task<SaltyCommandResult> SetRank(IClientSession character, int authority)
{
var targetAuthority = (AuthorityType)authority;
if (targetAuthority > Context.Player.PlayerEntity.Authority)
{
return new SaltyCommandResult(false, "You can't set someone's rights to higher than your own rights");
}
character.Account.Authority = targetAuthority;
Context.Player.SendInformationChatMessage($"{character.PlayerEntity.Name}'s new rank is {character.Account.Authority.ToString()}");
character.ChangeMap(character.CurrentMapInstance.Id);
return new SaltyCommandResult(true);
}
[Command("ranks")]
[Description("Gives the list of available ranks")]
public async Task<SaltyCommandResult> SetRank()
{
Context.Player.SendInformationChatMessage("---- RANKS ----");
foreach (object? rank in Enum.GetValues(typeof(AuthorityType)))
{
Context.Player.SendInformationChatMessage($"{rank}: {(int)rank}");
}
return new SaltyCommandResult(true);
}
[Command("force-cache")]
[Description("Gives the list of available ranks")]
public async Task<SaltyCommandResult> ForceRemoveCharacterFromCache([Description("characterName")] string characterName)
{
DbServerGetCharacterResponse response = await _characterService.ForceRemoveCharacterFromCache(new DbServerGetCharacterRequestByName
{
CharacterName = characterName
});
string successMessage = $"[CACHE_CLEAN] {characterName} has been removed from cache";
string errorMessage = $"[CACHE_CLEAN] {characterName} couldn't be found";
bool isSuccess = response.RpcResponseType == RpcResponseType.SUCCESS;
return new SaltyCommandResult(isSuccess, isSuccess ? successMessage : errorMessage);
}
[Command("change-name")]
[Description("Changes the name of the target to new name")]
public async Task<SaltyCommandResult> ForceRemoveCharacterFromCache([Description("targetSession")] IClientSession target, [Description("New expected name")] string newName)
{
CharacterDTO newCharacter = _playerEntityFactory.CreateCharacterDto(target.PlayerEntity);
newCharacter.Name = newName;
// force flush to db method
DbServerSaveCharacterResponse response = await _characterService.CreateCharacter(new DbServerSaveCharacterRequest
{
Character = newCharacter,
IgnoreSlotCheck = true
});
if (response.RpcResponseType != RpcResponseType.SUCCESS)
{
return new SaltyCommandResult(false, $"[CHANGE_NAME] {newName} already existed");
}
string oldName = target.PlayerEntity.Name;
target.PlayerEntity.Name = newName;
target.ChangeMap(target.CurrentMapInstance, target.PlayerEntity.PositionX, target.PlayerEntity.PositionY);
return new SaltyCommandResult(true, $"[CHANGE_NAME] {oldName} has changed to {newName}");
}
}