mirror of
https://github.com/FlourishingWorld/hk4e.git
synced 2026-02-04 14:12:27 +08:00
GCG初步 但会卡进度条 用命令/gcg进入
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"hk4e/gs/model"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"hk4e/gs/model"
|
||||
)
|
||||
|
||||
// HelpCommand 帮助命令
|
||||
@@ -249,3 +248,12 @@ func (c *CommandManager) GiveCommand(cmd *CommandMessage) {
|
||||
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)
|
||||
return
|
||||
}
|
||||
GAME_MANAGER.TeleportPlayer(player, uint32(constant.EnterReasonConst.Gm), sceneId, &model.Vector{
|
||||
GAME_MANAGER.TeleportPlayer(player, constant.EnterReasonConst.Gm, sceneId, &model.Vector{
|
||||
X: posX,
|
||||
Y: posY,
|
||||
Z: posZ,
|
||||
})
|
||||
}, 0)
|
||||
}
|
||||
|
||||
// GMAddUserItem 给予玩家物品
|
||||
|
||||
@@ -71,6 +71,7 @@ func (c *CommandManager) InitRouter() {
|
||||
c.RegisterRouter(CommandPermNormal, c.OpCommand, "op")
|
||||
c.RegisterRouter(CommandPermNormal, c.TeleportCommand, "teleport", "tp")
|
||||
c.RegisterRouter(CommandPermNormal, c.GiveCommand, "give", "item")
|
||||
c.RegisterRouter(CommandPermNormal, c.GcgCommand, "gcg")
|
||||
}
|
||||
// GM命令
|
||||
{
|
||||
|
||||
@@ -26,6 +26,7 @@ var USER_MANAGER *UserManager = nil
|
||||
var WORLD_MANAGER *WorldManager = nil
|
||||
var TICK_MANAGER *TickManager = nil
|
||||
var COMMAND_MANAGER *CommandManager = nil
|
||||
var GCG_MANAGER *GCGManager = nil
|
||||
var MESSAGE_QUEUE *mq.MessageQueue
|
||||
|
||||
var SELF *model.Player
|
||||
@@ -53,6 +54,7 @@ func NewGameManager(dao *dao.Dao, messageQueue *mq.MessageQueue, gsId uint32) (r
|
||||
WORLD_MANAGER = NewWorldManager(r.snowflake)
|
||||
TICK_MANAGER = NewTickManager()
|
||||
COMMAND_MANAGER = NewCommandManager()
|
||||
GCG_MANAGER = NewGCGManager()
|
||||
r.run()
|
||||
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.SceneEntityDrownReq, GAME_MANAGER.SceneEntityDrownReq)
|
||||
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) {
|
||||
|
||||
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.AvatarDataNotify, userId, clientSeq, g.PacketAvatarDataNotify(player))
|
||||
g.SendMsg(cmd.OpenStateUpdateNotify, userId, clientSeq, g.PacketOpenStateUpdateNotify())
|
||||
g.GCGLogin(player) // 发送GCG登录相关的通知包
|
||||
playerLoginRsp := &proto.PlayerLoginRsp{
|
||||
IsUseAbilityHash: true,
|
||||
AbilityHashCode: -228935105,
|
||||
@@ -385,6 +386,7 @@ func (g *GameManager) CreatePlayer(userId uint32, nickName string, mainCharAvata
|
||||
player.GameObjectGuidMap = make(map[uint64]model.GameObject)
|
||||
player.DropInfo = model.NewDropInfo()
|
||||
player.ChatMsgMap = make(map[uint32][]*model.ChatMsg)
|
||||
player.GCGInfo = model.NewGCGInfo()
|
||||
|
||||
// 添加选定的主角
|
||||
player.AddAvatar(mainCharAvatarId)
|
||||
|
||||
@@ -32,7 +32,7 @@ func (g *GameManager) SceneTransToPointReq(player *model.Player, payloadMsg pb.M
|
||||
Y: transPos.Y,
|
||||
Z: transPos.Z,
|
||||
}
|
||||
g.TeleportPlayer(player, uint32(constant.EnterReasonConst.TransPoint), sceneId, pos)
|
||||
g.TeleportPlayer(player, constant.EnterReasonConst.TransPoint, sceneId, pos, 0)
|
||||
|
||||
sceneTransToPointRsp := &proto.SceneTransToPointRsp{
|
||||
PointId: req.PointId,
|
||||
@@ -59,13 +59,13 @@ func (g *GameManager) MarkMapReq(player *model.Player, payloadMsg pb.Message) {
|
||||
Y: float64(posYInt),
|
||||
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 传送玩家至地图上的某个位置
|
||||
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
|
||||
oldSceneId := player.SceneId
|
||||
@@ -97,14 +97,20 @@ func (g *GameManager) TeleportPlayer(player *model.Player, enterReason uint32, s
|
||||
player.SceneLoadState = model.SceneNone
|
||||
|
||||
var enterType proto.EnterType
|
||||
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
|
||||
switch enterReason {
|
||||
case constant.EnterReasonConst.DungeonEnter:
|
||||
logger.Debug("player dungeon scene, scene: %v, pos: %v", player.SceneId, player.Pos)
|
||||
enterType = proto.EnterType_ENTER_TYPE_DUNGEON
|
||||
default:
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
@@ -327,6 +327,7 @@ func (g *GameManager) HostEnterMpWorld(hostPlayer *model.Player, otherUid uint32
|
||||
uint32(constant.EnterReasonConst.HostFromSingleToMp),
|
||||
hostPlayer.SceneId,
|
||||
hostPlayer.Pos,
|
||||
0,
|
||||
)
|
||||
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.GCGTavernInit(player) // GCG酒馆信息通知
|
||||
|
||||
SceneInitFinishRsp := &proto.SceneInitFinishRsp{
|
||||
EnterSceneToken: player.EnterSceneToken,
|
||||
}
|
||||
@@ -346,8 +348,9 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyTp(
|
||||
enterReason uint32,
|
||||
prevSceneId uint32,
|
||||
prevPos *model.Vector,
|
||||
dungeonId uint32,
|
||||
) *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(
|
||||
@@ -357,6 +360,7 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
|
||||
enterReason uint32,
|
||||
prevSceneId uint32,
|
||||
prevPos *model.Vector,
|
||||
dungeonId uint32,
|
||||
) *proto.PlayerEnterSceneNotify {
|
||||
world := WORLD_MANAGER.GetWorldByID(player.WorldId)
|
||||
scene := world.GetSceneById(player.SceneId)
|
||||
@@ -373,12 +377,15 @@ func (g *GameManager) PacketPlayerEnterSceneNotifyMp(
|
||||
WorldLevel: targetPlayer.PropertiesMap[constant.PlayerPropertyConst.PROP_PLAYER_WORLD_LEVEL],
|
||||
EnterReason: enterReason,
|
||||
WorldType: 1,
|
||||
DungeonId: dungeonId,
|
||||
}
|
||||
playerEnterSceneNotify.SceneTransaction = strconv.Itoa(int(player.SceneId)) + "-" +
|
||||
strconv.Itoa(int(targetPlayer.PlayerID)) + "-" +
|
||||
strconv.Itoa(int(time.Now().Unix())) + "-" +
|
||||
"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
|
||||
}
|
||||
|
||||
@@ -468,6 +475,9 @@ func (g *GameManager) AddSceneEntityNotify(player *model.Player, visionType prot
|
||||
case uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_MONSTER):
|
||||
sceneEntityInfoMonster := g.PacketSceneEntityInfoMonster(scene, entity.id)
|
||||
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):
|
||||
sceneEntityInfoGadget := g.PacketSceneEntityInfoGadget(scene, entity.id)
|
||||
entityList = append(entityList, sceneEntityInfoGadget)
|
||||
@@ -580,7 +590,7 @@ func (g *GameManager) PacketSceneEntityInfoAvatar(scene *Scene, player *model.Pl
|
||||
Val: int64(entity.level),
|
||||
}}},
|
||||
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||
LifeState: 1,
|
||||
LifeState: uint32(entity.lifeState),
|
||||
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||
Entity: &proto.SceneEntityInfo_Avatar{
|
||||
Avatar: g.PacketSceneAvatarInfo(scene, player, avatarId),
|
||||
@@ -637,7 +647,7 @@ func (g *GameManager) PacketSceneEntityInfoMonster(scene *Scene, entityId uint32
|
||||
Val: int64(entity.level),
|
||||
}}},
|
||||
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||
LifeState: 1,
|
||||
LifeState: uint32(entity.lifeState),
|
||||
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||
Entity: &proto.SceneEntityInfo_Monster{
|
||||
Monster: g.PacketSceneMonsterInfo(),
|
||||
@@ -656,6 +666,54 @@ func (g *GameManager) PacketSceneEntityInfoMonster(scene *Scene, entityId uint32
|
||||
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 {
|
||||
entity := scene.GetEntity(entityId)
|
||||
if entity == nil {
|
||||
@@ -685,7 +743,7 @@ func (g *GameManager) PacketSceneEntityInfoGadget(scene *Scene, entityId uint32)
|
||||
Val: int64(1),
|
||||
}}},
|
||||
FightPropList: g.PacketFightPropMapToPbFightPropList(entity.fightProp),
|
||||
LifeState: 1,
|
||||
LifeState: uint32(entity.lifeState),
|
||||
AnimatorParaList: make([]*proto.AnimatorParameterValueInfoPair, 0),
|
||||
EntityClientData: new(proto.EntityClientData),
|
||||
EntityAuthorityInfo: &proto.EntityAuthorityInfo{
|
||||
@@ -767,6 +825,16 @@ func (g *GameManager) PacketSceneMonsterInfo() *proto.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 {
|
||||
sceneGadgetInfo := &proto.SceneGadgetInfo{
|
||||
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 {
|
||||
|
||||
@@ -55,8 +55,7 @@ func (g *GameManager) CreateVehicleReq(player *model.Player, payloadMsg pb.Messa
|
||||
g.CommonRetError(cmd.VehicleInteractRsp, player, &proto.VehicleInteractRsp{})
|
||||
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.LastCreateTime = time.Now().UnixMilli()
|
||||
|
||||
@@ -527,6 +527,13 @@ type AvatarEntity struct {
|
||||
type MonsterEntity struct {
|
||||
}
|
||||
|
||||
type NpcEntity struct {
|
||||
NpcId uint32
|
||||
RoomId uint32
|
||||
ParentQuestId uint32
|
||||
BlockId uint32
|
||||
}
|
||||
|
||||
const (
|
||||
GADGET_TYPE_NORMAL = iota
|
||||
GADGET_TYPE_GATHER
|
||||
@@ -579,6 +586,7 @@ type Entity struct {
|
||||
level uint8
|
||||
avatarEntity *AvatarEntity
|
||||
monsterEntity *MonsterEntity
|
||||
npcEntity *NpcEntity
|
||||
gadgetEntity *GadgetEntity
|
||||
}
|
||||
|
||||
@@ -748,6 +756,7 @@ func (s *Scene) CreateEntityMonster(pos *model.Vector, level uint8, fightProp ma
|
||||
fightProp: fightProp,
|
||||
entityType: uint32(proto.ProtEntityType_PROT_ENTITY_TYPE_MONSTER),
|
||||
level: level,
|
||||
monsterEntity: &MonsterEntity{},
|
||||
}
|
||||
s.entityMap[entity.id] = entity
|
||||
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
|
||||
}
|
||||
|
||||
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 {
|
||||
entityId := s.world.GetNextWorldEntityId(constant.EntityIdTypeConst.GADGET)
|
||||
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"` // 掉落信息
|
||||
MainCharAvatarId uint32 `bson:"mainCharAvatarId"` // 主角id
|
||||
ChatMsgMap map[uint32][]*ChatMsg `bson:"chatMsgMap"` // 聊天信息
|
||||
GCGInfo *GCGInfo `bson:"gcgInfo"` // 七圣召唤信息
|
||||
IsGM uint8 `bson:"isGM"` // 管理员权限等级
|
||||
// 在线数据 请随意 记得加忽略字段的tag
|
||||
EnterSceneToken uint32 `bson:"-" msgpack:"-"` // 玩家的世界进入令牌
|
||||
@@ -73,6 +74,7 @@ type Player struct {
|
||||
AbilityInvokeHandler *InvokeHandler[proto.AbilityInvokeEntry] `bson:"-" msgpack:"-"` // ability转发器
|
||||
GateAppId string `bson:"-" msgpack:"-"` // 网关服务器的appid
|
||||
FightAppId string `bson:"-" msgpack:"-"` // 战斗服务器的appid
|
||||
GCGCurGameGuid uint32 `bson:"-" msgpack:"-"` // GCG玩家所在的游戏guid
|
||||
}
|
||||
|
||||
func (p *Player) GetNextGameObjectGuid() uint64 {
|
||||
@@ -86,6 +88,7 @@ func (p *Player) InitAll() {
|
||||
p.StaminaInfo = new(StaminaInfo)
|
||||
p.VehicleInfo = new(VehicleInfo)
|
||||
p.VehicleInfo.LastCreateEntityIdMap = make(map[uint32]uint32)
|
||||
p.GCGInfo = NewGCGInfo()
|
||||
p.InitAllAvatar()
|
||||
p.InitAllWeapon()
|
||||
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(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(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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7820
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGApplyInviteBattleNotify {
|
||||
bool is_agree = 14;
|
||||
int32 retcode = 6;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7730
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7304
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7237
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGAskDuelReq {}
|
||||
message GCGAskDuelReq {
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// CMD_ID = 7034;
|
||||
// ENET_CHANNEL_ID = 0;
|
||||
// ENET_IS_RELIABLE = 1;
|
||||
// IS_ALLOW_CLIENT = 1;
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -18,13 +18,17 @@ syntax = "proto3";
|
||||
|
||||
import "GCGDuel.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7869
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGAskDuelRsp {
|
||||
int32 retcode = 3;
|
||||
GCGDuel duel = 13;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
import "Uint32Pair.proto";
|
||||
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGAttackCostInfo {
|
||||
uint32 skill_id = 8;
|
||||
map<uint32, uint32> cost_map = 3;
|
||||
repeated Uint32Pair cost_map = 1;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7319
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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;
|
||||
repeated uint32 level_reward_taken_list = 12;
|
||||
repeated uint32 level_reward_taken_list = 14;
|
||||
}
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGBossChallengeData {
|
||||
uint32 id = 9;
|
||||
repeated uint32 unlock_level_id_list = 14;
|
||||
repeated uint32 unlock_level_id_list = 3;
|
||||
uint32 id = 10;
|
||||
}
|
||||
|
||||
@@ -18,12 +18,16 @@ syntax = "proto3";
|
||||
|
||||
import "GCGBossChallengeData.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7073
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
import "GCGSkillLimitsInfo.proto";
|
||||
import "GCGToken.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGCard {
|
||||
uint32 guid = 15;
|
||||
repeated GCGToken token_list = 2;
|
||||
bool is_show = 14;
|
||||
uint32 controller_id = 7;
|
||||
repeated uint32 tag_list = 7;
|
||||
uint32 guid = 11;
|
||||
bool is_show = 15;
|
||||
repeated GCGToken token_list = 8;
|
||||
uint32 face_type = 2;
|
||||
repeated uint32 skill_id_list = 13;
|
||||
repeated GCGSkillLimitsInfo skill_limits_list = 3;
|
||||
uint32 id = 6;
|
||||
repeated uint32 tag_list = 3;
|
||||
uint32 face_type = 5;
|
||||
uint32 controller_id = 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGChallengeData {
|
||||
|
||||
@@ -18,14 +18,17 @@ syntax = "proto3";
|
||||
|
||||
import "GCGDuelChallenge.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7268
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGChallengeUpdateNotify {
|
||||
uint32 server_seq = 12;
|
||||
GCGDuelChallenge challenge = 13;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
enum GCGClientPerformType {
|
||||
GCG_CLIENT_PERFORM_TYPE_INVALID = 0;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7506
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGClientSettleReq {}
|
||||
message GCGClientSettleReq {
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// CMD_ID = 7035;
|
||||
// ENET_CHANNEL_ID = 0;
|
||||
// ENET_IS_RELIABLE = 1;
|
||||
// IS_ALLOW_CLIENT = 1;
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7105
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGClientSettleRsp {
|
||||
uint32 close_time = 4;
|
||||
int32 retcode = 1;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGControllerShowInfo {
|
||||
ProfilePicture profile_picture = 11;
|
||||
string nick_name = 14;
|
||||
uint32 controller_id = 9;
|
||||
string psn_id = 12;
|
||||
string nick_name = 10;
|
||||
string online_id = 15;
|
||||
ProfilePicture profile_picture = 3;
|
||||
uint32 controller_id = 11;
|
||||
}
|
||||
|
||||
@@ -20,13 +20,12 @@ import "GCGAttackCostInfo.proto";
|
||||
import "GCGPlayCardCostInfo.proto";
|
||||
import "GCGSelectOnStageCostInfo.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGCostReviseInfo {
|
||||
bool is_can_attack = 4;
|
||||
repeated uint32 can_use_hand_card_id_list = 11;
|
||||
repeated uint32 can_use_hand_card_id_list = 15;
|
||||
repeated GCGSelectOnStageCostInfo select_on_stage_cost_list = 13;
|
||||
repeated GCGPlayCardCostInfo play_card_cost_list = 5;
|
||||
repeated GCGSelectOnStageCostInfo select_on_stage_cost_list = 10;
|
||||
repeated GCGAttackCostInfo attack_cost_list = 2;
|
||||
repeated GCGAttackCostInfo attack_cost_list = 12;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7265
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGDSCardData {
|
||||
uint32 card_id = 14;
|
||||
repeated uint32 unlock_face_type_list = 9;
|
||||
uint32 num = 12;
|
||||
uint32 proficiency = 8;
|
||||
uint32 face_type = 6;
|
||||
uint32 num = 11;
|
||||
uint32 face_type = 5;
|
||||
uint32 card_id = 4;
|
||||
repeated uint32 proficiency_reward_taken_idx_list = 14;
|
||||
repeated uint32 unlock_face_type_list = 6;
|
||||
uint32 proficiency = 10;
|
||||
}
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7049
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSCardFaceUnlockNotify {
|
||||
uint32 card_id = 13;
|
||||
uint32 face_type = 1;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7358
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSCardNumChangeNotify {
|
||||
uint32 card_id = 4;
|
||||
uint32 num = 10;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7680
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSCardProficiencyNotify {
|
||||
uint32 proficiency = 2;
|
||||
uint32 card_id = 12;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7292
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGDSChangeCardBackReq {
|
||||
uint32 deck_id = 10;
|
||||
uint32 card_back_id = 12;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7044
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSChangeCardBackRsp {
|
||||
int32 retcode = 15;
|
||||
uint32 card_back_id = 6;
|
||||
uint32 deck_id = 5;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7169
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGDSChangeCardFaceReq {
|
||||
uint32 face_type = 6;
|
||||
uint32 card_id = 3;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7331
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSChangeCardFaceRsp {
|
||||
uint32 face_type = 8;
|
||||
uint32 card_id = 4;
|
||||
int32 retcode = 9;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7131
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7301
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSChangeCurDeckRsp {
|
||||
int32 retcode = 8;
|
||||
uint32 deck_id = 14;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7432
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGDSChangeDeckNameReq {
|
||||
uint32 deck_id = 13;
|
||||
string name = 7;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7916
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSChangeDeckNameRsp {
|
||||
uint32 deck_id = 13;
|
||||
int32 retcode = 14;
|
||||
string name = 1;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7541
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGDSChangeFieldReq {
|
||||
uint32 field_id = 6;
|
||||
uint32 deck_id = 11;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7444
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSChangeFieldRsp {
|
||||
int32 retcode = 1;
|
||||
uint32 field_id = 3;
|
||||
uint32 deck_id = 2;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7796
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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 "GCGDSDeckData.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7122
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSDataNotify {
|
||||
repeated GCGDSDeckData deck_list = 4;
|
||||
repeated uint32 unlock_card_back_id_list = 5;
|
||||
repeated uint32 unlock_field_id_list = 6;
|
||||
uint32 cur_deck_id = 10;
|
||||
repeated GCGDSCardData card_list = 3;
|
||||
repeated uint32 unlock_deck_id_list = 1;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// CMD_ID = 7850;
|
||||
// ENET_CHANNEL_ID = 0;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGDSDeckData {
|
||||
fixed32 create_time = 5;
|
||||
uint32 field_id = 13;
|
||||
uint32 card_back_id = 9;
|
||||
repeated uint32 card_list = 1;
|
||||
uint32 card_back_id = 15;
|
||||
repeated uint32 character_card_list = 10;
|
||||
string name = 5;
|
||||
uint32 id = 3;
|
||||
fixed32 create_time = 13;
|
||||
bool is_valid = 4;
|
||||
uint32 field_id = 7;
|
||||
repeated uint32 character_card_list = 7;
|
||||
uint32 id = 12;
|
||||
string name = 10;
|
||||
bool is_valid = 15;
|
||||
}
|
||||
|
||||
@@ -16,16 +16,20 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7104
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGDSDeckSaveReq {
|
||||
uint32 deck_id = 1;
|
||||
repeated uint32 card_list = 4;
|
||||
repeated uint32 character_card_list = 9;
|
||||
string name = 14;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7269
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSDeckSaveRsp {
|
||||
fixed32 create_time = 14;
|
||||
uint32 deck_id = 11;
|
||||
int32 retcode = 8;
|
||||
bool is_valid = 4;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7732
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7988
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7524
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGDSDeleteDeckRsp {
|
||||
int32 retcode = 14;
|
||||
uint32 deck_id = 7;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7333
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGDamageDetail {
|
||||
uint32 skill_id = 10;
|
||||
uint32 card_guid = 7;
|
||||
uint32 card_guid = 4;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
enum GCGDiceSideType {
|
||||
|
||||
@@ -21,27 +21,33 @@ import "GCGControllerShowInfo.proto";
|
||||
import "GCGCostReviseInfo.proto";
|
||||
import "GCGDuelChallenge.proto";
|
||||
import "GCGGameBusinessType.proto";
|
||||
import "GCGMessagePack.proto";
|
||||
import "GCGPVEIntention.proto";
|
||||
import "GCGPhase.proto";
|
||||
import "GCGPlayerField.proto";
|
||||
import "Unk3300_ADHENCIFKNI.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGDuel {
|
||||
uint32 server_seq = 3;
|
||||
repeated GCGPlayerField field_list = 7;
|
||||
GCGGameBusinessType business_type = 14;
|
||||
repeated GCGDuelChallenge challenge_list = 5;
|
||||
uint32 game_id = 11;
|
||||
uint32 controller_id = 13;
|
||||
uint32 round = 15;
|
||||
uint32 cur_controller_id = 12;
|
||||
repeated GCGPVEIntention intention_list = 1;
|
||||
GCGCostReviseInfo cost_revise = 10;
|
||||
repeated uint32 card_id_list = 4;
|
||||
repeated GCGCard card_list = 9;
|
||||
repeated GCGControllerShowInfo show_info_list = 6;
|
||||
uint32 game_type = 2;
|
||||
GCGPhase phase = 8;
|
||||
repeated GCGControllerShowInfo show_info_list = 7;
|
||||
repeated uint32 forbid_finish_challenge_list = 192;
|
||||
repeated GCGCard card_list = 1;
|
||||
uint32 Unk3300_BIANMOPDEHO = 9;
|
||||
GCGCostReviseInfo cost_revise = 8;
|
||||
uint32 game_id = 4;
|
||||
repeated GCGPlayerField field_list = 5;
|
||||
repeated Unk3300_ADHENCIFKNI Unk3300_CDCMBOKBLAK = 1987;
|
||||
GCGGameBusinessType business_type = 13;
|
||||
repeated GCGPVEIntention intention_list = 2;
|
||||
repeated GCGDuelChallenge challenge_list = 1617;
|
||||
repeated GCGCard history_card_list = 1872;
|
||||
uint32 round = 11;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGDuelChallenge {
|
||||
uint32 total_progress = 7;
|
||||
uint32 challenge_id = 10;
|
||||
uint32 cur_progress = 12;
|
||||
uint32 challenge_id = 12;
|
||||
uint32 cur_progress = 2;
|
||||
uint32 total_progress = 4;
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
syntax = "proto3";
|
||||
|
||||
import "GCGChallengeData.proto";
|
||||
import "PlatformType.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGDuelExtra {
|
||||
@@ -28,4 +28,11 @@ message GCGDuelExtra {
|
||||
map<uint32, uint32> card_face_map = 4;
|
||||
repeated GCGChallengeData challenge_list = 5;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
enum GCGEndReason {
|
||||
@@ -25,4 +24,10 @@ enum GCGEndReason {
|
||||
GCG_END_REASON_SURRENDER = 2;
|
||||
GCG_END_REASON_DISCONNECTED = 3;
|
||||
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 "GCGPlayerBriefData.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGGameBriefData {
|
||||
uint32 game_id = 14;
|
||||
uint32 game_uid = 9;
|
||||
GCGGameBusinessType business_type = 13;
|
||||
uint32 verify_code = 5;
|
||||
repeated GCGPlayerBriefData player_brief_list = 12;
|
||||
uint32 Unk3300_NCLDOGNCHGF = 13;
|
||||
GCGGameBusinessType business_type = 8;
|
||||
uint32 Unk3300_FJJDMIBIBJN = 14;
|
||||
uint32 platform_type = 6;
|
||||
uint32 game_id = 12;
|
||||
repeated GCGPlayerBriefData player_brief_list = 5;
|
||||
}
|
||||
|
||||
@@ -18,12 +18,17 @@ syntax = "proto3";
|
||||
|
||||
import "GCGGameBriefData.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7539
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
enum GCGGameBusinessType {
|
||||
@@ -29,4 +28,7 @@ enum GCGGameBusinessType {
|
||||
GCG_GAME_BUSINESS_TYPE_WORLD_CHALLENGE = 6;
|
||||
GCG_GAME_BUSINESS_TYPE_BOSS_CHALLENGE = 7;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7736
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGGrowthLevelNotify {
|
||||
uint32 exp = 7;
|
||||
uint32 level = 11;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7477
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7051
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7670
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGGrowthLevelTakeRewardRsp {
|
||||
uint32 level = 1;
|
||||
int32 retcode = 13;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7224
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7684
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
message GCGInitFinishReq {}
|
||||
message GCGInitFinishReq {
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// CMD_ID = 7348;
|
||||
// ENET_CHANNEL_ID = 0;
|
||||
// ENET_IS_RELIABLE = 1;
|
||||
// IS_ALLOW_CLIENT = 1;
|
||||
// }
|
||||
}
|
||||
|
||||
@@ -16,12 +16,16 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7433
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7692
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGInviteBattleNotify {}
|
||||
message GCGInviteBattleNotify {
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// NONE = 0;
|
||||
// CMD_ID = 7448;
|
||||
// ENET_CHANNEL_ID = 0;
|
||||
// ENET_IS_RELIABLE = 1;
|
||||
// }
|
||||
|
||||
uint32 confirm_end_time = 1;
|
||||
}
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7783
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
// IsAllowClient: true
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7251
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGInviteGuestBattleRsp {
|
||||
int32 retcode = 3;
|
||||
uint32 uid = 11;
|
||||
// enum CmdId {
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7629
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGLevelChallengeFinishNotify {
|
||||
repeated uint32 finished_challenge_id_list = 10;
|
||||
uint32 level_id = 15;
|
||||
// enum CmdId {
|
||||
// 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 "GCGLevelData.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
// CmdId: 7055
|
||||
// EnetChannelId: 0
|
||||
// EnetIsReliable: true
|
||||
message GCGLevelChallengeNotify {
|
||||
repeated GCGBossChallengeData unlock_boss_challenge_list = 3;
|
||||
repeated uint32 unlock_world_challenge_list = 8;
|
||||
repeated GCGLevelData level_list = 10;
|
||||
// enum CmdId {
|
||||
// option allow_alias = true;
|
||||
// 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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGLevelData {
|
||||
repeated uint32 finished_challenge_id_list = 10;
|
||||
uint32 level_id = 9;
|
||||
repeated uint32 finished_challenge_id_list = 13;
|
||||
uint32 level_id = 7;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
enum GCGLevelType {
|
||||
@@ -26,4 +25,7 @@ enum GCGLevelType {
|
||||
GCG_LEVEL_TYPE_WORLD = 3;
|
||||
GCG_LEVEL_TYPE_BOSS = 4;
|
||||
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";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGMatchInfo {
|
||||
repeated MatchPlayerInfo player_list = 13;
|
||||
repeated MatchPlayerInfo player_list = 15;
|
||||
}
|
||||
|
||||
@@ -31,14 +31,19 @@ import "GCGMsgModifyAdd.proto";
|
||||
import "GCGMsgModifyRemove.proto";
|
||||
import "GCGMsgMoveCard.proto";
|
||||
import "GCGMsgNewCard.proto";
|
||||
import "GCGMsgNoDamageSkillResult.proto";
|
||||
import "GCGMsgOpTimer.proto";
|
||||
import "GCGMsgPVEDoOp.proto";
|
||||
import "GCGMsgPVEGenCardOp.proto";
|
||||
import "GCGMsgPVEIntentionChange.proto";
|
||||
import "GCGMsgPVEIntentionInfo.proto";
|
||||
import "GCGMsgPass.proto";
|
||||
import "GCGMsgPhaseChange.proto";
|
||||
import "GCGMsgPhaseContinue.proto";
|
||||
import "GCGMsgReactionBegin.proto";
|
||||
import "GCGMsgReactionEnd.proto";
|
||||
import "GCGMsgRemoveCards.proto";
|
||||
import "GCGMsgSelectOnStage.proto";
|
||||
import "GCGMsgSelectOnStageByEffect.proto";
|
||||
import "GCGMsgSkillLimitsChange.proto";
|
||||
import "GCGMsgSkillResult.proto";
|
||||
import "GCGMsgTokenChange.proto";
|
||||
import "GCGMsgUpdateController.proto";
|
||||
@@ -46,39 +51,43 @@ import "GCGMsgUseSkill.proto";
|
||||
import "GCGMsgUseSkillEnd.proto";
|
||||
import "GCGMsgWaitingListChange.proto";
|
||||
|
||||
package proto;
|
||||
option go_package = "./;proto";
|
||||
|
||||
message GCGMessage {
|
||||
oneof message {
|
||||
GCGMsgTokenChange token_change = 12;
|
||||
GCGMsgPhaseChange phase_change = 13;
|
||||
GCGMsgAddCards add_cards = 10;
|
||||
GCGMsgRemoveCards remove_cards = 14;
|
||||
GCGMsgTokenChange token_change = 2;
|
||||
GCGMsgPhaseChange phase_change = 10;
|
||||
GCGMsgAddCards add_cards = 5;
|
||||
GCGMsgRemoveCards remove_cards = 12;
|
||||
GCGMsgSelectOnStage select_on_stage = 6;
|
||||
GCGMsgDiceRoll dice_roll = 9;
|
||||
GCGMsgDiceReroll dice_reroll = 11;
|
||||
GCGMsgPass pass = 5;
|
||||
GCGMsgCharDie char_die = 2;
|
||||
GCGMsgSkillResult skill_result = 1;
|
||||
GCGMsgCostDice cost_dice = 7;
|
||||
GCGMsgAddDice add_dice = 3;
|
||||
GCGMsgMoveCard move_card = 15;
|
||||
GCGMsgUseSkill use_skill = 4;
|
||||
GCGMsgNewCard new_card = 1848;
|
||||
GCGMsgUpdateController update_controller = 429;
|
||||
GCGMsgModifyAdd modify_add = 1851;
|
||||
GCGMsgModifyRemove modify_remove = 471;
|
||||
GCGMsgUseSkillEnd use_skill_end = 1411;
|
||||
GCGMsgPVEGenCardOp pve_gen_card_op = 1741;
|
||||
GCGMsgPVEDoOp pve_do_op = 614;
|
||||
GCGMsgDuelDataChange duel_data_change = 1008;
|
||||
GCGMsgClientPerform client_perform = 1035;
|
||||
GCGMsgGameOver game_over = 714;
|
||||
GCGMsgOpTimer op_timer = 1862;
|
||||
GCGMsgWaitingListChange waiting_list_change = 1678;
|
||||
GCGMsgCardUpdate card_update = 1879;
|
||||
GCGMsgSelectOnStageByEffect select_on_stage_by_effect = 2042;
|
||||
GCGMsgCostRevise cost_revise = 1350;
|
||||
GCGMsgDiceRoll dice_roll = 14;
|
||||
GCGMsgDiceReroll dice_reroll = 15;
|
||||
GCGMsgPass pass = 8;
|
||||
GCGMsgCharDie char_die = 4;
|
||||
GCGMsgSkillResult skill_result = 3;
|
||||
GCGMsgCostDice cost_dice = 13;
|
||||
GCGMsgAddDice add_dice = 7;
|
||||
GCGMsgMoveCard move_card = 11;
|
||||
GCGMsgUseSkill use_skill = 1;
|
||||
GCGMsgNewCard new_card = 296;
|
||||
GCGMsgUpdateController update_controller = 1111;
|
||||
GCGMsgModifyAdd modify_add = 1733;
|
||||
GCGMsgModifyRemove modify_remove = 2014;
|
||||
GCGMsgUseSkillEnd use_skill_end = 1368;
|
||||
GCGMsgDuelDataChange duel_data_change = 1791;
|
||||
GCGMsgClientPerform client_perform = 1677;
|
||||
GCGMsgGameOver game_over = 632;
|
||||
GCGMsgOpTimer op_timer = 154;
|
||||
GCGMsgWaitingListChange waiting_list_change = 1991;
|
||||
GCGMsgCardUpdate card_update = 1702;
|
||||
GCGMsgSelectOnStageByEffect select_on_stage_by_effect = 1737;
|
||||
GCGMsgCostRevise cost_revise = 468;
|
||||
GCGMsgPhaseContinue phase_continue = 1157;
|
||||
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