From bf5cbc9d5d3420429196d37ec6e1a651c4fc0123 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:26:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=85=E5=80=BC=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/champship/ChampshipCfg.go | 15 ++++++ src/server/game/ChargeFunc.go | 14 +++--- src/server/game/Player.go | 11 +++++ src/server/game/RegisterNetworkFunc.go | 37 ++++++++++++++- src/server/game/mod/friend/Friend.go | 58 ++++++++++++++++++++++- 5 files changed, 125 insertions(+), 10 deletions(-) diff --git a/src/server/conf/champship/ChampshipCfg.go b/src/server/conf/champship/ChampshipCfg.go index 1e409745..82851c52 100644 --- a/src/server/conf/champship/ChampshipCfg.go +++ b/src/server/conf/champship/ChampshipCfg.go @@ -90,3 +90,18 @@ func GetRankReward(Rank int) []*item.Item { } return nil } + +func GetMaxRewardId() int { + data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT) + if err != nil { + return 0 + } + MaxId := 0 + for k := range data { + Id := GoUtil.Int(k) + if Id > MaxId { + MaxId = Id + } + } + return MaxId +} diff --git a/src/server/game/ChargeFunc.go b/src/server/game/ChargeFunc.go index 04a22d91..fff89eb1 100644 --- a/src/server/game/ChargeFunc.go +++ b/src/server/game/ChargeFunc.go @@ -20,6 +20,7 @@ func Charge(p *Player, ChargeId int) { PlayroomFire(p, ChargeId) // 游乐场 ActivityFire(p, ChargeId) // 活动礼包 ADPetWorkFire(p, ChargeId) // 广告宠物工作 + PassFire(p, ChargeId) OrderMod := p.PlayMod.getOrderMod() OrderMod.SetIsCharge() // 设置订单模块为充值状态 p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PURCHASE, A: []interface{}{}}) @@ -38,13 +39,12 @@ func SendCharge(p *Player, d *ChargeExtra) { func ADPetWorkFire(p *Player, ChargeId int) { ChargeMod := p.PlayMod.getChargeMod() Item := ChargeMod.FireAdReward(ChargeId) - if Item == nil { - return - } - err := p.HandleItem(Item, msg.ITEM_POP_LABEL_ActivityGift.String()) - if err != nil { - log.Debug("ChargeFire err : %s", err) - return + if Item != nil { + err := p.HandleItem(Item, msg.ITEM_POP_LABEL_ActivityGift.String()) + if err != nil { + log.Debug("ChargeFire err : %s", err) + return + } } p.PlayMod.save() p.PushClientRes(ChargeMod.BackData()) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 5fe4d268..abed43f3 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -20,6 +20,7 @@ import ( playroomCfg "server/conf/playroom" "server/db" "server/game/mod/activity" + "server/game/mod/friend" "server/game/mod/item" "server/game/mod/limitedTimeEvent" MsgMod "server/game/mod/msg" @@ -678,6 +679,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { "avatar_id": Effect[0], "income_from": Label, }) + FriendMod := p.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_NEW_AVATAR_FRAME, "") p.PlayerDecoLog("avatar", Effect[0], Label) BackDataType[item.ITEM_TYPE_AVATAR] = struct{}{} case item.ITEM_TYPE_EMOJI: // 表情 @@ -687,6 +690,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { "emoji_id": Effect[0], "income_from": Label, }) + FriendMod := p.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_NEW_EMOTION, "") p.PlayerDecoLog("emoji", Effect[0], Label) BackDataType[item.ITEM_TYPE_EMOJI] = struct{}{} case item.ITEM_TYPE_FACE: // 头像 @@ -696,6 +701,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { "face_id": Effect[0], "income_from": Label, }) + FriendMod := p.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_NEW_AVATAR, "") p.PlayerDecoLog("face", Effect[0], Label) BackDataType[item.ITEM_TYPE_FACE] = struct{}{} case item.ITEM_TYPE_ACTIVITY_RACE: // 活动竞速 @@ -719,6 +726,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { PlayroomMod.AddCollect(Effect, Label) BackDataType[item.ITEM_TYPE_PLAYROOM_DECORATION] = struct{}{} Type, Name := playroomCfg.GetDecoInfo(Effect) + FriendMod := p.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_NEW_DECORATION, "") p.TeLog("room_deco_get", map[string]interface{}{ "room_deco_type": Type, "room_deco_name": Name, @@ -731,6 +740,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { BackDataType[item.ITEM_TYPE_PLAYROOM_DRESS] = struct{}{} Type := playroomCfg.GetDressPart(Effect) Name := playroomCfg.GetDressName(Effect) + FriendMod := p.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_NEW_COSTUME, "") p.TeLog("pet_deco_get", map[string]interface{}{ "pet_deco_type": Type, "pet_deco_name": Name, diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 5d41b3ac..cf94dff8 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -7,6 +7,7 @@ import ( "server/GoUtil" "server/conf" cardCfg "server/conf/card" + champshipCfg "server/conf/champship" collectCfg "server/conf/collect" decorateCfg "server/conf/decorate" emojiCfg "server/conf/emoji" @@ -491,6 +492,19 @@ func ReqDecorate(player *Player, buf []byte) error { "deco_step_id": fmt.Sprintf("%d_%d", AreaId, DecorateId), "material_cost": PartItem, }) + FriendMod := player.PlayMod.getFriendMod() + if AreaId == 1 && DecorateId == 20 { + FriendMod.AddActLog(friend.ACT_LOG_TYPE_COMPLETE_RESTROOM, "") + } + if AreaId == 1 && DecorateId == 29 { + FriendMod.AddActLog(friend.ACT_LOG_TYPE_COMPLETE_RESTAURANT, "") + } + if AreaId == 1 && DecorateId == 36 { + FriendMod.AddActLog(friend.ACT_LOG_TYPE_COMPLETE_BATHROOM, "") + } + if AreaId == 1 && DecorateId == 44 { + FriendMod.AddActLog(friend.ACT_LOG_TYPE_COMPLETE_CLOAKROOM, "") + } player.PlayMod.save() player.PushClientRes(DecorateMod.BackData()) @@ -1077,7 +1091,8 @@ func ReqCardCollectReward(player *Player, buf []byte) error { }) return err } - + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_COMPLETE_CARD_ALBUM, fmt.Sprintf("%d", int(req.Color))) if chess != 0 { player.PlayMod.getChessMod().AddChessBuff(chess) player.PushClientRes(player.PlayMod.getOrderMod().BackData()) @@ -1158,6 +1173,8 @@ func ReqAllCollectReward(player *Player, buf []byte) error { }) return err } + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_COMPLETE_ALL_CARDS, "all") player.PlayMod.save() player.TeLog("ReqAllCollectReward", map[string]interface{}{ "item_list": itemList, @@ -2708,6 +2725,11 @@ func ReqChampshipReward(player *Player, buf []byte) error { player.PushClientRes(&msg.ResChampshipReward{ Code: msg.RES_CODE_SUCCESS, }) + MaxId := champshipCfg.GetMaxRewardId() + if MaxId == ChampshipMod.Reward { + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_CHAMPIONSHIP_PRIZE, "") + } player.TeLog("championship_reward", map[string]interface{}{ "season_id": GoUtil.ZeroTimestamp(), "champship_step_id": ChampshipMod.Reward, @@ -2871,6 +2893,10 @@ func ReqChampshipRankReward(player *Player, buf []byte) error { }) return err } + if MyLastRank >= 5 { + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_CHAMPIONSHIP_RANK, GoUtil.String(MyLastRank)) + } player.PlayMod.save() BackChampship(player) player.PushClientRes(&msg.ResChampshipRankReward{ @@ -3596,8 +3622,9 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { "is_chip": true, "item_list": Items, }) + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE_1, "") PlayroomMod.ResetGame() - player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward") PlayroomBackData(player) player.PlayMod.save() @@ -3778,6 +3805,10 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) && Result == playroom.FLIP_TYPE_GOLD { player.GetPetThiefReward(Target) } + if Result == playroom.FLIP_TYPE_GOLD { + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE, "") + } err = player.HandleItem(Items1, msg.ITEM_POP_LABEL_PlayroomFlip.String()) if err != nil { player.SendErrClienRes(&msg.ResPlayroomFlip{ @@ -4238,6 +4269,8 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { ) return err } + FriendMod := player.PlayMod.getFriendMod() + FriendMod.AddActLog(friend.ACT_LOG_TYPE_OPEN_PET_TREASURE, "") player.TeLog("pet_treasure_open", map[string]interface{}{ "pet_treasure_step": FriendTreasureMod.Shift, "pet_treasure_box": FriendTreasureMod.BoxItems, diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index c59119d5..403be0b1 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -10,7 +10,7 @@ import ( ) type FriendMod struct { - FriendList map[int]struct{} // 好友列表 + FriendList map[int]struct{} // TODO 废弃 好友列表 NewFriendList map[int]*FriendInfo // 好友列表 ApplyList map[int]int64 // 好友请求列表 SendApply map[int]int64 // 发送的申请 @@ -21,6 +21,13 @@ type FriendMod struct { Id int64 // 已同步msg ID Npc []int // npc id Bubble map[int]*BubbleInfo // 气泡 + ActivityLog []*ActLogInfo // 活动日志 +} + +type ActLogInfo struct { + Type int + Time int64 + Param string } type BubbleInfo struct { @@ -97,6 +104,43 @@ const ( APPLY_TYPE_WISH = 1 // 心愿单请求 ) +const ( + ACT_LOG_TYPE_FIRST_LOGIN = 1 // 首次登入游戏 + ACT_LOG_TYPE_COMPLETE_RESTROOM = 2 // 完成休息室 + ACT_LOG_TYPE_COMPLETE_RESTAURANT = 3 // 完成餐厅 + ACT_LOG_TYPE_COMPLETE_BATHROOM = 4 // 完成浴室 + ACT_LOG_TYPE_COMPLETE_CLOAKROOM = 5 // 完成衣帽间 + ACT_LOG_TYPE_GET_NEW_AVATAR = 6 // 获得新头像 + ACT_LOG_TYPE_GET_NEW_AVATAR_FRAME = 7 // 获得新头像框 + ACT_LOG_TYPE_GET_NEW_EMOTION = 8 // 获得新表情 + ACT_LOG_TYPE_GET_NEW_DECORATION = 9 // 获得新装饰品 + ACT_LOG_TYPE_GET_NEW_COSTUME = 10 // 获得新服装 + ACT_LOG_TYPE_COMPLETE_CARD_ALBUM = 11 // 完成卡册收集 + ACT_LOG_TYPE_COMPLETE_ALL_CARDS = 12 // 完成全卡牌收集 + ACT_LOG_TYPE_GET_CHAMPIONSHIP_RANK = 13 // 获得锦标赛名次 + ACT_LOG_TYPE_GET_CHAMPIONSHIP_PRIZE = 14 // 获得锦标赛大奖 + ACT_LOG_TYPE_GET_LIMITED_ACTIVITY_PRIZE = 15 // 获得限时活动大奖 + ACT_LOG_TYPE_JOIN_FRIEND_COOP_ACTIVITY = 16 // 参加好友合作类活动 + ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE = 17 // 获得拜访小游戏大奖 翻牌 + ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE_1 = 18 // 获得拜访小游戏大奖 除了翻牌 + ACT_LOG_TYPE_OPEN_PET_TREASURE = 19 // 打开宠物宝藏 + ACT_LOG_TYPE_VISIT_UPVOTE = 20 // 拜访时点赞 + ACT_LOG_TYPE_COMPLETE_HANDBOOK_ACHIEVEMENT = 21 // 完成图鉴收集成就 + ACT_LOG_TYPE_COMPLETE_CHAPTER_SCENES = 22 // 完成第X章所有场景 + ACT_LOG_TYPE_LOST_USER_RETURN = 23 // 流失用户回归 + ACT_LOG_TYPE_ACCEPT_MY_INVITE_REGISTER = 24 // 接受"我"的邀请注册 + ACT_LOG_TYPE_BECOME_MY_FRIEND = 25 // 成为"我"的好友 + ACT_LOG_TYPE_SEND_CARD_TO_ME = 26 // 向"我"赠送卡牌 + ACT_LOG_TYPE_CARD_EXCHANGE_WITH_ME = 27 // 与"我"达成卡牌交换 + ACT_LOG_TYPE_APPEAR_IN_MY_PET_TREASURE = 28 // 出现在"我"的宠物宝藏中并被选中 + ACT_LOG_TYPE_VISIT_MY_CAT_PRIVATE_TREASURE = 29 // 拜访"我"并玩了猫猫私房宝 + ACT_LOG_TYPE_VISIT_MY_OTHER_GAME_WIN = 30 // 拜访"我"并玩了猫猫私房宝以外的小游戏,成功装箱 + ACT_LOG_TYPE_VISIT_MY_OTHER_GAME_LOSE = 31 // 拜访"我"并玩了猫猫私房宝以外的小游戏,未成功装箱 + ACT_LOG_TYPE_UPVOTE_MY_COLLECTION_INFO = 32 // 为"我"的全收集信息点赞 + ACT_LOG_TYPE_UPVOTE_MY_ROOM = 33 // 为"我"的房间点赞 + ACT_LOG_TYPE_JOIN_COOP_ACTIVITY_WITH_ME = 34 // 与"我"一起参加好友合作类活动 +) + type LogInfo struct { Id int Uid int @@ -109,6 +153,7 @@ type LogInfo struct { func (f *FriendMod) InitData() { if f.FriendList == nil { + f.AddActLog(ACT_LOG_TYPE_FIRST_LOGIN, "") f.FriendList = make(map[int]struct{}) } if f.ApplyList == nil { @@ -328,6 +373,17 @@ func (f *FriendMod) ResetGoldCardEx() { } } +func (f *FriendMod) AddActLog(Type int, Param string) { + f.ActivityLog = append(f.ActivityLog, &ActLogInfo{ + Type: Type, + Time: GoUtil.Now(), + Param: Param, + }) + if len(f.ActivityLog) > 20 { + f.ActivityLog = f.ActivityLog[len(f.ActivityLog)-20:] + } +} + func (f *FriendMod) Upvote(Id int) ([]*item.Item, int, error) { info := &LogInfo{} for _, v := range f.Log {