Если после этого не сработает, то я умываю рукиНе отключается
#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Может, этот вариант подойдёт:
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
Сообщения автоматически склеены:
Нашел еще один баг.
Когда люди в спеках и заходят за команду их не ресает.
А так?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