diff --git a/src/server/game/message_handler.go b/src/server/game/message_handler.go index 33a9bb9a..d45f874b 100644 --- a/src/server/game/message_handler.go +++ b/src/server/game/message_handler.go @@ -56,7 +56,11 @@ func (p *Player) handle(m *msg.Msg) error { switch m.Type { case msg.HANDLE_TYPE_APPLY: // 好友申请 FriendMod := p.PlayMod.getFriendMod() - FriendMod.AddFriendApply(m.From) + ok := FriendMod.AddFriendApply(m.From) + // 已申请 + if ok { + return nil + } p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT) PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) p.PushClientRes(&proto.ResFriendApplyNotify{ @@ -73,10 +77,10 @@ func (p *Player) handle(m *msg.Msg) error { Type: friend.FRIEND_NOTIFY_AGREE, Time: int32(GoUtil.Now()), }) - PlayroomMod := p.PlayMod.getPlayroomMod() - BaseMod := p.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) - p.PlayroomBackData() + // PlayroomMod := p.PlayMod.getPlayroomMod() + // BaseMod := p.PlayMod.getBaseMod() + // PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) + // p.PlayroomBackData() p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, "add_type": "接受申请", @@ -128,10 +132,6 @@ func (p *Player) handle(m *msg.Msg) error { return nil } FriendMod.AddFriend(m.From) - PlayroomMod := p.PlayMod.getPlayroomMod() - BaseMod := p.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) - p.PlayroomBackData() p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, "add_type": "发起申请", diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 08a742dc..b5d17eb6 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -372,7 +372,7 @@ func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { if p == nil || p.stop { return nil, nil } - p.Send(data.Clone()) + go p.Send(data.Clone()) // 处理完后发送消费消息 if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG { data.HandleType = msg.HANDLE_MOD_COMSUME_MSG @@ -862,6 +862,16 @@ func saveMessage(m *msg.Msg) error { messages := getMessgeUnsafe(int64(m.To)) messages.mu.Lock() defer messages.mu.Unlock() + for _, msgItem := range messages.Messages { + if msgItem == nil { + continue + } + if msgItem.UniKey == m.UniKey { + // 已存在相同消息,直接返回 + return nil + } + } + // 添加消息 messages.Messages = append(messages.Messages, m) return nil } diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 2bb2c8f5..65c43ab9 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -330,8 +330,13 @@ func (f *FriendMod) GetSimpleFriendList() []int { } // 收到申请 -func (f *FriendMod) AddFriendApply(Uid int) { +func (f *FriendMod) AddFriendApply(Uid int) bool { + ok := f.CheckApply(Uid) + if ok { + return ok + } f.ApplyList[Uid] = GoUtil.Now() + return false } // 发送申请 diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 2a7b85c9..624d1ddb 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -1049,35 +1049,6 @@ func (p *PlayroomMod) GetPetAir() map[int]*PetAirInfo { return p.NewPetAir } -// RoomPoint Get Set -func (p *PlayroomMod) GetRoomPoint() int { - return p.RoomPoint -} -func (p *PlayroomMod) SetRoomPoint(Point int) { - p.RoomPoint = Point -} -func (p *PlayroomMod) AddRoomPointInvite(lv int) { - if lv < ROOM_POINT_UNLOCK_LV { - return - } - Point := playroomCfg.GetRoomPointInvite() - p.RoomPoint += Point - if p.RoomPoint < 0 { - p.RoomPoint = 0 - } -} - -func (p *PlayroomMod) AddRoomPointAdd(lv int) { - if lv < ROOM_POINT_UNLOCK_LV { - return - } - Point := playroomCfg.GetRoomPointAdd() - p.RoomPoint += Point - if p.RoomPoint < 0 { - p.RoomPoint = 0 - } -} - func (p *PlayroomMod) BackDataTask() []*msg.DailyTask { DailyTask := make([]*msg.DailyTask, 0) for k, v := range p.DailyTask { diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index b368c3f7..ed699c53 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1200,25 +1200,25 @@ func (p *Player) GetIp() string { func (p *Player) func_exec_add() error { now := time.Now().Unix() - + // 如果是新的一秒,重置计数 if now != int64(p.func_time) { p.func_time = int(now) p.args["func_exec_count"] = 1 return nil } - + // 获取当前秒内的调用次数 count := 0 if v, ok := p.args["func_exec_count"]; ok { count = GoUtil.Int(v) } - + // 检查是否超过限制 if count >= 20 { return errors.New("func_exec_add: call limit exceeded (20 times per second)") } - + // 增加计数 p.args["func_exec_count"] = count + 1 return nil @@ -1240,9 +1240,10 @@ func (p *Player) DispatcherHandle() { case msg := <-p.msgChan: if msg != nil { p.wg.Done() - log.Debug("player %d recive msg %v", p.M_DwUin, msg) + now := time.Now() // 直接在当前 goroutine 中处理,避免创建过多 goroutine p.HandleMsg(msg.Clone()) + log.Debug("player %d recive msg %v;handle time %v", p.M_DwUin, msg, time.Since(now)) } } } diff --git a/src/server/game/register_network_func.go b/src/server/game/register_network_func.go index 5bfb581a..89a053ee 100644 --- a/src/server/game/register_network_func.go +++ b/src/server/game/register_network_func.go @@ -1915,10 +1915,6 @@ func ReqApplyFriend(player *Player, buf []byte) error { Code: msg.RES_CODE_SUCCESS, Uid: req.Uid, }) - PlayroomMod := player.PlayMod.getPlayroomMod() - BaseMod := player.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel()) - player.PlayroomBackData() return nil } @@ -1959,10 +1955,6 @@ func ReqAgreeFriend(player *Player, buf []byte) error { player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) player.FriendApplyBackData() player.FriendLogBackData() - PlayroomMod := player.PlayMod.getPlayroomMod() - BaseMod := player.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) - player.PlayroomBackData() player.PlayMod.save() return nil } @@ -3374,10 +3366,6 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, SendT: GoUtil.Now(), }) - PlayroomMod := player.PlayMod.getPlayroomMod() - BaseMod := player.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) - player.PlayroomBackData() player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, "add_type": "邀请注册", @@ -3418,10 +3406,6 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, SendT: GoUtil.Now(), }) - PlayroomMod := player.PlayMod.getPlayroomMod() - BaseMod := player.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) - player.PlayroomBackData() player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, "add_type": "邀请注册", @@ -5050,11 +5034,6 @@ func ReqAddNpc(player *Player, buf []byte) error { } player.PlayMod.save() player.FriendListBackData() - PlayroomMod := player.PlayMod.getPlayroomMod() - BaseMod := player.PlayMod.getBaseMod() - PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel()) - PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel()) - player.PlayroomBackData() player.TeLog("add_npc", map[string]interface{}{ "NpcId": int(req.NpcId), })