playroom优化

This commit is contained in:
hahwu 2025-05-28 17:53:07 +08:00
parent 78b36ce4d4
commit 87983240aa
4 changed files with 51 additions and 19 deletions

View File

@ -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
}

View File

@ -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++
}

View File

@ -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,

View File

@ -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),