blob: fb08b43d709c386ed26e9ff9755f6436d34b5796 [file] [log] [blame]
// MorgenGrauen MUDlib
//
// player/guide.c -- newbie guide handling
//
// $Id: guide.c 7391 2010-01-25 22:52:51Z Zesstra $
#pragma strict_types
#pragma save_types
#pragma range_check
#pragma no_clone
#pragma pedantic
#include <config.h>
#define NEED_PROTOTYPES
#include <player/user_filter.h> // fuer is_active_guide()
#include <properties.h>
#include <defines.h>
#include <thing/properties.h>
/* Funktion, die die Guide-Kommandos aktiviert */
void add_guide_commands()
{
add_action("CiceroneCmd","cicerone");
// Sollte eigentlich an derselben Stelle moeglich sein.
}
/* Gibt die Meldung beim Aendern aus*/
protected int NewbieChangeMsg() {
int cic=QueryProp(P_NEWBIE_GUIDE);
// begrenzen auf 1 Tag, falls jemand da Schrott reingschrieben hat.
if (cic > 86400) {
cic=86400;
SetProp(P_NEWBIE_GUIDE,cic);
}
if (cic<=0) {
write("Du bist jetzt kein Cicerone mehr.\n");
}
else if (cic < 60) {
write("Du bist jetzt ein Cicerone.\n");
}
else {
write(break_string(
"Du bist jetzt ein Cicerone, allerdings nur in den Zeiten, "
"in denen Du weniger als " + cic/60
+ ((cic/60)<2 ? " Minute ":" Minuten ")
+ "idle bist.\n",78));
}
return 1;
}
/* Gibt die Statusmeldung aus */
protected int NewbieStatusMsg() {
int cic=QueryProp(P_NEWBIE_GUIDE);
// begrenzen auf 1 Tag, falls jemand da Schrott reingschrieben hat.
if (cic > 86400) {
cic=86400;
SetProp(P_NEWBIE_GUIDE,cic);
}
if (cic <= 0)
write ("Du bist kein Cicerone.\n");
else if (cic < 60)
write ("Du stehst Neuspielern als Cicerone zur Verfuegung.\n");
else {
write(break_string(
"Du stehst Neuspielern als Cicerone zur Verfuegung, allerdings "
"nur in den Zeiten, in denen Du weniger als " + cic/60
+ ((cic/60)<2 ? " Minute ":" Minuten ")
+ "idle bist.\n",78));
}
return 1;
}
/* Fuehrt das eigentliche Kommando aus*/
int CiceroneCmd(string str)
{
if (QueryProp(P_LEVEL)<20)
{
write(break_string("Du solltest erst noch ein wenig "
"Erfahrung sammeln, bevor Du Dich "
"als Cicerone zur Verfuegung stellst.",78));
return 1;
}
// Idlezeit uebergeben?
int idle=to_int(str);
// max. einen Tag (1440 min) zulassen.
if (idle < 0) idle=0;
else if (idle > 1440) idle=1440;
if (!str) {
return NewbieStatusMsg();
}
else if (str=="status") {
return NewbieStatusMsg();
}
// "ein" schaltet einfach generell ein, hierbei steht 1 in der Prop
// fuer "permanent ein".
else if (str=="ein") {
SetProp(P_NEWBIE_GUIDE,1);
return NewbieChangeMsg();
}
// "aus" oder "0" deaktiviert.
else if (str=="aus") {
SetProp(P_NEWBIE_GUIDE,0);
return NewbieChangeMsg();
}
// wenn Zahl uebergeben ist, die groesser 0 und kleiner 1440 ist
// (s.o.), wird es als Anzahl an Idle-Minuten aufgefasst, ab der man
// ausgeblendet werden will.
else if (idle) {
SetProp(P_NEWBIE_GUIDE, idle*60); // als Sekunden speichern.
return NewbieChangeMsg();
}
write(break_string(
"cicerone ein - Du bist Cicerone\n"
"cicerone aus - Du bist kein Cicerone\n"
"cicerone - Status anzeigen\n"
+break_string(
"Du bist Cicerone, aber wenn Du laenger als <zahl> Minuten "
"idle bist, wirst Du automatisch ausgeblendet, bis Du wieder "
"endidelt bist.",
76,"cicerone zahl - ",BS_INDENT_ONCE),
78,"Syntaxhilfe:",BS_PREPEND_INDENT|BS_LEAVE_MY_LFS));
return 1;
}
protected string IstSindMsg(string* namen)
{
if (sizeof(namen)==1)
return "ist davon "+namen[0];
else
return "sind davon "+CountUp(namen);
}
void NewbieIntroMsg()
{
object* cicerones;
string* namen;
string restext;
// Nur bis Level 5 wird etwas ausgegeben.
if (QueryProp(P_LEVEL)>5) return;
// is_active_guide() ist in /std/user_filter.c, welches vom
// Spielerobjekt geerbt wird und damit zur Verfuegung steht.
cicerones=filter(users(),#'is_active_guide);
// uid verwenden, da sonst kleine Spieler einen getarnten
// "Riesen" oder aehnliches anstprechen.
namen=map(cicerones,function string (object o)
{ return(capitalize(geteuid(o))); } );
if (namen && sizeof(namen)>0)
{
restext="\nEs gibt einige nette Spieler, die bereit sind, Dich "
"auf Deinen ersten Schritten im "MUDNAME
" zu begleiten. \n\nDerzeit "
+IstSindMsg(namen)+" eingeloggt. Du kannst "
"einen oder eine von Ihnen ansprechen, "
"indem Du z.B. einfach \n"
" 'teile "+
lower_case(namen[random(sizeof(namen))])+
" mit Hallo ich bin neu hier, kannst Du "
"mir bitte helfen?'\n"
"eintippst. Nur keine Scheu, diese Spieler "
"haben sich freiwillig dazu bereiterklaert!\n"
"\nDu kannst Dir diese Spieler jederzeit "
"mit 'kwer cicerones' anzeigen lassen.\n\n";
write(break_string(restext,78,"* ",BS_LEAVE_MY_LFS));
}
else
{
// Weia, kein Newbie-Guide da. Lieber erstmal nix tun,
// bis uns was besseres einfaellt.
}
return;
}