跳转到帖子
Facebook Instagram Twitter Youtube

[L2J] DIY 自己動手做腳本 教學分享 (歡迎參考, 抄襲, 修改, 轉載)


l2fater

已推荐帖子

发表于 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 為例
      1.  
      2. <font color="deepskyblue">import sys
      3. from com.l2jserver.gameserver.model.quest                import State
      4. from com.l2jserver.gameserver.model.quest                import QuestState
      5. from com.l2jserver.gameserver.model.quest.jython        import QuestJython as JQuest
      6. </font>
      复制代码

      參考 L2J 任務說明文件 gameserver\data\scripts\quests\documentation.txt (英文的)
      這幾行是一般任務會用到的 
      作用是把 java 的幾個 class (中文好像稱"類") 引入
      要用到那個 class 便引入那個
      1. <font color="deepskyblue">qID = -1                #任務 ID
      2. qn = "Rebirth"                #任務名
      3. qDesc = "custom"        #任務簡介/通常用於搜尋 htm 的資料夾位置 /gameserver/data/script/*****/*.htm
      4. </font>
      复制代码

      然後定義 3 個變數 (其實次序沒關係 不過我習慣把會改動的變數 集中在前面 當是設定檔般修改)
      這三個變數 是對應到程式最尾 註冊任務時會用到
      1. <font color="deepskyblue">QUEST = Rebirth(qID, qn, qDesc)
      2. </font>
      复制代码

      qID 是任務的 ID, 在遊戲中 "重新載入任務" 時會用到
      qn 是任務的名稱, 跟 NPC 對話時的 HTM 會用到 "重新載入任務" 時也會用到
      qDesc 是任務簡介 或用作尋找 HTM 檔時的其中一個路徑
      1. <font color="deepskyblue">NPCID = [65535]                #觸發的 NPC ID, 可多個 NPC [65535, 88888, 99999]
      2. </font>
      复制代码

      NPCID 是觸發這個任務的 NPC ID 剛才我們不是自訂了一個 65535 的 NPC.. 
      1. <font color="deepskyblue">class Rebirth(JQuest):
      2.         def __init__(self, id, name, descr):
      3.                 JQuest.__init__(self, id, name, descr)
      4. </font>
      复制代码

      定義一個 class 用來 extends (延伸) com.l2jserver.gameserver.model.quest.jython.QuestJython 這個 class
      及初始化
      1.  
      2. <font color="deepskyblue">        def onFirstTalk(self, npc, player):
      3.                 return "onFirstTalk.htm"
      4. </font>
      复制代码

      onFirstTalk 是直接點 NPC 的第一次對話
      這裡為了簡單講解 所以只是回傳一個 HTM 檔的內容
      或者你可以直接回傳 HTM 的內文 像這樣寫
      1.  
      2. <font color="deepskyblue">        def onFirstTalk(self, npc, player):
      3.                 return "<html><body>你好</body></html>"
      4. </font>
      复制代码

      .........
      1.  
      2. <font color="deepskyblue">QUEST = Rebirth(qID, qn, qDesc)
      3. for id in NPCID:
      4.         QUEST.addStartNpc(id)
      5.         QUEST.addFirstTalkId(id)
      6.         QUEST.addTalkId(id)
      7. </font>
      复制代码

      addStartNpc 註冊那個 NPC, 點了自動申請任務. 註:每個 NPC 只可註冊一個任務作為自動申請
      addFirstTalkId 註冊那個 NPC, 點了會跳到 onFirstTalk
      addTalkId 註冊那個 NPC, 會回應 onTalk. 另外 onFirstTalk 的 bypass Quest 也需要註冊這個
      整個看起來便是這樣
      1.  
      2. <font color="deepskyblue">import sys
      3. from com.l2jserver.gameserver.model.quest                import State
      4. from com.l2jserver.gameserver.model.quest                import QuestState
      5. from com.l2jserver.gameserver.model.quest.jython        import QuestJython as JQuest
      6. qID = -1                #任務 ID
      7. qn = "Rebirth"                #任務名
      8. qDesc = "custom"        #任務簡介/通常用於搜尋 htm 的資料夾位置 /gameserver/data/script/*****/*.htm
      9. NPCID = [65535]                #觸發的 NPC template ID, 可多個 NPC [65535, 88888, 99999]
      10. class Rebirth(JQuest):
      11.         def __init__(self, id, name, descr):
      12.                 JQuest.__init__(self, id, name, descr)
      13.         def onFirstTalk(self, npc, player):
      14.                 return "<html><body>你好</body></html>"
      15. QUEST = Rebirth(qID, qn, qDesc)
      16. for id in NPCID:
      17.         QUEST.addStartNpc(id)
      18.         QUEST.addFirstTalkId(id)
      19.         QUEST.addTalkId(id)
      20. </font>
      复制代码

      很簡單吧
      當然這個腳本 只會說一句 "你好" 沒其他功能
      留待以後再慢慢詳細解說
  • 腳本測試及除錯
     
    • 註冊自訂腳本:
      自訂腳本寫好後 要在 gameserver\data\scripts.cfg 裡註冊
      所謂註冊 其實只是在檔案裡 加入腳本的路徑檔案
      以轉生腳本為例
      加入一句便註冊了
      1. <font color="deepskyblue">custom/Rebirth/__init__.py
      2. </font>
      复制代码
    • 召喚 "自訂 NPC" 及測試:
      在遊戲內用管理員指令 輸入 //admin
      出現畫面
       
      http://img824.imageshack.us/img824/4864/34855645.jpg
      輸入 "自訂 NPC" 的 ID 然後按 召喚
      點看看 會說 "你好" 便成功了
    • 除錯:
      當出現錯誤時 通常會有錯誤訊息
      這裡有個很重要的資訊
      它會記錄你錯誤的行號.. 
       
      http://img51.imageshack.us/img51/6826/74709202.jpg
    • 重新載入腳本:
      你可以在遊戲運行中 重載腳本 打腳本的名稱 或 ID 
      例如要重載轉生腳本 可以打
      1. <font color="deepskyblue">//quest_reload Rebirth</font>
      复制代码

      可以不停修改腳本 及重載 方便測試
      但如果修改腳本後 重載時出現錯誤 你會發現 即使修正了問題 還是不能重載
      那麼 可以用另一個指令 //script_load 路徑
      例如要載入轉生腳本 便是
      1. <font color="deepskyblue">//script_load custom/Rebirth/__init__.py</font>
      复制代码

      這個方法也可以在 GS 初始化時 腳本已經出錯的時候用
      很方便吧 :)
意见的链接
分享到其他站点

参与讨论

你可以现在发布并稍后注册。 如果你有帐户,现在就登录发布帖子。

游客
回帖…

×   粘贴为富文本.   粘贴为纯文本来代替

  只允许使用75个表情符号.

×   你的链接已自动嵌入.   显示为链接来代替

×   你之前的帖子已恢复.   清除编辑器

×   你无法直接粘贴图像。要从网址上传或插入图像。

天堂2中文开源社区L2FATER.CN

专注于玩家游戏体验的交流社区.

血玫瑰社区bbs.l2fater.cn

关于血玫瑰社区

Important Links

×
×
  • 创建新的...