--- deliantra/server/include/player.h 2007/08/07 22:13:52 1.66 +++ deliantra/server/include/player.h 2007/08/17 21:18:01 1.70 @@ -94,8 +94,8 @@ INTERFACE_CLASS (player) struct player : zero_initialised, attachable { - client *ACC (RO, ns); /* Socket information for this player */ - object *ACC (RW, ob); /* The object representing the player */ + client *ACC (RO, ns); /* Socket information for this player, ALWAYS valid when a player is on a map */ + object *ACC (RW, ob); /* The object representing the player, ALWAYS valid */ object_vector_index ACC (RO, active); bowtype_t ACC (RW, bowtype); /* which firemode? */ @@ -203,6 +203,35 @@ MTH void set_observe (object *ob); + void send_msg (int color, const char *type, const char *msg) + { + ns->send_msg (color, type, msg); + } + + // a prominent box that can easily be escaped away or so + // should be used for informative output such as who, maps etc. + // will stay on-screen + void infobox (const char *title, const char *msg, int color = NDI_BLACK) + { + send_msg (NDI_REPLY, LOG_CHANNEL, msg); + } + + // a prominent msg that signifies some important event, + // an improvement potion effect potion. should not be long. + // might time out after a while + void statusmsg (const char *msg, int color = NDI_BLACK) + { + send_msg (NDI_REPLY | color, INFO_CHANNEL, msg); + } + + // a prominent box that signifies some error such as a failed + // improvement potion. should not be long. + void failmsg (const char *msg, int color = NDI_RED) + { + play_sound (sound_find ("generic_failure")); + statusmsg (msg, color); + } + ~player (); private: @@ -218,3 +247,14 @@ for (unsigned _i = 0; _i < ::players.size (); ++_i) \ statementvar (player *, var, ::players [_i]) +inline void +object::statusmsg (const char *msg, int color) +{ + if (expect_true (contr)) contr->statusmsg (msg, color); +} + +inline void +object::failmsg (const char *msg, int color) +{ + if (expect_true (contr)) contr->failmsg (msg, color); +}