Я может чтото путаю, но по описанию ты говоришь либо о грабе, либо о тех функциях которые зашивают в карту еще на начале ее "строительста", по типу ttt_ карт.У меня недостаточно прав, чтобы разместить это в другом канале, извините, я тут не шарю. Надо чтобы игроки могли физ пропы переносить, и когда проп поднимают, чтобы у него коллизия отключалась.
По факту можно модернизировать граб чтобы менял коллизию когда ты его поднялЯ может чтото путаю, но по описанию ты говоришь либо о грабе, либо о тех функциях которые зашивают в карту еще на начале ее "строительста", по типу ttt_ карт.
Тогда граб с прозрачным лазером.Просто чтобы как в Half-life 2 можно было носить на E. Мне пофиг каким способом и пофиг если немного криво будет, главное чтобы цена не овервысокая была
Мне нужен граб для всех игроков и только для физ пропов тогда, я за это деньги предлагаю, я тут тему создал, чтобы кто-то плагин написал, мне неважно через граб или чтоТогда граб с прозрачным лазером.
hookgrabrope ищи
Ну это понятно, поэтому я и создал темуПо факту можно модернизировать граб чтобы менял коллизию когда ты его поднял
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#pragma newdecls required
int iGrabEntity[MAXPLAYERS + 1];
public void OnClientPutInServer(int client)
{
iGrabEntity[client] = 0;
SDKHook(client, SDKHook_PreThink, OnPreThink);
}
public Action OnPlayerRunCmd(int client, int &buttons)
{
if(IsPlayerAlive(client) && buttons & IN_USE)
{
if(iGrabEntity[client] == 0)
{
float eyePos[3], eyeAng[3];
GetClientEyePosition(client, eyePos);
GetClientEyeAngles(client, eyeAng);
Handle trace = TR_TraceRayFilterEx(eyePos, eyeAng, MASK_SOLID, RayType_Infinite, TraceResult, client);
if(TR_DidHit(trace))
{
int entity = TR_GetEntityIndex(trace);
if(entity > MaxClients)
{
iGrabEntity[client] = entity;
}
}
}
}
else iGrabEntity[client] = 0;
}
public void OnPreThink(int client)
{
if(iGrabEntity[client] > 0)
{
if(IsValidEntity(iGrabEntity[client]))
{
float eyeAng[3], vecAng[3], vecPre[3], vecPost[3];
GetClientEyeAngles(client, eyeAng);
GetAngleVectors(eyeAng, vecAng, NULL_VECTOR, NULL_VECTOR);
GetClientEyePosition(client, vecPre);
vecPre[0] += vecAng[0] * 30.0;
vecPre[1] += vecAng[1] * 30.0;
vecPre[2] += vecAng[2] * 30.0;
GetEntPropVector(iGrabEntity[client], Prop_Send, "m_vecOrigin", vecAng);
SubtractVectors(vecPre, vecAng, vecPost);
ScaleVector(vecPost, 10.0);
TeleportEntity(iGrabEntity[client], NULL_VECTOR, NULL_VECTOR, vecPost);
}
else
{
iGrabEntity[client] = 0;
}
}
}
public bool TraceResult(int entity, int mask, int data)
{
if(entity == data)
{
return false;
}
else
{
char classname[64];
GetEntityClassname(entity, classname, sizeof(classname));
if(strncmp("prop_", classname, 5) == 0)
{
return true;
}
}
return false;
}
И чё мне делать с этим?не проверял. на удерживание кнопки E должно работать.
C++:#include <sourcemod> #include <sdktools> #include <sdkhooks> #pragma newdecls required int iGrabEntity[MAXPLAYERS + 1]; public void OnClientPutInServer(int client) { iGrabEntity[client] = 0; SDKHook(client, SDKHook_PreThink, OnPreThink); } public Action OnPlayerRunCmd(int client, int &buttons) { if(IsPlayerAlive(client) && buttons & IN_USE) { if(iGrabEntity[client] == 0) { float eyePos[3], eyeAng[3]; GetClientEyePosition(client, eyePos); GetClientEyeAngles(client, eyeAng); Handle trace = TR_TraceRayFilterEx(eyePos, eyeAng, MASK_SOLID, RayType_Infinite, TraceResult, client); if(TR_DidHit(trace)) { int entity = TR_GetEntityIndex(trace); if(entity > MaxClients) { iGrabEntity[client] = entity; } } } } else iGrabEntity[client] = 0; } public void OnPreThink(int client) { if(iGrabEntity[client] > 0) { if(IsValidEntity(iGrabEntity[client])) { float eyeAng[3], vecAng[3], vecPre[3], vecPost[3]; GetClientEyeAngles(client, eyeAng); GetAngleVectors(eyeAng, vecAng, NULL_VECTOR, NULL_VECTOR); GetClientEyePosition(client, vecPre); vecPre[0] += vecAng[0] * 30.0; vecPre[1] += vecAng[1] * 30.0; vecPre[2] += vecAng[2] * 30.0; GetEntPropVector(iGrabEntity[client], Prop_Send, "m_vecOrigin", vecAng); SubtractVectors(vecPre, vecAng, vecPost); ScaleVector(vecPost, 10.0); TeleportEntity(iGrabEntity[client], NULL_VECTOR, NULL_VECTOR, vecPost); } else { iGrabEntity[client] = 0; } } } public bool TraceResult(int entity, int mask, int data) { if(entity == data) { return false; } else { char classname[64]; GetEntityClassname(entity, classname, sizeof(classname)); if(strncmp("prop_", classname, 5) == 0) { return true; } } return false; }
Как чё? Скомпилировать и поставить на серверИ чё мне делать с этим?
Спасибо хоть за это, но тут проблема, ходить нельзя с грабом, я бы хотел, чтобы ходить можно было именно с предметом прям, как в Халф лайф 2не проверял. на удерживание кнопки E должно работать.
C++:#include <sourcemod> #include <sdktools> #include <sdkhooks> #pragma newdecls required int iGrabEntity[MAXPLAYERS + 1]; public void OnClientPutInServer(int client) { iGrabEntity[client] = 0; SDKHook(client, SDKHook_PreThink, OnPreThink); } public Action OnPlayerRunCmd(int client, int &buttons) { if(IsPlayerAlive(client) && buttons & IN_USE) { if(iGrabEntity[client] == 0) { float eyePos[3], eyeAng[3]; GetClientEyePosition(client, eyePos); GetClientEyeAngles(client, eyeAng); Handle trace = TR_TraceRayFilterEx(eyePos, eyeAng, MASK_SOLID, RayType_Infinite, TraceResult, client); if(TR_DidHit(trace)) { int entity = TR_GetEntityIndex(trace); if(entity > MaxClients) { iGrabEntity[client] = entity; } } } } else iGrabEntity[client] = 0; } public void OnPreThink(int client) { if(iGrabEntity[client] > 0) { if(IsValidEntity(iGrabEntity[client])) { float eyeAng[3], vecAng[3], vecPre[3], vecPost[3]; GetClientEyeAngles(client, eyeAng); GetAngleVectors(eyeAng, vecAng, NULL_VECTOR, NULL_VECTOR); GetClientEyePosition(client, vecPre); vecPre[0] += vecAng[0] * 30.0; vecPre[1] += vecAng[1] * 30.0; vecPre[2] += vecAng[2] * 30.0; GetEntPropVector(iGrabEntity[client], Prop_Send, "m_vecOrigin", vecAng); SubtractVectors(vecPre, vecAng, vecPost); ScaleVector(vecPost, 10.0); TeleportEntity(iGrabEntity[client], NULL_VECTOR, NULL_VECTOR, vecPost); } else { iGrabEntity[client] = 0; } } } public bool TraceResult(int entity, int mask, int data) { if(entity == data) { return false; } else { char classname[64]; GetEntityClassname(entity, classname, sizeof(classname)); if(strncmp("prop_", classname, 5) == 0) { return true; } } return false; }