245 lines
5.4 KiB
Go
245 lines
5.4 KiB
Go
package player
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/tomas-qstarrs/boost/dogfish"
|
|
"github.com/tomas-qstarrs/boost/timex"
|
|
"mongo.games.com/game/gamesrv/base"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/errors"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/global"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/generic/key"
|
|
"mongo.games.com/game/gamesrv/slotspkg/internal/module/shared"
|
|
)
|
|
|
|
// Get gets player from session
|
|
func Get(s *base.SlotsSession) *Player {
|
|
if s == nil {
|
|
return nil
|
|
}
|
|
v := s.Value(key.SessionPlayer)
|
|
if v == nil {
|
|
return nil
|
|
}
|
|
return v.(*Player)
|
|
}
|
|
|
|
func Set(s *base.SlotsSession, p *Player) {
|
|
s.Set(key.SessionPlayer, p)
|
|
}
|
|
|
|
func PushPlayer(s *base.SlotsSession) map[string]string {
|
|
p := Get(s)
|
|
|
|
Set(s, p)
|
|
|
|
hash, err := p.Dump()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return hash
|
|
}
|
|
func PullPlayer(s *base.SlotsSession, hash map[string]string) *Player {
|
|
p := Get(s)
|
|
if p == nil {
|
|
//hash := db.PullPlayer(s.UID())
|
|
|
|
// Create a new player from hash strings
|
|
p = &Player{}
|
|
err := p.Load(p, hash)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
Set(s, p)
|
|
|
|
return p
|
|
}
|
|
|
|
if s.Bool(key.SessionReloadPlayer) {
|
|
s.Set(key.SessionReloadPlayer, false)
|
|
//hash := db.PullPlayer(s.UID())
|
|
|
|
// Reload old player from hash strings
|
|
err := p.Load(p, hash)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return p
|
|
}
|
|
|
|
return p
|
|
}
|
|
func Init(s *base.SlotsSession) {
|
|
p := Get(s)
|
|
if p == nil {
|
|
panic(errors.UIDInvalid.Error())
|
|
}
|
|
|
|
p.Init(s)
|
|
}
|
|
|
|
func (p *Player) Init(s *base.SlotsSession) {
|
|
if p.UID.Get() == 0 {
|
|
p.handleCreate(s)
|
|
}
|
|
|
|
p.handleLogin(s)
|
|
|
|
CoinCenter.Sync(s)
|
|
|
|
}
|
|
|
|
func (p *Player) handleCreate(s *base.SlotsSession) {
|
|
uid := s.UID()
|
|
if uid == 0 {
|
|
panic(errors.UIDInvalid.Error())
|
|
}
|
|
|
|
p.UID.Set(int64(uid))
|
|
p.Char.CreateTime.Set(timex.Now().Unix())
|
|
}
|
|
func (p *Player) handleLogin(s *base.SlotsSession) {
|
|
p.updateCli(s)
|
|
p.updateChar(s)
|
|
p.updateOthers(s)
|
|
}
|
|
|
|
func (p *Player) updateCli(s *base.SlotsSession) {
|
|
sessionContext := s.Value(key.SessionContext).(*shared.SessionContext)
|
|
// Cli
|
|
p.Cli.Ops.Set(sessionContext.Ops)
|
|
p.Cli.IsSimulator.Set(sessionContext.IsSimulator)
|
|
p.Cli.IsSimulator.Set(sessionContext.IsSimulator)
|
|
p.Cli.Ip.Set(sessionContext.Ip)
|
|
|
|
p.Cli.PlayerName.Set(sessionContext.PlayerName)
|
|
}
|
|
|
|
func (p *Player) updateChar(s *base.SlotsSession) {
|
|
DataSet(s).Update()
|
|
|
|
p.Char.LastLoginTime.Set(p.Char.LoginTime.Get())
|
|
p.Char.LoginTime.Set(timex.Now().Unix())
|
|
p.Char.LastProcessTime.Set(p.Char.ProcessTime.Get())
|
|
p.Char.ProcessTime.Set(global.ProcessTime)
|
|
if !timex.IsSameDay(p.Char.LoginTime.Get(), p.Char.LastLoginTime.Get()) {
|
|
p.Char.ActiveDays.Set(p.Char.ActiveDays.Get() + 1)
|
|
}
|
|
|
|
var category string
|
|
if p.Char.Group.Get() == "" {
|
|
category = p.Char.BranchName.Get()
|
|
} else {
|
|
category = fmt.Sprintf("%s_%s", p.Char.BranchName.Get(), p.Char.Group.Get())
|
|
}
|
|
p.Char.Category.Set(category)
|
|
DataSet(s).Update()
|
|
}
|
|
|
|
func (p *Player) updateOthers(s *base.SlotsSession) {
|
|
if !timex.IsSameDay(p.Char.LoginTime.Get(), p.Char.LastLoginTime.Get()) {
|
|
p.Agg.SlotsDailyBet.Set(0)
|
|
p.Agg.SlotsDailyWin.Set(0)
|
|
p.Agg.SlotsDailySpins.Set(0)
|
|
}
|
|
}
|
|
|
|
func (p *Player) GetTheme(theme string) *dogfish.JSON {
|
|
return (*dogfish.JSON)(p.Field("Slots", theme))
|
|
}
|
|
|
|
func GetChar(s *base.SlotsSession) *shared.Char {
|
|
p := Get(s)
|
|
if p == nil {
|
|
panic(errors.UIDInvalid.Error())
|
|
}
|
|
|
|
return p.GetChar()
|
|
}
|
|
|
|
func (p *Player) GetChar() *shared.Char {
|
|
return &shared.Char{
|
|
Category: p.Char.Category.Get(),
|
|
Group: p.Char.Group.Get(),
|
|
GroupBatch: p.Char.GroupBatch.Get(),
|
|
CreateTime: p.Char.CreateTime.Get(),
|
|
LoginTime: p.Char.LoginTime.Get(),
|
|
LastLoginTime: p.Char.LastLoginTime.Get(),
|
|
ProcessTime: p.Char.ProcessTime.Get(),
|
|
LastProcessTime: p.Char.LastProcessTime.Get(),
|
|
ActiveDays: p.Char.ActiveDays.Get(),
|
|
Branch: p.Char.Branch.Get(),
|
|
BranchName: p.Char.BranchName.Get(),
|
|
}
|
|
}
|
|
|
|
func GetBook(s *base.SlotsSession) *shared.Book {
|
|
p := Get(s)
|
|
if p == nil {
|
|
panic(errors.UIDInvalid.Error())
|
|
}
|
|
|
|
return p.GetBook()
|
|
}
|
|
|
|
func (p *Player) GetBook() *shared.Book {
|
|
return &shared.Book{
|
|
Coin: p.Book.Coin.Get(),
|
|
}
|
|
}
|
|
|
|
func (p *Player) GetAgg() *shared.Agg {
|
|
return &shared.Agg{
|
|
SlotsDailySpins: p.Agg.SlotsDailySpins.Get(),
|
|
SlotsDailyWin: p.Agg.SlotsDailyWin.Get(),
|
|
SlotsDailyBet: p.Agg.SlotsDailyBet.Get(),
|
|
PersonalPool: p.Agg.PersonalPool.Get(),
|
|
}
|
|
}
|
|
|
|
func (p *Player) Coin() int64 {
|
|
return p.Book.Coin.Get()
|
|
}
|
|
|
|
func CategoryName(s *base.SlotsSession) string {
|
|
p := Get(s)
|
|
if p == nil {
|
|
return key.Base
|
|
}
|
|
return p.CategoryName()
|
|
}
|
|
|
|
func (p *Player) CategoryName() string {
|
|
return p.Char.Category.Get()
|
|
}
|
|
|
|
func BetWin(s *base.SlotsSession, betCoin DecCoin, winCoin IncCoin) {
|
|
p := Get(s)
|
|
if p == nil {
|
|
panic(errors.UIDInvalid.Error())
|
|
}
|
|
p.BetWin(s, betCoin, winCoin)
|
|
}
|
|
|
|
func (p *Player) BetWin(s *base.SlotsSession, betCoin DecCoin, winCoin IncCoin) {
|
|
if betCoin.GetCoin() > 0 {
|
|
//总统计
|
|
p.Agg.BetSum.Set(p.Agg.BetSum.Get() + betCoin.GetCoin())
|
|
p.Agg.BetTimes.Set(p.Agg.BetTimes.Get() + 1)
|
|
//p.Agg.PersonalPool.Set(p.Agg.PersonalPool.Get() + int64(float64(betCoin.GetCoin())*0.96))
|
|
|
|
//每日
|
|
p.Agg.BetTimesDaily.Set(p.Agg.BetTimesDaily.Get() + 1)
|
|
p.Agg.BetSumDaily.Set(p.Agg.BetSumDaily.Get() + betCoin.GetCoin())
|
|
}
|
|
if winCoin.GetCoin() > 0 {
|
|
//总统计
|
|
p.Agg.WinSum.Set(p.Agg.WinSum.Get() + winCoin.GetCoin())
|
|
//p.Agg.PersonalPool.Set(p.Agg.PersonalPool.Get() - winCoin.GetCoin())
|
|
//每日
|
|
p.Agg.WinSumDaily.Set(p.Agg.WinSumDaily.Get() + winCoin.GetCoin())
|
|
}
|
|
}
|