--- deliantra/server/ext/login.ext 2007/10/01 00:55:50 1.73 +++ deliantra/server/ext/login.ext 2007/12/28 19:40:22 1.76 @@ -54,6 +54,12 @@ 1 } +sub safe_spot($$$) { + my ($m, $x, $y) = @_; + + scalar grep $_->type == cf::SAVEBED, $m->at ($x, $y) +} + sub enter_map { my ($pl) = @_; @@ -74,10 +80,11 @@ warn $ob->name, " map reset after logout, logout age $age (>= $MAX_DISCONNECT_TIME)\n";#d# - # for now, just go back to savebed ($map, $x, $y) = $pl->savebed; - if ($age >= $MAX_DISCONNECT_TIME) { + if (safe_spot $m, $x, $y) { + # do nothing, this is simply ok without a special scary message + } elsif ($age >= $MAX_DISCONNECT_TIME) { $ob->message ( "You didn't use a bed to reality to leave this realm, leaving your body in great danger. " . "Unfortunately, nobody was near to help you when the monsters arrived to eat you. " @@ -98,6 +105,8 @@ cf::NDI_RED ); } + } elsif (safe_spot $m, $x, $y) { + # do nothing, this is simply ok without a special scary message } else { $ob->message ( "You didn't use a bed to reality to leave this realm. This is very dangerous, " @@ -398,7 +407,7 @@ Coro::Timer::sleep 0.2; } - $ob->reply (undef, "Welcome to Crossfire!"); + $ob->reply (undef, "Welcome to Deliantra!"); delete $pl->{deny_save}; @@ -494,10 +503,8 @@ our $SCHEDULER = cf::async_ext { $Coro::current->{desc} = "player scheduler"; - my $schedule_interval = Coro::Event->timer (after => 1, data => cf::WF_AUTOCANCEL); while () { - $schedule_interval->interval ($SCHEDULE_INTERVAL); - $schedule_interval->next; + Coro::EV::timer_once $SCHEDULE_INTERVAL; # this weird form of iteration over values is used because # the hash changes underneath us frequently, and for