- Регистрация
- 6 Фев 2015
- Сообщения
- 683
- Лучшие ответы
- 1
- Репутация
- 145
Это фундамент системы опыта и уровней. Только вычисление!
- В enum данных игрока добавляем константы pLevel и pExp:
PHP:enum player_info { pLevel, pExp }; new pInfo[MAX_PLAYERS][player_info];
- Создаем массив, где будет расписано количества опыта для перехода на следующий уровень:
PHP:#define MAX_LEVELS 5 static const scores[MAX_LEVELS] = { 0, 16, 32, 64, 128 };
- Создаем функцию для получения опыта.
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; }
- Вывести опыт и уровень нет труда. Но если вы хотите так:
6/32
Где 6 - опыт полученный на этом уровне, а 32 - кол-во опыта для перехода на следующий, используйте эту формулу:
PHP:format(string, sizeof string, "%i/%i", pInfo[playerid][pExp]-scores[pInfo[playerid][pLevel]-1], scores[pInfo[playerid][pLevel]]
Последнее редактирование: