xConf.pl - меняем на ходу mon_control/pickupitems/items

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

плаг готов остался тока марафет +то что выше написано :Yahoo!:

Добавлено спустя 46 секунд:

кстате его сюда вывалить, иль красиво, да с описанием на новую страничку?
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

4epT писал(а):Люди, помогите. Есть у нас такая вот процедурка: :o
Да... точно, итератор не сбрасывается... сорри.

можно сделать так:

Код: Выделить всё

sub fi {
	my (undef, $mob) = @_;

my $found = 0;
foreach $val (values %monsters_lut) {
   last if ($found = (lc($val) eq lc($mob))); 
}
if ($found) {
message "Monster $val found\n";
}
else { message "Monster '$mob' is not found\n"}
}
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

4epT писал(а):кстате его сюда вывалить, иль красиво, да с описанием на новую страничку?
Сюда. На эту тему уже есть ссылки из других мест.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

ага вроде всё супер, тока нужно так прописать:

Код: Выделить всё

foreach $val (values %monsters_lut) {
   $var = $val;
   last if ($found = (lc($val) eq lc($mob))); 
}
message "Monster $var found\n";
иначе не выводит $var из цикла

Добавлено спустя 17 минут 17 секунд:

такс а как сделать так, чтобы он ещё и по ключам искал? "each %monsters_lut" тут вроде как не катит, создавать второй цикл (keys %monsters_lut)?
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

4epT писал(а):Добавлено спустя 17 минут 17 секунд:

такс а как сделать так, чтобы он ещё и по ключам искал? "each %monsters_lut" тут вроде как не катит, создавать второй цикл (keys %monsters_lut)?
Да что то я косячу.
А что значит по ключам искать? Если проверить есть ли моб с таким ID то тут цикл не нужен даже -
if (%monsters_lut{$ID}) { ... }
Аватара пользователя
DeniZka
Разработчик
Сообщения: 410
Зарегистрирован: Ср ноя 15, 2006 6:36 pm
Сервер RO:: rRO AsgardRO
Откуда: Mos-Cow Citadel
Контактная информация:

Сообщение DeniZka »

Глянул я тут плагин изнутри и немного ужоснулся. =) Lims молодец, идея хорошая реализовывать даже взялся, а вот реализовал как-то не до хорошо.
Замутил оч. простую но оч. работоспособную версию.

Код: Выделить всё

# xConf plugin by DeniZka 
# Based on Lims idea
# Last changes 23.01.2008
# This source code is licensed under the 
# GNU General Public License, Version 2. 
# See http://www.gnu.org/licenses/gpl.html

package xConf;
use Log qw(message error);

Plugins::register('xConf', 'commands for change monControls, etc', \&onUnload);
my $ID = Commands::register(
	['iconf', 'items_control edit', \&xConf],
	['pconf', 'pickupitems edit',   \&xConf],
	['mconf', 'mon_control edit',   \&xConf]
);

sub onUnload {
	Commands::unregister($ID);
	message 'xConf plugin unloaded\n';
}

sub xConf {
	my ($cmd, $args) = @_;
	my ($key, $value) = split(/\s(-?\d.*)/, $args, 2);
	
	my ($conff, $subj);
	if($cmd eq 'pconf'){
		$conff = 'pickupitems.txt';
		$subj = 'item|all [flag]'
	} elsif ($cmd eq 'mconf'){
		$conff = 'mon_control.txt';
		$subj = 'monster [attack teleport search skillcancel lv joblv hp sp weight]'
	} elsif ($cmd eq 'iconf'){
		$conff = 'items_control.txt';
		$subj = 'item|all [minimum auto-store auto-sell put_in_cart get_from_cart]'
	}

	if(!$key){
		error "Usage: $cmd <$subj>\n";
		return
	}
	
	my @folders = Settings::getControlFolders();
	open(F, "< $folders[0]/$conff");
	my @conff;
	{	local($/);
		@conff = split(/\n/, <F>);
	}
	close F;
	
	if ($value){
		for (my $i = 0; $i <= $#conff; $i++) {
			last if ($conff[$i] =~ s/^$key -?\d.*/$key $value/i);
			if ($i == $#conff){ push(@conff, "$key $value") }
		}
	} else {
		for (my $i = 0; $i <= $#conff; $i++) {
			if ($conff[$i] =~ /^$key -?\d.*/i){
				message "$key setted in $conff as\n$conff[$i]\n";
				return
			}
		}
		message "$key is not setted in $conff\n";
		return
	}
	
	open(F, "> $folders[0]/$conff");
	print F join("\n", @conff);
	close F;
	
	Commands::run("reload $conff");
}
Последний раз редактировалось DeniZka Ср янв 23, 2008 11:04 am, всего редактировалось 4 раза.
Изображение
1t 1$ t00 900d d4y 2 d1e

?(???)?(???)?( ?Д?)?
Lims
Нууууп
Сообщения: 723
Зарегистрирован: Чт ноя 09, 2006 7:55 pm

Сообщение Lims »

DeniZka
Угу коряво... просто это мой первый опыт "программирования" на perl
Аватара пользователя
DeniZka
Разработчик
Сообщения: 410
Зарегистрирован: Ср ноя 15, 2006 6:36 pm
Сервер RO:: rRO AsgardRO
Откуда: Mos-Cow Citadel
Контактная информация:

Сообщение DeniZka »

Lims, Я так и понял.
Молодец, я это одобрямс, и не я один. Только зря ты бросил на полделе =)
Изображение
1t 1$ t00 900d d4y 2 d1e

?(???)?(???)?( ?Д?)?
Lims
Нууууп
Сообщения: 723
Зарегистрирован: Чт ноя 09, 2006 7:55 pm

Сообщение Lims »

DeniZka
всегда все на полделе бросаю.
хотя мне и моего плагина хватало(даж ни разу не пользовался. руки не доходили), может если бы пользовался, то решился бы усовершенствовать.
Аватара пользователя
Click
Разработчик
Сообщения: 1564
Зарегистрирован: Сб ноя 04, 2006 11:30 pm
Сервер RO:: clickro.sytes.net
Откуда: Великий Новгород
Контактная информация:

Сообщение Click »

DeniZka
чего ты там усовершенствовал?
Аватара пользователя
DeniZka
Разработчик
Сообщения: 410
Зарегистрирован: Ср ноя 15, 2006 6:36 pm
Сервер RO:: rRO AsgardRO
Откуда: Mos-Cow Citadel
Контактная информация:

Сообщение DeniZka »

Click
Ну я начал усовершенствовать код Limsa, с укарачивания всей структуры плагина... А в итоге камня на камне не оставил. Сравни исходники.
Работоспособность плагина Limsa так и не проверял, сомневаюсь что работает он корректно. А у меня недостающие значения конфигов дописываются, существующие значения изменяются. Простенько, как и хотел ПЖ.
Изображение
1t 1$ t00 900d d4y 2 d1e

?(???)?(???)?( ?Д?)?
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

DeniZka писал(а):Click
Ну я начал усовершенствовать код Limsa, с укарачивания всей структуры плагина... А в итоге камня на камне не оставил. Сравни исходники.
Работоспособность плагина Limsa так и не проверял, сомневаюсь что работает он корректно. А у меня недостающие значения конфигов дописываются, существующие значения изменяются. Простенько, как и хотел ПЖ.
Я конечно извиняюсь, но

- не вижу никаких усовершенствований
- твой плагин не проверял, но сомневаюсь что он работает
Аватара пользователя
DeniZka
Разработчик
Сообщения: 410
Зарегистрирован: Ср ноя 15, 2006 6:36 pm
Сервер RO:: rRO AsgardRO
Откуда: Mos-Cow Citadel
Контактная информация:

Сообщение DeniZka »

Проверем плаг лимса.
Есть в mon_control такие как
Maya и Maya Purple
Пишем mconf Maya Purple 1 1 1
получаем: Maya вдруг становится Maya Purple и получает такие же настройки. и наоборот
пишем mconf Maya и Maya Purple становится Maya.


DInvalid
Ок? Твоя очередь.
Изображение
1t 1$ t00 900d d4y 2 d1e

?(???)?(???)?( ?Д?)?
DInvalid
Грамотный
Сообщения: 368
Зарегистрирован: Вт ноя 14, 2006 4:54 pm

Сообщение DInvalid »

DeniZka писал(а): DInvalid
Ок? Твоя очередь.
Проверяем плаг DeniZka:

Вот начальное состояние mon_control

##### MVPs and Dangerous Monsters #####
Amon Ra 0 1 0
Arc Angeling 0 1 0
Baphomet 0 1 0
Bacsojin 0 1 0
Dark Illusion 0 1 0
Dark Lord 0 1 0
Detale 0 1 0
Doppelganger 0 1 0
Dracula 0 1 0
Drake 0 1 0
Eddga 0 1 0
Evil Snake Lord 0 1 0
Garm 0 1 0
General Ygnizem 0 1 0
Golden Thief Bug 0 2 0
Incantation Samurai 0 1 0
Lady Tany 0 1 0
Lord of Death 0 1 0
Maya Purple 0 1 0
Maya 0 1 0
Mistress 0 1 0
Moonlight Flower 0 1 0
Mutant Dragonoid 0 1 0
Orc Hero 0 1 0
Orc Lord 0 1 0
Osiris 0 1 0
Pharaoh 0 1 0
Phreeoni 0 1 0
RSX 0806 0 1 0
Stormy Knight 0 1 0
Tao Gunka 0 1 0
Thanatos 0 1 0
Turtle General 0 1 0
Vesper 0 1 0
Вводим:
mconf Maya 200
mconf Lord 200
mconf Orc 200

Получаем:

##### MVPs and Dangerous Monsters #####
Amon Ra 0 1 0
Arc Angeling 0 1 0
Baphomet 0 1 0
Bacsojin 0 1 0
Dark Illusion 0 1 0
Dark Lord 0 1 0
Detale 0 1 0
Doppelganger 0 1 0
Dracula 0 1 0
Drake 0 1 0
Eddga 0 1 0
Evil Snake Lord 0 1 0
Garm 0 1 0
General Ygnizem 0 1 0
Golden Thief Bug 0 2 0
Incantation Samurai 0 1 0
Lady Tany 0 1 0
Lord 200
Maya 200
Maya 0 1 0
Mistress 0 1 0
Moonlight Flower 0 1 0
Mutant Dragonoid 0 1 0
Orc 200
Orc Lord 0 1 0
Osiris 0 1 0
Pharaoh 0 1 0
Phreeoni 0 1 0
RSX 0806 0 1 0
Stormy Knight 0 1 0
Tao Gunka 0 1 0
Thanatos 0 1 0
Turtle General 0 1 0
Vesper 0 1 0
Аватара пользователя
DeniZka
Разработчик
Сообщения: 410
Зарегистрирован: Ср ноя 15, 2006 6:36 pm
Сервер RO:: rRO AsgardRO
Откуда: Mos-Cow Citadel
Контактная информация:

Сообщение DeniZka »

:lol: :lol: :lol:

Добавлено спустя 32 минуты 2 секунды:

ОК, исправил
Изображение
1t 1$ t00 900d d4y 2 d1e

?(???)?(???)?( ?Д?)?
Ответить