X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fcl_client.qc;h=08a0f027b0ba6c86ef865d89ab5c4ec498c8d8a0;hb=23ab6599859e8a4b53501c8635b987bc1c33b771;hp=fac4314ca6e7b53c577b1182228f3ca612bc614e;hpb=8e6a61d0dd23c6cbd3dc98fb08b4d0f0c6c9477a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index fac4314ca..08a0f027b 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -439,7 +439,7 @@ void PutClientInServer (void) self.ammo_fuel = warmup_start_ammo_fuel; self.health = warmup_start_health; self.armorvalue = warmup_start_armorvalue; - self.weapons = warmup_start_weapons; + self.weapons = WARMUP_START_WEAPONS; } else { @@ -1610,7 +1610,11 @@ void player_regen (void) // if player rotted to death... die! if(self.health < 1) + { + if(self.vehicle) + vehicles_exit(VHEF_RELESE); self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0'); + } } if not(self.items & IT_UNLIMITED_WEAPON_AMMO) @@ -2133,6 +2137,7 @@ void SpectatorThink() self.flags |= FL_CLIENT | FL_NOTARGET; } +void vehicles_enter (entity pl, entity veh); void PlayerUseKey() { if not(IS_PLAYER(self)) @@ -2143,6 +2148,34 @@ void PlayerUseKey() vehicles_exit(VHEF_NORMAL); return; } + else if(autocvar_g_vehicles_enter) + { + if not(self.freezetag_frozen) + if(self.deadflag == DEAD_NO) + { + entity head, closest_target = world; + head = WarpZone_FindRadius(self.origin, autocvar_g_vehicles_enter_radius, TRUE); + + while(head) // find the closest acceptable target to enter + { + if(head.vehicle_flags & VHF_ISVEHICLE) + if(head.deadflag == DEAD_NO) + if not(head.owner) + { + if(closest_target) + { + if(vlen(self.origin - head.origin) < vlen(self.origin - closest_target.origin)) + { closest_target = head; } + } + else { closest_target = head; } + } + + head = head.chain; + } + + if(closest_target) { vehicles_enter(self, closest_target); return; } + } + } // a use key was pressed; call handlers MUTATOR_CALLHOOK(PlayerUseKey); @@ -2158,6 +2191,7 @@ Called every frame for each client before the physics are run .float usekeypressed; void() nexball_setstatus; .float items_added; +.float last_vehiclecheck; void PlayerPreThink (void) { WarpZone_PlayerPhysics_FixVAngle(); @@ -2236,6 +2270,26 @@ void PlayerPreThink (void) #endif MUTATOR_CALLHOOK(PlayerPreThink); + + if(autocvar_g_vehicles_enter) + if(time > self.last_vehiclecheck) + if(IS_PLAYER(self)) + if not(self.freezetag_frozen) + if not(self.vehicle) + if(self.deadflag == DEAD_NO) + { + entity veh; + for(veh = world; (veh = findflags(veh, vehicle_flags, VHF_ISVEHICLE)); ) + if(vlen(veh.origin - self.origin) < autocvar_g_vehicles_enter_radius) + if(veh.deadflag == DEAD_NO) + if not(veh.owner) + if(!veh.team || SAME_TEAM(self, veh)) + Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_VEHICLE_ENTER); + else if(autocvar_g_vehicles_steal) + Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_VEHICLE_ENTER_STEAL); + + self.last_vehiclecheck = time + 1; + } if(!self.cvar_cl_newusekeysupported) // FIXME remove this - it was a stupid idea to begin with, we can JUST use the button {