Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Основа системы опыта и уровней

m1n1vv

Изучающий
Пользователь
Регистрация
6 Фев 2015
Сообщения
683
Лучшие ответы
1
Репутация
145
Это фундамент системы опыта и уровней. Только вычисление!

  1. В enum данных игрока добавляем константы pLevel и pExp:
    PHP:
    enum
    	player_info
    	{
    		pLevel,
    		pExp
    	};
    
    new
    	pInfo[MAX_PLAYERS][player_info];
  2. Создаем массив, где будет расписано количества опыта для перехода на следующий уровень:
    PHP:
    #define MAX_LEVELS  5
    
    static const
    	scores[MAX_LEVELS] =
    	{
    		0,
    		16,
    		32,
    		64,
    		128
    	};
  3. Создаем функцию для получения опыта.
    PHP:
    stock GivePlayerExperience(playerid, score)
    {
        if (score == 0) //Если опыта 0, то останавливаем функцию
            return 0;
    
        static
            level,    //Чтобы двухмерный массив не использовать в цикле, занесем уровень в простую переменную
            max_exp;  //Переменная для хранения максимального опыта в системе
    
        score = pInfo[playerid][pExp] += score;  //Присваиваем полученный опыт к игроку 'pInfo[playerid][pExp]', и весь опыт в переменную 'score'
        level = pInfo[playerid][pLevel];        //Узнаем уровень игрока
        max_exp = scores[MAX_LEVELS-1];          //Узнаем максимальный опыт в системе
    
        if (score > max_exp) //Проверка, чтобы не выходить за пределы массива
            score = max_exp;
    
        if (score > 0)
        {
            while (score > scores[level]) //Проверка на соответствие опыта к уровню
                level++; //Если опыта больше, чем на нынешнем уровне, увеличиваем уровень
        }
        else
        {
            while (score < scores[level] && level != 0) //Проверка на соответствие опыта к уровню
                level--; //Если опыта меньше, чем на нынешнем уровне, уровень уменьшается
        }
    
        while (score > scores[level]) //Проверка на соответствие опыта к уровню
            level++;
        
        pInfo[playerid][pLevel] = level; //Присваиваем новый уровень
    
        return 1;
    }
    PHP:
    stock GivePlayerExperience(playerid, score) 
    { 
         if (score == 0) 
            return 0; 
    
        static 
            level, 
            max_exp; 
    
        score = pInfo[playerid][pExp] += score; 
        level = pInfo[playerid][pLevel]; 
        max_exp = scores[MAX_LEVELS-1]; 
    
        if (score > max_exp) 
            score = max_exp; 
    
        if (score > 0)
        {
            while (score > scores[level]) 
                level++; 
        }
        else
        {
            while (score < scores[level] && level != 0)
                level--;
        }
         
        pInfo[playerid][pLevel] = level; 
    
        return 1; 
    }
  4. Вывести опыт и уровень нет труда. Но если вы хотите так:

    6/32

    Где 6 - опыт полученный на этом уровне, а 32 - кол-во опыта для перехода на следующий, используйте эту формулу:
    PHP:
    format(string, sizeof string, "%i/%i", pInfo[playerid][pExp]-scores[pInfo[playerid][pLevel]-1], scores[pInfo[playerid][pLevel]]
 
Последнее редактирование:
Сверху Снизу