Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Приседание игрока
Karandachik Дата: Четверг, 11.08.2022, 14:18:36 | Сообщение # 1
Сообщений: 60
Репутация: 3 [ +/- ]
Ребята помогите мне пожалуйста.
Нашла на этом сайте код как можно запретить всем игрокам приседать.
Код

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
    if (buttons & IN_DUCK)
    {
  {
   buttons &= ~IN_DUCK;
   return Plugin_Changed;
  }
    }
    return Plugin_Continue;
}

все работает игроки не могут присесть никак, но мне нужно что бы через 10 секунд они бы смогли приседать.
Как сделать такое?
 
_wS_ Дата: Четверг, 11.08.2022, 22:40:49 | Сообщение # 2
Цитата Karandachik ()
все работает игроки не могут присесть никак, но мне нужно что бы через 10 секунд они бы смогли приседать.
Как сделать такое?

Код
Handle g_hTimer = null;
int g_Sec[MAXPLAYERS + 1] = {0, ...};

stock void StopDuck(int client)
{
    g_Sec[client] = 10;
    
    if(!g_hTimer) {
        g_hTimer = CreateTimer(1.0, CheckSec);
    }
}

static Action CheckSec(Handle timer)
{
    bool checkSec = false;
    
    for (int i = 1; i <= MaxClients; i++) {
        if (g_Sec[i] && --g_Sec[i]) {
            checkSec = true;
        }
    }
    
    if (checkSec) {
        return Plugin_Continue;
    }
    
    g_hTimer = null;
    return Plugin_Stop;
}

public Action OnPlayerRunCmd(int client, int &buttons)
{
    if (g_Sec[client] && ((buttons & IN_DUCK) == IN_DUCK))
    {
        buttons &= ~IN_DUCK;
        return Plugin_Changed;
    }
    return Plugin_Continue;
}

public void OnClientDisconnect_Post(int client)
{
    g_Sec[client] = 0;
}

public void OnMapEnd()
{
    if (g_hTimer)
    {
        KillTimer(g_hTimer);
        g_hTimer = null;
    }
}

Скорее всего здесь что-то не учтено (начало раунда, рождение, и т.д.), угадывать подробное описание не хочется.
StopDuck(client) присаживает client'а на 10 сек.
 
Karandachik Дата: Четверг, 11.08.2022, 23:15:05 | Сообщение # 3
Сообщений: 60
Репутация: 3 [ +/- ]
Cпасибо вам большое за участие, но не работает.
А должно быть вот как.
Карта сменилась или сервер сделал рестарт - всем игрокам нужно отключить возможность приседать на 10 сек, а через 10 сек они снова могут приседать уже без всяких ограничений.

Нашла вот такой код на вашем форуме
Код

#pragma semicolon 1
#include <sourcemod>
#include <sdktools>

new trigger[MAXPLAYERS+1] = 0;

public OnPluginStart()
{

    HookEvent("player_spawn", player_spawn);
}

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{

    if (trigger[client] == 0)
    {
  if(GetClientButtons(client) & IN_DUCK)
  {
   CreateTimer(10.0, aTimer, client);
  }
    }
    if (trigger[client] == 1)
    {
  buttons &= ~IN_DUCK;
  return Plugin_Changed;
    }
    return Plugin_Continue;
}

public player_spawn(Handle:event,const String:name[],bool:dontBroadcast)
{

    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    trigger[client] = 0;
}

public Action:aTimer(Handle:timer, any:client)
{

    if (IsClientInGame(client)) trigger[client] = 1;
}


Он работает но наоборот.
Игроки сначала могут приседать а через 10 сек уже не могут, а мне нужно наоборот как то сделать.\
Помогите пожалуйста.


Сообщение отредактировал Karandachik - Четверг, 11.08.2022, 23:30:28
 
  • Страница 1 из 1
  • 1
Поиск: