diff --git a/common/contrib/drivers/mysql/go.mod b/common/contrib/drivers/mysql/go.mod index 975127867..368185fd1 100644 --- a/common/contrib/drivers/mysql/go.mod +++ b/common/contrib/drivers/mysql/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.3 - github.com/gogf/gf/v2 v2.6.3 + github.com/gogf/gf/v2 v2.7.0 gorm.io/driver/mysql v1.5.4 gorm.io/gorm v1.25.7 ) diff --git a/common/go.mod b/common/go.mod index 34af8cdb3..7e13d76f5 100644 --- a/common/go.mod +++ b/common/go.mod @@ -4,7 +4,7 @@ go 1.19 require github.com/panjf2000/gnet v1.6.7 -require github.com/gogf/gf/v2 v2.6.3 +require github.com/gogf/gf/v2 v2.7.0 require github.com/antchfx/xmlquery v1.4.4 diff --git a/logic/controller/fight.go b/logic/controller/fight.go index 12663f1d2..06b2cb9c1 100644 --- a/logic/controller/fight.go +++ b/logic/controller/fight.go @@ -74,6 +74,7 @@ func (h Controller) PlayerFightBoss(data *fight.ChallengeBossInboundInfo, c *pla } moinfo.Nick = xmlres.PetMAP[int(mo.ID)].DefName + break } } diff --git a/logic/controller/item.go b/logic/controller/item.go index 505a72a13..1d57fc183 100644 --- a/logic/controller/item.go +++ b/logic/controller/item.go @@ -17,15 +17,14 @@ func (h Controller) UserItemList(data *item.ItemListInboundInfo, c *player.Playe result = &item.ItemListOutboundInfo{} result.ItemList = make([]model.SingleItemInfo, 0) - c.Service.Item(func(m map[uint32]model.SingleItemInfo) bool { - for _, v := range m { - if int32(v.ItemId) >= int32(data.Param1) && int32(v.ItemId) <= int32(data.Param2) { - v.LeftTime = 360000 - result.ItemList = append(result.ItemList, v) - } - } - return false - }) + item := c.Service.Item(data.Param1, data.Param2) + for _, v := range item { + var vv model.SingleItemInfo + vv.ItemId = v.ItemId + vv.ItemCnt = v.ItemCnt + vv.LeftTime = 360000 + result.ItemList = append(result.ItemList, vv) + } return result, 0 } diff --git a/logic/controller/login.go b/logic/controller/login.go index 2d19867f3..2b01933ec 100644 --- a/logic/controller/login.go +++ b/logic/controller/login.go @@ -83,10 +83,7 @@ func (h *Controller) Login(data *user.MAIN_LOGIN_IN, c gnet.Conn) (result *user. t.Info.DailyResArr[i] = 0 //重置每日任务 } - defer t.Service.Talk(func(m map[uint32]uint32) bool { //挖矿 - m = map[uint32]uint32{} - return true - }) + defer t.Service.Talk_Reset() } diff --git a/logic/controller/pet.go b/logic/controller/pet.go index 1e5d93110..f04cac3d4 100644 --- a/logic/controller/pet.go +++ b/logic/controller/pet.go @@ -81,7 +81,7 @@ func (h *Controller) PetRelease( if removeIndex != -1 { c.Service.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) { t.Data = c.Info.PetList[removeIndex] - t.InBag = int(data.Flag) + t.InBag = 0 }) c.Info.PetList = append(c.Info.PetList[:removeIndex], c.Info.PetList[removeIndex+1:]...) @@ -90,6 +90,7 @@ func (h *Controller) PetRelease( case 1: //todo 背包 c.Service.PetInfo_One_exec(data.CatchTime, func(t *model.PetEX) { + t.InBag = 1 c.Info.PetList = append(c.Info.PetList, t.Data) result.PetInfo = t.Data diff --git a/logic/service/player/player.go b/logic/service/player/player.go index 7bc37a5a0..f8501d334 100644 --- a/logic/service/player/player.go +++ b/logic/service/player/player.go @@ -233,41 +233,34 @@ func (p *Player) ItemAdd(t ...model.SingleItemInfo) (result []model.SingleItemIn } - p.Service.Item(func(rer map[uint32]model.SingleItemInfo) bool { + for _, v := range ttt { + itemx, ok := xmlres.ItemsMAP[int(v.ItemId)] + if !ok { + cool.Loger.Error(context.TODO(), "物品不存在", v.ItemId) - for _, v := range ttt { - itemx, ok := xmlres.ItemsMAP[int(v.ItemId)] - if !ok { - cool.Loger.Error(context.TODO(), "物品不存在", v.ItemId) - - t1 := NewTomeeHeader(2601, p.Info.UserID) - t1.Result = uint32(errorcode.ErrorCodes.ErrBaseItemTypeLimit) - - p.SendPack(t1.Pack(nil)) //准备包由各自发,因为协议不一样 - continue - } - itemm, ok := rer[v.ItemId] - - if !ok { - rer[v.ItemId] = v - result = append(result, v) - continue - } - itemm.ItemCnt += v.ItemCnt - if itemm.ItemCnt > uint32(itemx.Max) { - cool.Loger.Error(context.TODO(), "物品超过拥有最大限制", v.ItemId) - t1 := NewTomeeHeader(2601, p.Info.UserID) - t1.Result = uint32(errorcode.ErrorCodes.ErrTooManyOfItem) - - p.SendPack(t1.Pack(nil)) //准备包由各自发,因为协议不一样 - continue - } - result = append(result, v) - rer[v.ItemId] = itemm + t1 := NewTomeeHeader(2601, p.Info.UserID) + t1.Result = uint32(errorcode.ErrorCodes.ErrBaseItemTypeLimit) + p.SendPack(t1.Pack(nil)) //准备包由各自发,因为协议不一样 + continue } - return true - }) + if itemx.Max == 0 { + itemx.Max = 1 + } + + if p.Service.CheakItem(v.ItemId)+v.ItemCnt > uint32(itemx.Max) { + cool.Loger.Error(context.TODO(), "物品超过拥有最大限制", v.ItemId) + t1 := NewTomeeHeader(2601, p.Info.UserID) + t1.Result = uint32(errorcode.ErrorCodes.ErrTooManyOfItem) + + p.SendPack(t1.Pack(nil)) //准备包由各自发,因为协议不一样 + continue + } + p.Service.AddItem(v.ItemId, v.ItemCnt) + result = append(result, v) + + } + return } diff --git a/login/go.mod b/login/go.mod index 98c66f75a..c12d73312 100644 --- a/login/go.mod +++ b/login/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/gogf/gf/contrib/nosql/redis/v2 v2.6.3 - github.com/gogf/gf/v2 v2.6.3 + github.com/gogf/gf/v2 v2.7.0 ) require ( diff --git a/modules/base/service/base_sys_user.go b/modules/base/service/base_sys_user.go index 45c3911a5..d018b302c 100644 --- a/modules/base/service/base_sys_user.go +++ b/modules/base/service/base_sys_user.go @@ -91,6 +91,20 @@ func (s *BaseSysUserService) ServiceAdd(ctx context.Context, req *cool.AddReq) ( if !r.Get("password").IsNil() { reqmap["password"] = gmd5.MustEncryptString(r.Get("password").String()) } + if s.UniqueKey != nil { + for k, v := range s.UniqueKey { + if reqmap[k] != nil { + count, err := cool.DBM(s.Model).Where(k, reqmap[k]).Count() + if err != nil { + return nil, err + } + if count > 0 { + err = gerror.New(v) + return nil, err + } + } + } + } lastInsertId, err := m.Data(reqmap).InsertAndGetId() if err != nil { return diff --git a/modules/blazing/controller/admin/monster_get.go b/modules/blazing/controller/admin/monster_get.go index dca08f2ea..6fc91ffb0 100644 --- a/modules/blazing/controller/admin/monster_get.go +++ b/modules/blazing/controller/admin/monster_get.go @@ -42,6 +42,7 @@ func (c *PetBagController) GetSession(ctx context.Context, req *PetGetReq) (res ) t := model.GenPetInfo( req.PetTypeId, req.IndividualValue, req.NatureId, req.AbilityTypeEnum, req.IsShiny, req.Level) + service.NewUserService(uint32(admin.UserId)).PetAdd(*t) return diff --git a/modules/blazing/model/item.go b/modules/blazing/model/item.go index 3d7ab6b38..424a4ba1a 100644 --- a/modules/blazing/model/item.go +++ b/modules/blazing/model/item.go @@ -10,11 +10,10 @@ const TableNamePlayerBagItem = "player_bag_item" type Item struct { *cool.Model PlayerID uint64 `gorm:"not null;index:idx_player_bag_item_by_player_id;comment:'所属玩家ID'" json:"player_id"` - Data string ` gorm:"type:text;not null;comment:'全部数据'" json:"data"` -} -type ItemEX struct { - Item - Data map[uint32]SingleItemInfo `orm:"data" json:"data"` + // 物品Id, + ItemId uint32 `json:"item_id"` + // 物品数量, + ItemCnt uint32 `json:"item_cnt"` } type SingleItemInfo struct { diff --git a/modules/blazing/model/pet.go b/modules/blazing/model/pet.go index d36a99793..e9b7e10a3 100644 --- a/modules/blazing/model/pet.go +++ b/modules/blazing/model/pet.go @@ -22,7 +22,7 @@ type Pet struct { // FreedTime uint32 `struc:"skip"` //放生时间 //是否可交易,这里应该定义在精灵ID里 //是否上架 - Data string `gorm:"type:text;not null;comment:'精灵全部数据'" json:"data"` + Data string `gorm:"type:jsonb;not null;comment:'精灵全部数据'" json:"data"` } type PetEX struct { Pet @@ -63,45 +63,17 @@ type PetInfo struct { MaxHp uint32 `fieldDesc:"最大生命" ` // * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5) Prop [5]uint32 `fieldDesc:"属性" ` - // // 攻击(@UInt long → uint32) - // Attack uint32 `fieldDesc:"攻击" ` - // // 防御(@UInt long → uint32) - // Defence uint32 `fieldDesc:"防御" ` + // * ev:生命学习力,攻击学习力,防御学习力,特攻学习力,特防学习力,速度学习力 + Ev [6]uint32 `fieldDesc:"属性" ` - // // 特攻(@UInt long → uint32) - // SpecialAttack uint32 `fieldDesc:"特攻" ` - - // // 特防(@UInt long → uint32) - // SpecialDefence uint32 `fieldDesc:"特防" ` - - // // 速度(@UInt long → uint32) - // Speed uint32 `fieldDesc:"速度" ` - - // 生命学习力(@UInt long → uint32) - EvHp uint32 `fieldDesc:"生命学习力" ` - - // 攻击学习力(@UInt long → uint32) - EvAttack uint32 `fieldDesc:"攻击学习力" ` - - // 防御学习力(@UInt long → uint32) - EvDefence uint32 `fieldDesc:"防御学习力" ` - - // 特攻学习力(@UInt long → uint32) - EvSpecialAttack uint32 `fieldDesc:"特攻学习力" ` - - // 特防学习力(@UInt long → uint32,注意原Java拼写:evSpecialDefense) - EvSpecialDefense uint32 `fieldDesc:"特防学习力" ` - - // 速度学习力(@UInt long → uint32) - EvSpeed uint32 `fieldDesc:"速度学习力" ` SkillListLen uint32 `struc:"sizeof=SkillList"` // 技能信息:固定4条,空则赋值0(固定长度List → [4]SkillInfo,零值即符合“赋值0”) SkillList []SkillInfo // 捕捉时间(@UInt long → 若为时间戳用uint32;若需时间类型可改为time.Time,需配合序列化处理) - CatchTime uint32 `fieldDesc:"捕捉时间" ` + CatchTime uint32 //`json:"-"` // 显式忽略,不参与序列化 // 捕捉地图(@UInt long → uint32) CatchMap uint32 `fieldDesc:"捕捉地图" ` diff --git a/modules/blazing/model/petinfo.go b/modules/blazing/model/petinfo.go index 8d5d9ead2..fc476f1e3 100644 --- a/modules/blazing/model/petinfo.go +++ b/modules/blazing/model/petinfo.go @@ -38,14 +38,14 @@ func (p *PetInfo) CalculatePetPane() { uint32(petxml.HP), p.Dv, p.Level, - p.EvHp, + p.Ev[0], ) // * battle_lv: atk(0), def(1), sp_atk(2), sp_def(3), spd(4), accuracy(5) p.Prop[0] = p.calculatePetPanelSize( uint32(petxml.Atk), p.Dv, p.Level, - p.EvAttack, + p.Ev[1], naxml.AttackCorrect, ) @@ -53,7 +53,7 @@ func (p *PetInfo) CalculatePetPane() { uint32(petxml.Def), p.Dv, p.Level, - p.EvDefence, + p.Ev[2], naxml.DefenseCorrect, ) @@ -61,7 +61,7 @@ func (p *PetInfo) CalculatePetPane() { uint32(petxml.SpAtk), p.Dv, p.Level, - p.EvSpecialAttack, + p.Ev[3], naxml.SaCorrect, ) @@ -69,7 +69,7 @@ func (p *PetInfo) CalculatePetPane() { uint32(petxml.SpDef), p.Dv, p.Level, - p.EvSpecialDefense, + p.Ev[4], naxml.SdCorrect, ) @@ -77,7 +77,7 @@ func (p *PetInfo) CalculatePetPane() { uint32(petxml.Spd), p.Dv, p.Level, - p.EvSpeed, + p.Ev[5], naxml.SpeedCorrect, ) diff --git a/modules/blazing/service/item.go b/modules/blazing/service/item.go index 0609aa7ef..dbc207707 100644 --- a/modules/blazing/service/item.go +++ b/modules/blazing/service/item.go @@ -2,32 +2,43 @@ package service import ( "blazing/modules/blazing/model" + + "github.com/gogf/gf/v2/frame/g" ) -func (s *UserService) Item(t func(map[uint32]model.SingleItemInfo) bool) { +func (s *UserService) Item(min, max uint32) []model.Item { //todo待测试 - var player model.ItemEX - m1 := s.Model(s.item.Model) + var ttt []model.Item + s.Model(s.item.Model).Where(g.Map{ + "item_id <=": max, + "item_id >=": min, + }).Scan(&ttt) - err := m1.Scan(&player) - if err != nil { - player.PlayerID = uint64(s.userid) - player.Data = make(map[uint32]model.SingleItemInfo) - _, err := m1.Insert(player) - if err != nil { - panic(err) - } + return ttt +} +func (s *UserService) AddItem(id, count uint32) { + if t, _ := s.Model(s.item.Model).Where("item_id", id).Count(); t != 0 { + s.Model(s.item.Model).Where("item_id", id).Increment("item_cnt", count) + } else { + s.Model(s.item.Model).Data(g.Map{ + "player_id": s.userid, + "item_id": id, + "item_cnt": count, + }).Insert() } - if !t(player.Data) { - return - } - _, err = m1.Update(player) - if err != nil { - panic(err) - } +} +func (s *UserService) SubItem(id, count uint32) { + + s.Model(s.item.Model).Where("item_id", id).Decrement("item_cnt", count) + +} +func (s *UserService) CheakItem(id uint32) uint32 { + var ttt model.Item + s.Model(s.item.Model).Where("item_id", id).Scan(&ttt) + return ttt.ItemCnt } // /添加进来的物品一定是保证存在的 diff --git a/modules/blazing/service/pet.go b/modules/blazing/service/pet.go index 7a26c6f05..4592267b7 100644 --- a/modules/blazing/service/pet.go +++ b/modules/blazing/service/pet.go @@ -16,6 +16,12 @@ func (s *UserService) PetInfo(flag int) []model.PetEX { if err != nil { return []model.PetEX{} } + + for i := 0; i < len(tt); i++ { + tt[i].Data.CatchTime = tt[i].CatchTime + + } + return tt } @@ -25,6 +31,7 @@ func (s *UserService) PetInfo_One_exec(cachetime uint32, t func(*model.PetEX)) { m := cool.DBM(s.pet.Model).Where("player_id", s.userid).Where("catch_time", cachetime) var tt model.PetEX m.Scan(&tt) + tt.Data.CatchTime = tt.CatchTime t(&tt) m.Update(tt) } @@ -33,6 +40,7 @@ func (s *UserService) PetInfo_One(cachetime uint32) model.PetEX { m := cool.DBM(s.pet.Model).Where("player_id", s.userid).Where("catch_time", cachetime) var tt model.PetEX m.Scan(&tt) + tt.Data.CatchTime = tt.CatchTime return tt } func (s *UserService) PetAdd(y model.PetInfo) { @@ -59,6 +67,9 @@ func (s *PetService) ModifyBefore(ctx context.Context, method string, param map[ admin := cool.GetAdmin(ctx) userId := admin.UserId + if 0 != gconv.Uint(param["in_bag"]) { + err = fmt.Errorf("修改失败") + } if userId != gconv.Uint(param["player_id"]) { err = fmt.Errorf("修改失败") } diff --git a/modules/blazing/service/talk.go b/modules/blazing/service/talk.go index d1740f1b2..5f63ba67b 100644 --- a/modules/blazing/service/talk.go +++ b/modules/blazing/service/talk.go @@ -19,3 +19,15 @@ func (s *UserService) Talk(t func(map[uint32]uint32) bool) { } } +func (s *UserService) Talk_Reset() { + + m1 := s.Model(s.talk.Model) + + var talks model.TalkEX + m1.Scan(&talks) + + talks.Data = make(map[uint32]uint32) + + m1.Update(talks) + +} diff --git a/public/config/30001.xml b/public/config/30001.xml new file mode 120000 index 000000000..f5bbc53ad --- /dev/null +++ b/public/config/30001.xml @@ -0,0 +1 @@ +E:/newcode/flash/out/resource/xml/30001.xml \ No newline at end of file diff --git a/public/config/地图配置野怪.xml b/public/config/地图配置野怪.xml index 93bc35e47..3f224e12b 100644 --- a/public/config/地图配置野怪.xml +++ b/public/config/地图配置野怪.xml @@ -1576,7 +1576,7 @@ eg: - @@ -1793,13 +1793,17 @@ eg: - - - - - + + + + + @@ -1917,37 +1921,37 @@ eg: BonusProbability="20" BonusTotalProbability="1000" BonusID="5017" ItemBonusOutID="6" SptLevel="1"> - - - - - - - @@ -3241,31 +3245,31 @@ eg: - + - + - + - + - + - + - + - + - +