l2fater 发布于2022年1月12日 01:30 分享 发布于2022年1月12日 01:30 发表于 2015-3-24 09:24:09 | 只看该作者 http://l2fater.cn/static/image/common/arw_r.gif 今天爬文的时候、才发现o大早已发布了这个教程、只是我们没发现而已!!!看来还是要多多爬文、多多动手、多多学习!!!{:1_103:}转自:l2jtw 原作者:otfnir 原文地址:http://www.l2jtw.com/l2jtwbbs/viewtopic.php?f=39&t=10240 腳本編寫 腳本應該放在那裡?: 這個有規定的 (其實可以亂放的 但不建意) 在 gameserver\data\scripts\custom 開一個資料夾 名字任你改 以先前寫的轉生腳本為例 (參考 http://www.l2jtw.com/l2jtwbbs/viewtopic.php?f=82&t=10234 ) 檔案都放在 gameserver\data\scripts\custom\Rebirth 資料夾裡 主要腳本檔: 這個也是沒有規定的 你喜歡用那個名也行 不過要注意副檔名 py --- jython 的腳本 (目前大部份腳本使用) java -- java 的腳本 js -- javascript 腳本 (暫時沒發現) bsh -- BeanShell 腳本 (暫時沒發現) 你可以用你喜歡的腳本語言來寫 腳本格式: 以 jpython 為例 <font color="deepskyblue">import sys from com.l2jserver.gameserver.model.quest import State from com.l2jserver.gameserver.model.quest import QuestState from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest </font> 复制代码 參考 L2J 任務說明文件 gameserver\data\scripts\quests\documentation.txt (英文的) 這幾行是一般任務會用到的 作用是把 java 的幾個 class (中文好像稱"類") 引入 要用到那個 class 便引入那個 <font color="deepskyblue">qID = -1 #任務 ID qn = "Rebirth" #任務名 qDesc = "custom" #任務簡介/通常用於搜尋 htm 的資料夾位置 /gameserver/data/script/*****/*.htm </font> 复制代码 然後定義 3 個變數 (其實次序沒關係 不過我習慣把會改動的變數 集中在前面 當是設定檔般修改) 這三個變數 是對應到程式最尾 註冊任務時會用到 <font color="deepskyblue">QUEST = Rebirth(qID, qn, qDesc) </font> 复制代码 qID 是任務的 ID, 在遊戲中 "重新載入任務" 時會用到 qn 是任務的名稱, 跟 NPC 對話時的 HTM 會用到 "重新載入任務" 時也會用到 qDesc 是任務簡介 或用作尋找 HTM 檔時的其中一個路徑 <font color="deepskyblue">NPCID = [65535] #觸發的 NPC ID, 可多個 NPC [65535, 88888, 99999] </font> 复制代码 NPCID 是觸發這個任務的 NPC ID 剛才我們不是自訂了一個 65535 的 NPC.. <font color="deepskyblue">class Rebirth(JQuest): def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr) </font> 复制代码 定義一個 class 用來 extends (延伸) com.l2jserver.gameserver.model.quest.jython.QuestJython 這個 class 及初始化 <font color="deepskyblue"> def onFirstTalk(self, npc, player): return "onFirstTalk.htm" </font> 复制代码 onFirstTalk 是直接點 NPC 的第一次對話 這裡為了簡單講解 所以只是回傳一個 HTM 檔的內容 或者你可以直接回傳 HTM 的內文 像這樣寫 <font color="deepskyblue"> def onFirstTalk(self, npc, player): return "<html><body>你好</body></html>" </font> 复制代码 ......... <font color="deepskyblue">QUEST = Rebirth(qID, qn, qDesc) for id in NPCID: QUEST.addStartNpc(id) QUEST.addFirstTalkId(id) QUEST.addTalkId(id) </font> 复制代码 addStartNpc 註冊那個 NPC, 點了自動申請任務. 註:每個 NPC 只可註冊一個任務作為自動申請 addFirstTalkId 註冊那個 NPC, 點了會跳到 onFirstTalk addTalkId 註冊那個 NPC, 會回應 onTalk. 另外 onFirstTalk 的 bypass Quest 也需要註冊這個 整個看起來便是這樣 <font color="deepskyblue">import sys from com.l2jserver.gameserver.model.quest import State from com.l2jserver.gameserver.model.quest import QuestState from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest qID = -1 #任務 ID qn = "Rebirth" #任務名 qDesc = "custom" #任務簡介/通常用於搜尋 htm 的資料夾位置 /gameserver/data/script/*****/*.htm NPCID = [65535] #觸發的 NPC template ID, 可多個 NPC [65535, 88888, 99999] class Rebirth(JQuest): def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr) def onFirstTalk(self, npc, player): return "<html><body>你好</body></html>" QUEST = Rebirth(qID, qn, qDesc) for id in NPCID: QUEST.addStartNpc(id) QUEST.addFirstTalkId(id) QUEST.addTalkId(id) </font> 复制代码 很簡單吧 當然這個腳本 只會說一句 "你好" 沒其他功能 留待以後再慢慢詳細解說 腳本測試及除錯 註冊自訂腳本: 自訂腳本寫好後 要在 gameserver\data\scripts.cfg 裡註冊 所謂註冊 其實只是在檔案裡 加入腳本的路徑檔案 以轉生腳本為例 加入一句便註冊了 <font color="deepskyblue">custom/Rebirth/__init__.py </font> 复制代码 召喚 "自訂 NPC" 及測試: 在遊戲內用管理員指令 輸入 //admin 出現畫面 http://img824.imageshack.us/img824/4864/34855645.jpg 輸入 "自訂 NPC" 的 ID 然後按 召喚 點看看 會說 "你好" 便成功了 除錯: 當出現錯誤時 通常會有錯誤訊息 這裡有個很重要的資訊 它會記錄你錯誤的行號.. http://img51.imageshack.us/img51/6826/74709202.jpg 重新載入腳本: 你可以在遊戲運行中 重載腳本 打腳本的名稱 或 ID 例如要重載轉生腳本 可以打 <font color="deepskyblue">//quest_reload Rebirth</font> 复制代码 可以不停修改腳本 及重載 方便測試 但如果修改腳本後 重載時出現錯誤 你會發現 即使修正了問題 還是不能重載 那麼 可以用另一個指令 //script_load 路徑 例如要載入轉生腳本 便是 <font color="deepskyblue">//script_load custom/Rebirth/__init__.py</font> 复制代码 這個方法也可以在 GS 初始化時 腳本已經出錯的時候用 很方便吧 :) 引用 意见的链接 分享到其他站点 更多分享选项...
已推荐帖子
参与讨论
你可以现在发布并稍后注册。 如果你有帐户,现在就登录发布帖子。