[CSS:OB]Плагин респавна игрока после смерти

sckasck

Участник
Сообщения
97
Реакции
15
Мне нужен плагин респавна игроков после смерти с возможностью включения и отключения плагина командой.
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,491
Может, этот вариант подойдёт:
Respawner.sp:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>

int        iOn;
bool    bBots;
char    sAdmins[16];
float    fRespawn;

public Plugin myinfo    =
{
    name                = "Respawner",
    author                = "Ganter1234",
    version                = "2.0"
};

public void OnPluginStart()
{
    ConVar cvar;

    cvar = CreateConVar("sm_respawner",                "1",    "Можно?\n0 - Нет | 1 - Автоматически | 2 - По команде", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_On);
    iOn = cvar.IntValue;

    cvar = CreateConVar("sm_respawner_bots",        "1",    "Можно ботов?", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Bots);
    bBots = cvar.BoolValue;

    cvar = CreateConVar("sm_respawner_admins",        "",        "Флаг для респавна. Если пусто, всем игрокам можно");
    cvar.AddChangeHook(CVarChanged_Admins);
    cvar.GetString(sAdmins, sizeof sAdmins);

    cvar = CreateConVar("sm_respawner_time",        "1",    "Если sm_respawner = 1, через сколько?", _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Respawn);
    fRespawn = cvar.FloatValue;

    HookEvent("player_death", eventPlayerDeath);

    RegConsoleCmd("sm_respawn", commandRespawn);

    AutoExecConfig(true, "respawner");
}

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

public void CVarChanged_Bots(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    bBots = cvar.BoolValue;
}

public void CVarChanged_Admins(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    cvar.GetString(sAdmins, sizeof sAdmins);
}

public void CVarChanged_Respawn(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    fRespawn = cvar.FloatValue;
}

public Action commandRespawn(int client, int args)
{
    if(iOn == 2 && IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > CS_TEAM_SPECTATOR)
    {
        if(!sAdmins[0])                                                                                                        CS_RespawnPlayer(client);
        else if(GetUserFlagBits(client) & ReadFlagString(sAdmins))                                                            CS_RespawnPlayer(client);
    }
    
    return Plugin_Handled;
}

public void eventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));

    if(iOn == 1 && client && GetClientTeam(client) > CS_TEAM_SPECTATOR)
    {
        if(!sAdmins[0])
        {
            if(!bBots && !IsFakeClient(client))                                                                                CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
            else                                                                                                            CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
        }
        else if(GetUserFlagBits(client) & ReadFlagString(sAdmins))                                                            CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
    }
}

public Action timerRespawn(Handle timer, any client)
{
    if(iOn == 1 && client && IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > CS_TEAM_SPECTATOR)    CS_RespawnPlayer(client);
}
 

Вложения

  • Respawner.sp
    2.9 КБ · Просмотры: 8
  • Respawner.smx
    4.3 КБ · Просмотры: 7

sckasck

Участник
Сообщения
97
Реакции
15
Кстати, а чем такой не устраивает?
Может потому что он не подходит?
Сообщения автоматически склеены:

Может, этот вариант подойдёт:
Respawner.sp:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>

int        iOn;
bool    bBots;
char    sAdmins[16];
float    fRespawn;

public Plugin myinfo    =
{
    name                = "Respawner",
    author                = "Ganter1234",
    version                = "2.0"
};

public void OnPluginStart()
{
    ConVar cvar;

    cvar = CreateConVar("sm_respawner",                "1",    "Можно?\n0 - Нет | 1 - Автоматически | 2 - По команде", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_On);
    iOn = cvar.IntValue;

    cvar = CreateConVar("sm_respawner_bots",        "1",    "Можно ботов?", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Bots);
    bBots = cvar.BoolValue;

    cvar = CreateConVar("sm_respawner_admins",        "",        "Флаг для респавна. Если пусто, всем игрокам можно");
    cvar.AddChangeHook(CVarChanged_Admins);
    cvar.GetString(sAdmins, sizeof sAdmins);

    cvar = CreateConVar("sm_respawner_time",        "1",    "Если sm_respawner = 1, через сколько?", _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Respawn);
    fRespawn = cvar.FloatValue;

    HookEvent("player_death", eventPlayerDeath);

    RegConsoleCmd("sm_respawn", commandRespawn);

    AutoExecConfig(true, "respawner");
}

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

public void CVarChanged_Bots(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    bBots = cvar.BoolValue;
}

public void CVarChanged_Admins(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    cvar.GetString(sAdmins, sizeof sAdmins);
}

public void CVarChanged_Respawn(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    fRespawn = cvar.FloatValue;
}

public Action commandRespawn(int client, int args)
{
    if(iOn == 2 && IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > CS_TEAM_SPECTATOR)
    {
        if(!sAdmins[0])                                                                                                        CS_RespawnPlayer(client);
        else if(GetUserFlagBits(client) & ReadFlagString(sAdmins))                                                            CS_RespawnPlayer(client);
    }
   
    return Plugin_Handled;
}

public void eventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));

    if(iOn == 1 && client && GetClientTeam(client) > CS_TEAM_SPECTATOR)
    {
        if(!sAdmins[0])
        {
            if(!bBots && !IsFakeClient(client))                                                                                CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
            else                                                                                                            CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
        }
        else if(GetUserFlagBits(client) & ReadFlagString(sAdmins))                                                            CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
    }
}

public Action timerRespawn(Handle timer, any client)
{
    if(iOn == 1 && client && IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > CS_TEAM_SPECTATOR)    CS_RespawnPlayer(client);
}
Спасибо, попробую
Сообщения автоматически склеены:

Может, этот вариант подойдёт:
Respawner.sp:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>

int        iOn;
bool    bBots;
char    sAdmins[16];
float    fRespawn;

public Plugin myinfo    =
{
    name                = "Respawner",
    author                = "Ganter1234",
    version                = "2.0"
};

public void OnPluginStart()
{
    ConVar cvar;

    cvar = CreateConVar("sm_respawner",                "1",    "Можно?\n0 - Нет | 1 - Автоматически | 2 - По команде", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_On);
    iOn = cvar.IntValue;

    cvar = CreateConVar("sm_respawner_bots",        "1",    "Можно ботов?", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Bots);
    bBots = cvar.BoolValue;

    cvar = CreateConVar("sm_respawner_admins",        "",        "Флаг для респавна. Если пусто, всем игрокам можно");
    cvar.AddChangeHook(CVarChanged_Admins);
    cvar.GetString(sAdmins, sizeof sAdmins);

    cvar = CreateConVar("sm_respawner_time",        "1",    "Если sm_respawner = 1, через сколько?", _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Respawn);
    fRespawn = cvar.FloatValue;

    HookEvent("player_death", eventPlayerDeath);

    RegConsoleCmd("sm_respawn", commandRespawn);

    AutoExecConfig(true, "respawner");
}

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

public void CVarChanged_Bots(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    bBots = cvar.BoolValue;
}

public void CVarChanged_Admins(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    cvar.GetString(sAdmins, sizeof sAdmins);
}

public void CVarChanged_Respawn(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    fRespawn = cvar.FloatValue;
}

public Action commandRespawn(int client, int args)
{
    if(iOn == 2 && IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > CS_TEAM_SPECTATOR)
    {
        if(!sAdmins[0])                                                                                                        CS_RespawnPlayer(client);
        else if(GetUserFlagBits(client) & ReadFlagString(sAdmins))                                                            CS_RespawnPlayer(client);
    }
   
    return Plugin_Handled;
}

public void eventPlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));

    if(iOn == 1 && client && GetClientTeam(client) > CS_TEAM_SPECTATOR)
    {
        if(!sAdmins[0])
        {
            if(!bBots && !IsFakeClient(client))                                                                                CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
            else                                                                                                            CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
        }
        else if(GetUserFlagBits(client) & ReadFlagString(sAdmins))                                                            CreateTimer(fRespawn, timerRespawn, GetClientUserId(client));
    }
}

public Action timerRespawn(Handle timer, any client)
{
    if(iOn == 1 && client && IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > CS_TEAM_SPECTATOR)    CS_RespawnPlayer(client);
}
L 06/16/2021 - 12:40:29: [SM] Exception reported: Client index 293 is invalid
L 06/16/2021 - 12:40:29: [SM] Blaming: Respawner.smx
L 06/16/2021 - 12:40:29: [SM] Call stack trace:
L 06/16/2021 - 12:40:29: [SM] [0] IsClientInGame
L 06/16/2021 - 12:40:29: [SM] [1] Line 93, C:\Users\Admin\Desktop\Respawner.sp::timerRespawn
Сообщения автоматически склеены:

Если после этого не сработает, то я умываю руки
Нашел еще один баг.
Когда люди в спеках и заходят за команду их не ресает.
 
Последнее редактирование:

Ganter1234

Участник
Сообщения
1,149
Реакции
668
Может потому что он не подходит?
Сообщения автоматически склеены:


Спасибо, попробую
Сообщения автоматически склеены:


L 06/16/2021 - 12:40:29: [SM] Exception reported: Client index 293 is invalid
L 06/16/2021 - 12:40:29: [SM] Blaming: Respawner.smx
L 06/16/2021 - 12:40:29: [SM] Call stack trace:
L 06/16/2021 - 12:40:29: [SM] [0] IsClientInGame
L 06/16/2021 - 12:40:29: [SM] [1] Line 93, C:\Users\Admin\Desktop\Respawner.sp::timerRespawn
Сообщения автоматически склеены:


Нашел еще один баг.
Когда люди в спеках и заходят за команду их не ресает.
Потому что плагин возраждает после того как умрет, а т.к он зашел в спектаторы, таймер не включился, поэтому не возродился.
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,491
L 06/16/2021 - 12:40:29: [SM] Exception reported: Client index 293 is invalid
L 06/16/2021 - 12:40:29: [SM] Blaming: Respawner.smx
L 06/16/2021 - 12:40:29: [SM] Call stack trace:
L 06/16/2021 - 12:40:29: [SM] [0] IsClientInGame
L 06/16/2021 - 12:40:29: [SM] [1] Line 93, C:\Users\Admin\Desktop\Respawner.sp::timerRespawn
А так?
 

Вложения

  • Respawner.sp
    3.1 КБ · Просмотры: 14
Сверху Снизу