Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-05-24 12:49:33 +0000
committerStijn Buys <ingar@osirion.org>2008-05-24 12:49:33 +0000
commit1af2280ebabbd41c8b77747b6834fefbde0f0e80 (patch)
treeb7501865a383b6789ed755261eb9e1467dd73cd7 /src
parent1b8c92e759adf6605803d86931d349a06f963554 (diff)
Hail
Diffstat (limited to 'src')
-rw-r--r--src/core/gameserver.cc23
-rw-r--r--src/core/gameserver.h3
-rw-r--r--src/game/game.cc23
3 files changed, 45 insertions, 4 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc
index c18b1fa..687623e 100644
--- a/src/core/gameserver.cc
+++ b/src/core/gameserver.cc
@@ -113,6 +113,29 @@ void GameServer::abort()
server_running = false;
}
+Player *GameServer::find_player(std::string const search)
+{
+ std::istringstream searchstr(search);
+ int id = 0;
+ if (searchstr >> id) {
+ for (std::list<Player *>:: iterator it = players.begin(); it != players.end(); it++) {
+ if ((*it)->id() == id) {
+ return (*it);
+ }
+ }
+ }
+
+ if (search.size() <3)
+ return 0;
+
+ for (std::list<Player *>:: iterator it = players.begin(); it != players.end(); it++) {
+ if ((*it)->name().find(search) != std::string::npos)
+ return (*it);
+ }
+
+ return 0;
+}
+
void GameServer::list_players(Player *player)
{
using namespace std;
diff --git a/src/core/gameserver.h b/src/core/gameserver.h
index d7d6eb8..025ea4d 100644
--- a/src/core/gameserver.h
+++ b/src/core/gameserver.h
@@ -64,6 +64,9 @@ public:
/// a player sends a command to the game server
void exec(Player *player, std::string const &cmdline);
+ /// find the first player who's id or name matches the search string
+ Player *find_player(std::string const search);
+
std::list<Player *> players;
/*----- static ---------------------------------------------------- */
diff --git a/src/game/game.cc b/src/game/game.cc
index ea72ce0..79c9040 100644
--- a/src/game/game.cc
+++ b/src/game/game.cc
@@ -99,16 +99,31 @@ void func_buy(core::Player *player, std::string const &args)
core::server()->broadcast("^B" + player->name() + " ^Bpurchased " + aux::article(shipmodel->name()));
player->player_dirty = true;
} else {
- core::server()->send(player, "Usage: buy <" + helpstr + "^N>");
+ core::server()->send(player, "Usage: buy [" + helpstr + "^N]");
}
}
/// a player sends standard hails
void func_hail(core::Player *player, std::string const &args)
{
- core::server()->send(player, "You broadcast a standard standard hail.");
- core::server()->broadcast("^B" + player->name() + " ^Bbroadcasts a standard hail!", player);
- core::server()->broadcast_sound("com/hail");
+ std::string target;
+ std::istringstream is(args);
+ if (!(is >> target)) {
+ core::server()->send(player, "Usage: hail [player]");
+ return;
+ }
+
+ core::Player *targetplayer = core::server()->find_player(target);
+ if (!targetplayer) {
+ core::server()->send(player, "Player " + target + "^N not found.");
+ return;
+ }
+
+ core::server()->send(player, "^BYou hail " + targetplayer->name() + "^B.");
+ core::server()->send_sound(player, "com/hail");
+
+ core::server()->send(targetplayer, "^B" + player->name() + "^B hails you!");
+ core::server()->send_sound(targetplayer, "com/hail");
}
/*----- Game ------------------------------------------------------ */