diff --git a/src/server/conf/playroom/playroomCfg.go b/src/server/conf/playroom/playroomCfg.go index e9e3887e..8fa0de73 100644 --- a/src/server/conf/playroom/playroomCfg.go +++ b/src/server/conf/playroom/playroomCfg.go @@ -491,3 +491,17 @@ func GetTaskJackpotReward(Id int) []*item.Item { } return gamedata.GetItemList(data, "Items") } + +func GetPhysiologyList(MoodType int) []int { + r := make([]int, 0) + data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY_TYPE) + if err != nil { + return []int{} + } + for k, v := range data { + if gamedata.GetIntValue(v, "MType") == MoodType { + r = append(r, GoUtil.Int(k)) + } + } + return r +} diff --git a/src/server/game/LimitedTimeTrigger.go b/src/server/game/LimitedTimeTrigger.go index 44a2bda0..841810e7 100644 --- a/src/server/game/LimitedTimeTrigger.go +++ b/src/server/game/LimitedTimeTrigger.go @@ -13,6 +13,7 @@ import ( MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced "server/game/mod/playroom" "server/msg" + "server/pkg/github.com/name5566/leaf/log" "time" ) @@ -150,27 +151,29 @@ func LimitedTimePlayroomTrigger(p *Player) { } func LimitedTimePlayroomTrigger_(p *Player, Id int) { PlayroomMod := p.PlayMod.getPlayroomMod() - Now := GoUtil.Now() Physiology := PlayroomMod.GetPhysiology(Id) if Physiology == nil { return } - NewTime, Num := PlayroomTrigger(Physiology.Id, Physiology.Time, Physiology.Num) + NewTime, NextSecond, Num := PlayroomTrigger(Physiology.Id, Physiology.Time, Physiology.Num) Physiology.Time = NewTime DiffValue := Physiology.Num - Num MType, MEffect := playroomCfg.GetMoodEffect(Physiology.Id) CleanMood := PlayroomMod.GetMoodInfo(playroom.MOOD_TYPE_CLEAN) + PlayroomMod.AddMood(MType, -MEffect*DiffValue) // 上厕所数值为0 且清洁度大于50时,清洁度降至50 if Id == playroom.PHYSIOLOGY_TYPE_TOLIET && Num == 0 && CleanMood.Num > 50 { CleanMood.Num = 50 - } else { - PlayroomMod.AddMood(MType, -MEffect*DiffValue) } + log.Debug("PlayroomTrigger Id:%d, Time:%d, Num:%d, NewTime:%d, NextSecond:%d, MType:%d, MEffect:%d, Num :%d", Id, Physiology.Time, Physiology.Num, NewTime, NextSecond, MType, MEffect, Num) Physiology.Num = Num + if PlayroomMod.GetMoodInfo(MType).Num == 0 { // 心情值为0时,重置生理状态 + PlayroomMod.ResetPhysiology(MType) + NewTime = 0 + } p.PlayMod.save() ResNotifyMood := PlayroomMod.NotifyMood() p.PushClientRes(ResNotifyMood) - NextSecond := NewTime - Now if NextSecond > 0 { p.CallEvent(time.Duration(NextSecond)*time.Second, func() { p.lock.Lock() @@ -181,31 +184,31 @@ func LimitedTimePlayroomTrigger_(p *Player, Id int) { } } -func PlayroomTrigger(Id int, Time int64, Num int) (int64, int) { +func PlayroomTrigger(Id int, Time int64, Num int) (int64, int64, int) { if Num == 0 { - return 0, 0 + return 0, 0, 0 } Now := GoUtil.Now() if Time > Now { - return Time, Num + return Time, Time - Now, Num } if Time == Now { NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num) - return Time + int64(NeedDuration), Num + return Now, int64(NeedDuration), Num } n := 0 for { if n > 100 { - return 0, 0 + return 0, 0, 0 } Num-- NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num) Time += int64(NeedDuration) - if Time > Now { - return Time, Num + if Time >= Now { + return Now, int64(NeedDuration), Num } if Num == 0 { - return 0, 0 + return 0, 0, 0 } n++ } diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index d99939e8..11a63111 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -3364,7 +3364,7 @@ func ReqPlayroomChip(player *Player, buf []byte) error { }) return err } - err = player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomChip.String()) + err = player.HandleLoseItem(Items, msg.ITEM_POP_LABEL_PlayroomChip.String()) if err != nil { player.SendErrClienRes(&msg.ResPlayroomChip{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index 10bc5633..747c382e 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -68,10 +68,8 @@ const ( STATUS_VISIT = 1 // 拜访 MOOD_TYPE_ENTER = 1 // 娱乐 - MOOD_TYPE_FOOD = 2 // 食物 - MOOD_TYPE_CLEAN = 3 // 清洁 - MOOD_TYPE_TAKE = 4 // 照料 - MOOD_TYPE_PLAY = 5 // 玩耍 + MOOD_TYPE_CLEAN = 2 // 清洁 + MOOD_TYPE_FOOD = 3 // 食物 GAME_RESULT_LOSE = 0 // 输 GAME_RESULT_LOW = 1 // 低 @@ -396,6 +394,14 @@ func (p *PlayroomMod) AddMood(Id, Num int) { } } +func (p *PlayroomMod) GetMoodNum(MoodType int) int { + Mood, ok := p.MoodInfo[MoodType] + if !ok { + return 0 + } + return Mood.Num +} + func (p *PlayroomMod) AddPhysiology(Id, Num int) { Phy := p.GetPhysiology(Id) if Phy == nil { @@ -561,7 +567,16 @@ func (p *PlayroomMod) NotifyLose() *msg.NotifyPlayroomLose { Chip: ChipMessage, } } - +func (p *PlayroomMod) ResetPhysiology(MoodType int) { + PhysiologyList := playroomCfg.GetPhysiologyList(MoodType) + for _, v := range PhysiologyList { + Phy := p.GetPhysiology(v) + if Phy != nil { + Phy.Num = 0 + Phy.Time = 0 + } + } +} func (p *PlayroomMod) NotifyStatus() *msg.NofiPlayroomStatus { return &msg.NofiPlayroomStatus{ WorkOutline: int32(p.WorkOutline),