Plugin Guide: различия между версиями

Материал из Руководство по OpenKore
Перейти к навигации Перейти к поиску
мНет описания правки
Нет описания правки
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
На данный момент (апрель 2010 года) имеется устаревший мануал по написанию плагинов - [[How to write plugins for OpenKore]]. Настало время переписать его. Приглашаются все желающие помочь написать новый мануал. По-моему стоило бы осветить следующие вопросы:
На данный момент (апрель 2010 года) имеется устаревший мануал по написанию плагинов - [[How to write plugins for OpenKore]]. Настало время переписать его. Приглашаются все желающие помочь написать новый мануал. По-моему стоило бы осветить следующие вопросы:
#Какие модули подключать и за что отвечает тот или иной модуль? Например:
1. Какие модули подключать и за что отвечает тот или иной модуль? Например:
  use strict;
  use strict;
  use Plugins;
  use Plugins;
Строка 10: Строка 10:
  use Task::MapRoute;
  use Task::MapRoute;
  use Task::TalkNPC;
  use Task::TalkNPC;
#Как написать плагин, который добавляет новую консольную команду?
 
#Как сделать так, чтобы консольная команда понимала параметры?
: strict - прагма, не модуль
#Как работать с хуками? Какие хуки есть?
: Log - импорт функций вывода на консоль
#Как следует работать с параметрами конфига? А с блочными?
: Globals - импорт переменных $char, %config etc
#Как сделать таймер, чтобы плагин срабатывал через определённое время?
: остальное нужно для конкретных задач, и для них же надо уже знать, что это за модуль, как работает и зачем нужен
#Как работать с очередью ИИ?
: Utils, Misc - некоторые функции общего назначения
 
2. Как написать плагин, который добавляет новую консольную команду?
my $commands = Commands::register(
[$command, $description, $coderef],
[$command, $description, $coderef],
);
Commands::unregister($commands); # в unload
 
3. Как сделать так, чтобы консольная команда понимала параметры?
sub handler {
my ($command, $args_string) = @_;
Log::message($args_string);
}
 
4. Как работать с хуками?
 
5. Какие хуки есть?
: http://forums.openkore.com/viewtopic.php?t=8648
 
6. Как следует работать с параметрами конфига?
: чтение: $Globals::config{param}
: запись: Misc::configModify('param', 'value')
 
7. А с блочными?
: см. Data::Dumper или исходники мест, работающих с блоками конфига
 
8. Как сделать таймер, чтобы плагин срабатывал через определённое время?
: хук mainLoop_pre
 
9. Как работать с очередью ИИ?


Кто написал хотя бы три плагина для OpenKore уже мог выработать для себя определённую схему написания плагина, которую можно было бы взять за основу начинающим. Во многих случаях разработчик плагина сталкивается с однотипными задачами, которые как раз и можно было бы упомянуть в данном мануале. Например, прежде чем прочитать значение какого-то параметра конфига, следует проверить - а есть ли этот параметр вообще?
Кто написал хотя бы три плагина для OpenKore уже мог выработать для себя определённую схему написания плагина, которую можно было бы взять за основу начинающим. Во многих случаях разработчик плагина сталкивается с однотипными задачами, которые как раз и можно было бы упомянуть в данном мануале. Например, прежде чем прочитать значение какого-то параметра конфига, следует проверить - а есть ли этот параметр вообще?
: В общем случае, не стоит. Автовивифицировать там нечего; undef выражается пустой строкой, она же будет при наличии параметра без значения.
Я уверен, что есть много других интересных тем о написании плагинов для OpenKore.
Я уверен, что есть много других интересных тем о написании плагинов для OpenKore.


Строка 26: Строка 58:


'''Примечание.''' Смотри также [http://rofan.ru/viewtopic.php?f=8&t=8976 Вопрос по плагину] - как сделать хук с передачей параметров.
'''Примечание.''' Смотри также [http://rofan.ru/viewtopic.php?f=8&t=8976 Вопрос по плагину] - как сделать хук с передачей параметров.
* среди плагинов в svn можно найти неплохие примеры

Текущая версия от 22:39, 19 мая 2010

На данный момент (апрель 2010 года) имеется устаревший мануал по написанию плагинов - How to write plugins for OpenKore. Настало время переписать его. Приглашаются все желающие помочь написать новый мануал. По-моему стоило бы осветить следующие вопросы: 1. Какие модули подключать и за что отвечает тот или иной модуль? Например:

use strict;
use Plugins;
use Settings;
use Log qw(message error);
use Utils;
use Globals;
use Task;
use Task::MapRoute;
use Task::TalkNPC;
strict - прагма, не модуль
Log - импорт функций вывода на консоль
Globals - импорт переменных $char, %config etc
остальное нужно для конкретных задач, и для них же надо уже знать, что это за модуль, как работает и зачем нужен
Utils, Misc - некоторые функции общего назначения

2. Как написать плагин, который добавляет новую консольную команду?

my $commands = Commands::register(
	[$command, $description, $coderef],
	[$command, $description, $coderef],
);

Commands::unregister($commands); # в unload

3. Как сделать так, чтобы консольная команда понимала параметры?

sub handler {
	my ($command, $args_string) = @_;
	Log::message($args_string);
}

4. Как работать с хуками?

5. Какие хуки есть?

http://forums.openkore.com/viewtopic.php?t=8648

6. Как следует работать с параметрами конфига?

чтение: $Globals::config{param}
запись: Misc::configModify('param', 'value')

7. А с блочными?

см. Data::Dumper или исходники мест, работающих с блоками конфига

8. Как сделать таймер, чтобы плагин срабатывал через определённое время?

хук mainLoop_pre

9. Как работать с очередью ИИ?

Кто написал хотя бы три плагина для OpenKore уже мог выработать для себя определённую схему написания плагина, которую можно было бы взять за основу начинающим. Во многих случаях разработчик плагина сталкивается с однотипными задачами, которые как раз и можно было бы упомянуть в данном мануале. Например, прежде чем прочитать значение какого-то параметра конфига, следует проверить - а есть ли этот параметр вообще?

В общем случае, не стоит. Автовивифицировать там нечего; undef выражается пустой строкой, она же будет при наличии параметра без значения.

Я уверен, что есть много других интересных тем о написании плагинов для OpenKore.


Примечание. Смотри также (FAQ) Мой первый плагин. По-Perl-о.

Примечание. Смотри также Как писать плагины для OpenKore.

Примечание. Смотри также Вопрос по плагину - как сделать хук с передачей параметров.

  • среди плагинов в svn можно найти неплохие примеры