创建一个Atavism插件
使用AGIS代码的开发人员可能决定创建新的Atavism插件,如果他们想要实现默认情况下未提供的新系统(例如自定义天气系统或可能是证券交易系统)。以下步骤介绍了如何将新插件添加到Atavism中。
注意:插件或客户端之前的*符号表示插件的名称(任何名称)。
第1步:创建* Plugin.java文件
插件的核心文件是* Plugin.java文件,该文件应存在于atavism.agis.plugins包中。第一步是创建一个新的* Plugin.java文件(用你的插件名称替换*)。这可以通过右键单击atavism.agis.plugins在Eclipse中完成,选择New→File并命名文件* Plugin.java(将*替换为插件的名称)。
Plugin类需要扩展EnginePlugin类(或EnginePlugin的子代),并且应该在构造函数中调用SetPluginType(string),同时将Plugin名称传递给父构造函数。下面的ArenaPlugin类示例显示了设置Plugin类所需的基本结构。
public class ArenaPlugin extends EnginePlugin { public ArenaPlugin() { super(ARENA_PLUGIN_NAME); setPluginType("Arena"); } public String getName() { return ARENA_PLUGIN_NAME; } public static String ARENA_PLUGIN_NAME = "Arena"; protected static final Logger log = new Logger("Arena"); public void onActivate() { ... } }
第2步:创建* Client.java文件
虽然不是必需的,但每个插件使用都有一个附带的* Client.java文件,其中可以添加插件的消息/消息类型和其他功能。 Client文件通常位于core * Plugin.java文件旁边的atavism.agis.plugins包中。
Client类不继承或扩展任何其他类,并且没有任何必需的函数或变量,但是,插件的任何消息都将添加到此类中。
第3步:添加加载插件代码
要在服务器启动时加载插件,必须在几个位置声明和注册。
应该在服务器上的config / world文件夹中创建插件的python脚本,并包含registerPlugin()函数,例如:
from atavism.agis import * from atavism.agis.core import * from atavism.agis.objects import * from atavism.agis.util import * from atavism.server.math import * from atavism.server.events import * from atavism.server.objects import * from atavism.server.engine import * from atavism.server.util import * from atavism.server.plugins import * Engine.registerPlugin("atavism.agis.plugins.ArenaPlugin");
然后,此插件文件可以包含其他代码,以便在需要时允许在插件中设置属性等。查看config / world文件夹中的其他* plugin.py文件以获取一些示例。
现在需要将新的插件python脚本添加到world.sh文件(位于bin文件夹中),同时将插件名称添加到该文件中的插件列表中。
向下滚动到大致250行,找到以下开头的行:
PLUGIN_TYPES=
转到字符串的末尾并添加(不带引号):
" -p YourPluginName,1"
现在,您需要决定是否可以将插件添加到其中一个现有服务器进程,或者是否需要创建新的服务器进程。):
在现有流程中加载插件
通过将插件的python脚本添加到它在启动时加载的脚本列表,可以通过现有服务器进程加载新插件。这可能有点棘手,但是稍微低于PLUGIN_TYPES行,每个进程都按以下格式定义(战斗过程示例):
if [ $verbose -gt 0 ]; then echo -en "Starting combat server: t" fi java $JAVA_FLAGS -Datavism.loggername=combat atavism.server.engine.Engine $CMDLINE_PROPS -i "${AO_BIN}"/wmgr_local1.py -i "${AO_COMMON_CONFIG}"/aomessages.py -i "${AO_WORLD_CONFIG}"/worldmessages.py -t "${AO_COMMON_CONFIG}"/typenumbers.txt "${AO_COMMON_CONFIG}"/global_props.py "${AO_WORLD_CONFIG}"/global_props.py "${AO_COMMON_CONFIG}"/skill_db.py "${AO_WORLD_CONFIG}"/skill_db.py "${AO_COMMON_CONFIG}"/ability_db.py "${AO_WORLD_CONFIG}"/ability_db.py "${AO_WORLD_CONFIG}"/classabilityplugin.py "${AO_WORLD_CONFIG}"/combat.py "${AO_WORLD_CONFIG}"/extensions_combat.py "${AO_COMMON_CONFIG}"/profession_db.py "${AO_WORLD_CONFIG}"/profession_db.py "${AO_COMMON_CONFIG}"/groupplugin.py "${AO_WORLD_CONFIG}"/group.py & write_pid combat $!
需要将新的python脚本文件名添加到插件应该属于的进程的python脚本列表中。