Добро пожаловать на 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
    Аватар для NichWell
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Адрес
    Бердянск
    Сообщений
    97
    Репутация:
    4 ±
    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
    Аватар для NichWell
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Адрес
    Бердянск
    Сообщений
    97
    Репутация:
    4 ±
    Цитата Сообщение от 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
    Аватар для NichWell
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.07.2015
    Адрес
    Бердянск
    Сообщений
    97
    Репутация:
    4 ±
    Цитата Сообщение от 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
    Адрес
    Восточный Мордор
    Сообщений
    4,545
    Репутация:
    1689 ±
    Если правильно строить логику своего скрипта, то и обнулять ничего не придётся: все переменные будут принимать нужные значения при загрузке аккаунта.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

 

 

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

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

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

Ваши права

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