нанесение урона, скрипт.

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

  1. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>

    new bool:bAntiknife;

    public 
    OnPluginStart()
    {
        for(new 
    1<= MaxClientsi++)
        {
            if(
    IsClientValid(i))
            {
                
    SDKHook(iSDKHook_TraceAttackOnTraceAttack);
            }
        }
        
        
    RegConsoleCmd("sm_antiknife"AntiKnife);
        
    RegConsoleCmd("sm_anti_knife"AntiKnife);
        
    RegConsoleCmd("sm_anti-knife"AntiKnife);
    }

    public 
    OnClientPutInServer(client)
    {
        
    SDKHook(clientSDKHook_TraceAttackOnTraceAttack);
    }

    public 
    Action:AntiKnife(clientargs)
    {
        
    bAntiknife true;
    }

    public 
    Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotypehitboxhitgroup)
    {
        if(
    bAntiknife == true)
        {
            if(
    IsClientValid(attacker) && IsClientValid(victim))
            {
                
    decl String:sWeapon[32];
                
    GetClientWeapon(attackersWeaponsizeof(sWeapon));
                if(
    StrEqual(sWeapon[7], "knife"false))
                {
                    return 
    Plugin_Handled;
                }
            }
            
            return 
    Plugin_Continue;
        }


    stock bool:IsClientValid(client)
    {
        if(
    client && client <= MaxClients && IsClientInGame(client))
        {
            return 
    true;
        }
        return 
    false;
    }
    Что не так? Выдает ошибку при компиляции.
    Оффтоп
     
  2. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    Hejter,
    Код:
    #pragma semicolon 1
    
    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>
    
    new bool:bAntiknife;
    
    public OnPluginStart()
    {
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientValid(i))
            {
                SDKHook(i, SDKHook_TraceAttack, OnTraceAttack);
            }
        }
        
        RegConsoleCmd("sm_antiknife", AntiKnife);
        RegConsoleCmd("sm_anti_knife", AntiKnife);
        RegConsoleCmd("sm_anti-knife", AntiKnife);
    }
    
    public OnClientPutInServer(client)
    {
        SDKHook(client, SDKHook_TraceAttack, OnTraceAttack);
    }
    
    public Action:AntiKnife(client, args)
    {
        bAntiknife = true;
    }
    
    public Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
    {
        if(bAntiknife == true)
        {
            if(IsClientValid(attacker) && IsClientValid(victim))
            {
                decl String:sWeapon[32];
                GetClientWeapon(attacker, sWeapon, sizeof(sWeapon));
                if(StrEqual(sWeapon[7], "knife", false))
                {
                    return Plugin_Handled;
                }
            }
        }
        [B]return Plugin_Continue;[/B]
    } 
    
    stock bool:IsClientValid(client)
    {
        if(client > 0 && client <= MaxClients && IsClientInGame(client))
        {
            return true;
        }
        return false;
    }
     
    Hejter, BatyaMedic и iamdss нравится это.
  3. AlmazON

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

    Сообщения:
    4.511
    Симпатии:
    1.963
    Оффтоп
    Любой один игрок прописал и всё, на всю "жизнь" сервера?!
    Кака.
     
    TWRP нравится это.
  4. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Возможно :)
     
  5. AlmazON

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

    Сообщения:
    4.511
    Симпатии:
    1.963
    Hejter, не помню, что делает SDKHook_TraceAttack, поэтому может быть не верно исполнение кода:
    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>
    #include <sdkhooks>

    new bool:bAntiknife[MAXPLAYERS+1];

    public 
    OnPluginStart()
    {
        for(new 
    1<= MaxClientsi++)
        {
            if(
    IsClientValid(i))
            {
                
    SDKHook(iSDKHook_TraceAttackOnTraceAttack);
            }
        }
        
        
    RegConsoleCmd("sm_antiknife"AntiKnife);
        
    RegConsoleCmd("sm_anti_knife"AntiKnife);
        
    RegConsoleCmd("sm_anti-knife"AntiKnife);
    }

    public 
    OnClientPutInServer(client)
    {
        
    SDKHook(clientSDKHook_TraceAttackOnTraceAttack);
        
    bAntiknife[client] = false;
    }

    public 
    Action:AntiKnife(clientargs)
    {
        
    bAntiknife[client] = !bAntiknife[client];
    }

    public 
    Action:OnTraceAttack(victim, &attacker, &inflictor, &Float:damage, &damagetype, &ammotypehitboxhitgroup)
    {
        if(
    bAntiknife[victim])
        {
            if(
    attacker <= MaxClients)
            {
                
    decl String:sWeapon[13];
                
    GetClientWeapon(attackersWeapon13);
                if(
    strcmp(sWeapon[7], "knife") == 0)
                {
                    return 
    Plugin_Handled;
                }
            }
        }
        return 
    Plugin_Continue;
    }
    Команда теперь не только включает, но и отключает при повторном вводе.
    Теперь поддерживает почти все ножи CS:GO (допишешь, если не CS:S).
     
    TWRP и Hejter нравится это.
  6. Саша Шеин

    Саша Шеин

    Сообщения:
    1.259
    Симпатии:
    191
    AlmazON, а SDKUnHook не нужен?
     
  7. AlmazON

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

    Сообщения:
    4.511
    Симпатии:
    1.963
    Не обязателен. Зависит от задачи.
     
    TWRP нравится это.
  8. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Оффтоп
     
  9. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Оффтоп

    Добавлено через 32 минуты
    Как прикрутить файл перевода?
    PHP:
    public Action:AntiKnife(clientargs)
    {
        
    bAntiknife[client] = !bAntiknife[client];
     if (!
    bAntiknife[client])
      
    PrintToChat(client"[Anti-Knife] %t""AntiKnifeEnable");
     else
      
    PrintToChat(client"[Anti-Knife] %t""AntiKnifeDisable");
     return 
    Plugin_Handled
    }

    PHP:
    public Action:AntiKnife(clientargs)
    {
        
    bAntiknife[client] = !bAntiknife[client];
      
    PrintToChat(client"[Anti-Knife] %t""AntiKnifeEnable");
     else
      
    PrintToChat(client"[Anti-Knife] %t""AntiKnifeDisable");
     return 
    Plugin_Handled
    }

    Что я хочу сделать. Чтобы оповещало в чате, что клиент установил защиту от ножа.
     
    Последнее редактирование: 4 июл 2015
  10. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.187
    Симпатии:
    413
    Hejter, создаешь файл в addons/sourcemod/translations с названием anti-knife.phrases.txt
    Далее пишешь в OnPluginStart()
    PHP:
    LoadTranslations("anti-knife.phrases");
    Далее используешь свой код #1. После чего редактируешь anti-knife.phrases.txt таким форматом:
    Код:
    "Phrases"
    {
           "AntiKnifeEnable"
           {
                 "en"         "Фраза включения на англ."
                 "ru"         "Фраза включения на рус."
           }
           "AntiKnifeDisable"
           {
                 "en"         "Фраза выключения на англ."
                 "ru"         "Фраза выключения на рус."
           }
    }
     
  11. AlmazON

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

    Сообщения:
    4.511
    Симпатии:
    1.963
    PHP:
    public Action:AntiKnife(clientargs

     
    PrintToChat(client"[Anti-Knife] %t", (bAntiknife[client] = !bAntiknife[client]) ? "AntiKnifeEnable":"AntiKnifeDisable"); 
     return 
    Plugin_Handled;  
    Только условься не прописывать команды в консоли, либо добавь проварку if(client).
    И при включении будет писать, что выключено...
     
    TWRP и Hejter нравится это.
  12. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Это то я знаю, что и как создать, я не знал какой именно код, правильный.