Нужна помощь с плагином

msl1

Участник
Сообщения
162
Реакции
20
Помогите доделать плагин . Плагин рабочий но после отключения игрока появляться ошибки других плагинов
Взят плагин
[SM] Exception reported: Client index 0 is invalid
[SM] Blaming: ***.smx
[SM] Call stack trace:
[SM] [0] GetClientTeam

[SM] Exception reported: Client index 0 is invalid
[SM] Blaming: ***.smx
[SM] Call stack trace:
[SM] [0] GetClientAbsOrigin
PHP:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools>
#include <dhooks>
#include <cstrike>
#define PLUGIN_VERSION        "1.0"

new Handle:g_hBackupPatch;
new g_iPatchSize;
new Address:g_puntBotCall;

public Plugin:myinfo = {
    name        = "Block bot punting",
    author        = "TheLastRevenge",
    description    = "Block Punting bot when server is hibernating",
    version        = PLUGIN_VERSION,
    url            = "https://forums.alliedmods.net/showthread.php?t=251064"
};

public OnPluginStart()
{
    
    new Handle:hGC = LoadGameConfigFile("hibernatebots.games");
    if(!hGC)
        SetFailState("Can't find hibernatebots.games.txt gamedata.");
   
    new Address:puntBotCall = GameConfGetAddress(hGC, "SetHibernating");
    if(!puntBotCall)
        SetFailState("Can't find CGameServer:SetHibernating.");
   
    new iOffset = GameConfGetOffset(hGC, "PuntBotsCall_Offset");
    if(iOffset == -1)
        SetFailState("Can't get PuntBotsCall_Offset offset from gamedata.");
   
    puntBotCall += Address:iOffset;
   
    new iSize = GameConfGetOffset(hGC, "PuntBotsCall_Patchsize");
    if(iSize == -1)
        SetFailState("Can't get PuntBotsCall_Patchsize offset from gamedata.");
   
   

   
    g_hBackupPatch = CreateArray(iSize);

    g_puntBotCall = puntBotCall;
    g_iPatchSize = iSize;
   
   
    new backupBytes[iSize];
    for(new i=0;i<iSize;i++)
    {
        backupBytes[i] = LoadFromAddress(puntBotCall, NumberType_Int8);
        StoreToAddress(puntBotCall, 0x90, NumberType_Int8);
        puntBotCall++;
    }
   
   
    PushArrayArray(g_hBackupPatch, backupBytes, iSize);
    CloseHandle(hGC);
   

}

public OnPluginEnd()
{

   
  
    if(!g_puntBotCall)
        return;
   
   
    new backupBytes[g_iPatchSize];
    GetArrayArray(g_hBackupPatch, 0, backupBytes, g_iPatchSize);
   
  
    new Address:puntBotCall = g_puntBotCall;
    for(new i=0;i<g_iPatchSize;i++)
    {
        StoreToAddress(puntBotCall, backupBytes[i], NumberType_Int8);
        puntBotCall++;
       
    }
   
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
дык, за 6 лет, когда был написан этот плагин, могло многое поменяться.
C-подобный:
Client index 0 is invalid
Тут проблема в самих плагинах, кмк, раз индекс не проверяется на валидность.
 

msl1

Участник
Сообщения
162
Реакции
20
дык, за 6 лет, когда был написан этот плагин, могло многое поменяться.
C-подобный:
Client index 0 is invalid
Тут проблема в самих плагинах, кмк, раз индекс не проверяется на валидность.
Подскажи как пофиксить плагин в котором ошибка
PHP:
new Handle:Switch, Handle:Cash, Rounds, bool:lock;

public Plugin:myinfo =
{
    name = "Extra Cash",
    author = "Peoples Army",
    description = "Adds Extra Cash On Each Spawn",
    version = "0.3.0",
    url = "www.sourcemod.net"
}

public OnPluginStart()
{
    Switch = CreateConVar(            "extra_cash_on",            "1",            "1 turns plugin on 0 is off", FCVAR_NOTIFY);
    Cash = CreateConVar(            "extra_cash_amount",        "16000",        "Sets Amount OF Money Given On Spawn", FCVAR_NOTIFY);
    HookEvent("player_spawn", Spawn, EventHookMode_Post);
    HookEvent("round_end", RoundEnd, EventHookMode_PostNoCopy);
}

public OnMapStart()
{
    Rounds = 0;
    lock = false;
}

public RoundEnd(Handle:event, const String:name[], bool:silent)
{
    Rounds++;
    if (lock) return;
    new Handle:AST = FindConVar("sm_autoswapteam_type");
    if (AST != INVALID_HANDLE && GetConVarInt(AST) == 1)
    {
        new timelimit, timeleft;
        if (GetMapTimeLimit(timelimit) && GetMapTimeLeft(timeleft) && timelimit > 0 < timeleft && timeleft/60 <= timelimit/2)
        {
            lock = true;
            Rounds = 1;
        }
    }
}

public Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (GetConVarBool(Switch))
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid")), g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount");
        if (g_iAccount != -1 && GetClientTeam(client) > 1 < Rounds) SetEntData(client, g_iAccount, GetConVarInt(Cash));
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
на сервере СМ какой версии?
 

msl1

Участник
Сообщения
162
Реакции
20
на сервере СМ какой версии?
[01] AutoGain (2.0.2) by GoD-Tony
[02] DoS Protect (1.0.0.0) by ZombieX2.net
[03] SourceMod (1.8.0.6041) by AlliedModders LLC
[04] CS Tools (1.8.0.6041) by AlliedModders LLC
[05] SDK Tools (1.8.0.6041) by AlliedModders LLC
[06] SDK Hooks (1.7.3-stable+5265) by AlliedModders LLC (SetGameDescription added by [U:1:102266438])
[07] DHooks (2.2.0-detours9) by Dr!fter
C-подобный:
new Handle:Switch, Handle:Cash, Rounds, bool:lock;

public Plugin:myinfo =
{
    name = "Extra Cash",
    author = "Peoples Army",
    description = "Adds Extra Cash On Each Spawn",
    version = "0.3.0",
    url = "www.sourcemod.net"
}

public OnPluginStart()
{
    Switch = CreateConVar(            "extra_cash_on",            "1",            "1 turns plugin on 0 is off", FCVAR_NOTIFY);
    Cash = CreateConVar(            "extra_cash_amount",        "16000",        "Sets Amount OF Money Given On Spawn", FCVAR_NOTIFY);
    HookEvent("player_spawn", Spawn, EventHookMode_Post);
    HookEvent("round_end", RoundEnd, EventHookMode_PostNoCopy);
}

public OnMapStart()
{
    Rounds = 0;
    lock = false;
}

public RoundEnd(Handle:event, const String:name[], bool:silent)
{
    Rounds++;
    if (lock) return;
    new Handle:AST = FindConVar("sm_autoswapteam_type");
    if (AST != INVALID_HANDLE && GetConVarInt(AST) == 1)
    {
        new timelimit, timeleft;
        if (GetMapTimeLimit(timelimit) && GetMapTimeLeft(timeleft) && timelimit > 0 < timeleft && timeleft/60 <= timelimit/2)
        {
            lock = true;
            Rounds = 1;
        }
    }
}

public Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (GetConVarBool(Switch))
    {
        new client = GetClientOfUserId(GetEventInt(event, "userid")), g_iAccount = FindSendPropInfo("CCSPlayer", "m_iAccount");
        if (g_iAccount != -1 && client && GetClientTeam(client) > 1 < Rounds) SetEntData(client, g_iAccount, GetConVarInt(Cash));
    }
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Значит можно переписывать на новый синтаксис.
Вот на старом.
 

Вложения

  • sm_extra_cash 0.4.0.sp
    1.9 КБ · Просмотры: 10
  • Мне нравится
Реакции: msl1

msl1

Участник
Сообщения
162
Реакции
20
Значит можно переписывать на новый синтаксис.
Вот на старом.
Не мог бы подсказать что можно сделать с плагином . Можно ли его дописать для правильной работы , здесь описание ошибок forums.alliedmods.net или это не возможно ,
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Ошибку Client index 0 is invalid исправил в extra_cash, а с сигнатурами не ко мне.
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
дык, за 6 лет, когда был написан этот плагин, могло многое поменяться.
C-подобный:
Client index 0 is invalid
Тут проблема в самих плагинах, кмк, раз индекс не проверяется на валидность.
Он видимо на локальном серваке играет, отсюда и неверное определение индекса.
 
Сверху Снизу