if (check->v->movetype == MOVETYPE_PUSH
|| check->v->movetype == MOVETYPE_NONE
|| check->v->movetype == MOVETYPE_FOLLOW
- || check->v->movetype == MOVETYPE_NOCLIP)
+ || check->v->movetype == MOVETYPE_NOCLIP
+ || check->v->movetype == MOVETYPE_FAKEPUSH)
continue;
// if the entity is standing on the pusher, it will definitely be moved
}
else if (ent->v->movetype == MOVETYPE_BOUNCE)
{
+ float d;
ClipVelocity (ent->v->velocity, trace.plane.normal, ent->v->velocity, 1.5);
// LordHavoc: fixed grenades not bouncing when fired down a slope
- if (trace.plane.normal[2] > 0.7 && DotProduct(trace.plane.normal, ent->v->velocity) < 60)
+ d = DotProduct(trace.plane.normal, ent->v->velocity);
+ if (trace.plane.normal[2] > 0.7 && fabs(d) < 60)
{
ent->v->flags = (int)ent->v->flags | FL_ONGROUND;
ent->v->groundentity = EDICT_TO_PROG(trace.ent);
if (pr_global_struct->force_retouch)
SV_LinkEdict (ent, true); // force retouch even for stationary
- if (i <= svs.maxclients && i > 0)
+ if (i <= svs.maxclients)
{
- if (!svs.clients[i-1].spawned)
- continue;
- // connected slot
- // call standard client pre-think
- SV_CheckVelocity (ent);
- pr_global_struct->time = sv.time;
- pr_global_struct->self = EDICT_TO_PROG(ent);
- PR_ExecuteProgram (pr_global_struct->PlayerPreThink, "QC function PlayerPreThink is missing");
- SV_CheckVelocity (ent);
+ if (i > 0)
+ {
+ if (!svs.clients[i-1].spawned)
+ continue;
+ // connected slot
+ // call standard client pre-think
+ SV_CheckVelocity (ent);
+ pr_global_struct->time = sv.time;
+ pr_global_struct->self = EDICT_TO_PROG(ent);
+ PR_ExecuteProgram (pr_global_struct->PlayerPreThink, "QC function PlayerPreThink is missing");
+ SV_CheckVelocity (ent);
+ }
}
else if (sv_freezenonclients.integer)
- break;
+ continue;
// LordHavoc: merged client and normal entity physics
switch ((int) ent->v->movetype)
{
case MOVETYPE_PUSH:
+ case MOVETYPE_FAKEPUSH:
SV_Physics_Pusher (ent);
break;
case MOVETYPE_NONE:
break;
}
- if (i > 0 && i <= svs.maxclients && !ent->e->free)
+ if (i <= svs.maxclients && i > 0 && !ent->e->free)
{
SV_CheckVelocity (ent);
PR_ExecuteProgram ((func_t)(EndFrameQC - pr_functions), "");
}
- sv.time += sv.frametime;
+ if (!sv_freezenonclients.integer)
+ sv.time += sv.frametime;
}