Skip to content
Merged
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
2 changes: 1 addition & 1 deletion XPSystem.Console/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="LabApi" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
<bindingRedirect oldVersion="0.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Expand Down
2 changes: 0 additions & 2 deletions XPSystem.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,8 +139,6 @@ public static void Main(string[] args)
foreach ((int level, int xp) kvp in new[]
{
(0, 0),
(1, 151),
(1245, 1674575),
(random.Next(0, 100), -1),
(random.Next(100, 1000), -1),
(random.Next(1000, 1000), -1),
Expand Down
40 changes: 20 additions & 20 deletions XPSystem.Console/XPSystem.Console.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -43,44 +43,44 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Assembly-CSharp, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Assembly-CSharp-Publicized.dll</HintPath>
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Assembly-CSharp-Publicized.dll</HintPath>
</Reference>
<Reference Include="CommandSystem.Core, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\CommandSystem.Core.dll</HintPath>
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\CommandSystem.Core.dll</HintPath>
</Reference>
<Reference Include="Exiled.API, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.API.dll</HintPath>
<Reference Include="Exiled.API, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.API.dll</HintPath>
</Reference>
<Reference Include="Exiled.CreditTags, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.CreditTags.dll</HintPath>
<Reference Include="Exiled.CreditTags, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.CreditTags.dll</HintPath>
</Reference>
<Reference Include="Exiled.CustomItems, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.CustomItems.dll</HintPath>
<Reference Include="Exiled.CustomItems, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.CustomItems.dll</HintPath>
</Reference>
<Reference Include="Exiled.CustomRoles, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.CustomRoles.dll</HintPath>
<Reference Include="Exiled.CustomRoles, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.CustomRoles.dll</HintPath>
</Reference>
<Reference Include="Exiled.Events, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.Events.dll</HintPath>
<Reference Include="Exiled.Events, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.Events.dll</HintPath>
</Reference>
<Reference Include="Exiled.Loader, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.Loader.dll</HintPath>
<Reference Include="Exiled.Loader, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.Loader.dll</HintPath>
</Reference>
<Reference Include="Exiled.Permissions, Version=9.6.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\Exiled.Permissions.dll</HintPath>
<Reference Include="Exiled.Permissions, Version=9.6.3.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\Exiled.Permissions.dll</HintPath>
</Reference>
<Reference Include="LabApi, Version=1.0.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\LabApi.dll</HintPath>
<Reference Include="LabApi, Version=1.1.0.0, Culture=neutral, processorArchitecture=Amd64">
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\LabApi.dll</HintPath>
</Reference>
<Reference Include="NorthwoodLib, Version=1.4.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\NorthwoodLib.dll</HintPath>
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\NorthwoodLib.dll</HintPath>
</Reference>
<Reference Include="System"/>
<Reference Include="System.Core"/>
<Reference Include="System.Data"/>
<Reference Include="System.Xml"/>
<Reference Include="YamlDotNet, Version=11.0.0.0, Culture=neutral, PublicKeyToken=ec19458f3c15af5e, processorArchitecture=MSIL">
<HintPath>..\packages\ExMod.Exiled.9.6.0\lib\net48\YamlDotNet.dll</HintPath>
<HintPath>..\packages\ExMod.Exiled.9.6.3\lib\net48\YamlDotNet.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion XPSystem.Console/packages.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ExMod.Exiled" version="9.6.0" targetFramework="net48" />
<package id="ExMod.Exiled" version="9.6.3" targetFramework="net48" />
</packages>
5 changes: 3 additions & 2 deletions XPSystem/API/Badge.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
namespace XPSystem.Config.Models
// ReSharper disable PropertyCanBeMadeInitOnly.Global
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring as nullable.
namespace XPSystem.API
{
using System;
using XPSystem.API;

public class Badge
{
Expand Down
8 changes: 3 additions & 5 deletions XPSystem/API/DisplayProviders/IXPDisplayProvider.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace XPSystem.API
{
using System;
using XPSystem.API.Player;
using XPSystem.API.StorageProviders;

/// <summary>
Expand All @@ -10,10 +10,8 @@ public interface IXPDisplayProvider
{
void Enable();
void Disable();
void RefreshTo(XPPlayer player);
void RefreshOf(XPPlayer player, PlayerInfoWrapper playerInfo);
void RefreshTo(BaseXPPlayer player);
void RefreshOf(BaseXPPlayer player, PlayerInfoWrapper? playerInfo = null);
void RefreshAll();
IXPDisplayProviderConfig ConfigPropertyInternal { get; set; }
Type ConfigTypeInternal { get; }
}
}
71 changes: 41 additions & 30 deletions XPSystem/API/DisplayProviders/SyncVarXPDisplayProvider.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace XPSystem.API.DisplayProviders
{
using System;
using XPSystem.API.Player;
using XPSystem.API.StorageProviders;
using static XPAPI;

Expand All @@ -19,83 +20,93 @@
/// <summary>
/// Gets the sync vars to use.
/// </summary>
protected abstract (Type typeName, string methodName, Func<XPPlayer, TObject, object> getFakeSyncVar, Func<XPPlayer, object> getResyncVar)[] SyncVars { get; }
protected abstract (Type typeName, string methodName, Func<BaseXPPlayer, TObject, object?> getFakeSyncVar, Func<BaseXPPlayer, object?> getResyncVar)[] SyncVars { get; }

/// <summary>
/// Creates the object for the player.
/// </summary>
/// <param name="player">The player to create the object for.</param>
/// <param name="playerInfo">The player's info to create the object from.</param>
/// <returns>The created object.</returns>
protected abstract TObject CreateObject(XPPlayer player, PlayerInfoWrapper playerInfo);
protected abstract TObject? CreateObject(BaseXPPlayer player, PlayerInfoWrapper? playerInfo);

protected override void RefreshToEnabled(XPPlayer player)
protected override void RefreshToEnabled(BaseXPPlayer player)
{
int count = 0;

foreach (var kvp in XPPlayer.Players)
foreach (BaseXPPlayer player2 in XPPlayer.PlayersRealConnected)
{
if (kvp.Value.IsNPC)
if (player == player2)
continue;
if (player == kvp.Value)
continue;
if (!ShouldEdit(kvp.Value))
if (!ShouldEdit(player2))
continue;

TObject obj = GetObject(kvp.Value);
TObject? obj = GetObject(player2);
if (obj == null)
continue;

foreach (var syncVar in SyncVars)
{
player.SendFakeSyncVar(kvp.Value.NetworkIdentity, syncVar.typeName, syncVar.methodName, syncVar.getFakeSyncVar(kvp.Value, obj));
object? value = syncVar.getFakeSyncVar(player2, obj);
if (value == null)
continue;

player.SendFakeSyncVar(player2.NetworkIdentity, syncVar.typeName, syncVar.methodName, value);
count++;
}
}

LogDebug(GetType().Name + " sent all (" + count + ") to " + player.Nickname + " (enabled)");
}

protected override void RefreshToDisabled(XPPlayer player)
protected override void RefreshToDisabled(BaseXPPlayer player)
{
int count = 0;

foreach (var kvp in XPPlayer.Players)
foreach (BaseXPPlayer player2 in XPPlayer.PlayersRealConnected)
{
if (kvp.Value.IsNPC)
continue;
if (player == kvp.Value)
if (player == player2)
continue;
if (!ShouldEdit(kvp.Value))
if (!ShouldEdit(player2))
continue;

foreach (var syncVar in SyncVars)
{
player.SendFakeSyncVar(kvp.Value.NetworkIdentity, syncVar.typeName, syncVar.methodName, syncVar.getResyncVar(player));
object? value = syncVar.getResyncVar(player2);
if (value == null)
continue;

player.SendFakeSyncVar(player2.NetworkIdentity, syncVar.typeName, syncVar.methodName, value);
count++;
}
}

LogDebug(GetType().Name + " sent all (" + count + ") to " + player.Nickname + " (disabled)");
}

protected override void RefreshOfEnabled(XPPlayer player, PlayerInfoWrapper playerInfo)
protected override void RefreshOfEnabled(BaseXPPlayer player, PlayerInfoWrapper? playerInfo)
{
if (!ShouldEdit(player))
return;

TObject obj = GetObject(player, playerInfo, true);
TObject? obj = GetObject(player, playerInfo, true);
if (obj == null)
return;

int count = 0;
foreach (var syncVar in SyncVars)
count += player.SendFakeSyncVars(x => ShouldShowTo(player, x), syncVar.typeName, syncVar.methodName, syncVar.getFakeSyncVar(player, obj));
{
object? value = syncVar.getFakeSyncVar(player, obj);
if (value == null)
continue;

count += player.SendFakeSyncVars(x => ShouldShowTo(player, x), syncVar.typeName, syncVar.methodName, value);
}

LogDebug(GetType().Name + " of " + player.Nickname + " sent to all (" + count + ") (enabled)");
}

protected override void RefreshOfDisabled(XPPlayer player)
protected override void RefreshOfDisabled(BaseXPPlayer player)
{
if (!ShouldEdit(player))
return;
Expand All @@ -113,15 +124,15 @@ protected override void RefreshOfDisabled(XPPlayer player)
/// <param name="playerInfo">The player's info to create the object from.</param>
/// <param name="update">Whether or not to force creation of a new object, even if one already exists.</param>
/// <returns>The object for the player.</returns>
protected virtual TObject GetObject(XPPlayer player, PlayerInfoWrapper playerInfo = null, bool update = false)
protected virtual TObject? GetObject(BaseXPPlayer player, PlayerInfoWrapper? playerInfo = null, bool update = false)
{
if (VariableKey == null)
return default;

if (update || !player.Variables.TryGet(VariableKey, out TObject obj))
if (update || !player.Variables.TryGet(VariableKey, out TObject? obj))
{
obj = CreateObject(player, playerInfo ?? player.GetPlayerInfo());
player.Variables.Set(VariableKey, obj);
if (playerInfo == null && player is XPPlayer xpPlayer)
playerInfo = xpPlayer.GetPlayerInfo();

obj = CreateObject(player, playerInfo);
player.Variables.Set(VariableKey, obj!);
}

return obj;
Expand All @@ -132,14 +143,14 @@ protected virtual TObject GetObject(XPPlayer player, PlayerInfoWrapper playerInf
/// </summary>
/// <param name="player">The player to check.</param>
/// <returns>Whether or not the player's data should be displayed.</returns>
protected virtual bool ShouldEdit(XPPlayer player) => true;
protected virtual bool ShouldEdit(BaseXPPlayer player) => true;

/// <summary>
/// Whether or not the player's data should be shown to the target player.
/// </summary>
/// <param name="player">The player to show the data of.</param>
/// <param name="target">The target player to show the data to.</param>
/// <returns>Whether or not the player's data should be shown to the target player.</returns>
protected virtual bool ShouldShowTo(XPPlayer player, XPPlayer target) => !target.IsNPC;
protected virtual bool ShouldShowTo(BaseXPPlayer player, BaseXPPlayer target) => true;
}
}
Loading
Loading