Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/NosCore.Data/Enumerations/I18N/LanguageKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ public enum LanguageKey
OBJECT_IN_BAZAAR,
ITEM_GIFTED,
NOT_IN_FRIENDLIST,
SPEAKER
SPEAKER,
FAMILY_AUTHORITY_HEAD,
FAMILY_AUTHORITY_ASSISTANT,
FAMILY_AUTHORITY_MANAGER,
FAMILY_AUTHORITY_MEMBER
}
}
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.cs.resx
Original file line number Diff line number Diff line change
Expand Up @@ -530,4 +530,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Neznámý typ vylepšení: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Hlava rodiny</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Asistent</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Správce</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Člen</value>
</data>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -553,4 +553,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Unbekannter Aufrüstungstyp: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Familienoberhaupt</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Assistent</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Verwalter</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Mitglied</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -457,4 +457,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Tipo de mejora no manejado: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Cabeza de familia</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Asistente</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Gerente</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Miembro</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.fr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -528,4 +528,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Type d'amélioration non géré: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Chef de famille</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Assistant</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Gardien</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Membre</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.it.resx
Original file line number Diff line number Diff line change
Expand Up @@ -574,4 +574,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Tipo di potenziamento non gestito: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all those are not translated we shouldnt add a value and not translate them

<value>Capofamiglia</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Assistente</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Gestore</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Membro</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.pl.resx
Original file line number Diff line number Diff line change
Expand Up @@ -480,4 +480,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Nieobsługiwany typ ulepszenia: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Głowa rodziny</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Asystent</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Zarządca</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Członek</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -604,4 +604,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Unhandled upgrade type: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Head</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Assistant</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Manager</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Member</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.ru.resx
Original file line number Diff line number Diff line change
Expand Up @@ -555,4 +555,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Неизвестный тип улучшения: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Глава семьи</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Помощник</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Управляющий</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Участник</value>
</data>
</root>
12 changes: 12 additions & 0 deletions src/NosCore.Data/Resource/LocalizedResources.tr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -546,4 +546,16 @@
<data name="UNHANDLED_UPGRADE_TYPE" xml:space="preserve">
<value>Bilinmeyen yükseltme türü: {0}</value>
</data>
<data name="FAMILY_AUTHORITY_HEAD" xml:space="preserve">
<value>Aile reisi</value>
</data>
<data name="FAMILY_AUTHORITY_ASSISTANT" xml:space="preserve">
<value>Yardımcı</value>
</data>
<data name="FAMILY_AUTHORITY_MANAGER" xml:space="preserve">
<value>Yönetici</value>
</data>
<data name="FAMILY_AUTHORITY_MEMBER" xml:space="preserve">
<value>Üye</value>
</data>
</root>
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@
//

using NodaTime;
using NosCore.GameObject.Services.FamilyService;
using System.Collections.Concurrent;

namespace NosCore.GameObject.Ecs.Components;

public record struct PlayerSocialComponent(
ConcurrentDictionary<long, long> GroupRequestCharacterIds,
Instant? LastGroupRequest);
Instant? LastGroupRequest,
Family? Family);
99 changes: 99 additions & 0 deletions src/NosCore.GameObject/Ecs/Extensions/FamilyExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// __ _ __ __ ___ __ ___ ___
// | \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Algorithm.FamilyExperienceService;
using NosCore.Core.I18N;
using NosCore.Data.Enumerations.Family;
using NosCore.Data.Enumerations.I18N;
using NosCore.Packets.ServerPackets.Families;
using NosCore.Shared.Enumerations;
using System.Linq;

namespace NosCore.GameObject.Ecs.Extensions;

public static class FamilyExtensions
{
/// <summary>
/// The family tag over a character's head, in the reader's language.
/// gidx 1 521919 5083 [NDM](Gardien) 3
/// gidx 1 741328 -1 - 0
/// </summary>
public static GidxPacket GenerateGidx(this PlayerComponentBundle player,
IGameLanguageLocalizer localizer, RegionType viewerLanguage)
{
var family = player.Family;
if (family == null)
{
return new GidxPacket
{
VisualType = VisualType.Player,
VisualId = player.VisualId,
FamilyId = null,
FamilyName = null,
FamilyLevel = 0
};
}

return new GidxPacket
{
VisualType = VisualType.Player,
VisualId = player.VisualId,
FamilyId = family.FamilyId,
FamilyName = FamilyTag(family, player.CharacterId, localizer, viewerLanguage),
FamilyLevel = family.FamilyLevel
};
}

/// <summary>
/// The family window, field by field from a capture:
/// ginfo -Nemesis- Yzigor 0 7 130000 640000 68 70 3 1 1 1 1 2 1 2 coin^afk^go^rush
/// </summary>
public static GInfoPacket? GenerateGInfo(this PlayerComponentBundle player,
IFamilyExperienceService familyExperienceService)
{
var family = player.Family;
if (family == null)
{
return null;
}

return new GInfoPacket
{
FamilyName = family.Name,
CharacterName = family.HeadCharacterName,
FamilyHeadGenderType = family.FamilyHeadGender,
FamilyLevel = family.FamilyLevel,
FamilyXp = family.FamilyExperience,
MaxFamilyXp = familyExperienceService.GetFamilyExperience(family.FamilyLevel),
MembersCount = (ushort)family.Members.Count,
MembersCapacity = family.MaxSize,
CharacterFamilyAuthority = (Packets.Enumerations.FamilyAuthority)family.AuthorityOf(player.CharacterId),
FamilyManagerCanInvit = family.ManagerCanInvite,
FamilyManagerCanNotice = family.ManagerCanNotice,
FamilyManagerCanShout = family.ManagerCanShout,
FamilyManagerCanGetHistory = family.ManagerCanGetHistory,
FamilyManagerAuthorityType = family.ManagerAuthorityType,
FamilyMemberCanGetHistory = family.MemberCanGetHistory,
FamilyMemberAuthorityType = family.MemberAuthorityType,
FamilyMessage = family.FamilyMessage
};
}

/// <summary>"Name(Rank)", e.g. [NDM](Gardien) - the brackets belong to the name.</summary>
private static string FamilyTag(Services.FamilyService.Family family, long characterId,
IGameLanguageLocalizer localizer, RegionType viewerLanguage)
{
var rank = family.AuthorityOf(characterId) switch
{
FamilyAuthority.Head => LanguageKey.FAMILY_AUTHORITY_HEAD,
FamilyAuthority.Assistant => LanguageKey.FAMILY_AUTHORITY_ASSISTANT,
FamilyAuthority.Manager => LanguageKey.FAMILY_AUTHORITY_MANAGER,
_ => LanguageKey.FAMILY_AUTHORITY_MEMBER
};

return $"{family.Name}({localizer[rank, viewerLanguage]})";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,6 @@ await player.SendPacketAsync(new MsgiPacket
});
}


public static InPacket GenerateIn(this PlayerComponentBundle player, string prefix)
{
return new InPacket
Expand Down Expand Up @@ -434,8 +433,8 @@ public static CInfoPacket GenerateCInfo(this PlayerComponentBundle player, IGame
? $"[{localizer[LanguageKey.SUPPORT, player.Account.Language]}]" + player.Name : player.Name,
Unknown1 = null,
GroupId = -1,
FamilyId = -1,
FamilyName = null,
FamilyId = (int)(player.Family?.FamilyId ?? -1),
FamilyName = player.GenerateGidx(localizer, player.AccountLanguage).FamilyName,
CharacterId = player.VisualId,
Authority = player.Authority,
Gender = player.Gender,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
using NosCore.GameObject.Messaging.Handlers.Nrun;
using NosCore.GameObject.Services.BroadcastService;
using NosCore.GameObject.Services.ExchangeService;
using NosCore.GameObject.Services.FamilyService;
using NosCore.GameObject.Services.GroupService;
using NosCore.GameObject.Services.MapInstanceGenerationService;
using NosCore.GameObject.Services.MinilandService;
Expand Down Expand Up @@ -59,6 +60,7 @@ public static void RegisterDependencies(IServiceCollection services)
services.AddSingleton<IMapInstanceRegistry, MapInstanceRegistry>();
services.AddSingleton<IExchangeRequestRegistry, ExchangeRequestRegistry>();
services.AddSingleton<ISessionGroupFactory, SessionGroupFactory>();
services.AddSingleton<IFamilyService, FamilyService>();

// Inter-channel hub clients — one instance per concrete HubClient, each
// exposed as all of its implemented interfaces so features that depend on
Expand Down
26 changes: 26 additions & 0 deletions src/NosCore.GameObject/Services/FamilyService/Family.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// __ _ __ __ ___ __ ___ ___
// | \| |/__\ /' _/ / _//__\| _ \ __|
// | | ' | \/ |`._`.| \_| \/ | v / _|
// |_|\__|\__/ |___/ \__/\__/|_|_\___|
//

using NosCore.Data.Dto;
using NosCore.Data.Enumerations.Family;
using System.Collections.Generic;
using System.Linq;

namespace NosCore.GameObject.Services.FamilyService
{
public class Family : FamilyDto
{
public IReadOnlyList<FamilyCharacterDto> Members { get; set; } = [];

/// <summary>The head's name, kept here because the head is usually offline.</summary>
public string HeadCharacterName { get; set; } = string.Empty;

/// <summary>Not in the member list means Member: the packet cannot say "none".</summary>
public FamilyAuthority AuthorityOf(long characterId) =>
Members.FirstOrDefault(s => s.CharacterId == characterId)?.Authority
?? FamilyAuthority.Member;
}
}
Loading
Loading