… | |
… | |
24 | $ns->query ($flags, $text, Coro::rouse_cb); |
24 | $ns->query ($flags, $text, Coro::rouse_cb); |
25 | Coro::rouse_wait |
25 | Coro::rouse_wait |
26 | } |
26 | } |
27 | |
27 | |
28 | sub can_cleanup { |
28 | sub can_cleanup { |
|
|
29 | return 0; # highscore list is not cleared out, rethink |
|
|
30 | |
29 | my ($pl, $mtime) = @_; |
31 | my ($pl, $mtime) = @_; |
30 | |
32 | |
31 | my $age = time - $mtime; |
33 | my $age = time - $mtime; |
32 | my $level = $pl->ob->level; |
34 | my $level = $pl->ob->level; |
33 | |
35 | |
… | |
… | |
137 | if ($token =~ /!!(.*)/) { |
139 | if ($token =~ /!!(.*)/) { |
138 | return +(substr $pass, 0, 8) eq pack "H*", $1; |
140 | return +(substr $pass, 0, 8) eq pack "H*", $1; |
139 | } elsif ($token =~ /!(.*)/) { |
141 | } elsif ($token =~ /!(.*)/) { |
140 | return $pass eq pack "H*", $1; |
142 | return $pass eq pack "H*", $1; |
141 | } else { |
143 | } else { |
142 | return $token eq crypt $pass, $token; |
144 | return $token eq encode_password $pass; |
143 | } |
145 | } |
144 | } |
146 | } |
145 | |
147 | |
146 | # delete a player directory |
148 | # delete a player directory |
147 | sub nuke_playerdir { |
149 | sub nuke_playerdir { |
… | |
… | |
247 | # XXX: Workaround for delayed client ext protocol handshake |
249 | # XXX: Workaround for delayed client ext protocol handshake |
248 | $pl->esrv_new_player; |
250 | $pl->esrv_new_player; |
249 | |
251 | |
250 | $pl->{chargen} = "done"; |
252 | $pl->{chargen} = "done"; |
251 | } |
253 | } |
|
|
254 | |
|
|
255 | $ns->update_command_faces; |
252 | |
256 | |
253 | $ob->reply (undef, "Welcome to Deliantra!"); |
257 | $ob->reply (undef, "Welcome to Deliantra!"); |
254 | |
258 | |
255 | if (0 < Coro::AIO::aio_load "$cf::CONFDIR/motd", my $motd) { |
259 | if (0 < Coro::AIO::aio_load "$cf::CONFDIR/motd", my $motd) { |
256 | $pl->ns->send_msg ("c/motd" => $motd, cf::NDI_CLEAR); |
260 | $pl->ns->send_msg ("c/motd" => $motd, cf::NDI_CLEAR); |