… | |
… | |
354 | |
354 | |
355 | $coro |
355 | $coro |
356 | } |
356 | } |
357 | |
357 | |
358 | sub write_runtime { |
358 | sub write_runtime { |
|
|
359 | my $guard = cf::lock_acquire "write_runtime"; |
|
|
360 | |
359 | my $runtime = cf::localdir . "/runtime"; |
361 | my $runtime = cf::localdir . "/runtime"; |
360 | |
362 | |
361 | my $fh = aio_open "$runtime~", O_WRONLY | O_CREAT, 0644 |
363 | my $fh = aio_open "$runtime~", O_WRONLY | O_CREAT, 0644 |
362 | or return; |
364 | or return; |
363 | |
365 | |
… | |
… | |
1028 | =cut |
1030 | =cut |
1029 | |
1031 | |
1030 | sub quit_character { |
1032 | sub quit_character { |
1031 | my ($pl) = @_; |
1033 | my ($pl) = @_; |
1032 | |
1034 | |
|
|
1035 | my $name = $pl->ob->name; |
|
|
1036 | |
1033 | $pl->{deny_save} = 1; |
1037 | $pl->{deny_save} = 1; |
1034 | $pl->password ("*"); # this should lock out the player until we nuked the dir |
1038 | $pl->password ("*"); # this should lock out the player until we nuked the dir |
1035 | |
1039 | |
1036 | $pl->invoke (cf::EVENT_PLAYER_LOGOUT, 1) if $pl->active; |
1040 | $pl->invoke (cf::EVENT_PLAYER_LOGOUT, 1) if $pl->active; |
1037 | $pl->deactivate; |
1041 | $pl->deactivate; |
… | |
… | |
1041 | my $path = playerdir $pl; |
1045 | my $path = playerdir $pl; |
1042 | my $temp = "$path~$cf::RUNTIME~deleting~"; |
1046 | my $temp = "$path~$cf::RUNTIME~deleting~"; |
1043 | aio_rename $path, $temp; |
1047 | aio_rename $path, $temp; |
1044 | delete $cf::PLAYER{$pl->ob->name}; |
1048 | delete $cf::PLAYER{$pl->ob->name}; |
1045 | $pl->destroy; |
1049 | $pl->destroy; |
|
|
1050 | |
|
|
1051 | my $prefix = qr<^~\Q$name\E/>; |
|
|
1052 | |
|
|
1053 | # nuke player maps |
|
|
1054 | $cf::MAP{$_}->nuke for grep /$prefix/, keys %cf::MAP; |
|
|
1055 | |
1046 | IO::AIO::aio_rmtree $temp; |
1056 | IO::AIO::aio_rmtree $temp; |
|
|
1057 | } |
|
|
1058 | |
|
|
1059 | =item $pl->kick |
|
|
1060 | |
|
|
1061 | Kicks a player out of the game. This destroys the connection. |
|
|
1062 | |
|
|
1063 | =cut |
|
|
1064 | |
|
|
1065 | sub kick { |
|
|
1066 | my ($pl, $kicker) = @_; |
|
|
1067 | |
|
|
1068 | $pl->invoke (cf::EVENT_PLAYER_KICK, $kicker); |
|
|
1069 | $pl->killer ("kicked"); |
|
|
1070 | $pl->ns->destroy; |
1047 | } |
1071 | } |
1048 | |
1072 | |
1049 | =item cf::player::list_logins |
1073 | =item cf::player::list_logins |
1050 | |
1074 | |
1051 | Returns am arrayref of all valid playernames in the system, can take a |
1075 | Returns am arrayref of all valid playernames in the system, can take a |
… | |
… | |
2521 | write_runtime |
2545 | write_runtime |
2522 | or warn "ERROR: unable to write runtime file: $!"; |
2546 | or warn "ERROR: unable to write runtime file: $!"; |
2523 | }; |
2547 | }; |
2524 | } |
2548 | } |
2525 | |
2549 | |
2526 | |
|
|
2527 | $WAIT_FOR_TICK->broadcast; |
2550 | $WAIT_FOR_TICK->broadcast; |
2528 | $WAIT_FOR_TICK_ONE->send if $WAIT_FOR_TICK_ONE->awaited; |
2551 | $WAIT_FOR_TICK_ONE->send if $WAIT_FOR_TICK_ONE->awaited; |
2529 | |
2552 | |
2530 | # my $AFTER = Event::time; |
2553 | # my $AFTER = Event::time; |
2531 | # warn $AFTER - $NOW;#d# |
2554 | # warn $AFTER - $NOW;#d# |