Darge
Умник
Добрый день, я часто был свидетелем, когда ранг администратору давали с помощью switch/case или же if/else конструкций. И как вам не лень тратить время!? Я решил показать вам другой вариант, который будет работать аналогичным образом.
В самое начала добавим
Пример использования с SendRankMessage. Суть функции - сразу оповестить игрока/администора с прикрепленным рангом или рангом определенного администратора к сообщению.
Использования admin_rank на примере создания общего чата. Суть функции - лень писать много букаф, поэтому я все подставил по макрос с аргументом.
Как видно из примеров, вся суть функций идет на получения ячейки массива и вывода ее содержимого, а так как я не установил пустую ячейку (администратора нулевого уровня нет), то из полученной ячейки отнимаем 1.
Я вас не призываю использовать мои def-функции (назовем их так), можете писать все 'чистым' кодом, просто много писать одно и то же мне не нравится. Или можете использовать старые добрые switch/case & if/else конструкции, кто как привык))0)0 Но я не вижу каких-нибудь причин, чтобы использовать их.
В самое начала добавим
PHP:
// Это простенькие define 'функции',
// которые облегчают мне написание одного и того же варианта кода =)
// Примеры я буду приводить с использованием этих функций.
#define SendRankMessage(%4,%0,%3,%1,%2) \
( \
%2=%1, \
strcat(%2,admin_ranks[player_admin[%0]-1]), \
SendClientMessage(%4,%3,%2) \
)
#define admin_rank[%0] \
admin_ranks[player_admin[%0]-1]
// Здесь у нас пронумерованы ранги ВСЕ администраторов,
// подстраиваем под себя. Если что-то не понятно,
// изучаем массивы :3
new admin_ranks[5][18] =
{
"практикант",
"модератор",
"ст. модератор",
"мл. администратор",
"администратор"
},
// Абстрактный пример массива,
// в котором сохраняется уровень определенного администратора
player_admin[MAX_PLAYERS];
//
// Другой пример, чтобы вы поняли что к чему.
//
// enum PlayerInfo
// {
// pAdmin
// }
// new pInfo[MAX_PLAYERS][PlayerInfo];
PHP:
public OnPlayerConnect(playerid)
// Размер ячеек я не считал!
// А вам я рекомендую их посчитать!
{
player_admin[playerid] = 5;
new str[128];
SendRankMessage(playerid, playerid, -1, "Вы ", str);
return 1;
}
PHP:
public OnPlayerText(playerid, text[])
// Простой пример,
// хотя немного глупо, например,
// для ИРПИ сервера делать в чат сообщение,
// что ты есть администратор.
// А вот для какого-нибудь ДМ в самый раз :3
{
new server_chat[128], player_name[MAX_PLAYERS][MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name[playerid], MAX_PLAYER_NAME);
if(администрор[playerid] > 0)
{
format(server_chat, sizeof(server_chat), "%s (%s) говорит: %s", player_name[playerid], admin_rank[playerid], text);
}
else if(администрор[playerid] == 0)
{
format(server_chat, sizeof(server_chat), "%s говорит: %s", player_name[playerid], text);
}
SetPlayerChatBubble(playerid, text, цвет, 20.0, 10000);
SendClientMessageToAll(цвет, server_chat);
return 1;
}
Я вас не призываю использовать мои def-функции (назовем их так), можете писать все 'чистым' кодом, просто много писать одно и то же мне не нравится. Или можете использовать старые добрые switch/case & if/else конструкции, кто как привык))0)0 Но я не вижу каких-нибудь причин, чтобы использовать их.
Последнее редактирование:
