国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種游戲在線調(diào)試方法、系統(tǒng)及編輯服務端的制作方法

      文檔序號:10552837閱讀:415來源:國知局
      一種游戲在線調(diào)試方法、系統(tǒng)及編輯服務端的制作方法
      【專利摘要】本發(fā)明公開了一種游戲在線調(diào)試方法,包括如下步驟:發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù);監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù);通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。本發(fā)明還公開了一種編輯服務端與游戲在線調(diào)試系統(tǒng),可實現(xiàn)實時的游戲調(diào)試。
      【專利說明】
      一種游戲在線調(diào)試方法、系統(tǒng)及編輯服務端
      技術(shù)領(lǐng)域
      [0001]本發(fā)明涉及游戲調(diào)試領(lǐng)域,尤其涉及一種游戲在線調(diào)試方法、系統(tǒng)及編輯服務端。
      【背景技術(shù)】
      [0002]在游戲開發(fā)過程或運營過程中,常常需要對游戲內(nèi)的游戲數(shù)據(jù),例如游戲角色的戰(zhàn)斗值、成長值或者裝備屬性等進行編輯或調(diào)整,以保證游戲的平衡性。如圖1所示,傳統(tǒng)的游戲數(shù)據(jù)編輯方案大多基于策劃改表的形式,策劃在改動游戲數(shù)據(jù)表格后通過固定的導表規(guī)則來生成可以在游戲內(nèi)使用的腳本文件,然后將腳本文件上傳服務器后重啟對應服務器才能生效。其基本流程如下:
      [0003](I)修改游戲數(shù)據(jù)表格;
      [0004](2)將修改后的表格上傳至SVN服務器;
      [0005](3)針對修改后表格進行導表熱更,生成能在游戲中生效的腳本文件;
      [0006](4)對應游戲服務端、游戲客戶端重啟或者熱更;
      [0007](5)在游戲客戶端內(nèi)查看修改后效果。

      【發(fā)明內(nèi)容】

      [0008]上述方案在調(diào)試游戲角色的屬性在流程上很清晰,通常也能做得很規(guī)范。但由于每次修改完成后都需要重新導表以及重啟游戲服務器或者游戲客戶端才能生效,即每修改一次游戲數(shù)據(jù)都需要重新走一遍上述流程,而往往可能需要多次修改才能達到預期的結(jié)果,導致游戲策劃需要耗費大量的時間在這些流程中,延緩了游戲開發(fā)進度,增加了游戲的維護時間。
      [0009]針對上述問題,本發(fā)明的目的在于提供一種游戲在線調(diào)試方法,包括如下步驟:
      [0010]發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù);
      [0011]監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù);
      [0012]通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0013]上述技術(shù)方案中,通過建立與游戲客戶端的連接關(guān)系,并利用收集的改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),使得游戲客戶端根據(jù)改動數(shù)據(jù)執(zhí)行游戲邏輯,從而達到了實時修改,實時調(diào)試的目的,且可以在游戲客戶端查看到當前修改的效果O
      [0014]優(yōu)選地,與所述游戲客戶端進行的所述連接,具體為:遠程調(diào)用連接;所述連接對象具體為:線程服務。
      [0015]在本優(yōu)選方案中,所述連接為遠程調(diào)用連接,因而可以在遠程實現(xiàn)對游戲客戶端的調(diào)用。
      [0016]優(yōu)選地,所述第一操作至少包括以下其中之一:修改游戲角色的游戲數(shù)據(jù),對游戲角色配置或更換游戲裝備,對游戲角色配置或更換游戲道具,對游戲角色配置或更換游戲符文,控制游戲角色技能釋放,控制游戲Al。
      [0017]優(yōu)選地,在發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象之后,還包括:
      [0018]通過所述連接對象向所述游戲客戶端發(fā)送測試代碼,以使所述游戲客戶端在接收到所述測試代碼后,執(zhí)行所述測試代碼,并返回開啟的后門端口;
      [0019]根據(jù)所述后門端口向所述游戲客戶端發(fā)送初始化代碼,以使所述游戲客戶端進行初始化;
      [0020]在確定所述游戲客戶端完成初始化后,向所述游戲客戶端發(fā)送統(tǒng)計腳本;
      [0021]通過遠程實現(xiàn)函數(shù)在所述游戲客戶端解析所述統(tǒng)計腳本,并在所述游戲客戶端完成腳本解析后,將所述統(tǒng)計腳本設(shè)置到所述游戲客戶端的指定路徑,以使所述游戲客戶端在執(zhí)行游戲邏輯時,利用所述統(tǒng)計腳本統(tǒng)計在執(zhí)行游戲邏輯過程中生成的指定數(shù)據(jù)的統(tǒng)計值,并將所述統(tǒng)計值返回。
      [0022]本優(yōu)選方案中,在不改變游戲客戶端邏輯的前提下,基于外掛式插件開發(fā)向游戲客戶端插入統(tǒng)計腳本,以統(tǒng)計游戲數(shù)據(jù)被改動后的統(tǒng)計值,從而更簡單直觀的體現(xiàn)數(shù)據(jù)改動的效果,方便策劃的判斷決策,可擴展性強。
      [0023]優(yōu)選地,所述統(tǒng)計值至少包括以下其中一種:游戲角色的秒傷害、技能持續(xù)時間、命中率。
      [0024]優(yōu)選地,在監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù)之后,還包括:
      [0025]監(jiān)聽用戶的第二操作,根據(jù)所述第二操作啟動預覽界面,并在所述預覽界面顯示游戲數(shù)據(jù)發(fā)生改動的游戲角色在經(jīng)所述第一操作后的數(shù)據(jù)對比和/或所述游戲客戶端返回的所述統(tǒng)計值。
      [0026]本優(yōu)選方案中,通過提供預覽界面來預覽游戲角色的屬性情況及發(fā)送游戲數(shù)據(jù)改變后的屬性對比情況和/或所述游戲客戶端返回的所述統(tǒng)計值,從而更簡單直觀的體現(xiàn)修改的效果,方便策劃的判斷決策。
      [0027]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括:
      [0028]當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)送第一信號;
      [0029]當后臺注冊的槽接收所述第一信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單元格;
      [0030]根據(jù)查詢得到的結(jié)果跳轉(zhuǎn)到與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。
      [0031]一般來說,游戲角色的游戲數(shù)據(jù)是有關(guān)聯(lián)關(guān)系的,當對某個游戲數(shù)據(jù)進行更換時,則很可能需要對與其具有關(guān)聯(lián)關(guān)系的游戲數(shù)據(jù)進行同步更改或替換,本優(yōu)選方案通過提供自動跳轉(zhuǎn)的功能,可以自動跳轉(zhuǎn)到具有關(guān)聯(lián)關(guān)系的單元格,避免了手動尋找具有關(guān)聯(lián)關(guān)系的單元格的過程,縮短了游戲調(diào)試的時間和效率。
      [0032]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括:
      [0033]當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第二信號;
      [0034]當后臺注冊的槽接收所述第二信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格;
      [0035]根據(jù)查詢得到結(jié)果顯示與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格的標識。
      [0036]—般來說,游戲角色的游戲數(shù)據(jù)是有關(guān)聯(lián)關(guān)系的,當對某個游戲數(shù)據(jù)進行更換時,則很可能需要對與其具有關(guān)聯(lián)關(guān)系的游戲數(shù)據(jù)進行同步更改或替換,本優(yōu)選方案通過提供自動提不的功能,可以自動提不具有關(guān)聯(lián)關(guān)系的單7Π格,避免了手動尋找具有關(guān)聯(lián)關(guān)系的單元格的過程,縮短了游戲調(diào)試的時間和效率。
      [0037]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括:
      [0038]根據(jù)游戲角色的類型對所述單元格進行歸類,使得具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi)。
      [0039]一般來說,游戲角色分為各種類型,如物理輸出型、輔助型、法術(shù)輸出型等,其中,當對某個游戲角色的游戲數(shù)據(jù)進行更改或替換時,則很有可能需要對同類型的游戲角色的游戲數(shù)據(jù)進行同步的更改或替換時,本優(yōu)選方案中,通過將具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi),方便進行更改,提供游戲調(diào)試的效率。
      [0040]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括:
      [0041]在監(jiān)聽到用戶向任一單元格內(nèi)輸入游戲數(shù)據(jù)時,判斷所述游戲數(shù)據(jù)是否符合所述單元格預置的數(shù)據(jù)類型要求,若否,則發(fā)出報錯提醒。
      [0042]由于游戲數(shù)據(jù)本身是有數(shù)據(jù)類型要求的,例如,某個單元格內(nèi)只能填寫整型數(shù)據(jù),而不能填入浮點型數(shù)據(jù),在本優(yōu)選方案中,在游戲數(shù)據(jù)寫入單元格的時候就提前預判填寫的游戲數(shù)據(jù)是否合法,避免了在導入的時候報錯而導致檢查修改的過程,進一步提高了游戲調(diào)試的效率。
      [0043]優(yōu)選地,所述游戲數(shù)據(jù)初始存放于外部的表格文件中,則在發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象之前,還包括:
      [0044]同時啟動至少兩個子線程,并使每個子線程啟動一個與所述表格文件的文件類型對應的進程;
      [0045]所述子線程根據(jù)啟動的進程分別讀取所述表格文件中的游戲數(shù)據(jù);
      [0046]所述子線程在讀取完成后,對所述游戲數(shù)據(jù)進行序列化,并輸出到內(nèi)置的表格中,以將所述游戲數(shù)據(jù)從外部的表格文件導入到內(nèi)置的表格中。
      [0047]在游戲數(shù)據(jù)的填寫方式中,有些用戶習慣先在外部的表格文件(如excel)中填寫,再導入到內(nèi)置的表格中,通常一張表格的數(shù)據(jù)量在幾M以上,按通常流程處理表格的數(shù)據(jù)導入需要消耗幾十分鐘,這對于編輯操作而言是無法容忍的。本優(yōu)選方案中,基于非阻塞式的方案來讀取表格文件及約束關(guān)系。同時啟動多個子線程進行數(shù)據(jù)讀取處理,再統(tǒng)一序列化,并通過StdOUt方式進行數(shù)據(jù)傳輸,寫入到內(nèi)置的表格中,從而節(jié)省了游戲數(shù)據(jù)導入的時間。
      [0048]優(yōu)選地,所述連接為RPyC連接。
      [0049]本優(yōu)選方案中,使用RPyC進行遠程連接和調(diào)用,其中,使用RPyC連接生成的連接對象具有透明的特定,這意味著對于游戲客戶端中暴露的方法,只要連接對象未關(guān)閉,都能進行訪問。此外,RPyC還具有遠程調(diào)用方便,異步調(diào)用方便等優(yōu)點。
      [0050]優(yōu)選地,所述通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯,具體為:
      [0051]通過所述連接對象訪問所述游戲客戶端,并在內(nèi)存中使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0052]在本優(yōu)選方案中,游戲數(shù)據(jù)的替換僅在內(nèi)存中進行,因而不會改變在游戲客戶端內(nèi)存儲的游戲數(shù)據(jù)。
      [0053 ]本發(fā)明還提供了一種編輯服務端,包括:
      [0054]連接請求單元,用于發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù);
      [0055]數(shù)據(jù)收集單元,用于監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù);
      [0056]訪問單元,用于通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0057]優(yōu)選地,所述連接請求單元與所述游戲客戶端進行的所述連接,具體為:遠程調(diào)用連接;所述連接對象具體為:線程服務。
      [0058]優(yōu)選地,所述第一操作至少包括以下其中之一:修改游戲數(shù)據(jù),對游戲角色配置或更換游戲裝備,對游戲角色配置或更換游戲道具,對游戲角色配置或更換游戲符文,控制游戲角色技能釋放,控制游戲Al。
      [0059]優(yōu)選地,還包括:
      [0060]測試代碼發(fā)送單元,用于通過所述連接對象向所述游戲客戶端發(fā)送測試代碼,以使所述游戲客戶端在接收到所述測試代碼后,執(zhí)行所述測試代碼,并返回開啟的后門端口;
      [0061]初始化代碼發(fā)送單元,用于根據(jù)所述后門端口向所述游戲客戶端發(fā)送初始化代碼,以使所述游戲客戶端進行初始化;
      [0062]統(tǒng)計腳本發(fā)送單元,用于在確定所述游戲客戶端完成初始化后,向所述游戲客戶端發(fā)送統(tǒng)計腳本;
      [0063]統(tǒng)計腳本部署單元,用于通過遠程實現(xiàn)函數(shù)在所述游戲客戶端解析所述統(tǒng)計腳本,并在所述游戲客戶端完成腳本解析后,將所述統(tǒng)計腳本設(shè)置到所述游戲客戶端的指定路徑,以使所述游戲客戶端在執(zhí)行游戲邏輯時,利用所述統(tǒng)計腳本統(tǒng)計在執(zhí)行游戲邏輯過程中生成的指定數(shù)據(jù)的統(tǒng)計值,并將所述統(tǒng)計值返回。
      [0064]優(yōu)選地,所述統(tǒng)計值至少包括以下其中一種:游戲角色的秒傷害、技能持續(xù)時間、命中率。
      [0065]優(yōu)選地,還包括:
      [0066]預覽單元,用于監(jiān)聽用戶的第二操作,根據(jù)所述第二操作啟動預覽界面,并在所述預覽界面顯示游戲數(shù)據(jù)發(fā)生改動的游戲角色在經(jīng)所述第一操作后的數(shù)據(jù)對比和/或所述游戲客戶端返回的所述統(tǒng)計值。
      [0067]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括:
      [0068]第一信號發(fā)射單元,用于當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第一信號;
      [0069]第一查詢單元,用于當后臺注冊的槽接收所述第一信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單7Π格;
      [0070]跳轉(zhuǎn)單元,用于根據(jù)查詢得到的結(jié)果跳轉(zhuǎn)到與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。
      [0071 ]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括:
      [0072]第二信號發(fā)射單元,用于當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第二信號;
      [0073]第二查詢單元,用于當后臺注冊的槽接收所述第二信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與所述當前單兀格具有關(guān)聯(lián)關(guān)系的單兀格;
      [0074]提示顯示單元,用于根據(jù)查詢得到的結(jié)果在界面上顯示與所述當前單元格具有關(guān)聯(lián)關(guān)系的單兀格的標識。
      [0075]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括:
      [0076]歸類單元,用于根據(jù)游戲角色的類型對所述單元格進行歸類,使得具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi)。
      [0077]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括:
      [0078]合法檢查單元,用于在監(jiān)聽到用戶向任一單元格內(nèi)輸入游戲數(shù)據(jù)時,判斷所述游戲數(shù)據(jù)是否符合所述單元格預置的數(shù)據(jù)類型要求,若否,則發(fā)出報錯提醒。
      [0079]優(yōu)選地,還包括:
      [0080]子線程啟動單元,用于同時啟動至少兩個子線程,并使每個子線程啟動一個與所述表格文件的文件類型對應的進程;
      [0081]讀取單元,用于根據(jù)啟動的進程分別讀取所述表格文件中的游戲數(shù)據(jù);
      [0082]輸出單元,用于在讀取完成后,對所述游戲數(shù)據(jù)進行序列化,并輸出到所述編輯服務端內(nèi)置的表格中,以將所述游戲數(shù)據(jù)從外部的表格文件導入到內(nèi)置的表格中。
      [0083]優(yōu)選地,所述連接為RPyC連接。
      [0084]優(yōu)選地,所述訪問單元具體用于,通過所述連接對象訪問所述游戲客戶端,并在內(nèi)存中使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0085]本發(fā)明還提供一種游戲在線調(diào)試系統(tǒng),包括游戲客戶端及上述的編輯服務端,其中:
      [0086]所述編輯服務端,用于發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被分配一組對應的游戲數(shù)據(jù);
      [0087]所述編輯服務端,還用于監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù);
      [0088]所述編輯服務端,還用于通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù);
      [0089]所述游戲客戶端,用于根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0090]優(yōu)選地,所述連接為RPyC連接;其中,所述編輯服務端作為RPyCClient端,所述游戲客戶端作為RPyC Server端。
      【附圖說明】
      [0091]為了更清楚地說明本發(fā)明的技術(shù)方案,下面將對實施方式中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施方式,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
      [0092]圖1是現(xiàn)有技術(shù)的游戲調(diào)試的流程示意圖。
      [0093]圖2是本發(fā)明實施例提供的游戲在線調(diào)試方案的流程示意圖。
      [0094]圖3是編輯服務端對游戲客戶端進行遠程調(diào)用的示意圖。
      [0095]圖4是編輯服務端向游戲客戶端植入統(tǒng)計代碼的流程示意圖。
      [0096]圖5是將所述統(tǒng)計腳本植入游戲客戶端的原理示意圖。
      [0097]圖6是對編輯服務端內(nèi)置的表格設(shè)置約束關(guān)系的示意圖。
      [0098]圖7是編輯服務端通過多個子線程同時讀取外部的表格文件的示意圖。
      [0099]圖8是本發(fā)明實施例提供的編輯服務端的結(jié)構(gòu)示意圖。
      [0100]圖9是本發(fā)明實施例提供的編輯服務端的另一種結(jié)構(gòu)示意圖。
      [0101]圖10是本發(fā)明實施例提供的編輯服務端的另一種結(jié)構(gòu)示意圖。
      [0102]圖11是本發(fā)明實施例提供的編輯服務端的另一種結(jié)構(gòu)示意圖。
      [0103]圖12是本發(fā)明實施例提供的編輯服務端的另一種結(jié)構(gòu)示意圖。
      [0104]圖13是本發(fā)明實施例提供的編輯服務端的另一種結(jié)構(gòu)示意圖。
      [0105]圖14是本發(fā)明實施例提供的編輯服務端的另一種結(jié)構(gòu)示意圖。
      【具體實施方式】
      [0106]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
      [0107]請參閱圖2,本發(fā)明實施例提供一種游戲在線調(diào)試方法,用于進行游戲的實時在線調(diào)試,本實施例是從編輯服務端進行描述的,其包括如下步驟:
      [0108]SlOl,發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù)。
      [0109]在本發(fā)明實施例中,所述游戲客戶端作為游戲數(shù)據(jù)的使用端,存儲了必要的游戲角色(包括供用戶選擇的角色、游戲預置的NPC及游戲Al (Artificial Intelligence,人工智能))的游戲數(shù)據(jù),所述游戲數(shù)據(jù)可包括游戲角色的初始數(shù)值(如初始攻擊力、初始防御力、初始生命值)、成長數(shù)值(如游戲角色每升一級引起的攻擊力、防御力和生命值變化)、技能威力、技能范圍等。其中,在執(zhí)行游戲邏輯中,所述游戲客戶端可根據(jù)不同的游戲角色的游戲數(shù)值進行數(shù)值結(jié)算,來得到最終的戰(zhàn)斗結(jié)果。
      [0110]在本發(fā)明實施例中,所述編輯服務端存儲了與所述游戲客戶端內(nèi)的至少一個游戲角色對應的游戲數(shù)據(jù),并可通過建立與所述游戲客戶端的連接,將游戲數(shù)據(jù)傳遞給所述游戲客戶端,從而達到在游戲客戶端更改對應的游戲角色的游戲數(shù)據(jù)的目的。
      [0111]在本發(fā)明實施例中,所述連接為遠程調(diào)用連接;所述連接對象具體為:線程服務,其是所述編輯服務端對游戲客戶端進行訪問的途徑。
      [0112]具體地,通過遠程調(diào)用方式進行連接時,該連接可生成透明的連接對象對游戲客戶端進行訪問,通過所述連接對象,所述編輯服務端即可訪問到所述游戲客戶端的各個游戲功能模塊。而本發(fā)明生成的連接對象具有透明的特點,具體為一個線程服務,只要所述線程服務未關(guān)閉,所述編輯服務端都能實現(xiàn)遠程訪問和調(diào)用。
      [0113]優(yōu)選地,如圖3所示,在本發(fā)明的一個實施例中,所述編輯客戶端與所述游戲客戶端可通過RPyC(Remote Python Call)進行連接,以實現(xiàn)遠程調(diào)用,其中:
      [0114]所述游戲客戶端作為RPyCServer端,其在啟動時,會運行一個預先設(shè)置好的RPyCServer,并以一個固定的數(shù)字作為端口號,通過監(jiān)聽所述端口號來監(jiān)聽來自RPyC Client的連接請求。
      [0115]所述編輯服務端作為RPyCClient端,其在需要建立與所述游戲客戶端的連接時,先檢測所述游戲客戶端是否啟動,若未啟動則自動啟動所述游戲客戶端,并向所述端口號發(fā)起與所述游戲客戶端的RPyC server建立連接的請求,在連接成功后,所述編輯服務端持有連接對象,并可通過所述連接對象訪問到所述游戲客戶端的各個游戲功能模塊,再通過這些游戲功能模塊調(diào)用具體的接口,實現(xiàn)游戲的調(diào)試。
      [0116]在本發(fā)明實施例中,通過RPyC(—個Python的庫用來實現(xiàn)遠程過程調(diào)用和分布式計算的工具)進行連接時,該連接可生成透明的連接對象對游戲客戶端進行訪問,通過所述連接對象,所述編輯服務端即可訪問到所述游戲客戶端的各個游戲功能模塊。而基于RPyC生成的連接對象具有透明的特點,這意味通過所述連接對象調(diào)用遠程對象(游戲客戶端)中的方法(方法是對象的一類操作或者是對象的某些功能)就像在本地調(diào)用方法一樣,因而對于游戲客戶端中暴露的方法(暴露的方法是指對象中可以被別的包訪問和調(diào)用的方法,如對象的公有(public)類型的方法),只要所述連接對象未關(guān)閉,所述編輯服務端都能對這些方法進行訪問和調(diào)用。此外,使用RPyC來實現(xiàn)遠程過程調(diào)用還具有遠程調(diào)用方便和異步調(diào)用方便等優(yōu)點。
      [0117]當然,應該理解的是,在本發(fā)明其他實施例中,所述編輯服務端與所述游戲客戶端還可通過其他的遠程調(diào)用連接實現(xiàn)遠程連接和調(diào)用,本發(fā)明不做具體限定。
      [0118]S102,監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù)。
      [0119]在本發(fā)明實施例中,當需要對所述游戲客戶端內(nèi)的游戲數(shù)據(jù)進行調(diào)試時,用戶可通過對存放在所述編輯服務端的游戲數(shù)據(jù)執(zhí)行第一操作,其中,所述第一操作至少包括以下其中之一:修改游戲數(shù)據(jù),對游戲角色配置或更換游戲裝備,對游戲角色配置或更換游戲道具,對游戲角色配置或更換游戲符文,控制游戲角色技能釋放,控制游戲Al。
      [0120]例如,用戶可以直接在編輯服務端內(nèi)修改某個游戲角色的初始攻擊力或者升級經(jīng)驗、技能威力等。此時,當所述編輯服務端監(jiān)聽到用戶對所述游戲數(shù)據(jù)發(fā)出所述第一操作,可收集到根據(jù)所述第一操作生成的改動數(shù)據(jù)。
      [0121]此外,用戶也可以在所述編輯服務端將游戲裝備、游戲道具或者游戲符文等配置給游戲角色,此時,所述游戲角色的屬性將附加上游戲裝備、游戲道具或者游戲符文等的屬性,也會生成新的改動數(shù)據(jù)。
      [0122]此外,用戶還可以通過發(fā)出第一操作來控制游戲客戶端內(nèi)的游戲角色技能釋放,控制游戲Al的動作等。
      [0123]S103,通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0124]例如,假設(shè)所述第一操作為將所述游戲角色A的初始攻擊力從10修改為12,則所述編輯服務端在接收到所述改動數(shù)據(jù)(即12)后,通過所述連接對象訪問所述游戲客戶端,并使用12替換所述游戲角色A原本的初始攻擊力10,此后,在所述游戲客戶端執(zhí)行游戲邏輯時,所述游戲角色A的初始攻擊力即變?yōu)?2,從而實現(xiàn)了實時的游戲在線調(diào)試。
      [0125]在本發(fā)明實施中,所述編輯客戶端利用所述改動數(shù)據(jù)對游戲客戶端的游戲數(shù)據(jù)進行替換時,可僅在游戲客戶端的內(nèi)存中進行相應數(shù)據(jù)的替換,此時,所述編輯服務端可先查詢與所述改動數(shù)據(jù)對應的游戲數(shù)據(jù)的內(nèi)存地址,然后在內(nèi)存中使用所述改動數(shù)據(jù)替換對應的游戲角色的游戲數(shù)據(jù)。這樣,可以保證游戲客戶端存儲的游戲數(shù)據(jù)不變,即在每次游戲客戶端重啟或連接關(guān)閉后,所述游戲客戶端的游戲數(shù)據(jù)將重新變回原來的數(shù)值,避免了游戲客戶端的游戲數(shù)據(jù)被隨意改變。
      [0126]當然,在本發(fā)明的其他實施例中,也可以直接利用改動數(shù)據(jù)替換游戲客戶端存儲的游戲數(shù)據(jù),這樣,可以更好的保存每次的改動,避免每次重啟或重新連接后需要再次調(diào)試的問題。
      [0127]綜上所述,本發(fā)明實施例提供的游戲在線調(diào)試方法,通過建立與游戲客戶端的連接關(guān)系,并利用收集的改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),使得游戲客戶端根據(jù)改動數(shù)據(jù)執(zhí)行游戲邏輯,從而達到了實時修改,實時調(diào)試的目的,從而避免了繁瑣的導表和重啟過程,極大提高了游戲調(diào)試的效率,縮短了游戲開發(fā)的時間。
      [0128]為了便于對本發(fā)明的理解,下面將對本發(fā)明的一些優(yōu)選實施例做進一步的介紹。
      [0129]第一個優(yōu)選實施例:
      [0130]在對游戲角色的游戲數(shù)據(jù)進行改動后,有時還需要統(tǒng)計根據(jù)改動得到的一些數(shù)值,而這些數(shù)值,例如所述游戲角色經(jīng)改動后的秒傷害、技能持續(xù)時間、命中率,是無法直觀得到的,需要利用工具或腳本進行統(tǒng)計。
      [0131]則此時,如圖4所示,本發(fā)明的游戲在線調(diào)試方法在步驟SlOl之后,還包括:
      [0132]SlOll,通過所述連接對象向所述游戲客戶端發(fā)送測試代碼,以使所述游戲客戶端在接收到所述測試代碼后,執(zhí)行所述測試代碼,并返回開啟的后門端口。
      [0133]在本發(fā)明實施例中,所述測試代碼可為一個木馬程序,通過發(fā)送所述測試代碼可獲得所述游戲客戶端的后門端口,從而可通過所述后門端口入侵到所述游戲客戶端,達到在所述游戲客戶端插入腳本或插件的目的。
      [0134]S1012,根據(jù)所述后門端口向所述游戲客戶端發(fā)送初始化代碼,以使所述游戲客戶端進行初始化。
      [0135]S1013,在確定所述游戲客戶端完成初始化后,向所述游戲客戶端發(fā)送統(tǒng)計腳本。
      [0136]S1014,通過遠程實現(xiàn)函數(shù)在所述游戲客戶端解析所述統(tǒng)計腳本,并在所述游戲客戶端完成腳本解析后,將所述統(tǒng)計腳本設(shè)置到所述游戲客戶端的指定路徑,以使所述游戲客戶端在執(zhí)行游戲邏輯時,利用所述統(tǒng)計腳本統(tǒng)計在執(zhí)行游戲邏輯過程中生成的指定數(shù)據(jù)的統(tǒng)計值,并將所述統(tǒng)計值返回。
      [0137]在本優(yōu)選實施例中,在技術(shù)上采用了hotfix的方案來在游戲客戶端植入所述統(tǒng)計腳本,從而達到了在所述游戲客戶端增加部分功能邏輯的目的。
      [0138]其中,如圖5所述,hotfix的原理可用如下例子來說明,假設(shè)原系統(tǒng)中有一個名為getValue()的函數(shù)(原函數(shù)),當需要修改getValue函數(shù)里面valueA的值為2,此時可以在hotfix腳本里新建一個函數(shù)(附加代碼),讓原函數(shù)getValue()指向新函數(shù)的內(nèi)存空間(SP將附加代碼增加到原函數(shù)上,形成替換以后的函數(shù)),這樣每次執(zhí)行g(shù)etValueO的時候?qū)嶋H上將執(zhí)行新函數(shù)的邏輯,valueA的值變成了 2。
      [0139]在本優(yōu)選實施例中,所述編輯服務端可以通過向所述游戲客戶端植入所述統(tǒng)計腳本,并將統(tǒng)計腳本附加到所述游戲客戶端原有的游戲邏輯上。當所述統(tǒng)計腳本在所述編輯客戶端完成解析和部署后,在所述游戲客戶端執(zhí)行游戲邏輯時,這段附加的統(tǒng)計腳本可統(tǒng)計指定數(shù)據(jù)的統(tǒng)計值,其中,這里的指定數(shù)據(jù)由實際需要在所述統(tǒng)計腳本中編程來決定,本發(fā)明不做具體的限定。
      [0140]本優(yōu)選實施例中,在不改變游戲客戶端本身的游戲邏輯的前提下,基于外掛式插件開發(fā)向游戲客戶端插入統(tǒng)計腳本,以統(tǒng)計游戲數(shù)據(jù)被改動后的指定數(shù)據(jù)的統(tǒng)計值,從而更簡單的體現(xiàn)修改的效果,方便策劃的判斷決策,可擴展性強。
      [0141]第二個優(yōu)選實施例:
      [0142]優(yōu)選地,在步驟S102之后,還包括:
      [0143]監(jiān)聽用戶的第二操作,根據(jù)所述第二操作啟動預覽界面,并在所述預覽界面顯示游戲數(shù)據(jù)發(fā)生改動的游戲角色在經(jīng)所述第一操作后的數(shù)據(jù)對比和/或所述游戲客戶端返回的所述統(tǒng)計值。
      [0144]在本優(yōu)選方案中,當所述編輯服務端監(jiān)聽用戶執(zhí)行第二操作(如按下預覽控件)時,即啟動預覽界面來預覽游戲角色的屬性情況及發(fā)生游戲數(shù)據(jù)改變后的屬性對比情況,以更直觀的獲得游戲數(shù)據(jù)的改動情況和前后變化情況。例如,假設(shè)用戶在第一操作時,將游戲角色A的初始攻擊力從10調(diào)整到12,則此時在預覽界面將呈現(xiàn)出原有的初始攻擊力和改動后的初始攻擊力。
      [0145]此外,在啟動預覽的同時,還可以發(fā)起與所述游戲客戶端的連接,利用生成的連接對象訪問游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以接收所述游戲客戶端根據(jù)所述改動數(shù)據(jù)和統(tǒng)計腳本返回的統(tǒng)計值,并將所述統(tǒng)計值同時顯示在所述預覽界面上。
      [0146]本優(yōu)選實施例中,通過提供預覽界面來預覽游戲角色的屬性情況及發(fā)生游戲數(shù)據(jù)改變后的屬性對比情況和/或所述游戲客戶端返回的所述統(tǒng)計值,從而更簡單的體現(xiàn)修改的效果,方便策劃的判斷決策。
      [0147]第三個優(yōu)選實施例:
      [0148]—般來說,所述游戲數(shù)據(jù)存放于所述編輯服務端內(nèi)置的表格的單元格內(nèi),而且游戲角色的游戲數(shù)據(jù)之間是有關(guān)聯(lián)關(guān)系的。例如,當游戲角色的力量發(fā)生變化時,其生命值也可能需要相應變化,因而當對某個游戲數(shù)據(jù)進行更換時,則很可能需要對與其具有關(guān)聯(lián)關(guān)系的游戲數(shù)據(jù)進行同步更改或替換,為此在本優(yōu)選實施例中,所述游戲在線調(diào)試方法還包括:
      [0149]當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)送第一信號;
      [0150]當后臺注冊的槽接收所述第一信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單元格;
      [0151]根據(jù)查詢得到的結(jié)果跳轉(zhuǎn)到與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。
      [0152]本優(yōu)選實施例主要使用了PyQT的信號槽機制來進行關(guān)聯(lián)跳轉(zhuǎn)。首先,在所述編輯服務端的后臺注冊相關(guān)的槽,作為信號的監(jiān)聽者。當用戶在對所述編輯服務端發(fā)出第一操作時,所述編輯服務端發(fā)射第一信號,后臺注冊的槽在接收到所述第一信號后對用戶操作的當前單元格進行檢查并從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單元格,并進行跳轉(zhuǎn)。
      [0153]如圖6所示,當用戶點擊某一單元格時,所述編輯服務端會查找該單元格所在的行及關(guān)聯(lián)表頭名稱(即當前單元格的標識),再根據(jù)所述單元格關(guān)聯(lián)映射表通過表頭對應到與當前單元格具有關(guān)聯(lián)關(guān)系的單元格的具體位置,并進行跳轉(zhuǎn)。
      [0154]其中,所述單元格關(guān)聯(lián)映射表預先定義好了不同單元格的關(guān)聯(lián)關(guān)系和約束關(guān)系,在本優(yōu)選實施例中,所述約束關(guān)系為關(guān)聯(lián)跳轉(zhuǎn),即在檢測到與當前單元格具有關(guān)聯(lián)關(guān)系的單元格時,實現(xiàn)自動跳轉(zhuǎn)。
      [0155]本優(yōu)選實施例通過提供自動跳轉(zhuǎn)的功能,可以自動跳轉(zhuǎn)到與當前單元格具有關(guān)聯(lián)關(guān)系的單元格,避免了手動尋找單元格的過程,縮短了游戲調(diào)試的時間和效率,并可避免出現(xiàn)遺漏的問題。
      [0156]第四個優(yōu)選實施例:
      [0157]—般來說,所述游戲數(shù)據(jù)存放于所述編輯服務端內(nèi)置的表格的單元格內(nèi),而且游戲角色的游戲數(shù)據(jù)之間是有關(guān)聯(lián)關(guān)系的。例如,當游戲角色的力量發(fā)生變化時,其生命值也可能需要相應變化,因而當對某個游戲數(shù)據(jù)進行更換時,則很可能需要對與其具有關(guān)聯(lián)關(guān)系的游戲數(shù)據(jù)進行同步更改或替換,為此在本優(yōu)選實施例中,所述游戲在線調(diào)試方法還包括:
      [0158]當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第二信號。
      [0159]當后臺注冊的槽接收所述第二信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。
      [0160]根據(jù)查詢得到結(jié)果顯示與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格的標識。
      [0161 ]與第三個優(yōu)選實施例的區(qū)別在于,本優(yōu)選實施例中,并不提供跳轉(zhuǎn),而是在編輯服務端的界面上彈出與當前單元格具有關(guān)聯(lián)關(guān)系的單元格的編號或位置的提示,如此通過提供自動提示的功能,避免了手動尋找具有關(guān)聯(lián)關(guān)系的單元格的過程,縮短了游戲調(diào)試的時間和效率。
      [0162]第五個優(yōu)選實施例:
      [0163]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括:
      [0164]根據(jù)游戲角色的類型對所述單元格進行歸類,使得具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi)。
      [0165]—般來說,游戲角色分為各種類型,如物理輸出型、輔助型、法術(shù)輸出型等,其中,當對某個游戲角色的游戲數(shù)據(jù)進行更改或替換時,則很有可能需要對同類型的游戲角色的游戲數(shù)據(jù)進行同步的更改或替換時,本優(yōu)選方案中,通過將具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi),方便進行更改,提高游戲調(diào)試的效率。
      [0166]第六個優(yōu)選實施例:
      [0167]優(yōu)選地,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括:
      [0168]在監(jiān)聽到用戶向任一單元格內(nèi)輸入游戲數(shù)據(jù)時,判斷所述游戲數(shù)據(jù)是否符合所述單元格預置的數(shù)據(jù)類型要求,若否,則發(fā)出報錯提醒。
      [0169]由于游戲數(shù)據(jù)本身是有數(shù)據(jù)類型要求的,例如,某個單元格內(nèi)只能填寫整型數(shù)據(jù),則當所述編輯服務端監(jiān)聽到用戶向該單元格填入非整型數(shù)據(jù)時,就自動提醒數(shù)據(jù)填入錯誤。
      [0170]在本優(yōu)選實施例中,在游戲數(shù)據(jù)寫入單元格的時候就提前預判填寫的游戲數(shù)據(jù)是否符合該單元格預置的數(shù)據(jù)類型要求,避免了在數(shù)據(jù)導入的時候再檢查報錯而導致的查詢過程,進一步提高了游戲調(diào)試的效率。
      [0171]第七個優(yōu)選實施例:
      [0172]優(yōu)選地,所述游戲數(shù)據(jù)初始存放于外部的表格文件中,則在發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象之前,還包括:
      [0173]同時啟動至少兩個子線程,并使每個子線程啟動一個與所述表格文件的文件類型對應的進程;
      [0174]所述子線程根據(jù)啟動的進程分別讀取所述表格文件中的游戲數(shù)據(jù);
      [0175]所述子線程在讀取完成后,對所述游戲數(shù)據(jù)進行序列化,并輸出到內(nèi)置的表格中,以將所述游戲數(shù)據(jù)從外部的表格文件導入到內(nèi)置的表格中。
      [0176]在游戲數(shù)據(jù)的填寫方式中,有些用戶習慣于先在外部的表格文件(如excel)中填寫,再導入到游戲編輯端內(nèi)置的表格中,通常一張外部的表格文件的數(shù)據(jù)量在幾M以上,按通常流程處理表格文件的數(shù)據(jù)導入需要消耗幾十分鐘,這對于編輯操作而言是無法容忍的。如圖7所示,本優(yōu)選實施例中,基于非阻塞式的方案來讀取表格文件及其內(nèi)部的約束關(guān)系(即同時讀取單元格之間的關(guān)聯(lián)關(guān)系),通過同時啟動多個子線程,進行數(shù)據(jù)讀取和初始化,在序列化后,通過stdout方式進行數(shù)據(jù)傳輸,從而節(jié)省了游戲數(shù)據(jù)從外部的表格文件導入到所述編輯服務端內(nèi)置的表格中所需的時間,提高了游戲調(diào)試的效率。
      [0177]請參閱圖8,本發(fā)明實施例還提供了一種編輯服務端100,包括:
      [0178]連接請求單元10,用于發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù)。
      [0179]其中,所述連接請求單元10與所述游戲客戶端進行的所述連接,具體為:遠程調(diào)用連接;所述連接對象具體為:線程服務。
      [0180]其中,可與所述游戲客戶端通過RPyC的方式進行連接,所述連接請求單元10作為RPyC Client端,所述游戲客戶端作為RPyC Server端。
      [0181]數(shù)據(jù)收集單元20,用于監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù)。
      [0182]其中,所述第一操作至少包括以下其中之一:修改游戲數(shù)據(jù),對游戲角色配置或更換游戲裝備,對游戲角色配置或更換游戲道具,對游戲角色配置或更換游戲符文,控制游戲角色技能釋放,控制游戲Al。
      [0183]訪問單元30,用于通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0184]本發(fā)明實施例提供的編輯服務端100,通過所述連接請求單元10建立與游戲客戶端的連接關(guān)系,所述訪問單元30利用所述數(shù)據(jù)收集單元20收集的改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),使得游戲客戶端根據(jù)改動數(shù)據(jù)執(zhí)行游戲邏輯,從而達到了實時修改,實時調(diào)試的目的。
      [0185]優(yōu)選地,請一并參閱圖9,所述編輯服務端100還包括:
      [0186]測試代碼發(fā)送單元11,用于通過所述連接對象向所述游戲客戶端發(fā)送測試代碼,以使所述游戲客戶端在接收到所述測試代碼后,執(zhí)行所述測試代碼,并返回開啟的后門端P
      [0187]初始化代碼發(fā)送單元12,用于根據(jù)所述后門端口向所述游戲客戶端發(fā)送初始化代碼,以使所述游戲客戶端進行初始化。
      [0188]統(tǒng)計腳本發(fā)送單元13,用于在確定所述游戲客戶端完成初始化后,向所述游戲客戶端發(fā)送統(tǒng)計腳本。
      [0189]統(tǒng)計腳本部署單元14,用于通過遠程實現(xiàn)函數(shù)在所述游戲客戶端解析所述統(tǒng)計腳本,并在所述游戲客戶端完成腳本解析后,將所述統(tǒng)計腳本設(shè)置到所述游戲客戶端的指定路徑,以使所述游戲客戶端在執(zhí)行游戲邏輯時,利用所述統(tǒng)計腳本統(tǒng)計在執(zhí)行游戲邏輯過程中生成的指定數(shù)據(jù)的統(tǒng)計值,并將所述統(tǒng)計值返回。
      [0190]其中,所述統(tǒng)計值至少包括以下其中一種:游戲角色的秒傷害、技能持續(xù)時間、命中率。
      [0191]優(yōu)選地,請一并參閱圖10,所述編輯服務端100還包括:
      [0192]預覽單元40,用于監(jiān)聽用戶的第二操作,根據(jù)所述第二操作啟動預覽界面,并在所述預覽界面顯示游戲數(shù)據(jù)發(fā)生改動的游戲角色在經(jīng)所述第一操作后的數(shù)據(jù)對比和/或所述游戲客戶端返回的所述統(tǒng)計值。
      [0193]優(yōu)選地,請一并參閱圖11,所述游戲數(shù)據(jù)存放于所述編輯服務端100內(nèi)置的表格的單元格內(nèi),則所述編輯服務端100還包括:
      [0194]第一信號發(fā)射單元51,用于當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第一信號;
      [0195]第一查詢單元52,用于當后臺注冊的槽接收所述第一信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單兀格;
      [0196]跳轉(zhuǎn)單元53,用于根據(jù)查詢得到的結(jié)果跳轉(zhuǎn)到與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。
      [0197]優(yōu)選地,請一并參閱圖12,所述游戲數(shù)據(jù)存放于所述編輯服務端100內(nèi)置的表格的單元格內(nèi),則所述編輯服務端100還包括:
      [0198]第二信號發(fā)射單元54,用于當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第二信號;
      [0199]第二查詢單元55,用于當后臺注冊的槽接收所述第二信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與所述當前單7Π格具有關(guān)聯(lián)關(guān)系的單7Π格;
      [0200]提示顯示單元56,用于根據(jù)查詢得到的結(jié)果在界面顯示與所述當前單元格具有關(guān)聯(lián)關(guān)系的單兀格的標識。
      [0201 ]優(yōu)選地,請一并參閱圖13,所述游戲數(shù)據(jù)存放于所述編輯服務端100內(nèi)置的表格的單元格內(nèi),則所述編輯服務端100還包括:
      [0202]歸類單元57,用于根據(jù)游戲角色的類型對所述單元格進行歸類,使得具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi)。
      [0203]優(yōu)選地,所述游戲數(shù)據(jù)存放于所述編輯服務端100內(nèi)置的表格的單元格內(nèi),則所述編輯服務端100還包括:
      [0204]合法檢查單元58,用于在監(jiān)聽到用戶向任一單元格內(nèi)輸入游戲數(shù)據(jù)時,判斷所述游戲數(shù)據(jù)是否符合所述單元格預置的數(shù)據(jù)類型要求,若否,則發(fā)出報錯提醒。
      [0205]優(yōu)選地,請一并參閱圖14,所述編輯服務端100還包括:
      [0206]子線程啟動單元61,用于同時啟動至少兩個子線程,并使每個子線程啟動一個與所述表格文件的文件類型對應的進程;
      [0207]讀取單元62,用于程根據(jù)啟動的進程分別讀取所述表格文件中的游戲數(shù)據(jù);
      [0208]輸出單元63,用于在讀取完成后,對所述游戲數(shù)據(jù)進行序列化,并輸出到內(nèi)置的表格中,以將所述游戲數(shù)據(jù)從外部的表格文件導入到內(nèi)置的表格中。
      [0209]本發(fā)明還提供一種游戲在線調(diào)試系統(tǒng),包括游戲客戶端及如上述的編輯服務端100,如圖3所示,其中:
      [0210]所述編輯服務端100,用于發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被分配一組對應的游戲數(shù)據(jù).
      [0211]所述編輯服務端100,還用于監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù).
      [0212]所述編輯服務端100,還用于通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù)。
      [0213]所述游戲客戶端,用于根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。
      [0214]優(yōu)選地,所述編輯服務端與所述游戲客戶端通過RPyC進行連接,以利用RPyC生成的透明的連接對象對所述游戲客戶端進行訪問;其中,所述編輯服務端作為RPyC Client端,所述游戲客戶端作為RPyC Server端。
      [0215]本發(fā)明實施例提供的游戲在線調(diào)試系統(tǒng),所述編輯服務端100建立與游戲客戶端的連接關(guān)系,再利用收集的改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),使得游戲客戶端根據(jù)改動數(shù)據(jù)執(zhí)行游戲邏輯,從而達到了實時修改,實時調(diào)試的目的,從而避免了繁瑣的導表和重啟過程,極大提高了游戲調(diào)試的效率,縮短了游戲開發(fā)的時間。
      [0216]以上所揭露的僅為本發(fā)明一種較佳實施例而已,當然不能以此來限定本發(fā)明之權(quán)利范圍,本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分流程,并依本發(fā)明權(quán)利要求所作的等同變化,仍屬于發(fā)明所涵蓋的范圍。
      [0217]本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random AccessMemory,RAM)等。
      【主權(quán)項】
      1.一種游戲在線調(diào)試方法,其特征在于,包括如下步驟: 發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù); 監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù); 通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。2.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于, 與所述游戲客戶端進行的所述連接,具體為:遠程調(diào)用連接;所述連接對象具體為:線程服務。3.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,所述第一操作至少包括以下其中之一:修改游戲角色的游戲數(shù)據(jù),對游戲角色配置或更換游戲裝備,對游戲角色配置或更換游戲道具,對游戲角色配置或更換游戲符文,控制游戲角色技能釋放,控制游戲Al。4.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,在發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象之后,還包括: 通過所述連接對象向所述游戲客戶端發(fā)送測試代碼,以使所述游戲客戶端在接收到所述測試代碼后,執(zhí)行所述測試代碼,并返回開啟的后門端口; 根據(jù)所述后門端口向所述游戲客戶端發(fā)送初始化代碼,以使所述游戲客戶端進行初始化; 在確定所述游戲客戶端完成初始化后,向所述游戲客戶端發(fā)送統(tǒng)計腳本; 通過遠程實現(xiàn)函數(shù)在所述游戲客戶端解析所述統(tǒng)計腳本,并在所述游戲客戶端完成腳本解析后,將所述統(tǒng)計腳本設(shè)置到所述游戲客戶端的指定路徑,以使所述游戲客戶端在執(zhí)行游戲邏輯時,利用所述統(tǒng)計腳本統(tǒng)計在執(zhí)行游戲邏輯過程中生成的指定數(shù)據(jù)的統(tǒng)計值,并將所述統(tǒng)計值返回。5.根據(jù)權(quán)利要求4所述的游戲在線調(diào)試方法,其特征在于,所述統(tǒng)計值至少包括以下其中一種:游戲角色的秒傷害、技能持續(xù)時間、命中率。6.根據(jù)權(quán)利要求4所述的游戲在線調(diào)試方法,其特征在于,在監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù)之后,還包括: 監(jiān)聽用戶的第二操作,根據(jù)所述第二操作啟動預覽界面,并在所述預覽界面顯示游戲數(shù)據(jù)發(fā)生改動的游戲角色在經(jīng)所述第一操作后的數(shù)據(jù)對比和/或所述游戲客戶端返回的所述統(tǒng)計值。7.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括: 當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)送第一信號; 當后臺注冊的槽接收所述第一信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單元格; 根據(jù)查詢得到的結(jié)果跳轉(zhuǎn)到與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。8.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括: 當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)送第二信號; 當后臺注冊的槽接收所述第二信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格; 根據(jù)查詢得到結(jié)果在界面上顯示與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格的標識。9.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括: 根據(jù)游戲角色的類型對所述單元格進行歸類,使得具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi)。10.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述游戲在線調(diào)試方法還包括: 在監(jiān)聽到用戶向任一單元格內(nèi)輸入游戲數(shù)據(jù)時,判斷所述游戲數(shù)據(jù)是否符合所述單元格預置的數(shù)據(jù)類型要求,若否,則發(fā)出報錯提醒。11.根據(jù)權(quán)利要求7至10任意一項所述的游戲在線調(diào)試方法,其特征在于,所述游戲數(shù)據(jù)初始存放于外部的表格文件中,則在發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象之前,還包括: 同時啟動至少兩個子線程,并使每個子線程啟動一個與所述表格文件的文件類型對應的進程; 所述子線程根據(jù)啟動的進程分別讀取所述表格文件中的游戲數(shù)據(jù); 所述子線程在讀取完成后,對所述游戲數(shù)據(jù)進行序列化,并輸出到內(nèi)置的表格中,以將所述游戲數(shù)據(jù)從外部的表格文件導入到內(nèi)置的表格中。12.根據(jù)權(quán)利要求1或2所述的游戲在線調(diào)試方法,其特征在于, 所述連接為RPyC連接。13.根據(jù)權(quán)利要求1所述的游戲在線調(diào)試方法,其特征在于,所述通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯,具體為: 通過所述連接對象訪問所述游戲客戶端,并在內(nèi)存中使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。14.一種編輯服務端,其特征在于,包括: 連接請求單元,用于發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被配置至少一組對應的游戲數(shù)據(jù); 數(shù)據(jù)收集單元,用于監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù); 訪問單元,用于通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。15.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述連接請求單元與所述游戲客戶端進行的所述連接,具體為:遠程調(diào)用連接;所述連接對象具體為:線程服務。16.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述第一操作至少包括以下其中之一:修改游戲數(shù)據(jù),對游戲角色配置或更換游戲裝備,對游戲角色配置或更換游戲道具,對游戲角色配置或更換游戲符文,控制游戲角色技能釋放,控制游戲Al。17.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,還包括: 測試代碼發(fā)送單元,用于通過所述連接對象向所述游戲客戶端發(fā)送測試代碼,以使所述游戲客戶端在接收到所述測試代碼后,執(zhí)行所述測試代碼,并返回開啟的后門端口; 初始化代碼發(fā)送單元,用于根據(jù)所述后門端口向所述游戲客戶端發(fā)送初始化代碼,以使所述游戲客戶端進行初始化; 統(tǒng)計腳本發(fā)送單元,用于在確定所述游戲客戶端完成初始化后,向所述游戲客戶端發(fā)送統(tǒng)計腳本; 統(tǒng)計腳本部署單元,用于通過遠程實現(xiàn)函數(shù)在所述游戲客戶端解析所述統(tǒng)計腳本,并在所述游戲客戶端完成腳本解析后,將所述統(tǒng)計腳本設(shè)置到所述游戲客戶端的指定路徑,以使所述游戲客戶端在執(zhí)行游戲邏輯時,利用所述統(tǒng)計腳本統(tǒng)計在執(zhí)行游戲邏輯過程中生成的指定數(shù)據(jù)的統(tǒng)計值,并將所述統(tǒng)計值返回。18.根據(jù)權(quán)利要求17所述的編輯服務端,其特征在于,所述統(tǒng)計值至少包括以下其中一種:游戲角色的秒傷害、技能持續(xù)時間、命中率。19.根據(jù)權(quán)利要求17所述的編輯服務端,其特征在于,還包括: 預覽單元,用于監(jiān)聽用戶的第二操作,根據(jù)所述第二操作啟動預覽界面,并在所述預覽界面顯示游戲數(shù)據(jù)發(fā)生改動的游戲角色在經(jīng)所述第一操作后的數(shù)據(jù)對比和/或所述游戲客戶端返回的所述統(tǒng)計值。20.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括: 第一信號發(fā)射單元,用于當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第一信號; 第一查詢單元,用于當后臺注冊的槽接收所述第一信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與當前單元格具有關(guān)聯(lián)關(guān)系的單7Π格; 跳轉(zhuǎn)單元,用于根據(jù)查詢得到的結(jié)果跳轉(zhuǎn)到與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格。21.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括: 第二信號發(fā)射單元,用于當監(jiān)聽到用戶對任意一個單元格內(nèi)的游戲數(shù)據(jù)執(zhí)行所述第一操作時,發(fā)射第二信號; 第二查詢單元,用于當后臺注冊的槽接收所述第二信號后,獲取所述第一操作針對的當前單元格的標識,并根據(jù)所述標識從預置的單元格關(guān)聯(lián)映射表內(nèi)查詢與所述當前單元格具有關(guān)聯(lián)關(guān)系的單7Π格; 提示顯示單元,用于根據(jù)查詢得到的結(jié)果在界面上顯示與所述當前單元格具有關(guān)聯(lián)關(guān)系的單元格的標識。22.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括: 歸類單元,用于根據(jù)游戲角色的類型對所述單元格進行歸類,使得具有相同類型的游戲角色對應的單元格放置于同一分組內(nèi)。23.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述游戲數(shù)據(jù)存放于內(nèi)置的表格的單元格內(nèi),則所述編輯服務端還包括: 合法檢查單元,用于在監(jiān)聽到用戶向任一單元格內(nèi)輸入游戲數(shù)據(jù)時,判斷所述游戲數(shù)據(jù)是否符合所述單元格預置的數(shù)據(jù)類型要求,若否,則發(fā)出報錯提醒。24.根據(jù)權(quán)利要求20至23任意一項所述的編輯服務端,其特征在于,還包括: 子線程啟動單元,用于同時啟動至少兩個子線程,并使每個子線程啟動一個與所述表格文件的文件類型對應的進程; 讀取單元,用于根據(jù)啟動的進程分別讀取所述表格文件中的游戲數(shù)據(jù); 輸出單元,用于在讀取完成后,對所述游戲數(shù)據(jù)進行序列化,并輸出到內(nèi)置的表格中,以將所述游戲數(shù)據(jù)從外部的表格文件導入到內(nèi)置的表格中。25.根據(jù)權(quán)利要求13或14所述的編輯服務端,其特征在于,所述連接為RPyC連接。26.根據(jù)權(quán)利要求14所述的編輯服務端,其特征在于,所述訪問單元具體用于,通過所述連接對象訪問所述游戲客戶端,并在內(nèi)存中使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù),以使所述游戲客戶端根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。27.—種游戲在線調(diào)試系統(tǒng),其特征在于,包括游戲客戶端及如權(quán)利要求14至26任意一項所述的編輯服務端,其中: 所述編輯服務端,用于發(fā)起與游戲客戶端的連接請求,并在連接成功后,持有連接對象;其中,所述游戲客戶端內(nèi)的每個游戲角色均被分配一組對應的游戲數(shù)據(jù); 所述編輯服務端,還用于監(jiān)聽用戶對所述游戲數(shù)據(jù)的第一操作,并收集根據(jù)所述第一操作生成的改動數(shù)據(jù); 所述編輯服務端,還用于通過所述連接對象訪問所述游戲客戶端,并使用收集的所述改動數(shù)據(jù)替換所述游戲客戶端內(nèi)對應的游戲角色的游戲數(shù)據(jù); 所述游戲客戶端,用于根據(jù)所述改動數(shù)據(jù)執(zhí)行游戲邏輯。28.根據(jù)權(quán)利要求27所述的游戲在線調(diào)試系統(tǒng),其特征在于,所述連接為RPyC連接;其中,所述編輯服務端作為RPyC Client端,所述游戲客戶端作為RPyC Server端。
      【文檔編號】G06F11/36GK105912474SQ201610264962
      【公開日】2016年8月31日
      【申請日】2016年4月26日
      【發(fā)明人】包振兵, 徐豪燦
      【申請人】網(wǎng)易(杭州)網(wǎng)絡(luò)有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1