Code lesbar gemacht und get_userinfo() ersetzt.
Change-Id: Ie2e1300e59e6491955689f1bcf363f464b60b5a0
diff --git a/std/shells/magier/players.c b/std/shells/magier/players.c
index df8b12d..b81b7bd 100644
--- a/std/shells/magier/players.c
+++ b/std/shells/magier/players.c
@@ -476,9 +476,8 @@
static int _spieler(string arg)
{
string dummy,ip;
- object *spieler,pl;
- int i;
-
+ object pl;
+
arg=_unparsed_args();
if(!sizeof(arg) || sscanf(arg,"aus ip %s",dummy)!=1)
return USAGE("spieler aus ip [von <spieler>|<ip>]");
@@ -486,23 +485,33 @@
if (sscanf(arg,"von %s",dummy)==1)
{
dummy=lower_case(dummy);
- if (!(pl=find_player(dummy)))
- return notify_fail(sprintf("Spieler '%s' konnte nicht gefunden "
- "werden.\n",capitalize(dummy))),0;
+ object pl = find_player(dummy);
+ if (!pl) {
+ notify_fail(sprintf("Spieler '%s' konnte nicht gefunden "
+ "werden.\n",capitalize(dummy)));
+ return 0;
+ }
ip=query_ip_number(pl);
}
- else ip=arg;
- ip=implode((explode(ip,".")-({""})+({"*","*","*","*"}))[0..3],".");
-if (catch(
- spieler=filter(users(),
- (: return sizeof(regexp(({query_ip_number($1)}),$2)); :),"^"+glob2regexp(ip)+"$")
+ else
+ ip=arg;
- ))
- return printf("In der IP duerfen nur Zahlen(0-255), Punkte (.) und "
- "Sterne (*) vorkommen.\n"),1;
+ ip=implode((explode(ip,".")-({""})+({"*","*","*","*"}))[0..3],".");
+
+ if (catch(object *spieler=filter(users(),
+ function int (object u, string re) {
+ return sizeof(regexp(({query_ip_number(u)}),re));
+ } )))
+ {
+ printf("In der IP duerfen nur Zahlen(0-255), Punkte (.) und "
+ "Sterne (*) vorkommen.\n");
+ return 1;
+ }
+
if (!sizeof(spieler))
return printf("Es konnte kein Spieler mit der IP '%s' gefunden "
"werden.\n",ip),1;
+
arg=sprintf("\nFolgende Spieler haben die IP %s:\n"
"================================================================"
"===========\n"
@@ -511,14 +520,21 @@
"----------------------------------------------------------------"
"-----------\n",ip);
i=sizeof(spieler);
- while(i--)
+ foreach(object u: spieler)
{
+ string second=spieler[i]->QueryProp(P_SECOND);
+ if (stringp(second) && sizeof(second))
+ {
+ if (!master()->find_userinfo(second))
+ second = "*ungueltig*";
+ else
+ second = capitalize(second);
+ }
+ else
+ second = "";
+
arg+=sprintf("%-11s %-17s %26s %-15s\n",
- capitalize(getuid(spieler[i])),
- ((dummy=(string)spieler[i]->QueryProp(P_SECOND))?
- (sizeof((mixed *)call_other(master(),
- "get_userinfo",dummy))?
- capitalize(dummy):"*ungueltig*"):""),
+ capitalize(getuid(u)), second,
dtime(spieler[i]->QueryProp(P_LAST_LOGIN)),
_spieler_time2string(query_idle(spieler[i])));
}