Merge branch 'develop' into sdk

This commit is contained in:
hahwu 2025-09-28 15:25:06 +08:00
commit 9a332a845c
25 changed files with 1338 additions and 391 deletions

View File

@ -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{}{

View File

@ -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 {

View File

@ -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 {

View File

@ -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")

View File

@ -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 {

View File

@ -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 {

View File

@ -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)

View File

@ -196,7 +196,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()

View File

@ -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
}

View File

@ -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
}

View File

@ -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

View File

@ -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 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 {
if k == OrderMod.Auto_id {
if v.Type != order.COMFORT_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.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
}
}
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.Pet_type {
continue
}
Items := make([]*item.Item, 0)
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.Diff == order.DIFF_LOW {
continue
}
if v.Type == order.Part_type {
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
}
}
}

View File

@ -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{}{
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,
})

View File

@ -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) {

View File

@ -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
}

View File

@ -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)
}
}

View File

@ -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))

View File

@ -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
}

View File

@ -27,6 +27,7 @@ type BubbleInfo struct {
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,20 +273,25 @@ 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,
ItemList: ItemList,
}
}
@ -293,6 +300,7 @@ func (f *FriendMod) GetBubbble(Id int) *msg.FriendBubbleInfo {
return &msg.FriendBubbleInfo{
Id: int32(v.Id),
Type: int32(v.Type),
Items: item.ItemToMsg(v.ItemList),
}
}
return nil
@ -304,6 +312,7 @@ func (f *FriendMod) BubbleBackData() *msg.ResFriendBubble {
rs = append(rs, &msg.FriendBubbleInfo{
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")
}

View File

@ -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 (

View File

@ -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 {

View File

@ -2,7 +2,6 @@ package order
import (
"fmt"
"log"
"server/GoUtil"
limitedTimeEventCfg "server/conf/limitedTimeEvent"
mergeDataCfg "server/conf/mergeData"
@ -26,11 +25,14 @@ type OrderMod struct {
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,21 +312,9 @@ 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 {
err := o.CreateNormalOrder(lv, Emit, EnergyMul, OrderType)
return err
}
}
return nil
}
func (o *OrderMod) CreatePriorityOrder(lv int, Emit []int) bool {
if len(Emit) == 0 {
@ -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 {
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)}
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++
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) {

View File

@ -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) {
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
}
EmitProduct := mergeDataCfg.GetEmitProduceType(v)
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
PopEmitIdProductNum := mergeDataCfg.GetEmitProductNumByColor(PopEmitId)
o.initColorShuffle(Emit)
if PopEmitIdProductNum == 1 && ChessColorNum[PopEmitId] >= 2 {
continue
} else {
break
}
ColorShuffle = append(ColorShuffle, EmitProduct...)
}
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
}
// 获取发射器系列

View File

@ -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
}

View File

@ -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
}
@ -13191,6 +13197,7 @@ 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:
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() }