void G_CheckCkitRepair( gentity_t *self ) { vec3_t viewOrigin, forward, end; trace_t tr; gentity_t *traceEnt; if ( self->client->ps.weaponTime > 0 || self->client->ps.stats[ STAT_MISC ] > 0 ) { return; } BG_GetClientViewOrigin( &self->client->ps, viewOrigin ); AngleVectors( self->client->ps.viewangles, forward, NULL, NULL ); VectorMA( viewOrigin, 100, forward, end ); trap_Trace( &tr, viewOrigin, NULL, NULL, end, self->s.number, MASK_PLAYERSOLID ); traceEnt = &g_entities[ tr.entityNum ]; if ( tr.fraction < 1.0f && traceEnt->spawned && traceEnt->health > 0 && traceEnt->s.eType == ET_BUILDABLE && traceEnt->buildableTeam == TEAM_HUMANS ) { const buildableAttributes_t *buildable; buildable = BG_Buildable( traceEnt->s.modelindex ); if ( traceEnt->health < buildable->health ) { if ( G_Heal( traceEnt, HBUILD_HEALRATE ) ) { G_AddEvent( self, EV_BUILD_REPAIR, 0 ); } else { G_AddEvent( self, EV_BUILD_REPAIRED, 0 ); } self->client->ps.weaponTime += BG_Weapon( self->client->ps.weapon )->repeatRate1; } } }
void env_afx_heal_touch( gentity_t *self, gentity_t *other, trace_t* ) { if ( !other->client ) { return; } if ( self->timestamp > level.time ) { return; } if ( self->spawnflags & 2 ) { self->timestamp = level.time + 1000; } else { self->timestamp = level.time + FRAMETIME; } G_Heal( other, self->damage ); }