mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 16:02:26 +08:00
GCG初步 但会卡进度条 用命令/gcg进入
This commit is contained in:
@@ -1,10 +1,9 @@
|
|||||||
package game
|
package game
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"hk4e/gs/model"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"hk4e/gs/model"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// HelpCommand 帮助命令
|
// HelpCommand 帮助命令
|
||||||
@@ -249,3 +248,12 @@ func (c *CommandManager) GiveCommand(cmd *CommandMessage) {
|
|||||||
c.SendMessage(player, "已给予玩家 UID:%v, 所有内容。", target.PlayerID)
|
c.SendMessage(player, "已给予玩家 UID:%v, 所有内容。", target.PlayerID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GcgCommand Gcg测试命令
|
||||||
|
func (c *CommandManager) GcgCommand(cm *CommandMessage) {
|
||||||
|
player := cm.Executor.(*model.Player)
|
||||||
|
|
||||||
|
GAME_MANAGER.GCGStartChallenge(player)
|
||||||
|
|
||||||
|
c.SendMessage(player, "收到命令")
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ func (c *CommandManager) GMTeleportPlayer(userId, sceneId uint32, posX, posY, po
|
|||||||
logger.Error("player is nil, uid: %v", userId)
|
logger.Error("player is nil, uid: %v", userId)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
GAME_MANAGER.TeleportPlayer(player, uint32(constant.EnterReasonConst.Gm), sceneId, &model.Vector{
|
GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonConst.Gm, sceneId, &model.Vector{
|
||||||
X: posX,
|
X: posX,
|
||||||
Y: posY,
|
Y: posY,
|
||||||
Z: posZ,
|
Z: posZ,
|
||||||
})
|
}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GMAddUserItem 给予玩家物品
|
// GMAddUserItem 给予玩家物品
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ func (c *CommandManager) InitRouter() {
|
|||||||
c.RegisterRouter(CommandPermNormal, c.OpCommand, "op")
|
c.RegisterRouter(CommandPermNormal, c.OpCommand, "op")
|
||||||
c.RegisterRouter(CommandPermNormal, c.TeleportCommand, "teleport", "tp")
|
c.RegisterRouter(CommandPermNormal, c.TeleportCommand, "teleport", "tp")
|
||||||
c.RegisterRouter(CommandPermNormal, c.GiveCommand, "give", "item")
|
c.RegisterRouter(CommandPermNormal, c.GiveCommand, "give", "item")
|
||||||
|
c.RegisterRouter(CommandPermNormal, c.GcgCommand, "gcg")
|
||||||
}
|
}
|
||||||
// GM命令
|
// GM命令
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ var USER_MANAGER *UserManager = nil
|
|||||||
var WORLD_MANAGER *WorldManager = nil
|
var WORLD_MANAGER *WorldManager = nil
|
||||||
var TICK_MANAGER *TickManager = nil
|
var TICK_MANAGER *TickManager = nil
|
||||||
var COMMAND_MANAGER *CommandManager = nil
|
var COMMAND_MANAGER *CommandManager = nil
|
||||||
|
var GCG_MANAGER *GCGManager = nil
|
||||||
var MESSAGE_QUEUE *mq.MessageQueue
|
var MESSAGE_QUEUE *mq.MessageQueue
|
||||||
|
|
||||||
var SELF *model.Player
|
var SELF *model.Player
|
||||||
@@ -53,6 +54,7 @@ func NewGameManager(dao *dao.Dao, messageQueue *mq.MessageQueue, gsId uint32) (r
|
|||||||
WORLD_MANAGER = NewWorldManager(r.snowflake)
|
WORLD_MANAGER = NewWorldManager(r.snowflake)
|
||||||
TICK_MANAGER = NewTickManager()
|
TICK_MANAGER = NewTickManager()
|
||||||
COMMAND_MANAGER = NewCommandManager()
|
COMMAND_MANAGER = NewCommandManager()
|
||||||
|
GCG_MANAGER = NewGCGManager()
|
||||||
r.run()
|
r.run()
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|||||||
105
gs/game/gcg_manager.go
Normal file
105
gs/game/gcg_manager.go
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
package game
|
||||||
|
|
||||||
|
import (
|
||||||
|
"hk4e/gs/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ControllerType 操控者类型
|
||||||
|
type ControllerType uint8
|
||||||
|
|
||||||
|
const (
|
||||||
|
ControllerType_Player ControllerType = iota // 玩家
|
||||||
|
ControllerType_AI // AI
|
||||||
|
)
|
||||||
|
|
||||||
|
// GCGCardInfo 游戏对局内卡牌
|
||||||
|
type GCGCardInfo struct {
|
||||||
|
cardId uint32 // 卡牌Id
|
||||||
|
guid uint32 // 唯一Id
|
||||||
|
faceType uint32 // 卡面类型
|
||||||
|
tagList []uint32 // Tag
|
||||||
|
tokenMap map[uint32]uint32 // Token
|
||||||
|
skillIdList []uint32 // 技能Id列表
|
||||||
|
skillLimitList []uint32 // 技能限制列表
|
||||||
|
isShow bool // 是否展示
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGController 操控者
|
||||||
|
type GCGController struct {
|
||||||
|
controllerId uint32 // 操控者Id
|
||||||
|
cardMap map[uint32]*GCGCardInfo // 卡牌列表
|
||||||
|
controllerType ControllerType // 操控者的类型
|
||||||
|
player *model.Player
|
||||||
|
ai uint32 // 暂时不写
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGGame 游戏对局
|
||||||
|
type GCGGame struct {
|
||||||
|
guid uint32 // 唯一Id
|
||||||
|
gameId uint32 // 游戏Id
|
||||||
|
round uint32 // 游戏回合数
|
||||||
|
serverSeqCounter uint32 // 请求序列生成计数器
|
||||||
|
controllerIdCounter uint32 // 操控者Id生成器
|
||||||
|
cardGuidCounter uint32 // 卡牌guid生成计数器
|
||||||
|
controllerMap map[uint32]*GCGController // 操控者列表 uint32 -> controllerId
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGManager 七圣召唤管理器
|
||||||
|
type GCGManager struct {
|
||||||
|
gameMap map[uint32]*GCGGame // 游戏列表 uint32 -> guid
|
||||||
|
gameGuidCounter uint32 // 游戏guid生成计数器
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGCGManager() *GCGManager {
|
||||||
|
gcgManager := new(GCGManager)
|
||||||
|
gcgManager.gameMap = make(map[uint32]*GCGGame)
|
||||||
|
return gcgManager
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateGame 创建GCG游戏对局
|
||||||
|
func (g *GCGManager) CreateGame(gameId uint32) *GCGGame {
|
||||||
|
g.gameGuidCounter++
|
||||||
|
game := &GCGGame{
|
||||||
|
guid: g.gameGuidCounter,
|
||||||
|
gameId: gameId,
|
||||||
|
round: 1,
|
||||||
|
controllerMap: make(map[uint32]*GCGController, 0),
|
||||||
|
}
|
||||||
|
// 记录游戏
|
||||||
|
g.gameMap[game.guid] = game
|
||||||
|
return game
|
||||||
|
}
|
||||||
|
|
||||||
|
// JoinGame 玩家加入GCG游戏
|
||||||
|
func (g *GCGManager) JoinGame(game *GCGGame, player *model.Player) {
|
||||||
|
game.controllerIdCounter++
|
||||||
|
controller := &GCGController{
|
||||||
|
controllerId: game.controllerIdCounter,
|
||||||
|
cardMap: make(map[uint32]*GCGCardInfo, 0),
|
||||||
|
controllerType: ControllerType_Player,
|
||||||
|
player: player,
|
||||||
|
}
|
||||||
|
// 生成卡牌信息
|
||||||
|
|
||||||
|
// 记录操控者
|
||||||
|
game.controllerMap[game.controllerIdCounter] = controller
|
||||||
|
}
|
||||||
|
|
||||||
|
//// CreateGameCardInfo 生成操控者卡牌信息
|
||||||
|
//func (g *GCGManager) CreateGameCardInfo(controller *GCGController, gcgDeck *model.GCGDeck) *GCGCardInfo {
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
// GetGameControllerByUserId 通过玩家Id获取GCGController对象
|
||||||
|
func (g *GCGManager) GetGameControllerByUserId(game *GCGGame, userId uint32) *GCGController {
|
||||||
|
for _, controller := range game.controllerMap {
|
||||||
|
// 为nil说明该操控者不是玩家
|
||||||
|
if controller.player == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if controller.player.PlayerID == userId {
|
||||||
|
return controller
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -123,6 +123,8 @@ func (r *RouteManager) InitRoute() {
|
|||||||
r.registerRouter(cmd.VehicleInteractReq, GAME_MANAGER.VehicleInteractReq)
|
r.registerRouter(cmd.VehicleInteractReq, GAME_MANAGER.VehicleInteractReq)
|
||||||
r.registerRouter(cmd.SceneEntityDrownReq, GAME_MANAGER.SceneEntityDrownReq)
|
r.registerRouter(cmd.SceneEntityDrownReq, GAME_MANAGER.SceneEntityDrownReq)
|
||||||
r.registerRouter(cmd.GetOnlinePlayerInfoReq, GAME_MANAGER.GetOnlinePlayerInfoReq)
|
r.registerRouter(cmd.GetOnlinePlayerInfoReq, GAME_MANAGER.GetOnlinePlayerInfoReq)
|
||||||
|
r.registerRouter(cmd.GCGAskDuelReq, GAME_MANAGER.GCGAskDuelReq)
|
||||||
|
r.registerRouter(cmd.GCGInitFinishReq, GAME_MANAGER.GCGInitFinishReq)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RouteManager) RouteHandle(netMsg *mq.NetMsg) {
|
func (r *RouteManager) RouteHandle(netMsg *mq.NetMsg) {
|
||||||
|
|||||||
578
gs/game/user_gcg.go
Normal file
578
gs/game/user_gcg.go
Normal file
@@ -0,0 +1,578 @@
|
|||||||
|
package game
|
||||||
|
|
||||||
|
import (
|
||||||
|
pb "google.golang.org/protobuf/proto"
|
||||||
|
"hk4e/common/constant"
|
||||||
|
"hk4e/gs/model"
|
||||||
|
"hk4e/protocol/cmd"
|
||||||
|
"hk4e/protocol/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (g *GameManager) GCGLogin(player *model.Player) {
|
||||||
|
player.SceneId = 1076
|
||||||
|
player.Pos.X = 8.974
|
||||||
|
player.Pos.Y = 0
|
||||||
|
player.Pos.Z = 9.373
|
||||||
|
// GCG基础信息
|
||||||
|
g.SendMsg(cmd.GCGBasicDataNotify, player.PlayerID, player.ClientSeq, g.PacketGCGBasicDataNotify(player))
|
||||||
|
// GCG等级挑战解锁
|
||||||
|
g.SendMsg(cmd.GCGLevelChallengeNotify, player.PlayerID, player.ClientSeq, g.PacketGCGLevelChallengeNotify(player))
|
||||||
|
// GCG禁止的卡牌
|
||||||
|
g.SendMsg(cmd.GCGDSBanCardNotify, player.PlayerID, player.ClientSeq, g.PacketGCGDSBanCardNotify(player))
|
||||||
|
// GCG解锁或拥有的内容
|
||||||
|
g.SendMsg(cmd.GCGDSDataNotify, player.PlayerID, player.ClientSeq, g.PacketGCGDSDataNotify(player))
|
||||||
|
// GCG酒馆挑战数据
|
||||||
|
g.SendMsg(cmd.GCGTCTavernChallengeDataNotify, player.PlayerID, player.ClientSeq, g.PacketGCGTCTavernChallengeDataNotify(player))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGTavernInit GCG酒馆初始化
|
||||||
|
func (g *GameManager) GCGTavernInit(player *model.Player) {
|
||||||
|
//// GCG酒馆信息通知
|
||||||
|
//g.SendMsg(cmd.GCGTCTavernInfoNotify, player.PlayerID, player.ClientSeq, g.PacketGCGTCTavernInfoNotify(player))
|
||||||
|
//// GCG酒馆NPC信息通知
|
||||||
|
//g.SendMsg(cmd.GCGTavernNpcInfoNotify, player.PlayerID, player.ClientSeq, g.PacketGCGTavernNpcInfoNotify(player))
|
||||||
|
// 可能是包没发全导致卡进度条?
|
||||||
|
g.SendMsg(cmd.DungeonWayPointNotify, player.PlayerID, player.ClientSeq, &proto.DungeonWayPointNotify{})
|
||||||
|
g.SendMsg(cmd.DungeonDataNotify, player.PlayerID, player.ClientSeq, &proto.DungeonDataNotify{})
|
||||||
|
g.SendMsg(cmd.Unk3300_DGBNCDEIIFC, player.PlayerID, player.ClientSeq, &proto.Unk3300_DGBNCDEIIFC{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGStartChallenge GCG开始挑战
|
||||||
|
func (g *GameManager) GCGStartChallenge(player *model.Player) {
|
||||||
|
// GCG开始游戏通知
|
||||||
|
//gcgStartChallengeByCheckRewardRsp := &proto.GCGStartChallengeByCheckRewardRsp{
|
||||||
|
// ExceededItemTypeList: make([]uint32, 0, 0),
|
||||||
|
// LevelId: 0,
|
||||||
|
// ExceededItemList: make([]uint32, 0, 0),
|
||||||
|
// LevelType: proto.GCGLevelType_GCG_LEVEL_TYPE_GUIDE_GROUP,
|
||||||
|
// ConfigId: 7066505,
|
||||||
|
// Retcode: 0,
|
||||||
|
//}
|
||||||
|
//g.SendMsg(cmd.GCGStartChallengeByCheckRewardRsp, player.PlayerID, player.ClientSeq, gcgStartChallengeByCheckRewardRsp)
|
||||||
|
|
||||||
|
// GCG游戏简要信息通知
|
||||||
|
GAME_MANAGER.SendMsg(cmd.GCGGameBriefDataNotify, player.PlayerID, player.ClientSeq, g.PacketGCGGameBriefDataNotify(player, proto.GCGGameBusinessType_GCG_GAME_BUSINESS_TYPE_GUIDE_GROUP, 30102))
|
||||||
|
|
||||||
|
// 玩家进入GCG界面
|
||||||
|
g.TeleportPlayer(player, constant.EnterReasonConst.DungeonEnter, 79999, new(model.Vector), 2162)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGAskDuelReq GCG决斗请求
|
||||||
|
func (g *GameManager) GCGAskDuelReq(player *model.Player, payloadMsg pb.Message) {
|
||||||
|
// 获取玩家所在的游戏
|
||||||
|
game, ok := GCG_MANAGER.gameMap[player.GCGCurGameGuid]
|
||||||
|
if !ok {
|
||||||
|
g.CommonRetError(cmd.GCGAskDuelRsp, player, &proto.GCGAskDuelRsp{}, proto.Retcode_RET_GCG_GAME_NOT_RUNNING)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 计数器+1
|
||||||
|
game.serverSeqCounter++
|
||||||
|
// 获取玩家的操控者对象
|
||||||
|
gameController := GCG_MANAGER.GetGameControllerByUserId(game, player.PlayerID)
|
||||||
|
if gameController == nil {
|
||||||
|
g.CommonRetError(cmd.GCGAskDuelRsp, player, &proto.GCGAskDuelRsp{}, proto.Retcode_RET_GCG_NOT_IN_GCG_DUNGEON)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// PacketGCGAskDuelRsp
|
||||||
|
//gcgAskDuelRsp := &proto.GCGAskDuelRsp{
|
||||||
|
// Duel: &proto.GCGDuel{
|
||||||
|
// ServerSeq: game.serverSeqCounter,
|
||||||
|
// ShowInfoList: make([]*proto.GCGControllerShowInfo, 0, len(game.controllerMap)),
|
||||||
|
// ForbidFinishChallengeList: nil,
|
||||||
|
// CardList: nil,
|
||||||
|
// Unk3300_BIANMOPDEHO: 0,
|
||||||
|
// CostRevise: nil,
|
||||||
|
// GameId: game.gameId,
|
||||||
|
// FieldList: nil,
|
||||||
|
// Unk3300_CDCMBOKBLAK: nil,
|
||||||
|
// BusinessType: 0,
|
||||||
|
// IntentionList: nil,
|
||||||
|
// ChallengeList: nil,
|
||||||
|
// HistoryCardList: nil,
|
||||||
|
// Round: game.round,
|
||||||
|
// ControllerId: gameController.controllerId,
|
||||||
|
// HistoryMsgPackList: nil,
|
||||||
|
// Unk3300_JHDDNKFPINA: 0,
|
||||||
|
// CardIdList: make([]uint32, 0, 0),
|
||||||
|
// Unk3300_JBBMBKGOONO: 0,
|
||||||
|
// Phase: nil,
|
||||||
|
// },
|
||||||
|
//}
|
||||||
|
//// 玩家信息列表
|
||||||
|
//for _, controller := range game.controllerMap {
|
||||||
|
// gcgControllerShowInfo := &proto.GCGControllerShowInfo{
|
||||||
|
// ControllerId: controller.controllerId,
|
||||||
|
// ProfilePicture: &proto.ProfilePicture{},
|
||||||
|
// }
|
||||||
|
// // 如果为玩家则更改为玩家信息
|
||||||
|
// if controller.controllerType == ControllerType_Player {
|
||||||
|
// gcgControllerShowInfo.ProfilePicture.AvatarId = player.HeadImage
|
||||||
|
// gcgControllerShowInfo.ProfilePicture.AvatarId = player.AvatarMap[player.HeadImage].Costume
|
||||||
|
// }
|
||||||
|
// gcgAskDuelRsp.Duel.ShowInfoList = append(gcgAskDuelRsp.Duel.ShowInfoList)
|
||||||
|
//}
|
||||||
|
//GAME_MANAGER.SendMsg(cmd.GCGAskDuelRsp, player.PlayerID, player.ClientSeq, gcgAskDuelRsp)
|
||||||
|
// PacketGCGAskDuelRsp
|
||||||
|
gcgAskDuelRsp := new(proto.GCGAskDuelRsp)
|
||||||
|
gcgAskDuelRsp.Duel = &proto.GCGDuel{
|
||||||
|
ServerSeq: 1, // 应该每次+1
|
||||||
|
ShowInfoList: []*proto.GCGControllerShowInfo{
|
||||||
|
// 玩家的
|
||||||
|
{
|
||||||
|
// PsnId: ?
|
||||||
|
NickName: player.NickName,
|
||||||
|
// OnlineId: ?
|
||||||
|
ProfilePicture: &proto.ProfilePicture{
|
||||||
|
AvatarId: player.TeamConfig.GetActiveAvatarId(),
|
||||||
|
CostumeId: player.AvatarMap[player.TeamConfig.GetActiveAvatarId()].Costume,
|
||||||
|
},
|
||||||
|
ControllerId: 1,
|
||||||
|
},
|
||||||
|
// 对手的
|
||||||
|
{
|
||||||
|
ProfilePicture: &proto.ProfilePicture{},
|
||||||
|
ControllerId: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// ForbidFinishChallengeList: nil,
|
||||||
|
CardList: []*proto.GCGCard{
|
||||||
|
{
|
||||||
|
TagList: []uint32{203, 303, 401},
|
||||||
|
Guid: 1, // 应该每次+1
|
||||||
|
IsShow: true,
|
||||||
|
TokenList: []*proto.GCGToken{
|
||||||
|
{
|
||||||
|
Key: 1,
|
||||||
|
Value: 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 2,
|
||||||
|
Value: 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 5,
|
||||||
|
Value: 3,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// FaceType: 0, ?
|
||||||
|
SkillIdList: []uint32{13011, 13012, 13013},
|
||||||
|
// SkillLimitsList: nil,
|
||||||
|
Id: 1301,
|
||||||
|
ControllerId: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TagList: []uint32{201, 301, 401},
|
||||||
|
Guid: 2, // 应该每次+1
|
||||||
|
IsShow: true,
|
||||||
|
TokenList: []*proto.GCGToken{
|
||||||
|
{
|
||||||
|
Key: 1,
|
||||||
|
Value: 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 2,
|
||||||
|
Value: 10,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 5,
|
||||||
|
Value: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// FaceType: 0, ?
|
||||||
|
SkillIdList: []uint32{11031, 11032, 11033},
|
||||||
|
// SkillLimitsList: nil,
|
||||||
|
Id: 1103,
|
||||||
|
ControllerId: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TagList: []uint32{200, 300, 502, 503},
|
||||||
|
Guid: 3, // 应该每次+1
|
||||||
|
IsShow: true,
|
||||||
|
TokenList: []*proto.GCGToken{
|
||||||
|
{
|
||||||
|
Key: 1,
|
||||||
|
Value: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 2,
|
||||||
|
Value: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 5,
|
||||||
|
Value: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// FaceType: 0, ?
|
||||||
|
SkillIdList: []uint32{30011, 30012, 30013},
|
||||||
|
// SkillLimitsList: nil,
|
||||||
|
Id: 3301,
|
||||||
|
ControllerId: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
TagList: []uint32{200, 303, 502, 503},
|
||||||
|
Guid: 4, // 应该每次+1
|
||||||
|
IsShow: true,
|
||||||
|
TokenList: []*proto.GCGToken{
|
||||||
|
{
|
||||||
|
Key: 1,
|
||||||
|
Value: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 2,
|
||||||
|
Value: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 4,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 5,
|
||||||
|
Value: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// FaceType: 0, ?
|
||||||
|
SkillIdList: []uint32{33021, 33022, 33023, 33024},
|
||||||
|
// SkillLimitsList: nil,
|
||||||
|
Id: 3302,
|
||||||
|
ControllerId: 2,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Guid: 5, // 应该每次+1
|
||||||
|
IsShow: true,
|
||||||
|
SkillIdList: []uint32{13010111},
|
||||||
|
Id: 1301011,
|
||||||
|
ControllerId: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Unk3300_BIANMOPDEHO: 1,
|
||||||
|
CostRevise: &proto.GCGCostReviseInfo{
|
||||||
|
CanUseHandCardIdList: nil,
|
||||||
|
SelectOnStageCostList: nil,
|
||||||
|
PlayCardCostList: nil,
|
||||||
|
AttackCostList: nil,
|
||||||
|
IsCanAttack: false,
|
||||||
|
},
|
||||||
|
// GameId: 0,
|
||||||
|
FieldList: []*proto.GCGPlayerField{
|
||||||
|
{
|
||||||
|
// Unk3300_IKJMGAHCFPM: 0,
|
||||||
|
ModifyZoneMap: map[uint32]*proto.GCGZone{
|
||||||
|
1: {},
|
||||||
|
2: {},
|
||||||
|
},
|
||||||
|
// Unk3300_GGHKFFADEAL: 0,
|
||||||
|
Unk3300_AOPJIOHMPOF: nil,
|
||||||
|
Unk3300_FDFPHNDOJML: 0,
|
||||||
|
Unk3300_IPLMHKCNDLE: &proto.GCGZone{},
|
||||||
|
Unk3300_EIHOMDLENMK: &proto.GCGZone{},
|
||||||
|
// WaitingList: nil,
|
||||||
|
// Unk3300_PBECINKKHND: 0,
|
||||||
|
ControllerId: 1,
|
||||||
|
Unk3300_INDJNJJJNKL: &proto.GCGZone{
|
||||||
|
CardList: []uint32{1, 2},
|
||||||
|
},
|
||||||
|
Unk3300_EFNAEFBECHD: &proto.GCGZone{},
|
||||||
|
// IsPassed: false,
|
||||||
|
// IntentionList: nil,
|
||||||
|
// DiceSideList: nil,
|
||||||
|
// DeckCardNum: 0,
|
||||||
|
// Unk3300_GLNIFLOKBPM: 0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Unk3300_IKJMGAHCFPM: 0,
|
||||||
|
ModifyZoneMap: map[uint32]*proto.GCGZone{
|
||||||
|
3: {},
|
||||||
|
4: {},
|
||||||
|
},
|
||||||
|
// Unk3300_GGHKFFADEAL: 0,
|
||||||
|
Unk3300_AOPJIOHMPOF: nil,
|
||||||
|
Unk3300_FDFPHNDOJML: 0,
|
||||||
|
Unk3300_IPLMHKCNDLE: &proto.GCGZone{},
|
||||||
|
Unk3300_EIHOMDLENMK: &proto.GCGZone{},
|
||||||
|
// WaitingList: nil,
|
||||||
|
// Unk3300_PBECINKKHND: 0,
|
||||||
|
ControllerId: 2,
|
||||||
|
Unk3300_INDJNJJJNKL: &proto.GCGZone{
|
||||||
|
CardList: []uint32{3, 4},
|
||||||
|
},
|
||||||
|
Unk3300_EFNAEFBECHD: &proto.GCGZone{},
|
||||||
|
// IsPassed: false,
|
||||||
|
// IntentionList: nil,
|
||||||
|
// DiceSideList: nil,
|
||||||
|
// DeckCardNum: 0,
|
||||||
|
// Unk3300_GLNIFLOKBPM: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// 应该是玩家成员列表
|
||||||
|
Unk3300_CDCMBOKBLAK: []*proto.Unk3300_ADHENCIFKNI{
|
||||||
|
{
|
||||||
|
ControllerId: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ControllerId: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// BusinessType: 0,
|
||||||
|
// IntentionList: nil,
|
||||||
|
ChallengeList: []*proto.GCGDuelChallenge{
|
||||||
|
{
|
||||||
|
ChallengeId: 906,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChallengeId: 907,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChallengeId: 903,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChallengeId: 904,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChallengeId: 905,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChallengeId: 908,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ChallengeId: 909,
|
||||||
|
TotalProgress: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Round: 1,
|
||||||
|
ControllerId: 1,
|
||||||
|
HistoryMsgPackList: []*proto.GCGMessagePack{
|
||||||
|
{
|
||||||
|
MsgList: []*proto.GCGMessage{
|
||||||
|
{
|
||||||
|
Message: &proto.GCGMessage_PhaseChange{PhaseChange: &proto.GCGMsgPhaseChange{
|
||||||
|
BeforePhase: proto.GCGPhaseType_GCG_PHASE_TYPE_START,
|
||||||
|
AllowControllerMap: []*proto.Uint32Pair{
|
||||||
|
{
|
||||||
|
Key: 1,
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 2,
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MsgList: []*proto.GCGMessage{
|
||||||
|
{
|
||||||
|
Message: &proto.GCGMessage_UpdateController{UpdateController: &proto.GCGMsgUpdateController{
|
||||||
|
AllowControllerMap: []*proto.Uint32Pair{
|
||||||
|
{
|
||||||
|
Key: 1,
|
||||||
|
Value: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ActionType: proto.GCGActionType_GCG_ACTION_TYPE_SEND_MESSAGE,
|
||||||
|
MsgList: []*proto.GCGMessage{
|
||||||
|
{
|
||||||
|
Message: &proto.GCGMessage_PhaseContinue{},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// Unk3300_JHDDNKFPINA: 0,
|
||||||
|
CardIdList: []uint32{1103, 1301, 3001, 3302, 1301011},
|
||||||
|
// Unk3300_JBBMBKGOONO: 0,
|
||||||
|
Phase: &proto.GCGPhase{
|
||||||
|
PhaseType: proto.GCGPhaseType_GCG_PHASE_TYPE_START,
|
||||||
|
AllowControllerMap: map[uint32]uint32{
|
||||||
|
1: 1,
|
||||||
|
2: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
gcgAskDuelRsp.Duel.HistoryCardList = gcgAskDuelRsp.Duel.CardList
|
||||||
|
|
||||||
|
GAME_MANAGER.SendMsg(cmd.GCGAskDuelRsp, player.PlayerID, player.ClientSeq, gcgAskDuelRsp)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGInitFinishReq GCG决斗请求
|
||||||
|
func (g *GameManager) GCGInitFinishReq(player *model.Player, payloadMsg pb.Message) {
|
||||||
|
GAME_MANAGER.SendMsg(cmd.GCGAskDuelRsp, player.PlayerID, player.ClientSeq, &proto.GCGInitFinishRsp{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGGameBriefDataNotify GCG游戏简要数据通知
|
||||||
|
func (g *GameManager) PacketGCGGameBriefDataNotify(player *model.Player, businessType proto.GCGGameBusinessType, gameId uint32) *proto.GCGGameBriefDataNotify {
|
||||||
|
gcgGameBriefDataNotify := &proto.GCGGameBriefDataNotify{
|
||||||
|
GcgBriefData: &proto.GCGGameBriefData{
|
||||||
|
BusinessType: businessType,
|
||||||
|
PlatformType: uint32(proto.PlatformType_PLATFORM_TYPE_PC), // TODO 根据玩家设备修改
|
||||||
|
GameId: gameId,
|
||||||
|
PlayerBriefList: []*proto.GCGPlayerBriefData{
|
||||||
|
{
|
||||||
|
Uid: player.PlayerID,
|
||||||
|
ControllerId: 1,
|
||||||
|
ProfilePicture: &proto.ProfilePicture{
|
||||||
|
AvatarId: player.TeamConfig.GetActiveAvatarId(),
|
||||||
|
CostumeId: player.AvatarMap[player.TeamConfig.GetActiveAvatarId()].Costume,
|
||||||
|
},
|
||||||
|
NickName: player.NickName,
|
||||||
|
CardIdList: []uint32{1301, 1103},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ControllerId: 2,
|
||||||
|
ProfilePicture: &proto.ProfilePicture{},
|
||||||
|
CardIdList: []uint32{3001, 3302},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
IsNewGame: true,
|
||||||
|
}
|
||||||
|
return gcgGameBriefDataNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGTavernNpcInfoNotify GCG酒馆NPC信息通知
|
||||||
|
func (g *GameManager) PacketGCGTavernNpcInfoNotify(player *model.Player) *proto.GCGTavernNpcInfoNotify {
|
||||||
|
gcgTavernNpcInfoNotify := &proto.GCGTavernNpcInfoNotify{
|
||||||
|
Unk3300_FKAKHMMIEBC: make([]*proto.GCGTavernNpcInfo, 0, 0),
|
||||||
|
Unk3300_BAMLNENDLCM: make([]*proto.GCGTavernNpcInfo, 0, 0),
|
||||||
|
CharacterNpc: &proto.GCGTavernNpcInfo{
|
||||||
|
Id: 0,
|
||||||
|
ScenePointId: 0,
|
||||||
|
LevelId: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return gcgTavernNpcInfoNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGTCTavernInfoNotify GCG酒馆信息通知
|
||||||
|
func (g *GameManager) PacketGCGTCTavernInfoNotify(player *model.Player) *proto.GCGTCTavernInfoNotify {
|
||||||
|
gcgTCTavernInfoNotify := &proto.GCGTCTavernInfoNotify{
|
||||||
|
LevelId: 0,
|
||||||
|
Unk3300_IMFJBNFMCHM: false,
|
||||||
|
Unk3300_MBGMHBNBKBK: false,
|
||||||
|
PointId: 0,
|
||||||
|
ElementType: 8,
|
||||||
|
AvatarId: 10000007,
|
||||||
|
CharacterId: 0,
|
||||||
|
}
|
||||||
|
return gcgTCTavernInfoNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGTCTavernChallengeDataNotify GCG酒馆挑战数据
|
||||||
|
func (g *GameManager) PacketGCGTCTavernChallengeDataNotify(player *model.Player) *proto.GCGTCTavernChallengeDataNotify {
|
||||||
|
gcgTCTavernChallengeDataNotify := &proto.GCGTCTavernChallengeDataNotify{
|
||||||
|
TavernChallengeList: make([]*proto.GCGTCTavernChallengeData, 0, 0),
|
||||||
|
}
|
||||||
|
for _, challenge := range player.GCGInfo.TavernChallengeMap {
|
||||||
|
gcgTCTavernChallengeData := &proto.GCGTCTavernChallengeData{
|
||||||
|
UnlockLevelIdList: challenge.UnlockLevelIdList,
|
||||||
|
CharacterId: challenge.CharacterId,
|
||||||
|
}
|
||||||
|
gcgTCTavernChallengeDataNotify.TavernChallengeList = append(gcgTCTavernChallengeDataNotify.TavernChallengeList, gcgTCTavernChallengeData)
|
||||||
|
}
|
||||||
|
return gcgTCTavernChallengeDataNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGBasicDataNotify GCG基础数据通知
|
||||||
|
func (g *GameManager) PacketGCGBasicDataNotify(player *model.Player) *proto.GCGBasicDataNotify {
|
||||||
|
gcgBasicDataNotify := &proto.GCGBasicDataNotify{
|
||||||
|
Level: player.GCGInfo.Level,
|
||||||
|
Exp: player.GCGInfo.Exp,
|
||||||
|
LevelRewardTakenList: make([]uint32, 0, 0),
|
||||||
|
}
|
||||||
|
return gcgBasicDataNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGLevelChallengeNotify GCG等级挑战通知
|
||||||
|
func (g *GameManager) PacketGCGLevelChallengeNotify(player *model.Player) *proto.GCGLevelChallengeNotify {
|
||||||
|
gcgLevelChallengeNotify := &proto.GCGLevelChallengeNotify{
|
||||||
|
UnlockBossChallengeList: make([]*proto.GCGBossChallengeData, 0, 0),
|
||||||
|
UnlockWorldChallengeList: player.GCGInfo.UnlockWorldChallengeList,
|
||||||
|
LevelList: make([]*proto.GCGLevelData, 0, 0),
|
||||||
|
}
|
||||||
|
// Boss挑战信息
|
||||||
|
for _, challenge := range player.GCGInfo.UnlockBossChallengeMap {
|
||||||
|
gcgBossChallengeData := &proto.GCGBossChallengeData{
|
||||||
|
UnlockLevelIdList: challenge.UnlockLevelIdList,
|
||||||
|
Id: challenge.Id,
|
||||||
|
}
|
||||||
|
gcgLevelChallengeNotify.UnlockBossChallengeList = append(gcgLevelChallengeNotify.UnlockBossChallengeList, gcgBossChallengeData)
|
||||||
|
}
|
||||||
|
// 等级挑战信息
|
||||||
|
for _, challenge := range player.GCGInfo.LevelChallengeMap {
|
||||||
|
gcgLevelData := &proto.GCGLevelData{
|
||||||
|
FinishedChallengeIdList: challenge.FinishedChallengeIdList,
|
||||||
|
LevelId: challenge.LevelId,
|
||||||
|
}
|
||||||
|
gcgLevelChallengeNotify.LevelList = append(gcgLevelChallengeNotify.LevelList, gcgLevelData)
|
||||||
|
}
|
||||||
|
return gcgLevelChallengeNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGDSBanCardNotify GCG禁止的卡牌通知
|
||||||
|
func (g *GameManager) PacketGCGDSBanCardNotify(player *model.Player) *proto.GCGDSBanCardNotify {
|
||||||
|
gcgDSBanCardNotify := &proto.GCGDSBanCardNotify{
|
||||||
|
CardList: player.GCGInfo.BanCardList,
|
||||||
|
}
|
||||||
|
return gcgDSBanCardNotify
|
||||||
|
}
|
||||||
|
|
||||||
|
// PacketGCGDSDataNotify GCG数据通知
|
||||||
|
func (g *GameManager) PacketGCGDSDataNotify(player *model.Player) *proto.GCGDSDataNotify {
|
||||||
|
gcgDSDataNotify := &proto.GCGDSDataNotify{
|
||||||
|
CurDeckId: player.GCGInfo.CurDeckId,
|
||||||
|
DeckList: make([]*proto.GCGDSDeckData, 0, len(player.GCGInfo.DeckList)),
|
||||||
|
UnlockCardBackIdList: player.GCGInfo.UnlockCardBackIdList,
|
||||||
|
CardList: make([]*proto.GCGDSCardData, 0, len(player.GCGInfo.CardList)),
|
||||||
|
UnlockFieldIdList: player.GCGInfo.UnlockFieldIdList,
|
||||||
|
UnlockDeckIdList: player.GCGInfo.UnlockDeckIdList,
|
||||||
|
}
|
||||||
|
// 卡组列表
|
||||||
|
for i, deck := range player.GCGInfo.DeckList {
|
||||||
|
gcgDSDeckData := &proto.GCGDSDeckData{
|
||||||
|
CreateTime: uint32(deck.CreateTime),
|
||||||
|
FieldId: deck.FieldId,
|
||||||
|
CardBackId: deck.CardBackId,
|
||||||
|
CardList: deck.CardList,
|
||||||
|
CharacterCardList: deck.CharacterCardList,
|
||||||
|
Id: uint32(i),
|
||||||
|
Name: deck.Name,
|
||||||
|
IsValid: true, // TODO 校验卡组是否有效
|
||||||
|
}
|
||||||
|
gcgDSDataNotify.DeckList = append(gcgDSDataNotify.DeckList, gcgDSDeckData)
|
||||||
|
}
|
||||||
|
// 卡牌列表
|
||||||
|
for _, card := range player.GCGInfo.CardList {
|
||||||
|
gcgDSCardData := &proto.GCGDSCardData{
|
||||||
|
Num: card.Num,
|
||||||
|
FaceType: card.FaceType,
|
||||||
|
CardId: card.CardId,
|
||||||
|
ProficiencyRewardTakenIdxList: card.ProficiencyRewardTakenIdxList,
|
||||||
|
UnlockFaceTypeList: card.UnlockFaceTypeList,
|
||||||
|
Proficiency: card.Proficiency,
|
||||||
|
}
|
||||||
|
gcgDSDataNotify.CardList = append(gcgDSDataNotify.CardList, gcgDSCardData)
|
||||||
|
}
|
||||||
|
return gcgDSDataNotify
|
||||||
|
}
|
||||||
@@ -131,6 +131,7 @@ func (g *GameManager) LoginNotify(userId uint32, player *model.Player, clientSeq
|
|||||||
g.SendMsg(cmd.PlayerStoreNotify, userId, clientSeq, g.PacketPlayerStoreNotify(player))
|
g.SendMsg(cmd.PlayerStoreNotify, userId, clientSeq, g.PacketPlayerStoreNotify(player))
|
||||||
g.SendMsg(cmd.AvatarDataNotify, userId, clientSeq, g.PacketAvatarDataNotify(player))
|
g.SendMsg(cmd.AvatarDataNotify, userId, clientSeq, g.PacketAvatarDataNotify(player))
|
||||||
g.SendMsg(cmd.OpenStateUpdateNotify, userId, clientSeq, g.PacketOpenStateUpdateNotify())
|
g.SendMsg(cmd.OpenStateUpdateNotify, userId, clientSeq, g.PacketOpenStateUpdateNotify())
|
||||||
|
g.GCGLogin(player) // 发送GCG登录相关的通知包
|
||||||
playerLoginRsp := &proto.PlayerLoginRsp{
|
playerLoginRsp := &proto.PlayerLoginRsp{
|
||||||
IsUseAbilityHash: true,
|
IsUseAbilityHash: true,
|
||||||
AbilityHashCode: -228935105,
|
AbilityHashCode: -228935105,
|
||||||
@@ -385,6 +386,7 @@ func (g *GameManager) CreatePlayer(userId uint32, nickName string, mainCharAvata
|
|||||||
player.GameObjectGuidMap = make(map[uint64]model.GameObject)
|
player.GameObjectGuidMap = make(map[uint64]model.GameObject)
|
||||||
player.DropInfo = model.NewDropInfo()
|
player.DropInfo = model.NewDropInfo()
|
||||||
player.ChatMsgMap = make(map[uint32][]*model.ChatMsg)
|
player.ChatMsgMap = make(map[uint32][]*model.ChatMsg)
|
||||||
|
player.GCGInfo = model.NewGCGInfo()
|
||||||
|
|
||||||
// 添加选定的主角
|
// 添加选定的主角
|
||||||
player.AddAvatar(mainCharAvatarId)
|
player.AddAvatar(mainCharAvatarId)
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func (g *GameManager) SceneTransToPointReq(player *model.Player, payloadMsg pb.M
|
|||||||
Y: transPos.Y,
|
Y: transPos.Y,
|
||||||
Z: transPos.Z,
|
Z: transPos.Z,
|
||||||
}
|
}
|
||||||
g.TeleportPlayer(player, uint32(constant.EnterReasonConst.TransPoint), sceneId, pos)
|
g.TeleportPlayer(player, constant.EnterReasonConst.TransPoint, sceneId, pos, 0)
|
||||||
|
|
||||||
sceneTransToPointRsp := &proto.SceneTransToPointRsp{
|
sceneTransToPointRsp := &proto.SceneTransToPointRsp{
|
||||||
PointId: req.PointId,
|
PointId: req.PointId,
|
||||||
@@ -59,13 +59,13 @@ func (g *GameManager) MarkMapReq(player *model.Player, payloadMsg pb.Message) {
|
|||||||
Y: float64(posYInt),
|
Y: float64(posYInt),
|
||||||
Z: float64(req.Mark.Pos.Z),
|
Z: float64(req.Mark.Pos.Z),
|
||||||
}
|
}
|
||||||
g.TeleportPlayer(player, uint32(constant.EnterReasonConst.Gm), req.Mark.SceneId, pos)
|
g.TeleportPlayer(player, constant.EnterReasonConst.Gm, req.Mark.SceneId, pos, 0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TeleportPlayer 传送玩家至地图上的某个位置
|
// TeleportPlayer 传送玩家至地图上的某个位置
|
||||||
func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint32, sceneId uint32, pos *model.Vector) {
|
func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint16, sceneId uint32, pos *model.Vector, dungeonId uint32) {
|
||||||
// 传送玩家
|
// 传送玩家
|
||||||
newSceneId := sceneId
|
newSceneId := sceneId
|
||||||
oldSceneId := player.SceneId
|
oldSceneId := player.SceneId
|
||||||
@@ -97,14 +97,20 @@ func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint32, s
|
|||||||
player.SceneLoadState = model.SceneNone
|
player.SceneLoadState = model.SceneNone
|
||||||
|
|
||||||
var enterType proto.EnterType
|
var enterType proto.EnterType
|
||||||
if jumpScene {
|
switch enterReason {
|
||||||
logger.Debug("player jump scene, scene: %v, pos: %v", player.SceneId, player.Pos)
|
case constant.EnterReasonConst.DungeonEnter:
|
||||||
enterType = proto.EnterType_ENTER_TYPE_JUMP
|
logger.Debug("player dungeon scene, scene: %v, pos: %v", player.SceneId, player.Pos)
|
||||||
} else {
|
enterType = proto.EnterType_ENTER_TYPE_DUNGEON
|
||||||
logger.Debug("player goto scene, scene: %v, pos: %v", player.SceneId, player.Pos)
|
default:
|
||||||
enterType = proto.EnterType_ENTER_TYPE_GOTO
|
if jumpScene {
|
||||||
|
logger.Debug("player jump scene, scene: %v, pos: %v", player.SceneId, player.Pos)
|
||||||
|
enterType = proto.EnterType_ENTER_TYPE_JUMP
|
||||||
|
} else {
|
||||||
|
logger.Debug("player goto scene, scene: %v, pos: %v", player.SceneId, player.Pos)
|
||||||
|
enterType = proto.EnterType_ENTER_TYPE_GOTO
|
||||||
|
}
|
||||||
}
|
}
|
||||||
playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyTp(player, enterType, enterReason, oldSceneId, oldPos)
|
playerEnterSceneNotify := g.PacketPlayerEnterSceneNotifyTp(player, enterType, uint32(enterReason), oldSceneId, oldPos, dungeonId)
|
||||||
g.SendMsg(cmd.PlayerEnterSceneNotify, player.PlayerID, player.ClientSeq, playerEnterSceneNotify)
|
g.SendMsg(cmd.PlayerEnterSceneNotify, player.PlayerID, player.ClientSeq, playerEnterSceneNotify)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -327,6 +327,7 @@ func (g *GameManager) HostEnterMpWorld(hostPlayer *model.Player, otherUid uint32
|
|||||||
uint32(constant.EnterReasonConst.HostFromSingleToMp),
|
uint32(constant.EnterReasonConst.HostFromSingleToMp),
|
||||||
hostPlayer.SceneId,
|
hostPlayer.SceneId,
|
||||||
hostPlayer.Pos,
|
hostPlayer.Pos,
|
||||||
|
0,
|
||||||
)
|
)
|
||||||
g.SendMsg(cmd.PlayerEnterSceneNotify, hostPlayer.PlayerID, hostPlayer.ClientSeq, hostPlayerEnterSceneNotify)
|
g.SendMsg(cmd.PlayerEnterSceneNotify, hostPlayer.PlayerID, hostPlayer.ClientSeq, hostPlayerEnterSceneNotify)
|
||||||
|
|
||||||
|
|||||||
@@ -212,6 +212,8 @@ func (g *GameManager) SceneInitFinishReq(player *model.Player, payloadMsg pb.Mes
|
|||||||
}
|
}
|
||||||
g.SendMsg(cmd.SyncScenePlayTeamEntityNotify, player.PlayerID, player.ClientSeq, syncScenePlayTeamEntityNotify)
|
g.SendMsg(cmd.SyncScenePlayTeamEntityNotify, player.PlayerID, player.ClientSeq, syncScenePlayTeamEntityNotify)
|
||||||
|
|
||||||
|
g.GCGTavernInit(player) // GCG酒馆信息通知
|
||||||
|
|
||||||
SceneInitFinishRsp := &proto.SceneInitFinishRsp{
|
SceneInitFinishRsp := &proto.SceneInitFinishRsp{
|
||||||
EnterSceneToken: player.EnterSceneToken,
|
EnterSceneToken: player.EnterSceneToken,
|
||||||
}
|
}
|
||||||
@@ -346,8 +348,9 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyTp(
|
|||||||
enterReason uint32,
|
enterReason uint32,
|
||||||
prevSceneId uint32,
|
prevSceneId uint32,
|
||||||
prevPos *model.Vector,
|
prevPos *model.Vector,
|
||||||
|
dungeonId uint32,
|
||||||
) *proto.PlayerEnterSceneNotify {
|
) *proto.PlayerEnterSceneNotify {
|
||||||
return g.PacketPlayerEnterSceneNotifyMp(player, player, enterType, enterReason, prevSceneId, prevPos)
|
return g.PacketPlayerEnterSceneNotifyMp(player, player, enterType, enterReason, prevSceneId, prevPos, dungeonId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
|
func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
|
||||||
@@ -357,6 +360,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
|
|||||||
enterReason uint32,
|
enterReason uint32,
|
||||||
prevSceneId uint32,
|
prevSceneId uint32,
|
||||||
prevPos *model.Vector,
|
prevPos *model.Vector,
|
||||||
|
dungeonId uint32,
|
||||||
) *proto.PlayerEnterSceneNotify {
|
) *proto.PlayerEnterSceneNotify {
|
||||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||||
scene := world.GetSceneById(player.SceneId)
|
scene := world.GetSceneById(player.SceneId)
|
||||||
@@ -373,12 +377,15 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
|
|||||||
WorldLevel: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL],
|
WorldLevel: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL],
|
||||||
EnterReason: enterReason,
|
EnterReason: enterReason,
|
||||||
WorldType: 1,
|
WorldType: 1,
|
||||||
|
DungeonId: dungeonId,
|
||||||
}
|
}
|
||||||
playerEnterSceneNotify.SceneTransaction = strconv.Itoa(int(player.SceneId)) + "-" +
|
playerEnterSceneNotify.SceneTransaction = strconv.Itoa(int(player.SceneId)) + "-" +
|
||||||
strconv.Itoa(int(targetPlayer.PlayerID)) + "-" +
|
strconv.Itoa(int(targetPlayer.PlayerID)) + "-" +
|
||||||
strconv.Itoa(int(time.Now().Unix())) + "-" +
|
strconv.Itoa(int(time.Now().Unix())) + "-" +
|
||||||
"296359"
|
"296359"
|
||||||
playerEnterSceneNotify.SceneTagIdList = []uint32{102, 111, 112, 116, 118, 126, 135, 140, 142, 149, 1091, 1094, 1095, 1099, 1101, 1103, 1105, 1110, 1120, 1122, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1138, 1140, 1143, 1146, 1165, 1168}
|
if player.SceneId == 3 {
|
||||||
|
playerEnterSceneNotify.SceneTagIdList = []uint32{102, 111, 112, 116, 118, 126, 135, 140, 142, 149, 1091, 1094, 1095, 1099, 1101, 1103, 1105, 1110, 1120, 1122, 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1138, 1140, 1143, 1146, 1165, 1168}
|
||||||
|
}
|
||||||
return playerEnterSceneNotify
|
return playerEnterSceneNotify
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -468,6 +475,9 @@ func (g *GameManager) AddSceneEntityNotify(player *model.Player, visionType prot
|
|||||||
case uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_MONSTER):
|
case uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_MONSTER):
|
||||||
sceneEntityInfoMonster := g.PacketSceneEntityInfoMonster(scene, entity.id)
|
sceneEntityInfoMonster := g.PacketSceneEntityInfoMonster(scene, entity.id)
|
||||||
entityList = append(entityList, sceneEntityInfoMonster)
|
entityList = append(entityList, sceneEntityInfoMonster)
|
||||||
|
case uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_NPC):
|
||||||
|
sceneEntityInfoNpc := g.PacketSceneEntityInfoNpc(scene, entity.id)
|
||||||
|
entityList = append(entityList, sceneEntityInfoNpc)
|
||||||
case uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_GADGET):
|
case uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_GADGET):
|
||||||
sceneEntityInfoGadget := g.PacketSceneEntityInfoGadget(scene, entity.id)
|
sceneEntityInfoGadget := g.PacketSceneEntityInfoGadget(scene, entity.id)
|
||||||
entityList = append(entityList, sceneEntityInfoGadget)
|
entityList = append(entityList, sceneEntityInfoGadget)
|
||||||
@@ -580,7 +590,7 @@ func (g *GameManager) PacketSceneEntityInfoAvatar(scene *Scene, player *model.Pl
|
|||||||
Val: int64(entity.level),
|
Val: int64(entity.level),
|
||||||
}}},
|
}}},
|
||||||
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||||
LifeState: 1,
|
LifeState: uint32(entity.lifeState),
|
||||||
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||||
Entity: &proto.SceneEntityInfo_Avatar{
|
Entity: &proto.SceneEntityInfo_Avatar{
|
||||||
Avatar: g.PacketSceneAvatarInfo(scene, player, avatarId),
|
Avatar: g.PacketSceneAvatarInfo(scene, player, avatarId),
|
||||||
@@ -637,7 +647,7 @@ func (g *GameManager) PacketSceneEntityInfoMonster(scene *Scene, entityId uint32
|
|||||||
Val: int64(entity.level),
|
Val: int64(entity.level),
|
||||||
}}},
|
}}},
|
||||||
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||||
LifeState: 1,
|
LifeState: uint32(entity.lifeState),
|
||||||
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||||
Entity: &proto.SceneEntityInfo_Monster{
|
Entity: &proto.SceneEntityInfo_Monster{
|
||||||
Monster: g.PacketSceneMonsterInfo(),
|
Monster: g.PacketSceneMonsterInfo(),
|
||||||
@@ -656,6 +666,54 @@ func (g *GameManager) PacketSceneEntityInfoMonster(scene *Scene, entityId uint32
|
|||||||
return sceneEntityInfo
|
return sceneEntityInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GameManager) PacketSceneEntityInfoNpc(scene *Scene, entityId uint32) *proto.SceneEntityInfo {
|
||||||
|
entity := scene.GetEntity(entityId)
|
||||||
|
if entity == nil {
|
||||||
|
return new(proto.SceneEntityInfo)
|
||||||
|
}
|
||||||
|
pos := &proto.Vector{
|
||||||
|
X: float32(entity.pos.X),
|
||||||
|
Y: float32(entity.pos.Y),
|
||||||
|
Z: float32(entity.pos.Z),
|
||||||
|
}
|
||||||
|
sceneEntityInfo := &proto.SceneEntityInfo{
|
||||||
|
EntityType: proto.ProtEntityType_PROT_ENTITY_TYPE_NPC,
|
||||||
|
EntityId: entity.id,
|
||||||
|
MotionInfo: &proto.MotionInfo{
|
||||||
|
Pos: pos,
|
||||||
|
Rot: &proto.Vector{
|
||||||
|
X: float32(entity.rot.X),
|
||||||
|
Y: float32(entity.rot.Y),
|
||||||
|
Z: float32(entity.rot.Z),
|
||||||
|
},
|
||||||
|
Speed: &proto.Vector{},
|
||||||
|
State: proto.MotionState(entity.moveState),
|
||||||
|
},
|
||||||
|
PropList: []*proto.PropPair{{Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL), PropValue: &proto.PropValue{
|
||||||
|
Type: uint32(constant.PlayerPropertyConst.PROP_LEVEL),
|
||||||
|
Value: &proto.PropValue_Ival{Ival: int64(entity.level)},
|
||||||
|
Val: int64(entity.level),
|
||||||
|
}}},
|
||||||
|
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||||
|
LifeState: uint32(entity.lifeState),
|
||||||
|
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||||
|
Entity: &proto.SceneEntityInfo_Npc{
|
||||||
|
Npc: g.PacketSceneNpcInfo(entity.npcEntity),
|
||||||
|
},
|
||||||
|
EntityClientData: new(proto.EntityClientData),
|
||||||
|
EntityAuthorityInfo: &proto.EntityAuthorityInfo{
|
||||||
|
AbilityInfo: new(proto.AbilitySyncStateInfo),
|
||||||
|
RendererChangedInfo: new(proto.EntityRendererChangedInfo),
|
||||||
|
AiInfo: &proto.SceneEntityAiInfo{
|
||||||
|
IsAiOpen: true,
|
||||||
|
BornPos: pos,
|
||||||
|
},
|
||||||
|
BornPos: pos,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return sceneEntityInfo
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GameManager) PacketSceneEntityInfoGadget(scene *Scene, entityId uint32) *proto.SceneEntityInfo {
|
func (g *GameManager) PacketSceneEntityInfoGadget(scene *Scene, entityId uint32) *proto.SceneEntityInfo {
|
||||||
entity := scene.GetEntity(entityId)
|
entity := scene.GetEntity(entityId)
|
||||||
if entity == nil {
|
if entity == nil {
|
||||||
@@ -685,7 +743,7 @@ func (g *GameManager) PacketSceneEntityInfoGadget(scene *Scene, entityId uint32)
|
|||||||
Val: int64(1),
|
Val: int64(1),
|
||||||
}}},
|
}}},
|
||||||
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||||
LifeState: 1,
|
LifeState: uint32(entity.lifeState),
|
||||||
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||||
EntityClientData: new(proto.EntityClientData),
|
EntityClientData: new(proto.EntityClientData),
|
||||||
EntityAuthorityInfo: &proto.EntityAuthorityInfo{
|
EntityAuthorityInfo: &proto.EntityAuthorityInfo{
|
||||||
@@ -767,6 +825,16 @@ func (g *GameManager) PacketSceneMonsterInfo() *proto.SceneMonsterInfo {
|
|||||||
return sceneMonsterInfo
|
return sceneMonsterInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GameManager) PacketSceneNpcInfo(entity *NpcEntity) *proto.SceneNpcInfo {
|
||||||
|
sceneNpcInfo := &proto.SceneNpcInfo{
|
||||||
|
NpcId: entity.NpcId,
|
||||||
|
RoomId: entity.RoomId,
|
||||||
|
ParentQuestId: entity.ParentQuestId,
|
||||||
|
BlockId: entity.BlockId,
|
||||||
|
}
|
||||||
|
return sceneNpcInfo
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GameManager) PacketSceneGadgetInfoNormal(gadgetId uint32) *proto.SceneGadgetInfo {
|
func (g *GameManager) PacketSceneGadgetInfoNormal(gadgetId uint32) *proto.SceneGadgetInfo {
|
||||||
sceneGadgetInfo := &proto.SceneGadgetInfo{
|
sceneGadgetInfo := &proto.SceneGadgetInfo{
|
||||||
GadgetId: gadgetId,
|
GadgetId: gadgetId,
|
||||||
|
|||||||
@@ -482,7 +482,7 @@ func (g *GameManager) DrownBackHandler(player *model.Player) {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
// 传送玩家至安全位置
|
// 传送玩家至安全位置
|
||||||
g.TeleportPlayer(player, uint32(constant.EnterReasonConst.Revival), player.SceneId, pos)
|
g.TeleportPlayer(player, constant.EnterReasonConst.Revival, player.SceneId, pos, 0)
|
||||||
}
|
}
|
||||||
// 防止重置后又被修改
|
// 防止重置后又被修改
|
||||||
if player.StaminaInfo.DrownBackDelay != 0 {
|
if player.StaminaInfo.DrownBackDelay != 0 {
|
||||||
|
|||||||
@@ -55,8 +55,7 @@ func (g *GameManager) CreateVehicleReq(player *model.Player, payloadMsg pb.Messa
|
|||||||
g.CommonRetError(cmd.VehicleInteractRsp, player, &proto.VehicleInteractRsp{})
|
g.CommonRetError(cmd.VehicleInteractRsp, player, &proto.VehicleInteractRsp{})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
GAME_MANAGER.AddSceneEntityNotifyBroadcast(player, scene, proto.VisionType_VISION_TYPE_BORN, []*proto.SceneEntityInfo{GAME_MANAGER.PacketSceneEntityInfoGadget(scene, entityId)}, false)
|
GAME_MANAGER.AddSceneEntityNotify(player, proto.VisionType_VISION_TYPE_BORN, []uint32{entityId}, true, false)
|
||||||
|
|
||||||
// 记录创建的载具信息
|
// 记录创建的载具信息
|
||||||
player.VehicleInfo.LastCreateEntityIdMap[req.VehicleId] = entityId
|
player.VehicleInfo.LastCreateEntityIdMap[req.VehicleId] = entityId
|
||||||
player.VehicleInfo.LastCreateTime = time.Now().UnixMilli()
|
player.VehicleInfo.LastCreateTime = time.Now().UnixMilli()
|
||||||
|
|||||||
@@ -527,6 +527,13 @@ type AvatarEntity struct {
|
|||||||
type MonsterEntity struct {
|
type MonsterEntity struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type NpcEntity struct {
|
||||||
|
NpcId uint32
|
||||||
|
RoomId uint32
|
||||||
|
ParentQuestId uint32
|
||||||
|
BlockId uint32
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
GADGET_TYPE_NORMAL = iota
|
GADGET_TYPE_NORMAL = iota
|
||||||
GADGET_TYPE_GATHER
|
GADGET_TYPE_GATHER
|
||||||
@@ -579,6 +586,7 @@ type Entity struct {
|
|||||||
level uint8
|
level uint8
|
||||||
avatarEntity *AvatarEntity
|
avatarEntity *AvatarEntity
|
||||||
monsterEntity *MonsterEntity
|
monsterEntity *MonsterEntity
|
||||||
|
npcEntity *NpcEntity
|
||||||
gadgetEntity *GadgetEntity
|
gadgetEntity *GadgetEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -748,6 +756,7 @@ func (s *Scene) CreateEntityMonster(pos *model.Vector, level uint8, fightProp ma
|
|||||||
fightProp: fightProp,
|
fightProp: fightProp,
|
||||||
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_MONSTER),
|
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_MONSTER),
|
||||||
level: level,
|
level: level,
|
||||||
|
monsterEntity: &MonsterEntity{},
|
||||||
}
|
}
|
||||||
s.entityMap[entity.id] = entity
|
s.entityMap[entity.id] = entity
|
||||||
s.world.aoiManager.AddEntityIdToGridByPos(entity.id, float32(entity.pos.X), float32(entity.pos.Y), float32(entity.pos.Z))
|
s.world.aoiManager.AddEntityIdToGridByPos(entity.id, float32(entity.pos.X), float32(entity.pos.Y), float32(entity.pos.Z))
|
||||||
@@ -763,6 +772,36 @@ func (s *Scene) CreateEntityMonster(pos *model.Vector, level uint8, fightProp ma
|
|||||||
return entity.id
|
return entity.id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Scene) CreateEntityNpc(pos, rot *model.Vector, npcId, roomId, parentQuestId, blockId uint32) uint32 {
|
||||||
|
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.NPC)
|
||||||
|
entity := &Entity{
|
||||||
|
id: entityId,
|
||||||
|
scene: s,
|
||||||
|
lifeState: constant.LifeStateConst.LIFE_ALIVE,
|
||||||
|
pos: pos,
|
||||||
|
rot: rot,
|
||||||
|
moveState: uint16(proto.MotionState_MOTION_STATE_NONE),
|
||||||
|
lastMoveSceneTimeMs: 0,
|
||||||
|
lastMoveReliableSeq: 0,
|
||||||
|
fightProp: map[uint32]float32{
|
||||||
|
uint32(constant.FightPropertyConst.FIGHT_PROP_CUR_HP): math.MaxFloat32,
|
||||||
|
uint32(constant.FightPropertyConst.FIGHT_PROP_MAX_HP): math.MaxFloat32,
|
||||||
|
uint32(constant.FightPropertyConst.FIGHT_PROP_BASE_HP): float32(1),
|
||||||
|
},
|
||||||
|
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_NPC),
|
||||||
|
level: 0,
|
||||||
|
npcEntity: &NpcEntity{
|
||||||
|
NpcId: npcId,
|
||||||
|
RoomId: roomId,
|
||||||
|
ParentQuestId: parentQuestId,
|
||||||
|
BlockId: blockId,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
s.entityMap[entity.id] = entity
|
||||||
|
s.world.aoiManager.AddEntityIdToGridByPos(entity.id, float32(entity.pos.X), float32(entity.pos.Y), float32(entity.pos.Z))
|
||||||
|
return entity.id
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Scene) CreateEntityGadgetNormal(pos *model.Vector, gadgetId uint32) uint32 {
|
func (s *Scene) CreateEntityGadgetNormal(pos *model.Vector, gadgetId uint32) uint32 {
|
||||||
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.GADGET)
|
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.GADGET)
|
||||||
entity := &Entity{
|
entity := &Entity{
|
||||||
|
|||||||
97
gs/model/gcg.go
Normal file
97
gs/model/gcg.go
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
// GCGCard 卡牌
|
||||||
|
type GCGCard struct {
|
||||||
|
CardId uint32 `bson:"cardId"` // 卡牌Id
|
||||||
|
Num uint32 `bson:"num"` // 数量
|
||||||
|
FaceType uint32 `bson:"faceType"` // 卡面类型
|
||||||
|
UnlockFaceTypeList []uint32 `bson:"unlockFaceTypeList"` // 解锁的卡面类型
|
||||||
|
Proficiency uint32 `bson:"proficiency"` // 熟练程度等级
|
||||||
|
ProficiencyRewardTakenIdxList []uint32 `bson:"faceType"` // 熟练程度奖励列表
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGDeck 卡组
|
||||||
|
type GCGDeck struct {
|
||||||
|
Name string `bson:"name"` // 卡组名
|
||||||
|
CharacterCardList []uint32 `bson:"characterCardList"` // 角色牌列表
|
||||||
|
CardList []uint32 `bson:"cardList"` // 卡牌列表
|
||||||
|
FieldId uint32 `bson:"fieldId"` // 牌盒样式Id
|
||||||
|
CardBackId uint32 `bson:"cardBackId"` // 牌背样式Id
|
||||||
|
CreateTime int64 `bson:"createTime"` // 卡组创建时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGTavernChallenge 酒馆挑战信息
|
||||||
|
type GCGTavernChallenge struct {
|
||||||
|
CharacterId uint32 `bson:"characterId"` // 角色Id
|
||||||
|
UnlockLevelIdList []uint32 `bson:"unlockLevelIdList"` // 解锁的等级Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGBossChallenge Boss挑战信息
|
||||||
|
type GCGBossChallenge struct {
|
||||||
|
Id uint32 `bson:"Id"` // BossId
|
||||||
|
UnlockLevelIdList []uint32 `bson:"unlockLevelIdList"` // 解锁的等级Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGLevelChallenge 等级挑战信息
|
||||||
|
type GCGLevelChallenge struct {
|
||||||
|
LevelId uint32 `bson:"levelId"` // 等级Id
|
||||||
|
FinishedChallengeIdList []uint32 `bson:"finishedChallengeIdList"` // 完成的挑战Id列表
|
||||||
|
}
|
||||||
|
|
||||||
|
// GCGInfo 七圣召唤信息
|
||||||
|
type GCGInfo struct {
|
||||||
|
// 基础信息
|
||||||
|
Level uint32 `bson:"level"` // 等级
|
||||||
|
Exp uint32 `bson:"exp"` // 经验
|
||||||
|
// 卡牌
|
||||||
|
CardList map[uint32]*GCGCard `bson:"cardList"` // 拥有的卡牌 uint32 -> CardId(卡牌Id)
|
||||||
|
CurDeckId uint32 `bson:"CurDeckId"` // 现行的卡组Id
|
||||||
|
DeckList []*GCGDeck `bson:"deckList"` // 卡组列表
|
||||||
|
UnlockDeckIdList []uint32 `bson:"unlockDeckIdList"` // 解锁的卡组
|
||||||
|
UnlockCardBackIdList []uint32 `bson:"unlockCardBackIdList"` // 解锁的卡背
|
||||||
|
UnlockFieldIdList []uint32 `bson:"unlockFieldIdList"` // 解锁的牌盒
|
||||||
|
// 挑战
|
||||||
|
TavernChallengeMap map[uint32]*GCGTavernChallenge `bson:"tavernChallengeMap"` // 酒馆挑战 uint32 -> CharacterId(角色Id)
|
||||||
|
LevelChallengeMap map[uint32]*GCGLevelChallenge `bson:"levelChallengeMap"` // 等级挑战 uint32 -> LevelId(等级Id)
|
||||||
|
UnlockBossChallengeMap map[uint32]*GCGBossChallenge `bson:"unlockBossChallengeMap"` // 解锁的Boss挑战 uint32 -> Id
|
||||||
|
UnlockWorldChallengeList []uint32 `bson:"unlockWorldChallengeList"` // 解锁的世界挑战
|
||||||
|
// 其他
|
||||||
|
BanCardList []uint32 `bson:"banCardList"` // 被禁止的卡牌列表
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGCGInfo() *GCGInfo {
|
||||||
|
gcgInfo := &GCGInfo{
|
||||||
|
Level: 0,
|
||||||
|
Exp: 0,
|
||||||
|
CardList: make(map[uint32]*GCGCard, 0),
|
||||||
|
CurDeckId: 0,
|
||||||
|
DeckList: make([]*GCGDeck, 0, 0),
|
||||||
|
UnlockDeckIdList: make([]uint32, 0, 0),
|
||||||
|
UnlockCardBackIdList: make([]uint32, 0, 0),
|
||||||
|
UnlockFieldIdList: make([]uint32, 0, 0),
|
||||||
|
TavernChallengeMap: make(map[uint32]*GCGTavernChallenge, 0),
|
||||||
|
UnlockBossChallengeMap: make(map[uint32]*GCGBossChallenge, 0),
|
||||||
|
UnlockWorldChallengeList: make([]uint32, 0, 0),
|
||||||
|
BanCardList: make([]uint32, 0, 0),
|
||||||
|
}
|
||||||
|
gcgInfo.UnlockDeckIdList = append(gcgInfo.UnlockDeckIdList, 1, 2)
|
||||||
|
gcgInfo.UnlockCardBackIdList = append(gcgInfo.UnlockCardBackIdList, 0)
|
||||||
|
gcgInfo.UnlockFieldIdList = append(gcgInfo.UnlockFieldIdList, 0)
|
||||||
|
gcgInfo.TavernChallengeMap[8] = &GCGTavernChallenge{
|
||||||
|
CharacterId: 8,
|
||||||
|
UnlockLevelIdList: make([]uint32, 0, 0),
|
||||||
|
}
|
||||||
|
gcgInfo.TavernChallengeMap[13] = &GCGTavernChallenge{
|
||||||
|
CharacterId: 13,
|
||||||
|
UnlockLevelIdList: make([]uint32, 0, 0),
|
||||||
|
}
|
||||||
|
gcgInfo.TavernChallengeMap[17] = &GCGTavernChallenge{
|
||||||
|
CharacterId: 17,
|
||||||
|
UnlockLevelIdList: make([]uint32, 0, 0),
|
||||||
|
}
|
||||||
|
gcgInfo.TavernChallengeMap[20] = &GCGTavernChallenge{
|
||||||
|
CharacterId: 20,
|
||||||
|
UnlockLevelIdList: make([]uint32, 0, 0),
|
||||||
|
}
|
||||||
|
return gcgInfo
|
||||||
|
}
|
||||||
@@ -53,6 +53,7 @@ type Player struct {
|
|||||||
DropInfo *DropInfo `bson:"dropInfo"` // 掉落信息
|
DropInfo *DropInfo `bson:"dropInfo"` // 掉落信息
|
||||||
MainCharAvatarId uint32 `bson:"mainCharAvatarId"` // 主角id
|
MainCharAvatarId uint32 `bson:"mainCharAvatarId"` // 主角id
|
||||||
ChatMsgMap map[uint32][]*ChatMsg `bson:"chatMsgMap"` // 聊天信息
|
ChatMsgMap map[uint32][]*ChatMsg `bson:"chatMsgMap"` // 聊天信息
|
||||||
|
GCGInfo *GCGInfo `bson:"gcgInfo"` // 七圣召唤信息
|
||||||
IsGM uint8 `bson:"isGM"` // 管理员权限等级
|
IsGM uint8 `bson:"isGM"` // 管理员权限等级
|
||||||
// 在线数据 请随意 记得加忽略字段的tag
|
// 在线数据 请随意 记得加忽略字段的tag
|
||||||
EnterSceneToken uint32 `bson:"-" msgpack:"-"` // 玩家的世界进入令牌
|
EnterSceneToken uint32 `bson:"-" msgpack:"-"` // 玩家的世界进入令牌
|
||||||
@@ -73,6 +74,7 @@ type Player struct {
|
|||||||
AbilityInvokeHandler *InvokeHandler[proto.AbilityInvokeEntry] `bson:"-" msgpack:"-"` // ability转发器
|
AbilityInvokeHandler *InvokeHandler[proto.AbilityInvokeEntry] `bson:"-" msgpack:"-"` // ability转发器
|
||||||
GateAppId string `bson:"-" msgpack:"-"` // 网关服务器的appid
|
GateAppId string `bson:"-" msgpack:"-"` // 网关服务器的appid
|
||||||
FightAppId string `bson:"-" msgpack:"-"` // 战斗服务器的appid
|
FightAppId string `bson:"-" msgpack:"-"` // 战斗服务器的appid
|
||||||
|
GCGCurGameGuid uint32 `bson:"-" msgpack:"-"` // GCG玩家所在的游戏guid
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Player) GetNextGameObjectGuid() uint64 {
|
func (p *Player) GetNextGameObjectGuid() uint64 {
|
||||||
@@ -86,6 +88,7 @@ func (p *Player) InitAll() {
|
|||||||
p.StaminaInfo = new(StaminaInfo)
|
p.StaminaInfo = new(StaminaInfo)
|
||||||
p.VehicleInfo = new(VehicleInfo)
|
p.VehicleInfo = new(VehicleInfo)
|
||||||
p.VehicleInfo.LastCreateEntityIdMap = make(map[uint32]uint32)
|
p.VehicleInfo.LastCreateEntityIdMap = make(map[uint32]uint32)
|
||||||
|
p.GCGInfo = NewGCGInfo()
|
||||||
p.InitAllAvatar()
|
p.InitAllAvatar()
|
||||||
p.InitAllWeapon()
|
p.InitAllWeapon()
|
||||||
p.InitAllItem()
|
p.InitAllItem()
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -248,6 +248,29 @@ func (c *CmdProtoMap) registerAllMessage() {
|
|||||||
c.registerMessage(VehicleInteractRsp, &proto.VehicleInteractRsp{}) // 载具交互响应
|
c.registerMessage(VehicleInteractRsp, &proto.VehicleInteractRsp{}) // 载具交互响应
|
||||||
c.registerMessage(VehicleStaminaNotify, &proto.VehicleStaminaNotify{}) // 载具耐力消耗通知
|
c.registerMessage(VehicleStaminaNotify, &proto.VehicleStaminaNotify{}) // 载具耐力消耗通知
|
||||||
|
|
||||||
|
// 七圣召唤
|
||||||
|
c.registerMessage(GCGBasicDataNotify, &proto.GCGBasicDataNotify{}) // GCG基本数据通知
|
||||||
|
c.registerMessage(GCGLevelChallengeNotify, &proto.GCGLevelChallengeNotify{}) // GCG等级挑战通知
|
||||||
|
c.registerMessage(GCGDSBanCardNotify, &proto.GCGDSBanCardNotify{}) // GCG禁止的卡牌通知
|
||||||
|
c.registerMessage(GCGDSDataNotify, &proto.GCGDSDataNotify{}) // GCG数据通知 (解锁的内容)
|
||||||
|
c.registerMessage(GCGTCTavernChallengeDataNotify, &proto.GCGTCTavernChallengeDataNotify{}) // GCG酒馆挑战数据通知
|
||||||
|
c.registerMessage(GCGTCTavernInfoNotify, &proto.GCGTCTavernInfoNotify{}) // GCG酒馆信息通知
|
||||||
|
c.registerMessage(GCGTavernNpcInfoNotify, &proto.GCGTavernNpcInfoNotify{}) // GCG酒馆NPC信息通知
|
||||||
|
c.registerMessage(GCGGameBriefDataNotify, &proto.GCGGameBriefDataNotify{}) // GCG游戏简要数据通知
|
||||||
|
c.registerMessage(GCGAskDuelReq, &proto.GCGAskDuelReq{}) // GCG决斗请求
|
||||||
|
c.registerMessage(GCGAskDuelRsp, &proto.GCGAskDuelRsp{}) // GCG决斗响应
|
||||||
|
c.registerMessage(GCGInitFinishReq, &proto.GCGInitFinishReq{}) // GCG初始化完成请求
|
||||||
|
c.registerMessage(GCGInitFinishRsp, &proto.GCGInitFinishRsp{}) // GCG初始化完成响应
|
||||||
|
c.registerMessage(Unk3300_DGBNCDEIIFC, &proto.Unk3300_DGBNCDEIIFC{}) // GCG
|
||||||
|
c.registerMessage(DungeonWayPointNotify, &proto.DungeonWayPointNotify{}) // GCG
|
||||||
|
c.registerMessage(DungeonDataNotify, &proto.DungeonDataNotify{}) // GCG
|
||||||
|
|
||||||
|
//// TODO 客户端开始GCG游戏
|
||||||
|
//c.registerMessage(GCGStartChallengeByCheckRewardReq, &proto.GCGStartChallengeByCheckRewardReq{}) // GCG开始挑战来自检测奖励请求
|
||||||
|
//c.registerMessage(GCGStartChallengeByCheckRewardRsp, &proto.GCGStartChallengeByCheckRewardRsp{}) // GCG开始挑战来自检测奖励响应
|
||||||
|
//c.registerMessage(GCGStartChallengeReq, &proto.GCGStartChallengeReq{}) // GCG开始挑战请求
|
||||||
|
//c.registerMessage(GCGStartChallengeRsp, &proto.GCGStartChallengeRsp{}) // GCG开始挑战响应
|
||||||
|
|
||||||
// 乱七八糟
|
// 乱七八糟
|
||||||
c.registerMessage(MarkMapReq, &proto.MarkMapReq{}) // 标记地图请求
|
c.registerMessage(MarkMapReq, &proto.MarkMapReq{}) // 标记地图请求
|
||||||
c.registerMessage(TowerAllDataReq, &proto.TowerAllDataReq{}) // 深渊数据请求
|
c.registerMessage(TowerAllDataReq, &proto.TowerAllDataReq{}) // 深渊数据请求
|
||||||
|
|||||||
48
protocol/proto/GCGActionType.proto
Normal file
48
protocol/proto/GCGActionType.proto
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
enum GCGActionType {
|
||||||
|
GCG_ACTION_TYPE_NONE = 0;
|
||||||
|
GCG_ACTION_TYPE_SPECIAL_PHASE = 1;
|
||||||
|
GCG_ACTION_TYPE_NEXT_PHASE = 2;
|
||||||
|
GCG_ACTION_TYPE_DRAW = 3;
|
||||||
|
GCG_ACTION_TYPE_REDRAW = 4;
|
||||||
|
GCG_ACTION_TYPE_SELECT_ONSTAGE = 5;
|
||||||
|
GCG_ACTION_TYPE_ROLL = 6;
|
||||||
|
GCG_ACTION_TYPE_REROLL = 7;
|
||||||
|
GCG_ACTION_TYPE_ATTACK = 8;
|
||||||
|
GCG_ACTION_TYPE_PLAY_CARD = 9;
|
||||||
|
GCG_ACTION_TYPE_PASS = 10;
|
||||||
|
GCG_ACTION_TYPE_REBOOT = 11;
|
||||||
|
GCG_ACTION_TYPE_GAME_OVER = 12;
|
||||||
|
GCG_ACTION_TYPE_TRIGGER = 13;
|
||||||
|
GCG_ACTION_TYPE_PHASE_EXIT = 14;
|
||||||
|
GCG_ACTION_TYPE_CUSTOM = 15;
|
||||||
|
GCG_ACTION_TYPE_NOTIFY_COST = 16;
|
||||||
|
GCG_ACTION_TYPE_AFTER_OPERATION = 17;
|
||||||
|
GCG_ACTION_TYPE_USE_SKILL = 18;
|
||||||
|
GCG_ACTION_TYPE_NOTIFY_SKILL_PREVIEW = 19;
|
||||||
|
GCG_ACTION_TYPE_PREVIEW_ATTACK = 20;
|
||||||
|
GCG_ACTION_TYPE_PREVIEW_AFTER_ATTACK = 21;
|
||||||
|
GCG_ACTION_TYPE_SEND_MESSAGE = 22;
|
||||||
|
GCG_ACTION_TYPE_WAITING_CHARACTER = 23;
|
||||||
|
GCG_ACTION_TYPE_TRIGGER_SKILL = 24;
|
||||||
|
GCG_ACTION_TYPE_BEFORE_NEXT_OPERATION = 25;
|
||||||
|
}
|
||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7820
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGApplyInviteBattleNotify {
|
message GCGApplyInviteBattleNotify {
|
||||||
bool is_agree = 14;
|
// enum CmdId {
|
||||||
int32 retcode = 6;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7984;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
bool is_agree = 4;
|
||||||
|
int32 retcode = 14;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7730
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGApplyInviteBattleReq {
|
message GCGApplyInviteBattleReq {
|
||||||
bool is_agree = 9;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7032;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
bool is_agree = 12;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7304
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGApplyInviteBattleRsp {
|
message GCGApplyInviteBattleRsp {
|
||||||
int32 retcode = 5;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7754;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 punish_end_time = 6;
|
||||||
|
int32 retcode = 8;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,15 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7237
|
message GCGAskDuelReq {
|
||||||
// EnetChannelId: 0
|
// enum CmdId {
|
||||||
// EnetIsReliable: true
|
// option allow_alias = true;
|
||||||
// IsAllowClient: true
|
// NONE = 0;
|
||||||
message GCGAskDuelReq {}
|
// CMD_ID = 7034;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,13 +18,17 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "GCGDuel.proto";
|
import "GCGDuel.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7869
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGAskDuelRsp {
|
message GCGAskDuelRsp {
|
||||||
int32 retcode = 3;
|
// enum CmdId {
|
||||||
GCGDuel duel = 13;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7564;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
GCGDuel duel = 9;
|
||||||
|
int32 retcode = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,11 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
import "Uint32Pair.proto";
|
||||||
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGAttackCostInfo {
|
message GCGAttackCostInfo {
|
||||||
uint32 skill_id = 8;
|
repeated Uint32Pair cost_map = 1;
|
||||||
map<uint32, uint32> cost_map = 3;
|
uint32 skill_id = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
32
protocol/proto/GCGBackToDuelReq.proto
Normal file
32
protocol/proto/GCGBackToDuelReq.proto
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGBackToDuelReq {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7015;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
bool is_back = 10;
|
||||||
|
}
|
||||||
31
protocol/proto/GCGBackToDuelRsp.proto
Normal file
31
protocol/proto/GCGBackToDuelRsp.proto
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGBackToDuelRsp {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7039;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 14;
|
||||||
|
}
|
||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7319
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGBasicDataNotify {
|
message GCGBasicDataNotify {
|
||||||
uint32 level = 9;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7739;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 level = 6;
|
||||||
uint32 exp = 4;
|
uint32 exp = 4;
|
||||||
repeated uint32 level_reward_taken_list = 12;
|
repeated uint32 level_reward_taken_list = 14;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,9 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGBossChallengeData {
|
message GCGBossChallengeData {
|
||||||
uint32 id = 9;
|
repeated uint32 unlock_level_id_list = 3;
|
||||||
repeated uint32 unlock_level_id_list = 14;
|
uint32 id = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,12 +18,16 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "GCGBossChallengeData.proto";
|
import "GCGBossChallengeData.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7073
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGBossChallengeUpdateNotify {
|
message GCGBossChallengeUpdateNotify {
|
||||||
GCGBossChallengeData boss_challenge = 11;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7852;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
GCGBossChallengeData boss_challenge = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,17 +16,19 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "GCGSkillLimitsInfo.proto";
|
||||||
import "GCGToken.proto";
|
import "GCGToken.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGCard {
|
message GCGCard {
|
||||||
uint32 guid = 15;
|
repeated uint32 tag_list = 7;
|
||||||
repeated GCGToken token_list = 2;
|
uint32 guid = 11;
|
||||||
bool is_show = 14;
|
bool is_show = 15;
|
||||||
uint32 controller_id = 7;
|
repeated GCGToken token_list = 8;
|
||||||
|
uint32 face_type = 2;
|
||||||
|
repeated uint32 skill_id_list = 13;
|
||||||
|
repeated GCGSkillLimitsInfo skill_limits_list = 3;
|
||||||
uint32 id = 6;
|
uint32 id = 6;
|
||||||
repeated uint32 tag_list = 3;
|
uint32 controller_id = 5;
|
||||||
uint32 face_type = 5;
|
|
||||||
}
|
}
|
||||||
|
|||||||
25
protocol/proto/GCGCardSkillLimitsInfo.proto
Normal file
25
protocol/proto/GCGCardSkillLimitsInfo.proto
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "GCGSkillLimitsInfo.proto";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGCardSkillLimitsInfo {
|
||||||
|
repeated GCGSkillLimitsInfo skill_limits_list = 1;
|
||||||
|
}
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGChallengeData {
|
message GCGChallengeData {
|
||||||
|
|||||||
@@ -18,14 +18,17 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "GCGDuelChallenge.proto";
|
import "GCGDuelChallenge.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7268
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGChallengeUpdateNotify {
|
message GCGChallengeUpdateNotify {
|
||||||
uint32 server_seq = 12;
|
// enum CmdId {
|
||||||
GCGDuelChallenge challenge = 13;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7270;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 server_seq = 15;
|
||||||
|
GCGDuelChallenge challenge = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
27
protocol/proto/GCGChangeOnstageInfo.proto
Normal file
27
protocol/proto/GCGChangeOnstageInfo.proto
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
import "GCGSkillPreviewInfo.proto";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGChangeOnstageInfo {
|
||||||
|
bool is_quick = 11;
|
||||||
|
uint32 card_guid = 6;
|
||||||
|
GCGSkillPreviewInfo change_onstage_preview_info = 5;
|
||||||
|
}
|
||||||
@@ -16,10 +16,11 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
enum GCGClientPerformType {
|
enum GCGClientPerformType {
|
||||||
GCG_CLIENT_PERFORM_TYPE_INVALID = 0;
|
GCG_CLIENT_PERFORM_TYPE_INVALID = 0;
|
||||||
GCG_CLIENT_PERFORM_TYPE_CARD_EXCHANGE = 1;
|
GCG_CLIENT_PERFORM_TYPE_CARD_EXCHANGE = 1;
|
||||||
|
GCG_CLIENT_PERFORM_TYPE_FIRST_HAND = 2;
|
||||||
|
GCG_CLIENT_PERFORM_TYPE_REROLL = 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,15 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7506
|
message GCGClientSettleReq {
|
||||||
// EnetChannelId: 0
|
// enum CmdId {
|
||||||
// EnetIsReliable: true
|
// option allow_alias = true;
|
||||||
// IsAllowClient: true
|
// NONE = 0;
|
||||||
message GCGClientSettleReq {}
|
// CMD_ID = 7035;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7105
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGClientSettleRsp {
|
message GCGClientSettleRsp {
|
||||||
uint32 close_time = 4;
|
// enum CmdId {
|
||||||
int32 retcode = 1;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7532;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 close_time = 5;
|
||||||
|
int32 retcode = 9;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,11 +18,12 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "ProfilePicture.proto";
|
import "ProfilePicture.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGControllerShowInfo {
|
message GCGControllerShowInfo {
|
||||||
ProfilePicture profile_picture = 11;
|
string psn_id = 12;
|
||||||
string nick_name = 14;
|
string nick_name = 10;
|
||||||
uint32 controller_id = 9;
|
string online_id = 15;
|
||||||
|
ProfilePicture profile_picture = 3;
|
||||||
|
uint32 controller_id = 11;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,13 +20,12 @@ import "GCGAttackCostInfo.proto";
|
|||||||
import "GCGPlayCardCostInfo.proto";
|
import "GCGPlayCardCostInfo.proto";
|
||||||
import "GCGSelectOnStageCostInfo.proto";
|
import "GCGSelectOnStageCostInfo.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGCostReviseInfo {
|
message GCGCostReviseInfo {
|
||||||
bool is_can_attack = 4;
|
repeated uint32 can_use_hand_card_id_list = 15;
|
||||||
repeated uint32 can_use_hand_card_id_list = 11;
|
repeated GCGSelectOnStageCostInfo select_on_stage_cost_list = 13;
|
||||||
repeated GCGPlayCardCostInfo play_card_cost_list = 5;
|
repeated GCGPlayCardCostInfo play_card_cost_list = 5;
|
||||||
repeated GCGSelectOnStageCostInfo select_on_stage_cost_list = 10;
|
repeated GCGAttackCostInfo attack_cost_list = 12;
|
||||||
repeated GCGAttackCostInfo attack_cost_list = 2;
|
bool is_can_attack = 14;
|
||||||
}
|
}
|
||||||
|
|||||||
31
protocol/proto/GCGDSBanCardNotify.proto
Normal file
31
protocol/proto/GCGDSBanCardNotify.proto
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGDSBanCardNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7135;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
repeated uint32 card_list = 10;
|
||||||
|
}
|
||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7265
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSCardBackUnlockNotify {
|
message GCGDSCardBackUnlockNotify {
|
||||||
uint32 card_back_id = 6;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7078;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 card_back_id = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGDSCardData {
|
message GCGDSCardData {
|
||||||
uint32 card_id = 14;
|
uint32 num = 11;
|
||||||
repeated uint32 unlock_face_type_list = 9;
|
uint32 face_type = 5;
|
||||||
uint32 num = 12;
|
uint32 card_id = 4;
|
||||||
uint32 proficiency = 8;
|
repeated uint32 proficiency_reward_taken_idx_list = 14;
|
||||||
uint32 face_type = 6;
|
repeated uint32 unlock_face_type_list = 6;
|
||||||
|
uint32 proficiency = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7049
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSCardFaceUnlockNotify {
|
message GCGDSCardFaceUnlockNotify {
|
||||||
uint32 card_id = 13;
|
// enum CmdId {
|
||||||
uint32 face_type = 1;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7767;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 face_type = 13;
|
||||||
|
uint32 card_id = 8;
|
||||||
}
|
}
|
||||||
|
|||||||
32
protocol/proto/GCGDSCardFaceUpdateNotify.proto
Normal file
32
protocol/proto/GCGDSCardFaceUpdateNotify.proto
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGDSCardFaceUpdateNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7066;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 card_id = 9;
|
||||||
|
uint32 face_type = 1;
|
||||||
|
}
|
||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7358
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSCardNumChangeNotify {
|
message GCGDSCardNumChangeNotify {
|
||||||
uint32 card_id = 4;
|
// enum CmdId {
|
||||||
uint32 num = 10;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7244;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 num = 1;
|
||||||
|
uint32 card_id = 15;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7680
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSCardProficiencyNotify {
|
message GCGDSCardProficiencyNotify {
|
||||||
uint32 proficiency = 2;
|
// enum CmdId {
|
||||||
uint32 card_id = 12;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7969;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 proficiency = 10;
|
||||||
|
uint32 card_id = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7292
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSChangeCardBackReq {
|
message GCGDSChangeCardBackReq {
|
||||||
uint32 deck_id = 10;
|
// enum CmdId {
|
||||||
uint32 card_back_id = 12;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7680;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 card_back_id = 15;
|
||||||
|
uint32 deck_id = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7044
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSChangeCardBackRsp {
|
message GCGDSChangeCardBackRsp {
|
||||||
int32 retcode = 15;
|
// enum CmdId {
|
||||||
uint32 card_back_id = 6;
|
// option allow_alias = true;
|
||||||
uint32 deck_id = 5;
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7011;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 13;
|
||||||
|
uint32 card_back_id = 5;
|
||||||
|
uint32 deck_id = 9;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7169
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSChangeCardFaceReq {
|
message GCGDSChangeCardFaceReq {
|
||||||
uint32 face_type = 6;
|
// enum CmdId {
|
||||||
uint32 card_id = 3;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7010;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 card_id = 9;
|
||||||
|
uint32 face_type = 14;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7331
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSChangeCardFaceRsp {
|
message GCGDSChangeCardFaceRsp {
|
||||||
uint32 face_type = 8;
|
// enum CmdId {
|
||||||
uint32 card_id = 4;
|
// option allow_alias = true;
|
||||||
int32 retcode = 9;
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7549;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 face_type = 9;
|
||||||
|
int32 retcode = 5;
|
||||||
|
uint32 card_id = 8;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7131
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSChangeCurDeckReq {
|
message GCGDSChangeCurDeckReq {
|
||||||
uint32 deck_id = 3;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7257;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 deck_id = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7301
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSChangeCurDeckRsp {
|
message GCGDSChangeCurDeckRsp {
|
||||||
int32 retcode = 8;
|
// enum CmdId {
|
||||||
uint32 deck_id = 14;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7908;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 6;
|
||||||
|
uint32 deck_id = 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,19 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7432
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSChangeDeckNameReq {
|
message GCGDSChangeDeckNameReq {
|
||||||
uint32 deck_id = 13;
|
// enum CmdId {
|
||||||
string name = 7;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7463;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
bool Unk3300_OIPMFIIBPHB = 11;
|
||||||
|
uint32 deck_id = 2;
|
||||||
|
string name = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,19 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7916
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSChangeDeckNameRsp {
|
message GCGDSChangeDeckNameRsp {
|
||||||
uint32 deck_id = 13;
|
// enum CmdId {
|
||||||
int32 retcode = 14;
|
// option allow_alias = true;
|
||||||
string name = 1;
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7617;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
bool Unk3300_OIPMFIIBPHB = 5;
|
||||||
|
int32 retcode = 15;
|
||||||
|
uint32 deck_id = 10;
|
||||||
|
string name = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7541
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSChangeFieldReq {
|
message GCGDSChangeFieldReq {
|
||||||
uint32 field_id = 6;
|
// enum CmdId {
|
||||||
uint32 deck_id = 11;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7788;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 field_id = 3;
|
||||||
|
uint32 deck_id = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,14 +16,18 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7444
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSChangeFieldRsp {
|
message GCGDSChangeFieldRsp {
|
||||||
int32 retcode = 1;
|
// enum CmdId {
|
||||||
uint32 field_id = 3;
|
// option allow_alias = true;
|
||||||
uint32 deck_id = 2;
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7036;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 14;
|
||||||
|
uint32 deck_id = 6;
|
||||||
|
uint32 field_id = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7796
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSCurDeckChangeNotify {
|
message GCGDSCurDeckChangeNotify {
|
||||||
uint32 deck_id = 6;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7769;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 deck_id = 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,17 +19,21 @@ syntax = "proto3";
|
|||||||
import "GCGDSCardData.proto";
|
import "GCGDSCardData.proto";
|
||||||
import "GCGDSDeckData.proto";
|
import "GCGDSDeckData.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7122
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSDataNotify {
|
message GCGDSDataNotify {
|
||||||
repeated GCGDSDeckData deck_list = 4;
|
// enum CmdId {
|
||||||
repeated uint32 unlock_card_back_id_list = 5;
|
// option allow_alias = true;
|
||||||
repeated uint32 unlock_field_id_list = 6;
|
// NONE = 0;
|
||||||
uint32 cur_deck_id = 10;
|
// CMD_ID = 7850;
|
||||||
repeated GCGDSCardData card_list = 3;
|
// ENET_CHANNEL_ID = 0;
|
||||||
repeated uint32 unlock_deck_id_list = 1;
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 cur_deck_id = 8;
|
||||||
|
repeated GCGDSDeckData deck_list = 3;
|
||||||
|
repeated uint32 unlock_card_back_id_list = 10;
|
||||||
|
repeated GCGDSCardData card_list = 9;
|
||||||
|
repeated uint32 unlock_field_id_list = 5;
|
||||||
|
repeated uint32 unlock_deck_id_list = 6;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,15 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGDSDeckData {
|
message GCGDSDeckData {
|
||||||
|
fixed32 create_time = 5;
|
||||||
|
uint32 field_id = 13;
|
||||||
|
uint32 card_back_id = 9;
|
||||||
repeated uint32 card_list = 1;
|
repeated uint32 card_list = 1;
|
||||||
uint32 card_back_id = 15;
|
repeated uint32 character_card_list = 7;
|
||||||
repeated uint32 character_card_list = 10;
|
uint32 id = 12;
|
||||||
string name = 5;
|
string name = 10;
|
||||||
uint32 id = 3;
|
bool is_valid = 15;
|
||||||
fixed32 create_time = 13;
|
|
||||||
bool is_valid = 4;
|
|
||||||
uint32 field_id = 7;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,16 +16,20 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7104
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSDeckSaveReq {
|
message GCGDSDeckSaveReq {
|
||||||
uint32 deck_id = 1;
|
// enum CmdId {
|
||||||
repeated uint32 card_list = 4;
|
// option allow_alias = true;
|
||||||
repeated uint32 character_card_list = 9;
|
// NONE = 0;
|
||||||
string name = 14;
|
// CMD_ID = 7713;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 deck_id = 4;
|
||||||
|
repeated uint32 card_list = 11;
|
||||||
|
repeated uint32 character_card_list = 6;
|
||||||
|
string name = 5;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,15 +16,19 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7269
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSDeckSaveRsp {
|
message GCGDSDeckSaveRsp {
|
||||||
fixed32 create_time = 14;
|
// enum CmdId {
|
||||||
uint32 deck_id = 11;
|
// option allow_alias = true;
|
||||||
int32 retcode = 8;
|
// NONE = 0;
|
||||||
bool is_valid = 4;
|
// CMD_ID = 7459;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 9;
|
||||||
|
bool is_valid = 5;
|
||||||
|
uint32 deck_id = 15;
|
||||||
|
fixed32 create_time = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7732
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSDeckUnlockNotify {
|
message GCGDSDeckUnlockNotify {
|
||||||
uint32 deck_id = 15;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7427;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 deck_id = 14;
|
||||||
}
|
}
|
||||||
|
|||||||
32
protocol/proto/GCGDSDeckUpdateNotify.proto
Normal file
32
protocol/proto/GCGDSDeckUpdateNotify.proto
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGDSDeckUpdateNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7751;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
bool is_valid = 2;
|
||||||
|
uint32 deck_id = 15;
|
||||||
|
}
|
||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7988
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGDSDeleteDeckReq {
|
message GCGDSDeleteDeckReq {
|
||||||
uint32 deck_id = 15;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7821;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 deck_id = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7524
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSDeleteDeckRsp {
|
message GCGDSDeleteDeckRsp {
|
||||||
int32 retcode = 14;
|
// enum CmdId {
|
||||||
uint32 deck_id = 7;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7067;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 deck_id = 14;
|
||||||
|
int32 retcode = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7333
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGDSFieldUnlockNotify {
|
message GCGDSFieldUnlockNotify {
|
||||||
uint32 field_id = 1;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7860;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 field_id = 12;
|
||||||
}
|
}
|
||||||
|
|||||||
33
protocol/proto/GCGDSTakeCardProficiencyRewardReq.proto
Normal file
33
protocol/proto/GCGDSTakeCardProficiencyRewardReq.proto
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGDSTakeCardProficiencyRewardReq {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7001;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 reward_index = 15;
|
||||||
|
uint32 card_id = 3;
|
||||||
|
}
|
||||||
33
protocol/proto/GCGDSTakeCardProficiencyRewardRsp.proto
Normal file
33
protocol/proto/GCGDSTakeCardProficiencyRewardRsp.proto
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGDSTakeCardProficiencyRewardRsp {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7718;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 card_id = 6;
|
||||||
|
int32 retcode = 1;
|
||||||
|
uint32 reward_index = 15;
|
||||||
|
}
|
||||||
@@ -16,10 +16,9 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGDamageDetail {
|
message GCGDamageDetail {
|
||||||
uint32 skill_id = 10;
|
uint32 card_guid = 4;
|
||||||
uint32 card_guid = 7;
|
uint32 skill_id = 12;
|
||||||
}
|
}
|
||||||
|
|||||||
31
protocol/proto/GCGDebugReplayNotify.proto
Normal file
31
protocol/proto/GCGDebugReplayNotify.proto
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGDebugReplayNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7071;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
string json_str = 15;
|
||||||
|
}
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
enum GCGDiceSideType {
|
enum GCGDiceSideType {
|
||||||
|
|||||||
@@ -21,27 +21,33 @@ import "GCGControllerShowInfo.proto";
|
|||||||
import "GCGCostReviseInfo.proto";
|
import "GCGCostReviseInfo.proto";
|
||||||
import "GCGDuelChallenge.proto";
|
import "GCGDuelChallenge.proto";
|
||||||
import "GCGGameBusinessType.proto";
|
import "GCGGameBusinessType.proto";
|
||||||
|
import "GCGMessagePack.proto";
|
||||||
import "GCGPVEIntention.proto";
|
import "GCGPVEIntention.proto";
|
||||||
import "GCGPhase.proto";
|
import "GCGPhase.proto";
|
||||||
import "GCGPlayerField.proto";
|
import "GCGPlayerField.proto";
|
||||||
|
import "Unk3300_ADHENCIFKNI.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGDuel {
|
message GCGDuel {
|
||||||
uint32 server_seq = 3;
|
uint32 server_seq = 3;
|
||||||
repeated GCGPlayerField field_list = 7;
|
repeated GCGControllerShowInfo show_info_list = 7;
|
||||||
GCGGameBusinessType business_type = 14;
|
repeated uint32 forbid_finish_challenge_list = 192;
|
||||||
repeated GCGDuelChallenge challenge_list = 5;
|
repeated GCGCard card_list = 1;
|
||||||
uint32 game_id = 11;
|
uint32 Unk3300_BIANMOPDEHO = 9;
|
||||||
uint32 controller_id = 13;
|
GCGCostReviseInfo cost_revise = 8;
|
||||||
uint32 round = 15;
|
uint32 game_id = 4;
|
||||||
uint32 cur_controller_id = 12;
|
repeated GCGPlayerField field_list = 5;
|
||||||
repeated GCGPVEIntention intention_list = 1;
|
repeated Unk3300_ADHENCIFKNI Unk3300_CDCMBOKBLAK = 1987;
|
||||||
GCGCostReviseInfo cost_revise = 10;
|
GCGGameBusinessType business_type = 13;
|
||||||
repeated uint32 card_id_list = 4;
|
repeated GCGPVEIntention intention_list = 2;
|
||||||
repeated GCGCard card_list = 9;
|
repeated GCGDuelChallenge challenge_list = 1617;
|
||||||
repeated GCGControllerShowInfo show_info_list = 6;
|
repeated GCGCard history_card_list = 1872;
|
||||||
uint32 game_type = 2;
|
uint32 round = 11;
|
||||||
GCGPhase phase = 8;
|
uint32 controller_id = 12;
|
||||||
|
repeated GCGMessagePack history_msg_pack_list = 797;
|
||||||
|
uint32 Unk3300_JHDDNKFPINA = 10;
|
||||||
|
repeated uint32 card_id_list = 6;
|
||||||
|
uint32 Unk3300_JBBMBKGOONO = 15;
|
||||||
|
GCGPhase phase = 14;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,10 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGDuelChallenge {
|
message GCGDuelChallenge {
|
||||||
uint32 total_progress = 7;
|
uint32 challenge_id = 12;
|
||||||
uint32 challenge_id = 10;
|
uint32 cur_progress = 2;
|
||||||
uint32 cur_progress = 12;
|
uint32 total_progress = 4;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
import "GCGChallengeData.proto";
|
import "GCGChallengeData.proto";
|
||||||
|
import "PlatformType.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGDuelExtra {
|
message GCGDuelExtra {
|
||||||
@@ -28,4 +28,11 @@ message GCGDuelExtra {
|
|||||||
map<uint32, uint32> card_face_map = 4;
|
map<uint32, uint32> card_face_map = 4;
|
||||||
repeated GCGChallengeData challenge_list = 5;
|
repeated GCGChallengeData challenge_list = 5;
|
||||||
uint32 score = 6;
|
uint32 score = 6;
|
||||||
|
bool is_match_ai = 7;
|
||||||
|
uint32 ai_deck_id = 8;
|
||||||
|
bool is_internal = 9;
|
||||||
|
repeated uint32 forbid_finish_challenge_list = 10;
|
||||||
|
uint32 level = 11;
|
||||||
|
uint32 client_version = 12;
|
||||||
|
PlatformType platform_type = 13;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
enum GCGEndReason {
|
enum GCGEndReason {
|
||||||
@@ -25,4 +24,10 @@ enum GCGEndReason {
|
|||||||
GCG_END_REASON_SURRENDER = 2;
|
GCG_END_REASON_SURRENDER = 2;
|
||||||
GCG_END_REASON_DISCONNECTED = 3;
|
GCG_END_REASON_DISCONNECTED = 3;
|
||||||
GCG_END_REASON_ROUND_LIMIT = 4;
|
GCG_END_REASON_ROUND_LIMIT = 4;
|
||||||
|
GCG_END_REASON_GM = 5;
|
||||||
|
GCG_END_REASON_NO_PLAYER = 6;
|
||||||
|
GCG_END_REASON_GIVE_UP = 7;
|
||||||
|
GCG_END_REASON_INIT_TIMEOUT = 8;
|
||||||
|
GCG_END_REASON_EFFECT = 9;
|
||||||
|
GCG_END_REASON_Unk3300_INAPHKAKKHF = 10;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ syntax = "proto3";
|
|||||||
import "GCGGameBusinessType.proto";
|
import "GCGGameBusinessType.proto";
|
||||||
import "GCGPlayerBriefData.proto";
|
import "GCGPlayerBriefData.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGGameBriefData {
|
message GCGGameBriefData {
|
||||||
uint32 game_id = 14;
|
uint32 Unk3300_NCLDOGNCHGF = 13;
|
||||||
uint32 game_uid = 9;
|
GCGGameBusinessType business_type = 8;
|
||||||
GCGGameBusinessType business_type = 13;
|
uint32 Unk3300_FJJDMIBIBJN = 14;
|
||||||
uint32 verify_code = 5;
|
uint32 platform_type = 6;
|
||||||
repeated GCGPlayerBriefData player_brief_list = 12;
|
uint32 game_id = 12;
|
||||||
|
repeated GCGPlayerBriefData player_brief_list = 5;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,12 +18,17 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "GCGGameBriefData.proto";
|
import "GCGGameBriefData.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7539
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGGameBriefDataNotify {
|
message GCGGameBriefDataNotify {
|
||||||
GCGGameBriefData gcg_brief_data = 10;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7824;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
GCGGameBriefData gcg_brief_data = 3;
|
||||||
|
bool is_new_game = 4;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
enum GCGGameBusinessType {
|
enum GCGGameBusinessType {
|
||||||
@@ -29,4 +28,7 @@ enum GCGGameBusinessType {
|
|||||||
GCG_GAME_BUSINESS_TYPE_WORLD_CHALLENGE = 6;
|
GCG_GAME_BUSINESS_TYPE_WORLD_CHALLENGE = 6;
|
||||||
GCG_GAME_BUSINESS_TYPE_BOSS_CHALLENGE = 7;
|
GCG_GAME_BUSINESS_TYPE_BOSS_CHALLENGE = 7;
|
||||||
GCG_GAME_BUSINESS_TYPE_WEEK_CHALLENGE = 8;
|
GCG_GAME_BUSINESS_TYPE_WEEK_CHALLENGE = 8;
|
||||||
|
GCG_GAME_BUSINESS_TYPE_BREAK_CHALLENGE = 9;
|
||||||
|
GCG_GAME_BUSINESS_TYPE_QUEST = 10;
|
||||||
|
GCG_GAME_BUSINESS_TYPE_GUIDE_GROUP = 11;
|
||||||
}
|
}
|
||||||
|
|||||||
40
protocol/proto/GCGGameCreateFailReasonNotify.proto
Normal file
40
protocol/proto/GCGGameCreateFailReasonNotify.proto
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGGameCreateFailReasonNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7658;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
enum GCGGameCreateReason {
|
||||||
|
GCG_GAME_CREATE_REASON_NONE = 0;
|
||||||
|
GCG_GAME_CREATE_REASON_GAME_MAX = 1;
|
||||||
|
GCG_GAME_CREATE_REASON_CLIENT_VERSION_NOT_LATEST = 2;
|
||||||
|
GCG_GAME_CREATE_REASON_RESOURCE_NOT_COMPLETE = 3;
|
||||||
|
GCG_GAME_CREATE_REASON_TIMEOUT = 4;
|
||||||
|
GCG_GAME_CREATE_REASON_Unk3300_EMCDFGGFFAH = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
GCGGameCreateReason reason = 7;
|
||||||
|
}
|
||||||
29
protocol/proto/GCGGameMaxNotify.proto
Normal file
29
protocol/proto/GCGGameMaxNotify.proto
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGGameMaxNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7226;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
}
|
||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7736
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGGrowthLevelNotify {
|
message GCGGrowthLevelNotify {
|
||||||
uint32 exp = 7;
|
// enum CmdId {
|
||||||
uint32 level = 11;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7343;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 level = 10;
|
||||||
|
uint32 exp = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7477
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGGrowthLevelRewardNotify {
|
message GCGGrowthLevelRewardNotify {
|
||||||
repeated uint32 level_reward_taken_list = 8;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7934;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
repeated uint32 level_reward_taken_list = 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7051
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGGrowthLevelTakeRewardReq {
|
message GCGGrowthLevelTakeRewardReq {
|
||||||
uint32 level = 4;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7486;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 level = 12;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7670
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGGrowthLevelTakeRewardRsp {
|
message GCGGrowthLevelTakeRewardRsp {
|
||||||
uint32 level = 1;
|
// enum CmdId {
|
||||||
int32 retcode = 13;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7602;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 4;
|
||||||
|
uint32 level = 11;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7224
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGHeartBeatNotify {
|
message GCGHeartBeatNotify {
|
||||||
uint32 server_seq = 6;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7576;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 server_seq = 12;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,15 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7684
|
message GCGInitFinishReq {
|
||||||
// EnetChannelId: 0
|
// enum CmdId {
|
||||||
// EnetIsReliable: true
|
// option allow_alias = true;
|
||||||
// IsAllowClient: true
|
// NONE = 0;
|
||||||
message GCGInitFinishReq {}
|
// CMD_ID = 7348;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,12 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7433
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGInitFinishRsp {
|
message GCGInitFinishRsp {
|
||||||
int32 retcode = 2;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7369;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
int32 retcode = 4;
|
||||||
}
|
}
|
||||||
|
|||||||
24
protocol/proto/GCGIntentionChangeType.proto
Normal file
24
protocol/proto/GCGIntentionChangeType.proto
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
enum GCGIntentionChangeType {
|
||||||
|
GCG_INTENTION_CHANGE_TYPE_NONE = 0;
|
||||||
|
GCG_INTENTION_CHANGE_TYPE_RM = 1;
|
||||||
|
}
|
||||||
@@ -16,10 +16,16 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7692
|
message GCGInviteBattleNotify {
|
||||||
// EnetChannelId: 0
|
// enum CmdId {
|
||||||
// EnetIsReliable: true
|
// option allow_alias = true;
|
||||||
message GCGInviteBattleNotify {}
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7448;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 confirm_end_time = 1;
|
||||||
|
}
|
||||||
|
|||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7783
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
// IsAllowClient: true
|
|
||||||
message GCGInviteGuestBattleReq {
|
message GCGInviteGuestBattleReq {
|
||||||
uint32 uid = 11;
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7202;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// IS_ALLOW_CLIENT = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 uid = 8;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,19 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7251
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGInviteGuestBattleRsp {
|
message GCGInviteGuestBattleRsp {
|
||||||
int32 retcode = 3;
|
// enum CmdId {
|
||||||
uint32 uid = 11;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7997;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 uid = 12;
|
||||||
|
int32 retcode = 13;
|
||||||
|
uint32 punish_end_time = 3;
|
||||||
|
uint32 confirm_end_time = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
31
protocol/proto/GCGLevelChallengeDeleteNotify.proto
Normal file
31
protocol/proto/GCGLevelChallengeDeleteNotify.proto
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGLevelChallengeDeleteNotify {
|
||||||
|
// enum CmdId {
|
||||||
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7993;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
repeated uint32 level_id_list = 6;
|
||||||
|
}
|
||||||
@@ -16,13 +16,17 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7629
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGLevelChallengeFinishNotify {
|
message GCGLevelChallengeFinishNotify {
|
||||||
repeated uint32 finished_challenge_id_list = 10;
|
// enum CmdId {
|
||||||
uint32 level_id = 15;
|
// option allow_alias = true;
|
||||||
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7004;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
uint32 level_id = 14;
|
||||||
|
repeated uint32 finished_challenge_id_list = 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,14 +19,18 @@ syntax = "proto3";
|
|||||||
import "GCGBossChallengeData.proto";
|
import "GCGBossChallengeData.proto";
|
||||||
import "GCGLevelData.proto";
|
import "GCGLevelData.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
// CmdId: 7055
|
|
||||||
// EnetChannelId: 0
|
|
||||||
// EnetIsReliable: true
|
|
||||||
message GCGLevelChallengeNotify {
|
message GCGLevelChallengeNotify {
|
||||||
repeated GCGBossChallengeData unlock_boss_challenge_list = 3;
|
// enum CmdId {
|
||||||
repeated uint32 unlock_world_challenge_list = 8;
|
// option allow_alias = true;
|
||||||
repeated GCGLevelData level_list = 10;
|
// NONE = 0;
|
||||||
|
// CMD_ID = 7183;
|
||||||
|
// ENET_CHANNEL_ID = 0;
|
||||||
|
// ENET_IS_RELIABLE = 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
repeated GCGBossChallengeData unlock_boss_challenge_list = 11;
|
||||||
|
repeated uint32 unlock_world_challenge_list = 3;
|
||||||
|
repeated GCGLevelData level_list = 4;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,9 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGLevelData {
|
message GCGLevelData {
|
||||||
repeated uint32 finished_challenge_id_list = 10;
|
repeated uint32 finished_challenge_id_list = 13;
|
||||||
uint32 level_id = 9;
|
uint32 level_id = 7;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
enum GCGLevelType {
|
enum GCGLevelType {
|
||||||
@@ -26,4 +25,7 @@ enum GCGLevelType {
|
|||||||
GCG_LEVEL_TYPE_WORLD = 3;
|
GCG_LEVEL_TYPE_WORLD = 3;
|
||||||
GCG_LEVEL_TYPE_BOSS = 4;
|
GCG_LEVEL_TYPE_BOSS = 4;
|
||||||
GCG_LEVEL_TYPE_CHARACTER = 5;
|
GCG_LEVEL_TYPE_CHARACTER = 5;
|
||||||
|
GCG_LEVEL_TYPE_BREAK = 6;
|
||||||
|
GCG_LEVEL_TYPE_QUEST = 7;
|
||||||
|
GCG_LEVEL_TYPE_GUIDE_GROUP = 8;
|
||||||
}
|
}
|
||||||
|
|||||||
24
protocol/proto/GCGLimitsInfo.proto
Normal file
24
protocol/proto/GCGLimitsInfo.proto
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
// Sorapointa - A server software re-implementation for a certain anime game, and avoid sorapointa.
|
||||||
|
// Copyright (C) 2022 Sorapointa Team
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as
|
||||||
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
|
// License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option go_package = "./;proto";
|
||||||
|
|
||||||
|
message GCGLimitsInfo {
|
||||||
|
uint32 Unk3300_MNCNOLHHGPA = 7;
|
||||||
|
uint32 Unk3300_PHKPKFBDGJF = 13;
|
||||||
|
}
|
||||||
@@ -18,9 +18,8 @@ syntax = "proto3";
|
|||||||
|
|
||||||
import "MatchPlayerInfo.proto";
|
import "MatchPlayerInfo.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGMatchInfo {
|
message GCGMatchInfo {
|
||||||
repeated MatchPlayerInfo player_list = 13;
|
repeated MatchPlayerInfo player_list = 15;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,14 +31,19 @@ import "GCGMsgModifyAdd.proto";
|
|||||||
import "GCGMsgModifyRemove.proto";
|
import "GCGMsgModifyRemove.proto";
|
||||||
import "GCGMsgMoveCard.proto";
|
import "GCGMsgMoveCard.proto";
|
||||||
import "GCGMsgNewCard.proto";
|
import "GCGMsgNewCard.proto";
|
||||||
|
import "GCGMsgNoDamageSkillResult.proto";
|
||||||
import "GCGMsgOpTimer.proto";
|
import "GCGMsgOpTimer.proto";
|
||||||
import "GCGMsgPVEDoOp.proto";
|
import "GCGMsgPVEIntentionChange.proto";
|
||||||
import "GCGMsgPVEGenCardOp.proto";
|
import "GCGMsgPVEIntentionInfo.proto";
|
||||||
import "GCGMsgPass.proto";
|
import "GCGMsgPass.proto";
|
||||||
import "GCGMsgPhaseChange.proto";
|
import "GCGMsgPhaseChange.proto";
|
||||||
|
import "GCGMsgPhaseContinue.proto";
|
||||||
|
import "GCGMsgReactionBegin.proto";
|
||||||
|
import "GCGMsgReactionEnd.proto";
|
||||||
import "GCGMsgRemoveCards.proto";
|
import "GCGMsgRemoveCards.proto";
|
||||||
import "GCGMsgSelectOnStage.proto";
|
import "GCGMsgSelectOnStage.proto";
|
||||||
import "GCGMsgSelectOnStageByEffect.proto";
|
import "GCGMsgSelectOnStageByEffect.proto";
|
||||||
|
import "GCGMsgSkillLimitsChange.proto";
|
||||||
import "GCGMsgSkillResult.proto";
|
import "GCGMsgSkillResult.proto";
|
||||||
import "GCGMsgTokenChange.proto";
|
import "GCGMsgTokenChange.proto";
|
||||||
import "GCGMsgUpdateController.proto";
|
import "GCGMsgUpdateController.proto";
|
||||||
@@ -46,39 +51,43 @@ import "GCGMsgUseSkill.proto";
|
|||||||
import "GCGMsgUseSkillEnd.proto";
|
import "GCGMsgUseSkillEnd.proto";
|
||||||
import "GCGMsgWaitingListChange.proto";
|
import "GCGMsgWaitingListChange.proto";
|
||||||
|
|
||||||
package proto;
|
|
||||||
option go_package = "./;proto";
|
option go_package = "./;proto";
|
||||||
|
|
||||||
message GCGMessage {
|
message GCGMessage {
|
||||||
oneof message {
|
oneof message {
|
||||||
GCGMsgTokenChange token_change = 12;
|
GCGMsgTokenChange token_change = 2;
|
||||||
GCGMsgPhaseChange phase_change = 13;
|
GCGMsgPhaseChange phase_change = 10;
|
||||||
GCGMsgAddCards add_cards = 10;
|
GCGMsgAddCards add_cards = 5;
|
||||||
GCGMsgRemoveCards remove_cards = 14;
|
GCGMsgRemoveCards remove_cards = 12;
|
||||||
GCGMsgSelectOnStage select_on_stage = 6;
|
GCGMsgSelectOnStage select_on_stage = 6;
|
||||||
GCGMsgDiceRoll dice_roll = 9;
|
GCGMsgDiceRoll dice_roll = 14;
|
||||||
GCGMsgDiceReroll dice_reroll = 11;
|
GCGMsgDiceReroll dice_reroll = 15;
|
||||||
GCGMsgPass pass = 5;
|
GCGMsgPass pass = 8;
|
||||||
GCGMsgCharDie char_die = 2;
|
GCGMsgCharDie char_die = 4;
|
||||||
GCGMsgSkillResult skill_result = 1;
|
GCGMsgSkillResult skill_result = 3;
|
||||||
GCGMsgCostDice cost_dice = 7;
|
GCGMsgCostDice cost_dice = 13;
|
||||||
GCGMsgAddDice add_dice = 3;
|
GCGMsgAddDice add_dice = 7;
|
||||||
GCGMsgMoveCard move_card = 15;
|
GCGMsgMoveCard move_card = 11;
|
||||||
GCGMsgUseSkill use_skill = 4;
|
GCGMsgUseSkill use_skill = 1;
|
||||||
GCGMsgNewCard new_card = 1848;
|
GCGMsgNewCard new_card = 296;
|
||||||
GCGMsgUpdateController update_controller = 429;
|
GCGMsgUpdateController update_controller = 1111;
|
||||||
GCGMsgModifyAdd modify_add = 1851;
|
GCGMsgModifyAdd modify_add = 1733;
|
||||||
GCGMsgModifyRemove modify_remove = 471;
|
GCGMsgModifyRemove modify_remove = 2014;
|
||||||
GCGMsgUseSkillEnd use_skill_end = 1411;
|
GCGMsgUseSkillEnd use_skill_end = 1368;
|
||||||
GCGMsgPVEGenCardOp pve_gen_card_op = 1741;
|
GCGMsgDuelDataChange duel_data_change = 1791;
|
||||||
GCGMsgPVEDoOp pve_do_op = 614;
|
GCGMsgClientPerform client_perform = 1677;
|
||||||
GCGMsgDuelDataChange duel_data_change = 1008;
|
GCGMsgGameOver game_over = 632;
|
||||||
GCGMsgClientPerform client_perform = 1035;
|
GCGMsgOpTimer op_timer = 154;
|
||||||
GCGMsgGameOver game_over = 714;
|
GCGMsgWaitingListChange waiting_list_change = 1991;
|
||||||
GCGMsgOpTimer op_timer = 1862;
|
GCGMsgCardUpdate card_update = 1702;
|
||||||
GCGMsgWaitingListChange waiting_list_change = 1678;
|
GCGMsgSelectOnStageByEffect select_on_stage_by_effect = 1737;
|
||||||
GCGMsgCardUpdate card_update = 1879;
|
GCGMsgCostRevise cost_revise = 468;
|
||||||
GCGMsgSelectOnStageByEffect select_on_stage_by_effect = 2042;
|
GCGMsgPhaseContinue phase_continue = 1157;
|
||||||
GCGMsgCostRevise cost_revise = 1350;
|
GCGMsgPVEIntentionInfo pve_intention_info = 850;
|
||||||
|
GCGMsgPVEIntentionChange pve_intention_change = 1268;
|
||||||
|
GCGMsgSkillLimitsChange skill_limits_change = 710;
|
||||||
|
GCGMsgNoDamageSkillResult no_damage_skill_result = 773;
|
||||||
|
GCGMsgReactionBegin reaction_begin = 243;
|
||||||
|
GCGMsgReactionEnd reaction_end = 1172;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user