Форварды.

Сообщения
893
Реакции
149
Помог
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,304
Реакции
2,303
Помог
57 раз(а)
ImmortalAmxx, нужен FP_ARRAY и PrepareArray(), параметр copyback у последнего надо установить в 1
 
Сообщения
397
Реакции
221
Помог
13 раз(а)
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!");
}
 
Сообщения
857
Реакции
532
Помог
13 раз(а)
Сообщения
893
Реакции
149
Помог
25 раз(а)
Всем спасибо. Все работает.
b0t., Спасибо за готовый вариант.
 

Ayk

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

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

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