AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Snippets and Tutorials (https://forums.alliedmods.net/forumdisplay.php?f=112)
-   -   [INC] Data String Parameter (https://forums.alliedmods.net/showthread.php?t=285744)

Drixevel 07-29-2016 19:15

[INC] Data String Parameter
 
1 Attachment(s)
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);
}


KyleS 07-31-2016 01:19

Re: [INC] Data String Parameter
 
Your example looks broken :(

Why would anyone ever need this? You'd simply pass const char sBuffer into the function call. If you need multiple, pass the amount and use [][]. This seems a little insane :(

PHP Code:

//Somewhere in the vast emptiness of a plugins source code
char sBuffer[12];
strcopy(sBuffersizeof(sBuffer), "Carrot");
FunctionCall(sBuffer)

void FunctionCall(const char sBuffer[])
{
    
//Do stuff



Fyren 07-31-2016 04:39

Re: [INC] Data String Parameter
 
Because you can't pass an array into a non-array parameter.

Drixevel 07-31-2016 13:35

Re: [INC] Data String Parameter
 
Quote:

Originally Posted by KyleS (Post 2440966)
Your example looks broken :(

Why would anyone ever need this? You'd simply pass const char sBuffer into the function call. If you need multiple, pass the amount and use [][]. This seems a little insane :(

PHP Code:

//Somewhere in the vast emptiness of a plugins source code
char sBuffer[12];
strcopy(sBuffersizeof(sBuffer), "Carrot");
FunctionCall(sBuffer)

void FunctionCall(const char sBuffer[])
{
    
//Do stuff



Code:

public void OnPluginStart()
{
        char sBuffer[12];
        strcopy(sBuffer, sizeof(sBuffer), "Test");
        SQL_TConnect(OnSQLConnect, "default", sBuffer);
}

public void OnSQLConnect(Handle owner, Handle hndl, const char[] error, const char[] sBuffer)
{
        PrintToServer(sBuffer);
}

Example using SQL_TConnect since it has the 'any data' or 'any ...' parameters to pass through cells. That doesn't work because the prototype is different so it outputs an error.

This works:
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);
}

Quote:

Originally Posted by Fyren (Post 2440988)
Because you can't pass an array into a non-array parameter.

Sadly.

Emp` 07-31-2016 15:13

Re: [INC] Data String Parameter
 
Check out DString, it should accomplish what you are doing with a few other bugs features.


All times are GMT -4. The time now is 17:13.

Powered by vBulletin®
Copyright ©2000 - 2020, vBulletin Solutions, Inc.