PDA

Просмотр полной версии : [Вопрос] raknet manager



CheSToRiA
08.02.2016, 16:38
Каким образом можно отловить сообщение отправленное через SendClientMessage и запретить его показ? Пробовал через перехват функции, но не помогло. Можно ли это каким-то образом словить через RakNet manager plugin? Если да, то как? P.S: Сообщение отправляет из скрипта, а он в свою очередь с закрытым исходным кодом.

vovandolg
08.02.2016, 16:44
Зачем тебе плагин для таких целей если на форумах полно скриптов анти-пиара или анти-мата, где можно перехватить слово которое ты указываешь.

CheSToRiA
08.02.2016, 16:45
Зачем тебе плагин для таких целей если на форумах полно скриптов анти-пиара или анти-мата, где можно перехватить слово которое ты указываешь.

Ты не понял. Есть скрипт с закрытым исходным кодом, а он в свою очередь отправляет ошибочное сообщение, но автор не хочет обновлять его, а мне нужно чтобы это сообщение попросту не показалось игроку. Вот мне нужно перехватить его и запретить его показ. То есть, сообщение отправляет не игрок, а другой подключенный скрипт.

Profyan
08.02.2016, 17:20
#offtop
Могу предположить,что вы взяли на проверку пробную версию какого-то скрипта,который каждые n секунд выводит рекламу или сообщение о том,что она пробная.
По теме:
id нужного вам RPC: RPC_ClientMessage = 93;
Вот плагин:
http://pro-pawn.ru/showthread.php?13333-RNM-RakNet-Manager-1-0-0 (клик)
В теме есть пример перехвата.

CheSToRiA
08.02.2016, 17:44
#offtop
Могу предположить,что вы взяли на проверку пробную версию какого-то скрипта,который каждые n секунд выводит рекламу или сообщение о том,что она пробная.
По теме:
id нужного вам RPC: RPC_ClientMessage = 93;
Вот плагин:
http://pro-pawn.ru/showthread.php?13333-RNM-RakNet-Manager-1-0-0 (клик)
В теме есть пример перехвата.

Да пример есть, но что вводить BS_ReadValue я так и не понял. Пробовал как там или по другому, но мне выдало либо пустую строку, либо иероглифы.

Profyan
08.02.2016, 18:06
Да пример есть, но что вводить BS_ReadValue я так и не понял. Пробовал как там или по другому, но мне выдало либо пустую строку, либо иероглифы.


new RPC_Chat = 101;
public OnServerSendRPC(playerid, rpcid, BitStream:bs)
{
if(rpcid == RPC_Chat)
{
new message[256], len;

BS_ReadValue(bs, RNM_UINT8, len,
RNM_STRING, message, len);

if(!strcmp(message,"Твой текст", true)) return 0;
}
return 1;
}

Не проверял на работоспособность.

Еще точно не знаю какой RPC.Либо RPC_ClientMessage,либо RPC_Chat.

CheSToRiA
08.02.2016, 18:12
new RPC_Chat = 101;
public OnServerSendRPC(playerid, rpcid, BitStream:bs)
{
if(rpcid == RPC_Chat)
{
new message[256], len;

BS_ReadValue(bs, RNM_UINT8, len,
RNM_STRING, message, len);

if(!strcmp(message,"Твой текст", true)) return 0;
}
return 1;
}

Не проверял на работоспособность.

Еще точно не знаю какой RPC.Либо RPC_ClientMessage,либо RPC_Chat.

Это когда игрок отправляет, а мне надо когда SendClientMessage, а это RPC_ClientMessage.

Profyan
08.02.2016, 18:15
Это когда игрок отправляет, а мне надо когда SendClientMessage, а это RPC_ClientMessage.

Ну попробуй с RPC_ClientMessage.Отпишись потом.

CheSToRiA
08.02.2016, 18:23
Ну попробуй с RPC_ClientMessage.Отпишись потом.

Я же говорю что пробовал, но там или иероглифы или пустая строчка.

Profyan
08.02.2016, 18:49
Я же говорю что пробовал, но там или иероглифы или пустая строчка.

Я попробовал.Получилось.Только есть баг,он считывает с ФС. Вот код:
МОД


public OnServerSendRPC(playerid, rpcid, BitStream:bs)
{
new RPC_ClientMessage = 93;
if(rpcid == RPC_ClientMessage)
{
new message[256], len;

BS_ReadValue(bs, RNM_UINT8, len,
RNM_STRING, message, len);

if(!strcmp(message,"It works!", true))
{
printf("ITSWORK");
return 0;
}
}
return 1;
}


Кстати в моде тоже работает.(вставил 6 SendClientMessage(playerid,-1,"It works"); в OnPlayerSpawn(playerid))



[21:10:52] ITSWORK
[21:10:52] ITSWORK
[21:10:52] ITSWORK
[21:10:52] ITSWORK
[21:10:54] ITSWORK
[21:10:54] ITSWORK



Скрины (http://imgur.com/a/JuUgJ)

CheSToRiA
08.02.2016, 18:53
Я попробовал.Получилось.Только есть баг,он считывает с ФС. Вот код:
МОД


public OnServerSendRPC(playerid, rpcid, BitStream:bs)
{
new RPC_ClientMessage = 93;
if(rpcid == RPC_ClientMessage)
{
new message[256], len;

BS_ReadValue(bs, RNM_UINT8, len,
RNM_STRING, message, len);

if(!strcmp(message,"It works! ", true))
return 0;
}
return 1;
}

ФС


#include <a_samp>
#include <dc_cmd>

main()
{
printf("FS is loaded.");
}
CMD:work(playerid,params[])
{
SendClientMessage(playerid,-1,"It works!");
return 1;
}


Скрины (http://imgur.com/a/JuUgJ)

Отлично, спасибо. Закрыто!

CheSToRiA
08.02.2016, 19:31
Открыто. Сделал все как вы написали, но теперь вообще не одного сообщения не видно.
Точнее не видно того, что пишет игрок.