优化系统bug

This commit is contained in:
hahwu 2024-12-25 11:11:06 +08:00
parent d5325f59e5
commit 0d7eea6356
9 changed files with 220 additions and 85 deletions

View File

@ -22,6 +22,15 @@ func GetEnergyMulByLv(lv int) int {
return gamedata.GetIntValue(data, "EnergyMul")
}
func GetEnergyMax(Lv int) int {
data, err := gamedata.GetDataByIntKey(CFG_NAME, Lv)
if err != nil {
log.Debug("UserDataCfg GetEnergyMax lv:%v not found", Lv)
return 0
}
return gamedata.GetIntValue(data, "MaxEnergy")
}
// 获取七天登录加成
func GetSevenloginAdd(Lv int) int {
data, err := gamedata.GetDataByIntKey(CFG_NAME, Lv)

View File

@ -145,7 +145,7 @@ func FormatAllMemUpdateDb(u interface{}, tableName string, Exclude string) (err
if k == reflect.String {
keyValue = ufield.String()
}
if k == reflect.Int32 || k == reflect.Int {
if k == reflect.Int32 || k == reflect.Int || k == reflect.Int64 {
keyValue = ufield.Int()
}
}

View File

@ -158,7 +158,7 @@ func (ad *GameLogic) IsExsitAccount(UserName string) bool {
func (ad *GameLogic) LoadDataFromDB(UserName string) bool {
sqlStr := "SELECT * FROM t_account WHERE user_name = ?"
if err := db.SqlDb.Get(&ad.Db_AccountInfo, sqlStr, UserName); err != nil {
log.Debug("get data failed, err:%v\n", err)
// log.Debug("get data failed, err:%v\n", err)
return false
}

View File

@ -183,16 +183,19 @@ func LimitedTimePlayroomWorkTrigger(p *Player) {
func LimitedTimeEnergyAdd(p *Player) {
curtime := time.Now().Unix()
PlayerBaseMod := p.GetPlayerBaseMod()
delta := curtime - (int64)(PlayerBaseMod.Data.RecoverTime)
Recover := userCfg.GetRecover(int(PlayerBaseMod.Data.Level))
BaseMod := p.PlayMod.getBaseMod()
delta := curtime - BaseMod.GetLoginTime()
Recover := userCfg.GetRecover(BaseMod.GetLevel())
Addsta := int(delta) / Recover
if Addsta <= 0 {
return
}
if PlayerBaseMod.GetMaxEnergy() > PlayerBaseMod.Data.Energy {
PlayerBaseMod.Data.Energy = PlayerBaseMod.Data.Energy + int32(Addsta)
if PlayerBaseMod.Data.Energy > PlayerBaseMod.GetMaxEnergy() {
PlayerBaseMod.Data.Energy = PlayerBaseMod.GetMaxEnergy()
Energy := BaseMod.GetEnergy()
MaxEnergy := PlayerBaseMod.GetMaxEnergy()
if MaxEnergy > Energy {
Energy += Addsta
if Energy > MaxEnergy {
Energy = MaxEnergy
}
p.CallEvent(time.Duration(Recover)*time.Second, func() {
p.lock.Lock()
@ -200,6 +203,7 @@ func LimitedTimeEnergyAdd(p *Player) {
LimitedTimeEnergyAdd(p)
}, "AddEnergy")
}
PlayerBaseMod.Data.RecoverTime = int32(curtime)
BaseMod.SetEnergy(Energy)
BaseMod.SetRecoverTime(curtime)
p.SendErrClienRes(PlayerBaseMod.BackAsset())
}

View File

@ -171,7 +171,7 @@ func (p *Player) BackUp() *PlayerBackUp {
// 接口发生错误时 还原数据
func (p *Player) Recover(backUp *PlayerBackUp) {
p.GetPlayerBaseMod().Data = backUp.Data
// p.GetPlayerBaseMod().Data = backUp.Data
p.PlayMod.Recover(backUp)
p.Msg = make(map[string]PlayerMsg)
}
@ -185,7 +185,7 @@ func (p *Player) InitPlayer(UserName string) error {
p.timerList = make(map[string]*timer.Timer)
p.MDispatr = timer.NewDispatcher(100)
p.stopSignal = make(chan bool)
Base := &PlayerBaseData{}
Base := &PlayerBaseData{p: p}
// 玩家基础数据
ok := Base.LoadDataFromDB(UserName)
@ -205,7 +205,7 @@ func (p *Player) InitPlayer(UserName string) error {
log.Debug("load PlayerModData failed:", UserName)
return errors.New("load PlayerModData failed")
}
IsUpdate, err := modData.InitMod()
IsUpdate, err := modData.InitMod(p)
if err != nil {
log.Debug("InitMod failed:", err)
return err
@ -340,6 +340,7 @@ func (p *Player) Login() {
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_FOOD)
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_CLEAN)
LimitedTimePlayroomWorkTrigger(p)
LimitedTimeEnergyAdd(p)
ActivityLogin(p)
LoignBack(p)
p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
@ -659,7 +660,7 @@ func (p *Player) InitPlayerOnly() {
p.MDispatr = timer.NewDispatcher(10)
p.stopSignal = make(chan bool)
Base := &PlayerBaseData{}
Base := &PlayerBaseData{p: p}
// 玩家基础数据
ok := Base.GetDataByUid(p.M_DwUin)
@ -675,7 +676,7 @@ func (p *Player) InitPlayerOnly() {
if !ok {
return
}
modData.InitMod()
modData.InitMod(p)
p.PlayMod.mod_list = modData.ModList
}

View File

@ -19,6 +19,7 @@ import (
)
type PlayerBaseData struct {
p *Player
Data msg.ResPlayerBaseInfo
}
@ -85,7 +86,7 @@ func (p *PlayerBaseData) LoadDataFromDB(UserName interface{}) bool {
sqlStr := "SELECT * FROM t_player_baseinfo WHERE user_name = ?"
sqlStruck := db.ResPlayerBaseInfo{}
if err := db.SqlDb.Get(&sqlStruck, sqlStr, UserName); err != nil {
log.Debug("get data failed, err:%v\n", err)
log.Debug("PlayerBaseData get data failed, err:%v\n", err)
return false
}
@ -116,64 +117,47 @@ func (p *PlayerBaseData) LoadDataFromDB(UserName interface{}) bool {
}
func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool {
// G_getGameLogic().Mlogger.Debug("SaveDataFromDB:", p.Data.DwUin)
BaseMod := p.p.PlayMod.getBaseMod()
sqlStruck := db.ResPlayerBaseInfo{}
sqlStruck.Diamond = p.Data.Diamond
sqlStruck.Diamond = int32(BaseMod.Diamond)
sqlStruck.DwUin = p.Data.DwUin
sqlStruck.Energy = p.Data.Energy
sqlStruck.Star = p.Data.Star
sqlStruck.RecoverTime = p.Data.RecoverTime
sqlStruck.Level = p.Data.Level
sqlStruck.Exp = p.Data.Exp
sqlStruck.Energy = int32(BaseMod.Energy)
sqlStruck.Star = int32(BaseMod.Star)
sqlStruck.RecoverTime = int32(BaseMod.RecoverTime)
sqlStruck.Level = int32(BaseMod.Level)
sqlStruck.Exp = int32(BaseMod.Exp)
sqlStruck.StartOrderId = p.Data.StartOrderId
sqlStruck.MusicCode = p.Data.MusicCode
sqlStruck.Guild = p.Data.Guild
sqlStruck.PackUnlockCount = p.Data.PackUnlockCount
sqlStruck.LastPlayTime = p.Data.LastPlayTime
sqlStruck.EnergyBuyCount = p.Data.EnergyBuyCount
sqlStruck.LoginTime = p.Data.LoginTime
sqlStruck.LoginTime = int32(BaseMod.LoginTime)
sqlStruck.UserName = p.Data.UserName
sqlStruck.LogoutTime = p.Data.LogoutTime
sqlStruck.LogoutTime = int32(BaseMod.LogoutTime)
sqlStruck.Todayolinetime = p.Data.Todayolinetime
sqlStruck.Rolecreatetime = p.Data.Rolecreatetime
sqlStruck.NoAd = p.Data.NoAd
sqlStruck.ChampshipsGroupID = p.Data.ChampshipsGroupID
sqlStruck.LastChampGroupID = p.Data.LastChampGroupID
sqlStruck.FaceBookId = p.Data.FaceBookId
sqlStruck.FaceBookId = BaseMod.FackBookId
db.FormatAllMemUpdateDb(&sqlStruck, "t_player_baseinfo", "dwUin")
return true
}
func (p *PlayerBaseData) GetMaxEnergyMul(player *Player) int {
MaxEnergyMul := userCfg.GetEnergyMulByLv(int(p.Data.Level))
BaseMod := player.PlayMod.getBaseMod()
MaxEnergyMul := userCfg.GetEnergyMulByLv(BaseMod.Level)
if player.PlayMod.getLimitedTimeEventMod().CheckExist(limitedTimeEvent.EVENT_TYPE_HIGH_ROLLER) {
MaxEnergyMul = 10
}
return MaxEnergyMul
}
func (p *PlayerBaseData) GetMaxEnergy() int32 {
MaxSta := MergeConst.G_Sta_Limit
if p.Data.Level < 7 {
MaxSta = MergeConst.G_Sta_Limit
} else if p.Data.Level < 12 {
MaxSta = 120
} else if p.Data.Level < 19 {
MaxSta = 130
} else if p.Data.Level < 27 {
MaxSta = 135
} else if p.Data.Level < 38 {
MaxSta = 140
} else if p.Data.Level < 44 {
MaxSta = 145
} else if p.Data.Level < 59 {
MaxSta = 150
} else {
MaxSta = 155
}
return MaxSta
func (p *PlayerBaseData) GetMaxEnergy() int {
BaseMod := p.p.PlayMod.getBaseMod()
return userCfg.GetEnergyMax(BaseMod.Level)
}
// 更新游戏道具
@ -209,6 +193,19 @@ func (p *PlayerBaseData) ReqRemoveAd(player *Player, buf []byte) {
}
func (p *PlayerBaseData) ResPlayerBaseInfo(player *Player) {
BaseMod := player.PlayMod.getBaseMod()
player.PushClientRes(&msg.ResPlayerBaseInfo{
DwUin: p.Data.DwUin,
Energy: int32(BaseMod.Energy),
Star: int32(BaseMod.Star),
RecoverTime: int32(BaseMod.RecoverTime),
Diamond: int32(BaseMod.Diamond),
Level: int32(BaseMod.Level),
Exp: int32(BaseMod.Exp),
LoginTime: int32(BaseMod.LoginTime),
LogoutTime: int32(BaseMod.LogoutTime),
FaceBookId: p.Data.FaceBookId,
})
agent := player.GetAgentByPlayer()
data, _ := proto.Marshal(&p.Data)
G_getGameLogic().PackResInfo(agent, "ResPlayerBaseInfo", data)
@ -425,61 +422,65 @@ func (p *PlayerBaseData) ClearData() bool {
// 增加减少体力
func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
NewEnergy := p.Data.Energy + int32(cnt)
BaseMod := p.p.PlayMod.getBaseMod()
NewEnergy := BaseMod.Energy + cnt
if NewEnergy < 0 {
return errors.New("能量不足")
}
if cnt < 0 {
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_ENERGY, A: []interface{}{-cnt}})
}
if p.Data.Energy >= p.GetMaxEnergy() && NewEnergy < p.GetMaxEnergy() {
Recover := userCfg.GetRecover(int(p.Data.Level))
if BaseMod.Energy >= p.GetMaxEnergy() && NewEnergy < p.GetMaxEnergy() {
Recover := userCfg.GetRecover(int(BaseMod.Level))
player.CallEvent(time.Duration(Recover)*time.Second, func() {
player.lock.Lock()
defer player.lock.Unlock()
LimitedTimeEnergyAdd(player)
}, "AddEnergy")
p.Data.RecoverTime = int32(time.Now().Unix())
BaseMod.RecoverTime = time.Now().Unix()
}
p.Data.Energy = NewEnergy
BaseMod.Energy = NewEnergy
return nil
}
// 增加减少星星
func (p *PlayerBaseData) AddStar(player *Player, cnt int) error {
NewStar := p.Data.Star + int32(cnt)
BaseMod := p.p.PlayMod.getBaseMod()
NewStar := BaseMod.Star + cnt
if NewStar < 0 {
return errors.New("星星不足")
}
p.Data.Star = NewStar
BaseMod.Star = NewStar
player.UpdateUserInfo()
return nil
}
// 增加减少钻石
func (p *PlayerBaseData) AddDiamond(cnt int) error {
NewDiamond := p.Data.Diamond + int32(cnt)
BaseMod := p.p.PlayMod.getBaseMod()
NewDiamond := BaseMod.Diamond + cnt
if NewDiamond < 0 {
return errors.New("钻石不足")
}
p.Data.Diamond = NewDiamond
BaseMod.Diamond = NewDiamond
return nil
}
// 增加经验
func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
p.Data.Exp += int32(exp)
BaseMod := player.PlayMod.getBaseMod()
BaseMod.Exp += exp
upLv := 0
upExp := userCfg.GetLevUpExp(int(p.Data.Level))
Num := 0
UpLevelItem := make([]*item.Item, 0)
for p.Data.Exp >= int32(upExp) {
for BaseMod.Exp >= upExp {
if Num > 100 {
break
}
Num++
p.Data.Level++
p.Data.Exp -= int32(upExp)
BaseMod.Level++
BaseMod.Exp -= upExp
upExp = userCfg.GetLevUpExp(int(p.Data.Level))
// 日常任务解锁
DailyTaskMod := player.PlayMod.getDailyTaskMod()
@ -487,27 +488,27 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
if DailyTaskMod.LevUpTrigger(int(p.Data.Level), DecorateMod.GetAreaId()) {
player.PushClientRes(DailyTaskMod.BackData())
}
upLv = int(p.Data.Level)
upLv = BaseMod.Level
Items := userCfg.GetLevUpReward(upLv)
UpLevelItem = item.Merge(UpLevelItem, Items)
// 棋盘背包解锁
player.PushClientRes(p.BackAsset())
ChessMod := player.PlayMod.getChessMod()
if ChessMod.TriggerChessBagUnlock(int(p.Data.Level)) {
if ChessMod.TriggerChessBagUnlock(int(BaseMod.Level)) {
player.PushClientRes(ChessMod.BackData())
}
ChargeMod := player.PlayMod.getChargeMod()
ChargeMod.TriggerChargeUnlock(int(p.Data.Level), ChessMod.GetEmitList())
ChargeMod.TriggerChargeUnlock(int(BaseMod.Level), ChessMod.GetEmitList())
player.PushClientRes(ChargeMod.BackData())
// 重载活动
player.initAcitivity()
telog.Te.Track(p.Data.UserName, p.Data.UserName, "level_up", map[string]interface{}{
"after_level": p.Data.Level,
"after_level": BaseMod.Level,
})
telog.Te.Track(p.Data.UserName, p.Data.UserName, "property_level_up", map[string]interface{}{
"property_level": p.Data.Level,
"property_level_reward": userCfg.GetUnlock(int(p.Data.Level)),
"property_level": BaseMod.Level,
"property_level_reward": userCfg.GetUnlock(int(BaseMod.Level)),
})
}
if len(UpLevelItem) > 0 {
@ -522,36 +523,47 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
}
func (p *PlayerBaseData) GetLevel() int {
return int(p.Data.Level)
BaseMod := p.p.PlayMod.getBaseMod()
return BaseMod.Level
}
func (p *PlayerBaseData) GetExp() int {
return int(p.Data.Exp)
BaseMod := p.p.PlayMod.getBaseMod()
return BaseMod.Exp
}
func (p *PlayerBaseData) GetDiamond() int {
return int(p.Data.Diamond)
BaseMod := p.p.PlayMod.getBaseMod()
return BaseMod.Diamond
}
func (p *PlayerBaseData) GetEnergy() int {
return int(p.Data.Energy)
BaseMod := p.p.PlayMod.getBaseMod()
return BaseMod.Energy
}
func (p *PlayerBaseData) SetEnergy(Energy int) {
BaseMod := p.p.PlayMod.getBaseMod()
BaseMod.Energy = Energy
}
func (p *PlayerBaseData) GetStar() int {
return int(p.Data.Star)
BaseMod := p.p.PlayMod.getBaseMod()
return BaseMod.Star
}
func (p *PlayerBaseData) BackAsset() *msg.ResPlayerAsset {
BaseMod := p.p.PlayMod.getBaseMod()
return &msg.ResPlayerAsset{
DwUin: p.Data.DwUin,
Diamond: p.Data.Diamond,
Energy: p.Data.Energy,
Star: p.Data.Star,
RecoverTime: p.Data.RecoverTime,
Level: p.Data.Level,
Exp: p.Data.Exp,
Login: p.Data.LoginTime,
Logout: p.Data.LogoutTime,
DwUin: BaseMod.Uid,
Diamond: int32(BaseMod.Diamond),
Energy: int32(BaseMod.Energy),
Star: int32(BaseMod.Star),
RecoverTime: int32(BaseMod.RecoverTime),
Level: int32(BaseMod.Level),
Exp: int32(BaseMod.Exp),
Login: int32(BaseMod.LoginTime),
Logout: int32(BaseMod.LogoutTime),
}
}
@ -560,7 +572,8 @@ func (p *PlayerBaseData) GetSevenLoginAdd() int {
}
func (p *PlayerBaseData) GetLastLoginTime() int {
return int(p.Data.LoginTime)
BaseMod := p.p.PlayMod.getBaseMod()
return int(BaseMod.LoginTime)
}
func (p *PlayerBaseData) GetName() string {
@ -568,7 +581,8 @@ func (p *PlayerBaseData) GetName() string {
}
func (p *PlayerBaseData) GetLoginTime() int64 {
return int64(p.Data.LoginTime)
BaseMod := p.p.PlayMod.getBaseMod()
return int64(BaseMod.LoginTime)
}
func (p *PlayerBaseData) GetDataByUid(Uid interface{}) bool {

View File

@ -421,7 +421,6 @@ func BackUserInfo(p *Player) {
FaceMod := p.PlayMod.getFaceMod()
AvatarMod := p.PlayMod.getAvatarMod()
DecorateMod := p.PlayMod.getDecorateMod()
PlayerBaseMod := p.GetPlayerBaseMod()
p.PushClientRes(&proto.UserInfo{
Uid: p.M_DwUin,
Nickname: BaseMod.NickName,
@ -430,7 +429,7 @@ func BackUserInfo(p *Player) {
DecorateCnt: int32(DecorateMod.DecorateNum),
AvatarList: AvatarMod.BackData(),
FaceList: FaceMod.BackData(),
Login: PlayerBaseMod.Data.LoginTime,
Login: int32(BaseMod.GetLoginTime()),
PetName: BaseMod.PetName,
})
}

View File

@ -107,7 +107,7 @@ func (p *PlayerModData) Reconnect(b bool) []byte {
return []byte{}
}
func (p *PlayerModData) InitMod() (bool, error) {
func (p *PlayerModData) InitMod(player *Player) (bool, error) {
playerModList := PlayerModList{}
if len(p.Data.ModData) > 0 {
buf := bytes.NewBuffer(p.Data.ModData)
@ -129,6 +129,23 @@ func (p *PlayerModData) InitMod() (bool, error) {
p.ModList.Chess = chessMod
is_update = true
}
BaseMod := p.ModList.Base
if BaseMod.Uid == 0 {
PlayerBaseMod := player.GetPlayerBaseMod()
BaseMod.Uid = PlayerBaseMod.Data.DwUin
BaseMod.SetAccount(PlayerBaseMod.Data.UserName)
BaseMod.SetLevel(int(PlayerBaseMod.Data.Level))
BaseMod.SetExp(int(PlayerBaseMod.Data.Exp))
BaseMod.SetEnergy(int(PlayerBaseMod.Data.Energy))
BaseMod.SetStar(int(PlayerBaseMod.Data.Star))
BaseMod.SetDiamond(int(PlayerBaseMod.Data.Diamond))
BaseMod.SetRecoverTime(int64(PlayerBaseMod.Data.RecoverTime))
BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId
BaseMod.SetLoginTime(int64(PlayerBaseMod.Data.LoginTime))
BaseMod.SetLogoutTime(int64(PlayerBaseMod.Data.LogoutTime))
p.ModList.Base = BaseMod
is_update = true
}
p.ModList.Handbook.InitData()
p.ModList.Order.InitData()

View File

@ -2,6 +2,7 @@ package base
import (
"fmt"
"server/GoUtil"
baseCfg "server/conf/base"
"server/game/mod/item"
"server/msg"
@ -12,6 +13,17 @@ const (
)
type Base struct {
Account string
Uid int64
Level int
Exp int
Energy int
Star int
Diamond int
LoginTime int64
LogoutTime int64
RecoverTime int64
FackBookId string
EnergyMul int
IsFirstBuy bool
EnergyBuy int
@ -32,6 +44,11 @@ func (b *Base) InitData(Uid int) {
}
}
func (b *Base) Login() {
b.LoginTime = GoUtil.Now()
b.LogoutTime = 0
}
func (b *Base) GetNickName() string {
return b.NickName
}
@ -68,6 +85,79 @@ func (b *Base) SetFacebookUrl(Url string) {
b.FacebookUrl = Url
}
func (b *Base) GetEnergyBuy() int {
return b.EnergyBuy
}
func (b *Base) GetEnergy() int {
return b.Energy
}
func (b *Base) GetLevel() int {
return b.Level
}
func (b *Base) GetExp() int {
return b.Exp
}
func (b *Base) GetStar() int {
return b.Star
}
func (b *Base) GetDiamond() int {
return b.Diamond
}
func (b *Base) GetCumulative() int {
return b.Cumulative
}
func (b *Base) GetLoginTime() int64 {
return b.LoginTime
}
func (b *Base) SetAccount(Account string) {
b.Account = Account
}
func (b *Base) SetUid(Uid int64) {
b.Uid = Uid
}
func (b *Base) SetLevel(Level int) {
b.Level = Level
}
func (b *Base) SetExp(Exp int) {
b.Exp = Exp
}
func (b *Base) SetEnergy(Energy int) {
b.Energy = Energy
}
func (b *Base) SetStar(Star int) {
b.Star = Star
}
func (b *Base) SetDiamond(Diamond int) {
b.Diamond = Diamond
}
func (b *Base) SetRecoverTime(RecoverTime int64) {
b.RecoverTime = RecoverTime
}
func (b *Base) SetLoginTime(LoginTime int64) {
b.LoginTime = LoginTime
}
func (b *Base) SetLogoutTime(LogoutTime int64) {
b.LogoutTime = LogoutTime
}
func (b *Base) BuyEnergy(Energy int) ([]*item.Item, int, int) {
if !b.IsFirstBuy {
b.IsFirstBuy = true
@ -100,6 +190,7 @@ func (b *Base) ZeroUpdate() {
}
func (b *Base) Outline(Time int) {
b.LogoutTime = GoUtil.Now()
b.TodayCumulative += Time
b.Cumulative += Time
}