Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 9 из 9
  1. #1
    Аватар для Artzes
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.07.2017
    Сообщений
    5
    Репутация:
    0 ±

    Для чего нужен [playerid]

    Для чего используется [playerid] в коде? К примеру, в некоторых ТеквтДравах используют [playerid], в некоторых нет. Также и просто в скриптах:
    Код:
     if(PlayerInfo[playerid][pAdmin] < 1) return true;
    pAdmin я понимаю еще, т.к это переменная есть в enum PlayerInfo. Но зачем playerid? Разве без него компилятор не поймет что мы к этому пользователю действие совершаем. Просто, где нужно его использовать, а где нет, объясните. т.к я в сампе достаточно давно, слышал, что [playerid] начали использовать, чтоб слет аккаунтов не происходил или перемешка данных. Тип, после перезахода у человека, у которого не было дома - появился дом, который был у человека который был под ИДом, под которым зашел новый чел.

    - - - Добавлено - - -

    И еще вопрос, из-за чего раньше на серверах происходил слет акккаунтов или перемешка данных. К примеру, у игромании была перемешка данных связанная с ИДом, как я выше сказал, у Аризоны слет..

  2. #2
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    playerid - твой порядковый номер в реальный момент времени на сервере, то есть значение которое присваевается индивидуально для каждого игрока.
    А на счет текстдравов, есть два типа - глобальный и личный. Глобальный - для всех одинаковый и не изменяемый (в большинстве случаев), а личный - для всех указывается по разному, в зависимости от значения.

    - - - Добавлено - - -

    Давай разеберем на вот таком примере команды для передачи личных сообщений другому игроку.
    ID с которого идет отправка сообщения - playerid, то есть это ты отправляешь сообщение.
    ID который увидит и примет твое сообщение - giveplayerid.
    giveplayerid == INVALID_PLAYER_ID - Если ID человека, которому ты отправляешь это смс нет на сервере (кикнули или просто ошибся в цифре, или же такого слота вообще нет), выдаст тебе смс - что данный игрок не на сервере.
    Когда ты отправишь сообщение игроку, ему вылетит текст внизу экрана - New message!, и только ему отправится, и увидит тоже, только он. И наоборот так же, если он тебе будет отправлять - увидишь только ты.
    Машина же не понимает, что ты например хочешь Васе отправить СМС, а не Пете. Ты понимаешь, что тебе именно Васе сбросить надо, а машина делает то, что ты ей приказал. А ей нужно как-то определить, что это именно Вася, а не Петя. Если вопросы будут, задавай, подскажу что-то.

    PHP код:
    CMD:pm(playeridparams[])
    {
        new 
    giveplayerid;
        if(
    sscanf(params"rs[128]"giveplayeridparams))
        return 
    SendClientMessage(playeridCOLOR_ORANGE"/pm [ID] [Текст]");
        
        if(
    giveplayerid == INVALID_PLAYER_ID)
        return 
    SendClientMessage(playerid,COLOR_WHITE,"Указанный игрок не найден на сервере");
        
        
    GetPlayerName(playeridsendernamesizeof(sendername));
        
    GetPlayerName(giveplayeridgiveplayersizeof(giveplayer));
        
    format(stringsizeof(string), "(( PM от %s(%d): %s ))"sendernameplayeridparams);
        
    GameTextForPlayer(giveplayerid"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~y~New message!"30003);
        
    SendClientMessage(giveplayerid0xFFFF00FFstring);
        
    format(stringsizeof(string), "(( PM для %s(%d): %s ))"giveplayergiveplayeridparams);
        
    SendClientMessage(playerid,  0xFFFF00FFstring);
        return 
    true;


  3. #3
    Аватар для Artzes
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.07.2017
    Сообщений
    5
    Репутация:
    0 ±
    ну, это я им сам понимаю. Вопрос в другом. К примеру, взял код со стороннего портала, автор: sportsman
    Код:
    new Text:DopPasBox;
    new Text:DopPasKey[12];
    new PlayerText:DopPasText[MAX_PLAYERS];
    
    #define SCM SendClientMessage
    #define COLOR_LIGHTBLUE 0x33CCFFAA
    
    
    enum pInfo
    {
        pOtherPass
    };
    new Player[MAX_PLAYERS][pInfo];
    
    
    public OnGameMode()
    {
        DopPasBox = TextDrawCreate(360.500000, 220.249969, "usebox");
        TextDrawLetterSize(DopPasBox, 0.0, 11.674073);
        TextDrawTextSize(DopPasBox, 278.0, 0.000000);
        TextDrawAlignment(DopPasBox, 1);
        TextDrawColor(DopPasBox, 0);
        TextDrawUseBox(DopPasBox, true);
        TextDrawBoxColor(DopPasBox, 102);
        TextDrawSetShadow(DopPasBox, 0);
        TextDrawSetOutline(DopPasBox, 0);
        TextDrawFont(DopPasBox, 0);
        DopPasKey[0] = TextDrawCreate(313.500000, 299.249877, "0");
        TextDrawTextSize(DopPasKey[0], 321.0, 12.666503);
        DopPasKey[1] = TextDrawCreate(297.500000, 245.000030, "1");
        TextDrawTextSize(DopPasKey[1], 305.558776, 12.666503);
        DopPasKey[2] = TextDrawCreate(314.0, 245.0, "2");
        TextDrawTextSize(DopPasKey[2], 322.500000, 17.499511);
        DopPasKey[3] = TextDrawCreate(331.0, 245.000091, "3");
        TextDrawTextSize(DopPasKey[3], 340.0, 12.666503);
        DopPasKey[4] = TextDrawCreate(296.500000, 264.249877, "4");
        TextDrawTextSize(DopPasKey[4], 305.500000, 12.666503);
        DopPasKey[5] = TextDrawCreate(313.500000, 263.666687, "5");
        TextDrawTextSize(DopPasKey[5], 322.0,12.666503);
        DopPasKey[6] = TextDrawCreate(330.500000, 264.250000, "6");
        TextDrawTextSize(DopPasKey[6], 339.0, 12.666503);
        DopPasKey[7] = TextDrawCreate(296.500000, 281.750061, "7");
        TextDrawTextSize(DopPasKey[7], 304.500000, 12.666503);
        DopPasKey[8] = TextDrawCreate(313.500000, 281.750000, "8");
        TextDrawTextSize(DopPasKey[8], 322.0,12.666503);
        DopPasKey[9] = TextDrawCreate(330.0, 281.750061, "9");
        TextDrawTextSize(DopPasKey[9], 338.0, 12.666503);
        DopPasKey[10] = TextDrawCreate(296.500000, 299.249969, "c");
        TextDrawTextSize(DopPasKey[10], 304.500000, 12.666503);
        DopPasKey[11] = TextDrawCreate(329.0, 301.000030, ">");
        TextDrawTextSize(DopPasKey[11], 338.0, 12.666503);
        for(new i; i < 12; i++)
        {
            TextDrawLetterSize(DopPasKey[i], 0.449999, 1.600000);
            TextDrawAlignment(DopPasKey[i], 0);
            TextDrawColor(DopPasKey[i], -1378294017);
            TextDrawSetShadow(DopPasKey[i], 0);
            TextDrawSetOutline(DopPasKey[i], 0);
            TextDrawBackgroundColor(DopPasKey[i], 51);
            TextDrawFont(DopPasKey[i], 3);
            TextDrawSetProportional(DopPasKey[i], 1);
            TextDrawSetSelectable(DopPasKey[i], true);
        }
        return true;
    }
    public OnPlayerConnect(playerid)
    {
        Player[playerid][pOtherPass] = 0;
        
        
        DopPasText[playerid] = CreatePlayerTextDraw(i, 319.500000, 227.833312, "-");
        PlayerTextDrawLetterSize(i, DopPasText[playerid], 0.285499, 1.223330);
        PlayerTextDrawTextSize(i, DopPasText[playerid], 313.0, 58.916694);
        PlayerTextDrawAlignment(i, DopPasText[playerid], 2);
        PlayerTextDrawColor(i, DopPasText[playerid], 65535);
        PlayerTextDrawUseBox(i, DopPasText[playerid], true);
        PlayerTextDrawBoxColor(i, DopPasText[playerid], -2139062017);
        PlayerTextDrawSetShadow(i, DopPasText[playerid], 0);
        PlayerTextDrawSetOutline(i, DopPasText[playerid], 0);
        PlayerTextDrawFont(i, DopPasText[playerid], 1);
        return true;
    }
    
    
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
        for(new i; i < 10; i++)
        {
            if(clickedid == DopPasKey[i])
            {
                 new pass[5];
                if(GetPVarInt(playerid, "ShowTextDopPass") == 1 || GetPVarInt(playerid, "ShowTextDopPass") == 3)
                {
                    GetPVarString(playerid, "DopPassword[0]", pass, sizeof(pass));
                    strinz = "";
                    format(strinz, 5, "%s%d", pass, i);
                    SetPVarString(playerid, "DopPassword[0]", strinz);
                }
                if(GetPVarInt(playerid, "ShowTextDopPass") == 2)
                {
                    GetPVarString(playerid, "DopPassword[1]", pass, sizeof(pass));
                    strinz = "";
                    format(strinz, 5, "%s%d", pass, i);
                    SetPVarString(playerid, "DopPassword[1]", strinz);
                }
                strinz = "";
                   for(new a = 0; a <= strlen(pass); a++) format(strinz, 5, "%sx", strinz);
                PlayerTextDrawSetString(playerid, DopPasText[playerid], strinz);
                return true;
            }
        }
        if(clickedid == DopPasKey[10]) // C
        {
            switch(GetPVarInt(playerid, "ShowTextDopPass"))
            {
                case 1: SetPVarString(playerid, "DopPassword[0]", "");
                case 2: SetPVarString(playerid, "DopPassword[1]", "");
                case 3: SetPVarString(playerid, "DopPassword[0]", "");
            }
            PlayerTextDrawSetString(playerid, DopPasText[playerid], "-");
            return true;
        }
        if(clickedid == DopPasKey[11]) // >
        {
            new passcount[5];
            if(GetPVarInt(playerid, "ShowTextDopPass") == 1)
            {
                GetPVarString(playerid, "DopPassword[0]", passcount, sizeof(passcount));
                if(strlen(passcount) < 4) return SCM(playerid, COLOR_GREY, "Пароль должен состоять из 4 чисел.");
                SCM(playerid, COLOR_LIGHTBLUE, "Введите дополнительный пароль ещё раз.");
                PlayerTextDrawSetString(playerid, DopPasText[playerid], "-");
                SetPVarInt(playerid, "ShowTextDopPass", 2);
            }
            else if(GetPVarInt(playerid, "ShowTextDopPass") == 2)
            {
                new DopPass[2][5];
                GetPVarString(playerid, "DopPassword[0]", DopPass[0], 5);
                GetPVarString(playerid, "DopPassword[1]", DopPass[1], 5);
                if(strcmp(DopPass[0], DopPass[1], true) == 0)
                {
                    Player[playerid][pOtherPass] = strval(DopPass[1]);
                    //UpdateOtherValue(playerid, "OtherPass", Player[playerid][pOtherPass]); Сохарним в БД (У меня MySQL (как у Вас, я не знаю))
                    SCM(playerid, COLOR_LIGHTBLUE, "Дополнительный пароль установлен.");
                    ProtectionHide(playerid);
                    CancelSelectTextDraw(playerid);
                }
                else
                {
                    if(strlen(DopPass[1]) < 4) return true;
                    SCM(playerid, 0xFFFFFFAA, "Повторный пароль введен не верно.");
                }
            }
            else if(GetPVarInt(playerid, "ShowTextDopPass") == 3)
            {
                   new DopPassOk[5];
                GetPVarString(playerid, "DopPassword[0]", DopPassOk, 5);
                if(strval(DopPassOk) != Player[playerid][pOtherPass])
                {
                       new count = GetPVarInt(playerid, "ProtectioCount");
                    SetPVarInt(playerid, "ProtectioCount", count+1);
                    if(count+1 >= 3) return Kick(playerid);
                    return SCM(playerid, 0xFFFFFFAA, "Дополнительный пароль введен не верно. Попробуйте ещё раз.");
                }
                CancelSelectTextDraw(playerid);
                ProtectionHide(playerid);
                OnPlayerLoginYes(playerid);
            }
            return true;
        }
        //--------------------------------------------------------------------------
        else if(clickedid == Text:INVALID_TEXT_DRAW)
        {
            if(GetPVarInt(playerid, "ShowTextDopPass") > 0)
            {
                if(GetPVarInt(playerid, "ShowTextDopPass") == 1 || GetPVarInt(playerid, "ShowTextDopPass") == 2) DiaProtection(playerid);
                 for(new i; i < 12; i++) TextDrawHideForPlayer(playerid, DopPasKey[i]);
                if(GetPVarInt(playerid, "ShowTextDopPass") == 3) return Kick(playerid);
                ProtectionHide(playerid);
            }
        }
        
        return false;
    }
    
    
    
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if(strcmp(cmd, "/doppass", true) == 0)
        {
            ProtectionShow(playerid, 1);
        }
        return true;
    }
    
    
    
    
    
    Ваш public/stock авторизации
    {
        if(Player[playerid][pOtherPass] == 0)
        {
            // Если доп. пароль не установлен
        }
         else
        {
             ProtectionShow(playerid, 3);
        }
        return true;
    }
    
    
    
    stock ProtectionShow(playerid, count)
    {
        PlayerTextDrawSetString(playerid, DopPasText[playerid], "-");
        for(new i; i < 12; i++) TextDrawShowForPlayer(playerid, DopPasKey[i]);
        TextDrawShowForPlayer(playerid, DopPasBox);
        PlayerTextDrawShow(playerid, DopPasText[playerid]);
        SelectTextDraw(playerid, 0x4598A5FF);
        SetPVarInt(playerid, "ShowTextDraw", 1);
        SetPVarInt(playerid, "ShowTextDopPass", count);
        return true;
    }
    stock ProtectionHide(playerid)
    {
        for(new i; i < 12; i++) TextDrawHideForPlayer(playerid, DopPasKey[i]);
        TextDrawHideForPlayer(playerid, DopPasBox);
        PlayerTextDrawHide(playerid, DopPasText[playerid]);
        DeletePVar(playerid, "DopPassword[0]");
        DeletePVar(playerid, "DopPassword[1]");
        DeletePVar(playerid, "ShowTextDopPass");
        DeletePVar(playerid, "ShowTextDraw");
        return true;
    }
    Почему он в первом коде ТД [playerid] не написал, а в другом написал(где OnPlayerConnect)? И то и другой одинаково используются

  4. #4
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от Artzes Посмотреть сообщение
    ну, это я им сам понимаю. Вопрос в другом. К примеру, взял код со стороннего портала, автор: sportsman
    Код:
    new Text:DopPasBox;
    new Text:DopPasKey[12];
    new PlayerText:DopPasText[MAX_PLAYERS];
    
    #define SCM SendClientMessage
    #define COLOR_LIGHTBLUE 0x33CCFFAA
    
    
    enum pInfo
    {
        pOtherPass
    };
    new Player[MAX_PLAYERS][pInfo];
    
    
    public OnGameMode()
    {
        DopPasBox = TextDrawCreate(360.500000, 220.249969, "usebox");
        TextDrawLetterSize(DopPasBox, 0.0, 11.674073);
        TextDrawTextSize(DopPasBox, 278.0, 0.000000);
        TextDrawAlignment(DopPasBox, 1);
        TextDrawColor(DopPasBox, 0);
        TextDrawUseBox(DopPasBox, true);
        TextDrawBoxColor(DopPasBox, 102);
        TextDrawSetShadow(DopPasBox, 0);
        TextDrawSetOutline(DopPasBox, 0);
        TextDrawFont(DopPasBox, 0);
        DopPasKey[0] = TextDrawCreate(313.500000, 299.249877, "0");
        TextDrawTextSize(DopPasKey[0], 321.0, 12.666503);
        DopPasKey[1] = TextDrawCreate(297.500000, 245.000030, "1");
        TextDrawTextSize(DopPasKey[1], 305.558776, 12.666503);
        DopPasKey[2] = TextDrawCreate(314.0, 245.0, "2");
        TextDrawTextSize(DopPasKey[2], 322.500000, 17.499511);
        DopPasKey[3] = TextDrawCreate(331.0, 245.000091, "3");
        TextDrawTextSize(DopPasKey[3], 340.0, 12.666503);
        DopPasKey[4] = TextDrawCreate(296.500000, 264.249877, "4");
        TextDrawTextSize(DopPasKey[4], 305.500000, 12.666503);
        DopPasKey[5] = TextDrawCreate(313.500000, 263.666687, "5");
        TextDrawTextSize(DopPasKey[5], 322.0,12.666503);
        DopPasKey[6] = TextDrawCreate(330.500000, 264.250000, "6");
        TextDrawTextSize(DopPasKey[6], 339.0, 12.666503);
        DopPasKey[7] = TextDrawCreate(296.500000, 281.750061, "7");
        TextDrawTextSize(DopPasKey[7], 304.500000, 12.666503);
        DopPasKey[8] = TextDrawCreate(313.500000, 281.750000, "8");
        TextDrawTextSize(DopPasKey[8], 322.0,12.666503);
        DopPasKey[9] = TextDrawCreate(330.0, 281.750061, "9");
        TextDrawTextSize(DopPasKey[9], 338.0, 12.666503);
        DopPasKey[10] = TextDrawCreate(296.500000, 299.249969, "c");
        TextDrawTextSize(DopPasKey[10], 304.500000, 12.666503);
        DopPasKey[11] = TextDrawCreate(329.0, 301.000030, ">");
        TextDrawTextSize(DopPasKey[11], 338.0, 12.666503);
        for(new i; i < 12; i++)
        {
            TextDrawLetterSize(DopPasKey[i], 0.449999, 1.600000);
            TextDrawAlignment(DopPasKey[i], 0);
            TextDrawColor(DopPasKey[i], -1378294017);
            TextDrawSetShadow(DopPasKey[i], 0);
            TextDrawSetOutline(DopPasKey[i], 0);
            TextDrawBackgroundColor(DopPasKey[i], 51);
            TextDrawFont(DopPasKey[i], 3);
            TextDrawSetProportional(DopPasKey[i], 1);
            TextDrawSetSelectable(DopPasKey[i], true);
        }
        return true;
    }
    public OnPlayerConnect(playerid)
    {
        Player[playerid][pOtherPass] = 0;
        
        
        DopPasText[playerid] = CreatePlayerTextDraw(i, 319.500000, 227.833312, "-");
        PlayerTextDrawLetterSize(i, DopPasText[playerid], 0.285499, 1.223330);
        PlayerTextDrawTextSize(i, DopPasText[playerid], 313.0, 58.916694);
        PlayerTextDrawAlignment(i, DopPasText[playerid], 2);
        PlayerTextDrawColor(i, DopPasText[playerid], 65535);
        PlayerTextDrawUseBox(i, DopPasText[playerid], true);
        PlayerTextDrawBoxColor(i, DopPasText[playerid], -2139062017);
        PlayerTextDrawSetShadow(i, DopPasText[playerid], 0);
        PlayerTextDrawSetOutline(i, DopPasText[playerid], 0);
        PlayerTextDrawFont(i, DopPasText[playerid], 1);
        return true;
    }
    
    
    public OnPlayerClickTextDraw(playerid, Text:clickedid)
    {
        for(new i; i < 10; i++)
        {
            if(clickedid == DopPasKey[i])
            {
                 new pass[5];
                if(GetPVarInt(playerid, "ShowTextDopPass") == 1 || GetPVarInt(playerid, "ShowTextDopPass") == 3)
                {
                    GetPVarString(playerid, "DopPassword[0]", pass, sizeof(pass));
                    strinz = "";
                    format(strinz, 5, "%s%d", pass, i);
                    SetPVarString(playerid, "DopPassword[0]", strinz);
                }
                if(GetPVarInt(playerid, "ShowTextDopPass") == 2)
                {
                    GetPVarString(playerid, "DopPassword[1]", pass, sizeof(pass));
                    strinz = "";
                    format(strinz, 5, "%s%d", pass, i);
                    SetPVarString(playerid, "DopPassword[1]", strinz);
                }
                strinz = "";
                   for(new a = 0; a <= strlen(pass); a++) format(strinz, 5, "%sx", strinz);
                PlayerTextDrawSetString(playerid, DopPasText[playerid], strinz);
                return true;
            }
        }
        if(clickedid == DopPasKey[10]) // C
        {
            switch(GetPVarInt(playerid, "ShowTextDopPass"))
            {
                case 1: SetPVarString(playerid, "DopPassword[0]", "");
                case 2: SetPVarString(playerid, "DopPassword[1]", "");
                case 3: SetPVarString(playerid, "DopPassword[0]", "");
            }
            PlayerTextDrawSetString(playerid, DopPasText[playerid], "-");
            return true;
        }
        if(clickedid == DopPasKey[11]) // >
        {
            new passcount[5];
            if(GetPVarInt(playerid, "ShowTextDopPass") == 1)
            {
                GetPVarString(playerid, "DopPassword[0]", passcount, sizeof(passcount));
                if(strlen(passcount) < 4) return SCM(playerid, COLOR_GREY, "Пароль должен состоять из 4 чисел.");
                SCM(playerid, COLOR_LIGHTBLUE, "Введите дополнительный пароль ещё раз.");
                PlayerTextDrawSetString(playerid, DopPasText[playerid], "-");
                SetPVarInt(playerid, "ShowTextDopPass", 2);
            }
            else if(GetPVarInt(playerid, "ShowTextDopPass") == 2)
            {
                new DopPass[2][5];
                GetPVarString(playerid, "DopPassword[0]", DopPass[0], 5);
                GetPVarString(playerid, "DopPassword[1]", DopPass[1], 5);
                if(strcmp(DopPass[0], DopPass[1], true) == 0)
                {
                    Player[playerid][pOtherPass] = strval(DopPass[1]);
                    //UpdateOtherValue(playerid, "OtherPass", Player[playerid][pOtherPass]); Сохарним в БД (У меня MySQL (как у Вас, я не знаю))
                    SCM(playerid, COLOR_LIGHTBLUE, "Дополнительный пароль установлен.");
                    ProtectionHide(playerid);
                    CancelSelectTextDraw(playerid);
                }
                else
                {
                    if(strlen(DopPass[1]) < 4) return true;
                    SCM(playerid, 0xFFFFFFAA, "Повторный пароль введен не верно.");
                }
            }
            else if(GetPVarInt(playerid, "ShowTextDopPass") == 3)
            {
                   new DopPassOk[5];
                GetPVarString(playerid, "DopPassword[0]", DopPassOk, 5);
                if(strval(DopPassOk) != Player[playerid][pOtherPass])
                {
                       new count = GetPVarInt(playerid, "ProtectioCount");
                    SetPVarInt(playerid, "ProtectioCount", count+1);
                    if(count+1 >= 3) return Kick(playerid);
                    return SCM(playerid, 0xFFFFFFAA, "Дополнительный пароль введен не верно. Попробуйте ещё раз.");
                }
                CancelSelectTextDraw(playerid);
                ProtectionHide(playerid);
                OnPlayerLoginYes(playerid);
            }
            return true;
        }
        //--------------------------------------------------------------------------
        else if(clickedid == Text:INVALID_TEXT_DRAW)
        {
            if(GetPVarInt(playerid, "ShowTextDopPass") > 0)
            {
                if(GetPVarInt(playerid, "ShowTextDopPass") == 1 || GetPVarInt(playerid, "ShowTextDopPass") == 2) DiaProtection(playerid);
                 for(new i; i < 12; i++) TextDrawHideForPlayer(playerid, DopPasKey[i]);
                if(GetPVarInt(playerid, "ShowTextDopPass") == 3) return Kick(playerid);
                ProtectionHide(playerid);
            }
        }
        
        return false;
    }
    
    
    
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if(strcmp(cmd, "/doppass", true) == 0)
        {
            ProtectionShow(playerid, 1);
        }
        return true;
    }
    
    
    
    
    
    Ваш public/stock авторизации
    {
        if(Player[playerid][pOtherPass] == 0)
        {
            // Если доп. пароль не установлен
        }
         else
        {
             ProtectionShow(playerid, 3);
        }
        return true;
    }
    
    
    
    stock ProtectionShow(playerid, count)
    {
        PlayerTextDrawSetString(playerid, DopPasText[playerid], "-");
        for(new i; i < 12; i++) TextDrawShowForPlayer(playerid, DopPasKey[i]);
        TextDrawShowForPlayer(playerid, DopPasBox);
        PlayerTextDrawShow(playerid, DopPasText[playerid]);
        SelectTextDraw(playerid, 0x4598A5FF);
        SetPVarInt(playerid, "ShowTextDraw", 1);
        SetPVarInt(playerid, "ShowTextDopPass", count);
        return true;
    }
    stock ProtectionHide(playerid)
    {
        for(new i; i < 12; i++) TextDrawHideForPlayer(playerid, DopPasKey[i]);
        TextDrawHideForPlayer(playerid, DopPasBox);
        PlayerTextDrawHide(playerid, DopPasText[playerid]);
        DeletePVar(playerid, "DopPassword[0]");
        DeletePVar(playerid, "DopPassword[1]");
        DeletePVar(playerid, "ShowTextDopPass");
        DeletePVar(playerid, "ShowTextDraw");
        return true;
    }
    Почему он в первом коде ТД [playerid] не написал, а в другом написал(где OnPlayerConnect)? И то и другой одинаково используются
    OnGameModeInit - там подгружаются функции для всех игроков, соответственно не нужно указывать конкретный ID для которого присваивается этот текстдрав. То есть он - глобальный, абсолютно для всех одинаковый.
    В PlayerConnect - игрок подключается - и конкретно для него подгружается этот ТД, и значение там может поменятся в любой момент и это значение увидит только он. Говорю же, глобальные для всех, личные для каждого индивидуально.

    - - - Добавлено - - -

    В общем первый ТД - статический, без изменений. ТД для playerid, динамический, меняется в зависимости от команды, которую ты задал для машины.

    - - - Добавлено - - -

    В твоем случае это регистрация же?
    Ну вот, регистрация для всех игроков одинаковая, вот для этого и стоит глобальный ТД, а значения уже которые там будут идти - индивидуальные.

  5. Пользователь сказал cпасибо:
    Mr_LemoneZ (03.12.2017)
  6. #5
    Аватар для Artzes
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.07.2017
    Сообщений
    5
    Репутация:
    0 ±
    хорошо разобрались. Теперь про слет и перемешку данных от аккаунта. Как избеждать слета аккаунтов и перемешки данных? Подробно выше написал

  7. #6
    Аватар для Kovshevoy
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Сообщений
    190
    Репутация:
    25 ±
    Цитата Сообщение от Artzes Посмотреть сообщение
    хорошо разобрались. Теперь про слет и перемешку данных от аккаунта. Как избеждать слета аккаунтов и перемешки данных? Подробно выше написал
    Вот на счет этого уже без понятия. Скорей всего нужно делать правильные запросы, если у тебя MySQL (и советую использовать его в качестве хранения данных, ибо зачастую с "перемешиванием" данных, проблемы у mxINI). Я не сталкивался лично с перемешкой данных и слета аккаунтов.

  8. #7
    Аватар для iWors
    Пользователь

    Статус
    Оффлайн
    Регистрация
    01.03.2016
    Сообщений
    12
    Репутация:
    2 ±
    Цитата Сообщение от Artzes Посмотреть сообщение
    хорошо разобрались. Теперь про слет и перемешку данных от аккаунта. Как избеждать слета аккаунтов и перемешки данных? Подробно выше написал
    При дисконнекте обнулять данные (уровень, пароль и прочее).

    Зря поднял тему, на дату не посмотрев...

  9. #8
    Аватар для X!X
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.06.2018
    Сообщений
    58
    Репутация:
    1 ±
    Цитата Сообщение от iWors Посмотреть сообщение
    При дисконнекте обнулять данные (уровень, пароль и прочее).

    Зря поднял тему, на дату не посмотрев...
    Почему при дисконнекте? Может наоборот, при коннекте обнулять все переменные лучше?

  10. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Если правильно строить логику своего скрипта, то и обнулять ничего не придётся: все переменные будут принимать нужные значения при загрузке аккаунта.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •