Команды для игрока.

Тема в разделе "Запросы", создана пользователем ThreshHNS, 16 май 2015.

  1. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    Добрый день,
    Помогите пожалуйста сделать следующий плагин:
    1. При команде !block от игрока включает для него mp_solid,чтобы он мог проходить и через него могли проходить игроки. Так же и обратно !block выключает mp_solid.
    Прошу добавить еще оповещение в чат,что через него могут проходить игроки/не могут проходить игроки.
    (по умолчанию стоит mp_solid 0)
    2. Нужно сделать,чтобы при команде !noclip клиент мог включать !noclip и также выключать его.

    Команды для всех игроков (не по флагам).
    Большое спасибо за ранее!
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.509
    Симпатии:
    1.961
    Включение для отдельного игрока (часто) ломает физику игры.
    Вот плагин с похожим принципом, только прописывать ничего не надо.
     
    ThreshHNS нравится это.
  3. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    AlmazON, в чем заключается нарушение физики игры? И при нажатие на кнопку E только ты проходишь или все?

    Добавлено через 1 минуту
    AlmazON, если все так как есть,может переделать его под команду?
     
    Последнее редактирование: 16 май 2015
  4. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    AlmazON, насчет физики не важно (пропсов не каких нет)
    Для трикс серверов,зажимать и прыгать не удобно. Буду рад,если переделаешь и добавишь оповещение в чат.
     
  5. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.509
    Симпатии:
    1.961
    Команды для игрока: !block и !noclip

    PHP:
    #include <sdkhooks>

    new bool:g_bNoclip[MAXPLAYERS+1], g_iBlock[MAXPLAYERS+1] = {3}, g_offsCollisionGroup;

    public 
    OnPluginStart()
    {
        
    RegConsoleCmd("sm_noclip"CommandNoclip);
        if((
    g_offsCollisionGroup FindSendPropOffs("CBaseEntity""m_CollisionGroup")) != -1RegConsoleCmd("sm_block"CommandBlock);
        else 
    LogError("The command block is not valid (offset 'CBaseEntity::m_CollisionGroup' not found).");
    }

    public 
    OnClientDisconnect_Post(clientg_iBlock[client] = g_bNoclip[client] = false;

    public 
    Action:CommandNoclip(clientargs)
    {
        if(
    g_bNoclip[client])
        {
            
    SetEntProp(clientProp_Data"m_MoveType"MOVETYPE_WALK);
            
    g_bNoclip[client] = false;
            
    PrintToChat(client"\x01 \x03Noclip \x05выключен\x01!");
        }else if(
    client)
        {
            
    SetEntProp(clientProp_Data"m_MoveType"MOVETYPE_NOCLIP);
            
    g_bNoclip[client] = true;
            
    PrintToChat(client"\x01 \x05Включён \x03Noclip\x01!");
        }
        return 
    Plugin_Handled;
    }
    public 
    Action:CommandBlock(clientargs)
    {
        switch(
    g_iBlock[client])
        {
            case 
    0,1:
            {
                
    SDKHook(clientSDKHook_TouchPlayerTouch);
                
    g_iBlock[client] = 2;
                
    SetEntData(clientg_offsCollisionGroup14true);
                
    PrintToChat(client"\x01 \x05Включён \x03No Block\x01!");
            }case 
    2:
            {
                
    SDKUnhook(clientSDKHook_TouchPlayerTouch);
                
    SetEntData(clientg_offsCollisionGroup54true);
                
    g_iBlock[client] = 0;
                
    PrintToChat(client"\x01 \x03No Block \x05выключен\x01!");
            }
        }
        return 
    Plugin_Handled;
    }

    public 
    Action:PlayerTouch(cliententity)
    {
        if(
    entity <= MaxClients) if(g_iBlock[entity] == 0)
        {
            
    SetEntData(entityg_offsCollisionGroup14true);
            
    CreateTimer(0.5PlayerBlockentity);
            
    g_iBlock[entity] = 1;
        }
        return 
    Plugin_Continue;
    }

    public 
    Action:PlayerBlock(Handle:timerany:client)
    {
        if(
    g_iBlock[client] == 1)
        {
            
    SetEntData(clientg_offsCollisionGroup54true);
            
    g_iBlock[client] = 0;
        }
        return 
    Plugin_Stop;
    }
    Сделал достаточно просто - не проверяется ни "живность" игрока и нет сохранения при новом раунде.
     
    Последнее редактирование: 20 май 2015
    ThreshHNS нравится это.
  6. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    AlmazON, не работает noclip как надо. Прописываешь !noclip - взлетаешь,прописываешь еще раз !noclip чтобы убрать его,ты остаешься на месте и не можешь двигаться.
     
  7. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    ThreshHNS, Попробуй так:
    Код:
    #include <sdkhooks>
    
    new bool:g_bNoclip[MAXPLAYERS+1], g_iBlock[MAXPLAYERS+1] = {3}, g_offsCollisionGroup;
    
    public OnPluginStart()
    {
        RegConsoleCmd("sm_noclip", CommandNoclip);
        if((g_offsCollisionGroup = FindSendPropOffs("CBaseEntity", "m_CollisionGroup")) != -1) RegConsoleCmd("sm_block", CommandBlock);
        else LogError("The command block is not valid (offset 'CBaseEntity::m_CollisionGroup' not found).");
    }
    
    public OnClientDisconnect_Post(client) g_iBlock[client] = g_bNoclip[client] = false;
    
    public Action:CommandNoclip(client, args)
    {
        if(g_bNoclip[client])
        {
            SetEntProp(client, Prop_Data, "m_MoveType", [COLOR="Red"][B]MOVETYPE_WALK[/B][/COLOR]);
            g_bNoclip[client] = false;
            PrintToChat(client, "\x01 \x03Noclip \x05выключен\x01!");
        }else if(client)
        {
            SetEntProp(client, Prop_Data, "m_MoveType", 8);
            g_bNoclip[client] = true;
            PrintToChat(client, "\x01 \x05Включён \x03Noclip\x01!");
        }
        return Plugin_Handled;
    }
    public Action:CommandBlock(client, args)
    {
        switch(g_iBlock[client])
        {
            case 0:
            {
                SDKHook(client, SDKHook_Touch, PlayerTouch);
                g_iBlock[client] = 2;
                SetEntData(client, g_offsCollisionGroup, 2, 4, true);
                PrintToChat(client, "\x01 \x05Включён \x03No Block\x01!");
            }
            case 2:
            {
                SDKUnhook(client, SDKHook_Touch, PlayerTouch);
                SetEntData(client, g_offsCollisionGroup, 5, 4, true);
                g_iBlock[client] = 0;
                PrintToChat(client, "\x01 \x03No Block \x05выключен\x01!");
            }
        }
        return Plugin_Handled;
    }
    
    public Action:PlayerTouch(client, entity)
    {
        if(entity <= MaxClients) if(g_iBlock[entity] == 0)
        {
            SetEntData(entity, g_offsCollisionGroup, 2, 4, true);
            CreateTimer(1.0, PlayerBlock, entity);
            g_iBlock[entity] = 1;
        }
        return Plugin_Continue;
    }
    
    public Action:PlayerBlock(Handle:timer, any:client)
    {
        g_iBlock[client] = 0;
        SDKUnhook(client, SDKHook_Touch, PlayerTouch);
        if(IsClientInGame(client)) SetEntData(client, g_offsCollisionGroup, 5, 4, true);
        return Plugin_Stop;
    }  
     
    ThreshHNS нравится это.
  8. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    AlmazON, все так же,после отключения остаешься неподвижным.
     
  9. ThreshHNS

    ThreshHNS

    Сообщения:
    228
    Симпатии:
    25
    AlmazON, нет,я прекрасно понимаю,как работает noclip,я летаю на юнитов 10 выше земли,все равно не отпускает. В noclip из админки все прекрасно работает

    Добавлено через 23 часа 58 минут
    Саша Шеин, большое спасибо,работает. Спасибо большое так же Almazon! :)
     
    Последнее редактирование: 18 май 2015