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

проверка на наличие чужих игроков / doCommandPlMod / etc

Добавлено: Вт янв 08, 2008 11:51 am
ovanur
Как зделать в атомакросе чтоб он вызывался на определенной (локации (например pay_dun05) и когда рядом находится другой игрок\игроки)?
На локации это понятно что location pay_dun05, а вот с проверкой на наличие других игроков проблема... :(
+
Можно ли через макрос использовать скиллы? (например шторм гаст на себя... 1раз)

Помогите пожалуйста! :roll:

Вот нашел такую команду - ss(<skill #>)[<level>]
<skill #> номер скилла из списка скиллов, который можно получить вызвав команду skills.
<level> уровень скилла.
Использует скилл на себе.
или
sl(<skill #> <x> <y>)[<level>]
<skill #> номер скилла из списка скиллов, который можно получить вызвав команду skills.
<x> x-координата.
<y> y-координата.
<level> уровень скилла.
Использует скилл на локации.
Если вместо х и у - написать $.pos будет ли так работать?

Добавлено: Вт янв 08, 2008 2:12 pm
piroJOKE
Со вторым пунктом делу помочь можно. А вот извини насчет "локации" и "применения скиллов" - изволь найти информацию сам.

Добавлено спустя 1 час 51 минуту 59 секунд:

PS: А вот модифицированный doCommand, как раз для такого случая.
К нему добавлен блок из CoreLogic'а, срабатывающий когда рядом находится "чужой" игрок (чужой - не из своей пати).

doCommandPlMod.pl:

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

package doCommand;

use strict;
use Plugins;
use Globals;
use Log qw(message warning error);
use Misc;
use Utils;
use Commands;
use Time::HiRes qw(time);

Plugins::register('doCommand', 'do a command on certain conditions', \&Unload);
my $hook = Plugins::addHook('AI_post', \&doCommand);

sub Unload {
	Plugins::delHook('AI_post', $hook);
}

my $time;

sub doCommand {
	my $prefix = "doCommand_";
	
	for (my $i =0; (exists $config{$prefix.$i}); $i++) {
		if ((main::checkSelfCondition($prefix.$i)) && main::timeOut($time, $config{$prefix.$i."_timeout"})) {

			my $todo = 1;
			if ($config{$prefix.$i."_onlyWhenUnSafe"}) {
				$todo = 0;
				foreach (@playersID) {
					if ($_ && !$char->{party}{users}{$_}) {
						$todo = 1;
						last;
					}
				}
			}
			if ($todo) {
				Commands::run($config{$prefix.$i});
				$time = time;
			}

		}
	}
}

return 1;
пример использования

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

doCommand pl {
	onlyWhenUnSafe 1
	timeout 3
}
Добавлено спустя 4 минуты 24 секунды:

NB: Модификация как следует не испытана!

Добавлено: Вт янв 08, 2008 2:35 pm
piroJOKE
перенесено в "плагины".

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

Если я правильно помню, то у ОК довольно грамотно сделан блок скиллов. И не смотря на то, что тебе, афтар, нужен "граундСкилл", ты можешь писать ss ## - он скастует его под себя.
Ну, и inMap опция в блоках проверки селфКондишена тоже есть.

Так что... задачка решена. ;)

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

Правда, обошлись без макроса. Ну, что поделаешь, иногда без него легче, чем с ним. :cry:

Добавлено: Вт янв 08, 2008 3:38 pm
ovanur
(удалено за ...)

Добавлено: Вт янв 08, 2008 5:17 pm
piroJOKE
ovanur писал(а):чтоб на определенной карте когда появится другой игрок, чар винганулся
Хрена тебе лысого. Ты про "винганулся" впервые заикнулся (под это в config.txt есть особая опция, читай доку), а до этого что-то морозил про сторм-гаст. Читай доку. :evil: