Primo
типа серьёзный тип
- Сообщения
- 1,532
- Реакции
- 759
Имется простой код граба, который, возможно, с ошибками.
Нужно отключить по команде Ungrab повторяющийся таймер.
Я не уверен в том, что KillTimer останавливает таймер, т.к. после нескольких использований граба начинают подлагивать модели, точнее начинают дёргаться ноги в стороны.
Нужно отключить по команде Ungrab повторяющийся таймер.
Я не уверен в том, что KillTimer останавливает таймер, т.к. после нескольких использований граба начинают подлагивать модели, точнее начинают дёргаться ноги в стороны.
PHP:
#include <sourcemod>
#include <sdktools>
#include <smlib>
#include <sdkhooks>
new Float:difference[MAXPLAYERS+1][3];
new Handle:Timer1;
new entitygrabbed[MAXPLAYERS+1];
public Plugin:myinfo =
{
name = "dP_BaseBuilder",
author = "Primo",
description = "Other Mod",
version = "1.1",
}
public OnPluginStart()
{
RegConsoleCmd("grab", OnGrab);
RegConsoleCmd("ungrab", OnUngrab);
}
public Action:OnUngrab(client, args)
{
new Float:vec[3] = {0.1, 0.1, 0.1};
TeleportEntity(entitygrabbed[client], NULL_VECTOR, NULL_VECTOR, vec);
entitygrabbed[client] = -1;
KillTimer(Timer1);
}
stock TraceClientViewEntity(this)
{
new Float:m_vecOrigin[3];
new Float:m_angRotation[3];
GetClientEyePosition(this, m_vecOrigin);
GetClientEyeAngles(this, m_angRotation);
new Handle:tr = TR_TraceRayFilterEx(m_vecOrigin, m_angRotation, MASK_VISIBLE, RayType_Infinite, TRDontHitSelf, this);
new pEntity = -1;
if (TR_DidHit(tr))
{
pEntity = TR_GetEntityIndex(tr);
CloseHandle(tr);
return pEntity;
}
CloseHandle(tr);
return -1;
}
public bool:TRDontHitSelf(entity, mask, any:data)
{
if (entity == data) return false;
return true;
}
public Action:OnGrab(client, args)
{
if(GetUserFlagBits(client) & ADMFLAG_KICK)
{
new ent = TraceClientViewEntity(client);
new String:clEnt[50];
GetEntityClassname(ent, clEnt, sizeof(clEnt));
decl Float:playerAng[3];
decl Float:propAng[3];
GetClientEyeAngles(client, playerAng);
Entity_GetAbsAngles(ent, propAng);
entitygrabbed[client] = ent;
SubtractVectors(playerAng, propAng, difference[client]);
Timer1 = CreateTimer(0.1, OnPreThinkS, client, TIMER_REPEAT);
}
}
public Action:OnPreThinkS(Handle:timer, any:client)
{
new entity = entitygrabbed[client];
new Float:clvec[3],Float:clpos[3], Float:entpos[3], Float:clang[3];
GetClientAbsOrigin(client, clpos);
GetClientEyeAngles(client, clang);
GetAngleVectors(clang, clvec, NULL_VECTOR, NULL_VECTOR);
// update object
clpos[0] += clvec[0]*100;
clpos[1] += clvec[1]*100;
clpos[2] += clvec[2]*100;
Entity_GetAbsOrigin(entity, entpos);
SubtractVectors(clpos, clvec, entpos);
ScaleVector(entpos, 260.0);
TeleportEntity(entity, clpos, clang, NULL_VECTOR);
}