Extra Cash

babka68

Участник
Сообщения
2,124
Реакции
956
Немного странная система начисления. Уже давно ищю плагин который просто бы подкидывал деньги уже к имеющимся у игрока.
Пробуйте

В 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;
        }
    }
}
Сообщения автоматически склеены:

Можно ли сделать так, чтобы средства не сбрасывались?
Т.е чтобы переменная плагина работала по аналогии с mp_startmoney
1 раунд делаем пистолетку, а на втором выдаем баланс согласно переменной и больше его не трогаем
Пробуйте, квары можете прописать в server.cfg, если хотите поменять их значение.
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);
        }
    }
  
}
 
Последнее редактирование:

babka68

Участник
Сообщения
2,124
Реакции
956
babka68 обновил(а) ресурс Extra Cash новой записью:

Обновление 1.4.2

  • Оптимизация кода
  • Добавлен новый ConVar, что бы не было зависимости от mp_startmoney
  • Добавлено автосоздание конфига по пути cfg/sourcemod/extra_cash.cfg
    C-подобный:
    // Сумма денег, которую нужно установить игроку после 1 рунда
    // -
    // Default: "16000"
    // Minimum: "800.000000"
    // Maximum: "16000.000000"
    extra_cash_amount "16000"
    
    // Выдаваемая сумма всем игрокам в 1 раунде?
    // -
    // Default: "800"
    // Minimum: "800.000000"
    // Maximum: "16000.000000"
    extra_cash_start_amount "800"...

Узнать больше об этом обновлении...
 

Anrikon

Участник
Сообщения
58
Реакции
7
Пробуйте

В 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, если хотите поменять их значение.
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);
        }
    }
 
}
Спасибо работает. Но только если игрока поднимают во время раунда деньги тоже е даются.
 

babka68

Участник
Сообщения
2,124
Реакции
956
Спасибо работает. Но только если игрока поднимают во время раунда деньги тоже е даются.
Это логично, потому что происходит событие
player_spawn Note: Player spawned in game
@Anrikon
Попробуйте вариант с round_freeze_end Note: When the round's mp_freezetime is up

Для благодарности есть специальная кнопка на форуме, в правилах это прописано
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("round_freeze_end", Event_Round_Freeze_End);
}

public void CVarChanged_Bonus_Money(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    g_iBonus_Round_Money = cvar.IntValue;
}

public void Event_Round_Freeze_End(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;
        }
    }
}
 

Anrikon

Участник
Сообщения
58
Реакции
7
Это логично, потому что происходит событие
player_spawn Note: Player spawned in game
@Anrikon
Попробуйте вариант с round_freeze_end Note: When the round's mp_freezetime is up

Для благодарности есть специальная кнопка на форуме, в правилах это прописано
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("round_freeze_end", Event_Round_Freeze_End);
}

public void CVarChanged_Bonus_Money(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    g_iBonus_Round_Money = cvar.IntValue;
}

public void Event_Round_Freeze_End(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;
        }
    }
}
Ругается
01/06/2023 - 09:40:36: World triggered "Round_Start"
L 01/06/2023 - 09:40:36: [SM] Exception reported: Client index 0 is invalid
L 01/06/2023 - 09:40:36: [SM] Blaming: cash2.smx
L 01/06/2023 - 09:40:36: [SM] Call stack trace:
L 01/06/2023 - 09:40:36: [SM] [0] GetClientTeam
L 01/06/2023 - 09:40:36: [SM] [1] Line 40, E:\scripting\cash2.sp::Event_Round_Freeze_End
 
Последнее редактирование:

Watty4_4

Участник
Сообщения
3
Реакции
0
Может кто то этот плагин переписать так что бы, в 1 раунде было 800$ и в переводном раунде было 800$ а во всех остальных по 16к а то я не могу найти норм плагин и или найти конфиг где это настраивается, Спасибо заранее!
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Может кто то этот плагин переписать так что бы, в 1 раунде было 800$ и в переводном раунде было 800$ а во всех остальных по 16к а то я не могу найти норм плагин и или найти конфиг где это настраивается, Спасибо заранее!
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Может кто то этот плагин переписать так что бы, в 1 раунде было 800$ и в переводном раунде было 800$ а во всех остальных по 16к а то я не могу найти норм плагин и или найти конфиг где это настраивается, Спасибо заранее!
extra_cash_start_amount", "800", "Выдаваемая сумма всем игрокам в 1 раунде?"
cfg/sourcemod/extra_cash.cfg
 

Watty4_4

Участник
Сообщения
3
Реакции
0
extra_cash_start_amount", "800", "Выдаваемая сумма всем игрокам в 1 раунде?"
cfg/sourcemod/extra_cash.cfg
К сожалению тут нет ни какого конфига, плагин и установил и переустановил, и сервер перезагружал. Не появляется конфиг
1740951221892.png
 

sauntside

Участник
Сообщения
189
Реакции
72
@Watty4_4, AutoExecConfig(true, "extra_cash"); вы его скомпилировали? Строчка автогенерации есть
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Сверху Снизу