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

Тема в разделе "Программирование / Скриптинг", создана пользователем rodion, 20 июн 2016.

  1. rodion

    rodion

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

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    rodion нравится это.
  3. rodion

    rodion

    Сообщения:
    9
    Симпатии:
    0
    А при выходе из режима призрака как сделать чтобы все наместо возврашалось?
    --- Добавлено позже ---
    Допиши в плагин пожалуйста все)
     
    Последнее редактирование: 20 июн 2016
  4. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    Это раздел, в котором подсказывают пользователям как решить их проблему, а не решают проблему вместо них.
    ЗЫ: админ, чёткие правила для разделов установи, пожалуйста. К тому же модероторов куча, но хоть что-то бы модерировалось.
     
  5. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    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(iClientbool: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(iClientiFlags)
    {
        
    // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
        // в том смысле, что через GetClientListengFlags или нет, так что так пока
        
    if (g_bIsClientMuted[iClient] == false)
        {
            
    SetClientListeningFlags(iClientiFlags);
        }
    }
    --- Добавлено позже ---
    а вообще да, с такими вопросами в запросы или в заказы
     
    Последнее редактирование: 20 июн 2016
    rodion нравится это.
  6. rodion

    rodion

    Сообщения:
    9
    Симпатии:
    0
    А как сделать возврат голоса в конце раунда?Заранее спасибо)
     
  7. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    голос должен вернуться, если клиент пропишет снова ghost, по крайней мере такая идея
     
    rodion нравится это.
  8. rodion

    rodion

    Сообщения:
    9
    Симпатии:
    0
    Да когда снова прописывает возврашается, но можно Авто возвращение в начале нового раунда как нибудь сделать
    --- Добавлено позже ---
    И чтобы нельзя было со второго ввода включать голос а только в начале след раунда он автоматом включался
     
  9. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    в конце раунда вернет голос
    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(iClientbool:bMuteState)
    {
        
    g_bIsClientMuted[iClient] = bMuteState;
    }

    public 
    Event_OnRoundEnd(Handle:hEvent, const String:szEventName[], bool:bSilent)
    {
        for (new 
    iClient 1iClient <= MaxClients; ++iClient)
        {
            if (
    IsClientInGame(iClient) == true)
            {
                if (
    IsFakeClient(iClient) == false)
                {
                    
    Function_SetClientListeningFlags(iClientVOICE_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(iClientiFlags)
    {
        
    // думал использовать тут native bool:BaseComm_IsClientMuted(client), но не стал смотреть, как там он возвращает
        // в том смысле, что через GetClientListengFlags или нет, так что так пока
        
    if (g_bIsClientMuted[iClient] == false)
        {
            
    SetClientListeningFlags(iClientiFlags);
        }
    }
    --- Добавлено позже ---
    вот еще версия, в конце раунда вернет голос, также нельзя вернуть голос, повторно введя команду
    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(iClientbool:bMuteState)
    {
        
    g_bIsClientMuted[iClient] = bMuteState;
    }

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

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

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

    rodion

    Сообщения:
    9
    Симпатии:
    0
    Спасибо)
     
  11. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    хотя, глянул плагин, лучше туда вставить этот код)) а иначе плохо получается, очень
     
  12. rodion

    rodion

    Сообщения:
    9
    Симпатии:
    0
    Можешь тогда вставить?
    --- Добавлено позже ---
     

    Вложения:

    • Ghost.sp
      Размер файла:
      3 КБ
      Просмотров:
      1
  13. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    можешь попробовать
    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_StartEventHookMode_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 1iClient <= MaxClients; ++iClient)
        {
            if (
    IsClientInGame(iClient) == true)
            {
                if (
    IsFakeClient(iClient) == false)
                {
                    
    Function_SetClientListeningFlags(iClientVOICE_NORMAL);
                }
            }
        }

        
    blockCommand false;
    }

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

    public OnClientPutInServer(client)
    {
        
    SDKHook(clientSDKHook_WeaponCanUseOnWeaponCanUse);

        
    // ---
        
    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(clientProp_Send"m_nHitboxSet"2);
            
    g_IsGhost[client] = false;
        }
        else
        {
            
    SetEntProp(clientProp_Send"m_nHitboxSet"0);
        }
    }

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

        return 
    Plugin_Continue;
    }

    public 
    Action:Command_Ghost(clientargs)
    {
        
    // ---
        
    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 
    0<= 3i++)
                    {
                        if ((
    weaponIndex GetPlayerWeaponSlot(clienti)) != -1)
                        {  
                            
    RemovePlayerItem(clientweaponIndex);
                            
    RemoveEdict(weaponIndex);
                        }
                    }
                    
    SetEntProp(clientProp_Send"m_lifeState"1);
                    
    SetEntData(clientg_Collision24true);
                    
    PrintToChat(client" \x04[\x03Ghost\x04] \x01Ты теперь призрак.");

                    
    // ---
                    
    Function_SetClientListeningFlags(clientVOICE_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(clientweapon)
    {
        if(
    GetEntProp(clientProp_Send"m_lifeState") == 1)
            return 
    Plugin_Handled;
       
        return 
    Plugin_Continue;
    }

    // ---
    stock Function_SetClientListeningFlags(iClientiFlags)
    {
        if (
    g_bIsClientMuted[iClient] == false)
        {
            
    SetClientListeningFlags(iClientiFlags);
        }
    }
    // ---
     
    rodion нравится это.
  14. rodion

    rodion

    Сообщения:
    9
    Симпатии:
    0
    Все работает но в чате вот так [​IMG]

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

    Вложения:

  15. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    а сам как думаешь?
     
  16. rodion

    rodion

    Сообщения:
    9
    Симпатии:
    0
    Заработало ,кодировку не ту поставил
    --- Добавлено позже ---
    Спасибо