上次看到有人用j-python写了全功能NPC。但是jython的对齐实在让人反感哈,而且我对java更偏爱一些(因为有似曾相识的感觉),今天试着用java重写了一遍全功能NPC中的传送功能实现,过程比较复杂,写很快,可调试了一个下午才搞好。 因为只是注重于功能实现,没有任何客户端消息和消耗物断定。 NPC的ID为88001,数据库中custom_npc内增加,type改为L2Npc即可。 scripts/custom中放cTeleport文件夹,里面放cTeleport.java文件。 scripts/quests中放主对话文件main.html。 config中加入custom说明。 main.html代码: 传送测试:
测试
[url=]传送测试[/url] ------------------------------------------------------------------------------------------------------------------------------------------------------------------- cTeleport.java代码: - package custom.cTeleport;
- import com.l2jserver.gameserver.model.actor.L2Npc;
- import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jserver.gameserver.model.quest.Quest;
- import com.l2jserver.gameserver.model.quest.QuestState;
- //import com.l2jserver.gameserver.network.serverpackets.SystemMessage;这句为以后需要在客户端显示“XX金币消失了“才用
-
- public class cTeleport extends Quest
- {
- //private final static int ITEM_ID=57;
- //private final static int ITEM_COUNT=1000;
- private final static String qn="cTeleport";
- private final static int NPC=88001;
-
- public cTeleport(int questId,String name,String descr)
- {
- super(questId,name,descr);
- addFirstTalkId(NPC);
- addStartNpc(NPC);
- addTalkId(NPC);
- }
- @Override
- public String onAdvEvent(String event,L2Npc npc,L2PcInstance player)
- {
- QuestState qs=player.getQuestState(qn);
- if (event.equalsIgnoreCase("tele1"))
- qs.getPlayer().teleToLocation(82170,148107,-3469);//只是一个测试传送点. //just a test.
- return "";
- }
- @Override
- public String onFirstTalk(L2Npc npc,L2PcInstance player)
- {
- String htmltext="";
- htmltext="main.htm";
- return htmltext;
- //其实这里可以直接简化为 return "main.htm",但为了方便以后增加功能,暂时先这样写。
- }
- public static void main(String args[])
- {
- new cTeleport(-1,qn,"cTeleport");
- System.out.println("自定义传送师启动.");
- }
复制代码
|