PDA

Просмотр полной версии : [Мануал] Отключение серверных сообщений



HarrWe
09.08.2016, 17:28
Привет ребята, сидел и думал о том как отключить чат, например при Connect`е, поискав в гуугле ничего кроме этого не нашёл

for(new x;x<20;x++) SendClientMessage(playerid, -1," ");

И решил сделать отключение чата при определённом условие, конечно может я не 1 кто этот способ сделал, но облазив Google такого не нашёл, возможно я слепой и если такое было просто удалите тему.

Вообщем создаём в любом месте stock

stock SCM(id, color, const message[])
{
if(Login[playerid] != 0)
return SendClientMessage(id, color, message);
}
#if defined _ALS_SendClientMessage
#undef SendClientMessage
#else
#define _ALS_SendClientMessage
#endif
#define SendClientMessage SCM

Вот ещё для SendClientMessageToAll


stock SCMTA(color, const message[])
{
foreach(new i: Player) SCM(i, color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif
#define SendClientMessageToAll SCMTA

Спасибо за помощь Profyan (http://pro-pawn.ru/member.php?2354-Profyan) и Sp1ke (http://pro-pawn.ru/member.php?4095-Sp1ke)

Profyan
09.08.2016, 17:33
Что-то я вообще не понял ничего. Для чего это? Ты хочешь запретить показывать сообщения сервера игроку? Или все таки чат игрока?
И зачем stock? Ты собираешься ее не использовать в будущем?(функцию)

HarrWe
09.08.2016, 17:36
Да я хочу запретить показ сообщения игроку, например очень бесит когда ты заходишь на сервер а тебе постоянно новости, объявления и т.п пишет.
"И зачем stock? Ты собираешься ее не использовать в будущем?(функцию)" на счёт вот этого не понял, по подробнее)

Profyan
09.08.2016, 17:42
Да я хочу запретить показ сообщения игроку, например очень бесит когда ты заходишь на сервер а тебе постоянно новости, объявления и т.п пишет.
"И зачем stock? Ты собираешься ее не использовать в будущем?(функцию)" на счёт вот этого не понял, по подробнее)

Ну тогда почитайте о перехватах - тык (http://pro-pawn.ru/showthread.php?10447-%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%B2%D0%B0%D1%82-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B&highlight=%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%B2%D0%B0%D1%82%D1%8B), о модификаторе stock - тык (http://pro-pawn.ru/showthread.php?6570-%D0%92%D1%81%D1%91-%D0%BE-Stock) и еще ваш "вариант" не игнорирует SendClientMessageToAll

Unreal
09.08.2016, 19:54
тогда поставь проверку на авторизацию в команде новостей или где нужно

HarrWe
09.08.2016, 19:58
тогда поставь проверку на авторизацию в команде новостей или где нужно
Лучше уже 1 раз так сделать чем в каждом SendClientMessage делать.

Unreal
09.08.2016, 20:05
Лучше уже 1 раз так сделать чем в каждом SendClientMessage делать.

так я о том же, поставь проверку только в нужном месте чем в SendClientMessage

HarrWe
09.08.2016, 20:54
так я о том же, поставь проверку только в нужном месте чем в SendClientMessage
Ты не понял :declare:, мне удобнее что бы 1 раз перехват был и там нужные проверки)

Desulaid
09.08.2016, 21:45
А не проще отправлять сообщения всем игрокам под условием, что игрок авторизован на сервере?

HarrWe
09.08.2016, 21:47
А не проще отправлять сообщения всем игрокам под условием, что игрок авторизован на сервере?
Т.е ты предлагаешь перед каждым SendClientMessage ставить if(Login[playerid] == 1)?

Desulaid
09.08.2016, 22:22
Т.е ты предлагаешь перед каждым SendClientMessage ставить if(Login[playerid] == 1)?

А почему бы и нет? По мне, дак лучше контролировать места с массовой отправкой сообщений. Тебе же не всегда понадобится проверка эта.

HarrWe
09.08.2016, 22:39
Ну не знаю. Мне так убоднее

$continue$
10.08.2016, 05:52
А, ещё проще засунуть проверку в OnPlayerText (https://wiki.sa-mp.com/wiki/OnPlayerText)

А почему бы и нет? По мне, дак лучше контролировать места с массовой отправкой сообщений. Тебе же не всегда понадобится проверка эта.

Seregamil
10.08.2016, 07:08
А, ещё проще засунуть проверку в OnPlayerText (https://wiki.sa-mp.com/wiki/OnPlayerText)
+///

Profyan
10.08.2016, 07:47
А, ещё проще засунуть проверку в OnPlayerText (https://wiki.sa-mp.com/wiki/OnPlayerText)

А при чем тут OnPlayerText? Цель данного мануалы не отправлять серверные сообщения

Daniel_Cortez
10.08.2016, 10:37
Название темы изменено по просьбе ТС.

Desulaid
10.08.2016, 14:58
А, ещё проще засунуть проверку в OnPlayerText (https://wiki.sa-mp.com/wiki/OnPlayerText)

Нет. Не проще. Это не решит той задачи, которую поставил ТС.

$continue$
10.08.2016, 15:59
Нужно заблокировать, что бы сообщение не отправлялись? Тогда почему не решает проблему?

P.S: Догнал. Человек хочет заблокировать отправку ему сообщений через SendPlayerMessage, но зачем такое нужно? Техническое применение данной фичи?

Нет. Не проще. Это не решит той задачи, которую поставил ТС.

HarrWe
10.08.2016, 17:21
Нужно заблокировать, что бы сообщение не отправлялись? Тогда почему не решает проблему?

P.S: Догнал. Человек хочет заблокировать отправку ему сообщений через SendPlayerMessage, но зачем такое нужно? Техническое применение данной фичи?

Техническое применение данной фичи что бы при коннекте не писало ничего в чат.Можно так же много всего придумать с этим.

vovandolg
10.08.2016, 23:56
stock SCMTA(color, const message[], id)
{
if(Login[id] == 0) return true;
return SendClientMessageToAll(color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif

Этот код на приколе сочинял?
Покажи как ты его собрался корректно заюзать?

HarrWe
11.08.2016, 00:20
stock SCMTA(color, const message[], id)
{
if(Login[id] == 0) return true;
return SendClientMessageToAll(color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif

Этот код не приколе сочинял?
Покажи как ты его собрался корректно заюзать?

А что тут не понятно, если я использую SCMTA человеку который не залогинился не выведится, уже проверил все работает.

Sp1ke
11.08.2016, 02:20
А что тут не понятно, если я использую SCMTA человеку который не залогинился не выведится, уже проверил все работает.

Сообщение не выведется никому, если игрок под номером "id" не залогинен. Почему бы не использовать foreach + твою же SCM?

stock SCMTA(color, const message[])
{
foreach(new i: Player) SendClientMessage(i, color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif

HarrWe
11.08.2016, 09:15
Сообщение не выведется никому, если игрок под номером "id" не залогинен. Почему бы не использовать foreach + твою же SCM?

stock SCMTA(color, const message[])
{
foreach(new i: Player) SendClientMessage(i, color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif

А, как то не подумал, спасибо, поправил тему.

vovandolg
11.08.2016, 10:33
Не выведется оно, так как перехват не доделан был:lol:

Profyan
11.08.2016, 11:07
Исправь:



stock SCMTA(color, const message[])
{
foreach(new i: Player) SCM(i, color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif
#define SendClientMessageToAll SCMTA

StevenH
11.08.2016, 20:50
А что тут не понятно, если я использую SCMTA человеку который не залогинился не выведится, уже проверил все работает.

Ошибаешься, работать не будет, по той причине, что SendClientMessageToAll не передает параметров с id игрока)

Sp1ke
12.08.2016, 02:23
Не выведется оно, так как перехват не доделан был:lol:

Функция SendClientMessage уже перехвачена выше, почему работать то не будет?

vovandolg
12.08.2016, 18:48
Функция SendClientMessage уже перехвачена выше, почему работать то не будет?

Ну так ты зайди на форум ещё лет через 5 когда всё исправят кругом))
Исправили уже всё...

Sp1ke
13.08.2016, 02:23
Ну так ты зайди на форум ещё лет через 5 когда всё исправят кругом))
Исправили уже всё...

Причем тут исправили или нет? Ты написал про то, что перехват не был доделан и функция работать не будет, но SendClientMessage уже перехвачена выше и смысл был исправлять на SCM? ТЫ ЖИ ПРАФИСИАНАЛ

vovandolg
13.08.2016, 15:34
Причем тут исправили или нет? Ты написал про то, что перехват не был доделан и функция работать не будет, но SendClientMessage уже перехвачена выше и смысл был исправлять на SCM? ТЫ ЖИ ПРАФИСИАНАЛ

Да ты просто изначально всё не читал походу, тут в обеих функциях были ошибки

Daniel_Cortez
13.08.2016, 16:21
stock SCM(id, color, const message[])
{
if(Login[playerid] == 0) return true;//Это ваша проверка, как пример оставил свою
return SendClientMessage(id, color, message);
}
#if defined _ALS_SendClientMessage
#undef SendClientMessage
#else
#define _ALS_SendClientMessage
#endif
#define SendClientMessage SCM

Вот ещё для SendClientMessageToAll


stock SCMTA(color, const message[])
{
foreach(new i: Player) SCM(i, color, message);
}
#if defined _ALS_SendClientMessageToAll
#undef SendClientMessageToAll
#else
#define _ALS_SendClientMessageToAll
#endif
#define SendClientMessageToAll SCMTA

1. Названия SCM и SCMTA очень простые. Зачастую в модах уже есть функции с такими названиями - это приведёт к конфликту имён.
2. "return true"? В функции, которая должна возвращать целое число?

vovandolg
13.08.2016, 18:27
stock SendClientMessageEx(playerid, color, const message[])
{
if(Login[playerid] != 0)
return SendClientMessage(playerid, color, message);
}
#if defined _ALS_SendClientMessage
#undef SendClientMessage
#else
#define _ALS_SendClientMessage
#endif
#define SendClientMessage SendClientMessageEx