Бесконечные деньги на разминке

megoRU

Участник
Сообщения
383
Реакции
80
Кто-то может написать плагин или есть где то?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,552
Реакции
5,029
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_gamerules>

bool bWarmup;
int g_iAccount = -1;

public void OnPluginStart()
{
    if(GetEngineVersion() != Engine_CSGO)
        SetFailState("Plugin for CS:GO only!");
    if((g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount")) < 1)
        SetFailState("Can't find 'm_iAccount' offset!");

    HookEvent("round_start", Event_Start);
    HookEventEx("player_spawn", Event_Spawn, EventHookMode_Pre);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    bWarmup = GameRules_GetProp("m_bWarmupPeriod") != 0;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(bWarmup && (client = GetClientOfUserId(event.GetInt("userid"))) && GetClientTeam(client) > 1)
        SetEntData(client, g_iAccount, 16000);    // здесь можно выставить сумму, выдаваемую после спавна во время разминки
}
 

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
Блин, я точно помню, была же консольная команда, кто нибудь знает ее?
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
@Grey83
А не проще ли вот так?
Это установит всему оружию во время разминки стоимость 0$
C-подобный:
public void OnPluginStart()
{
    if (GetEngineVersion() != Engine_CSGO)
    {
        SetFailState("ERROR: This plugin is designed only for CS:GO.");
    }
}

public Action CS_OnGetWeaponPrice(int client, const char[] weapon, int &price)
{
    if (GameRules_GetProp("m_bWarmupPeriod") == 1)
    {
        price = 0;
        return Plugin_Changed;
    }
    return Plugin_Continue;
}
Сообщения автоматически склеены:

Блин, я точно помню, была же консольная команда, кто нибудь знает ее?
impulse 101, но нужен sv_cheats 1
Лучше плагином 🙁
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
@Fanyatsu, а что если на сервере покупают не только оружие за деньги? и в дополнение на то что написал чувак выше… я бы анхукнул события, чтобы они лишний раз не использовались.
 

Fanyatsu

Шизофреник со стажем
Сообщения
1,030
Реакции
341
@Fanyatsu, а что если на сервере покупают не только оружие за деньги? и в дополнение на то что написал чувак выше… я бы анхукнул события, чтобы они лишний раз не использовались.
А что ещё может покупаться за деньги? Интересная фича. Типа каких-нибудь абилок на остаточные деньги после закупки в раунде?
Тогда оба кода будут приводить к дизбалансу, ведь деньги всё равно будут прибавляться, хоть и после смерти.
Вообще, отключал бы я вот такие штуки во время разминки, ровно как и дроп оружия
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,552
Реакции
5,029
@Fanyatsu, в ксс, емнип, при установке цены в $0 конфигом оружия, оружие нельзя было купить
Сообщения автоматически склеены:

@Fanyatsu, и да, так не для всего можно цену изменить:
C-подобный:
Notes
This can be called multiple times per weapon purchase

Not all "weapons" call GetWeaponPrice. Example: c4, knife, vest, vest helmet, night vision.
 
Последнее редактирование:

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_gamerules>

bool bWarmup;
int g_iAccount = -1;

public void OnPluginStart()
{
    if(GetEngineVersion() != Engine_CSGO)
        SetFailState("Plugin for CS:GO only!");
    if((g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount")) < 1)
        SetFailState("Can't find 'm_iAccount' offset!");

    HookEvent("round_start", Event_Start);
    HookEventEx("player_spawn", Event_Spawn, EventHookMode_Pre);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    bWarmup = GameRules_GetProp("m_bWarmupPeriod") != 0;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(bWarmup && (client = GetClientOfUserId(event.GetInt("userid"))) && GetClientTeam(client) > 1)
        SetEntData(client, g_iAccount, 16000);    // здесь можно выставить сумму, выдаваемую после спавна во время разминки
}
Не работает.
Сообщения автоматически склеены:

А не проще ли вот так?
При компиляции пишет ошибку:
d:\Hentai\scripting\warmup_money.sp(11) : error 017: undefined symbol "GameRules_GetProp"
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Не работает.
Сообщения автоматически склеены:


При компиляции пишет ошибку:
d:\Hentai\scripting\warmup_money.sp(11) : error 017: undefined symbol "GameRules_GetProp"
C++:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_gamerules>

bool bWarmup;

public void OnPluginStart()
{
    HookEvent("round_start", Event_Start);
    HookEventEx("player_spawn", Event_Spawn, EventHookMode_Pre);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    bWarmup = GameRules_GetProp("m_bWarmupPeriod") != 0;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(bWarmup && (client = GetClientOfUserId(event.GetInt("userid"))) && GetClientTeam(client) > 1) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
 

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
C++:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_gamerules>

bool bWarmup;

public void OnPluginStart()
{
    HookEvent("round_start", Event_Start);
    HookEventEx("player_spawn", Event_Spawn, EventHookMode_Pre);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    bWarmup = GameRules_GetProp("m_bWarmupPeriod") != 0;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(bWarmup && (client = GetClientOfUserId(event.GetInt("userid"))) && GetClientTeam(client) > 1) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
Все равно не работает.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
а так?
C++:
bool bWarmup = true;

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
    HookUserMessage(GetUserMessageId("WarmupHasEnded"), OnWarmUpEnded, false);
}

public Action OnWarmUpEnded(UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init)
{
    bWarmup = false;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(bWarmup && GetClientTeam(client) > 1) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
 

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
Ага, моя ошибочка, кое где напортачил, все ровно работает.

Теперь вторая проблема, нельзя покупать одно и тоже больше чем 2 раза, то есть если купить одно и тоже, то на 3 раз будет не доступно, что делать?
Сообщения автоматически склеены:

а так?
C++:
bool bWarmup = true;

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
    HookUserMessage(GetUserMessageId("WarmupHasEnded"), OnWarmUpEnded, false);
}

public Action OnWarmUpEnded(UserMsg msg_id, BfRead msg, const int[] players, int playersNum, bool reliable, bool init)
{
    bWarmup = false;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(bWarmup && GetClientTeam(client) > 1) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
Проверять не буду, сорян, та версия рабочая.
Сообщения автоматически склеены:

C++:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_gamerules>

bool bWarmup;

public void OnPluginStart()
{
    HookEvent("round_start", Event_Start);
    HookEventEx("player_spawn", Event_Spawn, EventHookMode_Pre);
}

public void Event_Start(Event event, const char[] name, bool dontBroadcast)
{
    bWarmup = GameRules_GetProp("m_bWarmupPeriod") != 0;
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(bWarmup && (client = GetClientOfUserId(event.GetInt("userid"))) && GetClientTeam(client) > 1) SetEntProp(client, Prop_Send, "m_iAccount", 16000);
}
↑ Я об этой версии.
 
Последнее редактирование:
Сверху Снизу