[CSGO] Помогите с плагином ghost(!redie)

rodion

Участник
Сообщения
9
Реакции
0
Как сделать чтобы при написании !ghost(!Redie) игрок не мог мониторить(т.е у него выключался микрофон и он не мог говорить с живыми)
 
Последнее редактирование:

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Это раздел, в котором подсказывают пользователям как решить их проблему, а не решают проблему вместо них.
ЗЫ: админ, чёткие правила для разделов установи, пожалуйста. К тому же модероторов куча, но хоть что-то бы модерировалось.
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
native SetClientListeningFlags(client, flags)
--- Добавлено позже ---
PHP:
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>

new bool:g_bIsClientGhost[MAXPLAYERS + 1] = {false, ...},
    bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    AddCommandListener(OnCommandStart, "ghost");
}

public OnClientPutInServer(iClient)
{
    g_bIsClientGhost[iClient] = false;
    g_bIsClientMuted[iClient] = false;
}

public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
    g_bIsClientMuted[iClient] = bMuteState;
}

public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
    if (iClient)
    {
        Function_SetClientListeningFlags(iClient, (g_bIsClientGhost[iClient] = !g_bIsClientGhost[iClient]) ? VOICE_MUTED : VOICE_NORMAL);
    }
}

stock Function_SetClientListeningFlags(iClient, iFlags)
{
    // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
    // в том смысле, что через GetClientListengFlags или нет, так что так пока
    if (g_bIsClientMuted[iClient] == false)
    {
        SetClientListeningFlags(iClient, iFlags);
    }
}
--- Добавлено позже ---
а вообще да, с такими вопросами в запросы или в заказы
 
Последнее редактирование:

rodion

Участник
Сообщения
9
Реакции
0
native SetClientListeningFlags(client, flags)
--- Добавлено позже ---
PHP:
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>

new bool:g_bIsClientGhost[MAXPLAYERS + 1] = {false, ...},
    bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    AddCommandListener(OnCommandStart, "ghost");
}

public OnClientPutInServer(iClient)
{
    g_bIsClientGhost[iClient] = false;
    g_bIsClientMuted[iClient] = false;
}

public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
    g_bIsClientMuted[iClient] = bMuteState;
}

public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
    if (iClient)
    {
        Function_SetClientListeningFlags(iClient, (g_bIsClientGhost[iClient] = !g_bIsClientGhost[iClient]) ? VOICE_MUTED : VOICE_NORMAL);
    }
}

stock Function_SetClientListeningFlags(iClient, iFlags)
{
    // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
    // в том смысле, что через GetClientListengFlags или нет, так что так пока
    if (g_bIsClientMuted[iClient] == false)
    {
        SetClientListeningFlags(iClient, iFlags);
    }
}
--- Добавлено позже ---
а вообще да, с такими вопросами в запросы или в заказы
А как сделать возврат голоса в конце раунда?Заранее спасибо)
 

rodion

Участник
Сообщения
9
Реакции
0
голос должен вернуться, если клиент пропишет снова ghost, по крайней мере такая идея
Да когда снова прописывает возврашается, но можно Авто возвращение в начале нового раунда как нибудь сделать
--- Добавлено позже ---
И чтобы нельзя было со второго ввода включать голос а только в начале след раунда он автоматом включался
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Да когда снова прописывает возврашается, но можно Авто возвращение в начале нового раунда как нибудь сделать
--- Добавлено позже ---
И чтобы нельзя было со второго ввода включать голос а только в начале след раунда он автоматом включался
в конце раунда вернет голос
PHP:
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>

new bool:g_bIsClientGhost[MAXPLAYERS + 1] = {false, ...},
    bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    HookEvent("round_end", Event_OnRoundEnd);

    AddCommandListener(OnCommandStart, "ghost");
}

public OnClientPutInServer(iClient)
{
    g_bIsClientGhost[iClient] = false;
    g_bIsClientMuted[iClient] = false;
}

public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
    g_bIsClientMuted[iClient] = bMuteState;
}

public Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
{
    for (new iClient = 1; iClient <= MaxClients; ++iClient)
    {
        if (IsClientInGame(iClient) == true)
        {
            if (IsFakeClient(iClient) == false)
            {
                Function_SetClientListeningFlags(iClient, VOICE_NORMAL);
                g_bIsClientGhost[iClient] = false;
            }
        }
    }
}

public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
    if (iClient)
    {
        Function_SetClientListeningFlags(iClient, (g_bIsClientGhost[iClient] = !g_bIsClientGhost[iClient]) ? VOICE_MUTED : VOICE_NORMAL);
    }
}

stock Function_SetClientListeningFlags(iClient, iFlags)
{
    // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
    // в том смысле, что через GetClientListengFlags или нет, так что так пока
    if (g_bIsClientMuted[iClient] == false)
    {
        SetClientListeningFlags(iClient, iFlags);
    }
}
--- Добавлено позже ---
вот еще версия, в конце раунда вернет голос, также нельзя вернуть голос, повторно введя команду
PHP:
#include <sourcemod>
#include <basecomm>
#include <sdktools_voice>

new bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};

public OnPluginStart()
{
    HookEvent("round_end", Event_OnRoundEnd);

    AddCommandListener(OnCommandStart, "ghost");
}

public OnClientPutInServer(iClient)
{
    g_bIsClientMuted[iClient] = false;
}

public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
    g_bIsClientMuted[iClient] = bMuteState;
}

public Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
{
    for (new iClient = 1; iClient <= MaxClients; ++iClient)
    {
        if (IsClientInGame(iClient) == true)
        {
            if (IsFakeClient(iClient) == false)
            {
                Function_SetClientListeningFlags(iClient, VOICE_NORMAL);
            }
        }
    }
}

public Action:OnCommandStart(iClient, const String:szCommand[], iArgs)
{
    if (iClient)
    {
        Function_SetClientListeningFlags(iClient, VOICE_MUTED);
    }
}

stock Function_SetClientListeningFlags(iClient, iFlags)
{
    // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
    // в том смысле, что через GetClientListengFlags или нет, так что так пока
    if (g_bIsClientMuted[iClient] == false)
    {
        SetClientListeningFlags(iClient, iFlags);
    }
}
 
Последнее редактирование:

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
хотя, глянул плагин, лучше туда вставить этот код)) а иначе плохо получается, очень
 

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
Можешь тогда вставить?
--- Добавлено позже ---
можешь попробовать
PHP:
#include <sourcemod>
#include <basecomm>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>

#pragma semicolon 1

#define PLUGIN_VERSION    "1.3"

new blockCommand;
new g_Collision;
new bool:g_IsGhost[MAXPLAYERS+1];

public Plugin:myinfo =
{
    name = "Redie RUS",
    author = "MeoW,adapted-AcDc ",
    description = "Return as a ghost after you died.",
    version = PLUGIN_VERSION,
    url = "http://www.trident-gaming.net/"
};

// ---
new bool:g_bIsClientMuted[MAXPLAYERS + 1] = {false, ...};
// ---

public OnPluginStart()
{
    HookEvent("round_start", Event_Round_Start, EventHookMode_Pre);   
    HookEvent("player_spawn", Event_Player_Spawn);
    RegConsoleCmd("sm_ghost", Command_Ghost);
    CreateConVar("sm_redie_version", PLUGIN_VERSION, "Redie Version", FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);
    g_Collision = FindSendPropInfo("CBaseEntity", "m_CollisionGroup");

    // ---
    HookEvent("round_end", Event_OnRoundEnd);
    // ---
}

// ---
public Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
{
    for (new iClient = 1; iClient <= MaxClients; ++iClient)
    {
        if (IsClientInGame(iClient) == true)
        {
            if (IsFakeClient(iClient) == false)
            {
                Function_SetClientListeningFlags(iClient, VOICE_NORMAL);
            }
        }
    }

    blockCommand = false;
}

public BaseComm_OnClientMute(iClient, bool:bMuteState)
{
    g_bIsClientMuted[iClient] = bMuteState;
}
// ---

public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse);

    // ---
    g_bIsClientMuted[client] = false;
    // ---
}

public OnClientPostAdminCheck(client)
{
    g_IsGhost[client] = false;
}

public Action:Event_Round_Start(Handle:event, const String:name[], bool:dontBroadcast) 
{
    blockCommand = true;
}


public Action:Event_Player_Spawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(g_IsGhost[client])
    {
        SetEntProp(client, Prop_Send, "m_nHitboxSet", 2);
        g_IsGhost[client] = false;
    }
    else
    {
        SetEntProp(client, Prop_Send, "m_nHitboxSet", 0);
    }
}

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
    if(GetEntProp(client, Prop_Send, "m_lifeState") == 1)
    {
        buttons &= ~IN_USE;
    }

    return Plugin_Continue;
}

public Action:Command_Ghost(client, args)
{
    // ---
    if (!client) return Plugin_Handled;
    // ---

    if (blockCommand)
    {
        if (!IsPlayerAlive(client))
        {
            if (GetClientTeam(client) > 1)
            {
                g_IsGhost[client] = true;
                CS_RespawnPlayer(client);
                new weaponIndex;
                for (new i = 0; i <= 3; i++)
                {
                    if ((weaponIndex = GetPlayerWeaponSlot(client, i)) != -1)
                    {  
                        RemovePlayerItem(client, weaponIndex);
                        RemoveEdict(weaponIndex);
                    }
                }
                SetEntProp(client, Prop_Send, "m_lifeState", 1);
                SetEntData(client, g_Collision, 2, 4, true);
                PrintToChat(client, " \x04[\x03Ghost\x04] \x01Ты теперь призрак.");

                // ---
                Function_SetClientListeningFlags(client, VOICE_MUTED);
                // ---
            }
            else
            {
                PrintToChat(client, " \x04[\x03Ghost\x04] \x01Вы должны быть в Команде.");
            }
        }
        else
        {
            PrintToChat(client, " \x04[\x03Ghost\x04] \x01Ты умереть чтобы стать призраком.");
        }
    }
    else
    {
        PrintToChat(client, " \x04[\x03Ghost\x04] \x01Слишком поздно, дождитесь нового раунда.");
    }
    return Plugin_Handled;
}

public Action:OnWeaponCanUse(client, weapon)
{
    if(GetEntProp(client, Prop_Send, "m_lifeState") == 1)
        return Plugin_Handled;
   
    return Plugin_Continue;
}

// ---
stock Function_SetClientListeningFlags(iClient, iFlags)
{
    if (g_bIsClientMuted[iClient] == false)
    {
        SetClientListeningFlags(iClient, iFlags);
    }
}
// ---
 

rodion

Участник
Сообщения
9
Реакции
0
можешь попробовать
Все работает но в чате вот так
20160621191742_1-jpg.16449


--- Добавлено позже ---
Изза кодировки чтоли?
 

Вложения

  • 20160621191742_1.jpg
    20160621191742_1.jpg
    2.2 КБ · Просмотры: 136

rodion

Участник
Сообщения
9
Реакции
0
Заработало ,кодировку не ту поставил
--- Добавлено позже ---
Спасибо
 
Сверху Снизу