diff --git a/src/server/GoUtil/feishu.go b/src/server/GoUtil/feishu.go index e6f65480..32aecfe2 100644 --- a/src/server/GoUtil/feishu.go +++ b/src/server/GoUtil/feishu.go @@ -12,6 +12,7 @@ import ( const ( FEISHU_WEBHOOK = "https://gadmin.bywaystudios.com/api/feishu/notify" + FEISHU_ORDER = "https://gadmin.bywaystudios.com/api/feishu/notify/order" ) // AAqFpbuPhFSEx @@ -55,6 +56,46 @@ func SendFeishuFatal(PlayerId int, FuncName string, msg string) error { return nil } +func SendFeishuOrder(PlayerId int, OrderId string, Price float64, ProductName string, PayTime, VerityTime int64) error { + // 创建请求体 + + payload := map[string]interface{}{ + "UID": PlayerId, + "OrderId": OrderId, + "Product": String(Price), + "ProductName": ProductName, + "EventRecovery": time.Unix(PayTime, 0).Format("2006-01-02 15:04:05"), + "EventAge": time.Unix(VerityTime, 0).Format("2006-01-02 15:04:05"), + } + + payloadBytes, err := json.Marshal(payload) + if err != nil { + return err + } + + // 创建HTTP请求 + req, err := http.NewRequest("POST", FEISHU_ORDER, bytes.NewBuffer(payloadBytes)) + if err != nil { + return err + } + req.Header.Set("Content-Type", "application/json") + + // 发送请求 + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + // 检查响应状态码 + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("failed to send message, status code: %d", resp.StatusCode) + } + + return nil +} + func SendFeishuMsg2(msg string) error { // 创建请求体 payload := map[string]interface{}{ diff --git a/src/server/GoUtil/randUtil.go b/src/server/GoUtil/randUtil.go index a2dcf220..80e5ec4d 100644 --- a/src/server/GoUtil/randUtil.go +++ b/src/server/GoUtil/randUtil.go @@ -7,7 +7,7 @@ import ( func RandMap(d map[int]int) int { if len(d) == 0 { - return -1 + return 0 } total := 0 for _, v := range d { @@ -26,7 +26,7 @@ func RandMap(d map[int]int) int { } // 如果没有找到,返回一个默认值 - return -1 + return 0 } func RandStringMap(d map[string]int) string { diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index a84132aa..194db286 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -160,6 +160,17 @@ func PopElemSlice(s []int, Id int) ([]int, bool) { return s, false } +func PopStringElemSlice(s0 []string, Id string) ([]string, bool) { + s := make([]string, len(s0)) + copy(s, s0) + for k, v := range s { + if v == Id { + return append(s[0:k], s[k+1:]...), true + } + } + return s, false +} + func ElemInSlice(s []int, Id int) bool { for _, v := range s { if v == Id { diff --git a/src/server/conf/guideTask/GuideTaskCfg.go b/src/server/conf/guideTask/GuideTaskCfg.go index afe2cd18..19a4255a 100644 --- a/src/server/conf/guideTask/GuideTaskCfg.go +++ b/src/server/conf/guideTask/GuideTaskCfg.go @@ -1,6 +1,7 @@ package GuideTaskCfg import ( + "server/GoUtil" "server/game/mod/item" "server/gamedata" "server/pkg/github.com/name5566/leaf/log" @@ -42,6 +43,13 @@ func GetTaskActive(Id int) int { } return gamedata.GetIntValue(data, "Active") } +func GetUnlock(Id int) int { + data, err := gamedata.GetDataByIntKey(GUIDE_TASK_TASK, Id) + if err != nil { + return 0 + } + return gamedata.GetIntValue(data, "Unlock") +} func GetActiveReward(Id int) ([]*item.Item, int) { data, err := gamedata.GetDataByIntKey(GUIDE_TASK_ACTIVE, Id) @@ -50,6 +58,23 @@ func GetActiveReward(Id int) ([]*item.Item, int) { } return gamedata.GetItemList(data, "Items"), gamedata.GetIntValue(data, "Active") } +func GetActiveReward2(reward []int, Active int) []*item.Item { + data, err := gamedata.GetData(GUIDE_TASK_ACTIVE) + if err != nil { + return nil + } + for k, v := range data { + active := gamedata.GetIntValue(v, "Active") + if active < Active { + continue + } + if GoUtil.InArray(GoUtil.Int(k), reward) { + continue + } + return gamedata.GetItemList(v, "Items") + } + return nil +} func GetUnlockLv() int { data, err := gamedata.GetDataByKey(GUIDE_TASK_CONST, "UnlockLv") diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index dc33ca16..5f2d79cf 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -194,6 +194,21 @@ func GetEmitRetire(Id string) int { return gamedata.GetIntValue(data, "Retire") } +func GetEmitProductNumByColor(Id string) int { + data, err := gamedata.GetData(CFG_MERGE_EMIT) + if err != nil { + log.Debug("GetEmitProductNumByColor GetOne Id:%v not found", Id) + return 0 + } + for _, v := range data { + ColorList := strings.Split(gamedata.GetStringValue(v, "Product_Type"), ",") + if GoUtil.InStringArray(Id, ColorList) { + return len(strings.Split(gamedata.GetStringValue(v, "Product_Type"), ",")) + } + } + return 0 +} + // 根据Id获取棋子类型 func GetTypeById(Id int) string { data, err := gamedata.GetDataByIntKey(CFG_NAME, Id) @@ -377,7 +392,29 @@ func GetHighSourceChestItem() []*item.Item { r = append(r, item.NewItem(item.ITEM_ENERGY_ID, B4)) return r } - +func DynamicLevRev(Lv int, EmitId int, Color string) int { + data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId) + if err != nil { + log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId) + return Lv + } + DynamicLv := gamedata.GetStringValue(data, "Dynamic") + if DynamicLv == "" { + return Lv + } + Arr := strings.Split(DynamicLv, ",") + for _, v := range Arr { + Arr2 := strings.Split(v, "=") + if len(Arr2) != 2 { + continue + } + if Color == Arr2[0] { + NewLv, _ := strconv.Atoi(Arr2[1]) + return Lv + NewLv + } + } + return Lv +} func DynamicLev(Lv int, EmitId int, Color string) int { data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId) if err != nil { diff --git a/src/server/conf/order/orderCfg.go b/src/server/conf/order/orderCfg.go index 3cf90b24..85f90e49 100644 --- a/src/server/conf/order/orderCfg.go +++ b/src/server/conf/order/orderCfg.go @@ -13,6 +13,7 @@ const ( CFG_START_ORDER = "StartOrder" CFG_CONST = "OrderConst" CFG_ORDER_SCENE = "OrderScene" + CFG_ORDER_K = "OrderK" ) func init() { @@ -22,6 +23,18 @@ func init() { gamedata.InitCfg(CFG_START_ORDER) gamedata.InitCfg(CFG_CONST) gamedata.InitCfg(CFG_ORDER_SCENE) + gamedata.InitCfg(CFG_ORDER_K) +} + +func GetOrderK(Lv int) int { + data, err := gamedata.GetDataByIntKey(CFG_ORDER_K, Lv) + if err != nil { + return 0 + } + Energy := gamedata.GetIntValue(data, "Energy") + K := gamedata.GetFloatValue(data, "K") + a := float64(Energy)*K/10 + 0.5 + return int(a) * 10 } func GetOrderFactor(Scene int) int { @@ -81,6 +94,14 @@ func GetOrderNum(Level int) int { return 0 } +func GetStartOrderInfo(Id int) (int, int) { + data, err := gamedata.GetDataByIntKey(CFG_START_ORDER, Id) + if err != nil { + return -1, -1 + } + return gamedata.GetIntValue(data, "group"), gamedata.GetIntValue(data, "step") +} + func GetStartOrderList() []*gamedata.StartOrderData { ret := make([]*gamedata.StartOrderData, 0) data, err := gamedata.GetData(CFG_START_ORDER) @@ -95,6 +116,8 @@ func GetStartOrderList() []*gamedata.StartOrderData { Appear: gamedata.GetStringValue(v, "appear"), Preview: gamedata.GetStringValue(v, "preview"), Items: gamedata.GetItemList(v, "reward"), + Group: gamedata.GetIntValue(v, "group"), + Step: gamedata.GetIntValue(v, "step"), }) } sort.Slice(ret, func(i, j int) bool { diff --git a/src/server/conf/user/UserData.go b/src/server/conf/user/UserData.go index 1c4f6985..465681a9 100644 --- a/src/server/conf/user/UserData.go +++ b/src/server/conf/user/UserData.go @@ -65,6 +65,38 @@ func GetLevUpExp(lv int) (int, int) { return gamedata.GetIntValue(data, "Exp"), gamedata.GetIntValue(data, "PExp") } +func GetNewLevUpExp(lv int, Exp int, PetExt int) (int, int) { + ExpLv := lv + PetLv := lv + for { + data1, err := gamedata.GetDataByIntKey(CFG_NAME, ExpLv) + if err != nil { + break + } + ExpNeed := gamedata.GetIntValue(data1, "Exp") + if Exp >= ExpNeed { + Exp -= ExpNeed + ExpLv++ + } else { + break + } + } + for { + data2, err := gamedata.GetDataByIntKey(CFG_NAME, PetLv) + if err != nil { + break + } + PetNeed := gamedata.GetIntValue(data2, "PExp") + if PetExt >= PetNeed { + PetExt -= PetNeed + PetLv++ + } else { + break + } + } + return ExpLv, PetLv +} + // 获取能量回复时间 func GetRecover(lv int) int { data, err := gamedata.GetDataByIntKey(CFG_NAME, lv) diff --git a/src/server/game/Gm.go b/src/server/game/Gm.go index fdaecd51..a7c9f159 100644 --- a/src/server/game/Gm.go +++ b/src/server/game/Gm.go @@ -199,7 +199,7 @@ func ReqGmCommand_(player *Player, Command string) error { EnergyMul := player.PlayMod.getBaseMod().GetEnergyMul() OrderMod := player.PlayMod.getOrderMod() OrderMod.LastOrder.Type = 1 - OrderMod.CreateOrder(Lv, EmitList, EnergyMul) + OrderMod.CreateOrder(Lv, EmitList, EnergyMul, order.Common_type) player.PushClientRes(player.PlayMod.getOrderMod().BackData()) case "resetCardReq": CardMod := player.PlayMod.getCardMod() diff --git a/src/server/game/Player.go b/src/server/game/Player.go index b8d580f3..09cd8732 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -279,6 +279,8 @@ func (p *Player) InitPlayer(UserName string) error { ChargeMod := p.PlayMod.getChargeMod() ChessMod := p.PlayMod.getChessMod() ChargeMod.FixBug(ChessMod.GetEmitList()) + p.FixOrderBug() + return nil } diff --git a/src/server/game/PlayerBaseMod.go b/src/server/game/PlayerBaseMod.go index df922074..04e0c630 100644 --- a/src/server/game/PlayerBaseMod.go +++ b/src/server/game/PlayerBaseMod.go @@ -537,9 +537,12 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) player.TeLog("level_up", map[string]interface{}{ "after_level": BaseMod.Level, }) + NewExpLv, NewPetLv := userCfg.GetNewLevUpExp(BaseMod.Level, BaseMod.Exp, BaseMod.PExp) player.TeLog("property_level_up", map[string]interface{}{ "property_level": BaseMod.Level, "property_level_reward": userCfg.GetUnlock(int(BaseMod.Level)), + "story_level": NewExpLv, + "pet_level": NewPetLv, }) player.HandleInUserRank() } @@ -550,6 +553,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error) } } EmitRetireTrigger2(player) + player.InitOrderItem() player.PushClientRes(p.BackAsset()) return upLv, nil } diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index 474024e8..7e07467a 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -105,6 +105,7 @@ func (p *PlayerChessData) UpdatePlayerChessData(player *Player, buf []byte) erro ChessMod.ChessMap = update.MChessData Update := OrderMod.CreateExtraOrder(AddChessList, AddNewEmit, ChessMod.GetUnlockChessList(), BaseMod.GetEnergyMul(), BaseMod.GetLevel()) if Update { + player.InitOrderItem() player.PushClientRes(OrderMod.BackData()) } return nil @@ -283,6 +284,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa } player.QuestTriggerList(TriggerList) EmitRetireTrigger1(player) + player.InitOrderItem() player.PushClientRes(ChessMod.BackData()) player.PlayMod.save() return AddChessList, AddNewEmit, nil @@ -313,18 +315,22 @@ func checkChess(ChessId, EnergyMul int, Emit []int) bool { break } } - _, Max := getChesslvRange(EmitId, EnergyMul) + _, Max := getChesslvRange(EmitId, EnergyMul, false) Adjust := mergeDataCfg.GetAdjust(EmitId, ChessIdColor) return ChessIdLv > Max-Adjust } - -func getChesslvRange(Emit int, EnergyMul int) (int, int) { +func getChesslvRange(Emit int, EnergyMul int, IsCharge bool) (int, int) { RandEmitLv := mergeDataCfg.GetLvById(Emit) EmitId := mergeDataCfg.GetEmitId(Emit) RandMaxLv := mergeDataCfg.GetMaxLvById(Emit) RandEmitMinLv := mergeDataCfg.GetEmitMinLvById(EmitId) Ratio := mergeDataCfg.GetEmitRatio(EmitId) m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100) + if IsCharge { + m += 10 + } + m = max(1, m) + m = min(100, m) ChessMinLev := orderCfg.GetLvMin(EnergyMul) ChessMaxLev := orderCfg.GetLvMax(EnergyMul, m) return ChessMinLev, ChessMaxLev diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index 63f2bbcc..3990af14 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -75,7 +75,7 @@ func handle(p *Player, m *msg.Msg) error { PlayroomBackData(p) p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, - "add_type": "invite add friend", + "add_type": "发起申请", }) p.PlayMod.save() case msg.HANDLE_TYPE_INVITE_FRIEND: // 邀请好友 @@ -103,7 +103,10 @@ func handle(p *Player, m *msg.Msg) error { p.PushClientRes(CardMod.NotifyCard()) p.PushClientRes(CardMod.NotifyTimes()) case msg.HANDLE_TYPE_EX_CARD_TIMEOUT: // B收到A同意置换卡牌超时 - CardInfo := m.Extra.(card.CardInfo) + CardInfo, ok := m.Extra.(card.CardInfo) + if !ok { + return nil + } CardMod := p.PlayMod.getCardMod() p.AddCard(CardInfo.ExId) p.PushClientRes(CardMod.NotifyCard()) @@ -209,7 +212,7 @@ func handle(p *Player, m *msg.Msg) error { Extra := m.Extra.([]int) p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", Extra[0], Extra[1]), m.SendT) case msg.HANDLE_TYPE_TREASURE_RESULT: // # 好友宝藏结果 - p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT) + //p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT) case msg.HANDLE_TYPE_MAIL: // 邮件操作 SyncMailMsg(p) case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了 @@ -264,9 +267,16 @@ func handle(p *Player, m *msg.Msg) error { if m.Extra != nil { Items = m.Extra.([]*item.Item) } + p.AddLog(m.From, friend.LOG_TYPE_TREASURE_HELP, "", m.SendT) p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String()) case msg.HANDLE_TYPE_HANDBOOK_COLLECTION: // 图鉴收集奖励 - data := m.Extra.(msg.HandbookMsg) + if m.Extra != nil { + return nil + } + data, ok := m.Extra.(msg.HandbookMsg) + if !ok { + return nil + } p.AddLog(m.From, friend.LOG_TYPE_HANDBOOK, data.Type, m.SendT) case msg.HANDLE_TYPE_HANDBOOK_UPVOTE: // 图鉴点赞 FriendMod := p.PlayMod.getFriendMod() @@ -402,7 +412,7 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error { PlayroomBackData(p) p.TeLog("friend_add", map[string]interface{}{ "player_id": m.From, - "add_type": "agree", + "add_type": "接受申请", }) p.AddLog(m.From, friend.LOG_TYPE_FRIEND_BECOME, "", m.SendT) case msg.HANDLE_TYPE_DEL: // 删除好友 @@ -881,7 +891,7 @@ func EmitRetireTrigger2(p *Player) { } NeedFinishOrder := false - Produce := mergeDataCfg.GetEmitProduce(k) + Produce := mergeDataCfg.GetEmitOrderProduce(k) for _, v1 := range Produce { if _, ok := AllChess[v1]; ok { NeedFinishOrder = true @@ -988,7 +998,131 @@ func (player *Player) GetPetOrderItemExp() int { return playroomCfg.GetPetOrderItemExpByList(itemList) } -func (player *Player) FormatOrderReward() { +// 触发生成新的固定订单 +func (player *Player) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) error { + OrderMod := player.PlayMod.getOrderMod() + TriggerOrderList := orderCfg.GetStartOrderList() + FixedOrder := 0 + for _, v := range OrderMod.OrderList { + if v.Type == order.Fixed_type { + FixedOrder++ + } + } + OrderList := make(map[int]order.Order, len(OrderMod.OrderList)) + for k, v := range OrderMod.OrderList { + OrderList[k] = v + } + // 触发生成新的固定订单 + for _, v := range TriggerOrderList { + if GoUtil.InArray(v.Id, OrderMod.FinishOrder) { + continue + } + orderInfo, exists := OrderList[v.Id] + if exists && v.Preview == "" { + continue + } + // 预览条件不为空且未存在且未完成 + if v.Preview != "" && !exists && !GoUtil.InArray(v.Id, OrderMod.FinishOrder) { + if OrderMod.CheckCondition(lv, v.Preview, Type, Emit, FixedOrder, OrderList) { + OrderMod.AddFixOrder(v.Id, v.MergeList, order.Preview_type, v.Items) + player.TeLog("preset_order_birth", map[string]interface{}{ + "order_id": v.Id, + "order_item_id": v.MergeList, + "preset_order_group": v.Group, + "preset_order_step": v.Step, + }) + } + } + if v.Appear != "" { + if OrderMod.CheckCondition(lv, v.Appear, Type, Emit, FixedOrder, OrderList) { + Type := order.Fixed_type + OrderType := orderCfg.GetOrderType(v.Id) + if OrderType != 0 { + Type = OrderType + } + if exists { + orderInfo.Type = order.Fixed_type + OrderMod.OrderList[v.Id] = orderInfo + } else { + OrderMod.AddFixOrder(v.Id, v.MergeList, Type, v.Items) + if v.Id == 78 { + OrderMod.Retire("D") + OrderMod.AutoEmit = append(OrderMod.AutoEmit, "D") + } + if v.Id == 79 { + OrderMod.Retire("I") + OrderMod.AutoEmit = append(OrderMod.AutoEmit, "I") + } + } + } + } + } + return nil +} +func (player *Player) AddOrder() { + BaseMod := player.PlayMod.getBaseMod() + OrderMod := player.PlayMod.getOrderMod() + ChessMod := player.PlayMod.getChessMod() + MaxOrderNum := orderCfg.GetOrderNum(BaseMod.GetLevel()) + n := 0 + if OrderMod.LastOrder.Type == order.Preheat_type { + ChessId := OrderMod.LastOrder.MergeId[0] + ChessColor := mergeDataCfg.GetColorById(ChessId) + PreheatStep := OrderMod.PreheatStep[ChessColor] + OrderMod.PreheatStep[ChessColor]++ + if PreheatStep < 4 { + NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+PreheatStep+1, ChessColor) + Items, ok := order.PreheatItems[OrderMod.PreheatStep[ChessColor]] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} + } + OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) + } + } + for _, v := range OrderMod.OrderList { + if v.Type == order.Common_type || v.Type == order.Pet_type || v.Type == order.Part_type || v.Type == order.Fixed_type || v.Type == order.Preview_type { + n++ + } + } + for i := n; i < MaxOrderNum; i++ { + player.CreateNormalOrder() + } +} + +func (player *Player) FixOrderBug() { + OrderMod := player.PlayMod.getOrderMod() + BaseMod := player.PlayMod.getBaseMod() + ChessMod := player.PlayMod.getChessMod() + for k, v := range OrderMod.PreheatStep { + if v > 4 { + continue + } + Exit := false + for _, o := range OrderMod.OrderList { + if o.Type != order.Preheat_type { + continue + } + Color := mergeDataCfg.GetColorById(o.MergeId[0]) + if Color == k { + Exit = true + break + } + + } + if Exit { + continue + } + NewChessId := mergeDataCfg.GetChessIdByLvAndColor(BaseMod.GetEnergyMul()+v+1, k) + OrderMod.PreheatStep[k]++ + Items, ok := order.PreheatItems[OrderMod.PreheatStep[k]] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, order.GetOrderStar([]int{NewChessId}, ChessMod.GetOrderEmit()))} + } + OrderMod.AddPreheatOrder([]int{NewChessId}, order.DIFF_LOW, order.Preheat_type, Items) + } +} + +func (player *Player) CreateNormalOrder() { Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel()) BaseMod := player.PlayMod.getBaseMod() DecorateMod := player.PlayMod.getDecorateMod() @@ -997,33 +1131,47 @@ func (player *Player) FormatOrderReward() { ExpCoin := (Exp-BaseMod.GetExp())*decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId()) - BaseMod.GetStar() PExpCoin := (PExp-BaseMod.GetPExp())*50 - player.GetPetOrderItemExp() OrderMod := player.PlayMod.getOrderMod() - if ExpCoin > PExpCoin || BaseMod.GetLevel() < 17 { + + // 预热订单 + + // 安慰订单 + Now := GoUtil.Now() + if OrderMod.LastOrder.Type == order.COMFORT_TYPE && Now < int64(OrderMod.ComfortEndTime) { + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.COMFORT_TYPE) for k, v := range OrderMod.GetOrderList() { - if len(v.Items) != 0 { - continue + if k == OrderMod.Auto_id { + if v.Type != order.COMFORT_TYPE { + continue + } + Items := make([]*item.Item, 0) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 + v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) + OrderMod.OrderList[k] = v } - if v.Type != order.Common_type { - continue - } - Star := order.GetOrderStar(v.MergeId) - Star = int(float64(Star)*float64(OrderFactor)/10) * 10 - v.Items = append(v.Items, &item.Item{ - Id: item.ITEM_STAR_ID, - Num: Star, - }) - OrderMod.OrderList[k] = v } - } else { + return + } + + PetTrigger := true + for _, v := range OrderMod.GetOrderList() { + if v.Type == order.Pet_type { + PetTrigger = false + break + } + } + if PExpCoin > ExpCoin && PetTrigger && BaseMod.GetLevel() >= 17 { + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Pet_type) for k, v := range OrderMod.GetOrderList() { if len(v.Items) != 0 { continue } - if v.Type != order.Common_type { + if v.Type != order.Pet_type { continue } Items := make([]*item.Item, 0) - Star := order.GetOrderStar(v.MergeId) - Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) + Star = int(float64(Star)*float64(OrderFactor)/1000) * 10 Items = player.GetPetOrderReward(Star, Items) if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { v.Type = order.Common_type @@ -1033,7 +1181,45 @@ func (player *Player) FormatOrderReward() { v.Items = Items OrderMod.OrderList[k] = v } + return } + // if ExpCoin > PExpCoin || BaseMod.GetLevel() < 17 { + // for k, v := range OrderMod.GetOrderList() { + // if len(v.Items) != 0 { + // continue + // } + // if v.Type != order.Common_type { + // continue + // } + // Star := order.GetOrderStar(v.MergeId) + // Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + // v.Items = append(v.Items, &item.Item{ + // Id: item.ITEM_STAR_ID, + // Num: Star, + // }) + // OrderMod.OrderList[k] = v + // } + // } else { + // for k, v := range OrderMod.GetOrderList() { + // if len(v.Items) != 0 { + // continue + // } + // if v.Type != order.Common_type { + // continue + // } + // Items := make([]*item.Item, 0) + // Star := order.GetOrderStar(v.MergeId) + // Star = int(float64(Star)*float64(OrderFactor)/10) * 10 + // Items = player.GetPetOrderReward(Star, Items) + // if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID { + // v.Type = order.Common_type + // } else { + // v.Type = order.Pet_type + // } + // v.Items = Items + // OrderMod.OrderList[k] = v + // } + // } // 触发式订单 满足条件生成零件订单 PartCost := DecorateMod.GetPartCost() @@ -1050,22 +1236,38 @@ func (player *Player) FormatOrderReward() { Trigger2 = true } } - if Trigger && Trigger2 { + if Trigger && Trigger2 && BaseMod.GetLevel() >= 12 { + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Part_type) for k, v := range OrderMod.GetOrderList() { - if v.Type != order.Common_type && v.Type != order.Pet_type { - continue + if v.Type == order.Part_type { + v.Items = []*item.Item{item.NewItem(item.ITEM_LAUNCHER_ID, 2)} + OrderMod.OrderList[k] = v } - if v.Diff == order.DIFF_LOW { - continue - } - v.Items = []*item.Item{item.NewItem(item.ITEM_LAUNCHER_ID, 2)} - v.Type = order.Part_type - OrderMod.OrderList[k] = v - break } + return + } + OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) + +} +func (player *Player) InitOrderItem() { + OrderMod := player.PlayMod.getOrderMod() + DecorateMod := player.PlayMod.getDecorateMod() + ChessMod := player.PlayMod.getChessMod() + OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + for k, v := range OrderMod.GetOrderList() { + if v.Type == order.Super_type { + continue + } + if len(v.Items) != 0 { + continue + } + Items := make([]*item.Item, 0) + Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) + Star = int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 + v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star}) + OrderMod.OrderList[k] = v } } - func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item { OrderItem := playroomCfg.GetOrderItem(Star) type sortData struct { @@ -1194,3 +1396,98 @@ func (p *Player) GetPetThiefReward(Target int) error { p.HandleItem([]*item.Item{{Id: ItemId, Num: 1}}, proto.ITEM_POP_LABEL_PetTheif.String()) return nil } + +// 高级产物订单 +func (p *Player) AddHighOrder() { + OrderMod := p.PlayMod.getOrderMod() + BaseMod := p.PlayMod.getBaseMod() + ChessMod := p.PlayMod.getChessMod() + LastChess := OrderMod.LastOrder.MergeId[len(OrderMod.LastOrder.MergeId)-1] + maxId := 0 + for k := range OrderMod.GetOrderList() { + maxId = max(maxId, k) + } + if maxId == 0 || BaseMod.GetLevel() < 12 { + return + } + NewChess := OrderMod.GetOrderList()[maxId].MergeId[0] + LastColor := mergeDataCfg.GetColorById(LastChess) + NewColor := mergeDataCfg.GetColorById(NewChess) + LastEmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), LastColor) + AddNewEmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), NewColor) + Product := []string{} + Product = append(Product, mergeDataCfg.GetEmitProduceType(LastEmitId)...) + Product = append(Product, mergeDataCfg.GetEmitProduceType(AddNewEmitId)...) + ChessMap := make(map[string]int, 0) + ChessList := ChessMod.GetUnlockChessList() + for _, v := range ChessList { + ChessType := mergeDataCfg.GetTypeById(v) + if ChessType != "Product" { + continue + } + Color := mergeDataCfg.GetColorById(v) + if GoUtil.InStringArray(Color, Product) { + continue + } + if v > ChessMap[Color] { + ChessMap[Color] = v + } + } + + for Color, ChessId := range ChessMap { + EmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), Color) + _, ChessMaxLv := getChesslvRange(EmitId, BaseMod.GetEnergyMul(), OrderMod.IsCharge) + NewLev2 := mergeDataCfg.DynamicLev(ChessMaxLv, EmitId, Color) + NewLev3 := order.AdjustLev(NewLev2, BaseMod.GetEnergyMul()) + ChessLv := mergeDataCfg.GetLvById(ChessId) + if NewLev3 >= ChessLv { + continue + } + Add := true + for _, v := range OrderMod.GetOrderList() { + if GoUtil.InArray(ChessId, v.MergeId) { + Add = false + } + } + if Add { + OrderMod.AddExtraOrder([]int{ChessId}) + return + } + } +} + +// 高级产物订单 +func (p *Player) AddHighOrder2() { + OrderMod := p.PlayMod.getOrderMod() + ChessMod := p.PlayMod.getChessMod() + ChessList := ChessMod.GetUnlockChessList() + ChessMap := make(map[int]int, 0) + for _, v := range ChessList { + Lv := mergeDataCfg.GetLvById(v) + MaxLv := mergeDataCfg.GetMaxLvById(v) + if Lv != MaxLv { + continue + } + Type := mergeDataCfg.GetTypeById(v) + if Type != "Product" { + continue + } + ChessMap[v]++ + } + for ChessId, Num := range ChessMap { + if Num < 3 { + continue + } + add := true + for _, v := range OrderMod.GetOrderList() { + if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) { + add = false + break + } + } + if add { + OrderMod.AddExtraOrder([]int{ChessId, ChessId, ChessId}) + return + } + } +} diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index bf935dad..e377079f 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -10,10 +10,12 @@ import ( collectCfg "server/conf/collect" decorateCfg "server/conf/decorate" emojiCfg "server/conf/emoji" + GuideTaskCfg "server/conf/guideTask" handbookCfg "server/conf/handbook" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" miningCfg "server/conf/mining" + orderCfg "server/conf/order" playroomCfg "server/conf/playroom" "server/db" "server/game/internal" @@ -144,7 +146,8 @@ func RegSetEneryFunc(player *Player, buf []byte) error { Emit := player.PlayMod.getChessMod().GetOrderEmit() ChessList := player.PlayMod.getChessMod().GetUnlockChessList() OrderMod.ChangeEnergyMul(Lv, Emit, int(req.EnergyMul), ChessList) - player.FormatOrderReward() + player.InitOrderItem() + player.PlayMod.save() player.PushClientRes(OrderMod.BackData()) player.PushClientRes(player.PlayMod.getBaseMod().BackData()) return nil @@ -338,6 +341,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { if OrderType != order.Preview_type && OrderType != order.Fixed_type { preset_order_group = -1 } + preset_order_group, preset_order_step := orderCfg.GetStartOrderInfo(int(req.OrderId)) player.TeLog("order_finish", map[string]interface{}{ "order_id": int(req.OrderId), "order_item_id": mergeList, @@ -346,6 +350,7 @@ func ReqRewardOrder(player *Player, buf []byte) error { "order_item_reward": order_item_reward, "order_star_value": Star, "preset_order_group": preset_order_group, + "preset_order_step": preset_order_step, }) player.PetItemGetLog(Item, nil, "Order") EmitRetireTrigger2(player) @@ -360,15 +365,28 @@ func ReqRewardOrder(player *Player, buf []byte) error { // OrderMod.CreateOrderSeed(NewOrder) // } OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) - player.FormatOrderReward() + player.AddOrder() + player.AddHighOrder() + player.AddHighOrder2() + player.InitOrderItem() // 存钱罐增加钻石 PiggyBankMod := player.PlayMod.getPiggyBankMod() PiggyBankMod.Trigger() // 锦标赛增加积分 if player.GetPlayerBaseMod().GetLevel() >= 17 { + ChessList := make([]int, 0) + for _, v := range mergeList { + color := mergeDataCfg.GetColorById(v) + Emit := order.GetEmitByColor(ChessMod.GetStarEmitList(), color) + EmitType := mergeDataCfg.GetEmitType(Emit) + if EmitType == "auto" { + continue + } + ChessList = append(ChessList, v) + } ChampshipMod := player.PlayMod.getChampshipMod() - ChampshipMod.AddScore(mergeList) + ChampshipMod.AddScore(ChessList) player.HandleInChampshipRank() } FriendTreasureMod := player.PlayMod.getFriendTreasureMod() @@ -633,6 +651,7 @@ func ReqGetChessFromBuff(player *Player, buf []byte) error { } triggerComposeChess(player, ChessId, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList()) EmitRetireTrigger1(player) + player.InitOrderItem() player.PlayMod.save() player.PushClientRes(ChessMod.BackData()) player.PushClientRes(&msg.ResGetChessFromBuff{ @@ -743,6 +762,7 @@ func ReqTakeChessOutBag(player *Player, buf []byte) error { "bag_id": req.BagId, "chess_id": ChessId, }) + player.InitOrderItem() player.PlayMod.save() player.PushClientRes(ChessMod.BackData()) player.PushClientRes(&msg.ResTakeChessOutBag{ @@ -1213,7 +1233,7 @@ func ReqGetDailyTaskReward(player *Player, buf []byte) error { "task_id": int(req.Id), "item_list": itemList, "task_type": "daily", - "task_score_reward": 0, + "task_score_reward": DailyTaskMod.GetWeekReward2(), }) return nil } @@ -1287,9 +1307,11 @@ func ReqGetGuideTaskReward(player *Player, buf []byte) error { }) return err } - player.TeLog("ReqGetGuideTaskReward", map[string]interface{}{ - "task_id": int(req.Id), - "item_list": itemList, + player.TeLog("new_player_task", map[string]interface{}{ + "task_id": int(req.Id), + "item_list": itemList, + "task_gruop": GuideTaskCfg.GetUnlock(int(req.Id)), + "task_score_reward": GuideTaskCfg.GetActiveReward2(GuideTaskMod.Reward, GuideTaskMod.Active), }) player.PlayMod.save() player.PushClientRes(GuideTaskMod.BackData()) @@ -1702,10 +1724,6 @@ func ReqApplyFriend(player *Player, buf []byte) error { BaseMod := player.PlayMod.getBaseMod() PlayroomMod.AddRoomPointInvite(BaseMod.GetLevel()) PlayroomBackData(player) - player.TeLog("friend_add", map[string]interface{}{ - "player_id": Uid, - "add_type": "apply", - }) return nil } @@ -1737,7 +1755,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error { }) player.TeLog("friend_add", map[string]interface{}{ "player_id": Uid, - "add_type": "agree", + "add_type": "接受申请", }) player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now()) FriendApplyBackData(player) @@ -3027,7 +3045,7 @@ func ReqAutoAddInviteFriend(player *Player, buf []byte) error { PlayroomBackData(player) player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, - "add_type": "invite add friend", + "add_type": "邀请注册", }) return nil } @@ -3068,7 +3086,7 @@ func ReqAutoAddInviteFriend2(player *Player, buf []byte) error { PlayroomBackData(player) player.TeLog("friend_add", map[string]interface{}{ "player_id": req.Id, - "add_type": "invite add friend", + "add_type": "邀请注册", }) return nil } @@ -3078,7 +3096,7 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error { proto.Unmarshal(buf, req) LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod() BaseMod := player.PlayMod.getBaseMod() - Items, EventName, slot_order_number, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy()) + Items, EventType, OrderNum, RewardList, err := LimitedTimeEventMod.SelectProgressReward(int(req.Id), BaseMod.GetLevel(), BaseMod.GetEnergy()) if err != nil { player.SendErrClienRes(&msg.ResSelectLimitEvent{ Code: msg.RES_CODE_FAIL, @@ -3095,9 +3113,9 @@ func ReqSelectLimitEvent(player *Player, buf []byte) error { return err } player.TeLog("time_limited_slot", map[string]interface{}{ - "slot_order_number": slot_order_number, - "slot_reward_list": EventName, - "slot_reward": EventName, + "slot_order_number": OrderNum, + "slot_reward_list": RewardList, + "slot_reward": limitedTimeEventCfg.GetEventName(EventType), }) player.PlayMod.save() player.PushClientRes(LimitedTimeEventMod.BackData()) @@ -3917,9 +3935,10 @@ func ReqPlayroomTask(player *Player, buf []byte) error { }) return err } + Type := playroomCfg.GetDailyTaskType(int(req.Id)) player.TeLog("room_daily_task", map[string]interface{}{ "task_id": req.Id, - "is_reward": PlayroomMod.DailyTaskCanReward(int(req.Id)), + "is_reward": PlayroomMod.DailyTaskCanReward(Type), }) player.PlayMod.save() player.PushClientRes(&msg.ResPlayroomTask{ @@ -4193,15 +4212,16 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { return err } for _, v := range FriendTreasureMod.List { - if v.Status != 1 { - continue + ItemNum := 0 + if v.Status == 1 { + ItemNum = FriendItemNum } G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{ From: int(player.M_DwUin), To: int(v.Uid), Type: MsqMod.FRIEND_TREASURE_HANDLE, SendT: GoUtil.Now(), - Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, FriendItemNum)}, + Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)}, }) } err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendtreasureEnd.String()) @@ -4219,7 +4239,9 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error { "pet_treasure_box": FriendTreasureMod.BoxItems, "pet_treasure_reward": append(Items, FriendTreasureMod.BoxItems...), }) + FriendTreasureMod.ResetGame() player.PlayMod.save() + player.PushClientRes(FriendTreasureMod.BackData()) player.PushClientRes(&msg.ResFriendTreasureEnd{ Code: msg.RES_CODE_SUCCESS, }) diff --git a/src/server/game/Trigger.go b/src/server/game/Trigger.go index 55e52ef4..30e71db5 100644 --- a/src/server/game/Trigger.go +++ b/src/server/game/Trigger.go @@ -114,6 +114,10 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify支付校验异常", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token)) log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId) return + } else { + if conf.Server.GameName == "Merge_Pet_online" { + GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, req.ProduceId, OrderData.PayTime, GoUtil.Now()) + } } log.Debug("[order verify success] Uid:%d;OrderSn:%s;PayOrder:%s;Token:%s", player.M_DwUin, OrderData.OrderId, OrderData.PayChannelOrderId, req.Token) player.lock.Lock() @@ -133,8 +137,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) { SendCharge(player, OrderExtraData) } OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP - OrderData.PayChannelOrderId = req.Token - OrderData.ProductDesc = req.ProduceId + OrderData.ProductName = req.ProduceId db.UpdatePlayerChargeData(OrderData) player.PlayMod.save() orderDataMap := map[string]interface{}{ @@ -158,34 +161,15 @@ func TriggerComfortOrder(p *Player) { Now := GoUtil.Now() Lv := BaseMod.GetLevel() - if Now-BaseMod.GetLogoutTime() < 7*86400 || Lv < 17 { + if Now-BaseMod.GetLogoutTime() < 7*86400 || Lv < 23 { return } OrderMod := p.PlayMod.getOrderMod() ChessMod := p.PlayMod.getChessMod() - ChessList := ChessMod.GetUnlockChessList() - TriggerType := 1 - for _, Order := range OrderMod.GetOrderList() { - if GoUtil.IsContain(ChessList, Order.MergeId) { - continue - } - if Order.Diff == order.DIFF_LOW { - return - } - if Order.Diff == order.DIFF_MID { - TriggerType = 2 - } - } + OrderMod.ComfortEndTime = int(Now + 86400) EmitList := ChessMod.GetEmitList() EnergyMul := BaseMod.GetEnergyMul() - if TriggerType == 1 { - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 2) - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 3) - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_MID, 2) - } else { - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 2) - OrderMod.CreateComfortOrder(Lv, EmitList, EnergyMul, order.DIFF_LOW, 3) - } + OrderMod.CreateNormalOrder(BaseMod.GetLevel(), EmitList, EnergyMul, order.COMFORT_TYPE) } func TriggerSeed(player *Player) { diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 4a3773be..6f46332e 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -4,7 +4,9 @@ import ( "fmt" "math" mergeDataCfg "server/conf/mergeData" + orderCfg "server/conf/order" "server/game/mod/decorate" + "server/game/mod/item" "server/game/mod/order" "server/game/mod/quest" "server/msg" @@ -45,15 +47,29 @@ func UnitOrder(p *Player) error { ChessMod := p.PlayMod.getChessMod() BaseMod := p.PlayMod.getBaseMod() //OrderMod.OrderList = make(map[int]order.Order) - for i := 0; i < 100; i++ { + for i := 0; i < 1000; i++ { //OrderMod.ChessPool = nil //OrderMod.EmitShuffle = nil - err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul()) + err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type) if err != nil { return err } + for k, v := range OrderMod.OrderList { + if v.Type == order.Super_type { + continue + } + if len(v.Items) > 0 { + continue + } + if v.Diff == 0 { + continue + } + Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit()) + v.Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} + OrderMod.OrderList[k] = v + fmt.Printf("OrderId %d, Diff %d, MergeId %v, Star %d\n", k, v.Diff, v.MergeId, Star) + } } - p.FormatOrderReward() NumMap := make(map[int]int) for _, v := range OrderMod.OrderList { NumMap[len(v.MergeId)]++ @@ -235,7 +251,7 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 { // fmt.Println(EmitList) // OrderMod.Debug = make(map[int]int) for i := 0; i < 5000; i++ { - err := OrderMod.CreateNormalOrder(Lv, Emit, EnergyMul) + err := OrderMod.CreateNormalOrder(Lv, Emit, EnergyMul, order.Common_type) log.Debug("OrderMod.CreateNormalOrder %d", i) if err != nil { return 0 @@ -289,9 +305,13 @@ func UnitPlayroomOrder(p *Player) error { } func UnitPetOrder(p *Player) error { - VarMod := p.PlayMod.getVarMod() - VarMod.DailyResetTime = 0 - p.ZeroUpdate(nil) + p.CreateNormalOrder() + ChessMod := p.PlayMod.getChessMod() + DecorateMod := p.PlayMod.getDecorateMod() + OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId()) + Star := order.GetOrderStar([]int{305}, ChessMod.GetStarEmitList()) + a := int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 + fmt.Print(a) return nil } @@ -321,7 +341,7 @@ func UnitOrderTrigger(p *Player) error { Emit := ChessMod.GetEmitList() EnergyMul := BaseMod.GetEnergyMul() OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul) - + order.GetOrderStar([]int{1146}, ChessMod.GetOrderEmit()) return nil } diff --git a/src/server/game/mod/charge/Charge.go b/src/server/game/mod/charge/Charge.go index ccf279f2..629a10b3 100644 --- a/src/server/game/mod/charge/Charge.go +++ b/src/server/game/mod/charge/Charge.go @@ -133,7 +133,7 @@ func (c *ChargeMod) NoonUpdate(Emit []int) { } func (c *ChargeMod) FixBug(Emit []int) { - if len(c.ChessShop) < 6 { + if len(c.ChessShop) < 5 { c.InitChessShop(Emit) } } diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 6ef3ebd7..082e2ec4 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -261,7 +261,31 @@ func (cb *ChessBorad) RemoveChess(Id int) error { } return nil } - +func (cb *ChessBorad) GetStarEmitList() []int { + result := make([]int, 0, len(cb.EmitList)) + EM := make(map[string]int) + for k, v := range cb.EmitList { + if v <= 0 { + delete(cb.EmitList, k) + continue + } + EmitID := mergeDataCfg.GetEmitId(k) + if EmitID == "" { + continue + } + EmitType := mergeDataCfg.GetEmitType(k) + if EmitType == "sub" { + continue + } + if v > 0 { + EM[EmitID] = max(EM[EmitID], k) + } + } + for _, v := range EM { + result = append(result, v) + } + return result +} func (cb *ChessBorad) GetEmitList() []int { result := make([]int, 0, len(cb.EmitList)) EM := make(map[string]int) @@ -274,7 +298,7 @@ func (cb *ChessBorad) GetEmitList() []int { if EmitID == "" { continue } - if cb.Retire[EmitID] == EMIT_RETIRE_START { + if cb.Retire[EmitID] >= EMIT_RETIRE_START { continue } EmitType := mergeDataCfg.GetEmitType(k) @@ -386,7 +410,7 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo { } Re := make([]string, 0) for k, v := range cb.Retire { - if v == 3 { + if v == EMIT_RETIRE_END { Re = append(Re, k) } } @@ -554,7 +578,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error { return errors.New("chess has not been retired") } chess := make([]int, 0) - EmitProduct := mergeDataCfg.GetEmitProduce(EmitType) + EmitProduct := mergeDataCfg.GetEmitOrderProduce(EmitType) for k, v := range cb.ChessMap { arr := strings.Split(k, "@") Color := mergeDataCfg.GetColorById(int(v)) diff --git a/src/server/game/mod/dailyTask/DailyTask.go b/src/server/game/mod/dailyTask/DailyTask.go index 3d3695fa..f4d99c5c 100644 --- a/src/server/game/mod/dailyTask/DailyTask.go +++ b/src/server/game/mod/dailyTask/DailyTask.go @@ -192,3 +192,23 @@ func (dt *DailyTaskMod) GetWeekReward(id int) ([]*item.Item, error) { } return nil, fmt.Errorf("task not finish") } + +func (dt *DailyTaskMod) GetWeekReward2() []*item.Item { + max := 0 + for id := range dt.WeekReward { + if id > max { + max = id + } + } + max++ + if v, ok := dt.WeekReward[max]; ok { + NeedActive := dailyTaskCfg.GetTaskActiveById(max) + if dt.Active < NeedActive { + return nil + } + if !v.Status { + return v.Items + } + } + return nil +} diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index fe50f5bf..c59119d5 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -24,9 +24,10 @@ type FriendMod struct { } type BubbleInfo struct { - Id int // 气泡ID - Time int64 // 气泡时间 - Type int + Id int // 气泡ID + Time int64 // 气泡时间 + Type int + ItemList []*item.Item // 奖励物品 } type FriendInfo struct { @@ -82,6 +83,7 @@ const ( LOG_TYPE_PLAYROOM_CAT_LOSE = 27 // 小猫游戏,装箱小猫未成功 LOG_TYPE_CARD_GIVE_ACCEPT = 28 // 接受卡牌请求 LOG_TYPE_FRIEND_INVITE = 29 // 邀请注册 + LOG_TYPE_TREASURE_HELP = 30 // 好友宝藏帮助 ) const ( @@ -271,28 +273,34 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int { }) switch Type { case LOG_TYPE_HANDBOOK_UPVOTE: - f.AddBubble(f.AutoId, Type) + f.AddBubble(f.AutoId, Type, nil) case LOG_TYPE_PLAYROOM_UPVOTE: - f.AddBubble(f.AutoId, Type) + f.AddBubble(f.AutoId, Type, nil) + case LOG_TYPE_TREASURE_HELP: + ItemNum := GoUtil.RandNum(2, 5) + ItemList := []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)} + f.AddBubble(f.AutoId, Type, ItemList) } if len(f.Log) > 30 { f.Log = f.Log[len(f.Log)-30:] } return f.AutoId } -func (f *FriendMod) AddBubble(Id, Type int) { +func (f *FriendMod) AddBubble(Id, Type int, ItemList []*item.Item) { f.Bubble[Id] = &BubbleInfo{ - Id: Id, - Time: GoUtil.Now(), - Type: Type, + Id: Id, + Time: GoUtil.Now(), + Type: Type, + ItemList: ItemList, } } func (f *FriendMod) GetBubbble(Id int) *msg.FriendBubbleInfo { if v, ok := f.Bubble[Id]; ok { return &msg.FriendBubbleInfo{ - Id: int32(v.Id), - Type: int32(v.Type), + Id: int32(v.Id), + Type: int32(v.Type), + Items: item.ItemToMsg(v.ItemList), } } return nil @@ -302,8 +310,9 @@ func (f *FriendMod) BubbleBackData() *msg.ResFriendBubble { rs := make([]*msg.FriendBubbleInfo, 0, len(f.Bubble)) for _, v := range f.Bubble { rs = append(rs, &msg.FriendBubbleInfo{ - Id: int32(v.Id), - Type: int32(v.Type), + Id: int32(v.Id), + Type: int32(v.Type), + Items: item.ItemToMsg(v.ItemList), }) } return &msg.ResFriendBubble{ @@ -348,6 +357,8 @@ func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) { reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5)) case LOG_TYPE_PLAYROOM_UPVOTE: reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5)) + case LOG_TYPE_TREASURE_HELP: + reward = append(reward, info.ItemList...) default: return nil, fmt.Errorf("log type not support") } diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 6c6aba66..583584a5 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -22,6 +22,9 @@ const ( ITEM_FIVE_STAR_CARD_PACK = 100008 ITEM_RACING_BATTERY_ID = 100027 ITEM_LAUNCHER_ID = 1602 + ITEM_LAUNCHER_lOW_ID = 1601 + ITEM_ENERGY_GIFT_ID = 562 + ITEM_DIAMOND_LV2_ID = 502 ) const ( diff --git a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go index cec1ef61..e53c9efa 100644 --- a/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go +++ b/src/server/game/mod/limitedTimeEvent/LimitedTimeEvent.go @@ -350,13 +350,14 @@ func (l *LimitedTimeEventMod) AddProgress(Lv int) { } // 选择进度奖励 -func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.Item, int, int, error) { +func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.Item, int, int, map[int]int, error) { RewardId, ok := l.ProgressReward[Id] + RewardList := l.ProgressReward if !ok { - return nil, 0, 0, fmt.Errorf("RewardId not exist") + return nil, 0, 0, nil, fmt.Errorf("RewardId not exist") } - r2 := l.ProgressMax Item := limitedTimeEventCfg.GetProgressReward(RewardId) + OrderNum := l.ProgressMax l.LastSelect = RewardId l.ProgressReward = make(map[int]int) l.Progress = 0 @@ -389,7 +390,7 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item. } l.LastOption = r l.FirstReward = true - return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), r2, nil + return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), OrderNum, RewardList, nil } func (l *LimitedTimeEventMod) RemoveSuperOrder() bool { diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 0c742af5..fbe4ed05 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,7 +2,6 @@ package order import ( "fmt" - "log" "server/GoUtil" limitedTimeEventCfg "server/conf/limitedTimeEvent" mergeDataCfg "server/conf/mergeData" @@ -21,16 +20,19 @@ type OrderMod struct { LastOrder Order // 上一个订单 LastNormalOrder Order // 上一个普通订单 EimtOrder map[string]struct{} - PreheatStep map[string]int // 预热订单步骤 - EmitShuffle []string // 发射器乱序 - ColorShuffle []string // 棋子系列乱序 - LastColor string // 上次生成订单的棋子系列 - ChessPool []int // 棋子池 - OrderPool map[int]*Order // 订单池 - FinishOrder []int // 已完成订单 - IsCharge bool // 是否充值 - AutoEmit []string // 自动发射器 - LastChess int // 上次生成订单的棋子 + PreheatStep map[string]int // 预热订单步骤 + EmitShuffle []string // 发射器乱序 + ColorShuffle []string // 棋子系列乱序 + LastColor string // 上次生成订单的棋子系列 + ChessPool []int // 棋子池 + ChessPool2 map[string][]int // 按系列分类的棋子池 + OrderPool map[int]*Order // 订单池 + FinishOrder []int // 已完成订单 + IsCharge bool // 是否充值 + AutoEmit []string // 自动发射器 + LastChess int // 上次生成订单的棋子 + NextDiff int // 下次订单难度 + ComfortEndTime int } type Order struct { @@ -43,6 +45,12 @@ type Order struct { Items []*item.Item // 奖励物品 } +var PreheatItems = map[int][]*item.Item{ + 1: {item.NewItem(item.ITEM_ENERGY_GIFT_ID, 1)}, + 2: {item.NewItem(item.ITEM_DIAMOND_LV2_ID, 1)}, + 3: {item.NewItem(item.ITEM_LAUNCHER_lOW_ID, 1)}, +} + const ( Common_type = 1 // 普通订单 Extra_type = 2 // 额外订单 弃用 @@ -87,6 +95,9 @@ func (o *OrderMod) InitData() { delete(o.OrderList, k) } } + if o.ChessPool2 == nil { + o.ChessPool2 = make(map[string][]int) + } if o.Auto_id == 0 { o.Auto_id = 10000 } @@ -119,6 +130,12 @@ func (o *OrderMod) RewardOrder(id int) ([]*item.Item, []int, int, int, error) { if v.Type == Fixed_type || v.Type == Playroom_type { o.FinishOrder = append(o.FinishOrder, id) } + if GoUtil.InArray(78, o.FinishOrder) { + o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "D") + } + if GoUtil.InArray(79, o.FinishOrder) { + o.AutoEmit, _ = GoUtil.PopStringElemSlice(o.AutoEmit, "I") + } return ItemList, v.MergeId, v.Type, Star, nil } return ItemList, MergeList, 0, 0, fmt.Errorf("订单不存在, 订单id%d", id) @@ -228,9 +245,6 @@ func (o *OrderMod) TriggerOrder(lv int, Type string, Emit []int, EnergyMul int) } } } - if lv >= 12 { - o.CreateOrder(lv, Emit, EnergyMul) - } return nil } @@ -290,7 +304,7 @@ func (o *OrderMod) CheckCondition(lv int, condition, Type string, Emit []int, Fi } // 生成新订单 -func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul int) error { +func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul, OrderType int) error { if len(Emit) == 0 { return nil } @@ -298,20 +312,8 @@ func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul int) error { if o.CreatePriorityOrder(lv, Emit) { return nil } - MaxOrderNum := orderCfg.GetOrderNum(lv) - n := 0 - for _, v := range o.OrderList { - if v.Type == Common_type || v.Type == Clean_type || v.Type == Pet_type || v.Type == Part_type || v.Type == Fixed_type || v.Type == Preview_type { - n++ - } - } - for i := n; i < MaxOrderNum; i++ { - err := o.CreateNormalOrder(lv, Emit, EnergyMul) - if err != nil { - return err - } - } - return nil + err := o.CreateNormalOrder(lv, Emit, EnergyMul, OrderType) + return err } func (o *OrderMod) CreatePriorityOrder(lv int, Emit []int) bool { @@ -404,7 +406,7 @@ func (o *OrderMod) CreateNormalOrderSeed(lv int, Emit []int, EnergyMul int, Diff } // 生成新订单 -func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { +func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul, OrderType int) error { if len(Emit) == 0 { return nil } @@ -417,7 +419,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { break } randNum++ - mergeList, OrderDiff, err = randOrderChess(o, lv, Emit, EnergyMul) + mergeList, OrderDiff, err = randOrderChess(o, lv, Emit, EnergyMul, OrderType) if err != nil { continue } @@ -446,8 +448,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { // } // } - log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) - o.addOrder(mergeList, OrderDiff, Common_type) + o.addOrder(mergeList, OrderDiff, OrderType) return nil } @@ -485,6 +486,28 @@ func (o *OrderMod) CreateSuperOrder(lv int, Emit []int, EnergyMul int) error { o.addOrder(mergeList, OrderDiff, Super_type) return nil } +func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { + o.Auto_id++ + Order := Order{ + MergeId: ChessList, + Diff: Diff, + Type: Type, + Timestamp: time.Now().Unix(), + Items: nil, + } + o.OrderList[o.Auto_id] = Order + if Type == Common_type { + o.LastNormalOrder = Order + } + o.LastDiff = Diff + return o.Auto_id +} +func (o *OrderMod) AddExtraOrder(ChessList []int) { + o.addOrder(ChessList, DIFF_LOW, Extra_type) +} +func (o *OrderMod) AddFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { + o.addFixOrder(Id, ChessList, Type, Items) +} func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.Item) { Order := Order{ MergeId: ChessList, @@ -494,13 +517,11 @@ func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item. } o.OrderList[Id] = Order } -func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { +func (o *OrderMod) AddPreheatOrder(ChessList []int, Diff int, Type int, Items []*item.Item) int { + return o.addPreheatOrder(ChessList, Diff, Type, Items) +} +func (o *OrderMod) addPreheatOrder(ChessList []int, Diff int, Type int, Items []*item.Item) int { o.Auto_id++ - Star := GetOrderStar(ChessList) - Items := make([]*item.Item, 0) - if Type != Common_type && Type != Super_type { - Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)} - } Order := Order{ MergeId: ChessList, Diff: Diff, @@ -509,10 +530,6 @@ func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int { Items: Items, } o.OrderList[o.Auto_id] = Order - if Type == Common_type { - o.LastNormalOrder = Order - } - o.LastDiff = Diff return o.Auto_id } @@ -558,7 +575,7 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ //额外订单补充2;当玩家的棋盘中出现三个相同的满级产物时,立刻生成一个对应的收购订单; for k := range MaxLvChess { ChessNum := GoUtil.GetElemNum(ChessList, k) - if ChessNum == 3 && Level >= 12 { + if ChessNum >= 3 && Level >= 12 { b2 := true for _, v := range o.OrderList { if GoUtil.SliceEqual(v.MergeId, []int{k, k, k}) { @@ -581,7 +598,8 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ ChessId := mergeDataCfg.GetChessIdByLvAndColor(EnergyMul+1, ChessColor[0]) if ChessId != 0 { o.PreheatStep[ChessColor[0]] = 1 - o.addOrder([]int{ChessId}, DIFF_LOW, Preheat_type) + Items := PreheatItems[1] + o.addPreheatOrder([]int{ChessId}, DIFF_LOW, Preheat_type, Items) } } return b1 || b3 @@ -626,7 +644,6 @@ func (o *OrderMod) CheckSuperOrder() bool { * 根据能量倍数 调整订单 */ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList []int) { - for k, v := range o.OrderList { if v.Type == Preheat_type { // 预热订单 修改倍数时修改棋子等级 ChessId := v.MergeId[0] @@ -637,7 +654,11 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList continue } delete(o.OrderList, k) - o.addOrder([]int{NewChessId}, DIFF_LOW, Preheat_type) + Items, ok := PreheatItems[PreheatStep] + if !ok { + Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, GetOrderStar([]int{NewChessId}, Emit))} + } + o.addPreheatOrder([]int{NewChessId}, DIFF_LOW, Preheat_type, Items) } } @@ -670,14 +691,14 @@ func (o *OrderMod) ChangeEnergyMul(lv int, Emit []int, EnergyMul int, ChessList */ if NeedTrigger { delete(o.OrderList, k) - o.CreateNormalOrder(lv, Emit, EnergyMul) + o.CreateNormalOrder(lv, Emit, EnergyMul, v.Type) } } } func (o *OrderMod) Retire(EmitId string) { ChessPool := make([]int, 0) - Product := mergeDataCfg.GetEmitProduce(EmitId) + Product := mergeDataCfg.GetEmitOrderProduce(EmitId) for _, v := range o.ChessPool { Color := mergeDataCfg.GetColorById(v) if GoUtil.InStringArray(Color, Product) { diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index 207ac673..45100746 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -1,14 +1,94 @@ package order import ( + "math" "server/GoUtil" mergeDataCfg "server/conf/mergeData" orderCfg "server/conf/order" userCfg "server/conf/user" + "sort" ) var reflectChess = map[int]int{} // 棋子难度映射表 +var orderCfgMap = map[int]orderConfig{ + 1: { + Min: 15, + Max: 150, + Pool: map[int]orderConfigInfo{ + 1: {lv: 5, energy: 16, t: 0}, + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, + }, + }, + 2: { + Min: 20, + Max: 300, + Pool: map[int]orderConfigInfo{ + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, + }, + }, + 3: { + Min: 40, + Max: 400, + Pool: map[int]orderConfigInfo{ + 1: {lv: 5, energy: 16, t: 0}, + 2: {lv: 6, energy: 32, t: 0}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, + 5: {lv: 9, energy: 256, t: 0}, + }, + }, + 4: { + Min: 40, + Max: 200, + Pool: map[int]orderConfigInfo{ + 1: {lv: 5, energy: 16, t: 1}, + 2: {lv: 6, energy: 32, t: 1}, + 3: {lv: 7, energy: 64, t: 0}, + 4: {lv: 8, energy: 128, t: 0}, + }, + }, + 5: { + Min: 100, + Max: 600, + Pool: map[int]orderConfigInfo{ + 1: {lv: 6, energy: 32, t: 1}, + 2: {lv: 7, energy: 64, t: 1}, + 3: {lv: 8, energy: 128, t: 0}, + 4: {lv: 9, energy: 256, t: 0}, + 5: {lv: 10, energy: 512, t: 0}, + }, + }, + 6: { + Min: 500, + Max: 1200, + Pool: map[int]orderConfigInfo{ + 1: {lv: 6, energy: 32, t: 1}, + 2: {lv: 7, energy: 64, t: 1}, + 3: {lv: 8, energy: 128, t: 0}, + 4: {lv: 9, energy: 256, t: 0}, + 5: {lv: 10, energy: 512, t: 0}, + 6: {lv: 11, energy: 1024, t: 0}, + }, + }, +} + +type orderConfig struct { + Min int + Max int + Pool map[int]orderConfigInfo +} + +type orderConfigInfo struct { + lv int + energy int + t int +} + // 订单棋子数量 func getChessNumRand(OrderN int) map[int]int { return map[int]int{ @@ -19,8 +99,23 @@ func getChessNumRand(OrderN int) map[int]int { } // 根据上一个订单难度和系数 生成订单难度 -func getOrderDiffRand(Diff, OrderN int) map[int]int { +func getOrderDiffRand(Lv, Diff, OrderN int) map[int]int { var d map[int]int + if Lv < 24 { + switch Diff { + case DIFF_MID: + d = map[int]int{ + DIFF_LOW: 50, + DIFF_MID: 50, + } + default: + d = map[int]int{ + DIFF_LOW: 30, + DIFF_MID: 70, + } + } + return d + } switch Diff { case DIFF_MID: d = map[int]int{ @@ -44,6 +139,32 @@ func getOrderDiffRand(Diff, OrderN int) map[int]int { return d } +func getChessByDiff(Lv, Diff, Type int) (int, int, int) { + if Type == Common_type { + switch Diff { + case DIFF_MID: + return 100, 600, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + case DIFF_HIGH: + return 500, 1200, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + default: + if Lv < 23 { + return 15, 150, GoUtil.RandMap(map[int]int{1: 67, 2: 33}) + } + return 30, 200, GoUtil.RandMap(map[int]int{1: 67, 2: 33}) + } + } + if Type == Pet_type { + return 40, 200, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + } + if Type == Part_type { + return 100, 600, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) + } + if Type == COMFORT_TYPE { + return 15, 150, GoUtil.RandMap(map[int]int{1: 33, 2: 67}) + } + return 100, 600, GoUtil.RandMap(map[int]int{1: 50, 2: 50}) +} + // 根据订单难度生成棋子难度 func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { var rs map[int]int @@ -266,10 +387,6 @@ func getChesslvRange(Emit int, EnergyMul int, IsCharge bool) (int, int) { RandEmitMinLv := mergeDataCfg.GetEmitMinLvById(EmitId) Ratio := mergeDataCfg.GetEmitRatio(EmitId) m := int(float64(1+RandEmitLv-RandEmitMinLv) / float64(1+RandMaxLv-RandEmitMinLv) / Ratio * 100) - EmitN := mergeDataCfg.GetEmitN(EmitId) - ProductList := mergeDataCfg.GetEmitProduceType(Emit) - m = m - (len(ProductList)-2)*10 - m = m - EmitN*10 if IsCharge { m += 10 } @@ -365,39 +482,44 @@ func randOrderChessWithDiff(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDif } // 随机生成订单棋子 -func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, error) { +func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) ([]int, int, error) { initReflectChess(Emit, EnergyMul) filterPool(o) OrderN, err := userCfg.GetOrderNByLv(lv) - RandChessNum := getChessNumRand(OrderN) + //RandChessNum := getChessNumRand(OrderN) if err != nil { return nil, DIFF_LOW, err } // 生成订单难度和棋子数量 - ChessNum := GoUtil.RandMap(RandChessNum) - OrderDiffRand := getOrderDiffRand(o.LastDiff, OrderN) + //ChessNum := GoUtil.RandMap(RandChessNum) + OrderDiffRand := getOrderDiffRand(lv, o.LastDiff, OrderN) OrderDiff := GoUtil.RandMap(OrderDiffRand) - ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN) - mergeList := make([]int, 0, len(ChessDiff)) - // 根据订单棋子难度生成棋子 - for _, v := range ChessDiff { - ChessId := 0 - Num := 0 - for { - Num++ - if Num > 50 { - break - } - ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul) - if ChessId == 0 { - continue - } - if !GoUtil.InArray(ChessId, mergeList) { - break - } - } - mergeList = append(mergeList, ChessId) + if o.NextDiff != 0 { + OrderDiff = o.NextDiff + o.NextDiff = 0 } + //获取订单体力范围和棋子数量 + MinEnergy, MaxEnergy, ChessNum := getChessByDiff(lv, OrderDiff, OrderType) + mergeList := getChessFromPoolByEnergy(o, MinEnergy, MaxEnergy, ChessNum, Emit, EnergyMul, OrderDiff) + // // 根据订单棋子难度生成棋子 + // for _, v := range ChessDiff { + // ChessId := 0 + // Num := 0 + // for { + // Num++ + // if Num > 50 { + // break + // } + // ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul) + // if ChessId == 0 { + // continue + // } + // if !GoUtil.InArray(ChessId, mergeList) { + // break + // } + // } + // mergeList = append(mergeList, ChessId) + // } return mergeList, OrderDiff, nil } @@ -447,16 +569,23 @@ func filterPool(o *OrderMod) { func ShuffleColor(List []string, Last string) []string { Break := 0 + List2 := make([]string, len(List)) + List3 := make([]string, len(List)) + for _, v := range List { + if mergeDataCfg.GetEmitProductNumByColor(v) == 1 { + List2 = append(List2, v) + } else { + List3 = append(List3, v) + } + } + for { Break++ if Break > 1000 { break } Same := false - NewList := GoUtil.ShuffleStringArray(List) - if NewList[0] == Last { - continue - } + NewList := GoUtil.ShuffleStringArray(List2) for i := 1; i < len(NewList); i++ { BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1]) NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i]) @@ -464,8 +593,23 @@ func ShuffleColor(List []string, Last string) []string { Same = true break } - } + // 将 List3 随机插入 NewList 中 + if len(List3) > 0 { + for _, v := range GoUtil.ShuffleStringArray(List3) { + idx := GoUtil.RandNum(0, len(NewList)) + if idx >= len(NewList) { + NewList = append(NewList, v) + } else { + NewList = append(NewList[:idx+1], NewList[idx:]...) + NewList[idx] = v + } + } + } + if NewList[0] == Last { + continue + } + if !Same { return NewList } @@ -498,24 +642,43 @@ func ShuffleColor(List []string, Last string) []string { // 获取发射器系列 func getEmitSeries(o *OrderMod, Emit []int) string { - if o.ColorShuffle == nil { - ColorShuffle := make([]string, 0) - for _, v := range Emit { - EmitId := mergeDataCfg.GetEmitId(v) - if GoUtil.InStringArray(EmitId, o.AutoEmit) { - continue - } - EmitProduct := mergeDataCfg.GetEmitProduceType(v) - if len(EmitProduct) == 0 || EmitProduct[0] == "" { - continue - } - ColorShuffle = append(ColorShuffle, EmitProduct...) + o.initColorShuffle(Emit) + PopEmitId := "" + NewSlice := make([]string, 0) + ChessColorNum := map[string]int{} + for _, v := range o.OrderList { + for _, c := range v.MergeId { + Color := mergeDataCfg.GetColorById(c) + ChessColorNum[Color]++ + } + } + Break := 0 + for { + if Break > 1000 { + break + } + Break++ + PopEmitId, NewSlice = GoUtil.PopStringArray(o.ColorShuffle) + o.ColorShuffle = NewSlice + if PopEmitId == "" { + o.initColorShuffle(Emit) + continue + } + PopEmitIdProductNum := mergeDataCfg.GetEmitProductNumByColor(PopEmitId) + o.initColorShuffle(Emit) + if PopEmitIdProductNum == 1 && ChessColorNum[PopEmitId] >= 2 { + continue + } else { + break } - o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) } - PopEmitId, NewSlice := GoUtil.PopStringArray(o.ColorShuffle) o.ColorShuffle = NewSlice o.LastColor = PopEmitId + o.initColorShuffle(Emit) + return PopEmitId +} + +func (o *OrderMod) initColorShuffle(Emit []int) { if len(o.ColorShuffle) == 0 { ColorShuffle := make([]string, 0) for _, v := range Emit { @@ -524,21 +687,34 @@ func getEmitSeries(o *OrderMod, Emit []int) string { continue } EmitProduct := mergeDataCfg.GetEmitProduceType(v) + if len(EmitProduct) == 0 || EmitProduct[0] == "" { continue } + Preheat, ok := o.PreheatStep[EmitProduct[0]] + // 预热订单未全部完成 排除 + if ok && Preheat < 5 { + continue + } ColorShuffle = append(ColorShuffle, EmitProduct...) } o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor) } - return PopEmitId } // 订单能获取的宠物币 -func GetOrderStar(ChessList []int) int { +func GetOrderStar(ChessList []int, EmitList []int) int { Star := 0 for _, v := range ChessList { - Star += mergeDataCfg.GetStarById(v) + ChessLv := mergeDataCfg.GetLvById(v) + Color := mergeDataCfg.GetColorById(v) + EmitId := GetEmitByColor(EmitList, Color) + if EmitId == 0 { + continue + } + NewChessLv := mergeDataCfg.DynamicLevRev(ChessLv, EmitId, Color) + n := orderCfg.GetOrderK(NewChessLv) + Star += n } return Star } @@ -556,6 +732,155 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int { } return GoUtil.UniqueInts(ChessIds) } +func (o *OrderMod) getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int { + rand := []int{} + t := 0 + if LastEnergy > 0 { + t = 1 + } + for _, v := range orderCfgMap { + if MinEnergy >= v.Min && MaxEnergy <= v.Max { + for _, info := range v.Pool { + if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy && t >= info.t { + rand = append(rand, info.lv) + } + } + } + } + if len(rand) == 0 { + return rand + } + return rand +} + +func (o *OrderMod) getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int { + rand := []int{} + for _, v := range orderCfgMap { + if MinEnergy >= v.Min && MaxEnergy <= v.Max { + for _, info := range v.Pool { + if MinLv <= info.lv && MaxLv >= info.lv { + rand = append(rand, info.lv) + } + } + + } + } + return rand +} +func (o *OrderMod) getChessLvFromConfig3(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int { + rand := []int{} + for _, v := range orderCfgMap { + if MinEnergy >= v.Min && MaxEnergy <= v.Max { + for _, info := range v.Pool { + if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy { + rand = append(rand, info.lv) + } + } + + } + } + return rand +} + +func (o *OrderMod) ChessPoolChess(Color string, Lv int) bool { + for _, v := range o.ChessPool2[Color] { + if v > Lv { + return true + } + } + return false +} + +func (o *OrderMod) getFromPool(Emit int, Color string, Lv int) { + for i, v := range o.ChessPool2[Color] { + if v == Lv { + o.ChessPool2[Color] = append(o.ChessPool2[Color][:i], o.ChessPool2[Color][i+1:]...) + return + } + } + for i, v := range o.ChessPool2[Color] { + if v > Lv { + o.ChessPool2[Color] = append(o.ChessPool2[Color][:i], o.ChessPool2[Color][i+1:]...) + for k := Lv; k < v; k++ { + o.ChessPool2[Color] = append(o.ChessPool2[Color], k) + } + return + } + } + Product := mergeDataCfg.GetEmitProduceType(Emit) + if len(Product) < 2 { + return + } + for _, v := range Product { + if Color == v { + continue + } + o.ChessPool2[Color] = append(o.ChessPool2[Color], Lv) + } +} + +func (o *OrderMod) getChessIdPool(Emit []int, Color string, EnergyMul, Lv, MinEnergy, MaxEnergy, OrderDiff, LastEnergy int) (int, int) { + ChessLv := 0 + EmitChessId := getEmitBySeries(Emit, Color) + ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge) + ChessLvRand := o.getChessLvFromConfig1(MinEnergy, MaxEnergy, ChessMinLv, ChessMaxLv, LastEnergy) + Pool := o.ChessPool2[Color] + ChessLvRand2 := make([]int, 0) + for _, v := range ChessLvRand { + if GoUtil.InArray(v, Pool) { + ChessLvRand2 = append(ChessLvRand2, v) + } + } + if len(ChessLvRand2) > 0 { + ChessLv = GoUtil.RandSlice(ChessLvRand2) + } + sort.Ints(ChessLvRand) + if len(ChessLvRand) > 0 && len(ChessLvRand2) == 0 && o.ChessPoolChess(Color, ChessLvRand[len(ChessLvRand)-1]) { + ChessLv = ChessLvRand[len(ChessLvRand)-1] + } + if len(ChessLvRand) > 0 && len(ChessLvRand2) == 0 && !o.ChessPoolChess(Color, ChessLvRand[len(ChessLvRand)-1]) && len(ChessLvRand) > 0 { + ChessLv = GoUtil.RandSlice(ChessLvRand) + } + if ChessLv == 0 { + ChessLv = 6 + o.NextDiff = OrderDiff + } + o.getFromPool(EmitChessId, Color, ChessLv) + NewLev := mergeDataCfg.DynamicLev(ChessLv, EmitChessId, Color) + MaxLev := mergeDataCfg.GetMaxLvByColor(Color) + NewLev1 := adjustLev(NewLev, EnergyMul) + NewLev2 := min(NewLev1, MaxLev) + Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color) + if Chess == 0 { + Chess = mergeDataCfg.GetChessIdByLvAndColor(6, Color) + } + return Chess, ChessLv +} +func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, Emit []int, EnergyMul, OrderDiff int) []int { + ColorArr := make([]string, 0) + for i := 0; i < ChessNum; i++ { + ColorArr = append(ColorArr, getEmitSeries(o, Emit)) + } + ChessArr := make([]int, 0) + if len(ColorArr) == 1 { + Chess, _ := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, 0) + if Chess == 0 { + Chess = mergeDataCfg.GetChessIdByLvAndColor(6, ColorArr[0]) + } + return []int{Chess} + } + if len(ColorArr) == 2 { + Chess1, Chess1Lv := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, 0) + if Chess1 == 0 { + Chess1 = mergeDataCfg.GetChessIdByLvAndColor(6, ColorArr[0]) + } + Energy := int(math.Pow(2, float64(Chess1Lv-1))) + Chess2, _ := o.getChessIdPool(Emit, ColorArr[1], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, Energy) + return []int{Chess1, Chess2} + } + + return ChessArr +} // 从棋子池中获取棋子 func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int { @@ -668,10 +993,29 @@ func initReflectChess2(Color string, Start, End, Diff, adjust int) { reflectChess[ChessId] = Diff } } +func AdjustLev(Lev, EnergyMul int) int { + return adjustLev(Lev, EnergyMul) +} // 调整棋子等级 func adjustLev(Lev, EnergyMul int) int { - return max(min(Lev, EnergyMul+12), EnergyMul+1) + randMapList := map[int]map[int]int{ + 1: {}, + 2: {0: 30, 1: 70}, + 3: {1: 90, 2: 10}, + 4: {1: 30, 2: 70}, + 5: {2: 40, 3: 60}, + 6: {2: 10, 3: 50, 4: 40}, + 7: {3: 20, 4: 40, 5: 40}, + 8: {4: 40, 5: 60}, + 9: {4: 20, 5: 40, 6: 40}, + 10: {5: 40, 6: 60}, + 11: {5: 20, 6: 70, 7: 10}, + } + if v, ok := randMapList[EnergyMul]; ok { + Lev += GoUtil.RandMap(v) + } + return Lev } // 获取发射器系列 diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index ad0d2338..17400eac 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -24,6 +24,7 @@ type StartOrderData struct { Step int `json:"step"` Appear string `json:"appear"` Preview string `json:"preview"` + Group int `json:"group"` Items []*item.Item } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index b714dc98..8c1ec525 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -536,6 +536,7 @@ const ( ORDER_TYPE_Pet_type ORDER_TYPE = 11 // 宠物订单 ORDER_TYPE_Preview_type ORDER_TYPE = 12 // 预览订单 ORDER_TYPE_Fixed_type ORDER_TYPE = 13 // 修复订单 + ORDER_TYPE_Playroom_type ORDER_TYPE = 14 // playroom订单 ) // Enum value maps for ORDER_TYPE. @@ -555,6 +556,7 @@ var ( 11: "Pet_type", 12: "Preview_type", 13: "Fixed_type", + 14: "Playroom_type", } ORDER_TYPE_value = map[string]int32{ "ORDER_TYPE_DEFAULT": 0, @@ -571,6 +573,7 @@ var ( "Pet_type": 11, "Preview_type": 12, "Fixed_type": 13, + "Playroom_type": 14, } ) @@ -682,6 +685,7 @@ const ( TIME_LINE_TYPE_LOG_TYPE_PLAYROOM_CAT_LOSE TIME_LINE_TYPE = 27 // 小猫游戏,装箱小猫未成功 TIME_LINE_TYPE_LOG_TYPE_CARD_GIVE_ACCEPT TIME_LINE_TYPE = 28 // 接受卡牌请求 TIME_LINE_TYPE_LOG_TYPE_FRIEND_INVITE TIME_LINE_TYPE = 29 // 邀请注册 + TIME_LINE_TYPE_LOG_TYPE_TREASURE_HELP TIME_LINE_TYPE = 30 // 宠物宝藏帮助 ) // Enum value maps for TIME_LINE_TYPE. @@ -715,6 +719,7 @@ var ( 27: "LOG_TYPE_PLAYROOM_CAT_LOSE", 28: "LOG_TYPE_CARD_GIVE_ACCEPT", 29: "LOG_TYPE_FRIEND_INVITE", + 30: "LOG_TYPE_TREASURE_HELP", } TIME_LINE_TYPE_value = map[string]int32{ "DEFAULT": 0, @@ -745,6 +750,7 @@ var ( "LOG_TYPE_PLAYROOM_CAT_LOSE": 27, "LOG_TYPE_CARD_GIVE_ACCEPT": 28, "LOG_TYPE_FRIEND_INVITE": 29, + "LOG_TYPE_TREASURE_HELP": 30, } ) @@ -3199,7 +3205,7 @@ type ResPlayerChessInfo struct { ChessBag *ChessBag `protobuf:"bytes,3,opt,name=ChessBag,proto3" json:"ChessBag,omitempty"` RetireEmit []string `protobuf:"bytes,4,rep,name=RetireEmit,proto3" json:"RetireEmit,omitempty"` Honor []int32 `protobuf:"varint,5,rep,packed,name=Honor,proto3" json:"Honor,omitempty"` - PartBag *PartBag `protobuf:"bytes,6,opt,name=PartBag,proto3" json:"PartBag,omitempty"` + PartBag *PartBag `protobuf:"bytes,6,opt,name=PartBag,proto3" json:"PartBag,omitempty"` // 满级零件 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13189,8 +13195,9 @@ func (x *NotifyFriendLog) GetBubble() *FriendBubbleInfo { type FriendBubbleInfo struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id - Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2: + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id + Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2: + Items []*ItemInfo `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励 unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -13239,6 +13246,13 @@ func (x *FriendBubbleInfo) GetType() int32 { return 0 } +func (x *FriendBubbleInfo) GetItems() []*ItemInfo { + if x != nil { + return x.Items + } + return nil +} + type NotifyFriendCard struct { state protoimpl.MessageState `protogen:"open.v1"` Info *ResFriendCard `protobuf:"bytes,1,opt,name=Info,proto3" json:"Info,omitempty"` @@ -26825,10 +26839,11 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x06Upvote\x18\x06 \x01(\bR\x06Upvote\"q\n" + "\x0fNotifyFriendLog\x12*\n" + "\x04info\x18\x01 \x01(\v2\x16.tutorial.ResFriendLogR\x04info\x122\n" + - "\x06Bubble\x18\x02 \x01(\v2\x1a.tutorial.FriendBubbleInfoR\x06Bubble\"6\n" + + "\x06Bubble\x18\x02 \x01(\v2\x1a.tutorial.FriendBubbleInfoR\x06Bubble\"`\n" + "\x10FriendBubbleInfo\x12\x0e\n" + "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x12\n" + - "\x04Type\x18\x02 \x01(\x05R\x04Type\"?\n" + + "\x04Type\x18\x02 \x01(\x05R\x04Type\x12(\n" + + "\x05Items\x18\x03 \x03(\v2\x12.tutorial.ItemInfoR\x05Items\"?\n" + "\x10NotifyFriendCard\x12+\n" + "\x04Info\x18\x01 \x01(\v2\x17.tutorial.ResFriendCardR\x04Info\"\x91\x02\n" + "\rResFriendCard\x12\x10\n" + @@ -27843,7 +27858,7 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x14ACT_TYPE_GUESS_COLOR\x10\x02\x12\x11\n" + "\rACT_TYPE_RACE\x10\x03\x12\x1a\n" + "\x16ACT_TYPE_DISCOUNT_GIFT\x10\x04\x12\x15\n" + - "\x11ACT_TYPE_ADD_GIFT\x10\x05*\x82\x02\n" + + "\x11ACT_TYPE_ADD_GIFT\x10\x05*\x95\x02\n" + "\n" + "ORDER_TYPE\x12\x16\n" + "\x12ORDER_TYPE_DEFAULT\x10\x00\x12\x0f\n" + @@ -27865,13 +27880,14 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\bPet_type\x10\v\x12\x10\n" + "\fPreview_type\x10\f\x12\x0e\n" + "\n" + - "Fixed_type\x10\r*A\n" + + "Fixed_type\x10\r\x12\x11\n" + + "\rPlayroom_type\x10\x0e*A\n" + "\n" + "LOGIN_TYPE\x12\x11\n" + "\rACCOUNT_LOGIN\x10\x00\x12\x0e\n" + "\n" + "CODE_LOGIN\x10\x01\x12\x10\n" + - "\fDEVICE_LOGIN\x10\x02*\x9d\x06\n" + + "\fDEVICE_LOGIN\x10\x02*\xb9\x06\n" + "\x0eTIME_LINE_TYPE\x12\v\n" + "\aDEFAULT\x10\x00\x12\x19\n" + "\x15LOG_TYPE_FRIEND_APPLY\x10\x01\x12\x1a\n" + @@ -27901,7 +27917,8 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\x19LOG_TYPE_PLAYROOM_CAT_WIN\x10\x1a\x12\x1e\n" + "\x1aLOG_TYPE_PLAYROOM_CAT_LOSE\x10\x1b\x12\x1d\n" + "\x19LOG_TYPE_CARD_GIVE_ACCEPT\x10\x1c\x12\x1a\n" + - "\x16LOG_TYPE_FRIEND_INVITE\x10\x1d*\x9b\x01\n" + + "\x16LOG_TYPE_FRIEND_INVITE\x10\x1d\x12\x1a\n" + + "\x16LOG_TYPE_TREASURE_HELP\x10\x1e*\x9b\x01\n" + "\rCHESS_EX_TYPE\x12\x11\n" + "\rCHESS_EX_NONE\x10\x00\x12\x13\n" + "\x0fCHESS_EX_BUBBLE\x10\x01\x12\x10\n" + @@ -28592,169 +28609,170 @@ var file_proto_Gameapi_proto_depIdxs = []int32{ 225, // 123: tutorial.ResFriendLog.Player:type_name -> tutorial.ResPlayerSimple 227, // 124: tutorial.NotifyFriendLog.info:type_name -> tutorial.ResFriendLog 229, // 125: tutorial.NotifyFriendLog.Bubble:type_name -> tutorial.FriendBubbleInfo - 231, // 126: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard - 494, // 127: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry - 2, // 128: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE - 225, // 129: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple - 225, // 130: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple - 2, // 131: tutorial.ResFriendIgnore.Code:type_name -> tutorial.RES_CODE - 225, // 132: tutorial.ResFriendList.FriendList:type_name -> tutorial.ResPlayerSimple - 2, // 133: tutorial.ResAddNpc.Code:type_name -> tutorial.RES_CODE - 246, // 134: tutorial.ResFriendApply.ApplyList:type_name -> tutorial.ResFriendApplyInfo - 225, // 135: tutorial.ResFriendApplyInfo.Player:type_name -> tutorial.ResPlayerSimple - 231, // 136: tutorial.ResFriendCardMsg.MsgList:type_name -> tutorial.ResFriendCard - 246, // 137: tutorial.ResWishApplyList.ApplyList:type_name -> tutorial.ResFriendApplyInfo - 2, // 138: tutorial.ResWishApply.Code:type_name -> tutorial.RES_CODE - 227, // 139: tutorial.ResFriendTimeLine.Log:type_name -> tutorial.ResFriendLog - 229, // 140: tutorial.ResFriendBubble.Bubble:type_name -> tutorial.FriendBubbleInfo - 2, // 141: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE - 2, // 142: tutorial.ResFriendTReward.Code:type_name -> tutorial.RES_CODE - 225, // 143: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple - 2, // 144: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE - 2, // 145: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE - 225, // 146: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple - 2, // 147: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE - 2, // 148: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE - 495, // 149: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry - 496, // 150: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry - 164, // 151: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo - 273, // 152: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo - 2, // 153: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE - 2, // 154: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE - 2, // 155: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE - 497, // 156: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry - 498, // 157: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry - 499, // 158: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry - 282, // 159: tutorial.ResCharge.Wish:type_name -> tutorial.WishList - 2, // 160: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE - 2, // 161: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE - 2, // 162: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE - 2, // 163: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE - 2, // 164: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE - 500, // 165: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry - 2, // 166: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE - 2, // 167: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE - 501, // 168: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry - 164, // 169: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo - 2, // 170: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE - 2, // 171: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE - 2, // 172: tutorial.ResChargeReceive.Code:type_name -> tutorial.RES_CODE - 2, // 173: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE - 2, // 174: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE - 2, // 175: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE - 502, // 176: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry - 503, // 177: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry - 504, // 178: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry - 505, // 179: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry - 506, // 180: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry - 2, // 181: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE - 507, // 182: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry - 508, // 183: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry - 2, // 184: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE - 2, // 185: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE - 509, // 186: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry - 200, // 187: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo - 510, // 188: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry - 511, // 189: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry - 352, // 190: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo - 512, // 191: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry - 350, // 192: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent - 352, // 193: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo - 513, // 194: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry - 514, // 195: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry - 2, // 196: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE - 2, // 197: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE - 358, // 198: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent - 2, // 199: tutorial.ResRaceStart.Code:type_name -> tutorial.RES_CODE - 2, // 200: tutorial.ResRaceReward.Code:type_name -> tutorial.RES_CODE - 164, // 201: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo - 392, // 202: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent - 391, // 203: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom - 515, // 204: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry - 377, // 205: tutorial.ResPlayroom.collect:type_name -> tutorial.PlayroomCollectInfo - 516, // 206: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry - 164, // 207: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo - 387, // 208: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo - 517, // 209: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry - 518, // 210: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry - 519, // 211: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry - 376, // 212: tutorial.ResPlayroom.PetAir:type_name -> tutorial.PlayroomAirInfo - 174, // 213: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask - 389, // 214: tutorial.ResPlayroom.AdItem:type_name -> tutorial.AdItem - 391, // 215: tutorial.ResPlayroom.Target:type_name -> tutorial.FriendRoom - 174, // 216: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask - 2, // 217: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE - 2, // 218: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE - 2, // 219: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE - 2, // 220: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE - 375, // 221: tutorial.PlayroomDress.List:type_name -> tutorial.PlayroomDressInfo - 520, // 222: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry - 2, // 223: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE - 2, // 224: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE - 2, // 225: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE - 164, // 226: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo - 387, // 227: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo - 521, // 228: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry - 522, // 229: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry - 389, // 230: tutorial.NotifyPlayroomMood.AdItem:type_name -> tutorial.AdItem - 523, // 231: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry - 524, // 232: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry - 525, // 233: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry - 526, // 234: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry - 527, // 235: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry - 2, // 236: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE - 2, // 237: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE - 2, // 238: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE - 2, // 239: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE - 528, // 240: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry - 164, // 241: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo - 2, // 242: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE - 529, // 243: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry - 2, // 244: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE - 2, // 245: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE - 2, // 246: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE - 2, // 247: tutorial.ResPlayroomWork.Code:type_name -> tutorial.RES_CODE - 2, // 248: tutorial.ResPlayroomRest.Code:type_name -> tutorial.RES_CODE - 2, // 249: tutorial.ResPlayroomDraw.Code:type_name -> tutorial.RES_CODE - 2, // 250: tutorial.ResPlayroomChip.Code:type_name -> tutorial.RES_CODE - 2, // 251: tutorial.ResPlayroomBuyItem.Code:type_name -> tutorial.RES_CODE - 2, // 252: tutorial.ResPlayroomShop.Code:type_name -> tutorial.RES_CODE - 427, // 253: tutorial.ResFriendTreasure.List:type_name -> tutorial.TreasureInfo - 427, // 254: tutorial.ReqFriendTreasureStart.List:type_name -> tutorial.TreasureInfo - 2, // 255: tutorial.ResFriendTreasureStart.Code:type_name -> tutorial.RES_CODE - 2, // 256: tutorial.ResFriendTreasureEnd.Code:type_name -> tutorial.RES_CODE - 2, // 257: tutorial.ResFriendTreasureFilp.Code:type_name -> tutorial.RES_CODE - 438, // 258: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem - 164, // 259: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo - 2, // 260: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE - 443, // 261: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame - 225, // 262: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple - 2, // 263: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE - 2, // 264: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE - 2, // 265: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE - 2, // 266: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE - 2, // 267: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE - 2, // 268: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE - 2, // 269: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE - 167, // 270: tutorial.ResGuideTask.TaskEntry.value:type_name -> tutorial.GuideTask - 173, // 271: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek - 174, // 272: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask - 210, // 273: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent - 225, // 274: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple - 273, // 275: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo - 289, // 276: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop - 290, // 277: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop - 301, // 278: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo - 226, // 279: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 226, // 280: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank - 374, // 281: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress - 164, // 282: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo - 164, // 283: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo - 284, // [284:284] is the sub-list for method output_type - 284, // [284:284] is the sub-list for method input_type - 284, // [284:284] is the sub-list for extension type_name - 284, // [284:284] is the sub-list for extension extendee - 0, // [0:284] is the sub-list for field type_name + 164, // 126: tutorial.FriendBubbleInfo.Items:type_name -> tutorial.ItemInfo + 231, // 127: tutorial.NotifyFriendCard.Info:type_name -> tutorial.ResFriendCard + 494, // 128: tutorial.ResKv.kv:type_name -> tutorial.ResKv.KvEntry + 2, // 129: tutorial.ResFriendByCode.Code:type_name -> tutorial.RES_CODE + 225, // 130: tutorial.ResFriendByCode.Player:type_name -> tutorial.ResPlayerSimple + 225, // 131: tutorial.ResFriendRecommend.List:type_name -> tutorial.ResPlayerSimple + 2, // 132: tutorial.ResFriendIgnore.Code:type_name -> tutorial.RES_CODE + 225, // 133: tutorial.ResFriendList.FriendList:type_name -> tutorial.ResPlayerSimple + 2, // 134: tutorial.ResAddNpc.Code:type_name -> tutorial.RES_CODE + 246, // 135: tutorial.ResFriendApply.ApplyList:type_name -> tutorial.ResFriendApplyInfo + 225, // 136: tutorial.ResFriendApplyInfo.Player:type_name -> tutorial.ResPlayerSimple + 231, // 137: tutorial.ResFriendCardMsg.MsgList:type_name -> tutorial.ResFriendCard + 246, // 138: tutorial.ResWishApplyList.ApplyList:type_name -> tutorial.ResFriendApplyInfo + 2, // 139: tutorial.ResWishApply.Code:type_name -> tutorial.RES_CODE + 227, // 140: tutorial.ResFriendTimeLine.Log:type_name -> tutorial.ResFriendLog + 229, // 141: tutorial.ResFriendBubble.Bubble:type_name -> tutorial.FriendBubbleInfo + 2, // 142: tutorial.ResFriendTLUpvote.Code:type_name -> tutorial.RES_CODE + 2, // 143: tutorial.ResFriendTReward.Code:type_name -> tutorial.RES_CODE + 225, // 144: tutorial.ResFriendApplyNotify.Player:type_name -> tutorial.ResPlayerSimple + 2, // 145: tutorial.ResApplyFriend.Code:type_name -> tutorial.RES_CODE + 2, // 146: tutorial.ResAgreeFriend.Code:type_name -> tutorial.RES_CODE + 225, // 147: tutorial.ResAgreeFriend.Player:type_name -> tutorial.ResPlayerSimple + 2, // 148: tutorial.ResRefuseFriend.Code:type_name -> tutorial.RES_CODE + 2, // 149: tutorial.ResDelFriend.Code:type_name -> tutorial.RES_CODE + 495, // 150: tutorial.ResRank.RankList:type_name -> tutorial.ResRank.RankListEntry + 496, // 151: tutorial.ResMailList.MailList:type_name -> tutorial.ResMailList.MailListEntry + 164, // 152: tutorial.MailInfo.Items:type_name -> tutorial.ItemInfo + 273, // 153: tutorial.MailNotify.Info:type_name -> tutorial.MailInfo + 2, // 154: tutorial.ResReadMail.Code:type_name -> tutorial.RES_CODE + 2, // 155: tutorial.ResGetMailReward.Code:type_name -> tutorial.RES_CODE + 2, // 156: tutorial.ResDeleteMail.Code:type_name -> tutorial.RES_CODE + 497, // 157: tutorial.ResCharge.SpecialShop:type_name -> tutorial.ResCharge.SpecialShopEntry + 498, // 158: tutorial.ResCharge.ChessShop:type_name -> tutorial.ResCharge.ChessShopEntry + 499, // 159: tutorial.ResCharge.Gift:type_name -> tutorial.ResCharge.GiftEntry + 282, // 160: tutorial.ResCharge.Wish:type_name -> tutorial.WishList + 2, // 161: tutorial.ResAddWish.Code:type_name -> tutorial.RES_CODE + 2, // 162: tutorial.ResGetWish.Code:type_name -> tutorial.RES_CODE + 2, // 163: tutorial.ResSendWishBeg.Code:type_name -> tutorial.RES_CODE + 2, // 164: tutorial.ResFreeShop.Code:type_name -> tutorial.RES_CODE + 2, // 165: tutorial.ResBuyChessShop.Code:type_name -> tutorial.RES_CODE + 500, // 166: tutorial.ReqBuyChessShop2.mChessData:type_name -> tutorial.ReqBuyChessShop2.MChessDataEntry + 2, // 167: tutorial.ResBuyChessShop2.Code:type_name -> tutorial.RES_CODE + 2, // 168: tutorial.ResRefreshChessShop.Code:type_name -> tutorial.RES_CODE + 501, // 169: tutorial.ResEndless.EndlessList:type_name -> tutorial.ResEndless.EndlessListEntry + 164, // 170: tutorial.ResEndlessInfo.Items:type_name -> tutorial.ItemInfo + 2, // 171: tutorial.ResEndlessReward.Code:type_name -> tutorial.RES_CODE + 2, // 172: tutorial.ResPiggyBankReward.Code:type_name -> tutorial.RES_CODE + 2, // 173: tutorial.ResChargeReceive.Code:type_name -> tutorial.RES_CODE + 2, // 174: tutorial.ResShippingOrder.Code:type_name -> tutorial.RES_CODE + 2, // 175: tutorial.ResChampshipReward.Code:type_name -> tutorial.RES_CODE + 2, // 176: tutorial.ResChampshipRankReward.Code:type_name -> tutorial.RES_CODE + 502, // 177: tutorial.ResChampshipRank.RankList:type_name -> tutorial.ResChampshipRank.RankListEntry + 503, // 178: tutorial.ResChampshipPreRank.RankList:type_name -> tutorial.ResChampshipPreRank.RankListEntry + 504, // 179: tutorial.ResNotifyCard.Card:type_name -> tutorial.ResNotifyCard.CardEntry + 505, // 180: tutorial.ResNotifyCard.Master:type_name -> tutorial.ResNotifyCard.MasterEntry + 506, // 181: tutorial.ResNotifyCard.Handbook:type_name -> tutorial.ResNotifyCard.HandbookEntry + 2, // 182: tutorial.ResSetFacebookUrl.Code:type_name -> tutorial.RES_CODE + 507, // 183: tutorial.ResMining.Map:type_name -> tutorial.ResMining.MapEntry + 508, // 184: tutorial.ReqMiningTake.Map:type_name -> tutorial.ReqMiningTake.MapEntry + 2, // 185: tutorial.ResMiningTake.Code:type_name -> tutorial.RES_CODE + 2, // 186: tutorial.ResMiningReward.Code:type_name -> tutorial.RES_CODE + 509, // 187: tutorial.ResActRed.Red:type_name -> tutorial.ResActRed.RedEntry + 200, // 188: tutorial.ActivityNotify.Info:type_name -> tutorial.ActivityInfo + 510, // 189: tutorial.ResItem.Item:type_name -> tutorial.ResItem.ItemEntry + 511, // 190: tutorial.ItemNotify.Item:type_name -> tutorial.ItemNotify.ItemEntry + 352, // 191: tutorial.ResGuessColor.MapList:type_name -> tutorial.GuessColorInfo + 512, // 192: tutorial.ResGuessColor.OMap:type_name -> tutorial.ResGuessColor.OMapEntry + 350, // 193: tutorial.ResGuessColor.Opponent:type_name -> tutorial.opponent + 352, // 194: tutorial.ReqGuessColorTake.Map:type_name -> tutorial.GuessColorInfo + 513, // 195: tutorial.ReqGuessColorTake.OMap:type_name -> tutorial.ReqGuessColorTake.OMapEntry + 514, // 196: tutorial.GuessColorInfo.Map:type_name -> tutorial.GuessColorInfo.MapEntry + 2, // 197: tutorial.ResGuessColorTake.Code:type_name -> tutorial.RES_CODE + 2, // 198: tutorial.ResGuessColorReward.Code:type_name -> tutorial.RES_CODE + 358, // 199: tutorial.ResRace.Opponent:type_name -> tutorial.raceopponent + 2, // 200: tutorial.ResRaceStart.Code:type_name -> tutorial.RES_CODE + 2, // 201: tutorial.ResRaceReward.Code:type_name -> tutorial.RES_CODE + 164, // 202: tutorial.ResPlayroom.Items:type_name -> tutorial.ItemInfo + 392, // 203: tutorial.ResPlayroom.Opponent:type_name -> tutorial.RoomOpponent + 391, // 204: tutorial.ResPlayroom.Friend:type_name -> tutorial.FriendRoom + 515, // 205: tutorial.ResPlayroom.Playroom:type_name -> tutorial.ResPlayroom.PlayroomEntry + 377, // 206: tutorial.ResPlayroom.collect:type_name -> tutorial.PlayroomCollectInfo + 516, // 207: tutorial.ResPlayroom.Mood:type_name -> tutorial.ResPlayroom.MoodEntry + 164, // 208: tutorial.ResPlayroom.LoseItem:type_name -> tutorial.ItemInfo + 387, // 209: tutorial.ResPlayroom.Chip:type_name -> tutorial.ChipInfo + 517, // 210: tutorial.ResPlayroom.Physiology:type_name -> tutorial.ResPlayroom.PhysiologyEntry + 518, // 211: tutorial.ResPlayroom.Dress:type_name -> tutorial.ResPlayroom.DressEntry + 519, // 212: tutorial.ResPlayroom.DressSet:type_name -> tutorial.ResPlayroom.DressSetEntry + 376, // 213: tutorial.ResPlayroom.PetAir:type_name -> tutorial.PlayroomAirInfo + 174, // 214: tutorial.ResPlayroom.DailyTask:type_name -> tutorial.DailyTask + 389, // 215: tutorial.ResPlayroom.AdItem:type_name -> tutorial.AdItem + 391, // 216: tutorial.ResPlayroom.Target:type_name -> tutorial.FriendRoom + 174, // 217: tutorial.NotifyPlayroomTask.DailyTask:type_name -> tutorial.DailyTask + 2, // 218: tutorial.ResPlayroomTask.Code:type_name -> tutorial.RES_CODE + 2, // 219: tutorial.ResPlayroomTaskReward.Code:type_name -> tutorial.RES_CODE + 2, // 220: tutorial.ResPlayroomUnlock.Code:type_name -> tutorial.RES_CODE + 2, // 221: tutorial.ResPlayroomUpvote.Code:type_name -> tutorial.RES_CODE + 375, // 222: tutorial.PlayroomDress.List:type_name -> tutorial.PlayroomDressInfo + 520, // 223: tutorial.ReqPlayroomDressSet.DressSet:type_name -> tutorial.ReqPlayroomDressSet.DressSetEntry + 2, // 224: tutorial.ResPlayroomDressSet.Code:type_name -> tutorial.RES_CODE + 2, // 225: tutorial.ResPlayroomPetAirSet.Code:type_name -> tutorial.RES_CODE + 2, // 226: tutorial.ResPlayroomWrokOutline.Code:type_name -> tutorial.RES_CODE + 164, // 227: tutorial.NotifyPlayroomLose.LoseItem:type_name -> tutorial.ItemInfo + 387, // 228: tutorial.NotifyPlayroomLose.Chip:type_name -> tutorial.ChipInfo + 521, // 229: tutorial.NotifyPlayroomMood.Mood:type_name -> tutorial.NotifyPlayroomMood.MoodEntry + 522, // 230: tutorial.NotifyPlayroomMood.Physiology:type_name -> tutorial.NotifyPlayroomMood.PhysiologyEntry + 389, // 231: tutorial.NotifyPlayroomMood.AdItem:type_name -> tutorial.AdItem + 523, // 232: tutorial.ResPlayroomInfo.Playroom:type_name -> tutorial.ResPlayroomInfo.PlayroomEntry + 524, // 233: tutorial.ResPlayroomInfo.Items:type_name -> tutorial.ResPlayroomInfo.ItemsEntry + 525, // 234: tutorial.ResPlayroomInfo.flip:type_name -> tutorial.ResPlayroomInfo.FlipEntry + 526, // 235: tutorial.ResPlayroomInfo.Emoji:type_name -> tutorial.ResPlayroomInfo.EmojiEntry + 527, // 236: tutorial.ResPlayroomInfo.DressSet:type_name -> tutorial.ResPlayroomInfo.DressSetEntry + 2, // 237: tutorial.ResPlayroomFlip.Code:type_name -> tutorial.RES_CODE + 2, // 238: tutorial.ResPlayroomGuide.Code:type_name -> tutorial.RES_CODE + 2, // 239: tutorial.ResPlayroomFlipReward.Code:type_name -> tutorial.RES_CODE + 2, // 240: tutorial.ResPlayroomGame.Code:type_name -> tutorial.RES_CODE + 528, // 241: tutorial.ResPlayroomGame.Items:type_name -> tutorial.ResPlayroomGame.ItemsEntry + 164, // 242: tutorial.ResPlayroomGameShowReward.Items:type_name -> tutorial.ItemInfo + 2, // 243: tutorial.ResPlayroomInteract.Code:type_name -> tutorial.RES_CODE + 529, // 244: tutorial.ReqPlayroomSetRoom.Playroom:type_name -> tutorial.ReqPlayroomSetRoom.PlayroomEntry + 2, // 245: tutorial.ResPlayroomSetRoom.Code:type_name -> tutorial.RES_CODE + 2, // 246: tutorial.ResPlayroomSelectReward.Code:type_name -> tutorial.RES_CODE + 2, // 247: tutorial.ResPlayroomLose.Code:type_name -> tutorial.RES_CODE + 2, // 248: tutorial.ResPlayroomWork.Code:type_name -> tutorial.RES_CODE + 2, // 249: tutorial.ResPlayroomRest.Code:type_name -> tutorial.RES_CODE + 2, // 250: tutorial.ResPlayroomDraw.Code:type_name -> tutorial.RES_CODE + 2, // 251: tutorial.ResPlayroomChip.Code:type_name -> tutorial.RES_CODE + 2, // 252: tutorial.ResPlayroomBuyItem.Code:type_name -> tutorial.RES_CODE + 2, // 253: tutorial.ResPlayroomShop.Code:type_name -> tutorial.RES_CODE + 427, // 254: tutorial.ResFriendTreasure.List:type_name -> tutorial.TreasureInfo + 427, // 255: tutorial.ReqFriendTreasureStart.List:type_name -> tutorial.TreasureInfo + 2, // 256: tutorial.ResFriendTreasureStart.Code:type_name -> tutorial.RES_CODE + 2, // 257: tutorial.ResFriendTreasureEnd.Code:type_name -> tutorial.RES_CODE + 2, // 258: tutorial.ResFriendTreasureFilp.Code:type_name -> tutorial.RES_CODE + 438, // 259: tutorial.ResCollectInfo.Items:type_name -> tutorial.CollectItem + 164, // 260: tutorial.CollectItem.Items:type_name -> tutorial.ItemInfo + 2, // 261: tutorial.ResCollect.Code:type_name -> tutorial.RES_CODE + 443, // 262: tutorial.ResCatnip.GameList:type_name -> tutorial.CatnipGame + 225, // 263: tutorial.CatnipGame.Partner:type_name -> tutorial.ResPlayerSimple + 2, // 264: tutorial.ResCatnipInvite.Code:type_name -> tutorial.RES_CODE + 2, // 265: tutorial.ResCatnipAgree.Code:type_name -> tutorial.RES_CODE + 2, // 266: tutorial.ResCatnipRefuse.Code:type_name -> tutorial.RES_CODE + 2, // 267: tutorial.ResCatnipMultiply.Code:type_name -> tutorial.RES_CODE + 2, // 268: tutorial.ResCatnipPlay.Code:type_name -> tutorial.RES_CODE + 2, // 269: tutorial.ResCatnipReward.Code:type_name -> tutorial.RES_CODE + 2, // 270: tutorial.ResCatnipGrandReward.Code:type_name -> tutorial.RES_CODE + 167, // 271: tutorial.ResGuideTask.TaskEntry.value:type_name -> tutorial.GuideTask + 173, // 272: tutorial.ResDailyTask.WeekRewardEntry.value:type_name -> tutorial.DailyWeek + 174, // 273: tutorial.ResDailyTask.DailyTaskEntry.value:type_name -> tutorial.DailyTask + 210, // 274: tutorial.ResLimitEvent.LimitEventListEntry.value:type_name -> tutorial.LimitEvent + 225, // 275: tutorial.ResRank.RankListEntry.value:type_name -> tutorial.ResPlayerSimple + 273, // 276: tutorial.ResMailList.MailListEntry.value:type_name -> tutorial.MailInfo + 289, // 277: tutorial.ResCharge.SpecialShopEntry.value:type_name -> tutorial.ResSpecialShop + 290, // 278: tutorial.ResCharge.ChessShopEntry.value:type_name -> tutorial.ResChessShop + 301, // 279: tutorial.ResEndless.EndlessListEntry.value:type_name -> tutorial.ResEndlessInfo + 226, // 280: tutorial.ResChampshipRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 226, // 281: tutorial.ResChampshipPreRank.RankListEntry.value:type_name -> tutorial.ResPlayerRank + 374, // 282: tutorial.ResPlayroom.DressEntry.value:type_name -> tutorial.PlayroomDress + 164, // 283: tutorial.ResPlayroomInfo.ItemsEntry.value:type_name -> tutorial.ItemInfo + 164, // 284: tutorial.ResPlayroomGame.ItemsEntry.value:type_name -> tutorial.ItemInfo + 285, // [285:285] is the sub-list for method output_type + 285, // [285:285] is the sub-list for method input_type + 285, // [285:285] is the sub-list for extension type_name + 285, // [285:285] is the sub-list for extension extendee + 0, // [0:285] is the sub-list for field type_name } func init() { file_proto_Gameapi_proto_init() }