Дюп оружия на сервере

Pautinka553

Участник
Сообщения
58
Реакции
7
Проблема появилась давно, но чёт не обращал внимания.
Заключается она в том что в начале каждого раунда на awp_lego2 и других картах где в начале игры оружие выдаётся автоматически, под выжившими в прошлом раунде появляется все их оружие (нож, пистолет, авп)

Кто нибудь знает как исправить?
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Это баг ксго, проблема с ентити game_player_equip. Её решают путём добавления флага - 2: "Strip All Weapons First"
Но предыдущее оружие, само-собой, будет удаляться.
 

Вложения

  • game_player_equip.smx
    4.2 КБ · Просмотры: 10
  • game_player_equip.sp
    890 байт · Просмотры: 11

Pautinka553

Участник
Сообщения
58
Реакции
7
Это баг ксго, проблема с ентити game_player_equip. Её решают путём добавления флага - 2: "Strip All Weapons First"
Но предыдущее оружие, само-собой, будет удаляться.
А на обычных картах типо de_dust2 оружие из предыдущего раунда будет оставаться?
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Вот это еще есть:

PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdkhooks>
#include <sdktools>

new Handle:g_ConVar_Cleaner_Timer_Hndl = INVALID_HANDLE;
new Handle:g_Cleaner_Timer_Hndl = INVALID_HANDLE;
new Float:g_ConVar_Cleaner_Timer = 0.0;
new bool:g_StopCleaner = true;

public Plugin:myinfo =
{
    name             =        "Weapon Clean up",
    author            =        "CS:GO Port Team",
    description            =        "Cleans up dropped weapons",
    version            =        "1.0",
    url                =        "http://SourceMod.net"
};

public OnPluginStart()
{
    g_ConVar_Cleaner_Timer_Hndl = CreateConVar("sm_weaponcleaner_timer", "15.0", "How long the weapon cleaner should run each round (in seconds). 0 = never stop.", 0, true, 0.0);
  
    // Cache the convar
    g_ConVar_Cleaner_Timer = GetConVarFloat(g_ConVar_Cleaner_Timer_Hndl);
  
    HookConVarChange(g_ConVar_Cleaner_Timer_Hndl, OnConVarChanged);
    HookEvent("round_start", OnRoundStartPost);
  
    for (new client = 1; client <= MaxClients; client++)
    {
        if (!IsClientInGame(client))
        {
            continue;
        }
      
        OnClientPutInServer(client);
    }
}

public OnConVarChanged(Handle:cvar, const String:oldVal[], const String:newVal[])
{
    g_ConVar_Cleaner_Timer = StringToFloat(newVal);
}

public OnMapEnd()
{
    g_Cleaner_Timer_Hndl = INVALID_HANDLE;
}

public OnRoundStartPost(Handle:event, const String:name[], bool:dontBroadcast)
{
    g_StopCleaner = false;
    if (g_ConVar_Cleaner_Timer <= 0.0)
    {
        return;
    }
  
    if (g_Cleaner_Timer_Hndl != INVALID_HANDLE)
    {
        KillTimer(g_Cleaner_Timer_Hndl);
        g_Cleaner_Timer_Hndl = INVALID_HANDLE;
    }
  
    g_Cleaner_Timer_Hndl = CreateTimer(g_ConVar_Cleaner_Timer, DisableCleaner, _, TIMER_FLAG_NO_MAPCHANGE);
}

public Action:DisableCleaner(Handle:timer)
{
    g_Cleaner_Timer_Hndl = INVALID_HANDLE;
    g_StopCleaner = true;
}

public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_WeaponDrop, OnWeaponDropPost);
}

public OnWeaponDropPost(client, weapon)
{
    if (g_StopCleaner == true)
    {
        return;
    }
  
    if (!IsValidEdict(weapon))
    {
        return;
    }

    decl String:TargetName[255];
    GetEntPropString(weapon, Prop_Data, "m_iName", TargetName, sizeof(TargetName));
    if (TargetName[0] !='\0')
    {
        // Weapon has a targetname, do not touch.
        return;
    }
  
    new child = GetEntPropEnt(weapon, Prop_Data, "m_hMoveChild");
    if (child != -1)
    {
        // Entity has a child
        return;
    }
  
    AcceptEntityInput(weapon, "Kill");
}

sm_weaponcleaner_timer - кол-во секунд от начала раунда оружие будет удалятся при выбрасывании.
 

Вложения

  • spawn_unlag.sp
    2.4 КБ · Просмотры: 11
  • spawn_unlag.smx
    4.3 КБ · Просмотры: 8
Сверху Снизу