Анти-Возрождение на mg картах.

Павел 01

Участник
Сообщения
81
Реакции
4
Ищу такой плагин чтобы не возможно было возродится повторно в одном раунде одному игроку. Или только можно было через отдельный плагин на возрождение.
 

Павел 01

Участник
Сообщения
81
Реакции
4
максимка27, работает. Но сторонними плагинами не возродить.
 

-->KENT<--

На квартале
Сообщения
246
Реакции
50
Актуально! нужен плагин для мг чтобы при перезаходе не спавнило. Плагин Antirespawn от ws работает но не спавнит от другого плагина. У меня в начале стоит 5 минут респавн.
 

ludanik

Участник
Сообщения
146
Реакции
20
@-->KENT<--, можно сделать к твоему плагину который воскрешает в течение 5 минут, а потом нет. Дополнение: что если игрок перезашел после того как автовоскрешение истекло, то убиваем его.

Как достаточно нормальный пример. Суть: игрок вышел и если он перезайдет на сервер его убьет. переменная bool сбрасывается когда закончилась карта или раунд.

C-подобный:
#pragma semicolon 1
#include <sdktools_functions>
#pragma newdecls required

bool bAntiReconnect[MAXPLAYERS + 1];

public void OnPluginStart() {
    HookEventEx("player_spawn", Event_PlayerSpawn, EventHookMode_Pre);
    HookEventEx("round_end", Event_RoundEnd);
}

public void OnClientDisconnect(int client) {
    bAntiReconnect[client] = false;
}

void Reset_Variable() {
    for (int i = 1; i <= MaxClients; i++) bAntiReconnect[i] = false;
}

public void OnMapEnd() {
    Reset_Variable();
}

public void Event_RoundEnd(Event event, const char[] name, bool db) {
    Reset_Variable();
}

public void Event_PlayerSpawn(Event event, const char[] name, bool db) {
    int client = GetClientOfUserId(event.GetInt("userid"));
    if (bAntiReconnect[client]) ForcePlayerSuicide(client);
}
--- Добавлено позже ---
@-->KENT<--, адаптировал под тот код который ты мне скинул.
C-подобный:
#pragma semicolon 1

#include <cstrike>
#include <csgo_colors>
#include <sdktools_functions>

new Handle:Respawn_Timer,
    Handle:RespawnTime,
    bool:bAntiReconnect[MAXPLAYERS + 1];

public OnPluginStart()
{
    RespawnTime = CreateConVar("minigame_time", "300", "Respawn time");
   
    HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
    HookEvent("round_end", Round_End, EventHookMode_PostNoCopy);
    HookEvent("player_death", Player_Death);
    HookEventEx("player_spawn", Event_PlayerSpawn, EventHookMode_Pre);
}
public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (Respawn_Timer != INVALID_HANDLE) KillTimer(Respawn_Timer);
   
    Respawn_Timer = CreateTimer(float(GetConVarInt(RespawnTime)), StopTimer);
    new Var_Sec = GetConVarInt(RespawnTime);
    CGOPrintToChatAll("{RED}[MiniGame]: {GREEN}Если в умрёте в течении %i сек, вы будете возрождены!", Var_Sec);
}
public Player_Death(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (Respawn_Timer != INVALID_HANDLE && !bAntiReconnect[client]) CreateTimer(1.0, TimerRespawn, client);
}
public Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    Reset_Variable();
   
    if (Respawn_Timer != INVALID_HANDLE)
    {
        KillTimer(Respawn_Timer);
        Respawn_Timer = INVALID_HANDLE;
    }
}
public Action:StopTimer(Handle:timer)
{
    Respawn_Timer = INVALID_HANDLE;
}
public Action:TimerRespawn(Handle:timer, any:client)
{
    if (IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > 1)
    {
        CS_RespawnPlayer(client);
        CGOPrintToChat(client, "{RED}[MiniGame]: {GREEN}Вы были возрождены!");
    }
}

public OnClientDisconnect(client) {
    bAntiReconnect[client] = false;
}

stock Reset_Variable() {
    for (new i = 1; i <= MaxClients; i++) bAntiReconnect[i] = false;
}

public OnMapEnd() {
    Reset_Variable();
}

public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) {
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (bAntiReconnect[client]) ForcePlayerSuicide(client);
}
 
Последнее редактирование:

-->KENT<--

На квартале
Сообщения
246
Реакции
50
@-->KENT<--, можно сделать к твоему плагину который воскрешает в течение 5 минут, а потом нет. Дополнение: что если игрок перезашел после того как автовоскрешение истекло, то убиваем его.

Как достаточно нормальный пример. Суть: игрок вышел и если он перезайдет на сервер его убьет. переменная bool сбрасывается когда закончилась карта или раунд.

C-подобный:
#pragma semicolon 1
#include <sdktools_functions>
#pragma newdecls required

bool bAntiReconnect[MAXPLAYERS + 1];

public void OnPluginStart() {
    HookEventEx("player_spawn", Event_PlayerSpawn, EventHookMode_Pre);
    HookEventEx("round_end", Event_RoundEnd);
}

public void OnClientDisconnect(int client) {
    bAntiReconnect[client] = false;
}

void Reset_Variable() {
    for (int i = 1; i <= MaxClients; i++) bAntiReconnect[i] = false;
}

public void OnMapEnd() {
    Reset_Variable();
}

public void Event_RoundEnd(Event event, const char[] name, bool db) {
    Reset_Variable();
}

public void Event_PlayerSpawn(Event event, const char[] name, bool db) {
    int client = GetClientOfUserId(event.GetInt("userid"));
    if (bAntiReconnect[client]) ForcePlayerSuicide(client);
}
--- Добавлено позже ---
@-->KENT<--, адаптировал под тот код который ты мне скинул.
C-подобный:
#pragma semicolon 1

#include <cstrike>
#include <csgo_colors>
#include <sdktools_functions>

new Handle:Respawn_Timer,
    Handle:RespawnTime,
    bool:bAntiReconnect[MAXPLAYERS + 1];

public OnPluginStart()
{
    RespawnTime = CreateConVar("minigame_time", "300", "Respawn time");
  
    HookEvent("round_start", Round_Start, EventHookMode_PostNoCopy);
    HookEvent("round_end", Round_End, EventHookMode_PostNoCopy);
    HookEvent("player_death", Player_Death);
    HookEventEx("player_spawn", Event_PlayerSpawn, EventHookMode_Pre);
}
public Round_Start(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (Respawn_Timer != INVALID_HANDLE) KillTimer(Respawn_Timer);
  
    Respawn_Timer = CreateTimer(float(GetConVarInt(RespawnTime)), StopTimer);
    new Var_Sec = GetConVarInt(RespawnTime);
    CGOPrintToChatAll("{RED}[MiniGame]: {GREEN}Если в умрёте в течении %i сек, вы будете возрождены!", Var_Sec);
}
public Player_Death(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (Respawn_Timer != INVALID_HANDLE && !bAntiReconnect[client]) CreateTimer(1.0, TimerRespawn, client);
}
public Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    Reset_Variable();
  
    if (Respawn_Timer != INVALID_HANDLE)
    {
        KillTimer(Respawn_Timer);
        Respawn_Timer = INVALID_HANDLE;
    }
}
public Action:StopTimer(Handle:timer)
{
    Respawn_Timer = INVALID_HANDLE;
}
public Action:TimerRespawn(Handle:timer, any:client)
{
    if (IsClientInGame(client) && !IsPlayerAlive(client) && GetClientTeam(client) > 1)
    {
        CS_RespawnPlayer(client);
        CGOPrintToChat(client, "{RED}[MiniGame]: {GREEN}Вы были возрождены!");
    }
}

public OnClientDisconnect(client) {
    bAntiReconnect[client] = false;
}

stock Reset_Variable() {
    for (new i = 1; i <= MaxClients; i++) bAntiReconnect[i] = false;
}

public OnMapEnd() {
    Reset_Variable();
}

public Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) {
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if (bAntiReconnect[client]) ForcePlayerSuicide(client);
}
Спасибо огромное.
 
Сверху Снизу