Страница 1 из 2

char_create - автоматическое создание и удаление персонажей

Добавлено: Чт янв 15, 2009 8:46 pm
EternalHarvest
На основе плагина char_recreate.

Параметры в конфиге (в скобках - значения по умолчанию):
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;
}

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 1:03 am
4epT
сам делал? или спёр где? :twisted:

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 1:30 am
Святой Инквизитор
Написал же модификация)))

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 8:26 am
EternalHarvest
Ну в изначальном виде он умел удалять только при каждом перезаходе. Ещё после удаления был глюк, перезаходить надо было, чтоб создать чара в том же слоте. Переписал под свои нужды.

Добавлено спустя 1 минуту 11 секунд:
4epT писал(а):или спёр где? :twisted:
Что такая реакция сразу? Если я просто скопирую откуда-нибудь, я напишу об этом. Только зачем, если обычно можно просто ссылку дать?

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 1:17 pm
4epT
да не, я ниче против не имею.. я вообще что-то тебя с другим спутал...

мне понравилось простое решение со статами :)

для общего развития поясни что делает строчка:
substr ($name, 0, 1) =~ tr/a-z/A-Z/;

проверяет чтобы не было лишних символов??

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 1:57 pm
EternalHarvest
4epT писал(а):для общего развития поясни что делает строчка:
substr ($name, 0, 1) =~ tr/a-z/A-Z/;
Делает первую букву ника заглавной.

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 8:09 pm
4epT
хм.. у меня как-то по проще было.. если восстановлю свой винт, то скину

Re: Модификация char_create

Добавлено: Пт янв 16, 2009 9:33 pm
Kissa2k
Угу, функция ucfirst

Re: Модификация char_create

Добавлено: Вс янв 18, 2009 5:39 pm
Reras
4epT
Я ниче никому не пересылал. Как договаривались.
Могу немного порекламить производителя Черта и его рекламного бота за ДОРОГО :ROFL:
Классная штука.

Re: Модификация char_create

Добавлено: Сб фев 21, 2009 5:20 pm
zigahh
а как сделать чтобы имя перса создавалось не рандомное а допустим из некоего списка???

Re: Модификация char_create

Добавлено: Чт фев 26, 2009 11:17 am
Funt
М...Ну в двух словах описать довольно трудно...
Нужно прочитать файл,проверить каждое имя на наличие ошибок(например присутвие спец символов),затем попробывать создать чара с этим именем,если уже существует,то удалить его из списка и бла бла бла ;)

Re: Модификация char_create

Добавлено: Пн мар 16, 2009 10:12 pm
dvdc
Или... написать функцию, которая создавала бы "правильные" имена, согласно негласно принятым правилам онлайновых мультиплеерных РПГ :) ну типа там Rimurgar, Dragomir, Alaran, Belazar, и прочие прочие прочие :)
блин, так получилось что я php знаю настолько хорошо, что генератор таких имён могу написать за минуту. вот бы имплементировать php в перле )))

кстати, плагин неплохой, рабочий, но загадочный )) оптимизировать его надо бы...

Re: Модификация char_create

Добавлено: Пн мар 16, 2009 10:28 pm
EternalHarvest
dvdc писал(а):блин, так получилось что я php знаю настолько хорошо, что генератор таких имён могу написать за минуту. вот бы имплементировать php в перле )))
В перле чего только нет: "Integrating PHP and Perl" (PHP::Interpreter). Но вот только зачем?..
dvdc писал(а):но загадочный )) оптимизировать его надо бы...
В чём же загадочность и где требуется оптимизация?
Новую версию выложу, она немного полегче для восприятия может будет...

Re: Модификация char_create

Добавлено: Пн мар 16, 2009 10:55 pm
dvdc
EternalHarvest
не, это всё игрушки. я не могу использовать объекты php в перле )) перловский интерпретатор рухнет.

Re: Модификация char_create

Добавлено: Пн мар 16, 2009 11:41 pm
EternalHarvest
Новая версия. Изменения:

1. Параметр charRecreate переименован в charRecreate_delete.
2. Можно отключить автоматическое создание персонажей.
3. Можно задать список имён, или длину имени для случайной генерации.
4. Добавлена пауза перед удалением персонажа.