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
782 changes: 465 additions & 317 deletions managed/src/SwiftlyS2.Core/Modules/Convars/ConVar.cs

Large diffs are not rendered by default.

754 changes: 273 additions & 481 deletions managed/src/SwiftlyS2.Core/Modules/Convars/ConVarService.cs

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion managed/src/SwiftlyS2.Core/Services/StartupService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ internal class StartupService : IHostedService
public StartupService( IServiceProvider provider )
{
// this.provider = provider;
// provider.UseTestService();
provider.UseCoreHookService();
provider.UsePermissionManager();
provider.UseCommandTrackerService();
Expand All @@ -20,6 +19,7 @@ public StartupService( IServiceProvider provider )
provider.UseCoreCommandService();
// Initialize PluginManager after everything is ready
provider.UsePluginManager();
// provider.UseTestService();
}

public Task StartAsync( CancellationToken cancellationToken )
Expand Down
27 changes: 12 additions & 15 deletions managed/src/SwiftlyS2.Core/Services/TestService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,27 +48,24 @@ ISwiftlyCore core
_Logger.LogWarning("TestService created");
_Logger.LogWarning("TestService created");

Test2();
Test();
}


public void Test()
{
_Core.Event.OnEntityCreated += (@event) =>
{
var name = _Core.Memory.GetObjectPtrVtableName(@event.Entity.Address);
Console.WriteLine("Entity spawned: " + name);
var hasVtable = _Core.Memory.ObjectPtrHasVtable(@event.Entity.Address + 1);
Console.WriteLine("Has vtable: " + hasVtable);
var vtable = _Core.Memory.ObjectPtrHasBaseClass(@event.Entity.Address, "CBaseEntity");
Console.WriteLine("Has base class: " + vtable);
var handle = _Core.EntitySystem.GetRefEHandle(@event.Entity);
};
// _Core.Event.OnItemServicesCanAcquireHook += (@event) => {
// Console.WriteLine(@event.EconItemView.ItemDefinitionIndex);
_Core.Command.RegisterCommand("tc", (args) => {
var cvar = _Core.ConVar.Find<float>("mp_warmuptime");

// @event.SetAcquireResult(AcquireResult.NotAllowedByProhibition);
// };
// cvar.MinValueAsString


cvar!.ValueAsString = "10";
cvar!.DefaultValueAsString = "50";
cvar!.MaxValueAsString = "100";
cvar!.MinValueAsString = "10";
cvar.ReplicateToClientAsString(0, "10");
});


}
Expand Down
208 changes: 208 additions & 0 deletions managed/src/SwiftlyS2.Generated/Natives/Convars.cs
Original file line number Diff line number Diff line change
Expand Up @@ -663,4 +663,212 @@ public unsafe static void SetValueInternalPtr(string cvarName, nint value) {
pool.Return(cvarNameBuffer);
}
}

private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetValueAsString;

public unsafe static bool SetValueAsString(string cvarName, string value) {
if (Thread.CurrentThread.ManagedThreadId != _MainThreadID) {
throw new InvalidOperationException("This method can only be called from the main thread.");
}
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
var valueLength = Encoding.UTF8.GetByteCount(value);
var valueBuffer = pool.Rent(valueLength + 1);
Encoding.UTF8.GetBytes(value, valueBuffer);
valueBuffer[valueLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
fixed (byte* valueBufferPtr = valueBuffer) {
var ret = _SetValueAsString(cvarNameBufferPtr, valueBufferPtr);
pool.Return(cvarNameBuffer);
pool.Return(valueBuffer);
return ret == 1;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, int> _GetValueAsString;

public unsafe static string GetValueAsString(string cvarName) {
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
var ret = _GetValueAsString(null, cvarNameBufferPtr);
var retBuffer = pool.Rent(ret + 1);
fixed (byte* retBufferPtr = retBuffer) {
ret = _GetValueAsString(retBufferPtr, cvarNameBufferPtr);
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
pool.Return(retBuffer);
pool.Return(cvarNameBuffer);
return retString;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetDefaultValueAsString;

public unsafe static bool SetDefaultValueAsString(string cvarName, string value) {
if (Thread.CurrentThread.ManagedThreadId != _MainThreadID) {
throw new InvalidOperationException("This method can only be called from the main thread.");
}
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
var valueLength = Encoding.UTF8.GetByteCount(value);
var valueBuffer = pool.Rent(valueLength + 1);
Encoding.UTF8.GetBytes(value, valueBuffer);
valueBuffer[valueLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
fixed (byte* valueBufferPtr = valueBuffer) {
var ret = _SetDefaultValueAsString(cvarNameBufferPtr, valueBufferPtr);
pool.Return(cvarNameBuffer);
pool.Return(valueBuffer);
return ret == 1;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, int> _GetDefaultValueAsString;

public unsafe static string GetDefaultValueAsString(string cvarName) {
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
var ret = _GetDefaultValueAsString(null, cvarNameBufferPtr);
var retBuffer = pool.Rent(ret + 1);
fixed (byte* retBufferPtr = retBuffer) {
ret = _GetDefaultValueAsString(retBufferPtr, cvarNameBufferPtr);
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
pool.Return(retBuffer);
pool.Return(cvarNameBuffer);
return retString;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetMinValueAsString;

public unsafe static bool SetMinValueAsString(string cvarName, string value) {
if (Thread.CurrentThread.ManagedThreadId != _MainThreadID) {
throw new InvalidOperationException("This method can only be called from the main thread.");
}
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
var valueLength = Encoding.UTF8.GetByteCount(value);
var valueBuffer = pool.Rent(valueLength + 1);
Encoding.UTF8.GetBytes(value, valueBuffer);
valueBuffer[valueLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
fixed (byte* valueBufferPtr = valueBuffer) {
var ret = _SetMinValueAsString(cvarNameBufferPtr, valueBufferPtr);
pool.Return(cvarNameBuffer);
pool.Return(valueBuffer);
return ret == 1;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, int> _GetMinValueAsString;

public unsafe static string GetMinValueAsString(string cvarName) {
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
var ret = _GetMinValueAsString(null, cvarNameBufferPtr);
var retBuffer = pool.Rent(ret + 1);
fixed (byte* retBufferPtr = retBuffer) {
ret = _GetMinValueAsString(retBufferPtr, cvarNameBufferPtr);
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
pool.Return(retBuffer);
pool.Return(cvarNameBuffer);
return retString;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetMaxValueAsString;

public unsafe static bool SetMaxValueAsString(string cvarName, string value) {
if (Thread.CurrentThread.ManagedThreadId != _MainThreadID) {
throw new InvalidOperationException("This method can only be called from the main thread.");
}
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
var valueLength = Encoding.UTF8.GetByteCount(value);
var valueBuffer = pool.Rent(valueLength + 1);
Encoding.UTF8.GetBytes(value, valueBuffer);
valueBuffer[valueLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
fixed (byte* valueBufferPtr = valueBuffer) {
var ret = _SetMaxValueAsString(cvarNameBufferPtr, valueBufferPtr);
pool.Return(cvarNameBuffer);
pool.Return(valueBuffer);
return ret == 1;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, int> _GetMaxValueAsString;

public unsafe static string GetMaxValueAsString(string cvarName) {
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
var ret = _GetMaxValueAsString(null, cvarNameBufferPtr);
var retBuffer = pool.Rent(ret + 1);
fixed (byte* retBufferPtr = retBuffer) {
ret = _GetMaxValueAsString(retBufferPtr, cvarNameBufferPtr);
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
pool.Return(retBuffer);
pool.Return(cvarNameBuffer);
return retString;
}
}
}

private unsafe static delegate* unmanaged<byte*, byte*, void> _SetValueInternalAsString;

public unsafe static void SetValueInternalAsString(string cvarName, string value) {
if (Thread.CurrentThread.ManagedThreadId != _MainThreadID) {
throw new InvalidOperationException("This method can only be called from the main thread.");
}
var pool = ArrayPool<byte>.Shared;
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
cvarNameBuffer[cvarNameLength] = 0;
var valueLength = Encoding.UTF8.GetByteCount(value);
var valueBuffer = pool.Rent(valueLength + 1);
Encoding.UTF8.GetBytes(value, valueBuffer);
valueBuffer[valueLength] = 0;
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
fixed (byte* valueBufferPtr = valueBuffer) {
_SetValueInternalAsString(cvarNameBufferPtr, valueBufferPtr);
pool.Return(cvarNameBuffer);
pool.Return(valueBuffer);
}
}
}
}
Loading
Loading