#include <money>

Функции [Показать]
SetPlayerMoney(playerid, value) [Показать]
Изменить количество денег игроку.
- ■ playerid - id игрока, которому будет изменено количество денег.
■ value - количество денег.
Примечание:
- ■ Автоматически обновляет данные в HUD.
■ Установить значение больше MAX_MONEY_VALUE невозможно.
■ Установить значение меньше MIN_MONEY_VALUE невозможно.
Пример использования:
public OnPlayerSpawn(playerid) { SetPlayerMoney(playerid, 500); return 1; }

GivePlayerMoney(playerid, value) [Показать]
Добавить деньги игроку к уже имеющимся деньгам.
- ■ playerid - id игрока, которому будет добавлено количество денег.
■ value - количество денег.
Примечание:
- ■ Автоматически обновляет данные в HUD.
■ При добавлении невозможно превысить лимит больше MAX_MONEY_VALUE.
■ Невозможно использовать отрицательные значения.
Пример использования:
public OnPlayerPickUpPickup(playerid, pickupid) { if(pickupid == bonus) { GivePlayerMoney(playerid, 1000); // выдадим игроку $1000 } return 1; }

RemovePlayerMoney(playerid, value) [Показать]
Отнять деньги у игрока от уже имеющихся денег.
- ■ playerid - id игрока, у которого будет отнято количество денег.
■ value - количество денег.
Примечание:
- ■ Автоматически обновляет данные в HUD.
■ При отнимании невозможно опуститься ниже лимита MIN_MONEY_VALUE.
■ Невозможно использовать отрицательные значения.
Пример использования:
public OnPlayerDeath(playerid, killerid, reason) { RemovePlayerMoney(playerid, 100); // отнимем у игрока $100 return 1; }

ResetPlayerMoney(playerid) [Показать]
Обнулить количество денег у игрока.
- ■ playerid - id игрока, у которого будут обнулены все деньги.
Примечание:
- ■ Автоматически обновляет данные в HUD.
Пример использования:
public OnPlayerStreamOut(playerid, forplayerid) { // criminalid - хранит в себе ID игрока за которым мы гонимся if(forplayerid == criminalid) { ResetPlayerMoney(playerid); SendClinetMessage(playerid, -1, !"Вы упустили преступника!"); } return 1; }

GetPlayerMoney(playerid) [Показать]
Узнать количество денег у игрока.
- ■ playerid - id игрока, у которого будет проверено количество денег.
Примечание:
- ■ Возвращает количество денег игрока.
Пример использования:
format(string, sizeof(string), "$%i", GetPlayerMoney(playerid));

IsPlayerMoney(playerid, value) [Показать]
Узнать, есть ли у игрока данная сумма денег.
- ■ playerid - id игрока, у которого будет проверено количество денег.
■ value - количество денег.
Примечание:
- ■ Если денег хватает, вернёт true, иначе вернёт flase.
Пример использования:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { // vInfo[vehicleid][vPrice] - хранит в себе стоимость транспорта if(IsPlayerMoney(playerid, vInfo[vehicleid][vPrice])) { SendClinetMessage(playerid, -1, !"Вам хватает денег на покупку данного транспортного средства!"); } else { SendClinetMessage(playerid, -1, !"Вам не хватает денег на покупку данного транспортного средства!"); } return 1; }

GiveMoneyPlayerToPlayer(playerid, targetid, value) [Показать]
Передать деньги одного игрока другому игроку.
- ■ playerid - id игрока, который будет передавать деньги.
■ targetid- id игрока, который будет получать деньги.
■ value - количество денег.
Примечание:
- ■ Автоматически обновляет данные в HUD.
■ Невозможно передать больше, чем имеется у игрока.
■ Если при передаче денег будет достигнут лимит MAX_MONEY_VALUE, превышаемое количество останется у дающего.
■ В параметре value можно указать -1, чтобы передать все имеющиеся деньги дающего игрока.
Пример использования:
CMD:pay(playerid, params[]) { extract params -> new targetid, dollars; else return SendClientMessage(playerid, -1, !"/pay [ID][MONEY]"); GiveMoneyPlayerToPlayer(playerid, targetid, 100); // передадим игроку под id 5 $100 return 1; }

Особенности:
- ■ Защита денег от читов.
■ Дополнительные функции для работы с деньгами игроков.
■ Прямое подключение к базе данных MySQL R41. Автоматическая загрузка денег, а также сохранение и логирование всех действий.
Для подключения системы к базе данных MySQL необходимо выполнить следующие действия: [Показать]
1. Создать макрос перед подключением инклуда, указав имя таблицы, в которой хранятся данные игроков, а именно ID аккаунта и деньги игрока. Необходимо указывать имя в двойных кавычках и без круглых скобок, пример:
#define MONEY_SQL_TABLE_PLAYER "accounts"

2. Создать макрос перед подключением инклуда, указав имя столбца, в котором хранится ID аккаунта. Необходимо указывать имя в двойных кавычках и без круглых скобок, пример:
#define MONEY_PLAYER_COLUMN_ACCOUNT_ID "pID"

3. Создать макрос перед подключением инклуда, указав имя столбца, в котором хранятся деньги. Необходимо указывать имя в двойных кавычках и без круглых скобок, пример:
#define MONEY_PLAYER_COLUMN_MONEY "pMoney"

Пример подключения системы к таблице "accounts", где ID аккаунта хранится в столбце "pID", а деньги игрока в столбце "pMoney"
#define MONEY_SQL_TABLE_PLAYER "accounts" #define MONEY_PLAYER_COLUMN_ACCOUNT_ID "pID" #define MONEY_PLAYER_COLUMN_MONEY "pMoney" #include <money>

4. Теперь необходимо использовать функцию для подключения системы к вашей базе данных. Для этого в OnGameModeInit необходимо использовать функцию ConnectMoney, пример:
new MySQL:sql; public OnGameModeInit() { sql = mysql_connect(host, user, password, database); ConnectMoney(sql); return 1; }

5. Теперь необходимо использовать функцию для подключения игрока после регистрации или авторизации:
ConnectPlayerMoney(playerid, accountid);

Пример использования:
ConnectPlayerMoney(playerid, pInfo[playerid][pID]); // переменная pID хранит в себе загруженный accountid

В случае, если какой-либо шаг будет пропущен, система не будет подключена к вашей базе данных.
Изменения функций при подключении к MySQL: [Показать]
Теперь в данных функциях можно указывать причину для логгов, параметр reason является необязательным. В случае, когда логгировать и обновлять данные не нужно, в параметре log нужно указать false, по умолчанию установлено значение true.
SetPlayerMoney(playerid, value, reason=-1, bool:log=true)

GivePlayerMoney(playerid, value, reason=-1, bool:log=true)

RemovePlayerMoney(playerid, value, reason=-1, bool:log=true)

ResetPlayerMoney(playerid, reason=-1, bool:log=true)

GiveMoneyPlayerToPlayer(playerid, targetid, value, reason=-1, bool:log=true)

Для формирования причины, вы можете воспользоваться таким методом, пример:
enum _:E_MONEY_LOG_REASON // устанавливаем тег "_:", чтобы не вызывать warning 213 { // обязательно присваиваем индекс к переменной через знак "=" MONEY_LOG_REASON_BONUS = 0, MONEY_LOG_REASON_PAYDAY = 1, MONEY_LOG_REASON_SHOP = 2, // указываете своё удобное название для индекса } new const MONEY_LOG_REASON[E_MONEY_LOG_REASON][] = // указываем текстовую расшифровку для индексов, количество индексов и расшифровок должно совпадать! { // дополнительно помечаем комментарием каждую строку к какому индексу она относится "Бонус при регистрации", // MONEY_LOG_REASON_BONUS "Зарплата в PayDay", // MONEY_LOG_REASON_PAYDAY "Покупка в магазине" // MONEY_LOG_REASON_SHOP };

Теперь для записи какой-либо причины, используете индекс, пример:
GivePlayerMoney(playerid, 5000, MONEY_LOG_REASON_BONUS); // выдать игроку $5000 в виде бонуса

RemovePlayerMoney(playerid, 250, MONEY_LOG_REASON_SHOP); // забрать у игрока $250 при покупке

В случае, если вам нужно будет удалить какой-либо индекс, вы удаляете его из enum и удаляете строку, относящуюся к этому индексу. Изменять значение после знака "=" не нужно, чтобы не сбить порядковый ID причины!
■ Возможность включить отображение полученной суммы.

Для этого перед подключением инклуда необходимо создать макрос: [Показать]
#define MONEY_SETTING_ON_DISPLAY

После включения данной опции, вы можете задать свои параметры для создаваемого счётчика:
#define MONEY_COLOR_GIVE (0x2f5a26FF)

#define MONEY_COLOR_REMOVE (0x9c1619FF)

#define MONEY_DISPLAY_TIME (3000)

#define MONEY_DISPLAY_POS_X (608.0)

#define MONEY_DISPLAY_POS_Y (103.0)

#define MONEY_DISPLAY_SIZE_X (0.55)

#define MONEY_DISPLAY_SIZE_Y (2.2)

■ Возможность включить звуковое сопровождение при изменении баланса игрока.
Для этого перед подключением инклуда необходимо создать макрос: [Показать]
#define MONEY_SETTING_ON_SOUND

После включения данной опции, вы можете задать свои параметры для воспроизводимого звука:
#define MONEY_SOUND_GIVE (1052)

#define MONEY_SOUND_REMOVE (1053)

■ Автоматическое обновление данных в HUD игроков.
■ Автоматическая очистка данных при выходе игроков из игры.
■ Установленные константы по умолчанию для использования:
MAX_MONEY_HUD (11)
SIZE_MONEY_HUD (MAX_MONEY_HUD+1)
MIN_MONEY_VALUE (0)
MAX_MONEY_VALUE (999_999_999)
Скачать:

Сообщение отредактировал M I S T E V: 20 апреля 2025 - 00:21