четверг, 20 сентября 2012 г.

[SourcePawn] Работа с деньгами

,
Дело было вечером, делать было нечего...
При написании очередного плагина потребовались функции для работы с балансом игрока. Чтобы каждый раз не искать их, вынес в инклюд.

Делюсь:
/*
 * File: money.inc
 * Description: Account management function for player (Counter-Strike: Source only)
 * Author(s): duxa
 */

#if defined _money_included
 #endinput
#endif
#define _money_included

new g_iAccount = -1;

/*
 * Get the amount of the player's account.
 *
 * @param client Client index
 * @return   Amount of the player's account
 */
stock GetMoney(client)
{
 g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
 if (g_iAccount == -1) return -1;

 return GetEntData(client, g_iAccount, 4);
}

/*
 * Set the amount of the player's account.
 *
 * @param client Client index
 * @param amount Amount of the player's account
 * @noreturn
 */
stock SetMoney(client, amount)
{
 g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
 if (g_iAccount == -1) return;

 if (amount > 16000) amount = 16000;
 if (amount < 0) amount = 0;

 SetEntData(client, g_iAccount, amount, 4, true);
}

/*
 * Reset the amount of the player's account.
 *
 * @param client Client index
 * @noreturn
 */
stock ResetMoney(client)
{
 g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
 if (g_iAccount == -1) return;

 SetEntData(client, g_iAccount, 0, 4, true);
}

/*
 * Add the amount of the player's account.
 *
 * @param client Client index
 * @param amount Amount that add to the player's account
 * @noreturn
 */
stock GiveMoney(client, amount)
{
 g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
 if (g_iAccount == -1) return;

 new Money;
 new Get = GetMoney(client);
 if(Get == -1) return;

 if (amount > 16000) amount = 16000;
 if (amount < 0) amount = 0;

 Money = Get + amount;

 if(Money > 16000) Money = 16000;

 SetEntData(client, g_iAccount, Money, 4, true);
}

/*
 * Take the amount of the player's account.
 *
 * @param client Client index
 * @param amount Amount that take to the player's account
 * @noreturn
 */
stock TakeMoney(client, amount)
{
 g_iAccount = FindSendPropOffs("CCSPlayer", "m_iAccount");
 if (g_iAccount == -1) return;

 new Money;
 new Get = GetMoney(client);
 if(Get == -1) return;

 if (amount < 0) amount = 0;

 Money = Get - amount;

 if(Money < 0) Money = 0;

 SetEntData(client, g_iAccount, Money, 4, true);
}


0 коммент. to “[SourcePawn] Работа с деньгами”

Отправить комментарий