diff --git a/.gitignore b/.gitignore index 66d65180..398fa56f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ src/server/goroutine.prof src/server/heap_after.pb.gz src/server/test/logs/* src/server/test/teLog/* +src/server/*.exe* diff --git a/src/server/README.MD b/src/server/README.MD new file mode 100644 index 00000000..42588485 --- /dev/null +++ b/src/server/README.MD @@ -0,0 +1,16 @@ +## 命名规范 + + +- **清晰优先**:名称应准确表达含义,避免歧义。 +- **导出规则**:导出标识符首字母大写,未导出首字母小写。 +- **包名**:小写单词,简短且描述职责(如 `store`、`auth`)。 +- **文件名**:小写(可下划线分隔),测试文件以 `_test.go` 结尾。 +- **函数/变量/类型**:驼峰命名;导出使用 PascalCase(例如 `UserService`、`CreateUser`)。 +- **接口**:以行为命名,常用 `-er` 结尾(如 `Reader`、`Store`),避免 `I` 前缀。 +- **缩写**:统一大小写(例如导出使用 `ID`、`URL`;未导出使用 `id`、`url`)。 +- **错误**:包级错误使用 `Err` 前缀(如 `ErrNotFound`)。 +- **Context 与并发**:统一使用 `ctx` 作 `context.Context`,通道命名要有语义(如 `done`, `jobs`)。 +- **构造函数/选项**:使用 `NewType` 与 `WithXxx` 约定,避免多个布尔参数。 + + + diff --git a/src/server/benchmark_test.go b/src/server/benchmark_test.go index dfc02b0f..dbb7cdb9 100644 --- a/src/server/benchmark_test.go +++ b/src/server/benchmark_test.go @@ -6,7 +6,6 @@ import ( "server/game" "server/game/mod/msg" "testing" - "time" ) // func TestBenchInit(t *testing.T) { @@ -20,34 +19,23 @@ import ( // } // } // } -func BenchmarkGame(b *testing.B) { - runtime.GOMAXPROCS(2) - fmt.Print("BenchmarkGame") - f := "wmz00%d" - for i := 0; i < 10000; i++ { - go func() { - UserName := fmt.Sprintf(f, i) - p1 := new(game.Player) - err := p1.InitPlayer(UserName) - if err != nil { - fmt.Println(err) - } - game.G_GameLogicPtr.SetPlayer(p1) - for { - time.Sleep(1 * time.Second) - game.Benchmark(p1) - } - }() - } - go func() { - time.Sleep(20 * time.Second) - game.G_GameLogicPtr.ChampshipMgrSend(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, - }) - }() - for { - time.Sleep(1 * time.Second) - printMemUsage() + +/* +* +cluster 消息处理基准测试 + + 36716 34961 ns/op 1690 B/op 38 allocs/op +*/ +func BenchmarkClusterMsg(b *testing.B) { + game.ClusterMgrInit() + runtime.GOMAXPROCS(8) + game.G_getGameLogic() + for i := 0; i < b.N; i++ { + m := &msg.Msg{ + HandleType: msg.HANDLE_MOD_PLAYER_LOGIN, + Extra: 0, + } + game.MessageHandle(m) } } diff --git a/src/server/cluster/Cluster.go b/src/server/cluster/Cluster.go index 254f623a..e6a12c53 100644 --- a/src/server/cluster/Cluster.go +++ b/src/server/cluster/Cluster.go @@ -3,9 +3,9 @@ package mergeCluster import ( "fmt" "math" - "server/GoUtil" "server/conf" "server/game/mod/msg" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/network" "sync" @@ -30,7 +30,7 @@ func Init() { server = new(network.TCPServer) server.Addr = conf.Server.ListenAddr server.MaxConnNum = int(math.MaxInt32) - server.PendingWriteNum = conf.PendingWriteNum + server.PendingWriteNum = 1 << 14 server.LenMsgLen = 4 server.MaxMsgLen = 4096 server.NewAgent = newServerAgent diff --git a/src/server/cluster/ClusterFunc.go b/src/server/cluster/cluster_func.go similarity index 74% rename from src/server/cluster/ClusterFunc.go rename to src/server/cluster/cluster_func.go index b610540b..d02bdce9 100644 --- a/src/server/cluster/ClusterFunc.go +++ b/src/server/cluster/cluster_func.go @@ -2,9 +2,9 @@ package mergeCluster import ( "fmt" - "server/GoUtil" "server/conf" "server/game/mod/msg" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/network" "time" @@ -27,14 +27,14 @@ func HandShake(a *Agent) { log.Debug("HandShake GobMarshal err %v", err) return } - // log.Debug("握手 server id :%d", conf.Server.ServerID) + log.Debug("握手 server id :%d", conf.Server.ServerID) a.WriteMsg(data) } // 握手回调 func HandShakeRecv(a *Agent, m *msg.Msg) error { ServerId := m.From - // log.Debug("收到握手回复 ServerId %v", ServerId) + log.Debug("收到握手回复 ServerId %v", ServerId) a.ServerId = ServerId serverAgent.Store(ServerId, a) @@ -48,19 +48,14 @@ func HandShakeRecv(a *Agent, m *msg.Msg) error { RemoteAddr: m.Extra.(string), }, }) + } else { + syncMsg := &msg.Msg{ + Type: msg.CLUSTER_FRIEND_SYNC, + To: ServerId, + HandleType: msg.HANDLE_MOD_CLUSTER_SYNC, + } + sendGameMsg(syncMsg) } - syncMsg := &msg.Msg{ - Type: msg.CLUSTER_FRIEND_SYNC, - To: ServerId, - } - sendGameMsg(syncMsg) - // fmt.Print("现有区服连接:") - // serverAgent.Range(func(key, value interface{}) bool { - // fmt.Print(key) - // fmt.Print(",") - // return true - // }) - // fmt.Println() return nil } @@ -79,7 +74,7 @@ func ClusterJoin(a *Agent, m *msg.Msg) error { return nil } log.Debug("ClusterJoin ServerId %v", clusterJoin.ServerId) - connectRemote(clusterJoin.RemoteAddr, clusterJoin.ServerId, "server") + //connectRemote(clusterJoin.RemoteAddr, clusterJoin.ServerId, "server") return nil } @@ -96,23 +91,27 @@ func connectRemote(RemoteAddr string, ConnType int, ConnLabel string) error { client := new(network.TCPClient) client.Addr = RemoteAddr client.ConnNum = 1 - client.PendingWriteNum = conf.PendingWriteNum + client.PendingWriteNum = 1 << 14 client.LenMsgLen = 4 client.MaxMsgLen = 4096 client.NewAgent = newAgent client.ConnType = ConnType client.ConnLabel = ConnLabel - client.ConnectInterval = time.Duration(time.Minute * 5) + client.ConnectInterval = time.Duration(time.Minute * 1) if ConnType == ClusterCenterId { // 中心服断开重连 client.AutoReconnect = true } client.Start() Center = client clients = append(clients, client) + log.Debug("connet remote to addr:%s", RemoteAddr) return nil } func SendServerMsg(m *msg.Msg, serverId int) error { + if m.UniKey == "" { + 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 { @@ -126,25 +125,32 @@ 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 { - log.Debug("CallServerMsg GobMarshal err %v", err) - return nil, err - } - v.(network.Agent).WriteMsg(data) + if m.UniKey == "" { + m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m)) } + v, ok := serverAgent.Load(serverId) + // 之后再发送消息 + if !ok { + return nil, fmt.Errorf("server %d not online", serverId) + } + // 先注册回调通道,避免发送出去后对方快速返回导致丢失 newChan := make(chan *msg.Msg, 1) registerChanel(m.UniKey, newChan) - timeout := time.After(15 * time.Second) + defer unregisterChanel(m.UniKey) + data, err := GoUtil.GobMarshal(m) + if err != nil { + log.Debug("CallServerMsg GobMarshal err %v", err) + return nil, err + } + v.(network.Agent).WriteMsg(data) + // 等待返回(直接接收一次) + timeout := time.After(5 * time.Second) select { - case <-newChan: - backm := <-newChan - unregisterChanel(m.UniKey) + case backm := <-newChan: if backm == nil { return nil, fmt.Errorf("server %d not response", serverId) } + log.Debug("CallServerMsg reply %v", backm) return backm, nil case <-timeout: return nil, fmt.Errorf("timeout waiting for server %d response", serverId) @@ -165,13 +171,7 @@ func SendMsgAll(m *msg.Msg) { func processMsg(a *Agent, m *msg.Msg) error { var err error - // 先处理同步回调 - if m.UniKey != "" { - if chanel, ok := CallbackChan[m.UniKey]; ok { - chanel <- m - } - return nil - } + if fun, ok := FuncMap[m.Type]; ok { err = fun(a, m) } else { diff --git a/src/server/cluster/Type.go b/src/server/cluster/cluster_type.go similarity index 100% rename from src/server/cluster/Type.go rename to src/server/cluster/cluster_type.go diff --git a/src/server/conf/activity/ActivityCfg.go b/src/server/conf/activity/activity_cfg.go similarity index 99% rename from src/server/conf/activity/ActivityCfg.go rename to src/server/conf/activity/activity_cfg.go index e09cae97..8ab34b62 100644 --- a/src/server/conf/activity/ActivityCfg.go +++ b/src/server/conf/activity/activity_cfg.go @@ -1,9 +1,9 @@ package activityCfg import ( - "server/GoUtil" languageCfg "server/conf/language" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/msg" "server/pkg/github.com/name5566/leaf/log" diff --git a/src/server/conf/avatar/AvatarCfg.go b/src/server/conf/avatar/avatar_cfg.go similarity index 100% rename from src/server/conf/avatar/AvatarCfg.go rename to src/server/conf/avatar/avatar_cfg.go diff --git a/src/server/conf/base/BaseCfg.go b/src/server/conf/base/base_cfg.go similarity index 100% rename from src/server/conf/base/BaseCfg.go rename to src/server/conf/base/base_cfg.go diff --git a/src/server/conf/card/CardCfg.go b/src/server/conf/card/card_cfg.go similarity index 99% rename from src/server/conf/card/CardCfg.go rename to src/server/conf/card/card_cfg.go index 7849b690..a3f221db 100644 --- a/src/server/conf/card/CardCfg.go +++ b/src/server/conf/card/card_cfg.go @@ -1,8 +1,8 @@ package cardCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" diff --git a/src/server/conf/catnip/CatnipCfg.go b/src/server/conf/catnip/catnip_cfg.go similarity index 91% rename from src/server/conf/catnip/CatnipCfg.go rename to src/server/conf/catnip/catnip_cfg.go index ff388e17..d60b89d3 100644 --- a/src/server/conf/catnip/CatnipCfg.go +++ b/src/server/conf/catnip/catnip_cfg.go @@ -1,8 +1,8 @@ package catnipCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" ) @@ -112,6 +112,21 @@ func GetProgressReward(Id int, Rewards []int, Progress int) ([]*item.Item, []int return Items, Ids } +func GetProgressNum(Id int) int { + TemplateId := GetTemplateId(Id) + data, err := gamedata.GetData(CATNIP_GAME_CFG_NAME) + if err != nil { + return 0 + } + Num := 0 + for _, v := range data { + if gamedata.GetIntValue(v, "Template") == TemplateId { + Num++ + } + } + return Num +} + func GetItemCost(Id, Mul int) []*item.Item { data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id) if err != nil { diff --git a/src/server/conf/champship/ChampshipCfg.go b/src/server/conf/champship/champship_cfg.go similarity index 98% rename from src/server/conf/champship/ChampshipCfg.go rename to src/server/conf/champship/champship_cfg.go index 82851c52..47211d3f 100644 --- a/src/server/conf/champship/ChampshipCfg.go +++ b/src/server/conf/champship/champship_cfg.go @@ -1,8 +1,8 @@ package champshipCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" ) diff --git a/src/server/conf/charge/ChargeCfg.go b/src/server/conf/charge/charge_cfg.go similarity index 99% rename from src/server/conf/charge/ChargeCfg.go rename to src/server/conf/charge/charge_cfg.go index b9153c61..a86d48c3 100644 --- a/src/server/conf/charge/ChargeCfg.go +++ b/src/server/conf/charge/charge_cfg.go @@ -1,8 +1,8 @@ package chargeCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "sort" "strings" diff --git a/src/server/conf/collect/CollectCfg.go b/src/server/conf/collect/collect_cfg.go similarity index 97% rename from src/server/conf/collect/CollectCfg.go rename to src/server/conf/collect/collect_cfg.go index 35be1bb5..22b8dc3a 100644 --- a/src/server/conf/collect/CollectCfg.go +++ b/src/server/conf/collect/collect_cfg.go @@ -1,8 +1,8 @@ package collectCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" ) diff --git a/src/server/conf/conf.go b/src/server/conf/conf.go index 291fe683..0da14e78 100644 --- a/src/server/conf/conf.go +++ b/src/server/conf/conf.go @@ -7,10 +7,10 @@ import ( var ( // log conf - LogFlag = log.LstdFlags + LogFlag = log.LstdFlags | log.Lmicroseconds // gate conf - PendingWriteNum = 2000 + PendingWriteNum = 2000 // 客户端链接的写入消息队列长度 MaxMsgLen uint32 = 65536 // 16KB HTTPTimeout = 10 * time.Second LenMsgLen = 2 diff --git a/src/server/conf/dailyTask/DailyTaskCfg.go b/src/server/conf/daily_task/daily_task_cfg.go similarity index 100% rename from src/server/conf/dailyTask/DailyTaskCfg.go rename to src/server/conf/daily_task/daily_task_cfg.go diff --git a/src/server/conf/decorate/DecorateCfg.go b/src/server/conf/decorate/decorate_cfg.go similarity index 100% rename from src/server/conf/decorate/DecorateCfg.go rename to src/server/conf/decorate/decorate_cfg.go diff --git a/src/server/conf/emoji/emojiCfg.go b/src/server/conf/emoji/emoji_cfg.go similarity index 96% rename from src/server/conf/emoji/emojiCfg.go rename to src/server/conf/emoji/emoji_cfg.go index 5bbc7308..f60995cf 100644 --- a/src/server/conf/emoji/emojiCfg.go +++ b/src/server/conf/emoji/emoji_cfg.go @@ -1,7 +1,7 @@ package emojiCfg import ( - "server/GoUtil" + GoUtil "server/game_util" "server/gamedata" ) diff --git a/src/server/conf/endless/EndlessCfg.go b/src/server/conf/endless/endless_cfg.go similarity index 100% rename from src/server/conf/endless/EndlessCfg.go rename to src/server/conf/endless/endless_cfg.go diff --git a/src/server/conf/face/FaceCfg.go b/src/server/conf/face/face_cfg.go similarity index 100% rename from src/server/conf/face/FaceCfg.go rename to src/server/conf/face/face_cfg.go diff --git a/src/server/conf/friend/friend_cfg.go b/src/server/conf/friend/friend_cfg.go new file mode 100644 index 00000000..187ff260 --- /dev/null +++ b/src/server/conf/friend/friend_cfg.go @@ -0,0 +1,19 @@ +package friendCfg + +import "server/gamedata" + +const ( + CFG_NPC_FRIENDS = "NPCFriends" +) + +func init() { + gamedata.InitCfg(CFG_NPC_FRIENDS) +} + +func IsNpcFriend(Id int) bool { + _, err := gamedata.GetDataByIntKey(CFG_NPC_FRIENDS, Id) + if err != nil { + return false + } + return true +} diff --git a/src/server/conf/friendTreasure/friendTreasureCfg.go b/src/server/conf/friend_treasure/friend_treasure_cfg.go similarity index 98% rename from src/server/conf/friendTreasure/friendTreasureCfg.go rename to src/server/conf/friend_treasure/friend_treasure_cfg.go index 15872a3e..acf1c133 100644 --- a/src/server/conf/friendTreasure/friendTreasureCfg.go +++ b/src/server/conf/friend_treasure/friend_treasure_cfg.go @@ -1,8 +1,8 @@ package friendTreasureCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" ) diff --git a/src/server/conf/guessColor/guessColorCfg..go b/src/server/conf/guess_color/guess_color_cfg.go similarity index 98% rename from src/server/conf/guessColor/guessColorCfg..go rename to src/server/conf/guess_color/guess_color_cfg.go index 932d979a..872622a0 100644 --- a/src/server/conf/guessColor/guessColorCfg..go +++ b/src/server/conf/guess_color/guess_color_cfg.go @@ -1,8 +1,8 @@ package guesscolorCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "strings" ) diff --git a/src/server/conf/guide/guideCfg.go b/src/server/conf/guide/guide_cfg.go similarity index 100% rename from src/server/conf/guide/guideCfg.go rename to src/server/conf/guide/guide_cfg.go diff --git a/src/server/conf/guideTask/GuideTaskCfg.go b/src/server/conf/guide_task/guide_task_cfg.go similarity index 98% rename from src/server/conf/guideTask/GuideTaskCfg.go rename to src/server/conf/guide_task/guide_task_cfg.go index 19a4255a..c0158042 100644 --- a/src/server/conf/guideTask/GuideTaskCfg.go +++ b/src/server/conf/guide_task/guide_task_cfg.go @@ -1,8 +1,8 @@ package GuideTaskCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" diff --git a/src/server/conf/guideTask/GuideTaskCfg_test.go b/src/server/conf/guide_task/guide_task_cfg_test.go similarity index 100% rename from src/server/conf/guideTask/GuideTaskCfg_test.go rename to src/server/conf/guide_task/guide_task_cfg_test.go diff --git a/src/server/conf/handbook/handbookCfg.go b/src/server/conf/handbook/handbook_cfg.go similarity index 100% rename from src/server/conf/handbook/handbookCfg.go rename to src/server/conf/handbook/handbook_cfg.go diff --git a/src/server/conf/invite/inviteCfg.go b/src/server/conf/invite/invite_cfg.go similarity index 100% rename from src/server/conf/invite/inviteCfg.go rename to src/server/conf/invite/invite_cfg.go diff --git a/src/server/conf/item/ItemCfg.go b/src/server/conf/item/Item_cfg.go similarity index 100% rename from src/server/conf/item/ItemCfg.go rename to src/server/conf/item/Item_cfg.go diff --git a/src/server/conf/language/languageCfg.go b/src/server/conf/language/language_cfg.go similarity index 100% rename from src/server/conf/language/languageCfg.go rename to src/server/conf/language/language_cfg.go diff --git a/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go b/src/server/conf/limited_time_event/limited_time_event_cfg.go similarity index 99% rename from src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go rename to src/server/conf/limited_time_event/limited_time_event_cfg.go index 6c4e30b7..99efcf8b 100644 --- a/src/server/conf/limitedTimeEvent/LimitedTimeEventCfg.go +++ b/src/server/conf/limited_time_event/limited_time_event_cfg.go @@ -1,8 +1,8 @@ package limitedTimeEventCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "sort" diff --git a/src/server/conf/mail/mailCfg.go b/src/server/conf/mail/mail_cfg.go similarity index 99% rename from src/server/conf/mail/mailCfg.go rename to src/server/conf/mail/mail_cfg.go index 73a11f6c..c237068a 100644 --- a/src/server/conf/mail/mailCfg.go +++ b/src/server/conf/mail/mail_cfg.go @@ -2,9 +2,9 @@ package mailCfg import ( "fmt" - "server/GoUtil" languageCfg "server/conf/language" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/msg" "strings" diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/merge_data/merge_data_cfg.go similarity index 99% rename from src/server/conf/mergeData/MergeDataCfg.go rename to src/server/conf/merge_data/merge_data_cfg.go index ae3c8220..fa7c00fe 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/merge_data/merge_data_cfg.go @@ -2,8 +2,8 @@ package mergeDataCfg import ( "errors" - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strconv" diff --git a/src/server/conf/mining/miningCfg.go b/src/server/conf/mining/mining_cfg.go similarity index 98% rename from src/server/conf/mining/miningCfg.go rename to src/server/conf/mining/mining_cfg.go index efb72bfd..c1a90bba 100644 --- a/src/server/conf/mining/miningCfg.go +++ b/src/server/conf/mining/mining_cfg.go @@ -1,8 +1,8 @@ package miningCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "strconv" "strings" diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/order_cfg.go similarity index 100% rename from src/server/conf/order/orderCfg.go rename to src/server/conf/order/order_cfg.go diff --git a/src/server/conf/pass/passCfg.go b/src/server/conf/pass/pass_cfg.go similarity index 100% rename from src/server/conf/pass/passCfg.go rename to src/server/conf/pass/pass_cfg.go diff --git a/src/server/conf/playroom/playroomCfg.go b/src/server/conf/playroom/playroom_cfg.go similarity index 99% rename from src/server/conf/playroom/playroomCfg.go rename to src/server/conf/playroom/playroom_cfg.go index 61faae1d..89d30a00 100644 --- a/src/server/conf/playroom/playroomCfg.go +++ b/src/server/conf/playroom/playroom_cfg.go @@ -1,8 +1,8 @@ package playroomCfg import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" "strings" diff --git a/src/server/conf/race/raceCfg.go b/src/server/conf/race/race_cfg.go similarity index 100% rename from src/server/conf/race/raceCfg.go rename to src/server/conf/race/race_cfg.go diff --git a/src/server/conf/randname/randnameCfg.go b/src/server/conf/randname/randname_cfg.go similarity index 97% rename from src/server/conf/randname/randnameCfg.go rename to src/server/conf/randname/randname_cfg.go index 0a8a04ec..b0f4cdcf 100644 --- a/src/server/conf/randname/randnameCfg.go +++ b/src/server/conf/randname/randname_cfg.go @@ -1,7 +1,7 @@ package randnameCfg import ( - "server/GoUtil" + GoUtil "server/game_util" "server/gamedata" "strconv" ) diff --git a/src/server/conf/server.json b/src/server/conf/server.json index c6779e49..782ff82b 100644 --- a/src/server/conf/server.json +++ b/src/server/conf/server.json @@ -14,7 +14,7 @@ "AppPath": "./app", "TELOGDIR" : "./teLog/", - "GameName": "Merge_Pet_Local", + "GameName": "pet_home_local", "ServerType":"node", @@ -22,12 +22,12 @@ "ServerOpenTime": "2018-01-01 00:00:00", "ServerName": "Merge_Pet", "ServerStatus" : 1, - "ServerCenter" : 1, + "ServerCenter" : 0, "GameConfPath": "D:/Github/pet_home_server/src/server/gamedata/config/", "ListenAddr":":9001", - "CenterAddr": "pethome.bywaystudios.com:9000", - "RemoteAddr":"host.docker.internal:9001", + "CenterAddr": "127.0.0.1:7000", + "RemoteAddr":"127.0.0.1:9001", "RedisAddr":"127.0.0.1", "RedisPort" :"6379", diff --git a/src/server/conf/sevenLogin/SevenLoginCfg.go b/src/server/conf/seven_login/seven_login_cfg.go similarity index 100% rename from src/server/conf/sevenLogin/SevenLoginCfg.go rename to src/server/conf/seven_login/seven_login_cfg.go diff --git a/src/server/conf/startMerge/StartMergeCfg.go b/src/server/conf/start_merge/start_merge_cfg.go similarity index 100% rename from src/server/conf/startMerge/StartMergeCfg.go rename to src/server/conf/start_merge/start_merge_cfg.go diff --git a/src/server/conf/user/UserData.go b/src/server/conf/user/user_cfg.go similarity index 100% rename from src/server/conf/user/UserData.go rename to src/server/conf/user/user_cfg.go diff --git a/src/server/db/Mysql.go b/src/server/db/Mysql.go index 43f835ca..fecbf2de 100644 --- a/src/server/db/Mysql.go +++ b/src/server/db/Mysql.go @@ -3,9 +3,9 @@ package db import ( "fmt" "reflect" - "server/GoUtil" "server/MergeConst" "server/conf" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" "strings" "sync" @@ -16,13 +16,6 @@ import ( "github.com/jmoiron/sqlx" ) -type user struct { - Id int `db:"user_id"` - Sex int `db:"sex"` - UserName string `db:"username"` - Email string `db:"email"` -} - var SqlDb *sqlx.DB var sqlDbMu sync.Mutex @@ -271,6 +264,22 @@ func GetPlayerBaseInfoFromDbByName(name string) *ResPlayerBaseInfo { return &res } +func GetPlayerBan(name string) int64 { + sqlStr := "SELECT ban FROM t_player_baseinfo WHERE user_name = ?" + var ban int64 + if err := SqlDb.Get(&ban, sqlStr, name); err != nil { + log.Debug("table: %s, sql :%s, exec failed, err:%v\n", "PlayerBaseInfo", sqlStr, err) + return 0 + } + return ban +} + +func UpdatePlayerBan(uid int64, ban int64) error { + sqlStr := "UPDATE t_player_baseinfo SET ban = ? WHERE dwUin = ?" + _, err := SqlDb.Exec(sqlStr, ban, uid) + return err +} + func UpdatePlayerBaseInfoName(oldName, newName string) error { sqlStr := "UPDATE t_player_baseinfo SET user_name = ? WHERE user_name = ?" _, err := SqlDb.Exec(sqlStr, newName, oldName) @@ -297,6 +306,17 @@ func GetAccountInfoFromDb(name string) *Db_Account { return &res } +func ResetAccountData(oldName, newName string) error { + sqlStr := "UPDATE t_account SET user_name = ? WHERE user_name = ?" + _, err := SqlDb.Exec(sqlStr, newName, oldName) + if err != nil { + return err + } + sqlStr = "UPDATE t_player_baseinfo SET user_name = ? WHERE user_name = ?" + _, err = SqlDb.Exec(sqlStr, newName, oldName) + return err +} + func UpdateAccountInfoToDb(account *Db_Account) (err error) { _, err = SqlDb.Exec("UPDATE t_account SET user_password = ? WHERE user_name = ?", account.UserPassword, account.UserName) return diff --git a/src/server/db/Redis.go b/src/server/db/Redis.go index f8f59896..bc5ab33d 100644 --- a/src/server/db/Redis.go +++ b/src/server/db/Redis.go @@ -164,6 +164,17 @@ func RedisGetKey(key string) (string, error) { return val, nil } +func RedisGetKeyBytes(key string) ([]byte, error) { + if RdbRead == nil { + return nil, nil + } + val, err := RdbRead.Get(ctx, key).Bytes() + if err != nil { + return nil, err + } + return val, nil +} + func RedisDelKey(key string) { if RdbWrite == nil { log.Debug("redis write client is nil") diff --git a/src/server/db/SqlStruct.go b/src/server/db/SqlStruct.go index ecfe8238..4d0ece3a 100644 --- a/src/server/db/SqlStruct.go +++ b/src/server/db/SqlStruct.go @@ -37,12 +37,12 @@ type ResPlayerBaseInfo struct { Guild int32 `db:"guild"` PackUnlockCount int32 `db:"pack_unlock_count"` LastPlayTime int32 `db:"last_play_time"` - EnergyBuyCount int32 `db:"EnergyBuyCount"` + Ban int64 `db:"ban"` UserName string `db:"user_name"` NickName string `db:"nick_name"` LoginTime int32 `db:"login_time"` LogoutTime int32 `db:"logout_time"` - Todayolinetime int32 `db:"todayolinetime"` + Node int32 `db:"node"` Rolecreatetime int32 `db:"rolecreatetime"` EmitOrderCnt int32 `db:"EmitOrderCnt"` DailyRenewTime int32 `db:"DailyRenewTime"` diff --git a/src/server/game/BanMgr.go b/src/server/game/BanMgr.go deleted file mode 100644 index f9ab1588..00000000 --- a/src/server/game/BanMgr.go +++ /dev/null @@ -1,69 +0,0 @@ -package game - -import ( - "encoding/gob" - "server/GoUtil" -) - -type BanMgr struct { - *ServerMod -} - -type BanData struct { - NewBanList map[int64]*BanInfo // 新增的封禁列表 -} - -type BanInfo struct { - UserId int64 // 玩家ID - EndTime int64 // 封禁结束时间,0表示永久封禁 - Reason string // 封禁原因 -} - -func (f *BanMgr) Init() { - gob.Register(&BanData{}) - f.key = BAN_MGR_KEY - f.data = &BanData{ - NewBanList: make(map[int64]*BanInfo), - } - // 注册处理函数 - f.init() - if f.data.(*BanData).NewBanList == nil { - f.data.(*BanData).NewBanList = make(map[int64]*BanInfo) - } -} - -func (f *BanMgr) IsBanned(userId int64) bool { - if f.data.(*BanData).NewBanList == nil { - return false - } - Info, banned := f.data.(*BanData).NewBanList[userId] - if !banned { - return false - } - return Info.EndTime > GoUtil.Now() || Info.EndTime == -1 // 如果EndTime为0,表示永久封禁 -} - -func (f *BanMgr) GetBanInfo(userId int64) *BanInfo { - if f.data.(*BanData).NewBanList == nil { - return &BanInfo{} - } - Info, banned := f.data.(*BanData).NewBanList[userId] - if !banned { - return &BanInfo{} - } - return Info -} - -func (f *BanMgr) BanUser(userId int64, endTime int64, reason string) { - f.data.(*BanData).NewBanList[userId] = &BanInfo{ - UserId: userId, - EndTime: endTime, - Reason: reason, - } - f.SaveData() -} - -func (f *BanMgr) UnbanUser(userId int64) { - delete(f.data.(*BanData).NewBanList, userId) - f.SaveData() -} diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index 3e13c142..64b1f6a0 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -6,10 +6,10 @@ import ( "encoding/json" "fmt" "os" - "server/GoUtil" "server/MergeConst" "server/conf" userCfg "server/conf/user" + GoUtil "server/game_util" "strconv" "sync" @@ -83,8 +83,8 @@ type GameLogic struct { MailMgr *MailMgr // 邮件管理器 ChampshipMgr *ChampshipMgr // 锦标赛管理器 VarMgr *VarMgr // 变量管理器 - BanMgr *BanMgr // 封号管理器 StartTime int64 // 服务器启动时间 + MessageMgr *MessageMgr // 消息管理器 } type ServerInfo struct { @@ -179,7 +179,7 @@ func (ad *GameLogic) NewAccountInsertDataToDB() bool { return false } - insertId = insertId + int64(conf.Server.ServerID*100000) + int64(conf.Server.AppID*100000000) + insertId = insertId + int64(100000) + int64(conf.Server.AppID*100000000) playerInfo := &db.ResPlayerBaseInfo{} playerInfo.DwUin = int64(insertId) playerInfo.Energy = int32(userCfg.GetInitEnergy()) @@ -192,11 +192,10 @@ func (ad *GameLogic) NewAccountInsertDataToDB() bool { playerInfo.MusicCode = 1 playerInfo.Guild = 1 playerInfo.PackUnlockCount = 5 - playerInfo.EnergyBuyCount = 0 playerInfo.UserName = ad.Db_AccountInfo.UserName playerInfo.LoginTime = (int32)(time.Now().Unix()) playerInfo.LogoutTime = 0 - playerInfo.Todayolinetime = 0 + playerInfo.Node = int32(conf.Server.ServerID) playerInfo.Rolecreatetime = (int32)(time.Now().Unix()) playerInfo.FaceBookId = "" db.FormatAllMemInsertDb(playerInfo, "t_player_baseinfo") @@ -271,67 +270,6 @@ func (ad *GameLogic) CreateFriendMgr() { ad.FriendMgr.Init() } -func (ad *GameLogic) FriendMgrSend(m *MsgMod.Msg) { - ad.FriendMgr.Send(m) -} - -func (ad *GameLogic) SetUserData(Uid int, Op int, Data interface{}) { - ad.FriendMgr.Send(&MsgMod.Msg{ - From: Uid, - To: Uid, - Type: MsgMod.HANDLE_TYPE_VAR_USER_SET, - SendT: GoUtil.Now(), - Extra: VarOpration{Type: Op, Data: Data}, - }) -} - -func (ad *GameLogic) SetDataSync(Uid int, Op int, Data interface{}) error { - _, err := ad.VarMgr.Call(&MsgMod.Msg{ - From: Uid, - To: Uid, - Type: MsgMod.HANDLE_TYPE_VAR_EXPIRE_SET, - SendT: GoUtil.Now(), - Extra: VarOpration{Type: Op, Data: Data}, - }) - 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, - To: Uid, - Type: MsgMod.HANDLE_TYPE_VAR_USER_GET, - SendT: GoUtil.Now(), - }) - if err != nil { - return &VarUserData{} - } - return result.(*VarUserData) -} - -func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} { - result, err := ad.FriendMgr.Call(m) - if err != nil { - return nil - } - return result -} - // 排行榜管理器 func (ad *GameLogic) CreateRankMgr() { ad.RankMgr = &RankMgr{ @@ -360,6 +298,13 @@ func (ad *GameLogic) CreateMailMgr() { ad.MailMgr.Init() } +func (ad *GameLogic) CreateMessageMgr() { + ad.MessageMgr = &MessageMgr{ + ServerMod: new(ServerMod), + } + ad.MessageMgr.MessageMgrInit() +} + func (ad *GameLogic) MailMgrSend(m *MsgMod.Msg) { ad.MailMgr.Send(m) } @@ -412,26 +357,6 @@ func (ad *GameLogic) VarMgrCall(m *MsgMod.Msg) interface{} { return result } -// 封号管理器 -func (ad *GameLogic) CreateBanMgr() { - ad.BanMgr = &BanMgr{ - ServerMod: new(ServerMod), - } - ad.BanMgr.Init() -} - -func (ad *GameLogic) BanMgrSend(m *MsgMod.Msg) { - ad.BanMgr.Send(m) -} - -func (ad *GameLogic) BanMgrCall(m *MsgMod.Msg) interface{} { - result, err := ad.BanMgr.Call(m) - if err != nil { - return nil - } - return result -} - func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData { if Id == 0 { return nil @@ -525,6 +450,7 @@ func (ad *GameLogic) GetResFriendPlayerByUid(Id int) *msg.ResFriendPlayerSimple DressSet: GoUtil.MapIntToInt32(player.DressSet), Friend: GoUtil.IntToInt32(player.Friend), Physiology: GoUtil.MapIntToInt32(player.Physiology), + PetName: player.PetName, } } @@ -544,13 +470,15 @@ func G_getGameLogic() *GameLogic { G_GameLogicPtr.InitActivity() // 初始化活动 G_GameLogicPtr.GetVersion() // 获取版本号 G_GameLogicPtr.CreateLogManager() //加载日志管理器 - G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 - G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 - G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 - G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 - G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 - G_GameLogicPtr.CreateBanMgr() // 创建封号管理器 - ClusterMgrInit() //初始化集群 + if conf.Server.ServerType == "center" { + G_GameLogicPtr.CreateFriendMgr() //创建好友管理器 + G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 + G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 + } + G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器 + G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 + G_GameLogicPtr.CreateMessageMgr() // 创建消息管理器 + ClusterMgrInit() //初始化集群 G_GameLogicPtr.StartTime = time.Now().Unix() // G_GameLogicPtr.CreateHttpManager() } @@ -605,12 +533,12 @@ func (ad *GameLogic) ClearData(args []interface{}) { if player != nil && player.M_DwUin != 0 { player.agent = nil log.Debug("player %d 断开连接", player.M_DwUin) - player.CallEvent(300*time.Second, func() { + player.CallEvent(120*time.Second, func() { player.lock.Lock() defer player.lock.Unlock() if player.agent == nil { player.ClearData() - log.Debug("player %d 延迟300s关闭", player.M_DwUin) + log.Debug("player %d 延迟120s关闭", player.M_DwUin) } }, "LateClose") } @@ -654,7 +582,6 @@ func (ad *GameLogic) ReplaceExistPlayerAndAgent(a gate.Agent, player *Player) er if ok { Timer.Stop() } - player.SyncFriendMsg() log.Debug("player %d 重连", player.M_DwUin) return nil } @@ -726,15 +653,14 @@ func (ad *GameLogic) RegisterNetWorkFunc() { RegisterMsgProcessFunc("ReqId2Verify", ReqId2Verify) // 身份证验证 // 玩家 RegisterMsgProcessFunc("ReqUserInfo", ReqUserInfo) - RegisterMsgProcessFunc("ReqSetName", ReqSetName) // 设置名字 - RegisterMsgProcessFunc("ReqLang", ReqLang) // 设置语言 - RegisterMsgProcessFunc("ReqSetPetName", ReqSetPetName) // 设置宠物名字 - RegisterMsgProcessFunc("ReqSetFacebookUrl", ReqSetFacebookUrl) // 设置facebook地址 - RegisterMsgProcessFunc("ReqPlayerBaseInfo", ReqPlayerBaseInfofunction) // 请求玩家基本信息 - RegisterMsgProcessFunc("UpdateBaseItemInfo", UpdateBaseItemInfofunction) // 保存引导 - RegisterMsgProcessFunc("ReqKv", ReqKv) // 保存客户端数据 - RegisterMsgProcessFunc("ReqGetEnergyByAD", ReqGetEnergyByAD) // 看广告获取能量 - RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) // 购买能量 + RegisterMsgProcessFunc("ReqSetName", ReqSetName) // 设置名字 + RegisterMsgProcessFunc("ReqLang", ReqLang) // 设置语言 + RegisterMsgProcessFunc("ReqSetPetName", ReqSetPetName) // 设置宠物名字 + RegisterMsgProcessFunc("ReqSetFacebookUrl", ReqSetFacebookUrl) // 设置facebook地址 + RegisterMsgProcessFunc("ReqPlayerBaseInfo", ReqPlayerBaseInfofunction) // 请求玩家基本信息 + RegisterMsgProcessFunc("ReqKv", ReqKv) // 保存客户端数据 + RegisterMsgProcessFunc("ReqGetEnergyByAD", ReqGetEnergyByAD) // 看广告获取能量 + RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) // 购买能量 // #region 棋盘 RegisterMsgProcessFunc("ReqPlayerChessData", ReqPlayerChessDataFunc) RegisterMsgProcessFunc("UpdatePlayerChessData", UpdatePlayerChessDataFunc) // 更新棋盘数据 @@ -987,11 +913,9 @@ func (ad *GameLogic) GetStartTime() int64 { } func NotifyPlayer(Uid int, m *MsgMod.Msg) { - p := G_GameLogicPtr.GetPlayer(int64(Uid)) - if p == nil || p.stop { - return - } - p.Send(m) + m.To = Uid + m.HandleType = MsgMod.HANDLE_MOD_PLAYER_MSG + CenterPlayerMsgHandler(m) } func Destroy() { @@ -1007,7 +931,6 @@ func Destroy() { G_GameLogicPtr.ChampshipMgr.SaveData() G_GameLogicPtr.MailMgr.SaveData() G_GameLogicPtr.VarMgr.SaveData() - G_GameLogicPtr.BanMgr.SaveData() G_GameLogicPtr.MLogManager.Close() } log.Debug("服务器下线完成") diff --git a/src/server/game/VarMgr.go b/src/server/game/VarMgr.go deleted file mode 100644 index 70c343f4..00000000 --- a/src/server/game/VarMgr.go +++ /dev/null @@ -1,154 +0,0 @@ -package game - -import ( - "encoding/gob" - "fmt" - "server/GoUtil" - "server/game/mod/card" - "server/game/mod/msg" - "time" -) - -type VarMgr struct { - *ServerMod -} - -type VarData struct { - Var map[string]interface{} - VarExpire map[string]*VarExpireData - UserVar map[string]*VarUserData - ZeroTime int64 -} - -const ( - VAR_GOLD_CARD = "gold_card" - VAR_PLAYROOM_UPVOTE = "playroom_upvote" - VAR_USER_DATA = "user_data" -) - -const ( - VAR_OP_UPVOTE = 1 - VAR_OP_CHIP = 2 - VAR_OP_KISS = 3 - VAR_OP_CHIP_SET = 4 - VAR_OP_CATNIP_LOCK = 5 -) - -func (f *VarMgr) Init() { - gob.Register(&VarGoldCard{}) - f.key = VAR_MGR_KEY - f.data = &VarData{ - Var: map[string]interface{}{}, - } - // 注册处理函数 - f.init() - if f.data.(*VarData).Var == nil { - f.data.(*VarData).Var = make(map[string]interface{}) - } - 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{ - Type: msg.SERVER_ZERO_UPDATE, - }) - }) -} - -func (f *VarMgr) SetGlobalData(m *msg.Msg) (interface{}, error) { - return nil, nil -} - -func (f *VarMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { - f.getData().ZeroTime = GoUtil.ZeroTimestamp() - // 随机生成两个金卡 - Card1, Card2 := card.RankGoldCard() - f.SetVar(VAR_GOLD_CARD, &VarGoldCard{ - Four: Card1, - Five: Card2, - }) - for k, v := range f.getData().VarExpire { - if v.T < GoUtil.ZeroTimestamp() { - delete(f.getData().VarExpire, k) - } - } - 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 -} - -func (f *VarMgr) GetVar(key string) interface{} { - return f.getData().Var[key] -} - -func (f *VarMgr) SetExpireVar(key string, value *VarExpireData) { - f.getData().VarExpire[key] = value -} - -func (f *VarMgr) GetExpireVar(key string) *VarExpireData { - if v, ok := f.getData().VarExpire[key]; ok { - return v - } - data := &VarExpireData{} - f.getData().VarExpire[key] = data - return data -} - -func (f *VarMgr) SetUserVar(key string, value *VarUserData) { - f.getData().UserVar[key] = value -} - -func (f *VarMgr) GetUserVar(key string) *VarUserData { - if v, ok := f.getData().UserVar[key]; ok { - return v - } - data := &VarUserData{} - f.getData().UserVar[key] = data - return data -} - -func (f *VarMgr) DelVar(key string) { - delete(f.getData().Var, key) -} - -func (f *VarMgr) getData() *VarData { - return f.data.(*VarData) -} diff --git a/src/server/game/ActivityFunc.go b/src/server/game/activity_func.go similarity index 87% rename from src/server/game/ActivityFunc.go rename to src/server/game/activity_func.go index 11cab5eb..78937420 100644 --- a/src/server/game/ActivityFunc.go +++ b/src/server/game/activity_func.go @@ -1,12 +1,11 @@ package game import ( - "fmt" - "server/GoUtil" activityCfg "server/conf/activity" catnipCfg "server/conf/catnip" - guesscolorCfg "server/conf/guessColor" + guesscolorCfg "server/conf/guess_color" itemCfg "server/conf/item" + languageCfg "server/conf/language" mailCfg "server/conf/mail" miningCfg "server/conf/mining" passCfg "server/conf/pass" @@ -14,6 +13,7 @@ import ( "server/game/mod/activity" "server/game/mod/item" "server/game/mod/mail" + GoUtil "server/game_util" "server/msg" ) @@ -60,9 +60,18 @@ func (p *Player) ActivityLogin() { // 猫草大作战 ActivityId = p.GetActivityId(activity.ACT_TYPE_CATNIP) CatnipMod := p.PlayMod.getCatnipMod() - OldId = CatnipMod.Login(ActivityId) - if OldId != 0 { + OldId, CatnipUnReward := CatnipMod.Login(ActivityId) + if OldId != 0 && len(CatnipUnReward) > 0 { // 清空猫草大作战数据无需发邮件 + MailMod := p.PlayMod.getMailMod() + MailMod.SendMail(&mail.MailStruct{ + Title: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, "backend_gardenend_mail_title"), + TitleEn: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, "backend_gardenend_mail_title"), + Content: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, "backend_gardenend_mail_content"), + ContentEn: languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, "backend_gardenend_mail_content"), + Items: CatnipUnReward, + Type: mail.MAIL_TYPE_NORMAL, + }) } // 通行证 @@ -337,6 +346,7 @@ func (p *Player) CatnipBackData() { Reward: GoUtil.SliceIntToInt32(v.Reward), Emoji: int32(v.EmojiId), FriendProgress: int32(v.PartnerAdd), + SendEmoji: int32(v.SendEmoji), } if v.Partner != 0 { PlayerData := G_getGameLogic().GetResSimplePlayerByUid(v.Partner) @@ -349,38 +359,42 @@ func (p *Player) CatnipBackData() { } 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, + 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, + 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), + for uid := range FriendMod.NewFriendList { + partnerList := p.GetCatnipPartner(uid) + if len(GoUtil.IntSlice(partnerList)) >= 4 { + tmpData[uid] = &msg.CatnipInvite{ + Uid: int64(uid), Type: 3, } continue } - if _, ok := tmpData[Uid]; !ok { - tmpData[Uid] = &msg.CatnipInvite{ - Uid: int64(Uid), + if _, ok := tmpData[uid]; !ok { + tmpData[uid] = &msg.CatnipInvite{ + Uid: int64(uid), Type: 0, } } } + for _, v := range CatnipMod.Game { + if invite, ok := tmpData[v.Partner]; ok { + invite.Type = 4 // 已参与游戏的好友不显示邀请 + } + } for _, v := range tmpData { ResPlayerSimple := G_getGameLogic().GetResSimplePlayerByUid(int(v.Uid)) if ResPlayerSimple != nil { @@ -401,14 +415,3 @@ func (p *Player) CatnipBackData() { } p.PushClientRes(res) } - -// 设置猫草大作战游戏锁 -func (p *Player) SetCatnipGameLock(Uid int, GameId int) error { - 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, - GameId: GameId, - End: int(ActivityInfo.EndT), // 锁 - }) -} diff --git a/src/server/game/admin.go b/src/server/game/admin.go index ba4a62e1..b1eb58ee 100644 --- a/src/server/game/admin.go +++ b/src/server/game/admin.go @@ -4,11 +4,11 @@ import ( "encoding/json" "fmt" "runtime" - "server/GoUtil" "server/MergeConst" "server/conf" "server/db" Msg "server/game/mod/msg" + GoUtil "server/game_util" "server/gamedata" "server/msg" "server/pkg/github.com/name5566/leaf/gate" @@ -100,7 +100,7 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg return } - if G_GameLogicPtr.BanMgr.IsBanned(playerbaseinfo.DwUin) { + if playerbaseinfo.Ban > GoUtil.Now() || playerbaseinfo.Ban == -1 { ResLogin = &msg.ResLogin{ ResultCode: MergeConst.Protocol_Error_Account_Ban, DwUin: 0, @@ -176,7 +176,7 @@ func AdminPlayerInfo(args []interface{}) error { res["Cumulative"] = player.PlayMod.getBaseMod().Cumulative res["RegisterTime"] = player.GetPlayerBaseMod().GetRegisterTime() res["TodayCumulative"] = player.PlayMod.getBaseMod().TodayCumulative - res["Ban"] = G_GameLogicPtr.BanMgr.GetBanInfo(player.M_DwUin).EndTime + res["Ban"] = db.GetPlayerBan(player.PlayMod.getBaseMod().Account) if online { res["Cumulative"] = int64(player.PlayMod.getBaseMod().Cumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime) res["TodayCumulative"] = int64(player.PlayMod.getBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime) @@ -219,14 +219,22 @@ func ReqServerInfo(args []interface{}) error { runtime.ReadMemStats(&m) res["TotalAlloc"] = fmt.Sprintf("%dM", m.TotalAlloc/(1024*1024)) // 2. 获取系统内存使用信息 - vmStat, err := mem.VirtualMemory() - if err == nil { - res["Sys"] = fmt.Sprintf("%.2f%%", vmStat.UsedPercent) - } + vmStat, _ := mem.VirtualMemory() // 3. 获取 CPU 使用率(一秒内采样) cpuPercent, err := cpu.Percent(time.Second, false) if err == nil && len(cpuPercent) > 0 { - res["CPU"] = fmt.Sprintf("%.2f%%", cpuPercent[0]) + res["CPU"] = cpuPercent[0] + } + res["Alloc"] = fmt.Sprintf("%dM", m.Alloc/(1024*1024)) + res["Sys"] = m.Sys / (1024 * 1024) + res["NumGC"] = m.NumGC + res["NumGoroutine"] = runtime.NumGoroutine() + if vmStat != nil { + res["FreeMem"] = vmStat.Available / (1024 * 1024) + res["UsageMem"] = vmStat.Used / (1024 * 1024) + } else { + res["UsageMem"] = 0 + res["FreeMem"] = 0 } res["Version"] = conf.Server.Version AdminPlayerBack(a, res) @@ -283,7 +291,7 @@ func ReqAdminBan(args []interface{}) error { res := make(map[string]interface{}) res["Code"] = 0 res["Msg"] = "ok" - G_GameLogicPtr.BanMgr.BanUser(req.Uid, int64(req.Time), req.Reason) + db.UpdatePlayerBan(req.Uid, int64(req.Time)) AdminPlayerBack(a, res) return nil } diff --git a/src/server/game/ChampshipMgr.go b/src/server/game/champship_mgr.go similarity index 94% rename from src/server/game/ChampshipMgr.go rename to src/server/game/champship_mgr.go index 8b5d029f..d54fbed9 100644 --- a/src/server/game/ChampshipMgr.go +++ b/src/server/game/champship_mgr.go @@ -2,10 +2,10 @@ package game import ( "math" - "server/GoUtil" champshipCfg "server/conf/champship" randnameCfg "server/conf/randname" "server/game/mod/msg" + GoUtil "server/game_util" proto "server/msg" "server/pkg/github.com/name5566/leaf/log" "sort" @@ -81,67 +81,53 @@ func (c *ChampshipMgr) Init() { } // 注册处理函数 c.init() - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_GROUP, c.group) - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, c.inRank) - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_AI, c.ai) - c.RegisterHandler(msg.SERVER_ZERO_UPDATE, c.ZeroUpdate) - c.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2, c.NotifyAll) - Now := GoUtil.Now() ZeroTime := GoUtil.ZeroTimestamp() if c.getData().ZeroTime != ZeroTime { - c.ZeroUpdate(&msg.Msg{}) + c.ZeroUpdate() } Remain := Now - ZeroTime Remain1 := 1800 - Remain%1800 c.mDispatr.AfterFunc(time.Duration(Remain1)*time.Second, func() { // 30分钟后重新分组 - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, - }) + c.group() }) c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_AI, - }) + c.ai() }) c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.SERVER_ZERO_UPDATE, - }) + c.ZeroUpdate() }) } -func (c *ChampshipMgr) NotifyAll(m *msg.Msg) (interface{}, error) { - G_GameLogicPtr.NotifyAll(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY, +func (c *ChampshipMgr) NotifyAll() (interface{}, error) { + NotifyAllPlayerMsg(&msg.Msg{ + Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY, + HandleType: msg.HANDLE_MOD_PLAYER_MSG, }) return nil, nil } -func (c *ChampshipMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { +func (c *ChampshipMgr) ZeroUpdate() (interface{}, error) { log.Debug("ChampshipMgr ZeroUpdate") c.getData().ZeroTime = GoUtil.ZeroTimestamp() c.getData().PreRank = c.getData().Rank c.getData().PreRobot = c.getData().Robot c.getData().PreGroupInfo = c.getData().GroupInfo - + c.getData().AutoId = 0 + c.getData().RobotId = 1 c.getData().Robot = make(map[int]*ChampshipRobot, 0) c.getData().Rank = make(map[int][]*ChampshipRank, 0) c.getData().GroupInfo = make(map[int]int, 0) c.update = true c.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.SERVER_ZERO_UPDATE, - }) + c.ZeroUpdate() }) c.NotifyPlayer() c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY2, - }) + c.NotifyAll() }) return nil, nil } @@ -158,7 +144,7 @@ func (c *ChampshipMgr) NotifyPlayer() { } } -func (c *ChampshipMgr) ai(m *msg.Msg) (interface{}, error) { +func (c *ChampshipMgr) ai() (interface{}, error) { ChampshipData := c.getData() Now := GoUtil.Now() for k, v := range ChampshipData.Rank { @@ -205,9 +191,7 @@ func (c *ChampshipMgr) ai(m *msg.Msg) (interface{}, error) { ChampshipData.Rank[k] = v } c.mDispatr.AfterFunc(time.Duration(60)*time.Second, func() { - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_AI, - }) + c.ai() }) return nil, nil } @@ -265,6 +249,8 @@ func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank { RankList: RL, } } + +// TODO 待优化 func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { ChampshipData := c.getData() GroupId := ChampshipData.GroupInfo[Uid] @@ -320,11 +306,9 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank { } // 分组 -func (c *ChampshipMgr) group(m *msg.Msg) (interface{}, error) { +func (c *ChampshipMgr) group() (interface{}, error) { c.mDispatr.AfterFunc(time.Duration(1800)*time.Second, func() { // 30分钟后重新分组 - c.Send(&msg.Msg{ - Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, - }) + c.group() }) Now := GoUtil.Now() Zero := GoUtil.ZeroTimestamp() diff --git a/src/server/game/ChargeFunc.go b/src/server/game/charge_func.go similarity index 98% rename from src/server/game/ChargeFunc.go rename to src/server/game/charge_func.go index b6223dc9..f4d3c568 100644 --- a/src/server/game/ChargeFunc.go +++ b/src/server/game/charge_func.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "os/exec" - "server/GoUtil" "server/MergeConst" "server/conf" activityCfg "server/conf/activity" @@ -14,8 +13,9 @@ import ( "server/game/mod/activity" "server/game/mod/item" MsgMod "server/game/mod/msg" - "server/game/mod/piggyBank" + piggyBank "server/game/mod/piggy_bank" "server/game/mod/quest" + GoUtil "server/game_util" proto "server/msg" "server/pkg/github.com/name5566/leaf/log" "strings" @@ -35,7 +35,7 @@ func (p *Player) Charge(ChargeId int) { } func (p *Player) SendCharge(d *ChargeExtra) { - G_GameLogicPtr.FriendMgrSend(&MsgMod.Msg{ + FriendMgrSend(&MsgMod.Msg{ From: int(p.M_DwUin), Type: MsgMod.HANDLE_TYPE_SEND_CHARGE, To: int(d.Uid), diff --git a/src/server/game/ClusterMgr.go b/src/server/game/cluster_mgr.go similarity index 80% rename from src/server/game/ClusterMgr.go rename to src/server/game/cluster_mgr.go index e3b1ba4e..d3272ac6 100644 --- a/src/server/game/ClusterMgr.go +++ b/src/server/game/cluster_mgr.go @@ -11,20 +11,12 @@ func ClusterMgrInit() { go func() { for { m := <-mergeCluster.MsgChan - clusterHandlerProcess(m) + MessageHandle(m) } }() } -func clusterHandlerProcess(m *msg.Msg) { - if fun, ok := clusterHandler[m.Type]; ok { - fun(m) - } else { - FriendMgrSend(m) - } -} - func RegisterClusterHandler(t int, fun func(*msg.Msg) error) { clusterHandler[t] = fun } @@ -39,6 +31,7 @@ func init() { RegisterClusterHandler(msg.CLUSTER_FRIEND_SYNC, ClusterFriendSync) RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, champshipInrankHandler) RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_RANK_INFO, champshipRankInfoHandler) + RegisterClusterHandler(msg.HANDLE_TYPE_CHAMPSHIP_MY_RANK, champshipMyRankHandler) } func champshipInrankHandler(m *msg.Msg) error { @@ -54,3 +47,12 @@ func champshipRankInfoHandler(m *msg.Msg) error { FriendMgrSend(m) return nil } + +func champshipMyRankHandler(m *msg.Msg) error { + MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(m.From) + m.To = m.From + m.From = 0 + m.Extra = MyRank + FriendMgrSend(m) + return nil +} diff --git a/src/server/game/CompensationFunc.go b/src/server/game/compensation_func.go similarity index 100% rename from src/server/game/CompensationFunc.go rename to src/server/game/compensation_func.go diff --git a/src/server/game/external.go b/src/server/game/external.go index 4cb6f5fa..8cf8505a 100644 --- a/src/server/game/external.go +++ b/src/server/game/external.go @@ -3,10 +3,10 @@ package game import ( "fmt" "reflect" - "server/GoUtil" "server/MergeConst" "server/conf" "server/game/internal" + GoUtil "server/game_util" "strings" "time" diff --git a/src/server/game/FriendFunc.go b/src/server/game/friend_func.go similarity index 99% rename from src/server/game/FriendFunc.go rename to src/server/game/friend_func.go index dcc1fe67..5f7afd4a 100644 --- a/src/server/game/FriendFunc.go +++ b/src/server/game/friend_func.go @@ -1,9 +1,9 @@ package game import ( - "server/GoUtil" "server/db" "server/game/mod/msg" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" "sort" ) diff --git a/src/server/game/FriendMgr.go b/src/server/game/friend_mgr.go similarity index 67% rename from src/server/game/FriendMgr.go rename to src/server/game/friend_mgr.go index 5816dac1..3af18dae 100644 --- a/src/server/game/FriendMgr.go +++ b/src/server/game/friend_mgr.go @@ -3,14 +3,13 @@ package game import ( "encoding/gob" "fmt" - "server/GoUtil" - "server/MergeConst" mergeCluster "server/cluster" "server/conf" "server/game/mod/card" "server/game/mod/friend" "server/game/mod/item" "server/game/mod/msg" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" ) @@ -45,7 +44,6 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_APPLY, f.sendToPlayer) f.RegisterHandler(msg.HADNLE_TYPE_AGREE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_DEL, f.sendToPlayer) - f.RegisterHandler(msg.HANDLE_TYPE_SYNC, f.sync) f.RegisterHandler(msg.HANDLE_TYPE_REFUSE, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_INVITE_ADD_FRIEND, f.sendToPlayer) f.RegisterHandler(msg.HANDLE_TYPE_INVITE_FRIEND, f.sendToPlayer) @@ -88,12 +86,8 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_KISS, f.sendToPlayerOnline) f.RegisterHandler(msg.HANDLE_TYPE_PLAYROOM_GAME, f.sendToPlayer) - f.RegisterHandler(msg.HANDLE_TYPE_VAR_USER_GET, f.GetVarUserData) - 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) + f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter) } func (f *FriendMgr) getData() *FirendData { @@ -138,71 +132,6 @@ func (f *FriendMgr) sendToPlayerOnline(m *msg.Msg) (interface{}, error) { return nil, nil } -// 同步信息 -func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) { - data := f.getData().List[m.From] - return data, nil -} - -func (f *FriendMgr) GetVarUserData(m *msg.Msg) (interface{}, error) { - Key := GoUtil.GetUserKey(int64(m.To)) - data := G_GameLogicPtr.VarMgr.GetUserVar(Key) - if data == nil { - data = &VarUserData{ - Upvote: 0, - } - } - return data, nil -} - -func (f *FriendMgr) SetVarUserData(m *msg.Msg) (interface{}, error) { - VarOp := m.Extra.(VarOpration) - Key := GoUtil.GetUserKey(int64(m.To)) - data := G_GameLogicPtr.VarMgr.GetUserVar(Key) - switch VarOp.Type { - case VAR_OP_UPVOTE: - data.Upvote++ - case VAR_OP_CHIP: - data.Chip += VarOp.Data.(int) - case VAR_OP_CHIP_SET: - data.Chip = VarOp.Data.(int) - case VAR_OP_KISS: - data.Kiss = VarOp.Data.(int) - } - return &VarOpration{ - Data: data, - Code: MergeConst.SUCCESS, - }, nil -} - -func (f *FriendMgr) SetExpireVarData(m *msg.Msg) (interface{}, error) { - VarOp := m.Extra.(VarOpration) - switch VarOp.Type { - case VAR_OP_CATNIP_LOCK: - data := VarOp.Data.(CatnipLock) - MyKey := GoUtil.GetCatnipLockKey(data.Uid, data.GameId) - OtherKey := GoUtil.GetCatnipLockKey(data.Partner, data.GameId) - ExpireData := G_GameLogicPtr.VarMgr.GetExpireVar(OtherKey) - if _, ok := ExpireData.D.(*CatnipLock); ok { - return nil, fmt.Errorf("catnip lock already exists for %d in game %d", data.Uid, data.GameId) - } - G_GameLogicPtr.VarMgr.SetExpireVar(MyKey, &VarExpireData{ - T: int64(data.End + 24*3600), // 设置过期时间 - D: &data, - }) - G_GameLogicPtr.VarMgr.SetExpireVar(OtherKey, &VarExpireData{ - T: int64(data.End + 24*3600), // 设置过期时间 - D: &CatnipLock{ - Uid: data.Partner, - Partner: data.Uid, - GameId: data.GameId, - End: data.End, - }, - }) - } - return nil, nil -} - // 发送消息给玩家 func sendToPlayer(m *msg.Msg) error { p := G_GameLogicPtr.GetPlayer(int64(m.To)) @@ -222,24 +151,6 @@ func sendToPlayerOnline(m *msg.Msg) error { return nil } -func FriendMgrSend(m1 *msg.Msg) error { - if m1.SendT == 0 { - m1.SendT = GoUtil.Now() - } - m := m1.Clone() - ToServer := GoUtil.GetServerIdByUid(m.To) - if ToServer != conf.Server.ServerID { - err := mergeCluster.SendServerMsg(m, ToServer) - if err != nil { // 区服不在线 - G_GameLogicPtr.FriendMgrSend(m) - return err - } - return nil - } - G_GameLogicPtr.FriendMgrSend(m) - return nil -} - // 集群好友消息同步 func ClusterFriendSync(m *msg.Msg) error { if v, ok := G_GameLogicPtr.FriendMgr.getData().ClusterMsg[m.To]; ok { @@ -264,16 +175,3 @@ func (f *FriendMgr) SendMsgToCenter(m *msg.Msg) (interface{}, error) { 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 { - r, err := mergeCluster.CallServerMsg(m, ToServer) - if err != nil { // 区服不在线 - log.Debug("FriendMgrCall err %v", err) - return nil - } - return r - } - return G_GameLogicPtr.FriendMgrCall(m.Clone()) -} diff --git a/src/server/game/Type.go b/src/server/game/game_type.go similarity index 76% rename from src/server/game/Type.go rename to src/server/game/game_type.go index 55d416d4..df0a844c 100644 --- a/src/server/game/Type.go +++ b/src/server/game/game_type.go @@ -2,9 +2,13 @@ package game import ( "encoding/gob" + "server/game/mod/card" "server/game/mod/friend" - "server/game/mod/limitedTimeEvent" + "server/game/mod/item" + limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/msg" + proto "server/msg" + "sync" ) type PlayerSimpleData struct { @@ -49,11 +53,21 @@ type VarUserData struct { Upvote int Chip int Kiss int + mu sync.Mutex } type VarExpireData struct { - D interface{} - T int64 + D interface{} + T int64 // 过期时间戳 + U int64 // 最后更新时间 + mu sync.Mutex +} + +type CatnipPartner struct { + Uid int + Partner int + GameId int + EndTime int64 } const ( @@ -108,7 +122,13 @@ func init() { gob.Register(&VarUserData{}) gob.Register(&ActivityInfo{}) gob.Register(&ChargeExtra{}) - gob.Register(&GameResult{}) gob.Register(CatnipMsg{}) gob.Register(&CatnipLock{}) + gob.Register(CRank{}) + gob.Register(&proto.ResChampshipRank{}) + gob.Register(&proto.ResChampshipPreRank{}) + gob.Register(card.CardInfo{}) + gob.Register(item.Item{}) + gob.Register([]*item.Item{}) // 注册 []*item.Item 类型 + gob.Register(friend.ReplyInfo{}) } diff --git a/src/server/game/Gm.go b/src/server/game/gm_handler.go similarity index 92% rename from src/server/game/Gm.go rename to src/server/game/gm_handler.go index a83948e7..97017f87 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/gm_handler.go @@ -5,14 +5,13 @@ import ( "encoding/gob" "fmt" "os" - "server/GoUtil" "server/conf" avatarCfg "server/conf/avatar" cardCfg "server/conf/card" chargeCfg "server/conf/charge" emojiCfg "server/conf/emoji" faceCfg "server/conf/face" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" playroomCfg "server/conf/playroom" "server/db" "server/game/mod/activity" @@ -23,14 +22,17 @@ import ( "server/game/mod/emoji" "server/game/mod/face" "server/game/mod/friend" + "server/game/mod/handbook" "server/game/mod/item" MsgMod "server/game/mod/msg" "server/game/mod/order" "server/game/mod/playroom" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" "strconv" "strings" + "time" "google.golang.org/protobuf/proto" ) @@ -46,7 +48,7 @@ func ReqGmCommand_(player *Player, Command string) error { // log.Error("ReqGmCommand panic: %v", err) // } // }() - if conf.Server.GameName != "pet_home" && conf.Server.GameName != "merge_pet_sdk" && conf.Server.GameName != "Merge_Pet_Local" { + if conf.Server.GameName != "pet_home" && conf.Server.GameName != "merge_pet_sdk" && conf.Server.GameName != "Merge_Pet_Local" && conf.Server.GameName != "pet_home_local" { return fmt.Errorf("Player %d ReqGmCommand not support in game %s, command %s", player.M_DwUin, conf.Server.GameName, Command) } player.TeLog("gm", map[string]interface{}{ @@ -151,19 +153,19 @@ func ReqGmCommand_(player *Player, Command string) error { ChessMod.PartBag.List = make(map[int]chess.PartBagGrid) } ChessMod.PartBag.List[1505] = chess.PartBagGrid{ - Num: 10000, + Num: 100, PartId: 1505, } ChessMod.PartBag.List[1515] = chess.PartBagGrid{ - Num: 10000, + Num: 100, PartId: 1515, } ChessMod.PartBag.List[1525] = chess.PartBagGrid{ - Num: 10000, + Num: 100, PartId: 1525, } ChessMod.PartBag.List[1535] = chess.PartBagGrid{ - Num: 10000, + Num: 100, PartId: 1535, } case "AllFace": @@ -277,7 +279,14 @@ func ReqGmCommand_(player *Player, Command string) error { HandbookMod := player.PlayMod.getHandbookMod() for _, v := range mergeDataCfg.GetAllId() { HandbookMod.SetHandbook(v) + HandbookMod.BookList[v] = handbook.STATUS_REWARD } + case "handbookReward": + HandbookMod := player.PlayMod.getHandbookMod() + for _, v := range mergeDataCfg.GetAllId() { + HandbookMod.BookList[v] = handbook.STATUS_REWARD + } + player.PushClientRes(HandbookMod.BackData()) case "deleteOrder": Id, _ := strconv.Atoi(arg[1]) OrderMod := player.PlayMod.getOrderMod() @@ -390,16 +399,12 @@ func ReqGmCommand_(player *Player, Command string) error { CardList := cardCfg.GetAllCardId(CardMod.Round) for _, v := range CardList { player.AddCard(v) + CardMod.Handbook[v] = card.HANDBOOK_STATUS_GET } player.PushClientRes(CardMod.NotifyCard()) case "resetRankUser": - O := G_GameLogicPtr.RankMgr.getAllRank(RANK_TYPE_USER) - for _, v := range O { - Uid := strconv.Itoa(v.Uid) - TimeSort := fmt.Sprintf("0.%d", RANK_TIME_SORT-GoUtil.Now()) - TimeSortF, _ := strconv.ParseFloat(TimeSort, 64) - db.RedisZAdd(RANK_USER, Uid, v.Score+TimeSortF) - } + db.RedisDelKey(RANK_USER) + db.RedisDelKey(fmt.Sprintf("%s_%s", RANK_COUNTRY_USER, conf.Server.CountryCode)) case "addFriendStar": FriendTreasureMod := player.PlayMod.getFriendTreasureMod() FriendTreasureMod.AddStar(200) @@ -438,6 +443,7 @@ func ReqGmCommand_(player *Player, Command string) error { DecorateMod.FinishList[i] = struct{}{} } DecorateMod.Progress = S + player.PushClientRes(DecorateMod.BackData()) case "resetCardSeasonFirst": CardMod := player.PlayMod.getCardMod() CardMod.SeasonFirst = false @@ -512,7 +518,9 @@ func ReqGmCommand_(player *Player, Command string) error { BaseMod := p1.PlayMod.getBaseMod() BaseMod.Uid = player.M_DwUin BaseMod.NickName = player.PlayMod.getBaseMod().NickName + BaseMod.Account = player.PlayMod.getBaseMod().Account BaseMod.LoginTime = GoUtil.Now() + BaseMod.AddCode = fmt.Sprintf("MMM-%s-%s", "156", GoUtil.UniqueStringFromInt(int(BaseMod.Uid))) // deep copy p1.PlayMod.mod_list to avoid sharing internal pointers var modCopy PlayerModList var buf bytes.Buffer @@ -550,6 +558,20 @@ func ReqGmCommand_(player *Player, Command string) error { PlayroomMod := player.PlayMod.getPlayroomMod() PlayroomMod.WeeklyDiscount = make(map[int]int) player.PlayroomBackData() + case "resetPlayer": + de := time.Now().Format("2006-01-02 15:04:05") + BaseMod := player.PlayMod.getBaseMod() + account := BaseMod.Account + newAccount := fmt.Sprintf("%s_reset_%s", account, de) + err := db.ResetAccountData(account, newAccount) + if err != nil { + log.Error("resetPlayer err:%s", err.Error()) + return err + } + log.Debug("player reset: old account: %s; new account %s", account, newAccount) + BaseMod.Account = newAccount + player.GetPlayerBaseMod().Data.UserName = newAccount + player.PushAndSendClienRes(&msg.ForceKickOut{}) case "resetCode": BaseMod := player.PlayMod.getBaseMod() BaseMod.AddCode = fmt.Sprintf("MMM-%s-%s", "156", GoUtil.UniqueStringFromInt(int(BaseMod.Uid))) diff --git a/src/server/game/internal/chanrpc.go b/src/server/game/internal/chanrpc.go index 997cb731..9f4f7e1f 100644 --- a/src/server/game/internal/chanrpc.go +++ b/src/server/game/internal/chanrpc.go @@ -1,8 +1,8 @@ package internal import ( - "server/GoUtil" "server/MergeConst" + GoUtil "server/game_util" "sync" "server/pkg/github.com/name5566/leaf/gate" diff --git a/src/server/game/internal/module.go b/src/server/game/internal/module.go index c779ecf1..d5074b39 100644 --- a/src/server/game/internal/module.go +++ b/src/server/game/internal/module.go @@ -1,8 +1,8 @@ package internal import ( - "server/GoUtil" "server/base" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/module" ) diff --git a/src/server/game/LimitedTimeTrigger.go b/src/server/game/limited_time_trigger.go similarity index 99% rename from src/server/game/LimitedTimeTrigger.go rename to src/server/game/limited_time_trigger.go index 6dd6cf8d..0a6c44e7 100644 --- a/src/server/game/LimitedTimeTrigger.go +++ b/src/server/game/limited_time_trigger.go @@ -3,14 +3,14 @@ package game import ( "fmt" "math" - "server/GoUtil" playroomCfg "server/conf/playroom" userCfg "server/conf/user" "server/game/mod/card" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced "server/game/mod/playroom" + GoUtil "server/game_util" "server/msg" "time" ) diff --git a/src/server/game/LogMgr.go b/src/server/game/log_mgr.go similarity index 94% rename from src/server/game/LogMgr.go rename to src/server/game/log_mgr.go index 0f216af1..e333826d 100644 --- a/src/server/game/LogMgr.go +++ b/src/server/game/log_mgr.go @@ -197,6 +197,15 @@ func (L *LogMgr) InitManager() { } func (L *LogMgr) AddLog(logs *Log) { + // 复制结构体和 Param map,避免并发修改导致 json.Marshal 时 panic + copyLog := *logs + if logs.Param != nil { + newParam := make(map[string]interface{}, len(logs.Param)) + for k, v := range logs.Param { + newParam[k] = v + } + copyLog.Param = newParam + } // 如果已经开始关闭,直接丢弃 L.Lock.Lock() if L.closing { diff --git a/src/server/game/MailMgr.go b/src/server/game/mail_mgr.go similarity index 98% rename from src/server/game/MailMgr.go rename to src/server/game/mail_mgr.go index b8b0ac84..9351876d 100644 --- a/src/server/game/MailMgr.go +++ b/src/server/game/mail_mgr.go @@ -2,10 +2,10 @@ package game import ( "encoding/json" - "server/GoUtil" "server/db" "server/game/mod/item" "server/game/mod/msg" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" "strings" ) diff --git a/src/server/game/MessageHandler.go b/src/server/game/message_handler.go similarity index 96% rename from src/server/game/MessageHandler.go rename to src/server/game/message_handler.go index ff25d17b..18fc979d 100644 --- a/src/server/game/MessageHandler.go +++ b/src/server/game/message_handler.go @@ -2,15 +2,14 @@ package game import ( "fmt" - "server/GoUtil" mergeCluster "server/cluster" cardCfg "server/conf/card" catnipCfg "server/conf/catnip" decorateCfg "server/conf/decorate" itemCfg "server/conf/item" - limitedTimeEventCfg "server/conf/limitedTimeEvent" + limitedTimeEventCfg "server/conf/limited_time_event" mailCfg "server/conf/mail" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" orderCfg "server/conf/order" playroomCfg "server/conf/playroom" userCfg "server/conf/user" @@ -18,11 +17,12 @@ import ( "server/game/mod/card" "server/game/mod/friend" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" "server/game/mod/msg" "server/game/mod/order" "server/game/mod/playroom" + GoUtil "server/game_util" proto "server/msg" "server/pkg/github.com/name5566/leaf/log" "sort" @@ -416,7 +416,18 @@ func (p *Player) handle(m *msg.Msg) error { } 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) + ReplyInfo := FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP, fmt.Sprintf("%d", CatnipMsg.GameId), m.End, nil) + PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) + p.PushClientRes(&proto.ResFriendReplyNotify{ + Info: &proto.ResFriendReply{ + Player: PlayerSimpleData, + Param: ReplyInfo.Param, + Type: int32(ReplyInfo.Type), + Id: int32(ReplyInfo.Id), + }, + Type: int32(friend.REPLY_TYPE_CATNIP), + Time: int32(m.SendT), + }) case msg.HANDLE_TYPE_CATNIP_AGREE: // 同意好友参与猫咪游戏 CatnipMod := p.PlayMod.getCatnipMod() CatnipMsg, ok := m.Extra.(CatnipMsg) @@ -464,7 +475,18 @@ func (p *Player) handle(m *msg.Msg) error { 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) + ReplyInfo := FriendMod.AddReplyInfo(m.From, friend.REPLY_TYPE_CATNIP_ITEMS, "", m.End, Items) + PlayerSimpleData := G_GameLogicPtr.GetResSimplePlayerByUid(m.From) + p.PushClientRes(&proto.ResFriendReplyNotify{ + Info: &proto.ResFriendReply{ + Player: PlayerSimpleData, + Param: ReplyInfo.Param, + Type: int32(ReplyInfo.Type), + Id: int32(ReplyInfo.Id), + }, + Type: int32(friend.REPLY_TYPE_CATNIP_ITEMS), + Time: int32(m.SendT), + }) } p.CatnipBackData() case msg.HANDLE_TYPE_CATNIP_SEND_EMOJI: @@ -487,38 +509,6 @@ func (p *Player) handle(m *msg.Msg) error { return nil } -// 同步好友请求 -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() - if MsgList == nil { - return - } - ml := MsgList.([]*msg.Msg) - if len(ml) == 0 { - return - } - sort.Slice(ml, func(i, j int) bool { - return ml[i].Id < ml[j].Id - }) - maxId := int64(0) - for _, v := range ml { - maxId = max(maxId, v.Id) - if v.H == 1 { - continue - } - if v.Id > 0 && v.Id <= MsgId { - continue - } - log.Debug("uid : %d, handle friend msg : %v", p.M_DwUin, v) - p.handle(v) - v.H = 1 - } - FriendMod.SetSyncId(maxId) - p.PlayMod.save() -} - func SyncMailMsg(p *Player) { ServerMailList := G_GameLogicPtr.MailMgr.Sync(int(p.M_DwUin), p.GetPlayerBaseMod().GetRegisterTime()) MailMod := p.PlayMod.getMailMod() @@ -586,6 +576,9 @@ func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard { } ps := G_GameLogicPtr.GetSimplePlayerByUid(Uid) + if ps == nil { + return &proto.ResFriendCard{} + } return &proto.ResFriendCard{ Uid: int64(Uid), Name: ps.Name, @@ -711,7 +704,7 @@ func NotifyChampshipResult(Uid, Rank int) { SendT: GoUtil.Now(), Extra: []int{Rank, GoUtil.GetServerOpenDay()}, } - FriendMgrSend(Msg) + CenterPlayerMsgHandler(Msg) } } @@ -1277,3 +1270,18 @@ func (player *Player) IsWeeklyDiscount() bool { LimitEventMod := player.PlayMod.getLimitedTimeEventMod() return ChargeMod.IsWeeklyDiscountDay() || LimitEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE) } + +func (p *Player) SetCatnipPartner(GameId, Partner int, EndTime int64) error { + _, err := SendMsgToCenterSync(&msg.Msg{ + From: int(p.M_DwUin), + To: int(p.M_DwUin), + Type: msg.HANDLE_MOD_CATNIP_PARTNER, + Extra: CatnipPartner{ + GameId: GameId, + Partner: Partner, + EndTime: EndTime, + Uid: int(p.M_DwUin), + }, + }) + return err +} diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go new file mode 100644 index 00000000..19948823 --- /dev/null +++ b/src/server/game/message_mgr.go @@ -0,0 +1,780 @@ +package game + +import ( + "context" + "encoding/gob" + "fmt" + "runtime/debug" + mergeCluster "server/cluster" + "server/conf" + "server/game/mod/msg" + GoUtil "server/game_util" + "server/pkg/github.com/name5566/leaf/log" + "sync" + "time" +) + +var id = 1 + +// 中间件函数类型 +type MessageMiddleware func(MessageHandlerFunc) MessageHandlerFunc + +var save_msg_type = []int{ + msg.HANDLE_MOD_PLAYER_MSG, + msg.HANDLE_MDO_CHAMPSHIP_INRANK, + msg.HANDLE_MOD_USER_VAR_SET, +} + +type MessageMgr struct { + *ServerMod + middlewares []MessageMiddleware + workerPool *WorkerPool + handler map[int]MessageHandlerFunc +} + +type MessageData struct { + MessageList map[int64]*MessageList + PlayerList map[int64]int + mu sync.Mutex +} + +type MessageList struct { + Messages []*msg.Msg + mu sync.Mutex +} + +// Worker Pool 结构 +type WorkerPool struct { + workers int + minWorkers int + maxWorkers int + taskQueue chan *MessageTask + wg sync.WaitGroup + ctx context.Context + cancel context.CancelFunc + maxQueue int + mu sync.Mutex + workerCancels []context.CancelFunc + monitorTick *time.Ticker +} + +// 消息任务 +type MessageTask struct { + Msg *msg.Msg + Handler MessageHandlerFunc + Result chan *TaskResult + id int +} + +// 任务结果 +type TaskResult struct { + Data interface{} + Error error +} + +func (m *MessageMgr) MessageMgrInit() { + m.key = MESSAGE_MGR_KEY + fmt.Sprintf("_%d", conf.Server.ServerID) + m.data = &MessageData{ + MessageList: make(map[int64]*MessageList), + PlayerList: make(map[int64]int), + } + gob.Register(msg.VarData{}) + gob.Register(GameResult{}) + // 注册处理函数 + m.init() + m.handler = make(map[int]MessageHandlerFunc) + m.middlewares = []MessageMiddleware{} + // 初始化 Worker Pool (10个worker, 1000个队列大小) + m.workerPool = NewWorkerPool(50, 10000) + // 注册默认中间件 + m.Use(RecoveryMiddleware()) + m.Use(LoggingMiddleware()) + m.Use(TimeoutMiddleware(5 * time.Second)) + m.NodeRegister() + m.CenterRegister() +} + +// 注册处理器 +func (s *MessageMgr) RegisterHandler(HandlerType int, fun MessageHandlerFunc) { + s.handler[HandlerType] = fun +} + +func (m *MessageMgr) NodeRegister() { + if conf.Server.ServerType == "node" { + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_REPLY_PLAYER_MSG, MessageHandlerFunc(PlayerReplyMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CLUSTER_SYNC, MessageHandlerFunc(ClusterSyncHandler)) + } +} + +func (m *MessageMgr) CenterRegister() { + if conf.Server.ServerType == "center" { + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) + m.RegisterHandler(msg.HANDLE_MDO_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_VAR_SET, MessageHandlerFunc(SetVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_VAR_GET, MessageHandlerFunc(GetVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_SET, MessageHandlerFunc(SetUserVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_USER_VAR_GET, MessageHandlerFunc(GetUserVarDataHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CATNIP_PARTNER, MessageHandlerFunc(CatnipPartnerHandler)) + m.RegisterHandler(msg.HANDLE_MDO_CHAMPSHIP_INRANK, MessageHandlerFunc(ChampshipInRankHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, MessageHandlerFunc(ChampshipRankInfoHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_LIST, MessageHandlerFunc(ChampshipRankListHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_PRE_RANK, MessageHandlerFunc(ChampshipRankPreHandler)) + } +} + +func getMessageData() *MessageData { + return G_GameLogicPtr.MessageMgr.data.(*MessageData) +} + +// ----------------------------------- 处理函数实现 --------------------------- +func ChampshipRankPreHandler(data *msg.Msg) (interface{}, error) { + PlayerId := data.From + PreRankMsg := G_GameLogicPtr.ChampshipMgr.GetPreRankMsg(PlayerId) + ReplyPlayerMsgASync(data, PreRankMsg) + return nil, nil +} + +func ChampshipRankListHandler(data *msg.Msg) (interface{}, error) { + PlayerId := data.From + RankMsg := G_GameLogicPtr.ChampshipMgr.GetRankMsg(PlayerId) + ReplyPlayerMsgASync(data, RankMsg) + return nil, nil +} + +func ChampshipRankInfoHandler(data *msg.Msg) (interface{}, error) { + PlayerId := data.From + MyRank := G_GameLogicPtr.ChampshipMgr.getMyRank(PlayerId) + MyPreRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(PlayerId) + ReplyPlayerMsgASync(data, []int{MyRank, MyPreRank}) + return nil, nil +} + +func NotifyAllPlayerMsg(m *msg.Msg) { + messageMgrData := getMessageData() + for PlayerId, node := range messageMgrData.PlayerList { + m.To = int(PlayerId) + SendMsgToNodeAsync(m, node) + } +} + +func ChampshipInRankHandler(data *msg.Msg) (interface{}, error) { + G_GameLogicPtr.ChampshipMgr.inRank(data) + return nil, nil +} + +func CatnipPartnerHandler(data *msg.Msg) (interface{}, error) { + m, ok := data.Extra.(*CatnipPartner) + if !ok { + return nil, fmt.Errorf("invalid catnip partner data") + } + return G_GameLogicPtr.VarMgr.HandleCatnipPartner(m.Uid, m.Partner, m.GameId, m.EndTime) +} + +func ReplyPlayerMsgASync(m *msg.Msg, reply interface{}) (interface{}, error) { + clone := m.Reply(reply) + messageMgrData := getMessageData() + if node, ok := messageMgrData.PlayerList[int64(m.From)]; ok { + SendMsgToNodeAsync(clone, node) + } + return nil, nil +} + +// 节点连接时,同步消息 +func ClusterSyncHandler(data *msg.Msg) (interface{}, error) { + // 遍历所有玩家,发送登录消息 + G_GameLogicPtr.M_Players.Range(func(k, v interface{}) bool { + SendMsgToCenterAsync(&msg.Msg{ + From: int(v.(*Player).M_DwUin), + HandleType: msg.HANDLE_MOD_PLAYER_LOGIN, + Extra: conf.Server.ServerID, + }) + return true + }) + // 发送暂存区消息 + messageMgrData := getMessageData() + messageMgrData.mu.Lock() + TempMessageList := messageMgrData.MessageList + messageMgrData.MessageList = make(map[int64]*MessageList) + defer messageMgrData.mu.Unlock() + log.Debug("[Middleware] Cluster sync send temp message len: %d", len(TempMessageList)) + for _, Message := range TempMessageList { + for _, msgItem := range Message.Messages { + SendMsgToCenterAsync(msgItem) + } + } + return nil, nil +} + +func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { + // 关闭 Worker Pool + node := data.Extra.(int) + messageMgrData := getMessageData() + messageMgrData.PlayerList[int64(data.From)] = node + log.Debug("[Middleware] Player login success player id: %v, node: %v", data.From, data.Extra.(int)) + // 对玩家消息列表加锁 + messages := getMessge(int64(data.From)) + messages.mu.Lock() + defer messages.mu.Unlock() + // 发送离线消息 + len := len(messages.Messages) + for _, message := range messages.Messages { + SendMsgToNodeAsync(message, node) + } + log.Debug("[Middleware] Player sync logout message player id: %v, len: %d", data.From, len) + ReplyPlayerMsgASync(data, nil) + return nil, nil +} + +func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { + messageMgrData := getMessageData() + delete(messageMgrData.PlayerList, int64(data.From)) + log.Debug("[Middleware] Player logout success player id: %v", data.From) + return nil, nil +} + +func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { + messages := getMessge(int64(data.From)) + messages.mu.Lock() + defer messages.mu.Unlock() + for i, msgItem := range messages.Messages { + if msgItem.UniKey == data.UniKey { + // 删除消息 + messages.Messages = append(messages.Messages[:i], messages.Messages[i+1:]...) + log.Debug("[Middleware] Comsume message success type: %d, player id: %v", msgItem.Type, msgItem.From) + break + } + } + return nil, nil +} + +func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { + PlayerId := int64(data.To) + messageMgrData := getMessageData() + // 遍历消息列表,发送消息给在线玩家 + messages := getMessge(PlayerId) + messages.mu.Lock() + defer messages.mu.Unlock() + messages.Messages = append(messages.Messages, data) + if node, ok := messageMgrData.PlayerList[int64(PlayerId)]; ok { + SendMsgToNodeAsync(data, node) + } + return nil, nil +} + +func PlayerMsgHandler(data *msg.Msg) (interface{}, error) { + p := G_GameLogicPtr.GetPlayer(int64(data.To)) + // 不在线 不处理 + if p == nil || p.stop { + return nil, nil + } + p.Send(data.Clone()) + // 处理完后发送消费消息 + if data.HandleType == msg.HANDLE_MOD_PLAYER_MSG { + data.HandleType = msg.HANDLE_MOD_COMSUME_MSG + SendMsgToCenterAsync(data) + } + return nil, nil +} + +func PlayerReplyMsgHandler(data *msg.Msg) (interface{}, error) { + // 先处理同步回调 + if data.UniKey != "" { + if chanel, ok := mergeCluster.CallbackChan[data.UniKey]; ok { + log.Debug("reply message ") + chanel <- data + } + } + return nil, nil +} + +// 添加中间件 +func (m *MessageMgr) Use(middleware MessageMiddleware) { + m.middlewares = append(m.middlewares, middleware) +} + +// 应用所有中间件到处理函数 +func (m *MessageMgr) applyMiddlewares(handler MessageHandlerFunc) MessageHandlerFunc { + // 从后往前应用中间件 + for i := len(m.middlewares) - 1; i >= 0; i-- { + handler = m.middlewares[i](handler) + } + return handler +} + +type MessageHandlerFunc func(message *msg.Msg) (interface{}, error) + +func (m *MessageMgr) RegisterMessageHandler(hType int, handler MessageHandlerFunc) { + m.RegisterHandler(hType, handler) +} + +func (m *MessageMgr) Handle(msg *msg.Msg) (interface{}, error) { + if fun, ok := m.handler[msg.Type]; ok { + return fun(msg) + } + log.Error("server mod key:%s handle not exist handle type:%d", m.key, msg.Type) + return nil, fmt.Errorf("server mod handler err") +} + +// 异步处理消息 (多线程版本) +func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { + if message.End != 0 && message.End < GoUtil.Now() { + log.Debug("message had expired type:%d,to:%d", message.Type, message.To) + return nil + } + if fun, ok := m.handler[message.HandleType]; ok { + // 应用中间件 + handlerWithMiddleware := m.applyMiddlewares(fun) + id++ + // 创建任务 + task := &MessageTask{ + id: id, + Msg: message, + Handler: handlerWithMiddleware, + Result: make(chan *TaskResult, 1), + } + + // 提交到 Worker Pool + if err := m.workerPool.Submit(task); err != nil { + log.Error("Failed to submit message task: %v", err) + return err + } + + // 可以选择等待结果或直接返回 + go func() { + result := <-task.Result + if result.Error != nil { + log.Error("Message handle error: %v", result.Error) + } + }() + + return nil + } + log.Error("server mod key:%s handle not exist handle type:%d", m.key, message.Type) + return fmt.Errorf("server mod handler err") +} + +// 兼容旧版本的函数 +func MessageHandle(m *msg.Msg) error { + log.Debug("RecvMessage m %v", m) + // 这里可以调用 MessageMgr 的处理方法 + G_GameLogicPtr.MessageMgr.MessageHandleAsync(m) + return nil +} + +// ==================== Worker Pool 实现 ==================== + +// 创建 Worker Pool +func NewWorkerPool(workers, maxQueue int) *WorkerPool { + ctx, cancel := context.WithCancel(context.Background()) + if workers <= 0 { + workers = 1 + } + pool := &WorkerPool{ + workers: 0, + minWorkers: workers, + maxWorkers: workers * 40, + taskQueue: make(chan *MessageTask, maxQueue), + ctx: ctx, + cancel: cancel, + maxQueue: maxQueue, + } + pool.start() + // 启动监控协程,负责动态扩缩容 + pool.monitorTick = time.NewTicker(3000 * time.Millisecond) + go pool.monitor() + return pool +} + +// 启动 Worker Pool +func (p *WorkerPool) start() { + // 启动最小数量的 worker + for i := 0; i < p.minWorkers; i++ { + p.spawnWorker() + } +} + +// spawnWorker 启动一个 worker,使用独立的 cancelable context +func (p *WorkerPool) spawnWorker() { + p.mu.Lock() + defer p.mu.Unlock() + childCtx, childCancel := context.WithCancel(p.ctx) + p.workerCancels = append(p.workerCancels, childCancel) + id := len(p.workerCancels) + p.wg.Add(1) + p.workers++ + go p.worker(childCtx, id) +} + +// Worker 工作函数,监听其子上下文以便单独停止 +func (p *WorkerPool) worker(ctx context.Context, id int) { + defer p.wg.Done() + log.Debug("Worker %d started", id) + + for { + select { + case <-ctx.Done(): + log.Debug("Worker %d stopped", id) + return + case <-p.ctx.Done(): + log.Debug("Worker %d pool closed", id) + return + case task, ok := <-p.taskQueue: + if !ok { + log.Debug("Worker %d: task queue closed", id) + return + } + // 执行任务 + result, err := task.Handler(task.Msg) + // 发送结果 + task.Result <- &TaskResult{ + Data: result, + Error: err, + } + close(task.Result) + } + } +} + +// 提交任务 +func (p *WorkerPool) Submit(task *MessageTask) error { + // 当队列已满时,等待并重试入队,直到成功或 pool 关闭 + for { + select { + case <-p.ctx.Done(): + return fmt.Errorf("worker pool is closed") + case p.taskQueue <- task: + // 如果队列接近满时,尝试扩容少量 worker + queued := len(p.taskQueue) + capQ := cap(p.taskQueue) + if capQ > 0 && queued > capQ*3/4 { + go func() { + p.mu.Lock() + deficit := p.maxWorkers - p.workers + p.mu.Unlock() + if deficit > 0 { + // 最多扩容 2 个以避免剧烈波动 + add := 2 + if deficit < add { + add = deficit + } + p.ScaleUp(add) + } + }() + } + return nil + default: + // 队列已满,短暂等待后重试 + select { + case <-p.ctx.Done(): + return fmt.Errorf("worker pool is closed") + case <-time.After(50 * time.Millisecond): + // 重试 + } + } + } +} + +// 关闭 Worker Pool +func (p *WorkerPool) Shutdown() { + log.Debug("Shutting down worker pool...") + // 停止监控 + if p.monitorTick != nil { + p.monitorTick.Stop() + } + // 取消根 context,会让所有子 worker 退出 + p.cancel() + // 关闭任务通道,释放阻塞的接收者 + close(p.taskQueue) + // 等待所有 worker 退出 + p.wg.Wait() + log.Debug("Worker pool shut down complete") +} + +// ScaleUp 按数量增加 worker +func (p *WorkerPool) ScaleUp(n int) { + if n <= 0 { + return + } + p.mu.Lock() + can := p.maxWorkers - p.workers + if can <= 0 { + p.mu.Unlock() + return + } + if n > can { + n = can + } + p.mu.Unlock() + + for i := 0; i < n; i++ { + p.spawnWorker() + } +} + +// ScaleDown 按数量减少 worker +func (p *WorkerPool) ScaleDown(n int) { + if n <= 0 { + return + } + p.mu.Lock() + for i := 0; i < n && len(p.workerCancels) > 0 && p.workers > p.minWorkers; i++ { + last := len(p.workerCancels) - 1 + cancel := p.workerCancels[last] + // 从 slice 中移除 + p.workerCancels = p.workerCancels[:last] + p.workers-- + // 调用 cancel 让对应 worker 退出 + cancel() + } + p.mu.Unlock() +} + +// monitor 周期性检查队列长度并做扩缩容 +func (p *WorkerPool) monitor() { + for { + select { + case <-p.ctx.Done(): + return + case <-p.monitorTick.C: + queued := len(p.taskQueue) + capQ := cap(p.taskQueue) + if capQ == 0 { + continue + } + // 扩容条件 + if queued > capQ*3/4 { + p.mu.Lock() + deficit := p.maxWorkers - p.workers + p.mu.Unlock() + if deficit > 0 { + add := 1 + if deficit >= 2 { + add = 2 + } + p.ScaleUp(add) + } + } + // 缩容条件 + if queued < capQ/4 { + p.mu.Lock() + extra := p.workers - p.minWorkers + p.mu.Unlock() + if extra > 0 { + // 每次缩一个,避免抖动 + p.ScaleDown(1) + } + } + } + } +} + +// ==================== 中间件实现 ==================== + +// 日志中间件 +func LoggingMiddleware() MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + start := time.Now() + log.Debug("[Middleware] Processing message : %v, time: %v", message, start) + + result, err := next(message) + + duration := time.Since(start) + if err != nil { + log.Error("[Middleware] Message : %v failed, duration: %v, error: %v", message, duration, err) + } else { + log.Debug("[Middleware] Message : %v success, duration: %v", message, duration) + } + + return result, err + } + } +} + +// 恢复 Panic 中间件 +func RecoveryMiddleware() MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (result interface{}, err error) { + defer func() { + if r := recover(); r != nil { + log.Error("[Middleware] Panic recovered: %v\nStack: %s", r, debug.Stack()) + err = fmt.Errorf("panic recovered: %v", r) + } + }() + return next(message) + } + } +} + +// 超时中间件 +func TimeoutMiddleware(timeout time.Duration) MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + resultChan := make(chan *TaskResult, 1) + + go func() { + result, err := next(message) + resultChan <- &TaskResult{Data: result, Error: err} + }() + + select { + case result := <-resultChan: + return result.Data, result.Error + case <-time.After(timeout): + log.Error("[Middleware] Message : %v timeout after %v", message, timeout) + return nil, fmt.Errorf("message handler timeout") + } + } + } +} + +// 重试中间件 +func RetryMiddleware(maxRetries int) MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + var result interface{} + var err error + + for i := 0; i <= maxRetries; i++ { + result, err = next(message) + if err == nil { + return result, nil + } + + if i < maxRetries { + log.Debug("[Middleware] Retry %d/%d for message : %v, error: %v", i+1, maxRetries, message, err) + time.Sleep(time.Millisecond * 100 * time.Duration(i+1)) + } + } + + return result, fmt.Errorf("failed after %d retries: %w", maxRetries, err) + } + } +} + +// 验证中间件 +func ValidationMiddleware() MessageMiddleware { + return func(next MessageHandlerFunc) MessageHandlerFunc { + return func(message *msg.Msg) (interface{}, error) { + // 添加消息验证逻辑 + if message == nil { + return nil, fmt.Errorf("message is nil") + } + if message.Type <= 0 { + return nil, fmt.Errorf("invalid message type: %d", message.Type) + } + + return next(message) + } + } +} + +// ----------------------------------- 发送消息相关函数 --------------------------- +func SendMsgToCenterAsync(m *msg.Msg) { + go sendMessageAsync(m, conf.Server.CenterNode) +} + +func SendMsgToCenterSync(m *msg.Msg) (*msg.Msg, error) { + return sendMessageSync(m, conf.Server.CenterNode) +} + +func SendMsgToNodeAsync(m *msg.Msg, node int) { + go sendMessageAsync(m, node) +} + +func SendMsgToNodeSync(m *msg.Msg, node int) (*msg.Msg, error) { + return sendMessageSync(m, node) +} + +func SendPlayerMsgAsync(m *msg.Msg) error { + if m.SendT == 0 { + m.SendT = GoUtil.Now() + } + clone := m.Clone() + clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG + SendMsgToCenterAsync(clone) + return nil +} + +func SendPlayerMsgSync(m *msg.Msg) (interface{}, error) { + clone := m.Clone() + clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG + return SendMsgToCenterSync(clone) +} + +func FriendMgrSend(m1 *msg.Msg) error { + SendPlayerMsgAsync(m1) + return nil +} + +// 异步发送消息到指定节点 节点不在线则保存消息 +func sendMessageAsync(m *msg.Msg, node int) error { + err := mergeCluster.SendServerMsg(m, node) + if err != nil && GoUtil.InArray(m.HandleType, save_msg_type) { + saveMessage(m) + return err + } + deleteMessage(m) + return nil +} + +// 同步消息到指定节点 节点不在线则保存消息 +func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) { + msg, err := mergeCluster.CallServerMsg(m, node) + if err != nil && conf.Server.ServerType == "center" && GoUtil.InArray(m.HandleType, save_msg_type) { + saveMessage(m) + return nil, err + } + deleteMessage(m) + return msg, nil +} + +// 保存消息到本地 +func saveMessage(m *msg.Msg) error { + data := getMessageData() + data.mu.Lock() + defer data.mu.Unlock() + messages := getMessge(int64(m.To)) + messages.mu.Lock() + defer messages.mu.Unlock() + messages.Messages = append(messages.Messages, m) + return nil +} + +func GetUserData(PlayerId int64, Key string) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + From: int(PlayerId), + HandleType: msg.HANDLE_MOD_USER_VAR_GET, + Extra: msg.VarData{Key: Key}, + }) +} + +func getMessge(PlayerId int64) *MessageList { + messageMgrData := getMessageData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + if _, ok := messageMgrData.MessageList[int64(PlayerId)]; !ok { + messageMgrData.MessageList[int64(PlayerId)] = &MessageList{ + Messages: []*msg.Msg{}, + } + } + return messageMgrData.MessageList[int64(PlayerId)] +} + +func deleteMessage(m *msg.Msg) error { + messages := getMessge(int64(m.To)) + messages.mu.Lock() + defer messages.mu.Unlock() + for i, msgItem := range messages.Messages { + if msgItem.UniKey == m.UniKey { + // 删除消息 + messages.Messages = append(messages.Messages[:i], messages.Messages[i+1:]...) + log.Debug("[Middleware] send message success; message: %v, player id: %v", msgItem, msgItem.From) + break + } + } + return nil +} diff --git a/src/server/game/mod/activity/activity.go b/src/server/game/mod/activity/activity.go index 131a8298..87e0dac0 100644 --- a/src/server/game/mod/activity/activity.go +++ b/src/server/game/mod/activity/activity.go @@ -3,9 +3,9 @@ package activity import ( "encoding/gob" "fmt" - "server/GoUtil" activityCfg "server/conf/activity" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" ) diff --git a/src/server/game/mod/activity/activityGift.go b/src/server/game/mod/activity/activity_gift.go similarity index 93% rename from src/server/game/mod/activity/activityGift.go rename to src/server/game/mod/activity/activity_gift.go index a7874c21..3d0c174b 100644 --- a/src/server/game/mod/activity/activityGift.go +++ b/src/server/game/mod/activity/activity_gift.go @@ -2,9 +2,9 @@ package activity import ( "fmt" - "server/GoUtil" activityCfg "server/conf/activity" "server/game/mod/item" + GoUtil "server/game_util" ) func (a *Activity) Fire(Id int) ([]*item.Item, error) { diff --git a/src/server/game/mod/avatar/Avatar.go b/src/server/game/mod/avatar/Avatar.go index 28e33bd7..1e5cc51b 100644 --- a/src/server/game/mod/avatar/Avatar.go +++ b/src/server/game/mod/avatar/Avatar.go @@ -2,8 +2,8 @@ package avatar import ( "fmt" - "server/GoUtil" avatarCfg "server/conf/avatar" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/base/Base.go b/src/server/game/mod/base/Base.go index 9c155784..5bd68e39 100644 --- a/src/server/game/mod/base/Base.go +++ b/src/server/game/mod/base/Base.go @@ -2,10 +2,10 @@ package base import ( "fmt" - "server/GoUtil" "server/conf" baseCfg "server/conf/base" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/card/Card.go b/src/server/game/mod/card/Card.go index a83d3ff8..8b9ce43f 100644 --- a/src/server/game/mod/card/Card.go +++ b/src/server/game/mod/card/Card.go @@ -2,9 +2,9 @@ package card import ( "fmt" - "server/GoUtil" cardCfg "server/conf/card" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" ) diff --git a/src/server/game/mod/card/CardFunc.go b/src/server/game/mod/card/card_func.go similarity index 93% rename from src/server/game/mod/card/CardFunc.go rename to src/server/game/mod/card/card_func.go index 26bf2b50..3cca87f6 100644 --- a/src/server/game/mod/card/CardFunc.go +++ b/src/server/game/mod/card/card_func.go @@ -1,8 +1,8 @@ package card import ( - "server/GoUtil" cardCfg "server/conf/card" + GoUtil "server/game_util" ) func randCard(Round, Star, IsGold int, Except []int) int { diff --git a/src/server/game/mod/catnip/Catnip.go b/src/server/game/mod/catnip/Catnip.go index ab86953d..347e6dfd 100644 --- a/src/server/game/mod/catnip/Catnip.go +++ b/src/server/game/mod/catnip/Catnip.go @@ -2,9 +2,9 @@ package catnip import ( "fmt" - "server/GoUtil" catnipCfg "server/conf/catnip" "server/game/mod/item" + GoUtil "server/game_util" ) type CatnipMod struct { @@ -28,8 +28,8 @@ type CatnipGame struct { PartnerAdd int // 伙伴贡献 Reward []int // 已领取阶段奖励 Status int // 0: Not Started, 1: In Progress, 2: Completed - - EmojiId int // 表情ID + SendEmoji int // 发送的表情ID + EmojiId int // 表情ID } const ( @@ -52,15 +52,16 @@ func (c *CatnipMod) InitData() { } } -func (c *CatnipMod) Login(Id int) int { +func (c *CatnipMod) Login(Id int) (int, []*item.Item) { OldId := c.Id if Id == 0 { c.Id = 0 - return OldId + return OldId, nil } if c.Id == Id { - return 0 + return 0, nil } + Items := c.GetUnGetReward() c.Id = Id c.IsGetGrandReward = false // Reset grand reward status on login c.Game = make(map[int]*CatnipGame) @@ -76,7 +77,7 @@ func (c *CatnipMod) Login(Id int) int { Status: GAME_STATUS_IDLE, // Not started } } - return c.Id + return c.Id, Items } func (c *CatnipMod) ZeroUpdate(Id int) { @@ -189,7 +190,11 @@ func (c *CatnipMod) Reward(Id int) ([]*item.Item, *CatnipGame, error) { return nil, nil, fmt.Errorf("game with Progress %d does not exist", Id) } Items, Ids := catnipCfg.GetProgressReward(c.Id, GameInfo.Reward, GameInfo.Progress) + ProgressNum := catnipCfg.GetProgressNum(c.Id) GameInfo.Reward = append(GameInfo.Reward, Ids...) + if len(GameInfo.Reward) == ProgressNum { + GameInfo.Status = GAME_STATUS_COMPLETED + } if Items == nil { return nil, nil, fmt.Errorf("no reward found for progress %d in game ID %d", GameInfo.Progress, Id) } @@ -252,3 +257,20 @@ func (c *CatnipMod) GetMultiple() int { func (c *CatnipMod) GetGameInfo(Id int) *CatnipGame { return c.Game[Id] } + +func (c *CatnipMod) SetSendEmoji(Id, EmojiId int) { + c.Game[Id].SendEmoji = EmojiId +} + +func (c *CatnipMod) GetUnGetReward() []*item.Item { + var rewards []*item.Item + for _, v := range c.Game { + Items, _, _ := c.Reward(v.Id) + rewards = append(rewards, Items...) + } + BigReward, err := c.GrandReward() + if err == nil { + rewards = append(rewards, BigReward...) + } + return rewards +} diff --git a/src/server/game/mod/champship/Champship.go b/src/server/game/mod/champship/Champship.go index 83f0366d..0051fd50 100644 --- a/src/server/game/mod/champship/Champship.go +++ b/src/server/game/mod/champship/Champship.go @@ -2,10 +2,10 @@ package champship import ( "fmt" - "server/GoUtil" champshipCfg "server/conf/champship" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index 189aaf16..f832fe30 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -3,12 +3,12 @@ package charge import ( "fmt" "math" - "server/GoUtil" chargeCfg "server/conf/charge" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" playroomCfg "server/conf/playroom" "server/game/mod/item" "server/game/mod/order" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" ) diff --git a/src/server/game/mod/charge/ChargeFunc.go b/src/server/game/mod/charge/charge_func.go similarity index 100% rename from src/server/game/mod/charge/ChargeFunc.go rename to src/server/game/mod/charge/charge_func.go diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 3d19abf2..c5502a94 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -3,11 +3,11 @@ package chess import ( "errors" "fmt" - "server/GoUtil" - mergeDataCfg "server/conf/mergeData" - startMergeCfg "server/conf/startMerge" + mergeDataCfg "server/conf/merge_data" + startMergeCfg "server/conf/start_merge" userCfg "server/conf/user" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" "sort" "strings" diff --git a/src/server/game/mod/collect/Collect.go b/src/server/game/mod/collect/Collect.go index f3fe1fbc..ccf909f4 100644 --- a/src/server/game/mod/collect/Collect.go +++ b/src/server/game/mod/collect/Collect.go @@ -2,9 +2,9 @@ package collect import ( "fmt" - "server/GoUtil" collectCfg "server/conf/collect" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/compensation/compensation.go b/src/server/game/mod/compensation/compensation.go index d51092ca..45f55548 100644 --- a/src/server/game/mod/compensation/compensation.go +++ b/src/server/game/mod/compensation/compensation.go @@ -1,8 +1,8 @@ package compensation import ( - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" ) type Compensation struct { diff --git a/src/server/game/mod/dailyTask/DailyFunc.go b/src/server/game/mod/daily_task/DailyFunc.go similarity index 93% rename from src/server/game/mod/dailyTask/DailyFunc.go rename to src/server/game/mod/daily_task/DailyFunc.go index 05a76b13..aece0b39 100644 --- a/src/server/game/mod/dailyTask/DailyFunc.go +++ b/src/server/game/mod/daily_task/DailyFunc.go @@ -2,9 +2,9 @@ package dailyTask import ( "math" - "server/GoUtil" - dailyTaskCfg "server/conf/dailyTask" + dailyTaskCfg "server/conf/daily_task" "server/game/mod/item" + GoUtil "server/game_util" "sort" ) diff --git a/src/server/game/mod/dailyTask/DailyTask.go b/src/server/game/mod/daily_task/DailyTask.go similarity index 98% rename from src/server/game/mod/dailyTask/DailyTask.go rename to src/server/game/mod/daily_task/DailyTask.go index f4d99c5c..7c0eea47 100644 --- a/src/server/game/mod/dailyTask/DailyTask.go +++ b/src/server/game/mod/daily_task/DailyTask.go @@ -2,10 +2,10 @@ package dailyTask import ( "fmt" - "server/GoUtil" - dailyTaskCfg "server/conf/dailyTask" + dailyTaskCfg "server/conf/daily_task" "server/game/mod/item" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" "sort" diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index ed04d977..dcbf187d 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -3,10 +3,10 @@ package decorate import ( "fmt" "math" - "server/GoUtil" decorateCfg "server/conf/decorate" - limitedTimeEventCfg "server/conf/limitedTimeEvent" + limitedTimeEventCfg "server/conf/limited_time_event" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" "sort" ) diff --git a/src/server/game/mod/emoji/emoji.go b/src/server/game/mod/emoji/emoji.go index d8490afa..ef72caf6 100644 --- a/src/server/game/mod/emoji/emoji.go +++ b/src/server/game/mod/emoji/emoji.go @@ -2,8 +2,8 @@ package emoji import ( "fmt" - "server/GoUtil" emojiCfg "server/conf/emoji" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/endless/EndlessFunc.go b/src/server/game/mod/endless/endless_func.go similarity index 98% rename from src/server/game/mod/endless/EndlessFunc.go rename to src/server/game/mod/endless/endless_func.go index 550f4ed5..d59212d7 100644 --- a/src/server/game/mod/endless/EndlessFunc.go +++ b/src/server/game/mod/endless/endless_func.go @@ -1,9 +1,9 @@ package endless import ( - Util "server/GoUtil" endlessCfg "server/conf/endless" "server/game/mod/item" + Util "server/game_util" ) // 初始化奖励 diff --git a/src/server/game/mod/face/Face.go b/src/server/game/mod/face/Face.go index 816b0772..81b622d4 100644 --- a/src/server/game/mod/face/Face.go +++ b/src/server/game/mod/face/Face.go @@ -2,8 +2,8 @@ package face import ( "fmt" - "server/GoUtil" faceCfg "server/conf/face" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 3623036d..2bb2c8f5 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -2,10 +2,11 @@ package friend import ( "fmt" - "server/GoUtil" cardCfg "server/conf/card" + friendCfg "server/conf/friend" "server/game/mod/card" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) @@ -214,8 +215,17 @@ func (f *FriendMod) GetNpc() []int { return f.Npc } -func (f *FriendMod) SetNpc(id int) { +func (f *FriendMod) SetNpc(id int) error { + if !friendCfg.IsNpcFriend(id) { + return fmt.Errorf("not npc friend") + } + for _, v := range f.Npc { + if v == id { + return fmt.Errorf("npc already exist") + } + } f.Npc = append(f.Npc, id) + return nil } func (f *FriendMod) GetSyncId() int64 { @@ -502,9 +512,9 @@ func (f *FriendMod) GetActLogLast() *ActLogInfo { return f.ActivityLog[len(f.ActivityLog)-1] } -func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, Items []*item.Item) { +func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, Items []*item.Item) *ReplyInfo { f.AutoId++ - f.ReplyList = append(f.ReplyList, &ReplyInfo{ + ReplyInfo := &ReplyInfo{ Id: f.AutoId, Uid: Uid, Type: Type, @@ -513,7 +523,9 @@ func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, AddTime: GoUtil.Now(), EndTime: EndTime, Items: Items, - }) + } + f.ReplyList = append(f.ReplyList, ReplyInfo) + return ReplyInfo } func (f *FriendMod) ReplyFriend(LogId int) *ReplyInfo { diff --git a/src/server/game/mod/friendTreasure.go/friendTreasure.go b/src/server/game/mod/friend_treasure.go/friend_treasure.go similarity index 97% rename from src/server/game/mod/friendTreasure.go/friendTreasure.go rename to src/server/game/mod/friend_treasure.go/friend_treasure.go index 20aa23cb..e5c07fbb 100644 --- a/src/server/game/mod/friendTreasure.go/friendTreasure.go +++ b/src/server/game/mod/friend_treasure.go/friend_treasure.go @@ -2,9 +2,9 @@ package friendTreasure import ( "fmt" - "server/GoUtil" - friendTreasureCfg "server/conf/friendTreasure" + friendTreasureCfg "server/conf/friend_treasure" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" ) diff --git a/src/server/game/mod/guessColor/guessColor.go b/src/server/game/mod/guessColor/guessColor.go index 4c13e32d..ad6be145 100644 --- a/src/server/game/mod/guessColor/guessColor.go +++ b/src/server/game/mod/guessColor/guessColor.go @@ -2,10 +2,10 @@ package guesscolor import ( "fmt" - "server/GoUtil" - guesscolorCfg "server/conf/guessColor" + guesscolorCfg "server/conf/guess_color" randnameCfg "server/conf/randname" "server/game/mod/item" + GoUtil "server/game_util" ) type GuessColorMod struct { diff --git a/src/server/game/mod/guess_color/guess_color.go b/src/server/game/mod/guess_color/guess_color.go new file mode 100644 index 00000000..ad6be145 --- /dev/null +++ b/src/server/game/mod/guess_color/guess_color.go @@ -0,0 +1,132 @@ +package guesscolor + +import ( + "fmt" + guesscolorCfg "server/conf/guess_color" + randnameCfg "server/conf/randname" + "server/game/mod/item" + GoUtil "server/game_util" +) + +type GuessColorMod struct { + Id int + Pass int + Opponent simplePlayer + MapList []map[int32]int32 + OMap map[int32]int32 + WinTime int + First bool + Guess int +} + +type simplePlayer struct { + Name string + Face int + Avatar int + Progress int +} + +const ( + GAME_STATUS_SUCCESS = 1 + GAME_STATUS_FAIL = 2 +) + +func (g *GuessColorMod) InitData() { + if g.MapList == nil { + g.MapList = make([]map[int32]int32, 0) + } + if g.OMap == nil { + g.OMap = make(map[int32]int32) + } + if g.Pass == 0 || g.WinTime == 0 { + g.Pass = 1 + g.WinTime = guesscolorCfg.GetWinTime(g.Pass) + } + if g.Opponent.Name == "" { + g.Opponent = simplePlayer{ + Name: randnameCfg.GetRandName(), + Face: GoUtil.RandNum(1, 10), + Avatar: GoUtil.RandNum(1, 10), + Progress: 0, + } + } +} + +func (g *GuessColorMod) Login(Id int) int { + OldId := g.Id + if Id == 0 { + g.Id = 0 + return g.Id + } + if g.Id == Id { + return 0 + } + g.Id = Id + g.Pass = 1 + g.Opponent = simplePlayer{ + Name: randnameCfg.GetRandName(), + Face: GoUtil.RandNum(1, 10), + Avatar: GoUtil.RandNum(1, 10), + Progress: 0, + } + g.Guess = 0 + g.MapList = make([]map[int32]int32, 0) + g.OMap = make(map[int32]int32) + g.WinTime = guesscolorCfg.GetWinTime(g.Pass) + return OldId +} + +func (g *GuessColorMod) ZeroUpdate(Id int) { + g.Login(Id) +} + +func (g *GuessColorMod) FirstIn() []*item.Item { + if g.First { + return nil + } + g.First = true + return guesscolorCfg.GetFirstItem(g.Id) +} + +func (g *GuessColorMod) Take(Map map[int32]int32, OMap map[int32]int32) { + if len(Map) > 0 { + g.MapList = append(g.MapList, Map) + g.Guess++ + } + g.OMap = OMap +} + +func (g *GuessColorMod) GetLoseItem() []*item.Item { + Items := guesscolorCfg.GetLoseItem(g.Id) + Num := guesscolorCfg.GetPassNum(g.Pass) + if len(g.MapList) > 0 { + LastMap := g.MapList[len(g.MapList)-1] + for _, v := range LastMap { + if v > 10 { + Num-- + } + } + } + return item.MutilItem(Items, Num) +} + +func (g *GuessColorMod) GetReward() ([]*item.Item, error) { + if g.Pass == 0 { + return nil, fmt.Errorf("not pass") + } + // Num := guesscolorCfg.GetPassNum(g.Pass) + if g.Guess < g.WinTime { + return nil, fmt.Errorf("guess process not finish") + } + Type := GAME_STATUS_FAIL + if g.Guess == guesscolorCfg.GetPassNum(g.Pass) { + Type = GAME_STATUS_SUCCESS + } + Item := guesscolorCfg.GetRewardItem(g.Pass, Type) + g.Pass++ + g.Guess = 0 + g.WinTime = guesscolorCfg.GetWinTime(g.Pass) + g.MapList = make([]map[int32]int32, 0) + g.OMap = make(map[int32]int32) + return Item, nil +} diff --git a/src/server/game/mod/guide/Guide.go b/src/server/game/mod/guide/Guide.go index f6b7582a..94333692 100644 --- a/src/server/game/mod/guide/Guide.go +++ b/src/server/game/mod/guide/Guide.go @@ -2,9 +2,9 @@ package guide import ( "fmt" - "server/GoUtil" guidecfg "server/conf/guide" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/guideTask/guideTask.go b/src/server/game/mod/guide_task/guide_task.go similarity index 98% rename from src/server/game/mod/guideTask/guideTask.go rename to src/server/game/mod/guide_task/guide_task.go index 8c525882..41a75462 100644 --- a/src/server/game/mod/guideTask/guideTask.go +++ b/src/server/game/mod/guide_task/guide_task.go @@ -2,10 +2,10 @@ package guideTask import ( "fmt" - "server/GoUtil" - GuideTaskCfg "server/conf/guideTask" + GuideTaskCfg "server/conf/guide_task" "server/game/mod/item" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/handbook/Handbook.go b/src/server/game/mod/handbook/Handbook.go index 25b9edc6..e5a27346 100644 --- a/src/server/game/mod/handbook/Handbook.go +++ b/src/server/game/mod/handbook/Handbook.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" handbookCfg "server/conf/handbook" - startMergeCfg "server/conf/startMerge" + startMergeCfg "server/conf/start_merge" "server/game/mod/item" "server/msg" ) diff --git a/src/server/game/mod/invite/invite.go b/src/server/game/mod/invite/invite.go index 842bbe3e..cec09006 100644 --- a/src/server/game/mod/invite/invite.go +++ b/src/server/game/mod/invite/invite.go @@ -2,9 +2,9 @@ package invite import ( "fmt" - "server/GoUtil" inviteCfg "server/conf/invite" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limited_time_event/limited_time_event.go similarity index 99% rename from src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go rename to src/server/game/mod/limited_time_event/limited_time_event.go index 8bc6f24b..218c8ae3 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limited_time_event/limited_time_event.go @@ -3,10 +3,10 @@ package limitedTimeEvent import ( "fmt" "math" - "server/GoUtil" - limitedTimeEventCfg "server/conf/limitedTimeEvent" - mergeDataCfg "server/conf/mergeData" + limitedTimeEventCfg "server/conf/limited_time_event" + mergeDataCfg "server/conf/merge_data" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/mail/Mail.go b/src/server/game/mod/mail/Mail.go index b1cd2750..53e08245 100644 --- a/src/server/game/mod/mail/Mail.go +++ b/src/server/game/mod/mail/Mail.go @@ -2,8 +2,8 @@ package mail import ( "fmt" - "server/GoUtil" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 22415fee..02c7077b 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -3,21 +3,53 @@ package msg import "server/game/mod/item" type Msg struct { - Type int // 消息类型 - To int // 接收者 - From int // 发送者 - Item []*item.Item // 物品 - SendT int64 // 发送时间 - End int64 // 过期时间 - Extra interface{} //额外信息 - Id int64 - UniKey string // 回调监听唯一键值 - H int //处理类型 + Type int // 消息类型 + To int // 接收者 + From int // 发送者 + Item []*item.Item // 物品 + SendT int64 // 发送时间 + End int64 // 过期时间 + Extra interface{} //额外信息 + Id int64 + UniKey string // 回调监听唯一键值 + H int //处理类型 + HandleType int //处理类型 } +type VarData struct { + Key string + Value interface{} + SetType int // 操作类型 0 设置 1 增加 2 减少 3 覆盖 +} + +const ( + VAR_OP_ADD = 1 + VAR_OP_SUB = 2 + VAR_OP_SET = 3 +) + var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} +const ( + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 + HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 + HANDLE_MOD_VAR_GET = 20007 // 获取变量 + HANDLE_MOD_VAR_SET = 20008 // 设置变量 + HANDLE_MOD_CATNIP_PARTNER = 20009 // 猫薄荷伙伴 + HANDLE_MOD_USER_VAR_GET = 20010 // 获取玩家变量 + HANDLE_MOD_USER_VAR_SET = 20011 // 设置玩家变量 + HANDLE_MOD_REPLY_PLAYER_MSG = 20012 // 回复玩家消息 + HANDLE_MDO_CHAMPSHIP_INRANK = 20013 // 锦标赛入榜 + HANDLE_MOD_CHAMPSHIP_RANK_INFO = 20014 // 锦标赛排名信息 + HANDLE_MOD_CHAMPSHIP_RANK_LIST = 20015 // 锦标赛排行榜 + HANDLE_MOD_CHAMPSHIP_PRE_RANK = 20016 // 锦标赛上期排名 +) + const ( //好友操作 HANDLE_TYPE_APPLY = iota //申请好友 @@ -112,6 +144,9 @@ const ( HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息 HANDLE_TYPE_SET_CATNIP_PARTNER // 设置猫薄荷伙伴 HANDLE_TYPE_CATNIP_SEND_EMOJI // 发送猫薄荷表情 + HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名 + + HANDLE_TYPE_LOGIN // 玩家登录处理 ) const ( @@ -126,15 +161,31 @@ const ( func (m *Msg) Clone() *Msg { return &Msg{ - Type: m.Type, - To: m.To, - From: m.From, - Item: m.Item, - SendT: m.SendT, - End: m.End, - Extra: m.Extra, - Id: m.Id, - H: m.H, + Type: m.Type, + To: m.To, + From: m.From, + Item: m.Item, + SendT: m.SendT, + End: m.End, + Extra: m.Extra, + Id: m.Id, + H: m.H, + UniKey: m.UniKey, + } +} + +func (m *Msg) Reply(data interface{}) *Msg { + return &Msg{ + Type: m.Type, + To: m.From, + Item: m.Item, + SendT: m.SendT, + End: m.End, + Extra: data, + Id: m.Id, + H: m.H, + UniKey: m.UniKey, + HandleType: HANDLE_MOD_REPLY_PLAYER_MSG, } } diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 24356935..b2247924 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,11 +2,11 @@ package order import ( "fmt" - "server/GoUtil" - limitedTimeEventCfg "server/conf/limitedTimeEvent" - mergeDataCfg "server/conf/mergeData" + limitedTimeEventCfg "server/conf/limited_time_event" + mergeDataCfg "server/conf/merge_data" orderCfg "server/conf/order" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" "strings" "time" diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/order_func.go similarity index 99% rename from src/server/game/mod/order/OrderFunc.go rename to src/server/game/mod/order/order_func.go index 91cabb17..653a4344 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/order_func.go @@ -3,10 +3,10 @@ package order import ( "log" "math" - "server/GoUtil" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" orderCfg "server/conf/order" userCfg "server/conf/user" + GoUtil "server/game_util" "sort" ) diff --git a/src/server/game/mod/pass/Pass.go b/src/server/game/mod/pass/Pass.go index 9109d535..c1c13f8b 100644 --- a/src/server/game/mod/pass/Pass.go +++ b/src/server/game/mod/pass/Pass.go @@ -1,9 +1,9 @@ package pass import ( - "server/GoUtil" passCfg "server/conf/pass" "server/game/mod/item" + GoUtil "server/game_util" ) type PassMod struct { diff --git a/src/server/game/mod/piggyBank/piggyBank.go b/src/server/game/mod/piggy_bank/piggy_bank.go similarity index 98% rename from src/server/game/mod/piggyBank/piggyBank.go rename to src/server/game/mod/piggy_bank/piggy_bank.go index faeac010..db4174ff 100644 --- a/src/server/game/mod/piggyBank/piggyBank.go +++ b/src/server/game/mod/piggy_bank/piggy_bank.go @@ -1,9 +1,9 @@ package piggyBank import ( - "server/GoUtil" chargeCfg "server/conf/charge" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/playroom/playroom.go b/src/server/game/mod/playroom/playroom.go index abc3c394..b38fe3f4 100644 --- a/src/server/game/mod/playroom/playroom.go +++ b/src/server/game/mod/playroom/playroom.go @@ -3,11 +3,11 @@ package playroom import ( "fmt" "math" - "server/GoUtil" - limitedTimeEventCfg "server/conf/limitedTimeEvent" + limitedTimeEventCfg "server/conf/limited_time_event" playroomCfg "server/conf/playroom" "server/game/mod/item" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" "sort" ) diff --git a/src/server/game/mod/quest/Quest.go b/src/server/game/mod/quest/Quest.go index 1620dbf0..41a05914 100644 --- a/src/server/game/mod/quest/Quest.go +++ b/src/server/game/mod/quest/Quest.go @@ -2,7 +2,7 @@ package quest import ( "fmt" - "server/GoUtil" + GoUtil "server/game_util" "server/msg" "strconv" "strings" diff --git a/src/server/game/mod/race/race.go b/src/server/game/mod/race/race.go index 9122ae13..2a5b1628 100644 --- a/src/server/game/mod/race/race.go +++ b/src/server/game/mod/race/race.go @@ -3,10 +3,10 @@ package race import ( "fmt" "math/rand" - "server/GoUtil" raceCfg "server/conf/race" randnameCfg "server/conf/randname" "server/game/mod/item" + GoUtil "server/game_util" ) type RaceMod struct { diff --git a/src/server/game/mod/sevenLogin/SevenLogin.go b/src/server/game/mod/seven_login/seven_login.go similarity index 98% rename from src/server/game/mod/sevenLogin/SevenLogin.go rename to src/server/game/mod/seven_login/seven_login.go index 0795678a..eefd54a2 100644 --- a/src/server/game/mod/sevenLogin/SevenLogin.go +++ b/src/server/game/mod/seven_login/seven_login.go @@ -2,9 +2,9 @@ package sevenLogin import ( "fmt" - "server/GoUtil" - sevenLoginCfg "server/conf/sevenLogin" + sevenLoginCfg "server/conf/seven_login" "server/game/mod/item" + GoUtil "server/game_util" "server/msg" ) diff --git a/src/server/game/mod/sevenLogin/SevenLoginFunc.go b/src/server/game/mod/seven_login/seven_login_func.go similarity index 98% rename from src/server/game/mod/sevenLogin/SevenLoginFunc.go rename to src/server/game/mod/seven_login/seven_login_func.go index 2f1257fa..f86a0b6f 100644 --- a/src/server/game/mod/sevenLogin/SevenLoginFunc.go +++ b/src/server/game/mod/seven_login/seven_login_func.go @@ -2,9 +2,9 @@ package sevenLogin import ( "math/rand/v2" - "server/GoUtil" - sevenLoginCfg "server/conf/sevenLogin" + sevenLoginCfg "server/conf/seven_login" "server/game/mod/item" + GoUtil "server/game_util" "server/gamedata" "sort" ) diff --git a/src/server/game/mod_factory.go b/src/server/game/mod_factory.go new file mode 100644 index 00000000..4d9187e6 --- /dev/null +++ b/src/server/game/mod_factory.go @@ -0,0 +1,14 @@ +package game + +import ( + "server/game/mod/chess" + "server/game/mod/decorate" +) + +func (p *Player) GetChessMod() *chess.ChessBorad { + return p.PlayMod.getChessMod() +} + +func (p *Player) GetDecorateMod() *decorate.Decorate { + return p.PlayMod.getDecorateMod() +} diff --git a/src/server/game/PlayerBack.go b/src/server/game/player_back.go similarity index 94% rename from src/server/game/PlayerBack.go rename to src/server/game/player_back.go index e4fc9bc1..2dbcbfc7 100644 --- a/src/server/game/PlayerBack.go +++ b/src/server/game/player_back.go @@ -1,11 +1,12 @@ package game import ( - "server/GoUtil" chargeCfg "server/conf/charge" playroomCfg "server/conf/playroom" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" + "server/game/mod/msg" + GoUtil "server/game_util" proto "server/msg" ) @@ -113,7 +114,6 @@ func (p *Player) PlayroomBackData() { ItemId: int32(k), }) } - data := G_GameLogicPtr.GetUserData(int(p.M_DwUin)) r.Dress = Dress r.DressSet = GoUtil.MapIntToInt32(PlayroomMod.GetDressSet()) @@ -156,7 +156,7 @@ func (p *Player) PlayroomBackData() { r.Unlock = PlayroomMod.GetUnlockIds() r.DailyTaskReward = GoUtil.IntToInt32(PlayroomMod.DailyTaskReward) r.DailyTask = PlayroomMod.BackDataTask() - r.Kiss = int32(data.Kiss) + r.Kiss = int32(p.GetPlayroomKiss()) r.Revenge = PlayroomMod.RevengeUid r.InteractNum = int32(PlayroomMod.InteractNum) r.AdItem = AdWatch @@ -195,18 +195,16 @@ func (p *Player) PlayroomVisit(Uid int) { r.Upvote = GoUtil.InArray(Uid, PlayroomMod.UpvoteList) r.Items = Items r.Status = int32(PlayroomMod.GameStatus) - data := G_GameLogicPtr.GetUserData(Uid) - r.UpvoteCount = int32(data.Upvote) - r.Chip = int32(data.Chip) - r.Kiss = int32(data.Kiss) + r.UpvoteCount = int32(p.GetPlayroomUpvote()) + r.Chip = int32(p.GetPlayroomChip()) + r.Kiss = int32(p.GetPlayroomKiss()) r.DressSet = GoUtil.MapIntToInt32(PlayerData.DressSet) p.PushClientRes(r) } func (p *Player) NotifyPlayroomKiss() { - data := G_GameLogicPtr.GetUserData(int(p.M_DwUin)) m := &proto.NotifyPlayroomKiss{ - Kiss: int32(data.Kiss), + Kiss: int32(p.GetPlayroomKiss()), } p.PushClientRes(m) } @@ -297,11 +295,24 @@ func (p *Player) ChargeBackData() { 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)) + MyRank, MyPreRank := p.GetChampshipRank() p.PushClientRes(ChampshipMod.BackData(MyRank, MyPreRank)) } +func (p *Player) GetChampshipRank() (int, int) { + MyRank := 0 + MyPreRank := 0 + res, _ := SendMsgToCenterSync(&msg.Msg{ + From: int(p.M_DwUin), + HandleType: msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, + }) + if res != nil { + MyRank = res.Extra.([]int)[0] + MyPreRank = res.Extra.([]int)[1] + } + return MyRank, MyPreRank +} + // 返回好友信息 func (p *Player) FriendListBackData() { FriendMod := p.PlayMod.getFriendMod() diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/player_base_mod.go similarity index 95% rename from src/server/game/PlayerBaseMod.go rename to src/server/game/player_base_mod.go index cd994d00..0f092636 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/player_base_mod.go @@ -9,7 +9,7 @@ import ( userCfg "server/conf/user" "server/db" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" Msg "server/game/mod/msg" "server/game/mod/order" "server/game/mod/quest" @@ -43,11 +43,11 @@ func (p *PlayerBaseData) BackUp() msg.ResPlayerBaseInfo { Guild: p.Data.Guild, PackUnlockCount: p.Data.PackUnlockCount, LastPlayTime: p.Data.LastPlayTime, - EnergyBuyCount: p.Data.EnergyBuyCount, + Ban: p.Data.Ban, LoginTime: p.Data.LoginTime, UserName: p.Data.UserName, LogoutTime: p.Data.LogoutTime, - Todayolinetime: p.Data.Todayolinetime, + Node: p.Data.Node, Rolecreatetime: p.Data.Rolecreatetime, LastChampGroupID: p.Data.LastChampGroupID, ChampshipsGroupID: p.Data.ChampshipsGroupID, @@ -70,11 +70,11 @@ func (p *PlayerBaseData) Recover(old *PlayerBaseData) *PlayerBaseData { Guild: p.Data.Guild, PackUnlockCount: p.Data.PackUnlockCount, LastPlayTime: p.Data.LastPlayTime, - EnergyBuyCount: p.Data.EnergyBuyCount, + Ban: p.Data.Ban, LoginTime: p.Data.LoginTime, UserName: p.Data.UserName, LogoutTime: p.Data.LogoutTime, - Todayolinetime: p.Data.Todayolinetime, + Node: p.Data.Node, Rolecreatetime: p.Data.Rolecreatetime, LastChampGroupID: p.Data.LastChampGroupID, ChampshipsGroupID: p.Data.ChampshipsGroupID, @@ -104,10 +104,10 @@ func (p *PlayerBaseData) LoadDataFromDB(UserName interface{}) bool { p.Data.Guild = sqlStruck.Guild p.Data.PackUnlockCount = sqlStruck.PackUnlockCount p.Data.LastPlayTime = sqlStruck.LastPlayTime - p.Data.EnergyBuyCount = sqlStruck.EnergyBuyCount + p.Data.Ban = sqlStruck.Ban p.Data.UserName = sqlStruck.UserName p.Data.LogoutTime = sqlStruck.LogoutTime - p.Data.Todayolinetime = sqlStruck.Todayolinetime + p.Data.Node = sqlStruck.Node p.Data.Rolecreatetime = sqlStruck.Rolecreatetime p.Data.LastChampGroupID = sqlStruck.LastChampGroupID p.Data.ChampshipsGroupID = sqlStruck.ChampshipsGroupID @@ -132,11 +132,11 @@ func (p *PlayerBaseData) SaveDataFromDB(Key interface{}) bool { sqlStruck.Guild = p.Data.Guild sqlStruck.PackUnlockCount = p.Data.PackUnlockCount sqlStruck.LastPlayTime = p.Data.LastPlayTime - sqlStruck.EnergyBuyCount = p.Data.EnergyBuyCount + sqlStruck.Ban = int64(p.Data.Ban) sqlStruck.LoginTime = int32(BaseMod.LoginTime) sqlStruck.UserName = p.Data.UserName sqlStruck.LogoutTime = int32(BaseMod.LogoutTime) - sqlStruck.Todayolinetime = p.Data.Todayolinetime + sqlStruck.Node = p.Data.Node sqlStruck.Rolecreatetime = p.Data.Rolecreatetime sqlStruck.NoAd = p.Data.NoAd sqlStruck.ChampshipsGroupID = p.Data.ChampshipsGroupID @@ -163,22 +163,6 @@ func (p *PlayerBaseData) GetMaxEnergy() int { } // 更新游戏道具 -func (p *PlayerBaseData) UpdateBaseItemInfo(update *msg.UpdateBaseItemInfo) { - for k, v := range update.MUpdateItem { - switch k { - case 4: - p.Data.EnergyBuyCount = v - case 8: - p.Data.Guild = v - case 9: - p.Data.PackUnlockCount = v - case 10: - p.Data.EmitOrderCnt = v - case 11: - p.Data.LastPlayTime = v - } - } -} func (p *PlayerBaseData) ReqRemoveAd(player *Player, buf []byte) { req := &msg.ReqRemoveAd{} @@ -438,6 +422,7 @@ func (p *PlayerBaseData) ReqSynGameData(player *Player, buf []byte) { func (p *PlayerBaseData) ClearData() bool { p.Data.LogoutTime = int32(time.Now().Unix()) + p.Data.Node = 0 p.SaveDataFromDB("") return true } @@ -654,11 +639,11 @@ func (p *PlayerBaseData) GetDataByUid(Uid interface{}) bool { p.Data.Guild = sqlStruck.Guild p.Data.PackUnlockCount = sqlStruck.PackUnlockCount p.Data.LastPlayTime = sqlStruck.LastPlayTime - p.Data.EnergyBuyCount = sqlStruck.EnergyBuyCount + p.Data.Ban = sqlStruck.Ban p.Data.LoginTime = sqlStruck.LoginTime p.Data.UserName = sqlStruck.UserName p.Data.LogoutTime = sqlStruck.LogoutTime - p.Data.Todayolinetime = sqlStruck.Todayolinetime + p.Data.Node = sqlStruck.Node p.Data.Rolecreatetime = sqlStruck.Rolecreatetime p.Data.LastChampGroupID = sqlStruck.LastChampGroupID p.Data.ChampshipsGroupID = sqlStruck.ChampshipsGroupID diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/player_chess_mod.go similarity index 99% rename from src/server/game/PlayerChessMod.go rename to src/server/game/player_chess_mod.go index 6b07ece6..4ebefa4b 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/player_chess_mod.go @@ -3,14 +3,14 @@ package game import ( "fmt" "math" - "server/GoUtil" "server/conf" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" orderCfg "server/conf/order" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/order" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" "sort" diff --git a/src/server/game/Player.go b/src/server/game/player_data.go similarity index 97% rename from src/server/game/Player.go rename to src/server/game/player_data.go index 822e9fed..a8228145 100644 --- a/src/server/game/Player.go +++ b/src/server/game/player_data.go @@ -6,14 +6,14 @@ import ( "encoding/json" "errors" "math" - "server/GoUtil" + "server/conf" activityCfg "server/conf/activity" cardCfg "server/conf/card" chargeCfg "server/conf/charge" - guesscolorCfg "server/conf/guessColor" + guesscolorCfg "server/conf/guess_color" itemCfg "server/conf/item" - limitedTimeEventCfg "server/conf/limitedTimeEvent" - mergeDataCfg "server/conf/mergeData" + limitedTimeEventCfg "server/conf/limited_time_event" + mergeDataCfg "server/conf/merge_data" miningCfg "server/conf/mining" playroomCfg "server/conf/playroom" "server/db" @@ -21,10 +21,11 @@ import ( "server/game/mod/activity" "server/game/mod/friend" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" MsgMod "server/game/mod/msg" "server/game/mod/playroom" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" telog "server/thinkdata" "strconv" @@ -101,12 +102,13 @@ func (p *Player) CallEvent(Duration time.Duration, F func(), Label string) { } // 异步请求 -func (p *Player) Send(m *MsgMod.Msg) { +func (p *Player) Send(m *MsgMod.Msg) error { if m == nil { - return + return nil } p.wg.Add(1) p.msgChan <- m + return nil } func (p *Player) Call(m MsgMod.Msg) { @@ -252,7 +254,6 @@ func (p *Player) InitPlayer(UserName string) error { p.NoonUpdate(nil) p.Login() p.OrderShip() - p.SyncFriendMsg() p.UpdateUserInfo() // fix bug ChargeMod := p.PlayMod.getChargeMod() @@ -451,11 +452,16 @@ func (p *Player) ClearData() { log.Debug("ClearData BeginTx failed:", err) return } + Uid := int(p.M_DwUin) p.PlayerBaseMod.ClearData() p.PlayMod.ClearData(p) tx.Commit() p.Stop() G_GameLogicPtr.DelPlayer(p) + SendMsgToCenterAsync(&MsgMod.Msg{ + From: Uid, + HandleType: MsgMod.HANDLE_MDO_PLAYER_LOGOUT, + }) } func (p *Player) AutoSaveData() { @@ -863,6 +869,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { // 登录返回数据 func (p *Player) LoginBackData() { + SendMsgToCenterSync(&MsgMod.Msg{ + From: int(p.M_DwUin), + HandleType: MsgMod.HANDLE_MOD_PLAYER_LOGIN, + Extra: conf.Server.ServerID, + }) p.PushClientRes(p.PlayMod.mod_list.Base.BackData()) p.PushClientRes(p.PlayMod.mod_list.Handbook.BackData()) p.PushClientRes(p.PlayMod.mod_list.Base.BackData()) @@ -975,7 +986,7 @@ func (p *Player) UpdateUserInfo() { //TODO 存储到redis 在新版本中将优化成gob进行压缩 value, _ := json.Marshal(simple) - IdStr := strconv.Itoa(int(p.M_DwUin)) + IdStr := GoUtil.String(p.M_DwUin) go db.RedisSetKeyBytes(IdStr, value, 0) } @@ -1013,8 +1024,10 @@ func (p *Player) HandleInChampshipRank() { H: ChampshipMod.GetH(), N: ChampshipMod.GetN(), }, + End: GoUtil.ZeroTimestamp() + 86400, // 第二天零点删除 + HandleType: MsgMod.HANDLE_MDO_CHAMPSHIP_INRANK, } - G_GameLogicPtr.ChampshipMgrSend(m) + SendMsgToCenterAsync(m) } func (p *Player) AddLog(Uid int, Type int, Param string, Time int64) { diff --git a/src/server/game/PlayerLog.go b/src/server/game/player_log.go similarity index 100% rename from src/server/game/PlayerLog.go rename to src/server/game/player_log.go diff --git a/src/server/game/PlayerMod.go b/src/server/game/player_mod.go similarity index 96% rename from src/server/game/PlayerMod.go rename to src/server/game/player_mod.go index 939ba214..ad73eff0 100644 --- a/src/server/game/PlayerMod.go +++ b/src/server/game/player_mod.go @@ -16,29 +16,29 @@ import ( "server/game/mod/chess" "server/game/mod/collect" "server/game/mod/compensation" - "server/game/mod/dailyTask" + dailyTask "server/game/mod/daily_task" "server/game/mod/decorate" "server/game/mod/emoji" "server/game/mod/endless" "server/game/mod/face" "server/game/mod/friend" - "server/game/mod/friendTreasure.go" - guesscolor "server/game/mod/guessColor" + friendTreasure "server/game/mod/friend_treasure.go" + guesscolor "server/game/mod/guess_color" "server/game/mod/guide" - "server/game/mod/guideTask" + guideTask "server/game/mod/guide_task" "server/game/mod/handbook" "server/game/mod/invite" "server/game/mod/item" "server/game/mod/kv" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/mail" "server/game/mod/mining" "server/game/mod/order" "server/game/mod/pass" - "server/game/mod/piggyBank" + piggyBank "server/game/mod/piggy_bank" "server/game/mod/playroom" "server/game/mod/race" - "server/game/mod/sevenLogin" + sevenLogin "server/game/mod/seven_login" Var "server/game/mod/var" "server/pkg/github.com/name5566/leaf/log" "time" @@ -170,10 +170,9 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { is_update = true } BaseMod := &p.ModList.Base + PlayerBaseMod := player.GetPlayerBaseMod() if BaseMod.Uid == 0 { - PlayerBaseMod := player.GetPlayerBaseMod() BaseMod.Uid = PlayerBaseMod.Data.DwUin - BaseMod.SetAccount(PlayerBaseMod.Data.UserName) BaseMod.SetLevel(1) BaseMod.SetExp(0) BaseMod.SetEnergy(userCfg.GetInitEnergy()) @@ -183,6 +182,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId is_update = true } + BaseMod.SetAccount(PlayerBaseMod.Data.UserName) Ip := p.GetPlayer().GetIp() p.ModList.Handbook.InitData() p.ModList.Order.InitData() diff --git a/src/server/game/RankMgr.go b/src/server/game/rank_mgr.go similarity index 99% rename from src/server/game/RankMgr.go rename to src/server/game/rank_mgr.go index fc576794..a3bbdbe0 100644 --- a/src/server/game/RankMgr.go +++ b/src/server/game/rank_mgr.go @@ -2,10 +2,10 @@ package game import ( "fmt" - "server/GoUtil" "server/conf" "server/db" "server/game/mod/msg" + GoUtil "server/game_util" "sort" "strconv" ) diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/register_network_func.go similarity index 98% rename from src/server/game/RegisterNetworkFunc.go rename to src/server/game/register_network_func.go index 4b77d8df..d5368bc5 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/register_network_func.go @@ -4,7 +4,6 @@ import ( "errors" "fmt" "math" - "server/GoUtil" "server/conf" baseCfg "server/conf/base" cardCfg "server/conf/card" @@ -12,10 +11,10 @@ import ( collectCfg "server/conf/collect" decorateCfg "server/conf/decorate" emojiCfg "server/conf/emoji" - GuideTaskCfg "server/conf/guideTask" + GuideTaskCfg "server/conf/guide_task" handbookCfg "server/conf/handbook" - limitedTimeEventCfg "server/conf/limitedTimeEvent" - mergeDataCfg "server/conf/mergeData" + limitedTimeEventCfg "server/conf/limited_time_event" + mergeDataCfg "server/conf/merge_data" miningCfg "server/conf/mining" orderCfg "server/conf/order" playroomCfg "server/conf/playroom" @@ -26,12 +25,13 @@ import ( "server/game/mod/collect" "server/game/mod/friend" "server/game/mod/item" - "server/game/mod/limitedTimeEvent" + limitedTimeEvent "server/game/mod/limited_time_event" MsqMod "server/game/mod/msg" "server/game/mod/order" - "server/game/mod/piggyBank" + piggyBank "server/game/mod/piggy_bank" "server/game/mod/playroom" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" "strconv" @@ -119,17 +119,6 @@ func ReqRemoveAdFunc(player *Player, buf []byte) error { return nil } -// 更新玩家物品 -func UpdateBaseItemInfofunction(player *Player, buf []byte) error { - detail := &msg.UpdateBaseItemInfo{} - err := proto.Unmarshal(buf, detail) - if err != nil { - return err - } - player.PlayerBaseMod.UpdateBaseItemInfo(detail) - return nil -} - // 请求玩家棋盘信息 func ReqPlayerChessDataFunc(player *Player, buf []byte) error { detail := &msg.ReqPlayerChessData{} @@ -1786,15 +1775,14 @@ func ReqLimitSenceReward(player *Player, buf []byte) error { } func ReqGetGoldCard(player *Player, buf []byte) error { - data := G_GameLogicPtr.VarMgr.GetVar(VAR_GOLD_CARD) - if data == nil { + gold := player.GetGoldCard() + if gold == nil { player.SendErrClienRes(&msg.ResGetGoldCard{ Four: 0, Five: 0, }) return fmt.Errorf("not exist") } - gold := data.(*VarGoldCard) player.PushClientRes(&msg.ResGetGoldCard{ Four: int32(gold.Four), Five: int32(gold.Five), @@ -1871,13 +1859,13 @@ func ReqApplyFriend(player *Player, buf []byte) error { }) return fmt.Errorf("already friend") } - if FriendMod.AddSendApply(Uid) { - player.SendErrClienRes(&msg.ResApplyFriend{ - Code: msg.RES_CODE_FAIL, - Msg: "already apply", - }) - return fmt.Errorf("already apply") - } + // if FriendMod.AddSendApply(Uid) { + // player.SendErrClienRes(&msg.ResApplyFriend{ + // Code: msg.RES_CODE_FAIL, + // Msg: "already apply", + // }) + // return fmt.Errorf("already apply") + // } if req.Type == 1 { Items, err := FriendMod.GetSponsorReward() if err != nil { @@ -2577,7 +2565,18 @@ func ReqChampshipRank(player *Player, buf []byte) error { if err != nil { return err } - m := G_GameLogicPtr.ChampshipMgr.GetRankMsg(int(player.M_DwUin)) + res, err := SendMsgToCenterSync(&MsqMod.Msg{ + From: int(player.M_DwUin), + HandleType: MsqMod.HANDLE_MOD_CHAMPSHIP_RANK_LIST, + }) + if err != nil { + return err + } + if res == nil { + player.PushClientRes(&msg.ResChampshipRank{}) + return nil + } + m := res.Extra.(*msg.ResChampshipRank) player.PushClientRes(m) return nil } @@ -2588,7 +2587,18 @@ func ReqChampshipPreRank(player *Player, buf []byte) error { if err != nil { return err } - m := G_GameLogicPtr.ChampshipMgr.GetPreRankMsg(int(player.M_DwUin)) + res, err := SendMsgToCenterSync(&MsqMod.Msg{ + From: int(player.M_DwUin), + HandleType: MsqMod.HANDLE_MOD_CHAMPSHIP_PRE_RANK, + }) + if err != nil { + return err + } + if res == nil { + player.PushClientRes(&msg.ResChampshipPreRank{}) + return nil + } + m := res.Extra.(*msg.ResChampshipPreRank) player.PushClientRes(m) return nil } @@ -3139,9 +3149,9 @@ func ReqFriendTReward(player *Player, buf []byte) error { } func ReqChampshipRankReward(player *Player, buf []byte) error { - MyLastRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(player.M_DwUin)) + _, myPreRank := player.GetChampshipRank() ChampshipMod := player.PlayMod.getChampshipMod() - itemList, err := ChampshipMod.GetRankReward(MyLastRank) + itemList, err := ChampshipMod.GetRankReward(myPreRank) if err != nil { player.SendErrClienRes(&msg.ResChampshipRankReward{ Code: msg.RES_CODE_FAIL, @@ -3157,9 +3167,9 @@ func ReqChampshipRankReward(player *Player, buf []byte) error { }) return err } - if MyLastRank <= 5 { + if myPreRank <= 5 { FriendMod := player.PlayMod.getFriendMod() - FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_CHAMPIONSHIP_RANK, GoUtil.String(MyLastRank)) + FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_CHAMPIONSHIP_RANK, GoUtil.String(myPreRank)) } player.PlayMod.save() player.BackChampship() @@ -3168,7 +3178,7 @@ func ReqChampshipRankReward(player *Player, buf []byte) error { }) player.TeLog("championship_reward", map[string]interface{}{ "season_id": GoUtil.ZeroTimestamp() - 86400, - "champship_step_id": MyLastRank, + "champship_step_id": myPreRank, "reward_type": "rank", "item_list": itemList, "champship_score": ChampshipMod.Score, @@ -3280,7 +3290,7 @@ func ReqSelfInvited(player *Player, buf []byte) error { if err != nil { return err } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ Type: MsqMod.HANDLE_TYPE_INVITE_FRIEND, From: int(player.M_DwUin), To: int(req.InviterId), @@ -3347,7 +3357,7 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { player.PushClientRes(&msg.ResAutoAddInviteFriend{ ResultCode: 1, }) - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Uid, Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, @@ -3391,7 +3401,7 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { player.PushClientRes(&msg.ResAutoAddInviteFriend2{ ResultCode: 1, }) - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Uid, Type: MsqMod.HANDLE_TYPE_INVITE_ADD_FRIEND, @@ -3791,7 +3801,7 @@ func ReqPlayroomInteract(player *Player, buf []byte) error { return err } if GoUtil.InArray(int(req.Id), playroomCfg.GetInteractIdBath()) { - G_GameLogicPtr.SetUserData(int(req.Id), VAR_OP_KISS, 0) + player.SetPlayroomKiss(0) } PExp := playroomCfg.GetInteractPExp(int(req.Id)) _, err = player.GetPlayerBaseMod().AddExp(player, 0, PExp) @@ -3805,7 +3815,6 @@ func ReqPlayroomInteract(player *Player, buf []byte) error { PlayroomMod.AddInteractNum(BaseMod.GetLevel()) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_INTERACT, A: []interface{}{int(req.Id)}}) player.PlayMod.save() - G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_KISS, 0) player.LimitedTimePlayroomTrigger_(PType) player.NotifyPlayroomKiss() player.TeLog("playroom_interact", map[string]interface{}{ @@ -3869,7 +3878,7 @@ func ReqPlayroomGame(player *Player, buf []byte) error { }) return err } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Target, Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME, @@ -3929,7 +3938,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { }) return fmt.Errorf("no game or target") } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Target, Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, @@ -3944,7 +3953,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error { if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) { player.GetPetThiefReward(Target) } - G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1) + player.AddPlayroomChip(int(req.Id)) player.TeLog("finish_mini_game", map[string]interface{}{ "mini_game_type": PlayroomMod.GetGameId(), "is_chip": true, @@ -4084,8 +4093,9 @@ func ReqPlayroomChip(player *Player, buf []byte) error { player.TeLog("remove_chip", map[string]interface{}{ "remove_chip_number": ChipNum, }) - - G_GameLogicPtr.SetUserData(int(player.M_DwUin), VAR_OP_CHIP_SET, len(PlayroomMod.ChipList)) + for range ChipNum { + player.SubPlayroomChip(int(player.M_DwUin)) + } player.PlayMod.save() player.PlayroomBackData() player.PushClientRes(&msg.ResPlayroomChip{ @@ -4157,7 +4167,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error { }) return err } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: Target, Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE, @@ -4259,8 +4269,8 @@ func ReqPlayroomUpvote(player *Player, buf []byte) error { Type: MsqMod.HANDLE_TYPE_PLAYROOM_KISS, SendT: GoUtil.Now(), }) - G_GameLogicPtr.SetUserData(int(req.Id), VAR_OP_UPVOTE, 1) - G_GameLogicPtr.SetUserData(int(req.Id), VAR_OP_KISS, 1) + player.AddPlayroomUpvote(int(req.Id)) + player.SetPlayroomKiss(1) player.TeLog("visit_like", map[string]interface{}{ "user_id": req.Id, }) @@ -4622,7 +4632,7 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { if v.Status == 1 { ItemNum = FriendItemNum } - G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ + FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: int(v.Uid), Type: MsqMod.FRIEND_TREASURE_HANDLE, @@ -5008,7 +5018,14 @@ func ReqAddNpc(player *Player, buf []byte) error { return err } FriendMod := player.PlayMod.getFriendMod() - FriendMod.SetNpc(int(req.NpcId)) + err = FriendMod.SetNpc(int(req.NpcId)) + if err != nil { + player.SendErrClienRes(&msg.ResAddNpc{ + Code: msg.RES_CODE_FAIL, + Msg: err.Error(), + }) + return err + } if len(FriendMod.Npc) == 1 { // 首次添加NPC 视为邀请好友成功 InviteMod := player.PlayMod.getInviteMod() InviteMod.AddInvite(int(req.NpcId)) @@ -5303,7 +5320,7 @@ func ReqFriendByCode(player *Player, buf []byte) error { }) return fmt.Errorf("code is invalid") } - Uid := int64(CodeNum) + int64(conf.Server.ServerID*100000) + int64(conf.Server.AppID*100000000) + Uid := int64(CodeNum) + int64(100000) + int64(conf.Server.AppID*100000000) if Uid == player.M_DwUin { player.SendErrClienRes(&msg.ResFriendByCode{ Code: msg.RES_CODE_FAIL, @@ -5427,6 +5444,7 @@ func ReqCatnipAgree(player *Player, buf []byte) error { } CatnipMod := player.PlayMod.getCatnipMod() ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP) + ActivityInfo := player.GetActivityInfo(ActivityId) if ActivityId == 0 { player.SendErrClienRes(&msg.ResCatnipAgree{ Code: msg.RES_CODE_FAIL, @@ -5442,7 +5460,7 @@ func ReqCatnipAgree(player *Player, buf []byte) error { }) return err } - err = G_GameLogicPtr.SetCatnipPartner(int(player.M_DwUin), int(req.Id), int(req.Uid)) + err = player.SetCatnipPartner(int(req.Id), int(req.Uid), ActivityInfo.EndT) if err != nil { player.SendErrClienRes(&msg.ResCatnipAgree{ Code: msg.RES_CODE_FAIL, @@ -5743,6 +5761,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error { }) return fmt.Errorf("reply info not exist") } + ErrType := msg.FRIEND_REPLY_HANDLE_ERR_TYPE_NONE if req.Type == 1 && ReplyInfo.Uid > 10000 { switch ReplyInfo.Type { case friend.REPLY_TYPE_GREETING: @@ -5760,13 +5779,9 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error { }) case friend.REPLY_TYPE_CATNIP: // 猫草大作战同意邀请 GameId := GoUtil.Int(ReplyInfo.Param) - err := G_GameLogicPtr.SetCatnipPartner(int(player.M_DwUin), GameId, ReplyInfo.Uid) - if err != nil { - player.PushClientRes(&msg.ResFriendReplyHandle{ - Code: msg.RES_CODE_FAIL, - Msg: err.Error(), - }) - } else { + activityInfo := player.GetActivityInfo(player.GetActivityId(activity.ACT_TYPE_CATNIP)) + err := player.SetCatnipPartner(GameId, ReplyInfo.Uid, activityInfo.EndT) + if err == nil { CatnipMod := player.PlayMod.getCatnipMod() ActivityId := player.GetActivityId(activity.ACT_TYPE_MINING) UserList, _ := CatnipMod.Agree(GameId, ReplyInfo.Uid) @@ -5797,6 +5812,8 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error { }) } player.CatnipBackData() + } else { + ErrType = msg.FRIEND_REPLY_HANDLE_ERR_TYPE_CATNIP } } @@ -5812,8 +5829,10 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error { } player.FriendLogBackData() player.PushClientRes(&msg.ResFriendReplyHandle{ - Code: msg.RES_CODE_SUCCESS, - LogId: req.LogId, + Code: msg.RES_CODE_SUCCESS, + LogId: req.LogId, + Type: req.Type, + ErrType: ErrType, }) return nil } @@ -5870,6 +5889,7 @@ func ReqCatnipEmoji(player *Player, buf []byte) error { return fmt.Errorf("activity not active") } GameInfo := CatnipMod.GetGameInfo(int(req.Id)) + CatnipMod.SetSendEmoji(int(req.Id), int(req.EmojiId)) if GameInfo.Partner == 0 { player.SendErrClienRes(&msg.ResCatnipEmoji{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/game/ServerMod.go b/src/server/game/server_mod.go similarity index 98% rename from src/server/game/ServerMod.go rename to src/server/game/server_mod.go index 158c5c41..b76b4479 100644 --- a/src/server/game/ServerMod.go +++ b/src/server/game/server_mod.go @@ -4,9 +4,9 @@ import ( "context" "database/sql" "fmt" - "server/GoUtil" "server/db" "server/game/mod/msg" + GoUtil "server/game_util" "server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/timer" "sync" @@ -21,6 +21,7 @@ const ( CHAMPSHIP_MGR_KEY = "CHAMPSHIP_MGR" BAN_MGR_KEY = "BAN_MGR" PER_SAVE_TIME = 60 + MESSAGE_MGR_KEY = "MESSAGE_MGR" ) type ServerMod struct { diff --git a/src/server/game/Trigger.go b/src/server/game/trigger_func.go similarity index 99% rename from src/server/game/Trigger.go rename to src/server/game/trigger_func.go index 4e9b475f..3d271bff 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/trigger_func.go @@ -4,20 +4,20 @@ import ( "encoding/json" "fmt" "math" - "server/GoUtil" "server/MergeConst" "server/conf" champshipCfg "server/conf/champship" chargeCfg "server/conf/charge" languageCfg "server/conf/language" mailCfg "server/conf/mail" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" "server/db" "server/game/mod/chess" "server/game/mod/item" "server/game/mod/mail" "server/game/mod/order" "server/game/mod/quest" + GoUtil "server/game_util" "server/msg" "server/pkg/github.com/name5566/leaf/log" "sort" diff --git a/src/server/game/UnitTest.go b/src/server/game/unit_test.go similarity index 99% rename from src/server/game/UnitTest.go rename to src/server/game/unit_test.go index 25662c4a..746caa13 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/unit_test.go @@ -5,7 +5,7 @@ import ( "encoding/gob" "fmt" "math" - mergeDataCfg "server/conf/mergeData" + mergeDataCfg "server/conf/merge_data" orderCfg "server/conf/order" "server/game/mod/decorate" "server/game/mod/item" diff --git a/src/server/game/var.go b/src/server/game/var.go new file mode 100644 index 00000000..72b51563 --- /dev/null +++ b/src/server/game/var.go @@ -0,0 +1,182 @@ +package game + +import ( + "fmt" + "server/db" + "server/game/mod/msg" + GoUtil "server/game_util" + "server/pkg/github.com/name5566/leaf/log" +) + +const ( + VAR_KEY_FRIEND_MSG = "friend_msg" // 好友消息 + VAR_GOLD_CARD = "gold_card" + VAR_PLAYROOM_UPVOTE = "playroom_upvote" + VAR_PLAYROOM_CHIP = "playroom_chip" + VAR_PLAYROOM_KISS = "playroom_kiss" + VAR_USER_DATA = "user_data" + VAR_CATNIP_PARTNER = "catnip_partner" +) + +func (p *Player) GetVarData(key string) interface{} { + cache := &VarExpireData{} + err := LoadCacheVarData(key, cache) + if err != nil { + log.Error("GetVarData err : %s, key: %s", err, key) + return nil + } + return cache.D +} + +func (p *Player) GetUserVarData(key string) interface{} { + cache := map[string]*VarExpireData{} + err := LoadCacheVarData(GoUtil.GetVarKey(int(p.M_DwUin)), &cache) + if err != nil { + log.Error("GetUserVarData err : %s, key: %s", err, key) + return nil + } + data, ok := cache[key] + if !ok { + return nil + } + return data.D +} + +// func GetServerVarData(key string) interface{} { +// data, err := GetServerData(key) +// if err != nil { +// log.Error("GetServerVarData err : %s", err) +// return nil +// } +// return data.Extra +// } + +func (p *Player) OpVarDataAsync(key string, value interface{}, opType int) { + SendMsgToCenterAsync(&msg.Msg{ + From: int(p.M_DwUin), + HandleType: msg.HANDLE_MOD_USER_VAR_SET, + Extra: msg.VarData{ + Key: key, + Value: value, + SetType: opType, + }, + }) +} + +func (p *Player) OpVarDataSync(key string, value interface{}, opType int) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + From: int(p.M_DwUin), + HandleType: msg.HANDLE_MOD_USER_VAR_SET, + Extra: msg.VarData{ + Key: key, + Value: value, + SetType: opType, + }, + }) +} + +func (p *Player) OpServerVarDataAsync(key string, Value interface{}, opType int) { + SendMsgToCenterSync(&msg.Msg{ + HandleType: msg.HANDLE_MOD_VAR_SET, + Extra: msg.VarData{Key: key, Value: Value, SetType: opType}, + }) +} + +func (p *Player) OpServerVarDataSync(key string, Value interface{}, opType int) (*msg.Msg, error) { + return SendMsgToCenterSync(&msg.Msg{ + HandleType: msg.HANDLE_MOD_VAR_SET, + Extra: msg.VarData{Key: key, Value: Value, SetType: opType}, + }) +} + +func (p *Player) SetVarDataAsync(key string, value interface{}) { + p.OpVarDataAsync(key, value, msg.VAR_OP_SET) +} + +func (p *Player) AddVarDataAsync(key string) { + p.OpVarDataAsync(key, nil, msg.VAR_OP_ADD) +} + +func (p *Player) SubVarDataAsync(key string) { + p.OpVarDataAsync(key, nil, msg.VAR_OP_SUB) +} + +func (p *Player) AddPlayroomUpvote(PlayerId int) { + p.AddVarDataAsync(VAR_PLAYROOM_UPVOTE) +} + +func (p *Player) AddPlayroomChip(PlayerId int) { + p.AddVarDataAsync(VAR_PLAYROOM_CHIP) +} + +func (p *Player) SubPlayroomChip(PlayerId int) { + p.SubVarDataAsync(VAR_PLAYROOM_CHIP) +} + +func (p *Player) GetPlayroomUpvote() int { + data := p.GetUserVarData(VAR_PLAYROOM_UPVOTE) + if data == nil { + return 0 + } + return data.(int) +} + +func (p *Player) GetPlayroomChip() int { + data := p.GetUserVarData(VAR_PLAYROOM_CHIP) + if data == nil { + return 0 + } + return data.(int) +} + +func (p *Player) SetPlayroomKiss(Kiss int) { + p.SetVarDataAsync(VAR_PLAYROOM_KISS, Kiss) +} + +func (p *Player) GetPlayroomKiss() int { + data := p.GetUserVarData(VAR_PLAYROOM_KISS) + if data == nil { + return 0 + } + return data.(int) +} + +func (p *Player) GetGoldCard() *VarGoldCard { + data := p.GetVarData(VAR_GOLD_CARD) + if data == nil { + return &VarGoldCard{} + } + return data.(*VarGoldCard) +} + +func (p *Player) GetCatnipPartner(Uid int) []int { + data, err := GetUserData(p.M_DwUin, VAR_CATNIP_PARTNER) + if err != nil { + log.Error("GetVarData err : %s", err) + return nil + } + if data == nil { + return nil + } + return GoUtil.IntSlice(data.Extra) +} + +func SaveCacheVarData(key string, value interface{}) { + data, err := GoUtil.GobMarshal(value) + if err != nil { + log.Error("SaveCacheVarData GobMarshal err : %s", err) + return + } + db.RedisSetKeyBytes(key, data, 0) +} + +func LoadCacheVarData(key string, value interface{}) error { + data, err := db.RedisGetKeyBytes(key) + if err != nil { + return err + } + if data == nil { + return fmt.Errorf("no data") + } + return GoUtil.GobUnmarshal(data, value) +} diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go new file mode 100644 index 00000000..e2d2b309 --- /dev/null +++ b/src/server/game/var_mgr.go @@ -0,0 +1,301 @@ +package game + +import ( + "encoding/gob" + "fmt" + "server/game/mod/card" + "server/game/mod/msg" + GoUtil "server/game_util" + "strings" + "sync" + "time" +) + +type VarMgr struct { + *ServerMod +} + +type VarData struct { + Var map[string]interface{} + VarExpire map[string]*VarExpireData + UserVar map[string]*VarUserData + + NewVar map[string]*VarExpireData + NewUseVar map[int]map[string]*VarExpireData + ZeroTime int64 + Version int64 + mu sync.Mutex +} + +const ( + VAR_OP_UPVOTE = 1 + VAR_OP_CHIP = 2 + VAR_OP_KISS = 3 + VAR_OP_CHIP_SET = 4 + VAR_OP_CATNIP_LOCK = 5 +) + +func (f *VarMgr) Init() { + gob.Register(&VarGoldCard{}) + gob.Register(&VarExpireData{}) + f.key = VAR_MGR_KEY + f.data = &VarData{ + NewVar: map[string]*VarExpireData{}, + NewUseVar: map[int]map[string]*VarExpireData{}, + } + // 注册处理函数 + f.init() + // 版本更新 重构 + f.version() + if f.data.(*VarData).NewVar == nil { + f.data.(*VarData).NewVar = make(map[string]*VarExpireData) + } + 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() + } + + f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { + f.ZeroUpdate() + }) +} + +func (f *VarMgr) version() { + switch v := f.getData().Version; v { + case 0: + // future version update + data := f.getData() + data.mu.Lock() + defer data.mu.Unlock() + // set to next version + for k, v := range data.UserVar { + if v != nil { + uidStr := strings.Split(k, "_")[2] + uid := GoUtil.Int(uidStr) + f.SetUserVar(uid, VAR_PLAYROOM_UPVOTE, v.Upvote) + f.SetUserVar(uid, VAR_PLAYROOM_CHIP, v.Chip) + f.SetUserVar(uid, VAR_PLAYROOM_KISS, v.Kiss) + delete(data.UserVar, k) + } + } + f.getData().Version = 1 + } +} + +func (f *VarMgr) ZeroUpdate() { + f.getData().ZeroTime = GoUtil.ZeroTimestamp() + // 随机生成两个金卡 + Card1, Card2 := card.RankGoldCard() + f.SetVar(VAR_GOLD_CARD, &VarGoldCard{ + Four: Card1, + Five: Card2, + }) + for k, v := range f.getData().NewVar { + if v.T < GoUtil.ZeroTimestamp() { + delete(f.getData().Var, k) + } + } + f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { + f.ZeroUpdate() + }) +} + +func (f *VarMgr) HandleCatnipPartner(Uid, Partner, GameId int, EndTime int64) (interface{}, error) { + data := f.getData() + data.mu.Lock() + defer data.mu.Unlock() + + OtherPartnerInfo := f.GetUserVar(Uid, VAR_CATNIP_PARTNER) + MyPartnerInfo := f.GetUserVar(Partner, VAR_CATNIP_PARTNER) + 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", Partner, GameId) + } + f.SetUserVar(Partner, VAR_CATNIP_PARTNER, &VarExpireData{ + D: append(OtherOfPartnerList, Uid), + T: EndTime, + }) + f.SetUserVar(Uid, VAR_CATNIP_PARTNER, &VarExpireData{ + D: append(MyOfPartnerList, Partner), + T: EndTime, + }) + return nil, nil +} + +func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) { + varData := f.getData().NewUseVar[uid] + if varData == nil { + varData = make(map[string]*VarExpireData) + f.getData().NewUseVar[uid] = varData + } + ved, ok := varData[key] + if !ok { + ved = &VarExpireData{} + } + ved.D = value + varData[key] = ved + f.getData().NewUseVar[uid] = varData + SaveCacheVarData(GoUtil.GetVarKey(uid), varData) +} + +func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData { + varData := f.getData().NewUseVar[uid] + if varData == nil { + varData = make(map[string]*VarExpireData) + f.getData().NewUseVar[uid] = varData + } + ved, ok := varData[key] + if !ok { + ved = &VarExpireData{} + varData[key] = ved + } + return ved +} + +func (f *VarMgr) SetVar(key string, value interface{}) { + f.getData().NewVar[key] = &VarExpireData{ + D: value, + } + SaveCacheVarData(key, f.getData().NewVar[key]) +} + +func (f *VarMgr) GetVar(key string) *VarExpireData { + if v, ok := f.getData().NewVar[key]; ok { + return v + } + data := &VarExpireData{} + f.getData().NewVar[key] = data + return data +} + +func (f *VarMgr) DelVar(key string) { + delete(f.getData().Var, key) +} + +func (f *VarMgr) getData() *VarData { + return f.data.(*VarData) +} + +func getVarData() *VarData { + return G_GameLogicPtr.VarMgr.getData() +} + +func SetVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + data.mu.Lock() + defer data.mu.Unlock() + if v, ok := m.Extra.(msg.VarData); ok { + ved, ok := data.NewVar[v.Key] + if !ok { + ved = &VarExpireData{} + } + switch v.SetType { + case msg.VAR_OP_SET: + ved.D = v.Value + case msg.VAR_OP_ADD: + if num, ok := ved.D.(int); ok { + ved.D = num + 1 + } else { + ved.D = 1 + } + case msg.VAR_OP_SUB: + if num, ok := ved.D.(int); ok { + if num > 0 { + ved.D = num - 1 + } else { + ved.D = 0 + } + } else { + ved.D = 0 + } + } + ved.U = time.Now().Unix() + if m.End > 0 { + ved.T = m.End + } + data.Var[v.Key] = ved + SaveCacheVarData(v.Key, ved) + } + return nil, nil +} + +func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + userVar := &VarExpireData{} + if v, ok := m.Extra.(msg.VarData); ok { + if varData, ok := data.NewUseVar[m.From]; ok { + userVar, _ = varData[v.Key] + } + if userVar == nil { + userVar = &VarExpireData{} + } + ReplyPlayerMsgASync(m, userVar.D) + return userVar, nil + } + return nil, fmt.Errorf("invalid parameters for getting var data") +} + +func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + data.mu.Lock() + defer data.mu.Unlock() + if v, ok := m.Extra.(msg.VarData); ok { + varData := data.NewUseVar[m.From] + if varData == nil { + varData = make(map[string]*VarExpireData) + data.NewUseVar[m.From] = varData + } + ved, ok := varData[v.Key] + if !ok { + ved = &VarExpireData{} + } + switch v.SetType { + case msg.VAR_OP_SET: + ved.D = v.Value + case msg.VAR_OP_ADD: + if num, ok := ved.D.(int); ok { + ved.D = num + 1 + } else { + ved.D = 1 + } + case msg.VAR_OP_SUB: + if num, ok := ved.D.(int); ok { + if num > 0 { + ved.D = num - 1 + } else { + ved.D = 0 + } + } else { + ved.D = 0 + } + } + ved.U = time.Now().Unix() + if m.End > 0 { + ved.T = m.End + } + data.Var[v.Key] = ved + } + // 保存到缓存中 + SaveCacheVarData(GoUtil.GetVarKey(m.From), data.NewUseVar[m.From]) + return nil, nil +} + +func GetVarDataHandler(m *msg.Msg) (interface{}, error) { + data := getVarData() + varData := &VarExpireData{} + if v, ok := m.Extra.(msg.VarData); ok { + varData, _ = data.NewVar[v.Key] + if varData == nil { + varData = &VarExpireData{} + } + ReplyPlayerMsgASync(m, varData.D) + return varData, nil + } + return nil, fmt.Errorf("invalid parameters for getting var data") +} diff --git a/src/server/GoUtil/AliyunSmsApi.go b/src/server/game_util/AliyunSmsApi.go similarity index 100% rename from src/server/GoUtil/AliyunSmsApi.go rename to src/server/game_util/AliyunSmsApi.go diff --git a/src/server/GoUtil/GoUtil.go b/src/server/game_util/GoUtil.go similarity index 98% rename from src/server/GoUtil/GoUtil.go rename to src/server/game_util/GoUtil.go index 494b9b8c..fde503f6 100644 --- a/src/server/GoUtil/GoUtil.go +++ b/src/server/game_util/GoUtil.go @@ -238,6 +238,12 @@ func GobUnmarshal(data []byte, obj interface{}) error { } func GetServerIdByUid(uid int) int { + if uid <= 100000 { + return uid + } + if uid <= 100000000 { + return uid / 100000 + } return int((uid % 100000000) / 100000) } @@ -294,10 +300,6 @@ func UniKey(seed string) string { return fmt.Sprintf("%x", hash.Sum(nil)) } -func GetUserKey(Uid int64) string { - return fmt.Sprintf("user_data_%d", Uid) -} - func GetCatnipLockKey(Uid, GameId int) string { return fmt.Sprintf("catnip_lock_%d_%d", Uid, GameId) } @@ -529,3 +531,7 @@ func GetISOCodeByIP(ip string) (string, error) { } return GetISOCodeByCountry(country) } + +func GetVarKey(Uid int) string { + return fmt.Sprintf("var_%d", Uid) +} diff --git a/src/server/GoUtil/AliyunOpenApi.go b/src/server/game_util/aliyun_open_api.go similarity index 100% rename from src/server/GoUtil/AliyunOpenApi.go rename to src/server/game_util/aliyun_open_api.go diff --git a/src/server/GoUtil/feishu.go b/src/server/game_util/feishu.go similarity index 100% rename from src/server/GoUtil/feishu.go rename to src/server/game_util/feishu.go diff --git a/src/server/GoUtil/mapUtil.go b/src/server/game_util/mapUtil.go similarity index 97% rename from src/server/GoUtil/mapUtil.go rename to src/server/game_util/mapUtil.go index 6025547a..26aa25c8 100644 --- a/src/server/GoUtil/mapUtil.go +++ b/src/server/game_util/mapUtil.go @@ -1,7 +1,7 @@ package GoUtil import ( - dailyTaskCfg "server/conf/dailyTask" + dailyTaskCfg "server/conf/daily_task" "server/game/mod/item" ) diff --git a/src/server/GoUtil/mathUtil.go b/src/server/game_util/mathUtil.go similarity index 100% rename from src/server/GoUtil/mathUtil.go rename to src/server/game_util/mathUtil.go diff --git a/src/server/GoUtil/randUtil.go b/src/server/game_util/randUtil.go similarity index 100% rename from src/server/GoUtil/randUtil.go rename to src/server/game_util/randUtil.go diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/game_util/sliceUtil.go similarity index 100% rename from src/server/GoUtil/sliceUtil.go rename to src/server/game_util/sliceUtil.go diff --git a/src/server/GoUtil/timeUtil.go b/src/server/game_util/timeUtil.go similarity index 100% rename from src/server/GoUtil/timeUtil.go rename to src/server/game_util/timeUtil.go diff --git a/src/server/gamedata/config/Activity.txt b/src/server/gamedata/config/Activity.txt deleted file mode 100644 index a2efa29d..00000000 --- a/src/server/gamedata/config/Activity.txt +++ /dev/null @@ -1,16 +0,0 @@ -ActivityId ActivtyName ActiveCfgNames Type StartTime Duration -int string string int string "(list#sep=|),string" -活动id 活动名称 配置表名 活动类型 开始时间 持续时间 -id ActivtyName ActiveCfgNames Type StartTime EndTime -1 Passport Passport.txt 1 0 11 20 12 * 604800 -2 Promotion Promotion.txt 2 0 11 20 12 * 604800 -3 InfinitePack InfinitePack.txt 3 0 0 22 12 * 604800 -4 Passport Passport.txt 1 0 0 28 12 * 604800 -5 Promotion Promotion.txt 2 0 0 28 12 * 604800 -6 InfinitePack InfinitePack.txt 3 0 0 28 12 * 604800 -7 Passport Passport.txt 1 0 0 4 1 * 604800 -8 Promotion Promotion.txt 2 0 0 4 1 * 604800 -9 InfinitePack InfinitePack.txt 3 0 0 4 1 * 604800 -10 7day InfinitePack.txt 4 0 0 16 1 * 604800 -11 Card InfinitePack.txt 5 0 4 6 5 * 7761600 -12 Card InfinitePack.txt 5 0 4 5 8 * 7761600 \ No newline at end of file diff --git a/src/server/gamedata/config/CardDetailCfg.txt b/src/server/gamedata/config/CardDetailCfg.txt deleted file mode 100644 index 9d3b5aa8..00000000 --- a/src/server/gamedata/config/CardDetailCfg.txt +++ /dev/null @@ -1,139 +0,0 @@ -界面配置表 -Id PictureAlbum Icon Color Star ImageRes IsGold Name -int int string int int string int string -Id 等级开放 区域Id 排序Id 价格 原价 -1 1 Card/SubCard/Cards_Deliciousfood_1 1 1 10 0 Cat Food -2 1 Card/SubCard/Cards_Deliciousfood_2 1 1 10 0 Dog Food -3 1 Card/SubCard/Cards_Deliciousfood_3 1 1 10 0 Biscuit -4 1 Card/SubCard/Cards_Deliciousfood_4 1 1 10 0 Steak -5 1 Card/SubCard/Cards_Deliciousfood_5 1 1 10 0 Cupcake -6 1 Card/SubCard/Cards_Deliciousfood_6 1 1 10 0 Turkey Dinner -7 1 Card/SubCard/Cards_Deliciousfood_7 1 1 10 0 Tea Time -8 1 Card/SubCard/Cards_Deliciousfood_8 1 1 10 0 Sashimi -9 1 Card/SubCard/Cards_Deliciousfood_9 2 2 10 0 Birthday Cake -10 2 Card/SubCard/Cards_Rescuemaster_1 1 1 10 0 Take Medicine -11 2 Card/SubCard/Cards_Rescuemaster_2 1 1 10 0 Disinfection -12 2 Card/SubCard/Cards_Rescuemaster_3 1 1 10 0 Clean the Dog -13 2 Card/SubCard/Cards_Rescuemaster_4 1 1 10 0 Clean the Cat -14 2 Card/SubCard/Cards_Rescuemaster_5 1 1 10 0 Wash the Dog -15 2 Card/SubCard/Cards_Rescuemaster_6 1 1 10 0 Wash the Cat -16 2 Card/SubCard/Cards_Rescuemaster_7 1 1 10 0 Dry the Dog -17 2 Card/SubCard/Cards_Rescuemaster_8 2 2 10 0 Dry the Cat -18 2 Card/SubCard/Cards_Rescuemaster_9 2 2 10 0 Brand New -19 3 Card/SubCard/Cards_happy_1 1 1 10 0 Yarn Ball -20 3 Card/SubCard/Cards_happy_2 1 1 10 0 Dog Bone -21 3 Card/SubCard/Cards_happy_3 1 1 10 0 Slide -22 3 Card/SubCard/Cards_happy_4 1 1 10 0 Pet Ball -23 3 Card/SubCard/Cards_happy_5 1 1 10 0 Cat Teaser -24 3 Card/SubCard/Cards_happy_6 1 1 10 0 Frisbee -25 3 Card/SubCard/Cards_happy_7 2 2 10 0 Cat Toy -26 3 Card/SubCard/Cards_happy_8 2 2 10 0 A Nice Day -27 3 Card/SubCard/Cards_happy_9 2 2 10 0 Play With You -28 4 Card/SubCard/Cards_newcome_1 1 1 10 0 This Is Glass -29 4 Card/SubCard/Cards_newcome_2 1 1 10 0 This Is Ceramic -30 4 Card/SubCard/Cards_newcome_3 1 1 10 0 This Is Clay -31 4 Card/SubCard/Cards_newcome_4 1 1 10 0 This Is Garbage -32 4 Card/SubCard/Cards_newcome_5 1 1 10 0 This Is Bed -33 4 Card/SubCard/Cards_newcome_6 2 2 10 0 This Is Curtain -34 4 Card/SubCard/Cards_newcome_7 2 2 10 0 This Is Case -35 4 Card/SubCard/Cards_newcome_8 3 3 10 0 This Is Candle -36 4 Card/SubCard/Cards_newcome_9 3 3 10 0 This Is Computer -37 5 Card/SubCard/Cards_Muddlethrough_1 1 1 10 0 Oh My Yarn -38 5 Card/SubCard/Cards_Muddlethrough_2 1 1 10 0 Oh My Pet Food -39 5 Card/SubCard/Cards_Muddlethrough_3 1 1 10 0 Oh My Car -40 5 Card/SubCard/Cards_Muddlethrough_4 1 1 10 0 Oh My Table -41 5 Card/SubCard/Cards_Muddlethrough_5 1 1 10 0 Oh My Chips -42 5 Card/SubCard/Cards_Muddlethrough_6 2 2 10 0 Oh My Fish -43 5 Card/SubCard/Cards_Muddlethrough_7 2 2 10 0 Oh My Sofa -44 5 Card/SubCard/Cards_Muddlethrough_8 2 2 10 0 Oh My Sink -45 5 Card/SubCard/Cards_Muddlethrough_9 4 4 10 0 Oh My Watermelon -46 6 Card/SubCard/Cards_Dogsintrouble_1 1 1 10 0 Hey My Pizza -47 6 Card/SubCard/Cards_Dogsintrouble_2 1 1 10 0 Hey My Slipper -48 6 Card/SubCard/Cards_Dogsintrouble_3 1 1 10 0 Hey My Seat -49 6 Card/SubCard/Cards_Dogsintrouble_4 1 1 10 0 Hey My Hanging -50 6 Card/SubCard/Cards_Dogsintrouble_5 2 2 10 0 Hey My Wall -51 6 Card/SubCard/Cards_Dogsintrouble_6 2 2 10 0 Hey My Floor -52 6 Card/SubCard/Cards_Dogsintrouble_7 2 2 10 0 Hey My Toilet -53 6 Card/SubCard/Cards_Dogsintrouble_8 3 3 10 0 Hey My Paper -54 6 Card/SubCard/Cards_Dogsintrouble_9 4 4 10 0 Hey My Drink -55 7 Card/SubCard/Cards_catanddog_1 1 1 10 0 Greeting Together -56 7 Card/SubCard/Cards_catanddog_2 1 1 10 0 Let You See -57 7 Card/SubCard/Cards_catanddog_3 1 1 10 0 Whisper -58 7 Card/SubCard/Cards_catanddog_4 2 2 10 0 Play Outside -59 7 Card/SubCard/Cards_catanddog_5 2 2 10 0 Do Not Fight -60 7 Card/SubCard/Cards_catanddog_6 3 3 10 0 Harmony -61 7 Card/SubCard/Cards_catanddog_7 3 3 10 0 Go Hiking -62 7 Card/SubCard/Cards_catanddog_8 4 4 10 0 Sleep Together -63 7 Card/SubCard/Cards_catanddog_9 4 4 10 0 Who I Am -64 8 Card/SubCard/Cards_Funwithcats_1 1 1 10 0 New Toy -65 8 Card/SubCard/Cards_Funwithcats_2 1 1 10 0 Face Touch -66 8 Card/SubCard/Cards_Funwithcats_3 2 2 10 0 On Bed -67 8 Card/SubCard/Cards_Funwithcats_4 2 2 10 0 Smelling -68 8 Card/SubCard/Cards_Funwithcats_5 3 3 10 0 Go Out -69 8 Card/SubCard/Cards_Funwithcats_6 3 3 10 0 Play Toys -70 8 Card/SubCard/Cards_Funwithcats_7 3 3 10 0 In Garden -71 8 Card/SubCard/Cards_Funwithcats_8 4 4 10 0 A Mice? -72 8 Card/SubCard/Cards_Funwithcats_9 5 5 10 0 Good Friend -73 9 Card/SubCard/Cards_homedog_1 1 1 10 0 Best Friend -74 9 Card/SubCard/Cards_homedog_2 2 2 10 0 Meet -75 9 Card/SubCard/Cards_homedog_3 2 2 10 0 Swing -76 9 Card/SubCard/Cards_homedog_4 2 2 10 0 Cool Summer -77 9 Card/SubCard/Cards_homedog_5 3 3 10 0 Go Biking -78 9 Card/SubCard/Cards_homedog_6 3 3 10 0 Group Photo -79 9 Card/SubCard/Cards_homedog_7 4 4 10 0 Play Water -80 9 Card/SubCard/Cards_homedog_8 4 4 10 1 Dress Up -81 9 Card/SubCard/Cards_homedog_9 5 5 10 0 Sled -82 10 Card/SubCard/Cards_Lovinghome_1 1 1 10 0 Soft Sofa -83 10 Card/SubCard/Cards_Lovinghome_2 2 2 10 0 Stand High -84 10 Card/SubCard/Cards_Lovinghome_3 2 2 10 0 Dog's Home -85 10 Card/SubCard/Cards_Lovinghome_4 3 3 10 0 Pack Cat -86 10 Card/SubCard/Cards_Lovinghome_5 3 3 10 0 Bath Dog -87 10 Card/SubCard/Cards_Lovinghome_6 3 3 10 0 Cat's Basket -88 10 Card/SubCard/Cards_Lovinghome_7 4 4 10 0 Watch TV -89 10 Card/SubCard/Cards_Lovinghome_8 5 5 10 0 My Bed -90 10 Card/SubCard/Cards_Lovinghome_9 5 5 10 1 Love Dessert -91 11 Card/SubCard/Cards_Helper_1 1 1 10 0 Find Material -92 11 Card/SubCard/Cards_Helper_2 2 2 10 0 Let's Cook -93 11 Card/SubCard/Cards_Helper_3 3 3 10 0 Cut Meat -94 11 Card/SubCard/Cards_Helper_4 3 3 10 0 Delicious -95 11 Card/SubCard/Cards_Helper_5 4 4 10 0 Woof Chef -96 11 Card/SubCard/Cards_Helper_6 4 4 10 1 Diligent Dog -97 11 Card/SubCard/Cards_Helper_7 4 4 10 1 Cook Learning -98 11 Card/SubCard/Cards_Helper_8 5 5 10 0 Home Cat -99 11 Card/SubCard/Cards_Helper_9 5 5 10 0 Have a Taste -100 12 Card/SubCard/Cards_Showeringishard_1 2 2 10 0 Happy Bath -101 12 Card/SubCard/Cards_Showeringishard_2 2 2 10 0 No Shower -102 12 Card/SubCard/Cards_Showeringishard_3 3 3 10 0 Yellow Duck -103 12 Card/SubCard/Cards_Showeringishard_4 4 4 10 0 Let Me Out -104 12 Card/SubCard/Cards_Showeringishard_5 4 4 10 1 Dog In Tub -105 12 Card/SubCard/Cards_Showeringishard_6 4 4 10 1 Wooden Barrel Bath -106 12 Card/SubCard/Cards_Showeringishard_7 5 5 10 0 Shaking Water -107 12 Card/SubCard/Cards_Showeringishard_8 5 5 10 0 Out Of Bath -108 12 Card/SubCard/Cards_Showeringishard_9 5 5 10 1 Cat Dryer -109 13 Card/SubCard/Cards_Poolparty_1 2 2 10 0 First Try -110 13 Card/SubCard/Cards_Poolparty_2 2 2 10 0 Playing Water -111 13 Card/SubCard/Cards_Poolparty_3 4 4 10 0 Swimming -112 13 Card/SubCard/Cards_Poolparty_4 4 4 10 0 Happy Party -113 13 Card/SubCard/Cards_Poolparty_5 4 4 10 1 New Found -114 13 Card/SubCard/Cards_Poolparty_6 4 4 10 1 Half Break -115 13 Card/SubCard/Cards_Poolparty_7 5 5 10 0 Pool Volleyball -116 13 Card/SubCard/Cards_Poolparty_8 5 5 10 0 Swim Master -117 13 Card/SubCard/Cards_Poolparty_9 5 5 10 1 Energy Restore -118 14 Card/SubCard/Cards_Fashioncat_1 2 2 10 0 Shirt Cat -119 14 Card/SubCard/Cards_Fashioncat_2 3 3 10 0 Leisure Cat -120 14 Card/SubCard/Cards_Fashioncat_3 3 3 10 0 Worker Cat -121 14 Card/SubCard/Cards_Fashioncat_4 4 4 10 0 Detective Cat -122 14 Card/SubCard/Cards_Fashioncat_5 5 5 10 0 Employee Cat -123 14 Card/SubCard/Cards_Fashioncat_6 5 5 10 0 Keeper Cat -124 14 Card/SubCard/Cards_Fashioncat_7 5 5 10 0 Winter Cat -125 14 Card/SubCard/Cards_Fashioncat_8 5 5 10 1 Travel Cat -126 14 Card/SubCard/Cards_Fashioncat_9 5 5 10 1 Hoilday Cat -127 15 Card/SubCard/Cards_Exoticstyle_1 2 2 10 0 North Dog -128 15 Card/SubCard/Cards_Exoticstyle_2 3 3 10 0 West Dog -129 15 Card/SubCard/Cards_Exoticstyle_3 4 4 10 0 Tradition Dog -130 15 Card/SubCard/Cards_Exoticstyle_4 4 4 10 1 Romantic Dog -131 15 Card/SubCard/Cards_Exoticstyle_5 5 5 10 0 South Asia Dog -132 15 Card/SubCard/Cards_Exoticstyle_6 5 5 10 0 Desert Dog -133 15 Card/SubCard/Cards_Exoticstyle_7 5 5 10 0 Royal Dog -134 15 Card/SubCard/Cards_Exoticstyle_8 5 5 10 1 Lake Dog -135 15 Card/SubCard/Cards_Exoticstyle_9 5 5 10 1 East Dog \ No newline at end of file diff --git a/src/server/gamedata/config/ChampshipScoreReward.txt b/src/server/gamedata/config/ChampshipScoreReward.txt deleted file mode 100644 index fd64b99f..00000000 --- a/src/server/gamedata/config/ChampshipScoreReward.txt +++ /dev/null @@ -1,35 +0,0 @@ -界面配置表 -Id ScoreNeed ItemReward SortId -int int string int -Id 积分需求 道具奖励 分组 -1 2 LOCK 0 -2 12 Energy=35 1 -3 20 Cardpack1=1 2 -4 40 Energy=50 2 -5 120 LimitEvent4=5 3 -6 265 Energy=160 3 -7 425 Star=200 4 -8 625 Cardpack2=1 4 -9 890 Energy=300 5 -10 1190 LimitEvent5=10 5 -11 1540 702=1 6 -12 1940 Star=450 6 -13 2420 Cardpack3=1 7 -14 3060 Energy=700 7 -15 3860 Star=900 8 -16 4820 702=1 8 -17 5940 Star=1400 9 -18 7220 Energy=1400 9 -19 8670 LimitEvent1=15 10 -20 10270 703=1 10 -21 12120 Cardpack4=1 11 -22 14200 Energy=2250 11 -23 16520 Star=2500 12 -24 19080 LimitEvent3=30 12 -25 21880 Energy=3050 13 -26 24930 Cardpack4=1 13 -27 28130 Star=3200 14 -28 31650 Energy=3850 14 -29 35490 Star=3600 15 -30 39650 704=1 15 -31 44650 Energy=5500 16 \ No newline at end of file diff --git a/src/server/gamedata/config/DecorateCost.txt b/src/server/gamedata/config/DecorateCost.txt deleted file mode 100644 index 388bc864..00000000 --- a/src/server/gamedata/config/DecorateCost.txt +++ /dev/null @@ -1,311 +0,0 @@ -界面配置表 -Id AreaId SortId CostCount Title Icon Pos Action Spine Button Build Shine -int int int int string string string string string string string string -Id 区域Id 排序Id 消耗资源数量 标题 图标 位置 行为 交互动画 对应按钮 建造效果 闪光效果 -1 1 0 0 show cat/old_curtain 150#625 init_img#bg/clearObj/1 -2 1 0 0 show cat/back_box_2 86#462 init_img#bg/clearObj/2 -3 1 0 0 show cat/back_storage_rack -474#592 init_img#bg/clearObj/3 -4 1 0 0 show cat/back_box_1 460#257 init_img#bg/clearObj/4 -5 1 0 0 show cat/old_gabage 30#-200 init_img#bg/clearObj/5 -6 1 0 0 show cat/center_box -494#244 init_img#bg/clearObj/6 -7 1 0 0 show cat/basketball 491#-354 init_img#bg/clearObj/7 -8 1 0 0 show cat/old_book_1 460#70 init_img#bg/clearObj/8 -9 1 0 0 show cat/front_box_3 63#-104 init_img#bg/clearObj/9 -10 1 0 0 show cat/front_box_1 78#-621 init_img#bg/clearObj/10 -11 1 0 0 show cat/old_wood -480#-20 init_img#bg/clearObj/11 -12 1 0 0 show cat/front_box_2 -486#-362 init_img#bg/clearObj/12 -13 1 0 0 show cat/old_book_2 -585#-935 init_img#bg/clearObj/13 -14 1 0 0 show cat/old_web 0#0 init_img#bg/clearObj/14 -15 1 0 0 hide cat/curtain 166#745 init_img#bg/addObj/1 -16 1 0 0 hide cat/desk -476#597 init_img#bg/addObj/2 -17 1 0 0 hide cat/watch -510#1000 init_img#bg/addObj/3 -18 1 0 0 hide cat/flowerpot_2 -222#587 init_img#bg/addObj/4 -19 1 0 0 hide cat/carpet 0#-110 init_img#bg/addObj/5 -20 1 0 0 hide cat/cat_tree 250#597 init_img#bg/addObj/6 -21 1 0 0 hide cat/cushion -6#-111 init_img#bg/addObj/7 -22 1 0 0 hide cat/toy_ball 425#-25 init_img#bg/addObj/8 -23 1 0 0 hide cat/cat_home -404#220 init_img#bg/addObj/9 -24 1 0 0 hide cat/food_bowl -20#-559 init_img#bg/addObj/10 -25 1 0 0 hide cat/basin 380#-532 init_img#bg/addObj/11 -26 1 0 0 hide cat/flowerpot_1 -459#-381 init_img#bg/addObj/12 -27 1 0 0 hide cat/fence 0#-768 init_img#bg/addObj/13 -28 1 0 0 show "cat_SkeletonData,sick" 40#-100 init_spine#bg/my_sg -29 1 0 0 show cat/bg_dirty 0#0 init_img#bg -30 1 1 80 Wash the cat cat/cat_clear first "replace_spine#bg/my_sg,weak" -31 1 2 90 Clean up basketball cat/basketball first "clear#bg/clearObj/7,bg/clearObj/14" clear -32 1 3 100 Cleaning the cardboard box cat/front_box_1 first clear#bg/clearObj/10 clear -33 1 4 110 Cleaning the cardboard box cat/front_box_2 first "clear#bg/clearObj/12,bg/clearObj/11,bg/clearObj/13" clear -34 1 5 120 Cushion cat/cushion first "replace#bg/clearObj/9,bg/addObj/7@clear#bg/clearObj/5" shine -35 1 6 130 Food bowl cat/food_bowl second "add#bg/addObj/10,bg/addObj/11" cat_feeding bg/addObj/10 shine -36 1 7 140 Happy Little Cat cat/cat_happy second "replace_spine#bg/my_sg,idle" cat_petting "bg/my_sg@0.5,0@200,400" -37 1 8 150 Cleaning the storage box cat/back_box_1 second "clear#bg/clearObj/4,bg/clearObj/8" clear -38 1 9 160 Cleaning up garbage cat/back_box_2 second clear#bg/clearObj/2 clear -39 1 10 170 Clean up express delivery cat/center_box second clear#bg/clearObj/6 clear -40 1 11 180 Cleaning containers cat/back_storage_rack second clear#bg/clearObj/3 clear -41 1 12 190 Cleaning the room cat/bg_clear third "clear#bg/clearObj/1@replace_image#bg,cat/bg_clear" change_bg -42 1 13 200 Carpet cat/carpet third add#bg/addObj/5 build shine -43 1 14 210 Toy ball cat/toy_ball third add#bg/addObj/8 shine -44 1 15 220 Cat Home cat/cat_home four add#bg/addObj/9 cat_sleeping bg/addObj/9 shine -45 1 16 230 Curtain cat/curtain four add#bg/addObj/1 build shine -46 1 17 240 Cat tree cat/cat_tree four add#bg/addObj/6 cat_playing bg/addObj/6 build shine -47 1 18 270 Desk cat/desk four "add#bg/addObj/2,bg/addObj/3" build shine -48 1 19 310 Green plants cat/flowerpot_2 four add#bg/addObj/4 shine -49 1 20 350 Flower and fence cat/flowerpot_1 four "add#bg/addObj/13,bg/addObj/12" build shine -50 2 0 0 show dog_home/old_wallpit 404#806 init_img#bg/clearObj/1 -51 2 0 0 show dog_home/old_fireplace 440#310 init_img#bg/clearObj/2 -52 2 0 0 show dog_home/old_window_1 -15#571 init_img#bg/clearObj/3 -53 2 0 0 show dog_home/old_wallcovering -200#-460 init_img#bg/clearObj/4 -54 2 0 0 show dog_home/old_curtain -50#678 init_img#bg/clearObj/5 -55 2 0 0 show dog_home/old_sofa_3 -35#140 init_img#bg/clearObj/6 -56 2 0 0 show dog_home/old_cloth_3 -42#170 init_img#bg/clearObj/7 -57 2 0 0 show dog_home/old_light_1 -415#285 init_img#bg/clearObj/8 -58 2 0 0 show dog_home/old_sofa_2 -560#95 init_img#bg/clearObj/9 -59 2 0 0 show dog_home/old_cloth_2 -562#55 init_img#bg/clearObj/10 -60 2 0 0 show dog_home/old_box 490#-120 init_img#bg/clearObj/11 -61 2 0 0 show dog_home/old_mat_1 -48#-253 init_img#bg/clearObj/12 -62 2 0 0 show dog_home/old_sofa_1 -460#-728 init_img#bg/clearObj/13 -63 2 0 0 show dog_home/old_cloth_1 -520#-650 init_img#bg/clearObj/14 -64 2 0 0 show dog_home/old_paper -100#-1050 init_img#bg/clearObj/15 -65 2 0 0 show dog_home/old_desk 380#-895 init_img#bg/clearObj/16 -66 2 0 0 show dog_home/old_web 0#0 init_img#bg/clearObj/17 -67 2 0 0 hide dog_home/neck_cover -72#-50 init_img#bg/clearObj/21 -68 2 0 0 show dog_home/old_teacup 246#-590 init_img#bg/clearObj/22 -69 2 0 0 show dog_home/old_light_2 -140#1010 init_img#bg/clearObj/23 -70 2 0 0 hide dog_home/old_window_3 -10#560 init_img#bg/addObj/1 -71 2 0 0 hide dog_home/window -10#640 init_img#bg/addObj/2 -72 2 0 0 hide dog_home/curtain -44#547 init_img#bg/addObj/3 -73 2 0 0 hide dog_home/old_mat_2 -85#-240 init_img#bg/addObj/4 -74 2 0 0 hide dog_home/carpet -40#-294 init_img#bg/addObj/5 -75 2 0 0 hide dog_home/bowl 46#-380 init_img#bg/addObj/6 -76 2 0 0 hide dog_home/desk_1 -480#133 init_img#bg/addObj/7 -77 2 0 0 hide dog_home/light_1 -470#488 init_img#bg/addObj/8 -78 2 0 0 hide dog_home/light_2 -200#955 init_img#bg/addObj/9 -79 2 0 0 hide dog_home/sofa_2 -40#185 init_img#bg/addObj/10 -80 2 0 0 hide dog_home/painting 520#870 init_img#bg/addObj/11 -81 2 0 0 hide dog_home/decorate 490#575 init_img#bg/addObj/12 -82 2 0 0 hide dog_home/fire_place 470#225 init_img#bg/addObj/13 -83 2 0 0 hide dog_home/desk_2 400#-925 init_img#bg/addObj/14 -84 2 0 0 hide dog_home/sofa_1 -550#90 init_img#bg/addObj/15 -85 2 0 0 hide dog_home/sofa_3 -355#-730 init_img#bg/addObj/16 -86 2 0 0 hide dog_home/tea 460#-920 init_img#bg/addObj/17 -87 2 0 0 hide dog_home/tennis 271#-292 init_img#bg/addObj/18 -88 2 0 0 hide dog_home/flower 280#60 init_img#bg/addObj/19 -89 2 0 0 hide dog_home/pillow_1 -615#210 init_img#bg/addObj/20 -90 2 0 0 hide dog_home/pillow_2 -23#266 init_img#bg/addObj/21 -91 2 0 0 hide dog_home/pillow_3 -423#-510 init_img#bg/addObj/22 -92 2 0 0 show dog_home/bg_old 0#0 init_img#bg -93 2 0 0 show "Scene2_SkeletonData,Scene2_weakdog" -135#-210 init_spine#bg/my_sg -94 2 1 280 Cleaning spider webs dog_home/old_web first clear#bg/clearObj/17 -95 2 2 300 Repair wall holes and Window dog_home/old_window_3 first "clear#bg/clearObj/1,bg/clearObj/5@replace#bg/clearObj/3,bg/addObj/1" build shine -96 2 3 320 Clean up debris dog_home/old_wallcovering first "clear#bg/clearObj/15,bg/clearObj/22,bg/clearObj/4" clear -97 2 4 340 Discard cloth dog_home/old_cloth_3 first "clear#bg/clearObj/7,bg/clearObj/10,bg/clearObj/14" clear -98 2 5 360 Add a dog basin dog_home/bowl first "clear#bg/clearObj/11@replace#bg/clearObj/12,bg/addObj/4@add#bg/addObj/6@replace_spine#bg/my_sg,Scene2_idledog" dog_feeding bg/addObj/6 clear shine -99 2 6 380 Repair the floor and wall dog_home/bg_clear second "replace_image#bg,dog_home/bg_clear" dog_petting "bg/my_sg@0.5,0@450,250" change_bg -100 2 7 400 Table lamp dog_home/light_1 second "clear#bg/clearObj/8@add#bg/addObj/7,bg/addObj/8" build shine -101 2 8 420 Replace the chandelier dog_home/light_2 second "replace#bg/clearObj/23,bg/addObj/9" build shine -102 2 9 440 Repair the fireplace dog_home/fire_place second "replace#bg/clearObj/2,bg/addObj/13" build shine -103 2 10 460 Replace the table dog_home/desk_2 second "replace#bg/clearObj/16,bg/addObj/14" build shine -104 2 11 500 Wood flooring and wallpaper dog_home/bg_new third "replace_image#bg,dog_home/bg_new" change_bg -105 2 12 520 Replace carpet dog_home/carpet third "replace#bg/addObj/4,bg/addObj/5@replace_spine#bg/my_sg,Scene2_idle2dog@reset_pos#bg/my_sg,-100=-300" dog_petting "bg/my_sg@0.5,0@300,500" build shine -106 2 13 540 Replacing the sofa dog_home/sofa_2 third "clear#bg/clearObj/6,bg/clearObj/9,bg/clearObj/13@add#bg/addObj/10,bg/addObj/15,bg/addObj/16" build shine -107 2 14 560 Replacing Windows dog_home/window third "replace#bg/addObj/1,bg/addObj/2" build shine -108 2 15 580 Fireplace accessories dog_home/painting third "add#bg/addObj/11,bg/addObj/12" build shine -109 2 16 600 Add tea cups dog_home/tea four add#bg/addObj/17 build shine -110 2 17 620 Dog tennis dog_home/tennis four add#bg/addObj/18 dog_playball bg/addObj/18 shine -111 2 18 640 Add green plants dog_home/flower four add#bg/addObj/19 build shine -112 2 19 660 Add curtains dog_home/curtain four add#bg/addObj/3 build shine -113 2 20 680 Add pillows dog_home/pillow_2 four "add#bg/addObj/20,bg/addObj/21,bg/addObj/22" build shine -114 3 0 0 show kitchen/old_window 481#785 init_img#bg/clearObj/4 -115 3 0 0 show kitchen/old_cupboard_2 168#105 init_img#bg/clearObj/6 -116 3 0 0 show kitchen/old_cupboard_1 -270#870 init_img#bg/clearObj/7 -117 3 0 0 show kitchen/old_water 78#-150 init_img#bg/clearObj/8 -118 3 0 0 show kitchen/old_fridge_dirty -440#205 init_img#bg/clearObj/10 -119 3 0 0 show kitchen/old_cupboard_dirty_2 200#50 init_img#bg/clearObj/11 -120 3 0 0 show kitchen/old_cupboard_dirty_1 -90#825 init_img#bg/clearObj/12 -121 3 0 0 show kitchen/old_microwave_oven 90#416 init_img#bg/clearObj/13 -122 3 0 0 show kitchen/old_flower 300#355 init_img#bg/clearObj/14 -123 3 0 0 show kitchen/old_pot 450#-270 init_img#bg/clearObj/15 -124 3 0 0 show kitchen/old_dog_food -128#-378 init_img#bg/clearObj/16 -125 3 0 0 show kitchen/old_pizza_box 449#-478 init_img#bg/clearObj/17 -126 3 0 0 show kitchen/garbage_5 -70#-840 init_img#bg/clearObj/18 -127 3 0 0 show kitchen/garbage_4 460#-890 init_img#bg/clearObj/19 -128 3 0 0 show kitchen/garbage_3 -490#-500 init_img#bg/clearObj/21 -129 3 0 0 show kitchen/garbage_1 -454#-1082 init_img#bg/clearObj/22 -130 3 0 0 show kitchen/old_chair -288#-765 init_img#bg/clearObj/23 -131 3 0 0 show kitchen/garbage_2 235#-1035 init_img#bg/clearObj/24 -132 3 0 0 hide kitchen/old_fridge -520#200 init_img#bg/clearObj/25 -133 3 0 0 hide kitchen/window 481#785 init_img#bg/addObj/4 -134 3 0 0 hide kitchen/closet_2 168#105 init_img#bg/addObj/6 -135 3 0 0 hide kitchen/closet_1 -270#870 init_img#bg/addObj/7 -136 3 0 0 hide kitchen/microwave_oven 90#416 init_img#bg/addObj/8 -137 3 0 0 hide kitchen/bowl_1 -210#645 init_img#bg/addObj/9 -138 3 0 0 hide kitchen/bowl_3 -485#782 init_img#bg/addObj/10 -139 3 0 0 hide kitchen/kitchenware_1 -195#475 init_img#bg/addObj/11 -140 3 0 0 hide kitchen/pot_1 -265#375 init_img#bg/addObj/12 -141 3 0 0 hide kitchen/fridge -520#200 init_img#bg/addObj/13 -142 3 0 0 hide kitchen/desk 255#-230 init_img#bg/addObj/14 -143 3 0 0 hide kitchen/flower_1 275#395 init_img#bg/addObj/16 -144 3 0 0 hide kitchen/flower_2 475#560 init_img#bg/addObj/17 -145 3 0 0 hide kitchen/chopping_board 625#355 init_img#bg/addObj/18 -146 3 0 0 hide kitchen/bowl_2 535#325 init_img#bg/addObj/19 -147 3 0 0 hide kitchen/orange_juice_3 430#205 init_img#bg/addObj/20 -148 3 0 0 hide kitchen/orange_juice_1 160#150 init_img#bg/addObj/21 -149 3 0 0 hide kitchen/fruit_tray 330#160 init_img#bg/addObj/22 -150 3 0 0 hide kitchen/teapot 520#145 init_img#bg/addObj/23 -151 3 0 0 hide kitchen/orange_juice_2 420#110 init_img#bg/addObj/24 -152 3 0 0 hide kitchen/kitchenware_2 25#395 init_img#bg/addObj/26 -153 3 0 0 hide kitchen/pot_2 -145#365 init_img#bg/addObj/27 -154 3 0 0 show "Scene3_SkeletonData,Scene3_idlecat" -80#310 init_spine#bg/clearObj/my_sg -155 3 0 0 show "Scene3_SkeletonData,Scene3_idledog" 200#-640 init_spine#bg/clearObj/my_sg_2 -156 3 0 0 show kitchen/bg_old 0#0 init_img#bg -157 3 1 225 Clean up debris kitchen/garbage_4 first "clear#bg/clearObj/19,bg/clearObj/24" clear -158 3 2 255 Clean up newspapers kitchen/garbage_1 first "clear#bg/clearObj/18,bg/clearObj/22" clear -159 3 3 285 Clean up dog food kitchen/old_dog_food first "clear#bg/clearObj/16,bg/clearObj/21" clear -160 3 4 315 Cleaning Pizza kitchen/old_pizza_box first "clear#bg/clearObj/15,bg/clearObj/17" clear -161 3 5 345 Turn off the faucet kitchen/old_water first clear#bg/clearObj/8 clear -162 3 6 375 Take away the chair kitchen/old_chair first clear#bg/clearObj/23 clear -163 3 7 405 Cleaning the refrigerator kitchen/old_fridge second "replace#bg/clearObj/10,bg/clearObj/25" build shine -164 3 8 435 Clean the cabinet kitchen/old_cupboard_2 second clear#bg/clearObj/11 clear -165 3 9 465 Cleaning the wall cabinet kitchen/old_cupboard_1 second clear#bg/clearObj/12 clear -166 3 10 495 Acquire a completely new outlook kitchen/floor third "replace_image#bg,kitchen/bg_clear@replace#bg/clearObj/4,bg/addObj/4@replace#bg/clearObj/6,bg/addObj/6@replace#bg/clearObj/7,bg/addObj/7@replace#bg/clearObj/13,bg/addObj/8@replace#bg/clearObj/25,bg/addObj/13" change_bg shine -167 3 11 555 Cleaning Dogs kitchen/dog four "replace_spine#bg/clearObj/my_sg_2,Scene3_idle2dog@reset_pos#bg/clearObj/my_sg_2,-280=-810" build -168 3 12 585 Add a dining table kitchen/desk four add#bg/addObj/14 build shine -169 3 13 615 Add potted plants kitchen/flower_2 four "clear#bg/clearObj/14@add#bg/addObj/16,bg/addObj/17,bg/addObj/18,bg/addObj/19" build shine -170 3 14 645 Have some juice kitchen/orange_juice_3 five "add#bg/addObj/20,bg/addObj/21,bg/addObj/24" shine -171 3 15 675 Adding fruit trays kitchen/fruit_tray five "add#bg/addObj/22,bg/addObj/23" shine -172 3 16 705 Cats running recklessly kitchen/cat five "replace_spine#bg/clearObj/my_sg,Scene3_idle2cat@reset_pos#bg/clearObj/my_sg,320=75" build -173 3 17 735 Add tableware kitchen/bowl_3 six "add#bg/addObj/9,bg/addObj/10" build shine -174 3 18 765 Add a spoon kitchen/kitchenware_2 six add#bg/addObj/26 build shine -175 3 19 795 Add kitchen utensils kitchen/kitchenware_1 six add#bg/addObj/11 build shine -176 3 20 825 Add a pot kitchen/pot_1 six "add#bg/addObj/12,bg/addObj/27" build shine -177 4 0 0 show outdoor/old_barrel_3 510#430 init_img#bg/clearObj/1 -178 4 0 0 show outdoor/old_grass_3 -631#480 init_img#bg/clearObj/2 -179 4 0 0 show outdoor/old_barrel_2 568#230 init_img#bg/clearObj/3 -180 4 0 0 show outdoor/old_treeroot -160#425 init_img#bg/clearObj/4 -181 4 0 0 show outdoor/old_dog 211#367 init_img#bg/clearObj/5 -182 4 0 0 show outdoor/old_dog_mud 190#375 init_img#bg/clearObj/6 -183 4 0 0 show outdoor/old_mudpit 272#3 init_img#bg/clearObj/7 -184 4 0 0 show outdoor/old_barrel_1 -360#0 init_img#bg/clearObj/8 -185 4 0 0 show outdoor/old_grass_4 -383#-150 init_img#bg/clearObj/9 -186 4 0 0 show outdoor/old_cat_mud -70#-50 init_img#bg/clearObj/10 -187 4 0 0 hide outdoor/old_cat -68#-35 init_img#bg/clearObj/11 -188 4 0 0 show outdoor/old_board 408#-430 init_img#bg/clearObj/12 -189 4 0 0 show outdoor/old_box 317#-728 init_img#bg/clearObj/13 -190 4 0 0 show outdoor/old_grass_1 392#-950 init_img#bg/clearObj/14 -191 4 0 0 show outdoor/old_grass_2 -372#-760 init_img#bg/clearObj/15 -192 4 0 0 hide outdoor/house 0#701 init_img#bg/addObj/1 -193 4 0 0 hide outdoor/floor 0#-340 init_img#bg/addObj/2 -194 4 0 0 hide outdoor/pet_home -200#500 init_img#bg/addObj/3 -195 4 0 0 hide outdoor/pool 340#-30 init_img#bg/addObj/4 -196 4 0 0 hide outdoor/slider 390#345 init_img#bg/addObj/5 -197 4 0 0 hide outdoor/cat -170#220 init_img#bg/addObj/6 -198 4 0 0 hide outdoor/dog 210#45 init_img#bg/addObj/7 -199 4 0 0 hide outdoor/yellow_duck 500#-30 init_img#bg/addObj/8 -200 4 0 0 hide outdoor/food_box -340#-100 init_img#bg/addObj/9 -201 4 0 0 hide outdoor/desk 300#-650 init_img#bg/addObj/10 -202 4 0 0 hide outdoor/shrub 0#-890 init_img#bg/addObj/11 -203 4 0 0 hide outdoor/tea_pot 470#-275 init_img#bg/addObj/12 -204 4 0 0 hide outdoor/tea_cup 425#-490 init_img#bg/addObj/13 -205 4 0 0 hide outdoor/frisbee 240#-360 init_img#bg/addObj/14 -206 4 0 0 show outdoor/bg_old 0#0 init_img#bg -207 4 1 270 Cat Bathing outdoor/old_cat first "replace#bg/clearObj/10,bg/clearObj/11" -208 4 2 300 Dog Bathing outdoor/old_dog first clear#bg/clearObj/6 clear -209 4 3 330 Clean up weeds outdoor/old_grass_4 first clear#bg/clearObj/9 clear -210 4 4 360 Clean up old wooden barrels outdoor/old_barrel_1 first clear#bg/clearObj/8 clear -211 4 5 390 Filling out mud pits outdoor/old_mudpit first clear#bg/clearObj/7 clear -212 4 6 420 Clean the wooden bucket outdoor/old_barrel_2 first clear#bg/clearObj/3 clear -213 4 7 450 Cleaning wooden stakes outdoor/old_treeroot first "clear#bg/clearObj/1,bg/clearObj/2,bg/clearObj/4" clear -214 4 8 480 Clean the wooden box outdoor/old_box first "clear#bg/clearObj/12,bg/clearObj/13" clear -215 4 9 510 Clean up weeds outdoor/old_grass_2 first "clear#bg/clearObj/14,bg/clearObj/15" clear -216 4 10 540 Clean up fallen leaves outdoor/floor second "add#bg/addObj/1,bg/addObj/2" -217 4 11 600 Air cushion swimming pool outdoor/pool second add#bg/addObj/4 build shine -218 4 12 630 Curious Cat outdoor/cat second "replace#bg/clearObj/11,bg/addObj/6" -219 4 13 660 A dog playing with water outdoor/dog third "replace#bg/clearObj/5,bg/addObj/7" -220 4 14 690 Add escalators outdoor/slider third add#bg/addObj/5 build shine -221 4 15 720 Little Yellow Duck outdoor/yellow_duck third add#bg/addObj/8 shine -222 4 16 750 Planting shrubs outdoor/shrub third add#bg/addObj/11 build shine -223 4 17 780 Add a cat's nest outdoor/pet_home third add#bg/addObj/3 build shine -224 4 18 810 Add Pet food bowl outdoor/food_box third add#bg/addObj/9 shine -225 4 19 840 Add tables and chairs outdoor/desk third add#bg/addObj/10 build shine -226 4 20 870 Add tea sets and frisbees outdoor/tea_pot four "add#bg/addObj/12,bg/addObj/13,bg/addObj/14" shine -227 5 0 0 show treehouse/old_fallen_leaves_4 -286#-660 init_img#bg/clearObj/1 -228 5 0 0 show treehouse/old_tree 0#146 init_img#bg/clearObj/2 -229 5 0 0 show treehouse/old_board_3 460#100 init_img#bg/clearObj/3 -230 5 0 0 show treehouse/old_board_1 545#-325 init_img#bg/clearObj/4 -231 5 0 0 show treehouse/old_board_2 285#-170 init_img#bg/clearObj/5 -232 5 0 0 show treehouse/old_fallen_leaves_3 120#100 init_img#bg/clearObj/6 -233 5 0 0 show treehouse/old_platform -88#-60 init_img#bg/clearObj/7 -234 5 0 0 show treehouse/old_house -200#620 init_img#bg/clearObj/8 -235 5 0 0 show treehouse/old_roof -160#900 init_img#bg/clearObj/9 -236 5 0 0 show treehouse/old_lamp_holder 290#810 init_img#bg/clearObj/10 -237 5 0 0 show treehouse/old_fence -92#320 init_img#bg/clearObj/11 -238 5 0 0 show treehouse/old_cat 135#540 init_img#bg/clearObj/12 -239 5 0 0 show treehouse/old_table 50#-770 init_img#bg/clearObj/13 -240 5 0 0 show treehouse/old_fallen_leaves_1 -518#-740 init_img#bg/clearObj/14 -241 5 0 0 show treehouse/old_ladder -55#-700 init_img#bg/clearObj/15 -242 5 0 0 show treehouse/old_dog 50#-660 init_img#bg/clearObj/16 -243 5 0 0 show treehouse/old_window -610#560 init_img#bg/clearObj/17 -244 5 0 0 show treehouse/old_door -580#460 init_img#bg/clearObj/18 -245 5 0 0 show treehouse/old_tire 450#90 init_img#bg/clearObj/19 -246 5 0 0 show treehouse/old_stone 482#-410 init_img#bg/clearObj/20 -247 5 0 0 show treehouse/old_slabstone 540#-650 init_img#bg/clearObj/21 -248 5 0 0 show treehouse/old_fallen_leaves_2 460#-960 init_img#bg/clearObj/22 -249 5 0 0 hide treehouse/leaves 450#290 init_img#bg/clearObj/23 -250 5 0 0 hide treehouse/dog 265#-625 init_img#bg/clearObj/24 -251 5 0 0 show treehouse/bg_old 0#0 init_img#bg -252 5 0 0 hide treehouse/tree 0#145 init_img#bg/addObj/1 -253 5 0 0 hide treehouse/broom -530#-430 init_img#bg/addObj/2 -254 5 0 0 hide treehouse/hammock 20#-60 init_img#bg/addObj/3 -255 5 0 0 hide treehouse/ball -70#-480 init_img#bg/addObj/4 -256 5 0 0 hide treehouse/Trojan_horse 380#-160 init_img#bg/addObj/5 -257 5 0 0 hide treehouse/platform -90#-50 init_img#bg/addObj/6 -258 5 0 0 hide treehouse/house -200#620 init_img#bg/addObj/7 -259 5 0 0 hide treehouse/window_1 5#570 init_img#bg/addObj/8 -260 5 0 0 hide treehouse/door -420#470 init_img#bg/addObj/9 -261 5 0 0 hide treehouse/fence -92#320 init_img#bg/addObj/10 -262 5 0 0 hide treehouse/cat -260#280 init_img#bg/addObj/11 -263 5 0 0 hide treehouse/roof -160#900 init_img#bg/addObj/12 -264 5 0 0 hide treehouse/window -610#560 init_img#bg/addObj/13 -265 5 0 0 hide treehouse/table 60#-856 init_img#bg/addObj/14 -266 5 0 0 hide treehouse/ladder -55#-700 init_img#bg/addObj/15 -267 5 0 0 hide treehouse/bed 50#475 init_img#bg/addObj/16 -268 5 0 0 hide treehouse/bears 35#580 init_img#bg/addObj/17 -269 5 0 0 hide treehouse/sill 10#435 init_img#bg/addObj/18 -270 5 0 0 hide treehouse/girl -140#550 init_img#bg/addObj/19 -271 5 0 0 hide treehouse/watch 5#750 init_img#bg/addObj/20 -272 5 0 0 hide treehouse/books 40#462 init_img#bg/addObj/21 -273 5 0 0 hide treehouse/curtain 10#580 init_img#bg/addObj/22 -274 5 0 0 hide treehouse/flower 125#525 init_img#bg/addObj/23 -275 5 0 0 hide treehouse/window_frame 5#570 init_img#bg/addObj/24 -276 5 0 0 hide treehouse/mask 35#890 init_img#bg/addObj/25 -277 5 0 0 hide treehouse/lamp_holder 300#820 init_img#bg/addObj/26 -278 5 0 0 hide treehouse/light 330#715 init_img#bg/addObj/27 -279 5 0 0 hide treehouse/coffee -30#450 init_img#bg/addObj/28 -280 5 0 0 hide treehouse/cat_food -619#515 init_img#bg/addObj/29 -281 5 0 0 hide treehouse/fruit_tray 30#-660 init_img#bg/addObj/30 -282 5 0 0 hide treehouse/bird 450#567 init_img#bg/addObj/31 -283 5 1 120 Clean up debris treehouse/old_board_3 first "clear#bg/clearObj/3,bg/clearObj/19" clear -284 5 2 160 Cleaning wooden boards treehouse/old_board_2 first "clear#bg/clearObj/4,bg/clearObj/5,bg/clearObj/20" clear -285 5 3 200 Clean up fallen leaves treehouse/old_fallen_leaves_2 first "clear#bg/clearObj/1,bg/clearObj/6,bg/clearObj/21,bg/clearObj/22" clear -286 5 4 240 Clean up old stairs treehouse/old_ladder first clear#bg/clearObj/15 clear -287 5 5 280 Demolition of roofs and doors treehouse/old_roof first "clear#bg/clearObj/9,bg/clearObj/10,bg/clearObj/18" clear -288 5 6 320 Demolition of houses treehouse/old_house first "clear#bg/clearObj/17,bg/clearObj/8" clear -289 5 7 360 Sunny treehouse/bg_clear first "replace_image#bg,treehouse/bg_clear" change_bg -290 5 8 400 Golden Tree treehouse/tree first "replace#bg/clearObj/2,bg/addObj/1" -291 5 9 440 Tree House Base treehouse/platform second "replace#bg/clearObj/7,bg/addObj/6@add#bg/clearObj/23" build shine -292 5 10 480 Clean the fence treehouse/fence third "replace#bg/clearObj/11,bg/addObj/10@replace#bg/clearObj/12,bg/addObj/11" shine -293 5 11 520 Build a tree house treehouse/house third "add#bg/addObj/7,bg/addObj/8,bg/addObj/9,bg/addObj/13" build shine -294 5 12 560 Building a roof treehouse/roof four add#bg/addObj/12 build shine -295 5 13 600 Happy Dog treehouse/dog four "replace#bg/clearObj/16,bg/clearObj/24" -296 5 14 640 Broom treehouse/broom four "replace#bg/clearObj/14,bg/addObj/2" -297 5 15 680 Install stairs treehouse/ladder four add#bg/addObj/15 build shine -298 5 16 720 New Table treehouse/table four "replace#bg/clearObj/13,bg/addObj/14" build shine -299 5 17 760 Little Bear treehouse/bears five "add#bg/addObj/24,bg/addObj/16,bg/addObj/17,bg/addObj/18,bg/addObj/21" shine -300 5 18 800 Hammock treehouse/hammock five "add#bg/addObj/3,bg/addObj/4" build shine -301 5 19 840 Trojan horse treehouse/Trojan_horse five add#bg/addObj/5 build shine -302 5 20 880 Pet identification treehouse/mask five add#bg/addObj/25 build shine -303 5 21 920 Star light treehouse/light five "add#bg/addObj/26,bg/addObj/27" build shine -304 5 22 960 Girl treehouse/girl six "add#bg/addObj/19,bg/addObj/28" -305 5 23 1000 Curtain treehouse/curtain six "add#bg/addObj/20,bg/addObj/22,bg/addObj/29" build shine -306 5 24 1040 Fruit tray treehouse/fruit_tray six add#bg/addObj/30 shine -307 5 25 1080 Parrot treehouse/bird seven "add#bg/addObj/23,bg/addObj/31" shine diff --git a/src/server/gamedata/config/EndlessGift.txt b/src/server/gamedata/config/EndlessGift.txt deleted file mode 100644 index 7bbfee52..00000000 --- a/src/server/gamedata/config/EndlessGift.txt +++ /dev/null @@ -1,13 +0,0 @@ -等级配置表 -Id Content SellType SellPrice -int int string float -Id 内容 类型 价格 -1 601=1 Free 0 -2 562=1 Ad 0 -3 "562=1,Energy=128" Dollar 0.49 -4 "602=1,Diamond=36" Ad 0 -5 601=1 Free 0 -6 "562=1,Energy=288" Dollar 0.99 -7 602=1 Free 0 -8 "562=1,Diamond=36" Ad 0 -9 "562=2,Energy=388" Dollar 1.49 diff --git a/src/server/gamedata/config/GrowthFund.txt b/src/server/gamedata/config/GrowthFund.txt deleted file mode 100644 index 1faca35f..00000000 --- a/src/server/gamedata/config/GrowthFund.txt +++ /dev/null @@ -1,11 +0,0 @@ -界面配置表 -Id Level RewardIds RewardCnt Price OriginPrice Describe -int int string string float float string -Id 等级开放 区域Id 排序Id 价格 原价 fds -1 5 Diamond|Energy 100|100 3 10 upgrade to Lv5 Claim rewards! -2 8 Diamond|Energy 200|200 3 10 upgrade to Lv8 Claim rewards! -3 11 Diamond|Energy 100|101 3 10 upgrade to Lv11 Claim rewards! -4 14 Diamond|Energy 200|201 3 10 upgrade to Lv14 Claim rewards! -5 17 Diamond|Energy 100|102 3 10 upgrade to Lv17 Claim rewards! -6 20 Diamond|Energy 200|202 3 10 upgrade to Lv20 Claim rewards! -7 23 Diamond|Energy 100|103 3 10 upgrade to Lv23 Claim rewards! \ No newline at end of file diff --git a/src/server/gamedata/config/GuideData.txt b/src/server/gamedata/config/GuideData.txt deleted file mode 100644 index b9937ca7..00000000 --- a/src/server/gamedata/config/GuideData.txt +++ /dev/null @@ -1,20 +0,0 @@ -界面配置表 -Id targetStr fingerType title titlePos other disappear -int string int string string string string -Id 目标 手指类型 标题 标题位置 其他 消失 -0 MainHomeUI/bringupBtn 1 You accidentally found a poor little cat in the garbage section, please help it! up null null -1 MainHomeUI/mergeBtn 1 Welcome to the Pets Home! Please allow me to guide you about the producing progress. Click this button first. down null null -2 MainMergePanel/center_2 2 Move two same items together to merge and upgrade! down 隐藏建造按钮 null -3 MainMergePanel/right_6 2 Continue merging and we will find more items. down null null -4 MainMergePanel/center_12 2 Almost there! Let us try one more time. up null null -5 MainMergePanel/center_12 1 Well done! Now you have a Food Table! Click it to get some food! up null null -6 MainMergePanel/center_12 1 These food could not be enough. Let us get more! up null null -7 MainMergePanel/center_12 1 Still not enough. Recuperation requires high-energy food. up null null -8 null 2 null null null null -9 null 2 null null null null -10 MainMergePanel/order_first 1 Excellent! You finished food producing for the first time.Let the pets have a taste! center null null -11 null 0 New food order coming in! Continue merging to finish the order! center null auto -12 MainMergePanel/buildBtn 1 We can start rebuilding the Pets Home since we have got enough stars. center 展示建造按钮 null -13 MainDecoratePanel/OpenObjItem 1 Quite a mess isn't it? Click the button for the first step. center null null -14 MainDecoratePanel/buildBtn 1 Let us do some cleaning! down null null -15 null 1 Well done! Let us get more stars! center null null \ No newline at end of file diff --git a/src/server/gamedata/config/IndoorProgress.txt b/src/server/gamedata/config/IndoorProgress.txt deleted file mode 100644 index b55de309..00000000 --- a/src/server/gamedata/config/IndoorProgress.txt +++ /dev/null @@ -1,109 +0,0 @@ -内景进度表 -Id Scene Lv Reward -int int int int -Id 场景 等级 奖励 -1 1 1 0 -2 1 2 0 -3 1 3 0 -4 1 4 0 -5 1 5 562 -6 1 6 581 -7 1 7 0 -8 1 8 0 -9 1 9 0 -10 1 10 241 -11 1 11 0 -12 1 12 0 -13 1 13 581 -14 1 14 121 -15 1 15 0 -16 1 16 562 -17 1 17 0 -18 1 18 0 -19 1 19 0 -20 1 20 201 -21 2 1 181 -22 2 2 0 -23 2 3 141 -24 2 4 0 -25 2 5 162 -26 2 6 0 -27 2 7 164 -28 2 8 0 -29 2 9 585 -30 2 10 0 -31 2 11 585 -32 2 12 0 -33 2 13 183 -34 2 14 0 -35 2 15 184 -36 2 16 0 -37 2 17 562 -38 2 18 0 -39 2 19 585 -40 2 20 0 -41 3 1 0 -42 3 2 0 -43 3 3 0 -44 3 4 562 -45 3 5 0 -46 3 6 0 -47 3 7 0 -48 3 8 561 -49 3 9 0 -50 3 10 0 -51 3 11 0 -52 3 12 562 -53 3 13 0 -54 3 14 0 -55 3 15 0 -56 3 16 562 -57 3 17 0 -58 3 18 0 -59 3 19 0 -60 3 20 585 -61 4 1 0 -62 4 2 0 -63 4 3 0 -64 4 4 562 -65 4 5 0 -66 4 6 0 -67 4 7 0 -68 4 8 561 -69 4 9 0 -70 4 10 0 -71 4 11 0 -72 4 12 562 -73 4 13 0 -74 4 14 0 -75 4 15 0 -76 4 16 562 -77 4 17 0 -78 4 18 0 -79 4 19 0 -80 4 20 585 -81 5 1 0 -82 5 2 0 -83 5 3 0 -84 5 4 0 -85 5 5 562 -86 5 6 0 -87 5 7 0 -88 5 8 0 -89 5 9 0 -90 5 10 561 -91 5 11 0 -92 5 12 0 -93 5 13 0 -94 5 14 0 -95 5 15 601 -96 5 16 0 -97 5 17 0 -98 5 18 0 -99 5 19 0 -100 5 20 562 -101 5 21 0 -102 5 22 0 -103 5 23 0 -104 5 24 0 -105 5 25 585 diff --git a/src/server/gamedata/config/LevelUpBuyPack.txt b/src/server/gamedata/config/LevelUpBuyPack.txt deleted file mode 100644 index 1faca35f..00000000 --- a/src/server/gamedata/config/LevelUpBuyPack.txt +++ /dev/null @@ -1,11 +0,0 @@ -界面配置表 -Id Level RewardIds RewardCnt Price OriginPrice Describe -int int string string float float string -Id 等级开放 区域Id 排序Id 价格 原价 fds -1 5 Diamond|Energy 100|100 3 10 upgrade to Lv5 Claim rewards! -2 8 Diamond|Energy 200|200 3 10 upgrade to Lv8 Claim rewards! -3 11 Diamond|Energy 100|101 3 10 upgrade to Lv11 Claim rewards! -4 14 Diamond|Energy 200|201 3 10 upgrade to Lv14 Claim rewards! -5 17 Diamond|Energy 100|102 3 10 upgrade to Lv17 Claim rewards! -6 20 Diamond|Energy 200|202 3 10 upgrade to Lv20 Claim rewards! -7 23 Diamond|Energy 100|103 3 10 upgrade to Lv23 Claim rewards! \ No newline at end of file diff --git a/src/server/gamedata/config/LimiteEvent.txt b/src/server/gamedata/config/LimiteEvent.txt deleted file mode 100644 index 20beec87..00000000 --- a/src/server/gamedata/config/LimiteEvent.txt +++ /dev/null @@ -1,4 +0,0 @@ -LimiteEventId EventName Type StartTime Duration AddTimes -int string int string "(list#sep=|),string" AddTimes -�id ����� ����� ��ʼʱ�� ����ʱ�� AddTimes -id EventName Type StartTime EndTime AddTimes \ No newline at end of file diff --git a/src/server/gamedata/config/MergeData.txt b/src/server/gamedata/config/MergeData.txt deleted file mode 100644 index db5772cb..00000000 --- a/src/server/gamedata/config/MergeData.txt +++ /dev/null @@ -1,275 +0,0 @@ -界面配置表 -Id Lv MaxLv Icon Color Title Content SellType SellNum Star Origin Capacity CoolTime CoolNum Emit_List SellDiamond Relative Type Emit_ID Emit_Type Product_Type Order_Score -int int int string string string string string int int string int int int string int string string string string string int -Id 等级 最大等级 图标 系列 标题 内容 出售类型 出售价格 订单星星数 来源 容量 冷却时间 快速冷却消耗 发射内容 出售钻石 关联 类型 发射器编号 发射器类型 产物类型 订单积分 -1 1 12 Production_A1_LV1 Food Fish-shaped Treats Food star 1 5 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 1 Cooking Tools Product main 1 -2 2 12 Production_A1_LV2 Food Bone-shaped Treats Food star 1 9 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 1 Cooking Tools Product main 2 -3 3 12 Production_A1_LV3 Food Mixed Pet Treats Food star 3 15 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 1 Cooking Tools Product main 4 -4 4 12 Production_A1_LV4 Food Pet Food Food star 5 27 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 2 Cooking Tools Product main 8 -5 5 12 Production_A1_LV5 Food Advanced Pet Food Food star 9 48 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 4 Cooking Tools Product main 16 -6 6 12 Production_A1_LV6 Food Premium Pet Food Food star 16 84 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 7 Cooking Tools Product main 32 -7 7 12 Production_A1_LV7 Food Pet Patty Food star 28 149 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 13 Cooking Tools Product main 64 -8 8 12 Production_A1_LV8 Food Pet Sausage Food star 51 264 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 25 Cooking Tools Product main 128 -9 9 12 Production_A1_LV9 Food Pet Rice Food star 90 466 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 45 Cooking Tools Product main 256 -10 10 12 Production_A1_LV10 Food Advanced Pet Rice Food star 158 825 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 80 Cooking Tools Product main 512 -11 11 12 Production_A1_LV11 Food Pet Ham Food star 280 1459 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 140 Cooking Tools Product main 1024 -12 12 12 Production_A1_LV12 Food Pet Roast Chicken Food star 495 2579 "84,85,86,87,88,89,90,91,92" -1 -1 -1 null 240 Cooking Tools Product main 2048 -21 1 12 Production_A2_LV1 Can Cat Snack Can star 1 5 "85,86,87,88,89,90,91,92" -1 -1 -1 null 1 Cooking Tools Product sub 4 -22 2 12 Production_A2_LV2 Can Packed Snack Can star 1 9 "85,86,87,88,89,90,91,92" -1 -1 -1 null 1 Cooking Tools Product sub 8 -23 3 12 Production_A2_LV3 Can Advanced Packed Snack Can star 3 16 "85,86,87,88,89,90,91,92" -1 -1 -1 null 1 Cooking Tools Product sub 16 -24 4 12 Production_A2_LV4 Can Cat Snack Can Can star 5 28 "85,86,87,88,89,90,91,92" -1 -1 -1 null 2 Cooking Tools Product sub 32 -25 5 12 Production_A2_LV5 Can Cat Tuna Can Can star 9 50 "85,86,87,88,89,90,91,92" -1 -1 -1 null 4 Cooking Tools Product sub 64 -26 6 12 Production_A2_LV6 Can Advanced Tuna Can Can star 16 89 "85,86,87,88,89,90,91,92" -1 -1 -1 null 7 Cooking Tools Product sub 128 -27 7 12 Production_A2_LV7 Can Main Dish Can Can star 28 157 "85,86,87,88,89,90,91,92" -1 -1 -1 null 13 Cooking Tools Product sub 256 -28 8 12 Production_A2_LV8 Can Advanced Main Dish Can Can star 51 277 "85,86,87,88,89,90,91,92" -1 -1 -1 null 25 Cooking Tools Product sub 512 -29 9 12 Production_A2_LV9 Can Premium Main Dish Can Can star 90 490 "85,86,87,88,89,90,91,92" -1 -1 -1 null 45 Cooking Tools Product sub 1024 -30 10 12 Production_A2_LV10 Can Small Fish Pack Can star 158 866 "85,86,87,88,89,90,91,92" -1 -1 -1 null 80 Cooking Tools Product sub 2048 -31 11 12 Production_A2_LV11 Can Advanced Small Fish Pack Can star 280 1532 "85,86,87,88,89,90,91,92" -1 -1 -1 null 140 Cooking Tools Product sub 4096 -32 12 12 Production_A2_LV12 Can Premium Small Fish Pack Can star 495 2708 "85,86,87,88,89,90,91,92" -1 -1 -1 null 240 Cooking Tools Product sub 8192 -41 1 12 Production_B1_LV1 Pet Cloth Cotton Pet Cloth star 1 5 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 1 Sewing Product main 1 -42 2 12 Production_B1_LV2 Pet Cloth Cotton Ball Pet Cloth star 1 9 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 1 Sewing Product main 2 -43 3 12 Production_B1_LV3 Pet Cloth Pet Collar Pet Cloth star 3 16 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 1 Sewing Product main 4 -44 4 12 Production_B1_LV4 Pet Cloth Pet Napkin Pet Cloth star 5 28 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 2 Sewing Product main 8 -45 5 12 Production_B1_LV5 Pet Cloth Advanced Pet Napkin Pet Cloth star 9 50 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 4 Sewing Product main 16 -46 6 12 Production_B1_LV6 Pet Cloth Pet Scarf Pet Cloth star 16 89 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 7 Sewing Product main 32 -47 7 12 Production_B1_LV7 Pet Cloth Pet Warm Hat Pet Cloth star 28 157 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 13 Sewing Product main 64 -48 8 12 Production_B1_LV8 Pet Cloth Pet Warm Set Pet Cloth star 51 277 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 25 Sewing Product main 128 -49 9 12 Production_B1_LV9 Pet Cloth Pet Sweater Pet Cloth star 90 490 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 45 Sewing Product main 256 -50 10 12 Production_B1_LV10 Pet Cloth Advanced Pet Sweater Pet Cloth star 158 866 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 80 Sewing Product main 512 -51 11 12 Production_B1_LV11 Pet Cloth Premium Pet Sweater Pet Cloth star 280 1532 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 140 Sewing Product main 1024 -52 12 12 Production_B1_LV12 Pet Cloth Pet Jacket Pet Cloth star 495 2708 "104,105,106,107,108,109,110,111,112" -1 -1 -1 null 240 Sewing Product main 2048 -61 1 12 Production_B2_LV1 Pet Shoes Pet Paw Sticker Pet Shoes star 1 5 "105,106,107,108,109,110,111,112" -1 -1 -1 null 1 Sewing Product sub 4 -62 2 12 Production_B2_LV2 Pet Shoes Pet Socks Pet Shoes star 1 9 "105,106,107,108,109,110,111,112" -1 -1 -1 null 1 Sewing Product sub 8 -63 3 12 Production_B2_LV3 Pet Shoes Cute Pet Socks Pet Shoes star 3 17 "105,106,107,108,109,110,111,112" -1 -1 -1 null 1 Sewing Product sub 16 -64 4 12 Production_B2_LV4 Pet Shoes Pet Sandals Pet Shoes star 5 30 "105,106,107,108,109,110,111,112" -1 -1 -1 null 2 Sewing Product sub 32 -65 5 12 Production_B2_LV5 Pet Shoes Cute Pet Sandals Pet Shoes star 9 52 "105,106,107,108,109,110,111,112" -1 -1 -1 null 4 Sewing Product sub 64 -66 6 12 Production_B2_LV6 Pet Shoes Pet Shoes Pet Shoes star 16 93 "105,106,107,108,109,110,111,112" -1 -1 -1 null 7 Sewing Product sub 128 -67 7 12 Production_B2_LV7 Pet Shoes Cute Pet Shoes Pet Shoes star 28 164 "105,106,107,108,109,110,111,112" -1 -1 -1 null 13 Sewing Product sub 256 -68 8 12 Production_B2_LV8 Pet Shoes Pet Boots Pet Shoes star 51 290 "105,106,107,108,109,110,111,112" -1 -1 -1 null 25 Sewing Product sub 512 -69 9 12 Production_B2_LV9 Pet Shoes Cute Pet Boots Pet Shoes star 90 513 "105,106,107,108,109,110,111,112" -1 -1 1 null 45 Sewing Product sub 1024 -70 10 12 Production_B2_LV10 Pet Shoes Pet Sports Shoes Pet Shoes star 158 907 "105,106,107,108,109,110,111,112" -1 -1 -1 null 80 Sewing Product sub 2048 -71 11 12 Production_B2_LV11 Pet Shoes Pet Warm Shoes Pet Shoes star 280 1604 "105,106,107,108,109,110,111,112" -1 -1 -1 null 140 Sewing Product sub 4096 -72 12 12 Production_B2_LV12 Pet Shoes Advanced Pet Warm Shoes Pet Shoes star 495 2837 "105,106,107,108,109,110,111,112" -1 -1 -1 null 240 Sewing Product sub 8192 -81 1 12 Launcher_A_LV1 Cooking Tools Fish-Shaped Cookie Cutter Cooking Tools null 1 1 null -1 -1 -1 null 40 "Food,Can" Emitter A normal "Food,Can" 0 -82 2 12 Launcher_A_LV2 Cooking Tools Bone-Shaped Cookie Cutter Cooking Tools null -1 -1 null -1 -1 -1 null 80 "Food,Can" Emitter A normal "Food,Can" 0 -83 3 12 Launcher_A_LV3 Cooking Tools Cookie Cutter Set Cooking Tools null -1 -1 null -1 -1 -1 null 160 "Food,Can" Emitter A normal "Food,Can" 0 -84 4 12 Launcher_A_LV4 Cooking Tools Basic Baking Tray Cooking Tools null -1 -1 null 40 60 1 1=1 -1 "Food,Can" Emitter A normal "Food,Can" 32 -85 5 12 Launcher_A_LV5 Cooking Tools Cute Baking Tray Cooking Tools null -1 -1 null 42 60 1 "1=0.9,21=0.1" -1 "Food,Can" Emitter A normal "Food,Can" 512 -86 6 12 Launcher_A_LV6 Cooking Tools Baking Tray Set Cooking Tools null -1 -1 null 44 60 1 "1=0.7,21=0.2,2=0.1" -1 "Food,Can" Emitter A normal "Food,Can" 1024 -87 7 12 Launcher_A_LV7 Cooking Tools Air Fryer Cooking Tools null -1 -1 null 46 60 1 "1=0.65,21=0.18,2=0.15,22=0.02" -1 "Food,Can" Emitter A normal "Food,Can" 1024 -88 8 12 Launcher_A_LV8 Cooking Tools Mini Oven Cooking Tools null -1 -1 null 48 60 1 "1=0.6,21=0.15,2=0.2,22=0.05" -1 "Food,Can" Emitter A normal "Food,Can" 2048 -89 9 12 Launcher_A_LV9 Cooking Tools Baking Oven Cooking Tools null -1 -1 null 50 60 1 "1=0.55,21=0.12,2=0.25,22=0.08" -1 "Food,Can" Emitter A normal "Food,Can" 4096 -90 10 12 Launcher_A_LV10 Cooking Tools Fancy Oven Cooking Tools null -1 -1 null 52 60 1 "1=0.5,21=0.1,2=0.3,22=0.1" -1 "Food,Can" Emitter A normal "Food,Can" 8192 -91 11 12 Launcher_A_LV11 Cooking Tools Chef's Oven Cooking Tools null -1 -1 null 54 60 1 "1=0.45,21=0.09,2=0.35,22=0.11" -1 "Food,Can" Emitter A normal "Food,Can" 8192 -92 12 12 Launcher_A_LV12 Cooking Tools Baking Master Set Cooking Tools null -1 -1 null 56 60 1 "1=0.4,21=0.08,2=0.4,22=0.12" -1 "Food,Can" Emitter A normal "Food,Can" 8192 -101 1 12 Launcher_B_LV1 Sewing Needle Sewing null 1 1 null -1 -1 -1 null 20 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 0 -102 2 12 Launcher_B_LV2 Sewing Needle&Spool Sewing null -1 -1 null -1 -1 -1 null 40 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 0 -103 3 12 Launcher_B_LV3 Sewing Needle Cushion Sewing null -1 -1 null -1 -1 -1 null 80 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 0 -104 4 12 Launcher_B_LV4 Sewing Sweater Needle Sewing null -1 -1 null 40 60 1 41=1 -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 32 -105 5 12 Launcher_B_LV5 Sewing Knitting Needle Sewing null -1 -1 null 42 60 1 "41=0.85,61=0.15" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 512 -106 6 12 Launcher_B_LV6 Sewing Yarn Basket Sewing null -1 -1 null 44 60 1 "41=0.7,61=0.2,42=0.1" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 1024 -107 7 12 Launcher_B_LV7 Sewing Knitting Basket Sewing null -1 -1 null 46 60 1 "41=0.65,61=0.18,42=0.15,62=0.02" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 1024 -108 8 12 Launcher_B_LV8 Sewing Sewing Machine Sewing null -1 -1 null 48 60 1 "41=0.6,61=0.15,42=0.2,62=0.05" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 2048 -109 9 12 Launcher_B_LV9 Sewing Electric Sewing Machine Sewing null -1 -1 null 50 60 1 "41=0.55,61=0.12,42=0.25,62=0.1" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 4096 -110 10 12 Launcher_B_LV10 Sewing Classic Sewing Machine Sewing null -1 -1 null 52 60 1 "41=0.5,61=0.1,42=0.3,62=0.1" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 8192 -111 11 12 Launcher_B_LV11 Sewing Premium Sewing Machine Sewing null -1 -1 null 54 60 1 "41=0.45,61=0.09,42=0.35,62=0.11" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 8192 -112 12 12 Launcher_B_LV12 Sewing Sewing Workbench Sewing null -1 -1 null 56 60 1 "41=0.4,61=0.08,42=0.40,62=0.12" -1 "Pet Cloth,Pet Shoes" Emitter B normal "Pet Cloth,Pet Shoes" 8192 -121 1 12 Launcher_C_LV1 Toolbox Band Tape Toolbox null 1 1 null -1 -1 -1 null 45 Wood Emitter C raw Pet House 0 -122 2 12 Launcher_C_LV2 Toolbox Caliper Toolbox null -1 -1 null -1 -1 -1 null 90 Wood Emitter C raw Pet House 0 -123 3 12 Launcher_C_LV3 Toolbox Plier Set Toolbox null -1 -1 null -1 -1 -1 null -1 Wood Emitter C raw Pet House 0 -124 4 12 Launcher_C_LV4 Toolbox Wood Plane Toolbox null -1 -1 null -1 -1 -1 null -1 Wood Emitter C raw Pet House 0 -125 5 12 Launcher_C_LV5 Toolbox Wood Tool Set Toolbox null -1 -1 null 24 60 1 141=1 -1 Wood Emitter C raw Pet House 16 -126 6 12 Launcher_C_LV6 Toolbox Advanced Wood Tool Set Toolbox null -1 -1 null 24 60 1 "141=0.9,142=0.1" -1 Wood Emitter C raw Pet House 32 -127 7 12 Launcher_C_LV7 Toolbox Wood Tool Kit Toolbox null -1 -1 null 24 60 1 "141=0.8,142=0.2" -1 Wood Emitter C raw Pet House 64 -128 8 12 Launcher_C_LV8 Toolbox Advanced Wood Tool Kit Toolbox null -1 -1 null 24 60 1 "141=0.75,142=0.25" -1 Wood Emitter C raw Pet House 128 -129 9 12 Launcher_C_LV9 Toolbox Wood Tool Box Toolbox null -1 -1 null 24 60 1 "141=0.7,142=0.3" -1 Wood Emitter C raw Pet House 256 -130 10 12 Launcher_C_LV10 Toolbox Advanced Wood Tool Box Toolbox null -1 -1 null 24 60 1 "141=0.65,142=0.35" -1 Wood Emitter C raw Pet House 512 -131 11 12 Launcher_C_LV11 Toolbox Professional Wood Tool Box Toolbox null -1 -1 null 24 60 1 "141=0.62,142=0.38" -1 Wood Emitter C raw Pet House 1024 -132 12 12 Launcher_C_LV12 Toolbox Master Wood Tool Box Toolbox null -1 -1 null 24 60 1 "141=0.6,142=0.4" -1 Wood Emitter C raw Pet House 2048 -141 1 5 Launcher_sub_C_LV1 Wood Log Wood null 1 1 "125,126,127,128,129,130,131,132" -1 -1 -1 null 5 Pet House Emitter 0 -142 2 5 Launcher_sub_C_LV2 Wood Log Bundles Wood null -1 -1 "125,126,127,128,129,130,131,132" -1 -1 -1 null 10 Pet House Emitter 0 -143 3 5 Launcher_sub_C_LV3 Wood Wood Blocks Wood null -1 -1 "125,126,127,128,129,130,131,132" -1 -1 -1 null 20 Pet House Emitter 0 -144 4 5 Launcher_sub_C_LV4 Wood Wood Board Wood null -1 -1 "125,126,127,128,129,130,131,132" -1 -1 -1 null 50 Pet House Emitter 0 -145 5 5 Launcher_sub_C_LV5 Wood Wood Pile unlock null -1 -1 "125,126,127,128,129,130,131,132" 16 -1 -1 "221=0.8,222=0.2" -1 Pet House Emitter 0 -161 1 8 Launcher_D_LV1 Shelf Small Shelf Shelf null 1 1 null -1 -1 -1 null 45 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 0 -162 2 8 Launcher_D_LV2 Shelf Medium shelf Shelf null -1 -1 null -1 -1 -1 null 90 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 0 -163 3 8 Launcher_D_LV3 Shelf Large shelf Shelf null -1 -1 null -1 -1 -1 null -1 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 0 -164 4 8 Launcher_D_LV4 Shelf Bedside Table Shelf null -1 -1 null 38 -1 -1 241=1 -1 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 64 -165 5 8 Launcher_D_LV5 Shelf Small Display Shelf null -1 -1 null 40 60 1 "241=0.8,261=0.2" -1 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 128 -166 6 8 Launcher_D_LV6 Shelf Double Door Display Shelf null -1 -1 null 42 60 1 "241=0.7,261=0.2,242=0.1" -1 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 512 -167 7 8 Launcher_D_LV7 Shelf Premium Display Shelf null -1 -1 null 44 60 1 "241=0.65,261=0.18,242=0.15,262=0.02" -1 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 1024 -168 8 8 Launcher_D_LV8 Shelf Deluxe Display Shelf null -1 -1 null 46 60 1 "241=0.6,261=0.15,242=0.2,262=0.05" -1 "Pet Toy,Pet Tree" Emitter D normal "Pet Toy,Pet Tree" 2048 -181 1 9 Launcher_E_LV1 Bathtub Basin Bathtub null 1 1 null -1 -1 -1 null 45 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 0 -182 2 9 Launcher_E_LV2 Bathtub Baby bathtub Bathtub null -1 -1 null 36 60 1 "281=0.8,301=0.2" 90 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 0 -183 3 9 Launcher_E_LV3 Bathtub Premium baby bathtub Bathtub null -1 -1 null 38 60 1 "281=0.7,301=0.2,282=0.1" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 0 -184 4 9 Launcher_E_LV4 Bathtub Children Pool Bathtub null -1 -1 null 40 60 1 "281=0.65,301=0.18,282=0.15,302=0.02" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 0 -185 5 9 Launcher_E_LV5 Bathtub Advanced Children Pool Bathtub null -1 -1 null 42 60 1 "281=0.6,301=0.15,282=0.2,302=0.05" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 0 -186 6 9 Launcher_E_LV6 Bathtub Premium Children Pool Bathtub null -1 -1 null 44 60 1 "281=0.55,301=0.12,282=0.25,302=0.08" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 32 -187 7 9 Launcher_E_LV7 Bathtub Ordinary bathtub Bathtub null -1 -1 null 46 60 1 "281=0.5,301=0.1,282=0.3,302=0.1" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 128 -188 8 9 Launcher_E_LV8 Bathtub Premium bathtub Bathtub null -1 -1 null 48 60 1 "281=0.45,301=0.09,282=0.35,302=0.11" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 512 -189 9 9 Launcher_E_LV9 Bathtub Luxury bathtub Bathtub null -1 -1 null 50 60 1 "281=0.4,301=0.08,282=0.4,302=0.12" -1 "Bath Toys,Cleaning Tools" Emitter E normal "Bath Toys,Cleaning Tools" 2048 -221 1 12 Production_sub_C_LV1 Pet House Pink Wood Pet House star 1 7 145 -1 -1 -1 null 6 Wood Product main 4 -222 2 12 Production_sub_C_LV2 Pet House Pink Wood Pile Pet House star 2 13 145 -1 -1 -1 null 12 Wood Product main 8 -223 3 12 Production_sub_C_LV3 Pet House Crate Pet House star 3 23 145 -1 -1 -1 null 23 Wood Product main 16 -224 4 12 Production_sub_C_LV4 Pet House Pet Crate Pet House star 6 40 145 -1 -1 -1 null 43 Wood Product main 32 -225 5 12 Production_sub_C_LV5 Pet House Pet Bed Pet House star 10 72 145 -1 -1 -1 null 80 Wood Product main 64 -226 6 12 Production_sub_C_LV6 Pet House Wooden Pet House Pet House star 13 127 145 -1 -1 -1 null 150 Wood Product main 128 -227 7 12 Production_sub_C_LV7 Pet House Premium Pet House Pet House star 32 224 145 -1 -1 -1 null 290 Wood Product main 256 -228 8 12 Production_sub_C_LV8 Pet House Deluxe Pet House Pet House star 41 396 145 -1 -1 -1 null 540 Wood Product main 512 -229 9 12 Production_sub_C_LV9 Pet House Pet Villa Pet House star 110 700 145 -1 -1 -1 null 780 Wood Product main 1024 -230 10 12 Production_sub_C_LV10 Pet House Premium Pet Villa Pet House star 200 1237 147 -1 -1 -1 null 990 Wood Product main 2048 -231 11 12 Production_sub_C_LV11 Pet House Deluxe Pet Villa Pet House star 360 2188 145 -1 -1 -1 null 1100 Wood Product main 4096 -232 12 12 Production_sub_C_LV12 Pet House Pet Castle Pet House star 640 3869 145 -1 -1 -1 null 1300 Wood Product main 8192 -241 1 12 Production_D1_LV1 Pet Toy Yarn Ball Pet Toy star 1 5 "164,165,166,167,168" -1 -1 -1 null 1 Shelf Product main 1 -242 2 12 Production_D1_LV2 Pet Toy Plastic Ball Pet Toy star 1 9 "164,165,166,167,168" -1 -1 -1 null 1 Shelf Product main 2 -243 3 12 Production_D1_LV3 Pet Toy Bell Ball Pet Toy star 3 15 "164,165,166,167,168" -1 -1 -1 null 1 Shelf Product main 4 -244 4 12 Production_D1_LV4 Pet Toy Catnip Ball Pet Toy star 5 27 "164,165,166,167,168" -1 -1 -1 null 2 Shelf Product main 8 -245 5 12 Production_D1_LV5 Pet Toy Spring Toy Pet Toy star 9 48 "164,165,166,167,168" -1 -1 -1 null 4 Shelf Product main 16 -246 6 12 Production_D1_LV6 Pet Toy Chewer Toy Pet Toy star 16 84 "164,165,166,167,168" -1 -1 -1 null 7 Shelf Product main 32 -247 7 12 Production_D1_LV7 Pet Toy Cat Teaser Pet Toy star 28 149 "164,165,166,167,168" -1 -1 -1 null 13 Shelf Product main 64 -248 8 12 Production_D1_LV8 Pet Toy Premium Pet House Pet Toy star 51 264 "164,165,166,167,168" -1 -1 -1 null 25 Shelf Product main 128 -249 9 12 Production_D1_LV9 Pet Toy Stuffed Fish Pet Toy star 90 466 "164,165,166,167,168" -1 -1 -1 null 45 Shelf Product main 256 -250 10 12 Production_D1_LV10 Pet Toy Feather Ball Pet Toy star 158 825 "164,165,166,167,168" -1 -1 -1 null 80 Shelf Product main 512 -251 11 12 Production_D1_LV11 Pet Toy Catching Toy Pet Toy star 280 1459 "164,165,166,167,168" -1 -1 -1 null 140 Shelf Product main 1024 -252 12 12 Production_D1_LV12 Pet Toy Jumping Toy Pet Toy star 495 2579 "164,165,166,167,168" -1 -1 -1 null 240 Shelf Product main 2048 -261 1 12 Production_D2_LV1 Pet Tree Cat Scratcher Pet Tree star 1 5 "165,166,167,168" -1 -1 -1 null 1 Shelf Product sub 4 -262 2 12 Production_D2_LV2 Pet Tree Meow Cat Scratcher Pet Tree star 1 8 "165,166,167,168" -1 -1 -1 null 1 Shelf Product sub 8 -263 3 12 Production_D2_LV3 Pet Tree Daybed Cat Scratcher Pet Tree star 3 14 "165,166,167,168" -1 -1 -1 null 1 Shelf Product sub 16 -264 4 12 Production_D2_LV4 Pet Tree Premium Daybed Cat Scratcher Pet Tree star 5 26 "165,166,167,168" -1 -1 -1 null 2 Shelf Product sub 32 -265 5 12 Production_D2_LV5 Pet Tree Ball Type Cat Scratcher Pet Tree star 9 45 "165,166,167,168" -1 -1 -1 null 4 Shelf Product sub 64 -266 6 12 Production_D2_LV6 Pet Tree Bridge Cat Scratcher Pet Tree star 16 80 "165,166,167,168" -1 -1 -1 null 7 Shelf Product sub 128 -267 7 12 Production_D2_LV7 Pet Tree Simple Cat Tree Pet Tree star 28 142 "165,166,167,168" -1 -1 -1 null 13 Shelf Product sub 256 -268 8 12 Production_D2_LV8 Pet Tree Happy Cat Tree Pet Tree star 51 251 "165,166,167,168" -1 -1 -1 null 25 Shelf Product sub 512 -269 9 12 Production_D2_LV9 Pet Tree Cat Tree Set Pet Tree star 90 443 "165,166,167,168" -1 -1 -1 null 45 Shelf Product sub 1024 -270 10 12 Production_D2_LV10 Pet Tree Premium Cat Tree Pet Tree star 158 784 "165,166,167,168" -1 -1 -1 null 80 Shelf Product sub 2048 -271 11 12 Production_D2_LV11 Pet Tree Deluxe Cat Tree Pet Tree star 280 1386 "165,166,167,168" -1 -1 -1 null 140 Shelf Product sub 4096 -272 12 12 Production_D2_LV12 Pet Tree Cat Paradise Pet Tree star 495 2450 "165,166,167,168" -1 -1 -1 null 240 Shelf Product sub 8192 -281 1 12 Production_E1_LV1 Bath Toys Bubble ball Bath Toys star 1 4 "182,183,184,185,186,187,188,189" -1 -1 -1 null 1 Bathtub Product main 2 -282 2 12 Production_E1_LV2 Bath Toys Toy Tadpole Bath Toys star 1 8 "182,183,184,185,186,187,188,189" -1 -1 -1 null 1 Bathtub Product main 4 -283 3 12 Production_E1_LV3 Bath Toys Toy fish Bath Toys star 3 14 "182,183,184,185,186,187,188,189" -1 -1 -1 null 1 Bathtub Product main 8 -284 4 12 Production_E1_LV4 Bath Toys Toy Seahorse Bath Toys star 5 24 "182,183,184,185,186,187,188,189" -1 -1 -1 null 2 Bathtub Product main 16 -285 5 12 Production_E1_LV5 Bath Toys Toy yellow duck Bath Toys star 9 43 "182,183,184,185,186,187,188,189" -1 -1 -1 null 4 Bathtub Product main 32 -286 6 12 Production_E1_LV6 Bath Toys Toy octopus Bath Toys star 16 76 "182,183,184,185,186,187,188,189" -1 -1 -1 null 7 Bathtub Product main 64 -287 7 12 Production_E1_LV7 Bath Toys Toy turtle Bath Toys star 28 134 "182,183,184,185,186,187,188,189" -1 -1 -1 null 13 Bathtub Product main 128 -288 8 12 Production_E1_LV8 Bath Toys Toy shark Bath Toys star 51 237 "182,183,184,185,186,187,188,189" -1 -1 -1 null 25 Bathtub Product main 256 -289 9 12 Production_E1_LV9 Bath Toys Toy whale Bath Toys star 90 420 "182,183,184,185,186,187,188,189" -1 -1 -1 null 45 Bathtub Product main 512 -290 10 12 Production_E1_LV10 Bath Toys Toy Swimming Dog Bath Toys star 158 742 "182,183,184,185,186,187,188,189" -1 -1 -1 null 80 Bathtub Product main 1024 -291 11 12 Production_E1_LV11 Bath Toys Toy float Bath Toys star 280 1313 "182,183,184,185,186,187,188,189" -1 -1 -1 null 140 Bathtub Product main 2048 -292 12 12 Production_E1_LV12 Bath Toys Toy boat Bath Toys star 495 2321 "182,183,184,185,186,187,188,189" -1 -1 -1 null 240 Bathtub Product main 4096 -301 1 12 Production_E2_LV1 Cleaning Tools Pet Towel Cleaning Tools star 1 5 "182,183,184,185,186,187,188,189" -1 -1 -1 null 1 Bathtub Product sub 3 -302 2 12 Production_E2_LV2 Cleaning Tools Advanced Towel Cleaning Tools star 1 8 "182,183,184,185,186,187,188,189" -1 -1 -1 null 1 Bathtub Product sub 6 -303 3 12 Production_E2_LV3 Cleaning Tools Pet Wipes Cleaning Tools star 3 14 "182,183,184,185,186,187,188,189" -1 -1 -1 null 1 Bathtub Product sub 12 -304 4 12 Production_E2_LV4 Cleaning Tools Washing Gloves Cleaning Tools star 5 26 "182,183,184,185,186,187,188,189" -1 -1 -1 null 2 Bathtub Product sub 24 -305 5 12 Production_E2_LV5 Cleaning Tools Pet Shampoo Cleaning Tools star 9 45 "182,183,184,185,186,187,188,189" -1 -1 -1 null 4 Bathtub Product sub 48 -306 6 12 Production_E2_LV6 Cleaning Tools Advanced Shampoo Cleaning Tools star 16 80 "182,183,184,185,186,187,188,189" -1 -1 -1 null 7 Bathtub Product sub 96 -307 7 12 Production_E2_LV7 Cleaning Tools Premium Shampoo Cleaning Tools star 28 142 "182,183,184,185,186,187,188,189" -1 -1 -1 null 13 Bathtub Product sub 192 -308 8 12 Production_E2_LV8 Cleaning Tools Hair Brush Cleaning Tools star 51 251 "182,183,184,185,186,187,188,189" -1 -1 -1 null 25 Bathtub Product sub 384 -309 9 12 Production_E2_LV9 Cleaning Tools Advanced Brush Cleaning Tools star 90 443 "182,183,184,185,186,187,188,189" -1 -1 -1 null 45 Bathtub Product sub 768 -310 10 12 Production_E2_LV10 Cleaning Tools Pet Dryer Cleaning Tools star 158 784 "182,183,184,185,186,187,188,189" -1 -1 -1 null 80 Bathtub Product sub 1536 -311 11 12 Production_E2_LV11 Cleaning Tools Advanced Pet Dryer Cleaning Tools star 280 1386 "182,183,184,185,186,187,188,189" -1 -1 -1 null 140 Bathtub Product sub 3072 -312 12 12 Production_E2_LV12 Cleaning Tools Pet Dryer Box Cleaning Tools star 495 2450 "182,183,184,185,186,187,188,189" -1 -1 -1 null 240 Bathtub Product sub 6144 -1001 1 8 Launcher_H_LV1 Clothing Simple fabric wardrobe Clothing null 1 1 null 36 60 1 "1081=0.8,1021=0.2" 40 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 128 -1002 2 8 Launcher_H_LV2 Clothing Ordinary fabric wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.75,1021=0.2,1082=0.05" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 128 -1003 3 8 Launcher_H_LV3 Clothing High-end fabric wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.7,1021=0.2,1082=0.05,1022=0.05" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 128 -1004 4 8 Launcher_H_LV4 Clothing Simple wooden wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.65,1021=0.2,1082=0.1,1022=0.05" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 128 -1005 5 8 Launcher_H_LV5 Clothing Ordinary wooden wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.6,1021=0.18,1082=0.1,1022=0.12" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 128 -1006 6 8 Launcher_H_LV6 Clothing Large wooden wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.55,1021=0.18,1082=0.15,1022=0.12" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 512 -1007 7 8 Launcher_H_LV7 Clothing High-end wooden wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.5,1021=0.15,1082=0.2,1022=0.15" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 2048 -1008 8 8 Launcher_H_LV8 Clothing Luxury wooden wardrobe Clothing null -1 -1 null 36 60 1 "1081=0.45,1021=0.1,1082=0.25,1022=0.2" -1 "Clothes storage bag,Shoe" Emitter F combom "Shoe,Daily clothing,Dress" 8192 -1021 1 7 Launcher_sub_H_LV1 Clothes storage bag Simple cloth bag Clothes storage bag null 1 1 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 5 "Daily clothing,Dress" Emitter 0 -1022 2 7 Launcher_sub_H_LV2 Clothes storage bag High-end cloth bag Clothes storage bag null -1 -1 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 10 "Daily clothing,Dress" Emitter 0 -1023 3 7 Launcher_sub_H_LV3 Clothes storage bag Simple storage bag Clothes storage bag null -1 -1 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 20 "Daily clothing,Dress" Emitter 0 -1024 4 7 Launcher_sub_H_LV4 Clothes storage bag Ordinary storage bag Clothes storage bag null -1 -1 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 50 "Daily clothing,Dress" Emitter 0 -1025 5 7 Launcher_sub_H_LV5 Clothes storage bag Premium storage bag Clothes storage bag null -1 -1 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null -1 "Daily clothing,Dress" Emitter 0 -1026 6 7 Launcher_sub_H_LV6 Clothes storage bag Luxury storage bag Clothes storage bag null -1 -1 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null -1 "Daily clothing,Dress" Emitter 0 -1027 7 7 Launcher_sub_H_LV7 Clothes storage bag Storage set unlock null -1 -1 "1001,1002,1003,1004,1005,1006,1007,1008" 18 -1 -1 "1041=0.8,1061=0.2" -1 "Daily clothing,Dress" Emitter 0 -1041 1 12 Production_sub_H_LV1 Daily clothing Children's sandals Daily clothing star 1 8 1026 -1 -1 -1 null 6 Clothes storage bag Product sub 1 -1042 2 12 Production_sub_H_LV2 Daily clothing Children's shoes Daily clothing star 2 14 1026 -1 -1 -1 null 12 Clothes storage bag Product sub 2 -1043 3 12 Production_sub_H_LV3 Daily clothing Girls' sandals Daily clothing star 3 24 1026 -1 -1 -1 null 23 Clothes storage bag Product sub 4 -1044 4 12 Production_sub_H_LV4 Daily clothing Girls' high heels Daily clothing star 6 43 1026 -1 -1 -1 null 43 Clothes storage bag Product sub 8 -1045 5 12 Production_sub_H_LV5 Daily clothing Girls' high-end shoes Daily clothing star 10 76 1026 -1 -1 -1 null 80 Clothes storage bag Product sub 16 -1046 6 12 Production_sub_H_LV6 Daily clothing Ordinary square heels shoes Daily clothing star 13 135 1026 -1 -1 -1 null 150 Clothes storage bag Product sub 32 -1047 7 12 Production_sub_H_LV7 Daily clothing Ordinary high-heeled Daily clothing star 32 239 1026 -1 -1 -1 null 290 Clothes storage bag Product sub 64 -1048 8 12 Production_sub_H_LV8 Daily clothing Classic high-heeled shoes Daily clothing star 41 422 1026 -1 -1 -1 null 540 Clothes storage bag Product sub 128 -1049 9 12 Production_sub_H_LV9 Daily clothing High-end high-heeled shoes Daily clothing star 110 746 1026 -1 -1 -1 null 780 Clothes storage bag Product sub 256 -1050 10 12 Production_sub_H_LV10 Daily clothing Ordinary evening dress shoes Daily clothing star 200 1320 1026 -1 -1 -1 null 990 Clothes storage bag Product sub 512 -1051 11 12 Production_sub_H_LV11 Daily clothing High-end evening dress shoes Daily clothing star 360 2334 1026 -1 -1 -1 null 1100 Clothes storage bag Product sub 1024 -1052 12 12 Production_sub_H_LV12 Daily clothing Luxurious evening dress shoes Daily clothing star 640 4127 1026 -1 -1 -1 null 1300 Clothes storage bag Product sub 2048 -1061 1 12 Production_sub_H2_LV1 Dress Mini dress Dress star 1 8 1026 -1 -1 -1 null 8 Clothes storage bag Product sub 4 -1062 2 12 Production_sub_H2_LV2 Dress Girls simple dress Dress star 2 15 1026 -1 -1 -1 null 16 Clothes storage bag Product sub 8 -1063 3 12 Production_sub_H2_LV3 Dress Flower girl dress Dress star 3 26 1026 -1 -1 -1 null 30 Clothes storage bag Product sub 16 -1064 4 12 Production_sub_H2_LV4 Dress Girls high-end dress Dress star 6 46 1026 -1 -1 -1 null 56 Clothes storage bag Product sub 32 -1065 5 12 Production_sub_H2_LV5 Dress Simple dress Dress star 10 81 1026 -1 -1 -1 null 104 Clothes storage bag Product sub 64 -1066 6 12 Production_sub_H2_LV6 Dress Party dress Dress star 13 143 1026 -1 -1 -1 null 195 Clothes storage bag Product sub 128 -1067 7 12 Production_sub_H2_LV7 Dress Banquet dress Dress star 32 254 1026 -1 -1 -1 null 377 Clothes storage bag Product sub 256 -1068 8 12 Production_sub_H2_LV8 Dress Classic dress Dress star 41 448 1026 -1 -1 -1 null 702 Clothes storage bag Product sub 512 -1069 9 12 Production_sub_H2_LV9 Dress Haute ceremonial dress Dress star 110 793 1026 -1 -1 -1 null 1014 Clothes storage bag Product sub 1024 -1070 10 12 Production_sub_H2_LV10 Dress Ordinary evening dress Dress star 200 1402 1026 -1 -1 -1 null 1287 Clothes storage bag Product sub 2048 -1071 11 12 Production_sub_H2_LV11 Dress High-end evening dress Dress star 360 2480 1026 -1 -1 -1 null 1430 Clothes storage bag Product sub 4096 -1072 12 12 Production_sub_H2_LV12 Dress Luxurious evening dress Dress star 640 4385 1026 -1 -1 -1 null 1690 Clothes storage bag Product sub 8192 -1081 1 12 Production_H2_LV1 Shoe Diapers Shoe star 1 5 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 2 Clothing Product main 50 -1082 2 12 Production_H2_LV2 Shoe Baby clothe Shoe star 1 9 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 3 Clothing Product main 100 -1083 3 12 Production_H2_LV3 Shoe Cartoon pajama Shoe star 3 17 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 7 Clothing Product main 200 -1084 4 12 Production_H2_LV4 Shoe Children's T-shirt Shoe star 5 30 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 11 Clothing Product main 400 -1085 5 12 Production_H2_LV5 Shoe Overall Shoe star 9 52 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 21 Clothing Product main 800 -1086 6 12 Production_H2_LV6 Shoe Sportswear Shoe star 16 93 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 45 Clothing Product main 1600 -1087 7 12 Production_H2_LV7 Shoe Sweatshirt Shoe star 28 164 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 80 Clothing Product main 3200 -1088 8 12 Production_H2_LV8 Shoe Casual wear Shoe star 51 290 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 140 Clothing Product main 6400 -1089 9 12 Production_H2_LV9 Shoe Graduation clothe Shoe star 90 513 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 240 Clothing Product main 8192 -1090 10 12 Production_H2_LV10 Shoe Casual suits Shoe star 158 907 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 320 Clothing Product main 8192 -1091 11 12 Production_H2_LV11 Shoe Vacation skirt Shoe star 280 1604 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 450 Clothing Product main 8192 -1092 12 12 Production_H2_LV12 Shoe Suits Shoe star 495 2837 "1001,1002,1003,1004,1005,1006,1007,1008" -1 -1 -1 null 590 Clothing Product main 8192 -5001 1 3 Launcher_Wash_LV1 WashTool Simple Wash Box WashTool null 1 1 null 60 60 1 5021=1 -1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5002 2 3 Launcher_Wash_LV2 WashTool Small Wash Car WashTool null -1 -1 null 60 60 1 5041=1 -1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5003 3 3 Launcher_Wash_LV3 WashTool Big Wash Car WashTool null -1 -1 null 60 60 1 5061=1 -1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5021 1 5 merge_icon_small_xiaodao WashOneTool Utility knife WashOneTool star 1 1 5001 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5022 2 5 merge_icon_small_qianzi WashOneTool pliers WashOneTool star 1 1 5001 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5023 3 5 merge_icon_small_tuizi WashOneTool Fader WashOneTool star 1 1 5001 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5024 4 5 merge_icon_small_niezi WashOneTool tweezers WashOneTool star 1 1 5001 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5025 5 5 merge_icon_small_niezimianqiu WashOneTool Tweezers with cotton balls WashOneTool star 1 1 5001 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5041 1 3 Production_Wash_LV1 WashTwoTool band-aid WashTwoTool star 1 1 5002 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5042 2 3 Production_Wash_LV2 WashTwoTool spray WashTwoTool star 1 1 5002 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5043 3 3 Production_Wash_LV3 WashTwoTool bandage WashTwoTool star 1 1 5002 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5061 1 3 merge_icon_small_qipao WashThreeTool Bubble WashThreeTool star 1 1 5003 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5062 2 3 merge_icon_small_xiangzao WashThreeTool Soap WashThreeTool star 1 1 5003 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -5063 3 3 merge_icon_small_pentou WashThreeTool Shower head WashThreeTool star 1 1 5003 -1 -1 -1 null 1 "WashOneTool,WashTwoTool,WashThreeTool" Wash 0 -501 1 5 Production_energy_LV1 Energy A Little Energy energy null 1 1 562 -1 -1 -1 null -1 Resource 0 -502 2 5 Production_energy_LV2 Energy Small Amount Energy energy null 5 5 562 -1 -1 -1 null -1 Resource 0 -503 3 5 Production_energy_LV3 Energy Appropriate Energy energy null 15 15 562 -1 -1 -1 null -1 Resource 0 -504 4 5 Production_energy_LV4 Energy Large Amount Energy energy null 40 40 562 -1 -1 -1 null -1 Resource 0 -505 5 5 Production_energy_LV5 Energy Huge Amount Energy energy null 100 100 562 -1 -1 -1 null -1 Resource 0 -521 1 5 Production_star_LV1 Star A Star star null 8 8 "561,563" -1 -1 -1 null -1 Resource 0 -522 2 5 Production_star_LV2 Star A Few Star star null 20 20 "561,563" -1 -1 -1 null -1 Resource 0 -523 3 5 Production_star_LV3 Star Small Star star null 45 45 "561,563" -1 -1 -1 null -1 Resource 0 -524 4 5 Production_star_LV4 Star Large Star star null 110 110 "561,563" -1 -1 -1 null -1 Resource 0 -525 5 5 Production_star_LV5 Star Huge Star star null 240 240 "561,563" -1 -1 -1 null -1 Resource 0 -541 1 5 Production_diamond_LV1 Diamond A Little Diamond diamond null 1 1 563 -1 -1 -1 null -1 Resource 0 -542 2 5 Production_diamond_LV2 Diamond Small Amount Diamond diamond null 3 3 563 -1 -1 -1 null -1 Resource 0 -543 3 5 Production_diamond_LV3 Diamond Appropriate Diamond diamond null 8 8 563 -1 -1 -1 null -1 Resource 0 -544 4 5 Production_diamond_LV4 Diamond Large Amount Diamond diamond null 20 20 563 -1 -1 -1 null -1 Resource 0 -545 5 5 Production_diamond_LV5 Diamond Huge Amount Diamond diamond null 50 50 563 -1 -1 -1 null -1 Resource 0 -561 1 1 Launcher_starChest Star Box Star Chest unlock null -1 -1 null 5 -1 -1 "521=0.5,522=0.35,523=0.15" -1 Star Chest 0 -562 1 1 Launcher_energeChest Energy Box Energy Chest unlock null -1 -1 null 5 -1 -1 "501=0.35,502=0.35,503=0.2,504=0.1" -1 Energy Chest 0 -563 1 1 Launcher_surpriseChest Surprise Box Surprising Chest lock null -1 -1 null 5 600 10 "541=0.35,521=0.35,542=0.2,522=0.1" -1 "Star,Diamond" Chest 0 -564 1 1 Launcher_surpriseChest Surprise Box Surprising Chest unlock null -1 -1 null 5 600 10 "541=0.35,521=0.35,542=0.2,522=0.1" -1 "Star,Diamond" Chest 0 -581 1 2 Launcher_Lowemitterchest_LV1 Emit Box Low Emit Chest Lv1 lock null -1 -1 null 6 720 12 "81=0.35,101=0.35,121=0.3" -1 "Cooking Tools,Shopping,Toolbox" Chest 0 -582 1 2 Launcher_Lowemitterchest_LV1 Emit Box Low Emit Chest Lv1 unlock null -1 -1 null 6 720 12 "81=0.35,101=0.35,121=0.3" -1 "Cooking Tools,Shopping,Toolbox" Chest 0 -583 2 2 Launcher_Lowemitterchest_LV2 Emit Box Low Emit Chest Lv2 lock null -1 -1 null 6 1800 30 "82=0.35,102=0.35,122=0.3" -1 "Cooking Tools,Shopping,Toolbox" Chest 0 -584 2 2 Launcher_Lowemitterchest_LV2 Emit Box Low Emit Chest Lv2 unlock null -1 -1 null 6 1800 30 "82=0.35,102=0.35,122=0.3" -1 "Cooking Tools,Shopping,Toolbox" Chest 0 -585 1 2 Launcher_highemitterchest_lv1 High Emit Box Higt Emit Chest Lv1 lock null -1 -1 null 6 720 12 "321=0.1,161=0.4,181=0.4,201=0.1" -1 "Sewing,Fishing,Shelf,Gardening Tools" Chest 0 -586 1 2 Launcher_highemitterchest_lv1 High Emit Box Higt Emit Chest Lv1 unlock null -1 -1 null 6 720 12 "321=0.1,161=0.4,181=0.4,201=0.1" -1 "Sewing,Fishing,Shelf,Gardening Tools" Chest 0 -587 2 2 Launcher_highemitterchest_lv2 High Emit Box Higt Emit Chest Lv2 lock null -1 -1 null 6 1800 30 "322=0.1,162=0.4,182=0.4,202=0.1" -1 "Sewing,Fishing,Shelf,Gardening Tools" Chest 0 -588 2 2 Launcher_highemitterchest_lv2 High Emit Box Higt Emit Chest Lv2 unlock null -1 -1 null 6 1800 30 "322=0.1,162=0.4,182=0.4,202=0.1" -1 "Sewing,Fishing,Shelf,Gardening Tools" Chest 0 -601 1 1 Launcher_L_A Pet Food Basket Pet Food Basket unlock null -1 -1 null 8 -1 -1 "1=0.2,2=0.3,3=0.2,4=0.1,21=0.2" -1 "Food,Can" Gift 0 -602 1 1 Launcher_L_B Pet Aid Box Pet Aid Box unlock null -1 -1 null 8 -1 -1 "41=0.2,42=0.3,43=0.2,44=0.1,61=0.2" -1 "Cleaning Tools,Medical" Gift 0 -603 1 1 Launcher_L_C Pet House Box Pet House Box unlock null -1 -1 null 8 -1 -1 "221=0.6,222=0.4" -1 Pet House Gift 0 -604 1 1 Launcher_L_D Pet Clothing Box Pet Clothing Box unlock null -1 -1 null 8 -1 -1 "241=0.1,242=0.2,243=0.3,261=0.1,262=0.2,263=0.1" -1 "Pet Cloth,Pet Shoes" Gift 0 -605 1 1 Launcher_L_E Plate of Fish Plate of Fish unlock null -1 -1 null 8 -1 -1 "281=0.3,282=0.4,283=0.2,284=0.1" -1 Fish Gift 0 -606 1 1 Launcher_L_G Flower Basket Flower Basket unlock null -1 -1 null 8 -1 -1 "341=0.3,342=0.4,343=0.2,344=0.1" -1 Garden Gift 0 -701 1 1 Launcher_zixuan_LV1 Optional Box Optional Box unlock null -1 -1 null 1 -1 -1 null -1 Gift 0 -702 1 1 Launcher_zixuan_LV2 Advanced Optional Box Advanced Optional Box unlock null -1 -1 null 1 -1 -1 null -1 Gift 0 -703 1 1 Launcher_Universal-treasure-chest_LV1 All Random Box All Random Box unlock null -1 -1 null 3 -1 -1 null -1 Gift 0 -704 1 1 Launcher_Universal-treasure-chest_LV2 Advanced All Random Box Advanced All Random Box unlock null -1 -1 null 3 -1 -1 null -1 Gift 0 -705 1 1 Launcher_Resource-chest_LV1 Resource Supply Box Resource Supply Box unlock null -1 -1 null 1 -1 -1 null -1 Gift 0 -706 1 1 Launcher_Resource-chest_LV2 Advanced Resource Supply Box Advanced Resource Supply Box unlock null -1 -1 null 1 -1 -1 null -1 Gift 0 -801 1 1 homepage_icn_Stash Package Package null null -1 -1 null 1 -1 -1 null -1 Special 0 \ No newline at end of file diff --git a/src/server/gamedata/config/PassOne.txt b/src/server/gamedata/config/PassOne.txt deleted file mode 100644 index 11a0a87b..00000000 --- a/src/server/gamedata/config/PassOne.txt +++ /dev/null @@ -1,20 +0,0 @@ -商店礼包表 -Id Lv FreeReward PayReward UpgradeGap Price_Old Price_New Hour -int int string string int float float int -Id 等级 免费奖励 付费奖励 升级所需分数 原价 售价 持续时间 -1 0 1000 24.9 9.9 168 -2 1 562=1 Energy=150 0 0 0 0 -3 2 562=1 Energy=268 0 0 0 0 -4 3 562=1 Energy=268 0 0 0 0 -5 4 562=1 Energy=268 0 0 0 0 -6 5 562=1 Energy=268 0 0 0 0 -7 6 562=1 Energy=328 0 0 0 0 -8 7 562=1 Energy=328 0 0 0 0 -9 8 562=1 Energy=328 0 0 0 0 -10 9 562=1 Energy=328 0 0 0 0 -11 10 562=1 Energy=328 0 0 0 0 -12 11 562=1 Energy=648 0 0 0 0 -13 12 562=1 Energy=648 0 0 0 0 -14 13 562=1 Energy=648 0 0 0 0 -15 14 562=1 Energy=648 0 0 0 0 -16 15 562=1 Energy=648 0 0 0 0 diff --git a/src/server/gamedata/config/PromotionPack.txt b/src/server/gamedata/config/PromotionPack.txt deleted file mode 100644 index 7661528e..00000000 --- a/src/server/gamedata/config/PromotionPack.txt +++ /dev/null @@ -1,5 +0,0 @@ -界面配置表 -Id Bg Title Tip Content Price_New Price_Old -int string string string string float float -Id 背景图片 标题 礼包说明 内容 价格 原价 -1 Activity/activity_pic_beginnerbg BeginnerPack Buy a beginner's gift bag to receive generous rewards. "Energy=500,Diamond=388,561=1" 4.99 9.99 diff --git a/src/server/gamedata/config/RandomNameDataBase.txt b/src/server/gamedata/config/RandomNameDataBase.txt deleted file mode 100644 index d24b34a0..00000000 --- a/src/server/gamedata/config/RandomNameDataBase.txt +++ /dev/null @@ -1,860 +0,0 @@ -界面配置表 -Id EnName CnName Gender -int string string int -Id EnName CnName Gender -1 Alexia 亚莉克希亚 1 -2 Alice 爱丽丝 1 -3 Alma 爱玛 1 -4 Alva 阿尔娃 1 -5 Amanda 阿曼达 1 -6 Amelia 阿蜜莉雅 1 -7 Amy 艾咪 1 -8 Anastasia 安娜塔西雅 1 -9 Andrea 安德莉亚 1 -10 Angela 安琪拉 1 -11 Ann 安妮 1 -12 Anna 安娜 1 -13 Annabelle 安娜贝儿 1 -14 Antonia 安东妮儿 1 -15 April 艾谱莉 1 -16 Arlene 艾琳娜 1 -17 Astrid 艾丝翠得 1 -18 Athena 雅典娜 1 -19 Audrey 奥德莉 1 -20 Aurora 奥萝拉 1 -21 Barbara 芭芭拉 1 -22 Beatrice 碧翠丝 1 -23 Belinda 贝琳达 1 -24 Bella 贝拉 1 -25 Belle 贝拉 1 -26 Bernice 柏妮丝 1 -27 Bertha 柏莎 1 -28 Beryl 百丽儿 1 -29 Bess 贝丝 1 -30 Betsy 贝琪 1 -31 Betty 贝蒂 1 -32 Beverly 贝芙丽 1 -33 Blanche 布兰琪 1 -34 Bblythe 布莱兹 1 -35 Bonnie 邦妮 1 -36 Bridget 布丽姬特 1 -37 Camille 卡蜜拉 1 -38 Candice 坎蒂丝 1 -39 Cara 卡拉 1 -40 Carol 卡萝 1 -41 Caroline 卡洛琳 1 -42 Catherine 凯瑟琳 1 -43 Cathy 凯丝 1 -44 Cecilia 塞西莉亚 1 -45 Celeste 莎莉丝特 1 -46 Charlotte 夏洛特 1 -47 Cherry 绮莉 1 -48 Cheryl 绮丽儿 1 -49 Chloe 克洛怡 1 -50 Christine 克莉丝汀 1 -51 Claire 克莱儿 1 -52 Clara 克莱拉 1 -53 Constance 康斯坦丝 1 -54 Cora 柯拉 1 -55 Coral 卡洛儿 1 -56 Cornelia 可妮莉雅 1 -57 Crystal 克莉斯多 1 -58 Cynthia 辛西亚 1 -59 Daisy 黛西 1 -60 Dale 黛儿 1 -61 Dana 黛娜 1 -62 Daphne 黛芙妮 1 -63 Darlene 达莲娜 1 -64 Dawn 潼恩 1 -65 Debby 黛碧 1 -66 Deborah 黛博拉 1 -67 Deirdre 迪得莉 1 -68 Delia 迪丽雅 1 -69 Denise 丹尼丝 1 -70 Diana 黛安娜 1 -71 Dinah 黛娜 1 -72 Dolores 多洛莉丝 1 -73 Dominic 多明尼卡 1 -74 Donna 唐娜 1 -75 Dora 多拉 1 -76 Doreen 多琳 1 -77 Doris 多莉丝 1 -78 Dorothy 桃乐斯 1 -79 Eartha 尔莎 1 -80 Eden 伊甸 1 -81 Edith 伊蒂丝 1 -82 Edwina 艾德文娜 1 -83 Eileen 爱琳 1 -84 Elaine 伊莲恩 1 -85 Eleanore 艾琳诺 1 -86 Elizabeth 伊莉莎白 1 -87 Ella 艾拉 1 -88 Elma 艾尔玛 1 -89 Elsa 爱尔莎 1 -90 Elsie 艾西 1 -91 Elva 艾娃 1 -92 Elvira 艾薇拉 1 -93 Emily 艾蜜莉 1 -94 Emma 艾玛 1 -95 Enid 伊妮德 1 -96 Erica 艾丽卡 1 -97 Erin 艾琳 1 -98 Esther 艾丝特 1 -99 Ethel 艾瑟儿 1 -100 Eudora 尤朵拉 1 -101 Eunice 尤妮丝 1 -102 Evangeline 伊文捷琳 1 -103 Eve 伊芙 1 -104 Evelyn 伊芙琳 1 -105 Faithe 费滋 1 -106 Fanny 梵妮 1 -107 Fay 费怡 1 -108 Flora 弗罗拉 1 -109 Florence 弗罗伦丝 1 -110 Frances 法兰西斯 1 -111 Freda 弗莉达 1 -112 Frederica 菲蕾德翠卡 1 -113 Gabrielle 嘉比里拉 1 -114 Gail 盖尔 1 -115 Gemma 姬玛 1 -116 Genevieve 珍妮芙 1 -117 Georgia 乔治亚 1 -118 Geraldine 娇拉汀 1 -119 Gill 姬儿 1 -120 Gladys 葛莱蒂丝 1 -121 Gloria 葛罗瑞亚 1 -122 Grace 葛瑞丝 1 -123 Griselda 葛莉谢尔达 1 -124 Gustave 葛佳丝塔芙 1 -125 Gwendolyn 关德琳 1 -126 Hannah 汉娜 1 -127 Harriet 哈莉特 1 -128 Hazel 海柔尔 1 -129 Hedda 赫达 1 -130 Hedy 赫蒂 1 -131 Helen 海伦 1 -132 Heloise 海洛伊丝 1 -133 Hermosa 何蒙莎 1 -134 Hilda 希尔达 1 -135 Hilary 希拉瑞莉 1 -136 Honey 汉妮 1 -137 Hulda 胡达 1 -138 Ida 艾达 1 -139 Ina 艾娜 1 -140 Ingrid 英格丽 1 -141 Irene 艾琳 1 -142 Iris 爱莉丝 1 -143 Irma 艾尔玛 1 -144 Isabel 伊莎蓓尔 1 -145 Ivy 艾薇 1 -146 Jacqueline 贾桂琳 1 -147 Jamie 婕咪 1 -148 Jane 珍 1 -149 Janet 珍妮特 1 -150 Janice 珍尼丝 1 -151 Jean 琴 1 -152 Jennifer 珍尼佛 1 -153 Jenny 珍妮 1 -154 Jessie 婕西 1 -155 Jessica 杰西嘉 1 -156 Jill 姬儿 1 -157 Jo 乔 1 -158 Joan 琼 1 -159 Joanna 乔安娜 1 -160 Joanne 希伯来 1 -161 Jocelyn 贾思琳 1 -162 Jodie 乔蒂 1 -163 Josephine 约瑟芬 1 -164 Joy 乔伊 1 -165 Joyce 乔伊丝 1 -166 Judith 朱蒂斯 1 -167 Judy 朱蒂 1 -168 Julia 朱丽亚 1 -169 Julie 朱莉 1 -170 Juliet 朱丽叶 1 -171 June 朱恩 1 -172 Kama 卡玛 1 -173 Karen 凯伦 1 -174 Katherine 凯瑟琳 1 -175 Kay 凯伊 1 -176 Kelly 凯莉盖 1 -177 Kimberley 金百莉 1 -178 Kitty 吉蒂 1 -179 Kristin 克莉丝汀 1 -180 Laura 萝拉 1 -181 Laurel 萝瑞尔 1 -182 Lauren 萝伦 1 -183 Lee 李 1 -184 Leila 莉拉 1 -185 Lena 莉娜 1 -186 Leona 李奥娜 1 -187 Lesley 雷思丽 1 -188 Letitia 莉蒂西雅 1 -189 Lilith 莉莉斯 1 -190 Lillian 丽莲 1 -191 Linda 琳达 1 -192 Lindsay 琳赛 1 -193 Lisa 丽莎 1 -194 Liz 莉斯 1 -195 Lorraine 洛伦 1 -196 Louise 璐易丝 1 -197 Lucy 露西 1 -198 Lydia 莉蒂亚 1 -199 Lynn 琳 1 -200 Mabel 玛佩尔 1 -201 Madeline 玛德琳 1 -202 Madge 玛琪 1 -203 Maggie 玛姬 1 -204 Mamie 梅蜜 1 -205 Mandy 曼蒂 1 -206 Marcia 玛西亚 1 -207 Marguerite 玛格丽特 1 -208 Maria 玛丽亚 1 -209 Marian 玛丽安 1 -210 Marina 马丽娜 1 -211 Marjorie 玛乔丽 1 -212 Martha 玛莎 1 -213 Martina 玛蒂娜 1 -214 Mary 玛丽 1 -215 Maud 穆得 1 -216 Maureen 穆琳 1 -217 Mavis 梅薇思 1 -218 Maxine 玛可欣 1 -219 Mag 麦格 1 -220 May 梅 1 -221 Megan 梅根 1 -222 Melissa 蒙丽莎 1 -223 Meroy 玛希 1 -224 Merry 梅莉 1 -225 Michelle 蜜雪儿 1 -226 Michaelia 蜜雪莉雅 1 -227 Mignon 蜜妮安 1 -228 Mildred 穆得莉 1 -229 Mirabelle 蜜拉贝儿 1 -230 Miranda 米兰达 1 -231 Miriam 蜜莉恩 1 -232 Modesty 摩黛丝提 1 -233 Moira 茉伊拉 1 -234 Molly 茉莉 1 -235 Mona 梦娜 1 -236 Monica 莫妮卡 1 -237 Muriel 穆丽儿 1 -238 Myra 玛拉 1 -239 Myrna 蜜尔娜 1 -240 Nancy 南茜 1 -241 Natalie 娜特莉 1 -242 Natividad 娜提雅维达 1 -243 Nelly 内丽 1 -244 Nicola 妮可拉 1 -245 Nicole 妮可 1 -246 Nina 妮娜 1 -247 Nora 诺拉 1 -248 Norma 诺玛 1 -249 Novia 诺维雅 1 -250 Nydia 妮蒂亚 1 -251 Octavia 奥克塔薇尔 1 -252 Odelette 奥蒂列特 1 -253 Odelia 奥蒂莉亚 1 -254 Olga 欧尔佳 1 -255 Olive 奥丽芙 1 -256 Olivia 奥丽薇亚 1 -257 Ophelia 奥菲莉亚 1 -258 Pag 佩格 1 -259 Page 蓓姬 1 -260 Pamela 潘蜜拉 1 -261 Pandora 潘朵拉 1 -262 Patricia 派翠西亚 1 -263 Paula 赛拉 1 -264 Pearl 佩儿 1 -265 Penelope 潘娜洛普 1 -266 Penny 潘妮 1 -267 Phoebe 菲碧 1 -268 Phoenix 菲妮克丝 1 -269 Phyllis 菲丽丝 1 -270 Polly 珀莉 1 -271 Poppy 波比 1 -272 Prima 普莉玛 1 -273 Prudence 普鲁登斯 1 -274 Queena 昆娜 1 -275 Quintina 昆蒂娜 1 -276 Rachel 瑞琪儿 1 -277 Rae 瑞伊 1 -278 Rebecca 丽蓓卡 1 -279 Regina 蕾佳娜 1 -280 Renata 蕾娜塔 1 -281 Renee 蕾妮 1 -282 Rita 莉达 1 -283 Riva 莉娃 1 -284 Roberta 萝勃塔 1 -285 Rosalind 罗莎琳德 1 -286 Rose 罗丝 1 -287 Rosemary 露丝玛丽 1 -288 Roxanne 洛葛仙妮 1 -289 Ruby 露比 1 -290 Ruth 露丝 1 -291 Sabina 莎碧娜 1 -292 Sally 莎莉 1 -293 Sabrina 莎柏琳娜 1 -294 Salome 莎洛姆 1 -295 Samantha 莎曼撤 1 -296 Sandra 珊朵拉 1 -297 Sandy 仙蒂 1 -298 Sara 莎拉 1 -299 Sarah 赛拉 1 -300 Sebastiane 莎芭丝提妮 1 -301 Selena 萨琳娜 1 -302 Sharon 雪伦 1 -303 Sheila 希拉 1 -304 Sherry 雪莉 1 -305 Shirley 雪丽 1 -306 Sibyl 希贝儿 1 -307 Sigrid 西格莉德 1 -308 Simona 席梦娜 1 -309 Sophia 苏菲亚 1 -310 Spring 丝柏凌 1 -311 Stacey 史黛丝 1 -312 Setlla 丝特勒 1 -313 Stephanie 丝特芬妮 1 -314 Susan 苏珊 1 -315 Susanna 苏珊娜 1 -316 Susie 苏西 1 -317 Suzanne 苏珊 1 -318 Sylvia 西维亚 1 -319 Tabitha 泰贝莎 1 -320 Tammy 泰蜜 1 -321 Teresa 泰瑞莎 1 -322 Tess 泰丝 1 -323 Thera 席拉 1 -324 Theresa 泰丽莎 1 -325 Tiffany 蒂芙妮 1 -326 Tina 蒂娜 1 -327 Tobey 托比 1 -328 Tracy 翠西 1 -329 Trista 翠丝特 1 -330 Truda 杜达 1 -331 Ula 优拉 1 -332 Una 优娜 1 -333 Ursula 耳舒拉 1 -334 Valentina 范伦汀娜 1 -335 Valerie 瓦勒莉 1 -336 Vanessa 瓦妮莎 1 -337 Venus 维纳斯 1 -338 Vera 维拉 1 -339 Verna 维娜 1 -340 Veromca 维隆卡 1 -341 Veronica 维拉妮卡 1 -342 Victoria 维多利亚 1 -343 Vicky 维琪 1 -344 Viola 维尔拉 1 -345 Violet 维尔莉特 1 -346 Virginia 维吉妮亚 1 -347 Vita 维达 1 -348 Vivien 维文 1 -349 Wallis 华莉丝 1 -350 Wanda 旺妲 1 -351 Wendy 温蒂 1 -352 Winifred 温妮费德 1 -353 Winni 温妮 1 -354 Xanthe 桑席 1 -355 Xaviera 赛薇亚拉 1 -356 Xenia 芝妮雅 1 -357 Yedda 耶达 1 -358 Yetta 依耶塔 1 -359 Yvette 依耶芙特 1 -360 Yvonne 伊芳 1 -361 Zara 莎拉 1 -362 Zenobia 丽诺比丽 1 -363 Zoe 若伊 1 -364 Zona 若娜 1 -365 Zora 若拉 1 -366 Aaron 艾伦希伯 2 -367 Abbott 艾布特希伯 2 -368 Abel 亚伯 2 -369 Abner 艾布纳希 2 -370 Abraham 亚伯拉罕希 2 -371 Adair 亚岱尔 2 -372 Adam 亚当希 2 -373 Addison 艾狄生 2 -374 Adolph 阿道夫 2 -375 Adonis 亚度尼斯 2 -376 Adrian 亚德里恩 2 -377 Ahern 亚恒 2 -378 Alan 艾伦 2 -379 Albert 艾伯特 2 -380 Aldrich 奥德里奇 2 -381 Alexander 亚历山大 2 -382 Alfred 亚尔弗列得 2 -383 Alger 阿尔杰 2 -384 Algernon 阿尔杰农 2 -385 Allen 艾伦盖尔 2 -386 Alston 奥斯顿 2 -387 Alva 阿尔瓦 2 -388 Alvin 阿尔文 2 -389 Alvis 亚尔维斯 2 -390 Amos 亚摩斯 2 -391 Andre 安得烈 2 -392 Andrew 安德鲁 2 -393 Andy 安迪 2 -394 Angelo 安其罗 2 -395 Augus 安格斯 2 -396 Ansel 安斯艾 2 -397 Antony 安东尼 2 -398 Antoine 安东 2 -399 Antonio 安东尼奥 2 -400 Archer 阿奇尔 2 -401 Archibald 阿奇柏德 2 -402 Aries 亚力士 2 -403 Arlen 亚尔林 2 -404 Armand 亚尔曼 2 -405 Armstrong 阿姆斯特朗 2 -406 Arno 阿诺 2 -407 Arnold 阿诺德 2 -408 Arthur 亚瑟 2 -409 Arvin 艾文 2 -410 Asa 亚撒 2 -411 Ashbur 亚希伯 2 -412 Atwood 亚特伍德 2 -413 Aubrey 奥布里 2 -414 August 奥格斯格 2 -415 Augustine 奥古斯汀 2 -416 Avery 艾富里 2 -417 Baird 拜尔德 2 -418 Baldwin 柏得温 2 -419 Bancroft 班克罗福特 2 -420 Bard 巴德 2 -421 Barlow 巴罗 2 -422 Barnett 巴奈特 2 -423 Baron 巴伦 2 -424 Barret 巴里特 2 -425 Barry 巴里 2 -426 Bartholomew 巴萨罗穆 2 -427 Bart 巴特 2 -428 Barton 巴顿 2 -429 Bartley 巴特莱 2 -430 Basil 巴泽尔 2 -431 Beacher 比其尔 2 -432 Beau 宝儿 2 -433 Beck 贝克 2 -434 Ben 本 2 -435 Benedict 班尼迪克 2 -436 Benjamin 班杰明 2 -437 Bennett 班奈特 2 -438 Benson 班森 2 -439 Berg 柏格 2 -440 Berger 格吉尔 2 -441 Bernie 伯尼 2 -442 Bert 伯特 2 -443 Berton 伯顿 2 -444 Bertram 柏特莱姆 2 -445 Bevis 毕维斯 2 -446 Bill 比尔 2 -447 Bing 宾 2 -448 Bishop 毕夏普 2 -449 Blair 布雷尔 2 -450 Blake 布莱克 2 -451 Blithe 布莱兹 2 -452 Bob 鲍伯 2 -453 Booth 布兹 2 -454 Borg 柏格 2 -455 Boris 伯里斯 2 -456 Bowen 波文 2 -457 Boyce 柏宜斯 2 -458 Boyd 布德 2 -459 Bradley 布兰得利 2 -460 Brady 布莱迪 2 -461 Brandon 布兰登 2 -462 Brian 布莱恩 2 -463 Broderick 布拉得里克 2 -464 Brook 布鲁克 2 -465 Bruce 布鲁斯 2 -466 Bruno 布鲁诺 2 -467 Buck 巴克 2 -468 Burgess 伯骑士 2 -469 Burke 巴尔克 2 -470 Burnell 布尼尔 2 -471 Burton 波顿 2 -472 Byron 拜伦 2 -473 Caesar 凯撒 2 -474 Calvin 卡尔文 2 -475 Carey 凯里 2 -476 Carl 卡尔 2 -477 Carr 凯尔 2 -478 Carter 卡特 2 -479 Cash 凯希 2 -480 Cecil 塞西 2 -481 Cedric 赛得里克 2 -482 Chad 查德 2 -483 Channing 强尼 2 -484 Chapman 契布曼 2 -485 Charles 查理斯 2 -486 Chasel 夏佐 2 -487 Chester 贾斯特 2 -488 Christ 克莱斯特 2 -489 Christian 克里斯汀 2 -490 Christopher 克里斯多夫 2 -491 Clare 克雷尔 2 -492 Clarence 克拉伦斯 2 -493 Clark 克拉克 2 -494 Claude 克劳德 2 -495 Clement 克雷孟特 2 -496 Cleveland 克利夫兰 2 -497 Cliff 柯利福 2 -498 Clifford 柯利弗德 2 -499 Clyde 克莱得 2 -500 Colbert 考伯特 2 -501 Colby 考尔比 2 -502 Colin 科林 2 -503 Conrad 康拉德 2 -504 Corey 寇里 2 -505 Cornelius 康那理惟士 2 -506 Cornell 康奈尔 2 -507 Curitis 柯帝士 2 -508 Cyril 西瑞尔 2 -509 Dana 戴纳 2 -510 Daniel 丹尼尔 2 -511 Darcy 达尔西 2 -512 Darnell 达尼尔 2 -513 Darren 达伦 2 -514 Dave 迪夫 2 -515 David 大卫 2 -516 Dean 迪恩 2 -517 Dempsey 邓普斯 2 -518 Dennis 邓尼斯 2 -519 Derrick 戴里克 2 -520 Devin 得文 2 -521 Dick 狄克 2 -522 Dominic 多明尼 2 -523 Donahue 唐纳修 2 -524 Donald 唐纳德 2 -525 Douglas 道格拉斯盖尔 2 -526 Drew 杜鲁威尔 2 -527 Duke 杜克 2 -528 Duncan 邓肯 2 -529 Dunn 唐恩 2 -530 Dwight 德维特 2 -531 Dylan 狄伦 2 -532 Earl 额尔 2 -533 Ed 艾德 2 -534 Eden 伊登 2 -535 Edgar 爱德格 2 -536 Edmund 艾德蒙 2 -537 Edison 爱迪生 2 -538 Edward 爱德华 2 -539 Edwiin 爱德温 2 -540 Egbert 爱格伯特 2 -541 Eli 伊莱 2 -542 Elijah 易莱哲 2 -543 Elliot 伊里 2 -544 Ellis 艾理斯 2 -545 Elmer 爱尔玛 2 -546 Elroy 爱罗伊 2 -547 Elton 爱尔顿 2 -548 Elvis 艾维斯 2 -549 Emmanuel 爱曼纽 2 -550 Enoch 伊诺克 2 -551 Eric 艾利克 2 -552 Ernest 欧尼斯特 2 -553 Eugene 尤金 2 -554 Evan 尔文 2 -555 Everley 伊夫力 2 -556 Fabian 富宾恩 2 -557 Felix 菲力克斯 2 -558 Ferdinand 斐迪南 2 -559 Fitch 费奇 2 -560 Fitzgerald 费兹捷勒 2 -561 Ford 福特 2 -562 Francis 法兰西斯 2 -563 Frank 法兰克 2 -564 Franklin 法兰克林 2 -565 Frederic 弗雷得力克 2 -566 Gabriel 加布力尔 2 -567 Gale 加尔 2 -568 Gary 盖理 2 -569 Gavin 盖文 2 -570 Gene 吉恩 2 -571 Geoffrey 杰佛理 2 -572 Geoff 杰夫 2 -573 George 乔治 2 -574 Gerald 吉罗德 2 -575 Gilbert 吉伯特 2 -576 Giles 贾艾斯 2 -577 Glenn 葛兰 2 -578 Goddard 哥达 2 -579 Godfery 高德佛里 2 -580 Gordon 戈登 2 -581 Greg 葛列格 2 -582 Gregary 葛列格里 2 -583 Griffith 葛里菲兹威尔斯 2 -584 Grover 格罗佛 2 -585 Gustave 古斯塔夫 2 -586 Guy 盖 2 -587 Hale 霍尔 2 -588 Haley 哈利 2 -589 Hamiltion 汉米敦 2 -590 Hardy 哈帝 2 -591 Harlan 哈伦 2 -592 Harley 哈利 2 -593 Harold 哈乐德 2 -594 Harriet 哈里特 2 -595 Harry 哈里 2 -596 Harvey 哈威 2 -597 Hayden 海登 2 -598 Heather 海拾兹 2 -599 Henry 享利 2 -600 Herbert 赫伯特 2 -601 Herman 赫尔曼 2 -602 Hilary 希拉里 2 -603 Hiram 海勒 2 -604 Hobart 霍伯特 2 -605 Hogan 霍根 2 -606 Horace 哈瑞斯 2 -607 Howar 好尔德 2 -608 Hubery 休伯特 2 -609 Hugo 雨果 2 -610 Humphrey 韩弗理 2 -611 Hunter 汉特 2 -612 Hyman 海曼 2 -613 Ian 伊恩 2 -614 Ingemar 英格马 2 -615 Ingram 英格兰姆 2 -616 Ira 艾勒 2 -617 Isaac 艾萨克 2 -618 Isidore 伊西多 2 -619 Ivan 艾凡 2 -620 Ives 艾维斯 2 -621 Jack 杰克 2 -622 Jacob 雅各 2 -623 James 詹姆士 2 -624 Jared 杰瑞德 2 -625 Jason 杰森 2 -626 Jay 杰法 2 -627 Jeff 杰夫 2 -628 Jeffrey 杰佛瑞 2 -629 Jeremy 杰勒米 2 -630 Jerome 哲罗姆 2 -631 Jerry 杰理 2 -632 Jesse 杰西 2 -633 Jim 吉姆 2 -634 Jo 乔 2 -635 John 约翰 2 -636 Jonas 琼纳斯 2 -637 Jonathan 强纳生 2 -638 Joseph 约瑟夫 2 -639 Joshua 乔休尔 2 -640 Joyce 乔伊斯 2 -641 Julian 朱利安 2 -642 Julius 朱利尔斯 2 -643 Justin 贾斯丁 2 -644 Keith 基斯 2 -645 Kelly 凯利 2 -646 Ken 肯恩 2 -647 Kennedy 甘乃迪 2 -648 Kenneth 肯尼士 2 -649 Kent 肯特 2 -650 Kerr 科尔 2 -651 Kerwin 科尔温 2 -652 Kevin 凯文 2 -653 Kim 金姆 2 -654 King 金 2 -655 Kirk 科克盖尔 2 -656 Kyle 凯尔威尔斯 2 -657 Lambert 蓝伯特 2 -658 Lance 蓝斯 2 -659 Larry 劳瑞 2 -660 Lawrence 劳伦斯 2 -661 Leif 列夫 2 -662 Len 伦恩 2 -663 Lennon 蓝侬爱尔兰 2 -664 Leo 利奥 2 -665 Leonard 伦纳德 2 -666 Leopold 利奥波德 2 -667 Les 勒斯 2 -668 Lester 里斯特 2 -669 Levi 李维 2 -670 Lewis 路易斯 2 -671 Lionel 赖昂内尔 2 -672 Louis 路易士 2 -673 Lucien 陆斯恩 2 -674 Luther 路德 2 -675 Lyle 赖尔 2 -676 Lyndon 林顿 2 -677 Lynn 林恩 2 -678 Magee 麦基 2 -679 Malcolm 麦尔肯 2 -680 Mandel 曼德尔 2 -681 Marcus 马卡斯 2 -682 Marico 马里奥 2 -683 Mark 马克 2 -684 Marlon 马伦 2 -685 Marsh 玛希 2 -686 Marshall 马歇尔 2 -687 Martin 马丁 2 -688 Marvin 马文 2 -689 Matt 马特 2 -690 Matthew 马休 2 -691 Maurice 摩里斯 2 -692 Max 马克斯 2 -693 Maximilian 马克西米兰 2 -694 Maxwell 麦斯威尔 2 -695 Meredith 马勒第兹 2 -696 Merle 莫尔 2 -697 Merlin 莫林 2 -698 Michael 麦克 2 -699 Michell 米契尔 2 -700 Mick 密克 2 -701 Mike 麦克 2 -702 Miles 麦尔斯 2 -703 Milo 米路 2 -704 Monroe 门罗 2 -705 Montague 曼特裘 2 -706 Moore 莫尔 2 -707 Morgan 摩尔根 2 -708 Mortimer 摩帝马 2 -709 Morton 摩顿 2 -710 Moses 摩西 2 -711 Murphy 摩菲 2 -712 Murray 莫雷 2 -713 Myron 麦伦 2 -714 Nat 纳特 2 -715 Nathan 奈登 2 -716 Nathaniel 奈宝尼尔 2 -717 Neil 尼尔 2 -718 Nelson 尼尔森 2 -719 Newman 纽曼 2 -720 Nicholas 尼克勒斯 2 -721 Nick 尼克 2 -722 Nigel 奈哲尔 2 -723 Noah 诺亚 2 -724 Noel 诺尔 2 -725 Norman 诺曼 2 -726 Norton 诺顿 2 -727 Ogden 欧格登 2 -728 Oliver 奥利佛 2 -729 Omar 奥玛 2 -730 Orville 奥利尔 2 -731 Osborn 奥斯本 2 -732 Oscar 奥斯卡 2 -733 Osmond 奥斯蒙 2 -734 Oswald 奥斯维得 2 -735 Otis 奥狄斯 2 -736 Otto 奥特 2 -737 Owen 欧恩 2 -738 Page 裴吉 2 -739 Parker 派克 2 -740 Paddy 培迪 2 -741 Patrick 派翠克 2 -742 Paul 保罗 2 -743 Payne 派恩 2 -744 Perry 斐瑞 2 -745 Pete 皮特 2 -746 Peter 彼得 2 -747 Phil 菲尔希 2 -748 Philip 菲力浦 2 -749 Porter 波特 2 -750 Prescott 普莱斯考特 2 -751 Primo 普利莫 2 -752 Quentin 昆特 2 -753 Quennel 昆尼尔 2 -754 Quincy 昆西 2 -755 Quinn 昆 2 -756 Quintion 昆顿 2 -757 Rachel 雷契尔 2 -758 Ralap 雷尔夫 2 -759 Randolph 蓝道夫 2 -760 Raymond 雷蒙德 2 -761 Regan 里根 2 -762 Reginald 雷吉诺德 2 -763 Reuben 鲁宾 2 -764 Rex 雷克斯 2 -765 Richard 理查 2 -766 Robert 罗伯特 2 -767 Robin 罗宾 2 -768 Rock 洛克 2 -769 Rod 罗德 2 -770 Roderick 罗得里克 2 -771 Rodney 罗德尼 2 -772 Ron 罗恩 2 -773 Ronald 罗奈尔得 2 -774 Rory 罗里 2 -775 Roy 罗伊 2 -776 Rudolf 鲁道夫 2 -777 Rupert 鲁伯特 2 -778 Ryan 莱安 2 -779 Sam 山姆 2 -780 Sampson 辛普森 2 -781 Samuel 撒姆尔 2 -782 Sandy 山迪 2 -783 Saxon 撒克逊 2 -784 Scott 史考特 2 -785 Sean 肖恩 2 -786 Sebastian 夕巴斯汀 2 -787 Sid 锡德 2 -788 Sidney 锡得尼 2 -789 Silvester 席尔维斯特 2 -790 Simon 赛门 2 -791 Solomon 所罗门 2 -792 Stan 史丹 2 -793 Stanford 史丹佛 2 -794 Stanley 史丹尼 2 -795 Steven 史帝文 2 -796 Stev 史帝夫 2 -797 Steward 史都华德 2 -798 Tab 塔伯 2 -799 Taylor 泰勒 2 -800 Ted 泰德 2 -801 Ternence 泰伦斯 2 -802 Theobald 希尔保特 2 -803 Theodore 希欧多尔 2 -804 Thomas 托玛士 2 -805 Tiffany 帝福尼 2 -806 Tim 堤姆 2 -807 Timothy 帝摩斯 2 -808 Tobias 托拜西 2 -809 Toby 托比 2 -810 Todd 陶德 2 -811 Tom 汤姆 2 -812 Tony 汤尼拉丁 2 -813 Tracy 特瑞西 2 -814 Troy 特洛伊 2 -815 Truman 杜鲁门 2 -816 Tyler 泰勒 2 -817 Tyrone 泰伦 2 -818 Ulysses 尤里西斯 2 -819 Upton 阿普顿 2 -820 Uriah 尤莱亚 2 -821 Valentine 范伦铁恩 2 -822 Valentine 范伦丁 2 -823 Verne 佛能 2 -824 Vic 维克 2 -825 Victor 维克多 2 -826 Vincent 文森 2 -827 Virgil 维吉尔 2 -828 Vito 维托 2 -829 Vivian 卫维 2 -830 Wade 维德 2 -831 Walker 瓦尔克 2 -832 Walter 瓦尔特 2 -833 Ward 华德 2 -834 Warner 华纳 2 -835 Wayne 韦恩 2 -836 Webb 韦勃 2 -837 Webster 韦伯斯 2 -838 Wendell 温德尔 2 -839 Werner 韦纳尔 2 -840 Wilbur 韦尔伯 2 -841 Will 威尔 2 -842 William 威廉 2 -843 Willie 威利 2 -844 Winfred 威弗列德 2 -845 Winston 温士顿 2 -846 Woodrow 伍德洛 2 -847 Wordsworth 渥兹华斯 2 -848 Wright 莱特 2 -849 Wythe 伟兹 2 -850 Xavier 赛维尔 2 -851 Yale 耶鲁 2 -852 Yehudi 耶呼弟 2 -853 York 约克 2 -854 Yves 依夫 2 -855 Zachary 扎克利 2 -856 Zebulon 纪伯伦 2 \ No newline at end of file diff --git a/src/server/gamedata/config/RankData.txt b/src/server/gamedata/config/RankData.txt deleted file mode 100644 index 101b5a18..00000000 --- a/src/server/gamedata/config/RankData.txt +++ /dev/null @@ -1,18 +0,0 @@ -等级配置表 -Id lv exp reward -int int int string -等级编号 等级 经验 奖励 -1 1 20 "84,563" -2 2 30 101 -3 3 40 104 -4 4 50 "581,102,562" -5 5 60 "123,562,561" -6 6 70 "562,161,581" -7 7 80 "182,562,581" -8 8 90 "603,562,581" -9 9 100 "165,562,581" -10 10 110 "184,562,581" -11 11 120 "601,562,581" -12 12 130 "202,562,581" -13 13 140 "602,562,581" -14 14 150 null diff --git a/src/server/gamedata/config/SceneData.txt b/src/server/gamedata/config/SceneData.txt deleted file mode 100644 index 9087bc5e..00000000 --- a/src/server/gamedata/config/SceneData.txt +++ /dev/null @@ -1,9 +0,0 @@ -场景配置表 -Id SceneId AreaId Title Icon IconGray -int int int string string string -Id 场景 编号 标题 图片 灰图 -1 1 1 Home Makeover Area/merge_pic_bgcat -2 1 2 Pup's Place Area/merge_pic_bgdog Area/merge_pic_bgdog_gray -3 1 3 Kitchen Chaos Area/merge_pic_bgkitchen Area/merge_pic_bgkitchen_gray -4 1 4 Backyard Haven Area/merge_pic_bgyard Area/merge_pic_bgyard_gray -5 1 5 Paws in the Trees Area/merge_pic_bgtreehouse Area/merge_pic_bgtreehouse_gray diff --git a/src/server/gamedata/config/ShopItem.txt b/src/server/gamedata/config/ShopItem.txt deleted file mode 100644 index 9c04c007..00000000 --- a/src/server/gamedata/config/ShopItem.txt +++ /dev/null @@ -1,19 +0,0 @@ -商店商品表 -Id Group ObjId SellType SellPrice TotalCount -int string string string float int -Id 群组 合成Id 类型 价格 数量 -1 Time MergeId=561 Diamond 25 1 -2 Time MergeId=562 Ad 0 1 -3 Time MergeId=563 Free 0 1 -4 Sale RandomEmitId Diamond 0 1 -5 Sale RandomMergeId Diamond 0 5 -6 Sale RandomMergeId Diamond 0 5 -7 Sale RandomMergeId Diamond 0 5 -8 Sale RandomMergeId Diamond 0 5 -9 Sale RandomMergeId Diamond 0 5 -10 Diamond Diamond Dollar 1.99 100 -11 Diamond Diamond Dollar 4.99 260 -12 Diamond Diamond Dollar 9.99 580 -13 Diamond Diamond Dollar 19.99 1400 -14 Diamond Diamond Dollar 49.99 3900 -15 Diamond Diamond Dollar 99.99 8000 \ No newline at end of file diff --git a/src/server/gamedata/config/ShopPack.txt b/src/server/gamedata/config/ShopPack.txt deleted file mode 100644 index 44da7939..00000000 --- a/src/server/gamedata/config/ShopPack.txt +++ /dev/null @@ -1,9 +0,0 @@ -商店礼包表 -Id Title Content Price_Old Price_New Discount TotalCount -int string string float float float int -Id 标题 礼包内容 原价 售价 折扣 数量限制 -1 Shining Pack "563=1,Diamond=318" 6 2.99 0.5 3 -2 Daily Pack "581=1,562=2,Diamond=300" 6 2.99 0.5 3 -3 Weekly Pack "585=1,Diamond=360,Energy=360" 10 4.99 0.5 3 -4 Pet Pack "562=1,Diamond=80" 1.65 0.99 0.6 -1 -5 Lady Pack "562=10,Diamond=1650" 25 14.99 0.6 -1 diff --git a/src/server/gamedata/config/StartMerge.txt b/src/server/gamedata/config/StartMerge.txt deleted file mode 100644 index a8918c03..00000000 --- a/src/server/gamedata/config/StartMerge.txt +++ /dev/null @@ -1,67 +0,0 @@ -界面配置表 -Id MergeId Row Line Lock remark -int int int int int string -Id 合成Id 行 列 锁定状态 备注 -1 223 0 0 2 小麦制品3 -2 143 1 0 2 面包3 -3 284 2 0 2 蜂蜜4 -4 303 3 0 2 猫3 -5 142 4 0 2 面包2 -6 44 5 0 2 花草2 -7 283 6 0 2 蜂蜜3 -8 182 0 1 2 蜜蜂2 -9 144 1 1 2 面包4 -10 301 2 1 2 猫1 -11 63 3 1 2 橘子派3 -12 242 4 1 2 书籍2 -13 122 5 1 2 烤炉2 -14 226 6 1 2 小麦制品6 -15 241 0 2 2 书籍1 -16 6 1 2 2 咖啡6 -17 24 2 2 2 苏打4 -18 43 3 2 2 蛋糕3 -19 185 4 2 2 蜜蜂5 -20 42 5 2 2 蛋糕2 -21 261 6 2 2 玩具1 -22 161 0 3 2 书架1 -23 6 1 3 2 咖啡6 -24 3 2 3 2 咖啡3 -25 7 3 3 2 咖啡7 -26 41 4 3 2 蛋糕1 -27 23 5 3 2 苏打3 -28 4 6 3 2 香水1 -29 45 0 4 2 蛋糕5 -30 4 1 4 2 咖啡4 -31 81 2 4 0 茶具1 -32 81 3 4 0 茶具1 -33 2 4 4 2 咖啡2 -34 5 5 4 2 咖啡5 -35 124 6 4 2 烤炉4 -36 101 0 5 2 购物袋1 -37 3 1 5 2 咖啡3 -38 2 2 5 2 咖啡2 -39 82 3 5 1 茶具2 -40 83 4 5 2 茶具3 -41 6 5 5 2 咖啡6 -42 121 6 5 2 烤炉1 -43 103 0 6 2 购物袋3 -44 5 1 6 2 咖啡5 -45 21 2 6 2 苏打1 -46 5 3 6 2 咖啡5 -47 22 4 6 2 苏打2 -48 46 5 6 2 蛋糕6 -49 141 6 6 2 面包1 -50 144 0 7 2 面包4 -51 202 1 7 2 猫窝2 -52 102 2 7 2 购物袋2 -53 201 3 7 2 猫窝1 -54 181 4 7 2 蜜蜂1 -55 163 5 7 2 书架3 -56 222 6 7 2 小麦制品2 -57 45 0 8 2 香水6 -58 282 1 8 2 蜂蜜2 -59 6 2 8 2 花草1 -60 224 3 8 2 小麦制品4 -61 5 4 8 2 香水4 -62 162 5 8 2 书架2 -63 283 6 8 2 蜂蜜3 diff --git a/src/server/gamedata/config/StartOrder.txt b/src/server/gamedata/config/StartOrder.txt deleted file mode 100644 index 0d317f68..00000000 --- a/src/server/gamedata/config/StartOrder.txt +++ /dev/null @@ -1,27 +0,0 @@ -界面配置表 -Id merge_id_list fillCount -int string int -Id 合成Id数组 填充数量 -1 3 1 -2 8 1 -3 4 1 -4 6 1 -5 22 3 -6 23 1 -7 6 1 -8 25 1 -9 8 1 -10 5,45 3 -11 6,23 1 -12 44,42 1 -13 4,4,23 3 -14 44 1 -15 45,43 1 -16 47 1 -17 4 3 -18 44,46 1 -19 62 1 -20 24,6 1 -21 3 1 -22 46,4,23 1 -23 63,23 1 \ No newline at end of file diff --git a/src/server/gamedata/config/test.txt b/src/server/gamedata/config/test.txt deleted file mode 100644 index 1882154c..00000000 --- a/src/server/gamedata/config/test.txt +++ /dev/null @@ -1,4 +0,0 @@ -数字索引 字符串索引 数字类型 字符串类型 数组类型 嵌套数组 变长数组 结构体类型 map类型 -1 one 0 knife "[1, 2]" "[[0,1], [1,2], [2,3]]" "[1, 2, 3]" "{""name"": ""name5566"", ""num"": 1}" "{""key1"": 1, ""key2"": 2}" -2 two 0 cat "[3, 4]" "[[1,2], [2,3], [3,4]]" "[4, 5]" "{""name"": ""name5566"", ""num"": 2}" "{""key3"": 3, ""key4"": 4}" -3 three 0 book "[5, 6]" "[[2,3], [3,4], [4,5]]" [6] "{""name"": ""name5566"", ""num"": 3}" "{""key5"": 5, ""key6"": 6}" diff --git a/src/server/gamedata/configStruct.go b/src/server/gamedata/config_struct.go similarity index 100% rename from src/server/gamedata/configStruct.go rename to src/server/gamedata/config_struct.go diff --git a/src/server/main.go b/src/server/main.go index 0617485d..92ba76e1 100644 --- a/src/server/main.go +++ b/src/server/main.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "net/http" _ "net/http/pprof" "runtime/debug" @@ -27,7 +28,8 @@ func main() { // 启动 pprof(仅绑定本地) go func() { // 如果需要绑定所有接口改为 ":6060" - _ = http.ListenAndServe("127.0.0.1:6060", nil) + port := 6060 + conf.Server.ServerID + _ = http.ListenAndServe(fmt.Sprintf("127.0.0.1:%d", port), nil) }() leaf.Run( diff --git a/src/server/middleware/kafka/kafka.go b/src/server/middleware/kafka/kafka.go index d0f995e1..db7af4e7 100644 --- a/src/server/middleware/kafka/kafka.go +++ b/src/server/middleware/kafka/kafka.go @@ -36,7 +36,7 @@ func SendMsg(key, value []byte) error { Value: value, }) if err != nil { - log.Debug("WriteMessages err: %v", err) + //log.Debug("WriteMessages err: %v", err) } return err } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index acdf437d..7c6158c6 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -7,11 +7,12 @@ package msg import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( @@ -2628,11 +2629,11 @@ type ResPlayerBaseInfo struct { Guild int32 `protobuf:"varint,10,opt,name=guild,proto3" json:"guild,omitempty"` PackUnlockCount int32 `protobuf:"varint,11,opt,name=pack_unlock_count,json=packUnlockCount,proto3" json:"pack_unlock_count,omitempty"` LastPlayTime int32 `protobuf:"varint,12,opt,name=last_play_time,json=lastPlayTime,proto3" json:"last_play_time,omitempty"` - EnergyBuyCount int32 `protobuf:"varint,13,opt,name=EnergyBuyCount,proto3" json:"EnergyBuyCount,omitempty"` + Ban int64 `protobuf:"varint,13,opt,name=ban,proto3" json:"ban,omitempty"` UserName string `protobuf:"bytes,14,opt,name=user_name,json=userName,proto3" json:"user_name,omitempty"` LoginTime int32 `protobuf:"varint,15,opt,name=login_time,json=loginTime,proto3" json:"login_time,omitempty"` LogoutTime int32 `protobuf:"varint,16,opt,name=logout_time,json=logoutTime,proto3" json:"logout_time,omitempty"` - Todayolinetime int32 `protobuf:"varint,17,opt,name=todayolinetime,proto3" json:"todayolinetime,omitempty"` + Node int32 `protobuf:"varint,17,opt,name=node,proto3" json:"node,omitempty"` Rolecreatetime int32 `protobuf:"varint,18,opt,name=rolecreatetime,proto3" json:"rolecreatetime,omitempty"` EmitOrderCnt int32 `protobuf:"varint,19,opt,name=EmitOrderCnt,proto3" json:"EmitOrderCnt,omitempty"` NoAd int32 `protobuf:"varint,20,opt,name=NoAd,proto3" json:"NoAd,omitempty"` @@ -2758,9 +2759,9 @@ func (x *ResPlayerBaseInfo) GetLastPlayTime() int32 { return 0 } -func (x *ResPlayerBaseInfo) GetEnergyBuyCount() int32 { +func (x *ResPlayerBaseInfo) GetBan() int64 { if x != nil { - return x.EnergyBuyCount + return x.Ban } return 0 } @@ -2786,9 +2787,9 @@ func (x *ResPlayerBaseInfo) GetLogoutTime() int32 { return 0 } -func (x *ResPlayerBaseInfo) GetTodayolinetime() int32 { +func (x *ResPlayerBaseInfo) GetNode() int32 { if x != nil { - return x.Todayolinetime + return x.Node } return 0 } @@ -13300,14 +13301,14 @@ type ResFriendPlayerSimple struct { Login int32 `protobuf:"varint,7,opt,name=login,proto3" json:"login,omitempty"` Loginout int32 `protobuf:"varint,8,opt,name=loginout,proto3" json:"loginout,omitempty"` Facebook string `protobuf:"bytes,9,opt,name=Facebook,proto3" json:"Facebook,omitempty"` - Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情; - AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间; - Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间; - Playroom map[int32]int32 `protobuf:"bytes,13,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id; - DressSet map[int32]int32 `protobuf:"bytes,14,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id; - Friend []int32 `protobuf:"varint,15,rep,packed,name=Friend,proto3" json:"Friend,omitempty"` // 好友列表; - Last *ActLog `protobuf:"bytes,16,opt,name=Last,proto3" json:"Last,omitempty"` // 最后一次动态; - Physiology map[int32]int32 `protobuf:"bytes,17,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 生理状态 位置 =》 状态; + Emoji map[int32]int32 `protobuf:"bytes,10,rep,name=Emoji,proto3" json:"Emoji,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 表情 + AddTime int64 `protobuf:"varint,11,opt,name=AddTime,proto3" json:"AddTime,omitempty"` // 添加时间 + Interact int64 `protobuf:"varint,12,opt,name=Interact,proto3" json:"Interact,omitempty"` // 最后一次互动的时间 + Playroom map[int32]int32 `protobuf:"bytes,13,rep,name=Playroom,proto3" json:"Playroom,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 空间装饰 位置 =》 装饰id + DressSet map[int32]int32 `protobuf:"bytes,14,rep,name=DressSet,proto3" json:"DressSet,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 服装装饰 位置 =》 服装id + Friend []int32 `protobuf:"varint,15,rep,packed,name=Friend,proto3" json:"Friend,omitempty"` // 好友列表 + Last *ActLog `protobuf:"bytes,16,opt,name=Last,proto3" json:"Last,omitempty"` // 最后一次动态 + Physiology map[int32]int32 `protobuf:"bytes,17,rep,name=Physiology,proto3" json:"Physiology,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` // 生理状态 位置 =》 状态 PetName string `protobuf:"bytes,18,opt,name=PetName,proto3" json:"PetName,omitempty"` //宠物名字; unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -15365,7 +15366,7 @@ type ResFriendReplyHandle struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg,omitempty"` - LogId int32 `protobuf:"varint,3,opt,name=LogId,proto3" json:"LogId,omitempty"` // 时间线id; + LogId int32 `protobuf:"varint,3,opt,name=LogId,proto3" json:"LogId,omitempty"` // 时间线id Type int32 `protobuf:"varint,4,opt,name=Type,proto3" json:"Type,omitempty"` // 回复类型 1:处理 2:删除 3:查看; ErrType FRIEND_REPLY_HANDLE_ERR_TYPE `protobuf:"varint,5,opt,name=ErrType,proto3,enum=tutorial.FRIEND_REPLY_HANDLE_ERR_TYPE" json:"ErrType,omitempty"` // 错误类型; unknownFields protoimpl.UnknownFields @@ -15753,7 +15754,7 @@ func (x *ResFriendApplyNotify) GetTime() int32 { type ResFriendReplyNotify struct { state protoimpl.MessageState `protogen:"open.v1"` - Info *ResFriendLog `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` + Info *ResFriendReply `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 1:打招呼 2:被打招呼; Time int32 `protobuf:"varint,3,opt,name=Time,proto3" json:"Time,omitempty"` unknownFields protoimpl.UnknownFields @@ -15790,7 +15791,7 @@ func (*ResFriendReplyNotify) Descriptor() ([]byte, []int) { return file_proto_Gameapi_proto_rawDescGZIP(), []int{259} } -func (x *ResFriendReplyNotify) GetInfo() *ResFriendLog { +func (x *ResFriendReplyNotify) GetInfo() *ResFriendReply { if x != nil { return x.Info } @@ -26153,12 +26154,12 @@ func (x *ResCatnip) GetFriendList() []*CatnipInvite { // 小游戏信息 type CatnipGame struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id; - Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束; - Progress int32 `protobuf:"varint,3,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度; - Reward []int32 `protobuf:"varint,4,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 已领取进度奖励列表 [1,2,3]; - Partner *ResPlayerSimple `protobuf:"bytes,5,opt,name=Partner,proto3" json:"Partner,omitempty"` // 伙伴; - Emoji int32 `protobuf:"varint,6,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情id; + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id + Status int32 `protobuf:"varint,2,opt,name=Status,proto3" json:"Status,omitempty"` // 0 未开始 1 进行中 2 已结束 + Progress int32 `protobuf:"varint,3,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度 + Reward []int32 `protobuf:"varint,4,rep,packed,name=Reward,proto3" json:"Reward,omitempty"` // 已领取进度奖励列表 [1,2,3] + Partner *ResPlayerSimple `protobuf:"bytes,5,opt,name=Partner,proto3" json:"Partner,omitempty"` // 伙伴 + Emoji int32 `protobuf:"varint,6,opt,name=Emoji,proto3" json:"Emoji,omitempty"` // 表情id SendEmoji int32 `protobuf:"varint,7,opt,name=SendEmoji,proto3" json:"SendEmoji,omitempty"` // 发送的表情id FriendProgress int32 `protobuf:"varint,8,opt,name=FriendProgress,proto3" json:"FriendProgress,omitempty"` // 好友进度; unknownFields protoimpl.UnknownFields @@ -27717,7 +27718,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "ResultCode\x18\x01 \x01(\x05R\n" + "ResultCode\")\n" + "\x11ReqPlayerBaseInfo\x12\x14\n" + - "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\"\x93\x06\n" + + "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\"\xe9\x05\n" + "\x11ResPlayerBaseInfo\x12\x14\n" + "\x05dwUin\x18\x01 \x01(\x03R\x05dwUin\x12\x16\n" + "\x06energy\x18\x02 \x01(\x05R\x06energy\x12\x12\n" + @@ -27732,14 +27733,14 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x05guild\x18\n" + " \x01(\x05R\x05guild\x12*\n" + "\x11pack_unlock_count\x18\v \x01(\x05R\x0fpackUnlockCount\x12$\n" + - "\x0elast_play_time\x18\f \x01(\x05R\flastPlayTime\x12&\n" + - "\x0eEnergyBuyCount\x18\r \x01(\x05R\x0eEnergyBuyCount\x12\x1b\n" + + "\x0elast_play_time\x18\f \x01(\x05R\flastPlayTime\x12\x10\n" + + "\x03ban\x18\r \x01(\x03R\x03ban\x12\x1b\n" + "\tuser_name\x18\x0e \x01(\tR\buserName\x12\x1d\n" + "\n" + "login_time\x18\x0f \x01(\x05R\tloginTime\x12\x1f\n" + "\vlogout_time\x18\x10 \x01(\x05R\n" + - "logoutTime\x12&\n" + - "\x0etodayolinetime\x18\x11 \x01(\x05R\x0etodayolinetime\x12&\n" + + "logoutTime\x12\x12\n" + + "\x04node\x18\x11 \x01(\x05R\x04node\x12&\n" + "\x0erolecreatetime\x18\x12 \x01(\x05R\x0erolecreatetime\x12\"\n" + "\fEmitOrderCnt\x18\x13 \x01(\x05R\fEmitOrderCnt\x12\x12\n" + "\x04NoAd\x18\x14 \x01(\x05R\x04NoAd\x12,\n" + @@ -28736,9 +28737,9 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x14ResFriendApplyNotify\x121\n" + "\x06Player\x18\x01 \x01(\v2\x19.tutorial.ResPlayerSimpleR\x06Player\x12\x12\n" + "\x04Type\x18\x02 \x01(\x05R\x04Type\x12\x12\n" + - "\x04Time\x18\x03 \x01(\x05R\x04Time\"j\n" + - "\x14ResFriendReplyNotify\x12*\n" + - "\x04info\x18\x01 \x01(\v2\x16.tutorial.ResFriendLogR\x04info\x12\x12\n" + + "\x04Time\x18\x03 \x01(\x05R\x04Time\"l\n" + + "\x14ResFriendReplyNotify\x12,\n" + + "\x04info\x18\x01 \x01(\v2\x18.tutorial.ResFriendReplyR\x04info\x12\x12\n" + "\x04Type\x18\x02 \x01(\x05R\x04Type\x12\x12\n" + "\x04Time\x18\x03 \x01(\x05R\x04Time\"6\n" + "\x0eReqApplyFriend\x12\x10\n" + @@ -30590,7 +30591,7 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 2, // 153: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE 2, // 154: tutorial.ResFriendTReward.Code:type_name -> tutorial.RES_CODE 233, // 155: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple - 236, // 156: tutorial.ResFriendReplyNotify.info:type_name -> tutorial.ResFriendLog + 264, // 156: tutorial.ResFriendReplyNotify.info:type_name -> tutorial.ResFriendReply 2, // 157: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE 2, // 158: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE 233, // 159: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple diff --git a/src/server/pay/google.go b/src/server/pay/google.go deleted file mode 100644 index 5eb6a64a..00000000 --- a/src/server/pay/google.go +++ /dev/null @@ -1,109 +0,0 @@ -package pay - -import ( - "crypto/tls" - "encoding/json" - "fmt" - "io" - "net/http" - "net/url" - "time" -) - -var ( - PackageName = "com.DefaultCompany.PetHomeMergeStory" //包名 - GrantType = "refresh_token" - ClientId = "757279522891-nrfqc345ng13d92br5cd579e1k7f2jsj.apps.googleusercontent.com" //客户端id - ClientSecret = "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" //客户端秘钥 - RefreshToken = "1//0ewdqw7P83uNRCgYIARAAGA4SNwF-L9IreCVIYzd-6T5Cz0J-UoAqdbGL7AmB849q_YKy7CbvJIjmvwQelezgs1utmU4nDI4_kWU" //RefreshToken,上面第二步获取的 -) - -const ( - PAY_STATUS_SUCCESS = 1 - PAY_STATUS_FAIL = 0 -) - -type TokenInfo struct { - AccessToken string `json:"access_token"` - ExpiresIn int `json:"expires_in"` - Scope string `json:"scope"` - TokenType string `json:"token_type"` -} - -type OrderInfo struct { - Kind string `json:"kind"` - PurchaseTimeMillis string `json:"purchaseTimeMillis"` // 支付时间, 毫秒 - PurchaseState int `json:"purchaseState"` // 是否付费: 0 已支付, 1 取消 - ConsumptionState int `json:"consumptionState"` // 是否被消费: 0 未消费, 1 已消费 - DeveloperPayload string `json:"developerPayload"` // 开发者透传参数 - OrderId string `json:"orderId"` // 谷歌订单号 - AcknowledgementState int `json:"acknowledgementState"` // 支付类型: 0 测试, 1 真实 -} - -// 获取token凭证 -func PostRefreshToken() (*TokenInfo, error) { - client := &http.Client{ - Timeout: 10 * time.Second, - } - - var resp *http.Response - var err error - for i := 0; i < 3; i++ { // 重试3次 - resp, err = client.PostForm("https://accounts.google.com/o/oauth2/token", url.Values{ - "grant_type": {GrantType}, - "client_id": {ClientId}, - "client_secret": {ClientSecret}, - "refresh_token": {RefreshToken}, - }) - if err == nil { - break - } - fmt.Printf("PostToken attempt %d failed: %v\n", i+1, err) - time.Sleep(2 * time.Second) // 等待2秒后重试 - } - if err != nil { - return nil, fmt.Errorf("PostToken err:%v", err) - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - fmt.Println("PostToken body err:", err) - } - fmt.Println("token:", string(body)) - info := new(TokenInfo) - err = json.Unmarshal(body, &info) - if err != nil { - return nil, fmt.Errorf("PostToken Unmarshal err:%v", err) - } - fmt.Println("token info:", info) - return info, nil -} - -// 获取订单信息 -func GetOrder(productId, token, accessToken string) (*OrderInfo, error) { - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - Certificates: []tls.Certificate{}, - }, - }, - } - resp, err := client.Get("https://www.googleapis.com/androidpublisher/v3/applications/" + - PackageName + "/purchases/products/" + productId + "/tokens/" + token + "?access_token=" + accessToken + "") - if err != nil { - return nil, fmt.Errorf("GetOrder err:%v", err) - } - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - if err != nil { - fmt.Println("GetOrder body err:", err) - } - fmt.Println("GetOrder:", string(body)) - info := new(OrderInfo) - err = json.Unmarshal(body, &info) - if err != nil { - return nil, fmt.Errorf("GetOrder Unmarshal err:%v", err) - } - fmt.Println("GetOrder info:", info) - return info, nil -} diff --git a/src/server/pkg/github.com/name5566/leaf/leaf.go b/src/server/pkg/github.com/name5566/leaf/leaf.go index fe75877b..b7ad1ac6 100644 --- a/src/server/pkg/github.com/name5566/leaf/leaf.go +++ b/src/server/pkg/github.com/name5566/leaf/leaf.go @@ -3,10 +3,10 @@ package leaf import ( "os" "os/signal" - "server/GoUtil" mergeCluster "server/cluster" sconf "server/conf" "server/game" + GoUtil "server/game_util" "server/gamedata" "server/pkg/github.com/name5566/leaf/cluster" "server/pkg/github.com/name5566/leaf/conf" diff --git a/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go b/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go index 42b15f86..2b25178b 100644 --- a/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go +++ b/src/server/pkg/github.com/name5566/leaf/network/tcp_server.go @@ -2,6 +2,7 @@ package network import ( "net" + "server/conf" "server/pkg/github.com/name5566/leaf/log" "sync" "time" @@ -83,7 +84,9 @@ func (server *TCPServer) run() { return } tempDelay = 0 - + if conf.Server.ServerType == "center" { + log.Debug("accept connection from %v", conn.RemoteAddr()) + } server.mutexConns.Lock() if len(server.conns) >= server.MaxConnNum { server.mutexConns.Unlock() diff --git a/src/server/sql/Merge_Pet.sql b/src/server/sql/Merge_Pet.sql new file mode 100644 index 00000000..4b73f620 --- /dev/null +++ b/src/server/sql/Merge_Pet.sql @@ -0,0 +1,148 @@ +/*==============================================================*/ +/* Database name: sg_gamedb */ +/* DBMS name: MySQL 5.5.17 */ +/* Created on: 2014-10-16 10:00:00 */ +/*==============================================================*/ + +create database if not exists % database % CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +use % database %; + +-- ---------------------------- +-- Table structure for db_version 版本号,每次更新数据库要改这个地方 +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `db_version` ( + `version_2018_02_06_13` int unsigned NOT NULL COMMENT 'version' +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '数据库版本号'; + +/*==============================================================*/ +/* Table: t_account 账号表 */ +/*==============================================================*/ +CREATE TABLE IF NOT EXISTS t_account ( + `user_name` varchar(50) NOT NULL, + `user_password` varchar(128) NOT NULL, + `login_time` int unsigned DEFAULT '0' COMMENT '上次登录时间', + `logout_time` int unsigned DEFAULT '0' COMMENT '上次下线时间', + `ip_address` char(24) DEFAULT '' COMMENT '上次登录的ip地址', + `gm_level` int DEFAULT '0' COMMENT 'gm等级', + `platform` varchar(50) DEFAULT '' COMMENT '平台', + `is_online` int unsigned DEFAULT '0' COMMENT '角色是否在线', + `channel` varchar(50) DEFAULT '' COMMENT '渠道号', + `device_id` varchar(256) DEFAULT '' COMMENT '是否为刷榜账号', + `auto_id` bigint NOT NULL auto_increment COMMENT '自增id', + PRIMARY KEY (`auto_id`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '账号密码对照表'; + +/*==============================================================*/ +/* Table: t_gameserver GameServer表 */ +/*==============================================================*/ +CREATE TABLE IF NOT EXISTS t_gameserver ( + `id` int unsigned COMMENT '服务器id', + `start_time` int unsigned COMMENT '开服时间', + `close_time` int unsigned COMMENT '关服时间', + `is_close` int unsigned COMMENT '是否关服', + primary key (`id`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '服务器设置'; + +-- ---------------------------- +-- Table structure for t_player_baseinfo +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `t_player_baseinfo` ( + `dwUin` bigint unsigned NOT NULL COMMENT '对应玩家account表中的dwUin', + `energy` int unsigned NOT NULL DEFAULT '0' COMMENT '能量', + `star` int unsigned NOT NULL DEFAULT '0' COMMENT '星星', + `recover_time` int unsigned NOT NULL DEFAULT '0' COMMENT '能量开始恢复时间', + `diamond` int unsigned NOT NULL DEFAULT '1' COMMENT '钻石', + `level` int unsigned NOT NULL DEFAULT '0' COMMENT '玩家等级', + `exp` int unsigned zerofill NOT NULL DEFAULT '0' COMMENT '玩家经验', + `start_order_id` varchar(50) DEFAULT NULL COMMENT '配置订单进度', + `music_code` int unsigned NOT NULL DEFAULT '0' COMMENT '音效状态码改为GUID免费改名状态', + `guild` int unsigned NOT NULL DEFAULT '0' COMMENT '引导进度 ', + `pack_unlock_count` int unsigned NOT NULL DEFAULT '0' COMMENT '背包解锁数量', + `last_play_time` int NOT NULL DEFAULT '0' COMMENT '广告能量购买时间', + `EnergyBuyCount` int NOT NULL DEFAULT '0' COMMENT '能量购买次数', + `user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '玩家账号', + `nick_name` varchar(50) NOT NULL DEFAULT '' COMMENT '玩家昵称', + `login_time` int unsigned NOT NULL DEFAULT '0' COMMENT '上次登录时间', + `logout_time` int unsigned NOT NULL DEFAULT '0' COMMENT '上次下线时间', + `todayolinetime` int unsigned NOT NULL DEFAULT '0' COMMENT '当天的累计在线时间', + `rolecreatetime` int unsigned NOT NULL DEFAULT '0' COMMENT '注册帐号时间', + `EmitOrderCnt` int unsigned NOT NULL DEFAULT '0' COMMENT '注册帐号时间', + `DailyRenewTime` int unsigned NOT NULL DEFAULT '0' COMMENT '注册帐号时间', + `NoAd` int unsigned NOT NULL DEFAULT '0' COMMENT '注册帐号时间', + `ChampshipsGroupID` int unsigned NOT NULL DEFAULT '0' COMMENT '注册帐号时间', + `LastChampGroupID` int unsigned NOT NULL DEFAULT '0' COMMENT '注册帐号时间', + `FaceBookId` varchar(128) DEFAULT '' COMMENT '玩家账号', + PRIMARY KEY (`dwUin`), + KEY `nick_name` (`nick_name`), + KEY `user_name` (`user_name`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '存储玩家基本信息'; + +/*==============================================================*/ +/* Table: t_player_data 玩家模块表 */ +/*==============================================================*/ +CREATE TABLE IF NOT EXISTS t_player_mod ( + `dwUin` bigint unsigned COMMENT '玩家uid', + `mData` blob DEFAULT NULL COMMENT '数据', + `updateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', + primary key (`dwUin`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '玩家模块表'; + +/*==============================================================*/ +/* Table: t_player_data 玩家订单表 */ +/*==============================================================*/ +CREATE TABLE IF NOT EXISTS t_player_charge ( + `id` bigint unsigned AUTO_INCREMENT COMMENT '订单id', + `Uid` bigint unsigned NOT NULL COMMENT '玩家id', + `OrderId` varchar(128) DEFAULT '' COMMENT '订单号', + `ProductId` int unsigned NOT NULL DEFAULT '0' COMMENT '商品id', + `ProductName` varchar(128) DEFAULT '' COMMENT '商品名称', + `ProductDesc` varchar(128) DEFAULT '' COMMENT '商品描述', + `Price` float NOT NULL DEFAULT '0' COMMENT '价格', + `Currency` varchar(128) DEFAULT '' COMMENT '货币', + `CreateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', + `PayTime` int unsigned NOT NULL DEFAULT '0' COMMENT '支付时间', + `PayStatus` int unsigned NOT NULL DEFAULT '0' COMMENT '支付状态 0 未支付 1 已支付 2 支付失败 3 已发货', + `PayType` int unsigned NOT NULL DEFAULT '0' COMMENT '支付类型', + `PayPlatform` varchar(128) DEFAULT '' COMMENT '支付平台', + `PayChannel` varchar(128) DEFAULT '' COMMENT '支付渠道', + `PayChannelOrderId` varchar(512) DEFAULT '' COMMENT '支付渠道订单号', + `PayChannelUserId` varchar(128) DEFAULT '' COMMENT '支付渠道用户id', + `PayChannelExtra` varchar(128) DEFAULT '' COMMENT '支付渠道额外信息', + primary key (`id`) +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '玩家订单表'; + +-- ---------------------------- +-- Table structure for system_mail_info +-- ---------------------------- +CREATE TABLE IF NOT EXISTS `system_mail_info` ( + `mail_id` bigint NOT NULL AUTO_INCREMENT COMMENT '邮件ID', + `title` varchar(128) DEFAULT "" COMMENT '邮件标题', + `subTitle` varchar(128) DEFAULT "" COMMENT '邮件子标题', + `content` varchar(2048) DEFAULT "" COMMENT '邮件内容', + `title_en` varchar(128) DEFAULT "" COMMENT '英文邮件标题', + `subTitle_en` varchar(128) DEFAULT "" COMMENT '英文邮件子标题', + `content_en` varchar(2048) DEFAULT "" COMMENT '英文邮件内容', + `title_ptbr` varchar(128) DEFAULT "" COMMENT '葡萄牙邮件标题', + `subTitle_ptbr` varchar(128) DEFAULT "" COMMENT '葡萄牙邮件子标题', + `content_ptbr` varchar(2048) DEFAULT "" COMMENT '葡萄牙邮件内容', + `items` varchar(2048) DEFAULT "{}" COMMENT '邮件附件', + `start_time` int unsigned NOT NULL DEFAULT '0' COMMENT '开始时间', + `register_time` int unsigned NOT NULL DEFAULT '0' COMMENT '注册时间', + `end_time` int unsigned NOT NULL DEFAULT '0' COMMENT '结束时间', + `mail_type` int unsigned NOT NULL DEFAULT '0' COMMENT '邮件类型', + `send_type` int unsigned NOT NULL DEFAULT '0' COMMENT '发送类型', + `to_uids` varchar(2048) DEFAULT "" COMMENT '发送者ID', + `create_time` int unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', + PRIMARY KEY (`mail_id`) +) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '系统邮件'; + +/*==============================================================*/ +/* Table: t_player_data 系统模块表 */ +/*==============================================================*/ +CREATE TABLE IF NOT EXISTS t_server_mod ( + `id` int NOT NULL AUTO_INCREMENT primary key, + `key` varchar(128) DEFAULT '' COMMENT '模块key', + `mData` mediumblob DEFAULT NULL COMMENT '数据', + `updateTime` int unsigned NOT NULL DEFAULT '0' COMMENT '更新时间' +) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci COMMENT = '系统模块表'; \ No newline at end of file diff --git a/src/server/test/order_test.go b/src/server/test/order_test.go new file mode 100644 index 00000000..456bc06d --- /dev/null +++ b/src/server/test/order_test.go @@ -0,0 +1,22 @@ +package test + +import ( + "fmt" + orderCfg "server/conf/order" + "server/game" + "server/game/mod/order" + "testing" +) + +func TestOrderStart(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("test") + game.G_GameLogicPtr.SetPlayer(p1) + ChessMod := p1.GetChessMod() + DecorateMod := p1.GetDecorateMod() + merge_id := []int{64, 249} + order_facotry := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + star := order.GetOrderStar(merge_id, ChessMod.GetStarEmitList()) + star = int(float64(star)*float64(order_facotry)/1000+0.5) * 10 + fmt.Printf("star is %d", star) +}