Параметры в конфиге (в скобках - значения по умолчанию):
charRecreate_create (0): 0 - не создавать персонажей; 1 - создавать
charRecreate_delete (0): 0 - не удалять персонажей; 1 - удалить один раз (сбрасывается в 0); 2 - удалять всегда
charRecreate_stats (5 5 5): три цифры, str agi dex (например: 9 9 9)
charRecreate_names (vocal 6 12): "vocal MINLEN MAXLEN" - случайное имя указанной длины; список имён через запятую - случайное из них
charRecreate_email: почта для удаления
charRecreate_nodelay (0): 0 - пауза в 10 секунд перед удалением ("маскировка" под клиент), 1 - без паузы
char_create.pl
Код: Выделить всё
package char_create;
# by EternalHarvest (rofan.ru)
# Character creation and deletion
# Config options:
# charRecreate_create 0 to never create, 1 to create (if no character in current slot)
# charRecreate_delete 0 to never delete, 1 to delete once, 2 to delete always
# charRecreate_email email for deleting
# charRecreate_stats STR AGI DEX (example: 9 9 9)
# charRecreate_names vocal MINLEN MAXLEN | comma-separated list
# charRecreate_nodelay 1 to bypass delay when deleting character
use strict;
use Globals;
use Log qw/message/;
my $configPrefix = 'charRecreate_';
Plugins::register ('char_create', 'Character creation and deletion', \&unload);
my $hooks = Plugins::addHooks (['charSelectScreen', \&charSelect, undef]);
sub unload {Plugins::delHooks ($hooks);}
my $justCreated = 0;
sub charSelect {
my (undef, $args) = @_;
my $charId = 0 + $config{'char'};
if ($chars[$charId]) {
if (!$justCreated && $config{$configPrefix.'delete'}) {
message "Deleting character...\n", 'connection';
sleep 10 unless $config{$configPrefix.'nodelay'};
Misc::configModify ($configPrefix.'delete', '0') unless $config{$configPrefix.'delete'} == 2;
$messageSender->sendCharDelete ($chars[$charId]{charID}, $config{$configPrefix.'email'});
$AI::temp::delIndex = $charId;
$args->{return} = 2;
} else {
$args->{autoLogin} = 1;
$justCreated = 0;
}
} elsif ($config{$configPrefix.'create'}) {
message "Creating character...\n", 'connection';
my $name;
if ($config{$configPrefix.'names'} =~ /^vocal\s+(\d+)\s+(\d+)$/) {
$name = ucfirst Utils::vocalString (1 + $1 + int rand $2 - $1);
} elsif ($config{$configPrefix.'names'}) {
my @names = split /,/, $config{$configPrefix.'names'};
$name = $names[int rand scalar @names];
$name =~ s/^\s+|\s+$//g;
} else {
$name = ucfirst Utils::vocalString (6 + int rand 6);
}
my @st = $config{$configPrefix.'stats'} =~ /^(\d)\s*(\d)\s*(\d)$/ ? ($1, $2, $3) : (5, 5, 5);
$messageSender->sendCharCreate (
$charId, $name, $st[0], $st[1], 10-$st[2], 10-$st[0], $st[2], 10-$st[1],
5 + int rand 15, 5 + int rand 15
);
$args->{return} = 2;
$justCreated = 1;
}
$timeout{charlogin}{time} = time;
}