Есть функция подталкивания:
Код
Push(client)
{
decl Float:EyeAngles[3];
GetClientEyeAngles(client, EyeAngles);
decl Float:Push[3];
Push[0] = (FloatMul(50.0, Cosine(DegToRad(EyeAngles[1]))));
Push[1] = (FloatMul(50.0, Sine(DegToRad(EyeAngles[1]))));
Push[2] = (FloatMul(50.0, Sine(DegToRad(EyeAngles[0]))));
ScaleVector(Push, 20.0);
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, Push);
}
Push - вектор ускорения. В ScaleVector можно изменить силу (там, где 20.0). Чем больше, тем сильнее толчок. Если ставить отрицательное значение, то толкать должно назад, скорее всего.
Еще есть функция отталкивания игрока от определенной точки в определенном радиусе. Если игрок находится в пределах радиуса, то оттолкнется.
Код
stock Push(client, Float:S_Center[3], Float:Radius, Float:Power)
{
new Float:EntPos[3];
if(IsClientInGame(client) && IsPlayerAlive(client))
{
GetClientAbsOrigin(client, EntPos);
if((GetVectorDistance(S_Center, EntPos) <= Radius))
{
new Float:NewVel[3];
MakeVectorFromPoints(S_Center, EntPos, NewVel);
NormalizeVector(NewVel, NewVel);
ScaleVector(NewVel, Power);
TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, NewVel);
}
}
}
client - индекс клиента.
S_Center - точка, от которой будем отталкивать
Radius - Радиус отталкивания. Если игрок попадает в него, то оттолкнется.
Power - сила отталкивания.
//Спасибо хвостегу. Его функция.
P.S. Если поменять местами S_Center и EntPos в MakeVectorFromPoints, то будет не отталкивать, а притягивать.