Fix client.packages hook sending normal packages

This commit is contained in:
Evil Factory
2026-04-18 17:38:27 -03:00
parent bb21a09244
commit ab77e9d40c
4 changed files with 87 additions and 48 deletions
@@ -1,27 +1,19 @@
#nullable enable
using Barotrauma.LuaCs;
using Barotrauma.LuaCs.Compatibility;
using Barotrauma.LuaCs.Data;
using Barotrauma.LuaCs.Events;
using Barotrauma.Networking;
using FluentResults;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.Toolkit.Diagnostics;
using MonoMod.RuntimeDetour;
using MoonSharp.Interpreter;
using MoonSharp.Interpreter.Interop;
using MoonSharp.Interpreter.Loaders;
using RestSharp.Validation;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
@@ -522,6 +514,61 @@ class LuaScriptManagementService : ILuaScriptManagementService, ILuaDataService,
Table package = (Table)_script.Globals["package"];
package.Set("path", DynValue.FromObject(_script, packages));
#if CLIENT
if (GameMain.NetworkMember is { IsClient: true })
{
var startMessage = _networkingService.Start("_luastart");
var packagesToReport = ContentPackageManager.EnabledPackages.All
.Where(p => _packageManagementService.Value.PackageContainsAnyRunnableResource(p))
.Where(p => !p.NameMatches(LuaCsSetup.PackageName))
.ToList();
startMessage.WriteUInt16((UInt16)packagesToReport.Count());
foreach (var enabledPackage in packagesToReport)
{
var id = enabledPackage.UgcId;
string hash = enabledPackage.Hash.StringRepresentation ?? "";
startMessage.WriteString(enabledPackage.Name);
startMessage.WriteString(enabledPackage.ModVersion);
if (id.TryUnwrap(out ContentPackageId? packageId) && packageId is SteamWorkshopId steamId)
{
startMessage.WriteUInt64(steamId.Value);
}
else
{
startMessage.WriteUInt64(0);
}
startMessage.WriteString(hash);
}
_networkingService.Send(startMessage);
}
#elif SERVER
_networkingService.Receive("_luastart", (message, client) =>
{
var num = message.ReadUInt16();
List<Table> packages = new List<Table>();
for (int i = 0; i < num; i++)
{
Table table = new Table(_script);
table.Set("Name", DynValue.NewString(message.ReadString()));
table.Set("Version", DynValue.NewString(message.ReadString()));
table.Set("Id", DynValue.NewString(message.ReadUInt64().ToString()));
table.Set("Hash", DynValue.NewString(message.ReadString()));
packages.Add(table);
}
_eventService.Call("client.packages", client, packages);
});
#endif
foreach (ILuaScriptResourceInfo resource in executionOrder.Where(l => l.IsAutorun))
{
foreach (ContentPath filePath in resource.FilePaths)