game_sync/gamesrv/clawdoll/player_clawdoll.go

256 lines
5.0 KiB
Go

package clawdoll
import (
"mongo.games.com/game/common"
"mongo.games.com/game/gamesrv/base"
"mongo.games.com/game/model"
"mongo.games.com/game/srvdata"
"mongo.games.com/goserver/core/logger"
)
type PlayerEx struct {
*base.Player //玩家信息
clawDollState int32 // 抓娃娃状态
dollCardsCnt int32 // 娃娃卡数量
IsWin bool // 是否抓到娃娃
winDollCardType int32 // 本局赢取娃娃的类型
gainCoin int64 // 本局赢的金币
taxCoin int64 // 本局税收
odds int32
}
func (this *PlayerEx) Clear(baseScore int32) {
this.UnmarkFlag(base.PlayerState_WaitNext)
this.UnmarkFlag(base.PlayerState_GameBreak)
this.MarkFlag(base.PlayerState_Ready)
this.gainCoin = 0
this.taxCoin = 0
this.odds = 0
this.IsWin = false
}
func (this *PlayerEx) CanOp(sceneEx *SceneEx) bool {
if !this.IsGameing() {
logger.Logger.Trace("(this *PlayerEx) CanOp return false ", this.SnId)
return false
}
return true
}
// 能否投币
func (this *PlayerEx) CanPayCoin() bool {
itemID := int32(common.ItemIDClawdoll)
itemData := srvdata.GameItemMgr.Get(this.Platform, itemID)
if itemData == nil {
return false
}
s := this.GetScene()
if s == nil {
logger.Logger.Warn("CostPlayCoin p.scene == nil")
return false
}
machineId := s.GetDBGameFree().GetId() % 6080000
machineInfo := s.GetMachineServerInfo(machineId, this.Platform)
if machineInfo == nil {
return false
}
itemCount := this.GetItemCount(itemID)
if itemCount < int64(machineInfo.CostItemNum) {
return false
}
num, ok := this.Items[itemID]
if !ok || num < int64(machineInfo.CostItemNum) {
return false
}
return true
}
// 投币消耗
func (this *PlayerEx) CostPlayCoin() bool {
if !this.CanPayCoin() {
return false
}
s := this.GetScene()
if s == nil {
logger.Logger.Warn("CostPlayCoin p.scene == nil")
return false
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return false
}
machineId := s.GetDBGameFree().GetId() % 6080000
machineInfo := s.GetMachineServerInfo(machineId, this.Platform)
if machineInfo == nil {
return false
}
var items []*model.Item
itemData := srvdata.GameItemMgr.Get(this.Platform, common.ItemIDClawdoll)
if itemData != nil {
items = append(items, &model.Item{
ItemId: common.ItemIDClawdoll,
ItemNum: int64(-machineInfo.CostItemNum),
})
}
this.AddItems(&model.AddItemParam{
Platform: this.Platform,
SnId: this.SnId,
Change: items,
GainWay: common.GainWayClawdollCostItem,
Operator: "system",
Remark: "娃娃机上分扣除道具",
GameId: int64(sceneEx.GameId),
GameFreeId: int64(sceneEx.GetGameFreeId()),
})
return true
}
// 抓取到娃娃获得娃娃
func (this *PlayerEx) CatchCardClawdoll() bool {
s := this.GetScene()
if s == nil {
logger.Logger.Warn("CatchCardClawdoll p.scene == nil")
return false
}
machineId := s.GetDBGameFree().GetId() % 6080000
machineInfo := s.GetMachineServerInfo(machineId, this.Platform)
if machineInfo == nil {
return false
}
sceneEx, ok := s.ExtraData.(*SceneEx)
if !ok {
return false
}
var items []*model.Item
itemData := srvdata.GameItemMgr.Get(this.Platform, machineInfo.ItemId)
if itemData != nil {
items = append(items, &model.Item{
ItemId: machineInfo.ItemId,
ItemNum: int64(machineInfo.ItemNum),
})
}
this.AddItems(&model.AddItemParam{
Platform: this.Platform,
SnId: this.SnId,
Change: items,
GainWay: common.GainWayClawdollCatch,
Operator: "system",
Remark: "娃娃机抓取到娃娃获得娃娃卡",
GameId: int64(sceneEx.GameId),
GameFreeId: int64(sceneEx.GetGameFreeId()),
})
return true
}
// 能否移动
func (this *PlayerEx) CanMove() bool {
s := this.GetScene()
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if !sceneEx.Gaming {
return false
}
}
return true
}
// 能否下抓
func (this *PlayerEx) CanGrab() bool {
s := this.GetScene()
if sceneEx, ok := s.ExtraData.(*SceneEx); ok {
if !sceneEx.Gaming {
return false
}
}
return true
}
// 游戏新一局 设置数据
func (this *PlayerEx) ReStartGame() {
this.ReDataStartGame()
this.UnmarkFlag(base.PlayerState_WaitNext)
this.UnmarkFlag(base.PlayerState_GameBreak)
this.MarkFlag(base.PlayerState_Ready)
this.gainCoin = 0
this.taxCoin = 0
this.odds = 0
this.IsWin = false
}
// 初始化
func (this *PlayerEx) InitData(baseScore int32) {
}
// 重置数据
func (this *PlayerEx) ResetData() {
}
// 游戏新一局 设置数据
func (this *PlayerEx) ReDataStartGame() {
}
func (this *PlayerEx) CanPlayerOpInState(sceneState int) bool {
return false
}
// 能否退出游戏
func (this *PlayerEx) CanLeaveScene(sceneState int) bool {
return true
}
// 获取状态
func (this *PlayerEx) GetClawState() int32 {
return this.clawDollState
}
// 设置状态
func (this *PlayerEx) SetClawState(state int32) {
this.clawDollState = state
}
func (this *PlayerEx) GetItemCount(itemID int32) int64 {
itemData := srvdata.GameItemMgr.Get(this.Platform, itemID)
if itemData != nil {
v, ok := this.Items[itemID]
if ok {
return v
} else {
return 0
}
}
return 0
}