Merge branch 'sdk' into online

This commit is contained in:
hahwu 2025-02-11 15:48:14 +08:00
commit f8be72d51a
25 changed files with 3766 additions and 3312 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

@ -54,3 +54,11 @@ func GetMaxEnergyMul(Lv int, Energy int) int {
}
return Mul
}
func GetLimitEnergyMul(Lv int) int {
data, err := gamedata.GetDataByIntKey(ENERGY_CFG, Lv+1)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "Limit")
}

View File

@ -40,6 +40,14 @@ func GetStarById(Id int) int {
return gamedata.GetIntValue(data, "Star")
}
func GetRoundById(Id int) int {
data, err := gamedata.GetDataByIntKey(CARD_DETAIL_CFG_NAME, Id)
if err != nil {
log.Debug("GetRoundById data not found")
}
return gamedata.GetIntValue(data, "Round")
}
// 获取开启卡包获得的卡牌数量
func GetPackRewardCnt(Star int) int {
data, err := gamedata.GetDataByIntKey(CARD_PACK_CFG_NAME, Star)

View File

@ -7,15 +7,19 @@ import (
)
const (
CFG_PLAYROOM_CONST = "PlayroomConst"
CFG_PLAYROOM_DECORATE = "PlayroomDecorate"
CFG_PLAYROOM_MOOD = "PlayroomMood"
CFG_PLAYROOM_CONST = "PlayroomConst"
CFG_PLAYROOM_DECORATE = "PlayroomDecorate"
CFG_PLAYROOM_MOOD = "PlayroomMood"
CFG_PLAYROOM_PHYSIOLOGY = "PlayroomPhysiology"
CFG_PLAYROOM_PHYSIOLOGY_TYPE = "PlayroomPhysiologyType"
)
func init() {
gamedata.InitCfg(CFG_PLAYROOM_CONST)
gamedata.InitCfg(CFG_PLAYROOM_DECORATE)
gamedata.InitCfg(CFG_PLAYROOM_MOOD)
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY)
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
}
func GetUnLockLv() int {
@ -26,6 +30,14 @@ func GetUnLockLv() int {
return gamedata.GetIntValue(data, "Value")
}
func GetGameOutline() int {
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "GameOutline")
if err != nil {
return 999
}
return gamedata.GetIntValue(data, "Value")
}
func GetOrderStar() int {
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "Star")
if err != nil {
@ -42,6 +54,14 @@ func GetRewardStar() int {
return gamedata.GetIntValue(data, "Value")
}
func GetTriggerCd() int {
data, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "CD")
if err != nil {
return 1000
}
return gamedata.GetIntValue(data, "Value")
}
func GetNormalItem() (int, int) {
data1, err := gamedata.GetDataByKey(CFG_PLAYROOM_CONST, "NormalFoodId")
if err != nil {
@ -108,6 +128,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)
@ -141,3 +169,38 @@ func GetBuyItem(Id int) ([]*item.Item, []*item.Item) {
}
return gamedata.GetItemList(data, "Cost2"), gamedata.GetItemList(data, "Buy")
}
func GetPhysiologyMax(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_PHYSIOLOGY_TYPE, Id)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "Max")
}
func GetPhysiologyDuration(Id int, Num int) int {
data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY)
if err != nil {
return 0
}
for _, v := range data {
Type := gamedata.GetIntValue(v, "Type")
if Type != Id {
continue
}
Min := gamedata.GetIntValue(v, "Min")
Max := gamedata.GetIntValue(v, "Max")
if Num >= Min && Num <= Max {
return gamedata.GetIntValue(v, "Per")
}
}
return 0
}
func GetMoodEffect(Id int) (int, int) {
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_PHYSIOLOGY_TYPE, Id)
if err != nil {
return 0, 0
}
return gamedata.GetIntValue(data, "MType"), gamedata.GetIntValue(data, "MEffect")
}

View File

@ -23,7 +23,7 @@
"ServerName": "Merge_Pet",
"ServerStatus" : 1,
"ServerCenter" : 1,
"GameConfPath": "F:/Github/pet_home_server/src/server/gamedata/config/",
"RedisAddr":"127.0.0.1",
"RedisPort" :"6379",

View File

@ -481,6 +481,7 @@ type SqlServerMailStruct struct {
End_time int64 `db:"end_time"`
Mail_type int `db:"mail_type"`
To_uids string `db:"to_uids"`
CreateTime int64 `db:"create_time"`
}
type SqlChargeOrderStruct struct {

View File

@ -1,7 +1,9 @@
package game
import (
"encoding/gob"
"fmt"
"os"
"server/GoUtil"
"server/conf"
cardCfg "server/conf/card"
@ -169,6 +171,11 @@ func ReqGmCommand(args []interface{}) error {
OrderMod.EimtOrder = make(map[string]struct{})
HandbookMod := player.PlayMod.getHandbookMod()
delete(HandbookMod.BookList, 125)
case "deleteOrder":
Id, _ := strconv.Atoi(arg[1])
OrderMod := player.PlayMod.getOrderMod()
delete(OrderMod.OrderList, Id)
player.PushClientRes(OrderMod.BackData())
case "miningReload":
MiningMod := player.PlayMod.getMiningMod()
MiningMod.ZeroUpdate(-1)
@ -247,6 +254,34 @@ func ReqGmCommand(args []interface{}) error {
case "resetCardSeasonFirst":
CardMod := player.PlayMod.getCardMod()
CardMod.SeasonFirst = false
case "addPhysiology":
PlayroomMod := player.PlayMod.getPlayroomMod()
Type, _ := strconv.Atoi(arg[1])
Num, _ := strconv.Atoi(arg[2])
PlayroomMod.AddPhysiology(Type, Num)
case "resetTriggerTime":
PlayroomMod := player.PlayMod.getPlayroomMod()
PlayroomMod.TriggerTime = 0
case "recoverUser":
file, err := os.OpenFile(conf.Server.GameConfPath+"user.info", os.O_RDWR|os.O_CREATE, 0666)
if err != nil {
log.Error("Failed to open user.info file: %v", err)
return err
}
// file.Write(buf.Bytes())
defer file.Close()
Uid := player.M_DwUin
file.Seek(0, 0)
decoder := gob.NewDecoder(file)
modList := PlayerModList{}
err = decoder.Decode(&modList)
player.PlayMod.mod_list = modList
if err != nil {
log.Error("Failed to decode user.info file: %v", err)
return err
}
BaseMod := player.PlayMod.getBaseMod()
BaseMod.Uid = Uid
}
player.PlayMod.save()
return nil

View File

@ -5,11 +5,13 @@ import (
"math"
"server/GoUtil"
baseCfg "server/conf/base"
playroomCfg "server/conf/playroom"
userCfg "server/conf/user"
"server/game/mod/card"
"server/game/mod/item"
"server/game/mod/limitedTimeEvent"
MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced
"server/game/mod/playroom"
"server/msg"
"time"
)
@ -137,17 +139,34 @@ 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)
}
}
p.PushClientRes(PlayroomMod.NotifyMood())
}
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
DiffValue := Physiology.Num - Num
MType, MEffect := playroomCfg.GetMoodEffect(Physiology.Id)
CleanMood := PlayroomMod.GetMoodInfo(playroom.MOOD_TYPE_CLEAN)
// 上厕所数值为0 且清洁度大于50时清洁度降至50
if Id == playroom.PHYSIOLOGY_TYPE_TOLIET && Num == 0 && CleanMood.Num > 50 {
CleanMood.Num = 50
} else {
PlayroomMod.AddMood(MType, -MEffect*DiffValue)
}
Physiology.Num = Num
p.PlayMod.save()
PlayroomBackData(p)
NextSecond := NewTime - Now
@ -155,12 +174,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
}
Num--
NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num)
Time += int64(NeedDuration)
if Time > Now {
return Time, Num
}
if Num == 0 {
return 0, 0
}
n++
}
}
func LimitedTimePlayroomWorkTrigger(p *Player) {
PlayroomMod := p.PlayMod.getPlayroomMod()
EndTime := PlayroomMod.Endtime

View File

@ -9,6 +9,11 @@ import (
"strings"
)
const (
MAIL_TYPE_SERVER = 1
MAIL_TYPE_USER = 2
)
type MailMgr struct {
*ServerMod
list map[int]*ServerMail
@ -38,10 +43,18 @@ func (m *MailMgr) Init() {
m.list = make(map[int]*ServerMail)
// 注册处理函数
m.init()
m.LoadMail()
m.LoadMail(nil)
m.RegisterHandler(msg.HANDLE_TYPE_MAIL_ADD, m.AddMail)
m.RegisterHandler(msg.HANDLE_TYPE_MAIL_RELOAD, m.LoadMail)
}
func (r *MailMgr) LoadMail() {
func (m *MailMgr) AddMail(msg *msg.Msg) (interface{}, error) {
ServerMail := msg.Extra.(*ServerMail)
m.list[ServerMail.Id] = ServerMail
return nil, nil
}
func (r *MailMgr) LoadMail(msg *msg.Msg) (interface{}, error) {
// 从数据库加载邮件
data := make([]*db.SqlServerMailStruct, 0)
db.GetServerMailData(&data)
@ -65,8 +78,30 @@ func (r *MailMgr) LoadMail() {
To_uids: Uids,
}
}
return nil, nil
}
func (r *MailMgr) Sync() {
G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL, Extra: r.list[1]})
func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail {
// 同步邮件
Now := GoUtil.Now()
list := make([]ServerMail, 0)
for _, v := range r.list {
if v.Start_time > 0 && v.Start_time > Now {
continue
}
if v.End_time > 0 && v.End_time < Now {
continue
}
if v.Register_time > 0 && v.Register_time < Register {
continue
}
if v.Mail_type == MAIL_TYPE_SERVER { //全服邮件
list = append(list, *v)
} else {
if GoUtil.InArray(Uid, v.To_uids) {
list = append(list, *v)
}
}
}
return list
}

View File

@ -340,15 +340,16 @@ func (p *Player) Login() {
LimitedTimeEventTrigger(p, 0)
// 猪猪银行触发
LimitedTimePiggyBankTrigger(p)
// playroom触发
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_ENTER)
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_FOOD)
LimitedTimePlayroomTrigger(p, playroom.MOOD_TYPE_CLEAN)
LimitedTimePlayroomWorkTrigger(p)
LimitedTimeEnergyAdd(p)
ActivityLogin(p)
LoignBack(p)
BaseMod := p.PlayMod.getBaseMod()
// playroom触发
PlayroomMod := p.PlayMod.getPlayroomMod()
PlayroomMod.UnLock(BaseMod.GetLevel())
LimitedTimePlayroomTrigger(p) // playroom数值变化
LimitedTimePlayroomWorkTrigger(p) // playroom打工
LimitedTimeEnergyAdd(p) // 能量定时处理
ActivityLogin(p) // 活动登录
LoignBack(p) // 登录返回数据
SyncMailMsg(p) // 同步邮件
BaseMod.Login()
p.PlayMod.getCardMod().Login(G_GameLogicPtr.SeverInfo.OpenTime)
if p.PlayerBaseMod.Data.UserName == "388faebe29ffe56666a04ea22b902b0f" {

View File

@ -426,6 +426,10 @@ func (p *PlayerBaseData) ClearData() bool {
return true
}
func (p *PlayerBaseData) GetRegisterTime() int64 {
return int64(p.Data.Rolecreatetime)
}
// 增加减少体力
func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
BaseMod := p.p.PlayMod.getBaseMod()
@ -435,6 +439,8 @@ func (p *PlayerBaseData) AddEnergy(player *Player, cnt int) error {
}
if cnt < 0 {
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_ENERGY, A: []interface{}{-cnt}})
BaseMod.FormatEnergyMul(NewEnergy)
p.p.PushClientRes(BaseMod.BackData())
}
if BaseMod.Energy >= p.GetMaxEnergy() && NewEnergy < p.GetMaxEnergy() {
Recover := userCfg.GetRecover(int(BaseMod.Level))
@ -523,9 +529,10 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int) (int, error) {
return 0, err
}
}
PlayroomMod := player.PlayMod.getPlayroomMod()
PlayroomMod.UnLock(int(BaseMod.Level))
player.PushClientRes(p.BackAsset())
return upLv, nil
}
func (p *PlayerBaseData) GetLevel() int {

View File

@ -197,9 +197,9 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
itemList = append(itemList, &item.Item{Id: item.ITEM_STAR_ID, Num: int(-loseGold)})
case msg.HANDLE_TYPE_SELL: //出售棋子
items, err := ChessMod.SellChess(ChessId)
// if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
// items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
// }
if checkChess(ChessId, BaseMod.GetEnergyMul(), ChessMod.GetEmitList()) { // 在订单中无法生成的棋子 出售获得原价宠物币
items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: mergeDataCfg.GetStarById(ChessId)}}
}
if err != nil {
return err
}
@ -241,7 +241,14 @@ func (p *PlayerChessData) ClearData() bool {
}
func checkChess(ChessId, EnergyMul int, Emit []int) bool {
if len(Emit) == 0 {
return false
}
ChessIdLv := mergeDataCfg.GetLvById(ChessId)
ChessIdType := mergeDataCfg.GetTypeById(ChessId)
if ChessIdType != "Product" {
return false
}
ChessIdColor := mergeDataCfg.GetColorById(ChessId)
if ChessIdColor == "Star" || ChessIdColor == "Energy" || ChessIdColor == "Diamond" {
return false
@ -254,12 +261,9 @@ func checkChess(ChessId, EnergyMul int, Emit []int) bool {
break
}
}
Min, Max := getChesslvRange(EmitId, EnergyMul)
_, Max := getChesslvRange(EmitId, EnergyMul)
Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor)
if ChessIdLv < Min-Adjust || ChessIdLv > Max-Adjust {
return true
}
return false
return ChessIdLv > Max-Adjust
}
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
@ -275,11 +279,14 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) {
}
func triggerComposeChess(player *Player, ChessId, EnergyMul int, Emit []int) {
return //TODO 暂时不用
return
OrderMod := player.PlayMod.getOrderMod()
if OrderMod.Step != 12 {
return
}
if !checkChess(ChessId, EnergyMul, Emit) {
return
}
OrderMod := player.PlayMod.getOrderMod()
OrderMod.CreateCleanOrder2([]int{ChessId})
player.PushClientRes(OrderMod.BackData())
}

View File

@ -191,28 +191,7 @@ func handle(p *Player, m *msg.Msg) error {
case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // # 锦标赛排名变动通知
BackChampship(p)
case msg.HANDLE_TYPE_MAIL: // 邮件操作
MailMod := p.PlayMod.getMailMod()
if m.Extra == nil {
return nil
}
mail := m.Extra.(*ServerMail)
Now := GoUtil.Now()
if mail.Mail_type == 1 {
if mail.Start_time > 0 && mail.Start_time > Now {
return nil
}
if mail.End_time > 0 && mail.End_time < Now {
return nil
}
MailId := MailMod.Send(mail.Title, mail.Content, mail.Items)
p.PushClientRes(MailMod.NotifyMail(MailId))
} else if mail.Mail_type == 2 {
if GoUtil.InArray(int(p.M_DwUin), mail.To_uids) {
MailId := MailMod.Send(mail.Title, mail.Content, mail.Items)
p.PushClientRes(MailMod.NotifyMail(MailId))
}
}
SyncMailMsg(p)
case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了
PlayroomMod := p.PlayMod.getPlayroomMod()
Items := make([]*item.Item, 0)
@ -322,6 +301,18 @@ func SyncFriendMsg(p *Player) {
p.PlayMod.save()
}
func SyncMailMsg(p *Player) {
ServerMailList := G_GameLogicPtr.MailMgr.Sync(int(p.M_DwUin), p.GetPlayerBaseMod().GetRegisterTime())
MailMod := p.PlayMod.getMailMod()
for _, v := range ServerMailList {
if GoUtil.InArray(v.Id, MailMod.ServerMail) {
continue
}
MailMod.ServerMail = append(MailMod.ServerMail, v.Id)
MailMod.Send(v.Title, v.Content, v.Items)
}
}
// 返回好友信息
func FriendListBackData(p *Player) {
FriendMod := p.PlayMod.getFriendMod()
@ -534,6 +525,12 @@ func BackChampship(p *Player) {
}
func PlayroomOrderTrigger(p *Player) error {
CD := playroomCfg.GetTriggerCd()
PlayroomMod := p.PlayMod.getPlayroomMod()
Now := GoUtil.Now()
if PlayroomMod.TriggerTime+int64(CD) > Now {
return nil
}
PlayroomUnlockLv := playroomCfg.GetUnLockLv()
if p.GetPlayerBaseMod().GetLevel() < PlayroomUnlockLv {
return nil
@ -547,7 +544,6 @@ func PlayroomOrderTrigger(p *Player) error {
log.Debug("uid : %d, PlayroomOrderTrigger, err : %s", p.M_DwUin, err)
return err
}
PlayroomMod := p.PlayMod.getPlayroomMod()
PlayroomMod.CreateOrderReward(Star, p.PlayMod.getItemMod())
PlayroomBackData(p)
p.PlayMod.save()
@ -606,6 +602,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

@ -184,10 +184,10 @@ func ReqRewardOrder(args []interface{}) error {
proto.Unmarshal(buf, req)
OrderMod := player.PlayMod.getOrderMod()
ChessMod := player.PlayMod.getChessMod()
PlayroomMod := player.PlayMod.getPlayroomMod()
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
Item, mergeList, OrderType, Star, err := OrderMod.RewardOrder(int(req.OrderId))
if OrderType == order.Trigger_type { // playroom触发式订单获取额外道具
PlayroomMod := player.PlayMod.getPlayroomMod()
Item1 := PlayroomMod.GetReward()
Item = item.Merge(Item, Item1)
P1, P2 := playroomCfg.GetPremiumItem()
@ -196,6 +196,10 @@ func ReqRewardOrder(args []interface{}) error {
} else {
Star = int(math.Ceil(float64(Star) * 0.6))
}
Target := GetVisitorPlayer(player)
PlayroomMod.Target = Target
PlayroomMod.Status = playroom.STATUS_VISIT
PlayroomBackData(player)
}
if !OrderMod.CheckSuperOrder() {
@ -887,7 +891,7 @@ func ReqExStarReward(args []interface{}) error {
func ReqAllCollectReward(args []interface{}) error {
_, player, _ := ParseArgs(args)
CardMod := player.PlayMod.getCardMod()
itemList, err := CardMod.AllCollectReward()
itemList, itemList2, err := CardMod.AllCollectReward()
if err != nil {
player.SendErrClienRes(&msg.ResAllCollectReward{
Code: msg.RES_CODE_FAIL,
@ -904,6 +908,14 @@ func ReqAllCollectReward(args []interface{}) error {
})
return err
}
err = player.HandleItem(itemList2, msg.ITEM_POP_LABEL_AllCollectRewardHB.String())
if err != nil {
player.SendErrClienRes(&msg.ResAllCollectReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.PlayMod.save()
player.PushClientRes(CardMod.NotifyCard())
player.PushClientRes(&msg.ResAllCollectReward{
@ -2929,7 +2941,7 @@ func ReqPlayroomInfo(args []interface{}) error {
}
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer)
PlayroomMod.SetTarget(Targer)
if PlayerData.Loginout < GoUtil.Now()-300 { // todo DEBUG
if PlayerData.Loginout < GoUtil.Now()-int64(playroomCfg.GetGameOutline()) { // todo DEBUG
PlayroomMod.SetGameId(1)
Star := min(500, max(PlayerData.Star/10, 10))
ChessMod := player.PlayMod.getChessMod()
@ -2970,7 +2982,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,
@ -2987,7 +2999,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

@ -180,3 +180,11 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 {
}
return Energy / float64(5000)
}
func UnitPlayroom(p *Player) error {
PlayroomMod := p.PlayMod.getPlayroomMod()
PlayroomMod.Physiology[1].Num = 10
PlayroomMod.Physiology[1].Time = 1738978968
LimitedTimePlayroomTrigger(p)
return nil
}

View File

@ -3,6 +3,8 @@ package game
import (
"encoding/json"
"server/GoUtil"
Msg "server/game/mod/msg"
"server/gamedata"
"server/msg"
"server/pkg/github.com/name5566/leaf/gate"
"server/pkg/github.com/name5566/leaf/log"
@ -11,8 +13,10 @@ import (
)
var AdminFuncMap = map[string]func([]interface{}) error{
"ReqAdminInfo": AdminPlayerInfo,
"ReqServerInfo": ReqServerInfo,
"ReqAdminInfo": AdminPlayerInfo,
"ReqServerInfo": ReqServerInfo,
"ReqReloadServerMail": ReqReloadServerMail,
"ReqReload": ReqReload,
}
func AdminProcess(Func string, args []interface{}) {
@ -92,3 +96,22 @@ func ReqServerInfo(args []interface{}) error {
AdminPlayerBack(a, JsonBuff)
return nil
}
func ReqReloadServerMail(args []interface{}) error {
G_GameLogicPtr.MailMgrCall(&Msg.Msg{Type: Msg.HANDLE_TYPE_MAIL_RELOAD})
G_GameLogicPtr.NotifyAll(&Msg.Msg{Type: Msg.HANDLE_TYPE_MAIL})
return nil
}
func ReqReload(args []interface{}) error {
a, _ := ParseAdminArgs(args)
gamedata.Reload()
res := make(map[string]interface{})
res["Code"] = 0
JsonBuff, err := json.Marshal(res)
if err != nil {
return err
}
AdminPlayerBack(a, JsonBuff)
return nil
}

View File

@ -80,7 +80,6 @@ func HandleClientReq(args []interface{}) {
ResRegisterAccount.ResultCode = MergeConst.Protocol_Error_Account_OR_PWD_Short
data, _ := proto.Marshal(ResRegisterAccount)
gl.PackResInfo(a, "ResRegisterAccount", data)
break
}
gl.Db_AccountInfo.UserName = detail.UserName

View File

@ -211,3 +211,20 @@ func (b *Base) GetEnergyByAD() ([]*item.Item, error) {
b.EnergyAD += 1
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 25}}, nil
}
func (b *Base) FormatEnergyMul(Energy int) {
for {
EnergyLimit := baseCfg.GetLimitEnergyMul(b.Level)
if EnergyLimit == 0 {
return
}
if Energy > EnergyLimit {
return
}
b.EnergyMul--
if b.EnergyMul < 0 {
b.EnergyMul = 0
return
}
}
}

View File

@ -39,6 +39,11 @@ const (
MASTER_CARD_GOLD = 7
)
const (
HANDBOOK_STATUS_IDLE = 1 // 未领取
HANDBOOK_STATUS_GET = 2 // 已领取
)
const (
TYPE_CARD_GIVE = 1 // 请求卡牌
TYPE_CARD_SEND = 2 // 赠送卡牌
@ -101,14 +106,15 @@ func (c *CardMod) InitData() {
for k := range c.CardList {
if _, ok := c.Handbook[k]; !ok {
c.Handbook[k] = 1
c.Handbook[k] = HANDBOOK_STATUS_IDLE
}
}
}
func (c *CardMod) Login(ServerOpenTime int64) {
func (c *CardMod) Login(ServerOpenTime int64) []*item.Item {
Now := GoUtil.Now()
Duration := cardCfg.GetCardDuration()
HandbookItemNum := 0
if c.EndTime < Now {
c.CardList = make(map[int]int)
c.ExchangeStar = 0
@ -116,10 +122,22 @@ func (c *CardMod) Login(ServerOpenTime int64) {
c.AllCollect = 0
c.EndTime = 0
c.Round = 0
c.Handbook = make(map[int]int)
for k, v := range c.Handbook {
if v == HANDBOOK_STATUS_GET {
continue
}
Round := cardCfg.GetRoundById(k)
if Round < c.Round {
continue
}
HandbookItemNum += cardCfg.GetStarById(k)
}
}
if c.EndTime == 0 {
c.EndTime = ((Now-ServerOpenTime)/Duration+1)*Duration + ServerOpenTime
}
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: HandbookItemNum}}
}
func (c *CardMod) ZeroUpdate() {
@ -141,7 +159,7 @@ func (c *CardMod) AddCard(Id int) {
}
_, ok = c.Handbook[Id]
if !ok {
c.Handbook[Id] = 1
c.Handbook[Id] = HANDBOOK_STATUS_IDLE
c.Cache.Handbook[Id] = 1
}
c.Cache.Card[Id]++
@ -267,19 +285,18 @@ func (c *CardMod) ExStarReward(Id int) ([]*item.Item, error) {
}
// 领取全收集奖励
func (c *CardMod) AllCollectReward() ([]*item.Item, error) {
func (c *CardMod) AllCollectReward() ([]*item.Item, []*item.Item, error) {
if c.AllCollect == 1 {
return nil, fmt.Errorf("AllCollectReward already collect")
return nil, nil, fmt.Errorf("AllCollectReward already collect")
}
AllCardId := cardCfg.GetAllCardId(c.Round)
for _, v := range AllCardId {
count, ok := c.CardList[v]
if !ok || count <= 0 {
return nil, fmt.Errorf("card not fully collect")
return nil, nil, fmt.Errorf("card not fully collect")
}
}
c.AllCollect = 0
c.Round++
c.CollectReward = make(map[int]struct{})
ExStar := 0
for k, v := range c.CardList {
@ -290,7 +307,20 @@ func (c *CardMod) AllCollectReward() ([]*item.Item, error) {
c.ExchangeStar += ExStar
c.Cache.ExStar += ExStar
Item := cardCfg.GetAllCollectReward()
return Item, nil
HandbookItemNum := 0
for k, v := range c.Handbook {
if v == HANDBOOK_STATUS_GET {
continue
}
Round := cardCfg.GetRoundById(k)
if Round < c.Round {
continue
}
HandbookItemNum += cardCfg.GetStarById(k)
}
c.Round++
c.Handbook = make(map[int]int)
return Item, []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: HandbookItemNum}}, nil
}
func (c *CardMod) ResetCardFestival() {
@ -526,12 +556,12 @@ func (c *CardMod) AddGoldTimes() {
func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
if v, ok := c.Handbook[CardId]; ok {
if v == 2 {
if v == HANDBOOK_STATUS_GET {
return nil, fmt.Errorf("GetHandbookReward already get")
}
Star := cardCfg.GetStarById(CardId)
c.Handbook[CardId] = 2
c.Cache.Handbook[CardId] = 2
c.Handbook[CardId] = HANDBOOK_STATUS_GET
c.Cache.Handbook[CardId] = HANDBOOK_STATUS_GET
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, Star)}, nil
}
return nil, fmt.Errorf("GetHandbookReward not find card")

View File

@ -8,8 +8,9 @@ import (
)
type MailMod struct {
List map[int]*MailInfo // 邮件列表
AutoId int // 自增id
List map[int]*MailInfo // 邮件列表
AutoId int // 自增id
ServerMail []int
}
const (

View File

@ -66,7 +66,9 @@ const (
HANDLE_TYPE_PLAYROOM_LOSE // playroom偷取物品
SERVER_NOON_UPDATE // 12点更新
FRIEND_TREASURE_HANDLE //好友宝藏操作
FRIEND_TREASURE_HANDLE //好友宝藏操作
HANDLE_TYPE_MAIL_ADD //添加邮件
HANDLE_TYPE_MAIL_RELOAD //重新加载邮件
)
const (

View File

@ -93,9 +93,6 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) {
for _, v := range v.MergeId {
Star += mergeDataCfg.GetStarById(v)
}
if v.Type == Trigger_type {
Star = int(float64(Star) * 0.8)
}
if v.Type == Super_type {
Items := limitedTimeEventCfg.GetSuperOrderReward(Star)
ItemList = append(ItemList, Items...)
@ -453,7 +450,16 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ
//额外订单补充2当玩家的棋盘中出现三个相同的满级产物时立刻生成一个对应的收购订单
for k := range MaxLvChess {
ChessNum := GoUtil.GetElemNum(ChessList, k)
if ChessNum == 3 {
OrderChess := 0
for _, order := range o.OrderList {
for _, v := range order.MergeId {
if v == k {
OrderChess++
}
}
}
OrderNum := (ChessNum - OrderChess) / 3
for i := 0; i < OrderNum; i++ {
b1 = true
o.addOrder([]int{k, k, k}, DIFF_LOW, Extra_type)
}

View File

@ -23,6 +23,7 @@ type PlayroomMod struct {
Reward []*item.Item // 奖励
DayFirstT int // 每日未首次触发次数
Trigger int // 未触发次数
TriggerTime int64 // 触发时间
HasVisit map[int]int64 // 今日已拜访的玩家
Target int // 拜访的目标
GameId int // 游戏ID
@ -38,6 +39,7 @@ type PlayroomMod struct {
NoFlip int // 连续未获取最高翻牌奖励次数
TodayFlip bool // 今日是否已获得最高档奖励
JackpotNum int // 每日转盘数量
Physiology map[int]*Physiology
}
const (
@ -55,6 +57,12 @@ const (
FLIP_TYPE_COPPER = 1 // 铜
FLIP_TYPE_SILVER = 2 // 银
FLIP_TYPE_GOLD = 3 // 金
PHYSIOLOGY_TYPE_STROKE = 1 // 抚摸
PHYSIOLOGY_TYPE_PLAY = 2 // 玩耍
PHYSIOLOGY_TYPE_FEED = 3 // 进食
PHYSIOLOGY_TYPE_CLEAN = 4 // 清洁
PHYSIOLOGY_TYPE_TOLIET = 5 // 上厕所
)
type Mood struct {
@ -63,6 +71,12 @@ type Mood struct {
Time int64
}
type Physiology struct {
Id int
Num int
Time int64
}
type Info struct {
Time int64
Times int
@ -86,6 +100,9 @@ func (p *PlayroomMod) InitData() {
if p.MoodInfo == nil {
p.MoodInfo = make(map[int]*Mood)
}
if p.Physiology == nil {
p.Physiology = make(map[int]*Physiology)
}
if p.Reward == nil {
p.Reward = make([]*item.Item, 0)
}
@ -129,10 +146,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
}
@ -171,54 +200,41 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) {
return
}
p.Reward = make([]*item.Item, 0)
var Item1, Item2 int
VisitorItem := playroomCfg.GetVisitorItem()
if Star < playroomCfg.GetOrderStar() {
Item1, Item2 = playroomCfg.GetNormalItem()
} else {
Item1, Item2 = playroomCfg.GetPremiumItem()
}
NormalFoodId, NormalCleanId := playroomCfg.GetNormalItem()
PremiumFoodId, PremiumCleanId := playroomCfg.GetPremiumItem()
Item1Num := itemMod.GetItem(Item1)
Item2Num := itemMod.GetItem(Item2)
if p.DayFirstT == 2 {
p.Reward = append(p.Reward, &item.Item{Id: VisitorItem, Num: 1})
NormalFoodNum := itemMod.GetItem(NormalFoodId)
NormalCleanNum := itemMod.GetItem(NormalCleanId)
PremiumFoodNum := itemMod.GetItem(PremiumFoodId)
PremiumCleanNum := itemMod.GetItem(PremiumCleanId)
p.TriggerTime = GoUtil.Now()
if NormalFoodNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: NormalFoodId, Num: 1})
return
}
if p.Trigger == 4 {
p.Reward = append(p.Reward, &item.Item{Id: VisitorItem, Num: 1})
p.Trigger = 0
if NormalCleanNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: NormalCleanId, Num: 1})
return
}
if Item1Num == 0 && Item2Num == 0 {
Prob := GoUtil.RandSlice([]int{Item1, Item2})
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
p.DayFirstT++
p.Trigger++
if PremiumFoodNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: PremiumFoodId, Num: 1})
return
}
if math.Abs(float64(Item1Num-Item2Num)) > 3 {
RI := GoUtil.IfTrue(Item1Num > Item2Num, Item2, Item1).(int)
p.Reward = append(p.Reward, &item.Item{Id: RI, Num: 1})
p.DayFirstT++
p.Trigger++
if PremiumCleanNum == 0 {
p.Reward = append(p.Reward, &item.Item{Id: PremiumCleanId, Num: 1})
return
}
var RandSlice []int
if Star < playroomCfg.GetOrderStar() {
RandSlice = []int{Item1, Item2}
} else {
RandSlice = []int{Item1, Item2, VisitorItem}
if math.Abs(float64((NormalCleanNum+PremiumCleanNum)-(NormalFoodNum+PremiumFoodNum))) > 3 {
RandSlice := GoUtil.IfTrue((NormalCleanNum+PremiumCleanNum) > (NormalFoodNum+PremiumFoodNum), []int{PremiumCleanId, NormalCleanId}, []int{NormalFoodId, PremiumFoodId}).([]int)
Prob := GoUtil.RandSlice(RandSlice)
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
return
}
RandSlice = []int{NormalFoodId, NormalCleanId, PremiumFoodId, PremiumCleanId}
Prob := GoUtil.RandSlice(RandSlice)
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
if Prob == VisitorItem {
p.DayFirstT = 3
p.Trigger = 0
} else {
p.DayFirstT++
p.Trigger++
}
}
func (p *PlayroomMod) GetReward() []*item.Item {
@ -233,6 +249,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
}
@ -251,6 +269,21 @@ func (p *PlayroomMod) AddMood(Id, Num int) {
}
}
func (p *PlayroomMod) AddPhysiology(Id, Num int) {
Phy := p.GetPhysiology(Id)
if Phy == nil {
Phy = &Physiology{Id: Id, Num: 0, Time: 0}
}
Max := playroomCfg.GetPhysiologyMax(Id)
Phy.Num = max(0, min(Phy.Num+Num, Max))
if Phy.Num != 0 && Phy.Time == 0 {
Phy.Time = GoUtil.Now()
}
if Phy.Num == 0 {
Phy.Time = 0
}
}
func (p *PlayroomMod) AddVisitor(Id int, Time int64) {
v, ok := p.Visitor[Id]
if !ok {
@ -381,8 +414,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()),
}
}
@ -466,3 +500,24 @@ func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
func (p *PlayroomMod) BuyItem(Id int) ([]*item.Item, []*item.Item) {
return playroomCfg.GetBuyItem(Id)
}
func (p *PlayroomMod) UnLock(Lv int) {
UnlockLv := playroomCfg.GetUnLockLv()
if Lv < UnlockLv {
return
}
if len(p.Physiology) == 0 {
Now := GoUtil.Now()
p.Physiology = make(map[int]*Physiology)
for k := 1; k <= 5; k++ {
Max := playroomCfg.GetPhysiologyMax(k)
p.Physiology[k] = &Physiology{Id: k, Num: Max, Time: Now}
}
}
if len(p.MoodInfo) == 0 {
p.MoodInfo = make(map[int]*Mood)
for k := 1; k <= 3; k++ {
p.MoodInfo[k] = &Mood{Id: k, Num: 100}
}
}
}

Binary file not shown.

File diff suppressed because it is too large Load Diff