Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/player/guide.c b/std/player/guide.c
new file mode 100644
index 0000000..fb08b43
--- /dev/null
+++ b/std/player/guide.c
@@ -0,0 +1,182 @@
+// 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;
+}
+
+
+
+