--- deliantra/server/ext/login.ext 2007/01/13 23:06:13 1.25 +++ deliantra/server/ext/login.ext 2007/01/23 03:45:44 1.28 @@ -57,7 +57,13 @@ sub check_clean_save { my ($pl) = @_; - unless (delete $pl->{clean_save}) { + if (my $time = delete $pl->{unclean_save}) { + $pl->ns->send_drawinfo ( + "You didn't use a savebed to leave this realm. This is very dangerous, " + . "as lots of things could happen when you leave by other means, such as cave-ins, " + . "or monsters suddenly snapping your body. Better use a savebed next time.", + cf::NDI_RED + ); #d#TODO } } @@ -158,7 +164,6 @@ my $pl = cf::player::find $user or next; $pl->connect ($ns); check_clean_save $pl; - $pl->{clean_save} = 1; last; } elsif (can_cleanup $pl, $mtime) { Coro::Timer::sleep 1; @@ -330,7 +335,7 @@ $_->ob->message ("$name left the game.", cf::NDI_DK_ORANGE | cf::NDI_UNIQUE) for cf::player::list; } else { $_->ob->message ("$name uncerimoniously disconnected.", cf::NDI_DK_ORANGE | cf::NDI_UNIQUE) for cf::player::list; - delete $pl->{clean_save}; + $pl->{unclean_save} = $cf::RUNTIME; } }, ); @@ -345,8 +350,9 @@ our $SAVE_TIMEOUT = 20; # save players every n seconds our $SCHEDULER = cf::async_ext { + my $schedule_interval = Coro::Event->timer (after => 1, interval => $SCHEDULE_INTERVAL); while () { - Coro::Timer::sleep $SCHEDULE_INTERVAL; + $schedule_interval->next; # this weird form of iteration over values is used because # the hash changes underneath us frequently, and for @@ -375,7 +381,8 @@ ## pl_ref == one from object + one from cf::PLAYER ## ob_ref == one from simply being an object - if ($pl_ref == 2 && $ob_ref == 1) { + #TODO: the above should be correct, understand the 1/0, respectively + if ($pl_ref == 1 && $ob_ref == 0) { warn "player-scheduler destroy ", $ob->name;#d# # remove from sight and get fresh "copies"