Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/base')
-rw-r--r--src/game/base/racetrack.cc39
-rw-r--r--src/game/base/racetrack.h1
2 files changed, 29 insertions, 11 deletions
diff --git a/src/game/base/racetrack.cc b/src/game/base/racetrack.cc
index 67b8327..fd5d339 100644
--- a/src/game/base/racetrack.cc
+++ b/src/game/base/racetrack.cc
@@ -29,7 +29,7 @@ CheckPoint::CheckPoint(RaceTrack *parent)
die();
}
- set_flag(core::Entity::NonSolid);
+ //set_flag(core::Entity::NonSolid);
}
CheckPoint::~CheckPoint()
@@ -44,11 +44,13 @@ RaceTrack::RaceTrack() : EntityDynamic()
track_player = 0;
track_racestart = 0;
track_checkpointtime = 0;
+ track_record = 0;
+
entity_moduletypeid = race_enttype;
set_state(core::Entity::NoPower);
set_flag(core::Entity::Dockable);
- set_flag(core::Entity::NonSolid);
+ //set_flag(core::Entity::NonSolid);
}
RaceTrack::~RaceTrack()
@@ -104,7 +106,7 @@ void RaceTrack::func_dock(core::Entity *entity)
entity_timer = 5.0f;
std::string message("^B" + track_player->name() + " ^Bactivated the race! Race starts in 5...");
- core::server()->broadcast(message);
+ core::server()->broadcast(zone(), message);
track_player->set_mission_target(this);
return;
}
@@ -140,7 +142,7 @@ void RaceTrack::frame(float seconds)
if (math::distance(location(), player->control()->location()) > radius()) {
std::string message("^BNo cheating!");
- core::server()->broadcast(message);
+ core::server()->broadcast(zone(), message);
reset_race();
return;
}
@@ -152,14 +154,14 @@ void RaceTrack::frame(float seconds)
if (entity_timer > 0) {
std::stringstream msgstr;
msgstr << "^B" << entity_timer << "...";
- core::server()->broadcast(msgstr.str());
+ core::server()->broadcast(zone(), msgstr.str());
track_racestart = core::server()->time();
} else {
for (CheckPoints::iterator cpit = track_checkpoints.begin(); cpit != track_checkpoints.end(); ++cpit) {
(*cpit)->set_state(core::Entity::NoPower);
}
std::string message("^BGo!");
- core::server()->broadcast(message);
+ core::server()->broadcast(zone(), message);
track_racestart = core::server()->time();
track_checkpointtime = core::server()->time() + 15.0f;
@@ -174,7 +176,7 @@ void RaceTrack::frame(float seconds)
if (core::server()->time() > track_checkpointtime) {
std::string message("^BToo slow, race lost!");
- core::server()->broadcast(message);
+ core::server()->broadcast(zone(), message);
reset_race();
return;
@@ -187,7 +189,7 @@ void RaceTrack::frame(float seconds)
if (next_checkpoint != track_checkpoints.end()) {
std::string message("^BCheckpoint!");
- core::server()->broadcast(message);
+ core::server()->broadcast(zone(), message);
track_checkpointtime = core::server()->time() + 15.0f;
(*track_checkpoint)->set_state(core::Entity::NoPower);
track_checkpoint++;
@@ -196,12 +198,25 @@ void RaceTrack::frame(float seconds)
} else {
+ float player_time = core::server()->time() - track_racestart;
+ const bool new_record = ((track_record > 0.0f) && (player_time > 0.0f) && (player_time < track_record));
+
std::stringstream msgstr;
- msgstr << "^BRace completed in " << core::server()->time() - track_racestart << " seconds!";
- core::server()->broadcast(msgstr.str());
-
+ msgstr << "^B" << player->name() << "completed the race in " << player_time << " seconds";
+
+ if (new_record) {
+ msgstr << ", a new record!";
+ } else {
+ msgstr << ".";
+ }
+ core::server()->broadcast(zone(), msgstr.str());
+
// prize money
unsigned long the_prize = (unsigned long) floorf(10000.0f / (core::server()->time() - track_racestart));
+ if (track_record && new_record) {
+ the_prize += 1000.0f * (track_record - player_time);
+ }
+
player->add_credits(the_prize);
msgstr.clear();
msgstr.str("");
@@ -209,6 +224,8 @@ void RaceTrack::frame(float seconds)
player->send(msgstr.str());
player->sound("game/buy");
+ if (new_record)
+ track_record = player_time;
reset_race();
}
}
diff --git a/src/game/base/racetrack.h b/src/game/base/racetrack.h
index da810a3..705039a 100644
--- a/src/game/base/racetrack.h
+++ b/src/game/base/racetrack.h
@@ -57,6 +57,7 @@ private:
float track_racestart;
float track_checkpointtime;
CheckPoints::iterator track_checkpoint;
+ float track_record;
};