Просмотр полной версии : [Вопрос] PlayerLogged
Ув. пользователи как написать функцию:
new PlayerLogged[MAX_PLAYERS char];
что бы в дальнейшом использовать эту функцию, для проверки подлключён ли игрок либо нет
Что Вам мешает использовать стандартную функцию IsPlayerConnected? А если использовать массив то в OnPlayerConnect:
PlayerConnected{playerid} = 1; // у Вас PlayerLogged (Logged же проверка на логин)
а в OnPlayerDisconnect:
PlayerConnected{playerid} = 0;
Что Вам мешает использовать стандартную функцию IsPlayerConnected? А если использовать массив то в OnPlayerConnect:
PlayerConnected{playerid} = 1; // у Вас PlayerLogged (Logged же проверка на логин)
а в OnPlayerDisconnect:
PlayerConnected{playerid} = 0;
А что по вашему мнению лючше использовать?
IsPlayerConnected быстрее чем массив, а если с массивом, то память используется.
А что по вашему мнению лючше использовать?
Зависит от нужды. Если вам нужно проверять именно ПОДКЛЮЧЕНИЕ к серверу - лучше воспользоваться функцией. Если же вам нужно проверять авторизацию игрока, лучше сделать так:
new authorized_account[MAX_PLAYERS char];
В функцию, отвечающую за загрузку аккаунта при авторизации
authorized_account{playerid} = 1;
В OnPlayerDisconect
authorized_account{playerid} = 0;
И для удобства можно создать функцию, типа
stock IsPlayerLogged(playerid) return authorized_account{playerid};
//Это если с английским плохо. Я бы использовал код "authorized_account{playerid}" напрямую
Я использую для проверки авторизован ли игрок, если нет то он не может водить команды
Зачем char? Можно ведь использовать переменную типа bool
new bool:login[MAX_PLAYERS];
login[playerid] = true;// Игрок авторизован
login[playerid] = false;// Игрок не авторизован
if(login[playerid])// Игрок авторизован
if(!login[playerid])// Игрок не авторизован
Можешь по подробней.
login[playerid] = true;// это в OnPlayerConnect
login[playerid] = false;// это вOnPlayerDisconnect
И далее использовать в командах
if(login[playerid])// Игрок авторизован
if(!login[playerid])// Игрок не авторизован
Это ставь когда игрок успешно авторизовался.
login[playerid] = true;
Это ставь когда игрок вышел с сервера.
login[playerid] = false;
А, если используешь public OnPlayerCommandText, то просто в начало паблика вставь
if(!login[playerid])) return SendClientMessage(playerid,-1,"Авторизуйтесь на сервере!");
Зачем char? Можно ведь использовать переменную типа bool
new bool:login[MAX_PLAYERS];
login[playerid] = true;// Игрок авторизован
login[playerid] = false;// Игрок не авторизован
if(login[playerid])// Игрок авторизован
if(!login[playerid])// Игрок не авторизован
Может наоборот? Типа bool в pawn нет (то есть он есть, но он берёт столько же памяти сколько и обычная переменная с типом integer). А char сокращает размер массива в (cellbits / charbits) раз (на данный момент 4). И установить значение ячейкам этого массива можно только от 0 до 255.
Я использую для проверки авторизован ли игрок, если нет то он не может водить команды
Тогда мой код подойдёт вам чуть больше, чем полностью. Просто в командах используйте проверку, типа
if(!IsPlayerLogged(playerid)) return SendClientMessage(playerid, 0xFF0000FF, "Ошибка: {FFFFFF}Вы не авторизированы");
и всё
Зачем char? Можно ведь использовать переменную типа bool
new bool:login[MAX_PLAYERS];
login[playerid] = true;// Игрок авторизован
login[playerid] = false;// Игрок не авторизован
if(login[playerid])// Игрок авторизован
if(!login[playerid])// Игрок не авторизован
bool в Pawn занимает столько же, сколько и обычная переменная (4 байта). Под char же выделяется всего 1 байт, а 1 байт может принимать одно из 256 значений (28, то бишь от 0 до 255). О байте можно почитать тут (http://ru.wikipedia.org/wiki/%D0%91%D0%B0%D0%B9%D1%82). И прописывая
new authorized_account[MAX_PLAYERS char];
мы выделяем не 2000 байт, а 500 (MAX_PLAYERS по стандарту имеет значение "500" и если работать с массивом как с ячейками - каждая ячейка будет равна 4 байта => 500*4 = 2000. С char же выделяется 1 байт, о чём я сказал выше).
P.S. И сразу поясню для тех, кто побежит сейчас "оптимизировать" массивы. С char нужно работать с умом. Не везде можно использовать данный тип переменной. Например в таком случае%
enum ololo {}
new ololo_ololo[MAX_PLAYERS char][ololo];
толку от char не будет, ибо MAX_PLAYERS тут работает совсем по иному принципу. В общем, изучите сначала по подробнее вопрос, иначе размер вашего amx может вырасти раза в 2
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot