diff --git a/src/server/conf/charge/ChargeCfg.go b/src/server/conf/charge/ChargeCfg.go index cb4e2361..50c5ff33 100644 --- a/src/server/conf/charge/ChargeCfg.go +++ b/src/server/conf/charge/ChargeCfg.go @@ -138,15 +138,15 @@ func GetSpecialShopGrade(Money float64, Type int) int { }) } sort.Slice(l, func(i, j int) bool { - return l[i].money < l[j].money + return l[i].money > l[j].money }) for _, v := range l { - if Money < v.money { + if Money <= v.money { return v.id } } - return 0 + return l[0].id } func GetUnlockShopLv() int { diff --git a/src/server/conf/decorate/DecorateCfg.go b/src/server/conf/decorate/DecorateCfg.go index 973ab4f3..e8c2c56e 100644 --- a/src/server/conf/decorate/DecorateCfg.go +++ b/src/server/conf/decorate/DecorateCfg.go @@ -118,6 +118,16 @@ func GetOneKeyDecorateUnlockLv() int { return gamedata.GetIntValue(data, "Value") } +// 获取每次装饰增加的体力值 +func GetDecorateAddEnergy() int { + data, err := gamedata.GetDataByKey(DECORATE_CONST, "AddEnergy") + if err != nil { + log.Debug("GetDecorateAddEnergy not found") + return 0 + } + return gamedata.GetIntValue(data, "Value") +} + func GetAreaPerPExp(AreaId int) int { data, err := gamedata.GetDataByIntKey(DECORATE_AREA, AreaId) if err != nil { diff --git a/src/server/conf/playroom/playroomCfg.go b/src/server/conf/playroom/playroomCfg.go index f38cbbb1..7ceab69b 100644 --- a/src/server/conf/playroom/playroomCfg.go +++ b/src/server/conf/playroom/playroomCfg.go @@ -548,3 +548,35 @@ func GetOrderItem(Star int) map[int][]gamedata.PetOrderItem { } return r } + +func GetOrderItemList() []int { + data, err := gamedata.GetData(CFG_PLAYROOM_ORDERITEM) + if err != nil { + log.Debug("GetOrderItemList err:%v", err) + return nil + } + r := make([]int, 0) + for k := range data { + Id := GoUtil.Int(k) + if Id == 0 { + log.Debug("GetOrderItemList Id is 0") + continue + } + r = append(r, Id) + } + return r +} + +func GetPetOrderItemExpByList(ItemList []*item.Item) int { + r := 0 + for _, v := range ItemList { + data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_ORDERITEM, v.Id) + if err != nil { + // log.Debug("GetPetOrderItemExpByList err:%v", err) + continue + } + Star := gamedata.GetIntValue(data, "Star") + r += Star * v.Num + } + return r +} diff --git a/src/server/conf/server.json b/src/server/conf/server.json index 4e2d8c8e..fdb1d766 100644 --- a/src/server/conf/server.json +++ b/src/server/conf/server.json @@ -2,7 +2,7 @@ "AppID": 1, "LogLevel": "debug", "LogPath": "./log", - "TCPAddr": ":3605", + "TCPAddr": ":3601", "WSAddr": ":3566", "MySqlAddr": "127.0.0.1", "MySqlPort": "3306", diff --git a/src/server/game/FriendMgr.go b/src/server/game/FriendMgr.go index 8ccd27b1..d7cf4a5d 100644 --- a/src/server/game/FriendMgr.go +++ b/src/server/game/FriendMgr.go @@ -76,6 +76,7 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_TREASURE_RESULT, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_FACEBOOK_UNBIND, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline) + f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayerOnline) f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_GET, f.GetVarUserData) f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_SET, f.SetVarUserData) @@ -178,6 +179,9 @@ func sendToPlayerOnline(m *msg.Msg) error { } func FriendMgrSend(m1 *msg.Msg) error { + if m1.SendT == 0 { + m1.SendT = GoUtil.Now() + } m := m1.Clone() ToServer := GoUtil.GetServerIdByUid(m.To) if ToServer != conf.Server.ServerID { diff --git a/src/server/game/Gm.go b/src/server/game/Gm.go index 3a975e48..abe726a9 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/Gm.go @@ -93,7 +93,7 @@ func ReqGmCommand_(player *Player, Command string) error { player.LoginBackData() case "addChampshipLog": num, _ := strconv.Atoi(arg[1]) - player.AddLog(num, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", 1, 1)) + player.AddLog(num, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", 1, 1), GoUtil.Now()) case "serverZeroUpdate": VarMod := player.PlayMod.getVarMod() VarMod.DailyResetTime = 0 @@ -328,6 +328,19 @@ func ReqGmCommand_(player *Player, Command string) error { a := player.GetAgent() a.Close() player.ClearData() + case "resetFriend": + FriendMod := player.PlayMod.getFriendMod() + FriendMod.FriendList = make(map[int]struct{}) + FriendMod.ApplyList = make(map[int]int64) + FriendMod.Card = make(map[string]*card.CardInfo) + FriendMod.SendApply = make(map[int]int64) + FriendMod.NewFriendList = make(map[int]*friend.FriendInfo) + FriendMod.Npc = []int{} + FriendMod.Id = 0 + FriendMod.Log = make([]*friend.LogInfo, 0) + FriendMod.InitData() + FriendListBackData(player) + FriendLogBackData(player) case "addFriend": FriendMod := player.PlayMod.getFriendMod() Uid, _ := strconv.Atoi(arg[1]) diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 0a531d0f..39350ca9 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -741,6 +741,7 @@ func (p *Player) LoginBackData() { p.PushClientRes(p.PlayMod.mod_list.Base.BackData()) p.PushClientRes(p.PlayMod.mod_list.Chess.BackData()) p.PushClientRes(p.PlayMod.mod_list.Order.BackData()) + p.PushClientRes(p.PlayMod.mod_list.Card.BackData()) p.PushClientRes(p.PlayMod.mod_list.Decorate.BackData()) p.PushClientRes(p.PlayMod.mod_list.DailyTask.BackData()) p.PushClientRes(p.PlayMod.mod_list.SevenLogin.BackData()) @@ -845,7 +846,9 @@ func (p *Player) UpdateUserInfo() { func (p *Player) HandleInUserRank() { DecorateMod := p.PlayMod.getDecorateMod() - Score := DecorateMod.GetDecorateNum() + Score := float64(DecorateMod.GetDecorateNum()) + BaseMod := p.PlayMod.getBaseMod() + Score += float64(BaseMod.GetLevel()) * 1000000 // 等级加成 // 更新排行榜 m := &MsgMod.Msg{ Type: MsgMod.HANDLE_TYPE_RANK, @@ -879,7 +882,7 @@ func (p *Player) HandleInChampshipRank() { G_GameLogicPtr.ChampshipMgrSend(m) } -func (p *Player) AddLog(Uid int, Type int, Param string) { +func (p *Player) AddLog(Uid int, Type int, Param string, Time int64) { FriendMod := p.PlayMod.getFriendMod() Id := FriendMod.AddLog(Uid, Type, Param) p.PlayMod.save() @@ -889,7 +892,7 @@ func (p *Player) AddLog(Uid int, Type int, Param string) { Type: int32(Type), Param: Param, Id: int32(Id), - Time: int32(GoUtil.Now()), + Time: int32(Time), }, }) } diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index 4d0ab1bf..65607f62 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -522,13 +522,14 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) player.initAcitivity() player.BackDataActivity() player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV}) - p.p.TeLog("level_up", map[string]interface{}{ + player.TeLog("level_up", map[string]interface{}{ "after_level": BaseMod.Level, }) - p.p.TeLog("property_level_up", map[string]interface{}{ + player.TeLog("property_level_up", map[string]interface{}{ "property_level": BaseMod.Level, "property_level_reward": userCfg.GetUnlock(int(BaseMod.Level)), }) + player.HandleInUserRank() } if len(UpLevelItem) > 0 { err := player.HandleItem(UpLevelItem, msg.ITEM_POP_LABEL_LevUpReward.String()) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index cf920e89..f588187b 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -77,12 +77,14 @@ func handle(p *Player, m *msg.Msg) error { case msg.HANDLE_TYPE_INVITE_FRIEND: // 邀请好友 InviteMod := p.PlayMod.getInviteMod() InviteMod.AddInvite(m.From) + p.AddLog(m.From, friend.LOG_TYPE_FRIEND_INVITE, "", m.SendT) p.PlayMod.save() p.PushClientRes(InviteMod.NotifySuccess()) case msg.HANDLE_TYPE_SEND_CARD: // B收到A赠送的卡牌 CardInfo := m.Extra.(card.CardInfo) FriendMod := p.PlayMod.getFriendMod() FriendMod.SetCardInfo(&CardInfo) + FriendMod.Interact(CardInfo.AUid, friend.INTERACT_TYPE_CARD, m.SendT) p.PushClientRes( &proto.NotifyFriendCard{ Info: GetCardInfoMsg(&CardInfo), @@ -149,6 +151,7 @@ func handle(p *Player, m *msg.Msg) error { FriendMod := p.PlayMod.getFriendMod() CardInfo := m.Extra.(card.CardInfo) FriendMod.SetCardInfo(&CardInfo) + FriendMod.Interact(CardInfo.AUid, friend.INTERACT_TYPE_EX, m.SendT) p.PlayMod.save() p.PushClientRes( &proto.NotifyFriendCard{ @@ -200,25 +203,33 @@ func handle(p *Player, m *msg.Msg) error { BackChampship(p) case msg.HANDLE_TYPE_CHAMPSHIP_RESULT: // # 好友锦标赛结果 Extra := m.Extra.([]int) - p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", Extra[0], Extra[1])) + p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", Extra[0], Extra[1]), m.SendT) case msg.HANDLE_TYPE_TREASURE_RESULT: // # 好友宝藏结果 - p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int))) + p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT) case msg.HANDLE_TYPE_MAIL: // 邮件操作 SyncMailMsg(p) case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了 PlayroomMod := p.PlayMod.getPlayroomMod() Items := m.Item - IsChip := false + GameId := playroom.GAME_TYPE_HOOK if m.Extra != nil { - IsChip = m.Extra.(bool) + if val, ok := m.Extra.(int); ok { + GameId = val + } } - if IsChip { + if len(Items) == 0 { + return nil + } + if GameId == playroom.GAME_TYPE_HOOK { PlayroomMod.AddChip(m.From, m.SendT) + p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_WIN, fmt.Sprintf("%d_%d", Items[0].Id, Items[0].Num), m.SendT) + } else { + p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_VISIT, fmt.Sprintf("%d_%d", Items[0].Id, Items[0].Num), m.SendT) } PlayroomMod.AddMood(playroom.MOOD_TYPE_FOOD, -50) PlayroomMod.AddMood(playroom.MOOD_TYPE_CLEAN, -50) PlayroomMod.AddVisitor(m.From, m.SendT) - p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_VISIT, fmt.Sprintf("%d_%d", Items[0].Id, Items[0].Num)) + if len(Items) > 0 && Items[0].Id == item.ITEM_STAR_ID { BaseMod := p.PlayMod.getBaseMod() StarNum := BaseMod.GetStar() @@ -227,9 +238,15 @@ func handle(p *Player, m *msg.Msg) error { } else { PlayroomMod.Lose(Items) } + FriendMod := p.PlayMod.getFriendMod() + FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT) p.UpdateUserInfo() p.Kafka(PLAYROOM_LOST, map[string]interface{}{"uid": m.From, "item": Items}) p.PushClientRes(PlayroomMod.NotifyLose()) + case msg.HANDLE_TYPE_PLAYROOM_GAME: + FriendMod := p.PlayMod.getFriendMod() + p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_LOSE, "", m.SendT) + FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT) case msg.FRIEND_TREASURE_HANDLE: // # 好友宝藏 Items := make([]*item.Item, 0) if m.Extra != nil { @@ -238,9 +255,11 @@ func handle(p *Player, m *msg.Msg) error { p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String()) case msg.HANDLE_TYPE_HANDBOOK_COLLECTION: // 图鉴收集奖励 data := m.Extra.(msg.HandbookMsg) - p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK, data.Type) + p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK, data.Type, m.SendT) case msg.HANDLE_TYPE_HANDBOOK_UPVOTE: // 图鉴点赞 - p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK_UPVOTE, "") + FriendMod := p.PlayMod.getFriendMod() + FriendMod.Interact(m.From, friend.INTERACT_TYPE_UPVOTE, m.SendT) + p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK_UPVOTE, "", m.SendT) case msg.HANDLE_TYPE_SEND_CHARGE: // 收到好友赠送的充值礼包 C := &ChargeExtra{} if m.Extra != nil { @@ -251,7 +270,7 @@ func handle(p *Player, m *msg.Msg) error { mt, mc, mt_en, mc_en := mailCfg.GetChargeSendMail(PlayerSimpleData.Name) Items := ChargeItem(p, C.ChargeId) MailId := MailMod.Send(mt, "", mc, mt_en, "", mc_en, Items, mail.MAIL_TYPE_GIFT) - p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", MailId)) + p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", MailId), m.SendT) p.PushClientRes(MailMod.NotifyMail(MailId)) case msg.HANDLE_TYPE_CHARGE_RECEIVE: // 收到好友的感谢信 Content := "" @@ -262,20 +281,22 @@ func handle(p *Player, m *msg.Msg) error { MailMod := p.PlayMod.getMailMod() mt, mc, mt_en, mc_en := mailCfg.GetChargeReceiveMail(PlayerSimpleData.Name, Content) MailId := MailMod.Send(mt, "", mc, mt_en, "", mc_en, nil, mail.MAIL_TYPE_NORMAL) - p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", MailId)) + p.AddLog(m.From, friend.LOG_TYPE_CHARGE_RECEIVE, fmt.Sprintf("%d", MailId), m.SendT) p.PushClientRes(MailMod.NotifyMail(MailId)) case msg.HANDLE_TYPE_WISHLIST_SEND: // 发送愿望单请求 FriendMod := p.PlayMod.getFriendMod() FriendMod.AddWishApply(int64(m.From)) case msg.HANDLE_TYPE_PLAYROOM_UPVOTE: // playroom点赞 - p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_UPVOTE, "") + p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_UPVOTE, "", m.SendT) PlayroomMod := p.PlayMod.getPlayroomMod() PlayroomMod.AddUpvote() + FriendMod := p.PlayMod.getFriendMod() + FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT) p.UpdateUserInfo() case msg.HANDLE_TYPE_WISHLIST_AGREE: ChargeMod := p.PlayMod.getChargeMod() ChargeMod.AddWishCount() - p.AddLog(m.From, friend.LOG_TYPE_WISH, "") + p.AddLog(m.From, friend.LOG_TYPE_WISH, "", m.SendT) p.PushClientRes(ChargeMod.BackData()) case msg.HANDLE_TYPE_PLAYROOM_KISS: // playroom亲吻 p.NotifyPlayroomKiss() @@ -298,7 +319,7 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error { switch m.Type { case msg.HANDLE_TYPE_APPLY: // 好友申请 FriendMod.AddFriendApply(m.From) - p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "") + p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT) p.PushClientRes(&proto.ResFriendApplyNotify{ Player: PlayerSimpleData, Type: friend.FRIEND_NOTIFY_APPLY, @@ -318,10 +339,10 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error { "player_id": m.From, "add_type": "agree", }) - p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "") + p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "", m.SendT) case msg.HANDLE_TYPE_DEL: // 删除好友 FriendMod.DelFriend(m.From) - p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "") + p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT) p.PushClientRes(&proto.ResFriendApplyNotify{ Player: PlayerSimpleData, Type: friend.FRIEND_NOTIFY_DEL, @@ -408,6 +429,7 @@ func FriendListBackData(p *Player) { ps := G_GameLogicPtr.GetResSimplePlayerByUid(k) if ps != nil { ps.AddTime = v.AddTime + ps.Interact = FriendMod.GetInteractTime(k) fl = append(fl, ps) } } @@ -841,18 +863,36 @@ func NotifyChampshipResult(Uid, Rank int) { Type: msg.HANDLE_TYPE_CHAMPSHIP_RESULT, From: Uid, To: v, + SendT: GoUtil.Now(), Extra: []int{Rank, GoUtil.GetServerOpenDay()}, } FriendMgrSend(Msg) } } +func (player *Player) GetPetOrderItemExp() int { + OrderItemCfgList := playroomCfg.GetOrderItemList() + itemList := make([]*item.Item, 0) + ItemMod := player.PlayMod.getItemMod() + for _, v := range OrderItemCfgList { + Num := ItemMod.GetItem(v) + if Num <= 0 { + continue + } + itemList = append(itemList, &item.Item{ + Id: v, + Num: Num, + }) + } + return playroomCfg.GetPetOrderItemExpByList(itemList) +} + func (player *Player) FormatOrderReward() { Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) BaseMod := player.PlayMod.getBaseMod() DecorateMod := player.PlayMod.getDecorateMod() - ExpCoin := (Exp - BaseMod.GetExp()) * decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId()) - PExpCoin := (PExp - BaseMod.GetPExp()) * 50 + ExpCoin := (Exp-BaseMod.GetExp())*decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId()) - BaseMod.GetStar() + PExpCoin := (PExp-BaseMod.GetPExp())*50 - player.GetPetOrderItemExp() OrderMod := player.PlayMod.getOrderMod() if ExpCoin > PExpCoin || BaseMod.GetLevel() < 6 { for k, v := range OrderMod.GetOrderList() { diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 947a04bc..38960edc 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -416,7 +416,6 @@ func ReqDecorate(player *Player, buf []byte) error { }) return err } - AddItem, err := DecorateMod.Decorate(AreaId, DecorateId) // 装饰 if err != nil { player.SendErrClienRes(&msg.ResDecorate{ @@ -425,6 +424,9 @@ func ReqDecorate(player *Player, buf []byte) error { }) return err } + + EnergyItem := DecorateMod.GetDecorateAddEnergy(1) + AddItem = item.Merge(AddItem, EnergyItem) err = player.HandleItem(AddItem, msg.ITEM_POP_LABEL_DecorateAdd.String()) // 增加道具 if err != nil { player.SendErrClienRes(&msg.ResDecorate{ @@ -490,7 +492,8 @@ func ReqDecorateAll(player *Player, buf []byte) error { }) return err } - + EnergyItem := DecorateMod.GetDecorateAddEnergy(DecorateNum) + AddItem = item.Merge(AddItem, EnergyItem) err = player.HandleItem(AddItem, msg.ITEM_POP_LABEL_DecorateAdd.String()) // 增加道具 if err != nil { player.SendErrClienRes(&msg.ResDecorateAll{ @@ -1462,7 +1465,7 @@ func ReqSearchPlayer(player *Player, buf []byte) error { if player.PlayMod.getFriendMod().CheckFriend(int(v.DwUin)) { continue } - if player.PlayMod.getFriendMod().CheckApply(int(v.DwUin)) { + if player.PlayMod.getFriendMod().CheckSendApply(int(v.DwUin)) { continue } SearchPlayer := G_GameLogicPtr.GetResSimplePlayerByUid(int(v.DwUin)) @@ -1555,7 +1558,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error { Uid: req.Uid, Player: G_GameLogicPtr.GetResSimplePlayerByUid(int(req.Uid)), }) - player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "") + player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) FriendApplyBackData(player) PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod.AddRoomPointAdd() @@ -1582,7 +1585,7 @@ func ReqDelFriend(player *Player, buf []byte) error { Code: msg.RES_CODE_SUCCESS, Uid: req.Uid, }) - player.AddLog(Uid, friend.LOG_TYPE_FRIEND_DELETE, "") + player.AddLog(Uid, friend.LOG_TYPE_FRIEND_DELETE, "", GoUtil.Now()) FriendListBackData(player) player.TeLog("friend_delete", map[string]interface{}{ "player_id": Uid, @@ -1673,7 +1676,7 @@ func ReqCardGive(player *Player, buf []byte) error { Type: card.TYPE_CARD_GIVE, Status: card.STATUS_CARD_GIVE_1, } - player.AddLog(Uid, friend.LOG_TYPE_CARD_GIVE, strconv.Itoa(CardId)) + player.AddLog(Uid, friend.LOG_TYPE_CARD_GIVE, strconv.Itoa(CardId), GoUtil.Now()) err = CardMod.AddRequestCard(CardInfo) // 添加请求卡牌 if err != nil { player.SendErrClienRes(&msg.ResCardGive{ @@ -1744,6 +1747,7 @@ func ReqAgreeCardGive(player *Player, buf []byte) error { Code: msg.RES_CODE_SUCCESS, Id: req.Id, }) + player.AddLog(CardInfo.AUid, friend.LOG_TYPE_CARD_GIVE_ACCEPT, strconv.Itoa(CardInfo.CardId), GoUtil.Now()) player.PlayMod.save() player.TeLog("card_require_reply", map[string]interface{}{ "card_id": CardInfo.CardId, @@ -1804,7 +1808,7 @@ func ReqCardSend(player *Player, buf []byte) error { End: GoUtil.Now() + 86400, Extra: *CardInfo, } - player.AddLog(int(req.Uid), friend.LOG_TYPE_CARD_SEND, strconv.Itoa(CardId)) + player.AddLog(int(req.Uid), friend.LOG_TYPE_CARD_SEND, strconv.Itoa(CardId), GoUtil.Now()) player.PushClientRes(&msg.ResCardSend{ Code: msg.RES_CODE_SUCCESS, }) @@ -1837,7 +1841,7 @@ func ReqCardExchange(player *Player, buf []byte) error { End: GoUtil.Now() + 86400, Extra: *CardInfo, } - player.AddLog(int(req.Uid), friend.LOG_TYPE_CARD_EX_SEND, fmt.Sprintf("%d", int(req.CardId))) + player.AddLog(int(req.Uid), friend.LOG_TYPE_CARD_EX_SEND, fmt.Sprintf("%d", int(req.CardId)), GoUtil.Now()) player.PushClientRes(&msg.ResCardExchange{ Code: msg.RES_CODE_SUCCESS, @@ -1889,7 +1893,7 @@ func ReqSelectCardExchange(player *Player, buf []byte) error { } } FriendMod.DelCardInfo(req.Id) - player.AddLog(CardInfo.AUid, friend.LOG_TYPE_CARD_SELECT_SEND, fmt.Sprintf("%d", CardInfo.ExId)) + player.AddLog(CardInfo.AUid, friend.LOG_TYPE_CARD_SELECT_SEND, fmt.Sprintf("%d", CardInfo.ExId), GoUtil.Now()) err := player.SubCard(CardId) if err != nil { player.SendErrClienRes(&msg.ResSelectCardExchange{ @@ -1909,6 +1913,7 @@ func ReqSelectCardExchange(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_SELECT_EX_CARD, From: int(player.M_DwUin), To: CardInfo.AUid, + SendT: GoUtil.Now(), Extra: *CardInfo, } FriendMgrSend(m) @@ -1948,7 +1953,7 @@ func ReqAgreeCardExchange(player *Player, buf []byte) error { return err } } - player.AddLog(CardInfo.BUid, friend.LOG_TYPE_CARD_EX_SUCCESS_1, fmt.Sprintf("%d_%d", CardInfo.CardId, CardInfo.ExId)) + player.AddLog(CardInfo.BUid, friend.LOG_TYPE_CARD_EX_SUCCESS_1, fmt.Sprintf("%d_%d", CardInfo.CardId, CardInfo.ExId), GoUtil.Now()) CardInfo.Status = card.STATUS_CARD_EX_3 CardInfo.EndTime = 0 player.PlayMod.save() @@ -1962,6 +1967,7 @@ func ReqAgreeCardExchange(player *Player, buf []byte) error { From: int(player.M_DwUin), To: CardInfo.BUid, Extra: *CardInfo, + SendT: GoUtil.Now(), } player.PushClientRes(CardMod.NotifyCard()) player.PushClientRes(CardMod.NotifyTimes()) @@ -2001,6 +2007,7 @@ func ReqRefuseCardSelect(player *Player, buf []byte) error { From: int(player.M_DwUin), To: CardInfo.AUid, Extra: *CardInfo, + SendT: GoUtil.Now(), } FriendMgrSend(m) player.PushClientRes(&msg.ResRefuseCardSelect{ @@ -2046,6 +2053,7 @@ func ReqRefuseCardExchange(player *Player, buf []byte) error { From: int(player.M_DwUin), To: CardInfo.BUid, Extra: *CardInfo, + SendT: GoUtil.Now(), } player.PushClientRes(CardMod.NotifyCard()) player.PushClientRes(CardMod.NotifyTimes()) @@ -2069,9 +2077,7 @@ func ReqGetFriendCard(player *Player, buf []byte) error { } FriendMod.DelCardInfo(req.Id) player.AddCard(CardInfo.CardId) - // if CardInfo.ExId != 0 { - // player.AddLog(CardInfo.BUid, friend.LOG_TYPE_CARD_EX_SUCCESS_2, fmt.Sprintf("%d_%d", CardInfo.ExId, CardInfo.CardId)) - // } + player.AddLog(CardInfo.AUid, friend.LOG_TYPE_CARD_SEND_ACCEPT, fmt.Sprintf("%d", CardInfo.CardId), GoUtil.Now()) player.PlayMod.save() player.PushClientRes(&msg.ResGetFriendCard{ Code: msg.RES_CODE_SUCCESS, @@ -2090,6 +2096,7 @@ func ReqRank(player *Player, buf []byte) error { From: int(player.M_DwUin), Type: MsqMod.HANDLE_TYPE_RANK_INFO, Extra: RankMsg{RankType: int(req.Type)}, + SendT: GoUtil.Now(), } RankInfo := G_GameLogicPtr.RankMgrCall(m).(*RankInfo) res := make(map[int32]*msg.ResPlayerSimple) @@ -2719,9 +2726,10 @@ func ReqSelfInvited(player *Player, buf []byte) error { req := &msg.ReqSelfInvited{} proto.Unmarshal(buf, req) G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ - Type: MsqMod.HANDLE_TYPE_INVITE_FRIEND, - From: int(player.M_DwUin), - To: int(req.InviterId), + Type: MsqMod.HANDLE_TYPE_INVITE_FRIEND, + From: int(player.M_DwUin), + To: int(req.InviterId), + SendT: GoUtil.Now(), }) player.PushClientRes(&msg.ResSelfInvited{ ResultCode: 1, @@ -2779,9 +2787,10 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { ResultCode: 1, }) G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ - From: int(player.M_DwUin), - To: Uid, - Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, + From: int(player.M_DwUin), + To: Uid, + Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, + SendT: GoUtil.Now(), }) PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod.AddRoomPointAdd() @@ -2818,9 +2827,10 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { ResultCode: 1, }) G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ - From: int(player.M_DwUin), - To: Uid, - Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, + From: int(player.M_DwUin), + To: Uid, + Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, + SendT: GoUtil.Now(), }) PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod.AddRoomPointAdd() @@ -3215,7 +3225,7 @@ func ReqPlayroomSetRoom(player *Player, buf []byte) error { return nil } -// 玩游戏 +// 玩游戏 Desprecated func ReqPlayroomGame(player *Player, buf []byte) error { req := &msg.ReqPlayroomGame{} proto.Unmarshal(buf, req) @@ -3251,9 +3261,13 @@ func ReqPlayroomGame(player *Player, buf []byte) error { }) return err } + G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + From: int(player.M_DwUin), + To: Target, + Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME, + SendT: GoUtil.Now(), + }) player.PlayMod.save() - // PlayroomBackData(player) - // PlayroomVisit(player, PlayroomMod.GetTarget()) ItemsMsg := make(map[int32]*msg.ItemInfo, 0) for k, v := range PlayroomMod.GameReward { ItemsMsg[int32(k)] = &msg.ItemInfo{ @@ -3290,7 +3304,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, SendT: GoUtil.Now(), Item: Items, - Extra: true, + Extra: PlayroomMod.GetGameId(), }) G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) PlayroomMod.ResetGame() @@ -3481,7 +3495,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, SendT: GoUtil.Now(), Item: Items, - Extra: false, + Extra: PlayroomMod.GetGameId(), }) player.PlayMod.save() PlayroomBackData(player) @@ -3826,6 +3840,7 @@ func ReqFriendTreasureFilp(player *Player, buf []byte) error { To: int(Uid), Type: MsqMod.HANDLE_TYPE_TREASURE_RESULT, Extra: Items[0].Num, + SendT: GoUtil.Now(), }) } @@ -4195,13 +4210,17 @@ func ReqAddNpc(player *Player, buf []byte) error { proto.Unmarshal(buf, req) FriendMod := player.PlayMod.getFriendMod() FriendMod.SetNpc(int(req.NpcId)) + if len(FriendMod.Npc) == 1 { // 首次添加NPC 视为邀请好友成功 + InviteMod := player.PlayMod.getInviteMod() + InviteMod.AddInvite(int(req.NpcId)) + } player.PlayMod.save() FriendListBackData(player) PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod.AddRoomPointInvite() PlayroomMod.AddRoomPointAdd() PlayroomBackData(player) - player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId)) + 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, diff --git a/src/server/game/Type.go b/src/server/game/Type.go index e67ab718..0e5f23f6 100644 --- a/src/server/game/Type.go +++ b/src/server/game/Type.go @@ -77,6 +77,11 @@ type ChargeExtra struct { ChargeId int // 充值id } +type GameResult struct { + t int // 游戏类型 + r int // 1:赢 2:输 3:平 +} + func init() { gob.Register(&limitedTimeEvent.MoneyCat{}) gob.Register(&limitedTimeEvent.LuckyCat{}) diff --git a/src/server/game/mod/card/Card.go b/src/server/game/mod/card/Card.go index 63b51060..7901c776 100644 --- a/src/server/game/mod/card/Card.go +++ b/src/server/game/mod/card/Card.go @@ -6,6 +6,7 @@ import ( cardCfg "server/conf/card" "server/game/mod/item" "server/msg" + "server/pkg/github.com/name5566/leaf/log" ) type CardMod struct { @@ -236,6 +237,10 @@ func (c *CardMod) BackData() *msg.ResCardInfo { } ExUid = append(ExUid, int64(k)) } + + if c.EndTime < GoUtil.Now() { + log.Debug("CardMod BackData EndTime < Now, reset card data") + } return &msg.ResCardInfo{ CardList: cardList, ExStar: int32(c.ExchangeStar), @@ -425,10 +430,10 @@ func (c *CardMod) ExchangeCard(From, To, CardId int) (*CardInfo, error) { if err != nil { return nil, err } - _, ok := c.ExCard[To] - if ok { - return nil, fmt.Errorf("ExchangeCard already exchange") - } + // _, ok := c.ExCard[To] + // if ok { + // return nil, fmt.Errorf("ExchangeCard already exchange") + // } CardInfo := &CardInfo{ Id: Id, AUid: From, diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 9b18369a..224689ee 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -112,7 +112,7 @@ func (c *ChargeMod) ZeroUpdate(Emit []int) { SpecialShopCount := chargeCfg.GetSpecialShopCount() for i := 1; i <= 2; i++ { if c.Total == 0 { - c.SpecialShop[i] = &SepcialShop{Grade: SpecialGrade, Count: 2} + c.SpecialShop[i] = &SepcialShop{Grade: SpecialGrade, Count: 1} continue } m := c.SpecialCharge @@ -299,11 +299,12 @@ func (c *ChargeMod) InitChessShop(Emit []int) { for _, v := range ColorList { ColorType := mergeDataCfg.GetColorType(v) r := make([]*Rand, 0) - if ColorType == mergeDataCfg.CHESS_PRODUCT_MAIN_TYPE { + switch ColorType { + case mergeDataCfg.CHESS_PRODUCT_MAIN_TYPE: r = getChessMainRand(v) - } else if ColorType == mergeDataCfg.CHESS_PRODUCT_SECONDARY_TYPE { + case mergeDataCfg.CHESS_PRODUCT_SECONDARY_TYPE: r = getChessSecondaryRand(v) - } else if ColorType == mergeDataCfg.CHESS_PRODUCT_SUB_TYPE { + case mergeDataCfg.CHESS_PRODUCT_SUB_TYPE: r = getChessSubRand(v) } RandList = append(RandList, r...) diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index 15e91a71..5e41538a 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -48,6 +48,12 @@ func (d *Decorate) Decorate(areaId int, decorateId int) ([]*item.Item, error) { return Item, nil } +// 获取装饰增加体力 +func (d *Decorate) GetDecorateAddEnergy(cnt int) []*item.Item { + EnergyNum := decorateCfg.GetDecorateAddEnergy() + return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, EnergyNum*cnt)} +} + // 获取装饰消耗 func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int) { Item := decorateCfg.GetStarCost(AreaId, DecorateId) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index b65195e5..86527893 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -22,7 +22,13 @@ type FriendMod struct { } type FriendInfo struct { - AddTime int64 + AddTime int64 + Interact []*Interact // 拜访记录 +} + +type Interact struct { + VisitTime int64 // 拜访时间 + Type int // 1:拜访 2:点赞 } type ApplyInfo struct { @@ -31,6 +37,15 @@ type ApplyInfo struct { Uid int64 } +// 24小时内与玩家进行过以下互动的用户,若被选中参加本次宠物宝藏,在其头像旁添加礼物盒 +const ( + INTERACT_TYPE_VISIT = 1 // 拜访过玩家的Pet Playroom并进行过小游戏或点赞的用户 + INTERACT_TYPE_UPVOTE = 2 // 为玩家的图鉴全收集信息点过赞的用户 + INTERACT_TYPE_CARD = 3 // 向玩家赠送过卡牌的用户 + INTERACT_TYPE_EX = 4 // 向玩家发起过卡牌交换 + INTERACT_TYPE_WISH = 5 // 邀请玩家一同参加活动的用户 +) + const ( LOG_TYPE_FRIEND_APPLY = 1 // 收到申请好友 LOG_TYPE_FRIEND_BECOME = 2 // 成为好友 @@ -44,7 +59,7 @@ const ( LOG_TYPE_CARD_EX_SUCCESS_1 = 10 // 卡牌交换成功 LOG_TYPE_CARD_EX_SUCCESS_2 = 11 // 卡牌交换成功 LOG_TYPE_FRIEND_DELETE = 14 // 删除好友 - LOG_TYPE_PLAYROOM_VISIT = 15 // 拜访玩家 + LOG_TYPE_PLAYROOM_VISIT = 15 // 非小猫游戏,他人偷走了玩家的猫币 LOG_TYPE_HANDBOOK = 16 // 图鉴收集 LOG_TYPE_HANDBOOK_UPVOTE = 17 // 图鉴点赞 LOG_TYPE_CHARGE_SEND = 18 // 赠送充值礼物 @@ -54,6 +69,11 @@ const ( LOG_TYPE_PLAYROOM_UPVOTE = 22 // playroom点赞 LOG_TYPE_PLAYROOM_CHAMPSHIP = 23 // 竞标赛排名 LOG_TYPE_TREASURE = 24 // 好友宝藏 + LOG_TYPE_CARD_SEND_ACCEPT = 25 // 收到赠送卡牌 + LOG_TYPE_PLAYROOM_CAT_WIN = 26 // 小猫游戏,给小猫成功装箱 + LOG_TYPE_PLAYROOM_CAT_LOSE = 27 // 小猫游戏,装箱小猫未成功 + LOG_TYPE_CARD_GIVE_ACCEPT = 28 // 接受卡牌请求 + LOG_TYPE_FRIEND_INVITE = 29 // 邀请注册 ) const ( @@ -117,6 +137,36 @@ func (f *FriendMod) SetSyncId(Id int64) { f.Id = Id } +func (f *FriendMod) Interact(id, t int, T int64) { + if _, ok := f.NewFriendList[id]; !ok { + return + } + for _, v := range f.NewFriendList[id].Interact { + if v.Type == t && v.VisitTime < T { + v.VisitTime = T + return + } + } + f.NewFriendList[id].Interact = append(f.NewFriendList[id].Interact, &Interact{ + VisitTime: T, + Type: t, + }) +} + +func (f *FriendMod) GetInteractTime(id int) int64 { + if _, ok := f.NewFriendList[id]; !ok { + return 0 + } + LastTime := int64(0) + // 获取最近一次拜访或点赞的时间 + for _, v := range f.NewFriendList[id].Interact { + if v.VisitTime > LastTime { + LastTime = v.VisitTime + } + } + return LastTime +} + func (f *FriendMod) AddFriend(id int) { f.NewFriendList[id] = &FriendInfo{ AddTime: GoUtil.Now(), diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 3c6387a5..3c8e36ac 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -92,6 +92,7 @@ const ( HANDLE_TYPE_VAR_USER_GET // 获取玩家数据 HANDLE_TYPE_PLAYROOM_KISS // playroom亲吻 + HANDLE_TYPE_PLAYROOM_GAME // playroom游戏 ) const ( diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 279ab285..bd95a0fc 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -466,6 +466,9 @@ func (p *PlayroomMod) ResetGame() { p.InteractNum = 0 p.RevengeUid = 0 } +func (p *PlayroomMod) GetGameId() int { + return p.GameId +} func (p *PlayroomMod) ResetLose() { p.LoseItem = make([]*item.Item, 0) diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index a6fb7d05..a7cadce8 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -12149,6 +12149,7 @@ type ResPlayerSimple struct { Facebook string `protobuf:"bytes,9,opt,name=Facebook,proto3" json:"Facebook,omitempty"` Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情 AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -12260,6 +12261,13 @@ func (x *ResPlayerSimple) GetAddTime() int64 { return 0 } +func (x *ResPlayerSimple) GetInteract() int64 { + if x != nil { + return x.Interact + } + return 0 +} + type ResPlayerRank struct { state protoimpl.MessageState `protogen:"open.v1"` Uid int64 `protobuf:"varint,1,opt,name=Uid,proto3" json:"Uid,omitempty"` @@ -24222,7 +24230,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x03Uid\x18\x01 \x01(\tR\x03Uid\"T\n" + "\x0fResSearchPlayer\x12\x12\n" + "\x04Code\x18\x01 \x01(\x05R\x04Code\x12-\n" + - "\x04List\x18\x02 \x03(\v2\x19.tutorial.ResPlayerSimpleR\x04List\"\xf3\x02\n" + + "\x04List\x18\x02 \x03(\v2\x19.tutorial.ResPlayerSimpleR\x04List\"\x8f\x03\n" + "\x0fResPlayerSimple\x12\x10\n" + "\x03Uid\x18\x01 \x01(\x03R\x03Uid\x12\x12\n" + "\x04Name\x18\x02 \x01(\tR\x04Name\x12\x12\n" + @@ -24235,7 +24243,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\bFacebook\x18\t \x01(\tR\bFacebook\x12:\n" + "\x05Emoji\x18\n" + " \x03(\v2$.tutorial.ResPlayerSimple.EmojiEntryR\x05Emoji\x12\x18\n" + - "\aAddTime\x18\v \x01(\x03R\aAddTime\x1a8\n" + + "\aAddTime\x18\v \x01(\x03R\aAddTime\x12\x1a\n" + + "\bInteract\x18\f \x01(\x03R\bInteract\x1a8\n" + "\n" + "EmojiEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\x05R\x03key\x12\x14\n" +