game_sync/worldsrv/invitecode.go

110 lines
2.8 KiB
Go

package main
import (
"fmt"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/task"
"mongo.games.com/game/common"
"mongo.games.com/game/model"
"mongo.games.com/game/worldsrv/internal"
)
func SaveInviteScore(data *model.InviteScore) {
if data == nil {
return
}
var err error
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
err = model.SaveInviteScore(data)
if err != nil {
logger.Logger.Errorf("SaveInviteScore error:%v", err)
return err
}
// 后台统计积分记录
data.Ts /= 1000000000 // 后台需要秒
LogChannelSingleton.WriteLog(data)
logger.Logger.Tracef("==> php InviteScore %+v", *data)
return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
p := PlayerMgrSington.GetPlayerBySnId(data.InviteSnId)
if err == nil && p != nil && data.Score != 0 {
if data.Score < 0 {
if -data.Score > p.InviteScore {
data.Score = -p.InviteScore
}
}
p.InviteScore += data.Score
p.dirty = true
// 更新邀请任务进度
if data.Score > 0 {
TaskSubjectSingleton.Touch(common.TaskTypeInviteScore, &TaskData{
SnId: p.SnId,
Num: data.Score,
})
}
}
})).StartByFixExecutor(fmt.Sprintf("invite_score_%v", data.InviteSnId))
}
func GetInviteScore(platform string, snid int32) {
var n, z int64
var err error
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
n, z, err = model.GetInviteScore(platform, snid)
if err != nil {
logger.Logger.Errorf("GetInviteScore error:%v", err)
return err
}
return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
p := PlayerMgrSington.GetPlayerBySnId(snid)
if err == nil && p != nil {
p.InviteScore = n
p.dirty = true
// 更新邀请任务进度
p.ResetTaskN(common.TaskTypeInviteScore)
TaskSubjectSingleton.Touch(common.TaskTypeInviteScore, &TaskData{
SnId: p.SnId,
Num: z,
})
}
})).StartByFixExecutor(fmt.Sprintf("invite_score_%v", snid))
}
type InviteCode struct {
internal.BasePlayerLoader
}
func (i *InviteCode) LoadAfter(platform string, snid int32) *internal.PlayerLoadReplay {
n, err := model.GetInviteNum(platform, snid)
return &internal.PlayerLoadReplay{
Platform: platform,
Snid: snid,
Err: err,
Data: n,
}
}
func (i *InviteCode) CallbackAfter(ret *internal.PlayerLoadReplay) {
if ret == nil {
return
}
p := PlayerMgrSington.GetPlayerBySnId(ret.Snid)
if p == nil {
return
}
p.InviteNum = ret.Data.(int32)
p.ResetTaskN(common.TaskTypeInviteNum)
TaskSubjectSingleton.Touch(common.TaskTypeInviteNum, &TaskData{SnId: p.SnId, Num: int64(p.InviteNum)})
GetInviteScore(ret.Platform, ret.Snid)
}
func init() {
internal.RegisterPlayerLoad(new(InviteCode))
}