Иконка ресурса

kleuser

Участник
Сообщения
1,838
Реакции
732
  • Автор ресурса
  • #1
Пользователь kleuser разместил новый ресурс:

No Collision - Убирает столкновения между игроками.

Полностью убирает коллизию между игроками, даже между противоположной командой.

Код был взят из таймера Influx-Timer, и отвязан от ядра. Для возможности использовать на любом сервере.

Возможно будет работать в CS:Source и других играх. Нужно тестировать.

Автор кода: Influx

Узнать больше об этом ресурсе...
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
хм, и стоило ради 1 строчки тащить весь инклюд?
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>
#include <sdktools>

static const int COLLISION_TRIGGERONLY    = 2;
static const int COLLISION_DEFAULT        = 5;

bool g_bLate;

public Plugin myinfo =
{
    name = "No Collision",
    author = "kleuser(orig. code influx)",
    description = "Disables collision on players.",
    version = "1.0",
    url = "http://hlmod.ru/"
};

public APLRes AskPluginLoad2(Handle hPlugin, bool late, char[] szError, int error_len)
{
    g_bLate = late;
}

public void OnPluginStart()
{
    HookEvent("player_spawn", E_PlayerSpawn);

    if(g_bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i) && IsPlayerAlive(i))
                SetEntProp(i, Prop_Data, "m_CollisionGroup", COLLISION_TRIGGERONLY);
        }
    }
}

public void OnPluginEnd()
{
    for(int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && IsPlayerAlive(i))
            SetEntProp(i, Prop_Data, "m_CollisionGroup", COLLISION_DEFAULT);
    }
}

public void E_PlayerSpawn(Event event, const char[] szEvent, bool bImUselessWhyDoIExist)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(!client) return;

    if(GetClientTeam(client) < 2 || !IsPlayerAlive(client)) return;

    SetEntProp(client, Prop_Data, "m_CollisionGroup", COLLISION_TRIGGERONLY);
}
//// nocollision.sp
//
// Code size: 3800 bytes
// Data size: 2528 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 22712 bytes
//
// Compilation Time: 1 sec
// ---------------------------------

А ещё лучше сделать вот так:
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools>
#include <sdkhooks>

bool bLate;

public APLRes AskPluginLoad2(Handle hPlugin, bool late, char[] szError, int error_len)
{
    bLate = late;
}

public void OnPluginStart()
{
    if(bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i)) OnclientPutInServer(i);
        }
    }
}

public void OnclientPutInServer(int client)
{
    SDKHook(client, SDKHook_StartTouch, OnTouch);
}

public void OnTouch(int client, int ent)
{
    SetEntProp(client, Prop_Data, "m_CollisionGroup", (0 < ent <= MaxClients) ? 2 : 5);
}
//// noblock.sp
//
// Code size: 3328 bytes
// Data size: 2332 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 22044 bytes
//
// Compilation Time: 0,33 sec
// ---------------------------------
 

Вложения

  • nocollision.sp
    1.2 КБ · Просмотры: 11
  • nocollision.smx
    4.6 КБ · Просмотры: 16
  • noblock.sp
    611 байт · Просмотры: 9
  • noblock.smx
    4.1 КБ · Просмотры: 8
Последнее редактирование:

kleuser

Участник
Сообщения
1,838
Реакции
732
  • Автор ресурса
  • #4
@Grey83, ну я не шарю, вытянул плагин для себя, и решил поделиться со всеми т.к везде старые версии лежат.
 

kleuser

Участник
Сообщения
1,838
Реакции
732
  • Автор ресурса
  • #6
@-->KENT<--, старые версии все, а этот на новом синтаксисе под новый SM, вот и всё.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Kr1kuzya, хм, для SetEntProp(), который в entity.inc
Память фиговая. Всё равно инклюд при компиляции не будет использован.
--- Добавлено позже ---
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

bool bLate;

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
}

public void OnPluginStart()
{
    if(bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i)) OnclientPutInServer(i);
        }
    }
}

public void OnclientPutInServer(int client)
{
    SDKHook(client, SDKHook_StartTouch, OnTouch);
}

public void OnTouch(int client, int ent)
{
    SetEntProp(client, Prop_Data, "m_CollisionGroup", (0 < ent <= MaxClients && GetClientTeam(ent) > 1) ? 2 : 5);
}
//// noblock.sp
//
// Code size: 3392 bytes
// Data size: 2288 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 22064 bytes
//
// Compilation Time: 0,27 sec
// ---------------------------------
З.Ы. Добавил проверку команды (вроде в каком-то плагине был баг при касании наблюдателя)
 

Вложения

  • noblock.sp
    611 байт · Просмотры: 32
  • noblock.smx
    3.9 КБ · Просмотры: 40
Последнее редактирование:
D

Devouring code

Эти типа прохожу насквозь? или Аля подсадки без тряски?
 

skywalker

Участник
Сообщения
1,153
Реакции
263
@Kr1kuzya, хм, для SetEntProp(), который в entity.inc
Память фиговая. Всё равно инклюд при компиляции не будет использован.
--- Добавлено позже ---
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdkhooks>

bool bLate;

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
}

public void OnPluginStart()
{
    if(bLate)
    {
        for(int i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i)) OnclientPutInServer(i);
        }
    }
}

public void OnclientPutInServer(int client)
{
    SDKHook(client, SDKHook_StartTouch, OnTouch);
}

public void OnTouch(int client, int ent)
{
    SetEntProp(client, Prop_Data, "m_CollisionGroup", (0 < ent <= MaxClients && GetClientTeam(ent) > 1) ? 2 : 5);
}
З.Ы. Добавил проверку команды (вроде в каком-то плагине был баг при касании наблюдателя)
Периодически ноублок пропадает, после смены карты.
 

kleuser

Участник
Сообщения
1,838
Реакции
732
  • Автор ресурса
  • #15
Да и ноублока т. с кт. нет, можешь добавить?
не понял чет)) В моей версии ноублок работает на всех игроков, в ключая и противника. Если надо что бы через противника не проходил никто, есть стандартная команда mp_solid_teammates 0
и я не скриптер, я просто взял модуль, и сделал отдельным плагином.
 

skywalker

Участник
Сообщения
1,153
Реакции
263
не понял чет)) В моей версии ноублок работает на всех игроков, в ключая и противника. Если надо что бы через противника не проходил никто, есть стандартная команда mp_solid_teammates 0
и я не скриптер, я просто взял модуль, и сделал отдельным плагином.
Нет как раз хотелось, чтоб ноублок работал на всех игроков (союзников и противников)
 

kleuser

Участник
Сообщения
1,838
Реакции
732
  • Автор ресурса
  • #19
@skolobes, всё работает, это значит у тебя что-то.
у меня стоит на серве, и все норм
 
Сверху Снизу