- 打卡等级:尐伊娃
- 打卡总天数:192
- 打卡月天数:9
- 打卡总奖励:1854
|
今天爬文的时候、才发现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
出現畫面
輸入 "自訂 NPC" 的 ID 然後按 召喚
點看看 會說 "你好" 便成功了 - 除錯:
當出現錯誤時 通常會有錯誤訊息
這裡有個很重要的資訊
它會記錄你錯誤的行號.. - 重新載入腳本:
你可以在遊戲運行中 重載腳本 打腳本的名稱 或 ID
例如要重載轉生腳本 可以打
- <font color="deepskyblue">//quest_reload Rebirth</font>
复制代码
可以不停修改腳本 及重載 方便測試
但如果修改腳本後 重載時出現錯誤 你會發現 即使修正了問題 還是不能重載
那麼 可以用另一個指令 //script_load 路徑
例如要載入轉生腳本 便是
- <font color="deepskyblue">//script_load custom/Rebirth/__init__.py</font>
复制代码
這個方法也可以在 GS 初始化時 腳本已經出錯的時候用
很方便吧 :)
|
|