Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21
  1. #1
    Аватар для Londlem
    Модератор

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Сообщений
    1,360
    Репутация:
    767 ±

    Система уровней по фрагам [DM]

    Здравствуйте, уважаемые пользователи Pro-Pawn.Ru.

    Вкратце расскажу, что здесь есть:

    • При достижении определённого количества фрагов вы переходите на новый уровень. [Всего уровней: 28 (в дальнейшнем можете добавить новые уровни)];
    • Новый уровень = новый ранг [Рангов столько же, сколько и уровней];
    • Ваша статистика видна в текстдраве [Текстдрав один]


    Создадим массивы:

    • Для подсчёта количества фрагов игрока;
    • Количества фрагов нужное для перехода на новый уровень;
    • Для создания текстдрава с информацией;
    • Названия рангов


    Ко всем new:

    PHP код:
    const
        
    MAX_LEVELS 28;

    new
        
    player_kills[MAX_PLAYERS],
        
    Textstats_TD[MAX_PLAYERS];

    static const
        
    level_kills[MAX_LEVELS] =
        {
            
    50120170245350480720105014502600440052006100735081009350,
            
    10000113001210013450141501490015250162001690017300181001890025000
        
    },
        
    rank_names[MAX_LEVELS 1][14] =
        {
            
    "Newcomer""Advanced""Killer""Master""Professional""Elite""Commander",
            
    "Warmonger""Perfectionist""Invincible""Hero""Almighty""Bonecrusher""Cruel",
            
    "Sergeant""Colonel""Proof""Supernatural""Bloodsucker""Predator""Chastener",
            
    "Tamer""Incredible""Fiend""Dominator""Perpetrator""Ruthless""Destroyer""-/-"
        
    }; 
    Теперь создадим функцию, которая будет выводить на текстдрав статистику игрока.

    В конец мода:

    PHP код:
    stock UpdateStats(const playerid)
    {
        new
            
    level 28;

        switch(
    player_kills[playerid])
        {
            case 
    0..49:
                
    level 0;
            case 
    50..119:
                
    level 1;
            case 
    120..169:
                
    level 2;
            case 
    170..244:
                
    level 3;
            case 
    245..349:
                
    level 4;
            case 
    350..479:
                
    level 5;
            case 
    480..719:
                
    level 6;
            case 
    720..1049:
                
    level 7;
            case 
    1050..1449:
                
    level 8;
            case 
    1450..2599:
                
    level 9;
            case 
    2600..4399:
                
    level 10;
            case 
    4400..5199:
                
    level 11;
            case 
    5200..6099:
                
    level 12;
            case 
    6100..7349:
                
    level 13;
            case 
    7350..8099:
                
    level 14;
            case 
    8100..9349:
                
    level 15;
            case 
    9350..9999:
                
    level 16;
            case 
    10000..11299:
                
    level 17;
            case 
    11300..12099:
                
    level 18;
            case 
    12100..13449:
                
    level 19;
            case 
    13450..14149:
                
    level 20;
            case 
    14150..14899:
                
    level 21;
            case 
    14900..15249:
                
    level 22;
            case 
    15250..16199:
                
    level 23;
            case 
    16200..16899:
                
    level 24;
            case 
    16900..17299:
                
    level 25;
            case 
    17300..18099:
                
    level 26;
            case 
    18100..18899:
                
    level 27;
        }
        
    SetPVarInt(playerid"Level"level);
        
        new
            
    str[65];
        
        
    format(str65"Kills: %i / %i~n~Level: %i / %i~n~Rank: %s"player_kills[playerid], level_kills[level], levelMAX_LEVELSrank_names[level]);
        
    TextDrawSetString(stats_TD[playerid], str);

    Создадим текстдрав, где будет показана информация о статистики игрока:

    В public OnPlayerConnect:

    PHP код:
    stats_TD[playerid] = TextDrawCreate(497.00000099.000000"_");
    TextDrawBackgroundColor(stats_TD[playerid], 255);
    TextDrawFont(stats_TD[playerid], 2);
    TextDrawLetterSize(stats_TD[playerid], 0.2700001.100000);
    TextDrawColor(stats_TD[playerid], 0xAAAADDFF);
    TextDrawSetOutline(stats_TD[playerid], 1);
    TextDrawSetProportional(stats_TD[playerid], 1);

    TextDrawShowForPlayer(playeridstats_TD[playerid]); 
    Для дальнейшей работы с файлами создайте папку с названием stats_TD в папке scriptfiles.

    Создадим аккаунт статистики игрока, где будет храниться количество фрагов игрока:

    В public OnPlayerDisconnect:

    PHP код:
    static const
        
    prefix[] = "stats_TD/",
        
    postfix[] = ".ini";

    new
        
    str[(sizeof(prefix) - 1) + MAX_PLAYER_NAME + (sizeof(postfix) - 1) + 1];

    GetPlayerName(playeridstrsizeof(str));
    strins(strprefix0), strcat(strpostfix);

    new
        
    Filefile fopen(strio_write);

    if(
    file != File0)
    {
        
    valstr(strplayer_kills[playerid]);
        
    fwrite(filestr);
        
    fclose(file);
    }

    TextDrawDestroy(stats_TD[playerid]); 
    Сохранение количества фрагов игрока готово. Добавим загрузку количества фрагов игрока:

    Добавляем после того, как игрок зашёл в аккаунт:
    PHP код:
    static const
        
    prefix[] = "stats_TD/",
        
    postfix[] = ".ini";

    new
        
    str[(sizeof(prefix) - 1) + MAX_PLAYER_NAME + (sizeof(postfix) - 1) + 1];

    GetPlayerName(playeridstrsizeof(str));
    strins(strprefix0), strcat(strpostfix);

    new
        
    Filefile fopen(strio_read);

    if(
    file != File0)
    {
        
    fread(filestr);
        
    player_kills[playerid] = strval(str);
        
    SetPlayerScore(playeridplayer_kills[playerid]);
        
    fclose(file);

    Загрузка количества фрагов игрока из файла готова.

    Теперь покажем игроку статистику, добавляем после того, как игрок зарегистрировался / вошёл в аккаунт:

    PHP код:
    UpdateStats(playerid); 
    Добавляем в public OnPlayerDeath:
    PHP код:
    SetPlayerScore(killerid, ++player_kills[killerid]);
    UpdateStats(killerid); 
    Добавляем в public OnPlayerClickPlayer, чтобы узнать статистику другого игрока, кликнув его в TAB:

    PHP код:
    static const
        
    fmt_str1[] = "Статистика игрока %s (%i)",
        
    fmt_str2[] = "\
        {00CC00}[Уровень: {FF0000}%i / %i{00CC00}]\n\
        {00CC00}[Убийства: {FF0000}%i / %i{00CC00}]\n\
        {00CC00}[Ранг: {FF0000}%s{00CC00}]"
    ;

    new
        
    str[sizeof(fmt_str1) - MAX_PLAYER_NAME 4],
        
    str2[sizeof(fmt_str2) - 11 11 sizeof(RankNames[])],
        
    level GetPVarInt(clickedplayerid"Level");

    GetPlayerName(clickedplayeridstrsizeof(str));
    format(strsizeof(str), fmt_str1strclickedplayerid);
    format(str2sizeof(str2), fmt_str2levelMAX_LEVELSplayer_kills[clickedplayerid], level_kills[level], rank_names[level]);
    ShowPlayerDialog(playerid2048DIALOG_STYLE_MSGBOXstrstr2"Закрыть"""); 
    Это будет выглядить вот так:
     Скриншот


     Скриншоты текстдрава





    Автор: Londlem

    Специально для: Pro-Pawn.Ru


    Копирование данной статьи без разрешения автора запрещено!
    Последний раз редактировалось Londlem; 02.12.2014 в 19:29.

  2. 3 пользователя(ей) сказали cпасибо:
    Accord (18.06.2014)AndreyKa (25.11.2014)Копюшон (06.05.2014)
  3. #2
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,282
    Репутация:
    417 ±
    Супер!

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

    Статус
    Оффлайн
    Регистрация
    10.06.2014
    Сообщений
    6
    Репутация:
    0 ±
    \gamemodes\PDM.pwn(1002) : error 029: invalid expression, assumed zero
    gamemodes\PDM.pwn(1002) : error 029: invalid expression, assumed zero
    \gamemodes\PDM.pwn(1002) : error 017: undefined symbol "level"
    \gamemodes\PDM.pwn(1002) : fatal error 107: too many error messages on one line
    PHP код:
    public OnPlayerClickPlayer(playeridclickedplayeridsource)
    {
        static const
        
    fmt_str1[] = "?????????? ?????? %s (%d)",
        
    fmt_str2[] ="{00CC00}[???????: {FF0000}%d / 28{00CC00}]\n"\
                    
    "{00CC00}[????????: {FF0000}%d / %d{00CC00}]\n"\
                    
    "{00CC00}[????: {FF0000}%s{00CC00}]";
        new
        
    str[sizeof(fmt_str1)-2+MAX_PLAYER_NAME-2+4],
        
    str2[sizeof(fmt_str2)-2+2-2+11-2+], level GetPVarInt(clickedplayerid"Level");
        
    GetPlayerName(clickedplayeridstrsizeof(str)); // ??????? ??????? ??????, ?? ???????? ????????
        
    format(strsizeof(str), fmt_str1strclickedplayerid);
        
    formatstr2sizeof(str2), fmt_str2,
            
    level,
            
    kills[clickedplayerid], LevelKills[level],
            
    RankNames[level]);
        
    ShowPlayerDialog(playerid0DIALOG_STYLE_MSGBOXstrstr2"Закрыть""");
        return 
    1;

    Ошибочная строка:
    PHP код:
        str2[sizeof(fmt_str2)-2+2-2+11-2+], level GetPVarInt(clickedplayerid"Level"); 

  5. #4
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,664
    Репутация:
    2145 ±
    Исправил 1-й пост, посмотрите на тот отрывок ещё раз.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

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

    Статус
    Оффлайн
    Регистрация
    10.06.2014
    Сообщений
    6
    Репутация:
    0 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Исправил 1-й пост, посмотрите на тот отрывок ещё раз.
    Те же ошибки почему то))))

  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    dell
    Последний раз редактировалось DeimoS; 11.06.2014 в 00:58.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    10.06.2014
    Сообщений
    6
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    PHP код:
    static const
        
    fmt_str1[] = "Статистика игрока %s (%d)",
        
    fmt_str2[] ="{00CC00}[Уровень: {FF0000}%d / 28{00CC00}]\n\
                     {00CC00}[Убийства: {FF0000}%d / %d{00CC00}]\n\
                     {00CC00}[Ранг: {FF0000}%s{00CC00}]"

    не?
    Ещё больше ошибок =(((

    PHP код:
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(247) : warning 219local variable "str" shadows a variable at a preceding level
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(994) : error 003declaration of a local variable must appear in a compound block
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(995) : error 001expected token"="but found "["
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1000) : error 039constant symbol has no size
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1001) : error 017undefined symbol "fmt_str2"
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1093) : warning 219local variable "str" shadows a variable at a preceding level
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1234) : warning 219local variable "str" shadows a variable at a preceding level
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1238) : warning 203symbol is never used"str"
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1238) : warning 203symbol is never used"str2" 
    Проблема с str на весь код

    Ошибочный паблик:
    PHP код:
    public OnPlayerClickPlayer(playeridclickedplayeridsource)
        static const
        
    fmt_str1[] = "Статистика игрока %s (%d)",
        
    fmt_str2[] ="{00CC00}[Уровень: {FF0000}%d / 28{00CC00}]\n\
                     {00CC00}[Убийства: {FF0000}%d / %d{00CC00}]\n\
                     {00CC00}[Ранг: {FF0000}%s{00CC00}]"
    ;
        new
        
    str[sizeof(fmt_str1)-2+MAX_PLAYER_NAME-2+4],
        
    str2[sizeof(fmt_str2)-2+2-2+11-2+11-2+sizeof(RankNames[])], level GetPVarInt(clickedplayerid"Level");
    GetPlayerName(clickedplayeridstrsizeof(str)); // ??????? ??????? ??????, ?? ???????? ????????
    format(strsizeof(str), fmt_str1strclickedplayerid);
    formatstr2sizeof(str2), fmt_str2,
            
    level,
            
    kills[clickedplayerid], LevelKills[level],
            
    RankNames[level]);
    ShowPlayerDialog(playerid0DIALOG_STYLE_MSGBOXstrstr2"???????"""); 

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Так, стоп. Код в уроке полностью рабочий. Разве что может выскочить варнинг
    PHP код:
    indeterminate array size in "sizeof" expression (symbol ""
    Но он исправляется банальной правкой вот этого массива
    PHP код:
    new const RankNames[][14] = {
        
    "Newcomer""Advanced""Killer""Master""Professional""Elite""Commander",
        
    "Warmonger""Perfectionist""Invincible""Hero""Almighty""Bonecrusher""Cruel",
        
    "Sergeant""Colonel""Proof""Supernatural""Bloodsucker""Predator""Chastener",
        
    "Tamer""Incredible""Fiend""Dominator""Perpetrator""Ruthless""Destroyer""-/-"
    }; 
    В остальном же ошибок нет. Только что проверил.

    P.S. Разве что использовать стоит не TextDrawCreate, а CreatePlayerTextDraw

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

    Цитата Сообщение от CLARK Посмотреть сообщение
    Ещё больше ошибок =(((

    PHP код:
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(247) : warning 219local variable "str" shadows a variable at a preceding level
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(994) : error 003declaration of a local variable must appear in a compound block
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(995) : error 001expected token"="but found "["
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1000) : error 039constant symbol has no size
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1001) : error 017undefined symbol "fmt_str2"
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1093) : warning 219local variable "str" shadows a variable at a preceding level
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1234) : warning 219local variable "str" shadows a variable at a preceding level
    D
    :\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1238) : warning 203symbol is never used"str"
    D:\Архив от 15.10.12\Games\123\gamemodes\PDM.pwn(1238) : warning 203symbol is never used"str2" 
    Проблема с str на весь код

    Ошибочный паблик:
    PHP код:
    public OnPlayerClickPlayer(playeridclickedplayeridsource)
        static const
        
    fmt_str1[] = "Статистика игрока %s (%d)",
        
    fmt_str2[] ="{00CC00}[Уровень: {FF0000}%d / 28{00CC00}]\n\
                     {00CC00}[Убийства: {FF0000}%d / %d{00CC00}]\n\
                     {00CC00}[Ранг: {FF0000}%s{00CC00}]"
    ;
        new
        
    str[sizeof(fmt_str1)-2+MAX_PLAYER_NAME-2+4],
        
    str2[sizeof(fmt_str2)-2+2-2+11-2+11-2+sizeof(RankNames[])], level GetPVarInt(clickedplayerid"Level");
    GetPlayerName(clickedplayeridstrsizeof(str)); // ??????? ??????? ??????, ?? ???????? ????????
    format(strsizeof(str), fmt_str1strclickedplayerid);
    formatstr2sizeof(str2), fmt_str2,
            
    level,
            
    kills[clickedplayerid], LevelKills[level],
            
    RankNames[level]);
    ShowPlayerDialog(playerid0DIALOG_STYLE_MSGBOXstrstr2"???????"""); 
    Эмм, а скобка в начале паблика у вас где?
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  11. Пользователь сказал cпасибо:
    Daniel_Cortez (10.06.2014)
  12. #9
    Аватар для CLARK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.06.2014
    Сообщений
    6
    Репутация:
    0 ±
    Сорри))) Вставил скобку осталась одна ошибка:
    D:\Àðõèâ îò 15.10.12\Games\123\gamemodes\PDM.pwn(1002) : warning 224: indeterminate array size in "sizeof" expression (symbol "")
    В этой строке
    PHP код:
    str2[sizeof(fmt_str2)-2+2-2+11-2+11-2+sizeof(RankNames[])], level GetPVarInt(clickedplayerid"Level"); 
    Последний раз редактировалось CLARK; 10.06.2014 в 13:51.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    PHP код:
    public OnPlayerClickPlayer(playeridclickedplayeridsource)
    {
        static const
            
    fmt_str1[] = "Статистика игрока %s (%d)",
            
    fmt_str2[] ="{00CC00}[Уровень: {FF0000}%d / 28{00CC00}]\n"\
                        
    "{00CC00}[Убийства: {FF0000}%d / %d{00CC00}]\n"\
                        
    "{00CC00}[Ранг: {FF0000}%s{00CC00}]";
        new
            
    str[sizeof(fmt_str1)-2+MAX_PLAYER_NAME-2+4],
            
    str2[sizeof(fmt_str2)-2+2-2+11-2+11-2+sizeof(RankNames[])], level GetPVarInt(clickedplayerid"Level");
        
    GetPlayerName(clickedplayeridstrsizeof(str)); // Получим никнейм игрока, на которого кликнули
        
    format(strsizeof(str), fmt_str1strclickedplayerid);
        
    formatstr2sizeof(str2), fmt_str2,
                
    level,
                
    kills[clickedplayerid], LevelKills[level],
                
    RankNames[level]);
        
    ShowPlayerDialog(playerid0DIALOG_STYLE_MSGBOXstrstr2"Закрыть""");
        return 
    1;

    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

 

 
Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Ваши права

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