I got tired of having to create data packs manually or convert between strings and handles to be able to pass a string through a data parameter so I made these stocks.
Note: If there's a better method of doing this that already exists, let me know as I would LOVE to know it.
Note2: I know you can convert a handle to a string which you can also do but this seems less like a disaster.
Code:
#if defined _data_string_parameter_included_
#endinput
#endif
#define _data_string_parameter_included_ "1.0"
stock Handle AnyString(const char[] sBuffer)
{
if (strlen(sBuffer) < 1)
{
return null;
}
Handle hPack = CreateDataPack();
WritePackString(hPack, sBuffer);
return hPack;
}
stock bool ReadAnyString(Handle hPack, char[] sBuffer, int size)
{
if (hPack == null)
{
return false;
}
ResetPack(hPack);
ReadPackString(hPack, sBuffer, size);
CloseHandle(hPack);
return true;
}
Example:
Code:
#include <sourcemod>
#include <data_string_parameter>
#pragma semicolon 1
#pragma newdecls required
public Plugin myinfo = {
name = "",
author = "",
description = "",
version = "0.0.0",
url = ""
};
public void OnPluginStart()
{
char sBuffer[12];
strcopy(sBuffer, sizeof(sBuffer), "Test");
SQL_TConnect(OnSQLConnect, "default", AnyString(sBuffer));
}
public void OnSQLConnect(Handle owner, Handle hndl, const char[] error, any data)
{
char sBuffer[12];
ReadAnyString(data, sBuffer, sizeof(sBuffer));
PrintToServer(sBuffer);
}