server-master/srcs/WingsAPI.Game/Extensions/BroadcasterExtensions.cs
2026-02-10 18:21:30 +01:00

56 lines
No EOL
2.6 KiB
C#

using System;
using System.Threading.Tasks;
using WingsEmu.Game._i18n;
using WingsEmu.Game.GameEvent;
using WingsEmu.Game.GameEvent.Configuration;
using WingsEmu.Game.Networking;
using WingsEmu.Game.Networking.Broadcasting;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Game.Extensions;
public static class BroadcasterExtensions
{
private static IGameLanguageService _languageService => StaticGameLanguageService.Instance;
public static void BroadcastToFamily(this IBroadcaster broadcaster, string packet, long familyId) => broadcaster.Broadcast(packet, new FamilyBroadcast(familyId));
public static void BroadcastToFamily(this IBroadcaster broadcaster, long familyId, Func<IClientSession, Task<string>> func)
{
broadcaster.BroadcastAsync(func, new FamilyBroadcast(familyId));
}
public static void BroadcastToFamilyExceptFamilyHead(this IBroadcaster broadcaster, long familyId, Func<IClientSession, Task<string>> func)
{
broadcaster.BroadcastAsync(func, new FamilyBroadcast(familyId));
}
public static void BroadcastToGameMaster(this IBroadcaster broadcaster, string message) => broadcaster.Broadcast($"say 0 0 11 {message}", new OnlyGameMasters());
public static void BroadcastGameEventAsk(this IBroadcaster broadcaster, GameEventType gameType, IGlobalGameEventConfiguration gameEventConfiguration)
{
switch (gameType)
{
case GameEventType.InstantBattle:
// Do you want to take part in the event: Instant Combat?
broadcaster.Broadcast(x => x.GenerateEventAsk(QnamlType.InstantCombat, "guri 506", x.GenerateGameEventMessage(GameDialogKey.INSTANT_COMBAT_NAME)),
new InBaseMapBroadcast(), new NotMutedBroadcast());
break;
}
}
private static string GenerateGameEventMessage(this IClientSession x, GameDialogKey gameEventName, long cost = default)
{
if (cost == default)
{
return _languageService.GetLanguageFormat(GameDialogKey.GAMEEVENT_DIALOG_ASK_PARTICIPATE, x.UserLanguage,
_languageService.GetLanguage(gameEventName, x.UserLanguage));
}
return _languageService.GetLanguageFormat(GameDialogKey.GAMEEVENT_DIALOG_ASK_PARTICIPATE_WITH_COST, x.UserLanguage,
_languageService.GetLanguage(gameEventName, x.UserLanguage), cost);
}
public static void BroadcastToGameMaster(this IBroadcaster broadcaster, IClientSession player, string message)
=> broadcaster.Broadcast($"say 0 0 11 [GM_ONLY] Player: {player?.PlayerEntity.Name} - {message}", new OnlyGameMasters());
}