[Вопрос] Проблема с IsPlayerConnected[игрок] и GetPlayerState
#1

Здравствуйте!

У меня возникла проблема, проблема очень мешает, и работает по такому принципу:
Рандомно работает на игрока (данная команда) то есть сейчас не работают команды на 16 ID через пол часа на 28 ID.
Суть думаю понятна.

Пример команды:
PHP код:
YCMD:pm(playeridparams[], help)
{
    if(
PlayerInfo[playerid][pLogin] == 0) return true;
    if(
PlayerInfo[playerid][pAdmin] == && PlayerInfo[playerid][pHelper] == 0) return true;
    if(
dostup[playerid] != && PlayerInfo[playerid][pHelper] == 0) return true;
    if(
sscanf(params"us[64]",params[0],params[1])) return SendClientMessage(playeridCOLOR_WHITE"Введите: /pm [id] [текст]");
    if(!
IsPlayerConnected(params[0])) return true;
    if(
PlayerInfo[playerid][pAdmin] >=1)
    {
        
format(CMDstrsizeof(CMDstr), "Ответ от %s: %s",Name(playerid),params[1]);
        
SendClientMessage(params[0], 0xD97700AACMDstr);
        
format(CMDstrsizeof(CMDstr), "<-Ответ от %s[%d] К %s[%d]: %s",Name(playerid),playeridName(params[0]),params[0],params[1]);
        
SendAdminMessage(0xD97700AA,CMDstr);
    }
    else if(
PlayerInfo[playerid][pHelper] >=1)
    {
        
format(CMDstrsizeof(CMDstr), "Ответ от саппорта %s: %s",Name(playerid),params[1]);
        
SendClientMessage(params[0], 0xD97700AACMDstr);
        
format(CMDstrsizeof(CMDstr), "<-Ответ от саппорта %s[%d] К %s[%d]: %s",Name(playerid),playeridName(params[0]),params[0],params[1]);
        
SendAdminMessage(0xD97700AA,CMDstr);
        
HelperMessage(0xD97700AA,CMDstr);
    }
    return 
true;

Как можно решить данную проблему? Помогите пожалуйста!


Еще GetPlayerState проявила себя в действии:
PHP код:
YCMD:goto(playeridparams[], help)
{
    if(
PlayerInfo[playerid][pLogin] == 0) return true;
    if(
PlayerInfo[playerid][pAdmin] < || dostup[playerid] == 0) return true;
    if(
sscanf(params"u",params[0])) return SendClientMessage(playeridCOLOR_WHITE"Введите: /g(oto) [id]");
    new 
Float:plocx,Float:plocy,Float:plocz;
    if(!
IsPlayerConnected(params[0])) return true;
    if(
GetPlayerState(params[0]) != && GetPlayerState(params[0]) != && GetPlayerState(params[0]) != 3) return SendClientMessage(playeridCOLOR_GRAD1"Игрок не вступил в игру!");
    if(
GetPlayerState(params[0]) == PLAYER_STATE_SPECTATING && gSpectateID[params[0]] != INVALID_PLAYER_ID) return SendClientMessage(playeridCOLOR_GRAD1"Админ в режиме наблюдения");
    
GetPlayerPos(params[0], plocxplocyplocz);
    if (
GetPlayerState(playerid) == 2)
    {
        new 
tmpcar GetPlayerVehicleID(playerid);
        
SetVehiclePos(tmpcarplocxplocy+4plocz);
        
PlayerInfoplayerid ][ pPos_x ] = plocx;
        
PlayerInfoplayerid ][ pPos_y ] = plocy+4;
        
PlayerInfoplayerid ][ pPos_z ] = plocz;
        
TelePos[playerid][0] = 0.0;TelePos[playerid][1] = 0.0;
    }
    else
    {
        
SetPlayerPos(playerid,plocx,plocy+2plocz);
        
SetPlayerVirtualWorld(playeridGetPlayerVirtualWorld(params[0]));
        
SetPlayerInterior(playeridGetPlayerInterior(params[0]));
    }
    
SendClientMessage(playeridCOLOR_WHITE"Вы были телепортированы");
    return 
true;

Reply
#2

Зачем два раза одну и ту же проверку на "pHelper"?
Код:
if(PlayerInfo[playerid][pAdmin] == 0 && PlayerInfo[playerid][pHelper] == 0) return true; 
if(dostup[playerid] != 1 && PlayerInfo[playerid][pHelper] == 0) return true;
Reply
#3

Quote:
Originally Posted by Fich
Посмотреть сообщение
Зачем два раза одну и ту же проверку на "pHelper"?
Код:
if(PlayerInfo[playerid][pAdmin] == 0 && PlayerInfo[playerid][pHelper] == 0) return true; 
if(dostup[playerid] != 1 && PlayerInfo[playerid][pHelper] == 0) return true;
Убрал
PHP код:
if(PlayerInfo[playerid][pAdmin] == && PlayerInfo[playerid][pHelper] == 0) return true


Это решит проблему?
Reply
#4

Quote:
Originally Posted by Parlianment
Посмотреть сообщение
Убрал
PHP код:
if(PlayerInfo[playerid][pAdmin] == && PlayerInfo[playerid][pHelper] == 0) return true


Это решит проблему?
Нет. Что за ycmd вообще?
Команда вообще не вызывается или вызывается но не работает часть кода?
Reply
#5

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
Нет. Что за ycmd вообще?
Команда вообще не вызывается или вызывается но не работает часть кода?
YCMD Y_les'овский обработчик.

ТС, как вариант строка парсится не верно из за params[1], а в частности присвоение строки к этой переменной.
Объяви выше обычную переменную, например text[64] и попробуй через неё. Но это для первого случая. Для второго без понятия. Может sscanf старая ?

Также зачем каждый раз вызывать функци GetPlayerState ? Куда лучше будет вызвать её раз, и присвоить её значение к переменной, и по ней уже делать сверки итд.
Reply
#6

Quote:
Originally Posted by Jon_De
Посмотреть сообщение
Нет. Что за ycmd вообще?
Команда вообще не вызывается или вызывается но не работает часть кода?
Не вызывается... на некоторых игроков
Reply
#7

Писать всё сообщение жирным шрифтом - другим глаза ломать
Reply
#8

Проблему решил самостоятельно.
PHP код:
if(sscanf(params"u",params[0])) return SendClientMessage(playeridCOLOR_WHITE"Введите: /g(oto) [id]"); 

Ве дело в "u", решение простое заменяем "u" на "d".
Reply
#9

Quote:
Originally Posted by Parlianment
Посмотреть сообщение
Проблему решил самостоятельно.
PHP код:
if(sscanf(params"u",params[0])) return SendClientMessage(playeridCOLOR_WHITE"Введите: /g(oto) [id]"); 

Ве дело в "u", решение простое заменяем "u" на "d".
Это не решение. Параметр "u" специально сделан для указания игрока, ника или id'a
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)