Merge branch 'develop' into audit

This commit is contained in:
hahwu 2025-09-30 10:23:42 +08:00
commit 014b84d86b
31 changed files with 1527 additions and 459 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

@ -10,14 +10,15 @@ import (
const (
CFG_CHARGE = "Charge"
CFG_DIAMOND_SHOP = "DiamondShop"
CFG_ENERGY_SHOP = "EnergyShop"
CFG_SEPCIAL_SHOP = "SpecialShop"
CFG_FREE_SHOP = "FreeShop"
CFG_CHARGE_CONST = "ChargeConst"
CFG_CHARGE_GIFT = "ChargeGift"
CFG_CHARGE_WISH = "ChargeWish"
CFG_DIAMOND_SHOP = "DiamondShop" // 钻石商店
CFG_ENERGY_SHOP = "EnergyShop" // 体力商店
CFG_SEPCIAL_SHOP = "SpecialShop" // 特惠商店
CFG_FREE_SHOP = "FreeShop" // 免费商店
CFG_CHARGE_CONST = "ChargeConst" // 充值常量配置
CFG_CHARGE_GIFT = "ChargeGift" // 充值礼包
CFG_CHARGE_WISH = "ChargeWish" // 许愿配置
CFG_CHARGE_PETCOIN = "ChargePetCoin" // 宠物币充值配置
CFG_CHARGE_AD = "ChargeAD" // 广告充值配置
)
func init() {
@ -30,6 +31,20 @@ func init() {
gamedata.InitCfg(CFG_CHARGE_GIFT)
gamedata.InitCfg(CFG_CHARGE_WISH)
gamedata.InitCfg(CFG_CHARGE_PETCOIN)
gamedata.InitCfg(CFG_CHARGE_AD)
}
func GetADReward(ChargeId int) ([]*item.Item, int) {
data, err := gamedata.GetData(CFG_CHARGE_AD)
if err != nil {
return nil, 0
}
for _, v := range data {
if gamedata.GetIntValue(v, "ChargeId") == ChargeId {
return item.ParseItem(gamedata.GetValue(v, "Items")), gamedata.GetIntValue(v, "PetWork")
}
}
return nil, 0
}
func GetMoneyCharge(ChargeId int) float64 {

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

@ -110,7 +110,7 @@ func GetNameById(Id int) string {
log.Debug("MergeDataCfg GetOne Id:%v not found", Id)
return ""
}
return gamedata.GetStringValue(data, "Icon")
return gamedata.GetStringValue(data, "Title")
}
// 根据等级和颜色获取棋子id
@ -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)
@ -279,6 +294,15 @@ func GetEmitType(Id int) string {
return gamedata.ParseString(data["Emit_Type"])
}
func GetEmitN(EmitSeries string) int {
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, EmitSeries)
if err != nil {
log.Debug("GetEmitN GetOne EmitSeries:%v not found", EmitSeries)
return 0
}
return gamedata.GetIntValue(data, "N")
}
// 获取常量
func GetConst(Key string) string {
data, err := gamedata.GetDataByKey(CONST_NAME, Key)
@ -368,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

@ -17,6 +17,7 @@ func Charge(p *Player, ChargeId int) {
PiggyBankFire(p, ChargeId) // 猪猪银行
PlayroomFire(p, ChargeId) // 游乐场
ActivityFire(p, ChargeId) // 活动礼包
ADPetWorkFire(p, ChargeId) // 广告宠物工作
OrderMod := p.PlayMod.getOrderMod()
OrderMod.SetIsCharge() // 设置订单模块为充值状态
p.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PURCHASE, A: []interface{}{}})
@ -32,6 +33,21 @@ func SendCharge(p *Player, d *ChargeExtra) {
})
}
func ADPetWorkFire(p *Player, ChargeId int) {
ChargeMod := p.PlayMod.getChargeMod()
Item := ChargeMod.FireAdReward(ChargeId)
if Item == nil {
return
}
err := p.HandleItem(Item, msg.ITEM_POP_LABEL_ActivityGift.String())
if err != nil {
log.Debug("ChargeFire err : %s", err)
return
}
p.PlayMod.save()
p.PushClientRes(ChargeMod.BackData())
}
func ActivityFire(p *Player, ChargeId int) {
ActivityMod := p.PlayMod.getActivityMod()
ActivityId := activityCfg.GetActivityGiftId(ChargeId)

View File

@ -199,7 +199,7 @@ func ReqGmCommand_(player *Player, Command string) error {
EnergyMul := player.PlayMod.getBaseMod().GetEnergyMul()
OrderMod := player.PlayMod.getOrderMod()
OrderMod.LastOrder.Type = 1
OrderMod.CreateOrder(Lv, EmitList, EnergyMul)
OrderMod.CreateOrder(Lv, EmitList, EnergyMul, order.Common_type)
player.PushClientRes(player.PlayMod.getOrderMod().BackData())
case "resetCardReq":
CardMod := player.PlayMod.getCardMod()

View File

@ -275,6 +275,12 @@ func (p *Player) InitPlayer(UserName string) error {
// GoUtil.RegisterEvent(MergeConst.Notify_Midday_Renew, p.ZeroUpdate, p)
SyncFriendMsg(p)
p.UpdateUserInfo()
// fix bug
ChargeMod := p.PlayMod.getChargeMod()
ChessMod := p.PlayMod.getChessMod()
ChargeMod.FixBug(ChessMod.GetEmitList())
p.FixOrderBug()
return nil
}
@ -310,7 +316,8 @@ func (p *Player) ZeroUpdate(a []interface{}) {
// 礼包充值
ChessMod := p.PlayMod.getChessMod()
p.PlayMod.getChargeMod().ZeroUpdate(ChessMod.GetEmitList())
ChargeMod := p.PlayMod.getChargeMod()
ChargeMod.ZeroUpdate(ChessMod.GetEmitList())
p.PushClientRes(p.PlayMod.getChargeMod().BackData())
// 无尽礼包
@ -796,6 +803,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
PlayroomBackData(p)
}
}
p.PetItemUseLog(itemList)
CardMod := p.PlayMod.getCardMod()
p.PushClientRes(CardMod.NotifyCard())
p.PushClientRes(ItemMod.NotifyItem())

View File

@ -265,7 +265,7 @@ func (p *PlayerBaseData) ReqUnBindFacebook(player *Player, buf []byte) {
G_getGameLogic().PackResInfo(agent, "ResUnBindFacebook", data)
p.SaveDataFromDB("")
player.TeLog("platform_disconnect", map[string]interface{}{
"platform_type": "facebook",
"platform_type": "Facebook",
"platform_id": req.BindAccountId,
})
}
@ -528,7 +528,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error)
ChargeMod.TriggerChargeUnlock(int(BaseMod.Level), ChessMod.GetEmitList())
player.PushClientRes(ChargeMod.BackData())
OrderMod := player.PlayMod.getOrderMod()
OrderMod.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul())
player.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul())
player.PushClientRes(OrderMod.BackData())
// 重载活动
player.initAcitivity()
@ -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
@ -235,6 +236,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
}
player.TeLog("sell_item", map[string]interface{}{
"merge_item_id": ChessId,
"product_name": mergeDataCfg.GetNameById(ChessId),
"get_star_num": items[0].Num,
})
itemList = item.Merge(itemList, items)
@ -282,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
@ -312,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: // # 玩家输了
@ -267,7 +270,13 @@ func handle(p *Player, m *msg.Msg) error {
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()
@ -403,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: // 删除好友
@ -849,6 +858,9 @@ func EmitRetireTrigger1(p *Player) {
})
OrderMod := p.PlayMod.getOrderMod()
OrderMod.Retire(EmitId1[0])
p.TeLog("launcher_retire", map[string]interface{}{
"launcher_type": EmitId1[0],
})
ChessMod.BeginRetire(EmitId1[0])
}
@ -879,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
@ -986,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()
@ -995,33 +1131,47 @@ func (player *Player) FormatOrderReward() {
ExpCoin := (Exp-BaseMod.GetExp())*decorateCfg.GetAreaPerPExp(DecorateMod.GetAreaId()) - BaseMod.GetStar()
PExpCoin := (PExp-BaseMod.GetPExp())*50 - player.GetPetOrderItemExp()
OrderMod := player.PlayMod.getOrderMod()
if ExpCoin > PExpCoin || BaseMod.GetLevel() < 17 {
// 预热订单
// 安慰订单
Now := GoUtil.Now()
if OrderMod.LastOrder.Type == order.COMFORT_TYPE && Now < int64(OrderMod.ComfortEndTime) {
OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.COMFORT_TYPE)
for k, v := range OrderMod.GetOrderList() {
if len(v.Items) != 0 {
continue
if k == OrderMod.Auto_id {
if v.Type != order.COMFORT_TYPE {
continue
}
Items := make([]*item.Item, 0)
Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit())
Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star})
OrderMod.OrderList[k] = v
}
if v.Type != order.Common_type {
continue
}
Star := order.GetOrderStar(v.MergeId)
Star = int(float64(Star)*float64(OrderFactor)/10) * 10
v.Items = append(v.Items, &item.Item{
Id: item.ITEM_STAR_ID,
Num: Star,
})
OrderMod.OrderList[k] = v
}
} else {
return
}
PetTrigger := true
for _, v := range OrderMod.GetOrderList() {
if v.Type == order.Pet_type {
PetTrigger = false
break
}
}
if PExpCoin > ExpCoin && PetTrigger && BaseMod.GetLevel() >= 17 {
OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Pet_type)
for k, v := range OrderMod.GetOrderList() {
if len(v.Items) != 0 {
continue
}
if v.Type != order.Common_type {
if v.Type != order.Pet_type {
continue
}
Items := make([]*item.Item, 0)
Star := order.GetOrderStar(v.MergeId)
Star = int(float64(Star)*float64(OrderFactor)/10) * 10
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
Items = player.GetPetOrderReward(Star, Items)
if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID {
v.Type = order.Common_type
@ -1031,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()
@ -1048,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 {
continue
if v.Type == order.Part_type {
v.Items = []*item.Item{item.NewItem(item.ITEM_LAUNCHER_ID, 2)}
OrderMod.OrderList[k] = v
}
if v.Diff == order.DIFF_LOW {
continue
}
v.Items = []*item.Item{item.NewItem(item.ITEM_LAUNCHER_ID, 2)}
v.Type = order.Part_type
OrderMod.OrderList[k] = v
break
}
return
}
OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Common_type)
}
func (player *Player) InitOrderItem() {
OrderMod := player.PlayMod.getOrderMod()
DecorateMod := player.PlayMod.getDecorateMod()
ChessMod := player.PlayMod.getChessMod()
OrderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
for k, v := range OrderMod.GetOrderList() {
if v.Type == order.Super_type {
continue
}
if len(v.Items) != 0 {
continue
}
Items := make([]*item.Item, 0)
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
Star = int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10
v.Items = append(Items, &item.Item{Id: item.ITEM_STAR_ID, Num: Star})
OrderMod.OrderList[k] = v
}
}
func (player *Player) GetPetOrderReward(Star int, Items []*item.Item) []*item.Item {
OrderItem := playroomCfg.GetOrderItem(Star)
type sortData struct {
@ -1192,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

@ -27,7 +27,7 @@ func (p *Player) PetItemGetLog(Item []*item.Item, Cost []*item.Item, Label strin
CostNum := 0
if len(Cost) > 0 {
switch Cost[0].Id {
case item.ITEM_TYPE_DIAMOND:
case item.ITEM_DIAMOND_ID:
CostType = "diamond"
case item.ITEM_STAR_ID:
CostType = "star"
@ -36,7 +36,7 @@ func (p *Player) PetItemGetLog(Item []*item.Item, Cost []*item.Item, Label strin
default:
CostType = "unknown"
}
CostNum = Cost[0].Num
CostNum = -Cost[0].Num
}
for _, v := range Item {
Type := itemCfg.GetItemType(v.Id)
@ -61,7 +61,7 @@ func (p *Player) PetItemGetLog_(Type int, Name string, Label string, CostType st
func (p *Player) PetItemUseLog(Item []*item.Item) {
for _, v := range Item {
Type := itemCfg.GetItemType(v.Id)
if Type == item.ITEM_TYPE_PLAYROOM_PET {
if Type == item.ITEM_TYPE_PLAYROOM_PET && v.Num < 0 {
Name, _ := itemCfg.GetItemName(v.Id)
Effect := itemCfg.GetItemEffect(v.Id)
p.TeLog("pet_item_use", map[string]interface{}{

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
@ -325,11 +328,29 @@ func ReqRewardOrder(player *Player, buf []byte) error {
// 每日任务
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_FINISHORDER})
order_star_reward := 0
order_item_reward := []int{}
for _, v := range Item {
if v.Id == item.ITEM_STAR_ID {
order_star_reward += v.Num
} else {
order_item_reward = append(order_item_reward, v.Id)
}
}
preset_order_group := 0
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,
"order_type": OrderType,
"order_star_reward": Star,
"order_id": int(req.OrderId),
"order_item_id": mergeList,
"order_type": OrderType,
"order_star_reward": order_star_reward,
"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)
@ -343,16 +364,29 @@ func ReqRewardOrder(player *Player, buf []byte) error {
// } else {
// OrderMod.CreateOrderSeed(NewOrder)
// }
OrderMod.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul)
player.FormatOrderReward()
player.TriggerOrder(Lv, order.TRIGGER_TYPE_ORDER, Emit, EnergyMul)
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()
@ -403,7 +437,7 @@ func ReqDecorate(player *Player, buf []byte) error {
DecorateMod := player.PlayMod.getDecorateMod()
DecorateId := int(req.DecorateId)
AreaId := int(req.AreaId)
CostItem, PetExp := DecorateMod.GetDecorateCostItem(AreaId, DecorateId)
CostItem, PetExp, PartItem := DecorateMod.GetDecorateCostItem(AreaId, DecorateId)
err := player.HandleLoseItem(CostItem, msg.ITEM_POP_LABEL_DecorateCost.String()) // 扣除道具
if err != nil {
player.SendErrClienRes(&msg.ResDecorate{
@ -451,7 +485,8 @@ func ReqDecorate(player *Player, buf []byte) error {
})
}
player.TeLog("finish_deco", map[string]interface{}{
"deco_step_id": fmt.Sprintf("%d_%d", AreaId, DecorateId),
"deco_step_id": fmt.Sprintf("%d_%d", AreaId, DecorateId),
"material_cost": PartItem,
})
player.PlayMod.save()
@ -616,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{
@ -726,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{
@ -831,9 +868,9 @@ func ReqUpgradeChess(player *Player, buf []byte) error {
})
return err
}
player.TeLog("ReqUpgradeChess", map[string]interface{}{
"chess_id": req.ChessId,
"new_chess": NewChess,
player.TeLog("wand_use", map[string]interface{}{
"wand_item_id": req.ChessId,
"new_chess": NewChess,
})
Handbook := player.PlayMod.getHandbookMod()
Handbook.SetHandbook(NewChess)
@ -1196,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
}
@ -1270,9 +1307,11 @@ func ReqGetGuideTaskReward(player *Player, buf []byte) error {
})
return err
}
player.TeLog("ReqGetGuideTaskReward", map[string]interface{}{
"task_id": int(req.Id),
"item_list": itemList,
player.TeLog("new_player_task", map[string]interface{}{
"task_id": int(req.Id),
"item_list": itemList,
"task_gruop": GuideTaskCfg.GetUnlock(int(req.Id)),
"task_score_reward": GuideTaskCfg.GetActiveReward2(GuideTaskMod.Reward, GuideTaskMod.Active),
})
player.PlayMod.save()
player.PushClientRes(GuideTaskMod.BackData())
@ -1365,8 +1404,13 @@ func ReqSetFace(player *Player, buf []byte) error {
player.PushClientRes(&msg.ResSetFace{
Code: msg.RES_CODE_SUCCESS,
})
is_platform := false
if req.Face == 0 {
is_platform = true
}
player.TeLog("face_set", map[string]interface{}{
"face_id": int(req.Face),
"face_id": int(req.Face),
"is_platform": is_platform,
})
player.PlayerDecoSetLog("face", int(req.Face), "")
BackUserInfo(player)
@ -1680,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
}
@ -1715,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)
@ -2454,7 +2494,7 @@ func ReqBuyChessShop(player *Player, buf []byte) error {
"item_id": int(req.Id),
"change_num": 1,
"cost_type": "diamond",
"cost_num": LostItem[0].Num,
"cost_num": -LostItem[0].Num,
})
player.PlayMod.save()
player.PushClientRes(ChargeMod.BackData())
@ -2462,7 +2502,7 @@ func ReqBuyChessShop(player *Player, buf []byte) error {
Code: msg.RES_CODE_SUCCESS,
})
player.TeLog("buy_product_diamond", map[string]interface{}{
"diamond_cost": LostItem[0].Num,
"diamond_cost": -LostItem[0].Num,
"product_id": int(req.Id),
"product_name": mergeDataCfg.GetNameById(int(req.Id)),
})
@ -3005,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
}
@ -3046,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
}
@ -3056,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,
@ -3073,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())
@ -3436,7 +3476,7 @@ func ReqPlayroomSetRoom(player *Player, buf []byte) error {
req := &msg.ReqPlayroomSetRoom{}
proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod()
Diff, err := PlayroomMod.SetRoom(GoUtil.MapInt32ToInt(req.Playroom))
_, err := PlayroomMod.SetRoom(GoUtil.MapInt32ToInt(req.Playroom))
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomSetRoom{
Code: msg.RES_CODE_FAIL,
@ -3446,7 +3486,7 @@ func ReqPlayroomSetRoom(player *Player, buf []byte) error {
}
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_ROOMDEC})
player.PlayMod.save()
player.RoomDecoSetLog(Diff)
//player.RoomDecoSetLog(Diff)
player.PushClientRes(&msg.ResPlayroomSetRoom{
Code: msg.RES_CODE_SUCCESS,
})
@ -3467,7 +3507,6 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
return fmt.Errorf("no target")
}
Items := player.GetPlayroomGameReward(int(req.Type), 0)
PlayroomMod.ResetGame()
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_PlayroomGame.String())
if err != nil {
player.SendErrClienRes(&msg.ResPlayroomGame{
@ -3498,6 +3537,7 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
"is_chip": false,
"item_list": Items,
})
PlayroomMod.ResetGame()
PlayroomBackData(player)
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_game")
player.PushClientRes(&msg.ResPlayroomGame{
@ -3548,12 +3588,13 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
player.GetPetThiefReward(Target)
}
G_GameLogicPtr.SetUserData(Target, VAR_OP_CHIP, 1)
PlayroomMod.ResetGame()
player.TeLog("finish_mini_game", map[string]interface{}{
"mini_game_type": PlayroomMod.GetGameId(),
"is_chip": true,
"item_list": Items,
})
PlayroomMod.ResetGame()
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward")
PlayroomBackData(player)
player.PlayMod.save()
@ -3754,7 +3795,7 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
},
})
player.TeLog("finish_mini_game", map[string]interface{}{
"mini_game_type": PlayroomMod.GetGameId(),
"mini_game_type": playroom.GAME_TYPE_FILP,
"is_chip": false,
"item_list": Items,
})
@ -3894,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{
@ -4192,11 +4234,14 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error {
)
return err
}
player.TeLog("friend_treasure_end", map[string]interface{}{
"items": Items,
"num": FriendItemNum,
player.TeLog("pet_treasure_open", map[string]interface{}{
"pet_treasure_step": FriendTreasureMod.Shift,
"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,
})
@ -4346,7 +4391,7 @@ func ReqPlayroomDressSet(player *Player, buf []byte) error {
req := &msg.ReqPlayroomDressSet{}
proto.Unmarshal(buf, req)
PlayroomMod := player.PlayMod.getPlayroomMod()
Parts, Diff, error := PlayroomMod.PlayroomDressSet(GoUtil.MapInt32ToInt(req.DressSet))
Parts, _, error := PlayroomMod.PlayroomDressSet(GoUtil.MapInt32ToInt(req.DressSet))
if error != nil {
player.SendErrClienRes(&msg.ResPlayroomDressSet{
Code: msg.RES_CODE_FAIL,
@ -4356,7 +4401,7 @@ func ReqPlayroomDressSet(player *Player, buf []byte) error {
}
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PETDRESS, A: []interface{}{Parts}})
player.PlayMod.save()
player.PetDecoSetLog(Diff)
//player.PetDecoSetLog(Diff)
PlayroomBackData(player)
player.PushClientRes(&msg.ResPlayroomDressSet{
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,7 +137,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
SendCharge(player, OrderExtraData)
}
OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP
OrderData.PayChannelOrderId = req.Token
OrderData.ProductName = req.ProduceId
db.UpdatePlayerChargeData(OrderData)
player.PlayMod.save()
orderDataMap := map[string]interface{}{
@ -157,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 < 5000; 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,7 +305,13 @@ func UnitPlayroomOrder(p *Player) error {
}
func UnitPetOrder(p *Player) error {
p.FormatOrderReward()
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
}
@ -301,7 +323,7 @@ func UnitDecoratePartCost(p *Player) error {
DecorateMod.PartClassPool = []int{}
DecorateMod.PartPool = make(map[int]int)
DecorateMod.InitData()
Items, _ := DecorateMod.GetDecorateCostItem(1, 33)
Items, _, _ := DecorateMod.GetDecorateCostItem(1, 33)
err := p.HandleLoseItem(Items, "")
if err != nil {
fmt.Print(err)
@ -319,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

@ -32,9 +32,9 @@ type ChargeMod struct {
Gift map[int]int // 礼包
Ad bool // 是否购买免广告
WishList *WishList
Ad bool // 是否购买免广告
AdEndTime int64
WishList *WishList
}
type WishList struct {
@ -132,6 +132,12 @@ func (c *ChargeMod) NoonUpdate(Emit []int) {
c.InitChessShop(Emit)
}
func (c *ChargeMod) FixBug(Emit []int) {
if len(c.ChessShop) < 5 {
c.InitChessShop(Emit)
}
}
// 充值
func (c *ChargeMod) Fire(ChargeId int) (Item []*item.Item) {
Money := chargeCfg.GetMoneyCharge(ChargeId)
@ -237,6 +243,21 @@ func (c *ChargeMod) FireAd(ChargeId int) []*item.Item {
return nil
}
// 免广告礼包
func (c *ChargeMod) FireAdReward(ChargeId int) []*item.Item {
Items, PetWorkDay := chargeCfg.GetADReward(ChargeId)
if PetWorkDay != 0 {
Now := GoUtil.Now()
if c.AdEndTime < Now {
c.AdEndTime = Now + int64(PetWorkDay*24*3600)
} else {
c.AdEndTime += int64(PetWorkDay * 24 * 3600)
}
c.Ad = true
}
return Items
}
// 免费商店
func (c *ChargeMod) FireFreeShop() ([]*item.Item, error) {
if c.FreeShop >= 2 {
@ -286,6 +307,7 @@ func (c *ChargeMod) BackData() *msg.ResCharge {
TodayCharge: float32(c.TodayCharge),
MonthCharge: float32(c.MonthCharge),
Wish: resWish,
AdEndTime: c.AdEndTime,
}
}

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

@ -75,20 +75,22 @@ func (d *Decorate) GetDecorateAddEnergy(cnt int) []*item.Item {
}
// 获取装饰消耗
func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int) {
func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int) ([]*item.Item, int, []*item.Item) {
Item := decorateCfg.GetStarCost(AreaId, DecorateId)
PetExp := decorateCfg.GetDecoratePExp(AreaId, DecorateId)
Id := decorateCfg.GetIdBySenceAndLv(AreaId, DecorateId)
Items := []*item.Item{item.NewItem(item.ITEM_STAR_ID, Item)}
PartItem := d.PartCost[Id]
PartItemList := make([]*item.Item, 0)
if PartItem != nil {
Items = append(Items, PartItem.Items...)
PartItemList = PartItem.Items
delete(d.PartCost, Id)
}
if len(d.PartCost) == 0 {
d.initPartCost(d.AreaId + 1)
}
return Items, PetExp
return Items, PetExp, PartItemList
}
func (d *Decorate) DecorateAll(Star int) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) {

View File

@ -32,7 +32,6 @@ func (f *FaceMod) InitData() {
if f.List == nil || !f.Init {
f.Init = true
f.List = make(map[int]*Face)
f.SetId = 1
}
InitId := faceCfg.GetInitList()

View File

@ -24,9 +24,10 @@ type FriendMod struct {
}
type BubbleInfo struct {
Id int // 气泡ID
Time int64 // 气泡时间
Type int
Id int // 气泡ID
Time int64 // 气泡时间
Type int
ItemList []*item.Item // 奖励物品
}
type FriendInfo struct {
@ -272,30 +273,34 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
})
switch Type {
case LOG_TYPE_HANDBOOK_UPVOTE:
f.AddBubble(f.AutoId, Type)
f.AddBubble(f.AutoId, Type, nil)
case LOG_TYPE_PLAYROOM_UPVOTE:
f.AddBubble(f.AutoId, Type)
f.AddBubble(f.AutoId, Type, nil)
case LOG_TYPE_TREASURE_HELP:
f.AddBubble(f.AutoId, Type)
ItemNum := GoUtil.RandNum(2, 5)
ItemList := []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)}
f.AddBubble(f.AutoId, Type, ItemList)
}
if len(f.Log) > 30 {
f.Log = f.Log[len(f.Log)-30:]
}
return f.AutoId
}
func (f *FriendMod) AddBubble(Id, Type int) {
func (f *FriendMod) AddBubble(Id, Type int, ItemList []*item.Item) {
f.Bubble[Id] = &BubbleInfo{
Id: Id,
Time: GoUtil.Now(),
Type: Type,
Id: Id,
Time: GoUtil.Now(),
Type: Type,
ItemList: ItemList,
}
}
func (f *FriendMod) GetBubbble(Id int) *msg.FriendBubbleInfo {
if v, ok := f.Bubble[Id]; ok {
return &msg.FriendBubbleInfo{
Id: int32(v.Id),
Type: int32(v.Type),
Id: int32(v.Id),
Type: int32(v.Type),
Items: item.ItemToMsg(v.ItemList),
}
}
return nil
@ -305,8 +310,9 @@ func (f *FriendMod) BubbleBackData() *msg.ResFriendBubble {
rs := make([]*msg.FriendBubbleInfo, 0, len(f.Bubble))
for _, v := range f.Bubble {
rs = append(rs, &msg.FriendBubbleInfo{
Id: int32(v.Id),
Type: int32(v.Type),
Id: int32(v.Id),
Type: int32(v.Type),
Items: item.ItemToMsg(v.ItemList),
})
}
return &msg.ResFriendBubble{
@ -351,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

@ -10,13 +10,14 @@ import (
)
type FriendTreasureMod struct {
Star int // 星级
Shift int // 挡位
Pos []int
List map[int]*msg.TreasureInfo
List2 []int32 // 选择的好友
Uids []int64
Status int
Star int // 星级
Shift int // 挡位
Pos []int
List map[int]*msg.TreasureInfo
List2 []int32 // 选择的好友
Uids []int64
Status int
BoxItems []*item.Item
}
const (
@ -70,7 +71,11 @@ func (f *FriendTreasureMod) Flip(Pos int) ([]*item.Item, int64, error) {
ProbMap := friendTreasureCfg.GetChestProb()
Prob := GoUtil.RandMap(ProbMap)
Info.Status = GAME_STATUS_START
return friendTreasureCfg.GetChestItems(Prob), Info.Uid, nil
Items := friendTreasureCfg.GetChestItems(Prob)
if Items == nil {
f.BoxItems = append(f.BoxItems, Items...)
}
return Items, Info.Uid, nil
}
Info.Status = GAME_STATUS_START
return nil, 0, nil
@ -91,10 +96,15 @@ func (f *FriendTreasureMod) EndGame() ([]*item.Item, int, error) {
BigReward := friendTreasureCfg.GetBigReward()
Reward = append(Reward, BigReward...)
}
return Reward, FriendItemNum, nil
}
func (f *FriendTreasureMod) ResetGame() {
f.Star = 0
f.Shift = 0
f.Status = GAME_STATUS_END
return Reward, FriendItemNum, nil
f.BoxItems = []*item.Item{}
}
func (f *FriendTreasureMod) NotifyStar() *msg.ResFriendTreasureStar {

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

@ -20,16 +20,19 @@ type OrderMod struct {
LastOrder Order // 上一个订单
LastNormalOrder Order // 上一个普通订单
EimtOrder map[string]struct{}
PreheatStep map[string]int // 预热订单步骤
EmitShuffle []string // 发射器乱序
ColorShuffle []string // 棋子系列乱序
LastColor string // 上次生成订单的棋子系列
ChessPool []int // 棋子池
OrderPool map[int]*Order // 订单池
FinishOrder []int // 已完成订单
IsCharge bool // 是否充值
AutoEmit []string // 自动发射器
LastChess int // 上次生成订单的棋子
PreheatStep map[string]int // 预热订单步骤
EmitShuffle []string // 发射器乱序
ColorShuffle []string // 棋子系列乱序
LastColor string // 上次生成订单的棋子系列
ChessPool []int // 棋子池
ChessPool2 map[string][]int // 按系列分类的棋子池
OrderPool map[int]*Order // 订单池
FinishOrder []int // 已完成订单
IsCharge bool // 是否充值
AutoEmit []string // 自动发射器
LastChess int // 上次生成订单的棋子
NextDiff int // 下次订单难度
ComfortEndTime int
}
type Order struct {
@ -42,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 // 额外订单 弃用
@ -86,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
}
@ -118,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)
@ -227,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
}
@ -289,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
}
@ -297,20 +312,8 @@ func (o *OrderMod) CreateOrder(lv int, Emit []int, EnergyMul int) error {
if o.CreatePriorityOrder(lv, Emit) {
return nil
}
MaxOrderNum := orderCfg.GetOrderNum(lv)
n := 0
for _, v := range o.OrderList {
if v.Type == Common_type || v.Type == Clean_type || v.Type == Pet_type || v.Type == Part_type || v.Type == Fixed_type || v.Type == Preview_type {
n++
}
}
for i := n; i < MaxOrderNum; i++ {
err := o.CreateNormalOrder(lv, Emit, EnergyMul)
if err != nil {
return err
}
}
return nil
err := o.CreateNormalOrder(lv, Emit, EnergyMul, OrderType)
return err
}
func (o *OrderMod) CreatePriorityOrder(lv int, Emit []int) bool {
@ -403,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
}
@ -416,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
}
@ -433,19 +436,12 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error {
}
break
}
// if len(mergeList) == 2 {
// ColorMap := make(map[string]int)
// for _, v := range mergeList {
// Color := mergeDataCfg.GetColorById(v)
// ColorMap[Color]++
// if ColorMap[Color] > 1 {
// log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err)
// return fmt.Errorf("订单生成失败,重复颜色")
// }
// }
// }
o.addOrder(mergeList, OrderDiff, Common_type)
for _, v := range mergeList {
if v == 0 {
return nil
}
}
o.addOrder(mergeList, OrderDiff, OrderType)
return nil
}
@ -483,6 +479,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,
@ -492,13 +510,11 @@ func (o *OrderMod) addFixOrder(Id int, ChessList []int, Type int, Items []*item.
}
o.OrderList[Id] = Order
}
func (o *OrderMod) addOrder(ChessList []int, Diff int, Type int) int {
func (o *OrderMod) AddPreheatOrder(ChessList []int, Diff int, Type int, Items []*item.Item) int {
return o.addPreheatOrder(ChessList, Diff, Type, Items)
}
func (o *OrderMod) addPreheatOrder(ChessList []int, Diff int, Type int, Items []*item.Item) int {
o.Auto_id++
Star := GetOrderStar(ChessList)
Items := make([]*item.Item, 0)
if Type != Common_type && Type != Super_type {
Items = []*item.Item{item.NewItem(item.ITEM_STAR_ID, Star)}
}
Order := Order{
MergeId: ChessList,
Diff: Diff,
@ -507,10 +523,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
}
@ -556,7 +568,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}) {
@ -579,7 +591,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
@ -624,7 +637,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]
@ -635,7 +647,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)
}
}
@ -668,14 +684,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
@ -194,14 +315,38 @@ func getChessLv(Min, Max, Diff int) int {
func getChessLvRange(Min, Max, Diff int) []int {
Start := Min
End := Max
switch Diff {
case DIFF_LOW:
End = Min + (Max-Min+1)/3 - 1
case DIFF_MID:
Start = Min + (Max-Min+1)/3
End = Min + (Max-Min+1)/3*2 - 1
case DIFF_HIGH:
Start = Min + (Max-Min+1)/3*2
if Max-Min >= 5 {
switch Diff {
case DIFF_LOW:
End = Min + (Max-Min+1)/3 - 1
case DIFF_MID:
Start = Min + (Max-Min+1)/3
End = Min + (Max-Min+1)/3*2 - 1
case DIFF_HIGH:
Start = Min + (Max-Min+1)/3*2
}
}
if Max-Min == 4 {
switch Diff {
case DIFF_LOW:
End = Min + 1
case DIFF_MID:
Start = Min + 2
End = Min + 3
case DIFF_HIGH:
Start = Min + 4
}
}
if Max-Min == 3 {
switch Diff {
case DIFF_LOW:
End = Min + 1
case DIFF_MID:
Start = Min + 2
End = Min + 2
case DIFF_HIGH:
Start = Min + 3
}
}
Start = max(Min, Start)
End = max(Start, End)
@ -242,13 +387,13 @@ 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)
if IsCharge {
m += 10
}
m = max(1, m)
m = min(100, m)
ChessMinLev := orderCfg.GetLvMin(EnergyMul)
ChessMaxLev := orderCfg.GetLvMax(EnergyMul, m)
ProductList := mergeDataCfg.GetEmitProduceType(Emit)
ChessMaxLev = ChessMaxLev - len(ProductList) + 2
if IsCharge {
ChessMaxLev += 1
}
return ChessMinLev, ChessMaxLev
}
@ -337,39 +482,25 @@ 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)
return mergeList, OrderDiff, nil
}
@ -418,17 +549,27 @@ func filterPool(o *OrderMod) {
}
func ShuffleColor(List []string, Last string) []string {
if len(List) <= 1 {
return List
}
Break := 0
List2 := make([]string, len(List))
List3 := make([]string, len(List))
for _, v := range List {
if mergeDataCfg.GetEmitProductNumByColor(v) == 1 {
List3 = append(List3, v)
} else {
List2 = append(List2, 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])
@ -436,8 +577,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
}
@ -470,24 +626,43 @@ func ShuffleColor(List []string, Last string) []string {
// 获取发射器系列
func getEmitSeries(o *OrderMod, Emit []int) string {
if o.ColorShuffle == nil {
ColorShuffle := make([]string, 0)
for _, v := range Emit {
EmitId := mergeDataCfg.GetEmitId(v)
if GoUtil.InStringArray(EmitId, o.AutoEmit) {
continue
}
EmitProduct := mergeDataCfg.GetEmitProduceType(v)
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
continue
}
ColorShuffle = append(ColorShuffle, EmitProduct...)
o.initColorShuffle(Emit)
PopEmitId := ""
NewSlice := make([]string, 0)
ChessColorNum := map[string]int{}
for _, v := range o.OrderList {
for _, c := range v.MergeId {
Color := mergeDataCfg.GetColorById(c)
ChessColorNum[Color]++
}
}
Break := 0
for {
if Break > 1000 {
break
}
Break++
PopEmitId, NewSlice = GoUtil.PopStringArray(o.ColorShuffle)
o.ColorShuffle = NewSlice
if PopEmitId == "" {
o.initColorShuffle(Emit)
continue
}
PopEmitIdProductNum := mergeDataCfg.GetEmitProductNumByColor(PopEmitId)
o.initColorShuffle(Emit)
if PopEmitIdProductNum == 1 && ChessColorNum[PopEmitId] >= 2 {
continue
} else {
break
}
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
}
PopEmitId, NewSlice := GoUtil.PopStringArray(o.ColorShuffle)
o.ColorShuffle = NewSlice
o.LastColor = PopEmitId
o.initColorShuffle(Emit)
return PopEmitId
}
func (o *OrderMod) initColorShuffle(Emit []int) {
if len(o.ColorShuffle) == 0 {
ColorShuffle := make([]string, 0)
for _, v := range Emit {
@ -496,21 +671,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
}
@ -528,6 +716,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 {
@ -640,10 +977,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
}
@ -13189,8 +13195,9 @@ func (x *NotifyFriendLog) GetBubble() *FriendBubbleInfo {
type FriendBubbleInfo struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id
Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2:
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 气泡id
Type int32 `protobuf:"varint,2,opt,name=Type,proto3" json:"Type,omitempty"` // 气泡类型 1:普通 2:
Items []*ItemInfo `protobuf:"bytes,3,rep,name=Items,proto3" json:"Items,omitempty"` // 奖励
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -13239,6 +13246,13 @@ func (x *FriendBubbleInfo) GetType() int32 {
return 0
}
func (x *FriendBubbleInfo) GetItems() []*ItemInfo {
if x != nil {
return x.Items
}
return nil
}
type NotifyFriendCard struct {
state protoimpl.MessageState `protogen:"open.v1"`
Info *ResFriendCard `protobuf:"bytes,1,opt,name=Info,proto3" json:"Info,omitempty"`
@ -15909,6 +15923,7 @@ type ResCharge struct {
SpecialChargeWeek int32 `protobuf:"varint,11,opt,name=SpecialChargeWeek,proto3" json:"SpecialChargeWeek,omitempty"` // 距离现在多少周
TodayCharge float32 `protobuf:"fixed32,12,opt,name=TodayCharge,proto3" json:"TodayCharge,omitempty"` // 今日充值金额
MonthCharge float32 `protobuf:"fixed32,13,opt,name=MonthCharge,proto3" json:"MonthCharge,omitempty"` // 本月充值金额
AdEndTime int64 `protobuf:"varint,14,opt,name=AdEndTime,proto3" json:"AdEndTime,omitempty"` // 广告礼包结束时间
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@ -16034,6 +16049,13 @@ func (x *ResCharge) GetMonthCharge() float32 {
return 0
}
func (x *ResCharge) GetAdEndTime() int64 {
if x != nil {
return x.AdEndTime
}
return 0
}
type WishList struct {
state protoimpl.MessageState `protogen:"open.v1"`
Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 物品id
@ -26825,10 +26847,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" +
@ -26995,7 +27018,7 @@ const file_proto_Gameapi_proto_rawDesc = "" +
"\rResDeleteMail\x12&\n" +
"\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" +
"\x03Msg\x18\x02 \x01(\tR\x03Msg\x12\x0e\n" +
"\x02Id\x18\x03 \x01(\x05R\x02Id\"\xe1\x05\n" +
"\x02Id\x18\x03 \x01(\x05R\x02Id\"\xff\x05\n" +
"\tResCharge\x12\x16\n" +
"\x06Charge\x18\x01 \x01(\x02R\x06Charge\x12\x14\n" +
"\x05Total\x18\x02 \x01(\x05R\x05Total\x12\x14\n" +
@ -27010,7 +27033,8 @@ const file_proto_Gameapi_proto_rawDesc = "" +
" \x01(\x02R\rSpecialCharge\x12,\n" +
"\x11SpecialChargeWeek\x18\v \x01(\x05R\x11SpecialChargeWeek\x12 \n" +
"\vTodayCharge\x18\f \x01(\x02R\vTodayCharge\x12 \n" +
"\vMonthCharge\x18\r \x01(\x02R\vMonthCharge\x1aX\n" +
"\vMonthCharge\x18\r \x01(\x02R\vMonthCharge\x12\x1c\n" +
"\tAdEndTime\x18\x0e \x01(\x03R\tAdEndTime\x1aX\n" +
"\x10SpecialShopEntry\x12\x10\n" +
"\x03key\x18\x01 \x01(\x05R\x03key\x12.\n" +
"\x05value\x18\x02 \x01(\v2\x18.tutorial.ResSpecialShopR\x05value:\x028\x01\x1aT\n" +
@ -27843,7 +27867,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 +27889,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 +27926,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 +28618,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() }