Like Share Discussion Bookmark Smile

J.J. Huang   2022-05-06   天堂私服 08.對話檔分析/修改   瀏覽次數:次   DMCA.com Protection Status

天堂私服 | 執行行動分析<傳送師篇>

章節用意

透過分析”傳送師”NPC的對話檔,嘗試分析與伺服器之間的互動,並不會介紹過多的程式碼,僅大略提及說明。

版本資訊

  • 客戶端版本
    • 天堂(Lineage 3.81C)
  • 核心版本
    • L1J-3.80c

前言

在開始分析前,請務必先將以下文章閱讀完畢。

分析

以下分析使用銀騎士村莊麥特(傳送師)來做分析修改範例。
可見該NPC第一頁對話檔內有我想要到其他村莊黃色字體,點擊後會對話框會顯示第二頁的對話檔內容。

  • 1.使用名稱找尋:
    • 進入資料庫搜尋spawnlist_npclocation麥特
    • 透過npcid去搜尋對應的行動。
    • 資料庫搜尋npcactionnpcid50056
    • 最終可以取得對話檔名稱為telesilver1
      1
      2
      3
      4
      5
      6
      7
      SELECT * FROM spawnlist_npc WHERE location = '麥特'
      -- 50056
      SELECT * FROM npcaction WHERE npcid = 50056
      -- telesilver1

      -- telesilver2
      -- telesilver3
  • 2.使用抽檔程式抽檔:
    • 使用抽檔工具去看telesilver1對話檔。
    • 以下為telesilver1對話檔的內容,對應麥特的對話框第一頁的內容。
    • 透過抽檔工具匯出該對話檔`telesilver1-c.html。
  • 3.查看對話檔:
    • 以下使用編輯器去開啟。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <body>
      <font fg=ffffff><p align=left>魔法師 麥特:</p></font>
      <br>
      你好,我是從歐瑞'象牙塔'派到這裡來的魔法師麥特。<br>
      <br>
      象牙塔為了用魔法來做公益,因此做了很多事情。
      而我負責的就是幫忙傳送到其他地區去。
      請問你有想要去的地方嗎?<br>
      <br><br>
      <a action="teleportURL">我想要到其他村莊</a><br>
      <a action="teleportURLL">我想要到狩獵區</a><br>
      </body>
    • 這邊來針對我想要到其他村莊的內容分析。
    • 可見使用<a>標籤,且action屬性的值為teleportURL
    • 所以在伺服器端會收到teleportURL這個字串做判斷對應。
  • 4.分析XML檔:
    • 透過搜尋teleportURL關鍵字,開啟檔案。
      1
      data/xml/NpcActions/Teleporter.xml
    • 可以發現針對NpcId="50056"的以下內容。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      <!--銀騎士村莊-->
      <!--麥特 / 肯特村莊-->
      <Action Name="teleport silver-kent" NpcId="50056">
      <Teleport X="33050" Y="32782" Map="4" Heading="5" Price="55" />
      </Action>
      <!--麥特 / 風木村莊-->
      <Action Name="teleport silver-woods" NpcId="50056">
      <Teleport X="32640" Y="33203" Map="4" Heading="5" Price="55" />
      </Action>
      <!--麥特 / 海音村莊-->
      <Action Name="teleport silver-heine" NpcId="50056">
      <Teleport X="33612" Y="33257" Map="4" Heading="5" Price="55" />
      </Action>
      <!--麥特 / 古魯丁村莊-->
      <Action Name="teleport silver-gludin" NpcId="50056">
      <Teleport X="32608" Y="32734" Map="4" Heading="5" Price="132" />
      </Action>
      <!--麥特 / 奇岩村莊-->
      <Action Name="teleport silver-giran" NpcId="50056">
      <Teleport X="33438" Y="32796" Map="4" Heading="5" Price="132" />
      </Action>
      <!--麥特 / 亞丁城鎮-->
      <Action Name="teleport silver-aden" NpcId="50056">
      <Teleport X="33965" Y="33253" Map="4" Heading="5" Price="132" />
      </Action>
      <!--麥特 / 燃柳村莊-->
      <Action Name="teleport silver-willow" NpcId="50056">
      <Teleport X="32715" Y="32448" Map="4" Heading="5" Price="198" />
      </Action>
      <!--麥特 / 威頓村莊-->
      <Action Name="teleport silver-werldern" NpcId="50056">
      <Teleport X="33709" Y="32500" Map="4" Heading="5" Price="198" />
      </Action>
      <!--麥特 / 貝希摩斯村莊-->
      <Action Name="teleport silver-behemoth" NpcId="50056">
      <Teleport X="32779" Y="32887" Map="1001" Heading="5" Price="198" />
      </Action>
      <!--麥特 / 希培利亞村莊-->
      <Action Name="teleport silver-silveria" NpcId="50056">
      <Teleport X="32841" Y="32856" Map="1000" Heading="2" Price="246" />
      </Action>
      <!--麥特 / 歐瑞村莊-->
      <Action Name="teleport silver-oren" NpcId="50056">
      <Teleport X="34062" Y="32278" Map="4" Heading="5" Price="246" />
      </Action>
      <!--麥特 / 正義神殿-->
      <Action Name="teleport silver-lowful" NpcId="50056">
      <Teleport X="33118" Y="32933" Map="4" Heading="5" Price="330" />
      </Action>
      <!--麥特 / 邪惡神殿-->
      <Action Name="teleport silver-chaos" NpcId="50056">
      <Teleport X="32885" Y="32652" Map="4" Heading="5" Price="330" />
      </Action>
      <!--麥特 / 肯特葡萄園-->
      <Action Name="teleport silver-grape" NpcId="50056">
      <Teleport X="32871" Y="32805" Map="4" Heading="5" Price="330" />
      </Action>
      <!--麥特 / 說話之島-->
      <Action Name="teleport silver-island" NpcId="50056">
      <Teleport X="32583" Y="32924" Map="0" Heading="5" Price="770" />
      </Action>
      <!--麥特 / 狄亞得要塞-->
      <Action Name="teleport silver-diad" NpcId="50056">
      <Teleport X="32828" Y="32900" Map="320" Heading="5" Price="7480" />
      </Action>
      <!--顯示金額-->
      <ShowHtml Name="teleportURL" HtmlId="telesilver2" NpcId="50056">
      <Data Value="55" /><!--肯特村莊-->
      <Data Value="55" /><!--風木村莊-->
      <Data Value="55" /><!--海音村莊-->
      <Data Value="132" /><!--古魯丁村莊-->
      <Data Value="132" /><!--奇岩村莊-->
      <Data Value="132" /><!--亞丁城鎮-->
      <Data Value="198" /><!--燃柳村莊-->
      <Data Value="198" /><!--威頓村莊-->
      <Data Value="198" /><!--貝希摩斯村莊-->
      <Data Value="246" /><!--希培利亞村莊-->
      <Data Value="246" /><!--歐瑞村莊-->
      <Data Value="330" /><!--正義神殿-->
      <Data Value="330" /><!--邪惡神殿-->
      <Data Value="330" /><!--肯特葡萄園-->
      <Data Value="770" /><!--說話之島-->
      <Data Value="7480" /><!--狄亞得要塞-->
      </ShowHtml>
  • 5.使用抽檔程式抽檔:
    • 使用抽檔工具去看telesilver2對話檔。
    • 以下為telesilver2對話檔的內容,對應麥特的對話框第二頁的內容。
    • 透過抽檔工具匯出該對話檔`telesilver2-c.html。
  • 6.查看對話檔:
    • 以下使用編輯器去開啟。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      <body>
      <font fg=ffffff><p align=left>魔法師麥特:</p></font>
      <br>
      可以從這個地方送過去的村莊以及花費費用如下。<br>
      要去哪個村莊呢?<br>
      <br><br>
      <a action="teleport silver-kent">肯特: <var src="#0"> 金幣</a><br>
      <a action="teleport silver-woods">風木: <var src="#1"> 金幣</a><br>
      <a action="teleport silver-heine">海音: <var src="#2"> 金幣</a><br>
      <a action="teleport silver-gludin">古魯丁: <var src="#3"> 金幣</a><br>
      <a action="teleport silver-giran">奇岩: <var src="#4"> 金幣</a><br>
      <a action="teleport silver-aden">亞丁: <var src="#5"> 金幣</a><br>
      <a action="teleport silver-willow">燃柳: <var src="#6"> 金幣</a><br>
      <a action="teleport silver-werldern">威頓: <var src="#7"> 金幣</a><br>
      <a action="teleport silver-behemoth">貝希摩斯: <var src="#8"> 金幣</a><br>
      <a action="teleport silver-silveria">希培利亞: <var src="#9"> 金幣</a><br>
      <a action="teleport silver-oren">歐瑞: <var src="#10"> 金幣</a><br>
      <a action="teleport silver-grape">肯特葡萄園: <var src="#11"> 金幣</a><br>
      <a action="teleport silver-island">說話之島: <var src="#12"> 金幣</a><br>
      <a action="teleport silver-diad">狄亞得要塞?: <var src="#13"> 金幣</a><br>
      <a action="teleport silver-cave">沉默洞穴: <var src="#14"> 金幣</a><br>
      </body>
    • 觀察到action與上方XML內容的Action Name是相呼應的,並對應Teleport傳送的做標位置和地圖…等等資訊。
    • 觀察到var src與上方XML內容的Data Value是相對位置對應,代表顯示傳送的金額。

其他

  • 關於程式碼的部分請自行分析,非此篇重點<請自行閱讀程式碼>
    • 關於對應對話檔和XML的部分。
      1
      2
      SELECT * FROM npc WHERE npcid = 50056
      -- L1Teleporter




    • 關於執行傳送時的部分。

結論

  • 流程:
    • 客戶端:點選NPC
      • → 伺服器:搜尋資料庫設定的normal_action對話檔名稱
        • → 回傳客戶端:顯示對話檔。
    • 客戶端:點選對話檔內容<我想要到其他村莊>
      • → 伺服器: 根據action執行對應動作<此為取得資料庫teleport_url對話檔名稱>,搭配XML內容
        • → 回傳客戶端:顯示對話檔。
    • 客戶端:點選對話檔內容<肯特>
      • → 伺服器: 根據action執行對應動作<此為傳送操作>
        • → 回傳客戶端:傳送封包並結束,客戶端畫面更新至傳送地點。

結語

在此章節主要分析傳送的對話檔與伺服器端搭配XML之間的互動。
其實可以嘗試自己動手新增NPC → 新增對應的對話檔 → 新增XML內容,最後登入遊戲嘗試是否有效果。

原創文章真的不易,希望多多支持,感謝。
最後建議回顧一下首章天堂私服 | 天堂私服架設教學,了解其章節目錄。

免責聲明

  • 本部落格文章中皆不提供任何所謂的遊戲「主程式」、「模擬器」、「登入器」…等等相關程式的下載點。
  • 本部落格文章中所見之遊戲主程式和服務器端程序均來自網路發佈,版本歸原作者所有
  • 本部落格文章為研究SQL資料庫與修改JAVA語法使用,非商業用途,亦無做營運事實等任何一切商業行為
  • 本部落格文章內容是為研究學習設計思想和原理為目的,絕沒有故意侵權或惡意抄襲、篡改其他遊戲內容