/* ================ ClientEvents Events will be passed on to the clients for presentation, but any server game effects are handled here ================ */ void ClientEvents(gentity_t *ent, int oldEventSequence) { int i; gclient_t *client; int damage; client = ent->client; if (oldEventSequence < client->ps.eventSequence - MAX_EVENTS) { oldEventSequence = client->ps.eventSequence - MAX_EVENTS; } for (i = oldEventSequence ; i < client->ps.eventSequence ; ++i) { int event = client->ps.events[i & (MAX_EVENTS - 1)]; switch (event) { case EV_FALL_NDIE: case EV_FALL_DMG_10: case EV_FALL_DMG_15: case EV_FALL_DMG_25: case EV_FALL_DMG_50: // rain - VectorClear() used to be done here whenever falling // damage occured, but I moved it to bg_pmove where it belongs. if (ent->s.eType != ET_PLAYER) { break; // not in the player model } if (event == EV_FALL_NDIE) { damage = 9999; } else if (event == EV_FALL_DMG_50) { damage = 50; ent->client->ps.pm_time = 1000; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; } else if (event == EV_FALL_DMG_25) { damage = 25; ent->client->ps.pm_time = 250; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; } else if (event == EV_FALL_DMG_15) { damage = 15; ent->client->ps.pm_time = 1000; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; } else if (event == EV_FALL_DMG_10) { damage = 10; ent->client->ps.pm_time = 1000; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; } else { damage = 5; // never used } ent->pain_debounce_time = level.time + 200; // no normal pain sound G_Damage(ent, NULL, NULL, NULL, NULL, damage, 0, MOD_FALLING); break; case EV_FIRE_WEAPON_MG42: mg42_fire(ent); break; case EV_FIRE_WEAPON_MOUNTEDMG42: mountedmg42_fire(ent); break; case EV_FIRE_WEAPON_AAGUN: aagun_fire(ent); break; case EV_FIRE_WEAPON: case EV_FIRE_WEAPONB: case EV_FIRE_WEAPON_LASTSHOT: FireWeapon(ent); break; default: break; } } }
/* ================ ClientEvents Events will be passed on to the clients for presentation, but any server game effects are handled here ================ */ void ClientEvents( gentity_t *ent, int oldEventSequence ) { int i; int event; gclient_t *client; int damage; vec3_t dir; client = ent->client; if ( oldEventSequence < client->ps.eventSequence - MAX_EVENTS ) { oldEventSequence = client->ps.eventSequence - MAX_EVENTS; } for ( i = oldEventSequence ; i < client->ps.eventSequence ; i++ ) { event = client->ps.events[ i & ( MAX_EVENTS - 1 ) ]; switch ( event ) { case EV_FALL_NDIE: //case EV_FALL_SHORT: case EV_FALL_DMG_10: case EV_FALL_DMG_15: case EV_FALL_DMG_25: //case EV_FALL_DMG_30: case EV_FALL_DMG_50: //case EV_FALL_DMG_75: if ( ent->s.eType != ET_PLAYER ) { break; // not in the player model } if ( g_dmflags.integer & DF_NO_FALLING ) { break; } if ( event == EV_FALL_NDIE ) { damage = 9999; } else if ( event == EV_FALL_DMG_50 ) { damage = 50; ent->client->ps.pm_time = 1000; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; VectorClear( ent->client->ps.velocity ); } else if ( event == EV_FALL_DMG_25 ) { damage = 25; ent->client->ps.pm_time = 250; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; VectorClear( ent->client->ps.velocity ); } else if ( event == EV_FALL_DMG_15 ) { damage = 15; ent->client->ps.pm_time = 1000; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; VectorClear( ent->client->ps.velocity ); } else if ( event == EV_FALL_DMG_10 ) { damage = 10; ent->client->ps.pm_time = 1000; ent->client->ps.pm_flags |= PMF_TIME_KNOCKBACK; VectorClear( ent->client->ps.velocity ); } else { damage = 5; // never used } VectorSet( dir, 0, 0, 1 ); ent->pain_debounce_time = level.time + 200; // no normal pain sound G_Damage( ent, NULL, NULL, NULL, NULL, damage, 0, MOD_FALLING ); break; // JPW NERVE case EV_TESTID1: case EV_TESTID2: case EV_ENDTEST: break; // jpw case EV_FIRE_WEAPON_MG42: mg42_fire( ent ); break; case EV_FIRE_WEAPON: case EV_FIRE_WEAPONB: case EV_FIRE_WEAPON_LASTSHOT: FireWeapon( ent ); break; //----(SA) modified case EV_USE_ITEM1: // ( HI_MEDKIT ) medkit case EV_USE_ITEM2: // ( HI_WINE ) wine case EV_USE_ITEM3: // ( HI_SKULL ) skull of invulnerable case EV_USE_ITEM4: // ( HI_WATER ) protection from drowning case EV_USE_ITEM5: // ( HI_ELECTRIC ) protection from electric attacks case EV_USE_ITEM6: // ( HI_FIRE ) protection from fire attacks case EV_USE_ITEM7: // ( HI_STAMINA ) restores fatigue bar and sets "nofatigue" for a time period case EV_USE_ITEM8: // ( HI_BOOK1 ) case EV_USE_ITEM9: // ( HI_BOOK2 ) case EV_USE_ITEM10: // ( HI_BOOK3 ) UseHoldableItem( ent, event - EV_USE_ITEM0 ); break; //----(SA) end default: break; } } }