blob: fb08b43d709c386ed26e9ff9755f6436d34b5796 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// player/guide.c -- newbie guide handling
4//
5// $Id: guide.c 7391 2010-01-25 22:52:51Z Zesstra $
6
7#pragma strict_types
8#pragma save_types
9#pragma range_check
10#pragma no_clone
11#pragma pedantic
12
13#include <config.h>
14#define NEED_PROTOTYPES
15#include <player/user_filter.h> // fuer is_active_guide()
16#include <properties.h>
17#include <defines.h>
18#include <thing/properties.h>
19
20/* Funktion, die die Guide-Kommandos aktiviert */
21void add_guide_commands()
22{
23 add_action("CiceroneCmd","cicerone");
24 // Sollte eigentlich an derselben Stelle moeglich sein.
25}
26
27/* Gibt die Meldung beim Aendern aus*/
28protected int NewbieChangeMsg() {
29 int cic=QueryProp(P_NEWBIE_GUIDE);
30 // begrenzen auf 1 Tag, falls jemand da Schrott reingschrieben hat.
31 if (cic > 86400) {
32 cic=86400;
33 SetProp(P_NEWBIE_GUIDE,cic);
34 }
35 if (cic<=0) {
36 write("Du bist jetzt kein Cicerone mehr.\n");
37 }
38 else if (cic < 60) {
39 write("Du bist jetzt ein Cicerone.\n");
40 }
41 else {
42 write(break_string(
43 "Du bist jetzt ein Cicerone, allerdings nur in den Zeiten, "
44 "in denen Du weniger als " + cic/60
45 + ((cic/60)<2 ? " Minute ":" Minuten ")
46 + "idle bist.\n",78));
47 }
48 return 1;
49}
50
51/* Gibt die Statusmeldung aus */
52protected int NewbieStatusMsg() {
53 int cic=QueryProp(P_NEWBIE_GUIDE);
54 // begrenzen auf 1 Tag, falls jemand da Schrott reingschrieben hat.
55 if (cic > 86400) {
56 cic=86400;
57 SetProp(P_NEWBIE_GUIDE,cic);
58 }
59
60 if (cic <= 0)
61 write ("Du bist kein Cicerone.\n");
62 else if (cic < 60)
63 write ("Du stehst Neuspielern als Cicerone zur Verfuegung.\n");
64 else {
65 write(break_string(
66 "Du stehst Neuspielern als Cicerone zur Verfuegung, allerdings "
67 "nur in den Zeiten, in denen Du weniger als " + cic/60
68 + ((cic/60)<2 ? " Minute ":" Minuten ")
69 + "idle bist.\n",78));
70 }
71 return 1;
72}
73
74/* Fuehrt das eigentliche Kommando aus*/
75
76int CiceroneCmd(string str)
77{
78 if (QueryProp(P_LEVEL)<20)
79 {
80 write(break_string("Du solltest erst noch ein wenig "
81 "Erfahrung sammeln, bevor Du Dich "
82 "als Cicerone zur Verfuegung stellst.",78));
83 return 1;
84 }
85 // Idlezeit uebergeben?
86 int idle=to_int(str);
87 // max. einen Tag (1440 min) zulassen.
88 if (idle < 0) idle=0;
89 else if (idle > 1440) idle=1440;
90
91 if (!str) {
92 return NewbieStatusMsg();
93 }
94 else if (str=="status") {
95 return NewbieStatusMsg();
96 }
97 // "ein" schaltet einfach generell ein, hierbei steht 1 in der Prop
98 // fuer "permanent ein".
99 else if (str=="ein") {
100 SetProp(P_NEWBIE_GUIDE,1);
101 return NewbieChangeMsg();
102 }
103 // "aus" oder "0" deaktiviert.
104 else if (str=="aus") {
105 SetProp(P_NEWBIE_GUIDE,0);
106 return NewbieChangeMsg();
107 }
108 // wenn Zahl uebergeben ist, die groesser 0 und kleiner 1440 ist
109 // (s.o.), wird es als Anzahl an Idle-Minuten aufgefasst, ab der man
110 // ausgeblendet werden will.
111 else if (idle) {
112 SetProp(P_NEWBIE_GUIDE, idle*60); // als Sekunden speichern.
113 return NewbieChangeMsg();
114 }
115 write(break_string(
116 "cicerone ein - Du bist Cicerone\n"
117 "cicerone aus - Du bist kein Cicerone\n"
118 "cicerone - Status anzeigen\n"
119 +break_string(
120 "Du bist Cicerone, aber wenn Du laenger als <zahl> Minuten "
121 "idle bist, wirst Du automatisch ausgeblendet, bis Du wieder "
122 "endidelt bist.",
123 76,"cicerone zahl - ",BS_INDENT_ONCE),
124 78,"Syntaxhilfe:",BS_PREPEND_INDENT|BS_LEAVE_MY_LFS));
125
126 return 1;
127}
128
129protected string IstSindMsg(string* namen)
130{
131 if (sizeof(namen)==1)
132 return "ist davon "+namen[0];
133 else
134 return "sind davon "+CountUp(namen);
135}
136
137void NewbieIntroMsg()
138{
139 object* cicerones;
140 string* namen;
141 string restext;
142
143 // Nur bis Level 5 wird etwas ausgegeben.
144 if (QueryProp(P_LEVEL)>5) return;
145
146 // is_active_guide() ist in /std/user_filter.c, welches vom
147 // Spielerobjekt geerbt wird und damit zur Verfuegung steht.
148 cicerones=filter(users(),#'is_active_guide);
149 // uid verwenden, da sonst kleine Spieler einen getarnten
150 // "Riesen" oder aehnliches anstprechen.
151 namen=map(cicerones,function string (object o)
152 { return(capitalize(geteuid(o))); } );
153
154 if (namen && sizeof(namen)>0)
155 {
156 restext="\nEs gibt einige nette Spieler, die bereit sind, Dich "
157 "auf Deinen ersten Schritten im "MUDNAME
158 " zu begleiten. \n\nDerzeit "
159 +IstSindMsg(namen)+" eingeloggt. Du kannst "
160 "einen oder eine von Ihnen ansprechen, "
161 "indem Du z.B. einfach \n"
162 " 'teile "+
163 lower_case(namen[random(sizeof(namen))])+
164 " mit Hallo ich bin neu hier, kannst Du "
165 "mir bitte helfen?'\n"
166 "eintippst. Nur keine Scheu, diese Spieler "
167 "haben sich freiwillig dazu bereiterklaert!\n"
168 "\nDu kannst Dir diese Spieler jederzeit "
169 "mit 'kwer cicerones' anzeigen lassen.\n\n";
170 write(break_string(restext,78,"* ",BS_LEAVE_MY_LFS));
171 }
172 else
173 {
174 // Weia, kein Newbie-Guide da. Lieber erstmal nix tun,
175 // bis uns was besseres einfaellt.
176 }
177 return;
178}
179
180
181
182