Вызовом функции с возвратом строки через callfunc_push_str

Сообщения
15
Реакции
4
Помог
1 раз(а)
Добрый день (а может и вечер). Задался вопросом, а можно ли вернуть через вызов форварда строку, ну и решил сделать небольшой плагин.
Сервер ReHLDS на AMX Mod X Compiler 1.9.0.5294 с единственным плагином:

C++:
#include <amxmodx>

public plugin_init()
{
    new iPluginId = register_plugin("test callfunc_begin", "N/A", "TouchMe");

    new sString1[64];
    new sString2[64];
    new sString3[64];
    setc(sString3, 63, ' '); // hack ??

    callfunc_begin_i(get_func_id("MyMync", iPluginId), iPluginId);
    callfunc_push_str(sString1, true);     // <-- here "y"
    callfunc_push_str(sString2, false); // <-- here "M"
    callfunc_push_str(sString3);         // <-- here "My string3"
    callfunc_end();

    log_amx("^n>> String1 = (%s)^n>> String2 = (%s)^n>> String2 = (%s)", sString1, sString2, sString3)
}

public MyMync(sString1[], sString2[], sString3[])
{
    format(sString1, 63, "My string1");
    format(sString2, 63, "My string2");
    format(sString3, 63, "My string3");
}
Вывод в консоли:
Код:
>> String1 = (y)
>> String2 = (M)
>> String2 = (My string3)
Вопрос: Подскажите, почему получаются подобные результаты?
 
Сообщения
15
Реакции
4
Помог
1 раз(а)
Например, если использовать
Код:
new iForward = CreateOneForward (iPluginId, "MyMync", FP_ARRAY, FP_STRING, FP_ARRAY);
и
Код:
ExecuteForward(iForward , _, sString1, PrepareArray(sString2, 63, 1), PrepareArray(sString3, 63, 1));
То результат будет такой:
Код:
>> String1 = ()
>> String2 = ()
>> String2 = (My string3)
PrepareArray(https://www.amxmodx.org/api/amxmodx/PrepareArray) работает только с FP_ARRAY, что логично из названия + у него есть параметр copyback, который и позволяет нам изменять массив внутри исполняемого форварда.

Такой же параметр (copyback) есть так же в callfunc_push_str(https://www.amxmodx.org/api/amxmodx/callfunc_push_str), но, как я понял, он будет работать только с callfunc_push_array (не проверено).

Получается, в первом посте я обнаружил баг?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу