Ueberarbeitung, Formatierung
Change-Id: Ide037d5e642c5db2aa78c0c45564978b7d4f2880
diff --git a/std/player/channel.c b/std/player/channel.c
index 6784d50..0078ce9 100644
--- a/std/player/channel.c
+++ b/std/player/channel.c
@@ -77,53 +77,59 @@
string* RegisterChannels()
{
- string* err;
-
- if(extern_call() &&
- previous_object() != find_object(CHMASTER))
+ if (extern_call() &&
+ previous_object() != find_object(CHMASTER))
return 0;
c_status = 0;
shortcut = QueryProp(P_CHANNEL_SHORT);
- SetProp(P_CHANNELS, map(QueryProp(P_CHANNELS) || ({}),
- #'lower_case));
- err = filter(QueryProp(P_CHANNELS),
- symbol_function("join", CHMASTER),
- this_object());
- if(QueryProp(P_LEVEL) < 5) return err;
- while(sizeof(err)) {
- CHMASTER->new(err[0], this_object());
- err[0..0] = ({});
+ SetProp(P_CHANNELS, map(QueryProp(P_CHANNELS) || ({}), #'lower_case));
+
+ closure cl = symbol_function("join", CHMASTER);
+ string* err;
+ if (closurep(cl))
+ {
+ err = filter(QueryProp(P_CHANNELS), cl, this_object());
}
- return err;
+ if (QueryProp(P_LEVEL) < 5)
+ return err;
+
+ // CHMASTER->new() gibt bei Erfolg 0 zurueck, d.h. es bleiben
+ // alle Elemente erhalten, deren Channel nicht erstellt werden konnten.
+ // Die werden an die Aufrufer zurueckgegeben.
+ return filter(err, CHMASTER, "new", this_object());
}
string* RemoveChannels()
{
- closure cl;
- string* err=({});
-
- if(extern_call() &&
- previous_object() != find_object(CHMASTER))
+ if (extern_call() &&
+ previous_object() != find_object(CHMASTER))
return 0;
- if(!c_status) c_status = 1;
- else return ({});
- cl=symbol_function("leave", CHMASTER);
- if (closurep(cl)) {
- err = filter(QueryProp(P_CHANNELS), cl, this_object());
- SetProp(P_CHANNELS, QueryProp(P_CHANNELS) - err);
+ string* err = ({});
+
+ if (!c_status)
+ c_status = 1;
+ else
+ return err;
+
+ closure cl = symbol_function("leave", CHMASTER);
+ if (closurep(cl))
+ {
+ err = filter(QueryProp(P_CHANNELS), cl, this_object());
+ SetProp(P_CHANNELS, QueryProp(P_CHANNELS) - err);
}
return err;
}
varargs private string getName(string|object|closure x, int fall) {
string|object o = closurep(x) ? query_closure_object(x) : x;
- if(stringp(o) && sizeof(o) && (x = find_object(o)))
+ if (stringp(o) && sizeof(o) && (x = find_object(o)))
o = x;
-
+
// Objekte
- if (objectp(o)) {
+ if (objectp(o))
+ {
// Magier sehen unsichtbare nicht nur als "Jemand"
if (o->QueryProp(P_INVIS) && IS_LEARNING(this_object()))
return "("+capitalize(getuid(o))+")";
@@ -134,20 +140,22 @@
return o->Name(fall, 2)||"<Unbekannt>";
}
// Strings
- else if (stringp(o) && sizeof(o)) {
- if (o[0] == '/') {
+ else if (stringp(o) && sizeof(o))
+ {
+ if (o[0] == '/')
+ {
// unsichtbare Objekte...
int p = strstr(o, "$");
- if (p != -1) {
- // Magier im Magiermodus kriegen den Realnamen, andere nicht.
- if (IS_LEARNING(this_object()))
- return o[1..p-1];
- else
- return o[p+1..];
+ if (p != -1)
+ {
+ // Magier im Magiermodus kriegen den Realnamen, andere nicht.
+ if (IS_LEARNING(this_object()))
+ return o[1..p-1];
+ else
+ return o[p+1..];
}
- else
- // doch nicht unsichtbar
- return (fall == WESSEN ? o+"s" : o);
+ else // doch nicht unsichtbar
+ return (fall == WESSEN ? o+"s" : o);
}
else
// nicht unsichtbar
@@ -158,11 +166,11 @@
}
// <nonint> unterdrueckt die Ausgabe an den Spieler und liefert den Text
-// zurueck. Wird nur fuer die Ebenenhistory benutzt.
+// zurueck. Wird nur fuer die Ebenenhistory benutzt.
string ChannelMessage(<string|object|int>* msg, int nonint)
{
string channel_message;
- string channel=msg[0];
+ string channel = msg[0];
// Wenn eine Ebenenmeldung ausgegeben werden soll, ist msg[1] ein Objekt,
// im Fall der History aber ein String. Daher wird <sender> als Union
@@ -171,34 +179,38 @@
// durchgereicht (Ebenenmeldung). Ein String wird direkt in die Meldung
// (History) eingebaut, diese an den ChannelParser() zurueckgegeben, der
// sie via More() ausgibt.
- string|object sender=msg[1];
- string message=msg[2];
+ string|object sender = msg[1];
+ string message = msg[2];
int msg_type = msg[3];
- if ( previous_object() != find_object(CHMASTER) &&
- previous_object() != ME )
- return 0;
+ if (previous_object() != find_object(CHMASTER) &&
+ previous_object() != ME )
+ return 0;
string sender_name = getName(sender, msg_type == MSG_GEMOTE ? WESSEN : WER);
- int prepend_indent_flag=QueryProp(P_MESSAGE_PREPEND) ? BS_PREPEND_INDENT : 0;
- switch(msg_type) {
- case MSG_EMPTY:
- channel_message= message+"\n";
- break;
- case MSG_GEMOTE:
- case MSG_EMOTE:
- channel_message = break_string(sender_name + " "+ message+"]",
- 78, sprintf("[%s:", channel),
- BS_INDENT_ONCE|prepend_indent_flag);
- break;
- case MSG_SAY:
- default:
- string presay=sprintf("[%s:%s] ", channel, sender_name);
- channel_message = break_string(message, max(78,sizeof(presay)+10),
- presay, prepend_indent_flag);
- break;
+ int prepend_indent_flag =
+ QueryProp(P_MESSAGE_PREPEND) ? BS_PREPEND_INDENT : 0;
+
+ switch (msg_type)
+ {
+ case MSG_EMPTY:
+ channel_message= message+"\n";
+ break;
+ case MSG_GEMOTE:
+ case MSG_EMOTE:
+ channel_message = break_string(sender_name + " "+ message+"]", 78,
+ sprintf("[%s:", channel),
+ BS_INDENT_ONCE|prepend_indent_flag);
+ break;
+ case MSG_SAY:
+ default:
+ string presay=sprintf("[%s:%s] ", channel, sender_name);
+ channel_message = break_string(message, max(78,sizeof(presay)+10),
+ presay, prepend_indent_flag);
+ break;
}
- if(nonint)
+
+ if (nonint)
return channel_message;
// Wenn GMCP sich um Uebertragung der Nachricht kuemmert, wird ReceiveMsg()
@@ -211,7 +223,7 @@
// Der Ebenenname muss in Kleinbuchstaben uebergeben werden, damit die
// Ignorierepruefung funktioniert. Die ignorierestrings sind naemlich alle
// kleingeschrieben.
- ReceiveMsg(channel_message,
+ ReceiveMsg(channel_message,
MT_COMM|MT_FAR|MSG_DONT_STORE|MSG_DONT_WRAP,
MA_CHANNEL"." + lower_case(channel), 0, sender);
}
@@ -222,36 +234,37 @@
{
int pos = member(map(m_values(shortcut), #'lower_case/*'*/), n);
string sh = "";
- if(pos != -1)
+ if (pos != -1)
sh = m_indices(shortcut)[pos];
string* mem=map(a[I_MEMBER],#'getName/*'*/, WER);
- mem-=({"<MasteR>"});
+ mem -= ({"<MasteR>"});
l += ({ sprintf("%-12.12'.'s %c[%-1.1s] %|12.12' 's (%-|3' 'd) %-42.42s\n",
- a[I_NAME], (member(m, n) != -1 ? '*' : ' '), sh,
- a[I_MASTER] ?
- getName(a[I_MASTER]) : getName(a[I_ACCESS]),
- sizeof(mem),
- (closurep(a[I_INFO]) && objectp(query_closure_object(a[I_INFO]))) ?
- funcall(a[I_INFO]) || "- Keine Beschreibung -" :
- (stringp(a[I_INFO]) ? a[I_INFO] : "- Keine Beschreibung -")
- ) });
+ a[I_NAME], (member(m, n) != -1 ? '*' : ' '), sh,
+ a[I_MASTER] ?
+ getName(a[I_MASTER]) : getName(a[I_ACCESS]),
+ sizeof(mem),
+ (closurep(a[I_INFO]) && objectp(query_closure_object(a[I_INFO]))) ?
+ funcall(a[I_INFO]) || "- Keine Beschreibung -" :
+ (stringp(a[I_INFO]) ? a[I_INFO] : "- Keine Beschreibung -")
+ ) });
}
private mixed getChannel(string ch)
{
- if(!sizeof(ch))
+ if (!sizeof(ch))
ch = QueryProp(P_STD_CHANNEL);
- if(shortcut && shortcut[ch])
+ if (shortcut && shortcut[ch])
ch = shortcut[ch];
return CHMASTER->find(ch, this_object());
}
#ifndef DEBUG
-#define DEBUG(x) if (funcall(symbol_function('find_player),"zesstra"))\
+#define DEBUG(x) if (funcall(symbol_function('find_player),"zesstra"))\
tell_object(funcall(symbol_function('find_player),"zesstra"),\
"MDBG: "+x+"\n")
#endif
+
int ChannelParser(string args)
{
mixed ch;
@@ -262,188 +275,212 @@
notify_fail("Benutzung: -<Ebene>[ ]['|:|;]<Text>\n"
" -<Ebene>[+|-|?|!|*]\n"
" -?\n");
- if(!cmd && !args) return 0;
- if(!args) args = "";
+ if (!cmd && !args)
+ return 0;
+
+ if (!args)
+ args = "";
+
cmd = cmd[1..];
- if(sizeof(cmd = regexplode(cmd,
- "^" CHANNELCMDS "*"
- "([+-]|\\!|\\?|\\*)*")) > 1)
+ cmd = regexplode(cmd, "^" CHANNELCMDS "*" "([+-]|\\!|\\?|\\*)*")
+ if (sizeof(cmd) > 1)
{
//z.B. cmd= ({"","allgemein",":testet"})
- if(sizeof(cmd[1]) > 1 &&
- strstr("+-?!*", cmd[1][<1..<1]) > -1)
+ if (sizeof(cmd[1]) > 1 && strstr("+-?!*", cmd[1][<1..<1]) > -1)
tmp = cmd[1][0..<2];
else
tmp = cmd[1];
- if(cmd[1] != "?" && cmd[1] != "!")
+
+ if (cmd[1] != "?" && cmd[1] != "!")
{
ch = getChannel(tmp);
- if(pointerp(ch))
+ if (pointerp(ch))
{
notify_fail("Diese Angabe war nicht eindeutig! "
"Folgende Ebenen passen:\n"
+implode(ch, ", ")+"\n");
return 0;
}
- else if(!ch)
- return (notify_fail("Die Ebene '"+tmp
- + "' gibt es nicht!\n"), 0);
+ else if (!ch)
+ {
+ notify_fail("Die Ebene '"+tmp+ "' gibt es nicht!\n");
+ return 0;
+ }
}
- //DEBUG(sprintf("ChanCmd: %O\n",cmd));
+
if (sizeof(cmd[1])) {
- switch(cmd[1][<1]) {
- case '+':
- switch(CHMASTER->join(ch, this_object()))
- {
- case E_ACCESS_DENIED:
- notify_fail("Du darfst an die Ebene '"+ch+"' nicht heran.\n");
- return 0;
- case E_ALREADY_JOINED:
- notify_fail("Du hast diese Ebene schon betreten!\n");
- return 0;
- default: break;
- }
- write("Du betrittst die Ebene '"+ch+"'.\n");
- if(member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
- SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ ch }));
- return 1;
- case '-':
- switch(CHMASTER->leave(ch, this_object()))
- {
- case E_ACCESS_DENIED:
- write("Du kannst die Ebene '"+ch+"' nicht verlassen.\n");
- break;
- case E_NOT_MEMBER:
- write("Wie willst Du eine Ebene verlassen, welche Du nicht "
- "betreten hast?\n");
- break;
- default:
- write("Du verlaesst die Ebene '"+ch+"'.\n");
- SetProp(P_CHANNELS, QueryProp(P_CHANNELS) - ({ lower_case(ch), ch }));
- break;
- }
- return 1;
- case '!':
- case '?':
- {
- mapping l;
- if(mappingp(l = CHMASTER->list(this_object())))
- {
- if(stringp(ch) && sizeof(ch) && pointerp(l[ch = lower_case(ch)]))
- {
- int c; object o; string n; string *m;
- m=sort_array(map(l[ch][I_MEMBER],#'getName/*'*/, WER),#'>/*'*/);
- m-=({"<MasteR>"});
- write(l[ch][I_NAME]+", "+funcall(l[ch][I_INFO])+".\n");
- write("Du siehst "+((c = sizeof(m)) > 0
- ? (c == 1 ? "ein Gesicht" : c+" Gesichter")
- : "niemanden")+" auf der Ebene '"
- +l[ch][I_NAME]+"':\n");
- write(break_string(implode(m,", "), 78));
- write((l[ch][I_MASTER] ?
- getName(l[ch][I_MASTER]) : getName(l[ch][I_ACCESS], WER))
- +" hat das Sagen auf dieser Ebene.\n");
- }
- else
- {
- string* list = ({});
- if(cmd[1][<1] == '!')
- l -= mkmapping(m_indices(l) - QueryProp(P_CHANNELS));
- walk_mapping(l, #'createList/*'*/, QueryProp(P_CHANNELS), &list);
- list = sort_array(list, #'>/*'*/);
- txt = sprintf("%-12.12' 's [A] %|12' 's (%-3' 's) %-42.42s\n",
- "Name", "Eigner", "Sp", "Beschreibung")
- + "-------------------------------------------------------"
- + "-----------------------\n"
- + implode(list, "");
+ switch (cmd[1][<1]) {
+ case '+':
+ switch (CHMASTER->join(ch, this_object()))
+ {
+ case E_ACCESS_DENIED:
+ notify_fail("Du darfst an die Ebene '"+ch+"' nicht heran.\n");
+ return 0;
+ case E_ALREADY_JOINED:
+ notify_fail("Du hast diese Ebene schon betreten!\n");
+ return 0;
+ default:
+ break;
+ }
+ write("Du betrittst die Ebene '"+ch+"'.\n");
+ if (member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
+ SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ ch }));
+ return 1;
+
+ case '-':
+ switch (CHMASTER->leave(ch, this_object()))
+ {
+ case E_ACCESS_DENIED:
+ write("Du kannst die Ebene '"+ch+"' nicht verlassen.\n");
+ break;
+ case E_NOT_MEMBER:
+ write("Wie willst Du eine Ebene verlassen, welche Du nicht "
+ "betreten hast?\n");
+ break;
+ default:
+ write("Du verlaesst die Ebene '"+ch+"'.\n");
+ SetProp(P_CHANNELS,
+ QueryProp(P_CHANNELS) - ({ lower_case(ch), ch }));
+ break;
+ }
+ return 1;
+
+ case '!':
+ case '?':
+ mapping l;
+ if (mappingp(l = CHMASTER->list(this_object())))
+ {
+ if (stringp(ch) && sizeof(ch) && pointerp(l[ch = lower_case(ch)]))
+ {
+ int c; object o; string n; string *m;
+ m = sort_array(
+ map(l[ch][I_MEMBER],#'getName/*'*/, WER),
+ #'>/*'*/);
+ m-=({"<MasteR>"});
+ write(l[ch][I_NAME]+", "+funcall(l[ch][I_INFO])+".\n");
+ write("Du siehst "+((c = sizeof(m)) > 0
+ ? (c == 1 ? "ein Gesicht" : c+" Gesichter")
+ : "niemanden")+" auf der Ebene '"
+ +l[ch][I_NAME]+"':\n");
+ write(break_string(implode(m,", "), 78));
+ write((l[ch][I_MASTER] ?
+ getName(l[ch][I_MASTER]) : getName(l[ch][I_ACCESS], WER))
+ +" hat das Sagen auf dieser Ebene.\n");
+ }
+ else
+ {
+ string* list = ({});
+ if (cmd[1][<1] == '!')
+ l -= mkmapping(m_indices(l) - QueryProp(P_CHANNELS));
+ walk_mapping(l, #'createList/*'*/, QueryProp(P_CHANNELS), &list);
+ list = sort_array(list, #'>/*'*/);
+ txt = sprintf("%-12.12' 's [A] %|12' 's (%-3' 's) %-42.42s\n",
+ "Name", "Eigner", "Sp", "Beschreibung")
+ + "-------------------------------------------------------"
+ + "-----------------------\n"
+ + implode(list, "");
+ More(txt);
+ }
+ }
+ return 1;
+
+ case '*':
+ mixed hist = CHMASTER->history(ch, this_object());
+ if (!pointerp(hist) || !sizeof(hist))
+ {
+ write("Es ist keine Geschichte fuer '"+ch+"' verfuegbar.\n");
+ return 1;
+ }
+
+ //(Zesstra) cmd hat offenbar immer 3 Elemente...
+ //bei -all* ({"","all*",""})
+ //bei -all*10 ({"","all*,"10"})
+ //also ist bei -all* amount immer == 0 und es funktioniert eher
+ //zufaellig.
+ /*if(sizeof(cmd) > 2)
+ amount = to_int(cmd[2]);
+ else
+ amount=sizeof(hist);*/
+ int amount = to_int(cmd[2]);
+ if (amount <= 0 || amount >= sizeof(hist))
+ amount = sizeof(hist);
+
+ txt = "Folgendes ist auf '"+ch+"' passiert:\n"
+ + implode(map(hist[<amount..], #'ChannelMessage/*'*/, 1), "");
More(txt);
- }
+ return 1;
+
+ default:
+ break;
}
- return 1;
-
- }
- case '*':
- {
- mixed hist = CHMASTER->history(ch, this_object());
- if(!pointerp(hist) || !sizeof(hist))
- {
- write("Es ist keine Geschichte fuer '"+ch+"' verfuegbar.\n");
- return 1;
- }
-
- //(Zesstra) cmd hat offenbar immer 3 Elemente...
- //bei -all* ({"","all*",""})
- //bei -all*10 ({"","all*,"10"})
- //also ist bei -all* amount immer == 0 und es funktioniert eher zufaellig.
- /*if(sizeof(cmd) > 2)
- amount = to_int(cmd[2]);
- else
- amount=sizeof(hist);*/
- int amount=to_int(cmd[2]);
- if (amount <= 0 || amount >= sizeof(hist))
- amount=sizeof(hist);
-
- txt = "Folgendes ist auf '"+ch+"' passiert:\n"
- + implode(map(hist[<amount..], #'ChannelMessage/*'*/, 1), "");
- More(txt);
- return 1;
- }
- default:
- break;
- }
}
}
- if(sizeof(cmd = implode(cmd[2..], "")))
- args = cmd + (sizeof(args) ? " " : "") + args;
+
+ if (sizeof(cmd = implode(cmd[2..], "")))
+ args = cmd + (sizeof(args) ? " " : "") + args;
// KOntrollchars ausfiltern.
args = regreplace(args,"[[:cntrl:]]","",RE_PCRE|RE_GLOBAL);
- if(!sizeof(args)) return 0;
+ if (!sizeof(args))
+ return 0;
//Wenn cmd leer ist: MSG_SAY
- if (!sizeof(cmd)) type=MSG_SAY;
- else {
- switch(cmd[0])
+ if (!sizeof(cmd))
+ type = MSG_SAY;
+ else
+ {
+ switch (cmd[0])
{
- case ':' :
- type = MSG_EMOTE;
- args = args[1..];
- break;
- case ';' :
- type = MSG_GEMOTE;
- args = args[1..];
- break;
- case '\'':
- args = args[1..];
- default : type = MSG_SAY; break;
+ case ':' :
+ type = MSG_EMOTE;
+ args = args[1..];
+ break;
+ case ';' :
+ type = MSG_GEMOTE;
+ args = args[1..];
+ break;
+ case '\'':
+ args = args[1..];
+ // Der Fallthrough in default ist hier Absicht.
+ default :
+ type = MSG_SAY;
+ break;
}
}
- if(!ch || !sizeof(ch)) ch = QueryProp(P_STD_CHANNEL);
- if((err = CHMASTER->send(ch, this_object(), args, type)) < 0)
- if(!(err = CHMASTER->join(ch, this_object())))
+
+ if (!ch || !sizeof(ch))
+ ch = QueryProp(P_STD_CHANNEL);
+
+ err = CHMASTER->send(ch, this_object(), args, type);
+ if (err < 0)
+ {
+ err = CHMASTER->join(ch, this_object());
+ if (!err)
{
- if(member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
+ if (member(QueryProp(P_CHANNELS), ch = lower_case(ch)) == -1)
SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ ch }));
err = CHMASTER->send(ch, this_object(), args, type);
}
+ }
- switch(err)
+ switch (err)
{
- case E_ACCESS_DENIED:
- notify_fail("Auf der Ebene '"+ch+"' darfst Du nichts sagen.\n");
- return 0;
- case E_NOT_MEMBER:
- notify_fail("Du hast die Ebene '"+ch+"' nicht betreten!\n");
- return 0;
+ case E_ACCESS_DENIED:
+ notify_fail("Auf der Ebene '"+ch+"' darfst Du nichts sagen.\n");
+ return 0;
+ case E_NOT_MEMBER:
+ notify_fail("Du hast die Ebene '"+ch+"' nicht betreten!\n");
+ return 0;
}
return 1;
}
int ChannelAdmin(string args)
{
+ args = _unparsed_args();
+
string n, descr, sh, cn;
mixed tmp;
- args = _unparsed_args();
notify_fail("Benutzung: ebene <Abkuerzung>=<Ebene>\n"
" ebene <Abkuerzung>=\n"
" ebene abkuerzungen [standard]\n"
@@ -451,105 +488,143 @@
" ebene an|ein|aus\n"
+(QueryProp(P_LEVEL) >= 5 ?
" ebene neu <Name> <Bezeichnung>\n"
- " ebene beschreibung <Name> <Beschreibung>\n" : "")
- +(IS_ARCH(this_object()) ?
- " ebene kill <Name>\n"
- " ebene clear <Name>\n": ""));
- if(!args || !sizeof(args)) return 0;
- if(sscanf(args, "kill %s", n) && IS_ARCH(this_object()))
+ " ebene beschreibung <Name> <Beschreibung>\n" : "")
+ +(IS_ARCH(this_object()) ?
+ " ebene kill <Name>\n"
+ " ebene clear <Name>\n": ""));
+
+ if (!args || !sizeof(args))
+ return 0;
+
+ if (sscanf(args, "kill %s", n) && IS_ARCH(this_object()))
{
- if(!(cn = CHMASTER->find(n, this_object()))) cn = n;
- switch(CHMASTER->remove(cn, this_object()))
- {
- case E_ACCESS_DENIED:
- notify_fail("Die Ebene '"+cn+"' lies sich nicht entfernen!\n");
- return 0;
+ cn = CHMASTER->find(n, this_object());
+ if (!cn)
+ cn = n;
+
+ if (CHMASTER->remove(cn, this_object()) == E_ACCESS_DENIED) {
+ notify_fail("Die Ebene '"+cn+"' liess sich nicht entfernen!\n");
+ return 0;
}
+
write("Du entfernst die Ebene '"+cn+"'.\n");
return 1;
}
- if(sscanf(args, "clear %s", n) && IS_ARCH(this_object()))
+
+ if (sscanf(args, "clear %s", n) && IS_ARCH(this_object()))
{
- if(!(cn = CHMASTER->find(n, this_object()))) cn = n;
- switch(CHMASTER->clear_history(cn, this_object()))
- {
- case E_ACCESS_DENIED:
- notify_fail("Der Verlauf zur Ebene '"+cn+"' lies sich nicht entfernen!\n");
- return 0;
+ cn = CHMASTER->find(n, this_object());
+ if (!cn)
+ cn = n;
+
+ if (CHMASTER->clear_history(cn, this_object()) == E_ACCESS_DENIED) {
+ notify_fail("Der Verlauf zur Ebene '"+cn+"' liess sich nicht "
+ "entfernen!\n");
+ return 0;
}
+
write("Du entfernst den Verlauf zur Ebene '"+cn+"'.\n");
return 1;
}
- if(sscanf(args, "neu %s %s", n, descr) == 2)
+
+ if (sscanf(args, "neu %s %s", n, descr) == 2)
{
- mixed x;
- if(QueryProp(P_LEVEL) < 5)
- return (notify_fail("Neue Ebenen zu erstellen ist dir verwehrt.\n"), 0);
- if(!sizeof(regexp(({ n }), "^" CHANNELCMDS CHANNELCMDS "*")))
- return (notify_fail("Der Name '"+n+"' ist nicht konform!\n"), 0);
- if (sizeof(n) > 20 )
- return(notify_fail("Der Name '"+n+"' ist zu lang.\n"), 0);
- switch(x = CHMASTER->new(n, this_object(), descr))
+ if (QueryProp(P_LEVEL) < 5)
{
- case E_ACCESS_DENIED:
- notify_fail("Diese Ebene darfst du nicht erschaffen!\n"); break;
- default:
- write("Du erschaffst die Ebene '"+n+"'.\n");
- SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ lower_case(n) }));
- return 1;
+ notify_fail("Neue Ebenen zu erstellen, ist Dir verwehrt.\n");
+ return 0;
}
+
+ if (!sizeof(regexp(({ n }), "^" CHANNELCMDS CHANNELCMDS "*")))
+ {
+ notify_fail("Der Name '"+n+"' ist nicht konform!\n");
+ return 0;
+ }
+
+ if (sizeof(n) > 20 )
+ {
+ notify_fail("Der Name '"+n+"' ist zu lang.\n");
+ return 0;
+ }
+
+ if (CHMASTER->new(n, this_object(), descr) == E_ACCESS_DENIED) {
+ notify_fail("Diese Ebene darfst du nicht erschaffen!\n");
+ return 0;
+ }
+ write("Du erschaffst die Ebene '"+n+"'.\n");
+ SetProp(P_CHANNELS, QueryProp(P_CHANNELS) + ({ lower_case(n) }));
+ return 1;
}
- if(sscanf(args, "beschreibung %s %s", n, descr) == 2)
+
+ if (sscanf(args, "beschreibung %s %s", n, descr) == 2)
{
- mixed ch;
cn = CHMASTER->find(n, this_object());
- if(!cn || pointerp(cn))
- return (notify_fail("Die Ebene '"+n+"' existiert nicht oder die Angabe "
- "war nicht eindeutig.\n"), 0);
- ch = CHMASTER->list(this_object());
- if(ch[lower_case(cn)][I_MASTER] != this_object())
- return (notify_fail("Du bist nicht berechtigt die Beschreibung der Ebene"
- " '"+cn+"' zu aendern.\n"), 0);
+ if (!cn || pointerp(cn))
+ {
+ notify_fail("Die Ebene '"+n+"' existiert nicht oder die Angabe "
+ "war nicht eindeutig.\n");
+ return 0;
+ }
+
+ mixed ch = CHMASTER->list(this_object());
+ if (ch[lower_case(cn)][I_MASTER] != this_object())
+ {
+ notify_fail("Du bist nicht berechtigt, die Beschreibung der Ebene"
+ " '"+cn+"' zu aendern.\n");
+ return 0;
+ }
ch[lower_case(cn)][I_INFO] = descr;
write("Die Ebene '"+cn+"' hat ab sofort die Beschreibung:\n"+descr+"\n");
return 1;
}
- if(sscanf(args, "%s=%s", sh, n) == 2 && sizeof(n))
+
+ if sscanf(args, "%s=%s", sh, n) == 2 && sizeof(n))
{
- mapping sc;
- if(pointerp(tmp = CHMASTER->find(n, this_object())) || !tmp)
- return (notify_fail("Benutzung: ebene <Abkuerzung>=<Ebene>\n"
- +(pointerp(tmp) ? implode(tmp, ", ") + "\n" :
- "Ebene '"+n+"' nicht gefunden!\n")), 0);
- sc = QueryProp(P_CHANNEL_SHORT);
- if(!sc) sc = ([]);
- sc[sh] = tmp;
+ tmp = CHMASTER->find(n, this_object());
+ if (pointerp(tmp) || !tmp)
+ {
+ notify_fail("Benutzung: ebene <Abkuerzung>=<Ebene>\n"+
+ (pointerp(tmp) ?
+ implode(tmp, ", ") + "\n" :
+ "Ebene '"+n+"' nicht gefunden!\n"));
+ return 0;
+ }
+
+ mapping sc = QueryProp(P_CHANNEL_SHORT) || ([]);
+ m_add(sc, sh, tmp);
SetProp(P_CHANNEL_SHORT, sc);
+
shortcut = QueryProp(P_CHANNEL_SHORT);
+
write("'"+sh+"' wird jetzt als Abkuerzung fuer '"+tmp+"' anerkannt.\n");
return 1;
}
- if(sscanf(args, "%s=", sh))
+
+ if (sscanf(args, "%s=", sh))
{
- SetProp(P_CHANNEL_SHORT, m_copy_delete(QueryProp(P_CHANNEL_SHORT) || ([]), sh));
+ SetProp(P_CHANNEL_SHORT,
+ m_copy_delete(QueryProp(P_CHANNEL_SHORT) || ([]), sh));
shortcut = QueryProp(P_CHANNEL_SHORT);
write("Du loeschst die Abkuerzung '"+sh+"'.\n");
return 1;
}
- if(args == "an" || args == "ein")
+
+ if (args == "an" || args == "ein")
{
- mixed excl;
- if(pointerp(QueryProp(P_SWAP_CHANNELS)))
+ if (pointerp(QueryProp(P_SWAP_CHANNELS)))
SetProp(P_CHANNELS, QueryProp(P_SWAP_CHANNELS));
else
SetProp(P_CHANNELS, m_indices(CHMASTER->list(this_object())));
- excl = RegisterChannels();
- write("Du schaltest folgende Ebenen ein:\n"
- +break_string(implode(QueryProp(P_CHANNELS) - excl, ", "), 78));
+
+ // <excl> enthaelt die Channelnamen, deren Channel nicht erstellt wurden.
+ string* excl = RegisterChannels();
+ write("Du schaltest folgende Ebenen ein:\n"+
+ break_string(implode(QueryProp(P_CHANNELS) - excl, ", "), 78));
SetProp(P_SWAP_CHANNELS, 0);
return 1;
}
- if(args == "aus")
+
+ if (args == "aus")
{
SetProp(P_SWAP_CHANNELS, QueryProp(P_CHANNELS));
RemoveChannels();
@@ -557,44 +632,63 @@
write("Du stellst die Ebenen ab.\n");
return 1;
}
+
string* pa = old_explode(args, " ");
- if(!strstr("abkuerzungen", pa[0]))
+ if (!strstr("abkuerzungen", pa[0]))
{
- string txt; txt = "";
- if(sizeof(pa) > 1 && !strstr("standard", pa[1]))
+ string txt = "";
+ if (sizeof(pa) > 1 && !strstr("standard", pa[1]))
{
- write("Die Standard Abkuerzungen werden gesetzt.\n");
+ write("Die Standardabkuerzungen werden gesetzt.\n");
SetProp(P_CHANNEL_SHORT, DEFAULT_SHORTCUTS
+ (IS_LEARNER(this_object()) ? WIZARD_SHORTCUTS : ([])));
}
- foreach(string abk, string ch_name : QueryProp(P_CHANNEL_SHORT)) {
+ foreach (string abk, string ch_name : QueryProp(P_CHANNEL_SHORT)) {
txt += sprintf("%5.5s = %s\n", abk, ch_name);
}
txt = sprintf("Folgende Abkuerzungen sind definiert:\n%-78#s\n",
- implode(sort_array(old_explode(txt, "\n"), #'>/*'*/), "\n"));
+ implode(sort_array(old_explode(txt, "\n"), #'>/*'*/), "\n"));
More(txt);
return 1;
}
- if(!strstr("standard", pa[0]))
- if(sizeof(pa) < 2)
- return (notify_fail("Benutzung: ebene standard <Ebene>\n"
- +(QueryProp(P_STD_CHANNEL)
- ? "Momentan ist '"+QueryProp(P_STD_CHANNEL)
- +"' eingestellt.\n"
- : "Es ist keine Standardebene eingestellt.\n")),0);
+
+ if (!strstr("standard", pa[0]))
+ {
+ if (sizeof(pa) < 2)
+ {
+ notify_fail("Benutzung: ebene standard <Ebene>\n"
+ +(QueryProp(P_STD_CHANNEL) ?
+ "Momentan ist '"+QueryProp(P_STD_CHANNEL)+
+ "' eingestellt.\n" :
+ "Es ist keine Standardebene eingestellt.\n"));
+ return 0;
+ }
else
- if(pointerp(tmp = CHMASTER->find(pa[1], this_object())))
- return (notify_fail("Das war keine eindeutige Angabe! "
- "Folgende Ebenen passen:\n"
- +break_string(implode(tmp, ", "), 78)), 0);
+ {
+ tmp = CHMASTER->find(pa[1], this_object());
+ if (pointerp(tmp))
+ {
+ notify_fail("Das war keine eindeutige Angabe! "
+ "Folgende Ebenen passen:\n"+
+ break_string(implode(tmp, ", "), 78));
+ return 0;
+ }
else
- if(!tmp) return (notify_fail("Ebene '"+pa[1]+"' nicht gefunden!\n"),0);
+ {
+ if (!tmp)
+ {
+ notify_fail("Ebene '"+pa[1]+"' nicht gefunden!\n");
+ return 0;
+ }
else
{
write("'"+tmp+"' ist jetzt die Standardebene.\n");
SetProp(P_STD_CHANNEL, tmp);
return 1;
}
+ }
+ }
+ }
return(0);
}