CallRemoteFunction
#1

Доброе время суток. Столкнулся с такой проблемой что если в данной функции отправить пустое значение string сервер крашиться. Но дело в том что я уже искал по форуму как исправить данную проблему но так точного ответа и не нашел но понял лишь то что это баг самого сампа. Можно ли как какой то метод что бы обойти этот баг и иногда при необходимости если отправляешь пустое значение string[] сервер не падал?
Reply
#2

Quote:
Originally Posted by Kolstin
Посмотреть сообщение
Доброе время суток. Столкнулся с такой проблемой что если в данной функции отправить пустое значение string сервер крашиться. Но дело в том что я уже искал по форуму как исправить данную проблему но так точного ответа и не нашел но понял лишь то что это баг самого сампа. Можно ли как какой то метод что бы обойти этот баг и иногда при необходимости если отправляешь пустое значение string[] сервер не падал?
Не отправляй пустое сообщение, отправляй знак, в функции проверку на знак. Если указан знак то значит не было сообщения.
if(string[0] == '`')return 0;
Reply
#3

Quote:
Originally Posted by White_116
Посмотреть сообщение
Не отправляй пустое сообщение, отправляй знак, в функции проверку на знак. Если указан знак то значит не было сообщения.
if(string[0] == '`')return 0;
Не подходит, еще есть предложения?
Reply
#4

Quote:
Originally Posted by Kolstin
Посмотреть сообщение
Не подходит, еще есть предложения?
Это единственный выход. Не считая того что можешь написать свой обработчик в виде плагина (или нет).
Reply
#5

А зачем тебе использовать CallRemoteFunction? Ты передаешь данные из ФС в ГМ или наоборот?
Reply
#6

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
А зачем тебе использовать CallRemoteFunction? Ты передаешь данные из ФС в ГМ или наоборот?
Все верно. С ФС в ГМ.
Reply
#7

Покажи код где ты используешь эту функцию.
Reply
#8

Мод:
PHP код:
#define SPD(%0)                CallRemoteFunction("SPD","dddssss",%0) 
ФС:
PHP код:
public SPD(playeriddialogidstylecaption[], info[], button1[], button2[]) {
    
Variable[playerid][pDialogID] = dialogid;
    
ShowPlayerDialog(playeriddialogidstylecaptioninfobutton1button2);
    return 
1;

Когда юзаю в моде так:
PHP код:
SPD(playerid0DIALOG_STYLE_MSGBOX"Text""Text""Okay"""); 
Серв падает, а вот так:
PHP код:
SPD(playerid0DIALOG_STYLE_MSGBOX"Text""Text""Okay""Okay2"); 
Все норм
Reply
#9

Ну начнем с того что правильнее будет:
pawn Код:
public SPD(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[]) {
Попробуй так:
pawn Код:
new emptyString[] = "";
SPD(playerid, 0, DIALOG_STYLE_MSGBOX, "Text", "Text", "Okay", emptyString);
А ещё лучше:
pawn Код:
public SPD(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[] = "") {
    Variable[playerid][pDialogID] = dialogid;
    ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
    return 1;
}
И вызывать как:
pawn Код:
SPD(playerid, 0, DIALOG_STYLE_MSGBOX, "Text", "Text", "Okay");  
SPD(playerid, 0, DIALOG_STYLE_MSGBOX, "Text", "Text", "Okay", "Okay2");
Только не помню допускается ли у событий необязательные параметры.
Reply
#10

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Ну начнем с того что правильнее будет:
pawn Код:
public SPD(playerid, dialogid, style, const caption[], const info[], const button1[], const button2[]) {
Ну смотри, ошибки в стоке это тогда когда я юзаю константы в функции как ты выше показал:
pawn Код:
ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
А вот сама и ошибка:
pawn Код:
error 035: argument type mismatch (argument 4)
---

Уже пробовал делать это (= "") но в public'e оказывается нельзя так делать на сколько я понял...
pawn Код:
public SPD(playerid, dialogid, style, caption[], info[], button1[], button2[] = "") {
Ошибка:
pawn Код:
error 059: function argument may not have a default value (variable "button2")
Reply
#11

Поскольку в нативах инклюдных не даётся никаких уточнений, то const там не нужен:
pawn Код:
native ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]);
А зачем public? Если только для CallRemote, то не проще в мод засунуть ФС?

Если нет, то на ум приходит только такое:
pawn Код:
public OnPlayerConnect(playerid)
{
    SPD(playerid, 1, 2, "", "", "", "");
    return 1;
}
forward SPD(playerid, dialogid, style, caption[], info[], button1[], button2[]);
public SPD(playerid, dialogid, style, caption[], info[], button1[], button2[])
{
    if(strlen(button2) < 1) ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, "");
    else ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
    return 1;
}
Reply
#12

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Если нет, то на ум приходит только такое:
А теперь прочти проблему ещё раз! Если передавать в CallRemoteFunction пустые строки система валится.


Как-то так:
pawn Код:
#include <a_samp>

#define SPD(%0) CallRemoteFunction("SPDs","dddssss",%0)

forward SPDs(playerid, dialogid, style, caption[], info[], button1[]);

main(){}

public OnGameModeInit() {
    SPD(1, 0, DIALOG_STYLE_MSGBOX, "Text", "Text", "Okay");
    SPD(1, 0, DIALOG_STYLE_MSGBOX, "Text", "Text", "Okay", "Okay2");
    return 1;
}

public SPDs(playerid, dialogid, style, caption[], info[], button1[]) {
    new button2[128];
    if (numargs() == 7) {
        for (new i; i < sizeof(button2); ++i) {
            if(getarg(6, i)) button2[i] = getarg(6, i);
            else break;
        }
        if (!strcmp("SPDs", button2)) strdel(button2, 0, sizeof(button2));//небольшой фикс, почему-то недостающим элементом передается имя колбека.
    }
    printf("-%d, %d, %d, %s, %s, %s, %s-\n", playerid, dialogid, style, caption, info, button1, button2);
    return 1;
}
Переименовал колбэк, попадало под замену define.
Надеюсь пояснять что куда не надо?

Результат:
Код:
[00:43:51] -1, 0, 0, Text, Text, Okay, -

[00:43:51] -1, 0, 0, Text, Text, Okay, Okay2-
Reply
#13

Проще поставить мой код показа диалога на emit.
Reply
#14

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
Проще поставить мой код показа диалога на emit.
У человека проблема не в диалогах!
Reply
#15

Да я знаю с чем у него проблемы, че пристал? Ты хоть код смотрел того, о чем я сказал?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)