From 20dd3f6683eef7a76570d039d08eac76e8345086 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 26 Feb 2026 19:18:50 +0800 Subject: [PATCH 01/87] gob register --- src/server/game/game_type.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 876acd39..5fae4517 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -148,4 +148,5 @@ func register() { gob.Register(&activity.Gift{}) gob.Register(&VarGoldCard{}) gob.Register(&VarExpireData{}) + gob.Register(msg.VarData{}) } From 35f35d0a9747bb20651b429f02e9a69759bd366a Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 26 Feb 2026 19:55:09 +0800 Subject: [PATCH 02/87] notification debug --- src/server/game/gm_handler.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 1c2e6d75..11ec7531 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -596,10 +596,10 @@ func ReqGmCommand_(player *Player, Command string) error { player.PushClientRes(LimitedTimeEventMod.BackData()) case "resetTriggerMail": player.PlayMod.mod_list.Mail.TriggerMail = make([]int, 0, 8) - case "debugMsg": - NotifyFriendApply(100001, 100002) - NotifyPetroomGame(100002) - SetPetroomGameNotification(100002, 1) + case "notification": + Id, _ := strconv.Atoi(arg[1]) + NotifyFriendApply(Id, int(player.M_DwUin)) + NotifyPetroomGame(Id) default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } From 2d6bcc09b9c2b98d97a0278c2f57a2d415b51138 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 26 Feb 2026 20:09:43 +0800 Subject: [PATCH 03/87] =?UTF-8?q?notification=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_mgr.go | 4 ++-- src/server/game/notification.go | 2 +- src/server/game/register_network_func.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 35349f69..439963ad 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -376,7 +376,7 @@ func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { } } if applycount > 1 && data.Type == msg.HANDLE_TYPE_APPLY { - NotifyFriendApply(data.To, data.From) + go NotifyFriendApply(data.To, data.From) } messages.mu.Unlock() } @@ -902,7 +902,7 @@ func saveMessage(m *msg.Msg) error { } } if applycount > 1 && m.Type == msg.HANDLE_TYPE_APPLY { - NotifyFriendApply(m.To, m.From) + go NotifyFriendApply(m.To, m.From) } // 添加消息 messages.Messages = append(messages.Messages, m) diff --git a/src/server/game/notification.go b/src/server/game/notification.go index 44fe2d07..00528b59 100644 --- a/src/server/game/notification.go +++ b/src/server/game/notification.go @@ -33,7 +33,7 @@ func NotifyPetroomGame(PlayerId int) { titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg() title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey) info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey) - GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, title, fmt.Sprintf(info, PlayerSimpleData.PetName)) + GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, fmt.Sprintf(title, PlayerSimpleData.PetName), fmt.Sprintf(info, PlayerSimpleData.PetName)) SetPetroomGameNotification(PlayerId, count+1) } diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index d131d678..b771cc4b 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -3985,7 +3985,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { PlayroomMod.ResetGame() player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward") player.PlayroomBackData() - NotifyPetroomGame(Target) + go NotifyPetroomGame(Target) player.PlayMod.save() player.PushClientRes(&msg.ResPlayroomSelectReward{ Code: msg.RES_CODE_SUCCESS, From 1b545ea1b7613c0381f8c7cffb5119370d0b5588 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:01:22 +0800 Subject: [PATCH 04/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0notification=20debug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 3 +++ src/server/test/fix_test.go | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 11ec7531..b4327146 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -600,6 +600,9 @@ func ReqGmCommand_(player *Player, Command string) error { Id, _ := strconv.Atoi(arg[1]) NotifyFriendApply(Id, int(player.M_DwUin)) NotifyPetroomGame(Id) + case "notificationTest": + Id, _ := strconv.Atoi(arg[1]) + GoUtil.NotifyPlayer(Id, 1, "Test Notification", "This is a test notification from the server.") default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 9f146986..36de50a4 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -90,9 +90,8 @@ func TestRandInt(t *testing.T) { func TestEndless(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - BaseMod := p1.GetBaseMod() - SevenMod := p1.GetSevenLoginMod() - SevenMod.ZeroUpdate(0, int(BaseMod.LoginTime)) + MailMod := p1.GetMailMod() + MailMod.BackData() } func TestNotify(t *testing.T) { From d10124fdb2f658c41b74b23dd5cdbe220ded23b6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:31:03 +0800 Subject: [PATCH 05/87] =?UTF-8?q?=E4=BC=98=E5=8C=96notification=20GM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 11 +++++++++++ src/server/test/fix_test.go | 13 ++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index b4327146..73d4eef7 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -11,7 +11,9 @@ import ( chargeCfg "server/conf/charge" emojiCfg "server/conf/emoji" faceCfg "server/conf/face" + languageCfg "server/conf/language" mergeDataCfg "server/conf/merge_data" + notification_cfg "server/conf/notification" playroomCfg "server/conf/playroom" "server/db" "server/game/mod/activity" @@ -602,6 +604,15 @@ func ReqGmCommand_(player *Player, Command string) error { NotifyPetroomGame(Id) case "notificationTest": Id, _ := strconv.Atoi(arg[1]) + PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Id) + if PlayerSimpleData == nil { + return nil + } + titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg() + title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey) + info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey) + BaseMod := player.PlayMod.getBaseMod() + GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), 2, title, fmt.Sprintf(info, BaseMod.NickName)) GoUtil.NotifyPlayer(Id, 1, "Test Notification", "This is a test notification from the server.") default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 36de50a4..6e51616e 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -3,9 +3,12 @@ package test import ( "fmt" decorateCfg "server/conf/decorate" + languageCfg "server/conf/language" + notification_cfg "server/conf/notification" "server/db" "server/game" GoUtil "server/game_util" + "server/msg" "server/pkg/github.com/name5566/leaf/log" "testing" ) @@ -94,6 +97,14 @@ func TestEndless(t *testing.T) { MailMod.BackData() } +// 10130 10165 func TestNotify(t *testing.T) { - GoUtil.NotifyPlayer(19246, 1, "Test Notification", "This is a test notification from the server.") + titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg() + title := languageCfg.GetLanguage(msg.LANG_TYPE(1), titlekey) + info := languageCfg.GetLanguage(msg.LANG_TYPE(1), infokey) + // titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg() + // title := languageCfg.GetLanguage(msg.LANG_TYPE(1), titlekey) + // info := languageCfg.GetLanguage(msg.LANG_TYPE(1), infokey) + GoUtil.NotifyPlayer(10130, 2, title, fmt.Sprintf(info, "猫猫")) + // GoUtil.NotifyPlayer(19246, 1, "Test Notification", "This is a test notification from the server.") } From f38206184c906bb4100dee759905e5e0d54ccd95 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:45:19 +0800 Subject: [PATCH 06/87] =?UTF-8?q?=E4=BC=98=E5=8C=96notification=20Gm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 73d4eef7..a8dc27e5 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -613,7 +613,6 @@ func ReqGmCommand_(player *Player, Command string) error { info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey) BaseMod := player.PlayMod.getBaseMod() GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), 2, title, fmt.Sprintf(info, BaseMod.NickName)) - GoUtil.NotifyPlayer(Id, 1, "Test Notification", "This is a test notification from the server.") default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } From b856dfb5ff497e76a152e0530cb213a2be49e439 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 27 Feb 2026 00:50:46 +0800 Subject: [PATCH 07/87] =?UTF-8?q?=E4=BC=98=E5=8C=96notification=20Gm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index a8dc27e5..a11f1b0a 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -612,7 +612,13 @@ func ReqGmCommand_(player *Player, Command string) error { title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey) info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey) BaseMod := player.PlayMod.getBaseMod() - GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), 2, title, fmt.Sprintf(info, BaseMod.NickName)) + GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), 1, title, fmt.Sprintf(info, BaseMod.NickName)) + + titlekey, infokey = notification_cfg.GetPetroomGameNotificationMsg() + title = languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey) + info = languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey) + GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, fmt.Sprintf(title, PlayerSimpleData.PetName), fmt.Sprintf(info, PlayerSimpleData.PetName)) + default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } From 0e391bc071955979c22817c62d272b1eaf9a421e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sat, 28 Feb 2026 10:17:15 +0800 Subject: [PATCH 08/87] =?UTF-8?q?notification=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game_util/GoUtil.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index b34bb778..e825a404 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -564,7 +564,9 @@ const ( ) func NotifyPlayer(uid, pushid int, title, content string) { - + if uid == 0 { + return + } url := "https://tygapi-new.tuyooglobal.com/api/push/ga/push_message/project_trigger" method := "POST" executeId := fmt.Sprintf("%s_%s", PROJECT_ID, Rand8DigitNumber()+Rand8DigitNumber()) From a33320065ce7ae3db697c973fdc31fe33920e6e1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sat, 28 Feb 2026 10:54:56 +0800 Subject: [PATCH 09/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=88=86=E6=9E=90=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod_factory.go | 5 ++ src/server/game/player_base_mod.go | 33 +++++++++ src/server/game/player_data.go | 63 +++++++++++++++- src/server/game/trigger_func.go | 4 + src/server/test/fix_test.go | 113 +++++++++++++++++++++++++++++ 5 files changed, 216 insertions(+), 2 deletions(-) diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index 0629dc99..aebf09ed 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -9,6 +9,7 @@ import ( "server/game/mod/endless" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" + "server/game/mod/order" "server/game/mod/playroom" sevenLogin "server/game/mod/seven_login" ) @@ -52,3 +53,7 @@ func (p *Player) GetMailMod() *mail.MailMod { func (p *Player) GetSevenLoginMod() *sevenLogin.SevenLoginMod { return p.PlayMod.getSevenLoginMod() } + +func (p *Player) GetOrderMod() *order.OrderMod { + return p.PlayMod.getOrderMod() +} diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index d0dabf0c..b1d51c33 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -118,6 +118,39 @@ func (p *PlayerBaseData) LoadDataFromDB(UserName interface{}) bool { return true } +func (p *PlayerBaseData) LoadDataFromDBByUid(Uid int) bool { + sqlStr := "SELECT * FROM t_player_baseinfo WHERE DwUin = ?" + sqlStruck := db.ResPlayerBaseInfo{} + if err := db.SqlDb.Get(&sqlStruck, sqlStr, Uid); err != nil { + log.Debug("PlayerBaseData get data failed, err:%v\n", err) + return false + } + + p.Data.Diamond = sqlStruck.Diamond + p.Data.DwUin = sqlStruck.DwUin + p.Data.Energy = sqlStruck.Energy + p.Data.Star = sqlStruck.Star + p.Data.RecoverTime = sqlStruck.RecoverTime + p.Data.Level = sqlStruck.Level + p.Data.Exp = sqlStruck.Exp + p.Data.StartOrderId = sqlStruck.StartOrderId + p.Data.MusicCode = sqlStruck.MusicCode + p.Data.Guild = sqlStruck.Guild + p.Data.PackUnlockCount = sqlStruck.PackUnlockCount + p.Data.LastPlayTime = sqlStruck.LastPlayTime + p.Data.Ban = sqlStruck.Ban + p.Data.UserName = sqlStruck.UserName + p.Data.LogoutTime = sqlStruck.LogoutTime + p.Data.Node = sqlStruck.Node + p.Data.Rolecreatetime = sqlStruck.Rolecreatetime + p.Data.LastChampGroupID = sqlStruck.LastChampGroupID + p.Data.ChampshipsGroupID = sqlStruck.ChampshipsGroupID + p.Data.NoAd = sqlStruck.NoAd + p.Data.FaceBookId = sqlStruck.FaceBookId + + return true +} + func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool { BaseMod := p.p.PlayMod.getBaseMod() sqlStruck := db.ResPlayerBaseInfo{} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index f2b5c1d2..535959af 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -217,7 +217,7 @@ func (p *Player) InitPlayer(UserName string) error { // 玩家基础数据 ok := Base.LoadDataFromDB(UserName) if !ok { - log.Debug("load PlayerBaseData failed:", UserName) + log.Debug("load PlayerBaseData failed:%s", UserName) return errors.New("load PlayerBaseData failed") } p.PlayerBaseMod = Base @@ -229,7 +229,66 @@ func (p *Player) InitPlayer(UserName string) error { modData := &PlayerModData{PlayerData: NewPlayerData("PlayerModData", p)} ok = modData.LoadDataFromDB(Base.Data.DwUin) if !ok { - log.Debug("load PlayerModData failed:", UserName) + log.Debug("load PlayerModData failed:%s", UserName) + return errors.New("load PlayerModData failed") + } + IsUpdate, err := modData.InitMod(p) + if err != nil { + log.Debug("InitMod failed:", err) + return err + } + p.PlayMod.mod_list = modData.ModList + p.PlayMod.is_update = IsUpdate + // 启动定时器 + p.DispatcherHandle() + p.McronSave = cron.New() + _, err = p.McronSave.AddFunc("@every 1m", p.AutoSaveData) + if err != nil { + log.Debug("AddFunc failed:", err) + } + p.McronSave.Start() + p.initAcitivity() + p.ZeroUpdate(nil) + p.NoonUpdate(nil) + p.Login() + p.OrderShip() + p.UpdateUserInfo() + // fix bug + ChargeMod := p.PlayMod.getChargeMod() + ChessMod := p.PlayMod.getChessMod() + ChargeMod.FixBug(ChessMod.GetEmitList()) + p.FixOrderBug() + p.FixDecorate() + return nil +} + +func (p *Player) InitPlayerByUid(Uid int) error { + p.lock.Lock() + defer p.lock.Unlock() + p.msgChan = make(chan *MsgMod.Msg, 100) + p.Msg = make([]PlayerMsg, 0) + p.args = make(map[string]interface{}) + p.timerList = make(map[string]*timer.Timer) + p.MDispatr = timer.NewDispatcher(100) + p.stopSignal = make(chan bool) + Base := &PlayerBaseData{p: p} + + // 玩家基础数据 + ok := Base.LoadDataFromDBByUid(Uid) + if !ok { + log.Debug("load PlayerBaseData failed:%d", Uid) + return errors.New("load PlayerBaseData failed") + } + p.PlayerBaseMod = Base + p.M_DwUin = Base.Data.DwUin + + // 棋盘数据 + + // 玩家模块数据 + modData := &PlayerModData{PlayerData: NewPlayerData("PlayerModData", p)} + ok = modData.LoadDataFromDB(Base.Data.DwUin) + if !ok { + log.Debug("load PlayerModData failed:%d", Uid) return errors.New("load PlayerModData failed") } IsUpdate, err := modData.InitMod(p) diff --git a/src/server/game/trigger_func.go b/src/server/game/trigger_func.go index 47b2ff63..056b68aa 100644 --- a/src/server/game/trigger_func.go +++ b/src/server/game/trigger_func.go @@ -142,6 +142,7 @@ func (player *Player) TriggerShippingOrderOrigin(req *msg.ReqShippingOrder) { ProduceName := chargeCfg.GetProduceName(OrderData.ProductId) GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, ProduceName, OrderData.PayTime, GoUtil.Now(), ChargeMod.Charge) } + BaseMod := player.PlayMod.getBaseMod() orderDataMap := map[string]interface{}{ "AppId": conf.Server.AppID, "ServerId": conf.Server.ServerID, @@ -153,6 +154,9 @@ func (player *Player) TriggerShippingOrderOrigin(req *msg.ReqShippingOrder) { "Token": req.Token, "Price": OrderData.Price, "PayType": OrderData.PayType, + "Level": BaseMod.GetLevel(), + "Energy": BaseMod.GetEnergy(), + "Star": BaseMod.GetStar(), } player.TeLog("pay", orderDataMap) player.PushClientRes(&msg.ResShippingOrder{ diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 6e51616e..ff06170f 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -10,6 +10,7 @@ import ( GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" + "sort" "testing" ) @@ -108,3 +109,115 @@ func TestNotify(t *testing.T) { GoUtil.NotifyPlayer(10130, 2, title, fmt.Sprintf(info, "猫猫")) // GoUtil.NotifyPlayer(19246, 1, "Test Notification", "This is a test notification from the server.") } + +func TestAnalyzeDecorate(t *testing.T) { + uids := []int{111354, 111355, 111358, 111364, 111359, 111357, 111363, 111369, 111371, 111379, 111384, 111383, 111366, 111373, 111377, 111389, 111393, 111395, 111401, 111397, 111396, 111403, 111404, 111399, 111409, 111406, 111415, 111410, 111421, 111419, 111413, 111422, 111423, 111425, 111405, 111429, 111356, 111411, 111431, 111424, 111426, 111441, 111428, 111454, 111455, 111436, 111420, 111453, 111460, 111452, 111459, 111458, 111456, 111464, 111465, 111382, 111468, 111472, 111376, 111480, 111362, 111490, 111497, 111498, 111500, 111434, 111496, 111474, 111482, 111504, 111506, 111514, 111515, 111470, 111512, 111523, 111520, 111478, 111533, 111538, 111534, 111491, 111522, 111537, 111446, 111477, 111544, 111526, 111528, 111546, 111543, 111548, 111535, 111432, 111553, 111467, 111542, 111560, 111457, 111549, 111536, 111516, 111531, 111487, 111557, 111529, 111568, 111540, 111539, 111416, 111561, 111555, 111558, 111581, 111475, 111564, 111524, 111484, 111583, 111587, 111585, 111584, 111525, 111552, 111592, 111595, 111603, 111599, 111604, 111591, 111608, 111607, 111598, 111610, 111615, 111614, 111596, 111562, 111572, 111381, 111625, 111621, 111632, 111550, 111630, 111628, 111602, 111567, 111445, 111633, 111623, 111647, 111653, 111649, 111593, 111646, 111645, 111651, 111643, 111611, 111636, 111519, 111661, 111662, 111667, 111670, 111387, 111664, 111650, 111672, 111378, 111660, 111666, 111675, 111663, 111686, 111685, 111575, 111688, 111659, 111691, 111637, 111695, 111676, 111386, 111699, 111701, 111709, 111444, 111702, 111718, 111704, 111679, 111710, 111706, 111617, 111708, 111722, 111721, 111412, 111728, 111720, 111727, 111733, 111563, 111503, 111738, 111729, 111556, 111744, 111732, 111750, 111748, 111745, 111541, 111740, 111747, 111731, 111755, 111761, 111724, 111756, 111760, 111766, 111696, 111717, 111774, 111780, 111776, 111786, 111787, 111785, 111782, 111795, 111798, 111775, 111790, 111800, 111796, 111788, 111792, 111398, 111803, 111802, 111804, 111799, 111811, 111815, 111716, 111759, 111816, 111824, 111814, 111817, 111829, 111807, 111840, 111839, 111835, 111837, 111821, 111810, 111846, 111758, 111834, 111852, 111850, 111820, 111855, 111849, 111848, 111831, 111866, 111844, 111851, 111868, 111826, 111684, 111874, 111880, 111869, 111883, 111884, 111847, 111888, 111887, 111890, 111892, 111857, 111713, 111842, 111854, 111894, 111903, 111877, 111908, 111858, 111794, 111906, 111904, 111767, 111871, 111891, 111910, 111918, 111899, 111914, 111917, 111907, 111875, 111920, 111863, 111913, 111926, 111703, 111825, 111677, 111928, 111753, 111931, 111365, 111762, 111872, 111768, 111878, 111570, 111938, 111935, 111946, 111624, 111944, 111942, 111940, 111833, 111620, 111763, 111957, 111805, 111511, 111948, 111966, 111882, 111967, 111965, 111970, 111867, 111723, 111969, 111941, 111730, 111973, 111978, 111983, 111987, 111989, 111980, 111991, 111569, 111589, 112003, 111990, 111606, 111984, 111998, 112006, 112007, 111461, 111999, 112010, 112012, 111901, 111781, 111812, 112016, 111736, 111771, 111705, 111509, 111488, 112024, 112030, 111961, 111579, 112036, 111616, 112040, 112043, 111997, 112048, 112035, 112052, 111972, 112057, 111669, 111777, 112056, 112032, 112063, 112062, 111793, 112061, 112050, 112066, 112038, 111518, 111673, 112068, 111655, 112071, 112074, 111986, 111943, 112017, 112011, 112083, 112078, 112087, 112020, 111391, 111836, 112082, 112091, 112053, 112090, 111947, 112096, 112099, 112100, 112085, 112101, 112102, 111739, 111671, 112107, 112109, 111433, 111754, 111439, 111838, 111499, 111665, 111476, 111885, 111502, 111627, 111530, 111959, 111414, 111933, 111668, 112079, 111613, 111749, 112027, 111609, 112054, 111678, 111813, 111994, 111513, 111547, 111622, 111692, 111897, 111784, 111492, 112047, 111951, 112039, 111652, 111687, 112033, 112077, 111801, 111437, 111566, 111648, 111735, 111955, 112110, 112055, 112008, 112023, 111719, 111949, 111510, 112037, 111809, 112075, 112058, 111689, 111789, 111545, 111870, 112070, 111797, 112106, 112015, 112073, 112013, 112081, 111443, 111772, 111712, 111698, 112031, 111988, 111956, 111924, 111830, 111993, 112080, 111950, 111930, 111977, 111642, 111626, 112021, 112111, 112069, 111845, 111485, 111783, 111856, 111981, 111605, 111764, 111697, 111881, 111450, 111822, 111408, 111463, 111921, 112041, 112046, 111861, 112009, 111818, 111481, 111905, 111368, 111495, 111360, 112072, 111392, 111823, 111939, 111974, 111927, 112025, 111418, 111979, 112105, 111656, 111508, 111494, 111629, 111934, 112028, 112000, 112086, 111982, 112094, 111929, 111447, 111427, 111964, 111819, 112089, 111769, 111385, 111911, 111937, 111394, 111586, 111471, 111407, 111674, 111963, 111654, 112049, 111442, 111952, 112029, 111690, 112065, 112076, 111912, 112095, 111741, 111638, 111876, 111527, 111751, 111936, 111808, 111590, 111919, 111832, 111400, 111594, 111958, 111451, 111580, 112005, 111853, 111639, 112014, 111743, 111631, 111734, 111574, 111841, 111843, 111681, 111714, 111737, 112060, 111634, 111693, 111757, 111388, 111577, 111640, 111902, 112098, 111435, 111828, 112019, 112022, 111770, 111707, 111862, 111469, 111576, 111466, 111742, 111380, 111954, 111968, 111752, 111909, 111765, 111953, 111778, 112042, 111962, 112001, 112034, 111960, 111619, 111554, 111893, 111865, 111600, 111746, 111985, 111971, 111505, 112051, 111945, 111483, 111916, 111995, 112004, 111859, 112044} + decorate := make(map[string]int) + for _, uid := range uids { + p1 := new(game.Player) + p1.InitPlayerByUid(uid) + DecorateMod := p1.GetDecorateMod() + doco_id := fmt.Sprintf("%d_%d", DecorateMod.AreaId, DecorateMod.Progress) + decorate[doco_id]++ + p1 = nil + } + // Sort by AreaId first, then by Progress + type decorateInfo struct { + key string + count int + } + var sorted []decorateInfo + for k, v := range decorate { + sorted = append(sorted, decorateInfo{k, v}) + } + sort.Slice(sorted, func(i, j int) bool { + var areaI, progressI, areaJ, progressJ int + fmt.Sscanf(sorted[i].key, "%d_%d", &areaI, &progressI) + fmt.Sscanf(sorted[j].key, "%d_%d", &areaJ, &progressJ) + if areaI != areaJ { + return areaI < areaJ + } + return progressI < progressJ + }) + keys := make([]string, 0, len(sorted)) + values := make([]int, 0, len(sorted)) + for _, item := range sorted { + keys = append(keys, item.key) + values = append(values, item.count) + } + fmt.Printf("keys: %v\n", keys) + fmt.Printf("values: %v\n", values) +} + +func TestAnalyzeOrder(t *testing.T) { + uids := []int{111354, 111355, 111358, 111364, 111359, 111357, 111363, 111369, 111371, 111379, 111384, 111383, 111366, 111373, 111377, 111389, 111393, 111395, 111401, 111397, 111396, 111403, 111404, 111399, 111409, 111406, 111415, 111410, 111421, 111419, 111413, 111422, 111423, 111425, 111405, 111429, 111356, 111411, 111431, 111424, 111426, 111441, 111428, 111454, 111455, 111436, 111420, 111453, 111460, 111452, 111459, 111458, 111456, 111464, 111465, 111382, 111468, 111472, 111376, 111480, 111362, 111490, 111497, 111498, 111500, 111434, 111496, 111474, 111482, 111504, 111506, 111514, 111515, 111470, 111512, 111523, 111520, 111478, 111533, 111538, 111534, 111491, 111522, 111537, 111446, 111477, 111544, 111526, 111528, 111546, 111543, 111548, 111535, 111432, 111553, 111467, 111542, 111560, 111457, 111549, 111536, 111516, 111531, 111487, 111557, 111529, 111568, 111540, 111539, 111416, 111561, 111555, 111558, 111581, 111475, 111564, 111524, 111484, 111583, 111587, 111585, 111584, 111525, 111552, 111592, 111595, 111603, 111599, 111604, 111591, 111608, 111607, 111598, 111610, 111615, 111614, 111596, 111562, 111572, 111381, 111625, 111621, 111632, 111550, 111630, 111628, 111602, 111567, 111445, 111633, 111623, 111647, 111653, 111649, 111593, 111646, 111645, 111651, 111643, 111611, 111636, 111519, 111661, 111662, 111667, 111670, 111387, 111664, 111650, 111672, 111378, 111660, 111666, 111675, 111663, 111686, 111685, 111575, 111688, 111659, 111691, 111637, 111695, 111676, 111386, 111699, 111701, 111709, 111444, 111702, 111718, 111704, 111679, 111710, 111706, 111617, 111708, 111722, 111721, 111412, 111728, 111720, 111727, 111733, 111563, 111503, 111738, 111729, 111556, 111744, 111732, 111750, 111748, 111745, 111541, 111740, 111747, 111731, 111755, 111761, 111724, 111756, 111760, 111766, 111696, 111717, 111774, 111780, 111776, 111786, 111787, 111785, 111782, 111795, 111798, 111775, 111790, 111800, 111796, 111788, 111792, 111398, 111803, 111802, 111804, 111799, 111811, 111815, 111716, 111759, 111816, 111824, 111814, 111817, 111829, 111807, 111840, 111839, 111835, 111837, 111821, 111810, 111846, 111758, 111834, 111852, 111850, 111820, 111855, 111849, 111848, 111831, 111866, 111844, 111851, 111868, 111826, 111684, 111874, 111880, 111869, 111883, 111884, 111847, 111888, 111887, 111890, 111892, 111857, 111713, 111842, 111854, 111894, 111903, 111877, 111908, 111858, 111794, 111906, 111904, 111767, 111871, 111891, 111910, 111918, 111899, 111914, 111917, 111907, 111875, 111920, 111863, 111913, 111926, 111703, 111825, 111677, 111928, 111753, 111931, 111365, 111762, 111872, 111768, 111878, 111570, 111938, 111935, 111946, 111624, 111944, 111942, 111940, 111833, 111620, 111763, 111957, 111805, 111511, 111948, 111966, 111882, 111967, 111965, 111970, 111867, 111723, 111969, 111941, 111730, 111973, 111978, 111983, 111987, 111989, 111980, 111991, 111569, 111589, 112003, 111990, 111606, 111984, 111998, 112006, 112007, 111461, 111999, 112010, 112012, 111901, 111781, 111812, 112016, 111736, 111771, 111705, 111509, 111488, 112024, 112030, 111961, 111579, 112036, 111616, 112040, 112043, 111997, 112048, 112035, 112052, 111972, 112057, 111669, 111777, 112056, 112032, 112063, 112062, 111793, 112061, 112050, 112066, 112038, 111518, 111673, 112068, 111655, 112071, 112074, 111986, 111943, 112017, 112011, 112083, 112078, 112087, 112020, 111391, 111836, 112082, 112091, 112053, 112090, 111947, 112096, 112099, 112100, 112085, 112101, 112102, 111739, 111671, 112107, 112109, 111433, 111754, 111439, 111838, 111499, 111665, 111476, 111885, 111502, 111627, 111530, 111959, 111414, 111933, 111668, 112079, 111613, 111749, 112027, 111609, 112054, 111678, 111813, 111994, 111513, 111547, 111622, 111692, 111897, 111784, 111492, 112047, 111951, 112039, 111652, 111687, 112033, 112077, 111801, 111437, 111566, 111648, 111735, 111955, 112110, 112055, 112008, 112023, 111719, 111949, 111510, 112037, 111809, 112075, 112058, 111689, 111789, 111545, 111870, 112070, 111797, 112106, 112015, 112073, 112013, 112081, 111443, 111772, 111712, 111698, 112031, 111988, 111956, 111924, 111830, 111993, 112080, 111950, 111930, 111977, 111642, 111626, 112021, 112111, 112069, 111845, 111485, 111783, 111856, 111981, 111605, 111764, 111697, 111881, 111450, 111822, 111408, 111463, 111921, 112041, 112046, 111861, 112009, 111818, 111481, 111905, 111368, 111495, 111360, 112072, 111392, 111823, 111939, 111974, 111927, 112025, 111418, 111979, 112105, 111656, 111508, 111494, 111629, 111934, 112028, 112000, 112086, 111982, 112094, 111929, 111447, 111427, 111964, 111819, 112089, 111769, 111385, 111911, 111937, 111394, 111586, 111471, 111407, 111674, 111963, 111654, 112049, 111442, 111952, 112029, 111690, 112065, 112076, 111912, 112095, 111741, 111638, 111876, 111527, 111751, 111936, 111808, 111590, 111919, 111832, 111400, 111594, 111958, 111451, 111580, 112005, 111853, 111639, 112014, 111743, 111631, 111734, 111574, 111841, 111843, 111681, 111714, 111737, 112060, 111634, 111693, 111757, 111388, 111577, 111640, 111902, 112098, 111435, 111828, 112019, 112022, 111770, 111707, 111862, 111469, 111576, 111466, 111742, 111380, 111954, 111968, 111752, 111909, 111765, 111953, 111778, 112042, 111962, 112001, 112034, 111960, 111619, 111554, 111893, 111865, 111600, 111746, 111985, 111971, 111505, 112051, 111945, 111483, 111916, 111995, 112004, 111859, 112044} + order := make(map[int]int) + for _, uid := range uids { + p1 := new(game.Player) + p1.InitPlayerByUid(uid) + OrderMod := p1.GetOrderMod() + for order_id := range OrderMod.OrderList { + if order_id > 10000 { + //continue + } + order[order_id]++ + } + p1 = nil + } + + type orderInfo struct { + orderId int + count int + } + var sorted []orderInfo + for k, v := range order { + sorted = append(sorted, orderInfo{k, v}) + } + sort.Slice(sorted, func(i, j int) bool { + return sorted[i].orderId < sorted[j].orderId + }) + keys := make([]int, 0, len(sorted)) + values := make([]int, 0, len(sorted)) + for _, item := range sorted { + keys = append(keys, item.orderId) + values = append(values, item.count) + } + fmt.Printf("%s\n", formatIntSlice(keys)) + fmt.Printf("%s\n", formatIntSlice(values)) + + sort.Slice(sorted, func(i, j int) bool { + return sorted[i].count > sorted[j].count + }) + for _, item := range sorted { + fmt.Printf("OrderId: %d, Count: %d\n", item.orderId, item.count) + } +} + +func TestAnalyzeCharge(t *testing.T) { + uids := []int{111354, 111355, 111358, 111364, 111359, 111357, 111363, 111369, 111371, 111379, 111384, 111383, 111366, 111373, 111377, 111389, 111393, 111395, 111401, 111397, 111396, 111403, 111404, 111399, 111409, 111406, 111415, 111410, 111421, 111419, 111413, 111422, 111423, 111425, 111405, 111429, 111356, 111411, 111431, 111424, 111426, 111441, 111428, 111454, 111455, 111436, 111420, 111453, 111460, 111452, 111459, 111458, 111456, 111464, 111465, 111382, 111468, 111472, 111376, 111480, 111362, 111490, 111497, 111498, 111500, 111434, 111496, 111474, 111482, 111504, 111506, 111514, 111515, 111470, 111512, 111523, 111520, 111478, 111533, 111538, 111534, 111491, 111522, 111537, 111446, 111477, 111544, 111526, 111528, 111546, 111543, 111548, 111535, 111432, 111553, 111467, 111542, 111560, 111457, 111549, 111536, 111516, 111531, 111487, 111557, 111529, 111568, 111540, 111539, 111416, 111561, 111555, 111558, 111581, 111475, 111564, 111524, 111484, 111583, 111587, 111585, 111584, 111525, 111552, 111592, 111595, 111603, 111599, 111604, 111591, 111608, 111607, 111598, 111610, 111615, 111614, 111596, 111562, 111572, 111381, 111625, 111621, 111632, 111550, 111630, 111628, 111602, 111567, 111445, 111633, 111623, 111647, 111653, 111649, 111593, 111646, 111645, 111651, 111643, 111611, 111636, 111519, 111661, 111662, 111667, 111670, 111387, 111664, 111650, 111672, 111378, 111660, 111666, 111675, 111663, 111686, 111685, 111575, 111688, 111659, 111691, 111637, 111695, 111676, 111386, 111699, 111701, 111709, 111444, 111702, 111718, 111704, 111679, 111710, 111706, 111617, 111708, 111722, 111721, 111412, 111728, 111720, 111727, 111733, 111563, 111503, 111738, 111729, 111556, 111744, 111732, 111750, 111748, 111745, 111541, 111740, 111747, 111731, 111755, 111761, 111724, 111756, 111760, 111766, 111696, 111717, 111774, 111780, 111776, 111786, 111787, 111785, 111782, 111795, 111798, 111775, 111790, 111800, 111796, 111788, 111792, 111398, 111803, 111802, 111804, 111799, 111811, 111815, 111716, 111759, 111816, 111824, 111814, 111817, 111829, 111807, 111840, 111839, 111835, 111837, 111821, 111810, 111846, 111758, 111834, 111852, 111850, 111820, 111855, 111849, 111848, 111831, 111866, 111844, 111851, 111868, 111826, 111684, 111874, 111880, 111869, 111883, 111884, 111847, 111888, 111887, 111890, 111892, 111857, 111713, 111842, 111854, 111894, 111903, 111877, 111908, 111858, 111794, 111906, 111904, 111767, 111871, 111891, 111910, 111918, 111899, 111914, 111917, 111907, 111875, 111920, 111863, 111913, 111926, 111703, 111825, 111677, 111928, 111753, 111931, 111365, 111762, 111872, 111768, 111878, 111570, 111938, 111935, 111946, 111624, 111944, 111942, 111940, 111833, 111620, 111763, 111957, 111805, 111511, 111948, 111966, 111882, 111967, 111965, 111970, 111867, 111723, 111969, 111941, 111730, 111973, 111978, 111983, 111987, 111989, 111980, 111991, 111569, 111589, 112003, 111990, 111606, 111984, 111998, 112006, 112007, 111461, 111999, 112010, 112012, 111901, 111781, 111812, 112016, 111736, 111771, 111705, 111509, 111488, 112024, 112030, 111961, 111579, 112036, 111616, 112040, 112043, 111997, 112048, 112035, 112052, 111972, 112057, 111669, 111777, 112056, 112032, 112063, 112062, 111793, 112061, 112050, 112066, 112038, 111518, 111673, 112068, 111655, 112071, 112074, 111986, 111943, 112017, 112011, 112083, 112078, 112087, 112020, 111391, 111836, 112082, 112091, 112053, 112090, 111947, 112096, 112099, 112100, 112085, 112101, 112102, 111739, 111671, 112107, 112109, 111433, 111754, 111439, 111838, 111499, 111665, 111476, 111885, 111502, 111627, 111530, 111959, 111414, 111933, 111668, 112079, 111613, 111749, 112027, 111609, 112054, 111678, 111813, 111994, 111513, 111547, 111622, 111692, 111897, 111784, 111492, 112047, 111951, 112039, 111652, 111687, 112033, 112077, 111801, 111437, 111566, 111648, 111735, 111955, 112110, 112055, 112008, 112023, 111719, 111949, 111510, 112037, 111809, 112075, 112058, 111689, 111789, 111545, 111870, 112070, 111797, 112106, 112015, 112073, 112013, 112081, 111443, 111772, 111712, 111698, 112031, 111988, 111956, 111924, 111830, 111993, 112080, 111950, 111930, 111977, 111642, 111626, 112021, 112111, 112069, 111845, 111485, 111783, 111856, 111981, 111605, 111764, 111697, 111881, 111450, 111822, 111408, 111463, 111921, 112041, 112046, 111861, 112009, 111818, 111481, 111905, 111368, 111495, 111360, 112072, 111392, 111823, 111939, 111974, 111927, 112025, 111418, 111979, 112105, 111656, 111508, 111494, 111629, 111934, 112028, 112000, 112086, 111982, 112094, 111929, 111447, 111427, 111964, 111819, 112089, 111769, 111385, 111911, 111937, 111394, 111586, 111471, 111407, 111674, 111963, 111654, 112049, 111442, 111952, 112029, 111690, 112065, 112076, 111912, 112095, 111741, 111638, 111876, 111527, 111751, 111936, 111808, 111590, 111919, 111832, 111400, 111594, 111958, 111451, 111580, 112005, 111853, 111639, 112014, 111743, 111631, 111734, 111574, 111841, 111843, 111681, 111714, 111737, 112060, 111634, 111693, 111757, 111388, 111577, 111640, 111902, 112098, 111435, 111828, 112019, 112022, 111770, 111707, 111862, 111469, 111576, 111466, 111742, 111380, 111954, 111968, 111752, 111909, 111765, 111953, 111778, 112042, 111962, 112001, 112034, 111960, 111619, 111554, 111893, 111865, 111600, 111746, 111985, 111971, 111505, 112051, 111945, 111483, 111916, 111995, 112004, 111859, 112044, 111486, 111367, 111925, 111779, 112112, 111601, 111489, 112088, 111370, 112097, 111860, 111635, 112002, 111864, 112084, 111559, 111507, 111390, 111976, 111922, 111900, 111932, 111402, 111438, 111827, 112067, 111618, 111501, 112064, 111711, 111898, 111573, 112093, 111532, 112104, 111725, 111644, 111473, 111597, 111430, 111896, 111375, 111715, 111879, 111657, 111895, 111700, 112059, 111517, 111582, 111658, 111612, 111479, 111996, 111683, 111448, 112092, 111682, 111923, 111641, 111565, 111361, 111551, 111440, 111417, 111493, 112018, 111886, 111694, 112045, 112108, 111680, 111449, 112103, 111588, 111521, 111571, 111773, 111372, 111975, 111578, 111462, 111791, 111915, 111374, 111889, 112026, 111873, 111726, 111806, 111992} + var charge float64 + var chargeCount int + for _, uid := range uids { + p1 := new(game.Player) + p1.InitPlayerByUid(uid) + ChargeMod := p1.GetChargeMod() + if ChargeMod.Charge > 0 { + charge += ChargeMod.Charge + chargeCount++ + } + p1 = nil + } + fmt.Printf("Total Charge: %.2f, Charge Count: %d\n", charge, chargeCount) +} + +func formatIntSlice(slice []int) string { + result := "[" + for i, num := range slice { + result += fmt.Sprintf("%d", num) + if i < len(slice)-1 { + result += "," + } + } + result += "]" + return result +} From cf5f30cebbb1b479fd3ce41659bd1217084b9e0d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sat, 28 Feb 2026 15:23:12 +0800 Subject: [PATCH 10/87] =?UTF-8?q?resshop=E6=95=B0=E6=8D=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/player_back.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 39c7a93c..8698f8da 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -279,6 +279,10 @@ func (p *Player) ChargeBackData() { } } CatDaySaleEndTime := LimitedEventMod.GetCatDaySaleEndTime() + var specialChargeWeek int32 + if c.LastSpecialCharge != 0 { + specialChargeWeek = int32(GoUtil.FullWeeksSince(c.LastSpecialCharge)) + } p.PushClientRes(&proto.ResCharge{ Charge: float32(c.Charge), Total: int32(c.Total), @@ -289,7 +293,7 @@ func (p *Player) ChargeBackData() { Gift: GoUtil.MapIntToInt32(c.Gift), Ad: c.Ad, SpecialCharge: float32(c.SpecialCharge), - SpecialChargeWeek: int32(GoUtil.FullWeeksSince(c.LastSpecialCharge)), + SpecialChargeWeek: specialChargeWeek, TodayCharge: float32(c.TodayCharge), MonthCharge: float32(c.MonthCharge), Wish: resWish, From b3689ca93d63802a8a360fae98b66be57297c734 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sat, 28 Feb 2026 18:36:29 +0800 Subject: [PATCH 11/87] =?UTF-8?q?=E5=AE=A0=E7=89=A9=E7=9A=AE=E6=AF=9B?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/fur/fur_cfg.go | 57 ++++++++++++++++++++ src/server/game/GameLogic.go | 4 ++ src/server/game/game_type.go | 1 + src/server/game/mod/fur/fur.go | 84 +++++++++++++++++++++++++++++ src/server/game/mod/item/Item.go | 1 + src/server/game/mod_factory.go | 5 ++ src/server/game/player_data.go | 14 ++++- src/server/game/player_mod.go | 7 +++ src/server/game/req_func_fur.go | 52 ++++++++++++++++++ src/server/test/fix_test.go | 2 +- src/server/test/fur_test.go | 92 ++++++++++++++++++++++++++++++++ 11 files changed, 317 insertions(+), 2 deletions(-) create mode 100644 src/server/conf/fur/fur_cfg.go create mode 100644 src/server/game/mod/fur/fur.go create mode 100644 src/server/game/req_func_fur.go create mode 100644 src/server/test/fur_test.go diff --git a/src/server/conf/fur/fur_cfg.go b/src/server/conf/fur/fur_cfg.go new file mode 100644 index 00000000..a4cb7a6b --- /dev/null +++ b/src/server/conf/fur/fur_cfg.go @@ -0,0 +1,57 @@ +package fur_cfg + +import ( + "server/game/mod/item" + "server/gamedata" +) + +const ( + CFG_FUR_CONST = "FurShopConst" + CFG_FUR_SHOP = "FurShop" +) + +func init() { + gamedata.InitCfg(CFG_FUR_CONST) + gamedata.InitCfg(CFG_FUR_SHOP) +} + +func GetFurShopCost(id int) []*item.Item { + data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id) + if err != nil { + return nil + } + return gamedata.GetItemList(data, "Cost") +} + +func GetFurShopFreeTimes() int { + data, err := gamedata.GetDataByKey(CFG_FUR_CONST, "free_unlock") + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "Value") +} + +func GetFurShopTag(id int) int { + data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "TAG") +} + +func GetFurShopItem(id int) []*item.Item { + data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id) + if err != nil { + return nil + } + itemId := gamedata.GetIntValue(data, "ItemID") + if itemId == 0 { + return nil + } + return []*item.Item{ + { + Id: itemId, + Num: 1, + }, + } +} diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 8c86e9d8..64d3a035 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -454,6 +454,7 @@ func (ad *GameLogic) GetResFriendPlayerByUid(Id int) *msg.ResFriendPlayerSimple Physiology: GoUtil.MapIntToInt32(player.Physiology), Last: last, PetName: player.PetName, + PetFur: int32(player.PetFur), } } @@ -840,6 +841,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() { RegisterMsgProcessFunc("ReqPlayroomTaskReward", ReqPlayroomTaskReward) // 领取任务奖励 RegisterMsgProcessFunc("ReqPlayroomGameShowReward", ReqPlayroomGameShowReward) // 展示游戏结果数据 RegisterMsgProcessFunc("ReqPlayroomGuide", ReqPlayroomGuide) // 展示游戏结果数据 + RegisterMsgProcessFunc("ReqPetFur", ReqPetFur) // 宠物毛皮信息 + RegisterMsgProcessFunc("ReqPetFurBuy", ReqPetFurBuy) // 宠物毛皮商店购买 + RegisterMsgProcessFunc("ReqFurSet", ReqFurSet) //宠物毛皮设置 // 宠物宝藏 RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据 RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏 diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 5fae4517..1522dbce 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -39,6 +39,7 @@ type PlayerSimpleData struct { Physiology map[int]int Lang int Account string + PetFur int } type VarGoldCard struct { diff --git a/src/server/game/mod/fur/fur.go b/src/server/game/mod/fur/fur.go new file mode 100644 index 00000000..6a68f166 --- /dev/null +++ b/src/server/game/mod/fur/fur.go @@ -0,0 +1,84 @@ +package fur + +import ( + "fmt" + fur_cfg "server/conf/fur" + "server/game/mod/item" + "server/msg" +) + +type FurMod struct { + Set int + List map[int]*FurInfo + Free int +} + +type FurInfo struct { + Id int + AddTime int64 + EndTime int64 +} + +func (f *FurMod) InitData() { + if f.List == nil { + f.List = make(map[int]*FurInfo) + } +} + +// 获取毛皮信息 +func (f *FurMod) GetFurInfo(id int) *FurInfo { + info, ok := f.List[id] + if !ok { + return nil + } + return info +} + +// 增加毛皮 +func (f *FurMod) AddFurInfo(id int, addTime, endTime int64) { + f.List[id] = &FurInfo{ + Id: id, + AddTime: addTime, + EndTime: endTime, + } +} + +func (f *FurMod) GetFurBuyCost(id int) ([]*item.Item, []*item.Item) { + freeCount := fur_cfg.GetFurShopFreeTimes() + if f.Free < freeCount { + f.Free++ + return nil, fur_cfg.GetFurShopItem(id) + } + return fur_cfg.GetFurShopCost(id), fur_cfg.GetFurShopItem(id) +} + +// 设置毛皮 +func (f *FurMod) SetFur(id int) error { + if id == 0 { + f.Set = 0 + return nil + } + if _, ok := f.List[id]; !ok { + return fmt.Errorf("fur id not found") + } + f.Set = id + return nil +} + +func (f *FurMod) GetFurSet() int { + return f.Set +} + +// 消息返回 +func (f *FurMod) BackData() *msg.ResPetFur { + freeCount := fur_cfg.GetFurShopFreeTimes() + furId := make([]int32, 0, len(f.List)) + for id := range f.List { + furId = append(furId, int32(id)) + } + return &msg.ResPetFur{ + FurId: furId, + FurSet: int32(f.Set), + FreeCount: int32(freeCount - f.Free), + } +} diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 64bf0dbb..8b7918f1 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -58,6 +58,7 @@ const ( ITEM_TYPE_PLAYROOM_DRESS_SET = 114 // playroom服饰套装 ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱 ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具 + ITEM_TYPE_PET_FUR = 117 // 宠物毛皮 ) func (i *ItemMod) InitData() { diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index aebf09ed..502d5ed1 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -7,6 +7,7 @@ import ( "server/game/mod/chess" "server/game/mod/decorate" "server/game/mod/endless" + "server/game/mod/fur" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" "server/game/mod/order" @@ -57,3 +58,7 @@ func (p *Player) GetSevenLoginMod() *sevenLogin.SevenLoginMod { func (p *Player) GetOrderMod() *order.OrderMod { return p.PlayMod.getOrderMod() } + +func (p *Player) GetFurMod() *fur.FurMod { + return p.PlayMod.getFurMod() +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 535959af..49d975bd 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -582,6 +582,9 @@ func (p *Player) GetAgentByPlayer() gate.Agent { // 处理物品 func (p *Player) HandleLoseItem(itemList []*item.Item, Label string) error { + if itemList == nil { + return nil + } for _, v := range itemList { if v.Num > 0 { v.Num = -v.Num @@ -590,7 +593,7 @@ func (p *Player) HandleLoseItem(itemList []*item.Item, Label string) error { return p.HandleItem(itemList, Label) } func (p *Player) HandleItem(itemList []*item.Item, Label string) error { - if len(itemList) == 0 { + if itemList == nil { return nil } is_update := false @@ -892,6 +895,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { PassMod := p.PlayMod.getPassMod() PassMod.AddExp(v.Num) p.ActPassBackData() + case item.ITEM_TYPE_PET_FUR: + FurMod := p.PlayMod.getFurMod() + Effect := itemCfg.GetItemEffect(v.Id) + FurMod.AddFurInfo(Effect, GoUtil.Now(), 0) + BackDataType[item.ITEM_TYPE_PET_FUR] = struct{}{} default: err := ItemMod.AddItem(v.Id, v.Num) p.TeLog("asset_change", map[string]interface{}{ @@ -931,6 +939,9 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { item.ITEM_TYPE_PLAYROOM_DECORATION_SET, item.ITEM_TYPE_PLAYROOM_DRESS_SET: p.PlayroomBackData() + case item.ITEM_TYPE_PET_FUR: + FurMod := p.PlayMod.getFurMod() + p.PushClientRes(FurMod.BackData()) } } p.PetItemUseLog(itemList) @@ -1063,6 +1074,7 @@ func (p *Player) UpdateUserInfo() { simple.Physiology = p.PlayMod.getPlayroomMod().GetPhysiologyList() simple.Lang = int(p.PlayMod.getBaseMod().Lang) simple.Account = p.PlayMod.getBaseMod().Account + simple.PetFur = p.PlayMod.getFurMod().GetFurSet() //TODO 存储到redis 在新版本中将优化成gob进行压缩 value, _ := json.Marshal(simple) IdStr := GoUtil.String(p.M_DwUin) diff --git a/src/server/game/player_mod.go b/src/server/game/player_mod.go index 5f0330eb..89b19f69 100644 --- a/src/server/game/player_mod.go +++ b/src/server/game/player_mod.go @@ -23,6 +23,7 @@ import ( "server/game/mod/face" "server/game/mod/friend" friendTreasure "server/game/mod/friend_treasure.go" + "server/game/mod/fur" guesscolor "server/game/mod/guess_color" "server/game/mod/guide" guideTask "server/game/mod/guide_task" @@ -120,6 +121,7 @@ type PlayerModList struct { Catnip catnip.CatnipMod // 猫草大作战 GuideTask guideTask.GuideTaskMod // 引导任务 Pass pass.PassMod // 通行证 + Fur fur.FurMod // 毛皮 } func (p *PlayerModData) LoadDataFromDB(dwUin interface{}) bool { @@ -221,6 +223,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { p.ModList.Compensation.InitData() p.ModList.GuideTask.InitData() p.ModList.Pass.InitData() + p.ModList.Fur.InitData() return is_update, nil } @@ -439,3 +442,7 @@ func (p *PlayerMod) getGuideTaskMod() *guideTask.GuideTaskMod { func (p *PlayerMod) getPassMod() *pass.PassMod { return &p.mod_list.Pass } + +func (p *PlayerMod) getFurMod() *fur.FurMod { + return &p.mod_list.Fur +} diff --git a/src/server/game/req_func_fur.go b/src/server/game/req_func_fur.go new file mode 100644 index 00000000..d107a030 --- /dev/null +++ b/src/server/game/req_func_fur.go @@ -0,0 +1,52 @@ +package game + +import ( + "server/msg" + + "google.golang.org/protobuf/proto" +) + +func ReqPetFur(player *Player, buf []byte) error { + FurMod := player.GetFurMod() + player.PushClientRes(FurMod.BackData()) + return nil +} + +func ReqPetFurBuy(player *Player, buf []byte) error { + var req msg.ReqPetFurBuy + err := proto.Unmarshal(buf, &req) + if err != nil { + return err + } + FurMod := player.GetFurMod() + costList, AddItem := FurMod.GetFurBuyCost(int(req.FurId)) + // 扣除物品 + err = player.HandleLoseItem(costList, msg.ITEM_POP_LABEL_PetFurShop.String()) + if err != nil { + return err + } + // 增加物品 + err = player.HandleItem(AddItem, msg.ITEM_POP_LABEL_PetFurShop.String()) + if err != nil { + return err + } + player.PlayMod.save() + return nil +} + +func ReqFurSet(player *Player, buf []byte) error { + var req msg.ReqFurSet + err := proto.Unmarshal(buf, &req) + if err != nil { + return err + } + FurMod := player.GetFurMod() + err = FurMod.SetFur(int(req.FurId)) + if err != nil { + return err + } + player.UpdateUserInfo() + player.PlayMod.save() + player.PushClientRes(FurMod.BackData()) + return nil +} diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index ff06170f..03d6d438 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -106,7 +106,7 @@ func TestNotify(t *testing.T) { // titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg() // title := languageCfg.GetLanguage(msg.LANG_TYPE(1), titlekey) // info := languageCfg.GetLanguage(msg.LANG_TYPE(1), infokey) - GoUtil.NotifyPlayer(10130, 2, title, fmt.Sprintf(info, "猫猫")) + GoUtil.NotifyPlayer(3625212, 2, title, fmt.Sprintf(info, "猫猫")) // GoUtil.NotifyPlayer(19246, 1, "Test Notification", "This is a test notification from the server.") } diff --git a/src/server/test/fur_test.go b/src/server/test/fur_test.go new file mode 100644 index 00000000..2d595828 --- /dev/null +++ b/src/server/test/fur_test.go @@ -0,0 +1,92 @@ +package test + +import ( + "fmt" + fur_cfg "server/conf/fur" + "server/game" + "server/msg" + "testing" + + "google.golang.org/protobuf/proto" +) + +func TestGetFurShopCost(t *testing.T) { + cost := fur_cfg.GetFurShopCost(1) + fmt.Printf("cost: %v", cost) +} + +func TestGetFurShopFreeTimes(t *testing.T) { + freeTimes := fur_cfg.GetFurShopFreeTimes() + fmt.Printf("freeTimes: %d", freeTimes) +} + +func TestGetFurShopTag(t *testing.T) { + tag := fur_cfg.GetFurShopTag(1) + fmt.Printf("tag: %d", tag) +} + +func TestReqPetFur(t *testing.T) { + player := new(game.Player) + err := game.ReqPetFur(player, nil) + if err != nil { + t.Errorf("ReqPetFur error: %v", err) + } +} + +func TestReqPetFurBuy(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + m := msg.ReqPetFurBuy{ + FurId: 1, + } + buf, err := proto.Marshal(&m) + if err != nil { + t.Errorf("marshal error: %v", err) + } + err = game.ReqPetFurBuy(player, buf) + if err != nil { + t.Errorf("ReqPetFurBuy error: %v", err) + } + + m = msg.ReqPetFurBuy{ + FurId: 2, + } + buf, err = proto.Marshal(&m) + if err != nil { + t.Errorf("marshal error: %v", err) + } + err = game.ReqPetFurBuy(player, buf) + if err != nil { + t.Errorf("ReqPetFurBuy error: %v", err) + } +} + +func TestReqFurSet(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + m := msg.ReqFurSet{ + FurId: 1, + } + buf, err := proto.Marshal(&m) + if err != nil { + t.Errorf("marshal error: %v", err) + } + FurMod := player.GetFurMod() + FurMod.AddFurInfo(1, 0, 0) + err = game.ReqFurSet(player, buf) + if err != nil { + t.Errorf("ReqFurSet error: %v", err) + } + + m = msg.ReqFurSet{ + FurId: 0, + } + buf, err = proto.Marshal(&m) + if err != nil { + t.Errorf("marshal error: %v", err) + } + err = game.ReqFurSet(player, buf) + if err != nil { + t.Errorf("ReqFurSet error: %v", err) + } +} From ed57b527a36019e865b817fd13a2cc6fb40d5f30 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Sat, 28 Feb 2026 18:43:12 +0800 Subject: [PATCH 12/87] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game_util/feishu.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game_util/feishu.go b/src/server/game_util/feishu.go index 45922c34..9fac5655 100644 --- a/src/server/game_util/feishu.go +++ b/src/server/game_util/feishu.go @@ -64,11 +64,11 @@ func SendFeishuOrder(PlayerId int, OrderId string, Price float64, ProductName st payload := map[string]interface{}{ "UID": PlayerId, "OrderId": OrderId, - "Product": String(Price), + "Product": fmt.Sprintf("%.2f", Price), "ProductName": ProductName, "EventRecovery": time.Unix(PayTime, 0).Format("2006-01-02 15:04:05"), "EventAge": time.Unix(VerityTime, 0).Format("2006-01-02 15:04:05"), - "TotalCharge": String(Charge), + "TotalCharge": fmt.Sprintf("%.2f", Charge), } payloadBytes, err := json.Marshal(payload) From df9139cec8350da7c6bf276ac00bdb5396eb4647 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 11:34:35 +0800 Subject: [PATCH 13/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=83=E6=97=A5?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=87=8D=E7=BD=AEGM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index a11f1b0a..28118ae7 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -618,7 +618,11 @@ func ReqGmCommand_(player *Player, Command string) error { title = languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey) info = languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey) GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, fmt.Sprintf(title, PlayerSimpleData.PetName), fmt.Sprintf(info, PlayerSimpleData.PetName)) - + case "resetWeekReward": + SevenMod := player.PlayMod.getSevenLoginMod() + SevenMod.MonthResetTime = 0 + PlayerBaseMod := player.GetPlayerBaseMod() + SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } From 698aec855605223c28cc252e9ccc4701f78d98e3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:12:28 +0800 Subject: [PATCH 14/87] =?UTF-8?q?fur=E6=95=B0=E6=8D=AE=E5=9F=8B=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/fur/fur_cfg.go | 16 ++++++++++++++++ src/server/game/player_data.go | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/src/server/conf/fur/fur_cfg.go b/src/server/conf/fur/fur_cfg.go index a4cb7a6b..d4eccd8a 100644 --- a/src/server/conf/fur/fur_cfg.go +++ b/src/server/conf/fur/fur_cfg.go @@ -39,6 +39,14 @@ func GetFurShopTag(id int) int { return gamedata.GetIntValue(data, "TAG") } +func GetFurShopName(id int) string { + data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id) + if err != nil { + return "" + } + return gamedata.GetStringValue(data, "Name") +} + func GetFurShopItem(id int) []*item.Item { data, err := gamedata.GetDataByIntKey(CFG_FUR_SHOP, id) if err != nil { @@ -55,3 +63,11 @@ func GetFurShopItem(id int) []*item.Item { }, } } + +func GetFurShopCostNum(id int) int { + item := GetFurShopCost(id) + if len(item) == 0 { + return 0 + } + return item[0].Num +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 49d975bd..5ba9077c 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -10,6 +10,7 @@ import ( activityCfg "server/conf/activity" cardCfg "server/conf/card" chargeCfg "server/conf/charge" + fur_cfg "server/conf/fur" guesscolorCfg "server/conf/guess_color" itemCfg "server/conf/item" limitedTimeEventCfg "server/conf/limited_time_event" @@ -900,6 +901,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { Effect := itemCfg.GetItemEffect(v.Id) FurMod.AddFurInfo(Effect, GoUtil.Now(), 0) BackDataType[item.ITEM_TYPE_PET_FUR] = struct{}{} + p.TeLog("pro_pet_fur_get", map[string]interface{}{ + "pet_fur_name": fur_cfg.GetFurShopName(v.Id), + "fur_coin_cost": fur_cfg.GetFurShopCostNum(v.Id), + "pet_fur_get_type": Label, + }) default: err := ItemMod.AddItem(v.Id, v.Num) p.TeLog("asset_change", map[string]interface{}{ From 766bcfd30bc7f8b1f9182698a3dad6d683db1de2 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:37:53 +0800 Subject: [PATCH 15/87] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A5=96=E5=8A=B1?= =?UTF-8?q?=E7=9A=84=E7=8C=AB=E5=B8=81=E6=95=B0=E9=87=8F=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 6 +++--- src/server/game/mod/chess/Chess.go | 9 ++++++++- src/server/game/mod/order/order_func.go | 1 + src/server/test/chess_test.go | 23 +++++++++++++++++++++++ 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/server/test/chess_test.go diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 4b97cbcb..226c8847 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -827,7 +827,7 @@ func (player *Player) AddOrder() { NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] if !ok { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetStarEmitList()))} } OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) } @@ -869,7 +869,7 @@ func (player *Player) FixOrderBug() { OrderMod.PreheatStep[k]++ Items, ok := order.PreheatItems[OrderMod.PreheatStep[k]] if !ok { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetStarEmitList()))} } OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) } @@ -997,7 +997,7 @@ func (player *Player) CreateNormalOrder() { if v.Type != order.COMFORT_TYPE { continue } - Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 v.Items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: Star}} OrderMod.OrderList[k] = v diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 0b5cb041..4d946152 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -304,7 +304,14 @@ func (cb *ChessBorad) emitListToSlice(retireFilter bool) []int { for _, v := range EM { result = append(result, v) } - return result + // if !retireFilter { + // for k, v := range cb.Honor { + // if v == 1 { + // result = append(result, k) + // } + // } + // } + return GoUtil.UniqueInts(result) } func (cb *ChessBorad) GetStarEmitList() []int { diff --git a/src/server/game/mod/order/order_func.go b/src/server/game/mod/order/order_func.go index e02cdd8a..8b5280ab 100644 --- a/src/server/game/mod/order/order_func.go +++ b/src/server/game/mod/order/order_func.go @@ -390,6 +390,7 @@ func getChesslvRange(Emit int, EnergyMul int, IsCharge bool) (int, int) { // 根据类型获取发射器id func GetEmitByColor(Emit []int, color string) int { + sort.Ints(Emit) for _, v := range Emit { Produce := mergeDataCfg.GetEmitProduceChessType(v) for _, c := range Produce { diff --git a/src/server/test/chess_test.go b/src/server/test/chess_test.go new file mode 100644 index 00000000..9f2fe5d3 --- /dev/null +++ b/src/server/test/chess_test.go @@ -0,0 +1,23 @@ +package test + +import ( + "fmt" + "server/game" + "server/game/mod/order" + "testing" +) + +func TestGetStarEmitList(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + ChessMod := p1.GetChessMod() + EM := ChessMod.GetStarEmitList() + OrderMod := p1.GetOrderMod() + OrderMod.OrderList = map[int]order.Order{ + 1: { + MergeId: []int{25, 25}, + }, + } + p1.InitOrderItem() + fmt.Printf("%v\n", EM) +} From 5bdd93cbef0d7ad62a61dbd0ba5f2d746fcaafec Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 15:09:14 +0800 Subject: [PATCH 16/87] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A5=96=E5=8A=B1?= =?UTF-8?q?=E7=9A=84=E7=8C=AB=E5=B8=81=E6=95=B0=E9=87=8F=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/chess/Chess.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 4d946152..34a4d226 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -304,13 +304,13 @@ func (cb *ChessBorad) emitListToSlice(retireFilter bool) []int { for _, v := range EM { result = append(result, v) } - // if !retireFilter { - // for k, v := range cb.Honor { - // if v == 1 { - // result = append(result, k) - // } - // } - // } + if !retireFilter { + for k, v := range cb.Honor { + if v == 1 { + result = append(result, k) + } + } + } return GoUtil.UniqueInts(result) } From 64901ca8b05188a5e9b4ca0eb4925e43e4e0b9c7 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 16:34:14 +0800 Subject: [PATCH 17/87] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A5=BD=E5=8F=8B?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/friend/friend_cfg.go | 27 ++ src/server/game/message_handler.go | 7 +- src/server/game/mod/friend/Friend.go | 99 +++- src/server/game/register_network_func.go | 556 ---------------------- src/server/game/req_func_friend.go | 577 +++++++++++++++++++++++ 5 files changed, 688 insertions(+), 578 deletions(-) create mode 100644 src/server/game/req_func_friend.go diff --git a/src/server/conf/friend/friend_cfg.go b/src/server/conf/friend/friend_cfg.go index 5c7327ae..23309f27 100644 --- a/src/server/conf/friend/friend_cfg.go +++ b/src/server/conf/friend/friend_cfg.go @@ -41,3 +41,30 @@ func GetFriendLimitNum() int { } return gamedata.GetIntValue(data, "Value") } + +func GetDailyRecommendLimit() int { + data, err := gamedata.GetDataByKey(CFG_CONST, "friend_daily_recommend_limit") + if err != nil { + log.Debug("GetDailyRecommendLimit err:%v", err) + return 0 + } + return gamedata.GetIntValue(data, "Value") +} + +func GetApplyListLimit() int { + data, err := gamedata.GetDataByKey(CFG_CONST, "friend_apply_list_limit") + if err != nil { + log.Debug("GetApplyListLimit err:%v", err) + return 0 + } + return gamedata.GetIntValue(data, "Value") +} + +func GetDailyGetApplyLimit() int { + data, err := gamedata.GetDataByKey(CFG_CONST, "friend_daily_get_apply_limit") + if err != nil { + log.Debug("GetDailyGetApplyLimit err:%v", err) + return 0 + } + return gamedata.GetIntValue(data, "Value") +} diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 226c8847..5173e4d1 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -62,7 +62,12 @@ func (p *Player) handle(m *msg.Msg) error { switch m.Type { case msg.HANDLE_TYPE_APPLY: // 好友申请 FriendMod := p.PlayMod.getFriendMod() - ok := FriendMod.AddFriendApply(m.From) + var addType int + info, ok := m.Extra.(map[string]interface{}) + if ok { + addType = GoUtil.Int(info["type"]) + } + ok = FriendMod.AddFriendApply(m.From, addType) // 已申请 if ok { return nil diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 0bd63474..6e49ffda 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -11,22 +11,25 @@ import ( ) type FriendMod struct { - FriendList map[int]struct{} // TODO 废弃 好友列表 - NewFriendList map[int]*FriendInfo // 好友列表 - ApplyList map[int]int64 // 好友请求列表 - SendApply map[int]int64 // 发送的申请 - Apply []*ApplyInfo // 其他请求列表 - Card map[string]*card.CardInfo // 收到的申请交换 - Log []*LogInfo // 日志 - AutoId int - Id int64 // 已同步msg ID - Npc []int // npc id - Bubble map[int]*BubbleInfo // 气泡 - ActivityLog []*ActLogInfo // 活动日志 - ReplyList []*ReplyInfo // 好友回复列表 - DailySponsor int // 好友赞助次数 - RecommendList map[int]*Recommend - DailyGetApply int // 每日获得申请次数 + FriendList map[int]struct{} // 废弃 好友列表 + NewFriendList map[int]*FriendInfo // 好友列表 + ApplyList map[int]int64 // 废弃 好友请求列表 + NewApplyList map[int]*ApplyInfo // 好友请求列表 + SendApply map[int]int64 // 发送的申请 + Apply []*ApplyInfo // 其他请求列表 + Card map[string]*card.CardInfo // 收到的申请交换 + Log []*LogInfo // 日志 + AutoId int + Id int64 // 已同步msg ID + Npc []int // npc id + Bubble map[int]*BubbleInfo // 气泡 + ActivityLog []*ActLogInfo // 活动日志 + ReplyList []*ReplyInfo // 好友回复列表 + DailySponsor int // 好友赞助次数 + RecommendList map[int]*Recommend + DailyGetApply int // 每日获得申请次数 + DailyRecommend int // 每日推荐次数 + Version int // 数据版本,增加新字段时需要更新版本号 } type Recommend struct { @@ -71,7 +74,7 @@ type Interact struct { } type ApplyInfo struct { - Type int // 1:申请 2:同意 3:拒绝 4:删除 + Type int Time int64 Uid int64 } @@ -133,7 +136,8 @@ const ( ) const ( - APPLY_TYPE_WISH = 1 // 心愿单请求 + APPLY_TYPE_FRIEND_CODE = 1 // 好友码申请 + APPLY_TYPE_WISH = 2 // 心愿单请求 ) const ( @@ -216,12 +220,29 @@ func (f *FriendMod) InitData() { if f.RecommendList == nil { f.RecommendList = make(map[int]*Recommend) } + if f.NewApplyList == nil { + f.NewApplyList = make(map[int]*ApplyInfo) + } + f.version() +} + +func (f *FriendMod) version() { + if f.Version == 0 { + f.Version = 1 + for k := range f.ApplyList { + f.NewApplyList[k] = &ApplyInfo{ + Type: APPLY_TYPE_FRIEND_CODE, + Time: f.ApplyList[k], + } + } + } } // 零点更新 func (f *FriendMod) ZeroUpdate() { f.DailySponsor = f.GetDailySponsorLimit() f.DailyGetApply = 0 + f.DailyRecommend = 0 } func (f *FriendMod) GetNpc() []int { @@ -384,11 +405,39 @@ func (f *FriendMod) CheckAddBefore(uid int) bool { } // 收到申请 -func (f *FriendMod) AddFriendApply(Uid int) bool { - if f.DailyGetApply >= 30 { +func (f *FriendMod) AddFriendApply(Uid, Type int) bool { + if f.DailyGetApply >= friendCfg.GetDailyGetApplyLimit() { return true } - f.ApplyList[Uid] = GoUtil.Now() + var code_type int + for _, v := range f.NewApplyList { + if v.Type == APPLY_TYPE_FRIEND_CODE { + code_type++ + } + } + // 好友申请列表只保留十条,好友码申请不受数量限制 + if code_type >= friendCfg.GetApplyListLimit() && Type != APPLY_TYPE_FRIEND_CODE { + return true + } + var minTime int64 + if len(f.NewApplyList) >= friendCfg.GetApplyListLimit() { + for _, v := range f.NewApplyList { + if v.Type != APPLY_TYPE_FRIEND_CODE && (minTime == 0 || v.Time < minTime) { + minTime = v.Time + } + } + for k, v := range f.NewApplyList { + if v.Time == minTime { + delete(f.NewApplyList, k) + break + } + } + } + f.NewApplyList[Uid] = &ApplyInfo{ + Type: Type, + Time: GoUtil.Now(), + Uid: int64(Uid), + } f.DailyGetApply++ return false } @@ -658,3 +707,11 @@ func (f *FriendMod) GetRecommendTime(uid int) int64 { } return 0 } + +func (f *FriendMod) AddDailyRecommend() error { + f.DailyRecommend++ + if f.DailyRecommend > friendCfg.GetDailyRecommendLimit() { + return fmt.Errorf("daily recommend limit %d reached", friendCfg.GetDailyRecommendLimit()) + } + return nil +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index b771cc4b..546f8620 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4,14 +4,11 @@ import ( "errors" "fmt" "math" - "server/conf" - baseCfg "server/conf/base" cardCfg "server/conf/card" champshipCfg "server/conf/champship" collectCfg "server/conf/collect" decorateCfg "server/conf/decorate" emojiCfg "server/conf/emoji" - friendCfg "server/conf/friend" GuideTaskCfg "server/conf/guide_task" handbookCfg "server/conf/handbook" limitedTimeEventCfg "server/conf/limited_time_event" @@ -19,7 +16,6 @@ import ( miningCfg "server/conf/mining" orderCfg "server/conf/order" playroomCfg "server/conf/playroom" - "server/db" "server/game/internal" "server/game/mod/activity" "server/game/mod/card" @@ -1795,251 +1791,6 @@ func ReqGetGoldCard(player *Player, buf []byte) error { return nil } -// 搜索用户 -func ReqSearchPlayer(player *Player, buf []byte) error { - req := &msg.ReqSearchPlayer{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - Uid, err := strconv.Atoi(req.Uid) - list := make([]*msg.ResPlayerSimple, 0) - if err == nil { - SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(Uid) - if SearchPlayer != nil && SearchPlayer.Level != 0 { - list = append(list, SearchPlayer) - } - } - data, err := db.SearchPlayer(req.Uid) - if err != nil { - player.SendErrClienRes(&msg.ResSearchPlayer{ - Code: 0, - }) - } - for _, v := range data { - if player.M_DwUin == v.DwUin { - continue - } - SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.DwUin)) - list = append(list, SearchPlayer) - - } - // list 列表去重 - l := make(map[int]*msg.ResPlayerSimple) - for _, v := range list { - if _, ok := l[int(v.Uid)]; !ok { - l[int(v.Uid)] = v - } - } - l2 := make([]*msg.ResPlayerSimple, 0) - for _, v := range l { - l2 = append(l2, v) - } - player.PushClientRes(&msg.ResSearchPlayer{ - List: l2, - }) - return nil -} - -// 申请好友 -func ReqApplyFriend(player *Player, buf []byte) error { - req := &msg.ReqApplyFriend{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - Uid := int(req.Uid) - FriendMod := player.PlayMod.getFriendMod() - if Uid == int(player.M_DwUin) { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "cannot apply yourself", - }) - return fmt.Errorf("cannot apply yourself") - } - if FriendMod.CheckFriend(Uid) { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "already friend", - }) - return fmt.Errorf("already friend") - } - // 好友人数到达上限(2000人)时,玩家将无法再发送好友申请 - if FriendMod.GetFriendLen() >= friendCfg.GetFriendLimitNum() { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "friend list full", - }) - return fmt.Errorf("friend list full") - } - // 对于任何玩家而言,向自己在24小时内已从任意途径发送过好友申请的玩家再次发送好友申请时,该次申请不会被发出 - sendApplyTime := FriendMod.GetSendApplyTime(Uid) - if sendApplyTime != 0 && GoUtil.Now()-sendApplyTime < 86400 { - player.PushClientRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Uid: req.Uid, - Msg: "already applied", - }) - return fmt.Errorf("already applied") - } - now := GoUtil.Now() - if req.Type == 1 { - Items, err := FriendMod.GetSponsorReward() - if err != nil { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - BaseMod := player.PlayMod.getBaseMod() - BaseMod.GetEnergyByAD() - err = player.HandleItem(Items, msg.ITEM_POP_LABEL_ApplyFriendSponsor.String()) - if err != nil { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - player.AddLog(int(req.Uid), friend.LOG_TYPE_FRIEND_SPONSOR, "", now) - FriendMgrSend(&MsqMod.Msg{ - Type: MsqMod.HANDLE_TYPE_FRIEND_SPONSOER, - From: int(player.M_DwUin), - To: Uid, - SendT: now, - End: now + sevendays, - }) - player.PushClientRes(BaseMod.BackData()) - player.TeLog("friend_invite_reward", map[string]interface{}{ - "item_list": Items, - }) - } - m := &MsqMod.Msg{ - Type: MsqMod.HANDLE_TYPE_APPLY, - From: int(player.M_DwUin), - To: Uid, - SendT: now, - End: now + sevendays, - } - FriendMgrSend(m) - player.PushClientRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_SUCCESS, - Uid: req.Uid, - }) - return nil -} - -// 同意申请 -func ReqAgreeFriend(player *Player, buf []byte) error { - req := &msg.ReqAgreeFriend{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - Uid := int(req.Uid) - FriendMod := player.PlayMod.getFriendMod() - if !FriendMod.CheckApply(Uid) { - player.SendErrClienRes(&msg.ResAgreeFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "apply uid not exist", - }) - return fmt.Errorf("apply uid not exist") - } - // 好友人数到达上限(2000人)时,玩家将无法再同意好友申请 - if FriendMod.GetFriendLen() >= friendCfg.GetFriendLimitNum() { - player.SendErrClienRes(&msg.ResAgreeFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "friend list full", - }) - return fmt.Errorf("friend list full") - } - // 新好友才可以打招呼 - if !FriendMod.CheckAddBefore(Uid) { - FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil) - } - FriendMod.AddFriend(Uid) - player.PushClientRes(&msg.ResAgreeFriend{ - Code: msg.RES_CODE_SUCCESS, - Uid: req.Uid, - Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)), - }) - player.TeLog("friend_add", map[string]interface{}{ - "player_id": Uid, - "add_type": "接受申请", - }) - player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) - m := &MsqMod.Msg{ - Type: MsqMod.HADNLE_TYPE_AGREE, - From: int(player.M_DwUin), - To: Uid, - SendT: GoUtil.Now(), - } - FriendMgrSend(m) - player.FriendApplyBackData() - player.FriendLogBackData() - player.PlayMod.save() - return nil -} - -// 删除好友 -func ReqDelFriend(player *Player, buf []byte) error { - req := &msg.ReqDelFriend{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - Uid := int(req.Uid) - m := &MsqMod.Msg{ - Type: MsqMod.HANDLE_TYPE_DEL, - From: int(player.M_DwUin), - To: Uid, - SendT: GoUtil.Now(), - } - FriendMgrSend(m) - FriendMod := player.PlayMod.getFriendMod() - FriendMod.DelFriend(Uid) - player.PlayMod.save() - player.PushClientRes(&msg.ResDelFriend{ - Code: msg.RES_CODE_SUCCESS, - Uid: req.Uid, - }) - player.AddLog(Uid, friend.LOG_TYPE_FRIEND_DELETE, "", GoUtil.Now()) - player.FriendListBackData() - player.TeLog("friend_delete", map[string]interface{}{ - "player_id": Uid, - }) - return nil -} - -// 拒绝申请 -func ReqRefuseFriend(player *Player, buf []byte) error { - req := &msg.ReqRefuseFriend{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - Uid := int(req.Uid) - FriendMod := player.PlayMod.getFriendMod() - FriendMod.RefuseApply(Uid) - player.PlayMod.save() - player.PushClientRes(&msg.ResRefuseFriend{ - Code: msg.RES_CODE_SUCCESS, - Uid: req.Uid, - }) - now := GoUtil.Now() - m := &MsqMod.Msg{ - Type: MsqMod.HANDLE_TYPE_REFUSE, - From: int(player.M_DwUin), - To: Uid, - SendT: now, - End: now + 86400*7, - } - FriendMgrSend(m) - player.FriendApplyBackData() - return nil -} - // 向好友请求卡牌 func ReqCardGive(player *Player, buf []byte) error { req := &msg.ReqCardGive{} @@ -3035,136 +2786,6 @@ func ReqKv(player *Player, buf []byte) error { return nil } -func ReqFriendRecommend(player *Player, buf []byte) error { - FriendMod := player.PlayMod.getFriendMod() - RecommendList := make([]*msg.ResPlayerSimple, 0) - FriendNum := FriendMod.GetFriendNum() - var n int - if FriendNum < 10 { - n = 3 - } else { - Active := 0 - for k := range FriendMod.GetFriendList() { - PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(k) - if PlayerSimpleData == nil { - continue - } - if PlayerSimpleData.Login > GoUtil.Now()-86400 { - Active++ - } - } - n = max(0, 3-(Active/10)) - } - PlayerList := GetRecommendPlayer(player, n) - - for _, v := range PlayerList { - PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(v) - RecommendList = append(RecommendList, PlayerSimpleData) - } - player.PushClientRes(&msg.ResFriendRecommend{ - List: RecommendList, - }) - player.PlayMod.save() - return nil -} - -func ReqFriendList(player *Player, buf []byte) error { - player.FriendListBackData() - return nil -} - -func ReqFriendApply(player *Player, buf []byte) error { - player.FriendApplyBackData() - return nil -} - -func ReqFriendCardMsg(player *Player, buf []byte) error { - player.FriendCardBackData() - return nil -} - -func ReqFriendTimeLine(player *Player, buf []byte) error { - player.FriendLogBackData() - return nil -} - -func ReqFriendTLUpvote(player *Player, buf []byte) error { - req := &msg.ReqFriendTLUpvote{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - FriendMod := player.PlayMod.getFriendMod() - Items, FUid, err := FriendMod.Upvote(int(req.Id)) - if err != nil { - player.SendErrClienRes(&msg.ResFriendTLUpvote{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - err = player.HandleItem(Items, msg.ITEM_POP_LABEL_TLUpvote.String()) - if err != nil { - player.SendErrClienRes(&msg.ResFriendTLUpvote{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - now := GoUtil.Now() - // 添加时间线 - m := &MsqMod.Msg{ - Type: MsqMod.HANDLE_TYPE_HANDBOOK_UPVOTE, - From: int(player.M_DwUin), - To: int(FUid), - SendT: now, - End: now + sevendays, - } - FriendMod.AddActLog(friend.ACT_LOG_TYPE_VISIT_UPVOTE, "") - player.UpdateUserInfo() - FriendMgrSend(m) - player.PlayMod.save() - player.PushClientRes(&msg.ResFriendTLUpvote{ - Code: msg.RES_CODE_SUCCESS, - Id: req.Id, - }) - player.TeLog("friend_upvote", map[string]interface{}{ - "player_id": int(req.Id), - }) - return nil -} - -func ReqFriendTReward(player *Player, buf []byte) error { - req := &msg.ReqFriendTReward{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - FriendMod := player.PlayMod.getFriendMod() - Items, err := FriendMod.GetReward(int(req.Id)) - if err != nil { - player.SendErrClienRes(&msg.ResFriendTReward{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendTReward.String()) - if err != nil { - player.SendErrClienRes(&msg.ResFriendTReward{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - player.PlayMod.save() - player.PushClientRes(&msg.ResFriendTReward{ - Code: msg.RES_CODE_SUCCESS, - Id: req.Id, - }) - return nil -} - func ReqChampshipRankReward(player *Player, buf []byte) error { _, myPreRank := player.GetChampshipRank() ChampshipMod := player.PlayMod.getChampshipMod() @@ -5046,40 +4667,6 @@ func ReqCatTrickReward(player *Player, buf []byte) error { return nil } -func ReqAddNpc(player *Player, buf []byte) error { - req := &msg.ReqAddNpc{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - FriendMod := player.PlayMod.getFriendMod() - err = FriendMod.SetNpc(int(req.NpcId)) - if err != nil { - player.SendErrClienRes(&msg.ResAddNpc{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - if len(FriendMod.Npc) == 1 { // 首次添加NPC 视为邀请好友成功 - InviteMod := player.PlayMod.getInviteMod() - InviteMod.AddInvite(int(req.NpcId)) - } - player.PlayMod.save() - player.FriendListBackData() - player.TeLog("add_npc", map[string]interface{}{ - "NpcId": int(req.NpcId), - }) - FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil) - FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "", GoUtil.Now()+oneday, nil) - player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now()) - player.PushClientRes(&msg.ResAddNpc{ - Code: msg.RES_CODE_SUCCESS, - NpcId: req.NpcId, - }) - return nil -} - func ReqChargeReceive(player *Player, buf []byte) error { req := &msg.ReqChargeReceive{} err := proto.Unmarshal(buf, req) @@ -5329,51 +4916,6 @@ func ReqId2Verify(player *Player, buf []byte) error { return nil } -func ReqFriendByCode(player *Player, buf []byte) error { - req := &msg.ReqFriendByCode{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - if req.Code == "" { - player.SendErrClienRes(&msg.ResFriendByCode{ - Code: msg.RES_CODE_FAIL, - Msg: "code is empty", - }) - return fmt.Errorf("code is empty") - } - CodeNum := GoUtil.ParseUniqueStringToInt(req.Code) - if CodeNum <= 0 { - player.SendErrClienRes(&msg.ResFriendByCode{ - Code: msg.RES_CODE_FAIL, - Msg: "code is invalid", - }) - return fmt.Errorf("code is invalid") - } - Uid := int64(CodeNum) + int64(100000) + int64(conf.Server.AppID*100000000) - if Uid == player.M_DwUin { - player.SendErrClienRes(&msg.ResFriendByCode{ - Code: msg.RES_CODE_FAIL, - Msg: "can not add yourself", - }) - return fmt.Errorf("can not add yourself") - } - - PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(int(Uid)) - if PlayerSimpleData == nil { - player.SendErrClienRes(&msg.ResFriendByCode{ - Code: msg.RES_CODE_FAIL, - Msg: "player not exist", - }) - return fmt.Errorf("player not exist") - } - player.PushClientRes(&msg.ResFriendByCode{ - Code: msg.RES_CODE_SUCCESS, - Player: PlayerSimpleData, - }) - return nil -} - func ReqPlayroomGameShowReward(player *Player, buf []byte) error { req := &msg.ReqPlayroomGameShowReward{} err := proto.Unmarshal(buf, req) @@ -5776,104 +5318,6 @@ func ReqActPassReward(player *Player, buf []byte) error { return nil } -func ReqFriendReplyHandle(player *Player, buf []byte) error { - req := &msg.ReqFriendReplyHandle{} - err := proto.Unmarshal(buf, req) - if err != nil { - return err - } - FriendMod := player.PlayMod.getFriendMod() - ReplyInfo := FriendMod.ReplyFriend(int(req.LogId)) - if ReplyInfo == nil { - player.SendErrClienRes(&msg.ResFriendReplyHandle{ - Code: msg.RES_CODE_FAIL, - Msg: "reply info not exist", - }) - return fmt.Errorf("reply info not exist") - } - ErrType := msg.FRIEND_REPLY_HANDLE_ERR_TYPE_NONE - now := GoUtil.Now() - if req.Type == 1 && ReplyInfo.Uid > 10000 { - switch ReplyInfo.Type { - case friend.REPLY_TYPE_GREETING: - ReplyData := friend.ReplyInfo{ - Uid: int(player.M_DwUin), - Type: friend.REPLY_TYPE_GREETING_Get, - Param: req.Param, - } - FriendMgrSend(&MsqMod.Msg{ - From: int(player.M_DwUin), - To: int(ReplyInfo.Uid), - Type: MsqMod.HANDLE_TYPE_FRIEND_GREETING_REPLY, - SendT: now, - End: now + sevendays, - Extra: ReplyData, - }) - case friend.REPLY_TYPE_CATNIP: // 猫草大作战同意邀请 - GameId := GoUtil.Int(ReplyInfo.Param) - activityInfo := player.GetActivityInfo(player.GetActivityId(activity.ACT_TYPE_CATNIP)) - if activityInfo == nil { - break - } - err := player.SetCatnipPartner(GameId, ReplyInfo.Uid, activityInfo.EndT) - if err == nil { - CatnipMod := player.PlayMod.getCatnipMod() - ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP) - UserList, _ := CatnipMod.Agree(GameId, ReplyInfo.Uid) - player.TeLog("catnip_agree", map[string]interface{}{ - "Id": int(GameId), - }) - FriendMgrSend(&MsqMod.Msg{ - From: int(player.M_DwUin), - To: int(ReplyInfo.Uid), - Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE, - Extra: CatnipMsg{ - ActivityId: ActivityId, - GameId: int(GameId), - }, - SendT: now, - End: now + sevendays, - }) - - for _, v := range UserList { - FriendMgrSend(&MsqMod.Msg{ - From: int(player.M_DwUin), - To: int(v), - Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE, - Extra: CatnipMsg{ - ActivityId: ActivityId, - GameId: int(GameId), - }, - SendT: now, - End: now + sevendays, - }) - } - player.CatnipBackData() - } else { - ErrType = msg.FRIEND_REPLY_HANDLE_ERR_TYPE_CATNIP - } - - } - } - Items := baseCfg.GetFriendReplyReward() - err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendReplyHandle.String()) - if err != nil { - player.SendErrClienRes(&msg.ResFriendReplyHandle{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - return err - } - player.FriendLogBackData() - player.PushClientRes(&msg.ResFriendReplyHandle{ - Code: msg.RES_CODE_SUCCESS, - LogId: req.LogId, - Type: req.Type, - ErrType: ErrType, - }) - return nil -} - func ReqGetChessRetireReward(player *Player, buf []byte) error { req := &msg.ReqGetChessRetireReward{} err := proto.Unmarshal(buf, req) diff --git a/src/server/game/req_func_friend.go b/src/server/game/req_func_friend.go new file mode 100644 index 00000000..a62d3e41 --- /dev/null +++ b/src/server/game/req_func_friend.go @@ -0,0 +1,577 @@ +package game + +import ( + "fmt" + "server/conf" + baseCfg "server/conf/base" + friendCfg "server/conf/friend" + "server/db" + "server/game/mod/activity" + "server/game/mod/friend" + MsqMod "server/game/mod/msg" + GoUtil "server/game_util" + "server/msg" + "strconv" + + "google.golang.org/protobuf/proto" +) + +func ReqFriendRecommend(player *Player, buf []byte) error { + FriendMod := player.PlayMod.getFriendMod() + RecommendList := make([]*msg.ResPlayerSimple, 0) + FriendNum := FriendMod.GetFriendNum() + err := FriendMod.AddDailyRecommend() + if err != nil { + player.SendErrClienRes(&msg.ResFriendRecommend{}) + return err + } + var n int + if FriendNum < 10 { + n = 3 + } else { + Active := 0 + for k := range FriendMod.GetFriendList() { + PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(k) + if PlayerSimpleData == nil { + continue + } + if PlayerSimpleData.Login > GoUtil.Now()-86400 { + Active++ + } + } + n = max(0, 3-(Active/10)) + } + PlayerList := GetRecommendPlayer(player, n) + + for _, v := range PlayerList { + PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(v) + RecommendList = append(RecommendList, PlayerSimpleData) + } + player.PushClientRes(&msg.ResFriendRecommend{ + List: RecommendList, + }) + player.PlayMod.save() + return nil +} + +// 搜索用户 +func ReqSearchPlayer(player *Player, buf []byte) error { + req := &msg.ReqSearchPlayer{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + Uid, err := strconv.Atoi(req.Uid) + list := make([]*msg.ResPlayerSimple, 0) + if err == nil { + SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(Uid) + if SearchPlayer != nil && SearchPlayer.Level != 0 { + list = append(list, SearchPlayer) + } + } + data, err := db.SearchPlayer(req.Uid) + if err != nil { + player.SendErrClienRes(&msg.ResSearchPlayer{ + Code: 0, + }) + } + for _, v := range data { + if player.M_DwUin == v.DwUin { + continue + } + SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.DwUin)) + list = append(list, SearchPlayer) + + } + // list 列表去重 + l := make(map[int]*msg.ResPlayerSimple) + for _, v := range list { + if _, ok := l[int(v.Uid)]; !ok { + l[int(v.Uid)] = v + } + } + l2 := make([]*msg.ResPlayerSimple, 0) + for _, v := range l { + l2 = append(l2, v) + } + player.PushClientRes(&msg.ResSearchPlayer{ + List: l2, + }) + return nil +} + +// 申请好友 +func ReqApplyFriend(player *Player, buf []byte) error { + req := &msg.ReqApplyFriend{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + Uid := int(req.Uid) + FriendMod := player.PlayMod.getFriendMod() + if Uid == int(player.M_DwUin) { + player.SendErrClienRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_FAIL, + Msg: "cannot apply yourself", + }) + return fmt.Errorf("cannot apply yourself") + } + if FriendMod.CheckFriend(Uid) { + player.SendErrClienRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_FAIL, + Msg: "already friend", + }) + return fmt.Errorf("already friend") + } + // 好友人数到达上限(2000人)时,玩家将无法再发送好友申请 + if FriendMod.GetFriendLen() >= friendCfg.GetFriendLimitNum() { + player.SendErrClienRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_FAIL, + Msg: "friend list full", + }) + return fmt.Errorf("friend list full") + } + // 对于任何玩家而言,向自己在24小时内已从任意途径发送过好友申请的玩家再次发送好友申请时,该次申请不会被发出 + sendApplyTime := FriendMod.GetSendApplyTime(Uid) + if sendApplyTime != 0 && GoUtil.Now()-sendApplyTime < 86400 { + player.PushClientRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_FAIL, + Uid: req.Uid, + Msg: "already applied", + }) + return fmt.Errorf("already applied") + } + now := GoUtil.Now() + if req.Type == 1 { + Items, err := FriendMod.GetSponsorReward() + if err != nil { + player.SendErrClienRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + BaseMod := player.PlayMod.getBaseMod() + BaseMod.GetEnergyByAD() + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_ApplyFriendSponsor.String()) + if err != nil { + player.SendErrClienRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.AddLog(int(req.Uid), friend.LOG_TYPE_FRIEND_SPONSOR, "", now) + FriendMgrSend(&MsqMod.Msg{ + Type: MsqMod.HANDLE_TYPE_FRIEND_SPONSOER, + From: int(player.M_DwUin), + To: Uid, + SendT: now, + End: now + sevendays, + }) + player.PushClientRes(BaseMod.BackData()) + player.TeLog("friend_invite_reward", map[string]interface{}{ + "item_list": Items, + }) + } + m := &MsqMod.Msg{ + Type: MsqMod.HANDLE_TYPE_APPLY, + From: int(player.M_DwUin), + To: Uid, + SendT: now, + End: now + sevendays, + Extra: map[string]interface{}{ + "type": req.Type, + }, + } + FriendMgrSend(m) + player.PushClientRes(&msg.ResApplyFriend{ + Code: msg.RES_CODE_SUCCESS, + Uid: req.Uid, + }) + return nil +} + +// 同意申请 +func ReqAgreeFriend(player *Player, buf []byte) error { + req := &msg.ReqAgreeFriend{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + Uid := int(req.Uid) + FriendMod := player.PlayMod.getFriendMod() + if !FriendMod.CheckApply(Uid) { + player.SendErrClienRes(&msg.ResAgreeFriend{ + Code: msg.RES_CODE_FAIL, + Msg: "apply uid not exist", + }) + return fmt.Errorf("apply uid not exist") + } + // 好友人数到达上限(2000人)时,玩家将无法再同意好友申请 + if FriendMod.GetFriendLen() >= friendCfg.GetFriendLimitNum() { + player.SendErrClienRes(&msg.ResAgreeFriend{ + Code: msg.RES_CODE_FAIL, + Msg: "friend list full", + }) + return fmt.Errorf("friend list full") + } + // 新好友才可以打招呼 + if !FriendMod.CheckAddBefore(Uid) { + FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil) + } + FriendMod.AddFriend(Uid) + player.PushClientRes(&msg.ResAgreeFriend{ + Code: msg.RES_CODE_SUCCESS, + Uid: req.Uid, + Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)), + }) + player.TeLog("friend_add", map[string]interface{}{ + "player_id": Uid, + "add_type": "接受申请", + }) + player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) + m := &MsqMod.Msg{ + Type: MsqMod.HADNLE_TYPE_AGREE, + From: int(player.M_DwUin), + To: Uid, + SendT: GoUtil.Now(), + } + FriendMgrSend(m) + player.FriendApplyBackData() + player.FriendLogBackData() + player.PlayMod.save() + return nil +} + +// 删除好友 +func ReqDelFriend(player *Player, buf []byte) error { + req := &msg.ReqDelFriend{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + Uid := int(req.Uid) + m := &MsqMod.Msg{ + Type: MsqMod.HANDLE_TYPE_DEL, + From: int(player.M_DwUin), + To: Uid, + SendT: GoUtil.Now(), + } + FriendMgrSend(m) + FriendMod := player.PlayMod.getFriendMod() + FriendMod.DelFriend(Uid) + player.PlayMod.save() + player.PushClientRes(&msg.ResDelFriend{ + Code: msg.RES_CODE_SUCCESS, + Uid: req.Uid, + }) + player.AddLog(Uid, friend.LOG_TYPE_FRIEND_DELETE, "", GoUtil.Now()) + player.FriendListBackData() + player.TeLog("friend_delete", map[string]interface{}{ + "player_id": Uid, + }) + return nil +} + +// 拒绝申请 +func ReqRefuseFriend(player *Player, buf []byte) error { + req := &msg.ReqRefuseFriend{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + Uid := int(req.Uid) + FriendMod := player.PlayMod.getFriendMod() + FriendMod.RefuseApply(Uid) + player.PlayMod.save() + player.PushClientRes(&msg.ResRefuseFriend{ + Code: msg.RES_CODE_SUCCESS, + Uid: req.Uid, + }) + now := GoUtil.Now() + m := &MsqMod.Msg{ + Type: MsqMod.HANDLE_TYPE_REFUSE, + From: int(player.M_DwUin), + To: Uid, + SendT: now, + End: now + 86400*7, + } + FriendMgrSend(m) + player.FriendApplyBackData() + return nil +} + +func ReqFriendList(player *Player, buf []byte) error { + player.FriendListBackData() + return nil +} + +func ReqFriendApply(player *Player, buf []byte) error { + player.FriendApplyBackData() + return nil +} + +func ReqFriendCardMsg(player *Player, buf []byte) error { + player.FriendCardBackData() + return nil +} + +func ReqFriendTimeLine(player *Player, buf []byte) error { + player.FriendLogBackData() + return nil +} + +func ReqFriendTLUpvote(player *Player, buf []byte) error { + req := &msg.ReqFriendTLUpvote{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + FriendMod := player.PlayMod.getFriendMod() + Items, FUid, err := FriendMod.Upvote(int(req.Id)) + if err != nil { + player.SendErrClienRes(&msg.ResFriendTLUpvote{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_TLUpvote.String()) + if err != nil { + player.SendErrClienRes(&msg.ResFriendTLUpvote{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + now := GoUtil.Now() + // 添加时间线 + m := &MsqMod.Msg{ + Type: MsqMod.HANDLE_TYPE_HANDBOOK_UPVOTE, + From: int(player.M_DwUin), + To: int(FUid), + SendT: now, + End: now + sevendays, + } + FriendMod.AddActLog(friend.ACT_LOG_TYPE_VISIT_UPVOTE, "") + player.UpdateUserInfo() + FriendMgrSend(m) + player.PlayMod.save() + player.PushClientRes(&msg.ResFriendTLUpvote{ + Code: msg.RES_CODE_SUCCESS, + Id: req.Id, + }) + player.TeLog("friend_upvote", map[string]interface{}{ + "player_id": int(req.Id), + }) + return nil +} + +func ReqFriendTReward(player *Player, buf []byte) error { + req := &msg.ReqFriendTReward{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + FriendMod := player.PlayMod.getFriendMod() + Items, err := FriendMod.GetReward(int(req.Id)) + if err != nil { + player.SendErrClienRes(&msg.ResFriendTReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendTReward.String()) + if err != nil { + player.SendErrClienRes(&msg.ResFriendTReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.PlayMod.save() + player.PushClientRes(&msg.ResFriendTReward{ + Code: msg.RES_CODE_SUCCESS, + Id: req.Id, + }) + return nil +} + +func ReqFriendReplyHandle(player *Player, buf []byte) error { + req := &msg.ReqFriendReplyHandle{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + FriendMod := player.PlayMod.getFriendMod() + ReplyInfo := FriendMod.ReplyFriend(int(req.LogId)) + if ReplyInfo == nil { + player.SendErrClienRes(&msg.ResFriendReplyHandle{ + Code: msg.RES_CODE_FAIL, + Msg: "reply info not exist", + }) + return fmt.Errorf("reply info not exist") + } + ErrType := msg.FRIEND_REPLY_HANDLE_ERR_TYPE_NONE + now := GoUtil.Now() + if req.Type == 1 && ReplyInfo.Uid > 10000 { + switch ReplyInfo.Type { + case friend.REPLY_TYPE_GREETING: + ReplyData := friend.ReplyInfo{ + Uid: int(player.M_DwUin), + Type: friend.REPLY_TYPE_GREETING_Get, + Param: req.Param, + } + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(ReplyInfo.Uid), + Type: MsqMod.HANDLE_TYPE_FRIEND_GREETING_REPLY, + SendT: now, + End: now + sevendays, + Extra: ReplyData, + }) + case friend.REPLY_TYPE_CATNIP: // 猫草大作战同意邀请 + GameId := GoUtil.Int(ReplyInfo.Param) + activityInfo := player.GetActivityInfo(player.GetActivityId(activity.ACT_TYPE_CATNIP)) + if activityInfo == nil { + break + } + err := player.SetCatnipPartner(GameId, ReplyInfo.Uid, activityInfo.EndT) + if err == nil { + CatnipMod := player.PlayMod.getCatnipMod() + ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP) + UserList, _ := CatnipMod.Agree(GameId, ReplyInfo.Uid) + player.TeLog("catnip_agree", map[string]interface{}{ + "Id": int(GameId), + }) + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(ReplyInfo.Uid), + Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE, + Extra: CatnipMsg{ + ActivityId: ActivityId, + GameId: int(GameId), + }, + SendT: now, + End: now + sevendays, + }) + + for _, v := range UserList { + FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: int(v), + Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE, + Extra: CatnipMsg{ + ActivityId: ActivityId, + GameId: int(GameId), + }, + SendT: now, + End: now + sevendays, + }) + } + player.CatnipBackData() + } else { + ErrType = msg.FRIEND_REPLY_HANDLE_ERR_TYPE_CATNIP + } + + } + } + Items := baseCfg.GetFriendReplyReward() + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendReplyHandle.String()) + if err != nil { + player.SendErrClienRes(&msg.ResFriendReplyHandle{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + player.FriendLogBackData() + player.PushClientRes(&msg.ResFriendReplyHandle{ + Code: msg.RES_CODE_SUCCESS, + LogId: req.LogId, + Type: req.Type, + ErrType: ErrType, + }) + return nil +} + +func ReqFriendByCode(player *Player, buf []byte) error { + req := &msg.ReqFriendByCode{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + if req.Code == "" { + player.SendErrClienRes(&msg.ResFriendByCode{ + Code: msg.RES_CODE_FAIL, + Msg: "code is empty", + }) + return fmt.Errorf("code is empty") + } + CodeNum := GoUtil.ParseUniqueStringToInt(req.Code) + if CodeNum <= 0 { + player.SendErrClienRes(&msg.ResFriendByCode{ + Code: msg.RES_CODE_FAIL, + Msg: "code is invalid", + }) + return fmt.Errorf("code is invalid") + } + Uid := int64(CodeNum) + int64(100000) + int64(conf.Server.AppID*100000000) + if Uid == player.M_DwUin { + player.SendErrClienRes(&msg.ResFriendByCode{ + Code: msg.RES_CODE_FAIL, + Msg: "can not add yourself", + }) + return fmt.Errorf("can not add yourself") + } + + PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(int(Uid)) + if PlayerSimpleData == nil { + player.SendErrClienRes(&msg.ResFriendByCode{ + Code: msg.RES_CODE_FAIL, + Msg: "player not exist", + }) + return fmt.Errorf("player not exist") + } + player.PushClientRes(&msg.ResFriendByCode{ + Code: msg.RES_CODE_SUCCESS, + Player: PlayerSimpleData, + }) + return nil +} + +func ReqAddNpc(player *Player, buf []byte) error { + req := &msg.ReqAddNpc{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + FriendMod := player.PlayMod.getFriendMod() + err = FriendMod.SetNpc(int(req.NpcId)) + if err != nil { + player.SendErrClienRes(&msg.ResAddNpc{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } + if len(FriendMod.Npc) == 1 { // 首次添加NPC 视为邀请好友成功 + InviteMod := player.PlayMod.getInviteMod() + InviteMod.AddInvite(int(req.NpcId)) + } + player.PlayMod.save() + player.FriendListBackData() + player.TeLog("add_npc", map[string]interface{}{ + "NpcId": int(req.NpcId), + }) + FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil) + FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "", GoUtil.Now()+oneday, nil) + player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now()) + player.PushClientRes(&msg.ResAddNpc{ + Code: msg.RES_CODE_SUCCESS, + NpcId: req.NpcId, + }) + return nil +} From b0e2c5672c3f1d13825b475d602e50b90392416d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 16:46:57 +0800 Subject: [PATCH 18/87] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A5=BD=E5=8F=8B?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/friend/Friend.go | 46 ++++++++++++------------ src/server/game/mod_factory.go | 5 +++ src/server/game/register_network_func.go | 3 +- src/server/test/friend_test.go | 15 ++++++++ 4 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 src/server/test/friend_test.go diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 6e49ffda..7881f73c 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -8,6 +8,7 @@ import ( "server/game/mod/item" GoUtil "server/game_util" "server/msg" + "sort" ) type FriendMod struct { @@ -76,7 +77,6 @@ type Interact struct { type ApplyInfo struct { Type int Time int64 - Uid int64 } const ( @@ -231,10 +231,25 @@ func (f *FriendMod) version() { f.Version = 1 for k := range f.ApplyList { f.NewApplyList[k] = &ApplyInfo{ - Type: APPLY_TYPE_FRIEND_CODE, Time: f.ApplyList[k], } } + type sortData struct { + Uid int + Time int64 + } + PlayerList := make([]sortData, 0) + for k, v := range f.NewApplyList { + PlayerList = append(PlayerList, sortData{k, v.Time}) + } + sort.Slice(PlayerList, func(i, j int) bool { + return PlayerList[i].Time > PlayerList[j].Time + }) + for i := 0; i < len(PlayerList); i++ { + if i >= friendCfg.GetApplyListLimit() { + delete(f.NewApplyList, PlayerList[i].Uid) + } + } } } @@ -316,7 +331,7 @@ func (f *FriendMod) AddFriend(id int) { f.NewFriendList[id] = &FriendInfo{ AddTime: GoUtil.Now(), } - delete(f.ApplyList, id) + delete(f.NewApplyList, id) } // 获取卡牌交换信息 @@ -356,13 +371,13 @@ func (f *FriendMod) GetFriendLen() int { // 拒绝好友申请 func (f *FriendMod) RefuseApply(id int) { - delete(f.ApplyList, id) + delete(f.NewApplyList, id) delete(f.SendApply, id) } // 检查好友申请 func (f *FriendMod) CheckApply(id int) bool { - _, ok := f.ApplyList[id] + _, ok := f.NewApplyList[id] return ok } func (f *FriendMod) GetFriendNum() int { @@ -436,7 +451,6 @@ func (f *FriendMod) AddFriendApply(Uid, Type int) bool { f.NewApplyList[Uid] = &ApplyInfo{ Type: Type, Time: GoUtil.Now(), - Uid: int64(Uid), } f.DailyGetApply++ return false @@ -465,7 +479,7 @@ func (f *FriendMod) GetSendApplyTime(Id int) int64 { func (f *FriendMod) AgreeApply(UId int) { f.AddFriend(UId) delete(f.SendApply, UId) - delete(f.ApplyList, UId) + delete(f.NewApplyList, UId) } // 增加好友日志 @@ -589,16 +603,7 @@ func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) { // 增加心愿单申请 func (f *FriendMod) AddWishApply(Uid int64) error { - for _, v := range f.Apply { - if v.Type == APPLY_TYPE_WISH && v.Uid == Uid { - return fmt.Errorf("wish apply already exist") - } - } - f.Apply = append(f.Apply, &ApplyInfo{ - Type: APPLY_TYPE_WISH, - Uid: Uid, - Time: GoUtil.Now(), - }) + return nil } @@ -615,12 +620,7 @@ func (f *FriendMod) GetWishApply() []*ApplyInfo { // 同意心愿单申请 func (f *FriendMod) ApplyWish(Uid int64) error { - for k, v := range f.Apply { - if v.Type == APPLY_TYPE_WISH && v.Uid == Uid { - f.Apply = append(f.Apply[:k], f.Apply[k+1:]...) - return nil - } - } + return fmt.Errorf("wish apply not exist") } diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index 502d5ed1..d2ad38bc 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -7,6 +7,7 @@ import ( "server/game/mod/chess" "server/game/mod/decorate" "server/game/mod/endless" + "server/game/mod/friend" "server/game/mod/fur" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" @@ -62,3 +63,7 @@ func (p *Player) GetOrderMod() *order.OrderMod { func (p *Player) GetFurMod() *fur.FurMod { return p.PlayMod.getFurMod() } + +func (p *Player) GetFriendMod() *friend.FriendMod { + return p.PlayMod.getFriendMod() +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 546f8620..b235419c 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4791,6 +4791,7 @@ func ReqSendWishBeg(player *Player, buf []byte) error { return nil } +// TODO 心愿单功能 待开发 func ReqWishApplyList(player *Player, buf []byte) error { req := &msg.ReqWishApplyList{} err := proto.Unmarshal(buf, req) @@ -4801,7 +4802,7 @@ func ReqWishApplyList(player *Player, buf []byte) error { List := FriendMod.GetWishApply() rs := make([]*msg.ResFriendApplyInfo, 0) for _, v := range List { - PD := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.Uid)) + PD := G_GameLogicPtr.GetResSimplePlayerByUid(0) if PD == nil { continue } diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go new file mode 100644 index 00000000..0fd36df3 --- /dev/null +++ b/src/server/test/friend_test.go @@ -0,0 +1,15 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestFriendInit(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + FriendMod := p1.GetFriendMod() + if FriendMod == nil { + t.Error("FriendMod init failed") + } +} From fd4ab739bf65c15baade6c1afb6d8d2c61cf604b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 17:10:10 +0800 Subject: [PATCH 19/87] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A5=BD=E5=8F=8B?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 6 +++--- src/server/game/player_back.go | 6 +++--- src/server/test/friend_test.go | 10 ++++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 28118ae7..e862356d 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -409,13 +409,13 @@ func ReqGmCommand_(player *Player, Command string) error { case "resetFriend": FriendMod := player.PlayMod.getFriendMod() FriendMod.FriendList = make(map[int]struct{}) - FriendMod.ApplyList = make(map[int]int64) + FriendMod.NewApplyList = make(map[int]*friend.ApplyInfo) FriendMod.Card = make(map[string]*card.CardInfo) FriendMod.SendApply = make(map[int]int64) FriendMod.NewFriendList = make(map[int]*friend.FriendInfo) - FriendMod.Npc = []int{} + FriendMod.Npc = nil FriendMod.Id = 0 - FriendMod.Log = make([]*friend.LogInfo, 0) + FriendMod.Log = nil FriendMod.InitData() player.FriendListBackData() player.FriendLogBackData() diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 8698f8da..52bc4d53 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -346,13 +346,13 @@ func (p *Player) FriendListBackData() { func (p *Player) FriendApplyBackData() { FriendMod := p.PlayMod.getFriendMod() - al := make([]*proto.ResFriendApplyInfo, 0, len(FriendMod.ApplyList)) - for k, v := range FriendMod.ApplyList { + al := make([]*proto.ResFriendApplyInfo, 0, len(FriendMod.NewApplyList)) + for k, v := range FriendMod.NewApplyList { ps := G_GameLogicPtr.GetResSimplePlayerByUid(k) if ps != nil { al = append(al, &proto.ResFriendApplyInfo{ Player: ps, - Time: int32(v), + Time: int32(v.Time), }) } } diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go index 0fd36df3..68d44ac2 100644 --- a/src/server/test/friend_test.go +++ b/src/server/test/friend_test.go @@ -13,3 +13,13 @@ func TestFriendInit(t *testing.T) { t.Error("FriendMod init failed") } } + +func TestFriendApply(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + FriendMod := p1.GetFriendMod() + FriendMod.AddFriendApply(100002, 0) + if !FriendMod.CheckApply(100002) { + t.Error("FriendMod AddFriendApply failed") + } +} From ee8e3b9a5fb1c485808d26a30efa3cf020c0ae3e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 17:28:36 +0800 Subject: [PATCH 20/87] =?UTF-8?q?gob=E8=A7=A3=E6=9E=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/cluster/Cluster.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/cluster/Cluster.go b/src/server/cluster/Cluster.go index 0a9e5efa..93a2004d 100644 --- a/src/server/cluster/Cluster.go +++ b/src/server/cluster/Cluster.go @@ -96,7 +96,7 @@ func (a *Agent) Run() { err = GoUtil.GobUnmarshal(data, &m) if err != nil { log.Debug("decode err: %v", err) - return + continue } err = processMsg(a, &m) if err != nil { From 0b2fdf49c37acd9a6a0181942679ef011417d1a6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 18:44:16 +0800 Subject: [PATCH 21/87] =?UTF-8?q?gob=E8=A7=A3=E6=9E=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/cluster/Cluster.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/cluster/Cluster.go b/src/server/cluster/Cluster.go index 93a2004d..a60fae5d 100644 --- a/src/server/cluster/Cluster.go +++ b/src/server/cluster/Cluster.go @@ -95,7 +95,7 @@ func (a *Agent) Run() { m := msg.Msg{} err = GoUtil.GobUnmarshal(data, &m) if err != nil { - log.Debug("decode err: %v", err) + log.Debug("decode err: %v, data: %s", err, string(data)) continue } err = processMsg(a, &m) From 1e0ca0db80c1c7cf6a32ad2d1c0ce47f1c6b13ba Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 2 Mar 2026 18:52:24 +0800 Subject: [PATCH 22/87] =?UTF-8?q?gob=E8=A7=A3=E6=9E=90=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/cluster/Cluster.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/cluster/Cluster.go b/src/server/cluster/Cluster.go index a60fae5d..62911b29 100644 --- a/src/server/cluster/Cluster.go +++ b/src/server/cluster/Cluster.go @@ -96,7 +96,7 @@ func (a *Agent) Run() { err = GoUtil.GobUnmarshal(data, &m) if err != nil { log.Debug("decode err: %v, data: %s", err, string(data)) - continue + return } err = processMsg(a, &m) if err != nil { From a22e318c2277ff73032ea7b9b72b667ad2cabce0 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:29:48 +0800 Subject: [PATCH 23/87] =?UTF-8?q?=E6=B6=88=E6=81=AF=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/msg/Msg.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index ed85f8e5..b839e91c 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -169,16 +169,17 @@ const ( func (m *Msg) Clone() *Msg { return &Msg{ - Type: m.Type, - To: m.To, - From: m.From, - Item: m.Item, - SendT: m.SendT, - End: m.End, - Extra: m.Extra, - Id: m.Id, - H: m.H, - UniKey: m.UniKey, + Type: m.Type, + To: m.To, + From: m.From, + Item: m.Item, + SendT: m.SendT, + End: m.End, + Extra: m.Extra, + Id: m.Id, + H: m.H, + UniKey: m.UniKey, + HandleType: m.HandleType, } } From 8bf48093b78c5dd336c852775949cf525937f884 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:21:06 +0800 Subject: [PATCH 24/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/GameLogic.go | 1 + src/server/game/mod/base/Base.go | 1 + src/server/game/player_base_mod.go | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 64d3a035..b96ef82f 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -212,6 +212,7 @@ func (ad *GameLogic) NewAccountInsertDataToDB() bool { player := new(Player) BaseMod := player.PlayMod.getBaseMod() BaseMod.Account = ad.Db_AccountInfo.UserName + BaseMod.RegisterTime = time.Now().Unix() player.TeLog("register", nil) return true diff --git a/src/server/game/mod/base/Base.go b/src/server/game/mod/base/Base.go index c64dcdb1..28c1201a 100644 --- a/src/server/game/mod/base/Base.go +++ b/src/server/game/mod/base/Base.go @@ -44,6 +44,7 @@ type Base struct { IdCardNum string AddCode string // 用于添加好友的code DiviceId string // 设备id + RegisterTime int64 // 注册时间 } func (b *Base) InitData(Uid int, Ip string) { diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index b1d51c33..62f74700 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -114,7 +114,7 @@ func (p *PlayerBaseData) LoadDataFromDB(UserName interface{}) bool { p.Data.ChampshipsGroupID = sqlStruck.ChampshipsGroupID p.Data.NoAd = sqlStruck.NoAd p.Data.FaceBookId = sqlStruck.FaceBookId - + p.p.PlayMod.getBaseMod().RegisterTime = int64(sqlStruck.Rolecreatetime) return true } From 49b6a6a928f9efae8c9c9563f02e3757ffeb291c Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 4 Mar 2026 11:34:53 +0800 Subject: [PATCH 25/87] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/db/Mysql.go | 10 ++ src/server/game/friend_func.go | 141 ++++++++++++++++++++++++--- src/server/game/game_type.go | 2 + src/server/game/gm_handler.go | 21 ++++ src/server/game/message_handler.go | 40 +++++++- src/server/game/message_mgr.go | 31 +++++- src/server/game/mod/charge/Charge.go | 7 ++ src/server/game/player_data.go | 1 + src/server/game_util/GoUtil.go | 23 +++++ 9 files changed, 258 insertions(+), 18 deletions(-) diff --git a/src/server/db/Mysql.go b/src/server/db/Mysql.go index efe556ae..af80a370 100644 --- a/src/server/db/Mysql.go +++ b/src/server/db/Mysql.go @@ -442,3 +442,13 @@ func GetCommendPlayerFromDb(uid, login int64, level int) ([]int, error) { } return res, nil } + +func GetDebugPlayer(uid int) ([]int, error) { + sqlStr := "SELECT dwUin FROM t_player_baseinfo WHERE dwUin != ? ORDER BY login_time DESC LIMIT 1000" + var res []int + if err := SqlDb.Select(&res, sqlStr, uid); err != nil { + log.Debug("table: %s, sql :%s, exec failed, err:%v\n", "PlayerBaseInfo", sqlStr, err) + return nil, err + } + return res, nil +} diff --git a/src/server/game/friend_func.go b/src/server/game/friend_func.go index a052fb9b..b85ec513 100644 --- a/src/server/game/friend_func.go +++ b/src/server/game/friend_func.go @@ -1,6 +1,7 @@ package game import ( + "math" "server/db" "server/game/mod/msg" GoUtil "server/game_util" @@ -156,43 +157,153 @@ func GetRecommendPlayer(p *Player, Num int) []int { candidateList = append(candidateList, Uid) } } - baseList := make([]*PlayerSimpleData, 0, len(candidateList)) + levelFilterList := make([]*PlayerSimpleData, 0, len(candidateList)) for _, uid := range candidateList { ps := G_GameLogicPtr.GetSimplePlayerByUid(uid) if ps != nil { - baseList = append(baseList, ps) + levelFilterList = append(levelFilterList, ps) } } - if len(baseList) == 0 { + if len(levelFilterList) == 0 { return nil } BaseMod := p.PlayMod.getBaseMod() level := BaseMod.GetLevel() diffLimit := 10 - filtered := make([]int, 0, len(baseList)) + chargeFilterList := make([]*PlayerSimpleData, 0, len(levelFilterList)) breakNum := 100 + /* + 等级筛选:检索与玩家等级差绝对值小于等于10的用户,若大于5人,则进入下一步筛查,否则逐步放宽等级差限制,直到等级差绝对值小于等于100,仍然无法筛选出5人,则进入下一步筛查 + */ for breakNum > 0 { breakNum-- - filtered = filtered[:0] - for _, ps := range baseList { + chargeFilterList = chargeFilterList[:0] + for _, ps := range levelFilterList { if ps == nil { continue } - diff := level - ps.Level - if diff < 0 { - diff = -diff - } - if diff <= diffLimit { - filtered = append(filtered, ps.Uid) + diff := math.Abs(float64(level - ps.Level)) + if diff <= float64(diffLimit) { + chargeFilterList = append(chargeFilterList, ps) } } - if len(filtered) >= 5 { + if len(chargeFilterList) >= 5 { break } diffLimit++ } - candidateList = filtered - recommendList := GoUtil.RandSliceNum(candidateList, Num) + /* + 付费筛查,判断自身是否为付费用户,若是,则优先推荐付费用户,若不是,则优先推荐非付费用户 + */ + endFilterList := make([]int, 0, len(chargeFilterList)) + chargeFilterFunc := func(filterlist []*PlayerSimpleData, maxCharge float64) []int { + var res []int + type sortData struct { + uid int + maxCharge float64 + } + var filterList2 []sortData + var notChargeList []int + var allList []int + for _, ps := range filterlist { + if ps == nil { + continue + } + allList = append(allList, ps.Uid) + if ps.MaxCharge > 0 { + filterList2 = append(filterList2, sortData{ps.Uid, math.Abs(maxCharge - ps.MaxCharge)}) + } else { + notChargeList = append(notChargeList, ps.Uid) + } + } + sort.Slice(filterList2, func(i, j int) bool { + return filterList2[i].maxCharge < filterList2[j].maxCharge + }) + if len(filterList2) >= 1 { + res = append(res, filterList2[0].uid) + } + if len(filterList2) >= 2 { + res = append(res, filterList2[1].uid) + } + if len(notChargeList) >= 1 { + res = append(res, notChargeList[0]) + } + if len(res) < 3 { + dlist := GoUtil.SubSlices(allList, res) + res = append(res, GoUtil.RandSliceNum(dlist, 3-len(res))...) + } + return res + } + notChargeWatchAdFilterFunc := func(filterlist []*PlayerSimpleData) []int { + var res []int + var notChargeList []int + var chargeList []int + var allList []int + for _, ps := range filterlist { + if ps == nil { + continue + } + allList = append(allList, ps.Uid) + if ps.MaxCharge > 0 { + chargeList = append(chargeList, ps.Uid) + } else { + if ps.AdWatch > 5 { + notChargeList = append(notChargeList, ps.Uid) + } + } + } + if len(notChargeList) >= 1 { + res = append(res, notChargeList[0]) + } + if len(notChargeList) >= 2 { + res = append(res, notChargeList[1]) + } + if len(chargeList) >= 1 { + res = append(res, chargeList[0]) + } + if len(res) < 3 { + dlist := GoUtil.SubSlices(allList, res) + res = append(res, GoUtil.RandSliceNum(dlist, 3-len(res))...) + } + return res + } + notChargeNotWatchAdFilterFunc := func(filterlist []*PlayerSimpleData) []int { + var res []int + var notChargeList []int + var chargeList []int + var allList []int + for _, ps := range filterlist { + if ps == nil { + continue + } + allList = append(allList, ps.Uid) + if ps.MaxCharge > 0 { + chargeList = append(chargeList, ps.Uid) + } else { + notChargeList = append(notChargeList, ps.Uid) + } + } + if len(chargeList) >= 1 { + res = append(res, chargeList[0]) + } + dlist := GoUtil.SubSlices(allList, res) + res = append(res, GoUtil.RandSliceNum(dlist, 3-len(res))...) + return res + } + if diffLimit == 10 && len(chargeFilterList) >= 5 { + MaxCharge := p.GetChargeMod().GetMaxCharge() + if MaxCharge > 0 { + endFilterList = chargeFilterFunc(chargeFilterList, MaxCharge) + } else { + if p.GetChargeMod().GetAdWatch() > 5 { + endFilterList = notChargeWatchAdFilterFunc(chargeFilterList) + } else { + endFilterList = notChargeNotWatchAdFilterFunc(chargeFilterList) + } + } + } + + recommendList := GoUtil.RandSliceNum(endFilterList, Num) for _, Uid := range recommendList { FriendMod.AddRecommend(Uid) } diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 1522dbce..109d3eab 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -40,6 +40,8 @@ type PlayerSimpleData struct { Lang int Account string PetFur int + MaxCharge float64 + AdWatch int } type VarGoldCard struct { diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index e862356d..ec710984 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -623,6 +623,27 @@ func ReqGmCommand_(player *Player, Command string) error { SevenMod.MonthResetTime = 0 PlayerBaseMod := player.GetPlayerBaseMod() SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) + case "debugLogoutMsg": + Uid, _ := strconv.Atoi(arg[1]) + uidList, err := db.GetDebugPlayer(Uid) + if err != nil { + log.Error("GetDebugPlayer err:%s", err.Error()) + return err + } + for _, uid := range uidList { + FriendMgrSend(&MsgMod.Msg{ + Type: MsgMod.HANDLE_TYPE_APPLY, + SendT: GoUtil.Now(), + From: uid, + To: Uid, + }) + FriendMgrSend(&MsgMod.Msg{ + Type: MsgMod.HANDLE_TYPE_HANDBOOK_COLLECTION, + SendT: GoUtil.Now(), + From: Uid, + To: uid, + }) + } default: return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg) } diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 5173e4d1..a407d9ea 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -525,7 +525,45 @@ func (p *Player) handle(m *msg.Msg) error { case msg.HANDLE_TYPE_FRIEND_SPONSOER: p.AddLog(m.From, friend.LOG_TYPE_FRIEND_SPONSOR_GET, "", m.SendT) case msg.SERVER_PLAYER_SYNC_LOGOUT_MSG: - //p.LoginBackData() + info, ok := m.Extra.(map[string]interface{}) + if !ok { + return nil + } + applyUids, ok := info["applyUids"].([]int64) + if ok && len(applyUids) > 0 { + var faceList []int + var name string + for _, v := range applyUids { + ps := G_GameLogicPtr.GetSimplePlayerByUid(int(v)) + if ps != nil { + faceList = append(faceList, ps.Face) + name = ps.Name + } + } + p.PushClientRes(&proto.ResPlayerLougouMsg{ + Name: name, + Face: GoUtil.IntToInt32(faceList), + Count: GoUtil.Int32(info["apply_count"]), + }) + } + otherUids, ok := info["otherUids"].([]int64) + if ok && len(otherUids) > 0 { + var faceList []int + var name string + for _, v := range otherUids { + ps := G_GameLogicPtr.GetSimplePlayerByUid(int(v)) + if ps != nil { + faceList = append(faceList, ps.Face) + name = ps.Name + } + } + p.PushClientRes(&proto.ResPlayerLougouMsg{ + Type: 1, + Name: name, + Face: GoUtil.IntToInt32(faceList), + Count: GoUtil.Int32(info["other_count"]), + }) + } default: log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type) } diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 439963ad..20250c36 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -293,16 +293,43 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { messages.mu.Unlock() ReplyPlayerMsgASync(data, nil) // 在锁外发送离线消息 + var applyUids []int64 + var otherUids []int64 for _, message := range messagesToSend { - message.H = msg.MSG_TYPE_OFFLINE // 标记为离线消息 + if message.Type == msg.HANDLE_TYPE_APPLY { + applyUids = append(applyUids, int64(message.From)) + } else { + otherUids = append(otherUids, int64(message.From)) + } + } + for _, message := range messagesToSend { + if message.Type == msg.HANDLE_TYPE_APPLY && len(applyUids) >= 3 { + message.H = msg.MSG_TYPE_OFFLINE // 标记为离线消息 + } + if message.Type != msg.HANDLE_TYPE_APPLY && len(otherUids) >= 3 { + message.H = msg.MSG_TYPE_OFFLINE // 标记为离线消息 + } SendMsgToNodeAsync(message, node) } + applyUidsFive := applyUids + if len(applyUids) > 5 { + applyUidsFive = applyUids[len(applyUids)-5:] + } + otherUidsFive := otherUids + if len(otherUids) > 5 { + otherUidsFive = otherUids[len(otherUids)-5:] + } SendMsgToNodeAsync(&msg.Msg{ From: data.From, To: data.From, Type: msg.SERVER_PLAYER_SYNC_LOGOUT_MSG, HandleType: msg.HANDLE_MOD_PLAYER_MSG, - Extra: len(messagesToSend), + Extra: map[string]interface{}{ + "apply_uids": applyUidsFive, + "apply_count": len(applyUids), + "other_uids": otherUidsFive, + "other_count": len(otherUids), + }, }, node) // 发送离线消息处理完成通知 log.Debug("[Middleware] Player sync logout message player id: %v, len: %d", data.From, len(messagesToSend)) return nil, nil diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 17ba605b..6c793f51 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -39,6 +39,8 @@ type ChargeMod struct { WishList *WishList WeeklyDiscount map[int]int // 每周折扣购买次数 WeeklyEndTime int64 + + AdWatch int // 观看广告次数 } type WishList struct { @@ -132,6 +134,7 @@ func (c *ChargeMod) ZeroUpdate(Emit []int) { c.FreeShop = 0 SpecialGrade := 1 c.TodayCharge = 0 + c.AdWatch = 0 c.SpecialShop = make(map[int]*SepcialShop) SpecialShopCount := chargeCfg.GetSpecialShopCount() for i := 1; i <= 2; i++ { @@ -489,3 +492,7 @@ func (c *ChargeMod) GetWeeklyEndTime() int64 { func (c *ChargeMod) SetWeeklyEndTime(EndTime int64) { c.WeeklyEndTime = EndTime } + +func (c *ChargeMod) GetAdWatch() int { + return c.AdWatch +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 5ba9077c..1c9439e1 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1081,6 +1081,7 @@ func (p *Player) UpdateUserInfo() { simple.Lang = int(p.PlayMod.getBaseMod().Lang) simple.Account = p.PlayMod.getBaseMod().Account simple.PetFur = p.PlayMod.getFurMod().GetFurSet() + simple.MaxCharge = p.PlayMod.getChargeMod().GetMaxCharge() //TODO 存储到redis 在新版本中将优化成gob进行压缩 value, _ := json.Marshal(simple) IdStr := GoUtil.String(p.M_DwUin) diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index e825a404..df3eca3a 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -210,6 +210,29 @@ func Int(a interface{}) int { return 0 } +func Int32(a interface{}) int32 { + if a == nil { + return 0 + } + switch v := a.(type) { + case int: + return int32(v) + case int32: + return int32(v) + case int64: + return int32(v) + case float64: + return int32(v) + case string: + r, err := strconv.Atoi(v) + if err != nil { + return 0 + } + return int32(r) + } + return 0 +} + func String(a interface{}) string { if a == nil { return "" From dff655484e4479231697db6439386b158f62bc2f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:48:36 +0800 Subject: [PATCH 26/87] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=81=9A=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 10 +++++----- src/server/game/message_handler.go | 4 ++-- src/server/test/README.MD | 17 +++++++++++++++++ src/server/test/friend_test.go | 8 ++++++++ 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 src/server/test/README.MD diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index ec710984..40d83e09 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -624,8 +624,8 @@ func ReqGmCommand_(player *Player, Command string) error { PlayerBaseMod := player.GetPlayerBaseMod() SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) case "debugLogoutMsg": - Uid, _ := strconv.Atoi(arg[1]) - uidList, err := db.GetDebugPlayer(Uid) + ToUid, _ := strconv.Atoi(arg[1]) + uidList, err := db.GetDebugPlayer(ToUid) if err != nil { log.Error("GetDebugPlayer err:%s", err.Error()) return err @@ -635,13 +635,13 @@ func ReqGmCommand_(player *Player, Command string) error { Type: MsgMod.HANDLE_TYPE_APPLY, SendT: GoUtil.Now(), From: uid, - To: Uid, + To: ToUid, }) FriendMgrSend(&MsgMod.Msg{ Type: MsgMod.HANDLE_TYPE_HANDBOOK_COLLECTION, SendT: GoUtil.Now(), - From: Uid, - To: uid, + From: uid, + To: ToUid, }) } default: diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index a407d9ea..cd14be45 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -529,7 +529,7 @@ func (p *Player) handle(m *msg.Msg) error { if !ok { return nil } - applyUids, ok := info["applyUids"].([]int64) + applyUids, ok := info["apply_uids"].([]int64) if ok && len(applyUids) > 0 { var faceList []int var name string @@ -546,7 +546,7 @@ func (p *Player) handle(m *msg.Msg) error { Count: GoUtil.Int32(info["apply_count"]), }) } - otherUids, ok := info["otherUids"].([]int64) + otherUids, ok := info["other_uids"].([]int64) if ok && len(otherUids) > 0 { var faceList []int var name string diff --git a/src/server/test/README.MD b/src/server/test/README.MD new file mode 100644 index 00000000..368c6b3a --- /dev/null +++ b/src/server/test/README.MD @@ -0,0 +1,17 @@ +# 单元调试 + +## 好友模块 + +### 随机好友推荐 + +```golang +test function TestFriendRecommendList 2026-3-12 +ok server/test 1.033s +``` + +### 好友离线消息聚合 + +```golang +3625212 | 100001 +3714321 | 100002 +``` diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go index 68d44ac2..fbcd3374 100644 --- a/src/server/test/friend_test.go +++ b/src/server/test/friend_test.go @@ -1,6 +1,7 @@ package test import ( + "fmt" "server/game" "testing" ) @@ -23,3 +24,10 @@ func TestFriendApply(t *testing.T) { t.Error("FriendMod AddFriendApply failed") } } + +func TestFriendRecommendList(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + l1 := game.GetRecommendPlayer(p1, 3) + fmt.Printf("Recommend List: %v\n", l1) +} From 3afcbdf2eb0d3727070fafb49c0354856ba2e893 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 4 Mar 2026 14:52:38 +0800 Subject: [PATCH 27/87] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=95=86=E5=BA=97?= =?UTF-8?q?=E6=A3=8B=E5=AD=90=E9=94=99=E8=AF=AF=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/charge/Charge.go | 1 - src/server/game/mod/order/order_func.go | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 6c793f51..25e280d7 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -313,7 +313,6 @@ func (c *ChargeMod) InitChessShop(Emit []int) { if len(ChessList) == 1 { ChessList = append(ChessList, ChessList[0]-1) } - //ColorType := mergeDataCfg.GetColorType(p) for _, c := range ChessList { if c == 0 { continue diff --git a/src/server/game/mod/order/order_func.go b/src/server/game/mod/order/order_func.go index 8b5280ab..45955ffe 100644 --- a/src/server/game/mod/order/order_func.go +++ b/src/server/game/mod/order/order_func.go @@ -669,6 +669,9 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int { MaxLev := mergeDataCfg.GetMaxLvByColor(Color) NewLev1 = min(NewLev1, MaxLev) ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev1, Color) + if ChessId == 0 { + continue + } ChessIds = append(ChessIds, ChessId) } return GoUtil.UniqueInts(ChessIds) From fa633cf1842cdd73c256a6eece3331f0435af21d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 4 Mar 2026 15:11:07 +0800 Subject: [PATCH 28/87] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/admin.go | 3 ++- src/server/test/fix_test.go | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/server/game/admin.go b/src/server/game/admin.go index de5e0d8b..8eb4e653 100644 --- a/src/server/game/admin.go +++ b/src/server/game/admin.go @@ -33,7 +33,8 @@ var AdminFuncMap = map[string]func([]interface{}) error{ func AdminProcess(Func string, args []interface{}) { defer func() { if r := recover(); r != nil { - GoUtil.SendFeishuFatal(0, Func, fmt.Sprintf("fatal : %s", r)) + log.Error("uid : %d, func : %s, fatal : %s", 0, Func, r) + //GoUtil.SendFeishuFatal(0, Func, fmt.Sprintf("fatal : %s", r)) } }() if f, ok := AdminFuncMap[Func]; ok { diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 03d6d438..e068954c 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -94,10 +94,18 @@ func TestRandInt(t *testing.T) { func TestEndless(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") + p1.ZeroUpdate(nil) MailMod := p1.GetMailMod() MailMod.BackData() } +func TestAdmin(t *testing.T) { + player := new(game.Player) + player.M_DwUin = 100001 + player.InitPlayerOnly() + player.ZeroUpdate(nil) +} + // 10130 10165 func TestNotify(t *testing.T) { titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg() From a1d97a1ab68b86b69ce8ab74dd9658fe6379341f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 4 Mar 2026 16:12:28 +0800 Subject: [PATCH 29/87] =?UTF-8?q?=E8=A7=82=E7=9C=8B=E5=B9=BF=E5=91=8A?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/GameLogic.go | 1 + src/server/game/mod/charge/Charge.go | 4 ++++ src/server/game/player_data.go | 1 + src/server/game/register_network_func.go | 18 ++++++++++++++++++ src/server/test/README.MD | 9 +++++++++ src/server/test/charge_test.go | 15 +++++++++++++++ src/server/test/fix_test.go | 2 +- 7 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index b96ef82f..561e8ae6 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -642,6 +642,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() { RegisterMsgProcessFunc("ReqKv", ReqKv) // 保存客户端数据 RegisterMsgProcessFunc("ReqGetEnergyByAD", ReqGetEnergyByAD) // 看广告获取能量 RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) // 购买能量 + RegisterMsgProcessFunc("ReqAdWatch", ReqAdWatch) // 观看广告 // #region 棋盘 RegisterMsgProcessFunc("ReqPlayerChessData", ReqPlayerChessDataFunc) RegisterMsgProcessFunc("UpdatePlayerChessData", UpdatePlayerChessDataFunc) // 更新棋盘数据 diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 25e280d7..113a9be0 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -495,3 +495,7 @@ func (c *ChargeMod) SetWeeklyEndTime(EndTime int64) { func (c *ChargeMod) GetAdWatch() int { return c.AdWatch } + +func (c *ChargeMod) AddAdWatch() { + c.AdWatch++ +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 1c9439e1..c1610c2e 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1082,6 +1082,7 @@ func (p *Player) UpdateUserInfo() { simple.Account = p.PlayMod.getBaseMod().Account simple.PetFur = p.PlayMod.getFurMod().GetFurSet() simple.MaxCharge = p.PlayMod.getChargeMod().GetMaxCharge() + simple.AdWatch = p.PlayMod.getChargeMod().GetAdWatch() //TODO 存储到redis 在新版本中将优化成gob进行压缩 value, _ := json.Marshal(simple) IdStr := GoUtil.String(p.M_DwUin) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index b235419c..b5ee52d3 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4625,6 +4625,24 @@ func ReqLang(player *Player, buf []byte) error { return nil } +func ReqAdWatch(player *Player, buf []byte) error { + req := &msg.ReqAdWatch{} + err := proto.Unmarshal(buf, req) + if err != nil { + return err + } + ChargeMod := player.GetChargeMod() + ChargeMod.AddAdWatch() + player.TeLog("ad_watch", map[string]interface{}{ + "type": req.Type, + }) + player.PlayMod.save() + player.UpdateUserInfo() + player.PushClientRes(&msg.ResAdWatch{ + Code: msg.RES_CODE_SUCCESS, + }) + return nil +} func ReqCatTrickReward(player *Player, buf []byte) error { req := &msg.ReqCatTrickReward{} err := proto.Unmarshal(buf, req) diff --git a/src/server/test/README.MD b/src/server/test/README.MD index 368c6b3a..ce744146 100644 --- a/src/server/test/README.MD +++ b/src/server/test/README.MD @@ -15,3 +15,12 @@ ok server/test 1.033s 3625212 | 100001 3714321 | 100002 ``` + +## 充值模块 + +### 观看广告记录 + +```golang +test function TestWatchAd 2026-03-04 +ok server/test 0.410s +``` diff --git a/src/server/test/charge_test.go b/src/server/test/charge_test.go index ebfdf76d..a25840be 100644 --- a/src/server/test/charge_test.go +++ b/src/server/test/charge_test.go @@ -1,6 +1,7 @@ package test import ( + "fmt" "server/game" "testing" ) @@ -11,3 +12,17 @@ func TestSpecialCharge(t *testing.T) { ChargeMod := p1.GetChargeMod() ChargeMod.ZeroUpdate(nil) } + +func TestWatchAd(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + ChargeMod := p1.GetChargeMod() + ChargeMod.AddAdWatch() + count := ChargeMod.GetAdWatch() + fmt.Println("观看广告次数:", count) + ChargeMod.ZeroUpdate(nil) + fmt.Println("观看广告次数重置后:", ChargeMod.GetAdWatch()) + ChargeMod.AddAdWatch() + count = ChargeMod.GetAdWatch() + fmt.Println("观看广告次数:", count) +} diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index e068954c..5a61a513 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -101,7 +101,7 @@ func TestEndless(t *testing.T) { func TestAdmin(t *testing.T) { player := new(game.Player) - player.M_DwUin = 100001 + player.M_DwUin = 100100626 player.InitPlayerOnly() player.ZeroUpdate(nil) } From 33dc62db36cb3f0a68f3bae8a377f8d79607c6dc Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 09:58:56 +0800 Subject: [PATCH 30/87] thrift backend server --- src/server/backend.thrift | 52 + src/server/backend/server.go | 125 + src/server/game/admin.go | 1 - src/server/game/mod_factory.go | 9 + .../gen-go/backend/GoUnusedProtection__.go | 6 + src/server/gen-go/backend/backend-consts.go | 34 + src/server/gen-go/backend/backend.go | 2456 +++++++++++++++++ .../game_admin_service-remote.go | 164 ++ src/server/go.mod | 5 +- src/server/go.sum | 2 + src/server/test/fix_test.go | 5 + src/server/test/log/20260305.log | 2 + 12 files changed, 2859 insertions(+), 2 deletions(-) create mode 100644 src/server/backend.thrift create mode 100644 src/server/backend/server.go create mode 100644 src/server/gen-go/backend/GoUnusedProtection__.go create mode 100644 src/server/gen-go/backend/backend-consts.go create mode 100644 src/server/gen-go/backend/backend.go create mode 100644 src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go create mode 100644 src/server/test/log/20260305.log diff --git a/src/server/backend.thrift b/src/server/backend.thrift new file mode 100644 index 00000000..37e24d4c --- /dev/null +++ b/src/server/backend.thrift @@ -0,0 +1,52 @@ +namespace go backend +struct ResAdminInfo{ + 1: string Name, + 2: i64 Uid, + 3: i32 AreaId, + 4: i32 Face; + 5: double Charge; + 6: double MaxCharge; + 7: i32 Level; + 8: i32 Diamond; + 9: i32 Star; + 10: i32 Energy; + 11: string UserName; + 12: i64 LoginTime; + 13: i32 Cumulative; + 14: i32 RegisterTime; + 15: i8 Ban; + 16: i32 TodayCumulative; + 17: i32 Bouns; + 18: string Code; + 19: map ChessMap; + 20: list ActLog; + 21: list FriendList; + 22: map OrderList; +} + +struct Actlog{ + 1: i8 Type; + 2: i64 Time; + 3: string Param; +} + +struct OrderInfo{ + 1: i32 Id; + 2: i32 Type; + 3: i64 Time; + 4: string ChessId; + 5: i8 Diff; +} + +struct FriendInfo{ + 1: i64 Uid; + 2: string NickName; + 3: i32 Level; + 4: i64 LogoutTime; + 5: i64 LoginTime; + 6: i32 Face; +} + +service GameAdminService{ + ResAdminInfo GetAdminInfo(1:i32 Uid); +} \ No newline at end of file diff --git a/src/server/backend/server.go b/src/server/backend/server.go new file mode 100644 index 00000000..50296265 --- /dev/null +++ b/src/server/backend/server.go @@ -0,0 +1,125 @@ +package backend + +import ( + "context" + "fmt" + "net" + "server/db" + "server/game" + GoUtil "server/game_util" + "server/gen-go/backend" + + "github.com/apache/thrift/lib/go/thrift" +) + +type GameServiceHandler struct{} + +func NewGameServiceHandler() *GameServiceHandler { + return &GameServiceHandler{} +} + +func (h *GameServiceHandler) GetAdminInfo(ctx context.Context, id int32) (*backend.ResAdminInfo, error) { + player := game.G_GameLogicPtr.GetPlayer(int64(id)) + online := true + if player == nil { + player = new(game.Player) + player.M_DwUin = int64(id) + player.InitPlayerOnly() + player.ZeroUpdate(nil) + online = false + } + res := &backend.ResAdminInfo{} + res.Name = player.GetBaseMod().NickName + res.UID = player.M_DwUin + res.AreaId = int32(player.GetDecorateMod().GetAreaId()) + res.Face = int32(player.GetFaceMod().SetId) + res.Charge = player.GetChargeMod().Charge + res.MaxCharge = player.GetChargeMod().MaxCharge + res.Level = int32(player.GetPlayerBaseMod().GetLevel()) + res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) + res.Star = int32(player.GetPlayerBaseMod().GetStar()) + res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) + res.UserName = player.GetPlayerBaseMod().GetName() + res.LoginTime = player.GetBaseMod().LoginTime + res.Cumulative = int32(player.GetBaseMod().Cumulative) + res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) + res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) + res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) + if online { + res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) + res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) + } + res.Code = player.GetBaseMod().AddCode + res.ChessMap = player.GetChessMod().ChessMap + resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) + for _, log := range player.GetFriendMod().ActivityLog { + resActLog = append(resActLog, &backend.Actlog{ + Type: int8(log.Type), + Time: log.Time, + Param: log.Param, + }) + } + res.ActLog = resActLog + friendList := player.GetFriendMod().NewFriendList + type friendInfo struct { + Uid int64 + NickName string + Avatar int + Level int + LogoutTime int64 + LoginTime int64 + } + resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) + for v := range friendList { + ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) + if ps == nil { + continue + } + resFriendList = append(resFriendList, &backend.FriendInfo{ + UID: int64(v), + NickName: ps.Name, + Face: int32(ps.Face), + Level: int32(ps.Level), + LogoutTime: ps.Loginout, + LoginTime: ps.Login, + }) + } + res.FriendList = resFriendList + OrderMap := make(map[int32]*backend.OrderInfo) + Index := 0 + for k, v := range player.GetOrderMod().OrderList { + OrderMap[int32(Index)] = &backend.OrderInfo{ + ID: int32(k), + Type: int32(v.Type), + Time: v.Timestamp, + ChessId: GoUtil.IntSliceToString(v.MergeId), + Diff: int8(v.Diff), + } + Index++ + } + res.OrderList = OrderMap + return res, nil +} + +func Start() { + addr := net.JoinHostPort("localhost", "9090") + handler := NewGameServiceHandler() + + //创建处理器 + processor := backend.NewGameAdminServiceProcessor(handler) + + transportFactory := thrift.NewTBufferedTransportFactory(8192) + protocolFactory := thrift.NewTBinaryProtocolFactoryConf(&thrift.TConfiguration{}) + + tcpAddr, err := net.ResolveTCPAddr("tcp", addr) + if err != nil { + fmt.Printf("Failed to resolve address %s: %v\n", addr, err) + return + } + serverTransport := thrift.NewTServerSocketFromAddrTimeout(tcpAddr, 0) + server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) + fmt.Printf("Starting the server on %s...\n", addr) + if err := server.Serve(); err != nil { + fmt.Printf("Error starting the server: %v\n", err) + } +} diff --git a/src/server/game/admin.go b/src/server/game/admin.go index 8eb4e653..61fa6386 100644 --- a/src/server/game/admin.go +++ b/src/server/game/admin.go @@ -172,7 +172,6 @@ func AdminPlayerInfo(args []interface{}) error { res["Diamond"] = player.GetPlayerBaseMod().GetDiamond() res["Star"] = player.GetPlayerBaseMod().GetStar() res["Energy"] = player.GetPlayerBaseMod().GetEnergy() - res["Diamond"] = player.GetPlayerBaseMod().GetDiamond() res["Mac"] = player.GetPlayerBaseMod().GetName() res["Login"] = player.PlayMod.getBaseMod().LoginTime res["Cumulative"] = player.PlayMod.getBaseMod().Cumulative diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index d2ad38bc..e1dd01b5 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -7,6 +7,7 @@ import ( "server/game/mod/chess" "server/game/mod/decorate" "server/game/mod/endless" + "server/game/mod/face" "server/game/mod/friend" "server/game/mod/fur" limitedTimeEvent "server/game/mod/limited_time_event" @@ -67,3 +68,11 @@ func (p *Player) GetFurMod() *fur.FurMod { func (p *Player) GetFriendMod() *friend.FriendMod { return p.PlayMod.getFriendMod() } + +func (p *Player) GetFaceMod() *face.FaceMod { + return p.PlayMod.getFaceMod() +} + +func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod { + return p.PlayMod.getLimitedTimeEventMod() +} diff --git a/src/server/gen-go/backend/GoUnusedProtection__.go b/src/server/gen-go/backend/GoUnusedProtection__.go new file mode 100644 index 00000000..48bcbc67 --- /dev/null +++ b/src/server/gen-go/backend/GoUnusedProtection__.go @@ -0,0 +1,6 @@ +// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. + +package backend + +var GoUnusedProtection__ int; + diff --git a/src/server/gen-go/backend/backend-consts.go b/src/server/gen-go/backend/backend-consts.go new file mode 100644 index 00000000..b54005b2 --- /dev/null +++ b/src/server/gen-go/backend/backend-consts.go @@ -0,0 +1,34 @@ +// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. + +package backend + +import ( + "bytes" + "context" + "errors" + "fmt" + "iter" + "log/slog" + "time" + thrift "github.com/apache/thrift/lib/go/thrift" + "strings" + "regexp" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = bytes.Equal +var _ = context.Background +var _ = errors.New +var _ = fmt.Printf +var _ = iter.Pull[int] +var _ = slog.Log +var _ = time.Now +var _ = thrift.ZERO +// (needed by validator.) +var _ = strings.Contains +var _ = regexp.MatchString + + +func init() { +} + diff --git a/src/server/gen-go/backend/backend.go b/src/server/gen-go/backend/backend.go new file mode 100644 index 00000000..aff7a282 --- /dev/null +++ b/src/server/gen-go/backend/backend.go @@ -0,0 +1,2456 @@ +// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. + +package backend + +import ( + "bytes" + "context" + "errors" + "fmt" + "iter" + "log/slog" + "time" + thrift "github.com/apache/thrift/lib/go/thrift" + "strings" + "regexp" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = bytes.Equal +var _ = context.Background +var _ = errors.New +var _ = fmt.Printf +var _ = iter.Pull[int] +var _ = slog.Log +var _ = time.Now +var _ = thrift.ZERO +// (needed by validator.) +var _ = strings.Contains +var _ = regexp.MatchString + +// Attributes: +// - Name +// - UID +// - AreaId +// - Face +// - Charge +// - MaxCharge +// - Level +// - Diamond +// - Star +// - Energy +// - UserName +// - LoginTime +// - Cumulative +// - RegisterTime +// - Ban +// - TodayCumulative +// - Bouns +// - Code +// - ChessMap +// - ActLog +// - FriendList +// - OrderList +// +type ResAdminInfo struct { + Name string `thrift:"Name,1" db:"Name" json:"Name"` + UID int64 `thrift:"Uid,2" db:"Uid" json:"Uid"` + AreaId int32 `thrift:"AreaId,3" db:"AreaId" json:"AreaId"` + Face int32 `thrift:"Face,4" db:"Face" json:"Face"` + Charge float64 `thrift:"Charge,5" db:"Charge" json:"Charge"` + MaxCharge float64 `thrift:"MaxCharge,6" db:"MaxCharge" json:"MaxCharge"` + Level int32 `thrift:"Level,7" db:"Level" json:"Level"` + Diamond int32 `thrift:"Diamond,8" db:"Diamond" json:"Diamond"` + Star int32 `thrift:"Star,9" db:"Star" json:"Star"` + Energy int32 `thrift:"Energy,10" db:"Energy" json:"Energy"` + UserName string `thrift:"UserName,11" db:"UserName" json:"UserName"` + LoginTime int64 `thrift:"LoginTime,12" db:"LoginTime" json:"LoginTime"` + Cumulative int32 `thrift:"Cumulative,13" db:"Cumulative" json:"Cumulative"` + RegisterTime int32 `thrift:"RegisterTime,14" db:"RegisterTime" json:"RegisterTime"` + Ban int8 `thrift:"Ban,15" db:"Ban" json:"Ban"` + TodayCumulative int32 `thrift:"TodayCumulative,16" db:"TodayCumulative" json:"TodayCumulative"` + Bouns int32 `thrift:"Bouns,17" db:"Bouns" json:"Bouns"` + Code string `thrift:"Code,18" db:"Code" json:"Code"` + ChessMap map[string]int32 `thrift:"ChessMap,19" db:"ChessMap" json:"ChessMap"` + ActLog []*Actlog `thrift:"ActLog,20" db:"ActLog" json:"ActLog"` + FriendList []*FriendInfo `thrift:"FriendList,21" db:"FriendList" json:"FriendList"` + OrderList map[int32]*OrderInfo `thrift:"OrderList,22" db:"OrderList" json:"OrderList"` +} + +func NewResAdminInfo() *ResAdminInfo { + return &ResAdminInfo{} +} + + + +func (p *ResAdminInfo) GetName() string { + return p.Name +} + + + +func (p *ResAdminInfo) GetUID() int64 { + return p.UID +} + + + +func (p *ResAdminInfo) GetAreaId() int32 { + return p.AreaId +} + + + +func (p *ResAdminInfo) GetFace() int32 { + return p.Face +} + + + +func (p *ResAdminInfo) GetCharge() float64 { + return p.Charge +} + + + +func (p *ResAdminInfo) GetMaxCharge() float64 { + return p.MaxCharge +} + + + +func (p *ResAdminInfo) GetLevel() int32 { + return p.Level +} + + + +func (p *ResAdminInfo) GetDiamond() int32 { + return p.Diamond +} + + + +func (p *ResAdminInfo) GetStar() int32 { + return p.Star +} + + + +func (p *ResAdminInfo) GetEnergy() int32 { + return p.Energy +} + + + +func (p *ResAdminInfo) GetUserName() string { + return p.UserName +} + + + +func (p *ResAdminInfo) GetLoginTime() int64 { + return p.LoginTime +} + + + +func (p *ResAdminInfo) GetCumulative() int32 { + return p.Cumulative +} + + + +func (p *ResAdminInfo) GetRegisterTime() int32 { + return p.RegisterTime +} + + + +func (p *ResAdminInfo) GetBan() int8 { + return p.Ban +} + + + +func (p *ResAdminInfo) GetTodayCumulative() int32 { + return p.TodayCumulative +} + + + +func (p *ResAdminInfo) GetBouns() int32 { + return p.Bouns +} + + + +func (p *ResAdminInfo) GetCode() string { + return p.Code +} + + + +func (p *ResAdminInfo) GetChessMap() map[string]int32 { + return p.ChessMap +} + + + +func (p *ResAdminInfo) GetActLog() []*Actlog { + return p.ActLog +} + + + +func (p *ResAdminInfo) GetFriendList() []*FriendInfo { + return p.FriendList +} + + + +func (p *ResAdminInfo) GetOrderList() map[int32]*OrderInfo { + return p.OrderList +} + +func (p *ResAdminInfo) Read(ctx context.Context, iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.STRING { + if err := p.ReadField1(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 2: + if fieldTypeId == thrift.I64 { + if err := p.ReadField2(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 3: + if fieldTypeId == thrift.I32 { + if err := p.ReadField3(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 4: + if fieldTypeId == thrift.I32 { + if err := p.ReadField4(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 5: + if fieldTypeId == thrift.DOUBLE { + if err := p.ReadField5(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 6: + if fieldTypeId == thrift.DOUBLE { + if err := p.ReadField6(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 7: + if fieldTypeId == thrift.I32 { + if err := p.ReadField7(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 8: + if fieldTypeId == thrift.I32 { + if err := p.ReadField8(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 9: + if fieldTypeId == thrift.I32 { + if err := p.ReadField9(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 10: + if fieldTypeId == thrift.I32 { + if err := p.ReadField10(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 11: + if fieldTypeId == thrift.STRING { + if err := p.ReadField11(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 12: + if fieldTypeId == thrift.I64 { + if err := p.ReadField12(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 13: + if fieldTypeId == thrift.I32 { + if err := p.ReadField13(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 14: + if fieldTypeId == thrift.I32 { + if err := p.ReadField14(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 15: + if fieldTypeId == thrift.BYTE { + if err := p.ReadField15(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 16: + if fieldTypeId == thrift.I32 { + if err := p.ReadField16(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 17: + if fieldTypeId == thrift.I32 { + if err := p.ReadField17(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 18: + if fieldTypeId == thrift.STRING { + if err := p.ReadField18(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 19: + if fieldTypeId == thrift.MAP { + if err := p.ReadField19(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 20: + if fieldTypeId == thrift.LIST { + if err := p.ReadField20(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 21: + if fieldTypeId == thrift.LIST { + if err := p.ReadField21(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 22: + if fieldTypeId == thrift.MAP { + if err := p.ReadField22(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + default: + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(ctx); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *ResAdminInfo) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.Name = v + } + return nil +} + +func (p *ResAdminInfo) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.UID = v + } + return nil +} + +func (p *ResAdminInfo) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 3: ", err) + } else { + p.AreaId = v + } + return nil +} + +func (p *ResAdminInfo) ReadField4(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 4: ", err) + } else { + p.Face = v + } + return nil +} + +func (p *ResAdminInfo) ReadField5(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadDouble(ctx); err != nil { + return thrift.PrependError("error reading field 5: ", err) + } else { + p.Charge = v + } + return nil +} + +func (p *ResAdminInfo) ReadField6(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadDouble(ctx); err != nil { + return thrift.PrependError("error reading field 6: ", err) + } else { + p.MaxCharge = v + } + return nil +} + +func (p *ResAdminInfo) ReadField7(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 7: ", err) + } else { + p.Level = v + } + return nil +} + +func (p *ResAdminInfo) ReadField8(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 8: ", err) + } else { + p.Diamond = v + } + return nil +} + +func (p *ResAdminInfo) ReadField9(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 9: ", err) + } else { + p.Star = v + } + return nil +} + +func (p *ResAdminInfo) ReadField10(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 10: ", err) + } else { + p.Energy = v + } + return nil +} + +func (p *ResAdminInfo) ReadField11(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 11: ", err) + } else { + p.UserName = v + } + return nil +} + +func (p *ResAdminInfo) ReadField12(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 12: ", err) + } else { + p.LoginTime = v + } + return nil +} + +func (p *ResAdminInfo) ReadField13(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 13: ", err) + } else { + p.Cumulative = v + } + return nil +} + +func (p *ResAdminInfo) ReadField14(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 14: ", err) + } else { + p.RegisterTime = v + } + return nil +} + +func (p *ResAdminInfo) ReadField15(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadByte(ctx); err != nil { + return thrift.PrependError("error reading field 15: ", err) + } else { + temp := int8(v) + p.Ban = temp + } + return nil +} + +func (p *ResAdminInfo) ReadField16(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 16: ", err) + } else { + p.TodayCumulative = v + } + return nil +} + +func (p *ResAdminInfo) ReadField17(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 17: ", err) + } else { + p.Bouns = v + } + return nil +} + +func (p *ResAdminInfo) ReadField18(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 18: ", err) + } else { + p.Code = v + } + return nil +} + +func (p *ResAdminInfo) ReadField19(ctx context.Context, iprot thrift.TProtocol) error { + _, _, size, err := iprot.ReadMapBegin(ctx) + if err != nil { + return thrift.PrependError("error reading map begin: ", err) + } + tMap := make(map[string]int32, size) + p.ChessMap = tMap + for i := 0; i < size; i++ { + var _key0 string + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 0: ", err) + } else { + _key0 = v + } + var _val1 int32 + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 0: ", err) + } else { + _val1 = v + } + p.ChessMap[_key0] = _val1 + } + if err := iprot.ReadMapEnd(ctx); err != nil { + return thrift.PrependError("error reading map end: ", err) + } + return nil +} + +func (p *ResAdminInfo) ReadField20(ctx context.Context, iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin(ctx) + if err != nil { + return thrift.PrependError("error reading list begin: ", err) + } + tSlice := make([]*Actlog, 0, size) + p.ActLog = tSlice + for i := 0; i < size; i++ { + _elem2 := &Actlog{} + if err := _elem2.Read(ctx, iprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem2), err) + } + p.ActLog = append(p.ActLog, _elem2) + } + if err := iprot.ReadListEnd(ctx); err != nil { + return thrift.PrependError("error reading list end: ", err) + } + return nil +} + +func (p *ResAdminInfo) ReadField21(ctx context.Context, iprot thrift.TProtocol) error { + _, size, err := iprot.ReadListBegin(ctx) + if err != nil { + return thrift.PrependError("error reading list begin: ", err) + } + tSlice := make([]*FriendInfo, 0, size) + p.FriendList = tSlice + for i := 0; i < size; i++ { + _elem3 := &FriendInfo{} + if err := _elem3.Read(ctx, iprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem3), err) + } + p.FriendList = append(p.FriendList, _elem3) + } + if err := iprot.ReadListEnd(ctx); err != nil { + return thrift.PrependError("error reading list end: ", err) + } + return nil +} + +func (p *ResAdminInfo) ReadField22(ctx context.Context, iprot thrift.TProtocol) error { + _, _, size, err := iprot.ReadMapBegin(ctx) + if err != nil { + return thrift.PrependError("error reading map begin: ", err) + } + tMap := make(map[int32]*OrderInfo, size) + p.OrderList = tMap + for i := 0; i < size; i++ { + var _key4 int32 + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 0: ", err) + } else { + _key4 = v + } + _val5 := &OrderInfo{} + if err := _val5.Read(ctx, iprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _val5), err) + } + p.OrderList[_key4] = _val5 + } + if err := iprot.ReadMapEnd(ctx); err != nil { + return thrift.PrependError("error reading map end: ", err) + } + return nil +} + +func (p *ResAdminInfo) Write(ctx context.Context, oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin(ctx, "ResAdminInfo"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if p != nil { + if err := p.writeField1(ctx, oprot); err != nil { return err } + if err := p.writeField2(ctx, oprot); err != nil { return err } + if err := p.writeField3(ctx, oprot); err != nil { return err } + if err := p.writeField4(ctx, oprot); err != nil { return err } + if err := p.writeField5(ctx, oprot); err != nil { return err } + if err := p.writeField6(ctx, oprot); err != nil { return err } + if err := p.writeField7(ctx, oprot); err != nil { return err } + if err := p.writeField8(ctx, oprot); err != nil { return err } + if err := p.writeField9(ctx, oprot); err != nil { return err } + if err := p.writeField10(ctx, oprot); err != nil { return err } + if err := p.writeField11(ctx, oprot); err != nil { return err } + if err := p.writeField12(ctx, oprot); err != nil { return err } + if err := p.writeField13(ctx, oprot); err != nil { return err } + if err := p.writeField14(ctx, oprot); err != nil { return err } + if err := p.writeField15(ctx, oprot); err != nil { return err } + if err := p.writeField16(ctx, oprot); err != nil { return err } + if err := p.writeField17(ctx, oprot); err != nil { return err } + if err := p.writeField18(ctx, oprot); err != nil { return err } + if err := p.writeField19(ctx, oprot); err != nil { return err } + if err := p.writeField20(ctx, oprot); err != nil { return err } + if err := p.writeField21(ctx, oprot); err != nil { return err } + if err := p.writeField22(ctx, oprot); err != nil { return err } + } + if err := oprot.WriteFieldStop(ctx); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(ctx); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *ResAdminInfo) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Name", thrift.STRING, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Name: ", p), err) + } + if err := oprot.WriteString(ctx, string(p.Name)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Name (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Name: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Uid", thrift.I64, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:Uid: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.UID)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Uid (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:Uid: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "AreaId", thrift.I32, 3); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:AreaId: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.AreaId)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.AreaId (3) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 3:AreaId: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField4(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Face", thrift.I32, 4); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:Face: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Face)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Face (4) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 4:Face: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField5(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Charge", thrift.DOUBLE, 5); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:Charge: ", p), err) + } + if err := oprot.WriteDouble(ctx, float64(p.Charge)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Charge (5) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 5:Charge: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField6(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "MaxCharge", thrift.DOUBLE, 6); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:MaxCharge: ", p), err) + } + if err := oprot.WriteDouble(ctx, float64(p.MaxCharge)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.MaxCharge (6) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 6:MaxCharge: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField7(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Level", thrift.I32, 7); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 7:Level: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Level)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Level (7) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 7:Level: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField8(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Diamond", thrift.I32, 8); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 8:Diamond: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Diamond)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Diamond (8) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 8:Diamond: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField9(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Star", thrift.I32, 9); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 9:Star: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Star)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Star (9) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 9:Star: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField10(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Energy", thrift.I32, 10); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 10:Energy: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Energy)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Energy (10) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 10:Energy: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField11(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "UserName", thrift.STRING, 11); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 11:UserName: ", p), err) + } + if err := oprot.WriteString(ctx, string(p.UserName)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.UserName (11) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 11:UserName: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField12(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "LoginTime", thrift.I64, 12); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 12:LoginTime: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.LoginTime)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.LoginTime (12) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 12:LoginTime: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField13(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Cumulative", thrift.I32, 13); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 13:Cumulative: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Cumulative)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Cumulative (13) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 13:Cumulative: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField14(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "RegisterTime", thrift.I32, 14); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 14:RegisterTime: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.RegisterTime)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.RegisterTime (14) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 14:RegisterTime: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField15(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Ban", thrift.BYTE, 15); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 15:Ban: ", p), err) + } + if err := oprot.WriteByte(ctx, int8(p.Ban)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Ban (15) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 15:Ban: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField16(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "TodayCumulative", thrift.I32, 16); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 16:TodayCumulative: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.TodayCumulative)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.TodayCumulative (16) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 16:TodayCumulative: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField17(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Bouns", thrift.I32, 17); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 17:Bouns: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Bouns)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Bouns (17) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 17:Bouns: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField18(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Code", thrift.STRING, 18); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 18:Code: ", p), err) + } + if err := oprot.WriteString(ctx, string(p.Code)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Code (18) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 18:Code: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField19(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "ChessMap", thrift.MAP, 19); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 19:ChessMap: ", p), err) + } + if err := oprot.WriteMapBegin(ctx, thrift.STRING, thrift.I32, len(p.ChessMap)); err != nil { + return thrift.PrependError("error writing map begin: ", err) + } + for k, v := range p.ChessMap { + if err := oprot.WriteString(ctx, string(k)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T. (0) field write error: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(v)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T. (0) field write error: ", p), err) + } + } + if err := oprot.WriteMapEnd(ctx); err != nil { + return thrift.PrependError("error writing map end: ", err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 19:ChessMap: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField20(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "ActLog", thrift.LIST, 20); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 20:ActLog: ", p), err) + } + if err := oprot.WriteListBegin(ctx, thrift.STRUCT, len(p.ActLog)); err != nil { + return thrift.PrependError("error writing list begin: ", err) + } + for _, v := range p.ActLog { + if err := v.Write(ctx, oprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) + } + } + if err := oprot.WriteListEnd(ctx); err != nil { + return thrift.PrependError("error writing list end: ", err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 20:ActLog: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField21(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "FriendList", thrift.LIST, 21); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 21:FriendList: ", p), err) + } + if err := oprot.WriteListBegin(ctx, thrift.STRUCT, len(p.FriendList)); err != nil { + return thrift.PrependError("error writing list begin: ", err) + } + for _, v := range p.FriendList { + if err := v.Write(ctx, oprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) + } + } + if err := oprot.WriteListEnd(ctx); err != nil { + return thrift.PrependError("error writing list end: ", err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 21:FriendList: ", p), err) + } + return err +} + +func (p *ResAdminInfo) writeField22(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "OrderList", thrift.MAP, 22); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 22:OrderList: ", p), err) + } + if err := oprot.WriteMapBegin(ctx, thrift.I32, thrift.STRUCT, len(p.OrderList)); err != nil { + return thrift.PrependError("error writing map begin: ", err) + } + for k, v := range p.OrderList { + if err := oprot.WriteI32(ctx, int32(k)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T. (0) field write error: ", p), err) + } + if err := v.Write(ctx, oprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) + } + } + if err := oprot.WriteMapEnd(ctx); err != nil { + return thrift.PrependError("error writing map end: ", err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 22:OrderList: ", p), err) + } + return err +} + +func (p *ResAdminInfo) Equals(other *ResAdminInfo) bool { + if p == other { + return true + } else if p == nil || other == nil { + return false + } + if p.Name != other.Name { return false } + if p.UID != other.UID { return false } + if p.AreaId != other.AreaId { return false } + if p.Face != other.Face { return false } + if p.Charge != other.Charge { return false } + if p.MaxCharge != other.MaxCharge { return false } + if p.Level != other.Level { return false } + if p.Diamond != other.Diamond { return false } + if p.Star != other.Star { return false } + if p.Energy != other.Energy { return false } + if p.UserName != other.UserName { return false } + if p.LoginTime != other.LoginTime { return false } + if p.Cumulative != other.Cumulative { return false } + if p.RegisterTime != other.RegisterTime { return false } + if p.Ban != other.Ban { return false } + if p.TodayCumulative != other.TodayCumulative { return false } + if p.Bouns != other.Bouns { return false } + if p.Code != other.Code { return false } + if len(p.ChessMap) != len(other.ChessMap) { return false } + for k, _tgt := range p.ChessMap { + _src6 := other.ChessMap[k] + if _tgt != _src6 { return false } + } + if len(p.ActLog) != len(other.ActLog) { return false } + for i, _tgt := range p.ActLog { + _src7 := other.ActLog[i] + if !_tgt.Equals(_src7) { return false } + } + if len(p.FriendList) != len(other.FriendList) { return false } + for i, _tgt := range p.FriendList { + _src8 := other.FriendList[i] + if !_tgt.Equals(_src8) { return false } + } + if len(p.OrderList) != len(other.OrderList) { return false } + for k, _tgt := range p.OrderList { + _src9 := other.OrderList[k] + if !_tgt.Equals(_src9) { return false } + } + return true +} + +func (p *ResAdminInfo) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("ResAdminInfo(%+v)", *p) +} + +func (p *ResAdminInfo) LogValue() slog.Value { + if p == nil { + return slog.AnyValue(nil) + } + v := thrift.SlogTStructWrapper{ + Type: "*backend.ResAdminInfo", + Value: p, + } + return slog.AnyValue(v) +} + +var _ slog.LogValuer = (*ResAdminInfo)(nil) + +func (p *ResAdminInfo) Validate() error { + return nil +} + +// Attributes: +// - Type +// - Time +// - Param +// +type Actlog struct { + Type int8 `thrift:"Type,1" db:"Type" json:"Type"` + Time int64 `thrift:"Time,2" db:"Time" json:"Time"` + Param string `thrift:"Param,3" db:"Param" json:"Param"` +} + +func NewActlog() *Actlog { + return &Actlog{} +} + + + +func (p *Actlog) GetType() int8 { + return p.Type +} + + + +func (p *Actlog) GetTime() int64 { + return p.Time +} + + + +func (p *Actlog) GetParam() string { + return p.Param +} + +func (p *Actlog) Read(ctx context.Context, iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.BYTE { + if err := p.ReadField1(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 2: + if fieldTypeId == thrift.I64 { + if err := p.ReadField2(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 3: + if fieldTypeId == thrift.STRING { + if err := p.ReadField3(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + default: + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(ctx); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *Actlog) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadByte(ctx); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + temp := int8(v) + p.Type = temp + } + return nil +} + +func (p *Actlog) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.Time = v + } + return nil +} + +func (p *Actlog) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 3: ", err) + } else { + p.Param = v + } + return nil +} + +func (p *Actlog) Write(ctx context.Context, oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin(ctx, "Actlog"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if p != nil { + if err := p.writeField1(ctx, oprot); err != nil { return err } + if err := p.writeField2(ctx, oprot); err != nil { return err } + if err := p.writeField3(ctx, oprot); err != nil { return err } + } + if err := oprot.WriteFieldStop(ctx); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(ctx); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *Actlog) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Type", thrift.BYTE, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Type: ", p), err) + } + if err := oprot.WriteByte(ctx, int8(p.Type)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Type (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Type: ", p), err) + } + return err +} + +func (p *Actlog) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Time", thrift.I64, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:Time: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.Time)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Time (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:Time: ", p), err) + } + return err +} + +func (p *Actlog) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Param", thrift.STRING, 3); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:Param: ", p), err) + } + if err := oprot.WriteString(ctx, string(p.Param)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Param (3) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 3:Param: ", p), err) + } + return err +} + +func (p *Actlog) Equals(other *Actlog) bool { + if p == other { + return true + } else if p == nil || other == nil { + return false + } + if p.Type != other.Type { return false } + if p.Time != other.Time { return false } + if p.Param != other.Param { return false } + return true +} + +func (p *Actlog) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("Actlog(%+v)", *p) +} + +func (p *Actlog) LogValue() slog.Value { + if p == nil { + return slog.AnyValue(nil) + } + v := thrift.SlogTStructWrapper{ + Type: "*backend.Actlog", + Value: p, + } + return slog.AnyValue(v) +} + +var _ slog.LogValuer = (*Actlog)(nil) + +func (p *Actlog) Validate() error { + return nil +} + +// Attributes: +// - ID +// - Type +// - Time +// - ChessId +// - Diff +// +type OrderInfo struct { + ID int32 `thrift:"Id,1" db:"Id" json:"Id"` + Type int32 `thrift:"Type,2" db:"Type" json:"Type"` + Time int64 `thrift:"Time,3" db:"Time" json:"Time"` + ChessId string `thrift:"ChessId,4" db:"ChessId" json:"ChessId"` + Diff int8 `thrift:"Diff,5" db:"Diff" json:"Diff"` +} + +func NewOrderInfo() *OrderInfo { + return &OrderInfo{} +} + + + +func (p *OrderInfo) GetID() int32 { + return p.ID +} + + + +func (p *OrderInfo) GetType() int32 { + return p.Type +} + + + +func (p *OrderInfo) GetTime() int64 { + return p.Time +} + + + +func (p *OrderInfo) GetChessId() string { + return p.ChessId +} + + + +func (p *OrderInfo) GetDiff() int8 { + return p.Diff +} + +func (p *OrderInfo) Read(ctx context.Context, iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + if err := p.ReadField1(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 2: + if fieldTypeId == thrift.I32 { + if err := p.ReadField2(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 3: + if fieldTypeId == thrift.I64 { + if err := p.ReadField3(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 4: + if fieldTypeId == thrift.STRING { + if err := p.ReadField4(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 5: + if fieldTypeId == thrift.BYTE { + if err := p.ReadField5(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + default: + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(ctx); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *OrderInfo) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.ID = v + } + return nil +} + +func (p *OrderInfo) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.Type = v + } + return nil +} + +func (p *OrderInfo) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 3: ", err) + } else { + p.Time = v + } + return nil +} + +func (p *OrderInfo) ReadField4(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 4: ", err) + } else { + p.ChessId = v + } + return nil +} + +func (p *OrderInfo) ReadField5(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadByte(ctx); err != nil { + return thrift.PrependError("error reading field 5: ", err) + } else { + temp := int8(v) + p.Diff = temp + } + return nil +} + +func (p *OrderInfo) Write(ctx context.Context, oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin(ctx, "OrderInfo"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if p != nil { + if err := p.writeField1(ctx, oprot); err != nil { return err } + if err := p.writeField2(ctx, oprot); err != nil { return err } + if err := p.writeField3(ctx, oprot); err != nil { return err } + if err := p.writeField4(ctx, oprot); err != nil { return err } + if err := p.writeField5(ctx, oprot); err != nil { return err } + } + if err := oprot.WriteFieldStop(ctx); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(ctx); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *OrderInfo) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Id", thrift.I32, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Id: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.ID)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Id (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Id: ", p), err) + } + return err +} + +func (p *OrderInfo) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Type", thrift.I32, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:Type: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Type)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Type (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:Type: ", p), err) + } + return err +} + +func (p *OrderInfo) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Time", thrift.I64, 3); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:Time: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.Time)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Time (3) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 3:Time: ", p), err) + } + return err +} + +func (p *OrderInfo) writeField4(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "ChessId", thrift.STRING, 4); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:ChessId: ", p), err) + } + if err := oprot.WriteString(ctx, string(p.ChessId)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.ChessId (4) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 4:ChessId: ", p), err) + } + return err +} + +func (p *OrderInfo) writeField5(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Diff", thrift.BYTE, 5); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:Diff: ", p), err) + } + if err := oprot.WriteByte(ctx, int8(p.Diff)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Diff (5) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 5:Diff: ", p), err) + } + return err +} + +func (p *OrderInfo) Equals(other *OrderInfo) bool { + if p == other { + return true + } else if p == nil || other == nil { + return false + } + if p.ID != other.ID { return false } + if p.Type != other.Type { return false } + if p.Time != other.Time { return false } + if p.ChessId != other.ChessId { return false } + if p.Diff != other.Diff { return false } + return true +} + +func (p *OrderInfo) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("OrderInfo(%+v)", *p) +} + +func (p *OrderInfo) LogValue() slog.Value { + if p == nil { + return slog.AnyValue(nil) + } + v := thrift.SlogTStructWrapper{ + Type: "*backend.OrderInfo", + Value: p, + } + return slog.AnyValue(v) +} + +var _ slog.LogValuer = (*OrderInfo)(nil) + +func (p *OrderInfo) Validate() error { + return nil +} + +// Attributes: +// - UID +// - NickName +// - Level +// - LogoutTime +// - LoginTime +// - Face +// +type FriendInfo struct { + UID int64 `thrift:"Uid,1" db:"Uid" json:"Uid"` + NickName string `thrift:"NickName,2" db:"NickName" json:"NickName"` + Level int32 `thrift:"Level,3" db:"Level" json:"Level"` + LogoutTime int64 `thrift:"LogoutTime,4" db:"LogoutTime" json:"LogoutTime"` + LoginTime int64 `thrift:"LoginTime,5" db:"LoginTime" json:"LoginTime"` + Face int32 `thrift:"Face,6" db:"Face" json:"Face"` +} + +func NewFriendInfo() *FriendInfo { + return &FriendInfo{} +} + + + +func (p *FriendInfo) GetUID() int64 { + return p.UID +} + + + +func (p *FriendInfo) GetNickName() string { + return p.NickName +} + + + +func (p *FriendInfo) GetLevel() int32 { + return p.Level +} + + + +func (p *FriendInfo) GetLogoutTime() int64 { + return p.LogoutTime +} + + + +func (p *FriendInfo) GetLoginTime() int64 { + return p.LoginTime +} + + + +func (p *FriendInfo) GetFace() int32 { + return p.Face +} + +func (p *FriendInfo) Read(ctx context.Context, iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.I64 { + if err := p.ReadField1(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 2: + if fieldTypeId == thrift.STRING { + if err := p.ReadField2(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 3: + if fieldTypeId == thrift.I32 { + if err := p.ReadField3(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 4: + if fieldTypeId == thrift.I64 { + if err := p.ReadField4(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 5: + if fieldTypeId == thrift.I64 { + if err := p.ReadField5(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + case 6: + if fieldTypeId == thrift.I32 { + if err := p.ReadField6(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + default: + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(ctx); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *FriendInfo) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.UID = v + } + return nil +} + +func (p *FriendInfo) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadString(ctx); err != nil { + return thrift.PrependError("error reading field 2: ", err) + } else { + p.NickName = v + } + return nil +} + +func (p *FriendInfo) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 3: ", err) + } else { + p.Level = v + } + return nil +} + +func (p *FriendInfo) ReadField4(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 4: ", err) + } else { + p.LogoutTime = v + } + return nil +} + +func (p *FriendInfo) ReadField5(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI64(ctx); err != nil { + return thrift.PrependError("error reading field 5: ", err) + } else { + p.LoginTime = v + } + return nil +} + +func (p *FriendInfo) ReadField6(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 6: ", err) + } else { + p.Face = v + } + return nil +} + +func (p *FriendInfo) Write(ctx context.Context, oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin(ctx, "FriendInfo"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if p != nil { + if err := p.writeField1(ctx, oprot); err != nil { return err } + if err := p.writeField2(ctx, oprot); err != nil { return err } + if err := p.writeField3(ctx, oprot); err != nil { return err } + if err := p.writeField4(ctx, oprot); err != nil { return err } + if err := p.writeField5(ctx, oprot); err != nil { return err } + if err := p.writeField6(ctx, oprot); err != nil { return err } + } + if err := oprot.WriteFieldStop(ctx); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(ctx); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *FriendInfo) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Uid", thrift.I64, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Uid: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.UID)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Uid (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Uid: ", p), err) + } + return err +} + +func (p *FriendInfo) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "NickName", thrift.STRING, 2); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:NickName: ", p), err) + } + if err := oprot.WriteString(ctx, string(p.NickName)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.NickName (2) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 2:NickName: ", p), err) + } + return err +} + +func (p *FriendInfo) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Level", thrift.I32, 3); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:Level: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Level)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Level (3) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 3:Level: ", p), err) + } + return err +} + +func (p *FriendInfo) writeField4(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "LogoutTime", thrift.I64, 4); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:LogoutTime: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.LogoutTime)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.LogoutTime (4) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 4:LogoutTime: ", p), err) + } + return err +} + +func (p *FriendInfo) writeField5(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "LoginTime", thrift.I64, 5); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:LoginTime: ", p), err) + } + if err := oprot.WriteI64(ctx, int64(p.LoginTime)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.LoginTime (5) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 5:LoginTime: ", p), err) + } + return err +} + +func (p *FriendInfo) writeField6(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Face", thrift.I32, 6); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:Face: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.Face)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Face (6) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 6:Face: ", p), err) + } + return err +} + +func (p *FriendInfo) Equals(other *FriendInfo) bool { + if p == other { + return true + } else if p == nil || other == nil { + return false + } + if p.UID != other.UID { return false } + if p.NickName != other.NickName { return false } + if p.Level != other.Level { return false } + if p.LogoutTime != other.LogoutTime { return false } + if p.LoginTime != other.LoginTime { return false } + if p.Face != other.Face { return false } + return true +} + +func (p *FriendInfo) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("FriendInfo(%+v)", *p) +} + +func (p *FriendInfo) LogValue() slog.Value { + if p == nil { + return slog.AnyValue(nil) + } + v := thrift.SlogTStructWrapper{ + Type: "*backend.FriendInfo", + Value: p, + } + return slog.AnyValue(v) +} + +var _ slog.LogValuer = (*FriendInfo)(nil) + +func (p *FriendInfo) Validate() error { + return nil +} + +type GameAdminService interface { + // Parameters: + // - UID + // + GetAdminInfo(ctx context.Context, Uid int32) (_r *ResAdminInfo, _err error) +} + +type GameAdminServiceClient struct { + c thrift.TClient + meta thrift.ResponseMeta +} + +func NewGameAdminServiceClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *GameAdminServiceClient { + return &GameAdminServiceClient{ + c: thrift.NewTStandardClient(f.GetProtocol(t), f.GetProtocol(t)), + } +} + +func NewGameAdminServiceClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *GameAdminServiceClient { + return &GameAdminServiceClient{ + c: thrift.NewTStandardClient(iprot, oprot), + } +} + +func NewGameAdminServiceClient(c thrift.TClient) *GameAdminServiceClient { + return &GameAdminServiceClient{ + c: c, + } +} + +func (p *GameAdminServiceClient) Client_() thrift.TClient { + return p.c +} + +func (p *GameAdminServiceClient) LastResponseMeta_() thrift.ResponseMeta { + return p.meta +} + +func (p *GameAdminServiceClient) SetLastResponseMeta_(meta thrift.ResponseMeta) { + p.meta = meta +} + +// Parameters: +// - UID +// +func (p *GameAdminServiceClient) GetAdminInfo(ctx context.Context, Uid int32) (_r *ResAdminInfo, _err error) { + var _args10 GameAdminServiceGetAdminInfoArgs + _args10.UID = Uid + var _result12 GameAdminServiceGetAdminInfoResult + var _meta11 thrift.ResponseMeta + _meta11, _err = p.Client_().Call(ctx, "GetAdminInfo", &_args10, &_result12) + p.SetLastResponseMeta_(_meta11) + if _err != nil { + return + } + if _ret13 := _result12.GetSuccess(); _ret13 != nil { + return _ret13, nil + } + return nil, thrift.NewTApplicationException(thrift.MISSING_RESULT, "GetAdminInfo failed: unknown result") +} + +type GameAdminServiceProcessor struct { + processorMap map[string]thrift.TProcessorFunction + handler GameAdminService +} + +func (p *GameAdminServiceProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { + p.processorMap[key] = processor +} + +func (p *GameAdminServiceProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { + processor, ok = p.processorMap[key] + return processor, ok +} + +func (p *GameAdminServiceProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { + return p.processorMap +} + +func NewGameAdminServiceProcessor(handler GameAdminService) *GameAdminServiceProcessor { + + self14 := &GameAdminServiceProcessor{handler:handler, processorMap:make(map[string]thrift.TProcessorFunction)} + self14.processorMap["GetAdminInfo"] = &gameAdminServiceProcessorGetAdminInfo{handler:handler} + return self14 +} + +func (p *GameAdminServiceProcessor) Process(ctx context.Context, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + name, _, seqId, err2 := iprot.ReadMessageBegin(ctx) + if err2 != nil { return false, thrift.WrapTException(err2) } + if processor, ok := p.GetProcessorFunction(name); ok { + return processor.Process(ctx, seqId, iprot, oprot) + } + iprot.Skip(ctx, thrift.STRUCT) + iprot.ReadMessageEnd(ctx) + x15 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function " + name) + oprot.WriteMessageBegin(ctx, name, thrift.EXCEPTION, seqId) + x15.Write(ctx, oprot) + oprot.WriteMessageEnd(ctx) + oprot.Flush(ctx) + return false, x15 +} + +type gameAdminServiceProcessorGetAdminInfo struct { + handler GameAdminService +} + +func (p *gameAdminServiceProcessorGetAdminInfo) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { + var _write_err16 thrift.TException + args := GameAdminServiceGetAdminInfoArgs{} + if err2 := args.Read(ctx, iprot); err2 != nil { + iprot.ReadMessageEnd(ctx) + x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err2.Error()) + oprot.WriteMessageBegin(ctx, "GetAdminInfo", thrift.EXCEPTION, seqId) + x.Write(ctx, oprot) + oprot.WriteMessageEnd(ctx) + oprot.Flush(ctx) + return false, thrift.WrapTException(err2) + } + iprot.ReadMessageEnd(ctx) + + tickerCancel := func() {} + // Start a goroutine to do server side connectivity check. + if thrift.ServerConnectivityCheckInterval > 0 { + var cancel context.CancelCauseFunc + ctx, cancel = context.WithCancelCause(ctx) + defer cancel(nil) + var tickerCtx context.Context + tickerCtx, tickerCancel = context.WithCancel(context.Background()) + defer tickerCancel() + go func(ctx context.Context, cancel context.CancelCauseFunc) { + ticker := time.NewTicker(thrift.ServerConnectivityCheckInterval) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + if !iprot.Transport().IsOpen() { + cancel(thrift.ErrAbandonRequest) + return + } + } + } + }(tickerCtx, cancel) + } + + result := GameAdminServiceGetAdminInfoResult{} + if retval, err2 := p.handler.GetAdminInfo(ctx, args.UID); err2 != nil { + tickerCancel() + err = thrift.WrapTException(err2) + if errors.Is(err2, thrift.ErrAbandonRequest) { + return false, &thrift.ProcessorError{ + WriteError: thrift.WrapTException(err2), + EndpointError: err, + } + } + if errors.Is(err2, context.Canceled) { + if err3 := context.Cause(ctx); errors.Is(err3, thrift.ErrAbandonRequest) { + return false, &thrift.ProcessorError{ + WriteError: thrift.WrapTException(err3), + EndpointError: err, + } + } + } + _exc17 := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing GetAdminInfo: " + err2.Error()) + if err2 := oprot.WriteMessageBegin(ctx, "GetAdminInfo", thrift.EXCEPTION, seqId); err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if err2 := _exc17.Write(ctx, oprot); _write_err16 == nil && err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if err2 := oprot.WriteMessageEnd(ctx); _write_err16 == nil && err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if err2 := oprot.Flush(ctx); _write_err16 == nil && err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if _write_err16 != nil { + return false, &thrift.ProcessorError{ + WriteError: _write_err16, + EndpointError: err, + } + } + return true, err + } else { + result.Success = retval + } + tickerCancel() + if err2 := oprot.WriteMessageBegin(ctx, "GetAdminInfo", thrift.REPLY, seqId); err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if err2 := result.Write(ctx, oprot); _write_err16 == nil && err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if err2 := oprot.WriteMessageEnd(ctx); _write_err16 == nil && err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if err2 := oprot.Flush(ctx); _write_err16 == nil && err2 != nil { + _write_err16 = thrift.WrapTException(err2) + } + if _write_err16 != nil { + return false, &thrift.ProcessorError{ + WriteError: _write_err16, + EndpointError: err, + } + } + return true, err +} + + +// HELPER FUNCTIONS AND STRUCTURES + +// Attributes: +// - UID +// +type GameAdminServiceGetAdminInfoArgs struct { + UID int32 `thrift:"Uid,1" db:"Uid" json:"Uid"` +} + +func NewGameAdminServiceGetAdminInfoArgs() *GameAdminServiceGetAdminInfoArgs { + return &GameAdminServiceGetAdminInfoArgs{} +} + + + +func (p *GameAdminServiceGetAdminInfoArgs) GetUID() int32 { + return p.UID +} + +func (p *GameAdminServiceGetAdminInfoArgs) Read(ctx context.Context, iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 1: + if fieldTypeId == thrift.I32 { + if err := p.ReadField1(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + default: + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(ctx); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *GameAdminServiceGetAdminInfoArgs) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { + if v, err := iprot.ReadI32(ctx); err != nil { + return thrift.PrependError("error reading field 1: ", err) + } else { + p.UID = v + } + return nil +} + +func (p *GameAdminServiceGetAdminInfoArgs) Write(ctx context.Context, oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin(ctx, "GetAdminInfo_args"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if p != nil { + if err := p.writeField1(ctx, oprot); err != nil { return err } + } + if err := oprot.WriteFieldStop(ctx); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(ctx); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *GameAdminServiceGetAdminInfoArgs) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { + if err := oprot.WriteFieldBegin(ctx, "Uid", thrift.I32, 1); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Uid: ", p), err) + } + if err := oprot.WriteI32(ctx, int32(p.UID)); err != nil { + return thrift.PrependError(fmt.Sprintf("%T.Uid (1) field write error: ", p), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Uid: ", p), err) + } + return err +} + +func (p *GameAdminServiceGetAdminInfoArgs) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("GameAdminServiceGetAdminInfoArgs(%+v)", *p) +} + +func (p *GameAdminServiceGetAdminInfoArgs) LogValue() slog.Value { + if p == nil { + return slog.AnyValue(nil) + } + v := thrift.SlogTStructWrapper{ + Type: "*backend.GameAdminServiceGetAdminInfoArgs", + Value: p, + } + return slog.AnyValue(v) +} + +var _ slog.LogValuer = (*GameAdminServiceGetAdminInfoArgs)(nil) + +// Attributes: +// - Success +// +type GameAdminServiceGetAdminInfoResult struct { + Success *ResAdminInfo `thrift:"success,0" db:"success" json:"success,omitempty"` +} + +func NewGameAdminServiceGetAdminInfoResult() *GameAdminServiceGetAdminInfoResult { + return &GameAdminServiceGetAdminInfoResult{} +} + +var GameAdminServiceGetAdminInfoResult_Success_DEFAULT *ResAdminInfo + +func (p *GameAdminServiceGetAdminInfoResult) GetSuccess() *ResAdminInfo { + if !p.IsSetSuccess() { + return GameAdminServiceGetAdminInfoResult_Success_DEFAULT + } + return p.Success +} + +func (p *GameAdminServiceGetAdminInfoResult) IsSetSuccess() bool { + return p.Success != nil +} + +func (p *GameAdminServiceGetAdminInfoResult) Read(ctx context.Context, iprot thrift.TProtocol) error { + if _, err := iprot.ReadStructBegin(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) + } + + + for { + _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) + if err != nil { + return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) + } + if fieldTypeId == thrift.STOP { + break + } + switch fieldId { + case 0: + if fieldTypeId == thrift.STRUCT { + if err := p.ReadField0(ctx, iprot); err != nil { + return err + } + } else { + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + default: + if err := iprot.Skip(ctx, fieldTypeId); err != nil { + return err + } + } + if err := iprot.ReadFieldEnd(ctx); err != nil { + return err + } + } + if err := iprot.ReadStructEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) + } + return nil +} + +func (p *GameAdminServiceGetAdminInfoResult) ReadField0(ctx context.Context, iprot thrift.TProtocol) error { + p.Success = &ResAdminInfo{} + if err := p.Success.Read(ctx, iprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Success), err) + } + return nil +} + +func (p *GameAdminServiceGetAdminInfoResult) Write(ctx context.Context, oprot thrift.TProtocol) error { + if err := oprot.WriteStructBegin(ctx, "GetAdminInfo_result"); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) + } + if p != nil { + if err := p.writeField0(ctx, oprot); err != nil { return err } + } + if err := oprot.WriteFieldStop(ctx); err != nil { + return thrift.PrependError("write field stop error: ", err) + } + if err := oprot.WriteStructEnd(ctx); err != nil { + return thrift.PrependError("write struct stop error: ", err) + } + return nil +} + +func (p *GameAdminServiceGetAdminInfoResult) writeField0(ctx context.Context, oprot thrift.TProtocol) (err error) { + if p.IsSetSuccess() { + if err := oprot.WriteFieldBegin(ctx, "success", thrift.STRUCT, 0); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) + } + if err := p.Success.Write(ctx, oprot); err != nil { + return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Success), err) + } + if err := oprot.WriteFieldEnd(ctx); err != nil { + return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) + } + } + return err +} + +func (p *GameAdminServiceGetAdminInfoResult) String() string { + if p == nil { + return "" + } + return fmt.Sprintf("GameAdminServiceGetAdminInfoResult(%+v)", *p) +} + +func (p *GameAdminServiceGetAdminInfoResult) LogValue() slog.Value { + if p == nil { + return slog.AnyValue(nil) + } + v := thrift.SlogTStructWrapper{ + Type: "*backend.GameAdminServiceGetAdminInfoResult", + Value: p, + } + return slog.AnyValue(v) +} + +var _ slog.LogValuer = (*GameAdminServiceGetAdminInfoResult)(nil) + + diff --git a/src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go b/src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go new file mode 100644 index 00000000..e7023cd0 --- /dev/null +++ b/src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go @@ -0,0 +1,164 @@ +// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. + +package main + +import ( + "context" + "flag" + "fmt" + "math" + "net" + "net/url" + "os" + "strconv" + "strings" + thrift "github.com/apache/thrift/lib/go/thrift" + "server/gen-go/backend" +) + +var _ = backend.GoUnusedProtection__ + +func Usage() { + fmt.Fprintln(os.Stderr, "Usage of ", os.Args[0], " [-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]:") + flag.PrintDefaults() + fmt.Fprintln(os.Stderr, "\nFunctions:") + fmt.Fprintln(os.Stderr, " ResAdminInfo GetAdminInfo(i32 Uid)") + fmt.Fprintln(os.Stderr) + os.Exit(0) +} + +type httpHeaders map[string]string + +func (h httpHeaders) String() string { + var m map[string]string = h + return fmt.Sprintf("%s", m) +} + +func (h httpHeaders) Set(value string) error { + parts := strings.Split(value, ": ") + if len(parts) != 2 { + return fmt.Errorf("header should be of format 'Key: Value'") + } + h[parts[0]] = parts[1] + return nil +} + +func main() { + flag.Usage = Usage + var host string + var port int + var protocol string + var urlString string + var framed bool + var useHttp bool + headers := make(httpHeaders) + var parsedUrl *url.URL + var trans thrift.TTransport + _ = strconv.Atoi + _ = math.Abs + flag.Usage = Usage + flag.StringVar(&host, "h", "localhost", "Specify host and port") + flag.IntVar(&port, "p", 9090, "Specify port") + flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson, json)") + flag.StringVar(&urlString, "u", "", "Specify the url") + flag.BoolVar(&framed, "framed", false, "Use framed transport") + flag.BoolVar(&useHttp, "http", false, "Use http") + flag.Var(headers, "H", "Headers to set on the http(s) request (e.g. -H \"Key: Value\")") + flag.Parse() + + if len(urlString) > 0 { + var err error + parsedUrl, err = url.Parse(urlString) + if err != nil { + fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) + flag.Usage() + } + host = parsedUrl.Host + useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == "http" || parsedUrl.Scheme == "https" + } else if useHttp { + _, err := url.Parse(fmt.Sprint("http://", host, ":", port)) + if err != nil { + fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) + flag.Usage() + } + } + + cmd := flag.Arg(0) + var err error + var cfg *thrift.TConfiguration = nil + if useHttp { + trans, err = thrift.NewTHttpClient(parsedUrl.String()) + if len(headers) > 0 { + httptrans := trans.(*thrift.THttpClient) + for key, value := range headers { + httptrans.SetHeader(key, value) + } + } + } else { + portStr := fmt.Sprint(port) + if strings.Contains(host, ":") { + host, portStr, err = net.SplitHostPort(host) + if err != nil { + fmt.Fprintln(os.Stderr, "error with host:", err) + os.Exit(1) + } + } + trans = thrift.NewTSocketConf(net.JoinHostPort(host, portStr), cfg) + if err != nil { + fmt.Fprintln(os.Stderr, "error resolving address:", err) + os.Exit(1) + } + if framed { + trans = thrift.NewTFramedTransportConf(trans, cfg) + } + } + if err != nil { + fmt.Fprintln(os.Stderr, "Error creating transport", err) + os.Exit(1) + } + defer trans.Close() + var protocolFactory thrift.TProtocolFactory + switch protocol { + case "compact": + protocolFactory = thrift.NewTCompactProtocolFactoryConf(cfg) + case "simplejson": + protocolFactory = thrift.NewTSimpleJSONProtocolFactoryConf(cfg) + case "json": + protocolFactory = thrift.NewTJSONProtocolFactory() + case "binary", "": + protocolFactory = thrift.NewTBinaryProtocolFactoryConf(cfg) + default: + fmt.Fprintln(os.Stderr, "Invalid protocol specified: ", protocol) + Usage() + os.Exit(1) + } + iprot := protocolFactory.GetProtocol(trans) + oprot := protocolFactory.GetProtocol(trans) + client := backend.NewGameAdminServiceClient(thrift.NewTStandardClient(iprot, oprot)) + if err := trans.Open(); err != nil { + fmt.Fprintln(os.Stderr, "Error opening socket to ", host, ":", port, " ", err) + os.Exit(1) + } + + switch cmd { + case "GetAdminInfo": + if flag.NArg() - 1 != 1 { + fmt.Fprintln(os.Stderr, "GetAdminInfo requires 1 args") + flag.Usage() + } + tmp0, err18 := (strconv.Atoi(flag.Arg(1))) + if err18 != nil { + Usage() + return + } + argvalue0 := int32(tmp0) + value0 := argvalue0 + fmt.Print(client.GetAdminInfo(context.Background(), value0)) + fmt.Print("\n") + break + case "": + Usage() + default: + fmt.Fprintln(os.Stderr, "Invalid function ", cmd) + } +} diff --git a/src/server/go.mod b/src/server/go.mod index 750a18f5..071ec27e 100644 --- a/src/server/go.mod +++ b/src/server/go.mod @@ -46,7 +46,10 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect ) -require golang.org/x/sys v0.29.0 // indirect +require ( + github.com/apache/thrift v0.22.0 // indirect + golang.org/x/sys v0.29.0 // indirect +) require ( filippo.io/edwards25519 v1.1.0 // indirect diff --git a/src/server/go.sum b/src/server/go.sum index ac81bed5..03c7cb8e 100644 --- a/src/server/go.sum +++ b/src/server/go.sum @@ -73,6 +73,8 @@ github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmP github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/aliyun/credentials-go v1.4.6 h1:CG8rc/nxCNKfXbZWpWDzI9GjF4Tuu3Es14qT8Y0ClOk= github.com/aliyun/credentials-go v1.4.6/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= +github.com/apache/thrift v0.22.0 h1:r7mTJdj51TMDe6RtcmNdQxgn9XcyfGDOzegMDRg47uc= +github.com/apache/thrift v0.22.0/go.mod h1:1e7J/O1Ae6ZQMTYdy9xa3w9k+XHWPfRvdPyJeynQ+/g= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 5a61a513..279440ab 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -2,6 +2,7 @@ package test import ( "fmt" + "server/backend" decorateCfg "server/conf/decorate" languageCfg "server/conf/language" notification_cfg "server/conf/notification" @@ -14,6 +15,10 @@ import ( "testing" ) +func TestThriftServer(t *testing.T) { + backend.Start() +} + func TestFixDecorate(t *testing.T) { // Initialize player p := new(game.Player) diff --git a/src/server/test/log/20260305.log b/src/server/test/log/20260305.log new file mode 100644 index 00000000..85f75562 --- /dev/null +++ b/src/server/test/log/20260305.log @@ -0,0 +1,2 @@ +2026/03/05 00:00:00 [debug ] CreateDailyLogFile +2026/03/05 00:00:00 [debug ] Server ZeroFlush From 2ae819376f35c9e7cd7a5276bf12df9784efb139 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 11:02:25 +0800 Subject: [PATCH 31/87] =?UTF-8?q?=E5=8D=95=E6=AC=A1session=E5=86=85?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E6=B7=BB=E5=8A=A0=E5=90=8C=E4=B8=80=E5=A5=BD?= =?UTF-8?q?=E5=8F=8B=E4=BC=9A=E6=9C=89=E6=8F=90=E7=A4=BA=EF=BC=8C=E9=87=8D?= =?UTF-8?q?=E6=96=B0=E7=99=BB=E9=99=86=E5=90=8E=E6=B7=BB=E5=8A=A0=E7=9B=B8?= =?UTF-8?q?=E5=90=8C=E5=A5=BD=E5=8F=8B=E5=8D=B4=E6=8F=90=E7=A4=BA=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/player_back.go | 6 +++++- src/server/game/req_func_friend.go | 3 ++- src/server/test/friend_test.go | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 52bc4d53..357bb430 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -332,8 +332,12 @@ func (p *Player) FriendListBackData() { fl = append(fl, ps) } } + now := GoUtil.Now() ReqFriendList := make([]int64, 0, len(FriendMod.SendApply)) - for k := range FriendMod.SendApply { + for k, v := range FriendMod.SendApply { + if now-v > oneday { + continue + } ReqFriendList = append(ReqFriendList, int64(k)) } p.PushClientRes(&proto.ResFriendList{ diff --git a/src/server/game/req_func_friend.go b/src/server/game/req_func_friend.go index a62d3e41..349f4972 100644 --- a/src/server/game/req_func_friend.go +++ b/src/server/game/req_func_friend.go @@ -133,7 +133,7 @@ func ReqApplyFriend(player *Player, buf []byte) error { } // 对于任何玩家而言,向自己在24小时内已从任意途径发送过好友申请的玩家再次发送好友申请时,该次申请不会被发出 sendApplyTime := FriendMod.GetSendApplyTime(Uid) - if sendApplyTime != 0 && GoUtil.Now()-sendApplyTime < 86400 { + if sendApplyTime != 0 && GoUtil.Now()-sendApplyTime < oneday { player.PushClientRes(&msg.ResApplyFriend{ Code: msg.RES_CODE_FAIL, Uid: req.Uid, @@ -141,6 +141,7 @@ func ReqApplyFriend(player *Player, buf []byte) error { }) return fmt.Errorf("already applied") } + FriendMod.AddSendApply(Uid) now := GoUtil.Now() if req.Type == 1 { Items, err := FriendMod.GetSponsorReward() diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go index fbcd3374..6bd531bc 100644 --- a/src/server/test/friend_test.go +++ b/src/server/test/friend_test.go @@ -3,7 +3,10 @@ package test import ( "fmt" "server/game" + "server/msg" "testing" + + "google.golang.org/protobuf/proto" ) func TestFriendInit(t *testing.T) { @@ -31,3 +34,15 @@ func TestFriendRecommendList(t *testing.T) { l1 := game.GetRecommendPlayer(p1, 3) fmt.Printf("Recommend List: %v\n", l1) } + +func TestReqApplyFriend(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + req := &msg.ReqApplyFriend{ + Uid: 100002, + Type: 0, + } + buf, _ := proto.Marshal(req) + game.ReqApplyFriend(p1, buf) + p1.FriendListBackData() +} From 5e9710d2f33451625f823108e5b0da0e7d24bfd5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 11:35:32 +0800 Subject: [PATCH 32/87] =?UTF-8?q?=E7=8C=AB=E5=92=AA=E6=AF=9B=E7=9A=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/player_back.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 357bb430..5fab317f 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -206,6 +206,7 @@ func (p *Player) PlayroomVisit(Uid int) { r.Chip = int32(p.GetPlayroomChip(Uid)) r.Kiss = int32(p.GetPlayroomKiss(Uid)) r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet) + r.Fur = int32(PlayerData.PetFur) p.PushClientRes(r) } From 850cceecaad6de410c0f4ea4b43aee1a05c4ac6d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 11:58:08 +0800 Subject: [PATCH 33/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E5=A5=96?= =?UTF-8?q?=E5=8A=B1=E9=85=8D=E7=BD=AE=E4=BC=98=E5=8C=96-=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E6=B4=BB=E5=8A=A8=E7=B1=BB=E5=9E=8B=E5=8C=BA=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/activity/activity_cfg.go | 36 ++++++++++++++++++++++ src/server/conf/champship/champship_cfg.go | 32 ++++++++++++++++--- src/server/game/activity_func.go | 26 ++++++++++++++++ src/server/game/mod/champship/Champship.go | 26 ++++++++-------- src/server/game/mod_factory.go | 5 +++ src/server/game/player_back.go | 3 +- src/server/game/register_network_func.go | 6 ++-- src/server/test/README.MD | 9 +++++- src/server/test/champship_test.go | 29 +++++++++++++++++ 9 files changed, 152 insertions(+), 20 deletions(-) create mode 100644 src/server/test/champship_test.go diff --git a/src/server/conf/activity/activity_cfg.go b/src/server/conf/activity/activity_cfg.go index 9625334e..71a50cf5 100644 --- a/src/server/conf/activity/activity_cfg.go +++ b/src/server/conf/activity/activity_cfg.go @@ -90,6 +90,42 @@ func GetActivityList() []*gamedata.ActivityData { } return List } +func GetActivityListOrigin() []*gamedata.ActivityData { + data, err := gamedata.GetData(CFG_ACTIVITY) + if err != nil { + log.Debug("GetActivityList err:%v", err) + return nil + } + List := make([]*gamedata.ActivityData, 0, len(data)) + + for k, v := range data { + StartTimeStr := gamedata.GetStringValue(v, "StartTime") + EndTimeStr := gamedata.GetStringValue(v, "EndTime") + StartTime := GoUtil.ParseTime(StartTimeStr) + EndTime := GoUtil.ParseTime(EndTimeStr) + Id, err := strconv.Atoi(k) + if err != nil { + log.Debug("GetActivityList parse id err:%v, key:%s", err, k) + continue + } + Type := gamedata.GetIntValue(v, "Type") + Name := gamedata.GetStringValue(v, "Name") + Title := gamedata.GetStringValue(v, "Title") + Level := gamedata.GetIntValue(v, "Level") + ActivityData := &gamedata.ActivityData{ + Id: Id, + Type: Type, + AType: gamedata.GetIntValue(v, "AType"), + Name: Name, + Title: Title, + Level: Level, + StartTime: StartTime, + EndTime: EndTime, + } + List = append(List, ActivityData) + } + return List +} func GetActivityRewardItems(ActId int) []*item.Item { data, err := gamedata.GetData(CFG_ACTIVITY_GIFT) diff --git a/src/server/conf/champship/champship_cfg.go b/src/server/conf/champship/champship_cfg.go index 8e5a8902..5e0ca681 100644 --- a/src/server/conf/champship/champship_cfg.go +++ b/src/server/conf/champship/champship_cfg.go @@ -5,6 +5,7 @@ import ( GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" + "strings" ) const ( @@ -12,6 +13,7 @@ const ( CFG_CHAMPSHIP_RANK = "ChampshipRank" CFG_CHAMPSHIP_JACKPOT = "ChampshipJackpot" CFG_CHAMPSHIP_GROUP = "ChampshipGroup" + CFG_CHAMPSHIP_CONST = "ChampshipConst" ) func init() { @@ -19,6 +21,7 @@ func init() { gamedata.InitCfg(CFG_CHAMPSHIP_RANK) gamedata.InitCfg(CFG_CHAMPSHIP_JACKPOT) gamedata.InitCfg(CFG_CHAMPSHIP_GROUP) + gamedata.InitCfg(CFG_CHAMPSHIP_CONST) } func GetGroupId(N int) int { @@ -44,7 +47,7 @@ func GetChessScore(ChessLv int) int { return gamedata.GetIntValue(data, "Score") } -func GetReward(Reward, Score int) (int, []*item.Item) { +func GetReward(Reward, Score, activityId int) (int, []*item.Item) { data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT) if err != nil { log.Debug("GetReward err:%v, Reward=%d, Score=%d", err, Reward, Score) @@ -53,6 +56,10 @@ func GetReward(Reward, Score int) (int, []*item.Item) { r := make([]*item.Item, 0, len(data)) NewReward := Reward for k, v := range data { + rewardGroupType := gamedata.GetIntValue(v, "RewardGroupType") + if rewardGroupType != activityId { + continue + } Id := GoUtil.Int(k) if Reward >= Id { continue @@ -84,14 +91,14 @@ func GetRewardTotalScore(Reward int) int { return gamedata.GetIntValue(data, "Total") } -func GetRankReward(Rank int) []*item.Item { +func GetRankReward(Rank, yesterdayActivityId int) []*item.Item { data, err := gamedata.GetData(CFG_CHAMPSHIP_RANK) if err != nil { - log.Debug("GetRankReward err:%v, Rank=%d", err, Rank) + log.Debug("GetRankReward err:%v, Rank=%d, yesterdayActivityId=%d", err, Rank, yesterdayActivityId) return nil } for _, v := range data { - if Rank >= gamedata.GetIntValue(v, "Min") && Rank <= gamedata.GetIntValue(v, "Max") { + if Rank >= gamedata.GetIntValue(v, "Min") && Rank <= gamedata.GetIntValue(v, "Max") && yesterdayActivityId == gamedata.GetIntValue(v, "RewardGroupType") { return gamedata.GetItemList(v, "Items") } } @@ -113,3 +120,20 @@ func GetMaxRewardId() int { } return MaxId } + +func GetChampshipActivityId() []int { + data, err := gamedata.GetDataByKey(CFG_CHAMPSHIP_CONST, "RewardGroupType_const") + if err != nil { + log.Debug("GetChampshipActivityId err:%v", err) + return nil + } + value := gamedata.GetStringValue(data, "Value") + var res []int + for _, v := range strings.Split(value, "|") { + id := GoUtil.Int(v) + if id > 0 { + res = append(res, id) + } + } + return res +} diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 6aa194a3..dce8cf2d 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -4,6 +4,7 @@ import ( "fmt" activityCfg "server/conf/activity" catnipCfg "server/conf/catnip" + champshipCfg "server/conf/champship" guesscolorCfg "server/conf/guess_color" languageCfg "server/conf/language" miningCfg "server/conf/mining" @@ -422,3 +423,28 @@ func (p *Player) CatnipBackData() { } p.PushClientRes(res) } + +func (p *Player) GetChampshipActivityId() (int, int) { + var todayActivityId int + var yesterdayActivityId int + activiyCfgList := activityCfg.GetActivityListOrigin() + Now := GoUtil.Now() + YesterDay := GoUtil.ZeroTimestamp() - 1 + level := p.GetBaseMod().GetLevel() + champshipActivityIds := champshipCfg.GetChampshipActivityId() + for _, v := range activiyCfgList { + if !GoUtil.InArray(v.Id, champshipActivityIds) { + continue + } + if v.Level > level { + continue + } + if v.StartTime <= Now && v.EndTime >= Now { + todayActivityId = v.Id + } + if v.StartTime <= YesterDay && v.EndTime >= YesterDay { + yesterdayActivityId = v.Id + } + } + return todayActivityId, yesterdayActivityId +} diff --git a/src/server/game/mod/champship/Champship.go b/src/server/game/mod/champship/Champship.go index 8d5bd263..827ccb6d 100644 --- a/src/server/game/mod/champship/Champship.go +++ b/src/server/game/mod/champship/Champship.go @@ -35,12 +35,12 @@ func (c *ChampshipMod) GetScore() int { return c.Score } -func (c *ChampshipMod) GetRankReward(Rank int) ([]*item.Item, error) { +func (c *ChampshipMod) GetRankReward(Rank, yesterdayActivityId int) ([]*item.Item, error) { if c.RankReward { return nil, fmt.Errorf("rank reward has been received") } c.RankReward = true - return champshipCfg.GetRankReward(Rank), nil + return champshipCfg.GetRankReward(Rank, yesterdayActivityId), nil } func (c *ChampshipMod) AddScore(Chess []int) { @@ -56,14 +56,14 @@ func (c *ChampshipMod) AddScore(Chess []int) { c.Score += score } -func (c *ChampshipMod) GetReward() []*item.Item { - Reward, Items := champshipCfg.GetReward(c.Reward, c.Score) +func (c *ChampshipMod) GetReward(activityId int) []*item.Item { + Reward, Items := champshipCfg.GetReward(c.Reward, c.Score, activityId) c.Reward = Reward c.Max = max(c.Max, c.Reward) return Items } -func (c *ChampshipMod) BackData(MyRank, MyPreRank int) *msg.ResChampship { +func (c *ChampshipMod) BackData(MyRank, MyPreRank, todayActivityId, yesterdayActivityId int) *msg.ResChampship { rankReward := 0 if c.RankReward { rankReward = 2 @@ -75,13 +75,15 @@ func (c *ChampshipMod) BackData(MyRank, MyPreRank int) *msg.ResChampship { status = 1 } return &msg.ResChampship{ - Score: int32(c.Score), - Reward: int32(c.Reward), - EndTime: int32(GoUtil.ZeroTimestamp() + 86400), - Period: int32(GoUtil.GetServerOpenDay()), - Rank: int32(MyRank), - RankReward: int32(rankReward), - Status: int32(status), + Score: int32(c.Score), + Reward: int32(c.Reward), + EndTime: int32(GoUtil.ZeroTimestamp() + 86400), + Period: int32(GoUtil.GetServerOpenDay()), + Rank: int32(MyRank), + RankReward: int32(rankReward), + Status: int32(status), + TodayActivityId: int32(todayActivityId), + YesterdayActivityId: int32(yesterdayActivityId), } } diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index d2ad38bc..8d9ec147 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -3,6 +3,7 @@ package game import ( "server/game/mod/base" "server/game/mod/card" + "server/game/mod/champship" "server/game/mod/charge" "server/game/mod/chess" "server/game/mod/decorate" @@ -67,3 +68,7 @@ func (p *Player) GetFurMod() *fur.FurMod { func (p *Player) GetFriendMod() *friend.FriendMod { return p.PlayMod.getFriendMod() } + +func (p *Player) GetChampshipMod() *champship.ChampshipMod { + return p.PlayMod.getChampshipMod() +} diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 5fab317f..005a8eb9 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -308,7 +308,8 @@ func (p *Player) ChargeBackData() { func (p *Player) BackChampship() { ChampshipMod := p.PlayMod.getChampshipMod() rank, preRank := p.GetChampshipRank() - p.PushClientRes(ChampshipMod.BackData(rank, preRank)) + todayActivityId, yesterdayActivityId := p.GetChampshipActivityId() + p.PushClientRes(ChampshipMod.BackData(rank, preRank, todayActivityId, yesterdayActivityId)) } // 获取冠军赛排名 redis缓存 diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index b5ee52d3..a8429550 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -2737,7 +2737,8 @@ func ReqShippingOrder(player *Player, buf []byte) error { // 锦标赛 func ReqChampshipReward(player *Player, buf []byte) error { ChampshipMod := player.PlayMod.getChampshipMod() - itemList := ChampshipMod.GetReward() + todayActivityId, _ := player.GetChampshipActivityId() + itemList := ChampshipMod.GetReward(todayActivityId) err := player.HandleItem(itemList, msg.ITEM_POP_LABEL_ChampshipReward.String()) if err != nil { player.SendErrClienRes(&msg.ResChampshipReward{ @@ -2789,7 +2790,8 @@ func ReqKv(player *Player, buf []byte) error { func ReqChampshipRankReward(player *Player, buf []byte) error { _, myPreRank := player.GetChampshipRank() ChampshipMod := player.PlayMod.getChampshipMod() - itemList, err := ChampshipMod.GetRankReward(myPreRank) + _, yesterdayActivityId := player.GetChampshipActivityId() + itemList, err := ChampshipMod.GetRankReward(myPreRank, yesterdayActivityId) if err != nil { player.SendErrClienRes(&msg.ResChampshipRankReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/test/README.MD b/src/server/test/README.MD index ce744146..00f2e012 100644 --- a/src/server/test/README.MD +++ b/src/server/test/README.MD @@ -5,7 +5,7 @@ ### 随机好友推荐 ```golang -test function TestFriendRecommendList 2026-3-12 +test function TestFriendRecommendList 2026-03-04 ok server/test 1.033s ``` @@ -16,6 +16,13 @@ ok server/test 1.033s 3714321 | 100002 ``` +### 好友申请 + +```golang +test function TestReqApplyFriend 2026-03-05 +ok server/test 0.479s +``` + ## 充值模块 ### 观看广告记录 diff --git a/src/server/test/champship_test.go b/src/server/test/champship_test.go new file mode 100644 index 00000000..8dd750d0 --- /dev/null +++ b/src/server/test/champship_test.go @@ -0,0 +1,29 @@ +package test + +import ( + champshipCfg "server/conf/champship" + "server/game" + "testing" +) + +func TestChampshipReward(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + ChampshipMod := p1.GetChampshipMod() + ChampshipMod.Score = 1000 + game.ReqChampshipReward(p1, nil) +} + +func TestChampshipRankReward(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + ChampshipMod := p1.GetChampshipMod() + ChampshipMod.RankReward = false + _, yesterdayActivityId := p1.GetChampshipActivityId() + ChampshipMod.GetRankReward(1, yesterdayActivityId) +} + +func TestGetChampshipActivityId(t *testing.T) { + res := champshipCfg.GetChampshipActivityId() + t.Logf("res:%v", res) +} From 4422dbc527e104966f526df967efb38ba72f7d69 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 15:14:29 +0800 Subject: [PATCH 34/87] =?UTF-8?q?=E4=B8=83=E6=97=A5=E7=AD=BE=E5=88=B0-?= =?UTF-8?q?=E6=9C=88=E5=BA=A6=E5=A5=96=E5=8A=B1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../conf/seven_login/seven_login_cfg.go | 6 ++++- .../game/mod/seven_login/seven_login.go | 17 +++++++------- .../game/mod/seven_login/seven_login_func.go | 3 ++- src/server/game_util/timeUtil.go | 4 ++++ src/server/test/friend_test.go | 2 +- src/server/test/seven_test.go | 23 +++++++++++++++++++ 6 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 src/server/test/seven_test.go diff --git a/src/server/conf/seven_login/seven_login_cfg.go b/src/server/conf/seven_login/seven_login_cfg.go index ea9ca150..8b464349 100644 --- a/src/server/conf/seven_login/seven_login_cfg.go +++ b/src/server/conf/seven_login/seven_login_cfg.go @@ -40,7 +40,7 @@ func GetSevenLoginReward() []*gamedata.SevenLoginRewardData { return result } -func GetSevenLoginMonthReward() []*gamedata.SevenLoginRewardData { +func GetSevenLoginMonthReward(nowMonth int) []*gamedata.SevenLoginRewardData { data, err := gamedata.GetData(CFG_SEVEN_LOGIN_MONTH) if err != nil { log.Debug("GetSevenLoginReward err:%v", err) @@ -48,6 +48,10 @@ func GetSevenLoginMonthReward() []*gamedata.SevenLoginRewardData { } var result []*gamedata.SevenLoginRewardData for k, v := range data { + month := gamedata.GetIntValue(v, "Month") + if month != nowMonth { + continue + } Id, _ := strconv.Atoi(k) Diamond := gamedata.GetIntValue(v, "Diamond") RewardNum := gamedata.GetIntValue(v, "RewardNum") diff --git a/src/server/game/mod/seven_login/seven_login.go b/src/server/game/mod/seven_login/seven_login.go index 9d0d57c4..a8d09277 100644 --- a/src/server/game/mod/seven_login/seven_login.go +++ b/src/server/game/mod/seven_login/seven_login.go @@ -40,11 +40,11 @@ func (s *SevenLoginMod) ZeroUpdate(Add, LastLoginTime int) { s.WeekResetTime = WeekZeroTimestamp s.DayR = 0 } - - if Now > s.MonthResetTime+GoUtil.MONTHDAYS { + monthZeroTimestamp := GoUtil.MonthZeroTimestamp() + if monthZeroTimestamp > s.MonthResetTime { s.MonthReward = randMonthReward() s.Active = 0 - s.MonthResetTime = s.MonthResetTime + (Now-s.MonthResetTime)/GoUtil.MONTHDAYS*GoUtil.MONTHDAYS + s.MonthResetTime = monthZeroTimestamp } s.DayR++ } @@ -108,11 +108,12 @@ func (s *SevenLoginMod) BackData() *msg.ResSevenLogin { Status := GoUtil.IfTrue(!v.Status && s.Active >= Active, 1, 0).(int) Status = GoUtil.IfTrue(v.Status, 2, Status).(int) MonthReward = append(MonthReward, &msg.SevenLoginReward{ - Item1: item.ItemToMsg(v.Item1), - Item2: item.ItemToMsg(v.Item2), - Item3: item.ItemToMsg(v.Item3), - Status: int32(Status), - Id: int32(k), + Item1: item.ItemToMsg(v.Item1), + Item2: item.ItemToMsg(v.Item2), + Item3: item.ItemToMsg(v.Item3), + Status: int32(Status), + Id: int32(k), + NeedActive: int32(Active), }) } diff --git a/src/server/game/mod/seven_login/seven_login_func.go b/src/server/game/mod/seven_login/seven_login_func.go index a543e83b..5eec7e73 100644 --- a/src/server/game/mod/seven_login/seven_login_func.go +++ b/src/server/game/mod/seven_login/seven_login_func.go @@ -109,7 +109,8 @@ func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot } func randMonthReward() map[int]Reward { - RewardList := sevenLoginCfg.GetSevenLoginMonthReward() + month := GoUtil.NowMonth() + RewardList := sevenLoginCfg.GetSevenLoginMonthReward(month) sort.Slice(RewardList, func(i, j int) bool { return RewardList[i].Id < RewardList[j].Id }) diff --git a/src/server/game_util/timeUtil.go b/src/server/game_util/timeUtil.go index 4f1bfb9f..083a5c81 100644 --- a/src/server/game_util/timeUtil.go +++ b/src/server/game_util/timeUtil.go @@ -174,3 +174,7 @@ func IsFirstDayOfMonth() bool { now := time.Now() return now.Day() == 1 } + +func NowMonth() int { + return int(time.Now().Month()) +} diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go index 6bd531bc..aaef53f3 100644 --- a/src/server/test/friend_test.go +++ b/src/server/test/friend_test.go @@ -22,7 +22,7 @@ func TestFriendApply(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") FriendMod := p1.GetFriendMod() - FriendMod.AddFriendApply(100002, 0) + FriendMod.AddFriendApply(100002, 0, 1698000000) if !FriendMod.CheckApply(100002) { t.Error("FriendMod AddFriendApply failed") } diff --git a/src/server/test/seven_test.go b/src/server/test/seven_test.go new file mode 100644 index 00000000..792e5114 --- /dev/null +++ b/src/server/test/seven_test.go @@ -0,0 +1,23 @@ +package test + +import ( + sevenLoginCfg "server/conf/seven_login" + "server/game" + GoUtil "server/game_util" + "testing" +) + +func TestGetSevenLoginMonthReward(t *testing.T) { + month := GoUtil.NowMonth() + res := sevenLoginCfg.GetSevenLoginMonthReward(month) + t.Logf("res:%v", res) +} + +func TestSevenLoginZeroUpdate(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + SevenLoginMod := p1.GetSevenLoginMod() + SevenLoginMod.ZeroUpdate(0, 0) + SevenLoginMod.BackData() + t.Logf("SevenLoginMod:%v", SevenLoginMod) +} From e892469ff9a1bc66eccf7b7c96a5e5be47c1ee43 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 15:40:28 +0800 Subject: [PATCH 35/87] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 2 +- src/server/game/mod/friend/Friend.go | 33 +++++++++++++++++++++++----- src/server/game/req_func_friend.go | 3 ++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index cd14be45..9864229b 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -67,7 +67,7 @@ func (p *Player) handle(m *msg.Msg) error { if ok { addType = GoUtil.Int(info["type"]) } - ok = FriendMod.AddFriendApply(m.From, addType) + ok = FriendMod.AddFriendApply(m.From, addType, m.SendT) // 已申请 if ok { return nil diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 7881f73c..dcf4a19f 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -67,6 +67,7 @@ type FriendInfo struct { AddTime int64 DelTime int64 Interact []*Interact // 拜访记录 + Greeting bool // 是否打过招呼 } type Interact struct { @@ -356,6 +357,12 @@ func (f *FriendMod) DelCardInfo(Id string) { // 删除好友 func (f *FriendMod) DelFriend(id int) { f.NewFriendList[id].DelTime = GoUtil.Now() + // 删除好友后清除打招呼 + for _, v := range f.ReplyList { + if v.Uid == id && (v.Type == REPLY_TYPE_GREETING || v.Type == REPLY_TYPE_GREETING_Get) { + v.Status = 1 + } + } } // 检查是否好友 @@ -420,7 +427,7 @@ func (f *FriendMod) CheckAddBefore(uid int) bool { } // 收到申请 -func (f *FriendMod) AddFriendApply(Uid, Type int) bool { +func (f *FriendMod) AddFriendApply(Uid, Type int, sendTime int64) bool { if f.DailyGetApply >= friendCfg.GetDailyGetApplyLimit() { return true } @@ -450,7 +457,7 @@ func (f *FriendMod) AddFriendApply(Uid, Type int) bool { } f.NewApplyList[Uid] = &ApplyInfo{ Type: Type, - Time: GoUtil.Now(), + Time: sendTime, } f.DailyGetApply++ return false @@ -635,7 +642,7 @@ func (f *FriendMod) GetActLogLast() *ActLogInfo { // 增加待回复请求 func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, Items []*item.Item) *ReplyInfo { f.AutoId++ - ReplyInfo := &ReplyInfo{ + Reply := &ReplyInfo{ Id: f.AutoId, Uid: Uid, Type: Type, @@ -644,8 +651,11 @@ func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, EndTime: EndTime, Items: Items, } - f.ReplyList = append(f.ReplyList, ReplyInfo) - return ReplyInfo + f.ReplyList = append(f.ReplyList, Reply) + if len(f.ReplyList) > 20 { + f.ReplyList = f.ReplyList[len(f.ReplyList)-20:] + } + return Reply } // 回复请求 @@ -715,3 +725,16 @@ func (f *FriendMod) AddDailyRecommend() error { } return nil } + +func (f *FriendMod) GreetingFriend(Uid int) { + if v, ok := f.NewFriendList[Uid]; ok { + v.Greeting = true + } +} + +func (f *FriendMod) CheckGreeting(Uid int) bool { + if v, ok := f.NewFriendList[Uid]; ok { + return v.Greeting + } + return false +} diff --git a/src/server/game/req_func_friend.go b/src/server/game/req_func_friend.go index 349f4972..84129415 100644 --- a/src/server/game/req_func_friend.go +++ b/src/server/game/req_func_friend.go @@ -218,7 +218,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error { return fmt.Errorf("friend list full") } // 新好友才可以打招呼 - if !FriendMod.CheckAddBefore(Uid) { + if !FriendMod.CheckGreeting(Uid) { FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil) } FriendMod.AddFriend(Uid) @@ -433,6 +433,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error { End: now + sevendays, Extra: ReplyData, }) + FriendMod.GreetingFriend(int(ReplyInfo.Uid)) case friend.REPLY_TYPE_CATNIP: // 猫草大作战同意邀请 GameId := GoUtil.Int(ReplyInfo.Param) activityInfo := player.GetActivityInfo(player.GetActivityId(activity.ACT_TYPE_CATNIP)) From dfc6f986bcba8d8e3a1ecd9181376686bf66a9d1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 16:41:17 +0800 Subject: [PATCH 36/87] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=A1=A8=E6=83=85?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/register_network_func.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index a8429550..46fb3fd7 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4393,6 +4393,7 @@ func ReqSetEmoji(player *Player, buf []byte) error { "emoji_id": int(req.Id), "emoji_setplace": int(req.Type), }) + player.UpdateUserInfo() player.PlayMod.save() player.PushClientRes(&msg.ResSetEmoji{ Code: msg.RES_CODE_SUCCESS, From 385d571c3ab03dde67d7967d93e71a1092802055 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 17:51:03 +0800 Subject: [PATCH 37/87] =?UTF-8?q?thrift=20GM=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/server/backend.thrift | 52 - .../gen-go/backend/GoUnusedProtection__.go | 6 - src/server/gen-go/backend/backend-consts.go | 34 - src/server/gen-go/backend/backend.go | 2456 ----------------- .../game_admin_service-remote.go | 164 -- 6 files changed, 1 insertion(+), 2712 deletions(-) delete mode 100644 src/server/backend.thrift delete mode 100644 src/server/gen-go/backend/GoUnusedProtection__.go delete mode 100644 src/server/gen-go/backend/backend-consts.go delete mode 100644 src/server/gen-go/backend/backend.go delete mode 100644 src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go diff --git a/.gitignore b/.gitignore index 490788af..fdc27c87 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ src/server/test/logs/* src/server/test/teLog/* src/server/*.exe* src/server/msg/Gameapi.pb.go +src/server/gen-go diff --git a/src/server/backend.thrift b/src/server/backend.thrift deleted file mode 100644 index 37e24d4c..00000000 --- a/src/server/backend.thrift +++ /dev/null @@ -1,52 +0,0 @@ -namespace go backend -struct ResAdminInfo{ - 1: string Name, - 2: i64 Uid, - 3: i32 AreaId, - 4: i32 Face; - 5: double Charge; - 6: double MaxCharge; - 7: i32 Level; - 8: i32 Diamond; - 9: i32 Star; - 10: i32 Energy; - 11: string UserName; - 12: i64 LoginTime; - 13: i32 Cumulative; - 14: i32 RegisterTime; - 15: i8 Ban; - 16: i32 TodayCumulative; - 17: i32 Bouns; - 18: string Code; - 19: map ChessMap; - 20: list ActLog; - 21: list FriendList; - 22: map OrderList; -} - -struct Actlog{ - 1: i8 Type; - 2: i64 Time; - 3: string Param; -} - -struct OrderInfo{ - 1: i32 Id; - 2: i32 Type; - 3: i64 Time; - 4: string ChessId; - 5: i8 Diff; -} - -struct FriendInfo{ - 1: i64 Uid; - 2: string NickName; - 3: i32 Level; - 4: i64 LogoutTime; - 5: i64 LoginTime; - 6: i32 Face; -} - -service GameAdminService{ - ResAdminInfo GetAdminInfo(1:i32 Uid); -} \ No newline at end of file diff --git a/src/server/gen-go/backend/GoUnusedProtection__.go b/src/server/gen-go/backend/GoUnusedProtection__.go deleted file mode 100644 index 48bcbc67..00000000 --- a/src/server/gen-go/backend/GoUnusedProtection__.go +++ /dev/null @@ -1,6 +0,0 @@ -// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. - -package backend - -var GoUnusedProtection__ int; - diff --git a/src/server/gen-go/backend/backend-consts.go b/src/server/gen-go/backend/backend-consts.go deleted file mode 100644 index b54005b2..00000000 --- a/src/server/gen-go/backend/backend-consts.go +++ /dev/null @@ -1,34 +0,0 @@ -// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. - -package backend - -import ( - "bytes" - "context" - "errors" - "fmt" - "iter" - "log/slog" - "time" - thrift "github.com/apache/thrift/lib/go/thrift" - "strings" - "regexp" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = bytes.Equal -var _ = context.Background -var _ = errors.New -var _ = fmt.Printf -var _ = iter.Pull[int] -var _ = slog.Log -var _ = time.Now -var _ = thrift.ZERO -// (needed by validator.) -var _ = strings.Contains -var _ = regexp.MatchString - - -func init() { -} - diff --git a/src/server/gen-go/backend/backend.go b/src/server/gen-go/backend/backend.go deleted file mode 100644 index aff7a282..00000000 --- a/src/server/gen-go/backend/backend.go +++ /dev/null @@ -1,2456 +0,0 @@ -// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. - -package backend - -import ( - "bytes" - "context" - "errors" - "fmt" - "iter" - "log/slog" - "time" - thrift "github.com/apache/thrift/lib/go/thrift" - "strings" - "regexp" -) - -// (needed to ensure safety because of naive import list construction.) -var _ = bytes.Equal -var _ = context.Background -var _ = errors.New -var _ = fmt.Printf -var _ = iter.Pull[int] -var _ = slog.Log -var _ = time.Now -var _ = thrift.ZERO -// (needed by validator.) -var _ = strings.Contains -var _ = regexp.MatchString - -// Attributes: -// - Name -// - UID -// - AreaId -// - Face -// - Charge -// - MaxCharge -// - Level -// - Diamond -// - Star -// - Energy -// - UserName -// - LoginTime -// - Cumulative -// - RegisterTime -// - Ban -// - TodayCumulative -// - Bouns -// - Code -// - ChessMap -// - ActLog -// - FriendList -// - OrderList -// -type ResAdminInfo struct { - Name string `thrift:"Name,1" db:"Name" json:"Name"` - UID int64 `thrift:"Uid,2" db:"Uid" json:"Uid"` - AreaId int32 `thrift:"AreaId,3" db:"AreaId" json:"AreaId"` - Face int32 `thrift:"Face,4" db:"Face" json:"Face"` - Charge float64 `thrift:"Charge,5" db:"Charge" json:"Charge"` - MaxCharge float64 `thrift:"MaxCharge,6" db:"MaxCharge" json:"MaxCharge"` - Level int32 `thrift:"Level,7" db:"Level" json:"Level"` - Diamond int32 `thrift:"Diamond,8" db:"Diamond" json:"Diamond"` - Star int32 `thrift:"Star,9" db:"Star" json:"Star"` - Energy int32 `thrift:"Energy,10" db:"Energy" json:"Energy"` - UserName string `thrift:"UserName,11" db:"UserName" json:"UserName"` - LoginTime int64 `thrift:"LoginTime,12" db:"LoginTime" json:"LoginTime"` - Cumulative int32 `thrift:"Cumulative,13" db:"Cumulative" json:"Cumulative"` - RegisterTime int32 `thrift:"RegisterTime,14" db:"RegisterTime" json:"RegisterTime"` - Ban int8 `thrift:"Ban,15" db:"Ban" json:"Ban"` - TodayCumulative int32 `thrift:"TodayCumulative,16" db:"TodayCumulative" json:"TodayCumulative"` - Bouns int32 `thrift:"Bouns,17" db:"Bouns" json:"Bouns"` - Code string `thrift:"Code,18" db:"Code" json:"Code"` - ChessMap map[string]int32 `thrift:"ChessMap,19" db:"ChessMap" json:"ChessMap"` - ActLog []*Actlog `thrift:"ActLog,20" db:"ActLog" json:"ActLog"` - FriendList []*FriendInfo `thrift:"FriendList,21" db:"FriendList" json:"FriendList"` - OrderList map[int32]*OrderInfo `thrift:"OrderList,22" db:"OrderList" json:"OrderList"` -} - -func NewResAdminInfo() *ResAdminInfo { - return &ResAdminInfo{} -} - - - -func (p *ResAdminInfo) GetName() string { - return p.Name -} - - - -func (p *ResAdminInfo) GetUID() int64 { - return p.UID -} - - - -func (p *ResAdminInfo) GetAreaId() int32 { - return p.AreaId -} - - - -func (p *ResAdminInfo) GetFace() int32 { - return p.Face -} - - - -func (p *ResAdminInfo) GetCharge() float64 { - return p.Charge -} - - - -func (p *ResAdminInfo) GetMaxCharge() float64 { - return p.MaxCharge -} - - - -func (p *ResAdminInfo) GetLevel() int32 { - return p.Level -} - - - -func (p *ResAdminInfo) GetDiamond() int32 { - return p.Diamond -} - - - -func (p *ResAdminInfo) GetStar() int32 { - return p.Star -} - - - -func (p *ResAdminInfo) GetEnergy() int32 { - return p.Energy -} - - - -func (p *ResAdminInfo) GetUserName() string { - return p.UserName -} - - - -func (p *ResAdminInfo) GetLoginTime() int64 { - return p.LoginTime -} - - - -func (p *ResAdminInfo) GetCumulative() int32 { - return p.Cumulative -} - - - -func (p *ResAdminInfo) GetRegisterTime() int32 { - return p.RegisterTime -} - - - -func (p *ResAdminInfo) GetBan() int8 { - return p.Ban -} - - - -func (p *ResAdminInfo) GetTodayCumulative() int32 { - return p.TodayCumulative -} - - - -func (p *ResAdminInfo) GetBouns() int32 { - return p.Bouns -} - - - -func (p *ResAdminInfo) GetCode() string { - return p.Code -} - - - -func (p *ResAdminInfo) GetChessMap() map[string]int32 { - return p.ChessMap -} - - - -func (p *ResAdminInfo) GetActLog() []*Actlog { - return p.ActLog -} - - - -func (p *ResAdminInfo) GetFriendList() []*FriendInfo { - return p.FriendList -} - - - -func (p *ResAdminInfo) GetOrderList() map[int32]*OrderInfo { - return p.OrderList -} - -func (p *ResAdminInfo) Read(ctx context.Context, iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if fieldTypeId == thrift.STRING { - if err := p.ReadField1(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 2: - if fieldTypeId == thrift.I64 { - if err := p.ReadField2(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 3: - if fieldTypeId == thrift.I32 { - if err := p.ReadField3(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 4: - if fieldTypeId == thrift.I32 { - if err := p.ReadField4(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 5: - if fieldTypeId == thrift.DOUBLE { - if err := p.ReadField5(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 6: - if fieldTypeId == thrift.DOUBLE { - if err := p.ReadField6(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 7: - if fieldTypeId == thrift.I32 { - if err := p.ReadField7(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 8: - if fieldTypeId == thrift.I32 { - if err := p.ReadField8(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 9: - if fieldTypeId == thrift.I32 { - if err := p.ReadField9(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 10: - if fieldTypeId == thrift.I32 { - if err := p.ReadField10(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 11: - if fieldTypeId == thrift.STRING { - if err := p.ReadField11(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 12: - if fieldTypeId == thrift.I64 { - if err := p.ReadField12(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 13: - if fieldTypeId == thrift.I32 { - if err := p.ReadField13(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 14: - if fieldTypeId == thrift.I32 { - if err := p.ReadField14(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 15: - if fieldTypeId == thrift.BYTE { - if err := p.ReadField15(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 16: - if fieldTypeId == thrift.I32 { - if err := p.ReadField16(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 17: - if fieldTypeId == thrift.I32 { - if err := p.ReadField17(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 18: - if fieldTypeId == thrift.STRING { - if err := p.ReadField18(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 19: - if fieldTypeId == thrift.MAP { - if err := p.ReadField19(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 20: - if fieldTypeId == thrift.LIST { - if err := p.ReadField20(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 21: - if fieldTypeId == thrift.LIST { - if err := p.ReadField21(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 22: - if fieldTypeId == thrift.MAP { - if err := p.ReadField22(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - default: - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(ctx); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *ResAdminInfo) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.Name = v - } - return nil -} - -func (p *ResAdminInfo) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.UID = v - } - return nil -} - -func (p *ResAdminInfo) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.AreaId = v - } - return nil -} - -func (p *ResAdminInfo) ReadField4(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.Face = v - } - return nil -} - -func (p *ResAdminInfo) ReadField5(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(ctx); err != nil { - return thrift.PrependError("error reading field 5: ", err) - } else { - p.Charge = v - } - return nil -} - -func (p *ResAdminInfo) ReadField6(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadDouble(ctx); err != nil { - return thrift.PrependError("error reading field 6: ", err) - } else { - p.MaxCharge = v - } - return nil -} - -func (p *ResAdminInfo) ReadField7(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 7: ", err) - } else { - p.Level = v - } - return nil -} - -func (p *ResAdminInfo) ReadField8(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 8: ", err) - } else { - p.Diamond = v - } - return nil -} - -func (p *ResAdminInfo) ReadField9(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 9: ", err) - } else { - p.Star = v - } - return nil -} - -func (p *ResAdminInfo) ReadField10(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 10: ", err) - } else { - p.Energy = v - } - return nil -} - -func (p *ResAdminInfo) ReadField11(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 11: ", err) - } else { - p.UserName = v - } - return nil -} - -func (p *ResAdminInfo) ReadField12(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 12: ", err) - } else { - p.LoginTime = v - } - return nil -} - -func (p *ResAdminInfo) ReadField13(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 13: ", err) - } else { - p.Cumulative = v - } - return nil -} - -func (p *ResAdminInfo) ReadField14(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 14: ", err) - } else { - p.RegisterTime = v - } - return nil -} - -func (p *ResAdminInfo) ReadField15(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadByte(ctx); err != nil { - return thrift.PrependError("error reading field 15: ", err) - } else { - temp := int8(v) - p.Ban = temp - } - return nil -} - -func (p *ResAdminInfo) ReadField16(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 16: ", err) - } else { - p.TodayCumulative = v - } - return nil -} - -func (p *ResAdminInfo) ReadField17(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 17: ", err) - } else { - p.Bouns = v - } - return nil -} - -func (p *ResAdminInfo) ReadField18(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 18: ", err) - } else { - p.Code = v - } - return nil -} - -func (p *ResAdminInfo) ReadField19(ctx context.Context, iprot thrift.TProtocol) error { - _, _, size, err := iprot.ReadMapBegin(ctx) - if err != nil { - return thrift.PrependError("error reading map begin: ", err) - } - tMap := make(map[string]int32, size) - p.ChessMap = tMap - for i := 0; i < size; i++ { - var _key0 string - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 0: ", err) - } else { - _key0 = v - } - var _val1 int32 - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 0: ", err) - } else { - _val1 = v - } - p.ChessMap[_key0] = _val1 - } - if err := iprot.ReadMapEnd(ctx); err != nil { - return thrift.PrependError("error reading map end: ", err) - } - return nil -} - -func (p *ResAdminInfo) ReadField20(ctx context.Context, iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin(ctx) - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*Actlog, 0, size) - p.ActLog = tSlice - for i := 0; i < size; i++ { - _elem2 := &Actlog{} - if err := _elem2.Read(ctx, iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem2), err) - } - p.ActLog = append(p.ActLog, _elem2) - } - if err := iprot.ReadListEnd(ctx); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *ResAdminInfo) ReadField21(ctx context.Context, iprot thrift.TProtocol) error { - _, size, err := iprot.ReadListBegin(ctx) - if err != nil { - return thrift.PrependError("error reading list begin: ", err) - } - tSlice := make([]*FriendInfo, 0, size) - p.FriendList = tSlice - for i := 0; i < size; i++ { - _elem3 := &FriendInfo{} - if err := _elem3.Read(ctx, iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _elem3), err) - } - p.FriendList = append(p.FriendList, _elem3) - } - if err := iprot.ReadListEnd(ctx); err != nil { - return thrift.PrependError("error reading list end: ", err) - } - return nil -} - -func (p *ResAdminInfo) ReadField22(ctx context.Context, iprot thrift.TProtocol) error { - _, _, size, err := iprot.ReadMapBegin(ctx) - if err != nil { - return thrift.PrependError("error reading map begin: ", err) - } - tMap := make(map[int32]*OrderInfo, size) - p.OrderList = tMap - for i := 0; i < size; i++ { - var _key4 int32 - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 0: ", err) - } else { - _key4 = v - } - _val5 := &OrderInfo{} - if err := _val5.Read(ctx, iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", _val5), err) - } - p.OrderList[_key4] = _val5 - } - if err := iprot.ReadMapEnd(ctx); err != nil { - return thrift.PrependError("error reading map end: ", err) - } - return nil -} - -func (p *ResAdminInfo) Write(ctx context.Context, oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin(ctx, "ResAdminInfo"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if p != nil { - if err := p.writeField1(ctx, oprot); err != nil { return err } - if err := p.writeField2(ctx, oprot); err != nil { return err } - if err := p.writeField3(ctx, oprot); err != nil { return err } - if err := p.writeField4(ctx, oprot); err != nil { return err } - if err := p.writeField5(ctx, oprot); err != nil { return err } - if err := p.writeField6(ctx, oprot); err != nil { return err } - if err := p.writeField7(ctx, oprot); err != nil { return err } - if err := p.writeField8(ctx, oprot); err != nil { return err } - if err := p.writeField9(ctx, oprot); err != nil { return err } - if err := p.writeField10(ctx, oprot); err != nil { return err } - if err := p.writeField11(ctx, oprot); err != nil { return err } - if err := p.writeField12(ctx, oprot); err != nil { return err } - if err := p.writeField13(ctx, oprot); err != nil { return err } - if err := p.writeField14(ctx, oprot); err != nil { return err } - if err := p.writeField15(ctx, oprot); err != nil { return err } - if err := p.writeField16(ctx, oprot); err != nil { return err } - if err := p.writeField17(ctx, oprot); err != nil { return err } - if err := p.writeField18(ctx, oprot); err != nil { return err } - if err := p.writeField19(ctx, oprot); err != nil { return err } - if err := p.writeField20(ctx, oprot); err != nil { return err } - if err := p.writeField21(ctx, oprot); err != nil { return err } - if err := p.writeField22(ctx, oprot); err != nil { return err } - } - if err := oprot.WriteFieldStop(ctx); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(ctx); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *ResAdminInfo) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Name", thrift.STRING, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Name: ", p), err) - } - if err := oprot.WriteString(ctx, string(p.Name)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Name (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Name: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Uid", thrift.I64, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:Uid: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.UID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Uid (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:Uid: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "AreaId", thrift.I32, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:AreaId: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.AreaId)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.AreaId (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:AreaId: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField4(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Face", thrift.I32, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:Face: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Face)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Face (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:Face: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField5(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Charge", thrift.DOUBLE, 5); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:Charge: ", p), err) - } - if err := oprot.WriteDouble(ctx, float64(p.Charge)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Charge (5) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 5:Charge: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField6(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "MaxCharge", thrift.DOUBLE, 6); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:MaxCharge: ", p), err) - } - if err := oprot.WriteDouble(ctx, float64(p.MaxCharge)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.MaxCharge (6) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 6:MaxCharge: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField7(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Level", thrift.I32, 7); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 7:Level: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Level)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Level (7) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 7:Level: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField8(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Diamond", thrift.I32, 8); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 8:Diamond: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Diamond)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Diamond (8) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 8:Diamond: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField9(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Star", thrift.I32, 9); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 9:Star: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Star)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Star (9) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 9:Star: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField10(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Energy", thrift.I32, 10); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 10:Energy: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Energy)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Energy (10) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 10:Energy: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField11(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "UserName", thrift.STRING, 11); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 11:UserName: ", p), err) - } - if err := oprot.WriteString(ctx, string(p.UserName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.UserName (11) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 11:UserName: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField12(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "LoginTime", thrift.I64, 12); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 12:LoginTime: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.LoginTime)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.LoginTime (12) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 12:LoginTime: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField13(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Cumulative", thrift.I32, 13); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 13:Cumulative: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Cumulative)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Cumulative (13) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 13:Cumulative: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField14(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "RegisterTime", thrift.I32, 14); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 14:RegisterTime: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.RegisterTime)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.RegisterTime (14) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 14:RegisterTime: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField15(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Ban", thrift.BYTE, 15); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 15:Ban: ", p), err) - } - if err := oprot.WriteByte(ctx, int8(p.Ban)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Ban (15) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 15:Ban: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField16(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "TodayCumulative", thrift.I32, 16); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 16:TodayCumulative: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.TodayCumulative)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.TodayCumulative (16) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 16:TodayCumulative: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField17(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Bouns", thrift.I32, 17); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 17:Bouns: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Bouns)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Bouns (17) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 17:Bouns: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField18(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Code", thrift.STRING, 18); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 18:Code: ", p), err) - } - if err := oprot.WriteString(ctx, string(p.Code)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Code (18) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 18:Code: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField19(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "ChessMap", thrift.MAP, 19); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 19:ChessMap: ", p), err) - } - if err := oprot.WriteMapBegin(ctx, thrift.STRING, thrift.I32, len(p.ChessMap)); err != nil { - return thrift.PrependError("error writing map begin: ", err) - } - for k, v := range p.ChessMap { - if err := oprot.WriteString(ctx, string(k)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T. (0) field write error: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(v)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T. (0) field write error: ", p), err) - } - } - if err := oprot.WriteMapEnd(ctx); err != nil { - return thrift.PrependError("error writing map end: ", err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 19:ChessMap: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField20(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "ActLog", thrift.LIST, 20); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 20:ActLog: ", p), err) - } - if err := oprot.WriteListBegin(ctx, thrift.STRUCT, len(p.ActLog)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.ActLog { - if err := v.Write(ctx, oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(ctx); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 20:ActLog: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField21(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "FriendList", thrift.LIST, 21); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 21:FriendList: ", p), err) - } - if err := oprot.WriteListBegin(ctx, thrift.STRUCT, len(p.FriendList)); err != nil { - return thrift.PrependError("error writing list begin: ", err) - } - for _, v := range p.FriendList { - if err := v.Write(ctx, oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteListEnd(ctx); err != nil { - return thrift.PrependError("error writing list end: ", err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 21:FriendList: ", p), err) - } - return err -} - -func (p *ResAdminInfo) writeField22(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "OrderList", thrift.MAP, 22); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 22:OrderList: ", p), err) - } - if err := oprot.WriteMapBegin(ctx, thrift.I32, thrift.STRUCT, len(p.OrderList)); err != nil { - return thrift.PrependError("error writing map begin: ", err) - } - for k, v := range p.OrderList { - if err := oprot.WriteI32(ctx, int32(k)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T. (0) field write error: ", p), err) - } - if err := v.Write(ctx, oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", v), err) - } - } - if err := oprot.WriteMapEnd(ctx); err != nil { - return thrift.PrependError("error writing map end: ", err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 22:OrderList: ", p), err) - } - return err -} - -func (p *ResAdminInfo) Equals(other *ResAdminInfo) bool { - if p == other { - return true - } else if p == nil || other == nil { - return false - } - if p.Name != other.Name { return false } - if p.UID != other.UID { return false } - if p.AreaId != other.AreaId { return false } - if p.Face != other.Face { return false } - if p.Charge != other.Charge { return false } - if p.MaxCharge != other.MaxCharge { return false } - if p.Level != other.Level { return false } - if p.Diamond != other.Diamond { return false } - if p.Star != other.Star { return false } - if p.Energy != other.Energy { return false } - if p.UserName != other.UserName { return false } - if p.LoginTime != other.LoginTime { return false } - if p.Cumulative != other.Cumulative { return false } - if p.RegisterTime != other.RegisterTime { return false } - if p.Ban != other.Ban { return false } - if p.TodayCumulative != other.TodayCumulative { return false } - if p.Bouns != other.Bouns { return false } - if p.Code != other.Code { return false } - if len(p.ChessMap) != len(other.ChessMap) { return false } - for k, _tgt := range p.ChessMap { - _src6 := other.ChessMap[k] - if _tgt != _src6 { return false } - } - if len(p.ActLog) != len(other.ActLog) { return false } - for i, _tgt := range p.ActLog { - _src7 := other.ActLog[i] - if !_tgt.Equals(_src7) { return false } - } - if len(p.FriendList) != len(other.FriendList) { return false } - for i, _tgt := range p.FriendList { - _src8 := other.FriendList[i] - if !_tgt.Equals(_src8) { return false } - } - if len(p.OrderList) != len(other.OrderList) { return false } - for k, _tgt := range p.OrderList { - _src9 := other.OrderList[k] - if !_tgt.Equals(_src9) { return false } - } - return true -} - -func (p *ResAdminInfo) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("ResAdminInfo(%+v)", *p) -} - -func (p *ResAdminInfo) LogValue() slog.Value { - if p == nil { - return slog.AnyValue(nil) - } - v := thrift.SlogTStructWrapper{ - Type: "*backend.ResAdminInfo", - Value: p, - } - return slog.AnyValue(v) -} - -var _ slog.LogValuer = (*ResAdminInfo)(nil) - -func (p *ResAdminInfo) Validate() error { - return nil -} - -// Attributes: -// - Type -// - Time -// - Param -// -type Actlog struct { - Type int8 `thrift:"Type,1" db:"Type" json:"Type"` - Time int64 `thrift:"Time,2" db:"Time" json:"Time"` - Param string `thrift:"Param,3" db:"Param" json:"Param"` -} - -func NewActlog() *Actlog { - return &Actlog{} -} - - - -func (p *Actlog) GetType() int8 { - return p.Type -} - - - -func (p *Actlog) GetTime() int64 { - return p.Time -} - - - -func (p *Actlog) GetParam() string { - return p.Param -} - -func (p *Actlog) Read(ctx context.Context, iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if fieldTypeId == thrift.BYTE { - if err := p.ReadField1(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 2: - if fieldTypeId == thrift.I64 { - if err := p.ReadField2(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 3: - if fieldTypeId == thrift.STRING { - if err := p.ReadField3(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - default: - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(ctx); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *Actlog) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadByte(ctx); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - temp := int8(v) - p.Type = temp - } - return nil -} - -func (p *Actlog) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.Time = v - } - return nil -} - -func (p *Actlog) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.Param = v - } - return nil -} - -func (p *Actlog) Write(ctx context.Context, oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin(ctx, "Actlog"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if p != nil { - if err := p.writeField1(ctx, oprot); err != nil { return err } - if err := p.writeField2(ctx, oprot); err != nil { return err } - if err := p.writeField3(ctx, oprot); err != nil { return err } - } - if err := oprot.WriteFieldStop(ctx); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(ctx); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *Actlog) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Type", thrift.BYTE, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Type: ", p), err) - } - if err := oprot.WriteByte(ctx, int8(p.Type)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Type (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Type: ", p), err) - } - return err -} - -func (p *Actlog) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Time", thrift.I64, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:Time: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.Time)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Time (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:Time: ", p), err) - } - return err -} - -func (p *Actlog) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Param", thrift.STRING, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:Param: ", p), err) - } - if err := oprot.WriteString(ctx, string(p.Param)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Param (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:Param: ", p), err) - } - return err -} - -func (p *Actlog) Equals(other *Actlog) bool { - if p == other { - return true - } else if p == nil || other == nil { - return false - } - if p.Type != other.Type { return false } - if p.Time != other.Time { return false } - if p.Param != other.Param { return false } - return true -} - -func (p *Actlog) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("Actlog(%+v)", *p) -} - -func (p *Actlog) LogValue() slog.Value { - if p == nil { - return slog.AnyValue(nil) - } - v := thrift.SlogTStructWrapper{ - Type: "*backend.Actlog", - Value: p, - } - return slog.AnyValue(v) -} - -var _ slog.LogValuer = (*Actlog)(nil) - -func (p *Actlog) Validate() error { - return nil -} - -// Attributes: -// - ID -// - Type -// - Time -// - ChessId -// - Diff -// -type OrderInfo struct { - ID int32 `thrift:"Id,1" db:"Id" json:"Id"` - Type int32 `thrift:"Type,2" db:"Type" json:"Type"` - Time int64 `thrift:"Time,3" db:"Time" json:"Time"` - ChessId string `thrift:"ChessId,4" db:"ChessId" json:"ChessId"` - Diff int8 `thrift:"Diff,5" db:"Diff" json:"Diff"` -} - -func NewOrderInfo() *OrderInfo { - return &OrderInfo{} -} - - - -func (p *OrderInfo) GetID() int32 { - return p.ID -} - - - -func (p *OrderInfo) GetType() int32 { - return p.Type -} - - - -func (p *OrderInfo) GetTime() int64 { - return p.Time -} - - - -func (p *OrderInfo) GetChessId() string { - return p.ChessId -} - - - -func (p *OrderInfo) GetDiff() int8 { - return p.Diff -} - -func (p *OrderInfo) Read(ctx context.Context, iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if fieldTypeId == thrift.I32 { - if err := p.ReadField1(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 2: - if fieldTypeId == thrift.I32 { - if err := p.ReadField2(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 3: - if fieldTypeId == thrift.I64 { - if err := p.ReadField3(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 4: - if fieldTypeId == thrift.STRING { - if err := p.ReadField4(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 5: - if fieldTypeId == thrift.BYTE { - if err := p.ReadField5(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - default: - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(ctx); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *OrderInfo) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.ID = v - } - return nil -} - -func (p *OrderInfo) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.Type = v - } - return nil -} - -func (p *OrderInfo) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.Time = v - } - return nil -} - -func (p *OrderInfo) ReadField4(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.ChessId = v - } - return nil -} - -func (p *OrderInfo) ReadField5(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadByte(ctx); err != nil { - return thrift.PrependError("error reading field 5: ", err) - } else { - temp := int8(v) - p.Diff = temp - } - return nil -} - -func (p *OrderInfo) Write(ctx context.Context, oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin(ctx, "OrderInfo"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if p != nil { - if err := p.writeField1(ctx, oprot); err != nil { return err } - if err := p.writeField2(ctx, oprot); err != nil { return err } - if err := p.writeField3(ctx, oprot); err != nil { return err } - if err := p.writeField4(ctx, oprot); err != nil { return err } - if err := p.writeField5(ctx, oprot); err != nil { return err } - } - if err := oprot.WriteFieldStop(ctx); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(ctx); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *OrderInfo) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Id", thrift.I32, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Id: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.ID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Id (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Id: ", p), err) - } - return err -} - -func (p *OrderInfo) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Type", thrift.I32, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:Type: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Type)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Type (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:Type: ", p), err) - } - return err -} - -func (p *OrderInfo) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Time", thrift.I64, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:Time: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.Time)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Time (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:Time: ", p), err) - } - return err -} - -func (p *OrderInfo) writeField4(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "ChessId", thrift.STRING, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:ChessId: ", p), err) - } - if err := oprot.WriteString(ctx, string(p.ChessId)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.ChessId (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:ChessId: ", p), err) - } - return err -} - -func (p *OrderInfo) writeField5(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Diff", thrift.BYTE, 5); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:Diff: ", p), err) - } - if err := oprot.WriteByte(ctx, int8(p.Diff)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Diff (5) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 5:Diff: ", p), err) - } - return err -} - -func (p *OrderInfo) Equals(other *OrderInfo) bool { - if p == other { - return true - } else if p == nil || other == nil { - return false - } - if p.ID != other.ID { return false } - if p.Type != other.Type { return false } - if p.Time != other.Time { return false } - if p.ChessId != other.ChessId { return false } - if p.Diff != other.Diff { return false } - return true -} - -func (p *OrderInfo) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("OrderInfo(%+v)", *p) -} - -func (p *OrderInfo) LogValue() slog.Value { - if p == nil { - return slog.AnyValue(nil) - } - v := thrift.SlogTStructWrapper{ - Type: "*backend.OrderInfo", - Value: p, - } - return slog.AnyValue(v) -} - -var _ slog.LogValuer = (*OrderInfo)(nil) - -func (p *OrderInfo) Validate() error { - return nil -} - -// Attributes: -// - UID -// - NickName -// - Level -// - LogoutTime -// - LoginTime -// - Face -// -type FriendInfo struct { - UID int64 `thrift:"Uid,1" db:"Uid" json:"Uid"` - NickName string `thrift:"NickName,2" db:"NickName" json:"NickName"` - Level int32 `thrift:"Level,3" db:"Level" json:"Level"` - LogoutTime int64 `thrift:"LogoutTime,4" db:"LogoutTime" json:"LogoutTime"` - LoginTime int64 `thrift:"LoginTime,5" db:"LoginTime" json:"LoginTime"` - Face int32 `thrift:"Face,6" db:"Face" json:"Face"` -} - -func NewFriendInfo() *FriendInfo { - return &FriendInfo{} -} - - - -func (p *FriendInfo) GetUID() int64 { - return p.UID -} - - - -func (p *FriendInfo) GetNickName() string { - return p.NickName -} - - - -func (p *FriendInfo) GetLevel() int32 { - return p.Level -} - - - -func (p *FriendInfo) GetLogoutTime() int64 { - return p.LogoutTime -} - - - -func (p *FriendInfo) GetLoginTime() int64 { - return p.LoginTime -} - - - -func (p *FriendInfo) GetFace() int32 { - return p.Face -} - -func (p *FriendInfo) Read(ctx context.Context, iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if fieldTypeId == thrift.I64 { - if err := p.ReadField1(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 2: - if fieldTypeId == thrift.STRING { - if err := p.ReadField2(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 3: - if fieldTypeId == thrift.I32 { - if err := p.ReadField3(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 4: - if fieldTypeId == thrift.I64 { - if err := p.ReadField4(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 5: - if fieldTypeId == thrift.I64 { - if err := p.ReadField5(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - case 6: - if fieldTypeId == thrift.I32 { - if err := p.ReadField6(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - default: - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(ctx); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *FriendInfo) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.UID = v - } - return nil -} - -func (p *FriendInfo) ReadField2(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadString(ctx); err != nil { - return thrift.PrependError("error reading field 2: ", err) - } else { - p.NickName = v - } - return nil -} - -func (p *FriendInfo) ReadField3(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 3: ", err) - } else { - p.Level = v - } - return nil -} - -func (p *FriendInfo) ReadField4(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 4: ", err) - } else { - p.LogoutTime = v - } - return nil -} - -func (p *FriendInfo) ReadField5(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI64(ctx); err != nil { - return thrift.PrependError("error reading field 5: ", err) - } else { - p.LoginTime = v - } - return nil -} - -func (p *FriendInfo) ReadField6(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 6: ", err) - } else { - p.Face = v - } - return nil -} - -func (p *FriendInfo) Write(ctx context.Context, oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin(ctx, "FriendInfo"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if p != nil { - if err := p.writeField1(ctx, oprot); err != nil { return err } - if err := p.writeField2(ctx, oprot); err != nil { return err } - if err := p.writeField3(ctx, oprot); err != nil { return err } - if err := p.writeField4(ctx, oprot); err != nil { return err } - if err := p.writeField5(ctx, oprot); err != nil { return err } - if err := p.writeField6(ctx, oprot); err != nil { return err } - } - if err := oprot.WriteFieldStop(ctx); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(ctx); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *FriendInfo) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Uid", thrift.I64, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Uid: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.UID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Uid (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Uid: ", p), err) - } - return err -} - -func (p *FriendInfo) writeField2(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "NickName", thrift.STRING, 2); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 2:NickName: ", p), err) - } - if err := oprot.WriteString(ctx, string(p.NickName)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.NickName (2) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 2:NickName: ", p), err) - } - return err -} - -func (p *FriendInfo) writeField3(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Level", thrift.I32, 3); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 3:Level: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Level)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Level (3) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 3:Level: ", p), err) - } - return err -} - -func (p *FriendInfo) writeField4(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "LogoutTime", thrift.I64, 4); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 4:LogoutTime: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.LogoutTime)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.LogoutTime (4) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 4:LogoutTime: ", p), err) - } - return err -} - -func (p *FriendInfo) writeField5(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "LoginTime", thrift.I64, 5); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 5:LoginTime: ", p), err) - } - if err := oprot.WriteI64(ctx, int64(p.LoginTime)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.LoginTime (5) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 5:LoginTime: ", p), err) - } - return err -} - -func (p *FriendInfo) writeField6(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Face", thrift.I32, 6); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 6:Face: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.Face)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Face (6) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 6:Face: ", p), err) - } - return err -} - -func (p *FriendInfo) Equals(other *FriendInfo) bool { - if p == other { - return true - } else if p == nil || other == nil { - return false - } - if p.UID != other.UID { return false } - if p.NickName != other.NickName { return false } - if p.Level != other.Level { return false } - if p.LogoutTime != other.LogoutTime { return false } - if p.LoginTime != other.LoginTime { return false } - if p.Face != other.Face { return false } - return true -} - -func (p *FriendInfo) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("FriendInfo(%+v)", *p) -} - -func (p *FriendInfo) LogValue() slog.Value { - if p == nil { - return slog.AnyValue(nil) - } - v := thrift.SlogTStructWrapper{ - Type: "*backend.FriendInfo", - Value: p, - } - return slog.AnyValue(v) -} - -var _ slog.LogValuer = (*FriendInfo)(nil) - -func (p *FriendInfo) Validate() error { - return nil -} - -type GameAdminService interface { - // Parameters: - // - UID - // - GetAdminInfo(ctx context.Context, Uid int32) (_r *ResAdminInfo, _err error) -} - -type GameAdminServiceClient struct { - c thrift.TClient - meta thrift.ResponseMeta -} - -func NewGameAdminServiceClientFactory(t thrift.TTransport, f thrift.TProtocolFactory) *GameAdminServiceClient { - return &GameAdminServiceClient{ - c: thrift.NewTStandardClient(f.GetProtocol(t), f.GetProtocol(t)), - } -} - -func NewGameAdminServiceClientProtocol(t thrift.TTransport, iprot thrift.TProtocol, oprot thrift.TProtocol) *GameAdminServiceClient { - return &GameAdminServiceClient{ - c: thrift.NewTStandardClient(iprot, oprot), - } -} - -func NewGameAdminServiceClient(c thrift.TClient) *GameAdminServiceClient { - return &GameAdminServiceClient{ - c: c, - } -} - -func (p *GameAdminServiceClient) Client_() thrift.TClient { - return p.c -} - -func (p *GameAdminServiceClient) LastResponseMeta_() thrift.ResponseMeta { - return p.meta -} - -func (p *GameAdminServiceClient) SetLastResponseMeta_(meta thrift.ResponseMeta) { - p.meta = meta -} - -// Parameters: -// - UID -// -func (p *GameAdminServiceClient) GetAdminInfo(ctx context.Context, Uid int32) (_r *ResAdminInfo, _err error) { - var _args10 GameAdminServiceGetAdminInfoArgs - _args10.UID = Uid - var _result12 GameAdminServiceGetAdminInfoResult - var _meta11 thrift.ResponseMeta - _meta11, _err = p.Client_().Call(ctx, "GetAdminInfo", &_args10, &_result12) - p.SetLastResponseMeta_(_meta11) - if _err != nil { - return - } - if _ret13 := _result12.GetSuccess(); _ret13 != nil { - return _ret13, nil - } - return nil, thrift.NewTApplicationException(thrift.MISSING_RESULT, "GetAdminInfo failed: unknown result") -} - -type GameAdminServiceProcessor struct { - processorMap map[string]thrift.TProcessorFunction - handler GameAdminService -} - -func (p *GameAdminServiceProcessor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) { - p.processorMap[key] = processor -} - -func (p *GameAdminServiceProcessor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok bool) { - processor, ok = p.processorMap[key] - return processor, ok -} - -func (p *GameAdminServiceProcessor) ProcessorMap() map[string]thrift.TProcessorFunction { - return p.processorMap -} - -func NewGameAdminServiceProcessor(handler GameAdminService) *GameAdminServiceProcessor { - - self14 := &GameAdminServiceProcessor{handler:handler, processorMap:make(map[string]thrift.TProcessorFunction)} - self14.processorMap["GetAdminInfo"] = &gameAdminServiceProcessorGetAdminInfo{handler:handler} - return self14 -} - -func (p *GameAdminServiceProcessor) Process(ctx context.Context, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - name, _, seqId, err2 := iprot.ReadMessageBegin(ctx) - if err2 != nil { return false, thrift.WrapTException(err2) } - if processor, ok := p.GetProcessorFunction(name); ok { - return processor.Process(ctx, seqId, iprot, oprot) - } - iprot.Skip(ctx, thrift.STRUCT) - iprot.ReadMessageEnd(ctx) - x15 := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, "Unknown function " + name) - oprot.WriteMessageBegin(ctx, name, thrift.EXCEPTION, seqId) - x15.Write(ctx, oprot) - oprot.WriteMessageEnd(ctx) - oprot.Flush(ctx) - return false, x15 -} - -type gameAdminServiceProcessorGetAdminInfo struct { - handler GameAdminService -} - -func (p *gameAdminServiceProcessorGetAdminInfo) Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err thrift.TException) { - var _write_err16 thrift.TException - args := GameAdminServiceGetAdminInfoArgs{} - if err2 := args.Read(ctx, iprot); err2 != nil { - iprot.ReadMessageEnd(ctx) - x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err2.Error()) - oprot.WriteMessageBegin(ctx, "GetAdminInfo", thrift.EXCEPTION, seqId) - x.Write(ctx, oprot) - oprot.WriteMessageEnd(ctx) - oprot.Flush(ctx) - return false, thrift.WrapTException(err2) - } - iprot.ReadMessageEnd(ctx) - - tickerCancel := func() {} - // Start a goroutine to do server side connectivity check. - if thrift.ServerConnectivityCheckInterval > 0 { - var cancel context.CancelCauseFunc - ctx, cancel = context.WithCancelCause(ctx) - defer cancel(nil) - var tickerCtx context.Context - tickerCtx, tickerCancel = context.WithCancel(context.Background()) - defer tickerCancel() - go func(ctx context.Context, cancel context.CancelCauseFunc) { - ticker := time.NewTicker(thrift.ServerConnectivityCheckInterval) - defer ticker.Stop() - for { - select { - case <-ctx.Done(): - return - case <-ticker.C: - if !iprot.Transport().IsOpen() { - cancel(thrift.ErrAbandonRequest) - return - } - } - } - }(tickerCtx, cancel) - } - - result := GameAdminServiceGetAdminInfoResult{} - if retval, err2 := p.handler.GetAdminInfo(ctx, args.UID); err2 != nil { - tickerCancel() - err = thrift.WrapTException(err2) - if errors.Is(err2, thrift.ErrAbandonRequest) { - return false, &thrift.ProcessorError{ - WriteError: thrift.WrapTException(err2), - EndpointError: err, - } - } - if errors.Is(err2, context.Canceled) { - if err3 := context.Cause(ctx); errors.Is(err3, thrift.ErrAbandonRequest) { - return false, &thrift.ProcessorError{ - WriteError: thrift.WrapTException(err3), - EndpointError: err, - } - } - } - _exc17 := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "Internal error processing GetAdminInfo: " + err2.Error()) - if err2 := oprot.WriteMessageBegin(ctx, "GetAdminInfo", thrift.EXCEPTION, seqId); err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if err2 := _exc17.Write(ctx, oprot); _write_err16 == nil && err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if err2 := oprot.WriteMessageEnd(ctx); _write_err16 == nil && err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if err2 := oprot.Flush(ctx); _write_err16 == nil && err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if _write_err16 != nil { - return false, &thrift.ProcessorError{ - WriteError: _write_err16, - EndpointError: err, - } - } - return true, err - } else { - result.Success = retval - } - tickerCancel() - if err2 := oprot.WriteMessageBegin(ctx, "GetAdminInfo", thrift.REPLY, seqId); err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if err2 := result.Write(ctx, oprot); _write_err16 == nil && err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if err2 := oprot.WriteMessageEnd(ctx); _write_err16 == nil && err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if err2 := oprot.Flush(ctx); _write_err16 == nil && err2 != nil { - _write_err16 = thrift.WrapTException(err2) - } - if _write_err16 != nil { - return false, &thrift.ProcessorError{ - WriteError: _write_err16, - EndpointError: err, - } - } - return true, err -} - - -// HELPER FUNCTIONS AND STRUCTURES - -// Attributes: -// - UID -// -type GameAdminServiceGetAdminInfoArgs struct { - UID int32 `thrift:"Uid,1" db:"Uid" json:"Uid"` -} - -func NewGameAdminServiceGetAdminInfoArgs() *GameAdminServiceGetAdminInfoArgs { - return &GameAdminServiceGetAdminInfoArgs{} -} - - - -func (p *GameAdminServiceGetAdminInfoArgs) GetUID() int32 { - return p.UID -} - -func (p *GameAdminServiceGetAdminInfoArgs) Read(ctx context.Context, iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 1: - if fieldTypeId == thrift.I32 { - if err := p.ReadField1(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - default: - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(ctx); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *GameAdminServiceGetAdminInfoArgs) ReadField1(ctx context.Context, iprot thrift.TProtocol) error { - if v, err := iprot.ReadI32(ctx); err != nil { - return thrift.PrependError("error reading field 1: ", err) - } else { - p.UID = v - } - return nil -} - -func (p *GameAdminServiceGetAdminInfoArgs) Write(ctx context.Context, oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin(ctx, "GetAdminInfo_args"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if p != nil { - if err := p.writeField1(ctx, oprot); err != nil { return err } - } - if err := oprot.WriteFieldStop(ctx); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(ctx); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *GameAdminServiceGetAdminInfoArgs) writeField1(ctx context.Context, oprot thrift.TProtocol) (err error) { - if err := oprot.WriteFieldBegin(ctx, "Uid", thrift.I32, 1); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 1:Uid: ", p), err) - } - if err := oprot.WriteI32(ctx, int32(p.UID)); err != nil { - return thrift.PrependError(fmt.Sprintf("%T.Uid (1) field write error: ", p), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 1:Uid: ", p), err) - } - return err -} - -func (p *GameAdminServiceGetAdminInfoArgs) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("GameAdminServiceGetAdminInfoArgs(%+v)", *p) -} - -func (p *GameAdminServiceGetAdminInfoArgs) LogValue() slog.Value { - if p == nil { - return slog.AnyValue(nil) - } - v := thrift.SlogTStructWrapper{ - Type: "*backend.GameAdminServiceGetAdminInfoArgs", - Value: p, - } - return slog.AnyValue(v) -} - -var _ slog.LogValuer = (*GameAdminServiceGetAdminInfoArgs)(nil) - -// Attributes: -// - Success -// -type GameAdminServiceGetAdminInfoResult struct { - Success *ResAdminInfo `thrift:"success,0" db:"success" json:"success,omitempty"` -} - -func NewGameAdminServiceGetAdminInfoResult() *GameAdminServiceGetAdminInfoResult { - return &GameAdminServiceGetAdminInfoResult{} -} - -var GameAdminServiceGetAdminInfoResult_Success_DEFAULT *ResAdminInfo - -func (p *GameAdminServiceGetAdminInfoResult) GetSuccess() *ResAdminInfo { - if !p.IsSetSuccess() { - return GameAdminServiceGetAdminInfoResult_Success_DEFAULT - } - return p.Success -} - -func (p *GameAdminServiceGetAdminInfoResult) IsSetSuccess() bool { - return p.Success != nil -} - -func (p *GameAdminServiceGetAdminInfoResult) Read(ctx context.Context, iprot thrift.TProtocol) error { - if _, err := iprot.ReadStructBegin(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read error: ", p), err) - } - - - for { - _, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx) - if err != nil { - return thrift.PrependError(fmt.Sprintf("%T field %d read error: ", p, fieldId), err) - } - if fieldTypeId == thrift.STOP { - break - } - switch fieldId { - case 0: - if fieldTypeId == thrift.STRUCT { - if err := p.ReadField0(ctx, iprot); err != nil { - return err - } - } else { - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - default: - if err := iprot.Skip(ctx, fieldTypeId); err != nil { - return err - } - } - if err := iprot.ReadFieldEnd(ctx); err != nil { - return err - } - } - if err := iprot.ReadStructEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T read struct end error: ", p), err) - } - return nil -} - -func (p *GameAdminServiceGetAdminInfoResult) ReadField0(ctx context.Context, iprot thrift.TProtocol) error { - p.Success = &ResAdminInfo{} - if err := p.Success.Read(ctx, iprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error reading struct: ", p.Success), err) - } - return nil -} - -func (p *GameAdminServiceGetAdminInfoResult) Write(ctx context.Context, oprot thrift.TProtocol) error { - if err := oprot.WriteStructBegin(ctx, "GetAdminInfo_result"); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write struct begin error: ", p), err) - } - if p != nil { - if err := p.writeField0(ctx, oprot); err != nil { return err } - } - if err := oprot.WriteFieldStop(ctx); err != nil { - return thrift.PrependError("write field stop error: ", err) - } - if err := oprot.WriteStructEnd(ctx); err != nil { - return thrift.PrependError("write struct stop error: ", err) - } - return nil -} - -func (p *GameAdminServiceGetAdminInfoResult) writeField0(ctx context.Context, oprot thrift.TProtocol) (err error) { - if p.IsSetSuccess() { - if err := oprot.WriteFieldBegin(ctx, "success", thrift.STRUCT, 0); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field begin error 0:success: ", p), err) - } - if err := p.Success.Write(ctx, oprot); err != nil { - return thrift.PrependError(fmt.Sprintf("%T error writing struct: ", p.Success), err) - } - if err := oprot.WriteFieldEnd(ctx); err != nil { - return thrift.PrependError(fmt.Sprintf("%T write field end error 0:success: ", p), err) - } - } - return err -} - -func (p *GameAdminServiceGetAdminInfoResult) String() string { - if p == nil { - return "" - } - return fmt.Sprintf("GameAdminServiceGetAdminInfoResult(%+v)", *p) -} - -func (p *GameAdminServiceGetAdminInfoResult) LogValue() slog.Value { - if p == nil { - return slog.AnyValue(nil) - } - v := thrift.SlogTStructWrapper{ - Type: "*backend.GameAdminServiceGetAdminInfoResult", - Value: p, - } - return slog.AnyValue(v) -} - -var _ slog.LogValuer = (*GameAdminServiceGetAdminInfoResult)(nil) - - diff --git a/src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go b/src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go deleted file mode 100644 index e7023cd0..00000000 --- a/src/server/gen-go/backend/game_admin_service-remote/game_admin_service-remote.go +++ /dev/null @@ -1,164 +0,0 @@ -// Code generated by Thrift Compiler (0.22.0). DO NOT EDIT. - -package main - -import ( - "context" - "flag" - "fmt" - "math" - "net" - "net/url" - "os" - "strconv" - "strings" - thrift "github.com/apache/thrift/lib/go/thrift" - "server/gen-go/backend" -) - -var _ = backend.GoUnusedProtection__ - -func Usage() { - fmt.Fprintln(os.Stderr, "Usage of ", os.Args[0], " [-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]:") - flag.PrintDefaults() - fmt.Fprintln(os.Stderr, "\nFunctions:") - fmt.Fprintln(os.Stderr, " ResAdminInfo GetAdminInfo(i32 Uid)") - fmt.Fprintln(os.Stderr) - os.Exit(0) -} - -type httpHeaders map[string]string - -func (h httpHeaders) String() string { - var m map[string]string = h - return fmt.Sprintf("%s", m) -} - -func (h httpHeaders) Set(value string) error { - parts := strings.Split(value, ": ") - if len(parts) != 2 { - return fmt.Errorf("header should be of format 'Key: Value'") - } - h[parts[0]] = parts[1] - return nil -} - -func main() { - flag.Usage = Usage - var host string - var port int - var protocol string - var urlString string - var framed bool - var useHttp bool - headers := make(httpHeaders) - var parsedUrl *url.URL - var trans thrift.TTransport - _ = strconv.Atoi - _ = math.Abs - flag.Usage = Usage - flag.StringVar(&host, "h", "localhost", "Specify host and port") - flag.IntVar(&port, "p", 9090, "Specify port") - flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson, json)") - flag.StringVar(&urlString, "u", "", "Specify the url") - flag.BoolVar(&framed, "framed", false, "Use framed transport") - flag.BoolVar(&useHttp, "http", false, "Use http") - flag.Var(headers, "H", "Headers to set on the http(s) request (e.g. -H \"Key: Value\")") - flag.Parse() - - if len(urlString) > 0 { - var err error - parsedUrl, err = url.Parse(urlString) - if err != nil { - fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) - flag.Usage() - } - host = parsedUrl.Host - useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == "http" || parsedUrl.Scheme == "https" - } else if useHttp { - _, err := url.Parse(fmt.Sprint("http://", host, ":", port)) - if err != nil { - fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) - flag.Usage() - } - } - - cmd := flag.Arg(0) - var err error - var cfg *thrift.TConfiguration = nil - if useHttp { - trans, err = thrift.NewTHttpClient(parsedUrl.String()) - if len(headers) > 0 { - httptrans := trans.(*thrift.THttpClient) - for key, value := range headers { - httptrans.SetHeader(key, value) - } - } - } else { - portStr := fmt.Sprint(port) - if strings.Contains(host, ":") { - host, portStr, err = net.SplitHostPort(host) - if err != nil { - fmt.Fprintln(os.Stderr, "error with host:", err) - os.Exit(1) - } - } - trans = thrift.NewTSocketConf(net.JoinHostPort(host, portStr), cfg) - if err != nil { - fmt.Fprintln(os.Stderr, "error resolving address:", err) - os.Exit(1) - } - if framed { - trans = thrift.NewTFramedTransportConf(trans, cfg) - } - } - if err != nil { - fmt.Fprintln(os.Stderr, "Error creating transport", err) - os.Exit(1) - } - defer trans.Close() - var protocolFactory thrift.TProtocolFactory - switch protocol { - case "compact": - protocolFactory = thrift.NewTCompactProtocolFactoryConf(cfg) - case "simplejson": - protocolFactory = thrift.NewTSimpleJSONProtocolFactoryConf(cfg) - case "json": - protocolFactory = thrift.NewTJSONProtocolFactory() - case "binary", "": - protocolFactory = thrift.NewTBinaryProtocolFactoryConf(cfg) - default: - fmt.Fprintln(os.Stderr, "Invalid protocol specified: ", protocol) - Usage() - os.Exit(1) - } - iprot := protocolFactory.GetProtocol(trans) - oprot := protocolFactory.GetProtocol(trans) - client := backend.NewGameAdminServiceClient(thrift.NewTStandardClient(iprot, oprot)) - if err := trans.Open(); err != nil { - fmt.Fprintln(os.Stderr, "Error opening socket to ", host, ":", port, " ", err) - os.Exit(1) - } - - switch cmd { - case "GetAdminInfo": - if flag.NArg() - 1 != 1 { - fmt.Fprintln(os.Stderr, "GetAdminInfo requires 1 args") - flag.Usage() - } - tmp0, err18 := (strconv.Atoi(flag.Arg(1))) - if err18 != nil { - Usage() - return - } - argvalue0 := int32(tmp0) - value0 := argvalue0 - fmt.Print(client.GetAdminInfo(context.Background(), value0)) - fmt.Print("\n") - break - case "": - Usage() - default: - fmt.Fprintln(os.Stderr, "Invalid function ", cmd) - } -} From a2a8da873ea929fce7543a5228c77631e6d7ea7d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 17:55:36 +0800 Subject: [PATCH 38/87] =?UTF-8?q?GM=20rpc=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/backend/server.go | 93 ------------------ src/server/backend/sever_handler.go | 146 ++++++++++++++++++++++++++++ src/server/game/player_data.go | 8 ++ 3 files changed, 154 insertions(+), 93 deletions(-) create mode 100644 src/server/backend/sever_handler.go diff --git a/src/server/backend/server.go b/src/server/backend/server.go index 50296265..566e7527 100644 --- a/src/server/backend/server.go +++ b/src/server/backend/server.go @@ -1,106 +1,13 @@ package backend import ( - "context" "fmt" "net" - "server/db" - "server/game" - GoUtil "server/game_util" "server/gen-go/backend" "github.com/apache/thrift/lib/go/thrift" ) -type GameServiceHandler struct{} - -func NewGameServiceHandler() *GameServiceHandler { - return &GameServiceHandler{} -} - -func (h *GameServiceHandler) GetAdminInfo(ctx context.Context, id int32) (*backend.ResAdminInfo, error) { - player := game.G_GameLogicPtr.GetPlayer(int64(id)) - online := true - if player == nil { - player = new(game.Player) - player.M_DwUin = int64(id) - player.InitPlayerOnly() - player.ZeroUpdate(nil) - online = false - } - res := &backend.ResAdminInfo{} - res.Name = player.GetBaseMod().NickName - res.UID = player.M_DwUin - res.AreaId = int32(player.GetDecorateMod().GetAreaId()) - res.Face = int32(player.GetFaceMod().SetId) - res.Charge = player.GetChargeMod().Charge - res.MaxCharge = player.GetChargeMod().MaxCharge - res.Level = int32(player.GetPlayerBaseMod().GetLevel()) - res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) - res.Star = int32(player.GetPlayerBaseMod().GetStar()) - res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) - res.UserName = player.GetPlayerBaseMod().GetName() - res.LoginTime = player.GetBaseMod().LoginTime - res.Cumulative = int32(player.GetBaseMod().Cumulative) - res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) - res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) - res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) - if online { - res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) - res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) - } - res.Code = player.GetBaseMod().AddCode - res.ChessMap = player.GetChessMod().ChessMap - resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) - for _, log := range player.GetFriendMod().ActivityLog { - resActLog = append(resActLog, &backend.Actlog{ - Type: int8(log.Type), - Time: log.Time, - Param: log.Param, - }) - } - res.ActLog = resActLog - friendList := player.GetFriendMod().NewFriendList - type friendInfo struct { - Uid int64 - NickName string - Avatar int - Level int - LogoutTime int64 - LoginTime int64 - } - resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) - for v := range friendList { - ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) - if ps == nil { - continue - } - resFriendList = append(resFriendList, &backend.FriendInfo{ - UID: int64(v), - NickName: ps.Name, - Face: int32(ps.Face), - Level: int32(ps.Level), - LogoutTime: ps.Loginout, - LoginTime: ps.Login, - }) - } - res.FriendList = resFriendList - OrderMap := make(map[int32]*backend.OrderInfo) - Index := 0 - for k, v := range player.GetOrderMod().OrderList { - OrderMap[int32(Index)] = &backend.OrderInfo{ - ID: int32(k), - Type: int32(v.Type), - Time: v.Timestamp, - ChessId: GoUtil.IntSliceToString(v.MergeId), - Diff: int8(v.Diff), - } - Index++ - } - res.OrderList = OrderMap - return res, nil -} - func Start() { addr := net.JoinHostPort("localhost", "9090") handler := NewGameServiceHandler() diff --git a/src/server/backend/sever_handler.go b/src/server/backend/sever_handler.go new file mode 100644 index 00000000..92f36209 --- /dev/null +++ b/src/server/backend/sever_handler.go @@ -0,0 +1,146 @@ +package backend + +import ( + "context" + "server/db" + "server/game" + "server/game/mod/msg" + GoUtil "server/game_util" + "server/gamedata" + "server/gen-go/backend" + "server/pkg/github.com/name5566/leaf/log" +) + +type GameServiceHandler struct{} + +func NewGameServiceHandler() *GameServiceHandler { + return &GameServiceHandler{} +} + +func (h *GameServiceHandler) ReqPlayerInfo(ctx context.Context, id int64) (*backend.ResAdminInfo, error) { + player := game.G_GameLogicPtr.GetPlayer(int64(id)) + online := true + if player == nil { + player = new(game.Player) + player.M_DwUin = int64(id) + player.InitPlayerOnly() + player.ZeroUpdate(nil) + online = false + } + res := &backend.ResAdminInfo{} + res.Name = player.GetBaseMod().NickName + res.UID = player.M_DwUin + res.AreaId = int32(player.GetDecorateMod().GetAreaId()) + res.Face = int32(player.GetFaceMod().SetId) + res.Charge = player.GetChargeMod().Charge + res.MaxCharge = player.GetChargeMod().MaxCharge + res.Level = int32(player.GetPlayerBaseMod().GetLevel()) + res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) + res.Star = int32(player.GetPlayerBaseMod().GetStar()) + res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) + res.UserName = player.GetPlayerBaseMod().GetName() + res.LoginTime = player.GetBaseMod().LoginTime + res.Cumulative = int32(player.GetBaseMod().Cumulative) + res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) + res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) + res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) + if online { + res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) + res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) + } + res.Code = player.GetBaseMod().AddCode + res.ChessMap = player.GetChessMod().ChessMap + resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) + for _, log := range player.GetFriendMod().ActivityLog { + resActLog = append(resActLog, &backend.Actlog{ + Type: int8(log.Type), + Time: log.Time, + Param: log.Param, + }) + } + res.ActLog = resActLog + friendList := player.GetFriendMod().NewFriendList + type friendInfo struct { + Uid int64 + NickName string + Avatar int + Level int + LogoutTime int64 + LoginTime int64 + } + resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) + for v := range friendList { + ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) + if ps == nil { + continue + } + resFriendList = append(resFriendList, &backend.FriendInfo{ + UID: int64(v), + NickName: ps.Name, + Face: int32(ps.Face), + Level: int32(ps.Level), + LogoutTime: ps.Loginout, + LoginTime: ps.Login, + }) + } + res.FriendList = resFriendList + OrderMap := make(map[int32]*backend.OrderInfo) + Index := 0 + for k, v := range player.GetOrderMod().OrderList { + OrderMap[int32(Index)] = &backend.OrderInfo{ + ID: int32(k), + Type: int32(v.Type), + Time: v.Timestamp, + ChessId: GoUtil.IntSliceToString(v.MergeId), + Diff: int8(v.Diff), + } + Index++ + } + res.OrderList = OrderMap + return res, nil +} + +func (h *GameServiceHandler) ReqReloadServerMail(ctx context.Context) (*backend.ResMessage, error) { + game.G_GameLogicPtr.MailMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL_RELOAD}) + game.G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL}) + log.Debug("ReqReloadServerMail success") + return &backend.ResMessage{ + Code: 0, + }, nil +} + +func (h *GameServiceHandler) ReqConfigReload(ctx context.Context) (*backend.ResMessage, error) { + gamedata.Reload() + return &backend.ResMessage{ + Code: 0, + }, nil +} + +func (h *GameServiceHandler) ReqAdminGm(ctx context.Context, uid int64, command string) (*backend.ResMessage, error) { + player := game.G_GameLogicPtr.GetPlayer(uid) + if player == nil { + return &backend.ResMessage{ + Code: 1, + Msg: "player not online", + }, nil + } + player.Lock() + defer player.UnLock() + err := game.ReqGmCommand_(player, command) + if err != nil { + return &backend.ResMessage{ + Code: 1, + Msg: err.Error(), + }, nil + } + return &backend.ResMessage{ + Code: 0, + }, nil +} + +func (h *GameServiceHandler) ReqAdminBan(ctx context.Context, uid int64, banTime int64) (*backend.ResMessage, error) { + db.UpdatePlayerBan(uid, banTime) + return &backend.ResMessage{ + Code: 0, + }, nil +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index c1610c2e..e273216e 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1339,3 +1339,11 @@ func CheckPlayerLose(Uid int) bool { } return false } + +func (p *Player) Lock() { + p.lock.Lock() +} + +func (p *Player) UnLock() { + p.lock.Unlock() +} From c72761d627e42cf7993f039d0ff82a53490662ae Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 18:33:13 +0800 Subject: [PATCH 39/87] =?UTF-8?q?RPC=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=85=88?= =?UTF-8?q?=E4=B8=8D=E5=90=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/backend/server.go | 42 ++--- src/server/backend/sever_handler.go | 265 +++++++++++++--------------- 2 files changed, 144 insertions(+), 163 deletions(-) diff --git a/src/server/backend/server.go b/src/server/backend/server.go index 566e7527..99762d47 100644 --- a/src/server/backend/server.go +++ b/src/server/backend/server.go @@ -1,32 +1,24 @@ package backend -import ( - "fmt" - "net" - "server/gen-go/backend" - - "github.com/apache/thrift/lib/go/thrift" -) - func Start() { - addr := net.JoinHostPort("localhost", "9090") - handler := NewGameServiceHandler() + // addr := net.JoinHostPort("localhost", "9090") + // handler := NewGameServiceHandler() - //创建处理器 - processor := backend.NewGameAdminServiceProcessor(handler) + // //创建处理器 + // processor := backend.NewGameAdminServiceProcessor(handler) - transportFactory := thrift.NewTBufferedTransportFactory(8192) - protocolFactory := thrift.NewTBinaryProtocolFactoryConf(&thrift.TConfiguration{}) + // transportFactory := thrift.NewTBufferedTransportFactory(8192) + // protocolFactory := thrift.NewTBinaryProtocolFactoryConf(&thrift.TConfiguration{}) - tcpAddr, err := net.ResolveTCPAddr("tcp", addr) - if err != nil { - fmt.Printf("Failed to resolve address %s: %v\n", addr, err) - return - } - serverTransport := thrift.NewTServerSocketFromAddrTimeout(tcpAddr, 0) - server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) - fmt.Printf("Starting the server on %s...\n", addr) - if err := server.Serve(); err != nil { - fmt.Printf("Error starting the server: %v\n", err) - } + // tcpAddr, err := net.ResolveTCPAddr("tcp", addr) + // if err != nil { + // fmt.Printf("Failed to resolve address %s: %v\n", addr, err) + // return + // } + // serverTransport := thrift.NewTServerSocketFromAddrTimeout(tcpAddr, 0) + // server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory) + // fmt.Printf("Starting the server on %s...\n", addr) + // if err := server.Serve(); err != nil { + // fmt.Printf("Error starting the server: %v\n", err) + // } } diff --git a/src/server/backend/sever_handler.go b/src/server/backend/sever_handler.go index 92f36209..e6006f27 100644 --- a/src/server/backend/sever_handler.go +++ b/src/server/backend/sever_handler.go @@ -1,146 +1,135 @@ package backend -import ( - "context" - "server/db" - "server/game" - "server/game/mod/msg" - GoUtil "server/game_util" - "server/gamedata" - "server/gen-go/backend" - "server/pkg/github.com/name5566/leaf/log" -) +// type GameServiceHandler struct{} -type GameServiceHandler struct{} +// func NewGameServiceHandler() *GameServiceHandler { +// return &GameServiceHandler{} +// } -func NewGameServiceHandler() *GameServiceHandler { - return &GameServiceHandler{} -} +// func (h *GameServiceHandler) ReqPlayerInfo(ctx context.Context, id int64) (*backend.ResAdminInfo, error) { +// player := game.G_GameLogicPtr.GetPlayer(int64(id)) +// online := true +// if player == nil { +// player = new(game.Player) +// player.M_DwUin = int64(id) +// player.InitPlayerOnly() +// player.ZeroUpdate(nil) +// online = false +// } +// res := &backend.ResAdminInfo{} +// res.Name = player.GetBaseMod().NickName +// res.UID = player.M_DwUin +// res.AreaId = int32(player.GetDecorateMod().GetAreaId()) +// res.Face = int32(player.GetFaceMod().SetId) +// res.Charge = player.GetChargeMod().Charge +// res.MaxCharge = player.GetChargeMod().MaxCharge +// res.Level = int32(player.GetPlayerBaseMod().GetLevel()) +// res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) +// res.Star = int32(player.GetPlayerBaseMod().GetStar()) +// res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) +// res.UserName = player.GetPlayerBaseMod().GetName() +// res.LoginTime = player.GetBaseMod().LoginTime +// res.Cumulative = int32(player.GetBaseMod().Cumulative) +// res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) +// res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) +// res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) +// if online { +// res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) +// res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) +// } +// res.Code = player.GetBaseMod().AddCode +// res.ChessMap = player.GetChessMod().ChessMap +// resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) +// for _, log := range player.GetFriendMod().ActivityLog { +// resActLog = append(resActLog, &backend.Actlog{ +// Type: int8(log.Type), +// Time: log.Time, +// Param: log.Param, +// }) +// } +// res.ActLog = resActLog +// friendList := player.GetFriendMod().NewFriendList +// type friendInfo struct { +// Uid int64 +// NickName string +// Avatar int +// Level int +// LogoutTime int64 +// LoginTime int64 +// } +// resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) +// for v := range friendList { +// ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) +// if ps == nil { +// continue +// } +// resFriendList = append(resFriendList, &backend.FriendInfo{ +// UID: int64(v), +// NickName: ps.Name, +// Face: int32(ps.Face), +// Level: int32(ps.Level), +// LogoutTime: ps.Loginout, +// LoginTime: ps.Login, +// }) +// } +// res.FriendList = resFriendList +// OrderMap := make(map[int32]*backend.OrderInfo) +// Index := 0 +// for k, v := range player.GetOrderMod().OrderList { +// OrderMap[int32(Index)] = &backend.OrderInfo{ +// ID: int32(k), +// Type: int32(v.Type), +// Time: v.Timestamp, +// ChessId: GoUtil.IntSliceToString(v.MergeId), +// Diff: int8(v.Diff), +// } +// Index++ +// } +// res.OrderList = OrderMap +// return res, nil +// } -func (h *GameServiceHandler) ReqPlayerInfo(ctx context.Context, id int64) (*backend.ResAdminInfo, error) { - player := game.G_GameLogicPtr.GetPlayer(int64(id)) - online := true - if player == nil { - player = new(game.Player) - player.M_DwUin = int64(id) - player.InitPlayerOnly() - player.ZeroUpdate(nil) - online = false - } - res := &backend.ResAdminInfo{} - res.Name = player.GetBaseMod().NickName - res.UID = player.M_DwUin - res.AreaId = int32(player.GetDecorateMod().GetAreaId()) - res.Face = int32(player.GetFaceMod().SetId) - res.Charge = player.GetChargeMod().Charge - res.MaxCharge = player.GetChargeMod().MaxCharge - res.Level = int32(player.GetPlayerBaseMod().GetLevel()) - res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) - res.Star = int32(player.GetPlayerBaseMod().GetStar()) - res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) - res.UserName = player.GetPlayerBaseMod().GetName() - res.LoginTime = player.GetBaseMod().LoginTime - res.Cumulative = int32(player.GetBaseMod().Cumulative) - res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) - res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) - res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) - if online { - res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) - res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) - } - res.Code = player.GetBaseMod().AddCode - res.ChessMap = player.GetChessMod().ChessMap - resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) - for _, log := range player.GetFriendMod().ActivityLog { - resActLog = append(resActLog, &backend.Actlog{ - Type: int8(log.Type), - Time: log.Time, - Param: log.Param, - }) - } - res.ActLog = resActLog - friendList := player.GetFriendMod().NewFriendList - type friendInfo struct { - Uid int64 - NickName string - Avatar int - Level int - LogoutTime int64 - LoginTime int64 - } - resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) - for v := range friendList { - ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) - if ps == nil { - continue - } - resFriendList = append(resFriendList, &backend.FriendInfo{ - UID: int64(v), - NickName: ps.Name, - Face: int32(ps.Face), - Level: int32(ps.Level), - LogoutTime: ps.Loginout, - LoginTime: ps.Login, - }) - } - res.FriendList = resFriendList - OrderMap := make(map[int32]*backend.OrderInfo) - Index := 0 - for k, v := range player.GetOrderMod().OrderList { - OrderMap[int32(Index)] = &backend.OrderInfo{ - ID: int32(k), - Type: int32(v.Type), - Time: v.Timestamp, - ChessId: GoUtil.IntSliceToString(v.MergeId), - Diff: int8(v.Diff), - } - Index++ - } - res.OrderList = OrderMap - return res, nil -} +// func (h *GameServiceHandler) ReqReloadServerMail(ctx context.Context) (*backend.ResMessage, error) { +// game.G_GameLogicPtr.MailMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL_RELOAD}) +// game.G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL}) +// log.Debug("ReqReloadServerMail success") +// return &backend.ResMessage{ +// Code: 0, +// }, nil +// } -func (h *GameServiceHandler) ReqReloadServerMail(ctx context.Context) (*backend.ResMessage, error) { - game.G_GameLogicPtr.MailMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL_RELOAD}) - game.G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL}) - log.Debug("ReqReloadServerMail success") - return &backend.ResMessage{ - Code: 0, - }, nil -} +// func (h *GameServiceHandler) ReqConfigReload(ctx context.Context) (*backend.ResMessage, error) { +// gamedata.Reload() +// return &backend.ResMessage{ +// Code: 0, +// }, nil +// } -func (h *GameServiceHandler) ReqConfigReload(ctx context.Context) (*backend.ResMessage, error) { - gamedata.Reload() - return &backend.ResMessage{ - Code: 0, - }, nil -} +// func (h *GameServiceHandler) ReqAdminGm(ctx context.Context, uid int64, command string) (*backend.ResMessage, error) { +// player := game.G_GameLogicPtr.GetPlayer(uid) +// if player == nil { +// return &backend.ResMessage{ +// Code: 1, +// Msg: "player not online", +// }, nil +// } +// player.Lock() +// defer player.UnLock() +// err := game.ReqGmCommand_(player, command) +// if err != nil { +// return &backend.ResMessage{ +// Code: 1, +// Msg: err.Error(), +// }, nil +// } +// return &backend.ResMessage{ +// Code: 0, +// }, nil +// } -func (h *GameServiceHandler) ReqAdminGm(ctx context.Context, uid int64, command string) (*backend.ResMessage, error) { - player := game.G_GameLogicPtr.GetPlayer(uid) - if player == nil { - return &backend.ResMessage{ - Code: 1, - Msg: "player not online", - }, nil - } - player.Lock() - defer player.UnLock() - err := game.ReqGmCommand_(player, command) - if err != nil { - return &backend.ResMessage{ - Code: 1, - Msg: err.Error(), - }, nil - } - return &backend.ResMessage{ - Code: 0, - }, nil -} - -func (h *GameServiceHandler) ReqAdminBan(ctx context.Context, uid int64, banTime int64) (*backend.ResMessage, error) { - db.UpdatePlayerBan(uid, banTime) - return &backend.ResMessage{ - Code: 0, - }, nil -} +// func (h *GameServiceHandler) ReqAdminBan(ctx context.Context, uid int64, banTime int64) (*backend.ResMessage, error) { +// db.UpdatePlayerBan(uid, banTime) +// return &backend.ResMessage{ +// Code: 0, +// }, nil +// } From aa7ee2a38156176ce6ce0f7a67cfba3cb61ce4a5 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Thu, 5 Mar 2026 18:48:25 +0800 Subject: [PATCH 40/87] =?UTF-8?q?playroom=E7=BF=BB=E7=89=8C=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/decorate/Decorate.go | 13 +++++++++++++ src/server/game/register_network_func.go | 9 ++++++++- src/server/test/fix_test.go | 5 +++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index b25c6492..430b66ae 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -5,6 +5,7 @@ import ( "math" decorateCfg "server/conf/decorate" limitedTimeEventCfg "server/conf/limited_time_event" + orderCfg "server/conf/order" "server/game/mod/item" GoUtil "server/game_util" "server/msg" @@ -119,6 +120,18 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int, DecorateOffIsExis return Items, PetExp, PartItemList } +func (d *Decorate) GetNextNeedStar() int { + DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId) + SubAlice := GoUtil.SubSlices(DecorateAll, GoUtil.MapIntToIntSlice(d.FinishList)) + orderFactor := orderCfg.GetOrderFactor(d.GetAreaId()) + sort.Ints(SubAlice) + if len(SubAlice) > 0 { + NeedStar := decorateCfg.GetStarCost(d.AreaId, SubAlice[0]) + return (NeedStar*orderFactor)/1000 + NeedStar + } + return 0 +} + // 一键装饰 func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 46fb3fd7..6e523695 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -3407,7 +3407,14 @@ func ReqPlayroomInfo(player *Player, buf []byte) error { } } else { PlayroomMod.SetGameId(playroom.GAME_TYPE_FILP) - PlayroomMod.SetGameRewardFlip(int(float64(PlayerData.Star)*0.03), int(float64(PlayerData.Star)*0.05), int(float64(PlayerData.Star)*0.1)) + DecorateMod := player.PlayMod.getDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + highReward := int(float64(needStar) * 0.75) + if highReward < PlayerData.Star { + PlayroomMod.SetGameRewardFlip(max(int(float64(needStar)*0.1), 10), max(int(float64(needStar)*0.3), 10), max(int(float64(needStar)*0.75), 10)) + } else { + PlayroomMod.SetGameRewardFlip(max(10, int(float64(PlayerData.Star)*0.1)), max(10, int(float64(PlayerData.Star)*0.5)), max(PlayerData.Star, 10)) + } } player.PlayMod.save() player.PlayroomVisit(Targer) diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 279440ab..91345722 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -92,8 +92,9 @@ func TestFixUserData(t *testing.T) { func TestRandInt(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - MailMod := p1.GetMailMod() - MailMod.BackData() + DecorateMod := p1.GetDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + fmt.Printf("Next need star: %d\n", needStar) } func TestEndless(t *testing.T) { From ed981184d344db448f0f50e164095e2701e80378 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:37:51 +0800 Subject: [PATCH 41/87] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BB=8E=E7=BC=93?= =?UTF-8?q?=E5=86=B2=E5=8C=BA=E7=94=9F=E6=88=90=E7=9A=84=E5=9B=9E=E6=94=B6?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=8D=8F=E8=AE=AE=E6=8A=A5=E9=94=99=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/order/Order.go | 8 ++++---- src/server/game/register_network_func.go | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 0b313c94..fe368138 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -563,20 +563,20 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ } } b3 := false - //额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单; + //额外订单补充2;当玩家的棋盘中出现2个相同的满级产物时,立刻生成一个对应的收购订单; for k := range MaxLvChess { ChessNum := GoUtil.GetElemNum(ChessList, k) - if ChessNum >= 3 && Level >= 12 { + if ChessNum >= 2 && Level >= 12 { b2 := true for _, v := range o.OrderList { - if GoUtil.SliceEqual(v.MergeId, []int{k, k, k}) { + if GoUtil.SliceEqual(v.MergeId, []int{k, k}) { b2 = false break } } if b2 { b3 = true - o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type) + o.addOrder([]int{k, k}, DIFF_LOW, Extra_type) } } } diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 6e523695..3d5fcef4 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -728,13 +728,13 @@ func ReqGetChessFromBuff(player *Player, buf []byte) error { "chess_id": ChessId, }) Update = OrderMod.CreateExtraOrder([]int{ChessId}, AddNewEmit, ChessMod.GetUnlockChessList(), BaseMod.GetEnergyMul(), BaseMod.GetLevel()) - if Update { - player.PushClientRes(OrderMod.BackData()) - } triggerComposeChess(player, ChessId, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList()) player.EmitRetireTrigger1() - player.InitOrderItem() player.PlayMod.save() + if Update { + player.InitOrderItem() + player.PushClientRes(OrderMod.BackData()) + } player.PushClientRes(ChessMod.BackData()) player.PushClientRes(&msg.ResGetChessFromBuff{ Code: msg.RES_CODE_SUCCESS, From ed7e2d76257a3afc9fb0f4fa519090fece2d66df Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:55:25 +0800 Subject: [PATCH 42/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C0=E7=82=B9=E5=A4=9A=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index a32d4a49..6d1073ca 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -94,7 +94,7 @@ func (c *ChampshipMgr) Init() { Remain1 := 1800 - Remain%1800 c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() { // 30分钟后重新分组 - c.group() + c.group(false) }) c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() { @@ -116,6 +116,7 @@ func (c *ChampshipMgr) NotifyAll() (interface{}, error) { } func (c *ChampshipMgr) ZeroUpdate() (interface{}, error) { + c.group(true) log.Debug("ChampshipMgr ZeroUpdate") data := c.getData() data.mu.Lock() @@ -365,15 +366,15 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { } // 分组 -func (c *ChampshipMgr) group() (interface{}, error) { - c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { // 30分钟后重新分组 - c.group() - }) +func (c *ChampshipMgr) group(iszero bool) (interface{}, error) { Now := GoUtil.Now() Zero := GoUtil.ZeroTimestamp() - if Now-Zero < 1800 { // 0点30分钟内不分组 + if Now-Zero < 1800 && !iszero { // 0点30分钟内不分组 return nil, nil } + c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { // 30分钟后重新分组 + c.group(false) + }) ChampshipData := c.getData() ChampshipData.mu.Lock() defer ChampshipData.mu.Unlock() From 20cd54b84f56b063119a5e1bf2f4715c7d9dbaa9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:58:30 +0800 Subject: [PATCH 43/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C0=E7=82=B9=E5=A4=9A=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=80=E6=AC=A1=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_mgr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 20250c36..ad73ea41 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -208,7 +208,7 @@ func NotifyAllPlayerMsg(m *msg.Msg) { } func ChampshipGroupHandler(data *msg.Msg) (interface{}, error) { - G_GameLogicPtr.ChampshipMgr.group() + G_GameLogicPtr.ChampshipMgr.group(true) return nil, nil } From 0e97028a25b8ad324d4269a120d8f61293a39ee6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:25:42 +0800 Subject: [PATCH 44/87] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/gamedata/config/reload | 1 - src/server/gamedata/config/user.info | Bin 9251 -> 0 bytes src/server/test/fix_test.go | 4 +--- 3 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 src/server/gamedata/config/reload delete mode 100644 src/server/gamedata/config/user.info diff --git a/src/server/gamedata/config/reload b/src/server/gamedata/config/reload deleted file mode 100644 index 9d607966..00000000 --- a/src/server/gamedata/config/reload +++ /dev/null @@ -1 +0,0 @@ -11 \ No newline at end of file diff --git a/src/server/gamedata/config/user.info b/src/server/gamedata/config/user.info deleted file mode 100644 index 16a6ca496c8427245ad4f8931a5f63d774f93d49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9251 zcmZ`<3wT_|Ri2r>`_O77%Z}o>w(B~w<0Q&@d-ow(Hm#9XvSd4wtxAfUFOROTwO7){ ztG&xU94j@Zgf;|9A(T)`dAB8`Zp-_ThTw*fh7v+j0yGdxfl?r}CX`S@FzKECXXeiC z$|+H#ojG&nyyu)Vv-bJ9?+bC>Gh24n+}ey+oG#THT)v0#ZQRN`b(hO~84r)Ixb-@h z?`1r8*r^mxdERL*KZJ$jwW3?&^21n|a2LIr)4-08Gj5GLwIY`fGafqO0O8kxJJl?e z0sC#nyC$4cd2PX|gUas$dD2)5eno)y<`y;{shj~5Od^bno6len19YZTDOHv+Nr20dhP#SkA4HsLg7COk z_G$oZ!rB~Z;`7b02br|yd4#&1@m?+GLd|vR%^Km{z!>xS9{K&Sf7{eo^XS;(qSu6a z;1#;1R3x#&)38OEMxjGzt4h#A6}Ps$Mnh|!Ool;pqU5Z4Fb2k5%5Y>Wn#D2mnhi7U zo`bK>xHU76!vUxBaO#mFaqZHyXPSy*{78MWRI4}g%{65)y+|_5LL+!-7|I*4D$c$a#oDd}5l<*aX-xCf_fA0CtM2 zK+Ge~;PLkYi5v(Q=%~Gqb|FUe?0)54Easa_OI*^T-t8=N`NL*5<5anP02V&%Rp3R5 zU6DDrQG$!)2jMn7RvQ)SgAnE_`98sU`1U(X6oeoQ3Af1~v^eixb*i@ms#ieEqP4XA zA;`X-dx%?F%pZkM17li~HJ7Zz*iG^SptjXeTO=J*M*685f*G#48?-~GK@LSUHn=NXI3pCkGhvCZ51*SLCmNWt399a^k~C&IoTzjjMU$(AmWmr?Tvt+|+|CS#}p2bMD=$ zGJslqtXvMD%Bh+Fyh6vHvbIT2-SbGAUPWagwMH8i6`Zi>p|i@cL?Slleot%CHRY8R z38iQkmQ1Pm6djJUngYh*aR&#C%U{KC4w+X4UPmO~5941iKMAvJHf9-I1p5?GI8s^i zxC9m0<^p5O@)P8*3kWAJVE+Ub#)2en<%2;)ZPf97=&bfqD@-~S?;`89vUUWsMw7H* zEH6I|7j#H&nUYHhYzF6n$}-05^dPkZhro^Z%U=VHR(*~lh^Q>9di|SF;GM2}x;>4} zc$LPAS?pD)b8g*jiMK)HuY>ifP3u5C$2_mn31K*CzhRC-kUQPl63T}<3XsG?tz|dL z-y)6MO@uHLI36imhZXtiX8Ak7Otg9o6{FN<@HmNRP%k2OCY+!Pc?vYf7EN`srae`J z7~3oV0HSR-elME7C3OWQc>fWS@%PC4k07Pw6OeJ6{Cyne#O-$u zqT5(asg{CJ<)gIr8KUwiCG=ox$Q;k4{2b)j_C|SH+Hwh9AkO2AjmXaup~q?7A&!v) zb_>4)4Ge176Hxya^jd+|N97;Ff<0=nl`RMSVIKO<1 z%O|1ecKJt8v{#jj4zE6mltK3TWAKSmtDv0pc~Uv3i_d`DylV>Bfc#VF-AYRo9Vyzz zCGeo_(^QrJgtUDcyt!D=$K)pYXJF8!yGq64*$x)ZuVb-C{yA7&ZA|N^PBdj2Qs9Ek z7l_Ss#O4c~Y~%;zUy#At9joGnrZvX9RU>AC?yr$@gEOH6761!TIH%0lj=<=Vy6${o z%E*zrX^MJu*maz`H=Z!Y2IULTgjLbVU53{6`8%U5S*fz5)mHxCXRpbk|t5T3*xBuflfoxZ)@fmzY|*bo~n? zLy&O!HISg5Nu?Ra-YowKvh)~Tky3|qdLM*FaQw3gjzH2Yiy7#m`9Lw-DgO;;cO#P2 zlDcH2z)h`dEZnJONhb!yHkG6%`OC5*u z8|#(1Uj7HfZ5Q5E>`Bo^EeNpTt(O^_lmAYlyo{vI!waPbnmXjD=s1cNT@^9z$bhY4 zYms5em7xiJy)q$AHCBE`{wFzWT-_y=ps$c=x>ZYkGhcNVOHR4H)*V1Jl~)nibT?2laMYI`y>=NEm?|wHiQ~|Su_78I zirxQ))mmj@a8ap{ns=+jrbQH{`zE>hzsPjoBqxNYaJ5qHYIs~-Ldg(=@_$XpP<=Mk z)Lo-31edQdWc2?bTCdTe>Aa4%s0DGt*qHo37&jhV&XsjvCudp|$z;|bpmaI#IfL4i z5|BOJHC)O`ED5o;m^dGVE9st}3P|FLjXhA&r!xL663ZvCa1Wz`bw%6Njt<7Ae6&TV z&aJlsl1@DrKs*!IoqbxTra}3l8^pZNLqrD*^&5kx1Km(Z=kZ#i3~hQBiljL_OawWQ z5Mt!8A7MH@@^u5&Wo%H!eAosMNV)T|x zu%D65GJ?d8SF4C0Bm|%LQ=+NV?>3FHsVwRsb(D@tpI-$AiF#?ZT6XnAncj|QFwY(O z2@5VXFIX6MmN>?ie10`4MK45JLOc>hjf9Ova|Yy4z~kt#NuegfP}*83WQeP9xLDK(uaB?|8FOE>*NuDTyg;(&3nAhF$7K zOwGV1eiYAORj*tB4Iy>NGVz=&wv^XY4wkUk8etTDiD=t5F6;7RJS<;PdMd zKpS_bln3eW7qh6FHT=nU3c)l zrbNWC^b_agdpM8Wy?T#rXZY*ay!gS#cmhZ8AooLkyvARDZqH{Q5c;nOMaa8uEzFUn zv%V<$;-oJQ`urtd9PmZn7dc;S_C>+3^RLPa@_Bg~ zZuI$6^4^7WCrW@`axHl2i!BLUgX zz%T@cTBB@hG#m(c4vd05{4VS_p9f0j%w+i`?$O&W$`7i(%*=?d1TVKKWQFcOP5ZDZD={c4Z zF~D{*fz?YC>-6=EANq!nAII=2!y;=Z*+OK}#{OL_H$9kqJ_?gU?{I`LNPV23eoSoCDAAKOXE00|<;E!M~Sk(Cl` z6N|H6WT+TvgOwQTSFSq8EWi`MBMi!5YCYOwk^#2XuAdoA^L#dd9tO73SP4`is5VQ7 z<{t`hj}k6))WXY)0eFIJ!vf>NP`ITk6ouYv(0wwPf=_T?kk<_(ZUr{QUc*Y$Y#EZi zEp02&@`=xfJLt4DE-IjPip1r@Qjq{#MbOu);DL$yVfa3LAwl-nKzyiW%n&r6cslsY z_-ikGtoru&3-Y@=Mxt{}(QhH3)Zef`8T>FJp&z!+;6)5R3m`?9R6c{HQ!wHZmeA)D z%dOa%h=`W5xS(uq&&al0FcsSBH!%8CrcJb=bc%efaBmw5AN%2Z$O?UJAUfCpGtQ4v zum#?Hm9c(c1ykxgnAM*5G8SvkP~$i8>Go!y<6-uLwl zqtKL+$Nsk*)`uAL1HIuTr(Aav`Xe8zx{V17UkthZY)*Zi3a5ABC$lnQCo{I4%-P9x zqx5hmjArx;6#YMK!H8h(-3E(3K~GIHX5+g=HaE%lZ)ZuimF4cvDW2Fpq<=f-=>TTd zvH@-kF58>?i#R9jq09(60HOO^U&B%X95WEbp{H>L|CLxo(fV1HK@VS-@>!(1Vq87gE5 zI#fvKh7eBn&JD@2p=3Un93M)~H&2ZZEoj9LaJ$CsJ6iE&+YzxhJ)5xKYQHtJYx?;3 z&2LYi(5PG3Ah%Ni=Dytik!e=ZD|c}_u7n=l_=f21(@kqAn@N*7&mkr$i9px7!7hyips$TlpDr7#QOH-c9oq}c~Tcq37pX)B@V T&4bvo30nm==0PC-|8D*^RKQ<; diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 91345722..d2741964 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -92,9 +92,7 @@ func TestFixUserData(t *testing.T) { func TestRandInt(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - DecorateMod := p1.GetDecorateMod() - needStar := DecorateMod.GetNextNeedStar() - fmt.Printf("Next need star: %d\n", needStar) + p1.Charge(122) } func TestEndless(t *testing.T) { From db3a30b61d2c631d8dfd0addc615220efed9d835 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 15:35:35 +0800 Subject: [PATCH 45/87] =?UTF-8?q?=E7=A6=BB=E7=BA=BF=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 9864229b..98ba2658 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -533,35 +533,41 @@ func (p *Player) handle(m *msg.Msg) error { if ok && len(applyUids) > 0 { var faceList []int var name string + var facebookPic []string for _, v := range applyUids { ps := G_GameLogicPtr.GetSimplePlayerByUid(int(v)) if ps != nil { faceList = append(faceList, ps.Face) name = ps.Name + facebookPic = append(facebookPic, ps.FaceBookPic) } } p.PushClientRes(&proto.ResPlayerLougouMsg{ - Name: name, - Face: GoUtil.IntToInt32(faceList), - Count: GoUtil.Int32(info["apply_count"]), + Name: name, + Face: GoUtil.IntToInt32(faceList), + Count: GoUtil.Int32(info["apply_count"]), + FacebookPic: facebookPic, }) } otherUids, ok := info["other_uids"].([]int64) if ok && len(otherUids) > 0 { var faceList []int var name string + var facebookPic []string for _, v := range otherUids { ps := G_GameLogicPtr.GetSimplePlayerByUid(int(v)) if ps != nil { faceList = append(faceList, ps.Face) name = ps.Name + facebookPic = append(facebookPic, ps.FaceBookPic) } } p.PushClientRes(&proto.ResPlayerLougouMsg{ - Type: 1, - Name: name, - Face: GoUtil.IntToInt32(faceList), - Count: GoUtil.Int32(info["other_count"]), + Type: 1, + Name: name, + Face: GoUtil.IntToInt32(faceList), + Count: GoUtil.Int32(info["other_count"]), + FacebookPic: facebookPic, }) } default: From 4fcae1b8f0b2432f56f4bb7874958dbe97d5e16d Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 16:14:16 +0800 Subject: [PATCH 46/87] =?UTF-8?q?=E6=8C=96=E7=9F=BF=E5=A5=96=E5=8A=B1?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mining/mining_cfg.go | 29 ++++++++++++++++++++++-- src/server/game/activity_func.go | 24 +++++++++++++------- src/server/game/mod/item/Item.go | 16 +++++++++++++ src/server/game/mod/mining/mining.go | 4 ++-- src/server/game/mod_factory.go | 5 ++++ src/server/game/register_network_func.go | 5 +++- src/server/test/mining_test.go | 20 ++++++++++++++++ 7 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 src/server/test/mining_test.go diff --git a/src/server/conf/mining/mining_cfg.go b/src/server/conf/mining/mining_cfg.go index 3e4d3784..6ce840f3 100644 --- a/src/server/conf/mining/mining_cfg.go +++ b/src/server/conf/mining/mining_cfg.go @@ -88,10 +88,35 @@ func GetRandItem() []*item.Item { return gamedata.GetItemList(Info, "Items") } -func GetPassItem(Id int) []*item.Item { +func GetPassItem(Id int, needStar int) []*item.Item { data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id) if err != nil { return nil } - return gamedata.GetItemList(data, "Items") + items := gamedata.GetItemList(data, "Items") + starReward := gamedata.GetIntValue(data, "StarReward") + var starnum int + if starReward > 0 { + starnum = int(needStar * starReward / 100) + if starnum > 0 { + items = append(items, &item.Item{ + Id: item.ITEM_STAR_ID, + Num: starnum, + }) + } + } + return items +} + +func GetPassItemList(needStar int) map[int][]*item.Item { + data, err := gamedata.GetData(CFG_MINING_PASS) + if err != nil { + return nil + } + result := make(map[int][]*item.Item) + for k := range data { + Id := GoUtil.Int(k) + result[Id] = GetPassItem(Id, needStar) + } + return result } diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index dce8cf2d..2d917909 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -186,16 +186,24 @@ func (p *Player) MiningBackData() { } Status := p.GetActivityStatus(activity.ACT_TYPE_MINING) Template := miningCfg.GetTemplate(ActivityInfo.Id) + DecorateMod := p.PlayMod.getDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + passRewardList := miningCfg.GetPassItemList(needStar) + resPassRewardList := make(map[int32]*msg.ItemList) + for k, v := range passRewardList { + resPassRewardList[int32(k)] = item.ItemListToMsg(v) + } MiningMod := p.PlayMod.getMiningMod() p.PushClientRes(&msg.ResMining{ - Id: int32(ActivityInfo.Id), - Status: int32(Status), - EndTime: int32(ActivityInfo.EndT), - Template: int32(Template), - Pass: int32(MiningMod.GetPass()), - Gem: GoUtil.IntToInt32(MiningMod.GetGem()), - Map: MiningMod.GetMap(), - Mining: int32(MiningMod.GetMining()), + Id: int32(ActivityInfo.Id), + Status: int32(Status), + EndTime: int32(ActivityInfo.EndT), + Template: int32(Template), + Pass: int32(MiningMod.GetPass()), + Gem: GoUtil.IntToInt32(MiningMod.GetGem()), + Map: MiningMod.GetMap(), + Mining: int32(MiningMod.GetMining()), + PassReward: resPassRewardList, }) } diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 8b7918f1..f015881f 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -162,6 +162,22 @@ func ItemToMsg(items []*Item) []*msg.ItemInfo { return itemList } +func ItemListToMsg(items []*Item) *msg.ItemList { + if items == nil { + return nil + } + itemList := make([]*msg.ItemInfo, 0, len(items)) + for _, v := range items { + itemList = append(itemList, &msg.ItemInfo{ + Id: int32(v.Id), + Num: int32(v.Num), + }) + } + return &msg.ItemList{ + List: itemList, + } +} + // 道具叠加 func Merge(Item1, Item2 []*Item) []*Item { if Item1 == nil { diff --git a/src/server/game/mod/mining/mining.go b/src/server/game/mod/mining/mining.go index 4bcaf668..8a020f0d 100644 --- a/src/server/game/mod/mining/mining.go +++ b/src/server/game/mod/mining/mining.go @@ -81,12 +81,12 @@ func (m *MiningMod) Take(Map map[int32]string, Gem int) ([]*item.Item, error) { return Items, nil } -func (m *MiningMod) GetReward() ([]*item.Item, int, error) { +func (m *MiningMod) GetReward(needStar int) ([]*item.Item, int, error) { GemList := miningCfg.GetPassGem(m.Pass) if len(m.Gem) < len(GemList) { return nil, 0, fmt.Errorf("gem is not full") } - Items := miningCfg.GetPassItem(m.Pass) + Items := miningCfg.GetPassItem(m.Pass, needStar) m.Pass++ Ming := m.Mining m.Mining = 0 diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index d6dc6dcb..b9da4fae 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -13,6 +13,7 @@ import ( "server/game/mod/fur" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" + "server/game/mod/mining" "server/game/mod/order" "server/game/mod/playroom" sevenLogin "server/game/mod/seven_login" @@ -80,3 +81,7 @@ func (p *Player) GetFaceMod() *face.FaceMod { func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod { return p.PlayMod.getLimitedTimeEventMod() } + +func (p *Player) GetMiningMod() *mining.MiningMod { + return p.PlayMod.getMiningMod() +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 3d5fcef4..5561b571 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -3123,6 +3123,7 @@ func ReqMiningTake(player *Player, buf []byte) error { }) return err } + itemList, err := MiningMod.Take(req.Map, int(req.Gem)) if err != nil { player.SendErrClienRes(&msg.ResMiningTake{ @@ -3157,7 +3158,9 @@ func ReqMiningReward(player *Player, buf []byte) error { }) return fmt.Errorf("activity not start") } - itemList, Mining, err := MiningMod.GetReward() + DecorateMod := player.PlayMod.getDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + itemList, Mining, err := MiningMod.GetReward(needStar) if err != nil { player.SendErrClienRes(&msg.ResMiningReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/test/mining_test.go b/src/server/test/mining_test.go new file mode 100644 index 00000000..35b7b500 --- /dev/null +++ b/src/server/test/mining_test.go @@ -0,0 +1,20 @@ +package test + +import ( + miningCfg "server/conf/mining" + "server/game" + "testing" +) + +func TestGetPassReward(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + MiningMod := player.GetMiningMod() + DecorateMod := player.GetDecorateMod() + needStar := DecorateMod.GetNextNeedStar() + Items := miningCfg.GetPassItem(3, needStar) + if len(Items) == 0 { + t.Errorf("GetPassReward failed, pass: %d, needStar: %d", MiningMod.Pass, needStar) + } + player.MiningBackData() +} From b8309ca89da34da8a97dc645a3f09f475f994cb3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 16:54:17 +0800 Subject: [PATCH 47/87] =?UTF-8?q?=E6=AF=8F=E6=97=A5=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/daily_task/daily_task_cfg.go | 47 ++++++++++++++++++++ src/server/game/activity_func.go | 22 +++++++++ src/server/game/mod/daily_task/DailyFunc.go | 3 +- src/server/game/mod/daily_task/DailyTask.go | 10 +++-- src/server/game/mod_factory.go | 5 +++ src/server/game/player_base_mod.go | 3 +- src/server/game/player_data.go | 9 ++-- src/server/test/dailytask_test.go | 25 +++++++++++ 8 files changed, 114 insertions(+), 10 deletions(-) create mode 100644 src/server/test/dailytask_test.go diff --git a/src/server/conf/daily_task/daily_task_cfg.go b/src/server/conf/daily_task/daily_task_cfg.go index 7348bf67..ecc36c06 100644 --- a/src/server/conf/daily_task/daily_task_cfg.go +++ b/src/server/conf/daily_task/daily_task_cfg.go @@ -5,6 +5,7 @@ import ( "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" + "strings" ) const ( @@ -12,6 +13,7 @@ const ( DAILY_TASK = "DailyTask" DAILY_TASK_ACTIVE = "DailyTaskActive" DAILY_TASK_JACKPOT = "DailyTaskJackpot" + DAILY_TASK_REWARD = "DailyTaskReward" ) func init() { @@ -19,6 +21,51 @@ func init() { gamedata.InitCfg(DAILY_TASK) gamedata.InitCfg(DAILY_TASK_ACTIVE) gamedata.InitCfg(DAILY_TASK_JACKPOT) + gamedata.InitCfg(DAILY_TASK_REWARD) +} + +func GetDailyTaskReward(Id, factory, activityId int) []*item.Item { + data, err := gamedata.GetData(DAILY_TASK_REWARD) + if err != nil { + log.Debug("GetDailyTaskReward err:%v", err) + return nil + } + for _, v := range data { + sortId := gamedata.GetIntValue(v, "SortId") + rewardGroupType := gamedata.GetIntValue(v, "RewardGroupType") + if sortId == Id && rewardGroupType == activityId { + items := gamedata.GetItemList(v, "ItemID") + petCoinBase := gamedata.GetIntValue(v, "PetCoinBase") + if petCoinBase > 0 { + petCoinNum := int(float64(petCoinBase) * (float64(factory)/1000 + 1)) + petCoinNum = (petCoinNum/5 + 1) * 5 // 向上取整到5的倍数 + items = append(items, &item.Item{ + Id: item.ITEM_STAR_ID, + Num: petCoinNum, + }) + } + return items + } + } + return nil +} + +func GetActivityIds() []int { + data, err := gamedata.GetDataByKey(DAILY_TASK_CONST, "RewardGroupType_const") + if err != nil { + log.Debug("GetActivityIds err:%v", err) + return nil + } + str := gamedata.GetStringValue(data, "Value") + strArr := strings.Split(str, "|") + result := make([]int, 0, len(strArr)) + for _, v := range strArr { + a, _ := strconv.Atoi(v) + if a != 0 { + result = append(result, a) + } + } + return result } // 获取任务列表 diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 2d917909..377eceda 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -5,6 +5,7 @@ import ( activityCfg "server/conf/activity" catnipCfg "server/conf/catnip" champshipCfg "server/conf/champship" + dailyTaskCfg "server/conf/daily_task" guesscolorCfg "server/conf/guess_color" languageCfg "server/conf/language" miningCfg "server/conf/mining" @@ -456,3 +457,24 @@ func (p *Player) GetChampshipActivityId() (int, int) { } return todayActivityId, yesterdayActivityId } + +func (p *Player) GetDailyTaskActivityId() int { + var activityId int + activiyCfgList := activityCfg.GetActivityListOrigin() + Now := GoUtil.Now() + level := p.GetBaseMod().GetLevel() + activityIds := dailyTaskCfg.GetActivityIds() + for _, v := range activiyCfgList { + if !GoUtil.InArray(v.Type, activityIds) { + continue + } + if v.Level > level { + continue + } + if v.StartTime <= Now && v.EndTime >= Now { + activityId = v.Id + break + } + } + return activityId +} diff --git a/src/server/game/mod/daily_task/DailyFunc.go b/src/server/game/mod/daily_task/DailyFunc.go index 0c0ad490..28728d10 100644 --- a/src/server/game/mod/daily_task/DailyFunc.go +++ b/src/server/game/mod/daily_task/DailyFunc.go @@ -8,7 +8,8 @@ import ( "sort" ) -func getTaskReward(Id, AreaId int) []*item.Item { +func getTaskReward(Id, AreaId, activityId int) []*item.Item { + switch Id { case 2: StarNum := int(50 * math.Pow(1.04, float64(AreaId))) diff --git a/src/server/game/mod/daily_task/DailyTask.go b/src/server/game/mod/daily_task/DailyTask.go index b07d88aa..58bfe2a7 100644 --- a/src/server/game/mod/daily_task/DailyTask.go +++ b/src/server/game/mod/daily_task/DailyTask.go @@ -3,6 +3,7 @@ package dailyTask import ( "fmt" dailyTaskCfg "server/conf/daily_task" + orderCfg "server/conf/order" "server/game/mod/item" "server/game/mod/quest" GoUtil "server/game_util" @@ -48,15 +49,15 @@ func (dt *DailyTaskMod) Unlock() { dt.Lock = true } -func (dt *DailyTaskMod) LevUpTrigger(Lv, AreaId int) bool { +func (dt *DailyTaskMod) LevUpTrigger(Lv, AreaId, dailyAcitivityId int) bool { if len(dt.DayTask) != 0 { return false } - dt.ZeroUpdate(Lv, AreaId) + dt.ZeroUpdate(Lv, AreaId, dailyAcitivityId) return true } -func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) { +func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId, activityId int) { TaskList := dailyTaskCfg.GetTaskList(Lv) if len(TaskList) <= 0 { return @@ -65,6 +66,7 @@ func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) { LastTaskId := GoUtil.GetMapKey(dt.lastTask) TaskList1 := GoUtil.SubSlices(TaskListId, LastTaskId) TaskId := GoUtil.RandSliceNum(TaskList1, 3) + OrderFactor := orderCfg.GetOrderFactor(AreaId) for i := 0; i < len(TaskId); i++ { Id := i + 1 questStr := TaskList[TaskId[i]] @@ -72,7 +74,7 @@ func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) { if err != nil { log.Debug("parse quest err str : %s", questStr) } - Items := getTaskReward(Id, AreaId) + Items := dailyTaskCfg.GetDailyTaskReward(Id, OrderFactor, activityId) dt.DayTask[Id] = DailyTask{ Items: Items, UnLock: Id == 1, diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index b9da4fae..f7ba48bd 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -6,6 +6,7 @@ import ( "server/game/mod/champship" "server/game/mod/charge" "server/game/mod/chess" + dailyTask "server/game/mod/daily_task" "server/game/mod/decorate" "server/game/mod/endless" "server/game/mod/face" @@ -85,3 +86,7 @@ func (p *Player) GetLimitedTimeEventMod() *limitedTimeEvent.LimitedTimeEventMod func (p *Player) GetMiningMod() *mining.MiningMod { return p.PlayMod.getMiningMod() } + +func (p *Player) GetDailyTaskMod() *dailyTask.DailyTaskMod { + return p.PlayMod.getDailyTaskMod() +} diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index 62f74700..83e5557a 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -537,7 +537,8 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) // 日常任务解锁 DailyTaskMod := player.PlayMod.getDailyTaskMod() DecorateMod := player.PlayMod.getDecorateMod() - if DailyTaskMod.LevUpTrigger(BaseMod.Level, DecorateMod.GetAreaId()) { + dailyAcitivityId := player.GetDailyTaskActivityId() + if DailyTaskMod.LevUpTrigger(BaseMod.Level, DecorateMod.GetAreaId(), dailyAcitivityId) { player.PushClientRes(DailyTaskMod.BackData()) } upLv = BaseMod.Level diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index e273216e..899372d6 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -350,10 +350,6 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.HandleItem(HandbookItem, msg.ITEM_POP_LABEL_AllCollectRewardHB.String()) p.PushClientRes(p.PlayMod.getCardMod().BackData()) - // 每日任务 - p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.PlayMod.getDecorateMod().GetAreaId()) - p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData()) - // 能量商店 p.PlayMod.getBaseMod().ZeroUpdate() p.PushClientRes(p.PlayMod.getBaseMod().BackData()) @@ -390,6 +386,11 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.PlayMod.getChampshipMod().ZeroUpdate() p.initAcitivity() p.ActivityZeroUpdate() + + // 每日任务 + p.PlayMod.getDailyTaskMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel(), p.PlayMod.getDecorateMod().GetAreaId(), p.GetDailyTaskActivityId()) + p.PushClientRes(p.PlayMod.getDailyTaskMod().BackData()) + p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_LOGIN}) p.PlayMod.save() } diff --git a/src/server/test/dailytask_test.go b/src/server/test/dailytask_test.go new file mode 100644 index 00000000..72711427 --- /dev/null +++ b/src/server/test/dailytask_test.go @@ -0,0 +1,25 @@ +package test + +import ( + "server/game" + "testing" +) + +func TestDailyActiviyId(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + ids := player.GetDailyTaskActivityId() + if ids == 0 { + t.Errorf("GetDailyTaskActivityId failed, ids is empty") + } +} + +func TestDailyZeroUpdate(t *testing.T) { + player := new(game.Player) + player.InitPlayerByUid(100001) + DailyTaskMod := player.GetDailyTaskMod() + BaseMod := player.GetBaseMod() + DecorateMod := player.GetDecorateMod() + DailyTaskMod.ZeroUpdate(BaseMod.Level, DecorateMod.GetAreaId(), player.GetDailyTaskActivityId()) + DailyTaskMod.BackData() +} From b966557d033ab21aee606643b8f95f558244d985 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 17:10:51 +0800 Subject: [PATCH 48/87] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=A6=E6=A0=87?= =?UTF-8?q?=E8=B5=9B=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 6d1073ca..2ee7b633 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -378,10 +378,10 @@ func (c *ChampshipMgr) group(iszero bool) (interface{}, error) { ChampshipData := c.getData() ChampshipData.mu.Lock() defer ChampshipData.mu.Unlock() + log.Debug("ChampshipMgr group, player num:%d", len(ChampshipData.Pool)) if len(ChampshipData.Pool) == 0 { // 未分配玩家池为空 return nil, nil } - log.Debug("ChampshipMgr group, player num:%d", len(ChampshipData.Pool)) g := make(map[int][]int, 0) for k, v := range ChampshipData.Pool { // step 1:根据数值分配玩家 x := 0 From ac736dc6bd62d1933bf1d90e80a3a4a5fe6a2bd1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 17:32:56 +0800 Subject: [PATCH 49/87] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/register_network_func.go | 19 ++++++++++++------- src/server/test/champship_test.go | 8 ++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 5561b571..5e5c35be 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -2738,6 +2738,7 @@ func ReqShippingOrder(player *Player, buf []byte) error { func ReqChampshipReward(player *Player, buf []byte) error { ChampshipMod := player.PlayMod.getChampshipMod() todayActivityId, _ := player.GetChampshipActivityId() + RewardId := ChampshipMod.Reward itemList := ChampshipMod.GetReward(todayActivityId) err := player.HandleItem(itemList, msg.ITEM_POP_LABEL_ChampshipReward.String()) if err != nil { @@ -2759,13 +2760,17 @@ func ReqChampshipReward(player *Player, buf []byte) error { FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_CHAMPIONSHIP_PRIZE, "") player.UpdateUserInfo() } - player.TeLog("championship_reward", map[string]interface{}{ - "season_id": GoUtil.ZeroTimestamp(), - "champship_step_id": ChampshipMod.Reward, - "reward_type": "step", - "item_list": itemList, - "champship_score": ChampshipMod.Score, - }) + for i := RewardId + 1; i <= ChampshipMod.Reward; i++ { + items, _ := champshipCfg.GetRewardItems(i) + player.TeLog("championship_reward", map[string]interface{}{ + "season_id": GoUtil.ZeroTimestamp(), + "champship_step_id": i, + "reward_type": "step", + "item_list": items, + "champship_score": ChampshipMod.Score, + }) + } + return nil } diff --git a/src/server/test/champship_test.go b/src/server/test/champship_test.go index 8dd750d0..431d3a2e 100644 --- a/src/server/test/champship_test.go +++ b/src/server/test/champship_test.go @@ -27,3 +27,11 @@ func TestGetChampshipActivityId(t *testing.T) { res := champshipCfg.GetChampshipActivityId() t.Logf("res:%v", res) } + +func TestReqChampshipReward(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + ChampshipMod := p1.GetChampshipMod() + ChampshipMod.Score = 1000 + game.ReqChampshipReward(p1, nil) +} From df883aeea766ea448e33bf442e1d4998abcbafde Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 17:40:13 +0800 Subject: [PATCH 50/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E7=82=B9?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 98ba2658..61f4eff2 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -530,6 +530,12 @@ func (p *Player) handle(m *msg.Msg) error { return nil } applyUids, ok := info["apply_uids"].([]int64) + p.TeLog("login_recive_logout_msg", map[string]interface{}{ + "apply_uids": applyUids, + "other_uids": info["other_uids"], + "apply_count": info["apply_count"], + "other_count": info["other_count"], + }) if ok && len(applyUids) > 0 { var faceList []int var name string From e1022d475e77a16bd23e9b3eb4bda0678de371c3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 18:41:28 +0800 Subject: [PATCH 51/87] =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=9C=8D=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_mgr.go | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index ad73ea41..e9e94b60 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -103,32 +103,32 @@ func (m *MessageMgr) MessageMgrInit() { } func FixBug() { - messageMgrData := getMessageData() - // 先更新 PlayerList(需要加锁) - messageMgrData.mu.Lock() - defer messageMgrData.mu.Unlock() - now := GoUtil.Now() - for k, v := range messageMgrData.MessageList { - if k < 100000 { - delete(messageMgrData.MessageList, k) - continue - } - isLose := CheckPlayerLose(int(k)) - // 反向遍历以安全删除元素 - for i := len(v.Messages) - 1; i >= 0; i-- { - if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) { - // 删除消息 - v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) - } - if isLose && v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_RESULT { - // 删除消息 - v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) - } - } - if len(v.Messages) == 0 { - delete(messageMgrData.MessageList, k) - } - } + // messageMgrData := getMessageData() + // // 先更新 PlayerList(需要加锁) + // messageMgrData.mu.Lock() + // defer messageMgrData.mu.Unlock() + // now := GoUtil.Now() + // for k, v := range messageMgrData.MessageList { + // if k < 100000 { + // delete(messageMgrData.MessageList, k) + // continue + // } + // isLose := CheckPlayerLose(int(k)) + // // 反向遍历以安全删除元素 + // for i := len(v.Messages) - 1; i >= 0; i-- { + // if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) { + // // 删除消息 + // v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) + // } + // if isLose && v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_RESULT { + // // 删除消息 + // v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) + // } + // } + // if len(v.Messages) == 0 { + // delete(messageMgrData.MessageList, k) + // } + // } } // 注册处理器 From 7175dd3c78f5b0aeac1bcc1b71dd9827eed36874 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:14:49 +0800 Subject: [PATCH 52/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/champship/champship_cfg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/conf/champship/champship_cfg.go b/src/server/conf/champship/champship_cfg.go index 5e0ca681..f873fe07 100644 --- a/src/server/conf/champship/champship_cfg.go +++ b/src/server/conf/champship/champship_cfg.go @@ -55,12 +55,12 @@ func GetReward(Reward, Score, activityId int) (int, []*item.Item) { } r := make([]*item.Item, 0, len(data)) NewReward := Reward - for k, v := range data { + for _, v := range data { rewardGroupType := gamedata.GetIntValue(v, "RewardGroupType") if rewardGroupType != activityId { continue } - Id := GoUtil.Int(k) + Id := gamedata.GetIntValue(v, "Step") if Reward >= Id { continue } From 5b70a69ca19b11062dcf72f4fecf1c7e3e4f9a4b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:29:18 +0800 Subject: [PATCH 53/87] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 1 + src/server/game/mail_mgr.go | 6 +++++- src/server/test/fix_test.go | 3 ++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 40d83e09..55584f52 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -134,6 +134,7 @@ func ReqGmCommand_(player *Player, Command string) error { case "setSevenLoginActive": num, _ := strconv.Atoi(arg[1]) player.PlayMod.getSevenLoginMod().Active = num + player.PushClientRes(player.PlayMod.getSevenLoginMod().BackData()) case "pay": ChargeId, _ := strconv.Atoi(arg[1]) player.TeLog("pay", map[string]interface{}{ diff --git a/src/server/game/mail_mgr.go b/src/server/game/mail_mgr.go index b233ce23..65feb1ef 100644 --- a/src/server/game/mail_mgr.go +++ b/src/server/game/mail_mgr.go @@ -57,7 +57,11 @@ func (m *MailMgr) Init() { } func (m *MailMgr) AddMail(msg *msg.Msg) (interface{}, error) { - ServerMail := msg.Extra.(*ServerMail) + ServerMail, ok := msg.Extra.(*ServerMail) + if !ok { + log.Error("AddMail error: invalid mail data") + return nil, nil + } m.list[ServerMail.Id] = ServerMail return nil, nil } diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index d2741964..c8a92a41 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -92,7 +92,8 @@ func TestFixUserData(t *testing.T) { func TestRandInt(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - p1.Charge(122) + SevenMod := p1.GetSevenLoginMod() + SevenMod.BackData() } func TestEndless(t *testing.T) { From 5f00cf6a14b01fc4bc244e112b1522d6af97c1de Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:39:57 +0800 Subject: [PATCH 54/87] =?UTF-8?q?=E9=99=90=E6=97=B6=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/limited_time_event/limited_time_event.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/server/game/mod/limited_time_event/limited_time_event.go b/src/server/game/mod/limited_time_event/limited_time_event.go index 3ec4edd8..40ce7c65 100644 --- a/src/server/game/mod/limited_time_event/limited_time_event.go +++ b/src/server/game/mod/limited_time_event/limited_time_event.go @@ -250,8 +250,7 @@ func (l *LimitedTimeEventMod) BackData() *msg.ResLimitEvent { func (l *LimitedTimeEventMod) ProgressBackData() *msg.ResLimitEventProgress { r := make(map[int32]int32) for k, v := range l.ProgressReward { - Type := limitedTimeEventCfg.GetProgressRewardType(v) - r[int32(k)] = int32(Type) + r[int32(k)] = int32(v) } return &msg.ResLimitEventProgress{ Progress: int32(l.Progress), From aa337c2e63450de8e707036574e28195c230a507 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:41:22 +0800 Subject: [PATCH 55/87] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A5=96=E5=8A=B1=EF=BC=8C=E4=BD=BF=E7=94=A8=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/daily_task/daily_task_cfg.go | 16 ++++++++++++++++ src/server/game/mod/daily_task/DailyTask.go | 4 ++-- src/server/game/register_network_func.go | 2 +- src/server/test/dailytask_test.go | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/server/conf/daily_task/daily_task_cfg.go b/src/server/conf/daily_task/daily_task_cfg.go index ecc36c06..c969b437 100644 --- a/src/server/conf/daily_task/daily_task_cfg.go +++ b/src/server/conf/daily_task/daily_task_cfg.go @@ -50,6 +50,22 @@ func GetDailyTaskReward(Id, factory, activityId int) []*item.Item { return nil } +func GetDailyTaskScore(Id, activityId int) int { + data, err := gamedata.GetData(DAILY_TASK_REWARD) + if err != nil { + log.Debug("GetDailyTaskScore err:%v", err) + return 0 + } + for _, v := range data { + sortId := gamedata.GetIntValue(v, "SortId") + rewardGroupType := gamedata.GetIntValue(v, "RewardGroupType") + if sortId == Id && rewardGroupType == activityId { + return gamedata.GetIntValue(v, "ScoreReward") + } + } + return 0 +} + func GetActivityIds() []int { data, err := gamedata.GetDataByKey(DAILY_TASK_CONST, "RewardGroupType_const") if err != nil { diff --git a/src/server/game/mod/daily_task/DailyTask.go b/src/server/game/mod/daily_task/DailyTask.go index 58bfe2a7..2c629ef8 100644 --- a/src/server/game/mod/daily_task/DailyTask.go +++ b/src/server/game/mod/daily_task/DailyTask.go @@ -167,12 +167,12 @@ func (dt *DailyTaskMod) BackData() *msg.ResDailyTask { } } -func (dt *DailyTaskMod) GetDailyReward(id int) ([]*item.Item, error) { +func (dt *DailyTaskMod) GetDailyReward(id, activityId int) ([]*item.Item, error) { if v, ok := dt.DayTask[id]; ok { if v.Status == quest.QUEST_STATUS_FINISH { v.Status = quest.QUEST_STATUS_REWARD dt.DayTask[id] = v - dt.Active += 5 + dt.Active += dailyTaskCfg.GetDailyTaskScore(id, activityId) return v.Items, nil } } diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 5e5c35be..072d0f14 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -1333,7 +1333,7 @@ func ReqGetDailyTaskReward(player *Player, buf []byte) error { return err } DailyTaskMod := player.PlayMod.getDailyTaskMod() - itemList, err := DailyTaskMod.GetDailyReward(int(req.Id)) + itemList, err := DailyTaskMod.GetDailyReward(int(req.Id), player.GetDailyTaskActivityId()) if err != nil { player.SendErrClienRes(&msg.ResGetDailyTaskReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/test/dailytask_test.go b/src/server/test/dailytask_test.go index 72711427..673ba37a 100644 --- a/src/server/test/dailytask_test.go +++ b/src/server/test/dailytask_test.go @@ -1,6 +1,8 @@ package test import ( + "fmt" + dailyTaskCfg "server/conf/daily_task" "server/game" "testing" ) @@ -23,3 +25,15 @@ func TestDailyZeroUpdate(t *testing.T) { DailyTaskMod.ZeroUpdate(BaseMod.Level, DecorateMod.GetAreaId(), player.GetDailyTaskActivityId()) DailyTaskMod.BackData() } + +func TestDailyTaskRewardScore(t *testing.T) { + score1 := dailyTaskCfg.GetDailyTaskScore(1, 1) + if score1 == 0 { + t.Errorf("GetDailyTaskScore failed, score1 is 0") + } + score2 := dailyTaskCfg.GetDailyTaskScore(1, 0) + if score2 == 0 { + t.Errorf("GetDailyTaskScore failed, score2 is 0") + } + fmt.Printf("score1: %d, score2: %d\n", score1, score2) +} From 3a82f1cda86c3b2f38fa4de3f21654c220fd14eb Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:47:05 +0800 Subject: [PATCH 56/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 2ee7b633..2fa7ded2 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -283,6 +283,7 @@ func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank { Avatar: int32(Robot.Avatar), Face: int32(Robot.Face), Level: int32(Robot.Level), + Type: int32(v.Type), } } else { SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) @@ -341,6 +342,7 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { Avatar: int32(Robot.Avatar), Face: int32(Robot.Face), Level: int32(Robot.Level), + Type: int32(v.Type), } } else { SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) @@ -354,6 +356,7 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { Avatar: int32(SimplePlayer.Avatar), Face: int32(SimplePlayer.Face), Level: int32(SimplePlayer.Level), + Type: int32(v.Type), } } } From 6dc3be91f6fd8f5cbe60a39dc81f65a8e7f60588 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 11:50:27 +0800 Subject: [PATCH 57/87] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/msg/Msg.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index b839e91c..5e838d42 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -3,17 +3,17 @@ package msg import "server/game/mod/item" type Msg struct { - Type int // 消息类型 - To int // 接收者 - From int // 发送者 - Item []*item.Item // 物品 - SendT int64 // 发送时间 - End int64 // 过期时间 - Extra interface{} //额外信息 - Id int64 - UniKey string // 回调监听唯一键值 - H int //处理类型 - HandleType int //处理类型 + Type int `json:"type"` // 消息类型 + To int `json:"to"` // 接收者 + From int `json:"from"` // 发送者 + Item []*item.Item `json:"item"` // 物品 + SendT int64 `json:"sendT"` // 发送时间 + End int64 `json:"end"` // 过期时间 + Extra interface{} `json:"extra"` //额外信息 + Id int64 `json:"id"` + UniKey string `json:"uniKey"` // 回调监听唯一键值 + H int `json:"h"` //处理类型 + HandleType int `json:"handleType"` //处理类型 } type VarData struct { From 917c084ba1530a517712ec1dc1c545e1cd76a9dd Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:12:19 +0800 Subject: [PATCH 58/87] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_mgr.go | 2 +- src/server/game/mod/item/Item.go | 4 + src/server/game/mod/msg/Msg.go | 204 ++++++++++++++++++++++++++++++- src/server/game/player_data.go | 2 +- src/server/test/fix_test.go | 22 ++++ 5 files changed, 230 insertions(+), 4 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index e9e94b60..b098386b 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -147,7 +147,7 @@ func (m *MessageMgr) NodeRegister() { func (m *MessageMgr) CenterRegister() { if conf.Server.ServerType == "center" { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) - m.RegisterHandler(msg.HANDLE_MDO_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_VAR_SET, MessageHandlerFunc(SetVarDataHandler)) diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index f015881f..3d65dd1d 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -61,6 +61,10 @@ const ( ITEM_TYPE_PET_FUR = 117 // 宠物毛皮 ) +func (i *Item) String() string { + return fmt.Sprintf("Item{Id:%d, Num:%d}", i.Id, i.Num) +} + func (i *ItemMod) InitData() { if i.Data == nil { i.Data = make(map[int]int) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 5e838d42..f0e8fa6f 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -1,6 +1,9 @@ package msg -import "server/game/mod/item" +import ( + "fmt" + "server/game/mod/item" +) type Msg struct { Type int `json:"type"` // 消息类型 @@ -41,7 +44,7 @@ const ( HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 - HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 + HANDLE_MOD_PLAYER_LOGOUT = 20006 // 玩家登出消息 HANDLE_MOD_VAR_GET = 20007 // 获取变量 HANDLE_MOD_VAR_SET = 20008 // 设置变量 HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 @@ -198,6 +201,203 @@ func (m *Msg) Reply(data interface{}) *Msg { } } +func (m *Msg) String() string { + typeStr := formatType(m.Type) + handleTypeStr := formatHandleType(m.HandleType) + return fmt.Sprintf("Msg{Type:%s, To:%d, From:%d, SendT:%d, End:%d, Id:%d, HandleType:%s, Items:%+v}", + typeStr, m.To, m.From, m.SendT, m.End, m.Id, handleTypeStr, m.Item) +} + +func formatHandleType(handleType int) string { + switch handleType { + case HANDLE_MOD_PLAYER_MSG: + return "HANDLE_MOD_PLAYER_MSG" + case HANDLE_MOD_CLUSTER_MSG: + return "HANDLE_MOD_CLUSTER_MSG" + case HANDLE_MOD_PLAYER_LOGIN: + return "HANDLE_MOD_PLAYER_LOGIN" + case HANDLE_MOD_COMSUME_MSG: + return "HANDLE_MOD_COMSUME_MSG" + case HANDLE_MOD_CLUSTER_SYNC: + return "HANDLE_MOD_CLUSTER_SYNC" + case HANDLE_MOD_PLAYER_LOGOUT: + return "HANDLE_MOD_PLAYER_LOGOUT" + case HANDLE_MOD_VAR_GET: + return "HANDLE_MOD_VAR_GET" + case HANDLE_MOD_VAR_SET: + return "HANDLE_MOD_VAR_SET" + case HANDLE_MOD_CATNIP_PARTNER: + return "HANDLE_MOD_CATNIP_PARTNER" + case HANDLE_MOD_USER_VAR_GET: + return "HANDLE_MOD_USER_VAR_GET" + case HANDLE_MOD_USER_VAR_SET: + return "HANDLE_MOD_USER_VAR_SET" + case HANDLE_MOD_REPLY_PLAYER_MSG: + return "HANDLE_MOD_REPLY_PLAYER_MSG" + case HANDLE_MDO_CHAMPSHIP_INRANK: + return "HANDLE_MDO_CHAMPSHIP_INRANK" + case HANDLE_MOD_CHAMPSHIP_RANK_INFO: + return "HANDLE_MOD_CHAMPSHIP_RANK_INFO" + case HANDLE_MOD_CHAMPSHIP_RANK_LIST: + return "HANDLE_MOD_CHAMPSHIP_RANK_LIST" + case HANDLE_MOD_CHAMPSHIP_PRE_RANK: + return "HANDLE_MOD_CHAMPSHIP_PRE_RANK" + case HANDLE_MOD_CHAMPSHIP_GROUP: + return "HANDLE_MOD_CHAMPSHIP_GROUP" + case HANDLE_MOD_DAILY_VAR_GET: + return "HANDLE_MOD_DAILY_VAR_GET" + case HANDLE_MOD_DAILY_VAR_SET: + return "HANDLE_MOD_DAILY_VAR_SET" + default: + return fmt.Sprintf("Unknown(%d)", handleType) + } +} + +func formatType(t int) string { + switch t { + case HANDLE_TYPE_APPLY: + return "apply_friend" + case HANDLE_TYPE_DEL: + return "delete_friend" + case HANDLE_TYPE_SYNC: + return "sync_request" + case HADNLE_TYPE_AGREE: + return "agree_friend" + case HANDLE_TYPE_REFUSE: + return "refuse_apply" + case HANDLE_TYPE_REQ_CARD: + return "request_card" + case HANDLE_TYPE_AGREE_CARD: + return "agree_card" + case HANDLE_TYPE_REG_CARD_REFUSE: + return "refuse_card_request" + case HANDLE_TYPE_REG_CARD_FINISH: + return "card_request_finished" + case HANDLE_TYPE_AGREE_CARD_FAIL: + return "agree_card_fail" + case HANDLE_TYPE_EX_CARD: + return "exchange_card" + case HANDLE_TYPE_SELECT_EX_CARD: + return "select_exchange_card" + case HANDLE_TYPE_ARGREE_EX_CARD: + return "agree_exchange_card" + case HANDLE_TYPE_REFUSE_SELECT_CARD: + return "refuse_select_card" + case HANDLE_TYPE_REFUSE_EX_CARD: + return "refuse_exchange_card" + case HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT: + return "exchange_card_select_timeout" + case HANDLE_TYPE_EX_CARD_TIMEOUT: + return "exchange_card_timeout" + case HANDLE_TYPE_SEND_CARD: + return "send_card" + case HANDLE_TYPE_INVITE_FRIEND: + return "invite_friend" + case HANDLE_TYPE_INVITE_ADD_FRIEND: + return "invite_add_friend" + case HANDLE_TYPE_RANK: + return "rank" + case HANDLE_TYPE_RANK_INFO: + return "rank_info" + case HANDLE_TYPE_RANK_NOTIFY: + return "rank_notify" + case HANDLE_TYPE_MAIL: + return "mail" + case HANDLE_TYPE_CHAMPSHIP_GROUP: + return "champship_group" + case HANDLE_TYPE_CHAMPSHIP_INRANK: + return "champship_inrank" + case HANDLE_TYPE_CHAMPSHIP_AI: + return "champship_ai" + case HANDLE_TYPE_CHAMPSHIP_NOTIFY: + return "champship_notify" + case HANDLE_TYPE_CHAMPSHIP_ZERO: + return "champship_zero" + case HANDLE_TYPE_CHAMPSHIP_NOTIFY2: + return "champship_notify2" + case HANDLE_TYPE_VAR_GET: + return "var_get" + case HANDLE_TYPE_VAR_SET: + return "var_set" + case SERVER_ZERO_UPDATE: + return "zero_update" + case HANDLE_TYPE_PLAYROOM_LOSE: + return "playroom_lose" + case SERVER_NOON_UPDATE: + return "noon_update" + case FRIEND_TREASURE_HANDLE: + return "friend_treasure" + case HANDLE_TYPE_MAIL_ADD: + return "mail_add" + case HANDLE_TYPE_MAIL_RELOAD: + return "mail_reload" + case HANDLE_TYPE_HANDBOOK_COLLECTION: + return "handbook_collection" + case HANDLE_TYPE_HANDBOOK_UPVOTE: + return "handbook_upvote" + case HANDLE_TYPE_SEND_CHARGE: + return "send_charge" + case HANDLE_TYPE_CHARGE_RECEIVE: + return "charge_receive" + case HANDLE_TYPE_WISHLIST_SEND: + return "wishlist_send" + case HANDLE_TYPE_WISHLIST_AGREE: + return "wishlist_agree" + case HANDLE_TYPE_PLAYROOM_UPVOTE: + return "playroom_upvote" + case HANDLE_TYPE_CHAMPSHIP_RESULT: + return "champship_result" + case HANDLE_TYPE_TREASURE_RESULT: + return "treasure_result" + case HANDLE_TYPE_FACEBOOK_UNBIND: + return "facebook_unbind" + case HANDLE_TYPE_VAR_USER_SET: + return "var_user_set" + case HANDLE_TYPE_VAR_USER_GET: + return "var_user_get" + case HANDLE_TYPE_PLAYROOM_KISS: + return "playroom_kiss" + case HANDLE_TYPE_PLAYROOM_GAME: + return "playroom_game" + case HANDLE_TYPE_CATNIP_INVITE: + return "catnip_invite" + case HANDLE_TYPE_CATNIP_AGREE: + return "catnip_agree" + case HANDLE_TYPE_CATNIP_AGREE_DEL: + return "catnip_agree_del" + case HANDLE_TYPE_CATNIP_REFUSE: + return "catnip_refuse" + case HANDLE_TYPE_CATNIP_GROWTH: + return "catnip_growth" + case HANDLE_TYPE_CATNIP_LOCK: + return "catnip_lock" + case HANDLE_TYPE_VAR_EXPIRE_SET: + return "var_expire_set" + case HANDLE_TYPE_VAR_EXPIRE_GET: + return "var_expire_get" + case HANDLE_TYPE_FRIEND_GREETING_REPLY: + return "friend_greeting_reply" + case HANDLE_TYPE_FRIEND_SPONSOER: + return "friend_sponsor" + case HANDLE_TYPE_CHAMPSHIP_LOGIN: + return "champship_login" + case HANDLE_TYPE_CHAMPSHIP_RANK_INFO: + return "champship_rank_info" + case HANDLE_TYPE_SET_CATNIP_PARTNER: + return "set_catnip_partner" + case HANDLE_TYPE_CATNIP_SEND_EMOJI: + return "catnip_send_emoji" + case HANDLE_TYPE_CHAMPSHIP_MY_RANK: + return "champship_my_rank" + case HANDLE_TYPE_LOGIN: + return "player_login" + case SERVER_PLAYER_SYNC_LOGOUT_MSG: + return "player_sync_logout" + default: + return fmt.Sprintf("Unknown(%d)", t) + } +} + func Handle(fun func(Msg) error, m Msg) error { return fun(m) } diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 899372d6..69841604 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -534,7 +534,7 @@ func (p *Player) ClearData() { G_GameLogicPtr.DelPlayer(p) SendMsgToCenterAsync(&MsgMod.Msg{ From: Uid, - HandleType: MsgMod.HANDLE_MDO_PLAYER_LOGOUT, + HandleType: MsgMod.HANDLE_MOD_PLAYER_LOGOUT, }) } diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index c8a92a41..12adb328 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -8,6 +8,8 @@ import ( notification_cfg "server/conf/notification" "server/db" "server/game" + "server/game/mod/item" + MsgMod "server/game/mod/msg" GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" @@ -234,3 +236,23 @@ func formatIntSlice(slice []int) string { result += "]" return result } + +func TestMsgFormat(t *testing.T) { + m := &MsgMod.Msg{ + From: 10002, + To: 10003, + Type: 1, + SendT: 179865132, + End: 179832654, + Id: 0, + UniKey: "dsfjioefnefe", + H: 1, + HandleType: 20001, + Item: []*item.Item{ + {Id: 1, Num: 10}, + {Id: 2, Num: 20}, + {Id: 3, Num: 30}, + }, + } + fmt.Printf("Msg: %v\n", m) +} From d9212ee249002be9225af1260cd7e3bb2481db3e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:18:49 +0800 Subject: [PATCH 59/87] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/msg/Msg.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index f0e8fa6f..294c77cf 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -202,8 +202,11 @@ func (m *Msg) Reply(data interface{}) *Msg { } func (m *Msg) String() string { - typeStr := formatType(m.Type) + typeStr := "default" handleTypeStr := formatHandleType(m.HandleType) + if m.HandleType == HANDLE_MOD_REPLY_PLAYER_MSG { + typeStr = formatType(m.Type) + } return fmt.Sprintf("Msg{Type:%s, To:%d, From:%d, SendT:%d, End:%d, Id:%d, HandleType:%s, Items:%+v}", typeStr, m.To, m.From, m.SendT, m.End, m.Id, handleTypeStr, m.Item) } From bc5520804723452dc35b244ec280e5a44a8cd796 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:21:22 +0800 Subject: [PATCH 60/87] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_mgr.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index b098386b..4bfb0285 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -732,9 +732,9 @@ func LoggingMiddleware() MessageMiddleware { duration := time.Since(start) if err != nil { - log.Error("[Middleware] Message handle type: %d; type: %d failed, duration: %v, error: %v", message.HandleType, message.Type, duration, err) + log.Error("[Middleware] Message handle error! message: %v; duration: %v; error: %v", message, duration, err) } else { - log.Debug("[Middleware] Message handle type: %d; type: %d success, duration: %v", message.HandleType, message.Type, duration) + log.Debug("[Middleware] Message handle success! message: %v; duration: %v", message, duration) } return result, err From 7c95366d59a2234b23e3b9a46de6618cdf50eec8 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 14:04:25 +0800 Subject: [PATCH 61/87] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/msg/Msg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 294c77cf..70c172c3 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -207,8 +207,8 @@ func (m *Msg) String() string { if m.HandleType == HANDLE_MOD_REPLY_PLAYER_MSG { typeStr = formatType(m.Type) } - return fmt.Sprintf("Msg{Type:%s, To:%d, From:%d, SendT:%d, End:%d, Id:%d, HandleType:%s, Items:%+v}", - typeStr, m.To, m.From, m.SendT, m.End, m.Id, handleTypeStr, m.Item) + return fmt.Sprintf("Msg{Type:%s, To:%d, From:%d, SendT:%d, End:%d, Id:%d, HandleType:%s, Items:%+v, Extra:%+v}", + typeStr, m.To, m.From, m.SendT, m.End, m.Id, handleTypeStr, m.Item, m.Extra) } func formatHandleType(handleType int) string { From ce5c64f7893361845b56407a5cdf7baab42276c6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 16:10:58 +0800 Subject: [PATCH 62/87] =?UTF-8?q?=E7=BF=BB=E7=89=8C=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E6=95=B0=E5=80=BC=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/decorate/decorate_cfg.go | 15 +++++++++++++++ src/server/game/mod/decorate/Decorate.go | 4 ++++ src/server/game/register_network_func.go | 2 +- src/server/test/playroom_test.go | 16 ++++++++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/server/test/playroom_test.go diff --git a/src/server/conf/decorate/decorate_cfg.go b/src/server/conf/decorate/decorate_cfg.go index 557189f0..f767ad26 100644 --- a/src/server/conf/decorate/decorate_cfg.go +++ b/src/server/conf/decorate/decorate_cfg.go @@ -36,6 +36,21 @@ func GetStarCost(AreaId, SortId int) int { return 0 } +func GetStarCostByAreaId(AreaId int) int { + data, err := gamedata.GetData(DECORATE_COST) + if err != nil { + log.Debug("GetStarCost err:%v, AreaId=%d", err, AreaId) + return 0 + } + var total int + for _, v := range data { + if gamedata.GetIntValue(v, "AreaId") == AreaId { + total += gamedata.GetIntValue(v, "CostCount") + } + } + return total +} + func GetAreaId(id int) int { value, err := gamedata.GetDataByIntKey("DecorateCost", id) if err != nil { diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index 430b66ae..e7eead07 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -132,6 +132,10 @@ func (d *Decorate) GetNextNeedStar() int { return 0 } +func (d *Decorate) GetAreaCost() int { + return decorateCfg.GetStarCostByAreaId(d.AreaId) +} + // 一键装饰 func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 072d0f14..a65efe67 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -3416,7 +3416,7 @@ func ReqPlayroomInfo(player *Player, buf []byte) error { } else { PlayroomMod.SetGameId(playroom.GAME_TYPE_FILP) DecorateMod := player.PlayMod.getDecorateMod() - needStar := DecorateMod.GetNextNeedStar() + needStar := DecorateMod.GetAreaCost() highReward := int(float64(needStar) * 0.75) if highReward < PlayerData.Star { PlayroomMod.SetGameRewardFlip(max(int(float64(needStar)*0.1), 10), max(int(float64(needStar)*0.3), 10), max(int(float64(needStar)*0.75), 10)) diff --git a/src/server/test/playroom_test.go b/src/server/test/playroom_test.go new file mode 100644 index 00000000..56409d9b --- /dev/null +++ b/src/server/test/playroom_test.go @@ -0,0 +1,16 @@ +package test + +import ( + "fmt" + "server/game" + "testing" +) + +func TestPlayroomFlipGame(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayerByUid(100001) + DecorateMod := p1.GetDecorateMod() + needStar := DecorateMod.GetAreaCost() + highReward := int(float64(needStar) * 0.75) + fmt.Printf("needStar: %d, highReward: %d\n", needStar, highReward) +} From a882a010d3277942c259d57cf3955f46e0e5e649 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 16:25:22 +0800 Subject: [PATCH 63/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E6=8E=92?= =?UTF-8?q?=E8=A1=8C=E6=A6=9C=E4=B8=AD=E6=9C=BA=E5=99=A8=E4=BA=BA=E7=9A=84?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E6=A1=86=E6=94=B9=E6=88=90=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/avatar/avatar_cfg.go | 10 ++++++++++ src/server/conf/face/face_cfg.go | 10 ++++++++++ src/server/game/champship_mgr.go | 6 ++++-- src/server/test/fix_test.go | 8 ++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/server/conf/avatar/avatar_cfg.go b/src/server/conf/avatar/avatar_cfg.go index b35231aa..2ed0811e 100644 --- a/src/server/conf/avatar/avatar_cfg.go +++ b/src/server/conf/avatar/avatar_cfg.go @@ -1,6 +1,7 @@ package avatarCfg import ( + "math/rand" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" @@ -31,6 +32,15 @@ func GetInitList() []int { return r } +func GetRandInitId() int { + list := GetInitList() + if len(list) == 0 { + return 0 + } + index := rand.Intn(len(list)) + return list[index] +} + func CheckExist(Id int) bool { data, err := gamedata.GetData(CFG_AVATAR) if err != nil { diff --git a/src/server/conf/face/face_cfg.go b/src/server/conf/face/face_cfg.go index c662a969..6f4e783b 100644 --- a/src/server/conf/face/face_cfg.go +++ b/src/server/conf/face/face_cfg.go @@ -1,6 +1,7 @@ package faceCfg import ( + "math/rand" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" @@ -35,6 +36,15 @@ func GetInitList() []int { return r } +func GetRandInitId() int { + list := GetInitList() + if len(list) == 0 { + return 0 + } + index := rand.Intn(len(list)) + return list[index] +} + func CheckExist(Id int) bool { data, err := gamedata.GetData(CFG_FACE) if err != nil { diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 2fa7ded2..65ec6c86 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -3,7 +3,9 @@ package game import ( "fmt" "math" + avatarCfg "server/conf/avatar" champshipCfg "server/conf/champship" + faceCfg "server/conf/face" randnameCfg "server/conf/randname" "server/db" "server/game/mod/msg" @@ -842,8 +844,8 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot { Max: M / 10, Type: Type, Name: randnameCfg.GetRandName(), - Avatar: GoUtil.RandNum(1, 10), - Face: GoUtil.RandNum(1, 10), + Avatar: avatarCfg.GetRandInitId(), + Face: faceCfg.GetRandInitId(), Level: GoUtil.RandNum(1, 10), GroupId: GroupId, Time: GoUtil.Now(), diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 12adb328..7b1a0b1a 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -3,7 +3,9 @@ package test import ( "fmt" "server/backend" + avatarCfg "server/conf/avatar" decorateCfg "server/conf/decorate" + faceCfg "server/conf/face" languageCfg "server/conf/language" notification_cfg "server/conf/notification" "server/db" @@ -256,3 +258,9 @@ func TestMsgFormat(t *testing.T) { } fmt.Printf("Msg: %v\n", m) } + +func TestRandFace(t *testing.T) { + face := faceCfg.GetRandInitId() + avatar := avatarCfg.GetRandInitId() + fmt.Printf("Random Face ID: %d, Random Avatar ID: %d\n", face, avatar) +} From 65bc278a0694419eae85b71aa8617a5984b6aba1 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 18:11:23 +0800 Subject: [PATCH 64/87] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 2 +- src/server/game/mod/friend/Friend.go | 21 ++++++++++++++++++++- src/server/game/player_back.go | 9 +++++++++ src/server/game/player_mod.go | 2 +- src/server/test/friend_test.go | 8 ++++++++ 5 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 55584f52..d503df46 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -417,7 +417,7 @@ func ReqGmCommand_(player *Player, Command string) error { FriendMod.Npc = nil FriendMod.Id = 0 FriendMod.Log = nil - FriendMod.InitData() + FriendMod.InitData(player.M_DwUin) player.FriendListBackData() player.FriendLogBackData() case "addFriend": diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index dcf4a19f..afd552c8 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -189,7 +189,7 @@ type LogInfo struct { } // 初始化数据 -func (f *FriendMod) InitData() { +func (f *FriendMod) InitData(M_DwUin int64) { if f.FriendList == nil { f.FriendList = make(map[int]struct{}) } @@ -224,6 +224,22 @@ func (f *FriendMod) InitData() { if f.NewApplyList == nil { f.NewApplyList = make(map[int]*ApplyInfo) } + for k, v := range f.Card { + if v.AUid != 0 && !f.CheckFriend(v.AUid) && v.AUid != int(M_DwUin) { + delete(f.Card, k) + continue + } + if v.BUid != 0 && !f.CheckFriend(v.BUid) && v.BUid != int(M_DwUin) { + delete(f.Card, k) + continue + } + } + + for k, v := range f.ReplyList { + if !f.CheckFriend(v.Uid) { + f.ReplyList = append(f.ReplyList[:k], f.ReplyList[k+1:]...) + } + } f.version() } @@ -302,6 +318,9 @@ func (f *FriendMod) Interact(id, t int, T int64) { VisitTime: T, Type: t, }) + if len(f.NewFriendList[id].Interact) > 30 { + f.NewFriendList[id].Interact = f.NewFriendList[id].Interact[len(f.NewFriendList[id].Interact)-30:] + } } // 获取好友交互时间 diff --git a/src/server/game/player_back.go b/src/server/game/player_back.go index 005a8eb9..73666247 100644 --- a/src/server/game/player_back.go +++ b/src/server/game/player_back.go @@ -394,6 +394,9 @@ func (p *Player) FriendLogBackData() { Uid: int64(v.Uid), } } + if !FriendMod.CheckFriend(v.Uid) && v.Uid > 10000 { + continue + } reply = append(reply, &proto.ResFriendReply{ Player: ps, Type: int32(v.Type), @@ -414,6 +417,12 @@ func (p *Player) FriendCardBackData() { FriendMod := p.PlayMod.getFriendMod() msgList := make([]*proto.ResFriendCard, 0, len(FriendMod.Card)) for _, v := range FriendMod.Card { + if !FriendMod.CheckFriend(v.AUid) && v.AUid != int(p.M_DwUin) { + continue + } + if !FriendMod.CheckFriend(v.BUid) && v.BUid != int(p.M_DwUin) { + continue + } msgList = append(msgList, GetCardInfoMsg(v)) } p.PushClientRes(&proto.ResFriendCardMsg{ diff --git a/src/server/game/player_mod.go b/src/server/game/player_mod.go index 89b19f69..d745dcca 100644 --- a/src/server/game/player_mod.go +++ b/src/server/game/player_mod.go @@ -206,7 +206,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { p.ModList.Base.InitData(int(p.Data.DwUin), Ip) p.ModList.SevenLogin.InitData() p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel()) - p.ModList.Friend.InitData() + p.ModList.Friend.InitData(p.Data.DwUin) p.ModList.Mail.InitData() p.ModList.Charge.InitData() p.ModList.Endless.InitData() diff --git a/src/server/test/friend_test.go b/src/server/test/friend_test.go index aaef53f3..866a2b67 100644 --- a/src/server/test/friend_test.go +++ b/src/server/test/friend_test.go @@ -46,3 +46,11 @@ func TestReqApplyFriend(t *testing.T) { game.ReqApplyFriend(p1, buf) p1.FriendListBackData() } + +func TestFriendBackData(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayerByUid(100001) + p1.M_DwUin = 100100129 + p1.FriendLogBackData() + p1.FriendCardBackData() +} From da5b8f040b900bbad59db884e017b12f138bcd33 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 18:17:27 +0800 Subject: [PATCH 65/87] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=B0=8F=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 2 +- src/server/game/player_mod.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 61f4eff2..eabab9c3 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -631,7 +631,7 @@ func ClusterSendMsg(ServerId int, m *msg.Msg) { func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard { Uid := 0 if CardInfo.Type == card.TYPE_CARD_SEND { - Uid = CardInfo.BUid + Uid = CardInfo.AUid } if CardInfo.Type == card.TYPE_CARD_GIVE { diff --git a/src/server/game/player_mod.go b/src/server/game/player_mod.go index d745dcca..22c0f8b9 100644 --- a/src/server/game/player_mod.go +++ b/src/server/game/player_mod.go @@ -206,7 +206,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { p.ModList.Base.InitData(int(p.Data.DwUin), Ip) p.ModList.SevenLogin.InitData() p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel()) - p.ModList.Friend.InitData(p.Data.DwUin) + p.ModList.Friend.InitData(p.ModList.Base.Uid) p.ModList.Mail.InitData() p.ModList.Charge.InitData() p.ModList.Endless.InitData() From 5b0bda5291d20fb7cb6a57ec409ac7175ed99556 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 18:21:57 +0800 Subject: [PATCH 66/87] =?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/game/mod/friend/Friend.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index afd552c8..97525533 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -235,10 +235,14 @@ func (f *FriendMod) InitData(M_DwUin int64) { } } - for k, v := range f.ReplyList { - if !f.CheckFriend(v.Uid) { - f.ReplyList = append(f.ReplyList[:k], f.ReplyList[k+1:]...) + if len(f.ReplyList) > 0 { + validReplyList := make([]*ReplyInfo, 0, len(f.ReplyList)) + for _, v := range f.ReplyList { + if f.CheckFriend(v.Uid) { + validReplyList = append(validReplyList, v) + } } + f.ReplyList = validReplyList } f.version() } From fc830c47d9d6a9d8e39ad43912b5d6d565bd5a75 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:00:07 +0800 Subject: [PATCH 67/87] =?UTF-8?q?=E6=8C=96=E7=9F=BF=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=A5=96=E5=8A=B12=E4=B8=AA=E4=BB=A3=E5=B8=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/mining/mining_cfg.go | 8 +++++++ src/server/game/activity_func.go | 11 ++++++++++ src/server/game/charge_func.go | 2 +- src/server/game/gm_handler.go | 4 ++-- src/server/game/mod/mining/mining.go | 28 +++++++++++++++++++----- src/server/game/mod_factory.go | 5 +++++ src/server/game/player_base_mod.go | 2 +- src/server/game/player_data.go | 9 ++++---- src/server/game/register_network_func.go | 2 +- src/server/test/mining_test.go | 6 +++++ 10 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/server/conf/mining/mining_cfg.go b/src/server/conf/mining/mining_cfg.go index 6ce840f3..1d85c6e3 100644 --- a/src/server/conf/mining/mining_cfg.go +++ b/src/server/conf/mining/mining_cfg.go @@ -46,6 +46,14 @@ func GetLoseItem(Id int) []*item.Item { return gamedata.GetItemList(data, "ItemCost") } +func GetStartItemNum(Id int) int { + data, err := gamedata.GetDataByIntKey(CFG_MINING_TEMPLATE, Id) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "StartItemNum") +} + func GetPassArea(Id int) int { data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id) if err != nil { diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 377eceda..80d3f9c1 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -16,6 +16,7 @@ import ( "server/game/mod/mail" GoUtil "server/game_util" "server/msg" + "server/pkg/github.com/name5566/leaf/log" ) // 活动模块 登录 @@ -77,6 +78,16 @@ func (p *Player) ActivityLogin() { p.SendActivityMail(ItemId, ItemNum, PassActivityId, RewardItems) } } + + // 初始化活动道具 + initItem := p.GetMiningMod().GetInitItem() + if len(initItem) > 0 { + err := p.HandleItem(initItem, "") + if err != nil { + log.Debug("ActivityLogin initItem err : %s", err) + } + } + } // 发送活动邮件 diff --git a/src/server/game/charge_func.go b/src/server/game/charge_func.go index 3603cb55..52fecc2e 100644 --- a/src/server/game/charge_func.go +++ b/src/server/game/charge_func.go @@ -80,7 +80,7 @@ func (p *Player) ActivityFire(ChargeId int) { return } p.PlayMod.save() - p.initAcitivity() + p.initActivity() p.BackDataActivity() } diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index d503df46..c5f5fc00 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -101,7 +101,7 @@ func ReqGmCommand_(player *Player, Command string) error { player.PlayMod.getBaseMod().Level = num player.PlayMod.getBaseMod().Exp = 0 player.PushClientRes(player.PlayerBaseMod.BackAsset()) - player.initAcitivity() + player.initActivity() player.PlayMod.getGuideTaskMod().Unlock(num) player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV, nil, 1) player.PushClientRes(player.PlayMod.getOrderMod().BackData()) @@ -124,7 +124,7 @@ func ReqGmCommand_(player *Player, Command string) error { ActivityMod.Var = nil ActivityMod.InitData() player.PlayMod.save() - player.initAcitivity() + player.initActivity() player.BackDataActivity() case "weekUpdate": VarMod := player.PlayMod.getVarMod() diff --git a/src/server/game/mod/mining/mining.go b/src/server/game/mod/mining/mining.go index 8a020f0d..f31e552b 100644 --- a/src/server/game/mod/mining/mining.go +++ b/src/server/game/mod/mining/mining.go @@ -7,11 +7,12 @@ import ( ) type MiningMod struct { - Id int - Map map[int32]string - Gem []int - Pass int - Mining int + Id int + Map map[int32]string + Gem []int + Pass int + Mining int + InitItem bool } func (m *MiningMod) InitData() { @@ -34,9 +35,26 @@ func (m *MiningMod) Login(Id int) int { m.Gem = nil m.Pass = 1 m.Mining = 0 + m.InitItem = false return OldId } +func (m *MiningMod) GetInitItem() []*item.Item { + if m.InitItem { + return nil + } + if m.Id == 0 { + return nil + } + initItemNum := miningCfg.GetStartItemNum(m.Id) + initItemId := miningCfg.GetActivityItemId(m.Id) + if initItemNum > 0 && initItemId > 0 { + m.InitItem = true + return []*item.Item{item.NewItem(initItemId, initItemNum)} + } + return nil +} + func (m *MiningMod) ZeroUpdate(Id int) { m.Login(Id) } diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go index f7ba48bd..12118ed9 100644 --- a/src/server/game/mod_factory.go +++ b/src/server/game/mod_factory.go @@ -12,6 +12,7 @@ import ( "server/game/mod/face" "server/game/mod/friend" "server/game/mod/fur" + "server/game/mod/item" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" "server/game/mod/mining" @@ -90,3 +91,7 @@ func (p *Player) GetMiningMod() *mining.MiningMod { func (p *Player) GetDailyTaskMod() *dailyTask.DailyTaskMod { return p.PlayMod.getDailyTaskMod() } + +func (p *Player) GetItemMod() *item.ItemMod { + return p.PlayMod.getItemMod() +} diff --git a/src/server/game/player_base_mod.go b/src/server/game/player_base_mod.go index 83e5557a..8f0628f7 100644 --- a/src/server/game/player_base_mod.go +++ b/src/server/game/player_base_mod.go @@ -561,7 +561,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) player.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul()) player.PushClientRes(OrderMod.BackData()) // 重载活动 - player.initAcitivity() + player.initActivity() player.BackDataActivity() player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV}) player.TeLog("level_up", map[string]interface{}{ diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 69841604..1f778886 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -248,7 +248,7 @@ func (p *Player) InitPlayer(UserName string) error { log.Debug("AddFunc failed:", err) } p.McronSave.Start() - p.initAcitivity() + p.initActivity() p.ZeroUpdate(nil) p.NoonUpdate(nil) p.Login() @@ -307,7 +307,7 @@ func (p *Player) InitPlayerByUid(Uid int) error { log.Debug("AddFunc failed:", err) } p.McronSave.Start() - p.initAcitivity() + p.initActivity() p.ZeroUpdate(nil) p.NoonUpdate(nil) p.Login() @@ -384,7 +384,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { } p.PlayroomBackData() p.PlayMod.getChampshipMod().ZeroUpdate() - p.initAcitivity() + p.initActivity() p.ActivityZeroUpdate() // 每日任务 @@ -1164,7 +1164,7 @@ func (p *Player) TeLog(Type string, Param map[string]interface{}) { } // 初始化活动 -func (p *Player) initAcitivity() { +func (p *Player) initActivity() { p.activity = make(map[int]*ActivityInfo) ActivityList := activityCfg.GetActivityList() Level := p.GetPlayerBaseMod().GetLevel() @@ -1186,6 +1186,7 @@ func (p *Player) initAcitivity() { Title: v.Title, } } + p.ActivityLogin() } func (p *Player) BackDataActivity() { diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index a65efe67..96bf554d 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -4621,7 +4621,7 @@ func ReqActivityReward(player *Player, buf []byte) error { "Items": Items, }) player.PlayMod.save() - player.initAcitivity() + player.initActivity() player.BackDataActivity() player.PushClientRes(&msg.ResActivityReward{ Code: msg.RES_CODE_SUCCESS, diff --git a/src/server/test/mining_test.go b/src/server/test/mining_test.go index 35b7b500..858a6fe1 100644 --- a/src/server/test/mining_test.go +++ b/src/server/test/mining_test.go @@ -18,3 +18,9 @@ func TestGetPassReward(t *testing.T) { } player.MiningBackData() } + +func TestInitActivityItem(t *testing.T) { + player := new(game.Player) + player.GetBaseMod().Level = 15 + player.Login() +} From 6547a4a9db98473fa5720d39151f5715307b4ab8 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 19:30:18 +0800 Subject: [PATCH 68/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E4=BA=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/db/Redis.go | 25 +++++ src/server/game/champship_mgr.go | 172 ++++++++++++++++++++++++------ src/server/test/champship_test.go | 12 +++ src/server/test/fix_test.go | 5 + 4 files changed, 183 insertions(+), 31 deletions(-) diff --git a/src/server/db/Redis.go b/src/server/db/Redis.go index bc5ab33d..b2b79719 100644 --- a/src/server/db/Redis.go +++ b/src/server/db/Redis.go @@ -219,6 +219,20 @@ func RedisZRevRangeWithScores(key string, start, stop int64) ([]redis.Z, error) return val, nil } +func RedisZGetByIndexWithScore(key string, index int64) (*redis.Z, error) { + if RdbRead == nil { + return nil, nil + } + val, err := RdbRead.ZRangeWithScores(ctx, key, index, index).Result() + if err != nil { + return nil, err + } + if len(val) == 0 { + return nil, nil + } + return &val[0], nil +} + func RedisZRankWithScores(key, member string) (int64, float64, error) { if RdbRead == nil { return 0, 0, nil @@ -234,6 +248,17 @@ func RedisZRankWithScores(key, member string) (int64, float64, error) { return val, score, nil } +func RedisZCard(key string) (int64, error) { + if RdbRead == nil { + return 0, nil + } + val, err := RdbRead.ZCard(ctx, key).Result() + if err != nil { + return 0, err + } + return val, nil +} + func RedisDel(key string) { if RdbWrite == nil { log.Debug("redis write client is nil") diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 65ec6c86..8a8c2ad6 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -3,11 +3,14 @@ package game import ( "fmt" "math" + "math/rand" + avatarCfg "server/conf/avatar" champshipCfg "server/conf/champship" faceCfg "server/conf/face" randnameCfg "server/conf/randname" "server/db" + "server/game/mod/friend" "server/game/mod/msg" GoUtil "server/game_util" proto "server/msg" @@ -57,6 +60,11 @@ type ChampshipRobot struct { Time int64 Score float64 PerScore float64 + Playroom map[int]int + DressSet map[int]int + FurSet int + ActLog *friend.ActLogInfo + PetName string } type GroupInfo struct { @@ -278,28 +286,54 @@ func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank { if Robot == nil { continue } + last := &proto.ActLog{} + if Robot.ActLog != nil { + last = &proto.ActLog{ + Type: int32(Robot.ActLog.Type), + Time: Robot.ActLog.Time, + Param: Robot.ActLog.Param, + } + } RL[int32(k+1)] = &proto.ResPlayerRank{ - Uid: int64(v.Uid), - Score: float32(v.Score), - Name: Robot.Name, - Avatar: int32(Robot.Avatar), - Face: int32(Robot.Face), - Level: int32(Robot.Level), - Type: int32(v.Type), + Uid: int64(v.Uid), + Score: float32(v.Score), + Name: Robot.Name, + Avatar: int32(Robot.Avatar), + Face: int32(Robot.Face), + Level: int32(Robot.Level), + Type: int32(v.Type), + PlayroomSet: GoUtil.MapIntToInt32(Robot.Playroom), + DressSet: GoUtil.MapIntToInt32(Robot.DressSet), + FurSet: int32(Robot.FurSet), + PetName: Robot.PetName, + Last: last, } } else { - SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) + SimplePlayer := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid) if SimplePlayer == nil { continue } + last := &proto.ActLog{} + if SimplePlayer.ActLog != nil { + last = &proto.ActLog{ + Type: int32(SimplePlayer.ActLog.Type), + Time: SimplePlayer.ActLog.Time, + Param: SimplePlayer.ActLog.Param, + } + } RL[int32(k+1)] = &proto.ResPlayerRank{ - Uid: int64(v.Uid), - Score: float32(v.Score), - Name: SimplePlayer.Name, - Avatar: int32(SimplePlayer.Avatar), - Face: int32(SimplePlayer.Face), - Level: int32(SimplePlayer.Level), - Type: int32(v.Type), + Uid: int64(v.Uid), + Score: float32(v.Score), + Name: SimplePlayer.Name, + Avatar: int32(SimplePlayer.Avatar), + Face: int32(SimplePlayer.Face), + Level: int32(SimplePlayer.Level), + Type: int32(v.Type), + PlayroomSet: GoUtil.MapIntToInt32(SimplePlayer.Playroom), + DressSet: GoUtil.MapIntToInt32(SimplePlayer.DressSet), + FurSet: int32(SimplePlayer.PetFur), + PetName: SimplePlayer.PetName, + Last: last, } } } @@ -337,28 +371,54 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { if Robot == nil { continue } + last := &proto.ActLog{} + if Robot.ActLog != nil { + last = &proto.ActLog{ + Type: int32(Robot.ActLog.Type), + Time: Robot.ActLog.Time, + Param: Robot.ActLog.Param, + } + } RL[int32(k+1)] = &proto.ResPlayerRank{ - Uid: int64(v.Uid), - Score: float32(v.Score), - Name: Robot.Name, - Avatar: int32(Robot.Avatar), - Face: int32(Robot.Face), - Level: int32(Robot.Level), - Type: int32(v.Type), + Uid: int64(v.Uid), + Score: float32(v.Score), + Name: Robot.Name, + Avatar: int32(Robot.Avatar), + Face: int32(Robot.Face), + Level: int32(Robot.Level), + Type: int32(v.Type), + PlayroomSet: GoUtil.MapIntToInt32(Robot.Playroom), + DressSet: GoUtil.MapIntToInt32(Robot.DressSet), + FurSet: int32(Robot.FurSet), + PetName: Robot.PetName, + Last: last, } } else { - SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) + SimplePlayer := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid) if SimplePlayer == nil { continue } + last := &proto.ActLog{} + if SimplePlayer.ActLog != nil { + last = &proto.ActLog{ + Type: int32(SimplePlayer.ActLog.Type), + Time: SimplePlayer.ActLog.Time, + Param: SimplePlayer.ActLog.Param, + } + } RL[int32(k+1)] = &proto.ResPlayerRank{ - Uid: int64(v.Uid), - Score: float32(v.Score), - Name: SimplePlayer.Name, - Avatar: int32(SimplePlayer.Avatar), - Face: int32(SimplePlayer.Face), - Level: int32(SimplePlayer.Level), - Type: int32(v.Type), + Uid: int64(v.Uid), + Score: float32(v.Score), + Name: SimplePlayer.Name, + Avatar: int32(SimplePlayer.Avatar), + Face: int32(SimplePlayer.Face), + Level: int32(SimplePlayer.Level), + Type: int32(v.Type), + PlayroomSet: GoUtil.MapIntToInt32(SimplePlayer.Playroom), + DressSet: GoUtil.MapIntToInt32(SimplePlayer.DressSet), + FurSet: int32(SimplePlayer.PetFur), + PetName: SimplePlayer.PetName, + Last: last, } } } @@ -436,6 +496,9 @@ func (c *ChampshipMgr) group(iszero bool) (interface{}, error) { for j := StartId; j <= ChampshipData.AutoId; j++ { // 填充机器人 RobotNum := 30 - len(ChampshipData.Rank[j]) RobotList := CreateRobotList(i, RobotNum, j) + for i := 0; i < RobotNum; i++ { + FormatRobotInfo(RobotList[i], i+1) + } for _, v := range RobotList { ChampshipData.Robot[ChampshipData.RobotId] = v ChampshipData.Rank[j] = append(ChampshipData.Rank[j], &ChampshipRank{ @@ -839,7 +902,13 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot { PerScore = math.Round((M/10*0.34)/(float64(GoUtil.NextZeroTimestampDuration())/1800)*100) / 100 Score = 2 } - + num, err := db.RedisZCard(RANK_USER) + if err != nil { + num = 0 + } + id := rand.Intn(int(num)) + 1 + rinfo, err := db.RedisZGetByIndexWithScore(RANK_USER, int64(id)) + playerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(GoUtil.Int(rinfo.Member)) return &ChampshipRobot{ Max: M / 10, Type: Type, @@ -851,9 +920,50 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot { Time: GoUtil.Now(), Score: Score, PerScore: PerScore, + Playroom: playerSimpleData.Playroom, + DressSet: playerSimpleData.DressSet, + FurSet: playerSimpleData.PetFur, } } +func FormatRobotInfo(Robot *ChampshipRobot, index int) { + num, err := db.RedisZCard(RANK_USER) + if err != nil { + num = 0 + } + x := int(num) / 30 + if index > int(x) { + index = int(x) + } + start := int64((index - 1) * x) + end := int64(index*x - 1) + rinfo, err := db.RedisZRevRangeWithScores(RANK_USER, start, end) + if err != nil { + log.Error("FormatRobotInfo RedisZRevRangeWithScores error: %v, start %d, end %d", err, start, end) + return + } + if len(rinfo) == 0 { + log.Error("FormatRobotInfo RedisZRevRangeWithScores no data, start %d, end %d", start, end) + return + } + id := rand.Intn(len(rinfo)) + if id >= len(rinfo) { + id = len(rinfo) - 1 + } + playerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(GoUtil.Int(rinfo[id].Member)) + if playerSimpleData == nil { + return + } + Robot.Level = playerSimpleData.Level + Robot.Avatar = playerSimpleData.Avatar + Robot.Face = playerSimpleData.Face + Robot.Playroom = playerSimpleData.Playroom + Robot.DressSet = playerSimpleData.DressSet + Robot.FurSet = playerSimpleData.PetFur + Robot.ActLog = playerSimpleData.ActLog + Robot.PetName = playerSimpleData.PetName +} + func (c *ChampshipMgr) SetRankCache(Uid int) { PreRank := c.unsafe_getLastMyRank(Uid) Rank := c.unsafe_getMyRank(Uid) diff --git a/src/server/test/champship_test.go b/src/server/test/champship_test.go index 431d3a2e..6a636f7d 100644 --- a/src/server/test/champship_test.go +++ b/src/server/test/champship_test.go @@ -1,6 +1,7 @@ package test import ( + "fmt" champshipCfg "server/conf/champship" "server/game" "testing" @@ -35,3 +36,14 @@ func TestReqChampshipReward(t *testing.T) { ChampshipMod.Score = 1000 game.ReqChampshipReward(p1, nil) } + +func TestChampionshipCreateRobot(t *testing.T) { + RobotNum := 30 + i := 5 + j := 1 + RobotList := game.CreateRobotList(i, RobotNum, j) + for i := 0; i < RobotNum; i++ { + game.FormatRobotInfo(RobotList[i], i+1) + } + fmt.Print("success") +} diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 7b1a0b1a..2ec8125e 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -264,3 +264,8 @@ func TestRandFace(t *testing.T) { avatar := avatarCfg.GetRandInitId() fmt.Printf("Random Face ID: %d, Random Avatar ID: %d\n", face, avatar) } + +func TestChampionShipCreateRobot(t *testing.T) { + robot := game.CreateRobot(1.0, 1) + fmt.Printf("Created Robot: %v\n", robot) +} From f6194491373ef32520ec03f9846846e13d776f7b Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 21:44:21 +0800 Subject: [PATCH 69/87] =?UTF-8?q?=E5=85=8D=E5=B9=BF=E5=91=8A=E7=A4=BC?= =?UTF-8?q?=E5=8C=85=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/charge/Charge.go | 20 ++++++++++++++++++++ src/server/game/mod/item/Item.go | 1 + src/server/game/player_data.go | 7 +++++++ 3 files changed, 28 insertions(+) diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 113a9be0..876ca8e6 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -288,6 +288,26 @@ func (c *ChargeMod) FireAdReward(ChargeId int) []*item.Item { return Items } +func (c *ChargeMod) AddAdTime(PetWorkDay int) { + if PetWorkDay > 0 { + Now := GoUtil.Now() + if c.AdEndTime < Now { + c.AdEndTime = Now + int64(PetWorkDay*secondsIn1Day) + } else { + c.AdEndTime += int64(PetWorkDay * secondsIn1Day) + } + c.PetWorkTime += int64(PetWorkDay * secondsIn1Day) + c.Ad = true + } +} + +func (c *ChargeMod) CheckAd() bool { + if !c.Ad { + return false + } + return true +} + // 免费商店 func (c *ChargeMod) FireFreeShop() ([]*item.Item, error) { if c.FreeShop >= 2 { diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 3d65dd1d..23eccc73 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -59,6 +59,7 @@ const ( ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱 ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具 ITEM_TYPE_PET_FUR = 117 // 宠物毛皮 + ITEM_TYPE_AD_CARD = 118 // 免广告卡 ) func (i *Item) String() string { diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 1f778886..011ed567 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -907,6 +907,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { "fur_coin_cost": fur_cfg.GetFurShopCostNum(v.Id), "pet_fur_get_type": Label, }) + case item.ITEM_TYPE_AD_CARD: // 广告卡 + ChargeMod := p.PlayMod.getChargeMod() + Effect := itemCfg.GetItemEffect(v.Id) + ChargeMod.AddAdTime(Effect) + BackDataType[item.ITEM_TYPE_AD_CARD] = struct{}{} default: err := ItemMod.AddItem(v.Id, v.Num) p.TeLog("asset_change", map[string]interface{}{ @@ -949,6 +954,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { case item.ITEM_TYPE_PET_FUR: FurMod := p.PlayMod.getFurMod() p.PushClientRes(FurMod.BackData()) + case item.ITEM_TYPE_AD_CARD: + p.ChargeBackData() } } p.PetItemUseLog(itemList) From e69ec1d786d50e522dfdf4fa2e8d8bb598895ae9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 22:22:15 +0800 Subject: [PATCH 70/87] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=AE=A0=E7=89=A9?= =?UTF-8?q?=E5=B8=81bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 2 +- src/server/test/chess_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index eabab9c3..c1491537 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -1133,7 +1133,7 @@ func (player *Player) InitOrderItem() { continue } Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) - Star = int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 + Star = int(float64(Star)*float64(OrderFactor+1000)/10000) * 10 v.Items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: Star}} OrderMod.OrderList[k] = v } diff --git a/src/server/test/chess_test.go b/src/server/test/chess_test.go index 9f2fe5d3..f960504c 100644 --- a/src/server/test/chess_test.go +++ b/src/server/test/chess_test.go @@ -15,7 +15,7 @@ func TestGetStarEmitList(t *testing.T) { OrderMod := p1.GetOrderMod() OrderMod.OrderList = map[int]order.Order{ 1: { - MergeId: []int{25, 25}, + MergeId: []int{15, 15}, }, } p1.InitOrderItem() From 511a69454d8fb30d572200728c10c109ab2015e6 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 22:26:48 +0800 Subject: [PATCH 71/87] =?UTF-8?q?playroom=E5=B0=8F=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E7=BF=BB=E7=89=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/register_network_func.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 96bf554d..d6599f98 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -3419,9 +3419,9 @@ func ReqPlayroomInfo(player *Player, buf []byte) error { needStar := DecorateMod.GetAreaCost() highReward := int(float64(needStar) * 0.75) if highReward < PlayerData.Star { - PlayroomMod.SetGameRewardFlip(max(int(float64(needStar)*0.1), 10), max(int(float64(needStar)*0.3), 10), max(int(float64(needStar)*0.75), 10)) + PlayroomMod.SetGameRewardFlip(max(int(float64(needStar)*0.1), 10), max(int(float64(needStar)*0.3), 50), max(int(float64(needStar)*0.75), 100)) } else { - PlayroomMod.SetGameRewardFlip(max(10, int(float64(PlayerData.Star)*0.1)), max(10, int(float64(PlayerData.Star)*0.5)), max(PlayerData.Star, 10)) + PlayroomMod.SetGameRewardFlip(max(10, int(float64(PlayerData.Star)*0.1)), max(50, int(float64(PlayerData.Star)*0.5)), max(PlayerData.Star, 100)) } } player.PlayMod.save() From 55c40cf0779fbd84a7b6159a631cf44f0daae466 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 9 Mar 2026 22:30:14 +0800 Subject: [PATCH 72/87] =?UTF-8?q?logout=20msg=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index c1491537..21401bda 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -553,6 +553,7 @@ func (p *Player) handle(m *msg.Msg) error { Face: GoUtil.IntToInt32(faceList), Count: GoUtil.Int32(info["apply_count"]), FacebookPic: facebookPic, + Uids: applyUids, }) } otherUids, ok := info["other_uids"].([]int64) @@ -574,6 +575,7 @@ func (p *Player) handle(m *msg.Msg) error { Face: GoUtil.IntToInt32(faceList), Count: GoUtil.Int32(info["other_count"]), FacebookPic: facebookPic, + Uids: otherUids, }) } default: From 50a4a9d9c2cdce19660d6cbb2b376513c75c5893 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 10:26:31 +0800 Subject: [PATCH 73/87] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BB=B7=E6=A0=BC?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/order/order_cfg.go | 4 ++-- src/server/game/message_handler.go | 2 +- src/server/test/order_test.go | 12 ++++++++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/server/conf/order/order_cfg.go b/src/server/conf/order/order_cfg.go index 80101af2..27c64a43 100644 --- a/src/server/conf/order/order_cfg.go +++ b/src/server/conf/order/order_cfg.go @@ -1,6 +1,7 @@ package orderCfg import ( + "math" "server/gamedata" "sort" "strconv" @@ -33,8 +34,7 @@ func GetOrderK(Lv int) int { } Energy := gamedata.GetIntValue(data, "Energy") K := gamedata.GetFloatValue(data, "K") - a := float64(Energy)*K/10 + 0.5 - return int(a) * 10 + return int(math.Round(float64(Energy)*K/10) * 10) } func GetOrderFactor(Scene int) int { diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 21401bda..1d6e9c54 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -1135,7 +1135,7 @@ func (player *Player) InitOrderItem() { continue } Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) - Star = int(float64(Star)*float64(OrderFactor+1000)/10000) * 10 + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 v.Items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: Star}} OrderMod.OrderList[k] = v } diff --git a/src/server/test/order_test.go b/src/server/test/order_test.go index 3624ef70..a6941e28 100644 --- a/src/server/test/order_test.go +++ b/src/server/test/order_test.go @@ -40,3 +40,15 @@ func TestChestRain(t *testing.T) { f := LimitEventMod.GetMeteorReward([]int{226}, ChessMod.GetStarEmitList()) fmt.Printf("chest rain reward:%v", f) } + +func TestInitOrderItem(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + OrderMod := p1.GetOrderMod() + OrderMod.OrderList = make(map[int]order.Order) + OrderMod.OrderList[1] = order.Order{ + MergeId: []int{15, 15}, + } + p1.InitOrderItem() + fmt.Printf("order item:%v", OrderMod.OrderList[1].Items) +} From 892d81907e4b885d8bcba8326d8392d9e6e3df47 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 11:01:33 +0800 Subject: [PATCH 74/87] =?UTF-8?q?=E9=80=80=E5=BD=B9=E7=9A=84=E6=A3=8B?= =?UTF-8?q?=E5=AD=90=E4=B8=8D=E7=94=9F=E6=88=90=E5=9B=9E=E6=94=B6=E8=AE=A2?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 13 +++++++++++- src/server/game/mod/chess/Chess.go | 10 ++++++++++ src/server/game/mod/order/Order.go | 32 +++++++++++++++--------------- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 1d6e9c54..2d17c6f6 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -1275,13 +1275,18 @@ func (p *Player) AddHighOrder() { ChessMap[Color] = v } } - + RetireProduceColor := ChessMod.GetRetireProduceColor() for Color, ChessId := range ChessMap { EmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), Color) _, ChessMaxLv := getChesslvRange(EmitId, BaseMod.GetEnergyMul(), OrderMod.IsCharge) NewLev2 := mergeDataCfg.DynamicLev(ChessMaxLv, EmitId, Color) NewLev3 := order.AdjustLev(NewLev2, BaseMod.GetEnergyMul()) ChessLv := mergeDataCfg.GetLvById(ChessId) + chessColor := mergeDataCfg.GetColorById(ChessId) + // 退役产物不生成订单 + if GoUtil.InStringArray(chessColor, RetireProduceColor) { + continue + } if NewLev3 >= ChessLv { continue } @@ -1320,10 +1325,16 @@ func (p *Player) AddHighOrder2() { } ChessMap[v]++ } + RetireProduceColor := ChessMod.GetRetireProduceColor() for ChessId, Num := range ChessMap { if Num < 2 { continue } + chessColor := mergeDataCfg.GetColorById(ChessId) + // 退役产物不生成订单 + if GoUtil.InStringArray(chessColor, RetireProduceColor) { + continue + } add := true for _, v := range OrderMod.GetOrderList() { if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId}) || GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) { diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 34a4d226..3c42a208 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -725,3 +725,13 @@ func (cb *ChessBorad) GetRetireReward(Id string) ([]*item.Item, error) { cb.RetireReward[Id] = true return mergeDataCfg.GetRetireReward(), nil } + +func (cb *ChessBorad) GetRetireProduceColor() []string { + color := make([]string, 0, len(cb.Retire)) + for k, v := range cb.Retire { + if v == EMIT_RETIRE_ING { + color = append(color, mergeDataCfg.GetEmitTypeByColor(k)) + } + } + return color +} diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index fe368138..467589d4 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -564,22 +564,22 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ } b3 := false //额外订单补充2;当玩家的棋盘中出现2个相同的满级产物时,立刻生成一个对应的收购订单; - for k := range MaxLvChess { - ChessNum := GoUtil.GetElemNum(ChessList, k) - if ChessNum >= 2 && Level >= 12 { - b2 := true - for _, v := range o.OrderList { - if GoUtil.SliceEqual(v.MergeId, []int{k, k}) { - b2 = false - break - } - } - if b2 { - b3 = true - o.addOrder([]int{k, k}, DIFF_LOW, Extra_type) - } - } - } + // for k := range MaxLvChess { + // ChessNum := GoUtil.GetElemNum(ChessList, k) + // if ChessNum >= 2 && Level >= 12 { + // b2 := true + // for _, v := range o.OrderList { + // if GoUtil.SliceEqual(v.MergeId, []int{k, k}) { + // b2 = false + // break + // } + // } + // if b2 { + // b3 = true + // o.addOrder([]int{k, k}, DIFF_LOW, Extra_type) + // } + // } + // } //额外订单补充1;CDEG发射器首次合成时,生成其对应2及棋子订单,完成后生成3及,再完成生成4及的; if b1 { ChessColor := mergeDataCfg.GetEmitProduceChessType(OrderEmit) From 8a79ce2b64535f82e4b49ac8224d0f493f23a3b4 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 12:07:23 +0800 Subject: [PATCH 75/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=EF=BC=8C?= =?UTF-8?q?=E6=8C=96=E7=9F=BF=E9=85=8D=E7=BD=AE=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/champship/champship_cfg.go | 18 +++++++++++++----- src/server/conf/mining/mining_cfg.go | 8 ++++---- src/server/game/activity_func.go | 5 +++-- src/server/game/mod/champship/Champship.go | 4 ++-- src/server/game/mod/mining/mining.go | 4 ++-- src/server/game/register_network_func.go | 8 +++++--- 6 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/server/conf/champship/champship_cfg.go b/src/server/conf/champship/champship_cfg.go index f873fe07..b10be54c 100644 --- a/src/server/conf/champship/champship_cfg.go +++ b/src/server/conf/champship/champship_cfg.go @@ -47,7 +47,7 @@ func GetChessScore(ChessLv int) int { return gamedata.GetIntValue(data, "Score") } -func GetReward(Reward, Score, activityId int) (int, []*item.Item) { +func GetReward(Reward, Score, activityId, orderFactor int) (int, []*item.Item) { data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT) if err != nil { log.Debug("GetReward err:%v, Reward=%d, Score=%d", err, Reward, Score) @@ -64,10 +64,18 @@ func GetReward(Reward, Score, activityId int) (int, []*item.Item) { if Reward >= Id { continue } - if Score >= gamedata.GetIntValue(v, "Total") { - Items := item.ParseItem(gamedata.GetValue(v, "Items")) - r = item.Merge(r, Items) - NewReward = max(NewReward, Id) + if Score < gamedata.GetIntValue(v, "Total") { + continue + } + Items := item.ParseItem(gamedata.GetValue(v, "Items")) + r = item.Merge(r, Items) + NewReward = max(NewReward, Id) + starReward := gamedata.GetIntValue(v, "StarReward") + if starReward > 0 { + starnum := int((float64(starReward) * float64(orderFactor) / 500)) * 5 + if starnum > 0 { + r = append(r, item.NewItem(item.ITEM_STAR_ID, starnum)) + } } } return NewReward, r diff --git a/src/server/conf/mining/mining_cfg.go b/src/server/conf/mining/mining_cfg.go index 1d85c6e3..1a55ae83 100644 --- a/src/server/conf/mining/mining_cfg.go +++ b/src/server/conf/mining/mining_cfg.go @@ -96,7 +96,7 @@ func GetRandItem() []*item.Item { return gamedata.GetItemList(Info, "Items") } -func GetPassItem(Id int, needStar int) []*item.Item { +func GetPassItem(Id int, orderFactor int) []*item.Item { data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id) if err != nil { return nil @@ -105,7 +105,7 @@ func GetPassItem(Id int, needStar int) []*item.Item { starReward := gamedata.GetIntValue(data, "StarReward") var starnum int if starReward > 0 { - starnum = int(needStar * starReward / 100) + starnum = int((float64(starReward) * float64(orderFactor) / 500)) * 5 if starnum > 0 { items = append(items, &item.Item{ Id: item.ITEM_STAR_ID, @@ -116,7 +116,7 @@ func GetPassItem(Id int, needStar int) []*item.Item { return items } -func GetPassItemList(needStar int) map[int][]*item.Item { +func GetPassItemList(orderFactor int) map[int][]*item.Item { data, err := gamedata.GetData(CFG_MINING_PASS) if err != nil { return nil @@ -124,7 +124,7 @@ func GetPassItemList(needStar int) map[int][]*item.Item { result := make(map[int][]*item.Item) for k := range data { Id := GoUtil.Int(k) - result[Id] = GetPassItem(Id, needStar) + result[Id] = GetPassItem(Id, orderFactor) } return result } diff --git a/src/server/game/activity_func.go b/src/server/game/activity_func.go index 80d3f9c1..cfce0658 100644 --- a/src/server/game/activity_func.go +++ b/src/server/game/activity_func.go @@ -9,6 +9,7 @@ import ( guesscolorCfg "server/conf/guess_color" languageCfg "server/conf/language" miningCfg "server/conf/mining" + orderCfg "server/conf/order" passCfg "server/conf/pass" raceCfg "server/conf/race" "server/game/mod/activity" @@ -199,8 +200,8 @@ func (p *Player) MiningBackData() { Status := p.GetActivityStatus(activity.ACT_TYPE_MINING) Template := miningCfg.GetTemplate(ActivityInfo.Id) DecorateMod := p.PlayMod.getDecorateMod() - needStar := DecorateMod.GetNextNeedStar() - passRewardList := miningCfg.GetPassItemList(needStar) + orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + passRewardList := miningCfg.GetPassItemList(orderFactor) resPassRewardList := make(map[int32]*msg.ItemList) for k, v := range passRewardList { resPassRewardList[int32(k)] = item.ItemListToMsg(v) diff --git a/src/server/game/mod/champship/Champship.go b/src/server/game/mod/champship/Champship.go index 827ccb6d..91154502 100644 --- a/src/server/game/mod/champship/Champship.go +++ b/src/server/game/mod/champship/Champship.go @@ -56,8 +56,8 @@ func (c *ChampshipMod) AddScore(Chess []int) { c.Score += score } -func (c *ChampshipMod) GetReward(activityId int) []*item.Item { - Reward, Items := champshipCfg.GetReward(c.Reward, c.Score, activityId) +func (c *ChampshipMod) GetReward(activityId, orderFactor int) []*item.Item { + Reward, Items := champshipCfg.GetReward(c.Reward, c.Score, activityId, orderFactor) c.Reward = Reward c.Max = max(c.Max, c.Reward) return Items diff --git a/src/server/game/mod/mining/mining.go b/src/server/game/mod/mining/mining.go index f31e552b..1d63c060 100644 --- a/src/server/game/mod/mining/mining.go +++ b/src/server/game/mod/mining/mining.go @@ -99,12 +99,12 @@ func (m *MiningMod) Take(Map map[int32]string, Gem int) ([]*item.Item, error) { return Items, nil } -func (m *MiningMod) GetReward(needStar int) ([]*item.Item, int, error) { +func (m *MiningMod) GetReward(orderFactor int) ([]*item.Item, int, error) { GemList := miningCfg.GetPassGem(m.Pass) if len(m.Gem) < len(GemList) { return nil, 0, fmt.Errorf("gem is not full") } - Items := miningCfg.GetPassItem(m.Pass, needStar) + Items := miningCfg.GetPassItem(m.Pass, orderFactor) m.Pass++ Ming := m.Mining m.Mining = 0 diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index d6599f98..b011a569 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -2738,8 +2738,10 @@ func ReqShippingOrder(player *Player, buf []byte) error { func ReqChampshipReward(player *Player, buf []byte) error { ChampshipMod := player.PlayMod.getChampshipMod() todayActivityId, _ := player.GetChampshipActivityId() + DecorateMod := player.PlayMod.getDecorateMod() + orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) RewardId := ChampshipMod.Reward - itemList := ChampshipMod.GetReward(todayActivityId) + itemList := ChampshipMod.GetReward(todayActivityId, orderFactor) err := player.HandleItem(itemList, msg.ITEM_POP_LABEL_ChampshipReward.String()) if err != nil { player.SendErrClienRes(&msg.ResChampshipReward{ @@ -3164,8 +3166,8 @@ func ReqMiningReward(player *Player, buf []byte) error { return fmt.Errorf("activity not start") } DecorateMod := player.PlayMod.getDecorateMod() - needStar := DecorateMod.GetNextNeedStar() - itemList, Mining, err := MiningMod.GetReward(needStar) + orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + itemList, Mining, err := MiningMod.GetReward(orderFactor) if err != nil { player.SendErrClienRes(&msg.ResMiningReward{ Code: msg.RES_CODE_FAIL, From 8dbefbe3d9d32450e3f844077da6a1f1b740dc8e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:32:21 +0800 Subject: [PATCH 76/87] =?UTF-8?q?=E5=9C=BA=E6=99=AF=E5=86=B2=E5=88=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../limited_time_event/limited_time_event.go | 28 +++++++++++++++++-- src/server/game/register_network_func.go | 25 +++++++++++++++-- src/server/test/limit_test.go | 14 ++++++++++ 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/server/game/mod/limited_time_event/limited_time_event.go b/src/server/game/mod/limited_time_event/limited_time_event.go index 40ce7c65..54a802f3 100644 --- a/src/server/game/mod/limited_time_event/limited_time_event.go +++ b/src/server/game/mod/limited_time_event/limited_time_event.go @@ -274,7 +274,16 @@ func (l *LimitedTimeEventMod) GetChestReward(MergeList, EmitList []int) []*item. } // 获取场景冲刺奖励 -func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { +func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item, error) { + limitInfo, ok := l.EventList[EVENT_TYPE_SENCE_DASH] + if !ok { + return 0, nil, fmt.Errorf("sence dash not active") + } + times := GoUtil.Int(limitInfo.Info["Times"]) + if times <= 0 { + return 0, nil, fmt.Errorf("no dash times") + } + limitInfo.Info["Times"] = times - 1 ProbList := limitedTimeEventCfg.GetSenceJackpotProb() Id := GoUtil.RandMap(ProbList) Items := limitedTimeEventCfg.GetSenceJackpotReward(Id) @@ -282,7 +291,7 @@ func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { // 多个奖励时,随机选择一个 Items = []*item.Item{GoUtil.RandItem(Items)} } - return Id, Items + return Id, Items, nil } // 获取连击快手奖励 @@ -434,6 +443,10 @@ func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) { // #region 事件信息初始化 func initEventInfo(E *LTEInfo, EventType int) { switch EventType { + case EVENT_TYPE_SENCE_DASH: + E.Info = map[string]interface{}{ + "Times": 0, + } case EVENT_TYPE_FAST_PRODUCE: E.Info = map[string]interface{}{ "Times": 0, @@ -515,6 +528,9 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent { case EVENT_TYPE_PAYBACK_DAY: d := e.D.(*PaybackDay) Param[msg.LimitEventParam_PAYBACK_DAY_COUNT.String()] = int32(d.Count) + case EVENT_TYPE_SENCE_DASH: + Times := GoUtil.Int(e.Info["Times"]) + Param[msg.LimitEventParam_SENCE_DASH_TIMES.String()] = int32(Times) } return &msg.LimitEvent{ EndTime: EndTime, @@ -537,3 +553,11 @@ func (l *LimitedTimeEventMod) GetCatDaySaleEndTime() int64 { } return v.StartT + v.Remian } + +func (l *LimitedTimeEventMod) AddSenceDashTimes() bool { + if _, ok := l.EventList[EVENT_TYPE_SENCE_DASH]; !ok { + return false + } + l.EventList[EVENT_TYPE_SENCE_DASH].Info["Times"] = GoUtil.Int(l.EventList[EVENT_TYPE_SENCE_DASH].Info["Times"]) + 1 + return true +} diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index b011a569..e5e72d0d 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -539,7 +539,12 @@ func ReqDecorate(player *Player, buf []byte) error { "item_list": AddItem, }) } + // 跨越场景 if DecorateMod.GetAreaId() != AreaId { // 解锁上报 + LimitEventMod := player.PlayMod.getLimitedTimeEventMod() + if LimitEventMod.AddSenceDashTimes() { + player.PushClientRes(LimitEventMod.BackData()) + } player.TeLog("plot_unlock", map[string]interface{}{ "plot_id": DecorateMod.GetAreaId(), }) @@ -636,6 +641,15 @@ func ReqDecorateAll(player *Player, buf []byte) error { player.TeLog("scene_reward", v.(map[string]interface{})) } } + if DecorateMod.GetAreaId() != AreaId { // 解锁上报 + LimitEventMod := player.PlayMod.getLimitedTimeEventMod() + if LimitEventMod.AddSenceDashTimes() { + player.PushClientRes(LimitEventMod.BackData()) + } + player.TeLog("plot_unlock", map[string]interface{}{ + "plot_id": DecorateMod.GetAreaId(), + }) + } player.PlayMod.save() player.PushClientRes(DecorateMod.BackData()) @@ -1754,9 +1768,16 @@ func ReqLimitSenceReward(player *Player, buf []byte) error { return fmt.Errorf("not exist") } - Id, Items := limitedTimeEventMod.GetSceneDashReward() + Id, Items, err := limitedTimeEventMod.GetSceneDashReward() + if err != nil { + player.SendErrClienRes(&msg.ResLimitSenceReward{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } player.args["ResItemPopId"] = Id - err := player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String()) + err = player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String()) if err != nil { player.SendErrClienRes(&msg.ResLimitSenceReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/test/limit_test.go b/src/server/test/limit_test.go index 9d10a98f..39ade1dd 100644 --- a/src/server/test/limit_test.go +++ b/src/server/test/limit_test.go @@ -28,3 +28,17 @@ func TestFast(t *testing.T) { } t.Logf("Fast produce items: %v", items) } + +func TestSenceDash(t *testing.T) { + p := new(game.Player) + p.InitPlayer("3625212") + LimitEventMod := p.GetLimitEventMod() + LimitEventMod.AddEvent(limitedTimeEvent.EVENT_TYPE_SENCE_DASH, 60) + LimitEventMod.AddSenceDashTimes() // 模拟一次场景冲刺 + Id, items, err := LimitEventMod.GetSceneDashReward() + if err != nil { + t.Errorf("GetSceneDashReward error: %v", err) + return + } + t.Logf("Scene dash reward: Id=%d, items=%v", Id, items) +} From 37bb6f8a70e7e331ce15fdf831f1d165ef22c8d3 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:39:35 +0800 Subject: [PATCH 77/87] =?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 --- .../game/mod/limited_time_event/limited_time_event.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/game/mod/limited_time_event/limited_time_event.go b/src/server/game/mod/limited_time_event/limited_time_event.go index 54a802f3..fa12fe2c 100644 --- a/src/server/game/mod/limited_time_event/limited_time_event.go +++ b/src/server/game/mod/limited_time_event/limited_time_event.go @@ -279,6 +279,9 @@ func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item, error) { if !ok { return 0, nil, fmt.Errorf("sence dash not active") } + if limitInfo.Info == nil { + return 0, nil, fmt.Errorf("sence dash info error") + } times := GoUtil.Int(limitInfo.Info["Times"]) if times <= 0 { return 0, nil, fmt.Errorf("no dash times") @@ -555,9 +558,13 @@ func (l *LimitedTimeEventMod) GetCatDaySaleEndTime() int64 { } func (l *LimitedTimeEventMod) AddSenceDashTimes() bool { - if _, ok := l.EventList[EVENT_TYPE_SENCE_DASH]; !ok { + SenceInfo, ok := l.EventList[EVENT_TYPE_SENCE_DASH] + if !ok { return false } - l.EventList[EVENT_TYPE_SENCE_DASH].Info["Times"] = GoUtil.Int(l.EventList[EVENT_TYPE_SENCE_DASH].Info["Times"]) + 1 + if SenceInfo.Info == nil { + return false + } + SenceInfo.Info["Times"] = GoUtil.Int(SenceInfo.Info["Times"]) + 1 return true } From ea603fd617c3caab75fa8cc8c3def3905c8c9164 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 18:47:05 +0800 Subject: [PATCH 78/87] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E7=A4=BC=E5=8C=85=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/mod/activity/activity_gift.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/server/game/mod/activity/activity_gift.go b/src/server/game/mod/activity/activity_gift.go index 61dc9651..8f287eda 100644 --- a/src/server/game/mod/activity/activity_gift.go +++ b/src/server/game/mod/activity/activity_gift.go @@ -1,20 +1,18 @@ package activity import ( - "fmt" activityCfg "server/conf/activity" "server/game/mod/item" - GoUtil "server/game_util" ) // 活动礼包 func (a *Activity) Fire(Id int) ([]*item.Item, error) { - AId := activityCfg.GetActivityGiftId(Id) - Var := a.getGiftVar(AId) - if Var.Buy { - return nil, fmt.Errorf("Id%d已购买", Id) - } - Var.Buy = true - Var.Time = GoUtil.Now() + // AId := activityCfg.GetActivityGiftId(Id) + // Var := a.getGiftVar(AId) + // if Var.Buy { + // return nil, fmt.Errorf("Id%d已购买", Id) + // } + // Var.Buy = true + // Var.Time = GoUtil.Now() return activityCfg.GetActivityGiftItems(Id), nil } From 3c4824e59ee116fcd6e4ea3d60119feec9a5c774 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 19:14:01 +0800 Subject: [PATCH 79/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=89=93=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/player_data.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 011ed567..38ab33d5 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1193,6 +1193,9 @@ func (p *Player) initActivity() { Title: v.Title, } } + p.TeLog("activity_ids", map[string]interface{}{ + "info": p.activity, + }) p.ActivityLogin() } From 89f9b8481955e6cf88077f70b1982ad285f13222 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 19:54:49 +0800 Subject: [PATCH 80/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=9A=84=E5=9B=9E=E6=94=B6=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/message_handler.go | 20 ++++++++++++++++++++ src/server/game/mod/order/Order.go | 4 ++++ src/server/game/register_network_func.go | 2 ++ src/server/game_util/GoUtil.go | 10 ++++++++++ src/server/test/fix_test.go | 7 +++++++ 5 files changed, 43 insertions(+) diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 2d17c6f6..df0c54b2 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -1349,6 +1349,26 @@ func (p *Player) AddHighOrder2() { } } +func (p *Player) DeleteHighOrder() { + OrderMod := p.PlayMod.getOrderMod() + ChessMod := p.PlayMod.getChessMod() + ChessList := ChessMod.GetUnlockChessList() + for k, v := range OrderMod.GetOrderList() { + if v.Type != order.Extra_type { + continue + } + if len(v.MergeId) == 0 { + continue + } + chessId := v.MergeId[0] + chessNum := len(v.MergeId) + elementNum := GoUtil.ElemNumber(ChessList, chessId) + if elementNum < chessNum { + OrderMod.DeleteOrder(k) + } + } +} + func (p *Player) FormatPetOrderItem(Items []*item.Item) []*item.Item { var NewItems []*item.Item PlayroomMod := p.PlayMod.getPlayroomMod() diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 467589d4..163a98cc 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -439,6 +439,10 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul, OrderType in return nil } +func (o *OrderMod) DeleteOrder(OrderId int) { + delete(o.OrderList, OrderId) +} + // 生成超级订单 func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error { if len(Emit) == 0 { diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index e5e72d0d..02d214fa 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -413,6 +413,8 @@ func ReqRewardOrder(player *Player, buf []byte) error { player.AddOrder() player.AddHighOrder() player.AddHighOrder2() + // 删除无法完成的回收订单 + player.DeleteHighOrder() player.InitOrderItem() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() diff --git a/src/server/game_util/GoUtil.go b/src/server/game_util/GoUtil.go index df3eca3a..9b3fc74c 100644 --- a/src/server/game_util/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -648,3 +648,13 @@ func NotifyPlayer(uid, pushid int, title, content string) { } log.Debug("notification send uid %d, type %d , res %s", uid, pushid, string(body)) } + +func ElemNumber(list []int, ele int) int { + count := 0 + for _, v := range list { + if v == ele { + count++ + } + } + return count +} diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 2ec8125e..670d9363 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -100,6 +100,13 @@ func TestRandInt(t *testing.T) { SevenMod.BackData() } +func TestLevelUp(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + PlayerBaseMod := p1.GetPlayerBaseMod() + PlayerBaseMod.AddExp(p1, 10000, 10000) +} + func TestEndless(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") From fefc3e6eae20fdcce3817650cfd91121c5bc049e Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 20:11:08 +0800 Subject: [PATCH 81/87] =?UTF-8?q?=E3=80=90=E5=85=88=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E3=80=91=E5=A2=9E=E5=8A=A0=E8=AE=A2=E5=8D=95=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A0=E6=B3=95=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E7=9A=84=E5=9B=9E=E6=94=B6=E8=AE=A2=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/register_network_func.go | 4 ++-- src/server/test/fix_test.go | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 02d214fa..d9194431 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -413,8 +413,8 @@ func ReqRewardOrder(player *Player, buf []byte) error { player.AddOrder() player.AddHighOrder() player.AddHighOrder2() - // 删除无法完成的回收订单 - player.DeleteHighOrder() + // 删除无法完成的回收订单 TODO 需前端配合开发 + // player.DeleteHighOrder() player.InitOrderItem() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 670d9363..fb60bc61 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -96,8 +96,7 @@ func TestFixUserData(t *testing.T) { func TestRandInt(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") - SevenMod := p1.GetSevenLoginMod() - SevenMod.BackData() + p1.DeleteHighOrder() } func TestLevelUp(t *testing.T) { From 485280243aa0e6c3bae6058c8585c2a97f181721 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 20:57:14 +0800 Subject: [PATCH 82/87] =?UTF-8?q?=E4=B8=AD=E5=BF=83=E6=9C=8D=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 8a8c2ad6..e4c595b9 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -902,17 +902,11 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot { PerScore = math.Round((M/10*0.34)/(float64(GoUtil.NextZeroTimestampDuration())/1800)*100) / 100 Score = 2 } - num, err := db.RedisZCard(RANK_USER) - if err != nil { - num = 0 - } - id := rand.Intn(int(num)) + 1 - rinfo, err := db.RedisZGetByIndexWithScore(RANK_USER, int64(id)) - playerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(GoUtil.Int(rinfo.Member)) return &ChampshipRobot{ Max: M / 10, Type: Type, Name: randnameCfg.GetRandName(), + PetName: randnameCfg.GetRandName(), Avatar: avatarCfg.GetRandInitId(), Face: faceCfg.GetRandInitId(), Level: GoUtil.RandNum(1, 10), @@ -920,9 +914,6 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot { Time: GoUtil.Now(), Score: Score, PerScore: PerScore, - Playroom: playerSimpleData.Playroom, - DressSet: playerSimpleData.DressSet, - FurSet: playerSimpleData.PetFur, } } From c18a8cc3ce3d5064f9d18019cead4b483a6d4116 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:17:38 +0800 Subject: [PATCH 83/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=86=E7=BB=84?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index e4c595b9..9cd68cd3 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -489,6 +489,7 @@ func (c *ChampshipMgr) group(iszero bool) (interface{}, error) { Score: UserData.Score, Time: UserData.Time, }) + log.Debug("group AutoId:%d, Uid:%d, Score:%f, Time:%d", ChampshipData.AutoId, UserData.Uid, UserData.Score, UserData.Time) if len(ChampshipData.Rank[ChampshipData.AutoId]) == 10 { ChampshipData.AutoId++ } From c28bf27f8f503da2541ad524ebb8e8c100e93130 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:23:00 +0800 Subject: [PATCH 84/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/champship/champship_cfg.go | 4 ++-- src/server/test/fix_test.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/server/conf/champship/champship_cfg.go b/src/server/conf/champship/champship_cfg.go index b10be54c..ea5683eb 100644 --- a/src/server/conf/champship/champship_cfg.go +++ b/src/server/conf/champship/champship_cfg.go @@ -28,14 +28,14 @@ func GetGroupId(N int) int { data, err := gamedata.GetData(CFG_CHAMPSHIP_GROUP) if err != nil { log.Debug("GetGroupId err:%v, N=%d", err, N) - return 0 + return 1 } for k, v := range data { if N >= gamedata.GetIntValue(v, "Min") && N <= gamedata.GetIntValue(v, "Max") { return GoUtil.Int(k) } } - return 0 + return 11 } func GetChessScore(ChessLv int) int { diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index fb60bc61..27530992 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -99,6 +99,12 @@ func TestRandInt(t *testing.T) { p1.DeleteHighOrder() } +func TestII(t *testing.T) { + for i := 10; i >= 0; i-- { + fmt.Printf("i: %d\n", i) + } +} + func TestLevelUp(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") From d9eb329bea8d8a59e93c481cf1d6a7ce0a849c89 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:38:44 +0800 Subject: [PATCH 85/87] =?UTF-8?q?=E9=94=A6=E6=A0=87=E8=B5=9B=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index 9cd68cd3..c18232e3 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -481,18 +481,18 @@ func (c *ChampshipMgr) group(iszero bool) (interface{}, error) { } ChampshipData.AutoId++ StartId := ChampshipData.AutoId + numGroups := (len(g[i]) + 9) / 10 // 向上取整,计算需要的组数 + ChampshipData.AutoId += numGroups for j := 0; j < len(g[i]); j++ { - ChampshipData.GroupInfo[g[i][j]] = ChampshipData.AutoId + groupIndex := StartId + j/10 + ChampshipData.GroupInfo[g[i][j]] = groupIndex UserData := ChampshipData.Pool[g[i][j]] - ChampshipData.Rank[ChampshipData.AutoId] = append(ChampshipData.Rank[ChampshipData.AutoId], &ChampshipRank{ + ChampshipData.Rank[groupIndex] = append(ChampshipData.Rank[groupIndex], &ChampshipRank{ Uid: UserData.Uid, Score: UserData.Score, Time: UserData.Time, }) - log.Debug("group AutoId:%d, Uid:%d, Score:%f, Time:%d", ChampshipData.AutoId, UserData.Uid, UserData.Score, UserData.Time) - if len(ChampshipData.Rank[ChampshipData.AutoId]) == 10 { - ChampshipData.AutoId++ - } + log.Debug("group AutoId:%d, Uid:%d, Score:%f, Time:%d", groupIndex, UserData.Uid, UserData.Score, UserData.Time) } for j := StartId; j <= ChampshipData.AutoId; j++ { // 填充机器人 RobotNum := 30 - len(ChampshipData.Rank[j]) From beda327165ffe0ccfb57554ff2ad4d688a39f4ae Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:40:20 +0800 Subject: [PATCH 86/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=96=E7=9F=BFGm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index c5f5fc00..1a0da95f 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -327,6 +327,13 @@ func ReqGmCommand_(player *Player, Command string) error { ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_MINING) MiningMod.ZeroUpdate(ActivityInfo.Id) player.MiningBackData() + case "miningSetPass": + MiningMod := player.PlayMod.getMiningMod() + MiningMod.Pass = 10 + MiningMod.Mining = 0 + MiningMod.Map = nil + MiningMod.Gem = nil + player.MiningBackData() case "catnipReload": CatnipMod := player.PlayMod.getCatnipMod() CatnipMod.ZeroUpdate(-1) From f50c7f6e8610e3b4802dcca46a94c4b1f13c816f Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 10 Mar 2026 21:41:55 +0800 Subject: [PATCH 87/87] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8C=96=E7=9F=BFGm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/gm_handler.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 1a0da95f..990c1aaf 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -329,7 +329,8 @@ func ReqGmCommand_(player *Player, Command string) error { player.MiningBackData() case "miningSetPass": MiningMod := player.PlayMod.getMiningMod() - MiningMod.Pass = 10 + Id, _ := strconv.Atoi(arg[1]) + MiningMod.Pass = Id MiningMod.Mining = 0 MiningMod.Map = nil MiningMod.Gem = nil