diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 52892dbf..4cd6b8a0 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -377,6 +377,7 @@ func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData { Idstr := strconv.Itoa(Id) Value, _ := db.RedisGetKey(Idstr) player := &PlayerSimpleData{} + player.Playroom = make(map[int]int) player.Uid = Id if Value == "" { p := new(Player) diff --git a/src/server/game/LimitedTimeTrigger.go b/src/server/game/LimitedTimeTrigger.go index b64a4d16..55e317b8 100644 --- a/src/server/game/LimitedTimeTrigger.go +++ b/src/server/game/LimitedTimeTrigger.go @@ -150,5 +150,24 @@ func LimitedTimePlayroomTrigger(p *Player, Id int) { p.SendClientRes() }, "Playroom") } - +} + +func LimitedTimePlayroomWorkTrigger(p *Player) { + PlayroomMod := p.PlayMod.getPlayroomMod() + EndTime := PlayroomMod.Endtime + Now := GoUtil.Now() + if EndTime > 0 && EndTime <= Now { + PlayroomMod.ResetWork() + p.PlayMod.save() + PlayroomBackData(p) + p.SendClientRes() + return + } + if EndTime > 0 { + NextSecond := EndTime - GoUtil.Now() + p.CallEvent(time.Duration(NextSecond)*time.Second, func() { + LimitedTimePlayroomWorkTrigger(p) + p.SendClientRes() + }, "PlayroomWork") + } } diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 89b9dc75..2b46e930 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -344,6 +344,7 @@ func (p *Player) Login() { LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_ENTER) LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_FOOD) LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_CLEAN) + LimitedTimePlayroomWorkTrigger(p) ActivityLogin(p) p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime) } @@ -714,6 +715,10 @@ func (p *Player) GetSimpleData(Uid int, simple *PlayerSimpleData) error { simple.Login = int64(Base.Data.LoginTime) simple.Loginout = int64(Base.Data.LogoutTime) simple.FaceBook = Base.Data.FaceBookId + simple.FaceBookPic = p.PlayMod.getBaseMod().FacebookUrl + simple.Playroom = p.PlayMod.getPlayroomMod().Room + simple.Chess = p.PlayMod.getChessMod().GetChessList() + simple.WorkStart = p.PlayMod.getPlayroomMod().Starttime return nil } @@ -732,6 +737,7 @@ func (p *Player) UpdateUserInfo() { simple.FaceBookPic = p.PlayMod.getBaseMod().FacebookUrl simple.Playroom = p.PlayMod.getPlayroomMod().Room simple.Chess = p.PlayMod.getChessMod().GetChessList() + simple.WorkStart = p.PlayMod.getPlayroomMod().Starttime value, _ := json.Marshal(simple) IdStr := strconv.Itoa(int(p.M_DwUin)) db.RedisSetKey(IdStr, string(value), 0) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 6db355fa..ea14bbea 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -221,6 +221,7 @@ func handle(p *Player, m *msg.Msg) error { p.HandleLoseItem(Items, "") } else { PlayroomMod.Lose(Items) + p.PushClientRes(PlayroomMod.NotifyLose()) } } return nil @@ -476,6 +477,7 @@ func PlayroomOrderTrigger(p *Player) error { } PlayroomMod := p.PlayMod.getPlayroomMod() PlayroomMod.CreateOrderReward(Star, p.PlayMod.getItemMod()) + PlayroomBackData(p) p.PlayMod.save() return nil } @@ -493,15 +495,7 @@ func PlayroomBackData(p *Player) { if ps == nil { continue } - if FriendMod.CheckFriend(k) { - FriendList = append(FriendList, &proto.FriendRoom{ - Uid: int32(k), - Name: ps.Name, - Face: int32(ps.Face), - Avatar: int32(ps.Avatar), - Times: int32(v.Times), - }) - } else { + if !FriendMod.CheckFriend(k) { Opponent = append(Opponent, &proto.RoomOpponent{ Uid: int32(k), Name: ps.Name, @@ -511,6 +505,21 @@ func PlayroomBackData(p *Player) { }) } } + Friend := FriendMod.GetFriendList() + for _, v := range Friend { + ps := G_GameLogicPtr.GetSimplePlayerByUid(v) + if ps == nil { + continue + } + Times, _ := PlayroomMod.GetVisitorInfo(v) + FriendList = append(FriendList, &proto.FriendRoom{ + Uid: int32(v), + Name: ps.Name, + Face: int32(ps.Face), + Avatar: int32(ps.Avatar), + Times: int32(Times), + }) + } r.Opponent = Opponent r.Friend = FriendList Collect := make([]int32, 0) @@ -534,12 +543,18 @@ func PlayroomVisit(p *Player, Uid int) { PlayroomMod := p.PlayMod.getPlayroomMod() r := &proto.ResPlayroomInfo{} PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Uid) + Now := GoUtil.Now() + Work := false + if PlayerData.WorkStart > 0 && PlayerData.WorkStart+86400 > Now { + Work = true + } r.Uid = int32(Uid) r.Name = PlayerData.Name r.Face = int32(PlayerData.Face) r.Avatar = int32(PlayerData.Avatar) r.Playroom = GoUtil.MapIntToInt32(PlayerData.Playroom) r.GameId = int32(PlayroomMod.GameId) + r.Defense = Work Items := make(map[int32]*proto.ItemInfo, 0) for k, v := range PlayroomMod.GameReward { Items[int32(k)] = &proto.ItemInfo{ @@ -628,6 +643,9 @@ func EmitRetireTrigger1(p *Player) { EmitId := make(map[string]struct{}, 0) for _, v := range EmitList { Emit_Id := mergeDataCfg.GetEmitId(v) + if Emit_Id == "" { + continue + } EmitId[Emit_Id] = struct{}{} } EmitId1 := make([]string, 0) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 9f40c3b9..f5b6ac79 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -2738,6 +2738,12 @@ func ReqPlayroomInfo(args []interface{}) error { if req.Uid == 0 { Targer = PlayroomMod.GetTarget() } + if req.Uid == -1 { + Targer = GetVisitorPlayer(player) + } + if Targer == 0 { + return fmt.Errorf("ReqPlayroomInfo no target") + } PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer) PlayroomMod.SetTarget(Targer) if PlayerData.Loginout < GoUtil.Now()-300 { @@ -2905,7 +2911,8 @@ func ReqPlayroomSelectReward(args []interface{}) error { func ReqPlayroomLose(args []interface{}) error { _, player, _ := ParseArgs(args) PlayroomMod := player.PlayMod.getPlayroomMod() - PlayroomMod.ResetGame() + PlayroomMod.ResetLose() + player.PushClientRes(PlayroomMod.NotifyLose()) return nil } @@ -2923,6 +2930,11 @@ func ReqPlayroomWork(args []interface{}) error { }) return err } + // 开始工作 设置定时器 + if Items != nil { + LimitedTimePlayroomWorkTrigger(player) + player.UpdateUserInfo() + } err = player.HandleItem(Items, "playroomWork") if err != nil { player.SendErrClienRes(&msg.ResPlayroomWork{ @@ -3016,7 +3028,12 @@ func ReqPlayroomFlip(args []interface{}) error { }) return err } - err = player.HandleItem(Items, "playroomFlip") + Items1 := Items + LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() + if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) { + Items1 = item.Merge(Items1, Items1) + } + err = player.HandleItem(Items1, "playroomFlip") if err != nil { player.SendErrClienRes(&msg.ResPlayroomFlip{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/game/Type.go b/src/server/game/Type.go index b03ec8a0..71c0617e 100644 --- a/src/server/game/Type.go +++ b/src/server/game/Type.go @@ -14,6 +14,7 @@ type PlayerSimpleData struct { FaceBookPic string Playroom map[int]int Chess []int + WorkStart int64 } type VarGoldCard struct { diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 41ecff87..8e501132 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -57,9 +57,6 @@ func (cb *ChessBorad) InitData() { cb.ChessBag.List[i] = ChessBagGrid{} } } - if cb.RetireChessMap == nil { - cb.RetireChessMap = make(map[string][]int) - } } func (cb *ChessBorad) ver() { @@ -76,6 +73,15 @@ func (cb *ChessBorad) ver() { if cb.ChessMap == nil { cb.ChessMap = make(map[string]int32) } + if cb.RetireChessMap == nil { + cb.RetireChessMap = make(map[string][]int) + } + if cb.Retire == nil { + cb.Retire = make(map[string]int) + } + if cb.Honor == nil { + cb.Honor = make(map[int]int) + } } // 棋子合成 @@ -228,6 +234,9 @@ func (cb *ChessBorad) GetEmitList() []int { result := make([]int, 0, len(cb.EmitList)) for k, v := range cb.EmitList { EmitID := mergeDataCfg.GetEmitId(k) + if EmitID == "" { + continue + } if cb.Retire[EmitID] == 2 { continue } diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 0fcf0c5e..95223aaf 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -98,6 +98,13 @@ func (f *FriendMod) CheckApply(id int) bool { func (f *FriendMod) GetFriendNum() int { return len(f.FriendList) } +func (f *FriendMod) GetFriendList() []int { + var list []int + for k, _ := range f.FriendList { + list = append(list, k) + } + return list +} func (f *FriendMod) AddFriendApply(Uid int) { f.ApplyList[Uid] = GoUtil.Now() diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 23c69fce..e9749ffe 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -256,6 +256,10 @@ func (p *PlayroomMod) ResetGame() { p.GameReward = make(map[int]*item.Item) } +func (p *PlayroomMod) ResetLose() { + p.LoseItem = make([]*item.Item, 0) +} + func (p *PlayroomMod) SetGameReward(Chess1, Chess2, Star int) { p.GameReward[1] = &item.Item{Id: Chess1, Num: 1} p.GameReward[2] = &item.Item{Id: Chess2, Num: 1} @@ -290,6 +294,19 @@ func (p *PlayroomMod) Rest() { p.WorkStatus = 2 } +func (p *PlayroomMod) ResetWork() { + p.WorkStatus = 0 + p.Starttime = 0 + p.Endtime = 0 +} + +func (p *PlayroomMod) GetVisitorInfo(Id int) (int, int64) { + v, ok := p.Visitor[Id] + if !ok { + return 0, 0 + } + return v.Times, v.Time +} func (p *PlayroomMod) Draw() (int, []*item.Item, error) { if p.AllMood < 100 { return 0, nil, fmt.Errorf("Draw AllMood < 100") @@ -307,6 +324,12 @@ func (p *PlayroomMod) NotifyWork() *msg.NotifyPlayroomWork { } } +func (p *PlayroomMod) NotifyLose() *msg.NotifyPlayroomLose { + return &msg.NotifyPlayroomLose{ + LoseItem: item.ItemToMsg(p.LoseItem), + } +} + func (p *PlayroomMod) NotifyMood() *msg.NotifyPlayroomMood { Mood := make(map[int32]int32, 0) for k, v := range p.MoodInfo {