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
10 changes: 8 additions & 2 deletions managed/CounterStrikeSharp.API/Core/Model/CBaseEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,17 @@ public void Teleport(Vector3? position = null, Vector3? angles = null, Vector3?
}

/// <exception cref="InvalidOperationException">Entity is not valid</exception>
public void DispatchSpawn()
public void DispatchSpawn(CEntityKeyValues? keyValues)
{
Guard.IsValidEntity(this);

VirtualFunctions.CBaseEntity_DispatchSpawn(Handle, IntPtr.Zero);
NativeAPI.DispatchSpawn(Handle, keyValues?.Handle ?? IntPtr.Zero);
}

public void DispatchSpawn()
{
Guard.IsValidEntity(this);
NativeAPI.DispatchSpawn(Handle, IntPtr.Zero);
}

/// <summary>
Expand Down
14 changes: 14 additions & 0 deletions managed/CounterStrikeSharp.API/Core/ScriptContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Security;
using System.Text;
Expand Down Expand Up @@ -448,6 +449,19 @@ internal unsafe object GetResult(Type type, byte* ptr)
return Activator.CreateInstance(type, pointer);
}

if (type == typeof(Color))
{
var pointer = (IntPtr)GetResult(typeof(IntPtr), ptr);
return Marshaling.ColorMarshaler.NativeToManaged(pointer);
}

// this one only works if the 'Raw'/uint is passed
// maybe do this with a marshaler?!
if (type == typeof(CEntityHandle))
{
return new CEntityHandle((uint)GetResult(typeof(uint), ptr));
}

if (type == typeof(object))
{
// var dataPtr = *(IntPtr*)&ptr[0];
Expand Down
112 changes: 112 additions & 0 deletions managed/CounterStrikeSharp.API/Generated/Natives/API.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,78 @@ public static uint EmitSoundFilter(ulong filtermask, uint ent, string sound, flo
}
}

public static void DispatchSpawn(IntPtr entity, IntPtr keyvalues){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.Push(entity);
ScriptContext.GlobalScriptContext.Push(keyvalues);
ScriptContext.GlobalScriptContext.SetIdentifier(0xAE01E931);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
}
}

public static IntPtr EntityKeyValuesNew(){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.SetIdentifier(0x445FE212);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (IntPtr)ScriptContext.GlobalScriptContext.GetResult(typeof(IntPtr));
}
}

public static void EntityKeyValuesRelease(IntPtr keyvalues){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.Push(keyvalues);
ScriptContext.GlobalScriptContext.SetIdentifier(0xAE679E87);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
}
}

public static T EntityKeyValuesGetValue<T>(IntPtr keyvalues, string key, uint type){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.Push(keyvalues);
ScriptContext.GlobalScriptContext.Push(key);
ScriptContext.GlobalScriptContext.Push(type);
ScriptContext.GlobalScriptContext.SetIdentifier(0xA9A569AC);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (T)ScriptContext.GlobalScriptContext.GetResult(typeof(T));
}
}

public static void EntityKeyValuesSetValue(IntPtr keyvalues, string key, uint type, object[] arguments){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.Push(keyvalues);
ScriptContext.GlobalScriptContext.Push(key);
ScriptContext.GlobalScriptContext.Push(type);
foreach (var obj in arguments)
{
ScriptContext.GlobalScriptContext.Push(obj);
}
ScriptContext.GlobalScriptContext.SetIdentifier(0x60234AB8);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
}
}

public static bool EntityKeyValuesHasValue(IntPtr keyvalues, string key){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.Push(keyvalues);
ScriptContext.GlobalScriptContext.Push(key);
ScriptContext.GlobalScriptContext.SetIdentifier(0xD3E04DA0);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (bool)ScriptContext.GlobalScriptContext.GetResult(typeof(bool));
}
}

public static void HookEvent(string name, InputArgument callback, bool ispost){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
Expand Down Expand Up @@ -2117,6 +2189,46 @@ public static IntPtr VectorNew(){
}
}

public static IntPtr Vector2dNew(){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.SetIdentifier(0x2CD71169);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (IntPtr)ScriptContext.GlobalScriptContext.GetResult(typeof(IntPtr));
}
}

public static IntPtr Vector4dNew(){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.SetIdentifier(0x16585EAF);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (IntPtr)ScriptContext.GlobalScriptContext.GetResult(typeof(IntPtr));
}
}

public static IntPtr Matrix3x4New(){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.SetIdentifier(0xA2E1A42);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (IntPtr)ScriptContext.GlobalScriptContext.GetResult(typeof(IntPtr));
}
}

public static IntPtr QuaternionNew(){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
ScriptContext.GlobalScriptContext.SetIdentifier(0xD27D7946);
ScriptContext.GlobalScriptContext.Invoke();
ScriptContext.GlobalScriptContext.CheckErrors();
return (IntPtr)ScriptContext.GlobalScriptContext.GetResult(typeof(IntPtr));
}
}

public static IntPtr AngleNew(){
lock (ScriptContext.GlobalScriptContext.Lock) {
ScriptContext.GlobalScriptContext.Reset();
Expand Down
Loading
Loading