DIY 自己動手做腳本 教學分享 (歡迎參考, 抄襲, 修改, 轉載)
今天爬文的时候、才发现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 = #觸發的 NPC ID, 可多個 NPC
</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 = #觸發的 NPC template ID, 可多個 NPC
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 初始化時 腳本已經出錯的時候用
很方便吧 :)
這個... 有點過時了 哈..
謝謝分享....
小弟也沒有爬文的習慣...
寫完這個後.. 後來(幾年後?) 才發現 之前也有前輩寫過類似的教學.. 哈. xxx001 发表于 2015-3-24 13:53
這個... 有點過時了 哈..
謝謝分享....
小弟也沒有爬文的習慣...
不能说过时、能有教程来学习就是新的、
知识是死的、人是活的!!!! 感謝分享~~~ 谢谢分享,学习学习
页:
[1]