// // Licensed under the MIT License. See LICENSE file in the project root for full license information. // namespace MUnique.OpenMU.GameLogic.PlayerActions.Guild; using MUnique.OpenMU.GameLogic.Views.Guild; /// /// Action to create a guild. /// public class GuildCreateAction { /// /// Creates the guild. /// /// The creator. /// Name of the guild. /// The guild emblem. public async ValueTask CreateGuildAsync(Player creator, string guildName, byte[] guildEmblem) { using var loggerScope = creator.Logger.BeginScope(this.GetType()); if (creator.PlayerState.CurrentState != PlayerState.EnteredWorld) { creator.Logger.LogError($"Account {creator.Account?.LoginName} not in the right state, but {creator.PlayerState.CurrentState}."); return; } var guildServer = (creator.GameContext as IGameServerContext)?.GuildServer; if (guildServer is null) { creator.Logger.LogError($"No guild server available"); return; } if (await guildServer.GuildExistsAsync(guildName).ConfigureAwait(false)) { await creator.InvokeViewPlugInAsync(p => p.ShowGuildCreateResultAsync(GuildCreateErrorDetail.GuildAlreadyExist)).ConfigureAwait(false); return; } if (await guildServer.CreateGuildAsync(guildName, creator.SelectedCharacter!.Name, creator.SelectedCharacter.Id, guildEmblem, ((IGameServerContext)creator.GameContext).Id).ConfigureAwait(false)) { await creator.InvokeViewPlugInAsync(p => p.ShowGuildCreateResultAsync(GuildCreateErrorDetail.None)).ConfigureAwait(false); creator.Logger.LogInformation("Guild created: [{0}], Master: [{1}]", guildName, creator.SelectedCharacter.Name); } else { await creator.InvokeViewPlugInAsync(p => p.ShowGuildCreateResultAsync(GuildCreateErrorDetail.GuildAlreadyExist)).ConfigureAwait(false); } } }