Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 18
  1. #1
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±

    Простая система уровня для ДМ сервера

    Лист обновлений
    Код:
    version 0.1
    version 0.2
    version 0.3
    version 0.3.1
    version 0.3.2 new
    Благодарю $continue$ с помощью в версии 0.3.1
    Благодарю Daniel_Cortez с помощью в версии 0.3.2

    Система функционирует с версии 0.3z!

    Пояснение:
    Количество очков игрока (p_score) набирается за счет попадания в определенную часть тела противника и только с огнестрельного оружия. После чего, тебя перекидывает на следующий уровень и результат(p_score) обнуляется. И так далее до 99 уровня. Выше этого уровня вы не можете набрать. Чтобы определить, с какого уровня игрок может перейти на следующий, укажите в макросе TO_NEXT_LEVEL количество очков, с которого он перейдет на следующий уровень.

    Важно:
    Использую foreach.INC

    Начнем.

    Все это в начало мода

    PHP код:
    #define TO_NEXT_LEVEL (1337)                  // Лимит до следующего уровня

    new
        
    p_kill[MAX_PLAYERS],                      // Убийства
        
    p_die[MAX_PLAYERS],                       // Смерти
        
    p_score[MAX_PLAYERS],                     // Очки опыта (бонус за попадание)
        
    p_level[MAX_PLAYERS char],                // Уровень
        
    PlayerText:TD_show_score[MAX_PLAYERS],    // TD 
        
    score_text[11*3+6+1];                     // Для форматирования :)

    // Вычитаемое ХП за попадание в противника
    static const bodypart_damage[] = 

        
    0.00.00.0,   // -- 
        
    50.0,            // BODY_PART_TORSO 
        
    35.0,            // BODY_PART_GROIN 
        
    20.0,            // BODY_PART_LEFT_ARM 
        
    20.0,            // BODY_PART_RIGHT_ARM 
        
    20.0,            // BODY_PART_LEFT_LEG 
        
    20.0,            // BODY_PART_RIGHT_LEG 
        
    90.0,            // BODY_PART_HEAD 
    }; 

    // Получаемый бонус за попадание в противника
    static const hit_bonus_points[] = 

        
    000,         // -- 
        
    1,               // BODY_PART_TORSO 
        
    2,               // BODY_PART_GROIN 
        
    3,               // BODY_PART_LEFT_ARM 
        
    3,               // BODY_PART_RIGHT_ARM 
        
    3,               // BODY_PART_LEFT_LEG 
        
    3,               // BODY_PART_RIGHT_LEG 
        
    5                // BODY_PART_HEAD 
    }; 
    Это в OnPlayerConnect

    PHP код:
    LoadPlayerTextDraw(playerid); 
    Это в OnPlayerDeath

    PHP код:
    if(killerid != INVALID_PLAYER_IDp_kill[killerid]++;
    p_die[playerid]++;
    PlayerTextDrawShow(playeridTD_show_score[playerid]); 
    Это в OnPlayerTakeDamage. Если нету, то создайте.

    PHP код:
    if(issuerid == INVALID_PLAYER_ID) return 0;

    if(
    19 <= GetPlayerWeapon(issuerid) <= WEAPON_SNIPER || GetPlayerWeapon(issuerid) == WEAPON_MINIGUN)
    {
        new 
    Float:health
        
    GetPlayerHealth(playeridhealth); 
        
    SetPlayerHealth(playeridhealth bodypart_damage[bodypart]); 
        
    p_score[issuerid] += hit_bonus_points[bodypart];  

    Это в односекундый таймер. Не знаете как его создать? Можете посмотреть пример из темы Londlem

    PHP код:
    UpdatePlayerLevel(p);

    format(score_textsizeof(score_text), "%d / %d / %d"p_score[p], p_kill[p], p_die[p]);
    PlayerTextDrawSetString(TD_show_score[p], score_text); 
    Это в любое удобное для вас место. Например в конец мода.

    PHP код:
    stock UpdatePlayerLevel(playerid)
    {
        if(
    p_score[playerid] >= TO_NEXT_LEVEL)
        {
            
    GameTextForPlayer(playerid"level ~g~up"3*10005);
            
    p_level{playerid}++;
            
    p_score[playerid] = 0;
            if(
    p_level{playerid} > 99p_level{playerid} = 99;
            
    SetPlayerScore(playeridp_level{playerid});
        }
    }

    stock LoadPlayerTextDraw(playerid)
    {
        
    TD_show_score[playerid] = CreatePlayerTextDraw(8.199967435.400024"_");
        
    PlayerTextDrawLetterSize(TD_show_score[playerid], 0.2499991.053125);
        
    PlayerTextDrawAlignment(TD_show_score[playerid], 1);
        
    PlayerTextDrawColor(TD_show_score[playerid], -1);
        
    PlayerTextDrawSetShadow(TD_show_score[playerid], 0);
        
    PlayerTextDrawSetOutline(TD_show_score[playerid], 0);
        
    PlayerTextDrawBackgroundColor(TD_show_score[playerid], 255);
        
    PlayerTextDrawFont(TD_show_score[playerid], 2);
        
    PlayerTextDrawSetProportional(TD_show_score[playerid], 1);

    Чтобы показать ТД игроку, используйте. Вставляйте в любое удобное для вас место. Например при спавне :3

    PHP код:
    PlayerTextDrawShow(playeridTD_show_score[playerid]); 
    Далее обнулим переменные. В OnPlayerConnect и в OnPlayerDisconnect вставляем
    PHP код:
    p_kill[playerid] = 0;
    p_die[playerid] = 0;
    p_score[playerid] = 0;
    p_level[playerid] = 0
    Последний раз редактировалось Desulaid; 18.08.2015 в 18:53. Причина: Обновил до версии 0.3.2

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Было же.

  3. #3
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Было же.
    То есть может быть только один вид систему уровня по фрагам? К тому же это пока, так скажем, бета версия, я пока в раздумьях, что можно добавить :)

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

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±
    Причём здесь только один вид? В указанной теме те же текстдравы, та же система полностью. Зачем две одинаковые темы в разных разделах? Бета-версия? Что?

  5. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Mazzilla Посмотреть сообщение
    Причём здесь только один вид? В указанной теме те же текстдравы, та же система полностью. Зачем две одинаковые темы в разных разделах? Бета-версия? Что?
    Я пока ее доделываю, думаю добавить еще пару комманд, расширенная статистика, переосмыслить саму систему, а точнее начисление очков и т.д.
    Ps. других вариантов реализации таковой системы я не знаю. Если есть варианты, то прошу..

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

    Статус
    Оффлайн
    Регистрация
    27.11.2013
    Адрес
    Нижневартовск
    Сообщений
    256
    Репутация:
    63 ±
    Цитата Сообщение от Darge Посмотреть сообщение
    Я пока ее доделываю, думаю добавить еще пару комманд, расширенная статистика, переосмыслить саму систему, а точнее начисление очков и т.д.
    Ps. других вариантов реализации таковой системы я не знаю. Если есть варианты, то прошу..
    Когда доделаете, тогда и выкладывайте. В чем проблема? Кому нужны недоделанные системы, к тому же, уже имеющиеся на портале?

  7. #7
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Обновил!

  8. #8
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Очередная переделка :3

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

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Код:
    if(playerid != INVALID_PLAYER_ID) p_kill[killerid]++;
    wut?!

  10. #10
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Код:
    if(playerid != INVALID_PLAYER_ID) p_kill[killerid]++;
    wut?!
    Ой:D

 

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

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

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

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

Ваши права

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