feat: смена значков в консоли ID карт
This commit is contained in:
@@ -42,7 +42,9 @@ namespace Content.Client.Access.UI
|
||||
};
|
||||
|
||||
_window.CrewManifestButton.OnPressed += _ => SendMessage(new CrewManifestOpenUiMessage());
|
||||
_window.PrivilegedIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(PrivilegedIdCardSlotId));
|
||||
_window.PrivilegedIdButton.OnPressed +=
|
||||
_ => SendMessage(new ItemSlotButtonPressedEvent(PrivilegedIdCardSlotId));
|
||||
|
||||
_window.TargetIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(TargetIdCardSlotId));
|
||||
|
||||
_window.OnClose += Close;
|
||||
@@ -65,7 +67,12 @@ namespace Content.Client.Access.UI
|
||||
_window?.UpdateState(castState);
|
||||
}
|
||||
|
||||
public void SubmitData(string newFullName, string newJobTitle, List<string> newAccessList, string newJobPrototype)
|
||||
public void SubmitData(
|
||||
string newFullName,
|
||||
string newJobTitle,
|
||||
List<string> newAccessList,
|
||||
string newJobPrototype,
|
||||
string? newJobIcon)
|
||||
{
|
||||
if (newFullName.Length > MaxFullNameLength)
|
||||
newFullName = newFullName[..MaxFullNameLength];
|
||||
@@ -77,7 +84,8 @@ namespace Content.Client.Access.UI
|
||||
newFullName,
|
||||
newJobTitle,
|
||||
newAccessList,
|
||||
newJobPrototype));
|
||||
newJobPrototype,
|
||||
newJobIcon));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<DefaultWindow xmlns="https://spacestation14.io"
|
||||
MinSize="650 290">
|
||||
MinSize="650 290">
|
||||
<BoxContainer Orientation="Vertical">
|
||||
<GridContainer Columns="2">
|
||||
<GridContainer Columns="3" HorizontalExpand="True">
|
||||
<Label Text="{Loc 'id-card-console-window-privileged-id'}" />
|
||||
<Button Name="PrivilegedIdButton" Access="Public"/>
|
||||
<Button Name="PrivilegedIdButton" Access="Public" />
|
||||
<Label Name="PrivilegedIdLabel" />
|
||||
|
||||
<Label Text="{Loc 'id-card-console-window-target-id'}" />
|
||||
<Button Name="TargetIdButton" Access="Public"/>
|
||||
<Button Name="TargetIdButton" Access="Public" />
|
||||
<Label Name="TargetIdLabel" />
|
||||
</GridContainer>
|
||||
<BoxContainer Orientation="Vertical">
|
||||
@@ -35,5 +35,13 @@
|
||||
<!-- Access level buttons are added here by the C# code -->
|
||||
|
||||
</GridContainer>
|
||||
<!-- WD EDIT -->
|
||||
<GridContainer Name="CurrentJobIcon" Columns="2">
|
||||
<Label Text="Текущая выбранная иконка для роли: " />
|
||||
</GridContainer>
|
||||
<GridContainer Name="JobIconsGrid" Columns="10" HorizontalAlignment="Center">
|
||||
<!-- Job icon buttons are generated in the code -->
|
||||
</GridContainer>
|
||||
<!-- WD EDIT END -->
|
||||
</BoxContainer>
|
||||
</DefaultWindow>
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using Content.Shared.Access;
|
||||
using Content.Shared.Access.Components;
|
||||
using Content.Shared.Access.Systems;
|
||||
using Content.Shared.Roles;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.ResourceManagement;
|
||||
using Robust.Client.UserInterface.Controls;
|
||||
using Robust.Client.UserInterface.CustomControls;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
using static Content.Shared.Access.Components.IdCardConsoleComponent;
|
||||
|
||||
namespace Content.Client.Access.UI
|
||||
@@ -16,18 +20,24 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
|
||||
[Dependency] private readonly ILogManager _logManager = default!;
|
||||
[Dependency] private readonly IResourceCache _resource = default!; //WD-EDIT
|
||||
[Dependency] private readonly IEntityManager _entityManager = default!; //WD-EDIT
|
||||
private readonly ISawmill _logMill = default!;
|
||||
|
||||
private readonly IdCardConsoleBoundUserInterface _owner;
|
||||
|
||||
private readonly Dictionary<string, Button> _accessButtons = new();
|
||||
private readonly Dictionary<string, TextureButton> _jobIconButtons = new(); //WD-EDIT
|
||||
private readonly List<string> _jobPrototypeIds = new();
|
||||
|
||||
private string? _lastFullName;
|
||||
private string? _lastJobTitle;
|
||||
private string? _lastJobProto;
|
||||
private string? _lastJobIcon; //WD-EDIT
|
||||
|
||||
public IdCardConsoleWindow(IdCardConsoleBoundUserInterface owner, IPrototypeManager prototypeManager,
|
||||
public IdCardConsoleWindow(
|
||||
IdCardConsoleBoundUserInterface owner,
|
||||
IPrototypeManager prototypeManager,
|
||||
List<ProtoId<AccessLevelPrototype>> accessLevels)
|
||||
{
|
||||
RobustXamlLoader.Load(this);
|
||||
@@ -41,6 +51,7 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
FullNameSaveButton.Disabled = FullNameSaveButton.Text == _lastFullName;
|
||||
};
|
||||
|
||||
FullNameSaveButton.OnPressed += _ => SubmitData();
|
||||
|
||||
JobTitleLineEdit.OnTextEntered += _ => SubmitData();
|
||||
@@ -48,6 +59,7 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
JobTitleSaveButton.Disabled = JobTitleLineEdit.Text == _lastJobTitle;
|
||||
};
|
||||
|
||||
JobTitleSaveButton.OnPressed += _ => SubmitData();
|
||||
|
||||
var jobs = _prototypeManager.EnumeratePrototypes<JobPrototype>().ToList();
|
||||
@@ -69,7 +81,7 @@ namespace Content.Client.Access.UI
|
||||
|
||||
foreach (var access in accessLevels)
|
||||
{
|
||||
if (!prototypeManager.TryIndex<AccessLevelPrototype>(access, out var accessLevel))
|
||||
if (!prototypeManager.TryIndex(access, out var accessLevel))
|
||||
{
|
||||
_logMill.Error($"Unable to find accesslevel for {access}");
|
||||
continue;
|
||||
@@ -78,19 +90,50 @@ namespace Content.Client.Access.UI
|
||||
var newButton = new Button
|
||||
{
|
||||
Text = GetAccessLevelName(accessLevel),
|
||||
ToggleMode = true,
|
||||
ToggleMode = true
|
||||
};
|
||||
|
||||
_accessButtons.Add(accessLevel.ID, newButton);
|
||||
newButton.OnPressed += _ => SubmitData();
|
||||
buttonsToAdd.Add(newButton);
|
||||
}
|
||||
|
||||
buttonsToAdd.Sort((x,y) => string.Compare(x.Text, y.Text, StringComparison.Ordinal));
|
||||
buttonsToAdd.Sort((x, y) => string.Compare(x.Text, y.Text, StringComparison.Ordinal));
|
||||
|
||||
foreach (var button in buttonsToAdd)
|
||||
{
|
||||
AccessLevelGrid.AddChild(button);
|
||||
}
|
||||
|
||||
//WD-EDIT
|
||||
if (!_entityManager.TryGetComponent<IdCardConsoleComponent>(owner.Owner, out var idConsoleComponent))
|
||||
return;
|
||||
|
||||
var path = new ResPath("/Textures/Interface/Misc/job_icons.rsi");
|
||||
_resource.TryGetResource(path, out RSIResource? rsi);
|
||||
if (rsi == null)
|
||||
return;
|
||||
|
||||
foreach (var jobIcon in idConsoleComponent.JobIcons)
|
||||
{
|
||||
var newButton = new TextureButton
|
||||
{
|
||||
TextureNormal = rsi.RSI.TryGetState(jobIcon, out var state) ? state.Frame0
|
||||
: rsi.RSI.TryGetState("CustomId", out var customState) ? customState.Frame0
|
||||
: null,
|
||||
Scale = new Vector2(5, 5)
|
||||
};
|
||||
|
||||
_jobIconButtons.Add(jobIcon, newButton);
|
||||
newButton.OnPressed += _ =>
|
||||
{
|
||||
_lastJobIcon = jobIcon;
|
||||
SubmitData();
|
||||
};
|
||||
|
||||
JobIconsGrid.AddChild(newButton);
|
||||
}
|
||||
//WD-EDIT
|
||||
}
|
||||
|
||||
private static string GetAccessLevelName(AccessLevelPrototype prototype)
|
||||
@@ -149,6 +192,7 @@ namespace Content.Client.Access.UI
|
||||
}
|
||||
}
|
||||
|
||||
_lastJobIcon = job.Icon;
|
||||
SubmitData();
|
||||
}
|
||||
|
||||
@@ -195,11 +239,11 @@ namespace Content.Client.Access.UI
|
||||
foreach (var (accessName, button) in _accessButtons)
|
||||
{
|
||||
button.Disabled = !interfaceEnabled;
|
||||
if (interfaceEnabled)
|
||||
{
|
||||
button.Pressed = state.TargetIdAccessList?.Contains(accessName) ?? false;
|
||||
button.Disabled = (!state.AllowedModifyAccessList?.Contains(accessName)) ?? true;
|
||||
}
|
||||
if (!interfaceEnabled)
|
||||
continue;
|
||||
|
||||
button.Pressed = state.TargetIdAccessList?.Contains(accessName) ?? false;
|
||||
button.Disabled = !state.AllowedModifyAccessList?.Contains(accessName) ?? true;
|
||||
}
|
||||
|
||||
var jobIndex = _jobPrototypeIds.IndexOf(state.TargetIdJobPrototype);
|
||||
@@ -208,6 +252,37 @@ namespace Content.Client.Access.UI
|
||||
JobPresetOptionButton.SelectId(jobIndex);
|
||||
}
|
||||
|
||||
//WD-EDIT
|
||||
if (_resource.TryGetResource(new ResPath("/Textures/Interface/Misc/job_icons.rsi"), out RSIResource? rsi))
|
||||
{
|
||||
CurrentJobIcon.RemoveAllChildren();
|
||||
var newLabel = new Label
|
||||
{
|
||||
Text = "Текущая выбранная иконка для роли: "
|
||||
};
|
||||
|
||||
CurrentJobIcon.AddChild(newLabel);
|
||||
var newIcon = new TextureRect
|
||||
{
|
||||
Texture = rsi.RSI.TryGetState(state.TargetIdJobIcon?.Replace("JobIcon", ""), out var iconState)
|
||||
? iconState.Frame0
|
||||
: rsi.RSI.TryGetState("CustomId", out var customState)
|
||||
? customState.Frame0
|
||||
: null,
|
||||
|
||||
TextureScale = new Vector2(4, 4)
|
||||
};
|
||||
|
||||
CurrentJobIcon.AddChild(newIcon);
|
||||
}
|
||||
|
||||
foreach (var (jobIcon, button) in _jobIconButtons)
|
||||
{
|
||||
button.Disabled = !interfaceEnabled;
|
||||
button.Pressed = state.TargetIdJobIcon == jobIcon;
|
||||
}
|
||||
//WD-EDIT
|
||||
|
||||
_lastFullName = state.TargetIdFullName;
|
||||
_lastJobTitle = state.TargetIdJobTitle;
|
||||
_lastJobProto = state.TargetIdJobPrototype;
|
||||
@@ -217,14 +292,15 @@ namespace Content.Client.Access.UI
|
||||
{
|
||||
// Don't send this if it isn't dirty.
|
||||
var jobProtoDirty = _lastJobProto != null &&
|
||||
_jobPrototypeIds[JobPresetOptionButton.SelectedId] != _lastJobProto;
|
||||
_jobPrototypeIds[JobPresetOptionButton.SelectedId] != _lastJobProto;
|
||||
|
||||
_owner.SubmitData(
|
||||
FullNameLineEdit.Text,
|
||||
JobTitleLineEdit.Text,
|
||||
// Iterate over the buttons dictionary, filter by `Pressed`, only get key from the key/value pair
|
||||
_accessButtons.Where(x => x.Value.Pressed).Select(x => x.Key).ToList(),
|
||||
jobProtoDirty ? _jobPrototypeIds[JobPresetOptionButton.SelectedId] : string.Empty);
|
||||
jobProtoDirty ? _jobPrototypeIds[JobPresetOptionButton.SelectedId] : string.Empty,
|
||||
_lastJobIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,8 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
if (args.Session.AttachedEntity is not { Valid: true } player)
|
||||
return;
|
||||
|
||||
TryWriteToTargetId(uid, args.FullName, args.JobTitle, args.AccessList, args.JobPrototype, player, component);
|
||||
TryWriteToTargetId(uid, args.FullName, args.JobTitle, args.AccessList, args.JobPrototype, args.SelectedIcon,
|
||||
player, component);
|
||||
|
||||
UpdateUserInterface(uid, component, args);
|
||||
}
|
||||
@@ -77,7 +78,8 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
possibleAccess,
|
||||
string.Empty,
|
||||
privilegedIdName,
|
||||
string.Empty);
|
||||
string.Empty,
|
||||
"JobIconNoId"); // WD EDIt
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -85,12 +87,16 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
var targetAccessComponent = EntityManager.GetComponent<AccessComponent>(targetId);
|
||||
|
||||
var jobProto = string.Empty;
|
||||
var jobIcon = string.Empty; //WD-EDIT
|
||||
|
||||
if (_station.GetOwningStation(uid) is { } station
|
||||
&& EntityManager.TryGetComponent<StationRecordKeyStorageComponent>(targetId, out var keyStorage)
|
||||
&& keyStorage.Key != null
|
||||
&& _record.TryGetRecord<GeneralStationRecord>(station, keyStorage.Key.Value, out var record))
|
||||
{
|
||||
jobProto = record.JobPrototype;
|
||||
jobIcon = record.JobIcon;
|
||||
Dirty(targetId, targetIdComponent);
|
||||
}
|
||||
|
||||
newState = new IdCardConsoleBoundUserInterfaceState(
|
||||
@@ -103,7 +109,9 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
possibleAccess,
|
||||
jobProto,
|
||||
privilegedIdName,
|
||||
EntityManager.GetComponent<MetaDataComponent>(targetId).EntityName);
|
||||
EntityManager.GetComponent<MetaDataComponent>(targetId).EntityName,
|
||||
jobIcon
|
||||
);
|
||||
}
|
||||
|
||||
_userInterface.TrySetUiState(uid, IdCardConsoleUiKey.Key, newState);
|
||||
@@ -113,11 +121,14 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
/// Called whenever an access button is pressed, adding or removing that access from the target ID card.
|
||||
/// Writes data passed from the UI into the ID stored in <see cref="IdCardConsoleComponent.TargetIdSlot"/>, if present.
|
||||
/// </summary>
|
||||
private void TryWriteToTargetId(EntityUid uid,
|
||||
/// WD-INFO: Also called when icon is changed, to update it on ID.
|
||||
private void TryWriteToTargetId(
|
||||
EntityUid uid,
|
||||
string newFullName,
|
||||
string newJobTitle,
|
||||
List<string> newAccessList,
|
||||
string newJobProto,
|
||||
string? newJobIcon,
|
||||
EntityUid player,
|
||||
IdCardConsoleComponent? component = null)
|
||||
{
|
||||
@@ -127,6 +138,13 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
if (component.TargetIdSlot.Item is not { Valid: true } targetId || !PrivilegedIdIsAuthorized(uid, component))
|
||||
return;
|
||||
|
||||
//WD-EDIT
|
||||
if (TryComp<IdCardComponent>(targetId, out var idCardComponent) && newJobIcon != null)
|
||||
{
|
||||
idCardComponent.JobIcon = newJobIcon;
|
||||
}
|
||||
//WD-EDIT
|
||||
|
||||
_idCard.TryChangeFullName(targetId, newFullName, player: player);
|
||||
_idCard.TryChangeJobTitle(targetId, newJobTitle, player: player);
|
||||
|
||||
@@ -148,7 +166,10 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
var privilegedId = component.PrivilegedIdSlot.Item;
|
||||
|
||||
if (oldTags.SequenceEqual(newAccessList))
|
||||
{
|
||||
UpdateStationRecord(uid, targetId, newFullName, newJobTitle, job, newJobIcon); //WD-EDIT
|
||||
return;
|
||||
}
|
||||
|
||||
// I hate that C# doesn't have an option for this and don't desire to write this out the hard way.
|
||||
// var difference = newAccessList.Difference(oldTags);
|
||||
@@ -170,7 +191,7 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
_adminLogger.Add(LogType.Action, LogImpact.Medium,
|
||||
$"{ToPrettyString(player):player} has modified {ToPrettyString(targetId):entity} with the following accesses: [{string.Join(", ", addedTags.Union(removedTags))}] [{string.Join(", ", newAccessList)}]");
|
||||
|
||||
UpdateStationRecord(uid, targetId, newFullName, newJobTitle, job);
|
||||
UpdateStationRecord(uid, targetId, newFullName, newJobTitle, job, newJobIcon);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -191,7 +212,13 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
return privilegedId != null && _accessReader.IsAllowed(privilegedId.Value, uid, reader);
|
||||
}
|
||||
|
||||
private void UpdateStationRecord(EntityUid uid, EntityUid targetId, string newFullName, string newJobTitle, JobPrototype? newJobProto)
|
||||
private void UpdateStationRecord(
|
||||
EntityUid uid,
|
||||
EntityUid targetId,
|
||||
string newFullName,
|
||||
string newJobTitle,
|
||||
JobPrototype? newJobProto,
|
||||
string? newJobIcon) // WD EDIT
|
||||
{
|
||||
if (_station.GetOwningStation(uid) is not { } station
|
||||
|| !EntityManager.TryGetComponent<StationRecordKeyStorageComponent>(targetId, out var keyStorage)
|
||||
@@ -210,6 +237,9 @@ public sealed class IdCardConsoleSystem : SharedIdCardConsoleSystem
|
||||
record.JobIcon = newJobProto.Icon;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newJobIcon))
|
||||
record.JobIcon = newJobIcon;
|
||||
|
||||
_record.Synchronize(station);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,13 +29,20 @@ public sealed partial class IdCardConsoleComponent : Component
|
||||
public readonly string JobTitle;
|
||||
public readonly List<string> AccessList;
|
||||
public readonly string JobPrototype;
|
||||
public readonly string? SelectedIcon; //WD-EDIT
|
||||
|
||||
public WriteToTargetIdMessage(string fullName, string jobTitle, List<string> accessList, string jobPrototype)
|
||||
public WriteToTargetIdMessage(
|
||||
string fullName,
|
||||
string jobTitle,
|
||||
List<string> accessList,
|
||||
string jobPrototype,
|
||||
string? selectedIcon) //WD-EDIT (selectedIcon)
|
||||
{
|
||||
FullName = fullName;
|
||||
JobTitle = jobTitle;
|
||||
AccessList = accessList;
|
||||
JobPrototype = jobPrototype;
|
||||
SelectedIcon = "JobIcon" + selectedIcon;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,9 +79,61 @@ public sealed partial class IdCardConsoleComponent : Component
|
||||
"Salvage",
|
||||
"Security",
|
||||
"Service",
|
||||
"Theatre",
|
||||
"Theatre"
|
||||
};
|
||||
|
||||
//WD-EDIT
|
||||
[DataField("jobIcons")]
|
||||
public List<string> JobIcons = new()
|
||||
{
|
||||
"AtmosphericTechnician",
|
||||
"Bartender",
|
||||
"Botanist",
|
||||
"Boxer",
|
||||
"Brigmedic",
|
||||
"Captain",
|
||||
"CargoTechnician",
|
||||
"Chaplain",
|
||||
"Chef",
|
||||
"Chemist",
|
||||
"ChiefEngineer",
|
||||
"ChiefMedicalOfficer",
|
||||
"Clown",
|
||||
"Detective",
|
||||
"Geneticist",
|
||||
"HeadOfPersonnel",
|
||||
"HeadOfSecurity",
|
||||
"Janitor",
|
||||
"Lawyer",
|
||||
"Librarian",
|
||||
"MedicalDoctor",
|
||||
"MedicalIntern",
|
||||
"Mime",
|
||||
"Musician",
|
||||
"Paramedic",
|
||||
"Passenger",
|
||||
"Psychologist",
|
||||
"QuarterMaster",
|
||||
"Reporter",
|
||||
"ResearchAssistant",
|
||||
"ResearchDirector",
|
||||
"Roboticist",
|
||||
"Scientist",
|
||||
"SecurityCadet",
|
||||
"SecurityOfficer",
|
||||
"SeniorEngineer",
|
||||
"SeniorOfficer",
|
||||
"SeniorResearcher",
|
||||
"ServiceWorker",
|
||||
"ShaftMiner",
|
||||
"StationEngineer",
|
||||
"TechnicalAssistant",
|
||||
"Virologist",
|
||||
"Warden",
|
||||
"Zookeeper"
|
||||
};
|
||||
// WD EDIT END
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public sealed class IdCardConsoleBoundUserInterfaceState : BoundUserInterfaceState
|
||||
{
|
||||
@@ -88,8 +147,10 @@ public sealed partial class IdCardConsoleComponent : Component
|
||||
public readonly string[]? TargetIdAccessList;
|
||||
public readonly string[]? AllowedModifyAccessList;
|
||||
public readonly string TargetIdJobPrototype;
|
||||
public readonly string? TargetIdJobIcon; //WD-EDIT
|
||||
|
||||
public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent,
|
||||
public IdCardConsoleBoundUserInterfaceState(
|
||||
bool isPrivilegedIdPresent,
|
||||
bool isPrivilegedIdAuthorized,
|
||||
bool isTargetIdPresent,
|
||||
string? targetIdFullName,
|
||||
@@ -98,7 +159,8 @@ public sealed partial class IdCardConsoleComponent : Component
|
||||
string[]? allowedModifyAccessList,
|
||||
string targetIdJobPrototype,
|
||||
string privilegedIdName,
|
||||
string targetIdName)
|
||||
string targetIdName,
|
||||
string? targetIdJobIcon) // #WD EDIT (targetIdJobIcon)
|
||||
{
|
||||
IsPrivilegedIdPresent = isPrivilegedIdPresent;
|
||||
IsPrivilegedIdAuthorized = isPrivilegedIdAuthorized;
|
||||
@@ -110,12 +172,13 @@ public sealed partial class IdCardConsoleComponent : Component
|
||||
TargetIdJobPrototype = targetIdJobPrototype;
|
||||
PrivilegedIdName = privilegedIdName;
|
||||
TargetIdName = targetIdName;
|
||||
TargetIdJobIcon = targetIdJobIcon; //WD-EDIT
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum IdCardConsoleUiKey : byte
|
||||
{
|
||||
Key,
|
||||
Key
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user