Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Система Level и Exp с сохранением (MySQL) - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ All ]
Система Level и Exp с сохранением (MySQL) Система Level и Exp с сохранением (MySQL)
Оценка: ***** 1 Голосов

#1
Пользователь офлайн   MrYulik 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Добрый день, гости и пользователи форума Pawn-Wiki. Хочу слить систему Level и Exp с системой PayDay и сохранением в Базу Данных MySQL.
Погнали!

В начало мода
new expmultiply = 4;

enum pInfo
{
   pExp,
   pLevel,
   pOnline,
}



В OnGameModeInit
SetTimer("MinuteUpdate", 60000, true);



В конец мода
forward MinuteUpdate();
public MinuteUpdate()
{
	foreach(new playerid:Player)
	{
	    if(PlayerAFK[playerid] < 2) // Тут проверка на афк
	    {
			PlayerInfo[playerid][pOnline]++;
			if(PlayerInfo[playerid][pOnline] >= 60) // Проверка наиграл ли ты 60 минут
			{
			    PlayerInfo[playerid][pOnline] = 0;
			    PayDay(playerid);
			}
			static const fmt_query[] = "UPDATE `accounts` SET `online` = '%d' WHERE `id` = '%d'";
			new query[sizeof(fmt_query)+(-2+2)+(-2+8)];
			format(query, sizeof(query), fmt_query, PlayerInfo[playerid][pOnline], PlayerInfo[playerid][pID]);
			mysql_query(coverbd, query);
	    }
	}
	return 1;
}



stock PayDay(playerid)
{
	SCM(playerid, COLOR_WHITE, "Зарплата");
	GiveMoney(playerid, 15000);
	GiveExp(playerid, 1);
}



stock GiveExp(playerid, exp)
{
	PlayerInfo[playerid][pExp] += exp;
	new needexp = (PlayerInfo[playerid][pLevel]+1)*expmultiply;
	new buffer = PlayerInfo[playerid][pExp]-needexp;
	if(PlayerInfo[playerid][pExp] >= needexp)
	{
	    PlayerInfo[playerid][pExp] = 0;
	    if(buffer > 0) PlayerInfo[playerid][pExp]+=buffer;
	    PlayerInfo[playerid][pLevel]++;
	    SCM(playerid, COLOR_WHITE, "Ваш уровень повышен");
	    SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
	}
	static const fmt_query[] = "UPDATE `accounts` SET `level` = '%d', `exp` = '%d' WHERE `id` = '%d'";
	new query[sizeof(fmt_query)+(-2+9)+(-2+8)];
	format(query, sizeof(query), fmt_query, PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pExp], PlayerInfo[playerid][pID]);
	mysql_query(coverbd, query);
}



В загрузку аккаунта
	    PlayerInfo[playerid][pExp] = cache_get_field_content_int(0, "exp", coverbd);
	    PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", coverbd);
	    PlayerInfo[playerid][pOnline] = cache_get_field_content_int(0, "online", coverbd);



В MySQL создаёте 3 столбца online, exp, level (Тип: Int, Размер: 6)

Сообщение отредактировал Romzes: 09 сентября 2020 - 13:24

1

#2
Пользователь офлайн   DeimoS 

  • Evil Scripter
  • Вставить ник
  • Раскрыть информацию
Для чего "expmultiply" создаётся как переменная? Для подобного есть константы или макросы.

Почему таймер нельзя запускать для конкретного игрока при авторизации на сервере? И почему нельзя взять плагин, по типу TimerFix, воспользовавшись функцией "SetTimerEx_" и запустив таймер, который будет срабатывать 1 раз в час, ровно в 00 минут без всяких лишних счётчиков и проверок?

Зачем все эти свистопляски со static const при форматировании сообщений, если ты всё равно формулы нормально не составляешь?

Зачем в MySQL ограничивать размер Int-столбцов, если для самой системы каких-то подобных ограничений не требуется, а сама БД всё равно выделит под хранение числа 4 байта, как для 11 символов?

Что за функция "PayDay"?

К коду есть и другие вопросы, но, думаю, этого хватит пока.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика