playroom优化

This commit is contained in:
hahwu 2025-02-06 16:54:18 +08:00
parent 8ee28c28e2
commit 51ffa2449b
8 changed files with 3239 additions and 3141 deletions

View File

@ -235,33 +235,6 @@ func CreateCardId(From, To, CardId int) string {
return fmt.Sprintf("%d_%d_%d_%d_%s", From, To, CardId, Now(), RandString(3))
}
func PlayroomTrigger(Time int64, Num int) (int64, int) {
if Num == 0 {
return 0, 0
}
Now := Now()
if Time > Now {
return Time, Num
}
var Duration int64
for {
if Num > 50 {
Duration = 1200
} else {
Duration = 3600
}
if Time+Duration > Now {
return Time + Duration, Num
}
Time += Duration
Num -= 10
if Num <= 0 {
return 0, 0
}
}
}
func SplitInt(str, sep string) []int {
var ret []int
for _, v := range strings.Split(str, sep) {

View File

@ -110,6 +110,14 @@ func GetInteract(Id, Type int) (int, []*item.Item, int) {
return gamedata.GetIntValue(data, "Type"), gamedata.GetItemList(data, "Cost2"), gamedata.GetIntValue(data, "Effect")
}
func GetInteractPhysiology(Id int) (int, int) {
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_MOOD, Id)
if err != nil {
return 0, 0
}
return gamedata.GetIntValue(data, "PType"), gamedata.GetIntValue(data, "PEffect")
}
func GetInitDecorate() []int {
r := make([]int, 0)
data, err := gamedata.GetData(CFG_PLAYROOM_DECORATE)
@ -151,3 +159,7 @@ func GetPhysiologyMax(Id int) int {
}
return gamedata.GetIntValue(data, "Max")
}
func GetPhysiologyDuration(Id int, Num int) int {
return 0
}

View File

@ -5,6 +5,7 @@ import (
"math"
"server/GoUtil"
baseCfg "server/conf/base"
playroomCfg "server/conf/playroom"
userCfg "server/conf/user"
"server/game/mod/card"
"server/game/mod/item"
@ -137,17 +138,24 @@ func LimitedTimeCardTrigger(p *Player) {
}, "LimitedTimeCard")
}
}
func LimitedTimePlayroomTrigger(p *Player, Id int) {
func LimitedTimePlayroomTrigger(p *Player) {
PlayroomMod := p.PlayMod.getPlayroomMod()
for k, v := range PlayroomMod.Physiology {
if v.Time > 0 {
LimitedTimePlayroomTrigger_(p, k)
}
}
}
func LimitedTimePlayroomTrigger_(p *Player, Id int) {
PlayroomMod := p.PlayMod.getPlayroomMod()
Now := GoUtil.Now()
MoodInfo := PlayroomMod.GetMoodInfo(Id)
if MoodInfo == nil {
Physiology := PlayroomMod.GetPhysiology(Id)
if Physiology == nil {
return
}
NewTime, Num := GoUtil.PlayroomTrigger(MoodInfo.Time, MoodInfo.Num)
MoodInfo.Time = NewTime
MoodInfo.Num = Num
NewTime, Num := PlayroomTrigger(Physiology.Id, Physiology.Time, Physiology.Num)
Physiology.Time = NewTime
Physiology.Num = Num
p.PlayMod.save()
PlayroomBackData(p)
NextSecond := NewTime - Now
@ -155,12 +163,42 @@ func LimitedTimePlayroomTrigger(p *Player, Id int) {
p.CallEvent(time.Duration(NextSecond)*time.Second, func() {
p.lock.Lock()
defer p.lock.Unlock()
LimitedTimePlayroomTrigger(p, Id)
LimitedTimePlayroomTrigger_(p, Id)
p.SendClientRes()
}, fmt.Sprintf("Playroom_%d", Id))
}
}
func PlayroomTrigger(Id int, Time int64, Num int) (int64, int) {
if Num == 0 {
return 0, 0
}
Now := GoUtil.Now()
if Time > Now {
return Time, Num
}
if Time == Now {
NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num)
return Time + int64(NeedDuration), Num
}
n := 0
for {
if n > 100 {
return 0, 0
}
NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num)
Time += int64(NeedDuration)
if Time > Now {
return Time, Num
}
Num--
if Num == 0 {
return 0, 0
}
n++
}
}
func LimitedTimePlayroomWorkTrigger(p *Player) {
PlayroomMod := p.PlayMod.getPlayroomMod()
EndTime := PlayroomMod.Endtime

View File

@ -339,32 +339,33 @@ func (p *Player) Login() {
LimitedTimeEventTrigger(p, 0)
// 猪猪银行触发
LimitedTimePiggyBankTrigger(p)
BaseMod := p.PlayMod.getBaseMod()
// playroom触发
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_ENTER)
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_FOOD)
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_CLEAN)
PlayroomMod := p.PlayMod.getPlayroomMod()
PlayroomMod.UnLock(BaseMod.GetLevel())
LimitedTimePlayroomTrigger(p)
LimitedTimePlayroomWorkTrigger(p)
LimitedTimeEnergyAdd(p)
ActivityLogin(p)
LoignBack(p)
BaseMod := p.PlayMod.getBaseMod()
BaseMod.Login()
p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
if p.PlayerBaseMod.Data.UserName == "388faebe29ffe56666a04ea22b902b0f" {
VarMod := p.PlayMod.getVarMod()
Mail1, _ := VarMod.GetVar(1)
if Mail1 != nil {
return
}
VarMod.SetVar(1, 1)
Items := make([]*item.Item, 0)
Items = append(Items, &item.Item{Id: item.ITEM_ENERGY_ID, Num: 200})
MailMod := p.PlayMod.getMailMod()
MailMod.Send("Test Players' Refund",
`Welcome back to our game!
Here comes your refund for your scene progress and payment in test version!
Have fun in new version!`, Items)
}
// if p.PlayerBaseMod.Data.UserName == "388faebe29ffe56666a04ea22b902b0f" {
// VarMod := p.PlayMod.getVarMod()
// Mail1, _ := VarMod.GetVar(1)
// if Mail1 != nil {
// return
// }
// VarMod.SetVar(1, 1)
// Items := make([]*item.Item, 0)
// Items = append(Items, &item.Item{Id: item.ITEM_ENERGY_ID, Num: 200})
// MailMod := p.PlayMod.getMailMod()
// MailMod.Send("Test Players' Refund",
// `Welcome back to our game!
// Here comes your refund for your scene progress and payment in test version!
// Have fun in new version!`, Items)
// }
}
func (p *Player) Outline() {

View File

@ -606,6 +606,7 @@ func PlayroomBackData(p *Player) {
r.WorkStatus = int32(PlayroomMod.WorkStatus)
r.Playroom = GoUtil.MapIntToInt32(PlayroomMod.GetRoom())
r.Mood = GoUtil.MapIntToInt32(PlayroomMod.GetMood())
r.Physiology = GoUtil.MapIntToInt32(PlayroomMod.GetPhysiologyList())
r.AllMood = int32(PlayroomMod.AllMood)
r.Jackpot = int32(PlayroomMod.JackpotNum)
p.PushClientRes(r)

View File

@ -2932,7 +2932,7 @@ func ReqPlayroomInteract(args []interface{}) error {
req := &msg.ReqPlayroomInteract{}
proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod()
Items, MoodType, err := PlayroomMod.Interact(int(req.Id), int(req.Type))
Items, _, err := PlayroomMod.Interact(int(req.Id), int(req.Type))
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomInteract{
Code: msg.RES_CODE_FAIL,
@ -2949,7 +2949,7 @@ func ReqPlayroomInteract(args []interface{}) error {
return err
}
player.PlayMod.save()
LimitedTimePlayroomTrigger(player, MoodType)
LimitedTimePlayroomTrigger(player)
player.PushClientRes(PlayroomMod.NotifyMood())
player.PushClientRes(&msg.ResPlayroomInteract{
Code: msg.RES_CODE_SUCCESS,

View File

@ -142,10 +142,22 @@ func (p *PlayroomMod) GetMood() map[int]int {
return Mood
}
func (p *PlayroomMod) GetPhysiologyList() map[int]int {
Physiology := make(map[int]int)
for k, v := range p.Physiology {
Physiology[k] = v.Num
}
return Physiology
}
func (p *PlayroomMod) GetMoodInfo(Id int) *Mood {
return p.MoodInfo[Id]
}
func (p *PlayroomMod) GetPhysiology(Id int) *Physiology {
return p.Physiology[Id]
}
func (p *PlayroomMod) GetCollect() map[int]int {
return p.Collect
}
@ -246,6 +258,8 @@ func (p *PlayroomMod) Interact(Id, Type int) ([]*item.Item, int, error) {
if Effect > 0 {
p.AllMood = min(100, p.AllMood+10)
}
PType, PEffect := playroomCfg.GetInteractPhysiology(Id)
p.AddPhysiology(PType, PEffect)
p.AddMood(MoodType, Effect)
return ItemList, MoodType, nil
}
@ -264,6 +278,21 @@ func (p *PlayroomMod) AddMood(Id, Num int) {
}
}
func (p *PlayroomMod) AddPhysiology(Id, Num int) {
Physiology := p.GetPhysiology(Id)
if Physiology == nil {
return
}
Max := playroomCfg.GetPhysiologyMax(Id)
Physiology.Num = max(0, min(Physiology.Num+Num, Max))
if Physiology.Num != 0 && Physiology.Time == 0 {
Physiology.Time = GoUtil.Now()
}
if Physiology.Num == 0 {
Physiology.Time = 0
}
}
func (p *PlayroomMod) AddVisitor(Id int, Time int64) {
v, ok := p.Visitor[Id]
if !ok {
@ -394,8 +423,9 @@ func (p *PlayroomMod) NotifyMood() *msg.NotifyPlayroomMood {
Mood[int32(k)] = int32(v.Num)
}
return &msg.NotifyPlayroomMood{
AllMood: int32(p.AllMood),
Mood: Mood,
AllMood: int32(p.AllMood),
Mood: Mood,
Physiology: GoUtil.MapIntToInt32(p.GetPhysiologyList()),
}
}
@ -493,4 +523,10 @@ func (p *PlayroomMod) UnLock(Lv int) {
p.Physiology[k] = &Physiology{Id: k, Num: Max, Time: Now}
}
}
if p.MoodInfo == nil {
p.MoodInfo = make(map[int]*Mood)
for k := 1; k <= 3; k++ {
p.MoodInfo[k] = &Mood{Id: k, Num: 100}
}
}
}

File diff suppressed because it is too large Load Diff