Просмотр полной версии : [Вопрос] /welcome
Kurbanoff
24.01.2016, 11:34
Всем привет. Сделал простенькую команду , проверяю не работает у администраторов , а у обычных работает
if(strcmp(cmd, "/welcome", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 1)
{
new arank[64];
arank = IsAdminName(PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pHelper]);
format(string, sizeof(string), "%s %s: желает вам приятной игры!", arank, PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
}
else SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");
return 1;
}
Фиксируйте ошибку , и учите меня , на каком строчке моя ошибка
Команда должна работать у администраторов. Код верный. Но есть кое-что нелогичное.
Для функций, выполняющих проверку чего-либо, следует использовать префикс Is.
Примеры:
// из стандартных функций SA:MP
native IsPlayerAdmin(playerid);
native IsPlayerConnected(playerid);
native IsPlayerInAnyVehicle(playerid);
// примеры пользовательских функций
stock bool:IsHouseFree(houseid);
stock IsRPNick (http://pro-pawn.ru/showthread.php?7528)(name[]); // Название кликабельно.
Префиксы Get/Set должны использоваться в названиях функций, получающих доступ к какому-либо атрибуту.
Примеры:
// из стандартных функций SA:MP
native GetPlayerPos(playerid, &Float:x, &Float:y, &Float:z);
native SetPlayerPos(playerid, Float:x, Float:y, Float:z);
native GetVehicleHealth(vehicleid, &Float:health);
native SetVehicleHealth(vehicleid, Float:health);
// примеры пользовательских функций
stock GetHousePrice(houseid);
stock SetHousePrice(houseid, price);
stock GetBusinessFee(businessid);
stock SetBusinessFee(businessid, fee);
Выложите функцию "IsAdminName".
Kurbanoff
24.01.2016, 12:15
stock IsAdminNames(Helper, Admin)
{
if (Helper > 0 ) return Helper;
else if (Admin > 0)
{
if (Admin >=7777) Admin = 10;
return Admin + 3;
}
else return 0;
}
#define IsAdminName(%1,%2) AdminNames[IsAdminNames(%1,%2)]
new AdminNames[14][64] = {"Неизвестно", "Мл.Хелпер","Хелпер","Гл.Хелпер",
"Пом.Модера", "Модератор", "Супермодер", "Гл.Модер",
"Пом.Админа", "РП Админ", "Админ", "Ст.Админ",
"Зам.Гл.Админ", "Главный Администратор"};
Как я понимаю stock IsAdminNames(Helper, Admin) привязана к переменную new AdminNames[14][64]
if(strcmp(cmdtext, "/welcome", true) == 0)
{
static const
rank_names[14][22] =
{
"Мл.Хелпер",
"Хелпер",
"Гл.Хелпер",
"Пом.Модера",
"Модератор",
"Супермодер",
"Гл.Модер",
"Пом.Админа",
"РП Админ",
"Админ",
"Ст.Админ",
"Зам.Гл.Админ",
"Главный Администратор"
};
new
pos =
(1 <= PlayerInfo[playerid][pAdmin] <= 10)
? PlayerInfo[playerid][pAdmin] + 2
: (1 <= PlayerInfo[playerid][pHelper] <= 4)
? PlayerInfo[playerid][pHelper] - 1
: -1;
if(pos != -1)
{
format(string, sizeof(string), "%s %s: желает вам приятной игры!", rank_names[pos], PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
}
else
SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");
return 1;
}
Макрос "IsAdminName" и сток "IsAdminNames" можете удалить, если больше нигде их не используете.
Kurbanoff
24.01.2016, 16:23
Макрос "IsAdminName" и сток "IsAdminNames" можете удалить, если больше нигде их не используете.
Извините но я до сегодняшнего дня использую этот макрос "IsAdminNames" с ним удобнее , и во всех проверках где нужно название рангов Администратора я использую этот код
new arank[64];
arank = IsAdminName(PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pHelper]);
if(strcmp(cmdtext, "/welcome", true) == 0)
{
static const
rank_names[14][22] =
{
"Мл.Хелпер",
"Хелпер",
"Гл.Хелпер",
"Пом.Модера",
"Модератор",
"Супермодер",
"Гл.Модер",
"Пом.Админа",
"РП Админ",
"Админ",
"Ст.Админ",
"Зам.Гл.Админ",
"Главный Администратор"
};
new
pos =
(1 <= PlayerInfo[playerid][pAdmin] <= 10)
? PlayerInfo[playerid][pAdmin] + 2
: (1 <= PlayerInfo[playerid][pHelper] <= 4)
? PlayerInfo[playerid][pHelper] - 1
: -1;
if(pos != -1)
{
format(string, sizeof(string), "%s %s: желает вам приятной игры!", rank_names[pos], PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
}
else
SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");
return 1;
}
Спасибо за этот код (Важно: Работоспособность вашего кода я не проверял , но за труд я истинно благодарю вам)
PS: Если найду способ решение , я буду поделиться с вами на счет этой проблемы .
по-пробуй так
if(strcmp(cmd, "/welcome", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] == 0) return SendClientMessage(playerid, COLOR_GREY, "[!] Вы не уполномочены использовать эту команду!");
new arank[64];
arank = IsAdminName(PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pHelper]);
format(string, sizeof(string), "%s %s: желает вам приятной игры!", arank, PN(playerid));
SendClientMessageToAll(COLOR_YELLOW, string);
return 1;
}
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot