Merge branch 'develop' into release

This commit is contained in:
sk 2024-11-12 16:58:09 +08:00
commit 2f3fa1d739
97 changed files with 1960 additions and 3551 deletions

View File

@ -56,22 +56,22 @@ func (this *SSTransmitHandler) Process(s *netlib.Session, packetid int, data int
if transmitPack, ok := data.(*server.SSTransmit); ok {
pd := transmitPack.GetPacketData()
sid := transmitPack.GetSessionId()
packetid, packet, err := netlib.UnmarshalPacket(pd)
packetId, packet, err := netlib.UnmarshalPacket(pd)
if err == nil {
h := GetHandler(packetid)
h := GetHandler(packetId)
if h != nil {
utils.DumpStackIfPanic(fmt.Sprintf("SSTransmitHandler.Process error, packetid:%v", packetid))
watch := profile.TimeStatisticMgr.WatchStart(fmt.Sprintf("/action/packet:%v", packetid), profile.TIME_ELEMENT_ACTION)
err := h.Process(s, packetid, packet, sid)
utils.DumpStackIfPanic(fmt.Sprintf("SSTransmitHandler.Process error, packetId:%v", packetId))
watch := profile.TimeStatisticMgr.WatchStart(fmt.Sprintf("/action/packet:%v", packetId), profile.TIME_ELEMENT_ACTION)
err := h.Process(s, packetId, packet, sid)
if watch != nil {
watch.Stop()
}
if err != nil {
logger.Logger.Tracef("Packet [%d] error:", packetid, err)
logger.Logger.Tracef("Packet [%d] error: %v", packetId, err)
}
return err
} else {
logger.Logger.Tracef("Packet %v not find handler.", packetid)
logger.Logger.Tracef("Packet %v not find handler.", packetId)
}
} else {
logger.Logger.Trace("SSTransmitHandler process err:", err)

View File

@ -6,7 +6,7 @@ import (
"time"
)
//牌序- 2, A, K, Q, J, 10, 9, 8, 7, 6, 5, 4, 3
//牌序- 2, A, K, Q, J,10, 9, 8, 7, 6, 5, 4, 3
//红桃- 51,50,49,48,47,46,45,44,43,42,41,40,39
//方片- 38,37,36,35,34,33,32,31,30,29,28,27,26
//梅花- 25,24,23,22,21,20,19,18,17,16,15,14,13

View File

@ -149,7 +149,7 @@ func (this *CSFishTargetPacketFactory) CreatePacket() interface{} {
if player == nil {
logger.Logger.Warn("CSFishViewHandler robot == nil")
return nil
//player = base.PlayerMgrSington.GetPlayer(sid)
//player = base.PlayerMgrSington.GetOnlinePlayer(sid)
}
if player == nil {
logger.Logger.Warn("CSFishViewHandler p == nil")
@ -260,7 +260,7 @@ func (this *CSFishFirePranaPacketFactory) CreatePacket() interface{} {
/*func (this *CSFishFirePranaHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSFishFirePranaHandler Process recv ", data)
if msg, ok := data.(*fishing_proto.CSFirePrana); ok {
player := base.PlayerMgrSington.GetPlayer(sid)
player := base.PlayerMgrSington.GetOnlinePlayer(sid)
if player == nil {
logger.Logger.Warn("CSFishFirePranaHandler p == nil")
return nil

View File

@ -18,16 +18,19 @@ func DataToCli(response any) interface{} {
}
sort.Slice(Response.BetChangeList, func(i, j int) bool { return Response.BetChangeList[i] < Response.BetChangeList[j] })
sort.Slice(Response.BetLevels, func(i, j int) bool { return Response.BetLevels[i] < Response.BetLevels[j] })
sort.Slice(Response.BaseBets, func(i, j int) bool { return Response.BaseBets[i] < Response.BaseBets[j] })
sort.Slice(BetSizes, func(i, j int) bool { return BetSizes[i] < BetSizes[j] })
tableInfo.BetConfig = BetConfig{
BetChangeList: Response.BetChangeList,
BetSize: BetSizes,
BaseBet: Response.BaseBets,
BetLevel: Response.BetLevels,
BetLines: Response.BetLines,
BetType: 1,
BetSizeIndex: Response.BetSizeIndex,
BetLevelIndex: Response.BetLevelIndex,
BetLineIndex: Response.BetLineIndex,
BaseBetIndex: Response.BaseBetIndex,
}
tableInfo.Coin = float64(Response.Coin) / CoinRate
//////////////////////////////////////////////////////////////

View File

@ -47,10 +47,12 @@ type BetConfig struct {
BetSize []float64 `json:"bet_size"` //单注
BetLevel []int64 `json:"bet_level"` //下注线数
BetLines []int64 `json:"bet_lines"` //可选线数
BaseBet []int64 `json:"base_bet"` //下注基数
BetType int `json:"bet_type"` //total计算方式 1.显示成Lines betSize*betLevel*lines lines
BetSizeIndex int64 `json:"bet_size_index"` //选中的单注下标
BetLevelIndex int64 `json:"bet_level_index"` //选中的等级下标
BetLineIndex int64 `json:"bet_line_index"` //选中的线数下标
BaseBetIndex int64 `json:"base_bet_index"` //选中的下注基数下标
}
type TableInfo struct {
SpinResult GameEnd `json:"spin_result"`

View File

@ -134,7 +134,8 @@ func init() {
CashManiaBetBetLine = map[int64]*structs.CashManiaBetBetLine{
0: {
Index: 0,
BetLine: 10,
BetLine: 1,
BaseBet: 10,
},
}
@ -194,6 +195,129 @@ func init() {
},
}
CashManiaItemInfo = map[int64]*structs.CashManiaItemInfo{
1: {
Index: 1,
ItemID: 1,
Value: 10,
IsMid: false,
},
2: {
Index: 2,
ItemID: 2,
Value: 5,
IsMid: false,
},
3: {
Index: 3,
ItemID: 3,
Value: 1,
IsMid: false,
},
4: {
Index: 4,
ItemID: 4,
Value: 0.5,
IsMid: false,
},
5: {
Index: 5,
ItemID: 5,
Value: 0.1,
IsMid: false,
},
6: {
Index: 6,
ItemID: 6,
Value: 1,
IsMid: true,
},
7: {
Index: 7,
ItemID: 7,
Value: 1,
IsMid: true,
},
8: {
Index: 8,
ItemID: 8,
Value: 1,
IsMid: true,
},
9: {
Index: 9,
ItemID: 9,
Value: 1,
IsMid: true,
},
10: {
Index: 10,
ItemID: 10,
Value: 2,
IsMid: true,
},
11: {
Index: 11,
ItemID: 11,
Value: 3,
IsMid: true,
},
12: {
Index: 12,
ItemID: 12,
Value: 5,
IsMid: true,
},
13: {
Index: 13,
ItemID: 13,
Value: 10,
IsMid: true,
},
14: {
Index: 14,
ItemID: 14,
Value: 15,
IsMid: true,
},
15: {
Index: 15,
ItemID: 15,
Value: 20,
IsMid: true,
},
16: {
Index: 16,
ItemID: 16,
Value: 30,
IsMid: true,
},
17: {
Index: 17,
ItemID: 17,
Value: 40,
IsMid: true,
},
18: {
Index: 18,
ItemID: 18,
Value: 50,
IsMid: true,
},
19: {
Index: 19,
ItemID: 19,
Value: 100,
IsMid: true,
},
200: {
Index: 200,
ItemID: 200,
Value: 0,
IsMid: true,
},
}
CashManiaMapRTPMode = map[int64]*structs.CashManiaMapRTPMode{
1: {
ID: 1,
@ -468,7 +592,7 @@ func init() {
CashManiaSymbol = map[int64]*structs.CashManiaSymbol{
1: {
ID: 1,
Name: "100倍",
Name: "10倍",
IsWild: false,
Group: []int64{1},
PayRate: []int64{0, 0, 100},

View File

@ -174,6 +174,7 @@ func init() {
0: {
Index: 0,
BetLine: 5,
BaseBet: 1,
},
}

View File

@ -135,6 +135,7 @@ func init() {
0: {
Index: 0,
BetLine: 5,
BaseBet: 1,
},
}

View File

@ -10,79 +10,79 @@ func init() {
FortuneOxBetBetChangeList = map[int64]*structs.FortuneOxBetBetChangeList{
0: {
Index: 0,
BetChangeList: 0.3,
BetChangeList: 300000,
BetSizeIndex: 0,
BetLevelIndex: 0,
},
1: {
Index: 1,
BetChangeList: 0.6,
BetChangeList: 600000,
BetSizeIndex: 0,
BetLevelIndex: 1,
},
2: {
Index: 2,
BetChangeList: 0.9,
BetChangeList: 900000,
BetSizeIndex: 0,
BetLevelIndex: 2,
},
3: {
Index: 3,
BetChangeList: 1,
BetChangeList: 1000000,
BetSizeIndex: 1,
BetLevelIndex: 0,
},
4: {
Index: 4,
BetChangeList: 1.5,
BetChangeList: 1500000,
BetSizeIndex: 0,
BetLevelIndex: 4,
},
5: {
Index: 5,
BetChangeList: 3,
BetChangeList: 3000000,
BetSizeIndex: 0,
BetLevelIndex: 9,
},
6: {
Index: 6,
BetChangeList: 5,
BetChangeList: 5000000,
BetSizeIndex: 1,
BetLevelIndex: 4,
},
7: {
Index: 7,
BetChangeList: 9,
BetChangeList: 9000000,
BetSizeIndex: 3,
BetLevelIndex: 0,
},
8: {
Index: 8,
BetChangeList: 10,
BetChangeList: 10000000,
BetSizeIndex: 1,
BetLevelIndex: 9,
},
9: {
Index: 9,
BetChangeList: 15,
BetChangeList: 15000000,
BetSizeIndex: 2,
BetLevelIndex: 4,
},
10: {
Index: 10,
BetChangeList: 30,
BetChangeList: 30000000,
BetSizeIndex: 2,
BetLevelIndex: 9,
},
11: {
Index: 11,
BetChangeList: 45,
BetChangeList: 45000000,
BetSizeIndex: 3,
BetLevelIndex: 4,
},
12: {
Index: 12,
BetChangeList: 90,
BetChangeList: 90000000,
BetSizeIndex: 3,
BetLevelIndex: 9,
},
@ -135,25 +135,26 @@ func init() {
0: {
Index: 0,
BetLine: 10,
BaseBet: 1,
},
}
FortuneOxBetBetSize = map[int64]*structs.FortuneOxBetBetSize{
0: {
Index: 0,
BetSize: 300,
BetSize: 300000000,
},
1: {
Index: 1,
BetSize: 1000,
BetSize: 1000000000,
},
2: {
Index: 2,
BetSize: 3000,
BetSize: 3000000000,
},
3: {
Index: 3,
BetSize: 9000,
BetSize: 9000000000,
},
}

View File

@ -135,6 +135,7 @@ func init() {
0: {
Index: 0,
BetLine: 10,
BaseBet: 1,
},
}

View File

@ -135,6 +135,7 @@ func init() {
0: {
Index: 0,
BetLine: 5,
BaseBet: 1,
},
}

View File

@ -10,6 +10,7 @@ var (
CashManiaBetBetSize = map[int64]*structs.CashManiaBetBetSize{}
CashManiaBetFirstBet = map[int64]*structs.CashManiaBetFirstBet{}
CashManiaFormation = []*structs.CashManiaFormation{}
CashManiaItemInfo = map[int64]*structs.CashManiaItemInfo{}
CashManiaMapRTPMode = map[int64]*structs.CashManiaMapRTPMode{}
CashManiaMidItemInfo = map[int64]*structs.CashManiaMidItemInfo{}
CashManiaOthers = []*structs.CashManiaOthers{}
@ -119,46 +120,6 @@ var (
FortuneTigerSuperStackWeight = []*structs.FortuneTigerSuperStackWeight{}
FortuneTigerSymbolBetRatio = []*structs.FortuneTigerSymbolBetRatio{}
FortuneTigerSymbol = map[int64]*structs.FortuneTigerSymbol{}
GateofOlympusBetBetChangeList = map[int64]*structs.GateofOlympusBetBetChangeList{}
GateofOlympusBetBetLevel = map[int64]*structs.GateofOlympusBetBetLevel{}
GateofOlympusBetBetLine = map[int64]*structs.GateofOlympusBetBetLine{}
GateofOlympusBetBetSize = map[int64]*structs.GateofOlympusBetBetSize{}
GateofOlympusBetFirstBet = map[int64]*structs.GateofOlympusBetFirstBet{}
GateofOlympusFormation = []*structs.GateofOlympusFormation{}
GateofOlympusMapRTPMode = map[int64]*structs.GateofOlympusMapRTPMode{}
GateofOlympusMultiplier = []*structs.GateofOlympusMultiplier{}
GateofOlympusMultiplierKeyID = map[int64]*structs.GateofOlympusMultiplierKeyID{}
GateofOlympusReelBaseSpin1Range = [][]int64{}
GateofOlympusReelBaseSpin1Reel = [][]int64{}
GateofOlympusReelBaseSpin1Weight = [][]float64{}
GateofOlympusReelBaseSpin2Range = [][]int64{}
GateofOlympusReelBaseSpin2Reel = [][]int64{}
GateofOlympusReelBaseSpin2Weight = [][]float64{}
GateofOlympusReelBaseSpin3Range = [][]int64{}
GateofOlympusReelBaseSpin3Reel = [][]int64{}
GateofOlympusReelBaseSpin3Weight = [][]float64{}
GateofOlympusReelBaseSpin7Range = [][]int64{}
GateofOlympusReelBaseSpin7Reel = [][]int64{}
GateofOlympusReelBaseSpin7Weight = [][]float64{}
GateofOlympusReelBaseSpin8Range = [][]int64{}
GateofOlympusReelBaseSpin8Reel = [][]int64{}
GateofOlympusReelBaseSpin8Weight = [][]float64{}
GateofOlympusReelBaseSpinRange = [][]int64{}
GateofOlympusReelBaseSpinReel = [][]int64{}
GateofOlympusReelBaseSpinWeight = [][]float64{}
GateofOlympusReelChoose = []*structs.GateofOlympusReelChoose{}
GateofOlympusReelFreeSpin4Range = [][]int64{}
GateofOlympusReelFreeSpin4Reel = [][]int64{}
GateofOlympusReelFreeSpin4Weight = [][]float64{}
GateofOlympusReelFreeSpin5Range = [][]int64{}
GateofOlympusReelFreeSpin5Reel = [][]int64{}
GateofOlympusReelFreeSpin5Weight = [][]float64{}
GateofOlympusReelFreeSpinRange = [][]int64{}
GateofOlympusReelFreeSpinReel = [][]int64{}
GateofOlympusReelFreeSpinWeight = [][]float64{}
GateofOlympusScatter = map[int64]*structs.GateofOlympusScatter{}
GateofOlympusSymbolBetRatio = []*structs.GateofOlympusSymbolBetRatio{}
GateofOlympusSymbol = map[int64]*structs.GateofOlympusSymbol{}
MatrixFeaturesForm15X1TypeA = []*structs.MatrixFeaturesForm15X1TypeA{}
MatrixFeaturesForm19X1TypeA = []*structs.MatrixFeaturesForm19X1TypeA{}
MatrixFeaturesForm20X1TypeA = []*structs.MatrixFeaturesForm20X1TypeA{}

View File

@ -69,6 +69,7 @@ func StoragesLoading(data map[string]string) {
Load(data, "Base.CashMania/Bet.BetSize", &base.CashManiaBetBetSize)
Load(data, "Base.CashMania/Bet.FirstBet", &base.CashManiaBetFirstBet)
Load(data, "Base.CashMania/Formation.Default", &base.CashManiaFormation)
Load(data, "Base.CashMania/ItemInfo.Default", &base.CashManiaItemInfo)
Load(data, "Base.CashMania/Map.RTPMode", &base.CashManiaMapRTPMode)
Load(data, "Base.CashMania/MidItemInfo.Default", &base.CashManiaMidItemInfo)
Load(data, "Base.CashMania/Others.Default", &base.CashManiaOthers)
@ -178,46 +179,6 @@ func StoragesLoading(data map[string]string) {
Load(data, "Base.FortuneTiger/SuperStack.Weight", &base.FortuneTigerSuperStackWeight)
Load(data, "Base.FortuneTiger/Symbol.BetRatio", &base.FortuneTigerSymbolBetRatio)
Load(data, "Base.FortuneTiger/Symbol.Default", &base.FortuneTigerSymbol)
Load(data, "Base.GateofOlympus/Bet.BetChangeList", &base.GateofOlympusBetBetChangeList)
Load(data, "Base.GateofOlympus/Bet.BetLevel", &base.GateofOlympusBetBetLevel)
Load(data, "Base.GateofOlympus/Bet.BetLine", &base.GateofOlympusBetBetLine)
Load(data, "Base.GateofOlympus/Bet.BetSize", &base.GateofOlympusBetBetSize)
Load(data, "Base.GateofOlympus/Bet.FirstBet", &base.GateofOlympusBetFirstBet)
Load(data, "Base.GateofOlympus/Formation.Default", &base.GateofOlympusFormation)
Load(data, "Base.GateofOlympus/Map.RTPMode", &base.GateofOlympusMapRTPMode)
Load(data, "Base.GateofOlympus/Multiplier.Default", &base.GateofOlympusMultiplier)
Load(data, "Base.GateofOlympus/Multiplier.Default/ID", &base.GateofOlympusMultiplierKeyID)
Load(data, "Base.GateofOlympus/ReelBaseSpin1.Range", &base.GateofOlympusReelBaseSpin1Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin1.Reel", &base.GateofOlympusReelBaseSpin1Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin1.Weight", &base.GateofOlympusReelBaseSpin1Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin2.Range", &base.GateofOlympusReelBaseSpin2Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin2.Reel", &base.GateofOlympusReelBaseSpin2Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin2.Weight", &base.GateofOlympusReelBaseSpin2Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin3.Range", &base.GateofOlympusReelBaseSpin3Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin3.Reel", &base.GateofOlympusReelBaseSpin3Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin3.Weight", &base.GateofOlympusReelBaseSpin3Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin7.Range", &base.GateofOlympusReelBaseSpin7Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin7.Reel", &base.GateofOlympusReelBaseSpin7Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin7.Weight", &base.GateofOlympusReelBaseSpin7Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin8.Range", &base.GateofOlympusReelBaseSpin8Range)
Load(data, "Base.GateofOlympus/ReelBaseSpin8.Reel", &base.GateofOlympusReelBaseSpin8Reel)
Load(data, "Base.GateofOlympus/ReelBaseSpin8.Weight", &base.GateofOlympusReelBaseSpin8Weight)
Load(data, "Base.GateofOlympus/ReelBaseSpin.Range", &base.GateofOlympusReelBaseSpinRange)
Load(data, "Base.GateofOlympus/ReelBaseSpin.Reel", &base.GateofOlympusReelBaseSpinReel)
Load(data, "Base.GateofOlympus/ReelBaseSpin.Weight", &base.GateofOlympusReelBaseSpinWeight)
Load(data, "Base.GateofOlympus/ReelChoose.Default", &base.GateofOlympusReelChoose)
Load(data, "Base.GateofOlympus/ReelFreeSpin4.Range", &base.GateofOlympusReelFreeSpin4Range)
Load(data, "Base.GateofOlympus/ReelFreeSpin4.Reel", &base.GateofOlympusReelFreeSpin4Reel)
Load(data, "Base.GateofOlympus/ReelFreeSpin4.Weight", &base.GateofOlympusReelFreeSpin4Weight)
Load(data, "Base.GateofOlympus/ReelFreeSpin5.Range", &base.GateofOlympusReelFreeSpin5Range)
Load(data, "Base.GateofOlympus/ReelFreeSpin5.Reel", &base.GateofOlympusReelFreeSpin5Reel)
Load(data, "Base.GateofOlympus/ReelFreeSpin5.Weight", &base.GateofOlympusReelFreeSpin5Weight)
Load(data, "Base.GateofOlympus/ReelFreeSpin.Range", &base.GateofOlympusReelFreeSpinRange)
Load(data, "Base.GateofOlympus/ReelFreeSpin.Reel", &base.GateofOlympusReelFreeSpinReel)
Load(data, "Base.GateofOlympus/ReelFreeSpin.Weight", &base.GateofOlympusReelFreeSpinWeight)
Load(data, "Base.GateofOlympus/Scatter.Default", &base.GateofOlympusScatter)
Load(data, "Base.GateofOlympus/Symbol.BetRatio", &base.GateofOlympusSymbolBetRatio)
Load(data, "Base.GateofOlympus/Symbol.Default", &base.GateofOlympusSymbol)
Load(data, "Base.Matrix/FeaturesForm15X1TypeA.Default", &base.MatrixFeaturesForm15X1TypeA)
Load(data, "Base.Matrix/FeaturesForm19X1TypeA.Default", &base.MatrixFeaturesForm19X1TypeA)
Load(data, "Base.Matrix/FeaturesForm20X1TypeA.Default", &base.MatrixFeaturesForm20X1TypeA)
@ -330,6 +291,7 @@ func StoragesMapping() {
Set("Base", "CashMania/Bet", "BetSize", base.CashManiaBetBetSize)
Set("Base", "CashMania/Bet", "FirstBet", base.CashManiaBetFirstBet)
Set("Base", "CashMania/Formation", "Default", base.CashManiaFormation)
Set("Base", "CashMania/ItemInfo", "Default", base.CashManiaItemInfo)
Set("Base", "CashMania/Map", "RTPMode", base.CashManiaMapRTPMode)
Set("Base", "CashMania/MidItemInfo", "Default", base.CashManiaMidItemInfo)
Set("Base", "CashMania/Others", "Default", base.CashManiaOthers)
@ -439,46 +401,6 @@ func StoragesMapping() {
Set("Base", "FortuneTiger/SuperStack", "Weight", base.FortuneTigerSuperStackWeight)
Set("Base", "FortuneTiger/Symbol", "BetRatio", base.FortuneTigerSymbolBetRatio)
Set("Base", "FortuneTiger/Symbol", "Default", base.FortuneTigerSymbol)
Set("Base", "GateofOlympus/Bet", "BetChangeList", base.GateofOlympusBetBetChangeList)
Set("Base", "GateofOlympus/Bet", "BetLevel", base.GateofOlympusBetBetLevel)
Set("Base", "GateofOlympus/Bet", "BetLine", base.GateofOlympusBetBetLine)
Set("Base", "GateofOlympus/Bet", "BetSize", base.GateofOlympusBetBetSize)
Set("Base", "GateofOlympus/Bet", "FirstBet", base.GateofOlympusBetFirstBet)
Set("Base", "GateofOlympus/Formation", "Default", base.GateofOlympusFormation)
Set("Base", "GateofOlympus/Map", "RTPMode", base.GateofOlympusMapRTPMode)
Set("Base", "GateofOlympus/Multiplier", "Default", base.GateofOlympusMultiplier)
Set("Base", "GateofOlympus/Multiplier", "Default/ID", base.GateofOlympusMultiplierKeyID)
Set("Base", "GateofOlympus/ReelBaseSpin1", "Range", base.GateofOlympusReelBaseSpin1Range)
Set("Base", "GateofOlympus/ReelBaseSpin1", "Reel", base.GateofOlympusReelBaseSpin1Reel)
Set("Base", "GateofOlympus/ReelBaseSpin1", "Weight", base.GateofOlympusReelBaseSpin1Weight)
Set("Base", "GateofOlympus/ReelBaseSpin2", "Range", base.GateofOlympusReelBaseSpin2Range)
Set("Base", "GateofOlympus/ReelBaseSpin2", "Reel", base.GateofOlympusReelBaseSpin2Reel)
Set("Base", "GateofOlympus/ReelBaseSpin2", "Weight", base.GateofOlympusReelBaseSpin2Weight)
Set("Base", "GateofOlympus/ReelBaseSpin3", "Range", base.GateofOlympusReelBaseSpin3Range)
Set("Base", "GateofOlympus/ReelBaseSpin3", "Reel", base.GateofOlympusReelBaseSpin3Reel)
Set("Base", "GateofOlympus/ReelBaseSpin3", "Weight", base.GateofOlympusReelBaseSpin3Weight)
Set("Base", "GateofOlympus/ReelBaseSpin7", "Range", base.GateofOlympusReelBaseSpin7Range)
Set("Base", "GateofOlympus/ReelBaseSpin7", "Reel", base.GateofOlympusReelBaseSpin7Reel)
Set("Base", "GateofOlympus/ReelBaseSpin7", "Weight", base.GateofOlympusReelBaseSpin7Weight)
Set("Base", "GateofOlympus/ReelBaseSpin8", "Range", base.GateofOlympusReelBaseSpin8Range)
Set("Base", "GateofOlympus/ReelBaseSpin8", "Reel", base.GateofOlympusReelBaseSpin8Reel)
Set("Base", "GateofOlympus/ReelBaseSpin8", "Weight", base.GateofOlympusReelBaseSpin8Weight)
Set("Base", "GateofOlympus/ReelBaseSpin", "Range", base.GateofOlympusReelBaseSpinRange)
Set("Base", "GateofOlympus/ReelBaseSpin", "Reel", base.GateofOlympusReelBaseSpinReel)
Set("Base", "GateofOlympus/ReelBaseSpin", "Weight", base.GateofOlympusReelBaseSpinWeight)
Set("Base", "GateofOlympus/ReelChoose", "Default", base.GateofOlympusReelChoose)
Set("Base", "GateofOlympus/ReelFreeSpin4", "Range", base.GateofOlympusReelFreeSpin4Range)
Set("Base", "GateofOlympus/ReelFreeSpin4", "Reel", base.GateofOlympusReelFreeSpin4Reel)
Set("Base", "GateofOlympus/ReelFreeSpin4", "Weight", base.GateofOlympusReelFreeSpin4Weight)
Set("Base", "GateofOlympus/ReelFreeSpin5", "Range", base.GateofOlympusReelFreeSpin5Range)
Set("Base", "GateofOlympus/ReelFreeSpin5", "Reel", base.GateofOlympusReelFreeSpin5Reel)
Set("Base", "GateofOlympus/ReelFreeSpin5", "Weight", base.GateofOlympusReelFreeSpin5Weight)
Set("Base", "GateofOlympus/ReelFreeSpin", "Range", base.GateofOlympusReelFreeSpinRange)
Set("Base", "GateofOlympus/ReelFreeSpin", "Reel", base.GateofOlympusReelFreeSpinReel)
Set("Base", "GateofOlympus/ReelFreeSpin", "Weight", base.GateofOlympusReelFreeSpinWeight)
Set("Base", "GateofOlympus/Scatter", "Default", base.GateofOlympusScatter)
Set("Base", "GateofOlympus/Symbol", "BetRatio", base.GateofOlympusSymbolBetRatio)
Set("Base", "GateofOlympus/Symbol", "Default", base.GateofOlympusSymbol)
Set("Base", "Matrix/FeaturesForm15X1TypeA", "Default", base.MatrixFeaturesForm15X1TypeA)
Set("Base", "Matrix/FeaturesForm19X1TypeA", "Default", base.MatrixFeaturesForm19X1TypeA)
Set("Base", "Matrix/FeaturesForm20X1TypeA", "Default", base.MatrixFeaturesForm20X1TypeA)
@ -618,12 +540,6 @@ func LinksMapping() {
Link("FortuneTiger/ReelBaseSpin", "Weight/1", "FortuneTiger/ReelBaseSpin", "Weight")
Link("FortuneTiger/ReelBaseSpin", "Weight/2", "FortuneTiger/ReelBaseSpin", "Weight")
Link("FortuneTiger/ReelBaseSpin", "Weight/3", "FortuneTiger/ReelBaseSpin", "Weight")
Link("GatesOfOlympus/MatrixSameForm5X6TypeA", "Default", "Matrix/SameForm5X6TypeA", "Default")
Link("GatesOfOlympus/MatrixSameForm5X6TypeB", "Default", "Matrix/SameForm5X6TypeB", "Default")
Link("GatesOfOlympus/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default")
Link("GatesOfOlympus/ReelBaseSpin1", "Weight/1", "GatesOfOlympus/ReelBaseSpin1", "Weight")
Link("GatesOfOlympus/ReelBaseSpin1", "Weight/2", "GatesOfOlympus/ReelBaseSpin1", "Weight")
Link("GatesOfOlympus/ReelBaseSpin1", "Weight/3", "GatesOfOlympus/ReelBaseSpin1", "Weight")
Link("Test/MatrixLine1Form3X3TypeA", "Default", "Matrix/Line1Form3X3TypeA", "Default")
Link("Test/PrizeModel", "Default", "PrizeModel/PrizeModelTypeB", "Default")
Link("Test/ReelBaseSpin", "Weight/1", "Test/ReelBaseSpin", "Weight")

View File

@ -44,75 +44,83 @@ func NewBigRat(s string) *big.Rat {
type (
// BetChangeList comment
BetChangeList struct {
Index int64
Index int64
BetChangeList float64
BetSizeIndex int64
BetSizeIndex int64
BetLevelIndex int64
}
// BetLevel comment
BetLevel struct {
Index int64
Index int64
BetLevel int64
}
// BetLine comment
BetLine struct {
Index int64
Index int64
BetLine int64
BaseBet int64
}
// BetSize comment
BetSize struct {
Index int64
Index int64
BetSize int64
}
// CashManiaItemInfo comment
CashManiaItemInfo struct {
Index int64
ItemID int64
Value float64
IsMid bool
}
// CashManiaMidItemInfo comment
CashManiaMidItemInfo struct {
Index int64
ItemID int64
Multi int64
Index int64
ItemID int64
Multi int64
FreeSpinCount int64
}
// CashManiaOthers comment
CashManiaOthers struct {
BaseWinPro float64
FreeWinPro float64
MaxWin int64
WinNudgePro float64
WinRespinPro float64
NoWinNudgePro float64
BaseWinPro float64
FreeWinPro float64
MaxWin int64
WinNudgePro float64
WinRespinPro float64
NoWinNudgePro float64
NoWinRespinPro float64
}
// CashManiaRandomItemWeight comment
CashManiaRandomItemWeight struct {
ID int64
ItemID int64
ID int64
ItemID int64
BaseWeight float64
FreeWeight float64
}
// FirstBet comment
FirstBet struct {
Index int64
BetSizeIndex int64
Index int64
BetSizeIndex int64
BetLevelIndex int64
}
// Formation comment
Formation struct {
SpinType int64
NodeType string
ID int64
SeqID int64
Reel string
Matrix string
Symbol string
FirstInitMethod int64
OtherInitMethod int64
SpinType int64
NodeType string
ID int64
SeqID int64
Reel string
Matrix string
Symbol string
FirstInitMethod int64
OtherInitMethod int64
FirstInitSymbols []int64
OtherInitSymbols []int64
}
// FortuneDragonBaseMultiplier comment
FortuneDragonBaseMultiplier struct {
WinRateMin float64
WinRateMax float64
ItemIds []int64
WinRateMin float64
WinRateMax float64
ItemIds []int64
MultiplierWeights []int64
}
// FortuneDragonFreeMultiplier comment
@ -123,126 +131,113 @@ type (
// FortuneDragonFreeMultiplierCount comment
FortuneDragonFreeMultiplierCount struct {
MultiplierCount int64
Weight int64
Weight int64
}
// FortuneDragonOthers comment
FortuneDragonOthers struct {
FreespinTriggerPro float64
FreeSpinCount int64
MaxWin int64
FreespinTriggerPro float64
FreeSpinCount int64
MaxWin int64
SureWinFreespinTriggerPro float64
SureWinBetMultiplier int64
SureWinBetMultiplier int64
}
// FortuneMouseOthers comment
FortuneMouseOthers struct {
RespinTriggerPro float64
MaxWin int64
ExtraWin int64
MaxWin int64
ExtraWin int64
}
// FortuneOxOthers comment
FortuneOxOthers struct {
RespinTriggerPro float64
Multiplier int64
MaxWin int64
Multiplier int64
MaxWin int64
}
// FortuneRabbitCashPrizeWeight comment
FortuneRabbitCashPrizeWeight struct {
ID int64
PrizeValue float64
Weight float64
ID int64
PrizeValue float64
Weight float64
NoWinWeight float64
}
// FortuneRabbitForceCashCountWeight comment
FortuneRabbitForceCashCountWeight struct {
ID int64
Count int64
ID int64
Count int64
Weight float64
}
// FortuneRabbitOthers comment
FortuneRabbitOthers struct {
FreespinTriggerPro float64
FreeSpinCount int64
MaxWin int64
}
// GateofOlympusMultiplier comment
GateofOlympusMultiplier struct {
Multiple int64
ID int64
Weights []int64
}
// GateofOlympusReelChoose comment
GateofOlympusReelChoose struct {
ID int64
IsFreeSpin bool
NodeType string
Weights []int64
FreeSpinCount int64
MaxWin int64
}
// JackpotPrize comment
JackpotPrize struct {
PrizeType int64
PipeIn int64
StartPoint int64
IsRolling bool
RollingTime int64
ReducePercent int64
PrizeType int64
PipeIn int64
StartPoint int64
IsRolling bool
RollingTime int64
ReducePercent int64
JackpotLimitByTotalBet int64
}
// MapRTPMode comment
MapRTPMode struct {
ID int64
ID int64
TypeWeight map[int64]*MapRTPModeTypeWeight
Desc string
Rtp float64
Desc string
Rtp float64
}
// MapRTPModeTypeWeight comment
MapRTPModeTypeWeight struct {
ID int64
ID int64
Weight int64
}
// Matrix comment
Matrix struct {
Type string
LinkType int64
Type string
LinkType int64
Direction int64
LineCount int64
Lines [][]int64
Form []int64
Lines [][]int64
Form []int64
}
// OptAuthenticate comment
OptAuthenticate struct {
Flag string
Order int64
ValidValues []string
Flag string
Order int64
ValidValues []string
InvalidValues []string
}
// OptGroup comment
OptGroup struct {
ID int64
Batch int64
ID int64
Batch int64
IsNewPlayer bool
StartTime string
EndTime string
Affect []int64
Weight []int64
StartTime string
EndTime string
Affect []int64
Weight []int64
}
// PrizeModel comment
PrizeModel struct {
ID int64
AniType string
ID int64
AniType string
MinMultiple int64
MaxMultiple int64
}
// Scatter comment
Scatter struct {
ScatterCount int64
FreeSpinBouts int64
ScatterCount int64
FreeSpinBouts int64
FreeSpinExtraBouts int64
BasePayrate int64
FreePayrate int64
BasePayrate int64
FreePayrate int64
}
// ScatterFreeChoose comment
ScatterFreeChoose struct {
ID int64
ID int64
FreeSpinTimes int64
TouchTimesMin int64
TouchTimesMax int64
@ -250,38 +245,43 @@ type (
// SimulatorFSMultiLevel comment
SimulatorFSMultiLevel struct {
Level int64
Min int64
Max int64
Min int64
Max int64
}
// SuperStackWeight comment
SuperStackWeight struct {
ID int64
ID int64
ItemID int64
Weight float64
}
// Symbol comment
Symbol struct {
ID int64
Name string
IsWild bool
Group []int64
PayRate []int64
ID int64
Name string
IsWild bool
Group []int64
PayRate []int64
ClientOrder int64
ClientDsc string
ClientDsc string
}
// SymbolBetRatio comment
SymbolBetRatio struct {
BetRatio float64
}
// TestBetBetLine comment
TestBetBetLine struct {
Index int64
BetLine int64
}
// TestRandomWeight comment
TestRandomWeight struct {
ID int64
Time float64
ID int64
Time float64
Weight float64
}
// Text comment
Text struct {
Type string
Type string
Texts []*TextTexts
}
// TextTexts comment
@ -291,25 +291,25 @@ type (
}
// Vector comment
Vector struct {
Choice int64
Ratio float64
Vector []int64
Choice int64
Ratio float64
Vector []int64
Procedure string
}
// VectorDemand comment
VectorDemand struct {
Choice int64
MinRatio float64
MaxRatio float64
Choice int64
MinRatio float64
MaxRatio float64
Procedure string
Count int64
Count int64
}
// VectorForceWin comment
VectorForceWin struct {
Choice int64
Choice int64
MinRatio float64
MaxRatio float64
Weight float64
Weight float64
}
// CashManiaBetBetChangeList comment
CashManiaBetBetChangeList = BetChangeList
@ -521,42 +521,6 @@ type (
// FortuneTigerSymbolBetRatio comment
FortuneTigerSymbolBetRatio = SymbolBetRatio
// GateofOlympusBetBetChangeList comment
GateofOlympusBetBetChangeList = BetChangeList
// GateofOlympusBetBetLevel comment
GateofOlympusBetBetLevel = BetLevel
// GateofOlympusBetBetLine comment
GateofOlympusBetBetLine = BetLine
// GateofOlympusBetBetSize comment
GateofOlympusBetBetSize = BetSize
// GateofOlympusBetFirstBet comment
GateofOlympusBetFirstBet = FirstBet
// GateofOlympusFormation comment
GateofOlympusFormation = Formation
// GateofOlympusMapRTPMode comment
GateofOlympusMapRTPMode = MapRTPMode
// GateofOlympusMapRTPModeTypeWeight comment
GateofOlympusMapRTPModeTypeWeight = MapRTPModeTypeWeight
// GateofOlympusMultiplierKeyID comment
GateofOlympusMultiplierKeyID = GateofOlympusMultiplier
// GateofOlympusScatter comment
GateofOlympusScatter = Scatter
// GateofOlympusSymbol comment
GateofOlympusSymbol = Symbol
// GateofOlympusSymbolBetRatio comment
GateofOlympusSymbolBetRatio = SymbolBetRatio
// MatrixFeaturesForm15X1TypeA comment
MatrixFeaturesForm15X1TypeA = Matrix
@ -827,9 +791,6 @@ type (
// TestBetBetLevel comment
TestBetBetLevel = BetLevel
// TestBetBetLine comment
TestBetBetLine = BetLine
// TestBetBetSize comment
TestBetBetSize = BetSize
@ -850,4 +811,5 @@ type (
// TestSymbolBetRatio comment
TestSymbolBetRatio = SymbolBetRatio
)
)

View File

@ -73,4 +73,12 @@ type SpinLock struct {
Prize [][]float64 `json:"pe,omitempty"`
//OXSpecial
NewSuperStack []int64 `json:"nss,omitempty"`
//CashMania
FeatureType int `json:"feature_type,omitempty"` //0.无特性 1.nudge 2.respin
NudgeDirection int `json:"nudge_direction,omitempty"` //1.上 2.下
FreeSpinItemId int64 `json:"free_item_id,omitempty"`
Multiple int64 `json:"multiple,omitempty"` //倍乘倍数
Irv [][]float64 `json:"irv,omitempty"`
Frv [][]float64 `json:"frv,omitempty"`
}

View File

@ -34,7 +34,7 @@ func (n *MachineDesc) Sheet(excel string, sheet string) interface{} {
return n.DataSet.GetMachineSheet(n.Theme, excel, sheet, 0)
}
func (n *MachineDesc) GetLineBet(betSizeIndex int64, betLevelIndex int64) int64 {
func (n *MachineDesc) GetLineBet(betSizeIndex, betLevelIndex, betLineIndex int64) int64 {
betSizeRows, ok := n.Sheet("Bet", "BetSize").(map[int64]*structs.BetSize)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetSize"))
@ -55,7 +55,17 @@ func (n *MachineDesc) GetLineBet(betSizeIndex int64, betLevelIndex int64) int64
panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLevel", betLevelIndex))
}
return betSizeRow.BetSize * betLevelRow.BetLevel
betLineRows, ok := n.Sheet("Bet", "BetLine").(map[int64]*structs.BetLine)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BetLine"))
}
betLineRow, ok := betLineRows[betLineIndex]
if !ok {
panic(errors.ConfigRowNoMatch.ErrorWith(n.Theme, "BetLine", betLineIndex))
}
return betSizeRow.BetSize * betLevelRow.BetLevel * betLineRow.BaseBet
}
func (n *MachineDesc) BetSizes() []int64 {
betSizeRows, ok := n.Sheet("Bet", "BetSize").(map[int64]*structs.BetSize)
@ -90,6 +100,17 @@ func (n *MachineDesc) BetLines() []int64 {
}
return lists
}
func (n *MachineDesc) BaseBets() []int64 {
baseBetRows, ok := n.Sheet("Bet", "BetLine").(map[int64]*structs.BetLine)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "BaseBet"))
}
var lists []int64
for _, list := range baseBetRows {
lists = append(lists, list.BaseBet)
}
return lists
}
func (n *MachineDesc) BetChangeList() []float64 {
betChangeListRows, ok := n.Sheet("Bet", "BetChangeList").(map[int64]*structs.BetChangeList)
if !ok {

View File

@ -281,11 +281,11 @@ func (e *Entity) CalcWinType(multi float64) int64 {
}
func (e *Entity) GetLineBetByType(nodeType string) int64 {
return e.MachineDesc.GetLineBet(e.NodeTree.Act.BetSizeIndex, e.NodeTree.Act.BetLevelIndex)
return e.MachineDesc.GetLineBet(e.NodeTree.Act.BetSizeIndex, e.NodeTree.Act.BetLevelIndex, e.NodeTree.Act.BetLineIndex)
}
func (e *Entity) GetMinLineBet(nodeType string) int64 {
return e.MachineDesc.GetLineBet(1, 1)
return e.MachineDesc.GetLineBet(1, 1, 1)
}
func (e *Entity) SetBetCoin(betCoin player.DecCoin) {

View File

@ -46,6 +46,7 @@ func (sm *SlotsMgr) Enter(s *base.SlotsSession, gameId int64) (*cli.SlotsEnterRe
BetSizes: m.BetSizes(),
BetLevels: m.BetLevels(),
BetLines: m.BetLines(),
BaseBets: m.BaseBets(),
BetChangeList: m.BetChangeList(),
}

View File

@ -42,6 +42,7 @@ type Spinner interface {
BetSizes() []int64
BetLevels() []int64
BetLines() []int64
BaseBets() []int64
BetChangeList() []float64
Choice() int64

View File

@ -39,6 +39,9 @@ func (m *Machine) BetLevels() []int64 {
func (m *Machine) BetLines() []int64 {
return m.MachineDesc.BetLines()
}
func (m *Machine) BaseBets() []int64 {
return m.MachineDesc.BaseBets()
}
func (m *Machine) BetChangeList() []float64 {
return m.MachineDesc.BetChangeList()
}

View File

@ -29,8 +29,21 @@ type CustomRespin struct {
// 本次的symbol
ItemId int64
}
type CustomFortune struct {
ForceRound int64 `json:"fr"` //第n次
FeatureType int `json:"feature_type"` //0.无特性 1.nudge 2.respin
NudgeDirection int `json:"nudge_direction"` //1.上 2.下
FreeSpinItemId int64 `json:"free_item_id"`
Multiple int64 `json:"multiple"` //倍乘倍数
FreeStatus int `json:"fs"`
FreeSpinNum int64 `json:"fsn"` //剩余freespin
FreeNumMax int64 `json:"fnm"` //总次数
FreeNumTrigger int64 `json:"fnt"` //新增freespin
}
// Theme is called to get feature theme
@ -44,8 +57,8 @@ func (p *PluginBase) Customs() []interface{} {
&CustomMidInfo{},
&CustomNudge{},
&CustomRespin{},
&Special{},
&CustomFortune{})
&CustomFortune{},
&Special{})
}
// OnStepBegin is called on initializing a step
@ -58,6 +71,9 @@ func (p *PluginBase) BeforeDisplay(m intf.Master) {
case key.BaseSpin:
p.changeItem(m, false)
case key.FreeSpin:
Fortune := getCustomFortune(m)
Fortune.FreeStatus = 0
Fortune.FreeNumTrigger = 0
p.changeItem(m, true)
}
@ -67,9 +83,15 @@ func (p *PluginBase) AfterDisplay(m intf.Master) {
isFreeSpin := m.Cursor().GetType() == key.FreeSpin
cursorFormation := m.CursorFormation()
symbols := cursorFormation.GetSymbols()
Fortune := getCustomFortune(m)
Fortune.FeatureType = WU
if m.Bool("Nudge") {
Fortune.FeatureType = Nudge
//todo 如果当前是nudge
if m.Bool("NudgeDown") {
Fortune.NudgeDirection = Nudge_Down
symbols[9] = symbols[8]
symbols[8] = symbols[7]
symbols[7] = symbols[6]
@ -77,6 +99,7 @@ func (p *PluginBase) AfterDisplay(m intf.Master) {
symbols[5] = Descx(m).RandomMidItems(isFreeSpin, 1)[0]
m.Remove("NudgeDown")
} else if m.Bool("NudgeUp") {
Fortune.NudgeDirection = Nudge_Up
symbols[5] = symbols[6]
symbols[6] = symbols[7]
symbols[7] = symbols[8]
@ -86,6 +109,7 @@ func (p *PluginBase) AfterDisplay(m intf.Master) {
}
m.Remove("Nudge")
} else if m.Bool("Respin") {
Fortune.FeatureType = Respin
//todo 如果当前是respin
if m.Int64("respinsymbols") > 0 {
symbols[2] = m.Int64("respinsymbols")
@ -109,6 +133,14 @@ func (p *PluginBase) AfterSpin(m intf.Master) {
p.checkMid(m, false)
case key.FreeSpin:
p.checkMid(m, true)
Fortune := getCustomFortune(m)
if Fortune.FreeSpinNum > 0 {
if Fortune.FreeSpinNum == 1 {
Fortune.FreeStatus = 3
}
Fortune.FreeSpinNum--
//logx.Errorf("这里是哇哇哇 Trigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", Fortune.FreeNumTrigger, Fortune.FreeNumMax, Fortune.FreeSpinNum)
}
}
}
@ -133,26 +165,24 @@ func (p *PluginBase) Nudge(m intf.Master, symbols []int64) {
}
}
// 获取特性数据
func (p *PluginBase) getCustomFortune(m intf.Master) *CustomFortune {
customFortune := new(CustomFortune)
if len(m.CursorCustoms(customFortune)) == 0 {
m.AddCursorFeature(customFortune)
}
return m.CursorCustom(customFortune).(*CustomFortune)
}
func (p *PluginBase) changeItem(m intf.Master, isFreeSpin bool) {
curFormation := m.CursorFormation()
symbols := curFormation.GetSymbols()
isWin := Descx(m).CheckWin(isFreeSpin)
//todo ceshi
//isWin = true
if isFreeSpin {
Fortune := p.getCustomFortune(m)
Fortune := getCustomFortune(m)
if Fortune.ForceRound == m.GetProgressValue() {
isWin = true
}
}
isNudge, isReSpin := Descx(m).GetNudgeAndReSpin(isWin)
//todo ceshi
//isNudge = true
//isReSpin = true
if isWin {
itemId := Descx(m).GetWinItem(isFreeSpin)
symbols[2] = itemId
@ -267,13 +297,35 @@ func (p *PluginBase) checkMid(m intf.Master, isFreeSpin bool) {
FreeSpinCount: freeSpinCount,
}).SetWin(win * (multi - 1))
Fortune := getCustomFortune(m)
Fortune.Multiple = multi
//Fortune.MultipleWin = win * (multi - 1)
Fortune.FreeSpinItemId = symbols[7]
if freeSpinCount > 0 {
customFortune := getCustomFortune(m)
if isFreeSpin {
//logx.Errorf("----ReTrigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
customFortune.FreeStatus = 2
customFortune.FreeNumTrigger = freeSpinCount
customFortune.FreeNumMax += freeSpinCount
customFortune.FreeSpinNum += freeSpinCount
//logx.Errorf("----2ReTrigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
m.AddProgress(freeSpinCount)
m.AddCursorFeature(&generic.CustomExtraFreeSpin{ExtraTimes: freeSpinCount}).SetLifetime(1)
//m.AddCursorFeature(customFortune).SetLifetime(customFortune.FreeSpinNum)
m.CursorFeature(customFortune).SetLifetime(customFortune.FreeSpinNum)
} else {
//logx.Errorf("11Trigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
customFortune.FreeStatus = 1
customFortune.FreeNumTrigger = freeSpinCount
customFortune.FreeNumMax += freeSpinCount
customFortune.FreeSpinNum = freeSpinCount
ForceRound := m.Randx().Int63n(freeSpinCount)
m.AddNodeFeature(m.AddNodeOnCursor(key.FreeSpin, freeSpinCount).GetID(), &CustomFortune{ForceRound: ForceRound})
customFortune.ForceRound = ForceRound
//logx.Errorf("1111111Trigger[%v] FreeNumMax[%v] FreeSpinNum[%v]", customFortune.FreeNumTrigger, customFortune.FreeNumMax, customFortune.FreeSpinNum)
m.AddNodeFeature(m.AddNodeOnCursor(key.FreeSpin, freeSpinCount).GetID(), customFortune).SetLifetime(freeSpinCount)
}
}
}

View File

@ -2,6 +2,25 @@ package cashmania
import "mongo.games.com/game/gamesrv/slotspkg/slots/intf"
const (
WU int = iota
Nudge
Respin
)
const (
Nudge_WU int = iota
Nudge_Up
Nudge_Down
)
// 获取特性数据
func getCustomFortune(m intf.Master) *CustomFortune {
customFortune := new(CustomFortune)
if len(m.CursorCustoms(customFortune)) == 0 {
m.AddCursorFeature(customFortune)
}
return m.CursorCustom(customFortune).(*CustomFortune)
}
func (p *PluginBase) RandomItemsByMid(m intf.Master, isFreeSpin bool, symbols []int64, poss ...int) {
items := Descx(m).RandomMidItems(isFreeSpin, len(poss))
for i, pos := range poss {

View File

@ -19,6 +19,14 @@ func Descx(m intf.Master) *descx {
NodeDesc: m.Desc(),
}
}
func (n descx) GetItemInfo() map[int64]*structs.CashManiaItemInfo {
sheet := n.DefaultSheet("ItemInfo")
rows, ok := sheet.(map[int64]*structs.CashManiaItemInfo)
if !ok {
panic(errors.ConfigTypeError.ErrorWith(n.Theme, "CashMania", "S_ItemInfo"))
}
return rows
}
// 判断是否触发respin
func (n descx) CheckWin(isFreeSpin bool) bool {

View File

@ -2,6 +2,7 @@ package cashmania
var Plugins = []interface{}{
&PluginBase{},
&PluginSpecial{},
}
var SimulatorPlugins = []interface{}{

View File

@ -17,6 +17,17 @@ func (p *PluginSpecial) Theme() string {
// Special
type Special struct {
FreeStatus int `json:"fs"`
FreeSpinNum int64 `json:"fsn"` //剩余freespin
FreeNumMax int64 `json:"fnm"` //总次数
FreeNumTrigger int64 `json:"fnt"` //新增freespin
FeatureType int `json:"feature_type"` //0.无特性 1.nudge 2.respin
NudgeDirection int `json:"nudge_direction"` //1.上 2.下
FreeSpinItemId int64 `json:"free_item_id"`
Multiple int64 `json:"multiple"` //倍乘倍数
Irv [][]float64 `json:"irv"`
Frv [][]float64 `json:"frv"`
}
// 获取特性数据
@ -28,5 +39,56 @@ func (p *PluginSpecial) getCustomSpecial(m intf.Master) *Special {
return m.CursorCustom(customSpecial).(*Special)
}
func (p *PluginSpecial) AfterSpin(m intf.Master) {
Fortune := getCustomFortune(m)
sp := p.getCustomSpecial(m)
sp.FeatureType = Fortune.FeatureType
sp.NudgeDirection = Fortune.NudgeDirection
sp.FreeStatus = Fortune.FreeStatus
sp.FreeSpinNum = Fortune.FreeSpinNum
sp.FreeNumMax = Fortune.FreeNumMax
sp.FreeNumTrigger = Fortune.FreeNumTrigger
sp.FreeSpinItemId = Fortune.FreeSpinItemId
sp.Multiple = Fortune.Multiple
itemInfo := Descx(m).GetItemInfo()
displaySymbols := m.CursorFormation().GetReelFormattedDisplaySymbols()
var irv = copyMatrix(displaySymbols)
for i, symbol := range displaySymbols {
for i2, i3 := range symbol {
if itemInfo[i3].IsMid {
irv[i][i2] = itemInfo[i3].Value
} else {
irv[i][i2] = itemInfo[i3].Value * float64(m.Bet()) / 10000
}
}
}
sp.Irv = irv
finalSymbols := m.CursorFormation().GetMatrixFormattedFinalSymbols()
var frv = copyMatrix(finalSymbols)
for i, symbol := range finalSymbols {
for i2, i3 := range symbol {
if itemInfo[i3].IsMid {
frv[i][i2] = itemInfo[i3].Value
} else {
frv[i][i2] = itemInfo[i3].Value * float64(m.Bet()) / 10000
}
}
}
sp.Frv = frv
}
func copyMatrix(mat [][]int64) [][]float64 {
if mat == nil {
return nil
}
var newMat [][]float64
for _, row := range mat {
var r []float64
for _, val := range row {
r = append(r, 0*float64(val))
}
newMat = append(newMat, r)
}
return newMat
}

View File

@ -12,10 +12,12 @@ type SlotsEnterResponse struct {
BetSizeIndex int64
BetLevelIndex int64
BetLineIndex int64
BaseBetIndex int64
BetChangeList []float64
BetSizes []int64
BetLevels []int64
BetLines []int64
BaseBets []int64
}
type SlotsPlayRequest struct {
Theme string

View File

@ -92,6 +92,7 @@ type GameParam struct {
CloseCustomRoomCreate bool // 关闭自定义房间创建
ClientVersion int32 // 客户端版本号
ClientVersionChannel []string // 客户端版本号包渠道
SwapShopUrl string // 交换商城地址
}
var GameParamPath = "../data/gameparam.json"
@ -237,4 +238,7 @@ func InitGameParam() {
if GameParamData.AdminPassword == "" {
GameParamData.AdminPassword = "fjslowopcserg"
}
if GameParamData.SwapShopUrl == "" {
GameParamData.SwapShopUrl = "https://user.hinasakimiu.com/login"
}
}

File diff suppressed because it is too large Load Diff

View File

@ -240,6 +240,8 @@ enum PlayerPacketID {
PACKET_SCPopUpWindowConfig = 2849; //
PACKET_CSUpdateGuide = 2850; //
PACKET_SCUpdateGuide = 2851; //
PACKET_CSGetSwapShopInfo = 2852; //
PACKET_SCGetSwapShopInfo = 2853; //
}
//
@ -1439,4 +1441,13 @@ message PopUpWindowInfo{
string Key = 3;
int32 OpenStatus = 4;//1- 0-
int32 Weight = 5;//
}
//
// PACKET_CSGetSwapShopInfo
message CSGetSwapShopInfo{
}
// PACKET_SCGetSwapShopInfo
message SCGetSwapShopInfo{
string Url = 1;
}

136
util/balancequeue/queue.go Normal file
View File

@ -0,0 +1,136 @@
package balancequeue
import (
"fmt"
"strings"
)
// 平衡队列
type Element interface {
BalanceQueueHandler()
}
type elementWrapper struct {
F func()
}
func (e *elementWrapper) BalanceQueueHandler() {
e.F()
}
func ElementWrapper(f func()) Element {
return &elementWrapper{F: f}
}
type group struct {
Array []Element
queuePos int
}
type groupArray struct {
queue []*group
}
type BalanceQueue struct {
index int // 循环索引
groups []*group // 固定的分组长度不变每次Update触发一个分组
tables []*groupArray
pool map[Element]*group
}
// New 创建一个平衡队列
// groupNumber 分组数量
func New(groupNumber int) *BalanceQueue {
ret := &BalanceQueue{
groups: make([]*group, groupNumber),
tables: make([]*groupArray, 10), // 本身会自动扩容,初始值不是很重要
pool: make(map[Element]*group),
}
for i := 0; i < len(ret.tables); i++ {
ret.tables[i] = &groupArray{}
}
// 初始化平衡数组所有平衡队列容量为0
for i := 0; i < len(ret.groups); i++ {
ret.groups[i] = &group{queuePos: i}
ret.tables[0].queue = append(ret.tables[0].queue, ret.groups[i])
}
return ret
}
func (q *BalanceQueue) String() string {
buf := strings.Builder{}
buf.WriteString("BalanceQueue:\n")
buf.WriteString(fmt.Sprintf("分组数量: %v\n", len(q.groups)))
for k, v := range q.tables {
buf.WriteString(fmt.Sprintf("元素数量%v: 组数量%v ==>", k, len(v.queue)))
for _, vv := range v.queue {
buf.WriteString(fmt.Sprintf("%v ", len(vv.Array)))
}
buf.WriteString("\n")
}
return buf.String()
}
func (q *BalanceQueue) Update() {
if q.index == len(q.groups) {
q.index = 0
}
for _, v := range q.groups[q.index].Array {
v.BalanceQueueHandler()
}
q.index++
}
func (q *BalanceQueue) Push(e Element) {
if e == nil {
return
}
if _, ok := q.pool[e]; ok {
return
}
for k, v := range q.tables {
size := len(v.queue)
if size == 0 {
continue
}
arr := v.queue[size-1]
if k+1 >= len(q.tables) {
q.tables = append(q.tables, &groupArray{})
}
q.tables[k+1].queue = append(q.tables[k+1].queue, arr)
q.tables[k].queue = v.queue[:size-1]
arr.queuePos = len(q.tables[k+1].queue) - 1
arr.Array = append(arr.Array, e)
q.pool[e] = arr
return
}
return
}
func (q *BalanceQueue) Pop(e Element) {
group, ok := q.pool[e]
if !ok {
return
}
delete(q.pool, e)
count := len(group.Array)
for i := 0; i < count; i++ {
if group.Array[i] == e {
group.Array[i] = group.Array[count-1]
group.Array = group.Array[:count-1]
bqPos := group.queuePos
queCount := len(q.tables[count].queue)
q.tables[count].queue[bqPos] = q.tables[count].queue[queCount-1]
q.tables[count].queue[bqPos].queuePos = bqPos
q.tables[count].queue = q.tables[count].queue[:queCount-1]
q.tables[count-1].queue = append(q.tables[count-1].queue, group)
group.queuePos = len(q.tables[count-1].queue) - 1
return
}
}
}

View File

@ -0,0 +1,40 @@
package balancequeue
import (
"fmt"
"math/rand"
"testing"
"time"
)
type A struct {
Name string
}
func (a *A) BalanceQueueHandler() {
}
func TestOne(t *testing.T) {
q := New(5)
var es []Element
go func() {
for {
q.Update()
fmt.Println(q)
time.Sleep(time.Second)
e := &A{Name: fmt.Sprint(time.Now().Unix())}
es = append(es, e)
q.Push(e)
if rand.Intn(10) > 5 && len(es) >= 2 {
for _, v := range es[:2] {
q.Pop(v)
}
es = es[2:]
}
}
}()
time.Sleep(time.Minute)
}

View File

@ -24,7 +24,7 @@ import (
func CSBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSBagInfoHandler Process recv ", data)
if msg, ok := data.(*bag.CSBagInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSBagInfoHandler p == nil")
return nil
@ -62,7 +62,7 @@ func CSUpBagInfo(s *netlib.Session, packetid int, data interface{}, sid int64) e
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSUpBagInfoHandler p == nil")
return nil
@ -463,7 +463,7 @@ func CSExchangeList(s *netlib.Session, packetid int, data interface{}, sid int64
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -508,7 +508,7 @@ func CSPropExchange(s *netlib.Session, packetid int, data interface{}, sid int64
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -605,7 +605,7 @@ func CSDollChange(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -654,7 +654,7 @@ func CSDollChange(s *netlib.Session, packetid int, data interface{}, sid int64)
// 兑换娃娃记录
func CSDollChangeLog(s *netlib.Session, packetid int, data interface{}, sid int64) error {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}

View File

@ -18,7 +18,7 @@ import (
func CSChatMsgHandler(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSChatMsgHandler Process recv ", data)
if msg, ok := data.(*chat.CSChatMsg); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSChatMsgHandler p == nil")
return nil
@ -107,7 +107,7 @@ func CSChatMsgHandler(s *netlib.Session, packetid int, data interface{}, sid int
func CSGetChatLogHandler(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetChatLogHandler Process recv ", data)
if msg, ok := data.(*chat.CSGetChatLog); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetChatLogHandler p == nil")
return nil
@ -265,7 +265,7 @@ func CSGetChatLogHandler(s *netlib.Session, packetid int, data interface{}, sid
func CSReadChatMsgHandler(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSReadChatMsgHandler Process recv ", data)
if msg, ok := data.(*chat.CSReadChatMsg); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSReadChatMsgHandler p == nil")
return nil
@ -288,7 +288,7 @@ func CSReadChatMsgHandler(s *netlib.Session, packetid int, data interface{}, sid
func CSShieldMsgHandler(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSShieldMsgHandler Process recv ", data)
if msg, ok := data.(*chat.CSShieldMsg); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSShieldMsgHandler p == nil")
return nil

View File

@ -22,7 +22,7 @@ func (this *CSCoinSceneGetPlayerNumPacketFactory) CreatePacket() interface{} {
func (this *CSCoinSceneGetPlayerNumHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSCoinSceneGetPlayerNumHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSCoinSceneGetPlayerNum); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil {
nums := CoinSceneMgrSingleton.GetPlayerNums(p, msg.GetGameId(), msg.GetGameModel())
pack := &gamehall.SCCoinSceneGetPlayerNum{
@ -48,7 +48,7 @@ func (this *CSCoinSceneGetPlayerNumHandler) Process(s *netlib.Session, packetid
//func (this *CSCoinSceneOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSCoinSceneOpHandler Process recv ", data)
// if msg, ok := data.(*gamehall.CSCoinSceneOp); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p != nil {
// var ret gamehall.OpResultCode
// pack := &gamehall.SCCoinSceneOp{
@ -271,7 +271,7 @@ func (this *CSCoinSceneGetPlayerNumHandler) Process(s *netlib.Session, packetid
//func (this *CSCoinSceneListRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSCoinSceneListRoomHandler Process recv ", data)
// if msg, ok := data.(*gamehall.CSCoinSceneListRoom); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p != nil {
// if !CoinSceneMgrSingleton.ListRooms(p, msg.GetId()) { // 场次id
// pack := &gamehall.SCCoinSceneListRoom{

View File

@ -15,6 +15,7 @@ import (
"mongo.games.com/game/model"
"mongo.games.com/game/proto"
"mongo.games.com/game/protocol/friend"
"mongo.games.com/game/protocol/welfare"
"mongo.games.com/game/srvdata"
)
@ -32,7 +33,7 @@ func (this *CSFriendListPacketFactory) CreatePacket() interface{} {
func (this *CSFriendListHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSFriendListHandler Process recv ", data)
if msg, ok := data.(*friend.CSFriendList); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSFriendListHandler p == nil")
return nil
@ -150,7 +151,7 @@ func (this *CSFriendOpPacketFactory) CreatePacket() interface{} {
func (this *CSFriendOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSFriendOpHandler Process recv ", data)
if msg, ok := data.(*friend.CSFriendOp); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSFriendOpHandler p == nil")
return nil
@ -225,7 +226,7 @@ func (this *CSQueryPlayerGameLogPacketFactory) CreatePacket() interface{} {
func (this *CSQueryPlayerGameLogHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSQueryPlayerGameLogHandler Process recv ", data)
if msg, ok := data.(*friend.CSQueryPlayerGameLog); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSQueryPlayerGameLogHandler p == nil")
return nil
@ -278,7 +279,7 @@ func (this *CSInviteFriendPacketFactory) CreatePacket() interface{} {
func (this *CSInviteFriendHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSInviteFriendHandler Process recv ", data)
if msg, ok := data.(*friend.CSInviteFriend); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSInviteFriendHandler p == nil")
return nil
@ -396,7 +397,7 @@ func (this *CSInviteFriendOpPacketFactory) CreatePacket() interface{} {
func (this *CSInviteFriendOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSInviteFriendOpHandler Process recv ", data)
if msg, ok := data.(*friend.CSInviteFriendOp); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSInviteFriendOpHandler p == nil")
return nil
@ -596,11 +597,35 @@ func (this *CSFuzzyQueryPlayerPacketFactory) CreatePacket() interface{} {
func (this *CSFuzzyQueryPlayerHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSFuzzyQueryPlayerHandler Process recv ", data)
if msg, ok := data.(*friend.CSFuzzyQueryPlayer); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSFuzzyQueryPlayerHandler p == nil")
return nil
}
pack2 := &welfare.NotifyLotteryAward{
Info: &welfare.LotteryInfo{
Id: 45,
StartTs: time.Now().Unix(),
Index: int32(5),
Award: []*welfare.PropInfo{
{
ItemId: 100001,
ItemNum: 100,
},
},
SnId: p.SnId,
Name: p.Name,
RoleId: p.Roles.ModId,
Price: 1000,
WinCode: "123456",
},
}
// 广播中奖结果
PlayerMgrSington.BroadcastMessageToPlatform(p.Platform, int(welfare.SPacketID_PACKET_NotifyLotteryAward), pack2)
logger.Logger.Tracef("广播中奖信息: %v", pack2)
queryContent := msg.GetQueryContent()
if utf8.RuneCountInString(queryContent) < 3 {
return nil

View File

@ -37,7 +37,7 @@ func (this *CSEnterRoomHandler) Process(s *netlib.Session, packetid int, data in
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -212,7 +212,7 @@ func (this *CSReturnRoomPacketFactory) CreatePacket() interface{} {
func (this *CSReturnRoomHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSReturnRoomHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSReturnRoom); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -297,7 +297,7 @@ func (this *CSQueryRoomInfoHandler) Process(s *netlib.Session, packetid int, dat
func (this *CSQueryRoomInfoHandler) ProcessLocalGame(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSQueryRoomInfoHandler Process recv ProcessLocalGame", data)
if msg, ok := data.(*gamehall.CSQueryRoomInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSQueryRoomInfoHandler p == nil")
return nil
@ -370,7 +370,7 @@ func (this *CSGetGameConfigPacketFactory) CreatePacket() interface{} {
func (this *CSGetGameConfigHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetGameConfigHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSGetGameConfig); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetGameConfigHandler p == nil")
return nil
@ -433,7 +433,7 @@ func (this *CSEnterGameHandler) ProcessLocal(s *netlib.Session, packetid int, da
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -546,7 +546,7 @@ func (this *CSEnterGameHandler) ProcessNormal(s *netlib.Session, packetid int, d
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -685,7 +685,7 @@ func (this *CSQuitGamePacketFactory) CreatePacket() interface{} {
func (this *CSQuitGameHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSQuitGameHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSQuitGame); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil {
var ret gamehall.OpResultCode_Game
pack := &gamehall.SCQuitGame{
@ -746,7 +746,7 @@ func (this *CSCreateRoomHandler) ProcessLocalGame(s *netlib.Session, packetid in
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -939,7 +939,7 @@ func (this *CSAudienceSitPacketFactory) CreatePacket() interface{} {
func (this *CSAudienceSitHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSAudienceSitHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSAudienceSit); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSAudienceSitHandler p == nil")
return nil
@ -998,7 +998,7 @@ func (this *CSRecordAndNoticeHandler) Process(s *netlib.Session, packetid int, d
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSRecordAndNoticeHandler p == nil")
return nil
@ -1085,7 +1085,7 @@ func CSAudienceEnterRoomHandler(s *netlib.Session, packetId int, data interface{
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1171,7 +1171,7 @@ func CSRoomConfigHandler(s *netlib.Session, packetId int, data interface{}, sid
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1189,7 +1189,7 @@ func CSCreatePrivateRoomHandler(s *netlib.Session, packetId int, data interface{
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1375,7 +1375,7 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1398,6 +1398,12 @@ func CSGetPrivateRoomListHandler(s *netlib.Session, packetId int, data interface
Channel: []string{p.LastChannel},
})
for _, v := range scenes {
// 隐藏关闭的房间
cfg := PlatformMgrSingleton.GetConfig(p.Platform).RoomConfig[v.CustomParam.GetRoomConfigId()]
if cfg == nil || cfg.GetOn() != common.On {
continue
}
needPassword := 0
if v.GetPassword() != "" {
needPassword = 1
@ -1458,7 +1464,7 @@ func CSTouchTypeHandler(s *netlib.Session, packetId int, data interface{}, sid i
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1475,7 +1481,7 @@ func CSRoomRecruitHandler(s *netlib.Session, packetId int, data interface{}, sid
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1505,7 +1511,7 @@ func CSInviteJoinRoomHandler(s *netlib.Session, packetId int, data interface{},
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}

View File

@ -24,7 +24,7 @@ func (this *CSHundredSceneGetPlayerNumPacketFactory) CreatePacket() interface{}
func (this *CSHundredSceneGetPlayerNumHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSHundredSceneGetPlayerNumHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSHundredSceneGetPlayerNum); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil {
nums := HundredSceneMgrSingleton.GetPlayerNums(p, msg.GetGameId(), msg.GetGameModel())
pack := &gamehall.SCHundredSceneGetPlayerNum{
@ -52,7 +52,7 @@ func (this *CSHundredSceneOpPacketFactory) CreatePacket() interface{} {
func (this *CSHundredSceneOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSHundredSceneOpHandler Process recv ", data)
if msg, ok := data.(*gamehall.CSHundredSceneOp); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil {
var ret gamehall.OpResultCode_Hundred
pack := &gamehall.SCHundredSceneOp{

View File

@ -379,7 +379,7 @@ func (this *CSPlatFormPacketFactory) CreatePacket() interface{} {
func (this *CSPlatFormHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlatFormHandler Process recv ", data)
if _, ok := data.(*login_proto.CSPlatFormConfig); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlatFormHandler p == nil")
return nil
@ -453,7 +453,7 @@ func (this *CSPlatFormHandler) Process(s *netlib.Session, packetid int, data int
//func (this *CSBulletionInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSBulletionInfoHandler Process recv ", data)
// if msg, ok := data.(*login_proto.CSBulletionInfo); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Trace("CSBulletionInfoHandler p == nil ")
// return nil
@ -500,7 +500,7 @@ func (this *CSPlatFormHandler) Process(s *netlib.Session, packetid int, data int
//func (this *CSCustomerInfoListHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSCustomerInfoListHandler Process recv ", data)
// if _, ok := data.(*login_proto.CSCustomerInfoList); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Trace("CSBulletionInfoHandler p == nil ")
// return nil
@ -608,7 +608,7 @@ func (this *CSGetThrGameCfgPacketFactory) CreatePacket() interface{} {
func (this *CSGetThrGameCfgHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetThrGameCfgHandler Process recv ", data)
if msg, ok := data.(*login_proto.CSGetThrGameCfg); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetThrGameCfgHandler p == nil")
return nil

View File

@ -3,6 +3,7 @@ package main
import (
"mongo.games.com/game/common"
login_proto "mongo.games.com/game/protocol/login"
"mongo.games.com/game/worldsrv/internal"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
)
@ -15,11 +16,11 @@ func SessionLogout(sid int64, drop bool) bool {
}
ls.state = LoginStateLogout
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil {
p.ThirdGameLogout()
if drop {
p.DropLine()
internal.FirePlayerDropLine[*Player, *Scene](p)
} else {
p.Logout()
}

View File

@ -22,7 +22,7 @@ func CSLotteryInfoHandler(s *netlib.Session, packetid int, data interface{}, sid
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}

View File

@ -22,7 +22,7 @@ func (this *CSReadMessagePacketFactory) CreatePacket() interface{} {
func (this *CSReadMessageHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSReadMessageHandler Process recv ", data)
if csMessageRead, ok := data.(*message.CSMessageRead); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSReadMessageHandler p == nil")
return nil
@ -47,7 +47,7 @@ func (this *CSDelMessagePacketFactory) CreatePacket() interface{} {
func (this *CSDelMessageHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSDelMessageHandler Process recv ", data)
if csMessageDel, ok := data.(*message.CSMessageDel); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSDelMessageHandler p == nil")
return nil
@ -72,7 +72,7 @@ func (this *CSGetMessageAttachPacketFactory) CreatePacket() interface{} {
func (this *CSGetMessageAttachHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetMessageAttachHandler Process recv ", data)
if csGetMessageAttach, ok := data.(*message.CSGetMessageAttach); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetMessageAttachHandler p == nil")
return nil
@ -98,7 +98,7 @@ func (this *SCMessageListPacketFactory) CreatePacket() interface{} {
func (this *SCMessageListHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Tracef("(this *SCMessageListHandler) Process [%v].", s.GetSessionConfig().Id)
if msg, ok := data.(*message.CSMessageList); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
p.SendMessage(msg.GetShowId())
}
return nil

View File

@ -23,7 +23,7 @@ package main
//func (this *CSMNGameEnterHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSMNGameEnterHandler Process recv ", data)
// if msg, ok := data.(*mngame.CSMNGameEnter); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p != nil {
// code := MiniGameMgrSington.PlayerEnter(p, msg.GetId())
// pack := &mngame.SCMNGameEnter{
@ -52,7 +52,7 @@ package main
//func (this *CSMNGameLeaveHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSMNGameLeaveHandler Process recv ", data)
// if msg, ok := data.(*mngame.CSMNGameLeave); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p != nil {
// code := MiniGameMgrSington.PlayerLeave(p, msg.GetId())
// pack := &mngame.SCMNGameLeave{
@ -81,7 +81,7 @@ package main
//func (this *CSMNGameDispatcherHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSMNGameDispatcherHandler Process recv ", data)
// if msg, ok := data.(*mngame.CSMNGameDispatcher); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p != nil {
// MiniGameMgrSington.PlayerMsgDispatcher(p, msg)
// }

View File

@ -27,7 +27,7 @@ func (this *CSRoleInfoPacketFactory) CreatePacket() interface{} {
func (this *CSRoleInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRoleInfoHandler Process recv ", data)
if _, ok := data.(*pets.CSRoleInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSRoleInfoHandler p == nil")
return nil
@ -61,7 +61,7 @@ func (this *CSPetInfoPacketFactory) CreatePacket() interface{} {
func (this *CSPetInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPetInfoHandler Process recv ", data)
if _, ok := data.(*pets.CSPetInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPetInfoHandler p == nil")
return nil
@ -95,7 +95,7 @@ func (this *CSRisingStarPacketFactory) CreatePacket() interface{} {
func (this *CSRisingStarHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRisingStarHandler Process recv ", data)
if msg, ok := data.(*pets.CSRisingStar); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSRisingStarHandler p == nil")
return nil
@ -237,7 +237,7 @@ func (this *CSRolePetUseOpPacketFactory) CreatePacket() interface{} {
func (this *CSRolePetUseOpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRolePetUseOpHandler Process recv ", data)
if msg, ok := data.(*pets.CSRolePetUseOp); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSRolePetUseOpHandler p == nil")
return nil
@ -294,7 +294,7 @@ func (this *CSRolePetUnlockPacketFactory) CreatePacket() interface{} {
func (this *CSRolePetUnlockHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRolePetUnlockHandler Process recv ", data)
if msg, ok := data.(*pets.CSRolePetUnlock); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSRolePetUnlockHandler p == nil")
return nil
@ -409,7 +409,7 @@ func (this *CSPetSkillLevelUpPacketFactory) CreatePacket() interface{} {
func (this *CSPetSkillLevelUpHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if msg, ok := data.(*pets.CSPetSkillLevelUp); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPetSkillLevelUp p == nil")
return nil
@ -487,7 +487,7 @@ func CSSkinInfo(s *netlib.Session, packetid int, data interface{}, sid int64) er
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSSkinInfo p == nil")
return nil
@ -506,7 +506,7 @@ func CSSkinUse(s *netlib.Session, packetid int, data interface{}, sid int64) err
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSSkinUse p == nil")
return nil
@ -550,7 +550,7 @@ func CSSkinUpgrade(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSSkinUpgrade p == nil")
return nil
@ -696,7 +696,7 @@ func CSSKinUnLock(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Errorf("CSSKinUnLock p == nil")
return nil

View File

@ -29,7 +29,7 @@ func (this *CSPhoneLotteryInfoPacketFactory) CreatePacket() interface{} {
// 获取抽奖信息
func (this *CSPhoneLotteryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*player_proto.CSPhoneLotteryInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
logger.Logger.Trace("客户端请求抽奖信息snid = ", p.SnId)
if p == nil {
logger.Logger.Warn("CSPhoneLotteryInfo p == nil")
@ -78,7 +78,7 @@ func (this *CSPhoneLotteryPacketFactory) CreatePacket() interface{} {
}
func (this *CSPhoneLotteryHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if msg, ok := data.(*player_proto.CSPhoneLottery); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPhoneLottery p == nil")
return nil
@ -229,7 +229,7 @@ func (this *CSDiamondLotteryInfoPacketFactory) CreatePacket() interface{} {
// 获取钻石抽奖信息
func (this *CSDiamondLotteryInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*player_proto.CSDiamondLotteryInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
logger.Logger.Trace("客户端请求钻石抽奖信息snid = ", p.SnId)
if p == nil {
logger.Logger.Warn("CSDiamondLotteryInfo p == nil")
@ -280,7 +280,7 @@ func (this *CSDiamondLotteryPacketFactory) CreatePacket() interface{} {
// 玩家钻石抽奖
func (this *CSDiamondLotteryHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if msg, ok := data.(*player_proto.CSDiamondLottery); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSDiamondLottery p == nil")
return nil
@ -440,7 +440,7 @@ func (this *CSDiamondLotteryLuckyAwardPacketFactory) CreatePacket() interface{}
// 玩家钻石抽奖保底奖励
func (this *CSDiamondLotteryLuckyAwardHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
if _, ok := data.(*player_proto.CSDiamondLotteryLuckyAward); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSDiamondLotteryLuckyAward p == nil")
return nil

View File

@ -16,6 +16,7 @@ import (
"time"
"unicode/utf8"
"github.com/golang-jwt/jwt/v4"
"mongo.games.com/goserver/core/basic"
"mongo.games.com/goserver/core/i18n"
"mongo.games.com/goserver/core/logger"
@ -29,6 +30,7 @@ import (
player_proto "mongo.games.com/game/protocol/player"
webapi_proto "mongo.games.com/game/protocol/webapi"
"mongo.games.com/game/webapi"
"mongo.games.com/game/worldsrv/internal"
)
var reTelRule, _ = regexp.Compile(`^(1[3|4|5|6|7|8|9][0-9]\d{4,8})$`)
@ -47,7 +49,7 @@ func (this *CSInviteCodePlayerPacketFactory) CreatePacket() interface{} {
func (this *CSInviteCodePlayerHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSInviteCodePlayerHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSPlayerInviteCode); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSInviteCodePlayerHandler p == nil")
return nil
@ -151,7 +153,7 @@ func (this *CSPlayerChangeNickHandler) Process(s *netlib.Session, packetid int,
//logger.Logger.Trace("CSPlayerChangeNickHandler Process recv ", data)
//if msg, ok := data.(*player_proto.CSChangeNick); ok {
// //logger.Logger.Trace("修改昵称获得IP",s.RemoteAddr())
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Warn("CSPlayerChangeNickHandler p == nil")
// return nil
@ -272,7 +274,7 @@ func (this *CSPlayerChangeIconPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerChangeIconHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerChangeIconHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSPlayerChangeIcon); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerChangeIconHandler p == nil")
return nil
@ -311,7 +313,7 @@ func (this *CSPlayerChangeHeadOutLinePacketFactory) CreatePacket() interface{} {
func (this *CSPlayerChangeHeadOutLineHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerChangeHeadOutLineHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSPlayerChangeHeadOutLine); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerChangeHeadOutLineHandler p == nil")
return nil
@ -365,7 +367,7 @@ func (this *CSPlayerChangeSexPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerChangeSexHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerChangeSexHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSPlayerChangeSex); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerChangeSexHandler p == nil")
return nil
@ -405,7 +407,7 @@ func (this *CSPlayerChangeSexHandler) Process(s *netlib.Session, packetid int, d
//func (this *CSUpgradeAccountHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSUpgradeAccountHandler Process recv ", data)
// if msg, ok := data.(*player_proto.CSUpgradeAccount); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
//
// sendPack := func(code player_proto.OpResultCode) {
// pack := &player_proto.SCUpgradeAccount{
@ -582,7 +584,7 @@ func (this *CSBindAlipayPacketFactory) CreatePacket() interface{} {
func (this *CSBindAlipayHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSBindAlipayHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSBindAlipay); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSBindAlipayHandler p == nil")
return nil
@ -712,7 +714,7 @@ func (this *CSBindBankPacketFactory) CreatePacket() interface{} {
func (this *CSBindBankHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSBindBankHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSBindBank); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSBindBankHandler p == nil")
return nil
@ -855,7 +857,7 @@ func (this *CSChangePasswordPacketFactory) CreatePacket() interface{} {
func (this *CSChangePasswordHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSChangePasswordHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSChangePassword); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSChangePasswordHandler p == nil")
return nil
@ -985,7 +987,7 @@ func (this *CSPlayerSafeBoxPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerSafeBoxHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerSafeBoxHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSPlayerOpCoin); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerSafeBoxHandler p == nil")
return nil
@ -1128,7 +1130,7 @@ func (this *CSPlayerSafeBoxCoinLogPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerSafeBoxCoinLogHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("GetSafeBoxCoinLog Process recv ", data)
if _, ok := data.(*player_proto.CSGetSafeBoxCoinLog); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("GetSafeBoxCoinLog p == nil")
return nil
@ -1185,7 +1187,7 @@ func (this *CSPlayerSafeBoxCoinLogHandler) Process(s *netlib.Session, packetid i
//func (this *CSPlayerGameCoinLogHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
// logger.Logger.Trace("CSPlayerGameCoinLogHandler Process recv ", data)
// if _, ok := data.(*player_proto.CSGetGameCoinLog); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Warn("CSPlayerGameCoinLogHandler p == nil")
// return nil
@ -1408,7 +1410,7 @@ func (this *CSPlayerRegisterHandler) Process(s *netlib.Session, packetid int, da
Plt: acc.Platform,
AccId: acc.AccountId.Hex(),
NickName: "",
HeadUrl: niceIdMgr.GetRobHeadUrlIdx(),
HeadUrl: GetRobHeadUrlIdx(),
})
if pi == nil || tf == false {
return player_proto.OpResultCode_OPRC_Error
@ -1480,7 +1482,7 @@ func (this *CSCustomerNewMsgAckPacketFactory) CreatePacket() interface{} {
func (this *CSCustomerNewMsgAckHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSCustomerNewMsgAckHandler Process recv ", data)
//if msg, ok := data.(*player_proto.CSCustomerNewMsgAck); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Warn("CSCustomerNewMsgAckHandler p == nil")
// return nil
@ -1505,7 +1507,7 @@ func (this *CSIosInstallStablePacketFactory) CreatePacket() interface{} {
func (this *CSIosInstallStableHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSIosInstallStableHandler Process recv ", data)
//if _, ok := data.(*player_proto.CSIosInstallStable); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Warn("CSIosInstallStableHandler p == nil")
// return nil
@ -1540,7 +1542,7 @@ func (this *CSFishJackpotPacketFactory) CreatePacket() interface{} {
func (this *CSFishJackpotHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSFishJackpotHandler Process recv ", data)
if _, ok := data.(*player_proto.CSJackpotList); ok {
player := PlayerMgrSington.GetPlayer(sid)
player := PlayerMgrSington.GetOnlinePlayer(sid)
if player == nil {
logger.Logger.Warn("CSFishJackpotHandler p == nil")
return nil
@ -1579,7 +1581,7 @@ func (this *CSFishJackpotCoinPacketFactory) CreatePacket() interface{} {
func (this *CSFishJackpotCoinHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSFishJackpotCoinHandler Process recv ", data)
if _, ok := data.(*player_proto.CSFishJackpotCoin); ok {
player := PlayerMgrSington.GetPlayer(sid)
player := PlayerMgrSington.GetOnlinePlayer(sid)
if player == nil {
logger.Logger.Warn("CSFishJackpotCoinHandler p == nil")
return nil
@ -1615,7 +1617,7 @@ func (this *CSGetSpreadIsOpenPacketFactory) CreatePacket() interface{} {
func (this *CSGetSpreadIsOpenHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetSpreadIsOpenHandler Process recv ", data)
if _, ok := data.(*player_proto.CSGetSpreadLWIsOpen); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetSpreadIsOpenHandler p == nil")
return nil
@ -1654,7 +1656,7 @@ func (this *CSPlayerSettingPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerSettingHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerSettingHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSPlayerSetting); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerSettingHandler p == nil")
return nil
@ -1712,7 +1714,7 @@ func (this *CSPlayerVIPBuyPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerVIPBuyHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSVIPBuy Process recv ", data)
//if msg, ok := data.(*player_proto.CSVIPBuy); ok {
// p := PlayerMgrSington.GetPlayer(sid)
// p := PlayerMgrSington.GetOnlinePlayer(sid)
// if p == nil {
// logger.Logger.Warn("CSPlayerVIPBuyHandler p == nil")
// return nil
@ -1737,7 +1739,7 @@ func (this *CSPlayerVIPInfoPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerVIPInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSVIPInfo Process recv ", data)
if _, ok := data.(*player_proto.CSVIPInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerVIPInfoHandler p == nil")
return nil
@ -1761,7 +1763,7 @@ func (this *CSPlayerVIPDrawPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerVIPDrawHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSVIPDraw Process recv ", data)
if msg, ok := data.(*player_proto.CSVIPDraw); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerVIPDrawHandler p == nil")
return nil
@ -1786,7 +1788,7 @@ func (this *CSVIPPrivilegeInfoPacketFactory) CreatePacket() interface{} {
func (this *CSVIPPrivilegeInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSVIPPrivilegeInfoHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSVIPPrivilegeInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSVIPPrivilegeInfoHandler p == nil")
return nil
@ -1880,7 +1882,7 @@ func CSExchangeChannel(s *netlib.Session, packetid int, data interface{}, sid in
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSExchangeChannel p == nil")
return nil
@ -2004,7 +2006,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
if player.IsOnLine() {
if player.sid != 0 && player.sid != sid {
//Kick the exist player disconnect
player.Kickout(common.KickReason_OtherLogin)
player.Kick(common.KickReason_OtherLogin)
}
}
@ -2022,7 +2024,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
proto.SetDefaults(scPlayerData)
player.SendRawToClientIncOffLine(sid, s, int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
//Kick the exist player disconnect
player.Kickout(common.KickReason_Freeze)
player.Kick(common.KickReason_Freeze)
return nil
}
@ -2036,7 +2038,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
proto.SetDefaults(scPlayerData)
player.SendRawToClientIncOffLine(sid, s, int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
//Kick the exist player disconnect
player.Kickout(common.KickReason_Freeze)
player.Kick(common.KickReason_Freeze)
return nil
}
@ -2056,7 +2058,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
proto.SetDefaults(scPlayerData)
player.SendRawToClientIncOffLine(sid, s, int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
//Kick the exist player disconnect
player.Kickout(common.KickReason_Freeze)
player.Kick(common.KickReason_Freeze)
return nil
}
@ -2068,40 +2070,18 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
proto.SetDefaults(scPlayerData)
player.SendRawToClientIncOffLine(sid, s, int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
//Kick the exist player disconnect
player.Kickout(common.KickReason_Freeze)
player.Kick(common.KickReason_Freeze)
return nil
}
}
if !player.IsRob {
if _, ok := BlackListMgrSington.CheckLogin(player.PlayerData); !ok {
//var msg string
//if bi != nil {
// msg = i18n.Tr("languages", "BlackListLimit2Args", player.SnId, bi.Id, player.SnId, bi.Id, player.SnId, bi.Id, player.SnId, bi.Id)
//} else {
// msg = i18n.Tr("languages", "BlackListLimit1Args", player.SnId, player.SnId, player.SnId, player.SnId)
//}
//common.SendSrvMsg(player, common.SRVMSG_CODE_DEFAULT, msg)
//scPlayerData := &player_proto.SCPlayerData{
// OpRetCode: player_proto.OpResultCode_OPRC_InBlackList,
//}
//proto.SetDefaults(scPlayerData)
//player.SendToClient(int(player_proto.PlayerPacketID_PACKET_SC_PLAYERDATA), scPlayerData)
//Kick the exist player disconnect
player.Kickout(common.KickReason_Freeze)
player.Kick(common.KickReason_Freeze)
return nil
}
}
// 给玩家发送三方余额状态
//statePack := &gamehall_proto.SCThridGameBalanceUpdateState{}
//if player.thridBalanceReqIsSucces {
// statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Sucess_Game
//} else {
// statePack.OpRetCode = gamehall_proto.OpResultCode_Game_OPRC_Error_Game
//}
//player.SendRawToClientIncOffLine(sid, s, int(gamehall_proto.GameHallPacketID_PACKET_SC_THRIDGAMEBALANCEUPDATESTATE), statePack)
//抽奖次数兼容老玩家
if !player.IsRob && !player.InitLotteryStatus && WelfareMgrSington.GetPhoneLotteryStatus(player.Platform) == model.WelfareOpen {
player.addLotteryCount(20)
@ -2114,6 +2094,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
playerFunc(player, cspl)
PlayerMgrSington.ReholdPlayer(player, sid, s)
player.OnRehold()
internal.FirePlayerRehold[*Player, *Scene](player)
player.SendPlayerInfo()
return nil
}
@ -2141,87 +2122,27 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
return
}
var promoterID string
var promoterCfg *PromoterConfig
f := func() {
PlayerMgrSington.AddPlayer(sid, pd.PlayerData, s)
player := PlayerMgrSington.GetPlayer(sid)
if player == nil {
return
}
if !player.IsRob {
if _, ok := BlackListMgrSington.CheckLogin(pd.PlayerData); !ok {
//黑名单用户也需要调用一下onlogin,否则会导致数据无法刷新
player.OnLogined()
player.Kickout(common.KickReason_Freeze)
return
}
}
if promoterID != "" {
key, err := GetPromoterKey(0, promoterID, "")
if err == nil {
promoterCfg = PromoterMgrSington.GetConfig(key)
if promoterCfg != nil && promoterCfg.IsInviteRoot > 0 {
player.BeUnderAgentCode = promoterID
}
}
}
var temp []byte
var ee error
di := cspl.GetDeviceInfo()
if di != "" {
var e common.Encryptor
e.Init(common.GetAppId(), player.PackageID, int32(cspl.GetTimeStamp()))
temp, ee = base64.StdEncoding.DecodeString(di)
if ee == nil {
e.Encrypt(temp, len(temp))
}
}
if isnew { //新用户赠送金币
//首次创建账号事件
//isBind := 0
//if pd.Tel != "" {
// isBind = 1
//}
//LogChannelSingleton.WriteMQData(model.GeneratePlayerEvent(model.WEBEVENT_LOGIN, pd.Platform, pd.PackageID, pd.SnId, pd.Channel, pd.BeUnderAgentCode, pd.PromoterTree, 1, 1, isBind, common.GetAppId()))
//newbieCoin := player.GetRegisterPrize()
//if newbieCoin > 0 {
// player.AddCoin(int64(newbieCoin), common.GainWay_NewPlayer, "system", "")
// //增加泥码
// player.AddDirtyCoin(0, int64(newbieCoin))
// player.ReportSystemGiveEvent(newbieCoin, common.GainWay_NewPlayer, true)
// player.AddPayCoinLog(int64(newbieCoin), model.PayCoinLogType_Coin, "NewPlayer")
// LogChannelSingleton.WriteMQData(model.GenerateSystemFreeGive(pd.SnId, pd.Name, pd.Platform, model.SystemFreeGive_GiveType_NewPlayer, model.SystemFreeGive_CoinType_Coin, int64(newbieCoin)))
//}
//if player.InviterId > 0 {
// //actRandCoinMgr.OnPlayerInvite(player.Platform, player.InviterId)
//}
}
//测试代码
playerFunc(player, cspl)
player.OnLogined()
player.SendPlayerInfo()
PlayerMgrSington.AddPlayer(sid, pd.PlayerData, s)
player := PlayerMgrSington.GetOnlinePlayer(sid)
if player == nil {
return
}
if pd.InviterId != 0 {
// 获取推广人
PlayerCacheMgrSingleton.UnCacheInvalidPlayerId(pd.InviterId)
PlayerCacheMgrSingleton.Get(pd.Platform, pd.InviterId, func(inviter *PlayerCacheItem, async, isnew bool) {
if inviter != nil {
promoterID = inviter.BeUnderAgentCode
}
f()
}, false)
} else {
f()
// 检查禁止登录
if !player.IsRob {
if _, ok := BlackListMgrSington.CheckLogin(pd.PlayerData); !ok {
//黑名单用户也需要调用一下onlogin,否则会导致数据无法刷新
player.OnLogined()
internal.FirePlayerLogined[*Player, *Scene](player)
player.Kick(common.KickReason_Freeze)
return
}
}
playerFunc(player, cspl)
player.OnLogined()
internal.FirePlayerLogined[*Player, *Scene](player)
player.SendPlayerInfo()
}, true)
return nil
@ -2230,7 +2151,7 @@ func CSPlayerData(s *netlib.Session, packetid int, data interface{}, sid int64)
func CSQueryPlayer(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSQueryPlayerHandler Process recv ", data)
if msg, ok := data.(*player_proto.CSQueryPlayer); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSQueryPlayerHandler p == nil")
return nil
@ -2333,7 +2254,7 @@ func CSSavePlayerInfo(s *netlib.Session, packetid int, data interface{}, sid int
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -2391,7 +2312,7 @@ func CSHeadUrl(s *netlib.Session, packetId int, data interface{}, sid int64) err
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSHeadUrl p == nil")
return nil
@ -2420,7 +2341,7 @@ func CSBindTelInfo(s *netlib.Session, packetId int, data interface{}, sid int64)
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Error("CSBindTelInfo p == nil", sid)
return nil
@ -2451,7 +2372,7 @@ func CSPlayerSMSCode(s *netlib.Session, packetId int, data interface{}, sid int6
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
sendPack := func(code player_proto.OpResultCode) {
pack := &player_proto.SCPlayerSMSCode{
@ -2576,7 +2497,7 @@ func CSBindTel(s *netlib.Session, packetId int, data interface{}, sid int64) err
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Error("CSBindTel p == nil", sid)
return nil
@ -2822,7 +2743,7 @@ func CSBillList(s *netlib.Session, packetId int, data interface{}, sid int64) er
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -2887,7 +2808,7 @@ func CSADV(s *netlib.Session, packetId int, data interface{}, sid int64) error {
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -2908,7 +2829,7 @@ func CSADV(s *netlib.Session, packetId int, data interface{}, sid int64) error {
// 获取运营商配置
func CSSMSConfig(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSSMSConfig Process %v", data)
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -2947,7 +2868,7 @@ func CSSMSConfig(s *netlib.Session, packetId int, data interface{}, sid int64) e
// 获取获奖记录
func CSAwardLog(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSAwardLog Process %v", data)
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -3044,7 +2965,7 @@ func CSAwardLog(s *netlib.Session, packetId int, data interface{}, sid int64) er
return nil
}
func CSPopUpWindowsConfig(s *netlib.Session, packetId int, data interface{}, sid int64) error {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -3085,7 +3006,7 @@ func CSPopUpWindowsConfig(s *netlib.Session, packetId int, data interface{}, sid
func CSUpdateAttribute(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSUpdateAttribute %v", data)
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -3251,7 +3172,7 @@ func CSUpdateAttribute(s *netlib.Session, packetId int, data interface{}, sid in
send()
return nil
}
if msg.GuideId == 1 {
if msg.GuideId == common.GuideIdNewPlayer {
if p.GuideStep >= 0 && p.GuideStep < model.GameParamData.GuideStepMaxNum {
p.GuideStep = -1 // 跳过引导为 -1
pack.OpRetCode = player_proto.OpResultCode_OPRC_Sucess
@ -3269,6 +3190,7 @@ func CSUpdateAttribute(s *netlib.Session, packetId int, data interface{}, sid in
return nil
}
p.GuideStep = int32(msg.GetParam()[0])
p.GuideData[msg.GetGuideId()] = int32(msg.GetParam()[0])
pack.OpRetCode = player_proto.OpResultCode_OPRC_Sucess
send()
return nil
@ -3284,7 +3206,7 @@ func CSUpdateAttribute(s *netlib.Session, packetId int, data interface{}, sid in
// 获取获奖记录
func CSClawdollItemLog(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSClawdollItemLog Process %v", data)
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -3327,7 +3249,7 @@ func CSClawdollItemLog(s *netlib.Session, packetId int, data interface{}, sid in
func CSCLAWDOLLConfig(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSDollConfigHandler")
if _, ok := data.(*player_proto.CSCLAWDOLLConfig); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSDollConfigHandler p == nil")
return nil
@ -3356,7 +3278,7 @@ func CSCLAWDOLLConfig(s *netlib.Session, packetId int, data interface{}, sid int
// 客户端请求弹窗配置
func CSPopUpWindowConfig(s *netlib.Session, packetId int, data interface{}, sid int64) error {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -3379,6 +3301,38 @@ func CSPopUpWindowConfig(s *netlib.Session, packetId int, data interface{}, sid
return nil
}
func CSGetSwapShopInfo(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSGetSwapShopInfo %v", data)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
_, ok := data.(*player_proto.CSGetSwapShopInfo)
if !ok {
return nil
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"snid": p.SnId,
"platform": p.Platform,
"exp": time.Now().Add(time.Hour * 24).Unix(),
})
str, err := token.SignedString([]byte(common.Config.AppId))
if err != nil {
logger.Logger.Errorf("CSGetSwapShopInfo err:%v", err)
return nil
}
pack := &player_proto.SCGetSwapShopInfo{
Url: fmt.Sprintf("%s?access_token=%s", model.GameParamData.SwapShopUrl, str),
}
p.SendToClient(int(player_proto.PlayerPacketID_PACKET_SCGetSwapShopInfo), pack)
logger.Logger.Tracef("SCGetSwapShopInfo %v", pack)
return nil
}
func init() {
// 用户信息
common.Register(int(player_proto.PlayerPacketID_PACKET_CS_PLAYERDATA), player_proto.CSPlayerData{}, CSPlayerData)
@ -3418,4 +3372,6 @@ func init() {
common.Register(int(player_proto.PlayerPacketID_PACKET_CSDollConfig), player_proto.CSCLAWDOLLConfig{}, CSCLAWDOLLConfig)
//客户端请求弹窗配置信息
common.Register(int(player_proto.PlayerPacketID_PACKET_CSPopUpWindowConfig), player_proto.CSPopUpWindowConfig{}, CSPopUpWindowConfig)
// 获取兑换商城网页地址
common.Register(int(player_proto.PlayerPacketID_PACKET_CSGetSwapShopInfo), player_proto.CSGetSwapShopInfo{}, CSGetSwapShopInfo)
}

View File

@ -27,7 +27,7 @@ func init() {
// CSRMSeasonInfo 赛季信息
func CSRMSeasonInfo(s *netlib.Session, packetId int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRMSeasonInfo")
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSRMSeasonInfo p == nil.")
return nil
@ -80,7 +80,7 @@ func CSRMRankConfig(s *netlib.Session, packetId int, data interface{}, sid int64
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSRMRankConfig p == nil.")
return nil
@ -116,7 +116,7 @@ func CSRMAwardConfig(s *netlib.Session, packetId int, data interface{}, sid int6
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSRMAwardConfig p == nil.")
return nil
@ -174,7 +174,7 @@ func CSRMAward(s *netlib.Session, packetId int, data interface{}, sid int64) err
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSRMAward p == nil.")
return nil

View File

@ -245,7 +245,7 @@ func init() {
if scene.starting {
if scene.currRound == 1 {
scene.startTime = time.Now()
//p := PlayerMgrSington.GetPlayer(s.Sid)
//p := PlayerMgrSington.GetOnlinePlayer(s.Sid)
}
}
if scene.starting {
@ -613,7 +613,7 @@ func (this *CSPMCmdPacketFactory) CreatePacket() interface{} {
func (this *CSPMCmdHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPMCmdHandler Process recv ", data)
if msg, ok := data.(*playerproto.CSPMCmd); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Trace("CSPMCmdHandler p == nil")
return nil
@ -652,33 +652,6 @@ func (this *CSPMCmdHandler) Process(s *netlib.Session, packetid int, data interf
return nil
}
type CSRobotChgDataPacketFactory struct {
}
type CSRobotChgDataHandler struct {
}
func (this *CSRobotChgDataPacketFactory) CreatePacket() interface{} {
pack := &playerproto.CSRobotChgData{}
return pack
}
func (this *CSRobotChgDataHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSRobotChgDataHandler Process recv ", data)
if _, ok := data.(*playerproto.CSRobotChgData); ok {
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Trace("CSRobotChgDataHandler p == nil")
return nil
}
if !p.IsRob {
logger.Logger.Trace("CSRobotChgDataHandler !p.IsRob")
return nil
}
}
return nil
}
type CSAccountInvalidPacketFactory struct {
}
type CSAccountInvalidHandler struct {
@ -692,7 +665,7 @@ func (this *CSAccountInvalidPacketFactory) CreatePacket() interface{} {
func (this *CSAccountInvalidHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSAccountInvalidHandler Process recv ", data)
if _, ok := data.(*loginproto.CSAccountInvalid); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil && p.IsRobot() {
snid := p.SnId
acc := p.AccountId
@ -718,12 +691,11 @@ func (this *CSAccountInvalidHandler) Process(s *netlib.Session, packetid int, da
}
func init() {
// 机器人命令
common.RegisterHandler(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdHandler{})
netlib.RegisterFactory(int(playerproto.PlayerPacketID_PACKET_CS_PMCMD), &CSPMCmdPacketFactory{})
common.RegisterHandler(int(playerproto.PlayerPacketID_PACKET_CS_ROBOTCHGDATA), &CSRobotChgDataHandler{})
netlib.RegisterFactory(int(playerproto.PlayerPacketID_PACKET_CS_ROBOTCHGDATA), &CSRobotChgDataPacketFactory{})
// 删除机器人账号
common.RegisterHandler(int(loginproto.LoginPacketID_PACKET_CS_ACCOUNTINVALID), &CSAccountInvalidHandler{})
netlib.RegisterFactory(int(loginproto.LoginPacketID_PACKET_CS_ACCOUNTINVALID), &CSAccountInvalidPacketFactory{})
}

View File

@ -29,7 +29,7 @@ func (this *CSShopInfoPacketFactory) CreatePacket() interface{} {
func (this *CSShopInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSShopInfoHandler Process recv ", data)
if msg, ok := data.(*shop.CSShopInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSShopInfoHandler p == nil")
return nil
@ -62,7 +62,7 @@ func (this *CSAdLookedPacketFactory) CreatePacket() interface{} {
func (this *CSAdLookedHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSAdLookedHandler Process recv ", data)
if msg, ok := data.(*shop.CSAdLooked); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSAdLookedHandler p == nil")
return nil
@ -134,7 +134,7 @@ func (this *CSVCPayShopPacketFactory) CreatePacket() interface{} {
func (this *CSVCPayShopHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSVCPayShopHandler Process recv ", data)
if msg, ok := data.(*shop.CSVCPayShop); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSVCPayShopHandler p == nil")
return nil
@ -246,7 +246,7 @@ func (this *CSShopExchangeRecordPacketFactory) CreatePacket() interface{} {
func (this *CSShopExchangeRecordHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSShopExchangeRecordHandler Process recv ", data)
if msg, ok := data.(*shop.CSShopExchangeRecord); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSShopExchangeRecordHandler p == nil")
return nil
@ -279,7 +279,7 @@ func (this *CSShopExchangeHandler) Process(s *netlib.Session, packetid int, data
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSShopExchangeHandler p == nil")
return nil
@ -362,7 +362,7 @@ func (this *CSShopExchangeListPacketFactory) CreatePacket() interface{} {
func (this *CSShopExchangeListHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSShopExchangeListHandler Process recv ", data)
if _, ok := data.(*shop.CSShopExchangeList); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSShopExchangeListHandler p == nil")
return nil
@ -388,7 +388,7 @@ func (this *CSPayInfoPacketFactory) CreatePacket() interface{} {
func (this *CSPayInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPayInfoHandler Process recv ", data)
if msg, ok := data.(*shop.CSPayInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPayInfoHandler p == nil")
return nil
@ -520,7 +520,7 @@ func (this *CSGetPayInfoListPacketFactory) CreatePacket() interface{} {
func (this *CSGetPayInfoListHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetPayInfoListHandler Process recv ", data)
if msg, ok := data.(*shop.CSGetPayInfoList); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSGetPayInfoListHandler p == nil")
return nil
@ -637,7 +637,7 @@ func (this *CSPlayerAddrPacketFactory) CreatePacket() interface{} {
func (this *CSPlayerAddrHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPlayerAddr Process recv ", data)
if msg, ok := data.(*shop.CSPlayerAddr); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPlayerAddr p == nil")
return nil
@ -671,7 +671,7 @@ func (this *CSUpdateVipShopPacketFactory) CreatePacket() interface{} {
}
func (this *CSUpdateVipShopHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warn("CSPayInfoHandler p == nil")
return nil

View File

@ -152,7 +152,7 @@ func CSTaskList(s *netlib.Session, packetId int, data interface{}, sid int64) er
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -199,7 +199,7 @@ func CSTaskReward(s *netlib.Session, packetId int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -278,7 +278,7 @@ func CSTaskDebugInc(s *netlib.Session, packetId int, data interface{}, sid int64
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}

View File

@ -15,7 +15,7 @@ func CSTMInfo(s *netlib.Session, packetid int, data interface{}, sid int64) erro
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSTMInfo p == nil.")
return nil
@ -33,7 +33,7 @@ func CSSignRace(s *netlib.Session, packetid int, data interface{}, sid int64) er
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSSignRace p == nil.")
return nil
@ -100,7 +100,7 @@ func CSMatchList(s *netlib.Session, packetId int, data interface{}, sid int64) e
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSMatchList p == nil.")
return nil
@ -171,7 +171,7 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSRoomList p == nil.")
return nil

View File

@ -36,7 +36,7 @@ func (this *CSGetReliefFundPacketFactory) CreatePacket() interface{} {
func (this *CSGetReliefFundHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetReliefFund Process recv ", data)
if msg, ok := data.(*welfare.CSGetReliefFund); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSGetReliefFundHandler p == nil")
return nil
@ -61,7 +61,7 @@ func (this *CSGetTurnplatePacketFactory) CreatePacket() interface{} {
func (this *CSGetTurnplateHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetTurnplate Process recv ", data)
if msg, ok := data.(*welfare.CSGetTurnplate); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSGetTurnplateHandler p == nil")
return nil
@ -91,7 +91,7 @@ func (this *CSGetAddupSignPacketFactory) CreatePacket() interface{} {
func (this *CSGetAddupSignHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetAddupSign Process recv ", data)
if msg, ok := data.(*welfare.CSGetAddupSign); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSGetAddupSignHandler p == nil")
return nil
@ -118,7 +118,7 @@ func (this *CSWelfaredInfoPacketFactory) CreatePacket() interface{} {
func (this *CSWelfaredInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSWelfaredInfo Process recv ", data)
if _, ok := data.(*welfare.CSWelfaredInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSWelfaredInfoHandler p == nil")
return nil
@ -143,7 +143,7 @@ func (this *CSBlindBoxInfoPacketFactory) CreatePacket() interface{} {
func (this *CSBlindBoxInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSBlindBoxInfo Process recv ", data)
if msg, ok := data.(*welfare.CSBlindBoxInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSBlindBoxInfoHandler p == nil")
return nil
@ -168,7 +168,7 @@ func (this *CSBuyBlindBoxPacketFactory) CreatePacket() interface{} {
func (this *CSBuyBlindBoxHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSGetBlindBox Process recv ", data)
if _, ok := data.(*welfare.CSGetBlindBox); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSBuyBlindBoxHandler p == nil")
return nil
@ -193,7 +193,7 @@ func (this *CSFirstPayInfoPacketFactory) CreatePacket() interface{} {
func (this *CSFirstPayInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSWelfareFirstPayData Process recv ", data)
if _, ok := data.(*welfare.CSWelfareFirstPayData); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSFirstPayInfoHandler p == nil")
return nil
@ -218,7 +218,7 @@ func (this *CSBuyFirstPayPacketFactory) CreatePacket() interface{} {
func (this *CSBuyFirstPayHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSWelfareFirstPay Process recv ", data)
if _, ok := data.(*welfare.CSWelfareFirstPay); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSBuyFirstPayHandler p == nil")
return nil
@ -243,7 +243,7 @@ func (this *CSContinuousPayInfoPacketFactory) CreatePacket() interface{} {
func (this *CSContinuousPayInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSWelfareContinuousPayData Process recv ", data)
if _, ok := data.(*welfare.CSWelfareContinuousPayData); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSContinuousPayInfoHandler p == nil")
return nil
@ -268,7 +268,7 @@ func (this *CSBuyContinuousPayPacketFactory) CreatePacket() interface{} {
func (this *CSBuyContinuousPayHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSWelfareContinuousPay Process recv ", data)
if _, ok := data.(*welfare.CSWelfareContinuousPay); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSBuyContinuousPayHandler p == nil")
return nil
@ -285,7 +285,7 @@ func CSWelfRelief(s *netlib.Session, packetid int, data interface{}, sid int64)
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -305,7 +305,7 @@ func CSWelfRelief(s *netlib.Session, packetid int, data interface{}, sid int64)
func CSInviteInfo(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Tracef("CSInviteInfo Process recv %v", data)
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -383,7 +383,7 @@ func CSBindInvite(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -591,7 +591,7 @@ func CSPermitInfo(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -710,7 +710,7 @@ func CSPermitAward(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -935,7 +935,7 @@ func CSPermitExchangeList(s *netlib.Session, packetid int, data interface{}, sid
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1004,7 +1004,7 @@ func CSPermitExchange(s *netlib.Session, packetid int, data interface{}, sid int
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1146,7 +1146,7 @@ func CSPermitShop(s *netlib.Session, packetid int, data interface{}, sid int64)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}
@ -1202,7 +1202,7 @@ func (this *CSPigBankGetInfoPacketFactory) CreatePacket() interface{} {
func (this *CSPigBankGetInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPigbankGetInfo Process recv ", data)
if _, ok := data.(*welfare.CSPigbankGetInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSPigBankGetInfoHandler p == nil")
return nil
@ -1227,7 +1227,7 @@ func (this *CSPigBankTakeCoinPacketFactory) CreatePacket() interface{} {
func (this *CSPigBankTakeCoinHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSPigbankTakeCoin Process recv ", data)
if _, ok := data.(*welfare.CSPigbankTakeCoin); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSPigBankTakeCoinHandler p == nil")
return nil
@ -1252,7 +1252,7 @@ func (this *CSSignDayAddup2AwardPacketFactory) CreatePacket() interface{} {
func (this *CSSignDayAddup2AwardHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSSignDayAddup2Award Process recv ", data)
if msg, ok := data.(*welfare.CSSignDayAddup2Award); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSPigBankTakeCoinHandler p == nil")
return nil
@ -1276,7 +1276,7 @@ func (this *CSDiamondBankGetInfoPacketFactory) CreatePacket() interface{} {
func (this *CSDiamondBankGetInfoHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSDiamondBankGetInfo Process recv ", data)
if _, ok := data.(*welfare.CSDiamondBankGetInfo); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSPigBankTakeCoinHandler p == nil")
return nil
@ -1301,7 +1301,7 @@ func (this *CSDiamondBankTakeDiamondPacketFactory) CreatePacket() interface{} {
func (this *CSDiamondBankTakeDiamondHandler) Process(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSDiamondBankGetInfo Process recv ", data)
if _, ok := data.(*welfare.CSDiamondBankTakeDiamond); ok {
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
logger.Logger.Warnf("CSPigBankTakeCoinHandler p == nil")
return nil
@ -1318,7 +1318,7 @@ func CSClientUpgrades(s *netlib.Session, packetid int, data interface{}, sid int
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p == nil {
return nil
}

View File

@ -125,9 +125,14 @@ func (c *CustomRoomMgr) GetRoomList(plt string) []*gamehall.PrivateRoomInfo {
}
var ret []*gamehall.PrivateRoomInfo
for _, v := range d.List {
if v != nil && v.PrivateRoomInfo != nil {
ret = append(ret, v.PrivateRoomInfo)
if v == nil || v.PrivateRoomInfo == nil {
continue
}
cfg := PlatformMgrSingleton.GetConfig(plt).RoomConfig[v.RoomConfigId]
if cfg == nil || cfg.GetOn() != common.On {
continue
}
ret = append(ret, v.PrivateRoomInfo)
}
return ret
}

View File

@ -1,151 +1,52 @@
package main
import (
"fmt"
"strings"
"time"
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/module"
"mongo.games.com/game/util/balancequeue"
)
type SaveTaskHandler interface {
Time2Save()
}
var SaverSliceNumber = 600
var DbSaveInst = &DbSaver{
Tick: int32(SaverSliceNumber),
index: 0,
init: false,
list: make([]*SaverArray, SaverSliceNumber),
queue: make([]*BalanceQueue, 10),
pool: make(map[SaveTaskHandler]*SaverArray),
GroupNumber: 600,
}
type DbSaver struct {
Tick int32 // 最大索引
index int32 // 循环索引
list []*SaverArray
queue []*BalanceQueue
init bool
pool map[SaveTaskHandler]*SaverArray
}
func (this *DbSaver) String() string {
buf := strings.Builder{}
buf.WriteString("DbSaver:\n")
buf.WriteString(fmt.Sprintf("Tick: %v\n", this.Tick))
buf.WriteString(fmt.Sprintf("List: %v\n", len(this.list)))
buf.WriteString(fmt.Sprintf("Queue: %v\n", len(this.queue)))
for k, v := range this.queue {
buf.WriteString(fmt.Sprintf("q%v: %v\n", k, len(v.queue)))
}
return buf.String()
}
// pushBalanceSaverArray 向队列中添加SaveTaskHandler
func (this *DbSaver) pushBalanceSaverArray(sth SaveTaskHandler) {
if sth == nil {
return
}
if _, exist := this.pool[sth]; exist {
return
}
for pos, bq := range this.queue {
size := len(bq.queue)
if size > 0 {
arr := bq.queue[size-1]
if pos+1 >= len(this.queue) {
this.queue = append(this.queue, &BalanceQueue{})
}
this.queue[pos+1].queue = append(this.queue[pos+1].queue, arr)
this.queue[pos].queue = bq.queue[:size-1]
arr.bqPos = len(this.queue[pos+1].queue) - 1
arr.Array = append(arr.Array, sth)
this.pool[sth] = arr
return
}
}
return
GroupNumber int
*balancequeue.BalanceQueue
m map[int32]balancequeue.Element
}
// RegisterDbSaverTask 向队列中添加SaveTaskHandler
func (this *DbSaver) RegisterDbSaverTask(i interface{}) {
if st, ok := i.(SaveTaskHandler); ok {
this.pushBalanceSaverArray(st)
func (this *DbSaver) RegisterDbSaverTask(i *Player) {
if i == nil {
return
}
e := balancequeue.ElementWrapper(i.Time2Save)
this.m[i.GetSnId()] = e
this.Push(e)
}
// UnregisterDbSaveTask 从队列中移除SaveTaskHandler
func (this *DbSaver) UnregisterDbSaveTask(i interface{}) {
if sth, ok := i.(SaveTaskHandler); ok {
if arr, exist := this.pool[sth]; exist {
delete(this.pool, sth)
count := len(arr.Array)
for i := 0; i < count; i++ {
if arr.Array[i] == sth {
arr.Array[i] = arr.Array[count-1]
arr.Array = arr.Array[:count-1]
bqPos := arr.bqPos
queCount := len(this.queue[count].queue)
this.queue[count].queue[bqPos] = this.queue[count].queue[queCount-1]
this.queue[count].queue[bqPos].bqPos = bqPos
this.queue[count].queue = this.queue[count].queue[:queCount-1]
this.queue[count-1].queue = append(this.queue[count-1].queue, arr)
arr.bqPos = len(this.queue[count-1].queue) - 1
return
}
}
} else {
logger.Logger.Info("Player not in dbsaver")
}
func (this *DbSaver) UnregisterDbSaveTask(i *Player) {
if i == nil {
return
}
e, ok := this.m[i.GetSnId()]
if !ok {
return
}
this.Pop(e)
}
// SaverArray 保存SaveTaskHandler的数组
type SaverArray struct {
Array []SaveTaskHandler
bqPos int
}
// BalanceQueue 保存SaveTaskHandler的队列
type BalanceQueue struct {
queue []*SaverArray
}
// //////////////////////////////////////////////////////////////////
// / Module Implement [beg]
// //////////////////////////////////////////////////////////////////
func (this *DbSaver) ModuleName() string {
return "dbsaver"
}
func (this *DbSaver) Init() {
if this.init == false {
for i := 0; i < len(this.queue); i++ {
this.queue[i] = &BalanceQueue{}
}
//初始化平衡数组所有平衡队列容量为0
for i := 0; i < int(this.Tick); i++ {
this.list[i] = &SaverArray{bqPos: i}
this.queue[0].queue = append(this.queue[0].queue, this.list[i])
}
this.init = true
}
}
func (this *DbSaver) Update() {
if this.index == this.Tick {
this.index = 0
}
sa := this.list[this.index]
for _, sth := range sa.Array {
sth.Time2Save()
}
this.index = this.index + 1
this.BalanceQueue = balancequeue.New(this.GroupNumber)
this.m = make(map[int32]balancequeue.Element)
}
func (this *DbSaver) Shutdown() {

View File

@ -420,7 +420,7 @@ func handlerEvent(ctx context.Context, completeKey string, isInit bool, event *c
}
for _, p := range targetPlayer {
if p.sid != 0 {
p.Kickout(int32(loginproto.SSDisconnectTypeCode_SSDTC_BlackList))
p.Kick(int32(loginproto.SSDisconnectTypeCode_SSDTC_BlackList))
} else {
LoginStateMgrSington.LogoutByAccount(p.AccountId)
}

18
worldsrv/headurl.go Normal file
View File

@ -0,0 +1,18 @@
package main
import (
"fmt"
)
var robotHeadUrlIdx int
func GetRobHeadUrlIdx() string {
robotHeadUrlIdx++
if robotHeadUrlIdx > 1448 {
robotHeadUrlIdx = 1
}
return fmt.Sprintf("https://avatar-icon.oss-cn-guangzhou.aliyuncs.com/user_head/head_%v.jpg", robotHeadUrlIdx)
}
func GetRobHeadUrl(idx int32) string {
return fmt.Sprintf("https://avatar-icon.oss-cn-guangzhou.aliyuncs.com/user_head/head_%v.jpg", idx)
}

View File

@ -1,12 +1,10 @@
package internal
type Player any
import "mongo.games.com/game/common"
type Scene any
var _playerListeners []interface{}
var _playerListeners []PlayerListener
func RegisterPlayerListener(l PlayerListener) {
func RegisterPlayerListener[Player, Scene any](l PlayerListener[Player, Scene]) {
for _, ll := range _playerListeners {
if ll == l {
return
@ -15,144 +13,192 @@ func RegisterPlayerListener(l PlayerListener) {
_playerListeners = append(_playerListeners, l)
}
type PlayerListener interface {
type PlayerListener[Player, Scene any] interface {
common.ClockSinker
// 登出相关
OnPlayerLogined(p Player) // 玩家登录时触发
OnPlayerLogouted(p Player) // 玩家登出时触发
OnPlayerDropLine(p Player) // 玩家掉线时触发
OnPlayerRehold(p Player) // 玩家重新连接时触发
// 时间相关
OnPlayerSecTimer(p Player) // 每秒触发
OnPlayerMiniTimer(p Player) // 每分钟触发
OnPlayerHourTimer(p Player) // 每小时触发
OnPlayerDayTimer(p Player, login, continuous bool) // 每天触发login表示是否登录continuous表示是否连续登录
OnPlayerWeekTimer(p Player) // 每周触发
OnPlayerMonthTimer(p Player) // 每月触发
// 业务相关
OnPlayerEnterScene(p Player, s Scene) // 玩家进入场景时触发
OnPlayerLeaveScene(p Player, s Scene) // 玩家离开场景时触发
OnPlayerReturnScene(p Player, s Scene) // 玩家返回房间时触发
OnPlayerEnterSceneBefore(p Player, s Scene) // 玩家进入场景前触发
OnPlayerEnterSceneAfter(p Player, s Scene) // 玩家进入场景后触发
OnPlayerLeaveSceneBefore(p Player, s Scene) // 玩家离开场景前触发
OnPlayerLeaveSceneAfter(p Player, s Scene) // 玩家离开场景后触发
OnPlayerReturnSceneBefore(p Player, s Scene) // 玩家返回房间前触发
OnPlayerReturnSceneAfter(p Player, s Scene) // 玩家返回房间后触发
}
func FirePlayerLogined(p Player) {
func FirePlayerLogined[Player, Scene any](p Player) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerLogined(p)
l.(PlayerListener[Player, Scene]).OnPlayerLogined(p)
}
}
}
func FirePlayerLogouted(p Player) {
func FirePlayerLogouted[Player, Scene any](p Player) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerLogouted(p)
l.(PlayerListener[Player, Scene]).OnPlayerLogouted(p)
}
}
}
func FirePlayerDropLine(p Player) {
func FirePlayerDropLine[Player, Scene any](p Player) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerDropLine(p)
l.(PlayerListener[Player, Scene]).OnPlayerDropLine(p)
}
}
}
func FirePlayerRehold(p Player) {
func FirePlayerRehold[Player, Scene any](p Player) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerRehold(p)
l.(PlayerListener[Player, Scene]).OnPlayerRehold(p)
}
}
}
func FirePlayerSecTimer(p Player) {
func FirePlayerEnterSceneBefore[Player, Scene any](p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerSecTimer(p)
l.(PlayerListener[Player, Scene]).OnPlayerEnterSceneBefore(p, s)
}
}
}
func FirePlayerMiniTimer(p Player) {
func FirePlayerEnterSceneAfter[Player, Scene any](p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerMiniTimer(p)
l.(PlayerListener[Player, Scene]).OnPlayerEnterSceneAfter(p, s)
}
}
}
func FirePlayerHourTimer(p Player) {
func FirePlayerLeaveSceneBefore[Player, Scene any](p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerHourTimer(p)
l.(PlayerListener[Player, Scene]).OnPlayerLeaveSceneBefore(p, s)
}
}
}
func FirePlayerDayTimer(p Player, login, continuous bool) {
func FirePlayerLeaveSceneAfter[Player, Scene any](p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerDayTimer(p, login, continuous)
l.(PlayerListener[Player, Scene]).OnPlayerLeaveSceneAfter(p, s)
}
}
}
func FirePlayerWeekTimer(p Player) {
func FirePlayerReturnSceneBefore[Player, Scene any](p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerWeekTimer(p)
l.(PlayerListener[Player, Scene]).OnPlayerReturnSceneBefore(p, s)
}
}
}
func FirePlayerMonthTimer(p Player) {
func FirePlayerReturnSceneAfter[Player, Scene any](p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerMonthTimer(p)
l.(PlayerListener[Player, Scene]).OnPlayerReturnSceneAfter(p, s)
}
}
}
func FirePlayerEnterScene(p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerEnterScene(p, s)
}
type BasePlayerListener[Player, Scene any] struct {
common.ClockFunc
}
func (l *BasePlayerListener[Player, Scene]) OnPlayerLogined(p Player) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerLogouted(p Player) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerDropLine(p Player) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerRehold(p Player) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerEnterSceneBefore(p Player, s Scene) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerEnterSceneAfter(p Player, s Scene) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerLeaveSceneBefore(p Player, s Scene) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerLeaveSceneAfter(p Player, s Scene) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerReturnSceneBefore(p Player, s Scene) {}
func (l *BasePlayerListener[Player, Scene]) OnPlayerReturnSceneAfter(p Player, s Scene) {}
type PlayerListenerFunc[Player, Scene any] struct {
common.ClockFunc
OnPlayerLoginedFunc func(p Player)
OnPlayerLogoutedFunc func(p Player)
OnPlayerDropLineFunc func(p Player)
OnPlayerReholdFunc func(p Player)
OnPlayerEnterSceneBeforeFunc func(p Player, s Scene)
OnPlayerEnterSceneAfterFunc func(p Player, s Scene)
OnPlayerLeaveSceneBeforeFunc func(p Player, s Scene)
OnPlayerLeaveSceneAfterFunc func(p Player, s Scene)
OnPlayerReturnSceneBeforeFunc func(p Player, s Scene)
OnPlayerReturnSceneAfterFunc func(p Player, s Scene)
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerLogined(p Player) {
if l.OnPlayerLoginedFunc != nil {
l.OnPlayerLoginedFunc(p)
}
}
func FirePlayerLeaveScene(p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerLeaveScene(p, s)
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerLogouted(p Player) {
if l.OnPlayerLogoutedFunc != nil {
l.OnPlayerLogoutedFunc(p)
}
}
func FirePlayerReturnScene(p Player, s Scene) {
for _, l := range _playerListeners {
if l != nil {
l.OnPlayerReturnScene(p, s)
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerDropLine(p Player) {
if l.OnPlayerDropLineFunc != nil {
l.OnPlayerDropLineFunc(p)
}
}
type BasePlayerListener struct {
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerRehold(p Player) {
if l.OnPlayerReholdFunc != nil {
l.OnPlayerReholdFunc(p)
}
}
func (l *BasePlayerListener) OnPlayerLogined(p Player) {}
func (l *BasePlayerListener) OnPlayerLogouted(p Player) {}
func (l *BasePlayerListener) OnPlayerDropLine(p Player) {}
func (l *BasePlayerListener) OnPlayerRehold(p Player) {}
func (l *BasePlayerListener) OnPlayerSecTimer(p Player) {}
func (l *BasePlayerListener) OnPlayerMiniTimer(p Player) {}
func (l *BasePlayerListener) OnPlayerHourTimer(p Player) {}
func (l *BasePlayerListener) OnPlayerDayTimer(p Player, login, continuous bool) {}
func (l *BasePlayerListener) OnPlayerWeekTimer(p Player) {}
func (l *BasePlayerListener) OnPlayerMonthTimer(p Player) {}
func (l *BasePlayerListener) OnPlayerEnterScene(p Player, s Scene) {}
func (l *BasePlayerListener) OnPlayerLeaveScene(p Player, s Scene) {}
func (l *BasePlayerListener) OnPlayerReturnScene(p Player, s Scene) {}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerEnterSceneBefore(p Player, s Scene) {
if l.OnPlayerEnterSceneBeforeFunc != nil {
l.OnPlayerEnterSceneBeforeFunc(p, s)
}
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerEnterSceneAfter(p Player, s Scene) {
if l.OnPlayerEnterSceneAfterFunc != nil {
l.OnPlayerEnterSceneAfterFunc(p, s)
}
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerLeaveSceneBefore(p Player, s Scene) {
if l.OnPlayerLeaveSceneBeforeFunc != nil {
l.OnPlayerLeaveSceneBeforeFunc(p, s)
}
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerLeaveSceneAfter(p Player, s Scene) {
if l.OnPlayerLeaveSceneAfterFunc != nil {
l.OnPlayerLeaveSceneAfterFunc(p, s)
}
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerReturnSceneBefore(p Player, s Scene) {
if l.OnPlayerReturnSceneBeforeFunc != nil {
l.OnPlayerReturnSceneBeforeFunc(p, s)
}
}
func (l *PlayerListenerFunc[Player, Scene]) OnPlayerReturnSceneAfter(p Player, s Scene) {
if l.OnPlayerReturnSceneAfterFunc != nil {
l.OnPlayerReturnSceneAfterFunc(p, s)
}
}
func RegisterPlayerListenerFunc[P, S any](l *PlayerListenerFunc[P, S]) {
common.RegisterClockFunc(&l.ClockFunc)
RegisterPlayerListener(l)
}

View File

@ -233,7 +233,7 @@ func (this *LoginStateMgr) LogoutAllBySession(session *netlib.Session) {
for sid, s := range this.statesBySid {
if s.gateSess == session {
this.Logout(s)
p := PlayerMgrSington.GetPlayer(sid)
p := PlayerMgrSington.GetOnlinePlayer(sid)
if p != nil {
p.DropLine()
}

View File

@ -759,6 +759,7 @@ func (l *LotteryMgr) AddCostRoomCard(plt string, snid int32, n int64) {
logger.Logger.Errorf("AddCostRoomCard snid:%v not found", snid)
return
}
PlayerMgrSington.AddPlayer(0, item.PlayerData, nil)
f()
}, false)
return

View File

@ -1,113 +0,0 @@
package main
import (
"fmt"
"math/rand"
"mongo.games.com/game/proto"
player_proto "mongo.games.com/game/protocol/player"
server_proto "mongo.games.com/game/protocol/server"
"mongo.games.com/goserver/core"
"mongo.games.com/goserver/core/logger"
)
var niceIdMgr = &NiceIdManager{
SnIds: []int32{},
UsedIds: make(map[int32]int32),
}
type NiceIdManager struct {
SnIds []int32
UsedIds map[int32]int32
RobHeadUrlIdx int32
}
func (this *NiceIdManager) init() {
//this.SnIds = model.GetInvalidSnid()
//this.SnIds = make([]int32, 0, len(srvdata.PBDB_PlayerInfoMgr.Datas.Arr))
//for _, value := range srvdata.PBDB_PlayerInfoMgr.Datas.Arr {
// this.SnIds = append(this.SnIds, value.GetId())
//}
snidLen := len(this.SnIds)
logger.Logger.Info("NiceIdManager snid lens:", snidLen)
for i := 0; i < snidLen; i++ {
index := rand.Intn(snidLen)
this.SnIds[i], this.SnIds[index] = this.SnIds[index], this.SnIds[i]
}
for _, value := range niceIdMgr.SnIds {
this.UsedIds[value] = 0
}
}
func (this *NiceIdManager) PopNiceId(user int32) int32 {
if len(this.SnIds) <= 0 {
return 0
}
selId := this.SnIds[len(this.SnIds)-1]
this.SnIds = this.SnIds[:len(this.SnIds)-1]
this.UsedIds[selId] = user
logger.Logger.Infof("NiceIdManager pop niceid %v to %v", selId, user)
return selId
}
func (this *NiceIdManager) PushNiceId(snid int32) {
if _, ok := this.UsedIds[snid]; ok {
this.SnIds = append(this.SnIds, snid)
snidLen := len(this.SnIds)
index := rand.Intn(snidLen)
this.SnIds[snidLen-1], this.SnIds[index] = this.SnIds[index], this.SnIds[snidLen-1]
this.UsedIds[snid] = 0
logger.Logger.Infof("NiceIdManager push niceid %v to cache", snid)
}
}
func (this *NiceIdManager) NiceIdCheck(playerid int32) {
logger.Logger.Infof("%v be used in NiceIdManager.", playerid)
if userid, ok := this.UsedIds[playerid]; ok {
delete(this.UsedIds, playerid)
if userid != 0 {
user := PlayerMgrSington.GetPlayerBySnId(userid)
if user != nil {
user.NiceId = this.PopNiceId(userid)
if user.scene != nil {
pack := &server_proto.WGNiceIdRebind{
User: proto.Int32(userid),
NewId: proto.Int32(user.NiceId),
}
user.SendToGame(int(server_proto.SSPacketID_PACKET_GW_NICEIDREBIND), pack)
packNr := &player_proto.SCNiceIdRebind{
SnidId: proto.Int32(userid),
NiceId: proto.Int32(user.NiceId),
}
user.scene.Broadcast(int(player_proto.PlayerPacketID_PACKET_SC_NICEIDREBIND), packNr, 0)
}
}
} else {
niceIndex := -1
for key, value := range this.SnIds {
if value == playerid {
niceIndex = key
break
}
}
if niceIndex != -1 {
curCount := len(this.SnIds)
this.SnIds[niceIndex], this.SnIds[curCount-1] = this.SnIds[curCount-1], this.SnIds[niceIndex]
this.SnIds = this.SnIds[:curCount-1]
}
}
}
}
func (this *NiceIdManager) GetRobHeadUrlIdx() string {
this.RobHeadUrlIdx++
if this.RobHeadUrlIdx > 1448 {
this.RobHeadUrlIdx = 1
}
return fmt.Sprintf("https://avatar-icon.oss-cn-guangzhou.aliyuncs.com/user_head/head_%v.jpg", this.RobHeadUrlIdx)
}
func (this *NiceIdManager) GetRobHeadUrl(idx int32) string {
return fmt.Sprintf("https://avatar-icon.oss-cn-guangzhou.aliyuncs.com/user_head/head_%v.jpg", idx)
}
func init() {
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
niceIdMgr.init()
return nil
})
}

View File

@ -221,7 +221,7 @@ func (p *Platform) ChangeDisabled(disable bool) bool {
}
p.Disable = disable
if disable { //关闭平台,踢掉平台上所有的人
PlayerMgrSington.KickoutByPlatform(p.IdStr)
PlayerMgrSington.KickByPlatform(p.IdStr)
}
return true
}

File diff suppressed because it is too large Load Diff

View File

@ -10,15 +10,21 @@ import (
"mongo.games.com/goserver/core/task"
"mongo.games.com/game/model"
"mongo.games.com/game/util/balancequeue"
"mongo.games.com/game/worldsrv/internal"
)
const (
// InvalidPlayerCacheSec 数据不存在60秒内不再查询
InvalidPlayerCacheSec int64 = 60
/*
查询不在线的玩家数据缓存一段时间
*/
InvalidPlayerCacheMax int = 100000
ListNumber int32 = 300
const (
// InvalidPlayerCacheSec 数据不存在60秒内不再查询数据库
InvalidPlayerCacheSec int64 = 60
// InvalidPlayerCacheMax 缓存的无效玩家最大数量
InvalidPlayerCacheMax int = 100000
// ListNumber 平衡队列分组数量
ListNumber = 300
)
func init() {
@ -30,41 +36,31 @@ var PlayerCacheMgrSingleton = &PlayerCacheMgr{
playerCbs: make(map[int32][]func(*PlayerCacheItem, bool, bool)),
playerInvalidIds: make(map[int32]int64),
playerWaitClr: make([]*PlayerCacheItem, 0, 128),
DbSaver: &DbSaver{
Tick: ListNumber,
index: 0,
init: false,
list: make([]*SaverArray, ListNumber),
queue: make([]*BalanceQueue, 10),
pool: make(map[SaveTaskHandler]*SaverArray),
},
}
type PlayerCacheItem struct {
*model.PlayerData
}
func (p *PlayerCacheItem) CanDel() bool {
//return !p.isOnline && time.Now().Unix()-p.lastTs > int64(ListNumber)
return true
}
func (p *PlayerCacheItem) Time2Save() {
func (p *PlayerCacheItem) BalanceQueueHandler() {
// 并没有对缓存数据做什么操作,只是释放缓存
if p.CanDel() {
PlayerCacheMgrSingleton.playerWaitClr = append(PlayerCacheMgrSingleton.playerWaitClr, p)
}
PlayerCacheMgrSingleton.playerWaitClr = append(PlayerCacheMgrSingleton.playerWaitClr, p)
}
type PlayerCacheMgr struct {
*DbSaver
*balancequeue.BalanceQueue
playerMap map[int32]*PlayerCacheItem // snid; 玩家信息缓存
playerCbs map[int32][]func(*PlayerCacheItem, bool, bool) // snid; 等待执行的回掉方法
playerInvalidIds map[int32]int64 // snid; 防止频繁访问数据库
playerWaitClr []*PlayerCacheItem // 根据DbSaver缓冲失效策略释放玩家数据
}
func (c *PlayerCacheMgr) Get(plt string, snid int32, cb func(*PlayerCacheItem, bool, bool), createIfNotExist bool) {
// Get 获取玩家数据
// plt 平台
// snid 玩家id
// cb 回掉方法; playerInfo 玩家数据; isFindDB 是否查了数据库; isNew 是否新创建的玩家
// createIfNotExist 玩家不存在是否创建
func (c *PlayerCacheMgr) Get(plt string, snid int32, cb func(playerInfo *PlayerCacheItem, isFindDB bool, isNew bool), createIfNotExist bool) {
// 1.玩家缓冲数据存在
if p, exist := c.playerMap[snid]; exist {
cb(p, false, false)
@ -91,11 +87,12 @@ func (c *PlayerCacheMgr) Get(plt string, snid int32, cb func(*PlayerCacheItem, b
}
c.playerCbs[snid] = []func(*PlayerCacheItem, bool, bool){cb}
var isnew bool
var isNew bool
var replays []*internal.PlayerLoadReplay
task.New(core.CoreObject(), task.CallableWrapper(func(o *basic.Object) interface{} {
pi, flag := model.GetPlayerDataBySnId(plt, snid, true, createIfNotExist)
isnew = flag
isNew = flag
// 查询其它玩家数据
for _, v := range internal.GetPlayerLoads() {
replays = append(replays, v.Load(plt, snid, pi))
}
@ -119,22 +116,26 @@ func (c *PlayerCacheMgr) Get(plt string, snid int32, cb func(*PlayerCacheItem, b
}
}
if su {
if len(replays) != len(internal.GetPlayerLoads()) {
su = false
}
}
if !su {
c.cacheInvalidPlayerId(snid)
delete(c.playerCbs, snid)
for _, cb := range c.playerCbs[snid] {
cb(nil, true, false)
for _, v := range c.playerCbs[snid] {
v(nil, true, false)
}
delete(c.playerCbs, snid)
return
}
if len(replays) == len(internal.GetPlayerLoads()) {
for k, v := range internal.GetPlayerLoads() {
if v == nil || replays[k] == nil {
continue
}
v.Callback(pi, replays[k])
for k, v := range internal.GetPlayerLoads() {
if v == nil || replays[k] == nil {
continue
}
v.Callback(pi, replays[k])
}
// 查询成功缓存数据执行cb方法
@ -142,38 +143,35 @@ func (c *PlayerCacheMgr) Get(plt string, snid int32, cb func(*PlayerCacheItem, b
if !ok {
item = &PlayerCacheItem{PlayerData: pi}
c.playerMap[snid] = item
c.RegisterDbSaverTask(item)
c.Push(item)
}
if cbs, exist := c.playerCbs[snid]; exist {
delete(c.playerCbs, snid)
for _, cb := range cbs {
cb(item, true, isnew)
}
for _, v := range c.playerCbs[snid] {
v(item, true, isNew)
}
delete(c.playerCbs, snid)
})).StartByExecutor(fmt.Sprintf("Player%v", snid))
}
func (c *PlayerCacheMgr) GetMore(plt string, snid []int32, cb func([]*PlayerCacheItem, bool)) {
isAsyn := false
count := len(snid)
result := make([]*PlayerCacheItem, 0, count)
innerCb := func(item *PlayerCacheItem, asyn, isnew bool) {
if item != nil {
result = append(result, item)
}
if asyn {
isAsyn = true
}
count--
if count == 0 {
cb(result, isAsyn)
}
}
for _, id := range snid {
c.Get(plt, id, innerCb, false)
}
}
//func (c *PlayerCacheMgr) GetMore(plt string, snid []int32, cb func([]*PlayerCacheItem, bool)) {
// isDB := false
// count := len(snid)
// result := make([]*PlayerCacheItem, 0, count)
// innerCb := func(item *PlayerCacheItem, isFindDB, isNew bool) {
// if item != nil {
// result = append(result, item)
// }
// if isFindDB {
// isDB = true
// }
// count--
// if count == 0 {
// cb(result, isDB)
// }
// }
// for _, id := range snid {
// c.Get(plt, id, innerCb, false)
// }
//}
func (c *PlayerCacheMgr) cacheInvalidPlayerId(snid int32) {
if len(c.playerInvalidIds) >= InvalidPlayerCacheMax {
@ -199,29 +197,14 @@ func (c *PlayerCacheMgr) ModuleName() string {
}
func (c *PlayerCacheMgr) Init() {
c.DbSaver.Init()
c.BalanceQueue = balancequeue.New(ListNumber)
}
func (c *PlayerCacheMgr) Update() {
// 执行Time2Save之后清除缓存
c.DbSaver.Update()
c.BalanceQueue.Update()
for _, p := range c.playerWaitClr {
delete(c.playerMap, p.SnId)
c.UnregisterDbSaveTask(p)
// 释放玩家数据
if PlayerMgrSington.GetPlayerBySnId(p.SnId) == nil {
for _, v := range internal.GetPlayerLoads() {
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
v.Save(p.Platform, p.SnId, true, true)
return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
if PlayerMgrSington.GetPlayerBySnId(p.SnId) == nil {
v.Release(p.Platform, p.SnId)
}
})).StartByExecutor(fmt.Sprintf("Player%v", p.SnId))
}
}
c.Pop(p)
}
c.playerWaitClr = c.playerWaitClr[0:0]
}

View File

@ -1,7 +1,9 @@
package main
import (
"fmt"
"math/rand"
"os"
"time"
"mongo.games.com/goserver/core/basic"
@ -25,7 +27,6 @@ var PlayerMgrSington = &PlayerMgr{
sidMap: make(map[int64]*Player),
snidMap: make(map[int32]*Player),
accountMap: make(map[string]*Player),
tokenMap: make(map[string]*Player),
players: make([]*Player, 0, 1024),
playerOfPlatform: make(map[string]map[int32]*Player),
loading: make(map[string]*PlayerPendingData),
@ -38,14 +39,18 @@ type PlayerPendingData struct {
type PlayerMgr struct {
common.BaseClockSinker
sidMap map[int64]*Player // sid
snidMap map[int32]*Player // snid
accountMap map[string]*Player // accountid
tokenMap map[string]*Player // 客服token
players []*Player // 只有真实玩家
playerOfPlatform map[string]map[int32]*Player // platform:snid;只有真实玩家
// 以连接标识为索引
sidMap map[int64]*Player
// 以snid为索引
snidMap map[int32]*Player
// 以账号为索引
accountMap map[string]*Player
// 只有真实玩家,不包括机器人
players []*Player
// 平台id:snid:真实玩家
playerOfPlatform map[string]map[int32]*Player
loading map[string]*PlayerPendingData // accountid,控制访问频率
loading map[string]*PlayerPendingData // accountid,控制访问频率;登录状态标记
}
// PlayerStatics 在线统计
@ -100,22 +105,15 @@ func (this *PlayerMgr) AddPlayer(sid int64, playerInfo *model.PlayerData, s *net
return false
}
if sid == 0 {
logger.Logger.Warnf("(this *PlayerMgr) AddPlayer player sid == 0:")
return false
}
logger.Logger.Trace("(this *PlayerMgr) AddPlayer Set player ip:", player.Ip)
this.sidMap[sid] = player
var oldp *Player
var old *Player
if p, exist := this.snidMap[player.SnId]; exist {
oldp = p
old = p
}
this.snidMap[player.SnId] = player
this.accountMap[player.AccountId] = player
if player.customerToken != "" {
this.tokenMap[player.customerToken] = player
}
if !player.IsRob {
var found bool
for i, p := range this.players {
@ -129,9 +127,6 @@ func (this *PlayerMgr) AddPlayer(sid int64, playerInfo *model.PlayerData, s *net
if !found {
this.players = append(this.players, player)
}
if player.HeadUrl == "" {
player.HeadUrl = niceIdMgr.GetRobHeadUrl(player.Head)
}
//平台玩家管理器
if pp, exist := this.playerOfPlatform[player.Platform]; exist {
@ -142,21 +137,76 @@ func (this *PlayerMgr) AddPlayer(sid int64, playerInfo *model.PlayerData, s *net
this.playerOfPlatform[player.Platform] = pp
}
logger.Logger.Tracef("###%v mount to DBSaver[AddPlayer]", player.Name)
if oldp != nil { //删除旧的玩家
DbSaveInst.UnregisterDbSaveTask(oldp)
logger.Logger.Tracef("###%v mount to DBSaver[AddPlayer]", player.SnId)
if old != nil { //删除旧的玩家
DbSaveInst.UnregisterDbSaveTask(old)
}
DbSaveInst.RegisterDbSaverTask(player)
niceIdMgr.NiceIdCheck(player.SnId)
} else {
player.NiceId = niceIdMgr.PopNiceId(player.SnId)
player.HeadUrl = niceIdMgr.GetRobHeadUrlIdx()
}
return true
}
func (this *PlayerMgr) SavePlayer(p *Player, isCopy, force bool) {
if p == nil || p.isDelete {
return
}
if p.IsRob {
return
}
if !p.dirty && !force {
return
}
var pd *model.PlayerData
if isCopy {
pd = model.ClonePlayerData(p.PlayerData)
} else {
pd = p.PlayerData
}
if pd == nil {
logger.Logger.Errorf("Player Time2Save() %v pd is nil", p.SnId)
return
}
t1 := time.Now()
p.dirty = true
// 跨天任务依赖LastLogoutTime的准确性跨天任务是定时器common.ClockMgrSington触发的所以这里要用定时器的触发时间
p.LastLogoutTime = common.ClockMgrSingleton.LastTickTime
pd.LastLogoutTime = common.ClockMgrSingleton.LastTickTime
ok := true
t := task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
if !model.SavePlayerData(pd) {
// save 失败先写到json里面
model.BackupPlayerData(pd)
ok = false
}
for _, v := range internal.GetPlayerLoads() {
v.Save(pd.Platform, pd.SnId, true, force)
}
return ok
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
if saved, ok := i.(bool); ok && saved {
p.dirty = false
bak := fmt.Sprintf("%v.json", pd.AccountId)
if exist, _ := common.PathExists(bak); exist {
os.Remove(bak)
}
}
logger.Logger.Infof("Player Time2Save() %v take:%v isSuccess:%v", p.SnId, time.Now().Sub(t1), p.dirty == false)
}), "SavePlayerTask")
if b := t.StartByExecutor(fmt.Sprintf("Player%v", p.SnId)); b {
p.lastSaved = time.Now()
}
}
// DelPlayer 清除玩家缓存数据
// 一般真人是数据持久化后删除或数据没有修改,机器人不用持久化(机器人数据没有主动删除)
// 真人数据持久化后删除,机器人不用持久化(机器人数据没有主动删除)
// needSave 是否需要保存数据; 自动删除玩家机制已经保存过数据,不需要再保存;手动删除玩家需要保存数据
func (this *PlayerMgr) DelPlayer(snid int32) bool {
player, ok := this.snidMap[snid]
if !ok || player == nil {
@ -168,9 +218,6 @@ func (this *PlayerMgr) DelPlayer(snid int32) bool {
}
delete(this.snidMap, player.SnId)
delete(this.accountMap, player.AccountId)
if player.customerToken != "" {
delete(this.tokenMap, player.customerToken)
}
if !player.IsRob {
index := -1
for i, p := range this.players {
@ -187,24 +234,31 @@ func (this *PlayerMgr) DelPlayer(snid int32) bool {
if pp, exist := this.playerOfPlatform[player.Platform]; exist {
delete(pp, player.SnId)
}
niceIdMgr.PushNiceId(player.NiceId)
}
if !player.IsCacheState() {
player.OnLogoutFinish()
internal.FirePlayerLogouted[*Player, *Scene](player)
}
DbSaveInst.UnregisterDbSaveTask(player)
// 再保存一次,防止数据丢失,可能脏标记没有设置
this.SavePlayer(player, true, true)
for _, v := range internal.GetPlayerLoads() {
v.Release(player.Platform, player.SnId)
}
player.OnLogouted()
return true
}
// DroplinePlayer 玩家掉线或登出
// DropPlayer 玩家掉线或登出
// 1.玩家登出
// 2.玩家网络断开
// 3.被踢掉线
func (this *PlayerMgr) DroplinePlayer(p *Player) {
func (this *PlayerMgr) DropPlayer(p *Player) {
p.SetOffline()
p.sid = 0
p.gateSess = nil
delete(this.sidMap, p.sid)
}
@ -219,14 +273,22 @@ func (this *PlayerMgr) ReholdPlayer(p *Player, newSid int64, newSess *netlib.Ses
logger.Logger.Errorf("(this *PlayerMgr) ReholdPlayer(snid=%v, new=%v)", p.SnId, newSid)
}
p.SetOnline()
p.sid = newSid
p.gateSess = newSess
p.SetOnline()
this.sidMap[newSid] = p
}
// GetPlayer 获取玩家数据(玩家在线)
func (this *PlayerMgr) GetPlayer(id int64) *Player {
func (this *PlayerMgr) KickByPlatform(name string) {
for _, p := range this.players {
if name == "" || p.Platform == name {
p.Kick(common.KickReason_Disconnection)
}
}
}
// GetOnlinePlayer 获取玩家数据(玩家在线)
func (this *PlayerMgr) GetOnlinePlayer(id int64) *Player {
if pi, ok := this.sidMap[id]; ok {
return pi
}
@ -267,28 +329,6 @@ func (this *PlayerMgr) GetPlayerByAccount(acc string) *Player {
return nil
}
func (this *PlayerMgr) GetPlayerByToken(token string) *Player {
if p, ok := this.tokenMap[token]; ok {
return p
}
return nil
}
func (this *PlayerMgr) UpdatePlayerToken(p *Player, newToken string) {
oldToken := p.customerToken
if oldToken != newToken {
if oldToken != "" {
if _, ok := this.tokenMap[oldToken]; ok {
delete(this.tokenMap, oldToken)
}
}
if newToken != "" {
this.tokenMap[newToken] = p
p.customerToken = newToken
}
}
}
// BroadcastMessage 给所有玩家发消息
func (this *PlayerMgr) BroadcastMessage(packetid int, rawpack interface{}) bool {
sc := &srvproto.BCSessionUnion{}
@ -320,6 +360,7 @@ func (this *PlayerMgr) BroadcastMessageToPlatform(platform string, packetid int,
}
}
// BroadcastDataConfigToPlatform 广播配置数据更新
func (this *PlayerMgr) BroadcastDataConfigToPlatform(platform string, tp int) {
packetId := int(playerproto.PlayerPacketID_PACKET_SCDataConfig)
pack := &playerproto.SCDataConfig{}
@ -358,7 +399,8 @@ func (this *PlayerMgr) BroadcastMessageToPlatformByFunc(platform string, packeti
}
}
// BroadcastMessageToPlatformWithHall 给某个平台所有在大厅中的玩家发消息
// BroadcastMessageToPlatformWithHall 发送大厅消息,不包括在游戏中的玩家
// 如果是好友,支持消息屏蔽
func (this *PlayerMgr) BroadcastMessageToPlatformWithHall(platform string, snid int32, packetid int, rawpack interface{}) {
if platform == "" {
this.BroadcastMessage(packetid, rawpack)
@ -409,9 +451,9 @@ func (this *PlayerMgr) BroadcastMessageToGroup(packetid int, rawpack interface{}
}
// BroadcastMessageToTarget 给某些玩家发消息
func (this *PlayerMgr) BroadcastMessageToTarget(target []int32, packetid int, rawpack interface{}) {
func (this *PlayerMgr) BroadcastMessageToTarget(snIds []int32, packetid int, rawpack interface{}) {
mgs := make(map[*netlib.Session][]*srvproto.MCSessionUnion)
for _, v := range target {
for _, v := range snIds {
d := this.snidMap[v]
if d != nil && d.gateSess != nil && d.IsOnLine() {
mgs[d.gateSess] = append(mgs[d.gateSess], &srvproto.MCSessionUnion{
@ -429,146 +471,29 @@ func (this *PlayerMgr) BroadcastMessageToTarget(target []int32, packetid int, ra
}
}
// 感兴趣所有clock event
func (this *PlayerMgr) InterestClockEvent() int {
return (1 << common.ClockEventMax) - 1
}
func (this *PlayerMgr) OnSecTimer() {
for _, player := range this.players {
utils.CatchPanic(func() {
player.OnSecTimer()
})
}
}
func (this *PlayerMgr) OnMiniTimer() {
for _, player := range this.players {
utils.CatchPanic(func() {
player.OnMiniTimer()
})
}
}
func (this *PlayerMgr) OnHourTimer() {
for _, player := range this.players {
utils.CatchPanic(func() {
player.OnHourTimer()
})
}
}
func (this *PlayerMgr) OnDayTimer() {
for _, player := range this.players {
utils.CatchPanic(func() {
player.OnDayTimer(false, true, 1)
})
}
}
func (this *PlayerMgr) OnMonthTimer() {
for _, player := range this.players {
utils.CatchPanic(func() {
player.OnMonthTimer()
})
}
}
func (this *PlayerMgr) OnWeekTimer() {
for _, player := range this.players {
utils.CatchPanic(func() {
player.OnWeekTimer()
})
}
}
func (this *PlayerMgr) OnShutdown() {
this.SaveAll()
}
// SaveAll 保存所有数据dirty=true
func (this *PlayerMgr) SaveAll() {
count := len(this.players)
start := time.Now()
saveCnt := 0
failCnt := 0
nochangeCnt := 0
logger.Logger.Info("===@PlayerMgr.SaveAll BEG@=== TotalCount:", count)
logger.Logger.Info("===@SaveAllPlayerBEGIN@=== TotalCount:", count)
for i, p := range this.players {
idx := i + 1
if p.dirty {
if model.SavePlayerData(p.PlayerData) {
logger.Logger.Infof("===@SavePlayerData %v/%v snid:%v coin:%v safebox:%v coinpayts:%v safeboxts:%v gamets:%v save [ok] @=", idx, count, p.SnId, p.Coin, p.SafeBoxCoin, p.CoinPayTs, p.SafeBoxCoinTs, p.GameCoinTs)
saveCnt++
} else {
logger.Logger.Warnf("===@SavePlayerData %v/%v snid:%v coin:%v safebox:%v coinpayts:%v safeboxts:%v gamets:%v save [error]@=", idx, count, p.SnId, p.Coin, p.SafeBoxCoin, p.CoinPayTs, p.SafeBoxCoinTs, p.GameCoinTs)
failCnt++
if model.SavePlayerData(p.PlayerData) {
logger.Logger.Infof("===@SavePlayerData %v/%v snid:%v coin:%v safebox:%v coinpayts:%v safeboxts:%v gamets:%v save [ok] @=",
idx, count, p.SnId, p.Coin, p.SafeBoxCoin, p.CoinPayTs, p.SafeBoxCoinTs, p.GameCoinTs)
for _, v := range internal.GetPlayerLoads() {
v.Save(p.Platform, p.SnId, true, true)
}
saveCnt++
} else {
logger.Logger.Infof("nochange===@SavePlayerData %v/%v snid:%v coin:%v safebox:%v coinpayts:%v safeboxts:%v gamets:%v nochange [ok]@=", idx, count, p.SnId, p.Coin, p.SafeBoxCoin, p.CoinPayTs, p.SafeBoxCoinTs, p.GameCoinTs)
nochangeCnt++
}
for _, v := range internal.GetPlayerLoads() {
v.Save(p.Platform, p.SnId, true, true)
}
}
logger.Logger.Infof("===@PlayerMgr.SaveAll END@===, total:%v saveCnt:%v failCnt:%v nochangeCnt:%v take:%v", count, saveCnt, failCnt, nochangeCnt, time.Now().Sub(start))
}
// 黑名单事件
//func (this *PlayerMgr) OnAddBlackInfo(blackinfo *BlackInfo) {
// if blackinfo.Snid > 0 {
// if p := this.GetPlayerBySnId(blackinfo.Snid); p != nil {
// p.PlayerData.BlacklistType = int32(blackinfo.BlackType)
// p.dirty = true
// p.Time2Save()
// } else {
// task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// model.UpdatePlayerBlacklistType(blackinfo.Platform, blackinfo.Snid, int32(blackinfo.BlackType))
// return nil
// }), nil, "PlayerMgrOnAddBlackInfo").Start()
// }
// }
//}
//func (this *PlayerMgr) OnEditBlackInfo(blackinfo *BlackInfo) {
// //nothing
// //if blackinfo.Snid > 0 {
// // if p := this.GetPlayerBySnId(blackinfo.Snid); p != nil {
// // p.PlayerData.BlacklistType = int32(blackinfo.BlackType)
// // p.dirty = true
// // p.Time2Save()
// // } else {
// // task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// // model.UpdatePlayerBlacklistType(blackinfo.Platform, blackinfo.Snid, int32(blackinfo.BlackType))
// // return nil
// // }), nil, "PlayerMgrOnEditBlackInfo").Start()
// // }
// //}
//}
//func (this *PlayerMgr) OnRemoveBlackInfo(blackinfo *BlackInfo) {
// //nothing
// //if blackinfo.Snid > 0 {
// // if p := this.GetPlayerBySnId(blackinfo.Snid); p != nil {
// // p.PlayerData.BlacklistType = 0
// // p.dirty = true
// // p.Time2Save()
// // } else {
// // task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
// // model.UpdatePlayerBlacklistType(blackinfo.Platform, blackinfo.Snid, int32(0))
// // return nil
// // }), nil, "PlayerMgrOnRemoveBlackInfo").Start()
// // }
// //}
//}
func (this *PlayerMgr) KickoutByPlatform(name string) {
for _, p := range this.players {
if name == "" || p.Platform == name {
p.Kickout(common.KickReason_Disconnection)
logger.Logger.Warnf("===@SavePlayerData %v/%v snid:%v coin:%v safebox:%v coinpayts:%v safeboxts:%v gamets:%v save [error]@=",
idx, count, p.SnId, p.Coin, p.SafeBoxCoin, p.CoinPayTs, p.SafeBoxCoinTs, p.GameCoinTs)
failCnt++
}
}
logger.Logger.Infof("===@SaveAllPlayerEND@===, total:%v saveCnt:%v failCnt:%v take:%v", count, saveCnt, failCnt, time.Now().Sub(start))
}
// LoadRobots 预加载机器人数据
@ -589,9 +514,6 @@ func (this *PlayerMgr) LoadRobots() {
if player != nil {
this.snidMap[player.SnId] = player
this.accountMap[player.AccountId] = player
if player.customerToken != "" {
this.tokenMap[player.customerToken] = player
}
}
}
}
@ -716,18 +638,6 @@ func (p *PlayerMgr) UpdateHeadUrl(snId int32, url string) {
}
}
//func (p *PlayerMgr) ModifyActSwitchToPlayer(platform string, modify bool) {
// if modify { //活动开关修改了才去更新活动开关
// if players, ok := p.playerOfPlatform[platform]; ok {
// for _, p := range players {
// if p != nil && !p.IsRob {
// p.ModifyActSwitch()
// }
// }
// }
// }
//}
/*
推荐好友规则
1.优先判断在线玩家人数N
@ -820,7 +730,6 @@ func (this *PlayerMgr) RecommendFriendRule(platform string, snid int32) []Recomm
}
func init() {
//BlackListMgrSington.RegisterObserver(PlayerMgrSington)
PlayerSubjectSign.AttachName(PlayerMgrSington)
PlayerSubjectSign.AttachHead(PlayerMgrSington)
PlayerSubjectSign.AttachHeadOutline(PlayerMgrSington)
@ -830,5 +739,51 @@ func init() {
PlayerSubjectSign.AttachHead(FriendMgrSington)
// 定时器
common.ClockMgrSingleton.RegisterSinker(PlayerMgrSington)
common.RegisterClockFunc(&common.ClockFunc{
OnSecTimerFunc: func() {
for _, player := range PlayerMgrSington.players {
utils.CatchPanic(func() {
player.OnSecTimer()
})
}
},
OnMiniTimerFunc: func() {
for _, player := range PlayerMgrSington.players {
utils.CatchPanic(func() {
player.OnMiniTimer()
})
}
},
OnHourTimerFunc: func() {
for _, player := range PlayerMgrSington.players {
utils.CatchPanic(func() {
player.OnHourTimer()
})
}
},
OnDayTimerFunc: func() {
for _, player := range PlayerMgrSington.players {
utils.CatchPanic(func() {
player.OnDayTimer(false, true, 1)
})
}
},
OnWeekTimerFunc: func() {
for _, player := range PlayerMgrSington.players {
utils.CatchPanic(func() {
player.OnWeekTimer()
})
}
},
OnMonthTimerFunc: func() {
for _, player := range PlayerMgrSington.players {
utils.CatchPanic(func() {
player.OnMonthTimer()
})
}
},
OnShutdownFunc: func() {
PlayerMgrSington.SaveAll()
},
})
}

View File

@ -90,7 +90,7 @@ func (p *PlayerNotify) SendToClient(tp common.NotifyType, platform string, packe
//}
roomConfigId := d.GetDatas()[0].GetRoomConfigId()
cfg := PlatformMgrSingleton.GetConfig(platform).RoomConfig[roomConfigId]
if cfg == nil {
if cfg == nil || cfg.GetOn() != common.On {
return
}

View File

@ -14,6 +14,14 @@ const (
PROMOTER_TYPE_PROMOTE = 3 //推广员
)
type ErrorString struct {
code string
}
func (e *ErrorString) Error() string {
return e.code
}
var PromoterMgrSington = &PromoterMgr{
PromoterConfigMap: make(map[string]*PromoterConfig),
LastTicket: 0,

View File

@ -89,7 +89,7 @@ func (t *TaskLogin) Call(o *basic.Object) interface{} {
Plt: acc.Platform,
AccId: acc.AccountId.Hex(),
NickName: "",
HeadUrl: niceIdMgr.GetRobHeadUrlIdx(),
HeadUrl: GetRobHeadUrlIdx(),
})
if playerData == nil || !tf {
return nil

View File

@ -6,7 +6,6 @@ import (
"errors"
"fmt"
"io"
"mongo.games.com/game/protocol/shop"
"reflect"
"slices"
"sort"
@ -30,6 +29,7 @@ import (
loginproto "mongo.games.com/game/protocol/login"
playerproto "mongo.games.com/game/protocol/player"
"mongo.games.com/game/protocol/server"
"mongo.games.com/game/protocol/shop"
webapiproto "mongo.games.com/game/protocol/webapi"
"mongo.games.com/game/srvdata"
"mongo.games.com/game/webapi"
@ -1036,7 +1036,7 @@ func init() {
task.New(nil, task.CallableWrapper(func(o *basic.Object) interface{} {
return model.FreezeAccount(msg.Platform, player.AccountId, int(msg.Minute))
}), nil, "FreezeAccount").Start()
player.Kickout(common.KickReason_Freeze)
player.Kick(common.KickReason_Freeze)
pack.Tag = webapiproto.TagCode_SUCCESS
pack.Msg = "success"
} else {
@ -1714,7 +1714,7 @@ func init() {
//在线需要踢掉玩家
if uint(msg.BlacklistType)&BlackState_Login != 0 {
logger.Logger.Infof("found platform:%v player:%d snid in blacklist", msg.Platform, player.SnId)
player.Kickout(int32(loginproto.SSDisconnectTypeCode_SSDTC_BlackList))
player.Kick(int32(loginproto.SSDisconnectTypeCode_SSDTC_BlackList))
}
return common.ResponseTag_Ok, pack
} else {
@ -2427,7 +2427,7 @@ func init() {
}
}
p.Kickout(common.KickReason_Freeze)
p.Kick(common.KickReason_Freeze)
PlayerMgrSington.DelPlayer(p.SnId)
LoginStateMgrSington.DelAccountByAccid(p.AccountId)
}