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