Merge branch 'develop' into sdk
This commit is contained in:
commit
11da2fa04b
2
.gitignore
vendored
2
.gitignore
vendored
@ -15,3 +15,5 @@ src/server/teLog/log.2024-11-28
|
||||
src/server/logs/ga_log/*.log
|
||||
src/server/goroutine.prof
|
||||
src/server/heap_after.pb.gz
|
||||
src/server/test/logs/*
|
||||
src/server/test/teLog/*
|
||||
|
||||
@ -9,6 +9,18 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
func IntSlice(d interface{}) []int {
|
||||
if d == nil {
|
||||
return []int{}
|
||||
}
|
||||
|
||||
// Type assertion with safety check
|
||||
result, ok := d.([]int)
|
||||
if !ok {
|
||||
return []int{}
|
||||
}
|
||||
return result
|
||||
}
|
||||
func IntToInt32(d []int) []int32 {
|
||||
r := make([]int32, 0, len(d))
|
||||
for _, d := range d {
|
||||
|
||||
@ -50,6 +50,44 @@ func BenchmarkGame(b *testing.B) {
|
||||
printMemUsage()
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkLog(b *testing.B) {
|
||||
runtime.GOMAXPROCS(2)
|
||||
t := game.G_getGameLogic()
|
||||
for i := 0; i < 10000; i++ {
|
||||
t.AddLog(&game.Log{
|
||||
EventName: "test_log",
|
||||
Param: map[string]interface{}{
|
||||
"test_key": "test_value",
|
||||
},
|
||||
})
|
||||
}
|
||||
t.MLogManager.Close()
|
||||
}
|
||||
|
||||
func BenchmarkLog2(b *testing.B) {
|
||||
// 准备耗时但不需要计入基准的初始化
|
||||
runtime.GOMAXPROCS(2)
|
||||
// 假设有个函数 NewGameLogicForBenchmark() 创建全新、独立的对象
|
||||
b.ReportAllocs()
|
||||
for i := 0; i < b.N; i++ {
|
||||
// 每次迭代创建独立对象,避免副作用
|
||||
t := game.G_getGameLogic()
|
||||
b.StartTimer()
|
||||
// 被测操作:向日志管理器添加 1000 条日志
|
||||
for j := 0; j < 1000; j++ {
|
||||
t.AddLog(&game.Log{
|
||||
EventName: "test_log",
|
||||
Param: map[string]interface{}{
|
||||
"test_key": "test_value",
|
||||
},
|
||||
})
|
||||
}
|
||||
b.StopTimer()
|
||||
t.MLogManager.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func printMemUsage() {
|
||||
var m runtime.MemStats
|
||||
runtime.ReadMemStats(&m)
|
||||
|
||||
@ -34,10 +34,26 @@ func GetGameNum(Id int) int {
|
||||
return gamedata.GetIntValue(data, "PassNum")
|
||||
}
|
||||
|
||||
func GetJackpotItem(Mul int) (int, []*item.Item, int) {
|
||||
func GetGameMaxProgress(Id int) int {
|
||||
TemplateId := GetTemplateId(Id)
|
||||
data, err := gamedata.GetData(CATNIP_GAME_CFG_NAME)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
MaxProgress := 0
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Template") != TemplateId {
|
||||
continue
|
||||
}
|
||||
MaxProgress = max(MaxProgress, gamedata.GetIntValue(v, "Need"))
|
||||
}
|
||||
return MaxProgress
|
||||
}
|
||||
|
||||
func GetJackpotItem(Mul int) (int, []*item.Item, int, int) {
|
||||
data, err := gamedata.GetData(CATNIP_JACKPOT_CFG_NAME)
|
||||
if err != nil {
|
||||
return 0, nil, 0
|
||||
return 0, nil, 0, 0
|
||||
}
|
||||
JackpotType := GetJackpotType(Mul)
|
||||
r := make(map[int]int)
|
||||
@ -48,13 +64,13 @@ func GetJackpotItem(Mul int) (int, []*item.Item, int) {
|
||||
}
|
||||
Id := GoUtil.RandMap(r)
|
||||
if Id == 0 {
|
||||
return 0, nil, 0
|
||||
return 0, nil, 0, 0
|
||||
}
|
||||
itemData, err := gamedata.GetDataByIntKey(CATNIP_JACKPOT_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
return 0, nil, 0
|
||||
return 0, nil, 0, 0
|
||||
}
|
||||
return Id, gamedata.GetItemList(itemData, "Items"), gamedata.GetIntValue(itemData, "Growth")
|
||||
return Id, gamedata.GetItemList(itemData, "Items"), gamedata.GetIntValue(itemData, "Growth"), gamedata.GetIntValue(itemData, "FriendItems")
|
||||
}
|
||||
|
||||
func GetJackpotType(Mul int) int {
|
||||
@ -78,19 +94,22 @@ func GetTemplateId(Id int) int {
|
||||
return gamedata.GetIntValue(data, "Template")
|
||||
}
|
||||
|
||||
func GetProgressReward(Id int, Progress int) []*item.Item {
|
||||
func GetProgressReward(Id int, Rewards []int, Progress int) ([]*item.Item, []int) {
|
||||
TemplateId := GetTemplateId(Id)
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_GAME_CFG_NAME, Id)
|
||||
data, err := gamedata.GetData(CATNIP_GAME_CFG_NAME)
|
||||
if err != nil {
|
||||
return nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Need") == Progress && gamedata.GetIntValue(v, "Template") == TemplateId {
|
||||
return gamedata.GetItemList(v, "Items")
|
||||
Items := []*item.Item{}
|
||||
Ids := []int{}
|
||||
for k, v := range data {
|
||||
Id := GoUtil.Int(k)
|
||||
if !GoUtil.InArray(Id, Rewards) && gamedata.GetIntValue(v, "Need") < Progress && gamedata.GetIntValue(v, "Template") == TemplateId {
|
||||
Items = append(Items, gamedata.GetItemList(v, "Items")...)
|
||||
Ids = append(Ids, GoUtil.Int(k))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return Items, Ids
|
||||
}
|
||||
|
||||
func GetItemCost(Id, Mul int) []*item.Item {
|
||||
|
||||
@ -109,6 +109,15 @@ func GetDecoarteReward(Scene int, Lv int) []*item.Item {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetAreaReward(AreaId int) []*item.Item {
|
||||
value, err := gamedata.GetDataByIntKey(DECORATE_AREA, AreaId)
|
||||
if err != nil {
|
||||
log.Debug("IndoorProgress GetDecoarteReward not found")
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(value, "Items")
|
||||
}
|
||||
|
||||
// 获取一键装饰的解锁等级
|
||||
func GetOneKeyDecorateUnlockLv() int {
|
||||
data, err := gamedata.GetDataByKey(DECORATE_CONST, "OneKey")
|
||||
|
||||
@ -64,7 +64,7 @@ var Server struct {
|
||||
func init() {
|
||||
filePath := "conf/server.json"
|
||||
if len(os.Args) == 2 {
|
||||
if os.Args[1] != "" {
|
||||
if os.Args[1] != "" && os.Args[1][0] != '-' {
|
||||
filePath = os.Args[1]
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,11 +11,9 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
CFG_NAME = "MergeData"
|
||||
CONST_NAME = "MergeDataConst"
|
||||
CFG_MERGE_EMIT = "MergeDataEmit"
|
||||
CFG_MERGE_EMIT_TYPE = "MergeDataEmitType"
|
||||
CFG_MERGE_COLOR = "MergeDataColor"
|
||||
CFG_NAME = "MergeData"
|
||||
CONST_NAME = "MergeDataConst"
|
||||
CFG_MERGE_EMIT = "MergeDataEmit"
|
||||
|
||||
// 棋子类型
|
||||
CHESS_PRODUCT_MAIN_TYPE = 1 // 主产物
|
||||
@ -27,17 +25,6 @@ func init() {
|
||||
gamedata.InitCfg(CFG_NAME)
|
||||
gamedata.InitCfg(CONST_NAME)
|
||||
gamedata.InitCfg(CFG_MERGE_EMIT)
|
||||
gamedata.InitCfg(CFG_MERGE_EMIT_TYPE)
|
||||
gamedata.InitCfg(CFG_MERGE_COLOR)
|
||||
}
|
||||
|
||||
func GetEmitTypeProduce(EmitType string) []string {
|
||||
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType)
|
||||
if err != nil {
|
||||
// log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
|
||||
return []string{}
|
||||
}
|
||||
return strings.Split(gamedata.GetStringValue(data, "Produce"), ",")
|
||||
}
|
||||
|
||||
func GetEmitTypeByColor(Color string) string {
|
||||
@ -91,6 +78,7 @@ func GetOne(Id int) (*gamedata.MergeDataRecord, error) {
|
||||
Type: gamedata.ParseString(data["Type"]),
|
||||
Emit_Product: gamedata.ParseString(data["Emit_Product"]),
|
||||
CoolTime: gamedata.ParseInt(data["CoolTime"]),
|
||||
Emit_Type: gamedata.ParseString(data["Emit_Type"]),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -428,7 +416,7 @@ func DynamicLevRev(Lv int, EmitId int, Color string) int {
|
||||
func DynamicLev(Lv int, EmitId int, Color string) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||
if err != nil {
|
||||
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
//log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
return Lv
|
||||
}
|
||||
DynamicLv := gamedata.GetStringValue(data, "Dynamic")
|
||||
@ -451,7 +439,7 @@ func DynamicLev(Lv int, EmitId int, Color string) int {
|
||||
func DynamicLev2(Lv int, EmitId int, Color1 string, Color2 string) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||
if err != nil {
|
||||
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
//log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
return Lv
|
||||
}
|
||||
DynamicLv := gamedata.GetStringValue(data, "Dynamic")
|
||||
@ -486,7 +474,7 @@ func DynamicLev2(Lv int, EmitId int, Color1 string, Color2 string) int {
|
||||
func DynamicAdjust(EmitId int, Color string, EnergyMul int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||
if err != nil {
|
||||
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
//log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
return 0
|
||||
}
|
||||
DynamicLv := ""
|
||||
@ -521,7 +509,7 @@ func DynamicAdjust(EmitId int, Color string, EnergyMul int) int {
|
||||
func GetAdjust(EmitId int, Color string, EnergyMul int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||
if err != nil {
|
||||
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
//log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
return 0
|
||||
}
|
||||
AdjustLv := ""
|
||||
@ -591,24 +579,6 @@ func getColorProb(Emit_List string, Color string) float64 {
|
||||
return Prob
|
||||
}
|
||||
|
||||
func GetColorType(Color string) int {
|
||||
data, err := gamedata.GetDataByKey(CFG_MERGE_COLOR, Color)
|
||||
if err != nil {
|
||||
log.Debug("GetColorType GetOne Color:%s not found", Color)
|
||||
return 0
|
||||
}
|
||||
Type := gamedata.GetStringValue(data, "Type")
|
||||
switch Type {
|
||||
case "main":
|
||||
return CHESS_PRODUCT_MAIN_TYPE
|
||||
case "secondary":
|
||||
return CHESS_PRODUCT_SECONDARY_TYPE
|
||||
case "sub":
|
||||
return CHESS_PRODUCT_SUB_TYPE
|
||||
}
|
||||
return CHESS_PRODUCT_MAIN_TYPE
|
||||
}
|
||||
|
||||
func GetMergeStar(MergeList []int) int {
|
||||
Star := 0
|
||||
for _, v := range MergeList {
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"server/GoUtil"
|
||||
activityCfg "server/conf/activity"
|
||||
catnipCfg "server/conf/catnip"
|
||||
@ -17,10 +18,10 @@ import (
|
||||
)
|
||||
|
||||
// 活动模块 登录
|
||||
func ActivityLogin(p *Player) {
|
||||
func (p *Player) ActivityLogin() {
|
||||
ItemMod := p.PlayMod.getItemMod()
|
||||
// 挖矿
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_MINING)
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_MINING)
|
||||
MiningMod := p.PlayMod.getMiningMod()
|
||||
OldId := MiningMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
@ -28,11 +29,11 @@ func ActivityLogin(p *Player) {
|
||||
ItemNum := ItemMod.GetItem(ItemId)
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
SendActivityMail(p, ItemId, ItemNum, ActivityId, nil)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, nil)
|
||||
}
|
||||
}
|
||||
// 猜颜色
|
||||
ActivityId = GetActivityId(p, activity.ACT_TYPE_GUESS_COLOR)
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_GUESS_COLOR)
|
||||
GuessColorMod := p.PlayMod.getGuessColorMod()
|
||||
OldId = GuessColorMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
@ -40,12 +41,12 @@ func ActivityLogin(p *Player) {
|
||||
ItemNum := ItemMod.GetItem(ItemId)
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
SendActivityMail(p, ItemId, ItemNum, ActivityId, nil)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, nil)
|
||||
}
|
||||
}
|
||||
|
||||
// 赛跑
|
||||
ActivityId = GetActivityId(p, activity.ACT_TYPE_RACE)
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_RACE)
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
OldId = RaceMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
@ -53,11 +54,11 @@ func ActivityLogin(p *Player) {
|
||||
ItemNum := ItemMod.GetItem(ItemId)
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
SendActivityMail(p, ItemId, ItemNum, ActivityId, nil)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, nil)
|
||||
}
|
||||
}
|
||||
// 猫草大作战
|
||||
ActivityId = GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
OldId = CatnipMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
@ -65,7 +66,7 @@ func ActivityLogin(p *Player) {
|
||||
}
|
||||
|
||||
// 通行证
|
||||
ActivityId = GetActivityId(p, activity.ACT_TYPE_PASS)
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_PASS)
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
OldId = PassMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
@ -74,12 +75,13 @@ func ActivityLogin(p *Player) {
|
||||
RewardItems, _ := PassMod.GetRewardItems()
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
SendActivityMail(p, ItemId, ItemNum, ActivityId, RewardItems)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, RewardItems)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func SendActivityMail(p *Player, ItemId, ItemNum, ActivityId int, RewardItems []*item.Item) {
|
||||
// 发送活动邮件
|
||||
func (p *Player) SendActivityMail(ItemId, ItemNum, ActivityId int, RewardItems []*item.Item) {
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
ItemName, ItemNameEn := itemCfg.GetItemName(ItemId)
|
||||
ActivityTitle, ActivityTitleEn := activityCfg.GetActivityTitle(ActivityId)
|
||||
@ -90,36 +92,37 @@ func SendActivityMail(p *Player, ItemId, ItemNum, ActivityId int, RewardItems []
|
||||
}
|
||||
|
||||
// 活动模块 零点更新
|
||||
func ActivityZeroUpdate(p *Player) {
|
||||
ActivityLogin(p)
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_MINING)
|
||||
func (p *Player) ActivityZeroUpdate() {
|
||||
p.ActivityLogin()
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING)
|
||||
if ActivityInfo != nil {
|
||||
MiningMod := p.PlayMod.getMiningMod()
|
||||
MiningMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_GUESS_COLOR)
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_GUESS_COLOR)
|
||||
if ActivityInfo != nil {
|
||||
GuessColorMod := p.PlayMod.getGuessColorMod()
|
||||
GuessColorMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_RACE)
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_RACE)
|
||||
if ActivityInfo != nil {
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
RaceMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_PASS)
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo != nil {
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
PassMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
ActivityInfo = GetActivityInfo(p, activity.ACT_TYPE_CATNIP)
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityInfo != nil {
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
}
|
||||
|
||||
func GetActivityInfo(p *Player, actType int) *ActivityInfo {
|
||||
// 获取活动信息
|
||||
func (p *Player) GetActivityInfo(actType int) *ActivityInfo {
|
||||
for _, v := range p.activity {
|
||||
if v.Type == actType {
|
||||
return v
|
||||
@ -128,7 +131,8 @@ func GetActivityInfo(p *Player, actType int) *ActivityInfo {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetActivityId(p *Player, actType int) int {
|
||||
// 获取活动ID
|
||||
func (p *Player) GetActivityId(actType int) int {
|
||||
for _, v := range p.activity {
|
||||
if v.Type == actType {
|
||||
return v.Id
|
||||
@ -137,7 +141,8 @@ func GetActivityId(p *Player, actType int) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetActivityInfoById(p *Player, Id int) *ActivityInfo {
|
||||
// 根据活动ID获取活动信息
|
||||
func (p *Player) GetActivityInfoById(Id int) *ActivityInfo {
|
||||
for _, v := range p.activity {
|
||||
if v.Id == Id {
|
||||
return v
|
||||
@ -146,8 +151,9 @@ func GetActivityInfoById(p *Player, Id int) *ActivityInfo {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetActivityStatus(p *Player, actType int) int {
|
||||
ActivityInfo := GetActivityInfo(p, actType)
|
||||
// 获取活动状态
|
||||
func (p *Player) GetActivityStatus(actType int) int {
|
||||
ActivityInfo := p.GetActivityInfo(actType)
|
||||
if ActivityInfo == nil {
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
@ -161,12 +167,13 @@ func GetActivityStatus(p *Player, actType int) int {
|
||||
return ACT_STATUS_START
|
||||
}
|
||||
|
||||
func MiningBackData(p *Player) {
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_MINING)
|
||||
// 挖矿活动数据返回
|
||||
func (p *Player) MiningBackData() {
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
Status := GetActivityStatus(p, activity.ACT_TYPE_MINING)
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_MINING)
|
||||
Template := miningCfg.GetTemplate(ActivityInfo.Id)
|
||||
MiningMod := p.PlayMod.getMiningMod()
|
||||
p.PushClientRes(&msg.ResMining{
|
||||
@ -181,13 +188,14 @@ func MiningBackData(p *Player) {
|
||||
})
|
||||
}
|
||||
|
||||
func GuessColorBackData(p *Player) {
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_GUESS_COLOR)
|
||||
// 猜颜色活动数据返回
|
||||
func (p *Player) GuessColorBackData() {
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_GUESS_COLOR)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
|
||||
Status := GetActivityStatus(p, activity.ACT_TYPE_GUESS_COLOR)
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR)
|
||||
GuessColorMod := p.PlayMod.getGuessColorMod()
|
||||
MapList := make([]*msg.GuessColorInfo, 0)
|
||||
for _, v := range GuessColorMod.MapList {
|
||||
@ -212,12 +220,13 @@ func GuessColorBackData(p *Player) {
|
||||
})
|
||||
}
|
||||
|
||||
func RaceBackData(p *Player) {
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_RACE)
|
||||
// 赛跑活动数据返回
|
||||
func (p *Player) RaceBackData() {
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_RACE)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
Status := GetActivityStatus(p, activity.ACT_TYPE_RACE)
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_RACE)
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
Opponent := make([]*msg.Raceopponent, 0)
|
||||
for _, v := range RaceMod.Opponent {
|
||||
@ -242,7 +251,8 @@ func RaceBackData(p *Player) {
|
||||
})
|
||||
}
|
||||
|
||||
func RedBackData(p *Player) {
|
||||
// 红点数据返回
|
||||
func (p *Player) RedBackData() {
|
||||
result := make(map[int32]int32)
|
||||
Now := GoUtil.Now()
|
||||
for _, v := range p.activity {
|
||||
@ -253,12 +263,13 @@ func RedBackData(p *Player) {
|
||||
p.PushClientRes(&msg.ResActRed{Red: result})
|
||||
}
|
||||
|
||||
func ActPassBackData(p *Player) {
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
|
||||
// 通行证活动数据返回
|
||||
func (p *Player) ActPassBackData() {
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
Status := GetActivityStatus(p, activity.ACT_TYPE_PASS)
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_PASS)
|
||||
Template := passCfg.GetTemplate(ActivityInfo.Id)
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
p.PushClientRes(&msg.ResActPass{
|
||||
@ -273,11 +284,12 @@ func ActPassBackData(p *Player) {
|
||||
})
|
||||
}
|
||||
|
||||
func GetActivityItem(p *Player, ActType []int) []*item.Item {
|
||||
// 获取活动道具
|
||||
func (p *Player) GetActivityItem(ActType []int) []*item.Item {
|
||||
Items := make([]*item.Item, 0)
|
||||
for _, v := range ActType {
|
||||
Status := GetActivityStatus(p, v)
|
||||
ActivityInfo := GetActivityInfo(p, v)
|
||||
Status := p.GetActivityStatus(v)
|
||||
ActivityInfo := p.GetActivityInfo(v)
|
||||
if ActivityInfo == nil {
|
||||
continue
|
||||
}
|
||||
@ -304,24 +316,27 @@ func GetActivityItem(p *Player, ActType []int) []*item.Item {
|
||||
return Items
|
||||
}
|
||||
|
||||
// 猫草大作战活动数据返回
|
||||
func (p *Player) CatnipBackData() {
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
Status := GetActivityStatus(p, activity.ACT_TYPE_CATNIP)
|
||||
Status := p.GetActivityStatus(activity.ACT_TYPE_CATNIP)
|
||||
if CatnipMod == nil {
|
||||
return
|
||||
}
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
GameList := make([]*msg.CatnipGame, 0)
|
||||
for _, v := range CatnipMod.Game {
|
||||
GameInfo := &msg.CatnipGame{
|
||||
Id: int32(v.Id),
|
||||
Progress: int32(v.Progress),
|
||||
Status: int32(v.Status),
|
||||
Reward: GoUtil.SliceIntToInt32(v.Reward),
|
||||
Emoji: int32(v.EmojiId),
|
||||
Id: int32(v.Id),
|
||||
Progress: int32(v.Progress),
|
||||
Status: int32(v.Status),
|
||||
Reward: GoUtil.SliceIntToInt32(v.Reward),
|
||||
Emoji: int32(v.EmojiId),
|
||||
FriendProgress: int32(v.PartnerAdd),
|
||||
}
|
||||
if v.Partner != 0 {
|
||||
PlayerData := G_getGameLogic().GetResSimplePlayerByUid(v.Partner)
|
||||
@ -329,38 +344,67 @@ func (p *Player) CatnipBackData() {
|
||||
GameInfo.Partner = PlayerData
|
||||
}
|
||||
}
|
||||
InviteList := make([]*msg.CatnipInvite, 0)
|
||||
for _, iv := range v.InviteList {
|
||||
InviteList = append(InviteList, &msg.CatnipInvite{
|
||||
Uid: int64(iv.InviteId),
|
||||
Time: int64(iv.Time),
|
||||
})
|
||||
}
|
||||
GameInfo.InviteList = InviteList
|
||||
BeInvitedList := make([]*msg.CatnipInvite, 0)
|
||||
for _, iv := range v.BeInvitedList {
|
||||
BeInvitedList = append(BeInvitedList, &msg.CatnipInvite{
|
||||
Uid: int64(iv.InviteId),
|
||||
Time: int64(iv.Time),
|
||||
})
|
||||
}
|
||||
GameInfo.BeInviteList = BeInvitedList
|
||||
|
||||
GameList = append(GameList, GameInfo)
|
||||
}
|
||||
tmpData := make(map[int]*msg.CatnipInvite)
|
||||
InviteList := make([]*msg.CatnipInvite, 0)
|
||||
for Uid, Info := range CatnipMod.InviteList {
|
||||
tmpData[Uid] = &msg.CatnipInvite{
|
||||
Uid: int64(Uid),
|
||||
Time: Info.Time,
|
||||
Type: 1,
|
||||
}
|
||||
}
|
||||
for Uid, Info := range CatnipMod.BeInvitedList {
|
||||
tmpData[Uid] = &msg.CatnipInvite{
|
||||
Uid: int64(Uid),
|
||||
Time: Info.Time,
|
||||
Type: 2,
|
||||
}
|
||||
}
|
||||
|
||||
for Uid := range FriendMod.NewFriendList {
|
||||
key := fmt.Sprintf("catnip_partner_%d", Uid)
|
||||
Var := G_GameLogicPtr.VarMgr.GetExpireVar(key)
|
||||
if len(GoUtil.IntSlice(Var.D)) >= 4 {
|
||||
tmpData[Uid] = &msg.CatnipInvite{
|
||||
Uid: int64(Uid),
|
||||
Type: 3,
|
||||
}
|
||||
continue
|
||||
}
|
||||
if _, ok := tmpData[Uid]; !ok {
|
||||
tmpData[Uid] = &msg.CatnipInvite{
|
||||
Uid: int64(Uid),
|
||||
Type: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, v := range tmpData {
|
||||
ResPlayerSimple := G_getGameLogic().GetResSimplePlayerByUid(int(v.Uid))
|
||||
if ResPlayerSimple != nil {
|
||||
v.Player = ResPlayerSimple
|
||||
}
|
||||
InviteList = append(InviteList, v)
|
||||
}
|
||||
|
||||
Template := catnipCfg.GetTemplateId(CatnipMod.Id)
|
||||
res := &msg.ResCatnip{
|
||||
Id: int32(CatnipMod.Id),
|
||||
EndTime: int32(ActivityInfo.EndT),
|
||||
Status: int32(Status),
|
||||
Template: int32(Template),
|
||||
GameList: GameList,
|
||||
Multiply: int32(CatnipMod.Mul),
|
||||
Id: int32(CatnipMod.Id),
|
||||
EndTime: int32(ActivityInfo.EndT),
|
||||
Status: int32(Status),
|
||||
Template: int32(Template),
|
||||
GameList: GameList,
|
||||
Multiply: int32(CatnipMod.Mul),
|
||||
FriendList: InviteList,
|
||||
}
|
||||
p.PushClientRes(res)
|
||||
}
|
||||
|
||||
// 设置猫草大作战游戏锁
|
||||
func (p *Player) SetCatnipGameLock(Uid int, GameId int) error {
|
||||
ActivityInfo := GetActivityInfoById(p, activity.ACT_TYPE_CATNIP)
|
||||
ActivityInfo := p.GetActivityInfoById(activity.ACT_TYPE_CATNIP)
|
||||
return G_GameLogicPtr.SetDataSync(int(p.M_DwUin), VAR_OP_CATNIP_LOCK, CatnipLock{
|
||||
Uid: int(p.M_DwUin),
|
||||
Partner: Uid,
|
||||
|
||||
@ -1,32 +1,40 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
"server/conf"
|
||||
activityCfg "server/conf/activity"
|
||||
chargeCfg "server/conf/charge"
|
||||
passCfg "server/conf/pass"
|
||||
"server/db"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/item"
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/game/mod/piggyBank"
|
||||
"server/game/mod/quest"
|
||||
"server/msg"
|
||||
proto "server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Charge(p *Player, ChargeId int) {
|
||||
ChargeFire(p, ChargeId) // 充值
|
||||
EndlessFire(p, ChargeId) // 无尽礼包
|
||||
PiggyBankFire(p, ChargeId) // 猪猪银行
|
||||
PlayroomFire(p, ChargeId) // 游乐场
|
||||
ActivityFire(p, ChargeId) // 活动礼包
|
||||
ADPetWorkFire(p, ChargeId) // 广告宠物工作
|
||||
PassFire(p, ChargeId)
|
||||
func (p *Player) Charge(ChargeId int) {
|
||||
p.ChargeFire(ChargeId) // 充值
|
||||
p.EndlessFire(ChargeId) // 无尽礼包
|
||||
p.PiggyBankFire(ChargeId) // 猪猪银行
|
||||
p.PlayroomFire(ChargeId) // 游乐场
|
||||
p.ActivityFire(ChargeId) // 活动礼包
|
||||
p.ADPetWorkFire(ChargeId) // 广告宠物工作
|
||||
p.PassFire(ChargeId)
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
OrderMod.SetIsCharge() // 设置订单模块为充值状态
|
||||
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PURCHASE, A: []interface{}{}})
|
||||
}
|
||||
|
||||
func SendCharge(p *Player, d *ChargeExtra) {
|
||||
func (p *Player) SendCharge(d *ChargeExtra) {
|
||||
G_GameLogicPtr.FriendMgrSend(&MsgMod.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
Type: MsgMod.HANDLE_TYPE_SEND_CHARGE,
|
||||
@ -36,11 +44,11 @@ func SendCharge(p *Player, d *ChargeExtra) {
|
||||
})
|
||||
}
|
||||
|
||||
func ADPetWorkFire(p *Player, ChargeId int) {
|
||||
func (p *Player) ADPetWorkFire(ChargeId int) {
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
Item := ChargeMod.FireAdReward(ChargeId)
|
||||
if Item != nil {
|
||||
err := p.HandleItem(Item, msg.ITEM_POP_LABEL_ActivityGift.String())
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_ActivityGift.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
return
|
||||
@ -50,10 +58,10 @@ func ADPetWorkFire(p *Player, ChargeId int) {
|
||||
p.ChargeBackData()
|
||||
}
|
||||
|
||||
func ActivityFire(p *Player, ChargeId int) {
|
||||
func (p *Player) ActivityFire(ChargeId int) {
|
||||
ActivityMod := p.PlayMod.getActivityMod()
|
||||
ActivityId := activityCfg.GetActivityGiftId(ChargeId)
|
||||
ActivityInfo := GetActivityInfoById(p, ActivityId)
|
||||
ActivityInfo := p.GetActivityInfoById(ActivityId)
|
||||
if ActivityInfo == nil {
|
||||
log.Debug("ActivityFire ActivityInfo nil : player id :%d, charge id:%d", p.M_DwUin, ChargeId)
|
||||
return
|
||||
@ -66,7 +74,7 @@ func ActivityFire(p *Player, ChargeId int) {
|
||||
if Item == nil {
|
||||
return
|
||||
}
|
||||
err = p.HandleItem(Item, msg.ITEM_POP_LABEL_ActivityGift.String())
|
||||
err = p.HandleItem(Item, proto.ITEM_POP_LABEL_ActivityGift.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
return
|
||||
@ -76,12 +84,12 @@ func ActivityFire(p *Player, ChargeId int) {
|
||||
p.BackDataActivity()
|
||||
}
|
||||
|
||||
func PassFire(p *Player, ChargeId int) {
|
||||
ActivityStatus := GetActivityStatus(p, activity.ACT_TYPE_PASS)
|
||||
func (p *Player) PassFire(ChargeId int) {
|
||||
ActivityStatus := p.GetActivityStatus(activity.ACT_TYPE_PASS)
|
||||
if ActivityStatus != ACT_STATUS_START {
|
||||
return
|
||||
}
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
@ -98,7 +106,7 @@ func PassFire(p *Player, ChargeId int) {
|
||||
if len(Items) == 0 {
|
||||
return
|
||||
}
|
||||
err := p.HandleItem(Items, msg.ITEM_POP_LABEL_PassCharge.String())
|
||||
err := p.HandleItem(Items, proto.ITEM_POP_LABEL_PassCharge.String())
|
||||
if err != nil {
|
||||
log.Debug("PassFire err : %s", err)
|
||||
return
|
||||
@ -106,13 +114,13 @@ func PassFire(p *Player, ChargeId int) {
|
||||
p.PlayMod.save()
|
||||
}
|
||||
|
||||
func PlayroomFire(p *Player, ChargeId int) {
|
||||
func (p *Player) PlayroomFire(ChargeId int) {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
Item := PlayroomMod.Fire(ChargeId)
|
||||
if Item == nil {
|
||||
return
|
||||
}
|
||||
err := p.HandleItem(Item, msg.ITEM_POP_LABEL_Playroom.String())
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_Playroom.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
}
|
||||
@ -122,17 +130,17 @@ func PlayroomFire(p *Player, ChargeId int) {
|
||||
p.PlayMod.save()
|
||||
}
|
||||
|
||||
func PiggyBankFire(p *Player, ChargeId int) {
|
||||
func (p *Player) PiggyBankFire(ChargeId int) {
|
||||
PiggyBankMod := p.PlayMod.getPiggyBankMod()
|
||||
Item := PiggyBankMod.Fire(ChargeId)
|
||||
if Item == nil {
|
||||
return
|
||||
}
|
||||
err := p.HandleItem(Item, msg.ITEM_POP_LABEL_PiggyBank.String())
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_PiggyBank.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
}
|
||||
LimitedTimePiggyBankTrigger(p)
|
||||
p.LimitedTimePiggyBankTrigger()
|
||||
p.TeLog("piggy_bank_open", map[string]interface{}{
|
||||
"piggy_bank_type": piggyBank.PIGGY_BANK_TYPE_CHARGE,
|
||||
"item_list": Item,
|
||||
@ -143,13 +151,13 @@ func PiggyBankFire(p *Player, ChargeId int) {
|
||||
}
|
||||
|
||||
// 处理玩家充值
|
||||
func ChargeFire(p *Player, ChargeId int) {
|
||||
func (p *Player) ChargeFire(ChargeId int) {
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
Item := ChargeMod.Fire(ChargeId)
|
||||
if Item == nil {
|
||||
return
|
||||
}
|
||||
err := p.HandleItem(Item, msg.ITEM_POP_LABEL_Charge.String())
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_Charge.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
}
|
||||
@ -157,23 +165,112 @@ func ChargeFire(p *Player, ChargeId int) {
|
||||
p.ChargeBackData()
|
||||
}
|
||||
|
||||
func ChargeItem(p *Player, ChargeId int) []*item.Item {
|
||||
func (p *Player) ChargeItem(ChargeId int) []*item.Item {
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
Item := ChargeMod.Fire(ChargeId)
|
||||
return Item
|
||||
}
|
||||
|
||||
// 处理玩家充值
|
||||
func EndlessFire(p *Player, ChargeId int) {
|
||||
func (p *Player) EndlessFire(ChargeId int) {
|
||||
EndlessMod := p.PlayMod.getEndlessMod()
|
||||
Item := EndlessMod.Fire(ChargeId)
|
||||
if Item == nil {
|
||||
return
|
||||
}
|
||||
err := p.HandleItem(Item, msg.ITEM_POP_LABEL_Endless.String())
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_Endless.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
}
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(EndlessMod.BackData())
|
||||
}
|
||||
|
||||
// 创建订单
|
||||
func (p *Player) CreateOrderSn(req *proto.ReqCreateOrderSn) (string, error) {
|
||||
Uid := int(p.M_DwUin)
|
||||
OrderSn := GoUtil.CreateOrderSn(Uid)
|
||||
|
||||
Price, Currency := chargeCfg.GetChargeInfo(int(req.ChargeId))
|
||||
Extra := &ChargeExtra{
|
||||
Type: int(req.Type),
|
||||
Uid: req.Uid,
|
||||
}
|
||||
ExtraData, _ := json.Marshal(Extra)
|
||||
err := db.CreateOrderSn(Uid, int(req.ChargeId), OrderSn, req.PlatForm, req.Channel, Price, Currency, string(ExtraData))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return OrderSn, nil
|
||||
}
|
||||
|
||||
func (p *Player) GoogleVerify(OrderSn, ProduceId, Token string) (*db.SqlChargeOrderStruct, error) {
|
||||
Order, err := db.GetPlayerChargeData(OrderSn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if Order.PayStatus == MergeConst.ORDER_STATUS_SHIP {
|
||||
return nil, fmt.Errorf("订单已经发货")
|
||||
}
|
||||
if !conf.Server.GoogleVerify {
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
return Order, nil
|
||||
}
|
||||
if Order.PayStatus != MergeConst.ORDER_STATUS_IDLE {
|
||||
return nil, fmt.Errorf("订单已经支付")
|
||||
}
|
||||
cmd := exec.Command(conf.Server.AppPath+"/script/verifyOrder", ProduceId, Token)
|
||||
|
||||
// 获取命令的输出
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 将输出转换为字符串
|
||||
outputStr := string(output)
|
||||
|
||||
// 替换单引号为双引号
|
||||
outputStr = strings.Replace(outputStr, "'", "\"", -1)
|
||||
type VerifyData struct {
|
||||
PurchaseState int `json:"purchaseState"`
|
||||
DeveloperPayload string `json:"developerPayload"`
|
||||
OrderId string `json:"orderId"`
|
||||
ConsumptionState int `json:"consumptionState"`
|
||||
}
|
||||
r := &VerifyData{}
|
||||
err = json.Unmarshal([]byte(outputStr), &r)
|
||||
if err != nil {
|
||||
log.Debug("output %s", string(output))
|
||||
return nil, err
|
||||
}
|
||||
_, err = db.GetPlayerPayChannelOrderId(r.OrderId)
|
||||
if err == nil {
|
||||
return nil, fmt.Errorf("订单已支付发货 param: %v", r)
|
||||
}
|
||||
// if r.DeveloperPayload != OrderSn {
|
||||
// return nil, fmt.Errorf("订单号不匹配")
|
||||
// }
|
||||
if r.ConsumptionState != 1 {
|
||||
return nil, fmt.Errorf("订单未消费")
|
||||
}
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
Order.PayChannelOrderId = r.OrderId
|
||||
Order.PayTime = GoUtil.Now()
|
||||
return Order, nil
|
||||
}
|
||||
|
||||
func (p *Player) CancelOrder(OrderSn string) error {
|
||||
Order, err := db.GetPlayerChargeData(OrderSn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if Order.PayStatus != MergeConst.ORDER_STATUS_IDLE {
|
||||
return fmt.Errorf("订单已支付")
|
||||
}
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_CANCEL
|
||||
err = db.UpdatePlayerChargeData(Order)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package game
|
||||
|
||||
// 补偿脚本
|
||||
import (
|
||||
"server/game/mod/compensation"
|
||||
"server/game/mod/mail"
|
||||
|
||||
156
src/server/game/FriendFunc.go
Normal file
156
src/server/game/FriendFunc.go
Normal file
@ -0,0 +1,156 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"server/GoUtil"
|
||||
"server/db"
|
||||
"server/game/mod/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sort"
|
||||
)
|
||||
|
||||
func (p *Player) GetVisitorPlayer() int {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
VisitorList := PlayroomMod.GetVisitor() // 到访用户
|
||||
TodayVisitedUsers := PlayroomMod.GetTodayVisitedUsers() // 今日已互动用户
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
type sortData struct {
|
||||
Uid int
|
||||
Time int64
|
||||
}
|
||||
PlayerList := make([]sortData, 0)
|
||||
PlayerList2 := make([]sortData, 0)
|
||||
Now := GoUtil.Now()
|
||||
/**
|
||||
排除当日玩家已对其发起过交互的用户
|
||||
优先选择24小时内曾经与玩家进行过宠物交互的好友
|
||||
若存在复数对象的情况下,优先选择交互发生时间与当前时间最近的好友
|
||||
若不存在符合条件的用户,则选择24小时内曾经与玩家进行过宠物交互的陌生用户
|
||||
若存在复数对象的情况下,优先选择交互发生时间与当前时间最近的用户
|
||||
若不存在符合条件的用户,则选择24小时内登入过游戏且上次登入时间与当前时间最近的好友
|
||||
若不存在符合条件的用户,则依据以上用户推荐算法,选择一位随机推荐用户,并且在下次触发式订单完成时,不再排除已发起过交互的用户
|
||||
*/
|
||||
for k, v := range VisitorList {
|
||||
if GoUtil.InArray(k, TodayVisitedUsers) {
|
||||
continue
|
||||
}
|
||||
if v.Time < Now-86400 {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(k) {
|
||||
PlayerList = append(PlayerList, sortData{k, v.Time})
|
||||
} else {
|
||||
PlayerList2 = append(PlayerList, sortData{k, v.Time})
|
||||
}
|
||||
}
|
||||
if len(PlayerList) != 0 {
|
||||
sort.Slice(PlayerList, func(i, j int) bool {
|
||||
return PlayerList[i].Time < PlayerList[j].Time
|
||||
})
|
||||
return PlayerList[0].Uid
|
||||
}
|
||||
if len(PlayerList2) != 0 {
|
||||
sort.Slice(PlayerList2, func(i, j int) bool {
|
||||
return PlayerList2[i].Time < PlayerList2[j].Time
|
||||
})
|
||||
return PlayerList2[0].Uid
|
||||
}
|
||||
// 若不存在符合条件的用户,则选择24小时内登入过游戏且上次登入时间与当前时间最近的好友
|
||||
var recentFriendUid int
|
||||
var recentLoginTime int64 = 0
|
||||
for uid := range FriendMod.GetFriendList() {
|
||||
if uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if GoUtil.InArray(uid, TodayVisitedUsers) {
|
||||
continue
|
||||
}
|
||||
ps := G_GameLogicPtr.GetSimplePlayerByUid(uid)
|
||||
if ps == nil {
|
||||
continue
|
||||
}
|
||||
if GoUtil.Now()-ps.Loginout > 86400 { // 24小时内登录过
|
||||
continue
|
||||
}
|
||||
if ps.Loginout > recentLoginTime {
|
||||
recentLoginTime = ps.Loginout
|
||||
recentFriendUid = uid
|
||||
}
|
||||
}
|
||||
if recentFriendUid != 0 {
|
||||
return recentFriendUid
|
||||
}
|
||||
PlayerList3 := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
||||
PlayerList4 := make([]int, 0)
|
||||
for _, v := range PlayerList3 {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if PlayerSimpleData.Level < 15 {
|
||||
continue
|
||||
}
|
||||
PlayerList4 = append(PlayerList4, v.Uid)
|
||||
}
|
||||
L := GoUtil.RandSliceNum(PlayerList4, 1)
|
||||
if len(L) == 0 {
|
||||
return 0
|
||||
}
|
||||
return L[0]
|
||||
}
|
||||
|
||||
func GetRecommendPlayer(p *Player, Num int) []int {
|
||||
PlayerList := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
||||
PlayerList1 := make([]int, 0)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckSendApply(v.Uid) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(v.Uid) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if GoUtil.Now()-PlayerSimpleData.Loginout > 86400 {
|
||||
continue
|
||||
}
|
||||
if PlayerSimpleData.Level < 4 {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
}
|
||||
if len(PlayerList1) == 0 {
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
}
|
||||
}
|
||||
return GoUtil.RandSliceNum(PlayerList1, Num)
|
||||
}
|
||||
|
||||
func GetUidByFaceBook(Fb string) (int, error) {
|
||||
sqlStr := "SELECT dwUin FROM t_player_baseinfo WHERE FaceBookId = ?"
|
||||
type Result struct {
|
||||
Uid int `db:"dwUin"`
|
||||
}
|
||||
R := Result{}
|
||||
err := db.SqlDb.Get(&R, sqlStr, Fb)
|
||||
log.Debug("Fb :%s;Uid :%d", Fb, R.Uid)
|
||||
return R.Uid, err
|
||||
}
|
||||
|
||||
func NotifyAllFriend(p *Player, m1 *msg.Msg) {
|
||||
m := m1.Clone()
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for k := range FriendMod.GetFriendList() {
|
||||
if k == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
m.To = k
|
||||
FriendMgrSend(m)
|
||||
}
|
||||
}
|
||||
@ -83,6 +83,7 @@ func (f *FriendMgr) Init() {
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_REFUSE, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_GROWTH, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_AGREE_DEL, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_CATNIP_SEND_EMOJI, f.sendToPlayer)
|
||||
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayer)
|
||||
|
||||
@ -75,7 +75,6 @@ type GameLogic struct {
|
||||
NotInitPlayer *Player
|
||||
Version int32
|
||||
M_SvrGlobal db.SqlSvrGlobalStruct
|
||||
MHttpManager *HttpManager
|
||||
SeverInfo *ServerInfo
|
||||
|
||||
MLogManager *LogMgr // 日志管理器
|
||||
@ -655,7 +654,7 @@ func (ad *GameLogic) ReplaceExistPlayerAndAgent(a gate.Agent, player *Player) er
|
||||
if ok {
|
||||
Timer.Stop()
|
||||
}
|
||||
SyncFriendMsg(player)
|
||||
player.SyncFriendMsg()
|
||||
log.Debug("player %d 重连", player.M_DwUin)
|
||||
return nil
|
||||
}
|
||||
@ -761,9 +760,9 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqCreatePetOrder", ReqCreatePetOrder) // 生成消耗品订单
|
||||
|
||||
//装饰
|
||||
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate) // 装饰
|
||||
RegisterMsgProcessFunc("ReqDecorateAll", ReqDecorateAll) // 装饰全部
|
||||
RegisterMsgProcessFunc("ReqDecorateReward", ReqDecorateReward) // 装饰全部
|
||||
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate) // 装饰
|
||||
RegisterMsgProcessFunc("ReqDecorateAll", ReqDecorateAll) // 装饰全部
|
||||
RegisterMsgProcessFunc("ReqAreaReward", ReqAreaReward) // 章节奖励
|
||||
//Gm命令
|
||||
RegisterMsgProcessFunc("ReqGmCommand", ReqGmCommand) // Gm命令
|
||||
|
||||
@ -949,15 +948,6 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqChargeReceive", ReqChargeReceive) // 礼包回复邮件
|
||||
}
|
||||
|
||||
func (ad *GameLogic) CreateHttpManager() {
|
||||
|
||||
go func() {
|
||||
ad.MHttpManager = new(HttpManager)
|
||||
ad.MHttpManager.InitRounter()
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
func (ad *GameLogic) CreateLogManager() {
|
||||
ad.MLogManager = new(LogMgr)
|
||||
ad.MLogManager.InitManager()
|
||||
|
||||
@ -144,7 +144,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
"CreateTime": GoUtil.Now(),
|
||||
"PayTime": GoUtil.Now(),
|
||||
})
|
||||
Charge(player, ChargeId)
|
||||
player.Charge(ChargeId)
|
||||
case "AddPart":
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
ChessMod.PartBag.List[1505] = chess.PartBagGrid{
|
||||
@ -183,7 +183,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
AddTime: Now,
|
||||
}
|
||||
}
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
case "resetFace":
|
||||
FaceMod := player.PlayMod.getFaceMod()
|
||||
FaceMod.List = nil
|
||||
@ -283,25 +283,30 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
case "miningReload":
|
||||
MiningMod := player.PlayMod.getMiningMod()
|
||||
MiningMod.ZeroUpdate(-1)
|
||||
ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_MINING)
|
||||
ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_MINING)
|
||||
MiningMod.ZeroUpdate(ActivityInfo.Id)
|
||||
MiningBackData(player)
|
||||
player.MiningBackData()
|
||||
case "catnipReload":
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
CatnipMod.ZeroUpdate(-1)
|
||||
ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_CATNIP)
|
||||
CatnipMod.ZeroUpdate(ActivityInfo.Id)
|
||||
case "guessColorReload":
|
||||
GuessColorMod := player.PlayMod.getGuessColorMod()
|
||||
GuessColorMod.ZeroUpdate(-1)
|
||||
ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_GUESS_COLOR)
|
||||
ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_GUESS_COLOR)
|
||||
GuessColorMod.ZeroUpdate(ActivityInfo.Id)
|
||||
GuessColorBackData(player)
|
||||
player.GuessColorBackData()
|
||||
case "raceReload":
|
||||
RaceMod := player.PlayMod.getRaceMod()
|
||||
RaceMod.ZeroUpdate(-1)
|
||||
ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_RACE)
|
||||
ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_RACE)
|
||||
RaceMod.ZeroUpdate(ActivityInfo.Id)
|
||||
RaceBackData(player)
|
||||
player.RaceBackData()
|
||||
case "raceAdd":
|
||||
RaceMod := player.PlayMod.getRaceMod()
|
||||
RaceMod.AddCoin(100)
|
||||
RaceBackData(player)
|
||||
player.RaceBackData()
|
||||
case "playroomReset":
|
||||
PlayroomMod := playroom.PlayroomMod{}
|
||||
PlayroomMod.InitData()
|
||||
@ -326,7 +331,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
Part := playroomCfg.GetDressPart(v)
|
||||
PlayroomMod.UnlockDress(Part, v)
|
||||
}
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
case "playroomAir":
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.NewPetAir = make(map[int]*playroom.PetAirInfo, 0)
|
||||
@ -334,7 +339,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
for _, v := range AirList {
|
||||
PlayroomMod.UnlockPetAir(v)
|
||||
}
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
case "resetRetire":
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
ChessMod.Retire = make(map[string]int)
|
||||
@ -347,11 +352,11 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
Num, _ := strconv.Atoi(arg[1])
|
||||
PlayroomMod.RoomPoint += Num
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
case "resetPlayroomUnlock":
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.UnlockList = make(map[int]int64)
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
case "addChip":
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.AddChip(100100001, 1, 0)
|
||||
@ -373,8 +378,8 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
FriendMod.Id = 0
|
||||
FriendMod.Log = make([]*friend.LogInfo, 0)
|
||||
FriendMod.InitData()
|
||||
FriendListBackData(player)
|
||||
FriendLogBackData(player)
|
||||
player.FriendListBackData()
|
||||
player.FriendLogBackData()
|
||||
case "addFriend":
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
Uid, _ := strconv.Atoi(arg[1])
|
||||
@ -400,7 +405,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
case "comfortOrder":
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.LogoutTime = GoUtil.Now() - 7*86400
|
||||
TriggerComfortOrder(player)
|
||||
player.TriggerComfortOrder()
|
||||
player.PushClientRes(player.PlayMod.getOrderMod().BackData())
|
||||
case "resetGuide":
|
||||
GuildMod := player.PlayMod.getGuideMod()
|
||||
@ -476,7 +481,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
case "resetNpc":
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
FriendMod.Npc = []int{}
|
||||
FriendListBackData(player)
|
||||
player.FriendListBackData()
|
||||
case "recoverUser":
|
||||
file, err := os.OpenFile(conf.Server.GameConfPath+"user.info", os.O_RDWR|os.O_CREATE, 0666)
|
||||
if err != nil {
|
||||
@ -543,11 +548,11 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
player.ChargeBackData()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.WeeklyDiscount = make(map[int]int)
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
case "resetCode":
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.AddCode = fmt.Sprintf("MMM-%s-%s", "156", GoUtil.UniqueStringFromInt(int(BaseMod.Uid)))
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
default:
|
||||
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
|
||||
}
|
||||
|
||||
@ -1,60 +0,0 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"server/conf"
|
||||
|
||||
// "server/msg"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
type HttpManager struct {
|
||||
Rounter *mux.Router
|
||||
}
|
||||
|
||||
func (p *HttpManager) InitRounter() {
|
||||
p.Rounter = mux.NewRouter()
|
||||
p.InitFriendRouter()
|
||||
p.InitPlayerProfileInfo()
|
||||
http.ListenAndServe(conf.Server.HttpPort, p.Rounter)
|
||||
}
|
||||
|
||||
func (p *HttpManager) InitFriendRouter() {
|
||||
bs := p.Rounter.PathPrefix("/Friend").Subrouter()
|
||||
bs.HandleFunc("/Add/{SenderId}/{ReceiveId}", p.AddFriend)
|
||||
bs.HandleFunc("/Del/{SenderId}/{ReceiveId}", p.DeleteFriend)
|
||||
}
|
||||
|
||||
func (p *HttpManager) InitPlayerProfileInfo() {
|
||||
bs := p.Rounter.PathPrefix("/Profile").Subrouter()
|
||||
bs.HandleFunc("/GetBrief/{Id}", p.GetPlayerProfileInfo)
|
||||
}
|
||||
|
||||
func (p *HttpManager) GetPlayerProfileInfo(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
}
|
||||
|
||||
func (p *HttpManager) AddFriend(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
SenderId, ok := vars["SenderId"]
|
||||
if ok {
|
||||
fmt.Println("AddFreind SenderId:" + SenderId)
|
||||
}
|
||||
|
||||
ReceiveId, ok1 := vars["ReceiveId"]
|
||||
if ok1 {
|
||||
fmt.Println("AddFreind ReceiveId:" + ReceiveId)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *HttpManager) DeleteFriend(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
id, ok := vars["id"]
|
||||
if !ok {
|
||||
fmt.Println("id is missing in parameters")
|
||||
}
|
||||
fmt.Println(`id := `, id)
|
||||
|
||||
}
|
||||
@ -16,7 +16,7 @@ import (
|
||||
)
|
||||
|
||||
// 限时事件触发器
|
||||
func LimitedTimeEventTrigger(p *Player, AddEventId int) {
|
||||
func (p *Player) LimitedTimeEventTrigger(AddEventId int) {
|
||||
Lv := p.GetPlayerBaseMod().GetLevel()
|
||||
EndTime, TimeoutEvent, AddEvent := p.PlayMod.getLimitedTimeEventMod().Trigger(Lv)
|
||||
remainingTime := GoUtil.NextHourRemain()
|
||||
@ -28,7 +28,7 @@ func LimitedTimeEventTrigger(p *Player, AddEventId int) {
|
||||
p.CallEvent(time.Duration(EndTime)*time.Second, func() {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
LimitedTimeEventTrigger(p, 0)
|
||||
p.LimitedTimeEventTrigger(0)
|
||||
p.SendClientRes()
|
||||
}, "LimitedTimeEvent")
|
||||
}
|
||||
@ -62,7 +62,7 @@ func LimitedTimeEventTrigger(p *Player, AddEventId int) {
|
||||
p.PlayMod.getCardMod().ResetCardFestival()
|
||||
case limitedTimeEvent.EVENT_TYPE_GOLDCARD_EX:
|
||||
p.PlayMod.getFriendMod().ResetGoldCardEx()
|
||||
LimitedTimeCardTrigger(p)
|
||||
p.LimitedTimeCardTrigger()
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,13 +92,13 @@ func LimitedTimeEventTrigger(p *Player, AddEventId int) {
|
||||
}
|
||||
|
||||
// 限时猪猪存钱罐触发器
|
||||
func LimitedTimePiggyBankTrigger(p *Player) {
|
||||
func (p *Player) LimitedTimePiggyBankTrigger() {
|
||||
Remain := p.PlayMod.getPiggyBankMod().TimeOut()
|
||||
if Remain > 0 {
|
||||
p.CallEvent(time.Duration(Remain)*time.Second, func() {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
LimitedTimePiggyBankTrigger(p)
|
||||
p.LimitedTimePiggyBankTrigger()
|
||||
p.SendClientRes()
|
||||
}, "PiggyBank")
|
||||
}
|
||||
@ -106,7 +106,7 @@ func LimitedTimePiggyBankTrigger(p *Player) {
|
||||
}
|
||||
|
||||
// 限时卡牌触发器
|
||||
func LimitedTimeCardTrigger(p *Player) {
|
||||
func (p *Player) LimitedTimeCardTrigger() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
Now := GoUtil.Now()
|
||||
@ -140,21 +140,21 @@ func LimitedTimeCardTrigger(p *Player) {
|
||||
p.CallEvent(time.Duration(EndTime-Now)*time.Second, func() {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
LimitedTimeCardTrigger(p)
|
||||
p.LimitedTimeCardTrigger()
|
||||
p.SendClientRes()
|
||||
}, "LimitedTimeCard")
|
||||
}
|
||||
}
|
||||
func LimitedTimePlayroomTrigger(p *Player) {
|
||||
func (p *Player) LimitedTimePlayroomTrigger() {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
for k, v := range PlayroomMod.Physiology {
|
||||
if v.Time > 0 {
|
||||
LimitedTimePlayroomTrigger_(p, k)
|
||||
p.LimitedTimePlayroomTrigger_(k)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func LimitedTimePlayroomTrigger_(p *Player, Id int) {
|
||||
func (p *Player) LimitedTimePlayroomTrigger_(Id int) {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
Physiology := PlayroomMod.GetPhysiology(Id)
|
||||
if Physiology == nil {
|
||||
@ -183,7 +183,7 @@ func LimitedTimePlayroomTrigger_(p *Player, Id int) {
|
||||
p.CallEvent(time.Duration(NextSecond)*time.Second, func() {
|
||||
p.lock.Lock()
|
||||
defer p.lock.Unlock()
|
||||
LimitedTimePlayroomTrigger_(p, Id)
|
||||
p.LimitedTimePlayroomTrigger_(Id)
|
||||
p.SendClientRes()
|
||||
}, fmt.Sprintf("Playroom_%d", Id))
|
||||
}
|
||||
@ -223,7 +223,7 @@ func LimitedTimePlayroomWorkTrigger(p *Player) {
|
||||
if EndTime > 0 && EndTime <= Now {
|
||||
PlayroomMod.ResetWork()
|
||||
p.PlayMod.save()
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
p.SendClientRes()
|
||||
return
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
kafkaMiddleware "server/middleware/kafka"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -18,7 +19,7 @@ const (
|
||||
PLAYROOM_LOST = "playroom_lost"
|
||||
// 增大缓冲:针对 ~1000 条/s,保留足够秒数的缓冲(可按需调整)
|
||||
LOG_LENGTH = 100000
|
||||
WORKER_COUNT = 16
|
||||
WORKER_COUNT = 500
|
||||
)
|
||||
|
||||
type LogMgr struct {
|
||||
@ -40,20 +41,35 @@ type Log struct {
|
||||
}
|
||||
|
||||
func (L *LogMgr) InitManager() {
|
||||
// 初始化通道与启动 worker 循环写入 kafka
|
||||
// 初始化通道
|
||||
L.L = make(chan *Log, LOG_LENGTH)
|
||||
|
||||
// 启动 worker(允许基于 CPU 动态扩展)
|
||||
workerCount := WORKER_COUNT
|
||||
if cpuWorkers := runtime.NumCPU() * 2; cpuWorkers > workerCount {
|
||||
workerCount = cpuWorkers
|
||||
// 动态协程池参数
|
||||
maxWorkers := WORKER_COUNT
|
||||
if cpuWorkers := runtime.NumCPU() * 2; cpuWorkers > maxWorkers {
|
||||
maxWorkers = cpuWorkers
|
||||
}
|
||||
for i := 0; i < workerCount; i++ {
|
||||
minWorkers := 100
|
||||
idleTimeout := 500 * time.Millisecond
|
||||
|
||||
var activeWorkers int32
|
||||
|
||||
// worker 启动函数
|
||||
spawnWorker := func() {
|
||||
L.wg.Add(1)
|
||||
atomic.AddInt32(&activeWorkers, 1)
|
||||
go func() {
|
||||
defer L.wg.Done()
|
||||
for v := range L.L {
|
||||
// 如果 kafka 未就绪,尝试重入队列并等待一小段时间(缩短等待)
|
||||
defer atomic.AddInt32(&activeWorkers, -1)
|
||||
|
||||
for {
|
||||
// 首先阻塞等待一个任务(若 channel 关闭则退出)
|
||||
v, ok := <-L.L
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
// 处理消息(与原来逻辑一致)
|
||||
value, _ := json.Marshal(v)
|
||||
if kafkaMiddleware.KafkaMod == nil {
|
||||
// 尝试非阻塞重入,否则丢弃最旧再试一次
|
||||
select {
|
||||
@ -69,33 +85,115 @@ func (L *LogMgr) InitManager() {
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
|
||||
value, _ := json.Marshal(v)
|
||||
if err := kafkaMiddleware.SendMsg([]byte(v.EventName), value); err != nil {
|
||||
log.Debug("kafka log send err:%s", err.Error())
|
||||
// 发送失败,尝试将消息放回通道(非阻塞策略)
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
// 通道满,丢弃最旧一条后再尝试一次入队
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
} else {
|
||||
if err := kafkaMiddleware.SendMsg([]byte(v.EventName), value); err != nil {
|
||||
log.Debug("kafka log send err:%s", err.Error())
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
// 放不下则丢弃
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
// 快速循环处理后续可用任务,若超时则退出该 worker(回收)
|
||||
timer := time.NewTimer(idleTimeout)
|
||||
for {
|
||||
select {
|
||||
case v, ok := <-L.L:
|
||||
if !ok {
|
||||
if !timer.Stop() {
|
||||
<-timer.C
|
||||
}
|
||||
return
|
||||
}
|
||||
// 处理消息
|
||||
value, _ := json.Marshal(v)
|
||||
if kafkaMiddleware.KafkaMod == nil {
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
} else {
|
||||
if err := kafkaMiddleware.SendMsg([]byte(v.EventName), value); err != nil {
|
||||
log.Debug("kafka log send err:%s", err.Error())
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
select {
|
||||
case L.L <- v:
|
||||
default:
|
||||
}
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
// 重置定时器以继续快速处理
|
||||
if !timer.Stop() {
|
||||
<-timer.C
|
||||
}
|
||||
timer.Reset(idleTimeout)
|
||||
case <-timer.C:
|
||||
timer.Stop()
|
||||
// 空闲超时,退出该 worker
|
||||
return
|
||||
}
|
||||
// 缩短退避,避免快速循环阻塞
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// 启动初始最小 worker 数量
|
||||
for i := 0; i < minWorkers; i++ {
|
||||
spawnWorker()
|
||||
}
|
||||
|
||||
// 监督器:动态根据队列长度扩展 worker,但不超过 maxWorkers
|
||||
go func() {
|
||||
ticker := time.NewTicker(200 * time.Millisecond)
|
||||
defer ticker.Stop()
|
||||
for range ticker.C {
|
||||
L.Lock.Lock()
|
||||
closing := L.closing
|
||||
L.Lock.Unlock()
|
||||
if closing {
|
||||
return
|
||||
}
|
||||
backlog := len(L.L)
|
||||
active := int(atomic.LoadInt32(&activeWorkers))
|
||||
if backlog > active && active < maxWorkers {
|
||||
toSpawn := backlog - active
|
||||
remain := maxWorkers - active
|
||||
if toSpawn > remain {
|
||||
toSpawn = remain
|
||||
}
|
||||
for i := 0; i < toSpawn; i++ {
|
||||
spawnWorker()
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func (L *LogMgr) AddLog(logs *Log) {
|
||||
|
||||
@ -1,15 +1,11 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os/exec"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
mergeCluster "server/cluster"
|
||||
"server/conf"
|
||||
cardCfg "server/conf/card"
|
||||
chargeCfg "server/conf/charge"
|
||||
catnipCfg "server/conf/catnip"
|
||||
decorateCfg "server/conf/decorate"
|
||||
itemCfg "server/conf/item"
|
||||
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
||||
@ -18,7 +14,6 @@ import (
|
||||
orderCfg "server/conf/order"
|
||||
playroomCfg "server/conf/playroom"
|
||||
userCfg "server/conf/user"
|
||||
"server/db"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/friend"
|
||||
@ -31,11 +26,10 @@ import (
|
||||
proto "server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// 处理玩家异步请求
|
||||
func HandleMsg(p *Player, m *msg.Msg) {
|
||||
func (p *Player) HandleMsg(m *msg.Msg) {
|
||||
p.lock.Lock() //加锁
|
||||
backup := p.BackUp() // 备份当前的 Player 值
|
||||
defer func() {
|
||||
@ -46,7 +40,7 @@ func HandleMsg(p *Player, m *msg.Msg) {
|
||||
p.lock.Unlock() //解锁
|
||||
}()
|
||||
p.args = make(map[string]interface{})
|
||||
err := handle(p, m)
|
||||
err := p.handle(m)
|
||||
if err != nil {
|
||||
log.Debug("uid : %d, err : %s", p.M_DwUin, err)
|
||||
p.Recover(backup) //还原Player的数据
|
||||
@ -57,10 +51,72 @@ func HandleMsg(p *Player, m *msg.Msg) {
|
||||
}
|
||||
|
||||
// 消息处理
|
||||
func handle(p *Player, m *msg.Msg) error {
|
||||
func (p *Player) handle(m *msg.Msg) error {
|
||||
switch m.Type {
|
||||
case msg.HANDLE_TYPE_DEL, msg.HANDLE_TYPE_APPLY, msg.HADNLE_TYPE_AGREE, msg.HANDLE_TYPE_REQ_CARD, msg.HANDLE_TYPE_REFUSE:
|
||||
return HandleFriendMsg(p, m)
|
||||
case msg.HANDLE_TYPE_APPLY: // 好友申请
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddFriendApply(m.From)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_APPLY,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HADNLE_TYPE_AGREE: // 同意好友申请
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AgreeApply(m.From)
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_AGREE,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
p.PlayroomBackData()
|
||||
p.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": m.From,
|
||||
"add_type": "接受申请",
|
||||
})
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "", m.SendT)
|
||||
case msg.HANDLE_TYPE_DEL: // 删除好友
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.DelFriend(m.From)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_DEL,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HANDLE_TYPE_REFUSE: // 拒绝好友申请
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.RefuseApply(m.From)
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_REFUSE,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HANDLE_TYPE_REQ_CARD: // 卡牌申请
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
FriendMod.SetCardInfo(&CardInfo)
|
||||
p.PushClientRes(
|
||||
&proto.NotifyFriendCard{
|
||||
Info: GetCardInfoMsg(&CardInfo),
|
||||
},
|
||||
)
|
||||
case msg.HANDLE_TYPE_FACEBOOK_UNBIND: // facebook解绑
|
||||
FaceMod := p.PlayMod.getFaceMod()
|
||||
if FaceMod.SetId == 0 {
|
||||
FaceMod.SetId = 2
|
||||
}
|
||||
case msg.SERVER_ZERO_UPDATE:
|
||||
p.ZeroUpdate(nil)
|
||||
case msg.SERVER_NOON_UPDATE:
|
||||
@ -74,7 +130,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
p.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": m.From,
|
||||
"add_type": "发起申请",
|
||||
@ -114,7 +170,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
p.PushClientRes(CardMod.NotifyTimes())
|
||||
case msg.HANDLE_TYPE_REG_CARD_FINISH, msg.HANDLE_TYPE_AGREE_CARD_FAIL: // B收到A的请求已结束
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.DelCardInfo(CardInfo.Id)
|
||||
p.PushClientRes(
|
||||
@ -124,7 +183,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
)
|
||||
p.PlayMod.save()
|
||||
case msg.HANDLE_TYPE_AGREE_CARD: // A收到B同意卡牌
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
OtherUid, err := CardMod.DelRequestCard(CardInfo.BUid)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
@ -149,7 +211,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
)
|
||||
p.PushClientRes(CardMod.NotifyTimes())
|
||||
case msg.HANDLE_TYPE_REG_CARD_REFUSE: // A收到B拒绝索要卡牌
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
CardMod.DelRequestCard(CardInfo.BUid)
|
||||
CardMod.AddReqTimes(CardInfo.Id, CardInfo.StartTime)
|
||||
@ -158,7 +223,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
case msg.HANDLE_TYPE_EX_CARD: // B收到A置换卡牌
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
FriendMod.SetCardInfo(&CardInfo)
|
||||
FriendMod.Interact(CardInfo.AUid, friend.INTERACT_TYPE_EX, m.SendT)
|
||||
p.PlayMod.save()
|
||||
@ -169,7 +237,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
)
|
||||
case msg.HANDLE_TYPE_SELECT_EX_CARD: // A收到B选择卡牌进行置换
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
FriendMod.SetCardInfo(&CardInfo)
|
||||
// p.AddLog(int(p.M_DwUin), friend.LOG_TYPE_CARD_SELECT_GET, fmt.Sprintf("%d", CardInfo.CardId))
|
||||
p.PlayMod.save()
|
||||
@ -179,7 +250,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
},
|
||||
)
|
||||
case msg.HANDLE_TYPE_ARGREE_EX_CARD: // B收到A同意置换卡牌
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.SetCardInfo(&CardInfo)
|
||||
p.PushClientRes(
|
||||
@ -190,7 +264,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PlayMod.save()
|
||||
case msg.HANDLE_TYPE_REFUSE_SELECT_CARD: // A收到B拒绝置换卡牌
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
CardMod.AddExTimes(&CardInfo)
|
||||
p.AddCard(CardInfo.CardId)
|
||||
CardMod.DelExCard(&CardInfo)
|
||||
@ -199,7 +276,10 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PlayMod.save()
|
||||
case msg.HANDLE_TYPE_REFUSE_EX_CARD: // B收到A拒绝置换卡牌
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
CardInfo, ok := m.Extra.(card.CardInfo)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
p.AddCard(CardInfo.ExId)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.DelCardInfo(CardInfo.Id)
|
||||
@ -209,9 +289,9 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
case msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY: // # 锦标赛排名变动通知
|
||||
BackChampship(p)
|
||||
p.BackChampship()
|
||||
case msg.HANDLE_TYPE_CHAMPSHIP_RESULT: // # 好友锦标赛结果
|
||||
Extra := m.Extra.([]int)
|
||||
Extra := GoUtil.IntSlice(m.Extra)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", Extra[0], Extra[1]), m.SendT)
|
||||
case msg.HANDLE_TYPE_TREASURE_RESULT: // # 好友宝藏结果
|
||||
//p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT)
|
||||
@ -265,9 +345,9 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CAT_LOSE, fmt.Sprintf("%d", Emoji), m.SendT)
|
||||
FriendMod.Interact(m.From, friend.INTERACT_TYPE_VISIT, m.SendT)
|
||||
case msg.FRIEND_TREASURE_HANDLE: // # 好友宝藏
|
||||
Items := make([]*item.Item, 0)
|
||||
if m.Extra != nil {
|
||||
Items = m.Extra.([]*item.Item)
|
||||
Items, ok := m.Extra.([]*item.Item)
|
||||
if !ok {
|
||||
Items = []*item.Item{}
|
||||
}
|
||||
p.AddLog(m.From, friend.LOG_TYPE_TREASURE_HELP, "", m.SendT)
|
||||
p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String())
|
||||
@ -285,21 +365,21 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
FriendMod.Interact(m.From, friend.INTERACT_TYPE_UPVOTE, m.SendT)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK_UPVOTE, "", m.SendT)
|
||||
case msg.HANDLE_TYPE_SEND_CHARGE: // 收到好友赠送的充值礼包
|
||||
C := &ChargeExtra{}
|
||||
if m.Extra != nil {
|
||||
C = m.Extra.(*ChargeExtra)
|
||||
C, ok := m.Extra.(*ChargeExtra)
|
||||
if !ok {
|
||||
C = &ChargeExtra{}
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
mt, mc, mt_en, mc_en := mailCfg.GetChargeSendMail(PlayerSimpleData.Name)
|
||||
Items := ChargeItem(p, C.ChargeId)
|
||||
Items := p.ChargeItem(C.ChargeId)
|
||||
MailId := MailMod.Send(mt, "", mc, mt_en, "", mc_en, Items, mail.MAIL_TYPE_GIFT)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_CHARGE_SEND, fmt.Sprintf("%d", MailId), m.SendT)
|
||||
p.PushClientRes(MailMod.NotifyMail(MailId))
|
||||
case msg.HANDLE_TYPE_CHARGE_RECEIVE: // 收到好友的感谢信
|
||||
Content := ""
|
||||
if m.Extra != nil {
|
||||
Content = m.Extra.(string)
|
||||
Content, ok := m.Extra.(string)
|
||||
if !ok {
|
||||
Content = ""
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
@ -326,63 +406,77 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.NotifyPlayroomKiss()
|
||||
case msg.HANDLE_TYPE_CATNIP_INVITE: // 邀请好友参与猫咪游戏
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsg := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
CatnipMsg, ok := m.Extra.(CatnipMsg)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.BeInvited(CatnipMsg.GameId, int(m.From), m.SendT)
|
||||
CatnipMod.BeInvited(int(m.From), m.SendT)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP, fmt.Sprintf("%d", CatnipMsg.GameId), m.End)
|
||||
FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP, fmt.Sprintf("%d", CatnipMsg.GameId), m.End, nil)
|
||||
case msg.HANDLE_TYPE_CATNIP_AGREE: // 同意好友参与猫咪游戏
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsgInfo := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsgInfo.ActivityId { // 活动ID不匹配
|
||||
CatnipMsg, ok := m.Extra.(CatnipMsg)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
UserList, _ := CatnipMod.Agree(CatnipMsgInfo.GameId, int(m.From))
|
||||
for _, v := range UserList {
|
||||
FriendMgrSend(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
To: int(v),
|
||||
Type: msg.HANDLE_TYPE_CATNIP_AGREE,
|
||||
Extra: CatnipMsg{
|
||||
ActivityId: ActivityId,
|
||||
GameId: int(CatnipMsgInfo.GameId),
|
||||
},
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.BeAgree(CatnipMsg.GameId, int(m.From))
|
||||
case msg.HANDLE_TYPE_CATNIP_AGREE_DEL: // 同意好友参与猫咪游戏后删除邀请
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsg := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
CatnipMsg, ok := m.Extra.(CatnipMsg)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.DelInvited(CatnipMsg.GameId, int(m.From))
|
||||
case msg.HANDLE_TYPE_CATNIP_REFUSE: // 拒绝好友参与猫咪游戏
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsg := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
CatnipMsg, ok := m.Extra.(CatnipMsg)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.DelInvited(CatnipMsg.GameId, int(m.From))
|
||||
case msg.HANDLE_TYPE_CATNIP_GROWTH:
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipGrowthInfo := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipGrowthInfo.ActivityId { // 活动ID不匹配
|
||||
CatnipMsg, ok := m.Extra.(CatnipMsg)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
CatnipMod.Growth(CatnipGrowthInfo.GameId, CatnipGrowthInfo.Growth)
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.GrowthByUid(m.From, CatnipMsg.Growth)
|
||||
if CatnipMsg.FriendItems > 0 {
|
||||
Items := catnipCfg.GetItemCost(ActivityId, CatnipMsg.FriendItems)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP_ITEMS, "", m.End, Items)
|
||||
}
|
||||
p.CatnipBackData()
|
||||
case msg.HANDLE_TYPE_CATNIP_SEND_EMOJI:
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
EmojiId := GoUtil.Int(m.Extra)
|
||||
CatnipMod.SetEmoji(m.From, EmojiId)
|
||||
p.CatnipBackData()
|
||||
case msg.HANDLE_TYPE_FRIEND_GREETING_REPLY:
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
if v, ok := m.Extra.(friend.ReplyInfo); ok {
|
||||
FriendMod.AddReplyInfo(v.Uid, v.Type, v.Param, GoUtil.Now()+24*3600)
|
||||
FriendLogBackData(p)
|
||||
FriendMod.AddReplyInfo(v.Uid, v.Type, v.Param, GoUtil.Now()+24*3600, nil)
|
||||
p.FriendLogBackData()
|
||||
}
|
||||
case msg.HANDLE_TYPE_FRIEND_SPONSOER:
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_SPONSOR_GET, "", m.SendT)
|
||||
@ -393,75 +487,8 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 处理系统请求
|
||||
func HandleServerMsg(p *Player, msg *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 处理好友请求
|
||||
func HandleFriendMsg(p *Player, m *msg.Msg) error {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From)
|
||||
switch m.Type {
|
||||
case msg.HANDLE_TYPE_APPLY: // 好友申请
|
||||
FriendMod.AddFriendApply(m.From)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_APPLY,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HADNLE_TYPE_AGREE: // 同意好友申请
|
||||
FriendMod.AgreeApply(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_AGREE,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
PlayroomBackData(p)
|
||||
p.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": m.From,
|
||||
"add_type": "接受申请",
|
||||
})
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "", m.SendT)
|
||||
case msg.HANDLE_TYPE_DEL: // 删除好友
|
||||
FriendMod.DelFriend(m.From)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_APPLY, "", m.SendT)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_DEL,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HANDLE_TYPE_REFUSE: // 拒绝好友申请
|
||||
FriendMod.RefuseApply(m.From)
|
||||
p.PushClientRes(&proto.ResFriendApplyNotify{
|
||||
Player: PlayerSimpleData,
|
||||
Type: friend.FRIEND_NOTIFY_REFUSE,
|
||||
Time: int32(GoUtil.Now()),
|
||||
})
|
||||
case msg.HANDLE_TYPE_REQ_CARD: // 卡牌申请
|
||||
CardInfo := m.Extra.(card.CardInfo)
|
||||
FriendMod.SetCardInfo(&CardInfo)
|
||||
p.PushClientRes(
|
||||
&proto.NotifyFriendCard{
|
||||
Info: GetCardInfoMsg(&CardInfo),
|
||||
},
|
||||
)
|
||||
case msg.HANDLE_TYPE_FACEBOOK_UNBIND: // facebook解绑
|
||||
FaceMod := p.PlayMod.getFaceMod()
|
||||
if FaceMod.SetId == 0 {
|
||||
FaceMod.SetId = 2
|
||||
}
|
||||
}
|
||||
p.PlayMod.save()
|
||||
return nil
|
||||
}
|
||||
|
||||
// 同步好友请求
|
||||
func SyncFriendMsg(p *Player) {
|
||||
func (p *Player) SyncFriendMsg() {
|
||||
MsgList := G_GameLogicPtr.FriendMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_SYNC, From: int(p.M_DwUin)})
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
MsgId := FriendMod.GetSyncId()
|
||||
@ -473,7 +500,7 @@ func SyncFriendMsg(p *Player) {
|
||||
return
|
||||
}
|
||||
sort.Slice(ml, func(i, j int) bool {
|
||||
return ml[i].SendT < ml[j].SendT
|
||||
return ml[i].Id < ml[j].Id
|
||||
})
|
||||
maxId := int64(0)
|
||||
for _, v := range ml {
|
||||
@ -485,7 +512,7 @@ func SyncFriendMsg(p *Player) {
|
||||
continue
|
||||
}
|
||||
log.Debug("uid : %d, handle friend msg : %v", p.M_DwUin, v)
|
||||
handle(p, v)
|
||||
p.handle(v)
|
||||
v.H = 1
|
||||
}
|
||||
FriendMod.SetSyncId(maxId)
|
||||
@ -514,103 +541,21 @@ func SyncMailMsg(p *Player) {
|
||||
p.PushClientRes(MailMod.BackData())
|
||||
}
|
||||
|
||||
// 返回好友信息
|
||||
func FriendListBackData(p *Player) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var fl []*proto.ResPlayerSimple
|
||||
for k, v := range FriendMod.GetFriendList() {
|
||||
if k == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
ps.AddTime = v.AddTime
|
||||
ps.Interact = FriendMod.GetInteractTime(k)
|
||||
fl = append(fl, ps)
|
||||
}
|
||||
}
|
||||
ReqFriendList := make([]int64, 0)
|
||||
for k := range FriendMod.SendApply {
|
||||
ReqFriendList = append(ReqFriendList, int64(k))
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendList{
|
||||
FriendList: fl,
|
||||
ReqApplyList: ReqFriendList,
|
||||
Npc: GoUtil.IntToInt32(FriendMod.GetNpc()),
|
||||
Sponsor: int32(FriendMod.GetSponsor()),
|
||||
})
|
||||
}
|
||||
|
||||
func FriendApplyBackData(p *Player) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var al []*proto.ResFriendApplyInfo
|
||||
for k, v := range FriendMod.ApplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
al = append(al, &proto.ResFriendApplyInfo{
|
||||
Player: ps,
|
||||
Time: int32(v),
|
||||
})
|
||||
}
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendApply{
|
||||
ApplyList: al,
|
||||
})
|
||||
}
|
||||
|
||||
func FriendLogBackData(p *Player) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var log []*proto.ResFriendLog
|
||||
for _, v := range FriendMod.Log {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
ps = &proto.ResPlayerSimple{
|
||||
Uid: int64(v.Uid),
|
||||
}
|
||||
}
|
||||
log = append(log, &proto.ResFriendLog{
|
||||
Player: ps,
|
||||
Type: int32(v.Type),
|
||||
Time: int32(v.Time),
|
||||
Param: v.Param,
|
||||
Id: int32(v.Id),
|
||||
Upvote: v.Upvote,
|
||||
})
|
||||
}
|
||||
var reply []*proto.ResFriendReply
|
||||
for _, v := range FriendMod.ReplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
ps = &proto.ResPlayerSimple{
|
||||
Uid: int64(v.Uid),
|
||||
}
|
||||
}
|
||||
reply = append(reply, &proto.ResFriendReply{
|
||||
Player: ps,
|
||||
Type: int32(v.Type),
|
||||
Param: v.Param,
|
||||
Id: int32(v.Id),
|
||||
Status: int32(v.Status),
|
||||
AddTime: v.AddTime,
|
||||
EndTime: v.EndTime,
|
||||
})
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendTimeLine{
|
||||
Log: log,
|
||||
Reply: reply,
|
||||
})
|
||||
}
|
||||
|
||||
func FriendCardBackData(p *Player) {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var msgList []*proto.ResFriendCard
|
||||
for _, v := range FriendMod.Card {
|
||||
m := GetCardInfoMsg(v)
|
||||
msgList = append(msgList, m)
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendCardMsg{
|
||||
MsgList: msgList,
|
||||
func (p *Player) CatnipGrowthMsg(To, Id, Growth, FriendItems int) error {
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
FriendMgrSend(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
To: To,
|
||||
Type: msg.HANDLE_TYPE_CATNIP_GROWTH,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: CatnipMsg{
|
||||
ActivityId: ActivityId,
|
||||
GameId: Id,
|
||||
Growth: Growth,
|
||||
FriendItems: FriendItems,
|
||||
},
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
// 发送消息给玩家
|
||||
@ -618,95 +563,6 @@ func ClusterSendMsg(ServerId int, m *msg.Msg) {
|
||||
mergeCluster.SendServerMsg(m, ServerId)
|
||||
}
|
||||
|
||||
// 创建订单
|
||||
func CreateOrderSn(p *Player, req *proto.ReqCreateOrderSn) (string, error) {
|
||||
Uid := int(p.M_DwUin)
|
||||
OrderSn := GoUtil.CreateOrderSn(Uid)
|
||||
|
||||
Price, Currency := chargeCfg.GetChargeInfo(int(req.ChargeId))
|
||||
Extra := &ChargeExtra{
|
||||
Type: int(req.Type),
|
||||
Uid: req.Uid,
|
||||
}
|
||||
ExtraData, _ := json.Marshal(Extra)
|
||||
err := db.CreateOrderSn(Uid, int(req.ChargeId), OrderSn, req.PlatForm, req.Channel, Price, Currency, string(ExtraData))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return OrderSn, nil
|
||||
}
|
||||
|
||||
func GoogleVerify(p *Player, OrderSn, ProduceId, Token string) (*db.SqlChargeOrderStruct, error) {
|
||||
Order, err := db.GetPlayerChargeData(OrderSn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if Order.PayStatus == MergeConst.ORDER_STATUS_SHIP {
|
||||
return nil, fmt.Errorf("订单已经发货")
|
||||
}
|
||||
if !conf.Server.GoogleVerify {
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
return Order, nil
|
||||
}
|
||||
if Order.PayStatus != MergeConst.ORDER_STATUS_IDLE {
|
||||
return nil, fmt.Errorf("订单已经支付")
|
||||
}
|
||||
cmd := exec.Command(conf.Server.AppPath+"/script/verifyOrder", ProduceId, Token)
|
||||
|
||||
// 获取命令的输出
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// 将输出转换为字符串
|
||||
outputStr := string(output)
|
||||
|
||||
// 替换单引号为双引号
|
||||
outputStr = strings.Replace(outputStr, "'", "\"", -1)
|
||||
type VerifyData struct {
|
||||
PurchaseState int `json:"purchaseState"`
|
||||
DeveloperPayload string `json:"developerPayload"`
|
||||
OrderId string `json:"orderId"`
|
||||
ConsumptionState int `json:"consumptionState"`
|
||||
}
|
||||
r := &VerifyData{}
|
||||
err = json.Unmarshal([]byte(outputStr), &r)
|
||||
if err != nil {
|
||||
log.Debug("output %s", string(output))
|
||||
return nil, err
|
||||
}
|
||||
_, err = db.GetPlayerPayChannelOrderId(r.OrderId)
|
||||
if err == nil {
|
||||
return nil, fmt.Errorf("订单已支付发货 param: %v", r)
|
||||
}
|
||||
// if r.DeveloperPayload != OrderSn {
|
||||
// return nil, fmt.Errorf("订单号不匹配")
|
||||
// }
|
||||
if r.ConsumptionState != 1 {
|
||||
return nil, fmt.Errorf("订单未消费")
|
||||
}
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
Order.PayChannelOrderId = r.OrderId
|
||||
Order.PayTime = GoUtil.Now()
|
||||
return Order, nil
|
||||
}
|
||||
|
||||
func CancelOrder(p *Player, OrderSn string) error {
|
||||
Order, err := db.GetPlayerChargeData(OrderSn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if Order.PayStatus != MergeConst.ORDER_STATUS_IDLE {
|
||||
return fmt.Errorf("订单已支付")
|
||||
}
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_CANCEL
|
||||
err = db.UpdatePlayerChargeData(Order)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
|
||||
Uid := 0
|
||||
if CardInfo.Type == card.TYPE_CARD_SEND {
|
||||
@ -746,142 +602,8 @@ func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
|
||||
}
|
||||
}
|
||||
|
||||
func BackChampship(p *Player) {
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
|
||||
MyPreRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(p.M_DwUin))
|
||||
p.PushClientRes(ChampshipMod.BackData(MyRank, MyPreRank))
|
||||
}
|
||||
|
||||
func GetVisitorPlayer(p *Player) int {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
VisitorList := PlayroomMod.GetVisitor() // 到访用户
|
||||
TodayVisitedUsers := PlayroomMod.GetTodayVisitedUsers() // 今日已互动用户
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
type sortData struct {
|
||||
Uid int
|
||||
Time int64
|
||||
}
|
||||
PlayerList := make([]sortData, 0)
|
||||
PlayerList2 := make([]sortData, 0)
|
||||
Now := GoUtil.Now()
|
||||
/**
|
||||
排除当日玩家已对其发起过交互的用户
|
||||
优先选择24小时内曾经与玩家进行过宠物交互的好友
|
||||
若存在复数对象的情况下,优先选择交互发生时间与当前时间最近的好友
|
||||
若不存在符合条件的用户,则选择24小时内曾经与玩家进行过宠物交互的陌生用户
|
||||
若存在复数对象的情况下,优先选择交互发生时间与当前时间最近的用户
|
||||
若不存在符合条件的用户,则选择24小时内登入过游戏且上次登入时间与当前时间最近的好友
|
||||
若不存在符合条件的用户,则依据以上用户推荐算法,选择一位随机推荐用户,并且在下次触发式订单完成时,不再排除已发起过交互的用户
|
||||
*/
|
||||
for k, v := range VisitorList {
|
||||
if GoUtil.InArray(k, TodayVisitedUsers) {
|
||||
continue
|
||||
}
|
||||
if v.Time < Now-86400 {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(k) {
|
||||
PlayerList = append(PlayerList, sortData{k, v.Time})
|
||||
} else {
|
||||
PlayerList2 = append(PlayerList, sortData{k, v.Time})
|
||||
}
|
||||
}
|
||||
if len(PlayerList) != 0 {
|
||||
sort.Slice(PlayerList, func(i, j int) bool {
|
||||
return PlayerList[i].Time < PlayerList[j].Time
|
||||
})
|
||||
return PlayerList[0].Uid
|
||||
}
|
||||
if len(PlayerList2) != 0 {
|
||||
sort.Slice(PlayerList2, func(i, j int) bool {
|
||||
return PlayerList2[i].Time < PlayerList2[j].Time
|
||||
})
|
||||
return PlayerList2[0].Uid
|
||||
}
|
||||
// 若不存在符合条件的用户,则选择24小时内登入过游戏且上次登入时间与当前时间最近的好友
|
||||
var recentFriendUid int
|
||||
var recentLoginTime int64 = 0
|
||||
for uid := range FriendMod.GetFriendList() {
|
||||
if uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if GoUtil.InArray(uid, TodayVisitedUsers) {
|
||||
continue
|
||||
}
|
||||
ps := G_GameLogicPtr.GetSimplePlayerByUid(uid)
|
||||
if ps == nil {
|
||||
continue
|
||||
}
|
||||
if GoUtil.Now()-ps.Loginout > 86400 { // 24小时内登录过
|
||||
continue
|
||||
}
|
||||
if ps.Loginout > recentLoginTime {
|
||||
recentLoginTime = ps.Loginout
|
||||
recentFriendUid = uid
|
||||
}
|
||||
}
|
||||
if recentFriendUid != 0 {
|
||||
return recentFriendUid
|
||||
}
|
||||
PlayerList3 := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
||||
PlayerList4 := make([]int, 0)
|
||||
for _, v := range PlayerList3 {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if PlayerSimpleData.Level < 15 {
|
||||
continue
|
||||
}
|
||||
PlayerList4 = append(PlayerList4, v.Uid)
|
||||
}
|
||||
L := GoUtil.RandSliceNum(PlayerList4, 1)
|
||||
if len(L) == 0 {
|
||||
return 0
|
||||
}
|
||||
return L[0]
|
||||
}
|
||||
|
||||
func GetRecommendPlayer(p *Player, Num int) []int {
|
||||
PlayerList := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER)
|
||||
PlayerList1 := make([]int, 0)
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckSendApply(v.Uid) {
|
||||
continue
|
||||
}
|
||||
if FriendMod.CheckFriend(v.Uid) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
|
||||
if PlayerSimpleData == nil {
|
||||
continue
|
||||
}
|
||||
if GoUtil.Now()-PlayerSimpleData.Loginout > 86400 {
|
||||
continue
|
||||
}
|
||||
if PlayerSimpleData.Level < 4 {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
}
|
||||
if len(PlayerList1) == 0 {
|
||||
for _, v := range PlayerList {
|
||||
if v.Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerList1 = append(PlayerList1, v.Uid)
|
||||
}
|
||||
}
|
||||
return GoUtil.RandSliceNum(PlayerList1, Num)
|
||||
}
|
||||
|
||||
// 发射器退役第一步 不再生成此发射器订单
|
||||
func EmitRetireTrigger1(p *Player) {
|
||||
func (p *Player) EmitRetireTrigger1() {
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
EmitList := ChessMod.GetEmitList()
|
||||
EmitId := make(map[string]struct{}, 0)
|
||||
@ -911,7 +633,7 @@ func EmitRetireTrigger1(p *Player) {
|
||||
}
|
||||
|
||||
// 发射器退役第二步 生成清理订单
|
||||
func EmitRetireTrigger2(p *Player) {
|
||||
func (p *Player) EmitRetireTrigger2() {
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
@ -976,36 +698,6 @@ func EmitRetireTrigger2(p *Player) {
|
||||
}
|
||||
}
|
||||
|
||||
func Benchmark(player *Player) {
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
ChampshipMod.AddScore([]int{949, 941, 10})
|
||||
player.HandleInChampshipRank()
|
||||
player.HandleInUserRank()
|
||||
}
|
||||
|
||||
func GetUidByFaceBook(Fb string) (int, error) {
|
||||
sqlStr := "SELECT dwUin FROM t_player_baseinfo WHERE FaceBookId = ?"
|
||||
type Result struct {
|
||||
Uid int `db:"dwUin"`
|
||||
}
|
||||
R := Result{}
|
||||
err := db.SqlDb.Get(&R, sqlStr, Fb)
|
||||
log.Debug("Fb :%s;Uid :%d", Fb, R.Uid)
|
||||
return R.Uid, err
|
||||
}
|
||||
|
||||
func NotifyAllFriend(p *Player, m1 *msg.Msg) {
|
||||
m := m1.Clone()
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
for k := range FriendMod.GetFriendList() {
|
||||
if k == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
m.To = k
|
||||
FriendMgrSend(m)
|
||||
}
|
||||
}
|
||||
|
||||
func NotifyChampshipResult(Uid, Rank int) {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if PlayerSimpleData == nil {
|
||||
@ -110,7 +110,7 @@ func (p *Player) Send(m *MsgMod.Msg) {
|
||||
}
|
||||
|
||||
func (p *Player) Call(m MsgMod.Msg) {
|
||||
HandleMsg(p, &m)
|
||||
p.HandleMsg(m.Clone())
|
||||
}
|
||||
|
||||
func (p *Player) SendClientRes() {
|
||||
@ -239,28 +239,8 @@ func (p *Player) InitPlayer(UserName string) error {
|
||||
}
|
||||
p.PlayMod.mod_list = modData.ModList
|
||||
p.PlayMod.is_update = IsUpdate
|
||||
|
||||
go func() { // 处理数据回调
|
||||
var cb *timer.Timer
|
||||
for {
|
||||
select {
|
||||
case <-p.stopSignal:
|
||||
return
|
||||
case cb = <-p.MDispatr.ChanTimer:
|
||||
if cb != nil {
|
||||
cb.Cb()
|
||||
} else {
|
||||
log.Debug("Timer callback or Timer is nil")
|
||||
}
|
||||
case msg := <-p.msgChan:
|
||||
if msg != nil {
|
||||
p.wg.Done()
|
||||
log.Debug("player %d recive msg %v", p.M_DwUin, msg)
|
||||
go HandleMsg(p, msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
// 启动定时器
|
||||
p.DispatcherHandle()
|
||||
p.McronSave = cron.New()
|
||||
_, err = p.McronSave.AddFunc("@every 1m", p.AutoSaveData)
|
||||
if err != nil {
|
||||
@ -271,10 +251,8 @@ func (p *Player) InitPlayer(UserName string) error {
|
||||
p.ZeroUpdate(nil)
|
||||
p.NoonUpdate(nil)
|
||||
p.Login()
|
||||
// GoUtil.RegisterEvent(MergeConst.Notify_Daily_Renew, p.ZeroUpdate, p)
|
||||
// GoUtil.RegisterEvent(MergeConst.Notify_Midday_Renew, p.ZeroUpdate, p)
|
||||
p.OrderShip()
|
||||
SyncFriendMsg(p)
|
||||
p.SyncFriendMsg()
|
||||
p.UpdateUserInfo()
|
||||
// fix bug
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
@ -291,7 +269,7 @@ func (p *Player) OrderShip() {
|
||||
return
|
||||
}
|
||||
for _, OrderInfo := range OrderList {
|
||||
go TriggerShippingOrderOrigin(p, &msg.ReqShippingOrder{
|
||||
go p.TriggerShippingOrderOrigin(&msg.ReqShippingOrder{
|
||||
OrderSn: OrderInfo.OrderId,
|
||||
})
|
||||
}
|
||||
@ -347,10 +325,10 @@ func (p *Player) ZeroUpdate(a []interface{}) {
|
||||
if ChargeMod.IsWeeklyDiscountDay() {
|
||||
PlayroomMod.ResetWeeklyDiscount()
|
||||
}
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
p.PlayMod.getChampshipMod().ZeroUpdate()
|
||||
p.initAcitivity()
|
||||
ActivityZeroUpdate(p)
|
||||
p.ActivityZeroUpdate()
|
||||
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_LOGIN})
|
||||
p.PlayMod.save()
|
||||
}
|
||||
@ -387,9 +365,9 @@ func (p *Player) NoonUpdate(a []interface{}) {
|
||||
func (p *Player) Login() {
|
||||
// 添加定时器
|
||||
// 限时事件触发
|
||||
LimitedTimeEventTrigger(p, 0)
|
||||
p.LimitedTimeEventTrigger(0)
|
||||
// 猪猪银行触发
|
||||
LimitedTimePiggyBankTrigger(p)
|
||||
p.LimitedTimePiggyBankTrigger()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
FaceMod := p.PlayMod.getFaceMod()
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
@ -397,10 +375,10 @@ func (p *Player) Login() {
|
||||
PlayBaseMod := p.GetPlayerBaseMod()
|
||||
GuideTaskMod := p.PlayMod.getGuideTaskMod()
|
||||
// playroom触发
|
||||
LimitedTimePlayroomTrigger(p) // playroom数值变化
|
||||
p.LimitedTimePlayroomTrigger() // playroom数值变化
|
||||
LimitedTimePlayroomWorkTrigger(p) // playroom打工
|
||||
LimitedTimeEnergyAdd(p) // 能量定时处理
|
||||
ActivityLogin(p) // 活动登录
|
||||
p.ActivityLogin() // 活动登录
|
||||
p.Compensation()
|
||||
SyncMailMsg(p) // 同步邮件
|
||||
Duration := BaseMod.Login()
|
||||
@ -423,14 +401,14 @@ func (p *Player) Login() {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.ResetWeeklyDiscount()
|
||||
p.ChargeBackData()
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
}, "WeeklyDiscountStart")
|
||||
}
|
||||
if WeeklyEndTime > now {
|
||||
p.CallEvent(time.Duration(WeeklyEndTime-now)*time.Second, func() {
|
||||
ChargeMod.WeeklyEndTime = 0
|
||||
p.ChargeBackData()
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
LimitEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
LimitEventMod.EndCatDaySale()
|
||||
p.PushClientRes(LimitEventMod.BackData())
|
||||
@ -700,7 +678,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
Cd: int32(EffectList[1]),
|
||||
})
|
||||
// 触发订单事件 生成超级订单 卡牌节
|
||||
LimitedTimeEventTrigger(p, EffectList[0])
|
||||
p.LimitedTimeEventTrigger(EffectList[0])
|
||||
p.TeLog("time_limited_event_enable", map[string]interface{}{
|
||||
"event_type": limitedTimeEventCfg.GetEventName(EffectList[0]),
|
||||
"enable_type": Label,
|
||||
@ -709,7 +687,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
PiggyBankMod := p.PlayMod.getPiggyBankMod()
|
||||
Effect := itemCfg.GetItemEffect(v.Id)
|
||||
PiggyBankMod.AddPiggyBank(Effect)
|
||||
LimitedTimePiggyBankTrigger(p)
|
||||
p.LimitedTimePiggyBankTrigger()
|
||||
p.PushClientRes(PiggyBankMod.BackData())
|
||||
p.TeLog("piggy_bank_income", map[string]interface{}{
|
||||
"piggy_bank_type": Effect,
|
||||
@ -749,20 +727,20 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
p.PlayerDecoLog("face", Effect[0], Label)
|
||||
BackDataType[item.ITEM_TYPE_FACE] = struct{}{}
|
||||
case item.ITEM_TYPE_ACTIVITY_RACE: // 活动竞速
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_RACE)
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_RACE)
|
||||
if ActivityInfo == nil {
|
||||
continue
|
||||
}
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
RaceMod.AddCoin(v.Num)
|
||||
RaceBackData(p)
|
||||
p.RaceBackData()
|
||||
case item.ITEM_TYPE_PLAYROOM_VISIT: // 拜访玩家
|
||||
Target := GetVisitorPlayer(p)
|
||||
Target := p.GetVisitorPlayer()
|
||||
playroomMod := p.PlayMod.getPlayroomMod()
|
||||
playroomMod.Target = Target
|
||||
playroomMod.Status = playroom.STATUS_VISIT
|
||||
// PlayroomVisit(p, Target)
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
case item.ITEM_TYPE_PLAYROOM_DECORATION: // playroom装饰
|
||||
Effect := itemCfg.GetItemEffect(v.Id)
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
@ -824,13 +802,13 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
}
|
||||
BackDataType[item.ITEM_TYPE_PLAYROOM_DRESS_SET] = struct{}{}
|
||||
case item.ITEM_TYPE_ACT_PASS: // 活动通行证
|
||||
ActivityInfo := GetActivityInfo(p, activity.ACT_TYPE_PASS)
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo == nil {
|
||||
continue
|
||||
}
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
PassMod.AddExp(v.Num)
|
||||
ActPassBackData(p)
|
||||
p.ActPassBackData()
|
||||
default:
|
||||
err := ItemMod.AddItem(v.Id, v.Num)
|
||||
p.TeLog("asset_change", map[string]interface{}{
|
||||
@ -860,16 +838,16 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
for k := range BackDataType {
|
||||
switch k {
|
||||
case item.ITEM_TYPE_AVATAR:
|
||||
BackUserInfo(p)
|
||||
p.BackUserInfo()
|
||||
case item.ITEM_TYPE_EMOJI:
|
||||
BackUserInfo(p)
|
||||
p.BackUserInfo()
|
||||
case item.ITEM_TYPE_FACE:
|
||||
BackUserInfo(p)
|
||||
p.BackUserInfo()
|
||||
case item.ITEM_TYPE_PLAYROOM_DECORATION,
|
||||
item.ITEM_TYPE_PLAYROOM_DRESS,
|
||||
item.ITEM_TYPE_PLAYROOM_DECORATION_SET,
|
||||
item.ITEM_TYPE_PLAYROOM_DRESS_SET:
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
}
|
||||
}
|
||||
p.PetItemUseLog(itemList)
|
||||
@ -906,8 +884,8 @@ func (p *Player) LoginBackData() {
|
||||
p.PushClientRes(p.PlayMod.mod_list.Guide.BackData())
|
||||
p.BackDataActivity()
|
||||
p.ChargeBackData()
|
||||
BackChampship(p)
|
||||
BackUserInfo(p)
|
||||
p.BackChampship()
|
||||
p.BackUserInfo()
|
||||
}
|
||||
|
||||
func (p *Player) InitPlayerOnly() {
|
||||
@ -1126,7 +1104,7 @@ func (p *Player) BackDataActivity() {
|
||||
}
|
||||
|
||||
func (p *Player) GetRed(AI *ActivityInfo) int {
|
||||
Status := GetActivityStatus(p, AI.Type)
|
||||
Status := p.GetActivityStatus(AI.Type)
|
||||
if Status != ACT_STATUS_START {
|
||||
return 0
|
||||
}
|
||||
@ -1143,8 +1121,8 @@ func (p *Player) GetRed(AI *ActivityInfo) int {
|
||||
}
|
||||
|
||||
func (p *Player) NotifyRed(actType int) {
|
||||
ActivityInfo := GetActivityInfo(p, actType)
|
||||
Status := GetActivityStatus(p, actType)
|
||||
ActivityInfo := p.GetActivityInfo(actType)
|
||||
Status := p.GetActivityStatus(actType)
|
||||
if Status != ACT_STATUS_START {
|
||||
return
|
||||
}
|
||||
@ -1192,3 +1170,27 @@ func (p *Player) GetIp() string {
|
||||
}
|
||||
return p.GetAgent().RemoteAddr().String()
|
||||
}
|
||||
|
||||
func (p *Player) DispatcherHandle() {
|
||||
go func() {
|
||||
var cb *timer.Timer
|
||||
for {
|
||||
select {
|
||||
case <-p.stopSignal:
|
||||
return
|
||||
case cb = <-p.MDispatr.ChanTimer:
|
||||
if cb != nil {
|
||||
cb.Cb()
|
||||
} else {
|
||||
log.Debug("Timer callback or Timer is nil")
|
||||
}
|
||||
case msg := <-p.msgChan:
|
||||
if msg != nil {
|
||||
p.wg.Done()
|
||||
log.Debug("player %d recive msg %v", p.M_DwUin, msg)
|
||||
go p.HandleMsg(msg.Clone())
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ func (p *Player) NotifyPlayroomTask() {
|
||||
p.PushClientRes(m)
|
||||
}
|
||||
|
||||
func PlayroomBackData(p *Player) {
|
||||
func (p *Player) PlayroomBackData() {
|
||||
r := &proto.ResPlayroom{}
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
@ -27,7 +27,7 @@ func PlayroomBackData(p *Player) {
|
||||
Opponent := make([]*proto.RoomOpponent, 0)
|
||||
FriendList := make([]*proto.FriendRoom, 0)
|
||||
if PlayroomMod.Target == 0 {
|
||||
PlayroomMod.Target = GetVisitorPlayer(p)
|
||||
PlayroomMod.Target = p.GetVisitorPlayer()
|
||||
}
|
||||
TargerRoom := &proto.FriendRoom{}
|
||||
if PlayroomMod.Target != 0 {
|
||||
@ -163,7 +163,7 @@ func PlayroomBackData(p *Player) {
|
||||
p.PushClientRes(r)
|
||||
}
|
||||
|
||||
func PlayroomVisit(p *Player, Uid int) {
|
||||
func (p *Player) PlayroomVisit(Uid int) {
|
||||
if Uid == 0 {
|
||||
p.PushClientRes(&proto.ResPlayroomInfo{})
|
||||
return
|
||||
@ -211,7 +211,7 @@ func (p *Player) NotifyPlayroomKiss() {
|
||||
p.PushClientRes(m)
|
||||
}
|
||||
|
||||
func BackUserInfo(p *Player) {
|
||||
func (p *Player) BackUserInfo() {
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
FaceMod := p.PlayMod.getFaceMod()
|
||||
AvatarMod := p.PlayMod.getAvatarMod()
|
||||
@ -294,3 +294,109 @@ func (p *Player) ChargeBackData() {
|
||||
WeeklyEndTime: max(c.WeeklyEndTime, CatDaySaleEndTime),
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) BackChampship() {
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(int(p.M_DwUin))
|
||||
MyPreRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(p.M_DwUin))
|
||||
p.PushClientRes(ChampshipMod.BackData(MyRank, MyPreRank))
|
||||
}
|
||||
|
||||
// 返回好友信息
|
||||
func (p *Player) FriendListBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var fl []*proto.ResPlayerSimple
|
||||
for k, v := range FriendMod.GetFriendList() {
|
||||
if k == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
ps.AddTime = v.AddTime
|
||||
ps.Interact = FriendMod.GetInteractTime(k)
|
||||
fl = append(fl, ps)
|
||||
}
|
||||
}
|
||||
ReqFriendList := make([]int64, 0)
|
||||
for k := range FriendMod.SendApply {
|
||||
ReqFriendList = append(ReqFriendList, int64(k))
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendList{
|
||||
FriendList: fl,
|
||||
ReqApplyList: ReqFriendList,
|
||||
Npc: GoUtil.IntToInt32(FriendMod.GetNpc()),
|
||||
Sponsor: int32(FriendMod.GetSponsor()),
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) FriendApplyBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var al []*proto.ResFriendApplyInfo
|
||||
for k, v := range FriendMod.ApplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
if ps != nil {
|
||||
al = append(al, &proto.ResFriendApplyInfo{
|
||||
Player: ps,
|
||||
Time: int32(v),
|
||||
})
|
||||
}
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendApply{
|
||||
ApplyList: al,
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) FriendLogBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var log []*proto.ResFriendLog
|
||||
for _, v := range FriendMod.Log {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
ps = &proto.ResPlayerSimple{
|
||||
Uid: int64(v.Uid),
|
||||
}
|
||||
}
|
||||
log = append(log, &proto.ResFriendLog{
|
||||
Player: ps,
|
||||
Type: int32(v.Type),
|
||||
Time: int32(v.Time),
|
||||
Param: v.Param,
|
||||
Id: int32(v.Id),
|
||||
Upvote: v.Upvote,
|
||||
})
|
||||
}
|
||||
var reply []*proto.ResFriendReply
|
||||
for _, v := range FriendMod.ReplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
ps = &proto.ResPlayerSimple{
|
||||
Uid: int64(v.Uid),
|
||||
}
|
||||
}
|
||||
reply = append(reply, &proto.ResFriendReply{
|
||||
Player: ps,
|
||||
Type: int32(v.Type),
|
||||
Param: v.Param,
|
||||
Id: int32(v.Id),
|
||||
Status: int32(v.Status),
|
||||
AddTime: v.AddTime,
|
||||
EndTime: v.EndTime,
|
||||
})
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendTimeLine{
|
||||
Log: log,
|
||||
Reply: reply,
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) FriendCardBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
var msgList []*proto.ResFriendCard
|
||||
for _, v := range FriendMod.Card {
|
||||
m := GetCardInfoMsg(v)
|
||||
msgList = append(msgList, m)
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendCardMsg{
|
||||
MsgList: msgList,
|
||||
})
|
||||
}
|
||||
|
||||
@ -562,7 +562,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error)
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
EmitRetireTrigger2(player)
|
||||
player.EmitRetireTrigger2()
|
||||
player.InitOrderItem()
|
||||
player.PushClientRes(p.BackAsset())
|
||||
return upLv, nil
|
||||
|
||||
@ -129,6 +129,24 @@ func (p *PlayerChessData) UpdateChessData(player *Player, MChessData map[string]
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *PlayerChessData) UpdateChessDataTest(player *Player, MChessData map[string]int32) error {
|
||||
p.Data.MChessData = MChessData
|
||||
if true {
|
||||
res := &msg.ResUpdatePlayerChessData{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "棋子数据不一致",
|
||||
}
|
||||
log.Debug("棋子数据不一致, %v---%v", p.Data.MChessData, player.PlayMod.getChessMod().GetChessList())
|
||||
player.SendErrClienRes(res)
|
||||
player.TeLog("outsync_event", map[string]interface{}{
|
||||
"outsync_event": "UpdatePlayerChessDataFunc",
|
||||
})
|
||||
return fmt.Errorf("棋子数据不一致")
|
||||
}
|
||||
player.PlayMod.getChessMod().ChessMap = MChessData
|
||||
return nil
|
||||
}
|
||||
|
||||
// 检查棋子数据是否一致
|
||||
func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||
if len(p.Data.MChessData) == 0 && conf.Server.GameName == "Merge_Pet_Local" {
|
||||
@ -207,7 +225,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
|
||||
player.PushClientRes(HandbookMod.BackData())
|
||||
triggerComposeChess(player, NewChessId, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList())
|
||||
// 获取活动道具
|
||||
ActItem := GetActivityItem(player, GoUtil.Int32ToInt(v.ActType))
|
||||
ActItem := player.GetActivityItem(GoUtil.Int32ToInt(v.ActType))
|
||||
itemList = item.Merge(itemList, ActItem)
|
||||
case msg.HANDLE_TYPE_BUY: //购买棋子
|
||||
loseGold, err := ChessMod.BuyChess(ChessId)
|
||||
@ -287,7 +305,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
}
|
||||
player.QuestTriggerList(TriggerList)
|
||||
EmitRetireTrigger1(player)
|
||||
player.EmitRetireTrigger1()
|
||||
player.InitOrderItem()
|
||||
player.PushClientRes(ChessMod.BackData())
|
||||
player.PlayMod.save()
|
||||
|
||||
@ -1,62 +0,0 @@
|
||||
package game
|
||||
|
||||
// "fmt"
|
||||
|
||||
// "math"
|
||||
|
||||
type PlayerDataModule interface {
|
||||
LoadDataFromDB(key interface{}) bool
|
||||
SaveDataFromDB(key interface{}) bool
|
||||
SetPlayer(p *Player)
|
||||
GetPlayer() *Player
|
||||
GetData() interface{}
|
||||
ClearData() bool
|
||||
Reconnect(bool)
|
||||
AutoSaveInterval()
|
||||
}
|
||||
|
||||
type PlayerData struct {
|
||||
Name string
|
||||
IsHaveDataDb bool
|
||||
M_Player *Player
|
||||
}
|
||||
|
||||
func (d *PlayerData) SetPlayer(p *Player) {
|
||||
d.M_Player = p
|
||||
}
|
||||
|
||||
func (d *PlayerData) GetPlayer() *Player {
|
||||
return d.M_Player
|
||||
}
|
||||
|
||||
func (d *PlayerData) Reconnect(b bool) {
|
||||
|
||||
}
|
||||
func (d *PlayerData) AutoSaveInterval() {
|
||||
|
||||
}
|
||||
|
||||
func (d *PlayerData) LoadDataFromDB(UserName interface{}) bool {
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func (d *PlayerData) SaveDataFromDB(Key interface{}) bool {
|
||||
|
||||
return true
|
||||
}
|
||||
func (d *PlayerData) ClearData() bool {
|
||||
|
||||
return true
|
||||
}
|
||||
func (d *PlayerData) GetData() interface{} {
|
||||
res := struct{}{}
|
||||
return res
|
||||
}
|
||||
|
||||
func NewPlayerData(name string, player *Player) *PlayerData {
|
||||
return &PlayerData{
|
||||
Name: name,
|
||||
M_Player: player,
|
||||
}
|
||||
}
|
||||
@ -44,6 +44,32 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type PlayerData struct {
|
||||
Name string
|
||||
IsHaveDataDb bool
|
||||
M_Player *Player
|
||||
}
|
||||
|
||||
func (d *PlayerData) SetPlayer(p *Player) {
|
||||
d.M_Player = p
|
||||
}
|
||||
|
||||
func (d *PlayerData) GetPlayer() *Player {
|
||||
return d.M_Player
|
||||
}
|
||||
|
||||
func (d *PlayerData) GetData() interface{} {
|
||||
res := struct{}{}
|
||||
return res
|
||||
}
|
||||
|
||||
func NewPlayerData(name string, player *Player) *PlayerData {
|
||||
return &PlayerData{
|
||||
Name: name,
|
||||
M_Player: player,
|
||||
}
|
||||
}
|
||||
|
||||
type PlayerModData struct {
|
||||
*PlayerData
|
||||
Data db.SqlModStruct
|
||||
|
||||
@ -1,23 +0,0 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"server/GoUtil"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/msg"
|
||||
)
|
||||
|
||||
func (p *Player) CatnipGrowthMsg(To, Id, Growth int) error {
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
FriendMgrSend(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
To: To,
|
||||
Type: msg.HANDLE_TYPE_CATNIP_GROWTH,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: CatnipMsg{
|
||||
ActivityId: ActivityId,
|
||||
GameId: Id,
|
||||
Growth: Growth,
|
||||
},
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@ -290,7 +290,7 @@ func ReqRewardOrder(player *Player, buf []byte) error {
|
||||
if OrderType == order.Pet_type {
|
||||
Item = player.FormatPetOrderItem(Item)
|
||||
}
|
||||
ActItem := GetActivityItem(player, GoUtil.Int32ToInt(req.ActType))
|
||||
ActItem := player.GetActivityItem(GoUtil.Int32ToInt(req.ActType))
|
||||
Item = item.Merge(Item, ActItem)
|
||||
if !OrderMod.CheckSuperOrder() {
|
||||
if LimitedTimeEventMod.RemoveSuperOrder() {
|
||||
@ -408,11 +408,11 @@ func ReqRewardOrder(player *Player, buf []byte) error {
|
||||
"preset_order_step": preset_order_step,
|
||||
})
|
||||
player.PetItemGetLog(Item, nil, "Order")
|
||||
EmitRetireTrigger2(player)
|
||||
player.EmitRetireTrigger2()
|
||||
Lv := player.GetPlayerBaseMod().GetLevel()
|
||||
EnergyMul := player.PlayMod.getBaseMod().GetEnergyMul()
|
||||
Emit := ChessMod.GetOrderEmit()
|
||||
TriggerSeedSource(player)
|
||||
player.TriggerSeedSource()
|
||||
//NewOrder := TriggerSeedOrder(player)
|
||||
// if NewOrder == nil || len(NewOrder.MergeId) == 0 {
|
||||
// OrderMod.CreateOrder(Lv, Emit, EnergyMul)
|
||||
@ -452,7 +452,7 @@ func ReqRewardOrder(player *Player, buf []byte) error {
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(PiggyBankMod.BackData())
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
BackChampship(player)
|
||||
player.BackChampship()
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
player.PushClientRes(ChessMod.BackData())
|
||||
player.PushClientRes(LimitedTimeEventMod.ProgressBackData())
|
||||
@ -578,7 +578,7 @@ func ReqDecorate(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.HandleInUserRank()
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
player.UpdateUserInfo()
|
||||
return nil
|
||||
}
|
||||
@ -651,13 +651,39 @@ func ReqDecorateAll(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.HandleInUserRank()
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
player.UpdateUserInfo()
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqDecorateReward(player *Player, buf []byte) error {
|
||||
|
||||
func ReqAreaReward(player *Player, buf []byte) error {
|
||||
req := &msg.ReqAreaReward{}
|
||||
err := proto.Unmarshal(buf, req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
DecorateMod := player.PlayMod.getDecorateMod()
|
||||
RewardItem, err := DecorateMod.GetDecorateReward(int(req.AreaId))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResAreaReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleItem(RewardItem, msg.ITEM_POP_LABEL_DecorateReward.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResAreaReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.PushClientRes(&msg.ResAreaReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PushClientRes(DecorateMod.BackData())
|
||||
player.PlayMod.save()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -666,7 +692,7 @@ func ReqDecorateReward(player *Player, buf []byte) error {
|
||||
func UpdatePlayerChessDataFunc(player *Player, buf []byte) error {
|
||||
data := &PlayerChessData{}
|
||||
err := data.UpdatePlayerChessData(player, buf)
|
||||
RedBackData(player)
|
||||
player.RedBackData()
|
||||
player.UpdateUserInfo()
|
||||
return err
|
||||
}
|
||||
@ -714,7 +740,7 @@ func ReqGetChessFromBuff(player *Player, buf []byte) error {
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
}
|
||||
triggerComposeChess(player, ChessId, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList())
|
||||
EmitRetireTrigger1(player)
|
||||
player.EmitRetireTrigger1()
|
||||
player.InitOrderItem()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(ChessMod.BackData())
|
||||
@ -1494,7 +1520,7 @@ func ReqSetAvatar(player *Player, buf []byte) error {
|
||||
player.PushClientRes(&msg.ResSetAvatar{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
player.UpdateUserInfo()
|
||||
b := false
|
||||
if req.Avatar == 0 {
|
||||
@ -1537,7 +1563,7 @@ func ReqSetFace(player *Player, buf []byte) error {
|
||||
"is_platform": is_platform,
|
||||
})
|
||||
player.PlayerDecoSetLog("face", int(req.Face), "")
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
player.UpdateUserInfo()
|
||||
return nil
|
||||
}
|
||||
@ -1894,7 +1920,7 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -1922,7 +1948,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
FriendMod.AddFriend(Uid)
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600)
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600, nil)
|
||||
player.PushClientRes(&msg.ResAgreeFriend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
@ -1933,12 +1959,12 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
"add_type": "接受申请",
|
||||
})
|
||||
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now())
|
||||
FriendApplyBackData(player)
|
||||
FriendLogBackData(player)
|
||||
player.FriendApplyBackData()
|
||||
player.FriendLogBackData()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PlayMod.save()
|
||||
return nil
|
||||
}
|
||||
@ -1966,7 +1992,7 @@ func ReqDelFriend(player *Player, buf []byte) error {
|
||||
Uid: req.Uid,
|
||||
})
|
||||
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_DELETE, "", GoUtil.Now())
|
||||
FriendListBackData(player)
|
||||
player.FriendListBackData()
|
||||
player.TeLog("friend_delete", map[string]interface{}{
|
||||
"player_id": Uid,
|
||||
})
|
||||
@ -1995,7 +2021,7 @@ func ReqRefuseFriend(player *Player, buf []byte) error {
|
||||
SendT: GoUtil.Now(),
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
FriendApplyBackData(player)
|
||||
player.FriendApplyBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -2907,7 +2933,7 @@ func ReqCreateOrderSn(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
OrderSn, err := CreateOrderSn(player, req)
|
||||
OrderSn, err := player.CreateOrderSn(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -2926,7 +2952,7 @@ func ReqShippingOrder(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
go TriggerShippingOrder(player, req)
|
||||
go player.TriggerShippingOrder(req)
|
||||
player.PushClientRes(&msg.ResShippingOrder{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -2946,8 +2972,8 @@ func ReqChampshipReward(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
BackChampship(player)
|
||||
TriggerSeed(player)
|
||||
player.BackChampship()
|
||||
player.TriggerSeed()
|
||||
player.PushClientRes(&msg.ResChampshipReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -3017,22 +3043,22 @@ func ReqFriendRecommend(player *Player, buf []byte) error {
|
||||
}
|
||||
|
||||
func ReqFriendList(player *Player, buf []byte) error {
|
||||
FriendListBackData(player)
|
||||
player.FriendListBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqFriendApply(player *Player, buf []byte) error {
|
||||
FriendApplyBackData(player)
|
||||
player.FriendApplyBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqFriendCardMsg(player *Player, buf []byte) error {
|
||||
FriendCardBackData(player)
|
||||
player.FriendCardBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqFriendTimeLine(player *Player, buf []byte) error {
|
||||
FriendLogBackData(player)
|
||||
player.FriendLogBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3133,7 +3159,7 @@ func ReqChampshipRankReward(player *Player, buf []byte) error {
|
||||
FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_CHAMPIONSHIP_RANK, GoUtil.String(MyLastRank))
|
||||
}
|
||||
player.PlayMod.save()
|
||||
BackChampship(player)
|
||||
player.BackChampship()
|
||||
player.PushClientRes(&msg.ResChampshipRankReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -3159,7 +3185,7 @@ func ReqSetName(player *Player, buf []byte) error {
|
||||
ResultCode: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
player.UpdateUserInfo()
|
||||
player.TeLog("nickname_set", map[string]interface{}{
|
||||
"nickname_name": req.Name,
|
||||
@ -3179,10 +3205,10 @@ func ReqSetPetName(player *Player, buf []byte) error {
|
||||
ResultCode: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.UnLock(BaseMod.GetLevel())
|
||||
LimitedTimePlayroomTrigger(player)
|
||||
player.LimitedTimePlayroomTrigger()
|
||||
player.UpdateUserInfo()
|
||||
player.TeLog("petname_set", map[string]interface{}{
|
||||
"petname": req.Name,
|
||||
@ -3191,7 +3217,7 @@ func ReqSetPetName(player *Player, buf []byte) error {
|
||||
}
|
||||
|
||||
func ReqUserInfo(player *Player, buf []byte) error {
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3327,7 +3353,7 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error {
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": req.Id,
|
||||
"add_type": "邀请注册",
|
||||
@ -3371,7 +3397,7 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error {
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.TeLog("friend_add", map[string]interface{}{
|
||||
"player_id": req.Id,
|
||||
"add_type": "邀请注册",
|
||||
@ -3419,7 +3445,7 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error {
|
||||
|
||||
// 请求挖矿基础数据
|
||||
func ReqMining(player *Player, buf []byte) error {
|
||||
MiningBackData(player)
|
||||
player.MiningBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3431,8 +3457,8 @@ func ReqMiningTake(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
MiningMod := player.PlayMod.getMiningMod()
|
||||
ActivityInfo := GetActivityInfo(player, activity.ACT_TYPE_MINING)
|
||||
Status := GetActivityStatus(player, activity.ACT_TYPE_MINING)
|
||||
ActivityInfo := player.GetActivityInfo(activity.ACT_TYPE_MINING)
|
||||
Status := player.GetActivityStatus(activity.ACT_TYPE_MINING)
|
||||
if Status != ACT_STATUS_START {
|
||||
player.SendErrClienRes(&msg.ResMiningTake{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -3468,14 +3494,14 @@ func ReqMiningTake(player *Player, buf []byte) error {
|
||||
player.TeLog("ReqMiningTake", map[string]interface{}{})
|
||||
player.PlayMod.save()
|
||||
player.NotifyRed(activity.ACT_TYPE_MINING)
|
||||
MiningBackData(player)
|
||||
player.MiningBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
// 领取关卡奖励
|
||||
func ReqMiningReward(player *Player, buf []byte) error {
|
||||
MiningMod := player.PlayMod.getMiningMod()
|
||||
Status := GetActivityStatus(player, activity.ACT_TYPE_MINING)
|
||||
Status := player.GetActivityStatus(activity.ACT_TYPE_MINING)
|
||||
if Status != ACT_STATUS_START {
|
||||
player.SendErrClienRes(&msg.ResMiningReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -3507,7 +3533,7 @@ func ReqMiningReward(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
MiningBackData(player)
|
||||
player.MiningBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3525,7 +3551,7 @@ func ReqGuessColor(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
GuessColorBackData(player)
|
||||
player.GuessColorBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3536,7 +3562,7 @@ func ReqGuessColorTake(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
Status := GetActivityStatus(player, activity.ACT_TYPE_GUESS_COLOR)
|
||||
Status := player.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR)
|
||||
if Status != ACT_STATUS_START {
|
||||
player.SendErrClienRes(&msg.ResGuessColorTake{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -3554,13 +3580,17 @@ func ReqGuessColorTake(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
GuessColorMod.Take(req.Map.Map, req.OMap)
|
||||
var M map[int32]int32
|
||||
if req.Map != nil {
|
||||
M = req.Map.Map
|
||||
}
|
||||
GuessColorMod.Take(M, req.OMap)
|
||||
player.TeLog("ReqGuessColorTake", map[string]interface{}{
|
||||
"map": req.Map.Map,
|
||||
"o_map": req.OMap,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
GuessColorBackData(player)
|
||||
player.GuessColorBackData()
|
||||
player.NotifyRed(activity.ACT_TYPE_GUESS_COLOR)
|
||||
return nil
|
||||
}
|
||||
@ -3572,7 +3602,7 @@ func ReqGuessColorReward(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
Status := GetActivityStatus(player, activity.ACT_TYPE_GUESS_COLOR)
|
||||
Status := player.GetActivityStatus(activity.ACT_TYPE_GUESS_COLOR)
|
||||
if Status != ACT_STATUS_START {
|
||||
player.SendErrClienRes(&msg.ResGuessColorReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -3601,13 +3631,13 @@ func ReqGuessColorReward(player *Player, buf []byte) error {
|
||||
"item_list": itemList,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
GuessColorBackData(player)
|
||||
player.GuessColorBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
// 请求竞赛基础数据
|
||||
func ReqRace(player *Player, buf []byte) error {
|
||||
RaceBackData(player)
|
||||
player.RaceBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3627,7 +3657,7 @@ func ReqRaceStart(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
RaceBackData(player)
|
||||
player.RaceBackData()
|
||||
player.PushClientRes(&msg.ResRaceStart{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -3658,7 +3688,7 @@ func ReqRaceReward(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
RaceBackData(player)
|
||||
player.RaceBackData()
|
||||
player.TeLog("ReqRaceReward", map[string]interface{}{
|
||||
"item_list": Items,
|
||||
})
|
||||
@ -3670,7 +3700,7 @@ func ReqRaceReward(player *Player, buf []byte) error {
|
||||
|
||||
// 请求playroom基础数据
|
||||
func ReqPlayroom(player *Player, buf []byte) error {
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3687,10 +3717,10 @@ func ReqPlayroomInfo(player *Player, buf []byte) error {
|
||||
Targer = PlayroomMod.GetTarget()
|
||||
}
|
||||
if req.Uid == -1 {
|
||||
Targer = GetVisitorPlayer(player)
|
||||
Targer = player.GetVisitorPlayer()
|
||||
}
|
||||
if Targer == 0 {
|
||||
PlayroomVisit(player, Targer)
|
||||
player.PlayroomVisit(Targer)
|
||||
return nil
|
||||
}
|
||||
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer)
|
||||
@ -3729,7 +3759,7 @@ func ReqPlayroomInfo(player *Player, buf []byte) error {
|
||||
PlayroomMod.SetGameRewardFlip(int(float64(PlayerData.Star)*0.03), int(float64(PlayerData.Star)*0.05), int(float64(PlayerData.Star)*0.1))
|
||||
}
|
||||
player.PlayMod.save()
|
||||
PlayroomVisit(player, Targer)
|
||||
player.PlayroomVisit(Targer)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -3773,7 +3803,7 @@ func ReqPlayroomInteract(player *Player, buf []byte) error {
|
||||
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_INTERACT, A: []interface{}{int(req.Id)}})
|
||||
player.PlayMod.save()
|
||||
G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_KISS, 0)
|
||||
LimitedTimePlayroomTrigger_(player, PType)
|
||||
player.LimitedTimePlayroomTrigger_(PType)
|
||||
player.NotifyPlayroomKiss()
|
||||
player.TeLog("playroom_interact", map[string]interface{}{
|
||||
"interact_id": int(req.Id),
|
||||
@ -3859,7 +3889,7 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
|
||||
"item_list": Items,
|
||||
})
|
||||
PlayroomMod.ResetGame()
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_game")
|
||||
player.PushClientRes(&msg.ResPlayroomGame{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -3921,7 +3951,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
|
||||
FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE_1, "")
|
||||
PlayroomMod.ResetGame()
|
||||
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward")
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResPlayroomSelectReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -3972,7 +4002,7 @@ func ReqPlayroomWork(player *Player, buf []byte) error {
|
||||
})
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(PlayroomMod.NotifyWork())
|
||||
// PlayroomBackData(player)
|
||||
// player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomWork{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4011,7 +4041,7 @@ func ReqPlayroomDraw(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
// PlayroomBackData(player)
|
||||
// player.PlayroomBackData()
|
||||
player.PushClientRes(PlayroomMod.NotifyMood())
|
||||
player.TeLog("playroom_draw", map[string]interface{}{
|
||||
"draw_id": Id,
|
||||
@ -4054,7 +4084,7 @@ func ReqPlayroomChip(player *Player, buf []byte) error {
|
||||
|
||||
G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_CHIP_SET, len(PlayroomMod.ChipList))
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomChip{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4083,7 +4113,7 @@ func ReqPlayroomFlip(player *Player, buf []byte) error {
|
||||
"Id": req.Id,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomFlip{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
@ -4142,7 +4172,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
|
||||
})
|
||||
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_flip_reward")
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomFlipReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4261,7 +4291,7 @@ func ReqPlayroomUnlock(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: int32(req.Id),
|
||||
})
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -4298,7 +4328,7 @@ func ReqPlayroomTask(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: int32(req.Id),
|
||||
})
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -4477,7 +4507,7 @@ func ReqPlayroomShop(player *Player, buf []byte) error {
|
||||
player.PetItemGetLog(AddItems, LoseItem, "Shop")
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(PlayroomMod.NotifyMood())
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomShop{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4695,7 +4725,7 @@ func ReqSetEmoji(player *Player, buf []byte) error {
|
||||
player.PushClientRes(&msg.ResSetEmoji{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -4794,7 +4824,7 @@ func ReqPlayroomDressSet(player *Player, buf []byte) error {
|
||||
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETDRESS, A: []interface{}{Parts}})
|
||||
player.PlayMod.save()
|
||||
//player.PetDecoSetLog(Diff)
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomDressSet{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4817,7 +4847,7 @@ func ReqPlayroomPetAirSet(player *Player, buf []byte) error {
|
||||
return error
|
||||
}
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.PushClientRes(&msg.ResPlayroomPetAirSet{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4873,7 +4903,7 @@ func ReqActivityReward(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ActivityInfo := GetActivityInfo(player, int(req.Id))
|
||||
ActivityInfo := player.GetActivityInfo(int(req.Id))
|
||||
if ActivityInfo == nil {
|
||||
player.SendErrClienRes(&msg.ResActivityReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -4980,17 +5010,17 @@ func ReqAddNpc(player *Player, buf []byte) error {
|
||||
InviteMod.AddInvite(int(req.NpcId))
|
||||
}
|
||||
player.PlayMod.save()
|
||||
FriendListBackData(player)
|
||||
player.FriendListBackData()
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel())
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
PlayroomBackData(player)
|
||||
player.PlayroomBackData()
|
||||
player.TeLog("add_npc", map[string]interface{}{
|
||||
"NpcId": int(req.NpcId),
|
||||
})
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600)
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "", GoUtil.Now()+24*3600)
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600, nil)
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "", GoUtil.Now()+24*3600, nil)
|
||||
player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now())
|
||||
player.PushClientRes(&msg.ResAddNpc{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -5344,10 +5374,17 @@ func ReqCatnipInvite(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
ActivityId := GetActivityId(player, activity.ACT_TYPE_MINING)
|
||||
ActivityInfo := GetActivityInfo(player, ActivityId)
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipInvite{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
ActivityInfo := player.GetActivityInfo(ActivityId)
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
err = CatnipMod.Invite(int(req.Id), int(req.Uid))
|
||||
err = CatnipMod.Invite(int(req.Uid), int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipInvite{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -5355,7 +5392,7 @@ func ReqCatnipInvite(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_invite", map[string]interface{}{
|
||||
player.TeLog("cats_garden_invite", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
})
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
@ -5369,10 +5406,11 @@ func ReqCatnipInvite(player *Player, buf []byte) error {
|
||||
},
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipInvite{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@ -5384,8 +5422,15 @@ func ReqCatnipAgree(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
ActivityId := GetActivityId(player, activity.ACT_TYPE_MINING)
|
||||
UserList, err := CatnipMod.Agree(int(req.Id), int(req.Uid))
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipAgree{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
_, err = CatnipMod.Agree(int(req.Id), int(req.Uid))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipAgree{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -5401,7 +5446,7 @@ func ReqCatnipAgree(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_agree", map[string]interface{}{
|
||||
player.TeLog("cats_garden_accept_invite", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
})
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
@ -5414,23 +5459,11 @@ func ReqCatnipAgree(player *Player, buf []byte) error {
|
||||
},
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
|
||||
for _, v := range UserList {
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: int(v),
|
||||
Type: MsqMod.HANDLE_TYPE_CATNIP_AGREE,
|
||||
Extra: CatnipMsg{
|
||||
ActivityId: ActivityId,
|
||||
GameId: int(req.Id),
|
||||
},
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
}
|
||||
player.CatnipBackData()
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipAgree{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@ -5443,6 +5476,14 @@ func ReqCatnipMultiply(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipMultiply{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
err = CatnipMod.Multiply(int(req.Multiply))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipMultiply{
|
||||
@ -5454,10 +5495,11 @@ func ReqCatnipMultiply(player *Player, buf []byte) error {
|
||||
player.TeLog("catnip_multiply", map[string]interface{}{
|
||||
"Mul": int(req.Multiply),
|
||||
})
|
||||
player.CatnipBackData()
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipMultiply{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Multiply: req.Multiply,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@ -5470,7 +5512,15 @@ func ReqCatnipPlay(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
Id, Growth, PartnerId, Items, ItemCost, err := CatnipMod.Play(int(req.Id))
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
Id, Growth, PartnerId, Items, ItemCost, FriendItems, err := CatnipMod.Play(int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -5484,6 +5534,7 @@ func ReqCatnipPlay(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_CatnipPlay.String())
|
||||
if err != nil {
|
||||
@ -5491,17 +5542,18 @@ func ReqCatnipPlay(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_play", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
"Growth": Growth,
|
||||
"PartnerId": PartnerId,
|
||||
"Items": Items,
|
||||
player.TeLog("cats_garden_expend_token", map[string]interface{}{
|
||||
"friends_ID": PartnerId,
|
||||
"multiple": CatnipMod.GetMultiple(),
|
||||
"expend_num": ItemCost[0].Num,
|
||||
"get_award": Items,
|
||||
})
|
||||
if Growth > 0 {
|
||||
player.CatnipGrowthMsg(PartnerId, int(req.Id), Growth)
|
||||
player.CatnipGrowthMsg(PartnerId, int(req.Id), Growth, FriendItems*CatnipMod.Mul)
|
||||
}
|
||||
player.CatnipBackData()
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -5518,7 +5570,15 @@ func ReqCatnipReward(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
Items, err := CatnipMod.Reward(int(req.Id), int(req.Progress))
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
Items, GameInfo, err := CatnipMod.Reward(int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -5534,12 +5594,13 @@ func ReqCatnipReward(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_reward", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
"Progress": int(req.Progress),
|
||||
"Items": Items,
|
||||
player.TeLog("cats_garden_stage_reward", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
"friends_ID": GameInfo.Partner,
|
||||
"friends_get_num": GameInfo.PartnerAdd,
|
||||
"user_get_num": GameInfo.Progress - GameInfo.PartnerAdd,
|
||||
})
|
||||
player.CatnipBackData()
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -5555,6 +5616,14 @@ func ReqCatnipGrandReward(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
Items, err := CatnipMod.GrandReward()
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipGrandReward{
|
||||
@ -5571,9 +5640,10 @@ func ReqCatnipGrandReward(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_grand_reward", map[string]interface{}{
|
||||
"Items": Items,
|
||||
player.TeLog("cats_garden_final_reward", map[string]interface{}{
|
||||
"get_reward": Items,
|
||||
})
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipGrandReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -5588,6 +5658,14 @@ func ReqCatnipRefuse(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipRefuse{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
err = CatnipMod.Refuse(int(req.Id), int(req.Uid))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipRefuse{
|
||||
@ -5605,19 +5683,21 @@ func ReqCatnipRefuse(player *Player, buf []byte) error {
|
||||
Type: MsqMod.HANDLE_TYPE_CATNIP_REFUSE,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: CatnipMsg{
|
||||
ActivityId: GetActivityId(player, activity.ACT_TYPE_MINING),
|
||||
ActivityId: player.GetActivityId(activity.ACT_TYPE_CATNIP),
|
||||
GameId: int(req.Id),
|
||||
},
|
||||
})
|
||||
//player.CatnipBackData()
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipRefuse{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqActPass(player *Player, buf []byte) error {
|
||||
ActPassBackData(player)
|
||||
player.ActPassBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -5684,7 +5764,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
})
|
||||
} else {
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
ActivityId := GetActivityId(player, activity.ACT_TYPE_MINING)
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_MINING)
|
||||
UserList, _ := CatnipMod.Agree(GameId, ReplyInfo.Uid)
|
||||
player.TeLog("catnip_agree", map[string]interface{}{
|
||||
"Id": int(GameId),
|
||||
@ -5726,7 +5806,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
FriendLogBackData(player)
|
||||
player.FriendLogBackData()
|
||||
player.PushClientRes(&msg.ResFriendReplyHandle{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
LogId: req.LogId,
|
||||
@ -5777,7 +5857,34 @@ func ReqCatnipEmoji(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
CatnipMod.SetEmoji(int(req.Id), int(req.EmojiId))
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipEmoji{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "activity not active",
|
||||
})
|
||||
return fmt.Errorf("activity not active")
|
||||
}
|
||||
GameInfo := CatnipMod.GetGameInfo(int(req.Id))
|
||||
if GameInfo.Partner == 0 {
|
||||
player.SendErrClienRes(&msg.ResCatnipEmoji{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "no partner",
|
||||
})
|
||||
return fmt.Errorf("no partner")
|
||||
}
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: GameInfo.Partner,
|
||||
Type: MsqMod.HANDLE_TYPE_CATNIP_SEND_EMOJI,
|
||||
Extra: int(req.EmojiId),
|
||||
})
|
||||
player.PushClientRes(&msg.ResCatnipEmoji{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
EmojiId: req.EmojiId,
|
||||
Id: req.Id,
|
||||
})
|
||||
|
||||
player.CatnipBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
|
||||
}
|
||||
tr := false
|
||||
for _, v := range t {
|
||||
if checkTriggerCondition(player, v.Trigger) {
|
||||
if player.checkTriggerCondition(v.Trigger) {
|
||||
Title := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, v.Title)
|
||||
Content := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, v.Content)
|
||||
TitleEn := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, v.Title)
|
||||
@ -76,7 +76,7 @@ func (player *Player) MailTrigger(Tr *quest.Trigger) bool {
|
||||
return tr
|
||||
}
|
||||
|
||||
func checkTriggerCondition(player *Player, Trigger []string) bool {
|
||||
func (player *Player) checkTriggerCondition(Trigger []string) bool {
|
||||
if len(Trigger) < 4 {
|
||||
return false
|
||||
}
|
||||
@ -93,11 +93,11 @@ func checkTriggerCondition(player *Player, Trigger []string) bool {
|
||||
}
|
||||
}
|
||||
|
||||
func TriggerShippingOrderOrigin(player *Player, req *msg.ReqShippingOrder) {
|
||||
func (player *Player) TriggerShippingOrderOrigin(req *msg.ReqShippingOrder) {
|
||||
OrderSn := req.OrderSn
|
||||
Status := int(req.Status)
|
||||
if Status == MergeConst.ORDER_STATUS_CANCEL { // 取消支付
|
||||
CancelOrder(player, OrderSn)
|
||||
player.CancelOrder(OrderSn)
|
||||
player.PushClientRes(&msg.ResShippingOrder{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Msg: "cancel success",
|
||||
@ -132,9 +132,9 @@ func TriggerShippingOrderOrigin(player *Player, req *msg.ReqShippingOrder) {
|
||||
OrderExtraData.ChargeId = OrderData.ProductId
|
||||
}
|
||||
if OrderExtraData.Type == 0 {
|
||||
Charge(player, int(OrderData.ProductId))
|
||||
player.Charge(int(OrderData.ProductId))
|
||||
} else {
|
||||
SendCharge(player, OrderExtraData)
|
||||
player.SendCharge(OrderExtraData)
|
||||
}
|
||||
OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP
|
||||
OrderData.ProductName = req.ProduceId
|
||||
@ -159,11 +159,11 @@ func TriggerShippingOrderOrigin(player *Player, req *msg.ReqShippingOrder) {
|
||||
player.SendClientRes()
|
||||
}
|
||||
|
||||
func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
func (player *Player) TriggerShippingOrder(req *msg.ReqShippingOrder) {
|
||||
OrderSn := req.OrderSn
|
||||
Status := int(req.Status)
|
||||
if Status == MergeConst.ORDER_STATUS_CANCEL { // 取消支付
|
||||
CancelOrder(player, OrderSn)
|
||||
player.CancelOrder(OrderSn)
|
||||
player.PushClientRes(&msg.ResShippingOrder{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Msg: "cancel success",
|
||||
@ -178,7 +178,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
if n > 14 {
|
||||
break
|
||||
}
|
||||
OrderData, err = GoogleVerify(player, OrderSn, req.ProduceId, req.Token)
|
||||
OrderData, err = player.GoogleVerify(OrderSn, req.ProduceId, req.Token)
|
||||
if err != nil {
|
||||
log.Debug("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)
|
||||
log.Debug("GoogleVerify err:%v", err)
|
||||
@ -225,9 +225,9 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
OrderExtraData.ChargeId = OrderData.ProductId
|
||||
}
|
||||
if OrderExtraData.Type == 0 {
|
||||
Charge(player, int(OrderData.ProductId))
|
||||
player.Charge(int(OrderData.ProductId))
|
||||
} else {
|
||||
SendCharge(player, OrderExtraData)
|
||||
player.SendCharge(OrderExtraData)
|
||||
}
|
||||
OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP
|
||||
OrderData.ProductName = req.ProduceId
|
||||
@ -249,7 +249,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
player.SendClientRes()
|
||||
}
|
||||
|
||||
func TriggerComfortOrder(p *Player) {
|
||||
func (p *Player) TriggerComfortOrder() {
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
Now := GoUtil.Now()
|
||||
Lv := BaseMod.GetLevel()
|
||||
@ -265,8 +265,8 @@ func TriggerComfortOrder(p *Player) {
|
||||
OrderMod.CreateNormalOrder(BaseMod.GetLevel(), EmitList, EnergyMul, order.COMFORT_TYPE)
|
||||
}
|
||||
|
||||
func TriggerSeed(player *Player) {
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
func (p *Player) TriggerSeed() {
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
Items, Score := champshipCfg.GetRewardItems(ChampshipMod.Reward + 1)
|
||||
if Score < 50 {
|
||||
return
|
||||
@ -278,7 +278,7 @@ func TriggerSeed(player *Player) {
|
||||
break
|
||||
}
|
||||
}
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
if !b {
|
||||
BaseMod.SetSeed(false)
|
||||
} else {
|
||||
@ -286,8 +286,8 @@ func TriggerSeed(player *Player) {
|
||||
}
|
||||
}
|
||||
|
||||
func TriggerSeedSource(player *Player) {
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
func (p *Player) TriggerSeedSource() {
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
if !BaseMod.GetSeed() {
|
||||
return
|
||||
}
|
||||
@ -295,7 +295,7 @@ func TriggerSeedSource(player *Player) {
|
||||
Energy := BaseMod.GetEnergy()
|
||||
Total += Energy
|
||||
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
ChessList := ChessMod.GetUnlockChessList()
|
||||
ChessBuff := ChessMod.GetChessBuf()
|
||||
AllChess := append(ChessList, ChessBuff...)
|
||||
@ -322,15 +322,15 @@ func TriggerSeedSource(player *Player) {
|
||||
BaseMod.SetSource(Total)
|
||||
}
|
||||
|
||||
func TriggerSeedOrder(player *Player) *order.Order {
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
if !BaseMod.GetSeed() {
|
||||
return nil
|
||||
}
|
||||
OrderMod.CreatOrderPool(BaseMod.Level, ChessMod.GetOrderEmit(), BaseMod.EnergyMul)
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
ChampshipMod := p.PlayMod.getChampshipMod()
|
||||
NeedScore := champshipCfg.GetRewardTotalScore(ChampshipMod.Reward + 1)
|
||||
E := BaseMod.GetSource()
|
||||
ChessList := ChessMod.GetUnlockChessList()
|
||||
|
||||
@ -86,9 +86,10 @@ type GameResult struct {
|
||||
}
|
||||
|
||||
type CatnipMsg struct {
|
||||
ActivityId int
|
||||
GameId int
|
||||
Growth int // 增长值
|
||||
ActivityId int
|
||||
GameId int
|
||||
Growth int // 增长值
|
||||
FriendItems int // 赠送好友的道具数量
|
||||
}
|
||||
|
||||
type CatnipLock struct {
|
||||
@ -108,6 +109,6 @@ func init() {
|
||||
gob.Register(&ActivityInfo{})
|
||||
gob.Register(&ChargeExtra{})
|
||||
gob.Register(&GameResult{})
|
||||
gob.Register(&CatnipMsg{})
|
||||
gob.Register(CatnipMsg{})
|
||||
gob.Register(&CatnipLock{})
|
||||
}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"math"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
@ -133,8 +135,8 @@ func UnitOrderSeed(player *Player) error {
|
||||
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod.Seed = true
|
||||
TriggerSeedSource(player)
|
||||
o := TriggerSeedOrder(player)
|
||||
player.TriggerSeedSource()
|
||||
o := player.TriggerSeedOrder()
|
||||
fmt.Println(o)
|
||||
|
||||
elapsed := time.Since(start)
|
||||
@ -273,16 +275,15 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 {
|
||||
func UnitChess1(p *Player) error {
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
p.PushClientRes(ChessMod.BackData())
|
||||
EmitRetireTrigger1(p)
|
||||
p.EmitRetireTrigger1()
|
||||
DailyTaskMod := p.PlayMod.getDailyTaskMod()
|
||||
p.PushClientRes(DailyTaskMod.BackData())
|
||||
return nil
|
||||
}
|
||||
|
||||
func UnitPlayroom(p *Player) error {
|
||||
//PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
//PlayroomMod.UnLock(15)
|
||||
PlayroomBackData(p)
|
||||
|
||||
p.PlayroomBackData()
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -371,3 +372,21 @@ func UnitOrderPetReward(p *Player) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func UnitCatnip(p *Player) error {
|
||||
//OrderMod := p.PlayMod.getOrderMod()
|
||||
//KvMod := p.PlayMod.getKvMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
var buf bytes.Buffer
|
||||
encode := gob.NewEncoder(&buf)
|
||||
encode.Encode(ChessMod)
|
||||
fmt.Printf("buf len:%dk\n", buf.Len()/1024)
|
||||
return nil
|
||||
}
|
||||
|
||||
func Benchmark(player *Player) {
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
ChampshipMod.AddScore([]int{949, 941, 10})
|
||||
player.HandleInChampshipRank()
|
||||
player.HandleInUserRank()
|
||||
}
|
||||
|
||||
@ -48,6 +48,9 @@ func (f *VarMgr) Init() {
|
||||
if f.data.(*VarData).UserVar == nil {
|
||||
f.data.(*VarData).UserVar = make(map[string]*VarUserData)
|
||||
}
|
||||
if f.data.(*VarData).VarExpire == nil {
|
||||
f.data.(*VarData).VarExpire = make(map[string]*VarExpireData)
|
||||
}
|
||||
if f.getData().ZeroTime == GoUtil.ZeroTimestamp() {
|
||||
f.ZeroUpdate(&msg.Msg{})
|
||||
}
|
||||
@ -86,18 +89,21 @@ func (f *VarMgr) SetCatnipPartner(m *msg.Msg) (interface{}, error) {
|
||||
MyUid := GoUtil.Int(Param["uid"])
|
||||
CatnipGameId := GoUtil.Int(Param["game_id"])
|
||||
CatnipPartnerId := GoUtil.Int(Param["partner_uid"])
|
||||
myKey := fmt.Sprintf("catnip_partner_%d_%d", MyUid, CatnipGameId)
|
||||
key := fmt.Sprintf("catnip_partner_%d_%d", CatnipPartnerId, CatnipGameId)
|
||||
PartnerInfo := f.GetExpireVar(key)
|
||||
if PartnerInfo.D != nil {
|
||||
return nil, fmt.Errorf("catnip partner already set for uid %d in game %d", CatnipPartnerId, CatnipGameId)
|
||||
myKey := fmt.Sprintf("catnip_partner_%d", MyUid)
|
||||
key := fmt.Sprintf("catnip_partner_%d", CatnipPartnerId)
|
||||
OtherPartnerInfo := f.GetExpireVar(key)
|
||||
MyPartnerInfo := f.GetExpireVar(myKey)
|
||||
MyOfPartnerList := GoUtil.IntSlice(MyPartnerInfo.D)
|
||||
OtherOfPartnerList := GoUtil.IntSlice(OtherPartnerInfo.D)
|
||||
if len(MyOfPartnerList) > 4 || len(OtherOfPartnerList) > 4 {
|
||||
return nil, fmt.Errorf("catnip partner already full for uid %d in game %d", CatnipPartnerId, CatnipGameId)
|
||||
}
|
||||
f.SetExpireVar(key, &VarExpireData{
|
||||
D: MyUid,
|
||||
D: append(OtherOfPartnerList, MyUid),
|
||||
T: m.End,
|
||||
})
|
||||
f.SetExpireVar(myKey, &VarExpireData{
|
||||
D: CatnipPartnerId,
|
||||
D: append(MyOfPartnerList, CatnipPartnerId),
|
||||
T: m.End,
|
||||
})
|
||||
return nil, nil
|
||||
|
||||
@ -134,7 +134,7 @@ func ReqAdminShipping(args []interface{}) error {
|
||||
}
|
||||
Player := G_GameLogicPtr.GetPlayer(int64(OrderInfo.Uid))
|
||||
if Player != nil {
|
||||
go TriggerShippingOrderOrigin(Player, &msg.ReqShippingOrder{
|
||||
go Player.TriggerShippingOrderOrigin(&msg.ReqShippingOrder{
|
||||
OrderSn: req.OrderSn,
|
||||
})
|
||||
res["Msg"] = "player online,triggered sync"
|
||||
|
||||
@ -10,8 +10,10 @@ import (
|
||||
type CatnipMod struct {
|
||||
Id int
|
||||
Game map[int]*CatnipGame
|
||||
Mul int // 倍数
|
||||
IsGetGrandReward bool // 是否领取过大丰收奖励
|
||||
Mul int // 倍数
|
||||
IsGetGrandReward bool // 是否领取过大丰收奖励
|
||||
InviteList map[int]*InviteInfo // 邀请列表,key: 邀请者ID, value: 被邀请者ID
|
||||
BeInvitedList map[int]*InviteInfo // 被邀请列表,key: 被邀请者ID, value: 邀请者ID
|
||||
}
|
||||
|
||||
type InviteInfo struct {
|
||||
@ -20,15 +22,14 @@ type InviteInfo struct {
|
||||
}
|
||||
|
||||
type CatnipGame struct {
|
||||
Id int // 游戏ID
|
||||
Partner int // 伙伴ID
|
||||
Progress int // 进度
|
||||
PartnerAdd int // 伙伴贡献
|
||||
Reward []int // 已领取阶段奖励
|
||||
Status int // 0: Not Started, 1: In Progress, 2: Completed
|
||||
InviteList map[int]*InviteInfo // 邀请列表,key: 邀请者ID, value: 被邀请者ID
|
||||
BeInvitedList map[int]*InviteInfo // 被邀请列表,key: 被邀请者ID, value: 邀请者ID
|
||||
EmojiId int // 表情ID
|
||||
Id int // 游戏ID
|
||||
Partner int // 伙伴ID
|
||||
Progress int // 进度
|
||||
PartnerAdd int // 伙伴贡献
|
||||
Reward []int // 已领取阶段奖励
|
||||
Status int // 0: Not Started, 1: In Progress, 2: Completed
|
||||
|
||||
EmojiId int // 表情ID
|
||||
}
|
||||
|
||||
const (
|
||||
@ -43,6 +44,12 @@ func (c *CatnipMod) InitData() {
|
||||
if c.Game == nil {
|
||||
c.Game = make(map[int]*CatnipGame)
|
||||
}
|
||||
if c.InviteList == nil {
|
||||
c.InviteList = make(map[int]*InviteInfo)
|
||||
}
|
||||
if c.BeInvitedList == nil {
|
||||
c.BeInvitedList = make(map[int]*InviteInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Login(Id int) int {
|
||||
@ -59,14 +66,14 @@ func (c *CatnipMod) Login(Id int) int {
|
||||
c.Game = make(map[int]*CatnipGame)
|
||||
c.Mul = 1 // Default multiplier
|
||||
GameNum := catnipCfg.GetGameNum(c.Id) // Assuming 1 is the default game ID
|
||||
c.InviteList = make(map[int]*InviteInfo)
|
||||
c.BeInvitedList = make(map[int]*InviteInfo)
|
||||
for i := 1; i <= GameNum; i++ {
|
||||
c.Game[i] = &CatnipGame{
|
||||
Id: i,
|
||||
Partner: 0, // No partner initially
|
||||
Progress: 0, // Initial progress
|
||||
Status: GAME_STATUS_IDLE, // Not started
|
||||
InviteList: make(map[int]*InviteInfo), // Initialize invite list
|
||||
BeInvitedList: make(map[int]*InviteInfo), // Initialize be invited list
|
||||
Id: i,
|
||||
Partner: 0, // No partner initially
|
||||
Progress: 0, // Initial progress
|
||||
Status: GAME_STATUS_IDLE, // Not started
|
||||
}
|
||||
}
|
||||
return c.Id
|
||||
@ -76,75 +83,75 @@ func (c *CatnipMod) ZeroUpdate(Id int) {
|
||||
c.Login(Id)
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Invite(Id, Uid int) error {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Status != 0 {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
func (c *CatnipMod) Invite(Uid, Id int) error {
|
||||
if c.InviteList[Uid] != nil {
|
||||
return fmt.Errorf("user with ID %d is already invited", Uid)
|
||||
}
|
||||
|
||||
if GameInfo.InviteList[Uid] != nil {
|
||||
return fmt.Errorf("user with ID %d is already invited to game ID %d", Uid, Id)
|
||||
}
|
||||
|
||||
GameInfo.InviteList[Uid] = &InviteInfo{
|
||||
InviteId: Uid,
|
||||
c.InviteList[Uid] = &InviteInfo{
|
||||
InviteId: Id,
|
||||
Time: GoUtil.Now(),
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) BeInvited(Id, Uid int, Time int64) error {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Status != GAME_STATUS_IDLE {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
func (c *CatnipMod) BeInvited(Uid int, Time int64) error {
|
||||
// Check if the user is already invited
|
||||
invite := GameInfo.BeInvitedList[Uid]
|
||||
if invite != nil && invite.InviteId == Id {
|
||||
return fmt.Errorf("user with ID %d has already been invited to game ID %d", Uid, Id)
|
||||
invite := c.BeInvitedList[Uid]
|
||||
if invite != nil {
|
||||
return fmt.Errorf("user with ID %d has already been invited ", Uid)
|
||||
}
|
||||
GameInfo.BeInvitedList[Uid] = &InviteInfo{
|
||||
InviteId: Id,
|
||||
c.BeInvitedList[Uid] = &InviteInfo{
|
||||
InviteId: Uid,
|
||||
Time: Time,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Agree(Id, Uid int) ([]int, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Status != GAME_STATUS_IDLE {
|
||||
return nil, fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
// Check if the user is in the invite list
|
||||
_, exists := GameInfo.InviteList[Uid]
|
||||
_, exists := c.BeInvitedList[Uid]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id)
|
||||
}
|
||||
// Remove the invite after agreeing
|
||||
delete(GameInfo.InviteList, Uid)
|
||||
GameInfo.Partner = Uid // Set the partner for the game
|
||||
GameInfo.Status = GAME_STATUS_COMPLETED // Set the game status to completed
|
||||
|
||||
delete(c.BeInvitedList, Uid)
|
||||
for _, GameInfo := range c.Game {
|
||||
if GameInfo.Partner == 0 {
|
||||
GameInfo.Partner = Uid
|
||||
GameInfo.Status = GAME_STATUS_IN_PROGRESS
|
||||
return []int{}, nil
|
||||
}
|
||||
}
|
||||
return []int{}, nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) BeAgree(Id, Uid int) ([]int, error) {
|
||||
info, exists := c.InviteList[Uid]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id)
|
||||
}
|
||||
// Remove the invite after agreeing
|
||||
GameInfo := c.Game[info.InviteId]
|
||||
if GameInfo.Partner == 0 {
|
||||
GameInfo.Partner = Uid
|
||||
GameInfo.Status = GAME_STATUS_IN_PROGRESS
|
||||
delete(c.InviteList, Uid)
|
||||
return []int{}, nil
|
||||
}
|
||||
delete(c.InviteList, Uid)
|
||||
for _, GameInfo := range c.Game {
|
||||
if GameInfo.Partner == 0 {
|
||||
GameInfo.Partner = Uid
|
||||
GameInfo.Status = GAME_STATUS_IN_PROGRESS
|
||||
return []int{}, nil
|
||||
}
|
||||
}
|
||||
return []int{}, nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) DelInvited(Id, Uid int) error {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Status != GAME_STATUS_IDLE {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
delete(GameInfo.InviteList, Uid)
|
||||
delete(c.InviteList, Uid)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -154,44 +161,39 @@ func (c *CatnipMod) Multiply(Mul int) error {
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Refuse(Id, Uid int) error {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Status != GAME_STATUS_IDLE {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
delete(GameInfo.BeInvitedList, Uid)
|
||||
delete(c.BeInvitedList, Uid)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Play(Id int) (int, int, int, []*item.Item, []*item.Item, error) {
|
||||
func (c *CatnipMod) Play(Id int) (int, int, int, []*item.Item, []*item.Item, int, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return 0, 0, 0, nil, nil, fmt.Errorf("game with ID %d does not exist", Id)
|
||||
return 0, 0, 0, nil, nil, 0, fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
Id, Items, Growth := catnipCfg.GetJackpotItem(c.Mul)
|
||||
if GameInfo.Status != GAME_STATUS_IN_PROGRESS {
|
||||
return 0, 0, 0, nil, nil, 0, fmt.Errorf("game with ID %d is not in progress", Id)
|
||||
}
|
||||
Id, Items, Growth, FriendItems := catnipCfg.GetJackpotItem(c.Mul)
|
||||
Growth = Growth * c.Mul
|
||||
if Growth > 0 {
|
||||
c.Growth(Id, Growth)
|
||||
}
|
||||
ItemCost := catnipCfg.GetItemCost(c.Id, c.Mul)
|
||||
GameInfo.Progress += Growth
|
||||
return Id, Growth, GameInfo.Partner, Items, ItemCost, nil
|
||||
return Id, Growth, GameInfo.Partner, Items, ItemCost, FriendItems, nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Reward(Id, Progress int) ([]*item.Item, error) {
|
||||
func (c *CatnipMod) Reward(Id int) ([]*item.Item, *CatnipGame, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("game with Progress %d does not exist", Id)
|
||||
return nil, nil, fmt.Errorf("game with Progress %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Progress < Progress {
|
||||
return nil, fmt.Errorf("game with ID %d has not reached the required progress %d", Id, Progress)
|
||||
Items, Ids := catnipCfg.GetProgressReward(c.Id, GameInfo.Reward, GameInfo.Progress)
|
||||
GameInfo.Reward = append(GameInfo.Reward, Ids...)
|
||||
if Items == nil {
|
||||
return nil, nil, fmt.Errorf("no reward found for progress %d in game ID %d", GameInfo.Progress, Id)
|
||||
}
|
||||
if GoUtil.InArray(Progress, GameInfo.Reward) {
|
||||
return nil, fmt.Errorf("reward for progress %d has already been claimed in game ID %d", Progress, Id)
|
||||
}
|
||||
GameInfo.Reward = append(GameInfo.Reward, Progress)
|
||||
return catnipCfg.GetProgressReward(c.Id, Progress), nil
|
||||
return Items, GameInfo, nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) GrandReward() ([]*item.Item, error) {
|
||||
@ -216,16 +218,37 @@ func (c *CatnipMod) Growth(Id, Growth int) {
|
||||
return // Game is not in progress
|
||||
}
|
||||
GameInfo.Progress += Growth
|
||||
if GameInfo.Progress >= catnipCfg.GetGameNum(Id) { // Assuming the game ends when progress reaches a certain threshold
|
||||
if GameInfo.Progress >= catnipCfg.GetGameMaxProgress(c.Id) { // Assuming the game ends when progress reaches a certain threshold
|
||||
GameInfo.Status = GAME_STATUS_COMPLETED
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CatnipMod) SetEmoji(Id, EmojiId int) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return // Game does not exist
|
||||
func (c *CatnipMod) GrowthByUid(Uid, Growth int) {
|
||||
for _, v := range c.Game {
|
||||
if v.Partner == Uid {
|
||||
v.Progress += Growth
|
||||
v.PartnerAdd += Growth
|
||||
if v.Progress >= catnipCfg.GetGameMaxProgress(c.Id) { // Assuming the game ends when progress reaches a certain threshold
|
||||
v.Status = GAME_STATUS_COMPLETED
|
||||
}
|
||||
}
|
||||
}
|
||||
// Here we can set the emoji for the game. This is a placeholder implementation.
|
||||
GameInfo.EmojiId = EmojiId
|
||||
|
||||
}
|
||||
|
||||
func (c *CatnipMod) SetEmoji(Uid, EmojiId int) {
|
||||
for _, v := range c.Game {
|
||||
if v.Partner == Uid {
|
||||
v.EmojiId = EmojiId
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CatnipMod) GetMultiple() int {
|
||||
return c.Mul
|
||||
}
|
||||
|
||||
func (c *CatnipMod) GetGameInfo(Id int) *CatnipGame {
|
||||
return c.Game[Id]
|
||||
}
|
||||
|
||||
@ -185,7 +185,7 @@ func (d *Decorate) GetDecorateReward(areaId int) ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("areaId already rewarded")
|
||||
}
|
||||
d.AreaReward = append(d.AreaReward, areaId)
|
||||
return decorateCfg.GetDecoarteReward(areaId, 20), nil
|
||||
return decorateCfg.GetAreaReward(areaId), nil
|
||||
}
|
||||
|
||||
func (d *Decorate) GetAreaId() int {
|
||||
|
||||
@ -35,6 +35,7 @@ type ReplyInfo struct {
|
||||
AddTime int64
|
||||
ReplyTime int64
|
||||
EndTime int64
|
||||
Items []*item.Item
|
||||
}
|
||||
|
||||
type ActLogInfo struct {
|
||||
@ -69,7 +70,8 @@ type ApplyInfo struct {
|
||||
const (
|
||||
REPLY_TYPE_GREETING = 1 // 问候
|
||||
REPLY_TYPE_GREETING_Get = 2 // 收到问候
|
||||
REPLY_TYPE_CATNIP = 3 // 猫薄荷
|
||||
REPLY_TYPE_CATNIP = 3 // 猫薄荷加好友
|
||||
REPLY_TYPE_CATNIP_ITEMS = 4 // 收到猫薄荷好友道具
|
||||
)
|
||||
|
||||
// 24小时内与玩家进行过以下互动的用户,若被选中参加本次宠物宝藏,在其头像旁添加礼物盒
|
||||
@ -500,9 +502,8 @@ func (f *FriendMod) GetActLogLast() *ActLogInfo {
|
||||
return f.ActivityLog[len(f.ActivityLog)-1]
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64) {
|
||||
func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, Items []*item.Item) {
|
||||
f.AutoId++
|
||||
|
||||
f.ReplyList = append(f.ReplyList, &ReplyInfo{
|
||||
Id: f.AutoId,
|
||||
Uid: Uid,
|
||||
@ -511,6 +512,7 @@ func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64)
|
||||
Status: 0,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: EndTime,
|
||||
Items: Items,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -89,9 +89,11 @@ func (g *GuessColorMod) FirstIn() []*item.Item {
|
||||
}
|
||||
|
||||
func (g *GuessColorMod) Take(Map map[int32]int32, OMap map[int32]int32) {
|
||||
g.MapList = append(g.MapList, Map)
|
||||
if len(Map) > 0 {
|
||||
g.MapList = append(g.MapList, Map)
|
||||
g.Guess++
|
||||
}
|
||||
g.OMap = OMap
|
||||
g.Guess++
|
||||
}
|
||||
|
||||
func (g *GuessColorMod) GetLoseItem() []*item.Item {
|
||||
|
||||
@ -110,7 +110,8 @@ const (
|
||||
|
||||
HANDLE_TYPE_CHAMPSHIP_LOGIN // 锦标赛登录
|
||||
HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息
|
||||
HANDLE_TYPE_SET_CATNIP_PARTNER
|
||||
HANDLE_TYPE_SET_CATNIP_PARTNER // 设置猫薄荷伙伴
|
||||
HANDLE_TYPE_CATNIP_SEND_EMOJI // 发送猫薄荷表情
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@ -501,7 +501,7 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) (
|
||||
}
|
||||
//获取订单体力范围和棋子数量
|
||||
MinEnergy, MaxEnergy, ChessNum := getChessByDiff(lv, OrderDiff, OrderType)
|
||||
mergeList := getChessFromPoolByEnergy(o, MinEnergy, MaxEnergy, ChessNum, Emit, EnergyMul, OrderDiff)
|
||||
mergeList := getChessFromPoolByEnergy(o, MinEnergy, MaxEnergy, ChessNum, Emit, EnergyMul, OrderDiff, OrderType)
|
||||
return mergeList, OrderDiff, nil
|
||||
}
|
||||
|
||||
@ -626,7 +626,7 @@ func ShuffleColor(List []string, Last string) []string {
|
||||
}
|
||||
|
||||
// 获取发射器系列
|
||||
func getEmitSeries(o *OrderMod, Emit []int) string {
|
||||
func getEmitSeries(o *OrderMod, Emit []int, OrderType int) string {
|
||||
o.initColorShuffle(Emit)
|
||||
PopEmitId := ""
|
||||
NewSlice := make([]string, 0)
|
||||
@ -652,6 +652,14 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
|
||||
if o.LastColor == PopEmitId {
|
||||
continue
|
||||
}
|
||||
|
||||
if OrderType == Pet_type {
|
||||
EmitId := getEmitBySeries(Emit, PopEmitId)
|
||||
EmitInfo, _ := mergeDataCfg.GetOne(EmitId)
|
||||
if EmitInfo.Emit_Type == "auto" {
|
||||
continue
|
||||
}
|
||||
}
|
||||
PopEmitIdProductNum := mergeDataCfg.GetEmitProductNumByColor(PopEmitId)
|
||||
o.initColorShuffle(Emit)
|
||||
// 单链棋子 且订单中已有两个 跳过
|
||||
@ -845,10 +853,10 @@ func (o *OrderMod) getChessIdPool(Emit []int, Color string, EnergyMul, Lv, MinEn
|
||||
}
|
||||
return Chess, ChessLv
|
||||
}
|
||||
func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, Emit []int, EnergyMul, OrderDiff int) []int {
|
||||
func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, Emit []int, EnergyMul, OrderDiff, OrderType int) []int {
|
||||
ColorArr := make([]string, 0)
|
||||
for i := 0; i < ChessNum; i++ {
|
||||
ColorArr = append(ColorArr, getEmitSeries(o, Emit))
|
||||
ColorArr = append(ColorArr, getEmitSeries(o, Emit, OrderType))
|
||||
}
|
||||
if len(ColorArr) == 2 && ColorArr[0] == ColorArr[1] {
|
||||
log.Default()
|
||||
@ -876,7 +884,7 @@ func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, E
|
||||
|
||||
// 从棋子池中获取棋子
|
||||
func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int {
|
||||
Color := getEmitSeries(o, Emit)
|
||||
Color := getEmitSeries(o, Emit, 0)
|
||||
EmitChessId := getEmitBySeries(Emit, Color)
|
||||
//ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
||||
// 从棋子池中获取棋子
|
||||
|
||||
@ -16,6 +16,7 @@ type MergeDataRecord struct {
|
||||
Type string `json:"Type"`
|
||||
Emit_Product string `json:"Emit_Product"`
|
||||
Color string `json:"Color"`
|
||||
Emit_Type string `json:"Emit_Type"`
|
||||
}
|
||||
|
||||
type StartOrderData struct {
|
||||
|
||||
@ -11,7 +11,6 @@ require (
|
||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.7
|
||||
github.com/aliyun/credentials-go v1.4.6
|
||||
github.com/go-sql-driver/mysql v1.8.1
|
||||
github.com/gorilla/mux v1.8.1
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/jmoiron/sqlx v1.4.0
|
||||
github.com/redis/go-redis/v9 v9.6.1
|
||||
@ -61,9 +60,9 @@ require (
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/tuyou/galog v0.0.0
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
github.com/tuyou/galog v0.0.0
|
||||
)
|
||||
|
||||
replace github.com/tuyou/galog => ./galog
|
||||
|
||||
@ -124,8 +124,6 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
52
src/server/test/catnip_test.go
Normal file
52
src/server/test/catnip_test.go
Normal file
@ -0,0 +1,52 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
|
||||
"server/game"
|
||||
"server/msg"
|
||||
)
|
||||
|
||||
func TestCatnipBackData(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("aaa001")
|
||||
game.G_GameLogicPtr.SetPlayer(p1)
|
||||
p1.CatnipBackData()
|
||||
}
|
||||
|
||||
func TestReqCatnipEmoji(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("aaa001")
|
||||
game.G_GameLogicPtr.SetPlayer(p1)
|
||||
|
||||
req := &msg.ReqCatnipEmoji{
|
||||
Id: 1,
|
||||
EmojiId: 1,
|
||||
}
|
||||
data, err := proto.Marshal(req)
|
||||
if err != nil {
|
||||
t.Fatalf("proto.Marshal error: %v", err)
|
||||
}
|
||||
|
||||
if err := game.ReqCatnipEmoji(p1, data); err != nil {
|
||||
t.Fatalf("ReqCatnipEmoji returned error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReqCatnipReward(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("aaa001")
|
||||
game.G_GameLogicPtr.SetPlayer(p1)
|
||||
req := &msg.ReqCatnipReward{
|
||||
Id: 2,
|
||||
}
|
||||
data, err := proto.Marshal(req)
|
||||
if err != nil {
|
||||
t.Fatalf("proto.Marshal error: %v", err)
|
||||
}
|
||||
if err := game.ReqCatnipReward(p1, data); err != nil {
|
||||
t.Fatalf("ReqCatnipReward returned error: %v", err)
|
||||
}
|
||||
}
|
||||
48
src/server/test/conf/server.json
Normal file
48
src/server/test/conf/server.json
Normal file
@ -0,0 +1,48 @@
|
||||
{
|
||||
"AppID": 1,
|
||||
"LogLevel": "debug",
|
||||
"LogPath": "./log",
|
||||
"TCPAddr": ":3601",
|
||||
"WSAddr": ":3566",
|
||||
"MySqlAddr": "127.0.0.1",
|
||||
"MySqlPort": "3306",
|
||||
"MySqlUsr": "root",
|
||||
"MySqlPwd": "IOagNEq3C84c-20CmHEin5iODVc=",
|
||||
"MaxConnNum": 20000,
|
||||
"DbName": "Merge_Pet_1",
|
||||
"HttpPort": ":8081",
|
||||
"AppPath": "./app",
|
||||
"TELOGDIR" : "./teLog/",
|
||||
|
||||
"GameName": "Merge_Pet_Local",
|
||||
|
||||
"ServerType":"node",
|
||||
|
||||
"ServerID": 1,
|
||||
"ServerOpenTime": "2018-01-01 00:00:00",
|
||||
"ServerName": "Merge_Pet",
|
||||
"ServerStatus" : 1,
|
||||
"ServerCenter" : 1,
|
||||
"GameConfPath": "D:/Github/pet_home_server/src/server/gamedata/config/",
|
||||
|
||||
"ListenAddr":":9001",
|
||||
"CenterAddr": "pethome.bywaystudios.com:9000",
|
||||
"RemoteAddr":"host.docker.internal:9001",
|
||||
|
||||
"RedisAddr":"127.0.0.1",
|
||||
"RedisPort" :"6379",
|
||||
"RedisPwd" :"",
|
||||
|
||||
"RedisWriteAddr":"127.0.0.1:6379",
|
||||
"RedisReadAddrs":"127.0.0.1:6379",
|
||||
"RedisMasterName":"mymaster",
|
||||
"RedisConnType":"Direct",
|
||||
|
||||
"GoogleVerify":false,
|
||||
"Partition":3,
|
||||
"KafkaHost":"kafka-server",
|
||||
"CountryCode":"004",
|
||||
"KafkaPort":"9092",
|
||||
"Version":"1.0.0",
|
||||
"IdVerify":false
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user