babka68
Участник
- Сообщения
- 2,124
- Реакции
- 956
- Автор ресурса
- #101
ПробуйтеНемного странная система начисления. Уже давно ищю плагин который просто бы подкидывал деньги уже к имеющимся у игрока.
В server.cfg
extra_cash_bonus_amount "1000" // Дополнительная сумма всем игрокам, к текущему балансу
C-подобный:
#include <sdktools_functions>
#include <cstrike>
#pragma newdecls required
#pragma semicolon 1
// Offset
int g_iAccount = -1;
// ConVar
int g_iBonus_Round_Money;
public void OnPluginStart()
{
g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount");
if (g_iAccount == -1)
{
SetFailState("Failed to find \"m_iAccount\".");
}
ConVar cvar;
cvar = FindConVar("mp_startmoney");
cvar = CreateConVar("extra_cash_bonus_amount", "1000", "Дополнительная сумма всем игрокам, к текущему балансу", 0, true, 800.0, true, 16000.0);
g_iBonus_Round_Money = cvar.IntValue;
cvar.AddChangeHook(CVarChanged_Bonus_Money);
HookEvent("player_spawn", Event_Spawn);
}
public void CVarChanged_Bonus_Money(ConVar cvar, const char[] oldValue, const char[] newValue)
{
g_iBonus_Round_Money = cvar.IntValue;
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
int team = GetClientTeam(client);
if (IsClientInGame(client) && team > CS_TEAM_SPECTATOR)
{
int cur_cash = GetEntData(client, g_iAccount, 4);
int new_cash = cur_cash + g_iBonus_Round_Money;
// Исключим выход за предел суммы 16000
if (new_cash < 16000)
{
SetEntData(client, g_iAccount, new_cash);
}
// Если мумма привысила 16000, то устанвливаем 16000.
else
{
new_cash = 16000;
}
}
}
Сообщения автоматически склеены:
Пробуйте, квары можете прописать в server.cfg, если хотите поменять их значение.Можно ли сделать так, чтобы средства не сбрасывались?
Т.е чтобы переменная плагина работала по аналогии с mp_startmoney
1 раунд делаем пистолетку, а на втором выдаем баланс согласно переменной и больше его не трогаем
extra_cash_start_amount "800" // Выдаваемая сумма всем игрокам в 1 раунде?
extra_cash_amount "5000" // Выдаваемая сумма всем игрокам, после завершения 1 раунда.
C-подобный:
#include <sdktools_functions>
#include <cstrike>
#pragma newdecls required
#pragma semicolon 1
// Offset
int g_iAccount = -1;
// Значение денег в первом раунде Счет 1 : 0 или 0 : 1
// ConVar
int g_iOne_Round_Money;
// Значение денег в первом раунде Счет 0 : 0
int g_iStart_Money;
public void OnPluginStart()
{
g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount");
ConVar cvar;
cvar = FindConVar("mp_startmoney");
cvar = CreateConVar("extra_cash_start_amount", "800", "Выдаваемая сумма всем игрокам в 1 раунде?", 0, true, 800.0, true, 16000.0);
g_iStart_Money = cvar.IntValue;
cvar.AddChangeHook(CVarChanged_Start_Money);
cvar = CreateConVar("extra_cash_amount", "5000", "Выдаваемая сумма всем игрокам, после завершения 1 раунда.", 0, true, 800.0, true, 16000.0);
g_iOne_Round_Money = cvar.IntValue;
cvar.AddChangeHook(CVarChanged_Money);
HookEvent("player_spawn", Event_Spawn);
}
public void CVarChanged_Start_Money(ConVar cvar, const char[] oldValue, const char[] newValue)
{
g_iStart_Money = cvar.IntValue;
}
public void CVarChanged_Money(ConVar cvar, const char[] oldValue, const char[] newValue)
{
g_iOne_Round_Money = cvar.IntValue;
}
public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
int client = GetClientOfUserId(event.GetInt("userid"));
int team = GetClientTeam(client);
if (IsClientInGame(client) && team > CS_TEAM_SPECTATOR)
{
int team_score_t = GetTeamScore(CS_TEAM_T);
int team_score_ct = GetTeamScore(CS_TEAM_CT);
// Если CT=0 : T=0
if (team_score_t == 0 && team_score_ct == 0)
{
SetEntData(client, g_iAccount, g_iStart_Money);
}
// Если CT=1 : T=0
else if (team_score_t == 1 && team_score_ct == 0)
{
SetEntData(client, g_iAccount, g_iOne_Round_Money);
}
// Если CT=0 : T=1
else if (team_score_t == 0 && team_score_ct == 1)
{
SetEntData(client, g_iAccount, g_iOne_Round_Money);
}
}
}
Последнее редактирование: