From b5eb21686062c78d40d634671c9ed635f53f7258 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 13 Dec 2024 16:16:50 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/GoUtil/GoUtil.go | 2 +- src/server/conf/json.go | 5 ++ src/server/game/GameLogic.go | 2 +- src/server/game/LimitedTimeTrigger.go | 14 ++-- src/server/game/Player.go | 2 +- src/server/game/PlayerBaseMod.go | 11 ++- src/server/game/PlayerChessMod.go | 3 + src/server/game/PlayerFunc.go | 12 +++- src/server/game/RankMgr.go | 3 + src/server/game/RegisterNetworkFunc.go | 67 +++++++++++-------- src/server/game/UnitTest.go | 15 +++++ src/server/game/mod/sevenLogin/SevenLogin.go | 3 + .../game/mod/sevenLogin/SevenLoginFunc.go | 17 +++++ 13 files changed, 118 insertions(+), 38 deletions(-) diff --git a/src/server/GoUtil/GoUtil.go b/src/server/GoUtil/GoUtil.go index 629c3345..6a8a5192 100644 --- a/src/server/GoUtil/GoUtil.go +++ b/src/server/GoUtil/GoUtil.go @@ -195,7 +195,7 @@ func PlayroomTrigger(Time int64, Num int) (int64, int) { Duration = 3600 } if Time+Duration > Now { - return Time, Num + return Time + Duration, Num } Time += Duration Num -= 10 diff --git a/src/server/conf/json.go b/src/server/conf/json.go index 643309ed..48ad99d1 100644 --- a/src/server/conf/json.go +++ b/src/server/conf/json.go @@ -47,6 +47,11 @@ var Server struct { func init() { filePath := "conf/server.json" + if len(os.Args) > 1 { + if os.Args[1] != "" { + filePath = os.Args[1] + } + } file, err := os.Open(filePath) if err != nil { panic(err) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 4b10bef4..46cb58a7 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -646,8 +646,8 @@ func (ad *GameLogic) CreateDailyLogFile() { func (ad *GameLogic) RegisterNetWorkFunc() { RegisterMsgProcessFunc("ReqRemoveAd", ReqRemoveAdFunc) - RegisterMsgProcessFunc("ReqPlayerBriefProfileData", ReqPlayerBriefProfileDataFunc) + RegisterMsgProcessFunc("ReqOfflineReconnect", ReqOfflineReconnectFunc) // 玩家 RegisterMsgProcessFunc("ReqUserInfo", ReqUserInfo) diff --git a/src/server/game/LimitedTimeTrigger.go b/src/server/game/LimitedTimeTrigger.go index 55e317b8..e3e6877b 100644 --- a/src/server/game/LimitedTimeTrigger.go +++ b/src/server/game/LimitedTimeTrigger.go @@ -125,6 +125,8 @@ func LimitedTimeCardTrigger(p *Player) { } if EndTime > 0 { p.CallEvent(time.Duration(EndTime-Now)*time.Second, func() { + p.lock.Lock() + defer p.lock.Unlock() LimitedTimeCardTrigger(p) p.SendClientRes() }, "LimitedTimeCard") @@ -143,9 +145,11 @@ func LimitedTimePlayroomTrigger(p *Player, Id int) { MoodInfo.Num = Num p.PlayMod.save() PlayroomBackData(p) - if NewTime > 0 { - NextSecond := NewTime + 1200 - Now + NextSecond := NewTime + 1200 - Now + if NextSecond > 0 { p.CallEvent(time.Duration(NextSecond)*time.Second, func() { + p.lock.Lock() + defer p.lock.Unlock() LimitedTimePlayroomTrigger(p, Id) p.SendClientRes() }, "Playroom") @@ -163,9 +167,11 @@ func LimitedTimePlayroomWorkTrigger(p *Player) { p.SendClientRes() return } - if EndTime > 0 { - NextSecond := EndTime - GoUtil.Now() + NextSecond := EndTime - GoUtil.Now() + if NextSecond > 0 { p.CallEvent(time.Duration(NextSecond)*time.Second, func() { + p.lock.Lock() + defer p.lock.Unlock() LimitedTimePlayroomWorkTrigger(p) p.SendClientRes() }, "PlayroomWork") diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 5164a74c..7c4bffda 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -183,7 +183,7 @@ func (p *Player) InitPlayer(UserName string) error { p.Msg = make(map[string]PlayerMsg) p.args = make(map[string]interface{}) p.timerList = make(map[string]*timer.Timer) - p.MDispatr = timer.NewDispatcher(10) + p.MDispatr = timer.NewDispatcher(100) p.stopSignal = make(chan bool) p.playerdata = make(map[string]PlayerDataModule) Base := &PlayerBaseData{PlayerData: NewPlayerData(PLAYER_BASE_DATA, p)} diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index 1c034fb6..01d40a0d 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -10,6 +10,7 @@ import ( "server/MergeConst" userCfg "server/conf/user" "server/db" + "server/game/mod/item" "server/game/mod/limitedTimeEvent" "server/game/mod/quest" "server/msg" @@ -621,6 +622,7 @@ func (p *PlayerBaseData) AddExp(exp int) (int, error) { upLv := 0 upExp := userCfg.GetLevUpExp(int(p.Data.Level)) Num := 0 + UpLevelItem := make([]*item.Item, 0) for p.Data.Exp >= int32(upExp) { if Num > 100 { break @@ -636,7 +638,8 @@ func (p *PlayerBaseData) AddExp(exp int) (int, error) { p.M_Player.PushClientRes(DailyTaskMod.BackData()) } upLv = int(p.Data.Level) - + Items := userCfg.GetLevUpReward(upLv) + UpLevelItem = item.Merge(UpLevelItem, Items) // 棋盘背包解锁 p.M_Player.PushClientRes(p.BackAsset()) ChessMod := p.M_Player.PlayMod.getChessMod() @@ -657,6 +660,12 @@ func (p *PlayerBaseData) AddExp(exp int) (int, error) { "property_level_reward": userCfg.GetUnlock(int(p.Data.Level)), }) } + if len(UpLevelItem) > 0 { + err := p.M_Player.HandleItem(UpLevelItem, "LevUpReward") + if err != nil { + return 0, err + } + } p.M_Player.PushClientRes(p.BackAsset()) return upLv, nil diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index d1ae9667..a47b531e 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -99,6 +99,9 @@ func (p *PlayerChessData) UpdateChessData(MChessData map[string]int32) error { return fmt.Errorf("棋子数据不一致") } p.M_Player.PlayMod.getChessMod().ChessMap = MChessData + if p.M_Player.M_DwUin == 200042 { + log.Debug("棋子数据一致, %v---%v", p.Data.MChessData, p.M_Player.PlayMod.getChessMod().GetChessList()) + } return nil } diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index a51000ff..d907a262 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -611,8 +611,8 @@ func GetVisitorPlayer(p *Player) int { }) return PlayerList2[0].Uid } - - return GetRecommendPlayer(p, 1)[0] + L := GetRecommendPlayer(p, 1) + return L[0] } func GetRecommendPlayer(p *Player, Num int) []int { @@ -638,6 +638,14 @@ func GetRecommendPlayer(p *Player, Num int) []int { } PlayerList1 = append(PlayerList1, v.Uid) } + if len(PlayerList1) == 0 { + for _, v := range PlayerList { + if v.Uid == int(p.M_DwUin) { + continue + } + PlayerList1 = append(PlayerList1, v.Uid) + } + } return GoUtil.RandSliceNum(PlayerList1, Num) } diff --git a/src/server/game/RankMgr.go b/src/server/game/RankMgr.go index ba3acf1e..101d0e90 100644 --- a/src/server/game/RankMgr.go +++ b/src/server/game/RankMgr.go @@ -121,6 +121,9 @@ func (r *RankMgr) getRedisRankInfo(m *msg.Msg) (interface{}, error) { if err != nil { return &RankInfo{}, nil } + sort.Slice(RedisList, func(i, j int) bool { // 排序 从大到小 + return RedisList[i].Score > RedisList[j].Score + }) rankList := make([]*Rank, 0) for _, v := range RedisList { rankList = append(rankList, &Rank{ diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 14f790f0..8129c771 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -9,8 +9,8 @@ import ( cardCfg "server/conf/card" mergeDataCfg "server/conf/mergeData" miningCfg "server/conf/mining" - userCfg "server/conf/user" "server/db" + "server/game/internal" "server/game/mod/card" "server/game/mod/friend" "server/game/mod/item" @@ -23,6 +23,7 @@ import ( "server/msg" "strconv" + "server/pkg/github.com/name5566/leaf/gate" "server/pkg/github.com/name5566/leaf/log" "google.golang.org/protobuf/proto" @@ -375,7 +376,7 @@ func ReqDecorate(args []interface{}) error { return err } - UpLev, err := player.GetPlayerBaseMod().AddExp(10) + _, err = player.GetPlayerBaseMod().AddExp(10) if err != nil { player.SendErrClienRes(&msg.ResDecorate{ Code: msg.RES_CODE_FAIL, @@ -397,17 +398,6 @@ func ReqDecorate(args []interface{}) error { player.TeLog("finish_deco", map[string]interface{}{ "deco_step_id": DecorateId, }) - if UpLev > 0 { //升级 获取奖励 - Items := userCfg.GetLevUpReward(UpLev) - err = player.HandleItem(Items, "LevUpReward") - if err != nil { - player.SendErrClienRes(&msg.ResDecorate{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - } player.PlayMod.save() player.PushClientRes(DecorateMod.BackData()) @@ -447,7 +437,7 @@ func ReqDecorateAll(args []interface{}) error { return err } - UpLev, err := player.GetPlayerBaseMod().AddExp(10 * DecorateNum) + _, err = player.GetPlayerBaseMod().AddExp(10 * DecorateNum) if err != nil { player.SendErrClienRes(&msg.ResDecorateAll{ Code: msg.RES_CODE_FAIL, @@ -456,18 +446,6 @@ func ReqDecorateAll(args []interface{}) error { return err } - if UpLev > 0 { //升级 获取奖励 - Items := userCfg.GetLevUpReward(UpLev) - err = player.HandleItem(Items, "LevUpReward") - if err != nil { - player.SendErrClienRes(&msg.ResDecorateAll{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - } - player.TeLog("one_click_decoration", map[string]interface{}{ "deco_step_id": DecorateList, }) @@ -2983,6 +2961,7 @@ func ReqPlayroomDraw(args []interface{}) error { }) return err } + player.args["ResItemPopId"] = Id err = player.HandleItem(Items, "playroomDraw") if err != nil { player.SendErrClienRes(&msg.ResPlayroomDraw{ @@ -2991,9 +2970,9 @@ func ReqPlayroomDraw(args []interface{}) error { }) return err } - player.args["ResItemPopId"] = Id player.PlayMod.save() - PlayroomBackData(player) + // PlayroomBackData(player) + player.PushClientRes(PlayroomMod.NotifyMood()) player.PushClientRes(&msg.ResPlayroomDraw{ Code: msg.RES_CODE_SUCCESS, Id: int32(Id), @@ -3001,6 +2980,7 @@ func ReqPlayroomDraw(args []interface{}) error { return nil } +// 清理碎片 func ReqPlayroomChip(args []interface{}) error { _, player, buf := ParseArgs(args) req := &msg.ReqPlayroomChip{} @@ -3023,6 +3003,7 @@ func ReqPlayroomChip(args []interface{}) error { return nil } +// 翻牌游戏 func ReqPlayroomFlip(args []interface{}) error { _, player, buf := ParseArgs(args) req := &msg.ReqPlayroomFlip{} @@ -3067,3 +3048,33 @@ func ReqPlayroomFlip(args []interface{}) error { }) return nil } + +func ReqOfflineReconnectFunc(args []interface{}) error { + a := args[0].(gate.Agent) + + buf := args[1].([]byte) + + req := &msg.ReqOfflineReconnect{} + proto.Unmarshal(buf, req) + + res := &msg.ResOfflineReconnect{} + res.DwUin = req.DwUin + + if v, ok := G_GameLogicPtr.M_Players.Load(req.DwUin); ok { + player := v.(*Player) + agent := player.GetAgentByPlayer() + if agent != a { + player.SetAgent(a) + internal.AsignPlayerToAgents(a, player) + internal.Agents.Delete(agent) + } + + res.Result = 3 + } else { + res.Result = 2 + } + + data, _ := proto.Marshal(res) + G_GameLogicPtr.PackResInfo(a, "ResOfflineReconnect", data) + return nil +} diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index dc3fbe4a..de6b1c85 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -3,6 +3,7 @@ package game import ( "fmt" "server/game/mod/order" + "server/game/mod/sevenLogin" ) func UnitEndlessReward(p *Player) error { @@ -64,3 +65,17 @@ func UnitChess(p *Player) error { ChargeMod.InitChessShop(Emit) return nil } + +func UnitDecorate(p *Player) error { + PlayerBaseMod := p.GetPlayerBaseMod() + PlayerBaseMod.Data.Level = 6 + PlayerBaseMod.Data.Exp = 50 + PlayerBaseMod.AddExp(100) + return nil +} + +func UnitSevenMonthReward(p *Player) error { + i := sevenLogin.F() + fmt.Print(i) + return nil +} diff --git a/src/server/game/mod/sevenLogin/SevenLogin.go b/src/server/game/mod/sevenLogin/SevenLogin.go index 3fa1f668..0795678a 100644 --- a/src/server/game/mod/sevenLogin/SevenLogin.go +++ b/src/server/game/mod/sevenLogin/SevenLogin.go @@ -100,6 +100,9 @@ func (s *SevenLoginMod) BackData() *msg.ResSevenLogin { } for k, v := range s.MonthReward { + if k < 0 { + continue + } Active := sevenLoginCfg.GetMonthActive(k) Status := GoUtil.IfTrue(!v.Status && s.Active >= Active, 1, 0).(int) Status = GoUtil.IfTrue(v.Status, 2, Status).(int) diff --git a/src/server/game/mod/sevenLogin/SevenLoginFunc.go b/src/server/game/mod/sevenLogin/SevenLoginFunc.go index ad99e7df..2f1257fa 100644 --- a/src/server/game/mod/sevenLogin/SevenLoginFunc.go +++ b/src/server/game/mod/sevenLogin/SevenLoginFunc.go @@ -121,3 +121,20 @@ func randMonthReward() map[int]Reward { } return result } + +func F() map[int]Reward { + RewardList := sevenLoginCfg.GetSevenLoginMonthReward() + sort.Slice(RewardList, func(i, j int) bool { + return RewardList[i].Id < RewardList[j].Id + }) + jackpot := sevenLoginCfg.GetSevenLoginJackpot(1) + sort.Slice(jackpot, func(i, j int) bool { + return jackpot[i].Diamond < jackpot[j].Diamond + }) + result := make(map[int]Reward) + for _, v := range RewardList { + Reward := randReward(v, 0, jackpot, []int{}, 0.65, 1) + result[v.Id] = Reward + } + return result +}