From a8c6c0235c6c34c9494888856a6487bcf68ba298 Mon Sep 17 00:00:00 2001 From: sk Date: Wed, 11 Jun 2025 17:00:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E5=93=81=E3=80=81=E9=98=B5=E5=AE=B9?= =?UTF-8?q?=E3=80=81=E8=8B=B1=E9=9B=84=E5=88=97=E8=A1=A8=E3=80=81=E8=A3=85?= =?UTF-8?q?=E5=A4=87=E3=80=81=E5=AE=9D=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 12 ++- go.sum | 10 +++ proto/idl/enums.proto | 54 +++++++++---- proto/idl/mod_battle.proto | 5 +- proto/idl/mod_role.proto | 27 ++++--- proto/idl/msg_id.proto | 18 +++-- servers/game/data/item.go | 27 ++++--- servers/game/handler/player_hero.go | 1 + servers/game/handler/player_item.go | 5 ++ servers/game/handler/player_level.go | 2 +- servers/game/handler/player_role.go | 68 +++++++++++++--- servers/game/logic/player.go | 8 +- servers/game/logic/player_check_correct.go | 31 +------- servers/game/logic/player_equip.go | 42 +--------- servers/game/logic/player_function_open.go | 8 +- servers/game/logic/player_hero.go | 21 +++-- servers/game/logic/player_item.go | 92 +++++++++++----------- servers/game/logic/player_lineup.go | 6 +- servers/game/logic/player_money.go | 8 +- servers/game/logic/player_treasure.go | 4 + servers/game/server.go | 1 + 21 files changed, 251 insertions(+), 199 deletions(-) diff --git a/go.mod b/go.mod index 0456673..4e558a1 100644 --- a/go.mod +++ b/go.mod @@ -4,15 +4,13 @@ go 1.24.3 require ( github.com/json-iterator/go v1.1.12 - github.com/oylshe1314/framework v0.0.0-00010101000000-000000000000 + github.com/oylshe1314/framework v1.0.16 github.com/xuri/excelize/v2 v2.9.1 - go.mongodb.org/mongo-driver v1.17.3 - golang.org/x/crypto v0.38.0 + go.mongodb.org/mongo-driver v1.17.4 + golang.org/x/crypto v0.39.0 google.golang.org/protobuf v1.36.6 ) -replace github.com/oylshe1314/framework => D:\sk\projects\golang\framework - require ( filippo.io/edwards25519 v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -43,7 +41,7 @@ require ( github.com/xuri/nfp v0.0.1 // indirect github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect golang.org/x/net v0.40.0 // indirect - golang.org/x/sync v0.14.0 // indirect + golang.org/x/sync v0.15.0 // indirect golang.org/x/sys v0.33.0 // indirect - golang.org/x/text v0.25.0 // indirect + golang.org/x/text v0.26.0 // indirect ) diff --git a/go.sum b/go.sum index 8ab7aea..9edd5f5 100644 --- a/go.sum +++ b/go.sum @@ -44,6 +44,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/oylshe1314/framework v1.0.16 h1:mwgx/td0J95nnDJ5Z6EJ2zZNIxublLUYJj5Lt87PMEs= +github.com/oylshe1314/framework v1.0.16/go.mod h1:vNAkswUJKZe4hwYHdhgYFpHAnS6N0K5yORs/Ox1/BgE= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.7 h1:uv+I3nNJvlKZIQGSr8JVQLNHFU9YhhNpvC14Y6KgmSM= @@ -86,11 +88,15 @@ github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78/go.mod h1:aL8wCCfTfS github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.mongodb.org/mongo-driver v1.17.3 h1:TQyXhnsWfWtgAhMtOgtYHMTkZIfBTpMTsMnd9ZBeHxQ= go.mongodb.org/mongo-driver v1.17.3/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= +go.mongodb.org/mongo-driver v1.17.4 h1:jUorfmVzljjr0FLzYQsGP8cgN/qzzxlY9Vh0C9KFXVw= +go.mongodb.org/mongo-driver v1.17.4/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= +golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -107,6 +113,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= +golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -134,6 +142,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= diff --git a/proto/idl/enums.proto b/proto/idl/enums.proto index 53dafd1..467e763 100644 --- a/proto/idl/enums.proto +++ b/proto/idl/enums.proto @@ -112,44 +112,50 @@ enum ChangeType { enum ItemType { ItemTypeNone = 0; - // 货币 - ItemMoney = 1; - // 道具 - ItemProp = 2; + ItemProp = 1; + + // 货币 + ItemMoney = 2; + + // 英雄 + ItemHero = 3; // 装备 - ItemEquip = 3; + ItemEquip = 4; // 宝物 - ItemTreasure = 4; + ItemTreasure = 5; // 神兵 - ItemArtifact = 5; + ItemArtifact = 6; + + // 坐骑 + ItemMount = 7; // 锦囊 - ItemSack = 6; + ItemSack = 8; // 饰品 - ItemOrnament = 7; + ItemOrnament = 9; // 命格 - ItemFateChart = 8; + ItemFateChart = 10; // 玉石 - ItemGem = 9; + ItemGem = 11; // 神兵玉石 - ItemArtifactGem = 10; + ItemArtifactGem = 12; // 觉醒道具 - ItemAwakenProp = 11; + ItemAwakenProp = 13; // 历史名将 - ItemGeneral = 12; + ItemGeneral = 14; // 神机(俄罗斯方块) - ItemTetris = 13; + ItemTetris = 15; } enum PropType { @@ -158,6 +164,12 @@ enum PropType { HeroExp = 1; } +enum HeroType { + TypeHero = 0; + + HeroPiece = 1; +} + enum EquipType { Weapon = 0; @@ -166,12 +178,16 @@ enum EquipType { Cloth = 2; Shoe = 3; + + EquipPiece = 4; } enum TreasureType { WarBook = 0; WarToken = 1; + + TreasurePiece = 4; } enum CopyType { @@ -188,6 +204,14 @@ enum AbleStatus { Already = 2; //已经 } +enum FuncType { + FuncTypeNone = 0; + + LineupHeroes = 1; + + EquipUpgrade = 2; +} + enum AttrType { AttrTypeNone = 0; //无属性 Attack = 1; //攻击 diff --git a/proto/idl/mod_battle.proto b/proto/idl/mod_battle.proto index 026fc64..baf41a2 100644 --- a/proto/idl/mod_battle.proto +++ b/proto/idl/mod_battle.proto @@ -8,10 +8,11 @@ import "mod_item.proto"; message BattleEntity { uint32 Type = 1; //目标类型, 1.英雄(自己人),2.怪物(敌人) uint32 Id = 2; //目标ID - uint64 Hp = 3; //当前血量 + uint64 HpMax = 3; //当前血量 uint32 Rage = 4; //当前怒气 repeated uint32 Status = 5; //目标状态(待定,如眩晕、击飞等) - uint64 Value = 6; //数值,可以是伤害,回血等 + repeated uint64 Value = 6; //数值列表,可以是伤害,回血等 + repeated uint64 Hp = 7; //当前血量列表 } //战斗动作 diff --git a/proto/idl/mod_role.proto b/proto/idl/mod_role.proto index dab3268..349eacb 100644 --- a/proto/idl/mod_role.proto +++ b/proto/idl/mod_role.proto @@ -113,12 +113,6 @@ message LineupHeroChangeReq { uint64 HeroUid = 3; } -// ModRoleLineupHeroChange: 2007 -// 阵容英雄变更返回 -message LineupHeroChangeAck { - repeated LineupHero HeroList = 1; -} - // ModRoleBattleHeroPosition = 2008; // 阵容英雄布阵位置变更请求 message LineupHeroPositionReq { @@ -176,14 +170,23 @@ message LineupHeroOrnamentReq { uint64 OrnamentsUid = 3; } +// ModRoleLineupHelperChange = 2015; +// 阵容援军变更 +message LineupHelperChangeReq{ + uint64 LineupUid = 1; + uint32 Index = 2; + uint64 HeroUid = 3; //填0为卸下 +} + message Lineup { uint64 Uid = 1; // 唯一ID(可以此字段排序,越晚创建的UID会越大) string Name = 2; // 阵容名称 bool Active = 3; // 阵容是否生效,即是否当前阵容 repeated LineupHero HeroList = 4; //阵容英雄列表,0-5为上阵英雄,6-7为偏将(坐板凳的),对于未激活的阵容是否需要返回英雄列表待定 + repeated uint64 HelpList = 5; } -// ModRoleLineupList = 2015; +// ModRoleLineupList = 2021; // 阵容列表返回 message LineupListAck { repeated Lineup LineupList = 1; //理论上至少会有个阵容 @@ -194,32 +197,32 @@ message LineupChange { Lineup Lineup = 2; } -// ModRoleLineupChange = 2016; +// ModRoleLineupChange = 2022; // 阵容变更列表返回 message LineupChangeListAck { repeated LineupChange ChangeList = 1; } -// ModRoleLineupCreate = 2017; +// ModRoleLineupCreate = 2023; // 创建新阵容请求 message LineupCreateReq { string Name = 1; } -// ModRoleLineupChangeName = 2018; +// ModRoleLineupChangeName = 2024; // 阵容修改名称请求 message LineupChangeNameReq { uint64 Uid = 1; string Name = 2; } -// ModRoleLineupActivate = 2019; +// ModRoleLineupActivate = 2025; // 阵容激活(变更当前阵容)请求 message LineupActivateReq { uint64 Uid = 1; } -// ModRoleLineupDelete = 2020; +// ModRoleLineupDelete = 2026; // 阵容删除请求 message LineupDeleteReq { uint64 Uid = 1; diff --git a/proto/idl/msg_id.proto b/proto/idl/msg_id.proto index 899b314..00eb0b6 100644 --- a/proto/idl/msg_id.proto +++ b/proto/idl/msg_id.proto @@ -122,23 +122,26 @@ enum MsgId { // 阵容英雄饰品 ModRoleLineupHeroOrnament = 2014; + // 援助变更 + ModRoleLineupHelperChange = 2015; + // 阵容列表 - ModRoleLineupList = 2015; + ModRoleLineupList = 2021; // 阵容变更 - ModRoleLineupChange = 2016; + ModRoleLineupChange = 2022; // 创建新阵容 - ModRoleLineupCreate = 2017; + ModRoleLineupCreate = 2023; // 阵容修改名称 - ModRoleLineupChangeName = 2018; + ModRoleLineupChangeName = 2024; // 阵容激活(变更当前阵容) - ModRoleLineupActivate = 2019; + ModRoleLineupActivate = 2025; // 阵容删除 - ModRoleLineupDelete = 2020; + ModRoleLineupDelete = 2026; //-------------------------------------------------------------------------- 关卡模块 -------------------------------------------------------------------------- // 场景进入 @@ -203,6 +206,9 @@ enum MsgId { // 物品使用 ModItemUse = 6003; + // 物品使用 + ModItemSale = 6004; + // 装备列表 ModItemEquipList = 6011; diff --git a/servers/game/data/item.go b/servers/game/data/item.go index d91478d..174fc81 100644 --- a/servers/game/data/item.go +++ b/servers/game/data/item.go @@ -6,19 +6,20 @@ import ( ) type Item struct { - Id int `json:"id"` - Name string `json:"name"` - Type int `json:"type"` - SubType int `json:"subType"` - Value int `json:"value"` - Quality int `json:"quality"` - StackLimit int `json:"stack_limit"` - SortBy int `json:"sort_by"` - UseMulti bool `json:"use_multi"` - SaleAllow bool `json:"sale_allow"` - UseAllow bool `json:"use_allow"` - UseConsume bool `json:"use_consume"` - UseDirect bool `json:"use_direct"` + Id int `json:"id"` + Name string `json:"name"` + Type int `json:"type"` + SubType int `json:"subType"` + Value int `json:"value"` + Quality int `json:"quality"` + StackLimit int `json:"stack_limit"` + SortBy int `json:"sort_by"` + UseMulti bool `json:"use_multi"` + SaleAllow bool `json:"sale_allow"` + UseAllow bool `json:"use_allow"` + UseDirect bool `json:"use_direct"` + UseConsume int `json:"use_consume"` + ConsumeNums int `json:"consume_nums"` } type ItemTable struct { diff --git a/servers/game/handler/player_hero.go b/servers/game/handler/player_hero.go index a0903fe..af8ab85 100644 --- a/servers/game/handler/player_hero.go +++ b/servers/game/handler/player_hero.go @@ -158,6 +158,7 @@ func (this *PlayerHandler) HeroBreak(player *logic.Player, msg *net.Message) { var hero = player.Hero[req.HeroUid] if hero == nil { + this.logger.Error("Parameter error, Hero not found, req.HeroUid: ", req.HeroUid) _ = player.TipNotice(proto.TipHeroNotFound) return } diff --git a/servers/game/handler/player_item.go b/servers/game/handler/player_item.go index 7348ae9..24e829e 100644 --- a/servers/game/handler/player_item.go +++ b/servers/game/handler/player_item.go @@ -66,6 +66,11 @@ func (this *PlayerHandler) EquipUpgrade(player *logic.Player, msg *net.Message) return } + if player.CheckFunctionOpen(pb.ModId_ModuleItem, pb.FuncType_EquipUpgrade, int(equip.Level+1)) { + _ = player.TipNotice(proto.TipLevelAlreadyMax) + return + } + var level = equip.Level var consumeItems = map[uint32]uint32{} diff --git a/servers/game/handler/player_level.go b/servers/game/handler/player_level.go index fe79f18..5cec587 100644 --- a/servers/game/handler/player_level.go +++ b/servers/game/handler/player_level.go @@ -52,7 +52,7 @@ func (this *PlayerHandler) enterCopyMain(player *logic.Player, levelId uint32) { for i, unlockType := range copyMainTable.UnlockType { switch unlockType { case 1: - if player.RoleLevel < uint32(copyMainTable.UnlockArgs[i]) { + if player.RoleHero.Level < uint32(copyMainTable.UnlockArgs[i]) { _ = player.TipNotice(proto.TipCopyCanNotEnter) return } diff --git a/servers/game/handler/player_role.go b/servers/game/handler/player_role.go index a7016d5..a557f63 100644 --- a/servers/game/handler/player_role.go +++ b/servers/game/handler/player_role.go @@ -122,7 +122,7 @@ func (this *PlayerHandler) LineupHeroChange(player *logic.Player, msg *net.Messa return } - if !player.CheckFunctionOpen(int(pb.ModId_ModuleRole), 1, int(req.Index)) { + if !player.CheckFunctionOpen(pb.ModId_ModuleRole, pb.FuncType_LineupHeroes, int(req.Index)) { _ = player.TipNotice(proto.TipFunctionNotUnlocked) return } @@ -178,8 +178,8 @@ func (this *PlayerHandler) LineupHeroChange(player *logic.Player, msg *net.Messa //TODO lineup hero capacity - _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroChange), &pb.LineupHeroChangeAck{ - HeroList: []*pb.LineupHero{lineupHero.BuildMsgLineupHero(req.Index)}, + _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{ + ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}}, }) } @@ -222,7 +222,6 @@ func (this *PlayerHandler) LineupHeroPosition(player *logic.Player, msg *net.Mes setups[req.PositionList[i]] = true } - var lineupHeroList []*pb.LineupHero for i, lineupHero := range lineup.Heroes { if i > 5 { break @@ -233,14 +232,13 @@ func (this *PlayerHandler) LineupHeroPosition(player *logic.Player, msg *net.Mes } lineupHero.Position = req.PositionList[i] - lineupHeroList = append(lineupHeroList, lineupHero.BuildMsgLineupHero(uint32(i))) } player.SaveField("lineup.heroes", lineup.Heroes) - if len(lineupHeroList) > 0 { - _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroChange), &pb.LineupHeroChangeAck{HeroList: lineupHeroList}) - } + _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{ + ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}}, + }) } func (this *PlayerHandler) LineupHeroEquip(player *logic.Player, msg *net.Message) { @@ -270,7 +268,7 @@ func (this *PlayerHandler) LineupHeroEquip(player *logic.Player, msg *net.Messag return } - if !player.CheckFunctionOpen(int(pb.ModId_ModuleRole), 1, int(req.Index)) { + if !player.CheckFunctionOpen(pb.ModId_ModuleRole, 1, int(req.Index)) { _ = player.TipNotice(proto.TipFunctionNotUnlocked) return } @@ -349,7 +347,9 @@ func (this *PlayerHandler) LineupHeroEquip(player *logic.Player, msg *net.Messag }) } - _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroChange), &pb.LineupHeroChangeAck{HeroList: lineupHeroList}) + _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{ + ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}}, + }) _ = player.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), &pb.EquipChangeListAck{ChangeList: equipChangeList}) return } @@ -381,7 +381,7 @@ func (this *PlayerHandler) LineupHeroTreasure(player *logic.Player, msg *net.Mes return } - if !player.CheckFunctionOpen(int(pb.ModId_ModuleRole), 1, int(req.Index)) { + if !player.CheckFunctionOpen(pb.ModId_ModuleRole, pb.FuncType_LineupHeroes, int(req.Index)) { _ = player.TipNotice(proto.TipFunctionNotUnlocked) return } @@ -460,7 +460,9 @@ func (this *PlayerHandler) LineupHeroTreasure(player *logic.Player, msg *net.Mes }) } - _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroChange), &pb.LineupHeroChangeAck{HeroList: lineupHeroList}) + _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{ + ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}}, + }) _ = player.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemTreasureChange), &pb.TreasureChangeListAck{ChangeList: equipChangeList}) return } @@ -473,6 +475,48 @@ func (this *PlayerHandler) LineupHeroGeneral(player *logic.Player, msg *net.Mess func (this *PlayerHandler) LineupHeroOrnament(player *logic.Player, msg *net.Message) {} +func (this *PlayerHandler) LineupHelperChange(player *logic.Player, msg *net.Message) { + var req = new(pb.LineupHelperChangeReq) + var err = msg.Read(req) + if err != nil { + this.logger.Error("Read message failed, ", err) + _ = player.TipNotice(proto.TipMessageError) + return + } + + if req.LineupUid == 0 { + this.logger.Error("Parameter error, req.LineupUid: ", req.LineupUid) + _ = player.TipNotice(proto.TipParameterError) + return + } + + if req.Index >= 8 { + this.logger.Error("Parameter error, req.Index: ", req.Index) + _ = player.TipNotice(proto.TipParameterError) + return + } + + var lineup = player.Lineup[req.LineupUid] + if lineup == nil { + this.logger.Error("Parameter error, Lineup not found, req.LineupUid: ", req.LineupUid) + _ = player.TipNotice(proto.TipLineupNotFound) + return + } + + var hero = player.Hero[req.HeroUid] + if hero == nil { + this.logger.Error("Parameter error, Hero not found, req.HeroUid: ", req.HeroUid) + _ = player.TipNotice(proto.TipHeroNotFound) + return + } + + lineup.Helper[req.Index] = hero.Uid + + _ = player.Send(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChange), &pb.LineupChangeListAck{ + ChangeList: []*pb.LineupChange{{ChangeType: pb.ChangeType_Changed, Lineup: lineup.BuildMsgLineup()}}, + }) +} + func (this *PlayerHandler) LineupCreate(player *logic.Player, msg *net.Message) { var req = new(pb.LineupCreateReq) var err = msg.Read(req) diff --git a/servers/game/logic/player.go b/servers/game/logic/player.go index f6bdf83..36d53af 100644 --- a/servers/game/logic/player.go +++ b/servers/game/logic/player.go @@ -36,8 +36,8 @@ type Player struct { NamePrefix uint32 `bson:"name_prefix"` NameTitle uint32 `bson:"name_title"` RoleTitle uint32 `bson:"role_title"` - RoleExp uint64 `bson:"role_exp"` - RoleLevel uint32 `bson:"role_level"` + //RoleExp uint64 `bson:"role_exp"` + //RoleLevel uint32 `bson:"role_level"` //Fields LoginTime int64 `bson:"login_time"` @@ -75,9 +75,9 @@ type Player struct { Item map[uint32]*PlayerItem `bson:"item"` Equip map[uint64]*PlayerEquip `bson:"rig_equip"` //GiftPack map[uint32]*PlayerGiftPack `bson:"gift_pack"` - //Mail map[uint64]*PlayerMail `bson:"mail"` Lineup map[uint64]*PlayerLineup `bson:"lineup"` - Money map[uint32]*PlayerMoney `bson:"money"` + //Mail map[uint64]*PlayerMail `bson:"mail"` + Money map[uint32]*PlayerMoney `bson:"money"` //MonthlyCard map[uint32]*PlayerMonthlyCard `bson:"monthly_card"` //Planet map[uint32]*PlayerPlanet `bson:"planet"` //RawStone map[uint32]*PlayerRawStone `bson:"raw_stone"` diff --git a/servers/game/logic/player_check_correct.go b/servers/game/logic/player_check_correct.go index eeafdfc..4b4ec56 100644 --- a/servers/game/logic/player_check_correct.go +++ b/servers/game/logic/player_check_correct.go @@ -184,16 +184,8 @@ func (this *Player) initHeroes(cur *GameTime) { func (this *Player) initItems(cur *GameTime) { var itemIds, itemNums = this.manager.tables.ServerConfig.GetInitItems() - for i, itemId := range itemIds { - var itemNum = itemNums[i] - - var itemTable = this.manager.tables.Item.Find1(itemId) - if itemTable == nil { - this.manager.logger.Error("find item table failed, itemId: ", itemId) - return - } - - _ = this.addItem(itemTable, uint32(itemNum), 0) + for i := range itemIds { + this.AddItem(uint32(itemIds[i]), uint32(itemNums[i]), 0) } } @@ -279,7 +271,7 @@ func (this *Player) initPower(cur *GameTime) { func (this *Player) checkCorrectFirstLogin(cur *GameTime) { this.initRole(cur) this.initHeroes(cur) - //this.initItems(cur) + this.initItems(cur) this.initLineup(cur) //this.initMails(cur) //this.initTasks(cur) @@ -288,27 +280,12 @@ func (this *Player) checkCorrectFirstLogin(cur *GameTime) { func (this *Player) checkCorrectMemoryData(cur *GameTime) { this.initTemp() + this.UpdateHeroAttrs(this.RoleHero) for _, hero := range this.Hero { this.UpdateHeroAttrs(hero) } } -//func (this *Player) checkWechatUserInfo(cur *GameTime) { -// switch data_old.Channel(this.Channel) { -// case data_old.ChannelWechatMiniGame, data_old.ChannelTapTap: -// if this.Temp.ThirdData != nil { -// if this.RoleName != this.Temp.ThirdData.NickName { -// this.RoleName = this.Temp.ThirdData.NickName -// this.SaveField("role_name", this.RoleName) -// } -// if this.Avatar != this.Temp.ThirdData.AvatarUrl { -// this.Avatar = this.Temp.ThirdData.AvatarUrl -// this.SaveField("avatar", this.Avatar) -// } -// } -// } -//} - func (this *Player) checkCorrectPower(cur *GameTime) { var money = this.GetMoney(pb.MoneyType_Power) if money.Value >= uint32(RolePowerMax) || this.PowerNextTime > cur.Timestamp { diff --git a/servers/game/logic/player_equip.go b/servers/game/logic/player_equip.go index bfe711c..bbab4a8 100644 --- a/servers/game/logic/player_equip.go +++ b/servers/game/logic/player_equip.go @@ -65,17 +65,17 @@ func (this *Player) AddEquip(equipId uint32, logType LogType) bool { return this.addEquip(equipTable, logType) } -func (this *Player) AddEquips(equipId, nums uint32, logType LogType) { +func (this *Player) AddEquips(equipId, nums uint32, logType LogType) bool { var equipTable = this.manager.tables.Equip.Find(int(equipId)) if equipTable == nil { this.manager.logger.Errorf("Find equip table failed, equipId: %d, level: %d", equipId, 1) - return + return false } var equipLevelTable = this.manager.tables.EquipLevel.Find3(equipTable.Id, 1) if equipLevelTable == nil { this.manager.logger.Errorf("Find equip level table failed, equipId %d, level: %d", equipTable.Id, 1) - return + return false } if nums < 1 { @@ -105,43 +105,9 @@ func (this *Player) AddEquips(equipId, nums uint32, logType LogType) { _ = this.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemEquipChange), &pb.EquipChangeListAck{ ChangeList: changeList, }) + return true } -//func (this *Player) SetupRigEquip(index uint32, equip *PlayerRigEquip) { -// var list []*proto.RigEquipChange -// var setupId = this.Rig.Equips[index] -// if equip == nil { -// if setupId == 0 { -// return -// } -// this.Rig.Equips[index] = 0 -// } else { -// this.Rig.Equips[index] = equip.ItemId -// -// equip.Setup = true -// this.SaveModel(equip) -// -// list = append(list, &proto.RigEquipChange{RigEquip: equip.BuildMsgRigEquip(), ChangeType: uint32(proto.ChangeTypeChange)}) -// } -// -// this.SaveField("rig.equips", this.Rig.Equips) -// -// if setupId > 0 { -// if setupEquip := this.RigEquip[setupId]; setupEquip != nil { -// setupEquip.Setup = false -// this.SaveModel(setupEquip) -// -// list = append(list, &proto.RigEquipChange{RigEquip: setupEquip.BuildMsgRigEquip(), ChangeType: uint32(proto.ChangeTypeChange)}) -// } -// } -// -// _ = this.Send(proto.ModIdRig, proto.MsgIdRigEquipChange, &proto.MsgRigEquipChangeListAck{ -// List: list, -// }) -// -// this.UpdateRigAttrs() -//} - func (this *Player) BuildMsgEquipListAck() *pb.EquipListAck { var list []*pb.Equip for _, equip := range this.Equip { diff --git a/servers/game/logic/player_function_open.go b/servers/game/logic/player_function_open.go index 4d24208..543e88b 100644 --- a/servers/game/logic/player_function_open.go +++ b/servers/game/logic/player_function_open.go @@ -1,7 +1,9 @@ package logic -func (this *Player) CheckFunctionOpen(funcMod, funcType, funcId int) bool { - var functionOpen = this.manager.tables.FunctionOpen.Find2(funcMod, funcType, funcId) +import "ecs/proto/pb" + +func (this *Player) CheckFunctionOpen(funcMod pb.ModId, funcType pb.FuncType, funcId int) bool { + var functionOpen = this.manager.tables.FunctionOpen.Find2(int(funcMod), int(funcType), funcId) if functionOpen == nil { return true } @@ -13,7 +15,7 @@ func (this *Player) CheckFunctionOpen(funcMod, funcType, funcId int) bool { continue case 1: if functionOpen.UnlockArgs[i] > 0 { - if this.RoleLevel < uint32(functionOpen.UnlockArgs[i]) { + if this.RoleHero.Level < uint32(functionOpen.UnlockArgs[i]) { yes = false } } diff --git a/servers/game/logic/player_hero.go b/servers/game/logic/player_hero.go index 057e15c..46b421f 100644 --- a/servers/game/logic/player_hero.go +++ b/servers/game/logic/player_hero.go @@ -197,17 +197,26 @@ func (this *Player) calcHeroBondAttrs(hero *PlayerHero, lineup *PlayerLineup, li bondIdMap[bondId] = struct{}{} } - for lhi := range lineup.Heroes { + for hi := range lineup.Heroes { if lineup.Heroes[i] == nil { continue } - if another, ok := this.Hero[lineup.Heroes[lhi].HeroUid]; ok { + if another, ok := this.Hero[lineup.Heroes[hi].HeroUid]; ok { delete(bondIdMap, int(another.Id)) } } - //所有羁绊英雄要全部上阵 + for hi := range lineup.Helper { + if lineup.Helper[hi] == 0 { + continue + } + + if helper, ok := this.Hero[lineup.Helper[hi]]; ok { + delete(bondIdMap, int(helper.Id)) + } + } + yes = len(bondIdMap) == 0 } if yes { @@ -247,9 +256,9 @@ func (this *Player) calcHeroTreasuresAttrs(hero *PlayerHero, lineup *PlayerLineu } var treasure = this.Treasure[treasureUid] - var equipLevelTable = this.manager.tables.TreasureLevel.Find3(int(treasure.Id), int(treasure.Level)) - if equipLevelTable != nil { - attrs[equipLevelTable.AttrType] += uint64(equipLevelTable.AttrValue) + var treasureLevelTable = this.manager.tables.TreasureLevel.Find3(int(treasure.Id), int(treasure.Level)) + if treasureLevelTable != nil { + attrs[treasureLevelTable.AttrType] += uint64(treasureLevelTable.AttrValue) } } return diff --git a/servers/game/logic/player_item.go b/servers/game/logic/player_item.go index 4555044..087314e 100644 --- a/servers/game/logic/player_item.go +++ b/servers/game/logic/player_item.go @@ -15,18 +15,19 @@ func (this *PlayerItem) BuildMsgItem() *pb.Item { return &pb.Item{ItemId: this.Id, ItemNum: this.Num} } -func (this *Player) addItem(itemTable *data.Item, itemNum uint32, logType LogType) *pb.ItemChange { +func (this *Player) addItemDirect(itemTable *data.Item, itemNum uint32, logType LogType) *pb.ItemChange { var changeType = pb.ChangeType_Changed var item = this.Item[uint32(itemTable.Id)] + if item == nil { - item = &PlayerItem{Id: uint32(itemTable.Id)} + item = &PlayerItem{Id: uint32(itemTable.Id), Num: itemNum} this.Item[item.Id] = item changeType = pb.ChangeType_Add + } else { + item.Num += itemNum } - item.Num += itemNum - this.SaveModel(item) //this.CheckTask(proto.TaskSection1CollectSpecificItem, itemTable.Id, int(itemNum)) @@ -38,6 +39,43 @@ func (this *Player) addItem(itemTable *data.Item, itemNum uint32, logType LogTyp return &pb.ItemChange{ChangeType: changeType, Item: item.BuildMsgItem()} } +func (this *Player) addItem(itemTable *data.Item, itemNum uint32, logType LogType) (itemChange *pb.ItemChange, ok bool) { + switch pb.ItemType(itemTable.Type) { + case pb.ItemType_ItemProp: + itemChange = this.addItemDirect(itemTable, itemNum, logType) + case pb.ItemType_ItemMoney: + ok = this.AddMoney(pb.MoneyType(itemTable.SubType), itemNum, logType) + case pb.ItemType_ItemHero: + if pb.HeroType(itemTable.SubType) == pb.HeroType_HeroPiece { + itemChange = this.addItemDirect(itemTable, itemNum, logType) + } else { + ok = this.AddHero(uint32(itemTable.Value)) + } + case pb.ItemType_ItemEquip: + if pb.EquipType(itemTable.SubType) == pb.EquipType_EquipPiece { + itemChange = this.addItemDirect(itemTable, itemNum, logType) + } else { + this.AddEquips(uint32(itemTable.Id), itemNum, logType) + } + case pb.ItemType_ItemTreasure: + if pb.TreasureType(itemTable.SubType) == pb.TreasureType_TreasurePiece { + itemChange = this.addItemDirect(itemTable, itemNum, logType) + } else { + this.AddTreasures(uint32(itemTable.Id), itemNum, logType) + } + case pb.ItemType_ItemArtifact: + case pb.ItemType_ItemSack: + case pb.ItemType_ItemOrnament: + case pb.ItemType_ItemFateChart: + case pb.ItemType_ItemGem: + case pb.ItemType_ItemArtifactGem: + case pb.ItemType_ItemAwakenProp: + case pb.ItemType_ItemGeneral: + case pb.ItemType_ItemTetris: + } + return +} + func (this *Player) useItem(itemTable *data.Item, itemNum uint32, logType LogType) bool { switch pb.ItemType(itemTable.Type) { case pb.ItemType_ItemMoney: @@ -50,7 +88,7 @@ func (this *Player) useItem(itemTable *data.Item, itemNum uint32, logType LogTyp } func (this *Player) AddItem(itemId, itemNum uint32, logType LogType) bool { - var itemTable = this.manager.tables.Item.Get(int(itemId)) + var itemTable = this.manager.tables.Item.Find1(int(itemId)) if itemTable == nil { this.manager.logger.Error("Find item table failed, itemId: ", itemId) return false @@ -60,30 +98,11 @@ func (this *Player) AddItem(itemId, itemNum uint32, logType LogType) bool { return this.useItem(itemTable, itemNum, logType) } - var itemChange *pb.ItemChange - switch pb.ItemType(itemTable.Type) { - case pb.ItemType_ItemProp: - itemChange = this.addItem(itemTable, itemNum, logType) - case pb.ItemType_ItemMoney: - this.AddMoney(pb.MoneyType(itemTable.SubType), itemNum, logType) - case pb.ItemType_ItemEquip: - this.AddEquips(uint32(itemTable.Id), itemNum, logType) - case pb.ItemType_ItemTreasure: - case pb.ItemType_ItemArtifact: - case pb.ItemType_ItemSack: - case pb.ItemType_ItemOrnament: - case pb.ItemType_ItemFateChart: - case pb.ItemType_ItemGem: - case pb.ItemType_ItemArtifactGem: - case pb.ItemType_ItemAwakenProp: - case pb.ItemType_ItemGeneral: - case pb.ItemType_ItemTetris: - } - + itemChange, ok := this.addItem(itemTable, itemNum, logType) if itemChange != nil { _ = this.Send(uint16(pb.ModId_ModuleItem), uint16(pb.MsgId_ModItemChange), &pb.ItemChangeListAck{ChangeList: []*pb.ItemChange{itemChange}}) } - return true + return ok } func (this *Player) AddItems(itemMap map[uint32]uint32, logType LogType) { @@ -98,26 +117,7 @@ func (this *Player) AddItems(itemMap map[uint32]uint32, logType LogType) { if itemTable.UseDirect { this.useItem(itemTable, itemNum, logType) } else { - var itemChange *pb.ItemChange - switch pb.ItemType(itemTable.Type) { - case pb.ItemType_ItemMoney: - this.AddMoney(pb.MoneyType(itemTable.SubType), itemNum, logType) - case pb.ItemType_ItemProp: - itemChange = this.addItem(itemTable, itemNum, logType) - case pb.ItemType_ItemEquip: - this.AddEquips(uint32(itemTable.Id), itemNum, logType) - case pb.ItemType_ItemTreasure: - case pb.ItemType_ItemArtifact: - case pb.ItemType_ItemSack: - case pb.ItemType_ItemOrnament: - case pb.ItemType_ItemFateChart: - case pb.ItemType_ItemGem: - case pb.ItemType_ItemArtifactGem: - case pb.ItemType_ItemAwakenProp: - case pb.ItemType_ItemGeneral: - case pb.ItemType_ItemTetris: - } - + itemChange, _ := this.addItem(itemTable, itemNum, logType) if itemChange != nil { changeList = append(changeList, itemChange) } diff --git a/servers/game/logic/player_lineup.go b/servers/game/logic/player_lineup.go index c52a2d2..39fbdbb 100644 --- a/servers/game/logic/player_lineup.go +++ b/servers/game/logic/player_lineup.go @@ -9,7 +9,8 @@ type PlayerLineup struct { Uid uint64 `json:"uid" key:"1"` Name string `bson:"name"` Active bool `bson:"active"` - Heroes [8]*PlayerLineupHero `json:"heroes"` + Heroes [8]*PlayerLineupHero `bson:"heroes"` + Helper [8]uint64 `bson:"helper"` } func (this *PlayerLineup) BuildMsgLineup() *pb.Lineup { @@ -21,6 +22,9 @@ func (this *PlayerLineup) BuildMsgLineup() *pb.Lineup { msg.HeroList[i] = hero.BuildMsgLineupHero(uint32(i)) } } + for _, helper := range this.Helper { + msg.HelpList = append(msg.HelpList, helper) + } } return msg } diff --git a/servers/game/logic/player_money.go b/servers/game/logic/player_money.go index c5f3f22..fb12fc0 100644 --- a/servers/game/logic/player_money.go +++ b/servers/game/logic/player_money.go @@ -24,7 +24,7 @@ func (this *Player) GetMoney(moneyType pb.MoneyType) *PlayerMoney { return money } -func (this *Player) AddMoney(moneyType pb.MoneyType, value uint32, logType LogType) { +func (this *Player) AddMoney(moneyType pb.MoneyType, value uint32, logType LogType) bool { switch moneyType { case pb.MoneyType_Exp: this.addExp(value, logType) @@ -33,6 +33,7 @@ func (this *Player) AddMoney(moneyType pb.MoneyType, value uint32, logType LogTy default: this.addMoney(moneyType, value, logType) } + return true } func (this *Player) CheckMoney(moneyType pb.MoneyType, value uint32) (bool, proto.TipError) { @@ -134,11 +135,6 @@ func (this *Player) addExp(value uint32, logType LogType) { roleHero.Level = curLevel this.SaveModel(roleHero) - this.RoleExp = roleHero.Exp - this.RoleLevel = roleHero.Level - this.SaveField("role_exp", this.RoleExp) - this.SaveField("role_level", this.RoleLevel) - _ = this.Send(uint16(pb.MsgId_ModHeroChange), uint16(pb.MsgId_ModHeroChange), &pb.HeroChangeListAck{ ChangeList: []*pb.HeroChange{{ChangeType: pb.ChangeType_Changed, Hero: roleHero.BuildMsgHero()}}, }) diff --git a/servers/game/logic/player_treasure.go b/servers/game/logic/player_treasure.go index f9fe4e2..79bb321 100644 --- a/servers/game/logic/player_treasure.go +++ b/servers/game/logic/player_treasure.go @@ -17,6 +17,10 @@ func (this *PlayerTreasure) BuildMsgTreasure() *pb.Treasure { } } +func (this *Player) AddTreasures(equipId, nums uint32, logType LogType) bool { + return false +} + func (this *Player) BuildMsgTreasureListAck() *pb.TreasureListAck { var list []*pb.Treasure for _, treasure := range this.Treasure { diff --git a/servers/game/server.go b/servers/game/server.go index dde8355..3f50512 100644 --- a/servers/game/server.go +++ b/servers/game/server.go @@ -162,6 +162,7 @@ func (this *gameServer) Init() (err error) { this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroMounts), this.playerHandler.LineupHeroMounts) this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroGeneral), this.playerHandler.LineupHeroGeneral) this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHeroOrnament), this.playerHandler.LineupHeroOrnament) + this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupHelperChange), this.playerHandler.LineupHelperChange) this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupCreate), this.playerHandler.LineupCreate) this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupChangeName), this.playerHandler.LineupChangeName) this.playerManager.Handler(uint16(pb.ModId_ModuleRole), uint16(pb.MsgId_ModRoleLineupActivate), this.playerHandler.LineupActivate)