From 0d44de2ea7774d54ff90fc4471f864ec3fe9b9ad Mon Sep 17 00:00:00 2001 From: xinian Date: Fri, 13 Mar 2026 12:04:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DPVP=E8=B5=9B=E5=AD=A3?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/rpc/user.go | 6 +++--- common/utils/help.go | 16 ++++++++++++++++ modules/player/model/pvp.go | 12 +++++------- modules/player/service/info.go | 3 ++- modules/player/service/pet.go | 8 +++++++- modules/player/service/talk.go | 3 ++- modules/player/service/task.go | 15 --------------- 7 files changed, 35 insertions(+), 28 deletions(-) diff --git a/common/rpc/user.go b/common/rpc/user.go index db541cbb6..25649736d 100644 --- a/common/rpc/user.go +++ b/common/rpc/user.go @@ -22,16 +22,16 @@ func (r *RPCfight) join(pvp info.RPCFightinfo) { ret := service.NewPVPService(pvp.PlayerID).Get(pvp.PlayerID) score := 800 if ret != nil { - score = int(ret.RankInfo.Score) + score = int(ret.RankInfo[len(ret.RankInfo)-1].Score) } r.zs.Add(pvp.PlayerID, ret) if r.zs.Length() > 2 { - u, s := r.zs.FindPrev(func(i *model.PVP) bool { return i.RankInfo.Score > score }) + u, s := r.zs.FindPrev(func(i *model.PVP) bool { return i.RankInfo[len(ret.RankInfo)-1].Score > score }) diff := s - score // 等待越久,允许区间越大 - wait := time.Now().Sub(u.RankInfo.LastMatchTime.Time).Seconds() + wait := time.Now().Sub(u.RankInfo[len(ret.RankInfo)-1].LastMatchTime.Time).Seconds() maxAllow := 100 + int(wait)*10 if diff < maxAllow { //找到上一个,如果区间分数少于一定, diff --git a/common/utils/help.go b/common/utils/help.go index 799f33c88..b35cf44be 100644 --- a/common/utils/help.go +++ b/common/utils/help.go @@ -6,10 +6,26 @@ import ( "math/rand/v2" "time" + "github.com/gogf/gf/v2/os/gtime" "github.com/gogf/gf/v2/util/gconv" "github.com/gogf/gf/v2/util/grand" ) +// IsToday 判断给定时间是否是今天 +func IsToday(t1 *gtime.Time) bool { + if t1 == nil { + return false + } + t := t1.Time + + // 获取当前时间 + now := time.Now() + + // 比较年、月、日是否相同 + return t.Year() == now.Year() && + t.Month() == now.Month() && + t.Day() == now.Day() +} func FindWithIndex[T any](slice []T, predicate func(item T) bool) (int, *T, bool) { for i := range slice { if predicate(slice[i]) { diff --git a/modules/player/model/pvp.go b/modules/player/model/pvp.go index 85d5f791d..53d1137e0 100644 --- a/modules/player/model/pvp.go +++ b/modules/player/model/pvp.go @@ -15,10 +15,8 @@ const TableNamePlayerPVP = "player_pvp" type PVP struct { *cool.Model PlayerID uint64 `gorm:"not null;index:idx_pvp_player_id;comment:'所属玩家ID'" json:"player_id"` - - SeasonData []PVPRankInfo `gorm:"type:jsonb;not null;comment:'赛季核心数据'" json:"season_data"` - - RankInfo PVPRankInfo `gorm:"type:jsonb;not null;comment:'本赛季排名信息'" json:"rank_info"` + //本赛季排名信息'通过下标来确认当前赛季 + RankInfo []PVPRankInfo `gorm:"type:jsonb;not null;comment:'赛季核心数据'" json:"season_data"` } func (u *PVP) Key() uint32 { @@ -27,10 +25,10 @@ func (u *PVP) Key() uint32 { // 如果分数不对的话,就按时间排序 func (u *PVP) Less(than *PVP) bool { - if u.RankInfo.Score == than.RankInfo.Score { - return u.RankInfo.LastMatchTime.Unix() < than.RankInfo.LastMatchTime.Unix() + if u.RankInfo[len(u.RankInfo)-1].Score == than.RankInfo[len(u.RankInfo)-1].Score { + return u.RankInfo[len(u.RankInfo)-1].LastMatchTime.Unix() < than.RankInfo[len(u.RankInfo)-1].LastMatchTime.Unix() } - return u.RankInfo.Score < than.RankInfo.Score + return u.RankInfo[len(u.RankInfo)-1].Score < than.RankInfo[len(u.RankInfo)-1].Score } func NewPVP() *PVP { return &PVP{ diff --git a/modules/player/service/info.go b/modules/player/service/info.go index ecd1d98dd..e58aa7276 100644 --- a/modules/player/service/info.go +++ b/modules/player/service/info.go @@ -2,6 +2,7 @@ package service import ( "blazing/common/data/share" + "blazing/common/utils" "blazing/cool" "blazing/modules/config/service" "blazing/modules/player/model" @@ -93,7 +94,7 @@ func (s *InfoService) GetLogin() *model.PlayerInfo { } - if !IsToday(tt.LastResetTime) && cool.Config.ServerInfo.IsVip == 0 { //判断是否是今天 + if !utils.IsToday(tt.LastResetTime) && cool.Config.ServerInfo.IsVip == 0 { //判断是否是今天 //每天login时候检查重置时间,然后把电池,任务,挖矿重置 //挖矿需要单独存,因为防止多开挖矿 diff --git a/modules/player/service/pet.go b/modules/player/service/pet.go index ab639e04a..a97a08f30 100644 --- a/modules/player/service/pet.go +++ b/modules/player/service/pet.go @@ -1,6 +1,7 @@ package service import ( + "blazing/common/utils" "blazing/cool" basemodel "blazing/modules/base/model" "blazing/modules/base/service" @@ -56,7 +57,11 @@ func (s *PetService) UPdatePrice(ctime uint32, Price uint32, is_sale uint32) err return fmt.Errorf("精灵数量已满") } } - + var p model.Pet + s.dbm(s.Model).Where("catch_time", ctime).Scan(&p) + if p.SalePrice != Price && utils.IsToday(p.UpdateTime) { //说明要修改价格 + return fmt.Errorf("一天只允许改价一次") + } res0, err := s.dbm(s.Model). Where("catch_time", ctime). // 限定 ctime,避免全表更新 Where("sale_price = ?", 0). // 只筛选 sale_price=0 的记录 @@ -145,6 +150,7 @@ RETURNING max_ts; player.Data = tt.Data player.CatchTime = tt.CatchTime player.Free = 0 + player.SalePrice = tt.SalePrice player.SaleCount = tt.SaleCount + 1 player.IsVip = cool.Config.ServerInfo.IsVip diff --git a/modules/player/service/talk.go b/modules/player/service/talk.go index 864cd8525..23e17481e 100644 --- a/modules/player/service/talk.go +++ b/modules/player/service/talk.go @@ -1,6 +1,7 @@ package service import ( + "blazing/common/utils" "blazing/cool" config "blazing/modules/config/service" "blazing/modules/player/model" @@ -35,7 +36,7 @@ func (s *TalkService) Cheak(mapid uint32, flag int) (int, bool) { } //因为这个是挖一次更新一次,而且是实时更新的,如果更新日期是今天,那么就可以确认不用再重置,否则就需要重置挖矿记录 - if !IsToday(talks.UpdateTime) { + if !utils.IsToday(talks.UpdateTime) { talks.Count = 0 m1.Save(talks) diff --git a/modules/player/service/task.go b/modules/player/service/task.go index 35da22cb5..7bc8d224b 100644 --- a/modules/player/service/task.go +++ b/modules/player/service/task.go @@ -65,21 +65,6 @@ func (s *TaskService) Exec(id uint32, t func(*model.Task) bool) { } -// IsToday 判断给定时间是否是今天 -func IsToday(t1 *gtime.Time) bool { - if t1 == nil { - return false - } - t := t1.Time - - // 获取当前时间 - now := time.Now() - - // 比较年、月、日是否相同 - return t.Year() == now.Year() && - t.Month() == now.Month() && - t.Day() == now.Day() -} func IsWEEK(t1 *gtime.Time) bool { if t1 == nil { return false