Эврика!!! Free Cast у сагов заработало!!
Модератор: 4epT
Эврика!!! Free Cast у сагов заработало!!
Наконецто! болбил, я freecast.pl для Сага, долбил и сделал) и всё РАБОТАЕТ ТЕПЕРЬ!
Значит так, обьясню что я сделал, что плагин заработал.
Ну сначало просто скинул freecast.pl в соответствующую папку, попробовал не идёт пишет ошибку (см. скрин). И обратил внимание на выделеную уже мной строчку с надписью "line 18"
Дальше открыл в DzSoft Perl Editor этот файл, нашёл эту строчку(см второй скрин 18 строчка выделенная). Ну я и подумал, раз в этом дело, может там что то поменять?) я в настройках и созданиях плагинов полный нуб, поэтому стал просто всячески издеваться над словом Skills. Ну и проверял постоянно.
И ВДРУГ когда я просто стёр последнюю букву "s", сохранения и запуска бота, саг ЗАРАБОТАЛ! Значит причина была в этой строчке. Можно сказать мну повезло) и я рад)
Скидываю файл для других, пусть пользуются)
package freeCast;
# This plugin is licensed under the GNU GPL
# Copyright 2005 by kaliwanagan
# --------------------------------------------------
# How to install this thing..:
#
# The plugin will activate iff:
# you have the skill free cast at level 1 or higher, and
# attackUseWeapon is set to 1, and
# you are using an attackSkillSlot that has a cast bar
use strict;
use Plugins;
use Globals;
use Log qw(message warning error);
use AI;
use skill;
use Misc;
use Network;
use Network::Send;
use Utils;
use Math::Trig;
Plugins::register('Free Cast', 'experimental sage free cast support', \&Unload);
my $hook1 = Plugins::addHook('AI_post', \&call);
my $ID;
my $monster;
my %timeout;
sub Unload {
Plugins::delHook('AI_post', $hook1);
}
sub call {
my $i = AI::findAction("attack");
if (defined $i) {
my $args = AI::args($i);
$ID = $args->{ID};
$monster = $monsters{$ID};
}
if (AI::action eq "skill_use") {
cast();
}
}
sub cast {
if (($config{'attackUseWeapon'}) && ($char->{skills}{SA_FREECAST}{lv}) && main::timeOut(\%timeout)){
if(Utils::distance(main::calcPosition($char), main::calcPosition($monster)) <= ($config{"attackDistance"})) {
sendAttack(\$main::remote_socket, $monster->{ID}, ($config{'tankMode'}) ? 0 : 7);
} else {
my %attackhash = getAttackCoords(main::calcPosition($monster), main::calcPosition($char), ($config{"attackDistance"} - 1));
sendMove(\$main::remote_socket, $attackhash{x}, $attackhash{y});
}
}
$timeout{time} = time;
$timeout{timeout} = 1;
}
sub getAttackCoords {
my ($obj1, $obj2, $distance) = @_;
my %attack;
if ($$obj1{x} == $$obj2{x}) {
$attack{x} = $$obj2{x};
$attack{y} = ($$obj1{y} > $$obj2{y}) ? $$obj2{y} + $distance : $$obj2{y} - $distance;
return %attack;
}
if ($$obj1{y} == $$obj2{y}) {
$attack{y} = $$obj2{y};
$attack{x} = ($$obj1{x} > $$obj2{x}) ? $$obj2{x} + $distance : $$obj2{x} - $distance;
return %attack;
}
my $ang = atan(($$obj1{y} - $$obj2{y}) / ($$obj1{x} - $$obj2{x}));
$attack{x} = ($$obj1{x} > $$obj2{x}) ? $$obj2{x} + ($distance * cos($ang)) : $$obj2{x} - ($distance * cos($ang));
$attack{y} = ($$obj1{y} > $$obj2{y}) ? $$obj2{y} + ($distance * sin($ang)) : $$obj2{y} - ($distance * sin($ang));
return %attack;
};
return 1;
И файл тоже сам. Всем спасибо) я так РАД
Значит так, обьясню что я сделал, что плагин заработал.
Ну сначало просто скинул freecast.pl в соответствующую папку, попробовал не идёт пишет ошибку (см. скрин). И обратил внимание на выделеную уже мной строчку с надписью "line 18"
Дальше открыл в DzSoft Perl Editor этот файл, нашёл эту строчку(см второй скрин 18 строчка выделенная). Ну я и подумал, раз в этом дело, может там что то поменять?) я в настройках и созданиях плагинов полный нуб, поэтому стал просто всячески издеваться над словом Skills. Ну и проверял постоянно.
И ВДРУГ когда я просто стёр последнюю букву "s", сохранения и запуска бота, саг ЗАРАБОТАЛ! Значит причина была в этой строчке. Можно сказать мну повезло) и я рад)
Скидываю файл для других, пусть пользуются)
package freeCast;
# This plugin is licensed under the GNU GPL
# Copyright 2005 by kaliwanagan
# --------------------------------------------------
# How to install this thing..:
#
# The plugin will activate iff:
# you have the skill free cast at level 1 or higher, and
# attackUseWeapon is set to 1, and
# you are using an attackSkillSlot that has a cast bar
use strict;
use Plugins;
use Globals;
use Log qw(message warning error);
use AI;
use skill;
use Misc;
use Network;
use Network::Send;
use Utils;
use Math::Trig;
Plugins::register('Free Cast', 'experimental sage free cast support', \&Unload);
my $hook1 = Plugins::addHook('AI_post', \&call);
my $ID;
my $monster;
my %timeout;
sub Unload {
Plugins::delHook('AI_post', $hook1);
}
sub call {
my $i = AI::findAction("attack");
if (defined $i) {
my $args = AI::args($i);
$ID = $args->{ID};
$monster = $monsters{$ID};
}
if (AI::action eq "skill_use") {
cast();
}
}
sub cast {
if (($config{'attackUseWeapon'}) && ($char->{skills}{SA_FREECAST}{lv}) && main::timeOut(\%timeout)){
if(Utils::distance(main::calcPosition($char), main::calcPosition($monster)) <= ($config{"attackDistance"})) {
sendAttack(\$main::remote_socket, $monster->{ID}, ($config{'tankMode'}) ? 0 : 7);
} else {
my %attackhash = getAttackCoords(main::calcPosition($monster), main::calcPosition($char), ($config{"attackDistance"} - 1));
sendMove(\$main::remote_socket, $attackhash{x}, $attackhash{y});
}
}
$timeout{time} = time;
$timeout{timeout} = 1;
}
sub getAttackCoords {
my ($obj1, $obj2, $distance) = @_;
my %attack;
if ($$obj1{x} == $$obj2{x}) {
$attack{x} = $$obj2{x};
$attack{y} = ($$obj1{y} > $$obj2{y}) ? $$obj2{y} + $distance : $$obj2{y} - $distance;
return %attack;
}
if ($$obj1{y} == $$obj2{y}) {
$attack{y} = $$obj2{y};
$attack{x} = ($$obj1{x} > $$obj2{x}) ? $$obj2{x} + $distance : $$obj2{x} - $distance;
return %attack;
}
my $ang = atan(($$obj1{y} - $$obj2{y}) / ($$obj1{x} - $$obj2{x}));
$attack{x} = ($$obj1{x} > $$obj2{x}) ? $$obj2{x} + ($distance * cos($ang)) : $$obj2{x} - ($distance * cos($ang));
$attack{y} = ($$obj1{y} > $$obj2{y}) ? $$obj2{y} + ($distance * sin($ang)) : $$obj2{y} - ($distance * sin($ang));
return %attack;
};
return 1;
И файл тоже сам. Всем спасибо) я так РАД
- Вложения
-
- freecast.rar
- Пользуйтесь!)
- (928 байт) 346 скачиваний
-
- Это ошибка которая у меня появлялась и Кора вылетала.
- 1-ошибка.JPG (73.78 КБ) 5814 просмотров
-
- Вот оно
- 18-я строчка.JPG (13.6 КБ) 5798 просмотров
Последний раз редактировалось AndreyLun Вт дек 04, 2007 12:10 am, всего редактировалось 2 раза.
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Кстати, дарагой афтар, а вот мине чисто интересно, а ты читал воооот эту тему? -
http://www.openkore.com/wiki/index.php/ ... and_higher
http://www.openkore.com/wiki/index.php/ ... and_higher
Понял намёк..piroJOKE писал(а):Кстати, дарагой афтар, а вот мине чисто интересно, а ты читал воооот эту тему? -
http://www.openkore.com/wiki/index.php/ ... and_higher
Сегодня проверял плагин при атаке на расстоянии - не работает, буду читать, может решу проблему.
Кароче, поспешил я... людей насмешил. Плагин не работает на расстоянии, только при ближней атаке. Прошу прощения, что смуту навёл. Раз я заварил эту "кашу" мне её и расхлёбывать. Даже самому стыдно(((.
Решил освоить знания для создания плагинов. Поэтому прошу: кто нибудь скиньте какие нибудь ссылки на учебники, может, или программу обучающую создания плагинов. Желательно на Русском языке. Буду признателен в помощи. Приду с работы займусь углублённым изучением. Как освою азы, попробую создать заново плагин для freecast'а, что то вроде копии данноо плагина, только переделанный под Кору
Решил освоить знания для создания плагинов. Поэтому прошу: кто нибудь скиньте какие нибудь ссылки на учебники, может, или программу обучающую создания плагинов. Желательно на Русском языке. Буду признателен в помощи. Приду с работы займусь углублённым изучением. Как освою азы, попробую создать заново плагин для freecast'а, что то вроде копии данноо плагина, только переделанный под Кору
2.0.1_and_higher
а по английски это как звучит? Чтобы в инете найти...kLabMouse писал(а):AndreyLun
Ну, в помощь тебе Гугль Транслейт, местами помогает.
Я пойду, и доколбашу Task::Attack уже с поддержкой сагов, в том числе.
Ну в принципи я вчера просматривал некоторые плагины и немного стал понимать, скажем так, процессы, которые "протекают" в этих файлах. Ещё со школы изучалось на информатике такие языки как Байсик или Паскаль и нашёл с этими оболочками многие сходства:piroJOKE писал(а):
Плагины врезаются в спецально подготовленные для них места вызова в теле ОК. Посмотри код десятка разных плагинов, найди места в ОК, откуда они вызываюццо, и всё поймешь.
То же примерное начало, тот же ввод переменных и функций.
Примерно такое же написание условий и их выполнение.
По идее Фрикаст нужен, чтобы кастить на моба и убегать от него или кастить на себя некоторые заклинания и бежать в это время.
То что у меня получилось работает так: Саг подбегает к мобу на расстояние ближней атаки, начинает на него кастовать Болт и сразу бьёт его книгой, бьёт, бьёт(иногда автокаст срабатывает), потом срабатывает кастующийся Болт, возможно убивает его, если нет - опять кастует. Если убивает бежит дальше. Когда кастует на себя Энчант- стоит, когда кастит на себя Энерг.защиту - стоит. А когда настроил Сага на Глину и попробовал, так оказалось, что он от них не бежит, хотя я в конфиге все необходимые настройки поставил, в том числе runfromtarget...
Значит получается, что часть плагина работает? а часть нет, вот и буду искать ...[/quote]
Последний раз редактировалось AndreyLun Вт дек 04, 2007 8:01 pm, всего редактировалось 1 раз.