Merge branch 'sdk' into online
This commit is contained in:
commit
574e0053f1
4
.gitignore
vendored
4
.gitignore
vendored
@ -13,3 +13,7 @@ src/server/unit_test.go
|
||||
src/server/teLog/*
|
||||
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)
|
||||
|
||||
@ -126,6 +126,7 @@ func SendServerMsg(m *msg.Msg, serverId int) error {
|
||||
}
|
||||
|
||||
func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
|
||||
m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m))
|
||||
if v, ok := serverAgent.Load(serverId); ok {
|
||||
data, err := GoUtil.GobMarshal(m)
|
||||
if err != nil {
|
||||
@ -134,7 +135,6 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) {
|
||||
}
|
||||
v.(network.Agent).WriteMsg(data)
|
||||
}
|
||||
m.UniKey = GoUtil.UniKey("clusterGlobal")
|
||||
newChan := make(chan *msg.Msg, 1)
|
||||
registerChanel(m.UniKey, newChan)
|
||||
timeout := time.After(15 * time.Second)
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -314,6 +314,14 @@ func GetChargeInfo(ChargeId int) (float64, string) {
|
||||
return gamedata.GetFloatValue(data, "Money"), gamedata.GetStringValue(data, "Unit")
|
||||
}
|
||||
|
||||
func GetProduceName(ChargeId int) string {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHARGE, ChargeId)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "Remark")
|
||||
}
|
||||
|
||||
func GetWishCount(ItemId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_CHARGE_WISH, ItemId)
|
||||
if err != nil {
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -47,6 +47,7 @@ var Server struct {
|
||||
|
||||
ListenAddr string
|
||||
CenterAddr string
|
||||
CenterNode int
|
||||
|
||||
RemoteAddr string
|
||||
GameConfPath string
|
||||
@ -63,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]
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,23 +6,27 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
CFG_LANGUAGE = "LanguageData"
|
||||
CFG_LANGUAGE = "LanguageData"
|
||||
CFG_ALLLANGUAGE = "AllLanguage"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gamedata.InitCfg(CFG_LANGUAGE)
|
||||
gamedata.InitCfg(CFG_ALLLANGUAGE)
|
||||
}
|
||||
|
||||
func GetLanguage(lang msg.LANG_TYPE, key string) string {
|
||||
data, err := gamedata.GetDataByKey(CFG_LANGUAGE, key)
|
||||
data, err := gamedata.GetDataByKey(CFG_ALLLANGUAGE, key)
|
||||
if err != nil {
|
||||
return key
|
||||
}
|
||||
switch lang {
|
||||
case msg.LANG_TYPE_LANG_EN:
|
||||
return gamedata.GetStringValue(data, "English")
|
||||
return gamedata.GetStringValue(data, "en_US")
|
||||
case msg.LANG_TYPE_LANG_PTBR:
|
||||
return gamedata.GetStringValue(data, "pt_BR")
|
||||
case msg.LANG_TYPE_LANG_CN:
|
||||
return gamedata.GetStringValue(data, "zh_CN")
|
||||
default:
|
||||
return key
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@ const (
|
||||
CFG_LIMITED_TIME_EVENT_MONEY = "LimitedTimeEventMoney"
|
||||
CFG_LIMITED_TIME_EVENT_LUCKY = "LimitedTimeEventLucky"
|
||||
CFG_LIMITED_TIME_EVENT_CAT_TRICK = "LimitedTimeEventCatTrick"
|
||||
CFG_LIMTTED_TIME_EVENT_DECORATE_OFF = "LimitedTimeEventDecorateOff"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -41,6 +42,7 @@ func init() {
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_MONEY)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_LUCKY)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CAT_TRICK)
|
||||
gamedata.InitCfg(CFG_LIMTTED_TIME_EVENT_DECORATE_OFF)
|
||||
}
|
||||
|
||||
// 获取限时事件触发列表
|
||||
@ -417,3 +419,21 @@ func GetCatTrickDiamond(Type int) (int, int) {
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Diamond"), gamedata.GetIntValue(data, "Energy")
|
||||
}
|
||||
|
||||
func GetDecorateOffDiscount(AreaId, StepId int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMTTED_TIME_EVENT_DECORATE_OFF)
|
||||
if err != nil {
|
||||
log.Debug("GetDecorateOffDiscount err:%v", err)
|
||||
return 100
|
||||
}
|
||||
for _, v := range data {
|
||||
StartAreaId := gamedata.GetIntValue(v, "StartArea")
|
||||
EndAreaId := gamedata.GetIntValue(v, "EndArea")
|
||||
StartStepId := gamedata.GetIntValue(v, "StartStep")
|
||||
EndStepId := gamedata.GetIntValue(v, "EndStep")
|
||||
if AreaId >= StartAreaId && AreaId <= EndAreaId && StepId >= StartStepId && StepId <= EndStepId {
|
||||
return gamedata.GetIntValue(v, "Off")
|
||||
}
|
||||
}
|
||||
return 100
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -24,6 +24,10 @@
|
||||
"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",
|
||||
@ -35,7 +39,6 @@
|
||||
"RedisConnType":"Direct",
|
||||
|
||||
"GoogleVerify":false,
|
||||
"RemoteAddr":"host.docker.internal:9001",
|
||||
"Partition":3,
|
||||
"KafkaHost":"kafka-server",
|
||||
"CountryCode":"004",
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"server/GoUtil"
|
||||
activityCfg "server/conf/activity"
|
||||
catnipCfg "server/conf/catnip"
|
||||
guesscolorCfg "server/conf/guessColor"
|
||||
itemCfg "server/conf/item"
|
||||
mailCfg "server/conf/mail"
|
||||
@ -16,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 {
|
||||
@ -27,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 {
|
||||
@ -39,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 {
|
||||
@ -52,12 +54,19 @@ 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 = p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
OldId = CatnipMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
// 清空猫草大作战数据无需发邮件
|
||||
}
|
||||
|
||||
// 通行证
|
||||
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 {
|
||||
@ -66,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)
|
||||
@ -82,26 +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 = p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo != nil {
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
PassMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
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
|
||||
@ -110,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
|
||||
@ -119,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
|
||||
@ -128,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
|
||||
}
|
||||
@ -143,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{
|
||||
@ -163,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 {
|
||||
@ -194,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 {
|
||||
@ -224,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 {
|
||||
@ -235,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{
|
||||
@ -255,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
|
||||
}
|
||||
@ -286,18 +316,27 @@ func GetActivityItem(p *Player, ActType []int) []*item.Item {
|
||||
return Items
|
||||
}
|
||||
|
||||
// 猫草大作战活动数据返回
|
||||
func (p *Player) CatnipBackData() {
|
||||
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),
|
||||
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)
|
||||
@ -305,18 +344,67 @@ func (p *Player) CatnipBackData() {
|
||||
GameInfo.Partner = PlayerData
|
||||
}
|
||||
}
|
||||
|
||||
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),
|
||||
Status: int32(Status),
|
||||
GameList: GameList,
|
||||
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,24 +44,24 @@ 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
|
||||
}
|
||||
}
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(ChargeMod.BackData())
|
||||
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,37 +151,126 @@ 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)
|
||||
}
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(ChargeMod.BackData())
|
||||
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
|
||||
}
|
||||
|
||||
@ -37,4 +37,20 @@ func init() {
|
||||
RegisterClusterHandler(msg.HANDLE_TYPE_REQ_CARD, FriendMgrSend)
|
||||
RegisterClusterHandler(msg.HANDLE_TYPE_AGREE_CARD, FriendMgrSend)
|
||||
RegisterClusterHandler(msg.CLUSTER_FRIEND_SYNC, ClusterFriendSync)
|
||||
RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, champshipInrankHandler)
|
||||
RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_RANK_INFO, champshipRankInfoHandler)
|
||||
}
|
||||
|
||||
func champshipInrankHandler(m *msg.Msg) error {
|
||||
G_GameLogicPtr.ChampshipMgrSend(m)
|
||||
return nil
|
||||
}
|
||||
|
||||
func champshipRankInfoHandler(m *msg.Msg) error {
|
||||
data := G_GameLogicPtr.ChampshipMgrCall(m)
|
||||
m.To = m.From
|
||||
m.From = 0
|
||||
m.Extra = data
|
||||
FriendMgrSend(m)
|
||||
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)
|
||||
@ -91,6 +92,8 @@ func (f *FriendMgr) Init() {
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_SET, f.SetVarUserData)
|
||||
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_VAR_EXPIRE_SET, f.SetExpireVarData)
|
||||
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter)
|
||||
}
|
||||
|
||||
func (f *FriendMgr) getData() *FirendData {
|
||||
@ -253,6 +256,15 @@ func ClusterFriendSync(m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 异步发送消息给中心服
|
||||
func (f *FriendMgr) SendMsgToCenter(m *msg.Msg) (interface{}, error) {
|
||||
return nil, mergeCluster.SendServerMsg(m, conf.Server.CenterNode)
|
||||
}
|
||||
|
||||
func (f *FriendMgr) CallMsgToCenter(m *msg.Msg) (interface{}, error) {
|
||||
return mergeCluster.CallServerMsg(m, conf.Server.CenterNode)
|
||||
}
|
||||
|
||||
func FriendMgrCall(m *msg.Msg) interface{} {
|
||||
ToServer := GoUtil.GetServerIdByUid(m.To)
|
||||
if ToServer != conf.Server.ServerID {
|
||||
|
||||
@ -75,7 +75,6 @@ type GameLogic struct {
|
||||
NotInitPlayer *Player
|
||||
Version int32
|
||||
M_SvrGlobal db.SqlSvrGlobalStruct
|
||||
MHttpManager *HttpManager
|
||||
SeverInfo *ServerInfo
|
||||
|
||||
MLogManager *LogMgr // 日志管理器
|
||||
@ -287,7 +286,7 @@ func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) {
|
||||
}
|
||||
|
||||
func (ad *GameLogic) SetDataSync(Uid int, Op int, Data interface{}) error {
|
||||
_, err := ad.FriendMgr.Call(&MsgMod.Msg{
|
||||
_, err := ad.VarMgr.Call(&MsgMod.Msg{
|
||||
From: Uid,
|
||||
To: Uid,
|
||||
Type: MsgMod.HANDLE_TYPE_VAR_EXPIRE_SET,
|
||||
@ -297,6 +296,21 @@ func (ad *GameLogic) SetDataSync(Uid int, Op int, Data interface{}) error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (ad *GameLogic) SetCatnipPartner(Uid int, GameId int, PartnerUid int) error {
|
||||
_, err := ad.VarMgr.Call(&MsgMod.Msg{
|
||||
From: Uid,
|
||||
To: Uid,
|
||||
Type: MsgMod.HANDLE_TYPE_SET_CATNIP_PARTNER,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: map[string]interface{}{
|
||||
"uid": Uid,
|
||||
"game_id": GameId,
|
||||
"partner_uid": PartnerUid,
|
||||
},
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (ad *GameLogic) GetUserData(Uid int) *VarUserData {
|
||||
result, err := ad.FriendMgr.Call(&MsgMod.Msg{
|
||||
From: Uid,
|
||||
@ -640,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
|
||||
}
|
||||
@ -746,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命令
|
||||
|
||||
@ -891,6 +905,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqCatnipPlay", ReqCatnipPlay) // 猫草大作战游戏转盘
|
||||
RegisterMsgProcessFunc("ReqCatnipReward", ReqCatnipReward) // 猫草大作战领取奖励
|
||||
RegisterMsgProcessFunc("ReqCatnipGrandReward", ReqCatnipGrandReward) // 猫草大作战领取大奖
|
||||
RegisterMsgProcessFunc("ReqCatnipEmoji", ReqCatnipEmoji)
|
||||
// 活动通行证
|
||||
RegisterMsgProcessFunc("ReqActPass", ReqActPass) // 请求活动通行证数据
|
||||
RegisterMsgProcessFunc("ReqActPassReward", ReqActPassReward) // 领取活动通行证奖励
|
||||
@ -933,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()
|
||||
|
||||
@ -147,7 +147,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{
|
||||
@ -186,7 +186,7 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
AddTime: Now,
|
||||
}
|
||||
}
|
||||
BackUserInfo(player)
|
||||
player.BackUserInfo()
|
||||
case "resetFace":
|
||||
FaceMod := player.PlayMod.getFaceMod()
|
||||
FaceMod.List = nil
|
||||
@ -286,25 +286,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()
|
||||
@ -329,7 +334,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)
|
||||
@ -337,7 +342,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)
|
||||
@ -350,11 +355,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)
|
||||
@ -376,8 +381,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])
|
||||
@ -403,7 +408,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()
|
||||
@ -479,7 +484,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,14 +548,14 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
case "resetWeekly":
|
||||
ChargeMod := player.PlayMod.getChargeMod()
|
||||
ChargeMod.WeeklyDiscount = make(map[int]int)
|
||||
player.PushClientRes(ChargeMod.BackData())
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,6 +76,15 @@ func LimitedTimeEventTrigger(p *Player, AddEventId int) {
|
||||
p.PushClientRes(p.PlayMod.getOrderMod().BackData())
|
||||
case limitedTimeEvent.EVENT_TYPE_CARD_FESTIVAL:
|
||||
p.PlayMod.getCardMod().CreateCardFestival()
|
||||
case limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE: // 猫咪大甩卖
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
if !ChargeMod.IsWeeklyDiscountDay() {
|
||||
ChargeMod.ResetWeeklyDiscount()
|
||||
PlayroomMod.ResetWeeklyDiscount()
|
||||
}
|
||||
|
||||
p.ChargeBackData()
|
||||
}
|
||||
}
|
||||
p.PushClientRes(p.PlayMod.getLimitedTimeEventMod().BackData())
|
||||
@ -83,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")
|
||||
}
|
||||
@ -97,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()
|
||||
@ -131,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 {
|
||||
@ -174,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))
|
||||
}
|
||||
@ -214,7 +223,7 @@ func LimitedTimePlayroomWorkTrigger(p *Player) {
|
||||
if EndTime > 0 && EndTime <= Now {
|
||||
PlayroomMod.ResetWork()
|
||||
p.PlayMod.save()
|
||||
PlayroomBackData(p)
|
||||
p.PlayroomBackData()
|
||||
p.SendClientRes()
|
||||
return
|
||||
}
|
||||
|
||||
@ -2,10 +2,12 @@ package game
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"runtime"
|
||||
kafkaMiddleware "server/middleware/kafka"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -15,13 +17,18 @@ const (
|
||||
)
|
||||
const (
|
||||
PLAYROOM_LOST = "playroom_lost"
|
||||
LOG_LENGTH = 10000
|
||||
// 增大缓冲:针对 ~1000 条/s,保留足够秒数的缓冲(可按需调整)
|
||||
LOG_LENGTH = 100000
|
||||
WORKER_COUNT = 500
|
||||
)
|
||||
|
||||
type LogMgr struct {
|
||||
L []*Log
|
||||
McronSave *cron.Cron
|
||||
Lock sync.Mutex
|
||||
// 将切片改为带缓冲通道
|
||||
L chan *Log
|
||||
Lock sync.Mutex
|
||||
wg sync.WaitGroup
|
||||
stopOnce sync.Once
|
||||
closing bool
|
||||
}
|
||||
|
||||
type Log struct {
|
||||
@ -34,47 +41,198 @@ type Log struct {
|
||||
}
|
||||
|
||||
func (L *LogMgr) InitManager() {
|
||||
L.McronSave = cron.New()
|
||||
L.L = make([]*Log, 0, LOG_LENGTH)
|
||||
L.McronSave.AddFunc("@every 10s", func() {
|
||||
L.Lock.Lock()
|
||||
defer L.Lock.Unlock()
|
||||
if kafkaMiddleware.KafkaMod == nil {
|
||||
if len(L.L) > LOG_LENGTH {
|
||||
L.L = L.L[:0]
|
||||
} else if len(L.L) > LOG_LENGTH {
|
||||
L.L = L.L[len(L.L)-LOG_LENGTH:]
|
||||
// 初始化通道
|
||||
L.L = make(chan *Log, LOG_LENGTH)
|
||||
|
||||
// 动态协程池参数
|
||||
maxWorkers := WORKER_COUNT
|
||||
if cpuWorkers := runtime.NumCPU() * 2; cpuWorkers > maxWorkers {
|
||||
maxWorkers = cpuWorkers
|
||||
}
|
||||
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()
|
||||
defer atomic.AddInt32(&activeWorkers, -1)
|
||||
|
||||
for {
|
||||
// 首先阻塞等待一个任务(若 channel 关闭则退出)
|
||||
v, ok := <-L.L
|
||||
if !ok {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
// 快速循环处理后续可用任务,若超时则退出该 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
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Quene := L.L
|
||||
NewQuene := make([]*Log, 0, LOG_LENGTH)
|
||||
for _, v := range Quene {
|
||||
value, _ := json.Marshal(v)
|
||||
err := kafkaMiddleware.SendMsg([]byte(v.EventName), value)
|
||||
if err != nil {
|
||||
NewQuene = append(NewQuene, v)
|
||||
}()
|
||||
}
|
||||
|
||||
// 启动初始最小 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
L.L = NewQuene
|
||||
})
|
||||
L.McronSave.Start()
|
||||
}()
|
||||
}
|
||||
|
||||
func (L *LogMgr) AddLog(logs *Log) {
|
||||
return
|
||||
// 如果已经开始关闭,直接丢弃
|
||||
L.Lock.Lock()
|
||||
defer L.Lock.Unlock()
|
||||
L.L = append(L.L, logs)
|
||||
if L.closing {
|
||||
L.Lock.Unlock()
|
||||
return
|
||||
}
|
||||
// 非阻塞入队:若通道满则先丢弃最旧一条再入队,避免阻塞调用者
|
||||
select {
|
||||
case L.L <- logs:
|
||||
L.Lock.Unlock()
|
||||
return
|
||||
default:
|
||||
// 丢弃最旧一条以腾出空间(若有)
|
||||
select {
|
||||
case <-L.L:
|
||||
default:
|
||||
}
|
||||
// 再尝试入队一次
|
||||
select {
|
||||
case L.L <- logs:
|
||||
default:
|
||||
// 放不下就直接丢弃
|
||||
}
|
||||
L.Lock.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
func (L *LogMgr) Close() {
|
||||
L.McronSave.Stop()
|
||||
L.Lock.Lock()
|
||||
defer L.Lock.Unlock()
|
||||
for _, v := range L.L {
|
||||
value, _ := json.Marshal(v)
|
||||
kafkaMiddleware.SendMsg([]byte(v.EventName), value)
|
||||
}
|
||||
L.L = L.L[:0]
|
||||
L.stopOnce.Do(func() {
|
||||
L.Lock.Lock()
|
||||
// 标记为正在关闭,阻止后续入队
|
||||
L.closing = true
|
||||
// 关闭通道,通知所有 worker 退出(workers 会消费完所有已入队的消息)
|
||||
close(L.L)
|
||||
L.Lock.Unlock()
|
||||
// 等待所有 worker 处理完
|
||||
L.wg.Wait()
|
||||
})
|
||||
}
|
||||
|
||||
@ -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,11 +14,11 @@ 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"
|
||||
"server/game/mod/item"
|
||||
"server/game/mod/limitedTimeEvent"
|
||||
"server/game/mod/mail"
|
||||
"server/game/mod/msg"
|
||||
"server/game/mod/order"
|
||||
@ -30,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() {
|
||||
@ -45,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的数据
|
||||
@ -56,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:
|
||||
@ -73,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": "发起申请",
|
||||
@ -113,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(
|
||||
@ -123,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()
|
||||
@ -148,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)
|
||||
@ -157,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()
|
||||
@ -168,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()
|
||||
@ -178,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(
|
||||
@ -189,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)
|
||||
@ -198,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)
|
||||
@ -208,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)
|
||||
@ -264,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())
|
||||
@ -284,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()
|
||||
@ -320,66 +401,82 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
ChargeMod.AddWishCount()
|
||||
p.AddLog(m.From, friend.LOG_TYPE_WISH, "", m.SendT)
|
||||
p.PushClientRes(ChargeMod.BackData())
|
||||
p.ChargeBackData()
|
||||
case msg.HANDLE_TYPE_PLAYROOM_KISS: // playroom亲吻
|
||||
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, 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)
|
||||
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)
|
||||
@ -390,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()
|
||||
@ -470,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 {
|
||||
@ -482,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)
|
||||
@ -511,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
|
||||
}
|
||||
|
||||
// 发送消息给玩家
|
||||
@ -615,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 {
|
||||
@ -743,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)
|
||||
@ -908,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()
|
||||
@ -965,7 +690,7 @@ func EmitRetireTrigger2(p *Player) {
|
||||
ChessMod.FinishRetire(k)
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
ChargeMod.InitChessShop(ChessMod.GetEmitList())
|
||||
p.PushClientRes(ChargeMod.BackData())
|
||||
p.ChargeBackData()
|
||||
continue
|
||||
}
|
||||
OrderMod.CreateCleanOrder(ChessList)
|
||||
@ -973,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 {
|
||||
@ -1576,3 +1271,9 @@ func (player *Player) GetPlayroomClean() map[int]int {
|
||||
}
|
||||
return Item
|
||||
}
|
||||
|
||||
func (player *Player) IsWeeklyDiscount() bool {
|
||||
ChargeMod := player.PlayMod.getChargeMod()
|
||||
LimitEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||
return ChargeMod.IsWeeklyDiscountDay() || LimitEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE)
|
||||
}
|
||||
@ -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,
|
||||
})
|
||||
}
|
||||
@ -327,7 +305,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
ChargeMod.ZeroUpdate(ChessMod.GetEmitList())
|
||||
p.PushClientRes(p.PlayMod.getChargeMod().BackData())
|
||||
p.ChargeBackData()
|
||||
|
||||
// 无尽礼包
|
||||
p.PlayMod.getEndlessMod().ZeroUpdate(p.PlayMod.getChargeMod().GetMaxCharge(), p.PlayMod.getBaseMod().GetLevel())
|
||||
@ -344,10 +322,13 @@ func (p *Player) ZeroUpdate(a []interface{}) {
|
||||
// playroom
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.ZeroUpdate()
|
||||
PlayroomBackData(p)
|
||||
if ChargeMod.IsWeeklyDiscountDay() {
|
||||
PlayroomMod.ResetWeeklyDiscount()
|
||||
}
|
||||
p.PlayroomBackData()
|
||||
p.PlayMod.getChampshipMod().ZeroUpdate()
|
||||
p.initAcitivity()
|
||||
ActivityZeroUpdate(p)
|
||||
p.ActivityZeroUpdate()
|
||||
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_LOGIN})
|
||||
p.PlayMod.save()
|
||||
}
|
||||
@ -375,7 +356,7 @@ func (p *Player) NoonUpdate(a []interface{}) {
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
// 礼包充值
|
||||
p.PlayMod.getChargeMod().NoonUpdate(ChessMod.GetEmitList())
|
||||
p.PushClientRes(p.PlayMod.getChargeMod().BackData())
|
||||
p.ChargeBackData()
|
||||
p.PlayMod.save()
|
||||
}
|
||||
|
||||
@ -384,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()
|
||||
@ -394,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()
|
||||
@ -414,17 +395,30 @@ func (p *Player) Login() {
|
||||
ChargeMod.WeeklyEndTime = WeeklyEndTime
|
||||
}
|
||||
if WeeklyStartTime > now {
|
||||
go func() {
|
||||
time.Sleep(time.Duration(WeeklyStartTime-now) * time.Second)
|
||||
p.CallEvent(time.Duration(WeeklyStartTime-now)*time.Second, func() {
|
||||
ChargeMod.WeeklyEndTime = WeeklyEndTime
|
||||
p.PushClientRes(ChargeMod.BackData())
|
||||
PlayroomBackData(p)
|
||||
}()
|
||||
ChargeMod.ResetWeeklyDiscount()
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
PlayroomMod.ResetWeeklyDiscount()
|
||||
p.ChargeBackData()
|
||||
p.PlayroomBackData()
|
||||
}, "WeeklyDiscountStart")
|
||||
}
|
||||
if WeeklyEndTime > now {
|
||||
p.CallEvent(time.Duration(WeeklyEndTime-now)*time.Second, func() {
|
||||
ChargeMod.WeeklyEndTime = 0
|
||||
p.ChargeBackData()
|
||||
p.PlayroomBackData()
|
||||
LimitEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
LimitEventMod.EndCatDaySale()
|
||||
p.PushClientRes(LimitEventMod.BackData())
|
||||
}, "WeeklyDiscountEnd")
|
||||
}
|
||||
if Duration > 604800 {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
FriendMod.AddActLog(friend.ACT_LOG_TYPE_LOST_USER_RETURN, "")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (p *Player) Outline() {
|
||||
@ -684,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,
|
||||
@ -693,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,
|
||||
@ -733,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()
|
||||
@ -808,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{}{
|
||||
@ -844,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)
|
||||
@ -879,7 +873,6 @@ func (p *Player) LoginBackData() {
|
||||
p.PushClientRes(p.PlayMod.mod_list.DailyTask.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.SevenLogin.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.LimitedTimeEvent.ProgressBackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Charge.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Charge.PetWorkBackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Endless.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.PiggyBank.BackData())
|
||||
@ -890,8 +883,9 @@ func (p *Player) LoginBackData() {
|
||||
p.PushClientRes(p.PlayMod.mod_list.Friend.BubbleBackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Guide.BackData())
|
||||
p.BackDataActivity()
|
||||
BackChampship(p)
|
||||
BackUserInfo(p)
|
||||
p.ChargeBackData()
|
||||
p.BackChampship()
|
||||
p.BackUserInfo()
|
||||
}
|
||||
|
||||
func (p *Player) InitPlayerOnly() {
|
||||
@ -1111,7 +1105,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
|
||||
}
|
||||
@ -1128,8 +1122,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
|
||||
}
|
||||
@ -1177,3 +1171,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())
|
||||
}
|
||||
}
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
@ -2,8 +2,10 @@ package game
|
||||
|
||||
import (
|
||||
"server/GoUtil"
|
||||
chargeCfg "server/conf/charge"
|
||||
playroomCfg "server/conf/playroom"
|
||||
"server/game/mod/item"
|
||||
"server/game/mod/limitedTimeEvent"
|
||||
proto "server/msg"
|
||||
)
|
||||
|
||||
@ -16,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()
|
||||
@ -25,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 {
|
||||
@ -125,7 +127,9 @@ func PlayroomBackData(p *Player) {
|
||||
}
|
||||
weeklyDiscount := make(map[int32]*proto.WeeklyDiscountInfo)
|
||||
ChargeMod := p.PlayMod.getChargeMod()
|
||||
if ChargeMod.IsWeeklyDiscountDay() {
|
||||
LimitedEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
// 优惠日开启或者猫咪闪促开启
|
||||
if ChargeMod.IsWeeklyDiscountDay() || LimitedEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE) {
|
||||
w1 := playroomCfg.GetShopWeeklyLimit()
|
||||
for k, v := range w1 {
|
||||
limitNum := PlayroomMod.WeeklyDiscount[k]
|
||||
@ -159,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
|
||||
@ -196,7 +200,6 @@ func PlayroomVisit(p *Player, Uid int) {
|
||||
r.Chip = int32(data.Chip)
|
||||
r.Kiss = int32(data.Kiss)
|
||||
r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet)
|
||||
|
||||
p.PushClientRes(r)
|
||||
}
|
||||
|
||||
@ -208,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()
|
||||
@ -229,3 +232,171 @@ func BackUserInfo(p *Player) {
|
||||
AddCode: BaseMod.AddCode,
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) ChargeBackData() {
|
||||
c := p.PlayMod.getChargeMod()
|
||||
LimitedEvnetMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
SpecialShop := make(map[int32]*proto.ResSpecialShop)
|
||||
ChessShop := make(map[int32]*proto.ResChessShop)
|
||||
for k, v := range c.SpecialShop {
|
||||
SpecialShop[int32(k)] = &proto.ResSpecialShop{
|
||||
Grade: int32(v.Grade),
|
||||
Count: int32(v.Count),
|
||||
}
|
||||
}
|
||||
|
||||
for k, v := range c.ChessShop {
|
||||
ChessShop[int32(k)] = &proto.ResChessShop{
|
||||
Diamond: int32(v.Diamond),
|
||||
Count: int32(v.Count),
|
||||
ChessId: int32(v.Id),
|
||||
}
|
||||
}
|
||||
resWish := &proto.WishList{}
|
||||
if c.WishList != nil {
|
||||
resWish = &proto.WishList{
|
||||
Id: int32(c.WishList.ItemId),
|
||||
Count: int32(c.WishList.Count),
|
||||
Uid: c.WishList.SendList,
|
||||
}
|
||||
}
|
||||
WeeklyDiscount := make(map[int32]*proto.WeeklyDiscountInfo)
|
||||
WeeklyDiscountInfo := chargeCfg.GetWeeklyInfoAll()
|
||||
// 优惠日开启或者猫咪闪促开启
|
||||
if c.IsWeeklyDiscountDay() || LimitedEvnetMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE) {
|
||||
for k, v := range WeeklyDiscountInfo {
|
||||
LimitNum := c.WeeklyDiscount[k]
|
||||
WeeklyDiscount[int32(k)] = &proto.WeeklyDiscountInfo{
|
||||
Discount: int32(v.Discount),
|
||||
Count: int32(v.WeeklyLimit - LimitNum),
|
||||
Id: int32(k),
|
||||
}
|
||||
}
|
||||
}
|
||||
CatDaySaleEndTime := LimitedEvnetMod.GetCatDaySaleEndTime()
|
||||
p.PushClientRes(&proto.ResCharge{
|
||||
Charge: float32(c.Charge),
|
||||
Total: int32(c.Total),
|
||||
First: GoUtil.MapIntToSlice(c.EnergyShop),
|
||||
SpecialShop: SpecialShop,
|
||||
FreeShop: int32(c.FreeShop),
|
||||
ChessShop: ChessShop,
|
||||
Gift: GoUtil.MapIntToInt32(c.Gift),
|
||||
Ad: c.Ad,
|
||||
SpecialCharge: float32(c.SpecialCharge),
|
||||
SpecialChargeWeek: int32(GoUtil.FullWeeksSince(c.LastSpecialCharge)),
|
||||
TodayCharge: float32(c.TodayCharge),
|
||||
MonthCharge: float32(c.MonthCharge),
|
||||
Wish: resWish,
|
||||
AdEndTime: c.AdEndTime,
|
||||
WeeklyDiscount: WeeklyDiscount,
|
||||
PetWorkRemainTime: c.PetWorkTime,
|
||||
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,
|
||||
})
|
||||
}
|
||||
|
||||
@ -213,7 +213,10 @@ func (p *PlayerBaseData) ResPlayerBaseInfo(player *Player) {
|
||||
func (p *PlayerBaseData) ReqBindFacebookAccount(player *Player, buf []byte) {
|
||||
req := &msg.ReqBindFacebookAccount{}
|
||||
res := &msg.ResBindFacebookAccount{}
|
||||
proto.Unmarshal(buf, req)
|
||||
err := proto.Unmarshal(buf, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
sqlStr := "SELECT * FROM t_player_baseinfo WHERE FaceBookId = ?"
|
||||
sqlStruck := db.ResPlayerBaseInfo{}
|
||||
@ -251,7 +254,10 @@ func (p *PlayerBaseData) ReqBindFacebookAccount(player *Player, buf []byte) {
|
||||
func (p *PlayerBaseData) ReqUnBindFacebook(player *Player, buf []byte) {
|
||||
req := &msg.ReqUnBindFacebook{}
|
||||
res := &msg.ResUnBindFacebook{}
|
||||
proto.Unmarshal(buf, req)
|
||||
err := proto.Unmarshal(buf, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res.ResultCode = 0
|
||||
res.BindAccountId = req.BindAccountId
|
||||
@ -270,12 +276,15 @@ func (p *PlayerBaseData) ReqUnBindFacebook(player *Player, buf []byte) {
|
||||
func (p *PlayerBaseData) ReqOnlyBindFacebook(player *Player, buf []byte) {
|
||||
req := &msg.ReqOnlyBindFacebook{}
|
||||
res := &msg.ResOnlyBindFacebook{}
|
||||
proto.Unmarshal(buf, req)
|
||||
err := proto.Unmarshal(buf, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
sqlStr := "SELECT * FROM t_player_baseinfo WHERE FaceBookId = ?"
|
||||
sqlStruck := db.ResPlayerBaseInfo{}
|
||||
isHaveOther := false
|
||||
err := db.SqlDb.Get(&sqlStruck, sqlStr, req.BindAccountId)
|
||||
err = db.SqlDb.Get(&sqlStruck, sqlStr, req.BindAccountId)
|
||||
if err != nil {
|
||||
isHaveOther = false
|
||||
} else {
|
||||
@ -334,7 +343,10 @@ func (p *PlayerBaseData) ReqOnlyBindFacebook(player *Player, buf []byte) {
|
||||
func (p *PlayerBaseData) ReqSynGameData(player *Player, buf []byte) {
|
||||
req := &msg.ReqSynGameData{}
|
||||
res := &msg.ResSynGameData{}
|
||||
proto.Unmarshal(buf, req)
|
||||
err := proto.Unmarshal(buf, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
sqlStr := "SELECT * FROM t_player_baseinfo WHERE FaceBookId = ?"
|
||||
sqlStruck := db.ResPlayerBaseInfo{}
|
||||
@ -524,7 +536,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error)
|
||||
}
|
||||
ChargeMod := player.PlayMod.getChargeMod()
|
||||
ChargeMod.TriggerChargeUnlock(int(BaseMod.Level), ChessMod.GetEmitList())
|
||||
player.PushClientRes(ChargeMod.BackData())
|
||||
player.ChargeBackData()
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
player.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul())
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
@ -550,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
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -8,6 +8,7 @@ import (
|
||||
"server/MergeConst"
|
||||
"server/conf"
|
||||
champshipCfg "server/conf/champship"
|
||||
chargeCfg "server/conf/charge"
|
||||
languageCfg "server/conf/language"
|
||||
mailCfg "server/conf/mail"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
@ -46,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)
|
||||
@ -75,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
|
||||
}
|
||||
@ -92,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",
|
||||
@ -113,12 +114,10 @@ func TriggerShippingOrderOrigin(player *Player, req *msg.ReqShippingOrder) {
|
||||
log.Debug("charge shipping order already shipped OrderSn:%s", OrderSn)
|
||||
return
|
||||
}
|
||||
// if !conf.Server.GoogleVerify {
|
||||
// Order.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
// return
|
||||
// }
|
||||
|
||||
if conf.Server.GameName == "Merge_Pet_online" {
|
||||
GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, req.ProduceId, OrderData.PayTime, GoUtil.Now())
|
||||
ProduceName := chargeCfg.GetProduceName(OrderData.ProductId)
|
||||
GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, ProduceName, OrderData.PayTime, GoUtil.Now())
|
||||
}
|
||||
log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;Token:%s", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId, req.Token)
|
||||
player.lock.Lock()
|
||||
@ -133,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
|
||||
@ -160,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",
|
||||
@ -179,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)
|
||||
@ -226,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
|
||||
@ -250,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()
|
||||
@ -266,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
|
||||
@ -279,7 +278,7 @@ func TriggerSeed(player *Player) {
|
||||
break
|
||||
}
|
||||
}
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
if !b {
|
||||
BaseMod.SetSeed(false)
|
||||
} else {
|
||||
@ -287,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
|
||||
}
|
||||
@ -296,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...)
|
||||
@ -323,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
|
||||
}
|
||||
|
||||
@ -332,7 +333,7 @@ func UnitDecoratePartCost(p *Player) error {
|
||||
DecorateMod.PartClassPool = []int{}
|
||||
DecorateMod.PartPool = make(map[int]int)
|
||||
DecorateMod.InitData()
|
||||
Items, _, _ := DecorateMod.GetDecorateCostItem(1, 33)
|
||||
Items, _, _ := DecorateMod.GetDecorateCostItem(1, 33, false)
|
||||
err := p.HandleLoseItem(Items, "")
|
||||
if err != nil {
|
||||
fmt.Print(err)
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package game
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"server/GoUtil"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/msg"
|
||||
@ -47,10 +48,14 @@ 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{})
|
||||
}
|
||||
f.RegisterHandler(msg.SERVER_ZERO_UPDATE, f.ZeroUpdate)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_SET_CATNIP_PARTNER, f.SetCatnipPartner)
|
||||
|
||||
f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
|
||||
f.Send(&msg.Msg{
|
||||
@ -79,6 +84,33 @@ func (f *VarMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (f *VarMgr) SetCatnipPartner(m *msg.Msg) (interface{}, error) {
|
||||
if Param, ok := m.Extra.(map[string]interface{}); ok {
|
||||
MyUid := GoUtil.Int(Param["uid"])
|
||||
CatnipGameId := GoUtil.Int(Param["game_id"])
|
||||
CatnipPartnerId := GoUtil.Int(Param["partner_uid"])
|
||||
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: append(OtherOfPartnerList, MyUid),
|
||||
T: m.End,
|
||||
})
|
||||
f.SetExpireVar(myKey, &VarExpireData{
|
||||
D: append(MyOfPartnerList, CatnipPartnerId),
|
||||
T: m.End,
|
||||
})
|
||||
return nil, nil
|
||||
}
|
||||
return nil, fmt.Errorf("invalid parameters for setting catnip partner")
|
||||
}
|
||||
|
||||
func (f *VarMgr) SetVar(key string, value interface{}) {
|
||||
f.getData().Var[key] = value
|
||||
}
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -8,10 +8,12 @@ import (
|
||||
)
|
||||
|
||||
type CatnipMod struct {
|
||||
Id int
|
||||
Game map[int]*CatnipGame
|
||||
|
||||
IsGetGrandReward bool // 是否领取过大丰收奖励
|
||||
Id int
|
||||
Game map[int]*CatnipGame
|
||||
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 // 已领取阶段奖励
|
||||
Mul 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
|
||||
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 (
|
||||
@ -39,9 +40,16 @@ const (
|
||||
|
||||
func (c *CatnipMod) InitData() {
|
||||
// Initialize Catnip data here
|
||||
// c.Game = nil
|
||||
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 {
|
||||
@ -56,7 +64,10 @@ func (c *CatnipMod) Login(Id int) int {
|
||||
c.Id = Id
|
||||
c.IsGetGrandReward = false // Reset grand reward status on login
|
||||
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,
|
||||
@ -72,125 +83,117 @@ 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
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Multiply(Id, Mul int) error {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
GameInfo.Mul = Mul
|
||||
func (c *CatnipMod) Multiply(Mul int) error {
|
||||
c.Mul = Mul
|
||||
return nil
|
||||
}
|
||||
|
||||
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(GameInfo.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, GameInfo.Mul)
|
||||
return Id, Growth, GameInfo.Partner, Items, ItemCost, nil
|
||||
ItemCost := catnipCfg.GetItemCost(c.Id, c.Mul)
|
||||
GameInfo.Progress += Growth
|
||||
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) {
|
||||
@ -215,7 +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) 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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]
|
||||
}
|
||||
|
||||
@ -136,8 +136,8 @@ func (c *ChargeMod) ZeroUpdate(Emit []int) {
|
||||
c.SpecialShop[i] = &SepcialShop{Grade: SpecialGrade, Count: SpecialShopCount}
|
||||
}
|
||||
c.WishList.SendList = make([]int64, 0)
|
||||
c.WeeklyDiscount = make(map[int]int)
|
||||
if c.IsWeeklyDiscountDay() && c.WeeklyEndTime < Now {
|
||||
c.WeeklyDiscount = make(map[int]int)
|
||||
c.WeeklyEndTime = GoUtil.ZeroTimestamp() + 7*24*3600
|
||||
}
|
||||
c.InitChessShop(Emit)
|
||||
@ -285,63 +285,63 @@ func (c *ChargeMod) FireFreeShop() ([]*item.Item, error) {
|
||||
}
|
||||
|
||||
// 返回数据
|
||||
func (c *ChargeMod) BackData() *msg.ResCharge {
|
||||
SpecialShop := make(map[int32]*msg.ResSpecialShop)
|
||||
ChessShop := make(map[int32]*msg.ResChessShop)
|
||||
for k, v := range c.SpecialShop {
|
||||
SpecialShop[int32(k)] = &msg.ResSpecialShop{
|
||||
Grade: int32(v.Grade),
|
||||
Count: int32(v.Count),
|
||||
}
|
||||
}
|
||||
// func (c *ChargeMod) BackData() *msg.ResCharge {
|
||||
// SpecialShop := make(map[int32]*msg.ResSpecialShop)
|
||||
// ChessShop := make(map[int32]*msg.ResChessShop)
|
||||
// for k, v := range c.SpecialShop {
|
||||
// SpecialShop[int32(k)] = &msg.ResSpecialShop{
|
||||
// Grade: int32(v.Grade),
|
||||
// Count: int32(v.Count),
|
||||
// }
|
||||
// }
|
||||
|
||||
for k, v := range c.ChessShop {
|
||||
ChessShop[int32(k)] = &msg.ResChessShop{
|
||||
Diamond: int32(v.Diamond),
|
||||
Count: int32(v.Count),
|
||||
ChessId: int32(v.Id),
|
||||
}
|
||||
}
|
||||
resWish := &msg.WishList{}
|
||||
if c.WishList != nil {
|
||||
resWish = &msg.WishList{
|
||||
Id: int32(c.WishList.ItemId),
|
||||
Count: int32(c.WishList.Count),
|
||||
Uid: c.WishList.SendList,
|
||||
}
|
||||
}
|
||||
WeeklyDiscount := make(map[int32]*msg.WeeklyDiscountInfo)
|
||||
WeeklyDiscountInfo := chargeCfg.GetWeeklyInfoAll()
|
||||
if c.IsWeeklyDiscountDay() {
|
||||
for k, v := range WeeklyDiscountInfo {
|
||||
LimitNum := c.WeeklyDiscount[k]
|
||||
WeeklyDiscount[int32(k)] = &msg.WeeklyDiscountInfo{
|
||||
Discount: int32(v.Discount),
|
||||
Count: int32(v.WeeklyLimit - LimitNum),
|
||||
Id: int32(k),
|
||||
}
|
||||
}
|
||||
}
|
||||
return &msg.ResCharge{
|
||||
Charge: float32(c.Charge),
|
||||
Total: int32(c.Total),
|
||||
First: GoUtil.MapIntToSlice(c.EnergyShop),
|
||||
SpecialShop: SpecialShop,
|
||||
FreeShop: int32(c.FreeShop),
|
||||
ChessShop: ChessShop,
|
||||
Gift: GoUtil.MapIntToInt32(c.Gift),
|
||||
Ad: c.Ad,
|
||||
SpecialCharge: float32(c.SpecialCharge),
|
||||
SpecialChargeWeek: int32(GoUtil.FullWeeksSince(c.LastSpecialCharge)),
|
||||
TodayCharge: float32(c.TodayCharge),
|
||||
MonthCharge: float32(c.MonthCharge),
|
||||
Wish: resWish,
|
||||
AdEndTime: c.AdEndTime,
|
||||
WeeklyDiscount: WeeklyDiscount,
|
||||
PetWorkRemainTime: c.PetWorkTime,
|
||||
WeeklyEndTime: c.WeeklyEndTime,
|
||||
}
|
||||
}
|
||||
// for k, v := range c.ChessShop {
|
||||
// ChessShop[int32(k)] = &msg.ResChessShop{
|
||||
// Diamond: int32(v.Diamond),
|
||||
// Count: int32(v.Count),
|
||||
// ChessId: int32(v.Id),
|
||||
// }
|
||||
// }
|
||||
// resWish := &msg.WishList{}
|
||||
// if c.WishList != nil {
|
||||
// resWish = &msg.WishList{
|
||||
// Id: int32(c.WishList.ItemId),
|
||||
// Count: int32(c.WishList.Count),
|
||||
// Uid: c.WishList.SendList,
|
||||
// }
|
||||
// }
|
||||
// WeeklyDiscount := make(map[int32]*msg.WeeklyDiscountInfo)
|
||||
// WeeklyDiscountInfo := chargeCfg.GetWeeklyInfoAll()
|
||||
// if c.IsWeeklyDiscountDay() {
|
||||
// for k, v := range WeeklyDiscountInfo {
|
||||
// LimitNum := c.WeeklyDiscount[k]
|
||||
// WeeklyDiscount[int32(k)] = &msg.WeeklyDiscountInfo{
|
||||
// Discount: int32(v.Discount),
|
||||
// Count: int32(v.WeeklyLimit - LimitNum),
|
||||
// Id: int32(k),
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return &msg.ResCharge{
|
||||
// Charge: float32(c.Charge),
|
||||
// Total: int32(c.Total),
|
||||
// First: GoUtil.MapIntToSlice(c.EnergyShop),
|
||||
// SpecialShop: SpecialShop,
|
||||
// FreeShop: int32(c.FreeShop),
|
||||
// ChessShop: ChessShop,
|
||||
// Gift: GoUtil.MapIntToInt32(c.Gift),
|
||||
// Ad: c.Ad,
|
||||
// SpecialCharge: float32(c.SpecialCharge),
|
||||
// SpecialChargeWeek: int32(GoUtil.FullWeeksSince(c.LastSpecialCharge)),
|
||||
// TodayCharge: float32(c.TodayCharge),
|
||||
// MonthCharge: float32(c.MonthCharge),
|
||||
// Wish: resWish,
|
||||
// AdEndTime: c.AdEndTime,
|
||||
// WeeklyDiscount: WeeklyDiscount,
|
||||
// PetWorkRemainTime: c.PetWorkTime,
|
||||
// WeeklyEndTime: c.WeeklyEndTime,
|
||||
// }
|
||||
// }
|
||||
|
||||
func (c *ChargeMod) InitChessShop(Emit []int) {
|
||||
if len(Emit) == 0 {
|
||||
@ -401,9 +401,9 @@ func (c *ChargeMod) InitChessShop(Emit []int) {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ChargeMod) BuyEnergy() ([]*item.Item, []*item.Item, int) {
|
||||
func (c *ChargeMod) BuyEnergy(IsWeeklyDiscount bool) ([]*item.Item, []*item.Item, int) {
|
||||
diamond := 40
|
||||
if c.IsWeeklyDiscountDay() {
|
||||
if IsWeeklyDiscount {
|
||||
LimitNum := c.WeeklyDiscount[0]
|
||||
Discount, WeeklyLimit := chargeCfg.GetWeeklyInfo(0)
|
||||
if LimitNum < WeeklyLimit {
|
||||
@ -419,7 +419,7 @@ func (c *ChargeMod) BuyEnergy() ([]*item.Item, []*item.Item, int) {
|
||||
}, diamond
|
||||
}
|
||||
|
||||
func (c *ChargeMod) BuyChess(Chess int) ([]*item.Item, []*item.Item, int, error) {
|
||||
func (c *ChargeMod) BuyChess(Chess int, IsWeeklyDiscount bool) ([]*item.Item, []*item.Item, int, error) {
|
||||
v, ok := c.ChessShop[Chess]
|
||||
if !ok {
|
||||
return nil, nil, 0, fmt.Errorf("BuyChess chess id not exist id:%d", Chess)
|
||||
@ -430,7 +430,7 @@ func (c *ChargeMod) BuyChess(Chess int) ([]*item.Item, []*item.Item, int, error)
|
||||
}
|
||||
v.Count--
|
||||
diamond := v.Diamond
|
||||
if c.IsWeeklyDiscountDay() {
|
||||
if IsWeeklyDiscount {
|
||||
LimitNum := c.WeeklyDiscount[Chess]
|
||||
Discount, WeeklyLimit := chargeCfg.GetWeeklyInfo(Chess)
|
||||
if LimitNum < WeeklyLimit {
|
||||
@ -521,6 +521,13 @@ func (c *ChargeMod) IsWeeklyDiscountDay() bool {
|
||||
return Weekday == Day || c.WeeklyEndTime > GoUtil.Now()
|
||||
}
|
||||
|
||||
func (c *ChargeMod) ResetWeeklyDiscount() {
|
||||
if c.IsWeeklyDiscountDay() {
|
||||
return
|
||||
}
|
||||
c.WeeklyDiscount = make(map[int]int)
|
||||
}
|
||||
|
||||
func (c *ChargeMod) PetWorkBackData() *msg.LogoutPetWork {
|
||||
res := &msg.LogoutPetWork{
|
||||
WorkTime: c.LastWorkTime,
|
||||
@ -529,3 +536,11 @@ func (c *ChargeMod) PetWorkBackData() *msg.LogoutPetWork {
|
||||
c.LastWorkTime = 0
|
||||
return res
|
||||
}
|
||||
|
||||
func (c *ChargeMod) GetWeeklyEndTime() int64 {
|
||||
return c.WeeklyEndTime
|
||||
}
|
||||
|
||||
func (c *ChargeMod) SetWeeklyEndTime(EndTime int64) {
|
||||
c.WeeklyEndTime = EndTime
|
||||
}
|
||||
|
||||
@ -2,8 +2,10 @@ package decorate
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
decorateCfg "server/conf/decorate"
|
||||
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
||||
"server/game/mod/item"
|
||||
"server/msg"
|
||||
"sort"
|
||||
@ -75,10 +77,14 @@ func (d *Decorate) GetDecorateAddEnergy(cnt int) []*item.Item {
|
||||
}
|
||||
|
||||
// 获取装饰消耗
|
||||
func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int, []*item.Item) {
|
||||
func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int, DecorateOffIsExist bool) ([]*item.Item, int, []*item.Item) {
|
||||
Item := decorateCfg.GetStarCost(AreaId, DecorateId)
|
||||
PetExp := decorateCfg.GetDecoratePExp(AreaId, DecorateId)
|
||||
Id := decorateCfg.GetIdBySenceAndLv(AreaId, DecorateId)
|
||||
if DecorateOffIsExist {
|
||||
OffRate := limitedTimeEventCfg.GetDecorateOffDiscount(AreaId, DecorateId)
|
||||
Item = int(math.Ceil(float64(Item) * float64(OffRate)))
|
||||
}
|
||||
Items := []*item.Item{item.NewItem(item.ITEM_STAR_ID, Item)}
|
||||
PartItem := d.PartCost[Id]
|
||||
PartItemList := make([]*item.Item, 0)
|
||||
@ -93,7 +99,7 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, in
|
||||
return Items, PetExp, PartItemList
|
||||
}
|
||||
|
||||
func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) {
|
||||
func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) {
|
||||
DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId)
|
||||
SubAlice := GoUtil.SubSlices(DecorateAll, GoUtil.MapIntToIntSlice(d.FinishList))
|
||||
sort.Ints(SubAlice)
|
||||
@ -111,6 +117,10 @@ func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int
|
||||
break
|
||||
}
|
||||
NeedStar := decorateCfg.GetStarCost(d.AreaId, v)
|
||||
if DecorateOffIsExist {
|
||||
OffRate := limitedTimeEventCfg.GetDecorateOffDiscount(d.AreaId, v)
|
||||
NeedStar = int(math.Ceil(float64(NeedStar) * float64(OffRate)))
|
||||
}
|
||||
if Star < NeedStar {
|
||||
break
|
||||
}
|
||||
@ -175,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,6 +70,8 @@ type ApplyInfo struct {
|
||||
const (
|
||||
REPLY_TYPE_GREETING = 1 // 问候
|
||||
REPLY_TYPE_GREETING_Get = 2 // 收到问候
|
||||
REPLY_TYPE_CATNIP = 3 // 猫薄荷加好友
|
||||
REPLY_TYPE_CATNIP_ITEMS = 4 // 收到猫薄荷好友道具
|
||||
)
|
||||
|
||||
// 24小时内与玩家进行过以下互动的用户,若被选中参加本次宠物宝藏,在其头像旁添加礼物盒
|
||||
@ -499,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) {
|
||||
func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, Items []*item.Item) {
|
||||
f.AutoId++
|
||||
EndTime := GoUtil.Now() + 24*3600
|
||||
f.ReplyList = append(f.ReplyList, &ReplyInfo{
|
||||
Id: f.AutoId,
|
||||
Uid: Uid,
|
||||
@ -510,6 +512,7 @@ func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string) {
|
||||
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 {
|
||||
|
||||
@ -13,6 +13,12 @@ func (f *KvMod) InitData() {
|
||||
}
|
||||
|
||||
func (f *KvMod) SetVar(key int, value string) {
|
||||
if len(value) > 500 {
|
||||
return
|
||||
}
|
||||
if len(f.Data) > 150 {
|
||||
return
|
||||
}
|
||||
f.Data[key] = value
|
||||
}
|
||||
|
||||
|
||||
@ -28,6 +28,7 @@ const (
|
||||
EVENT_TYPE_PAYBACK_DAY = 15 // 回收日
|
||||
EVENT_TYPE_LITTLE_APPRENTICE = 16 // 小学徒
|
||||
EVENT_TYPE_CAT_DAY_SALE = 17 // 猫咪大甩卖
|
||||
EVENT_TYPE_DECORATE_OFF = 18 // 装饰打折
|
||||
)
|
||||
|
||||
const (
|
||||
@ -557,3 +558,14 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
|
||||
Param: Param,
|
||||
}
|
||||
}
|
||||
|
||||
func (l LimitedTimeEventMod) EndCatDaySale() {
|
||||
delete(l.EventList, EVENT_TYPE_CAT_DAY_SALE)
|
||||
}
|
||||
|
||||
func (l LimitedTimeEventMod) GetCatDaySaleEndTime() int64 {
|
||||
if l.EventList[EVENT_TYPE_CAT_DAY_SALE] == nil {
|
||||
return 0
|
||||
}
|
||||
return l.EventList[EVENT_TYPE_CAT_DAY_SALE].StartT + l.EventList[EVENT_TYPE_CAT_DAY_SALE].Remian
|
||||
}
|
||||
|
||||
@ -107,6 +107,11 @@ const (
|
||||
|
||||
HANDLE_TYPE_FRIEND_GREETING_REPLY // 好友问候回复
|
||||
HANDLE_TYPE_FRIEND_SPONSOER // 好友赞助体力
|
||||
|
||||
HANDLE_TYPE_CHAMPSHIP_LOGIN // 锦标赛登录
|
||||
HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息
|
||||
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)
|
||||
// 从棋子池中获取棋子
|
||||
|
||||
@ -307,7 +307,6 @@ func (p *PlayroomMod) ZeroUpdate() {
|
||||
p.DailyTaskReward = make([]int, 0)
|
||||
p.TodayVisitedUsers = make([]int, 0)
|
||||
p.ADItem = make(map[int]*ItemInfo)
|
||||
p.WeeklyDiscount = make(map[int]int)
|
||||
p.InitDailyTask()
|
||||
}
|
||||
|
||||
@ -1116,3 +1115,7 @@ func (p *PlayroomMod) AdWatch(Id int) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) ResetWeeklyDiscount() {
|
||||
p.WeeklyDiscount = make(map[int]int)
|
||||
}
|
||||
|
||||
@ -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=
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"runtime/debug"
|
||||
"server/conf"
|
||||
"server/game"
|
||||
"server/gate"
|
||||
"server/pkg/github.com/name5566/leaf"
|
||||
|
||||
lconf "server/pkg/github.com/name5566/leaf/conf"
|
||||
)
|
||||
|
||||
@ -19,6 +21,14 @@ func main() {
|
||||
lconf.ListenAddr = conf.Server.ListenAddr
|
||||
lconf.CenterAddr = conf.Server.CenterAddr
|
||||
lconf.PendingWriteNum = conf.PendingWriteNum
|
||||
// 当内存>2G时开始GC
|
||||
debug.SetGCPercent(50)
|
||||
debug.SetMemoryLimit(2 << 30)
|
||||
// 启动 pprof(仅绑定本地)
|
||||
go func() {
|
||||
// 如果需要绑定所有接口改为 ":6060"
|
||||
_ = http.ListenAndServe("127.0.0.1:6060", nil)
|
||||
}()
|
||||
|
||||
leaf.Run(
|
||||
game.Module,
|
||||
|
||||
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