diff options
Diffstat (limited to 'src/game')
-rw-r--r-- | src/game/base/game.cc | 118 | ||||
-rw-r--r-- | src/game/base/game.h | 10 |
2 files changed, 81 insertions, 47 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index 40c7c28..f110962 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -11,6 +11,7 @@ #include "auxiliary/functions.h" #include "core/gameserver.h" #include "core/parser.h" +#include "core/range.h" #include "core/descriptions.h" #include "filesystem/filesystem.h" #include "filesystem/inifile.h" @@ -114,34 +115,6 @@ void Game::func_spectate(core::Player *player, std::string const &args) player->set_view(0); } -// a player sends standard hails -void Game::func_hail(core::Player *player, std::string const &args) -{ - if (player->mute()) { - player->send("^WYou have been muted"); - return; - } - - std::string target; - std::istringstream is(args); - if (!(is >> target)) { - player->send("Usage: hail [player]"); - return; - } - - core::Player *targetplayer = core::server()->find_player(target); - if (!targetplayer) { - player->send("Player " + target + "^N not found"); - return; - } - - player->send("^BYou hail " + targetplayer->name()); - player->sound("com/hail"); - - targetplayer->send("^B" + player->name() + "^B hails you"); - targetplayer->sound("com/hail"); -} - // a player actives the hyperspace jump drive on his ship void Game::func_jump(core::Player *player, std::string const &args) { @@ -165,7 +138,7 @@ void Game::func_impulse(core::Player *player, std::string const &args) } // a player sends a docking request -void Game::func_dock(core::Player *player, core::Entity *entity) +void Game::func_target_dock(core::Player *player, core::Entity *entity) { if (!player->control()) return; @@ -214,12 +187,12 @@ void Game::func_dock(core::Player *player, core::Entity *entity) return; if (entity->moduletype() == jumpgate_enttype) { - // jumpgates their own docking function + // jumpgates have their own docking function JumpGate *jumpgate = static_cast<JumpGate *>(entity); jumpgate->func_dock(ship); return; - } else { + } else { ship->get_location().assign(entity->location()); ship->set_state(core::Entity::Docked); ship->reset(); @@ -235,6 +208,64 @@ void Game::func_dock(core::Player *player, core::Entity *entity) } } +// a player sends a standard hail +void Game::func_target_hail(core::Player *player, core::Entity *entity) +{ + // TODO spam protection + if (!entity) + return; + + if (!player->control()) + return; + + if (player->control()->zone() != entity->zone()) + return; + + if (player->mute()) { + player->send("^WYou have been muted"); + return; + } + + core::Player *target = (entity->type() == core::Entity::Controlable ? static_cast<core::EntityControlable *>(entity)->owner() : 0 ); + if (!target) + return; + + if (math::distance(player->control()->location(), entity->location()) > core::range::fxdistance) { + player->send("^WTarget " + target->name() + " ^Wout of range"); + } + player->send("^BYou hail " + target->name()); + player->sound("com/hail"); + + target->send("^B" + player->name() + "^B hails you"); + target->sound("com/hail"); +} + +// a player sends a trade request +void Game::func_target_trade(core::Player *player, core::Entity *entity) +{ + if (!entity) + return; + + if (!player->control()) + return; + + core::Player *target = (entity->type() == core::Entity::Controlable ? static_cast<core::EntityControlable *>(entity)->owner() : 0 ); + if ((!target) || (target == player)) + return; + + if (entity != target->control()) + return; + + if (target->control()->state() != core::Entity::Normal) + return; + + if (player->control()->state() != core::Entity::Normal) + return; + + + player->send("^WTrade requests are not implemented at this time"); +} + // cheats void Game::func_give(core::Player *player, const std::string &args) { @@ -850,9 +881,6 @@ Game::Game() : core::Module("Project::OSiRiON", true) func = core::Func::add("join", Game::func_join); func->set_info("join the game"); - func = core::Func::add("hail", Game::func_hail); - func->set_info("send a standard hail"); - func = core::Func::add("spectate", Game::func_spectate); func->set_info("leave the game and spectate"); @@ -889,8 +917,14 @@ Game::Game() : core::Module("Project::OSiRiON", true) func = core::Func::add("goto", Game::func_goto); func->set_info("[string] goto to an entity within the zone"); - func = core::Func::add("@dock", Game::func_dock); - func->set_info("dock with target object"); + func = core::Func::add("@dock", Game::func_target_dock); + func->set_info("send a docking request to target"); + + func = core::Func::add("@hail", Game::func_target_hail); + func->set_info("send a standard hail to target"); + + func = core::Func::add("@trade", Game::func_target_trade); + func->set_info("send a trade request to target"); // add engine variables g_impulsespeed = core::Cvar::get("g_impulsespeed", "1500", core::Cvar::Game | core::Cvar::Archive); @@ -899,13 +933,13 @@ Game::Game() : core::Module("Project::OSiRiON", true) g_jumppointrange = core::Cvar::get("g_jumppointrange", "512", core::Cvar::Game | core::Cvar::Archive); g_jumppointrange->set_info("[float] jumppoint range"); - g_devel = core::Cvar::get("g_devel", "0", core::Cvar::Archive); + g_devel = core::Cvar::get("g_devel", "0", core::Cvar::Game | core::Cvar::Archive); g_devel->set_info("[bool] enable or disable developer mode"); - g_damping = core::Cvar::get("g_damping", "0.1", core::Cvar::Archive); + g_damping = core::Cvar::get("g_damping", "0.1", core::Cvar::Game | core::Cvar::Archive); g_damping->set_info("[float] physics damping factor (0-1)"); - g_deplete = core::Cvar::get("g_deplete", "60", core::Cvar::Archive); + g_deplete = core::Cvar::get("g_deplete", "60", core::Cvar::Game | core::Cvar::Archive); g_deplete->set_info("[int] number of seconds to deplete 1 unit of cargo from inventories"); } @@ -915,11 +949,7 @@ Game::~Game() g_jumppointrange = 0; g_devel = 0; g_damping = 0; - // game functions are automaticly removed - - // FIXME move cleanup sequence to core:: - // we explicity clear game data to prevent bullet from beeing confused - core::game()->clear(); + g_deplete = 0; Default::clear(); } diff --git a/src/game/base/game.h b/src/game/base/game.h index dd47cef..3859122 100644 --- a/src/game/base/game.h +++ b/src/game/base/game.h @@ -107,14 +107,12 @@ private: bool load_settings(); - /* ---- engine functions ----------------------------------- */ + /* ---- game functions ------------------------------------- */ static void func_join(core::Player *player, std::string const &args); static void func_spectate(core::Player *player, std::string const &args); - static void func_hail(core::Player *player, std::string const &args); static void func_jump(core::Player *player, std::string const &args); static void func_impulse(core::Player *player, std::string const &args); - static void func_dock(core::Player *player, core::Entity *entity); static void func_launch(core::Player *player, std::string const &args); static void func_respawn(core::Player *player, std::string const &args); static void func_goto(core::Player *player, const std::string &args); @@ -124,6 +122,12 @@ private: static void func_specs(core::Player *player, const std::string &args); static void func_eject(core::Player *player, const std::string &args); static void func_beam(core::Player *player, const std::string &args); + + /* ---- target functions ----------------------------------- */ + + static void func_target_dock(core::Player *player, core::Entity *entity); + static void func_target_hail(core::Player *player, core::Entity *entity); + static void func_target_trade(core::Player *player, core::Entity *entity); }; /// factory function |