Try   HackMD

title: '寶可夢Server架構'
-

測試方式

通訊協定 = websocket

port = 10001

IP = 35.230.88.33

連線url = ws://35.230.88.33:10001/GameCmd

data 格式 json字串

加密方式 目前debug版無加密 正式release版使用AES加解密

不用寫code 連線小工具 http://www.websocket.org/echo.html

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

Location 欄位貼上 ws://35.230.88.33:10001/GameCmd
按下 connect 按鈕即可連線到 gameServer

下面Message 欄位就是要貼上的 封包 json 字串
接著按下 send 按鈕即可送出封包

右邊Log框是server回應訊息

封包:

註冊帳號封包 Cmd=createAccount

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj Text
platformId Text 平台編號
account string 帳號
password string 密碼
nickName string 玩家暱稱
phoneNumber string 玩家電話號碼
email string 玩家電子郵箱
privateKey string 區塊鍊密鑰
token string 區塊鍊Token
referrerUserId int 推薦人會員Id
{ "sys":"system", "cmd":"createAccount", "isEncode":false, "data":{ "platformId":1, "account":"cat111", "password":"1234", "nickName":"新人王", "phoneNumber":"09xx123456", "email":"dog111@gmail.com", "privateKey": "區塊鍊密鑰", "token": "0x9dAA47E1d50A0b19bd2001d0d4468cf533551bd9" "referrerUserId":112233 } }

回應封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj Text
platformId Text 平台編號
account string 帳號
password string 密碼
nickName string 暱稱
balance float 會員點數
email string 玩家電子郵箱
privateKey string 區塊鍊密鑰
token string 區塊鍊Token
referrerUserId int 推薦人會員Id
{ "code":0, "message":"回應成功阿", "sys":"system", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"login", "data":{ "userId":1, "account":"cat111", "nickName":"新人王", "balance":0, "token":"a9cdd49e-6afc-4456-a9f0-3aa7ab7c31a6", "email":"dog111@gmail.com", "privateKey": "區塊鍊密鑰", "token": "0x9dAA47E1d50A0b19bd2001d0d4468cf533551bd9", "referrerUserId":112233 } }

封包:

登入封包 Cmd=login

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj Text
platformId Text 平台編號
account string 帳號
password string 密碼
{ "sys":"system", "cmd":"login", "isEncode":false, "data":{ "platformId":1, "account":"cat111", "password":"1234" } }

回應封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj Text
platformId Text 平台編號
account string 帳號
password string 密碼
nickName string 暱稱
balance float 會員點數
token string token
{ "code":0, "message":"回應成功阿", "sys":"system", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"login", "data":{ "userId":1, "account":"cat111", "nickName":"無名1", "balance":0, "token":"a9cdd49e-6afc-4456-a9f0-3aa7ab7c31a6", "tokenUpdateTime":"2020-04-18 15:03:10" } }

商店目前開放可以抓取寵物清單取得

Cmd=shopMonsterListGet

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱 shop_monster_list_get
isEncode bool 加密與否
data Obj 封包資料
platformId int 平台編號
account string 帳號
userId int 會員流水編號
{ "sys":"game", "cmd":"shopMonsterListGet", "sn":12345, "isEncode":false, "data":{ "platformId":1, "account":"cat111", "userId":1 } }

回應封包格式

欄位 資料型態 內容
evolutionData Array 怪物進化分裂列表
enable bool 寵物是否啟用
monsterNo number 寵物編號
costMin float 最小價格
costMax float 最大價格
reservationCost float 預約消耗燃油(手續費)
driveCost float 駕駛消耗燃油
getCoin float 可挖SOLO幣
shopMoney float 商城購物金
endDay number 結束天數
incomePercent float 收益總趴數 (EndDay N天結束後的總趴數)
incomePercentByDay float 收益日趴數(IncomePercent/EndDay)
userId number 會員編號(持有者)
account string 帳號(持有者)
reservationUserID number 會員編號(預約者)
reservationAccount string 帳號(預約者)
reservationTime string 紀錄預約時間, timeout 時, 就把預約者改回空白
createTime string 紀錄生產寵物時間
costNow float 目前價格 ( 超過CostMax 會進化拆分成N隻寵物 )
alive bool 是否存活著 (釋放後或過期就是false, 寵物持有中就是true)
reservationKind number 預約種類 0: unknow 1:指定預約 2:隨機預約 3:隨機預約-開始 4:隨機預約-搶輸 5:此預約處理完畢
orderState number 寵物狀態, ORDER_STATE_EVOLUTION 代表以進化後的靜止寵物, 所以可以繼
orderId string 物此訂單的訂單Id
serialNumber number 寵物的流水序號
dayCount number 累積了多少天
buyNotifyCheck bool 是否核對此寵物已付款, 如果已經付款就可以賣人(玩家預約買寵物, 匯款給某人, 拍照上傳, GM或持有人再去核對資料, 核對完畢就 BuyNotifyCheck=true)
{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterListGet", "data":{ "storeMonsterList":[ { "evolutionData":null, "enable":true, "monsterNo":0, "name":"藍色勇士", "costMin":55, "costMax":300, "reservationCost":[3,5], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":3, "incomePercent":17, "incomePercentByDay":5.67, "userId":0, "account":"", "reservationUserID":0, "reservationAccount":"", "reservationTime":0, "costNow":55, "alive":true, "reservationKind":2, "orderState":1, "orderId":"", "serialNumber":0, "dayCount":0, "buyNotifyCheck":false }, { "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "userId":0, "account":"", "reservationUserID":0, "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "reservationKind":2, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } ] } }

商店已上架的寵物清單取得

Cmd=shopMonsterListAllGet

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱 shop_monster_list_get
isEncode bool 加密與否
data Obj 封包資料
platformId int 平台編號
account string 帳號
userId int 會員流水編號
{ "sys":"game", "cmd":"shopMonsterListAllGet", "sn":12345, "isEncode":false, "data":{ "platformId":1, "account":"cat111", "userId":1 } }

回應封包格式 同商城清單(shopMonsterListGet)

預約寵物清單取得

Cmd=shopMonsterReservationListGet

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱 shop_monster_list_get
isEncode bool 加密與否
data Obj 封包資料
platformId int 平台編號
account string 帳號
userId int 會員流水編號
{ "sys":"game", "cmd":"shopMonsterReservationListGet", "sn":12345, "isEncode":false, "data":{ "platformId":1, "account":"cat111", "userId":1 } }

回應封包格式 同商城清單(shopMonsterListGet)

{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterReservationListGet", "data":{ "storeMonsterList":[ { "evolutionData":null, "enable":true, "monsterNo":0, "name":"藍色勇士", "costMin":55, "costMax":300, "reservationCost":[3,5], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":3, "incomePercent":17, "incomePercentByDay":5.67, "userId":0, "account":"", "reservationUserID":0, "reservationAccount":"", "reservationTime":0, "costNow":55, "alive":true, "reservationKind":2, "orderState":1, "orderId":"", "serialNumber":0, "dayCount":0, "buyNotifyCheck":false }, { "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "userId":0, "account":"", "reservationUserID":0, "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "reservationKind":2, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } ] } }

玩家背包寵物清單取得

Cmd=shopMonsterBagListGet

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱 shop_monster_list_get
isEncode bool 加密與否
data Obj 封包資料
platformId int 平台編號
account string 帳號
userId int 會員流水編號
{ "sys":"game", "cmd":"shopMonsterBagListGet", "sn":12345, "isEncode":false, "data":{ "platformId":1, "account":"cat111", "userId":1 } }

回應封包格式 同商城清單(shopMonsterListGet)

{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterBagListGet", "data":{ "storeMonsterList":[ { "evolutionData":null, "enable":true, "monsterNo":0, "name":"藍色勇士", "costMin":55, "costMax":300, "reservationCost":[3,5], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":3, "incomePercent":17, "incomePercentByDay":5.67, "userId":0, "account":"", "reservationUserID":0, "reservationAccount":"", "reservationTime":0, "costNow":55, "alive":true, "reservationKind":2, "orderState":1, "orderId":"", "serialNumber":0, "dayCount":0, "buyNotifyCheck":false }, { "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "userId":0, "account":"", "reservationUserID":0, "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "reservationKind":2, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } ] } }

指定預約寵物

Cmd=shopMonsterAssignReservation

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
monsterNo int 寵物種類編號
serialNumber int 寵物流水編號
account string 帳號(持有者)
userId int 會員流水編號(持有者)
reservationAccount string 帳號(預約者)
reservationUserID int 會員流水編號(預約者)
{ "sys":"game", "cmd":"shopMonsterAssignReservation", "sn":12345, "isEncode":false, "data":{ "monsterNo":0, "serialNumber":1, "account":"cat111", "userId":1, "reservationAccount":"dog111", "reservationUserID": 789 } }

回應封包格式 同商城清單(shopMonsterListGet)

{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterAssignReservation", "data":{ "shopMonster":{ "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "account":"", "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } } }

隨機預約寵物

Cmd=shopMonsterRandomReservation

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
monsterNo int 寵物種類編號
account string 帳號(自己檢核用)
userId int 會員流水編號(自己檢核用)
{ "sys":"game", "cmd":"shopMonsterRandomReservation", "sn":12345, "isEncode":false, "data":{ "monsterNo":1, "account":"cat111", "userId":1 } }

回應封包格式 同商城清單(shopMonsterListGet)

{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterRandomReservation", "data":{ "shopMonster":{ "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "account":"", "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } } }

收到玩家的匯款後, 辦理寵物資料轉移(GM送過來)

Cmd=shopMonsterReservationCheckFromGM

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
monsterNo int 寵物種類編號
serialNumber int 寵物流水編號
account string 帳號(持有者)
userId int 會員流水編號(持有者)
reservationAccount string 帳號(預約者)
reservationUserID int 會員流水編號(預約者)
{ "sys":"game", "cmd":"shopMonsterReservationCheckFromGM", "sn":12345, "isEncode":false, "data":{ "monsterNo":0, "serialNumber":1, "account":"cat111", "userId":1, "reservationAccount":"cat222", "reservationUserID":2 } }

回應封包格式 同商城清單(shopMonsterListGet)

{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterReservationCheckFromGM", "data":{ "shopMonster":{ "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "account":"", "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } } }

收到玩家的匯款後, 辦理寵物資料轉移(玩家送過來)

Cmd=shopMonsterReservationCheckFromPlayer

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
monsterNo int 寵物種類編號
serialNumber int 寵物流水編號
account string 帳號(持有者)
userId int 會員流水編號(持有者)
reservationAccount string 帳號(預約者)
reservationUserID int 會員流水編號(預約者)
{ "sys":"game", "cmd":"shopMonsterReservationCheckFromPlayer", "sn":12345, "isEncode":false, "data":{ "monsterNo":1, "serialNumber":1, "account":"cat111", "userId":1, "reservationAccount":"cat222", "reservationUserID":2 } }

回應封包格式 同商城清單(shopMonsterListGet)

{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterReservationCheckFromPlayer", "data":{ "shopMonster":{ "evolutionData":null, "enable":true, "monsterNo":1, "name":"黃色鎧甲", "costMin":300, "costMax":600, "reservationCost":[11,15], "driveCost":1, "getCoin":1, "shopMoney":10, "endDay":5, "incomePercent":19, "incomePercentByDay":3.8, "account":"", "reservationAccount":"", "reservationTime":0, "costNow":300, "alive":true, "orderState":1, "orderId":"", "serialNumber":1, "dayCount":0, "buyNotifyCheck":false } } }

模擬過一天

Cmd=simulationDay

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
account string 帳號
userId int 會員流水編號
{ "sys":"game", "cmd":"simulationDay", "sn":12345, "isEncode":false, "data":{ "account":"cat111", "userId":1 } }

回應封包格式

欄位 資料型態 內容
day number 目前過了幾天
{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"simulationDay", "data":{ "day":0 } }

GM增加寵物一批

Cmd=shopMonsterGmAdd

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
account string 帳號
userId int 會員流水編號
monsterNoList Array[int] 上架怪物編號
{ "sys":"game", "cmd":"shopMonsterGmAdd", "sn":12345, "isEncode":false, "data":{ "account":"cat111", "userId":1, "monsterNoList":[1,2,3,4,5] } }

回應封包格式

欄位 資料型態 內容
day number 目前過了幾天
{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMonsterGmAdd", "data":{ "monsterNoList":[1,2,3,4,5] } }

商店狀態取得

Cmd=shopStatusGet

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
account string 帳號
userId int 會員流水編號
{ "sys":"game", "cmd":"shopStatusGet", "sn":12345, "isEncode":false, "data":{ "account":"cat111", "userId":1 } }

回應封包格式

欄位 資料型態 內容
shopStatus number 0: wait 1:配對中 2:配對完畢 3:錯誤 4:維修中
day number 遊戲天數
playerCount number 玩家數量
storeMonsterCount number 寵物數量
dayBuyMonsterCnt number 日購買數量
dayEvolutionCnt number 進化分裂數量
dayUpgradeCnt number 升級數量
dayExpiredToShopCnt number 過期數量
{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopStatusGet", "data":{ "shopStatus":1, "day":10, "playerCount": 3, "storeMonsterCount":7, "dayBuyMonsterCnt":0, "dayEvolutionCnt":0, "dayUpgradeCnt":0, "dayExpiredToShopCnt":0 } }

商店狀態取得

Cmd=shopMaintain

請求封包格式

欄位 資料型態 內容
sys string 系統(system)或遊戲(game)
cmd string 封包名稱
isEncode bool 加密與否
data Obj 封包資料
account string GM帳號
userId int GM會員流水編號
isMainTain bool true:維修 false:開始遊戲
{ "sys":"game", "cmd":"shopMaintain", "sn":12345, "isEncode":false, "data":{ "account":"cat111", "userId":1, "isMainTain":true } }

回應封包格式

欄位 資料型態 內容
shopStatus number 0: wait 1:配對中 2:配對完畢 3:錯誤 4:維修中
day number 遊戲天數
{ "code":0, "message":"回應成功阿", "sys":"game", "clientId":0, "sn":0, "isEncode":false, "ver":0, "ret":"shopMaintain", "data":{ "shopStatus":1, "day":10 } }

使用流程

1.CreateAccount 建立一個帳號
2.Login 取得會員資料 (拿到 UserId + Account)

3.shopMonsterListGet 商店已上架的寵物清單取得
4.shopMonsterAssignReservation 指定預約寵物
5.shopMonsterReservationCheckFromGM (GM送過來) <剛開服 玩家剛買寵物, 需要有GM去檢查玩家是否有匯款 確認完畢後, 送此封包來

6.shopMonsterBuy 玩家買寵物 ( 要先預約寵物後(不論是隨機預約寵物, 或指定預約寵物, 才可以使用此封包購買寵物 )