Можно ли полностью убрать кровь на стороне сервера

Тема в разделе "Counter-Strike: Global Offensive", создана пользователем meladzevalerii, 1 май 2015.

  1. meladzevalerii

    meladzevalerii

    Сообщения:
    43
    Симпатии:
    2
    Добрый день.

    Можно ли полностью убрать кровь на стенах со стороны сервера в CSGO, чтобы у всех зашедших ее не было по умолчанию?

    Плагином или командами, не играет роли.
     
  2. DarklSide

    DarklSide

    Сообщения:
    678
    Симпатии:
    167
    meladzevalerii,
    Варианты:
    a. Изменение mp_decals (r_decals/r_decalstaticprops/r_decal_cullsize) - у клиента.

    b. Удаление env_blood -
    PHP:
    public OnEntityCreated(entity, const String:classname[])
    {
        
    decl bool:blood;
        
    blood StrContains(classname"env_blood"false) != -true:false;
        if(
    bloodRemoveEdict(entity);
    }
    c. Имитация -
    PHP:
    public OnClientPutInServer(client)
    {
        
    SDKHook(clientSDKHook_TraceAttackHook_TraceAttack);
    }
    public 
    Action:Hook_TraceAttack(client, &attacker, &inflictor, &Float:damage, &damagetype, &ammotypehitboxhitgroup)
    {
        if(
    IsValidEntity(client))
        {
            new 
    healthblood GetClientHealth(client) - RoundToNearest(damage);
            
    SetEntityHealth(clienthealthblood);
            return 
    Plugin_Handled;
        }
        return 
    Plugin_Continue;
    }
     
    Последнее редактирование: 1 май 2015
    san911 и meladzevalerii нравится это.
  3. meladzevalerii

    meladzevalerii

    Сообщения:
    43
    Симпатии:
    2
    DarklSide

    а в чем разница для конечного игрока между б и в
     
  4. dp909

    dp909

    Сообщения:
    13
    Симпатии:
    0
    И все же на стороне сервера можно как то кровь убрать, есть предположения?
     
  5. White Wolf

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

    Сообщения:
    1.186
    Симпатии:
    411
    dp909, а почитать выше не?
     
  6. dp909

    dp909

    Сообщения:
    13
    Симпатии:
    0
    White Wolf, читал и пробовал. В вариант у меня не работает, С работает, крови нет но игроки становятся не убиваемые..
     
  7. DarklSide

    DarklSide

    Сообщения:
    678
    Симпатии:
    167
    dp909, попробуй заменить
    PHP:
    return Plugin_Handled;
    на
    PHP:
    return Plugin_Changed;
    Сама имитация - в блокировнии дамага из вне, считать этот дамаг, и отнимать из hp.

    Получаем что крови нет, так как нет самого повреждения (выстрела).
     
  8. dp909

    dp909

    Сообщения:
    13
    Симпатии:
    0
    DarklSide, Теперь кровь появилась но режим "бога" остался.. под 65 000 hp у игрока.

    Добавлено через 22 часа 5 минут
     
    Последнее редактирование: 10 июн 2015
  9. DarklSide

    DarklSide

    Сообщения:
    678
    Симпатии:
    167
    dp909, обширно
    PHP:
    #pragma semicolon 1
    #include <sourcemod>
    #include <sdktools_tempents>
    static const String:bloods[][] = 
    {
        
    "Blood Stream",
        
    "Blood Sprite",
        
    "EffectDispatch"
        
    "World Decal"
    };
    public 
    OnPluginStart()
    {
        for (new 
    0sizeof(bloods); i++)
        {
            
    AddTempEntHook(bloods[i], Hook_bloods);
        }
    }
    public 
    Action:Hook_bloods(const String:te_name[], const Players[], numClientsFloat:delay)
    {
        return 
    Plugin_Stop;
    }
     
    Drumanid, dp909 и san911 нравится это.
  10. CaJI9pA

    CaJI9pA Олимпиец

    Сообщения:
    162
    Симпатии:
    36
    Может вопрос туповат, а куда все это прописывать?
     
  11. Drumanid

    Drumanid Дилетант

    Сообщения:
    567
    Симпатии:
    193
    PHP:
    #include <cstrike>
    #include <sourcemod>
    #include <sdkhooks>
    #include <smlib>

    //Compiler Options
    #pragma semicolon 1
    #pragma newdecls required

    ConVar g_cEnableNoBlood;
    ConVar g_cEnableNoBloodSplatter;
    ConVar g_cEnableNoBloodSplash;

    public 
    Plugin myinfo =
    {
        
    name "DisableBlood",
        
    author "shanapu,bara",
        
    description "Disable Blood on your server - all credits to bara",
        
    version "1.0",
        
    url "shanapu.de"
    };

    public 
    void OnPluginStart()
    {
        
    g_cEnableNoBlood CreateConVar("sm_blood_disable""0""Enable / Disable No Blood"_true0.0true1.0);
        
    g_cEnableNoBloodSplatter CreateConVar("sm_blood_disable_splatter""0""Enable / Disable No Blood Splatter"_true0.0true1.0);
        
    g_cEnableNoBloodSplash CreateConVar("sm_blood_disable_splash""0""Enable / Disable No Blood Splash"_true0.0true1.0);

        
    AddTempEntHook("EffectDispatch"TE_OnEffectDispatch);
        
    AddTempEntHook("World Decal"TE_OnWorldDecal);
    }

    public 
    Action TE_OnEffectDispatch(const char[] te_name, const Players[], int numClientsfloat delay)
    {
        
    int iEffectIndex TE_ReadNum("m_iEffectName");
        
    int nHitBox TE_ReadNum("m_nHitBox");
        
    char sEffectName[64];
       
        
    GetEffectName(iEffectIndexsEffectNamesizeof(sEffectName));
       
        if(
    g_cEnableNoBlood.BoolValue)
        {
            if(
    StrEqual(sEffectName"csblood"))
            {
                if(
    g_cEnableNoBloodSplatter.BoolValue)
                    return 
    Plugin_Handled;
            }
            if(
    StrEqual(sEffectName"ParticleEffect"))
            {
                if(
    g_cEnableNoBloodSplash.BoolValue)
                {
                    
    char sParticleEffectName[64];
                    
    GetParticleEffectName(nHitBoxsParticleEffectNamesizeof(sParticleEffectName));
                   
                    if(
    StrEqual(sParticleEffectName"impact_helmet_headshot") || StrEqual(sParticleEffectName"impact_physics_dust"))
                        return 
    Plugin_Handled;
                }
            }
        }
        return 
    Plugin_Continue;
    }

    public 
    Action TE_OnWorldDecal(const char[] te_name, const Players[], int numClientsfloat delay)
    {
        
    float vecOrigin[3];
        
    int nIndex TE_ReadNum("m_nIndex");
        
    char sDecalName[64];
       
        
    TE_ReadVector("m_vecOrigin"vecOrigin);
        
    GetDecalName(nIndexsDecalNamesizeof(sDecalName));
       
        if(
    g_cEnableNoBlood.BoolValue)
        {
            if(
    StrContains(sDecalName"decals/blood") == && StrContains(sDecalName"_subrect") != -1)
                if(
    g_cEnableNoBloodSplash.BoolValue)
                    return 
    Plugin_Handled;
        }
        return 
    Plugin_Continue;
    }

    stock int GetParticleEffectName(int indexchar[] sEffectNameint maxlen)
    {
        
    int table INVALID_STRING_TABLE;
       
        if (
    table == INVALID_STRING_TABLE)
            
    table FindStringTable("ParticleEffectNames");
       
        return 
    ReadStringTable(tableindexsEffectNamemaxlen);
    }

    stock int GetEffectName(int indexchar[] sEffectNameint maxlen)
    {
        
    int table INVALID_STRING_TABLE;
       
        if (
    table == INVALID_STRING_TABLE)
            
    table FindStringTable("EffectDispatch");
       
        return 
    ReadStringTable(tableindexsEffectNamemaxlen);
    }

    stock int GetDecalName(int indexchar[] sDecalNameint maxlen)
    {
        
    int table INVALID_STRING_TABLE;
       
        if (
    table == INVALID_STRING_TABLE)
            
    table FindStringTable("decalprecache");
       
        return 
    ReadStringTable(tableindexsDecalNamemaxlen);
    }
    Это на всякий, если верхний вариант работать не будет.
     

    Вложения:

    • noblood.smx
      Размер файла:
      13,4 КБ
      Просмотров:
      8
    • noblood.sp
      Размер файла:
      3 КБ
      Просмотров:
      7
  12. CaJI9pA

    CaJI9pA Олимпиец

    Сообщения:
    162
    Симпатии:
    36
    Всё прекрасно заработало) fps даже поднялся. Спасибо за предложения!