CreateNative(const String:name[], NativeCall:func);
Позволяет создать функцию, которую можно вызвать из любого вашего SM скрипта.
Делать это нужно в событии AskPluginLoad2, ниже пример.
Создайте a.sp с таким содержимым, скомпилируйте и запустите скрипт:
Код
#include <sourcemod>
public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max)
{
CreateNative("my_func", Native_my_func);
CreateNative("my_bool_func", Native_my_bool_func);
return APLRes_Success;
}
public Native_my_func(Handle:plugin, numParams) return GetNativeCell(1) + GetNativeCell(2);
public Native_my_bool_func(Handle:plugin, numParams) return GetNativeCell(1) > GetNativeCell(2);
Теперь создайте файл my_funtion.inc с таким содержимым и киньте его в
addons/sourcemod/scripting/include
Код
native my_func(num1, num2);
native bool:my_bool_func(num1, num2);
Создайте b.sp с таким содержимым, скомпилируйте и запустите скрипт:
Код
#include <sourcemod>
#include <my_funtion>
public OnPluginStart()
{
PrintToServer("2 + 1 = %d", my_func(2, 1)); // 3
PrintToServer("2 + 5 = %d", my_func(2, 5)); // 7
PrintToServer("2 > 1 (%d)", my_bool_func(2, 1)); // 1
PrintToServer("2 > 5 (%d)", my_bool_func(2, 5)); // 0
}
GetNativeCell(x) - возвращает целое число (x - номер аргумента в функции)
GetNativeString(x, String:buffer[], maxlength, &bytes=0);
Возвращает SP_ERROR_NONE, если строка получена, или любое целое число, если произошла ошибка.
GetNativeArray(x, any:local[], size);
Возвращает SP_ERROR_NONE, как и выше (так получаем массив)