Merge branch 'develop' into sdk
This commit is contained in:
commit
b43aa1c699
@ -12,6 +12,7 @@ const (
|
||||
CFG_PLAYROOM_MOOD = "PlayroomMood"
|
||||
CFG_PLAYROOM_PHYSIOLOGY = "PlayroomPhysiology"
|
||||
CFG_PLAYROOM_PHYSIOLOGY_TYPE = "PlayroomPhysiologyType"
|
||||
CFG_PLAYROOM_SHOP = "PlayroomShop"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -20,6 +21,15 @@ func init() {
|
||||
gamedata.InitCfg(CFG_PLAYROOM_MOOD)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
gamedata.InitCfg(CFG_PLAYROOM_SHOP)
|
||||
}
|
||||
|
||||
func GetShopItem(Id int) (int, []*item.Item) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_SHOP, Id)
|
||||
if err != nil {
|
||||
return 0, nil
|
||||
}
|
||||
return gamedata.GetIntValue(data, "ItemId"), gamedata.GetItemList(data, "Cost")
|
||||
}
|
||||
|
||||
func GetUnLockLv() int {
|
||||
@ -197,6 +207,18 @@ func GetPhysiologyDuration(Id int, Num int) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetPhysiologyTypeList() []int {
|
||||
r := make([]int, 0)
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_PHYSIOLOGY_TYPE)
|
||||
if err != nil {
|
||||
return []int{}
|
||||
}
|
||||
for k := range data {
|
||||
r = append(r, GoUtil.Int(k))
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func GetMoodEffect(Id int) (int, int) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_PLAYROOM_PHYSIOLOGY_TYPE, Id)
|
||||
if err != nil {
|
||||
|
||||
@ -17,6 +17,7 @@ type FriendMgr struct {
|
||||
}
|
||||
|
||||
type FirendData struct {
|
||||
Id int64
|
||||
List map[int][]*msg.Msg // 本服信箱
|
||||
ClusterMsg map[int][]*msg.Msg // 集群信箱
|
||||
}
|
||||
@ -69,19 +70,31 @@ func (f *FriendMgr) getData() *FirendData {
|
||||
return f.data.(*FirendData)
|
||||
}
|
||||
|
||||
func (f *FriendMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
|
||||
Now := GoUtil.Now()
|
||||
for k, v := range f.getData().List {
|
||||
for j, msg := range v {
|
||||
if msg.End < Now-7*24*3600 {
|
||||
f.getData().List[k] = append(f.getData().List[k][:j], f.getData().List[k][j+1:]...)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 通知玩家
|
||||
func (f *FriendMgr) sendToPlayer(m *msg.Msg) (interface{}, error) {
|
||||
f.getData().Id++
|
||||
m.Id = f.getData().Id
|
||||
err := sendToPlayer(m)
|
||||
if err != nil {
|
||||
log.Debug("send to player error : %s\n", err)
|
||||
ToServerId := GoUtil.GetServerIdByUid(m.To)
|
||||
if ToServerId != conf.Server.ServerID {
|
||||
f.getData().ClusterMsg[m.To] = append(f.getData().ClusterMsg[m.To], m) // 保存到集群消息
|
||||
} else {
|
||||
f.getData().List[m.To] = append(f.getData().List[m.To], m) // 保存到本地消息
|
||||
}
|
||||
f.update = true
|
||||
return nil, err
|
||||
if err == nil {
|
||||
m.H = 1
|
||||
}
|
||||
ToServerId := GoUtil.GetServerIdByUid(m.To)
|
||||
if ToServerId != conf.Server.ServerID {
|
||||
f.getData().ClusterMsg[m.To] = append(f.getData().ClusterMsg[m.To], m) // 保存到集群消息
|
||||
} else {
|
||||
f.getData().List[m.To] = append(f.getData().List[m.To], m) // 保存到本地消息
|
||||
}
|
||||
log.Debug("send to player success")
|
||||
return nil, nil
|
||||
@ -90,7 +103,9 @@ func (f *FriendMgr) sendToPlayer(m *msg.Msg) (interface{}, error) {
|
||||
// 同步信息
|
||||
func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) {
|
||||
data := f.getData().List[m.From]
|
||||
f.getData().List[m.From] = make([]*msg.Msg, 0)
|
||||
for _, v := range data {
|
||||
v.H = 1
|
||||
}
|
||||
log.Debug("sync friendMgr msg to player %d success mailbox %v", m.From, data)
|
||||
return data, nil
|
||||
}
|
||||
|
||||
@ -49,7 +49,8 @@ func RegisterMsgProcessFunc(key string, value1 interface{}) {
|
||||
func RunNetProcessByKey(key string, param []interface{}) error {
|
||||
fun, ok := RegisterNetWorkFunc[key]
|
||||
if ok {
|
||||
err := fun.(func([]interface{}) error)(param)
|
||||
_, player, buf := ParseArgs(param)
|
||||
err := fun.(func(*Player, []byte) error)(player, buf)
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf("cant find network func %s", key)
|
||||
@ -810,17 +811,19 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqPlayroomChip", ReqPlayroomChip) // 消除碎片
|
||||
RegisterMsgProcessFunc("ReqPlayroomOutline", ReqPlayroomOutline) // 打工离线
|
||||
RegisterMsgProcessFunc("ReqPlayroomWrokOutline", ReqPlayroomWrokOutline) // 打工离线完成
|
||||
RegisterMsgProcessFunc("ReqPlayroomShop", ReqPlayroomShop) // playroom 商店
|
||||
RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品
|
||||
|
||||
// 宠物宝藏
|
||||
RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureFilp", ReqFriendTreasureFilp) // 翻牌
|
||||
RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 结束游戏
|
||||
RegisterMsgProcessFunc("ReqPlayroomBuyItem", ReqPlayroomBuyItem) // 购买playroom物品
|
||||
|
||||
RegisterMsgProcessFunc("ReqKafkaLog", ReqKafkaLog) // 客户端日志
|
||||
RegisterMsgProcessFunc("ReqCreateOrderSn", ReqCreateOrderSn) // 创建订单号
|
||||
RegisterMsgProcessFunc("ReqShippingOrder", ReqShippingOrder) // 获取订单号
|
||||
|
||||
}
|
||||
|
||||
func (ad *GameLogic) CreateHttpManager() {
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
playroomCfg "server/conf/playroom"
|
||||
"server/db"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/friend"
|
||||
"server/game/mod/item"
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/game/mod/playroom"
|
||||
@ -160,14 +161,6 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
G_GameLogicPtr.ChampshipMgrSend(&MsgMod.Msg{
|
||||
Type: MsgMod.SERVER_ZERO_UPDATE,
|
||||
})
|
||||
case "addMail":
|
||||
MailMod := player.PlayMod.getMailMod()
|
||||
Id := MailMod.Send("test", "test", []*item.Item{item.NewItem(100001, 1)})
|
||||
player.PushClientRes(MailMod.NotifyMail(Id))
|
||||
case "addMail2":
|
||||
MailMod := player.PlayMod.getMailMod()
|
||||
Id := MailMod.Send("test", "test", []*item.Item{})
|
||||
player.PushClientRes(MailMod.NotifyMail(Id))
|
||||
case "resetEmitOrder":
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
OrderMod.EimtOrder = make(map[string]struct{})
|
||||
@ -264,6 +257,9 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
case "resetTriggerTime":
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.TriggerTime = 0
|
||||
case "resetTimeline":
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
FriendMod.Log = make([]*friend.LogInfo, 0)
|
||||
case "recoverUser":
|
||||
file, err := os.OpenFile(conf.Server.GameConfPath+"user.info", os.O_RDWR|os.O_CREATE, 0666)
|
||||
if err != nil {
|
||||
@ -284,6 +280,15 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
}
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.Uid = Uid
|
||||
case "copyUser":
|
||||
p1 := new(Player)
|
||||
p1.InitPlayer(arg[1])
|
||||
BaseMod := p1.PlayMod.getBaseMod()
|
||||
BaseMod.Uid = player.M_DwUin
|
||||
BaseMod.NickName = player.PlayMod.getBaseMod().NickName
|
||||
BaseMod.LoginTime = GoUtil.Now()
|
||||
player.PlayMod.mod_list = p1.PlayMod.mod_list
|
||||
|
||||
default:
|
||||
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
|
||||
}
|
||||
|
||||
@ -207,8 +207,8 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
PlayroomMod.AddVisitor(m.From, m.SendT)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_VISIT, fmt.Sprintf("%d,%d", Items[0].Id, Items[0].Num))
|
||||
if len(Items) > 0 && Items[0].Id == item.ITEM_STAR_ID {
|
||||
ItemMod := p.PlayMod.getItemMod()
|
||||
StarNum := ItemMod.GetItem(item.ITEM_STAR_ID)
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
StarNum := BaseMod.GetStar()
|
||||
Items[0].Num = min(Items[0].Num, StarNum)
|
||||
p.HandleLoseItem(Items, "")
|
||||
} else {
|
||||
@ -288,6 +288,8 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error {
|
||||
// 同步好友请求
|
||||
func SyncFriendMsg(p *Player) {
|
||||
MsgList := G_GameLogicPtr.FriendMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_SYNC, From: int(p.M_DwUin)})
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
MsgId := FriendMod.GetSyncId()
|
||||
if MsgList == nil {
|
||||
return
|
||||
}
|
||||
@ -298,9 +300,18 @@ func SyncFriendMsg(p *Player) {
|
||||
sort.Slice(ml, func(i, j int) bool {
|
||||
return ml[i].SendT < ml[j].SendT
|
||||
})
|
||||
maxId := int64(0)
|
||||
for _, v := range ml {
|
||||
maxId = max(maxId, v.Id)
|
||||
if v.H == 1 {
|
||||
continue
|
||||
}
|
||||
if v.Id > 0 && v.Id <= MsgId {
|
||||
continue
|
||||
}
|
||||
handle(p, v)
|
||||
}
|
||||
FriendMod.SetSyncId(maxId)
|
||||
p.PlayMod.save()
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,7 @@ func (s *ServerMod) init() {
|
||||
s.update = false
|
||||
s.LoadData()
|
||||
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME)*time.Second, func() {
|
||||
s.SaveData()
|
||||
go s.SaveData()
|
||||
})
|
||||
go func() {
|
||||
defer func() {
|
||||
@ -128,7 +128,7 @@ func (s *ServerMod) Call(m *msg.Msg) (interface{}, error) {
|
||||
// mysql 保存消息
|
||||
func (s *ServerMod) SaveData() {
|
||||
s.mDispatr.AfterFunc(time.Duration(PER_SAVE_TIME+GoUtil.RandNum(5, 10))*time.Second, func() {
|
||||
s.SaveData()
|
||||
go s.SaveData()
|
||||
})
|
||||
DbData := db.SqlServerModStruct{}
|
||||
DbData.Key = s.key
|
||||
@ -139,16 +139,19 @@ func (s *ServerMod) SaveData() {
|
||||
log.Debug("SaveData Marshal failed,Mod Key: %s err:%v", s.key, err)
|
||||
}
|
||||
// log.Debug("SaveData Marshal success,Mod Key: %s", s.key)
|
||||
ctx := context.Background()
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
txOptions := &sql.TxOptions{}
|
||||
tx, err := db.SqlDb.BeginTx(ctx, txOptions)
|
||||
if err != nil {
|
||||
log.Debug("SaveData sql begin tx failed,Mod Key: %s err:%v", s.key, err)
|
||||
return
|
||||
}
|
||||
err = db.SaveServerData(&DbData)
|
||||
if err != nil {
|
||||
tx.Rollback()
|
||||
log.Debug("SaveData sql exec ,Mod Key: %s err:%v", s.key, err)
|
||||
return
|
||||
}
|
||||
tx.Commit()
|
||||
}
|
||||
|
||||
@ -32,6 +32,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
}
|
||||
OrderData, err = GoogleVerify(player, OrderSn, req.ProduceId, req.Token)
|
||||
if err != nil {
|
||||
log.Debug("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)
|
||||
log.Debug("GoogleVerify err:%v", err)
|
||||
time.Sleep(1 * time.Second)
|
||||
continue
|
||||
|
||||
@ -176,6 +176,7 @@ func HandleClientReq(args []interface{}) {
|
||||
}()
|
||||
p.(*Player).args = make(map[string]interface{})
|
||||
p.(*Player).args["func"] = m
|
||||
p.(*Player).args["agent"] = a
|
||||
err := RunNetProcessByKey(m.GetFunc(), []interface{}{a, buf})
|
||||
if err != nil {
|
||||
log.Debug("uid : %d, func : %s, err : %s", p.(*Player).M_DwUin, m.GetFunc(), err)
|
||||
|
||||
@ -13,6 +13,7 @@ type FriendMod struct {
|
||||
Card map[string]*card.CardInfo // 收到的申请交换
|
||||
Log []*LogInfo // 日志
|
||||
AutoId int
|
||||
Id int64 // 已同步msg ID
|
||||
}
|
||||
|
||||
const (
|
||||
@ -61,6 +62,14 @@ func (f *FriendMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetSyncId() int64 {
|
||||
return f.Id
|
||||
}
|
||||
|
||||
func (f *FriendMod) SetSyncId(Id int64) {
|
||||
f.Id = Id
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddFriend(id int) {
|
||||
f.FriendList[id] = struct{}{}
|
||||
delete(f.ApplyList, id)
|
||||
|
||||
@ -158,3 +158,17 @@ func Merge(Item1, Item2 []*Item) []*Item {
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func MutilItem(i []*Item, num int) []*Item {
|
||||
if i == nil {
|
||||
return nil
|
||||
}
|
||||
res := make([]*Item, 0)
|
||||
for _, v := range i {
|
||||
res = append(res, &Item{
|
||||
Id: v.Id,
|
||||
Num: v.Num * num,
|
||||
})
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
@ -10,6 +10,8 @@ type Msg struct {
|
||||
SendT int64 // 发送时间
|
||||
End int64 // 过期时间
|
||||
Extra interface{} //额外信息
|
||||
Id int64
|
||||
H int //处理类型
|
||||
}
|
||||
|
||||
var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE}
|
||||
|
||||
@ -465,9 +465,10 @@ func (p *PlayroomMod) FlipCard(Pos int) (int, error) {
|
||||
return Prob, nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
|
||||
func (p *PlayroomMod) GetFlipReward() ([]*item.Item, int, error) {
|
||||
check := make(map[int]int)
|
||||
Items := make([]*item.Item, 0)
|
||||
T := p.Target
|
||||
for _, v := range p.Flip {
|
||||
check[v]++
|
||||
if check[v] == 3 {
|
||||
@ -488,10 +489,10 @@ func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
|
||||
p.GameId = 0
|
||||
p.Flip = make(map[int]int)
|
||||
p.Target = 0
|
||||
return Items, nil
|
||||
return Items, T, nil
|
||||
}
|
||||
}
|
||||
return Items, fmt.Errorf("GetFlipReward check is not 3")
|
||||
return Items, T, fmt.Errorf("GetFlipReward check is not 3")
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) BuyItem(Id int) ([]*item.Item, []*item.Item) {
|
||||
@ -506,9 +507,10 @@ func (p *PlayroomMod) UnLock(Lv int) {
|
||||
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}
|
||||
TypeList := playroomCfg.GetPhysiologyTypeList()
|
||||
for _, v := range TypeList {
|
||||
Max := playroomCfg.GetPhysiologyMax(v)
|
||||
p.Physiology[v] = &Physiology{Id: v, Num: Max, Time: Now}
|
||||
}
|
||||
}
|
||||
if len(p.MoodInfo) == 0 {
|
||||
@ -518,3 +520,13 @@ func (p *PlayroomMod) UnLock(Lv int) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// shop
|
||||
func (p *PlayroomMod) ShopBuy(Id, Num int) ([]*item.Item, []*item.Item, error) {
|
||||
AddItemId, CostItem := playroomCfg.GetShopItem(Id)
|
||||
if AddItemId == 0 {
|
||||
return nil, nil, fmt.Errorf("ShopBuy AddItemId is 0")
|
||||
}
|
||||
NewCostItem := item.MutilItem(CostItem, Num)
|
||||
return []*item.Item{item.NewItem(AddItemId, Num)}, NewCostItem, nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user