Форварды.

Сообщения
862
Реакции
144
Помог
25 раз(а)
Здравствуйте.
Пытаюсь сделать форвард, который будет заменять строку.
Есть у меня форвард:
C++:
new g_fwdShowInfo;

public plugin_init() {
    g_fwdShowInfo = CreateMultiForward("Fwd__ShowInfo_Pre",ET_CONTINUE,FP_CELL,FP_STRING,FP_CELL);

    register_clcmd("test_1","Func__ShowINfo");
}
Дальше, я его вызываю через команду:
C++:
public Func__ShowINfo(const id) {
    new szSource[256];
 
    new iRet;
    ExecuteForward(g_fwdShowInfo,iRet,id,szSource,charsmax(szSource));

    server_print("%i", charsmax(szSource));
    server_print(szSource);
}
И через другой плагин, в самом форварде, добавляю текст:
C++:
#include <AmxModX>


forward Fwd__ShowInfo_Pre(id,szSource[],iMaxLen);

public Fwd__ShowInfo_Pre(id,szSource[],iMaxLen) {
    new szAddText[256];
    copy(szAddText, charsmax(szAddText), "test");
    add(szSource,iMaxLen,szAddText);
}
И вот, когда я вызываю уже через команду этот форвард - в консоли севрера пустота, хотя, по факту, должно вывести test.

Если же я заменю FP_STRING на FP_VAL_BYREF, выводит всего первый символ (букву t) в консоль.
Как мне быть? Пытаюсь разобраться в работе форвардов.
 
Последнее редактирование:
Сообщения
1,182
Реакции
2,146
Помог
57 раз(а)
ImmortalAmxx, нужен FP_ARRAY и PrepareArray(), параметр copyback у последнего надо установить в 1
 
Сообщения
341
Реакции
178
Помог
11 раз(а)
ImmortalAmxx,

Код:
#include <amxmodx>
new
    g_fwd;
public plugin_init() {
    register_plugin("Test fwd","1","b");
    g_fwd = CreateMultiForward("Fwd_Test",ET_CONTINUE,FP_ARRAY,FP_CELL);
    register_clcmd("test_1","FFF");
}
public FFF(const id) {
    new szSource[256];
    formatex(szSource,charsmax(szSource),"Test");
    new iRet;
    new Array:szText = PrepareArray(szSource,charsmax(szSource),1);
    ExecuteForward(g_fwd,iRet,szText,charsmax(szSource));
    client_print(id,print_chat,"%s",szSource);
}

Код:
#include <amxmodx>
forward Fwd_Test(szSource[],iMaxLen);
public plugin_init() {
    register_plugin("Test fwd_ 2","1","b");
}
public Fwd_Test(szSource[],iMaxLen) {
    add(szSource,iMaxLen," Hello!");
}
 
Сообщения
711
Реакции
476
Помог
10 раз(а)
Сообщения
862
Реакции
144
Помог
25 раз(а)
Всем спасибо. Все работает.
b0t., Спасибо за готовый вариант.
 

Ayk

Сообщения
763
Реакции
476
Помог
19 раз(а)
Я для себя, давным-давно, открыл возможность передавать между плагинами, через форварды и нативы, хэндлеры от Array и Trie, не мог нарадоваться.
Вот только, за все последующие годы, так и не увидел особого распространения этой фишки, не знаю почему. Как по мне, так очень удобная вещь.
 

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

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