[PLUGIN] Warmup random weapon

Фантэйззи

Участник
Сообщения
11
Реакции
2
Операционная система
Windows
Пробовал создать плагин чтобы во время разминки(которое на обычных картах в 1х1 комнатах) игроку выдавалось случайное оружие из списка через спавн игрока, но оно не работает, может кто подсказать как сделать?


WeaponOnWarmup:
#include <sdktools>

char WeaponList[][] =
{
    "weapon_glock", "weapon_deagle",  "weapon_ssg08", "weapon_awp", "weapon_g3sg1", "weapon_mag7", "weapon_taser",
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn);
}

DisarmPlayer(client)
{
    for(new i = 0; i < 10; i++)
    {
        new weapon = -1;
        while((weapon = GetPlayerWeaponSlot(client, i)) != -1)
        {
            if(IsValidEntity(weapon))
            {
                RemovePlayerItem(client, weapon);
            }
        }
    }
}

public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    
    if (IsWarmup() && client != -1)
    {
        DisarmPlayer(client);
        GivePlayerItem(client, "weapon_knife");
        
        int gw = GetRandomInt(0, sizeof(WeaponList) - 1);
        GivePlayerItem(client, WeaponList[gw]);
        
        return Plugin_Handled;
    }

    return Plugin_Continue;
}

stock bool IsWarmup()
{
    int warmup = GameRules_GetProp("m_bWarmupPeriod", 4, 0);
    if (warmup == 1)return true;
    else return false;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
но оно не работает
ошибки в логах SM имеются?

Попробуй так:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_entinput>
#include <sdktools_functions>
#include <sdktools_gamerules>

static const char WEAPONS[][] =
{
    "weapon_glock",
    "weapon_deagle",
    "weapon_ssg08",
    "weapon_awp",
    "weapon_g3sg1",
    "weapon_mag7",
    "weapon_taser"
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn);
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    if(!GameRules_GetProp("m_bWarmupPeriod"))
        return;

    int client = GetClientOfUserId(event.GetInt("userid"));
    if(!client || !IsPlayerAlive(client))
        return;

    for(int i, weapon; i < 5; i++)
    {
        while((weapon = GetPlayerWeaponSlot(client, i)) != -1)
        {
            if(RemovePlayerItem(client, weapon))
            {
#if SOURCEMOD_V_MAJOR < 2 && SOURCEMOD_V_MINOR < 10
                AcceptEntityInput(weapon, "Kill");
#else
                RemoveEntity(weapon);
#endif
            }
        }
    }

    GivePlayerItem(client, "weapon_knife");
    GivePlayerItem(client, WEAPONS[GetRandomInt(0, sizeof(WEAPONS) - 1)]);
}
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Пробовал создать плагин чтобы во время разминки(которое на обычных картах в 1х1 комнатах) игроку выдавалось случайное оружие из списка через спавн игрока, но оно не работает, может кто подсказать как сделать?


WeaponOnWarmup:
#include <sdktools>

char WeaponList[][] =
{
    "weapon_glock", "weapon_deagle",  "weapon_ssg08", "weapon_awp", "weapon_g3sg1", "weapon_mag7", "weapon_taser",
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn);
}

DisarmPlayer(client)
{
    for(new i = 0; i < 10; i++)
    {
        new weapon = -1;
        while((weapon = GetPlayerWeaponSlot(client, i)) != -1)
        {
            if(IsValidEntity(weapon))
            {
                RemovePlayerItem(client, weapon);
            }
        }
    }
}

public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
  
    if (IsWarmup() && client != -1)
    {
        DisarmPlayer(client);
        GivePlayerItem(client, "weapon_knife");
      
        int gw = GetRandomInt(0, sizeof(WeaponList) - 1);
        GivePlayerItem(client, WeaponList[gw]);
      
        return Plugin_Handled;
    }

    return Plugin_Continue;
}

stock bool IsWarmup()
{
    int warmup = GameRules_GetProp("m_bWarmupPeriod", 4, 0);
    if (warmup == 1)return true;
    else return false;
}
C-подобный:
#include <sdktools>
#include <cstrike>

int g_iGrenadeOffsets[] = {15, 17, 16, 14, 18, 17};

static const char WeaponList[][] =
{
    "weapon_glock", "weapon_deagle",  "weapon_ssg08", "weapon_awp", "weapon_g3sg1", "weapon_mag7", "weapon_taser",
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn);
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(0 < client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client))
    {
        if(IsWarmup())
        {
            for (int i = 0; i < 5; ++i)
            {
                if(i == CS_SLOT_KNIFE) continue;
                
                if(i == 3) RemoveNades(client);
                else RemoveWeaponBySlot(client, i);
            }
            GivePlayerItem(client, WeaponList[GetRandomInt(0, sizeof(WeaponList)- 1)]);        
        }
    }
}

stock bool IsWarmup()
{
    return GameRules_GetProp("m_bWarmupPeriod") ? true : false;
}

stock void RemoveNades(int client)
{
    while (RemoveWeaponBySlot(client, 3))
    {
        for (int i = 0; i < 6; i++)
            SetEntProp(client, Prop_Send, "m_iAmmo", 0, _, g_iGrenadeOffsets[i]);
    }
}

stock bool RemoveWeaponBySlot(int client, int slot)
{
    int entity = GetPlayerWeaponSlot(client, slot);
    if (IsValidEdict(entity))
    {
        RemovePlayerItem(client, entity);
        AcceptEntityInput(entity, "Kill");
        return true;
    }
    return false;
}
 

Фантэйззи

Участник
Сообщения
11
Реакции
2
ошибки в логах SM имеются?

Попробуй так:
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_entinput>
#include <sdktools_functions>
#include <sdktools_gamerules>

static const char WEAPONS[][] =
{
    "weapon_glock",
    "weapon_deagle",
    "weapon_ssg08",
    "weapon_awp",
    "weapon_g3sg1",
    "weapon_mag7",
    "weapon_taser"
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_PlayerSpawn);
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    if(!GameRules_GetProp("m_bWarmupPeriod"))
        return;

    int client = GetClientOfUserId(event.GetInt("userid"));
    if(!client || !IsPlayerAlive(client))
        return;

    for(int i, weapon; i < 5; i++)
    {
        while((weapon = GetPlayerWeaponSlot(client, i)) != -1)
        {
            if(RemovePlayerItem(client, weapon))
            {
#if SOURCEMOD_V_MAJOR < 2 && SOURCEMOD_V_MINOR < 10
                AcceptEntityInput(weapon, "Kill");
#else
                RemoveEntity(weapon);
#endif
            }
        }
    }

    GivePlayerItem(client, "weapon_knife");
    GivePlayerItem(client, WEAPONS[GetRandomInt(0, sizeof(WEAPONS) - 1)]);
}
Не помогает, насколько я понимаю, сначала игрок спавнится, затем его тепает и выдаёт оружие
 
Сверху Снизу