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

meladzevalerii

Участник
Сообщения
45
Реакции
4
Добрый день.

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

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

DarklSide

Участник
Сообщения
931
Реакции
468
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) != -1 ? true:false;
    if(blood) RemoveEdict(entity);
}
c. Имитация -
PHP:
public OnClientPutInServer(client)
{
    SDKHook(client, SDKHook_TraceAttack, Hook_TraceAttack);
}
public Action:Hook_TraceAttack(client, &attacker, &inflictor, &Float:damage, &damagetype, &ammotype, hitbox, hitgroup)
{
    if(IsValidEntity(client))
    {
        new healthblood = GetClientHealth(client) - RoundToNearest(damage);
        SetEntityHealth(client, healthblood);
        return Plugin_Handled;
    }
    return Plugin_Continue;
}
 
Последнее редактирование:

meladzevalerii

Участник
Сообщения
45
Реакции
4
DarklSide

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

dp909

Участник
Сообщения
13
Реакции
0
И все же на стороне сервера можно как то кровь убрать, есть предположения?
 

dp909

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

DarklSide

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

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

dp909

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

Добавлено через 22 часа 5 минут
 
Последнее редактирование:

DarklSide

Участник
Сообщения
931
Реакции
468
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 i = 0; i < sizeof(bloods); i++)
    {
        AddTempEntHook(bloods[i], Hook_bloods);
    }
}
public Action:Hook_bloods(const String:te_name[], const Players[], numClients, Float:delay)
{
    return Plugin_Stop;
}
 
C

CaJI9pA

Может вопрос туповат, а куда все это прописывать?
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
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", _, true, 0.0, true, 1.0);
    g_cEnableNoBloodSplatter = CreateConVar("sm_blood_disable_splatter", "0", "Enable / Disable No Blood Splatter", _, true, 0.0, true, 1.0);
    g_cEnableNoBloodSplash = CreateConVar("sm_blood_disable_splash", "0", "Enable / Disable No Blood Splash", _, true, 0.0, true, 1.0);

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

public Action TE_OnEffectDispatch(const char[] te_name, const Players[], int numClients, float delay)
{
    int iEffectIndex = TE_ReadNum("m_iEffectName");
    int nHitBox = TE_ReadNum("m_nHitBox");
    char sEffectName[64];
   
    GetEffectName(iEffectIndex, sEffectName, sizeof(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(nHitBox, sParticleEffectName, sizeof(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 numClients, float delay)
{
    float vecOrigin[3];
    int nIndex = TE_ReadNum("m_nIndex");
    char sDecalName[64];
   
    TE_ReadVector("m_vecOrigin", vecOrigin);
    GetDecalName(nIndex, sDecalName, sizeof(sDecalName));
   
    if(g_cEnableNoBlood.BoolValue)
    {
        if(StrContains(sDecalName, "decals/blood") == 0 && StrContains(sDecalName, "_subrect") != -1)
            if(g_cEnableNoBloodSplash.BoolValue)
                return Plugin_Handled;
    }
    return Plugin_Continue;
}

stock int GetParticleEffectName(int index, char[] sEffectName, int maxlen)
{
    int table = INVALID_STRING_TABLE;
   
    if (table == INVALID_STRING_TABLE)
        table = FindStringTable("ParticleEffectNames");
   
    return ReadStringTable(table, index, sEffectName, maxlen);
}

stock int GetEffectName(int index, char[] sEffectName, int maxlen)
{
    int table = INVALID_STRING_TABLE;
   
    if (table == INVALID_STRING_TABLE)
        table = FindStringTable("EffectDispatch");
   
    return ReadStringTable(table, index, sEffectName, maxlen);
}

stock int GetDecalName(int index, char[] sDecalName, int maxlen)
{
    int table = INVALID_STRING_TABLE;
   
    if (table == INVALID_STRING_TABLE)
        table = FindStringTable("decalprecache");
   
    return ReadStringTable(table, index, sDecalName, maxlen);
}

Это на всякий, если верхний вариант работать не будет.
 

Вложения

  • noblood.smx
    13.4 КБ · Просмотры: 87
  • noblood.sp
    3 КБ · Просмотры: 81
C

CaJI9pA

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

Yura7181

Участник
Сообщения
678
Реакции
594
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 i = 0; i < sizeof(bloods); i++)
    {
        AddTempEntHook(bloods[i], Hook_bloods);
    }
}
public Action:Hook_bloods(const String:te_name[], const Players[], numClients, Float:delay)
{
    return Plugin_Stop;
}
Здорово помог снизить лаги и поднять фпс. Большое спасибо!
 

SlavON

Добрая душа
Сообщения
1,582
Реакции
326
@Drumanid, чудо какое-то, сначала всё работало, потом перестало :blink:
--- Добавлено позже ---
@DarklSide, а в твоей версии не видно взрыва от HE гранат))
 
Последнее редактирование:

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
@Drumanid, чудо какое-то, сначала всё работало, потом перестало :blink:
9566583.png
 

Lima

Участник
Сообщения
159
Реакции
57
@Tony, попробуй этот:
PHP:
#include <sdktools>

public void OnPluginStart()
{
    AddTempEntHook("World Decal", OnWorldDecal);
}

public Action OnWorldDecal(const char[] te_name, const Players[], int numClients, float delay)
{
    float vecOrigin[3];
    int nIndex = TE_ReadNum("m_nIndex");
    char sDecalName[64];

    TE_ReadVector("m_vecOrigin", vecOrigin);
    GetDecalName(nIndex, sDecalName, sizeof(sDecalName));
   
    if(StrContains(sDecalName, "decals/blood") == 0 && StrContains(sDecalName, "_subrect") != -1)
    {
        return Plugin_Handled;
    }

    return Plugin_Continue;
}

stock int GetDecalName(int index, char[] sDecalName, int maxlen)
{
    int table = INVALID_STRING_TABLE;
   
    if (table == INVALID_STRING_TABLE)
        table = FindStringTable("decalprecache");
   
    return ReadStringTable(table, index, sDecalName, maxlen);
}
 

xek

Рыба клоун
Сообщения
1,652
Реакции
636
@Tony, попробуй этот:
PHP:
#include <sdktools>

public void OnPluginStart()
{
    AddTempEntHook("World Decal", OnWorldDecal);
}

public Action OnWorldDecal(const char[] te_name, const Players[], int numClients, float delay)
{
    float vecOrigin[3];
    int nIndex = TE_ReadNum("m_nIndex");
    char sDecalName[64];

    TE_ReadVector("m_vecOrigin", vecOrigin);
    GetDecalName(nIndex, sDecalName, sizeof(sDecalName));
  
    if(StrContains(sDecalName, "decals/blood") == 0 && StrContains(sDecalName, "_subrect") != -1)
    {
        return Plugin_Handled;
    }

    return Plugin_Continue;
}

stock int GetDecalName(int index, char[] sDecalName, int maxlen)
{
    int table = INVALID_STRING_TABLE;
  
    if (table == INVALID_STRING_TABLE)
        table = FindStringTable("decalprecache");
  
    return ReadStringTable(table, index, sDecalName, maxlen);
}
Всё ок, только на дверях (csgo - dust2) есть кровь
 

EaglEs

Гуру пробития усилений
Сообщения
924
Реакции
192
Ну это модели, а не браши...
 

Phrog

Участник
Сообщения
257
Реакции
98
На новом dust2 ни один из способов не работает.
 
Сверху Снизу