Add friend reply, sponsor, and retire reward features
Introduces friend reply and sponsor mechanics, including new message types, data structures, and reward handling. Adds chess retire reward claim logic and related protobuf messages. Updates login to support SDK login and account name changes. Refactors order shipping logic and admin shipping command. Multiple modules updated to support new friend and order features.
This commit is contained in:
commit
7a95ef8cfb
@ -1,6 +1,7 @@
|
||||
package baseCfg
|
||||
|
||||
import (
|
||||
"server/game/mod/item"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"strconv"
|
||||
@ -39,6 +40,15 @@ func GetEnergyByMul(T int) float64 {
|
||||
}
|
||||
}
|
||||
|
||||
func GetFriendReplyReward() []*item.Item {
|
||||
data, err := gamedata.GetDataByKey(CFG_BASE, "friend_reply")
|
||||
if err != nil {
|
||||
log.Debug("GetFriendReplyReward err:%v", err)
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Value")
|
||||
}
|
||||
|
||||
func GetMaxEnergyMul(Lv int, Energy int) int {
|
||||
Mul := 0
|
||||
for i := 1; i < 999; i++ {
|
||||
|
||||
@ -139,7 +139,7 @@ func GetChessIdByLvAndColor(Lv int, Color string) int {
|
||||
func GetLvById(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetLvById GetOne Id:%v not found", Id)
|
||||
//log.Debug("GetLvById GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["Lv"])
|
||||
@ -149,7 +149,7 @@ func GetLvById(Id int) int {
|
||||
func GetMaxLvById(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetMaxLvById GetOne Id:%v not found", Id)
|
||||
// log.Debug("GetMaxLvById GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.ParseInt(data["MaxLv"])
|
||||
@ -169,7 +169,7 @@ func GetMaxLvByColor(Color string) int {
|
||||
func GetEmitMinLvById(Id string) int {
|
||||
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetEmitMinLvById GetOne Id:%v not found", Id)
|
||||
// log.Debug("GetEmitMinLvById GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Emit_Min_Lv")
|
||||
@ -179,7 +179,7 @@ func GetEmitMinLvById(Id string) int {
|
||||
func GetEmitRatio(Id string) float64 {
|
||||
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetEmitRatio GetOne Id:%v not found", Id)
|
||||
// log.Debug("GetEmitRatio GetOne Id:%v not found", Id)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetFloatValue(data, "Ratio")
|
||||
@ -267,7 +267,7 @@ func GetEmitProduceChessType(Id int) []string {
|
||||
func GetEmitId(Id int) string {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||
if err != nil {
|
||||
log.Debug("GetEmitId GetOne Id:%v not found", Id)
|
||||
// log.Debug("GetEmitId GetOne Id:%v not found", Id)
|
||||
return ""
|
||||
}
|
||||
return gamedata.ParseString(data["Emit_ID"])
|
||||
@ -392,10 +392,20 @@ func GetHighSourceChestItem() []*item.Item {
|
||||
r = append(r, item.NewItem(item.ITEM_ENERGY_ID, B4))
|
||||
return r
|
||||
}
|
||||
|
||||
func GetRetireReward() []*item.Item {
|
||||
data, err := gamedata.GetDataByKey(CONST_NAME, "retire_reward")
|
||||
if err != nil {
|
||||
log.Debug("GetRetireReward GetOne not found")
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Value")
|
||||
}
|
||||
|
||||
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)
|
||||
// log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||
return Lv
|
||||
}
|
||||
DynamicLv := gamedata.GetStringValue(data, "Dynamic")
|
||||
|
||||
@ -5,6 +5,7 @@ import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
"server/conf"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"strings"
|
||||
@ -223,6 +224,12 @@ func GetPlayerBaseInfoFromDbByName(name string) *ResPlayerBaseInfo {
|
||||
return &res
|
||||
}
|
||||
|
||||
func UpdatePlayerBaseInfoName(oldName, newName string) error {
|
||||
sqlStr := "UPDATE t_player_baseinfo SET user_name = ? WHERE user_name = ?"
|
||||
_, err := SqlDb.Exec(sqlStr, newName, oldName)
|
||||
return err
|
||||
}
|
||||
|
||||
func GetPlayerBaseInfoFromDbById(id int32) *ResPlayerBaseInfo {
|
||||
sqlStr := "SELECT * FROM t_player_baseinfo WHERE dwUin = ?"
|
||||
var res ResPlayerBaseInfo
|
||||
@ -237,7 +244,7 @@ func GetAccountInfoFromDb(name string) *Db_Account {
|
||||
sqlStr := "SELECT * FROM t_account WHERE user_name = ?"
|
||||
var res Db_Account
|
||||
if err := SqlDb.Get(&res, sqlStr, name); err != nil {
|
||||
log.Debug("table: %s, sql :%s, exec failed, err:%v\n", "account", sqlStr, err)
|
||||
log.Debug("登录的账号不存在:%s", name)
|
||||
return nil
|
||||
}
|
||||
return &res
|
||||
@ -248,6 +255,11 @@ func UpdateAccountInfoToDb(account *Db_Account) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func UpdateAccountInfoName(account *Db_Account, newName string) (err error) {
|
||||
_, err = SqlDb.Exec("UPDATE t_account SET user_name = ? WHERE user_name = ?", newName, account.UserName)
|
||||
return
|
||||
}
|
||||
|
||||
func UpdateAccountInfoDeviceToDb(account *Db_Account) (err error) {
|
||||
_, err = SqlDb.Exec("UPDATE t_account SET device_id = ? WHERE user_name = ?", account.DeviceId, account.UserName)
|
||||
return
|
||||
@ -458,6 +470,13 @@ func GetPlayerChargeData(OrderSn string) (*SqlChargeOrderStruct, error) {
|
||||
return data, err
|
||||
}
|
||||
|
||||
func GetPlayerChargeDataList(Uid int) ([]*SqlChargeOrderStruct, error) {
|
||||
sql := "select * from t_player_charge where Uid = ? and PayStatus = ?"
|
||||
data := &[]*SqlChargeOrderStruct{}
|
||||
err := SqlDb.Select(data, sql, Uid, MergeConst.ORDER_STATUS_PAY)
|
||||
return *data, err
|
||||
}
|
||||
|
||||
func GetPlayerPayChannelOrderId(OrderSn string) (*SqlChargeOrderStruct, error) {
|
||||
sql := "select * from t_player_charge where PayChannelOrderId = ?"
|
||||
data := &SqlChargeOrderStruct{}
|
||||
|
||||
@ -49,6 +49,8 @@ func (f *FriendMgr) Init() {
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_REFUSE, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_INVITE_ADD_FRIEND, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_INVITE_FRIEND, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_FRIEND_GREETING_REPLY, f.sendToPlayer)
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_FRIEND_SPONSOER, f.sendToPlayer)
|
||||
|
||||
// 卡牌消息
|
||||
f.RegisterHandler(msg.HANDLE_TYPE_REQ_CARD, f.sendToPlayer)
|
||||
|
||||
@ -735,13 +735,15 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqSeparateChess", ReqSeparateChess) // 分解棋子
|
||||
RegisterMsgProcessFunc("ReqUpgradeChess", ReqUpgradeChess) // 升级棋子
|
||||
RegisterMsgProcessFunc("ReqSellChessNum", ReqSellChessNum) //购买能量
|
||||
RegisterMsgProcessFunc("ReqGetChessRetireReward", ReqGetChessRetireReward) //领取棋子退役奖励
|
||||
|
||||
//领取图鉴奖励
|
||||
RegisterMsgProcessFunc("ReqGetHandbookReward", ReqGetHandbookReward) //领取图鉴奖励
|
||||
RegisterMsgProcessFunc("RegHandbookAllReward", RegHandbookAllReward) //领取图鉴收集奖励
|
||||
//领取订单奖励
|
||||
RegisterMsgProcessFunc("ReqRewardOrder", ReqRewardOrder) // 领取订单奖励
|
||||
RegisterMsgProcessFunc("ReqDelOrder", ReqDelOrder) // 删除订单
|
||||
RegisterMsgProcessFunc("ReqRewardOrder", ReqRewardOrder) // 领取订单奖励
|
||||
RegisterMsgProcessFunc("ReqDelOrder", ReqDelOrder) // 删除订单
|
||||
RegisterMsgProcessFunc("ReqCreatePetOrder", ReqCreatePetOrder) // 生成消耗品订单
|
||||
|
||||
//装饰
|
||||
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate) // 装饰
|
||||
@ -806,17 +808,18 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqCatTrickReward", ReqCatTrickReward) //小猫戏法获取奖励
|
||||
|
||||
// #region 好友
|
||||
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表
|
||||
RegisterMsgProcessFunc("ReqFriendApply", ReqFriendApply) // 请求申请好友列表
|
||||
RegisterMsgProcessFunc("ReqFriendCardMsg", ReqFriendCardMsg) // 请求好友卡牌申请列表
|
||||
RegisterMsgProcessFunc("ReqWishApplyList", ReqWishApplyList) // 请求好友心愿单申请列表
|
||||
RegisterMsgProcessFunc("ReqFriendTimeLine", ReqFriendTimeLine) // 请求好友时间线
|
||||
RegisterMsgProcessFunc("ReqFriendRecommend", ReqFriendRecommend) // 获取推荐好友
|
||||
RegisterMsgProcessFunc("ReqFriendTLUpvote", ReqFriendTLUpvote) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqFriendTReward", ReqFriendTReward) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc
|
||||
RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求
|
||||
RegisterMsgProcessFunc("ReqFriendByCode", ReqFriendByCode) // 根据邀请码查询好友
|
||||
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表
|
||||
RegisterMsgProcessFunc("ReqFriendApply", ReqFriendApply) // 请求申请好友列表
|
||||
RegisterMsgProcessFunc("ReqFriendCardMsg", ReqFriendCardMsg) // 请求好友卡牌申请列表
|
||||
RegisterMsgProcessFunc("ReqWishApplyList", ReqWishApplyList) // 请求好友心愿单申请列表
|
||||
RegisterMsgProcessFunc("ReqFriendTimeLine", ReqFriendTimeLine) // 请求好友时间线
|
||||
RegisterMsgProcessFunc("ReqFriendRecommend", ReqFriendRecommend) // 获取推荐好友
|
||||
RegisterMsgProcessFunc("ReqFriendTLUpvote", ReqFriendTLUpvote) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqFriendTReward", ReqFriendTReward) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc
|
||||
RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求
|
||||
RegisterMsgProcessFunc("ReqFriendByCode", ReqFriendByCode) // 根据邀请码查询好友
|
||||
RegisterMsgProcessFunc("ReqFriendReplyHandle", ReqFriendReplyHandle) // 回复好友信息
|
||||
|
||||
RegisterMsgProcessFunc("ReqSearchPlayer", ReqSearchPlayer) // 搜索好友
|
||||
RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友
|
||||
|
||||
@ -275,6 +275,7 @@ func (p *Player) InitPlayer(UserName string) error {
|
||||
p.Login()
|
||||
// GoUtil.RegisterEvent(MergeConst.Notify_Daily_Renew, p.ZeroUpdate, p)
|
||||
// GoUtil.RegisterEvent(MergeConst.Notify_Midday_Renew, p.ZeroUpdate, p)
|
||||
p.OrderShip()
|
||||
SyncFriendMsg(p)
|
||||
p.UpdateUserInfo()
|
||||
// fix bug
|
||||
@ -286,8 +287,16 @@ func (p *Player) InitPlayer(UserName string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Player) Test() {
|
||||
p.PlayMod.getBaseMod().EnergyMul = 100
|
||||
func (p *Player) OrderShip() {
|
||||
OrderList, err := db.GetPlayerChargeDataList(int(p.M_DwUin))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, OrderInfo := range OrderList {
|
||||
go TriggerShippingOrderOrigin(p, &msg.ReqShippingOrder{
|
||||
OrderSn: OrderInfo.OrderId,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 零点更新
|
||||
@ -330,7 +339,8 @@ func (p *Player) ZeroUpdate(a []interface{}) {
|
||||
p.PlayMod.getFriendTreasureMod().ZeroUpdate()
|
||||
// p.PushClientRes(p.PlayMod.getFriendTreasureMod().BackData())
|
||||
|
||||
// 限时事件
|
||||
// 好友功能
|
||||
p.PlayMod.getFriendMod().ZeroUpdate()
|
||||
|
||||
p.PlayMod.getLimitedTimeEventMod().ZeroUpdate(p.GetPlayerBaseMod().GetLevel())
|
||||
// playroom
|
||||
|
||||
@ -375,6 +375,14 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
CatnipMod.Growth(CatnipGrowthInfo.GameId, CatnipGrowthInfo.Growth)
|
||||
case msg.HANDLE_TYPE_FRIEND_GREETING_REPLY:
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
if v, ok := m.Extra.(friend.ReplyInfo); ok {
|
||||
FriendMod.AddReplyInfo(v.Uid, v.Type, v.Param)
|
||||
FriendLogBackData(p)
|
||||
}
|
||||
case msg.HANDLE_TYPE_FRIEND_SPONSOER:
|
||||
p.AddLog(m.From, friend.LOG_TYPE_FRIEND_SPONSOR_GET, "", m.SendT)
|
||||
default:
|
||||
log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type)
|
||||
}
|
||||
@ -517,6 +525,7 @@ func FriendListBackData(p *Player) {
|
||||
FriendList: fl,
|
||||
ReqApplyList: ReqFriendList,
|
||||
Npc: GoUtil.IntToInt32(FriendMod.GetNpc()),
|
||||
Sponsor: int32(FriendMod.GetSponsor()),
|
||||
})
|
||||
}
|
||||
|
||||
@ -542,6 +551,11 @@ func FriendLogBackData(p *Player) {
|
||||
var log []*proto.ResFriendLog
|
||||
for _, v := range FriendMod.Log {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
ps = &proto.ResPlayerSimple{
|
||||
Uid: int64(v.Uid),
|
||||
}
|
||||
}
|
||||
log = append(log, &proto.ResFriendLog{
|
||||
Player: ps,
|
||||
Type: int32(v.Type),
|
||||
@ -551,8 +565,27 @@ func FriendLogBackData(p *Player) {
|
||||
Upvote: v.Upvote,
|
||||
})
|
||||
}
|
||||
var reply []*proto.ResFriendReply
|
||||
for _, v := range FriendMod.ReplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
if ps == nil {
|
||||
ps = &proto.ResPlayerSimple{
|
||||
Uid: int64(v.Uid),
|
||||
}
|
||||
}
|
||||
reply = append(reply, &proto.ResFriendReply{
|
||||
Player: ps,
|
||||
Type: int32(v.Type),
|
||||
Param: v.Param,
|
||||
Id: int32(v.Id),
|
||||
Status: int32(v.Status),
|
||||
AddTime: v.AddTime,
|
||||
EndTime: v.EndTime,
|
||||
})
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendTimeLine{
|
||||
Log: log,
|
||||
Log: log,
|
||||
Reply: reply,
|
||||
})
|
||||
}
|
||||
|
||||
@ -1120,6 +1153,42 @@ func (player *Player) FixOrderBug() {
|
||||
}
|
||||
}
|
||||
|
||||
func (player *Player) CreatePetOrder() {
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
PetTrigger := true
|
||||
for _, v := range OrderMod.GetOrderList() {
|
||||
if v.Type == order.Pet_type {
|
||||
PetTrigger = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if PetTrigger && BaseMod.GetLevel() >= 17 {
|
||||
OrderMod.CreateOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul(), order.Pet_type)
|
||||
for k, v := range OrderMod.GetOrderList() {
|
||||
if len(v.Items) != 0 {
|
||||
continue
|
||||
}
|
||||
if v.Type != order.Pet_type {
|
||||
continue
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
|
||||
// Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
|
||||
Items = player.GetPetOrderReward(Star, Items)
|
||||
if len(Items) == 1 && Items[0].Id == item.ITEM_STAR_ID {
|
||||
v.Type = order.Common_type
|
||||
} else {
|
||||
v.Type = order.Pet_type
|
||||
}
|
||||
v.Items = Items
|
||||
OrderMod.OrderList[k] = v
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (player *Player) CreateNormalOrder() {
|
||||
Exp, PExp := userCfg.GetLevUpExp(player.GetPlayerBaseMod().GetLevel())
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
@ -1181,43 +1250,6 @@ func (player *Player) CreateNormalOrder() {
|
||||
}
|
||||
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()
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
"server/conf"
|
||||
baseCfg "server/conf/base"
|
||||
cardCfg "server/conf/card"
|
||||
champshipCfg "server/conf/champship"
|
||||
collectCfg "server/conf/collect"
|
||||
@ -433,6 +434,13 @@ func ReqRewardOrder(player *Player, buf []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqCreatePetOrder(player *Player, buf []byte) error {
|
||||
player.CreatePetOrder()
|
||||
OrderMod := player.PlayMod.getOrderMod()
|
||||
player.PushClientRes(OrderMod.BackData())
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqDelOrder(player *Player, buf []byte) error {
|
||||
req := &msg.ReqDelOrder{}
|
||||
proto.Unmarshal(buf, req)
|
||||
@ -1480,6 +1488,7 @@ func ReqBuyEnergy(player *Player, buf []byte) error {
|
||||
player.PushClientRes(&msg.ResBuyEnergy{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
player.PushClientRes(ChargeMod.BackData())
|
||||
player.TeLog("buy_energy_diamond", map[string]interface{}{
|
||||
"diamond_cost": Diamond,
|
||||
"energy_num": Energy,
|
||||
@ -1751,6 +1760,34 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
})
|
||||
return fmt.Errorf("already apply")
|
||||
}
|
||||
if req.Type == 1 {
|
||||
Items, err := FriendMod.GetSponsorReward()
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResApplyFriend{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_ApplyFriendSponsor.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResApplyFriend{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.AddLog(int(req.Uid), friend.LOG_TYPE_FRIEND_SPONSOR, "", GoUtil.Now())
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_FRIEND_SPONSOER,
|
||||
From: int(player.M_DwUin),
|
||||
To: Uid,
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
player.TeLog("friend_invite_reward", map[string]interface{}{
|
||||
"item_list": Items,
|
||||
})
|
||||
}
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_APPLY,
|
||||
From: int(player.M_DwUin),
|
||||
@ -1790,6 +1827,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
FriendMod.AddFriend(Uid)
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "")
|
||||
player.PushClientRes(&msg.ResAgreeFriend{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
@ -1801,6 +1839,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
})
|
||||
player.AddLog(Uid, friend.LOG_TYPE_FRIEND_BECOME, "", GoUtil.Now())
|
||||
FriendApplyBackData(player)
|
||||
FriendLogBackData(player)
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
PlayroomMod.AddRoomPointAdd(BaseMod.GetLevel())
|
||||
@ -4642,6 +4681,8 @@ func ReqAddNpc(player *Player, buf []byte) error {
|
||||
player.TeLog("add_npc", map[string]interface{}{
|
||||
"NpcId": int(req.NpcId),
|
||||
})
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "")
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "")
|
||||
player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now())
|
||||
player.PushClientRes(&msg.ResAddNpc{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -5227,3 +5268,82 @@ func ReqActPassReward(player *Player, buf []byte) error {
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
req := &msg.ReqFriendReplyHandle{}
|
||||
proto.Unmarshal(buf, req)
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
ReplyInfo := FriendMod.ReplyFriend(int(req.LogId))
|
||||
if ReplyInfo == nil {
|
||||
player.SendErrClienRes(&msg.ResFriendReplyHandle{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "reply info not exist",
|
||||
})
|
||||
return fmt.Errorf("reply info not exist")
|
||||
}
|
||||
if req.Type == 1 && ReplyInfo.Uid > 10000 {
|
||||
switch ReplyInfo.Type {
|
||||
case friend.REPLY_TYPE_GREETING:
|
||||
ReplyData := friend.ReplyInfo{
|
||||
Uid: int(player.M_DwUin),
|
||||
Type: friend.REPLY_TYPE_GREETING_Get,
|
||||
Param: req.Param,
|
||||
}
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: int(ReplyInfo.Uid),
|
||||
Type: MsqMod.HANDLE_TYPE_FRIEND_GREETING_REPLY,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: ReplyData,
|
||||
})
|
||||
}
|
||||
}
|
||||
Items := baseCfg.GetFriendReplyReward()
|
||||
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendReplyHandle.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResFriendReplyHandle{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
FriendLogBackData(player)
|
||||
player.PushClientRes(&msg.ResFriendReplyHandle{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
LogId: req.LogId,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqGetChessRetireReward(player *Player, buf []byte) error {
|
||||
req := &msg.ReqGetChessRetireReward{}
|
||||
proto.Unmarshal(buf, req)
|
||||
ChessMod := player.PlayMod.getChessMod()
|
||||
Items, err := ChessMod.GetRetireReward(req.Id)
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResGetChessRetireReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_GetChessRetireReward.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResGetChessRetireReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.TeLog("get_chess_retire_reward", map[string]interface{}{
|
||||
"EmitSerise": req.Id,
|
||||
"Items": Items,
|
||||
})
|
||||
player.PushClientRes(ChessMod.BackData())
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResGetChessRetireReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -76,6 +76,71 @@ func checkTriggerCondition(player *Player, Trigger []string) bool {
|
||||
}
|
||||
}
|
||||
|
||||
func TriggerShippingOrderOrigin(player *Player, req *msg.ReqShippingOrder) {
|
||||
OrderSn := req.OrderSn
|
||||
Status := int(req.Status)
|
||||
if Status == MergeConst.ORDER_STATUS_CANCEL { // 取消支付
|
||||
CancelOrder(player, OrderSn)
|
||||
player.PushClientRes(&msg.ResShippingOrder{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Msg: "cancel success",
|
||||
})
|
||||
return
|
||||
}
|
||||
var err error
|
||||
OrderData, err := db.GetPlayerChargeData(OrderSn)
|
||||
if err != nil {
|
||||
log.Debug("charge shipping GetPlayerChargeData err:%v", err)
|
||||
return
|
||||
}
|
||||
if OrderData.PayStatus == MergeConst.ORDER_STATUS_SHIP {
|
||||
log.Debug("charge shipping order already shipped OrderSn:%s", OrderSn)
|
||||
return
|
||||
}
|
||||
// if !conf.Server.GoogleVerify {
|
||||
// Order.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
// return
|
||||
// }
|
||||
if conf.Server.GameName == "Merge_Pet_online" {
|
||||
GoUtil.SendFeishuOrder(int(player.M_DwUin), OrderData.PayChannelOrderId, OrderData.Price, req.ProduceId, OrderData.PayTime, GoUtil.Now())
|
||||
}
|
||||
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()
|
||||
defer player.lock.Unlock()
|
||||
OrderExtraData := &ChargeExtra{}
|
||||
if OrderData.PayChannelExtra != "" {
|
||||
err = json.Unmarshal([]byte(OrderData.PayChannelExtra), OrderExtraData)
|
||||
if err != nil {
|
||||
log.Debug("GoogleVerify err:%v", err)
|
||||
return
|
||||
}
|
||||
OrderExtraData.ChargeId = OrderData.ProductId
|
||||
}
|
||||
if OrderExtraData.Type == 0 {
|
||||
Charge(player, int(OrderData.ProductId))
|
||||
} else {
|
||||
SendCharge(player, OrderExtraData)
|
||||
}
|
||||
OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP
|
||||
OrderData.ProductName = req.ProduceId
|
||||
db.UpdatePlayerChargeData(OrderData)
|
||||
player.PlayMod.save()
|
||||
orderDataMap := map[string]interface{}{
|
||||
"AppId": conf.Server.AppID,
|
||||
"ServerId": conf.Server.ServerID,
|
||||
"OrderId": OrderData.OrderId,
|
||||
"PayChannelOrderId": OrderData.PayChannelOrderId,
|
||||
"ProductId": OrderData.ProductId,
|
||||
"CreateTime": OrderData.CreateTime,
|
||||
"PayTime": OrderData.PayTime,
|
||||
"Token": req.Token,
|
||||
"Price": OrderData.Price,
|
||||
"PayType": OrderData.PayType,
|
||||
}
|
||||
player.Kafka("pay", orderDataMap)
|
||||
player.SendClientRes()
|
||||
}
|
||||
|
||||
func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
OrderSn := req.OrderSn
|
||||
Status := int(req.Status)
|
||||
|
||||
@ -27,6 +27,7 @@ var AdminFuncMap = map[string]func([]interface{}) error{
|
||||
"ReqReload": ReqReload,
|
||||
"ReqAdminGm": ReqAdminGm,
|
||||
"ReqAdminBan": ReqAdminBan,
|
||||
"ReqAdminShipping": ReqAdminShipping,
|
||||
}
|
||||
|
||||
func AdminProcess(Func string, args []interface{}) {
|
||||
@ -45,7 +46,7 @@ func AdminProcess(Func string, args []interface{}) {
|
||||
log.Debug("AdminProcess error: %v", "Func not found")
|
||||
}
|
||||
|
||||
func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg.ResLogin) {
|
||||
func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg.ResLogin, accountInfoOut *db.Db_Account) {
|
||||
if detail.Type == msg.LOGIN_TYPE_CODE_LOGIN {
|
||||
err := VerifyCode(detail.UserName, detail.Code)
|
||||
if err != nil {
|
||||
@ -56,6 +57,16 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg
|
||||
return
|
||||
}
|
||||
}
|
||||
if detail.Type == msg.LOGIN_TYPE_SDK_LOGIN {
|
||||
if accountInfo == nil {
|
||||
accountInfo = db.GetAccountInfoFromDb(detail.Device)
|
||||
}
|
||||
if accountInfo != nil {
|
||||
db.UpdateAccountInfoName(accountInfo, detail.UserName)
|
||||
accountInfo.UserName = detail.UserName
|
||||
db.UpdatePlayerBaseInfoName(detail.Device, detail.UserName)
|
||||
}
|
||||
}
|
||||
if accountInfo == nil {
|
||||
ResLogin = &msg.ResLogin{
|
||||
ResultCode: MergeConst.Protocol_Error_Account_NoExsit,
|
||||
@ -79,6 +90,7 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
playerbaseinfo := db.GetPlayerBaseInfoFromDbByName(detail.UserName)
|
||||
if playerbaseinfo == nil {
|
||||
ResLogin = &msg.ResLogin{
|
||||
@ -95,7 +107,7 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
accountInfoOut = accountInfo
|
||||
ResLogin = &msg.ResLogin{
|
||||
ResultCode: 0,
|
||||
DwUin: playerbaseinfo.DwUin,
|
||||
@ -104,6 +116,36 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg
|
||||
}
|
||||
return
|
||||
}
|
||||
func ReqAdminShipping(args []interface{}) error {
|
||||
a, buf := ParseAdminArgs(args)
|
||||
req := &msg.ReqAdminShipping{}
|
||||
proto.Unmarshal(buf, req)
|
||||
res := make(map[string]interface{})
|
||||
res["Code"] = 0
|
||||
OrderInfo, err := db.GetPlayerChargeData(req.OrderSn)
|
||||
if err != nil {
|
||||
res["Code"] = 1
|
||||
res["Msg"] = "order not found"
|
||||
AdminPlayerBack(a, res)
|
||||
}
|
||||
if OrderInfo.PayStatus == MergeConst.ORDER_STATUS_SHIP {
|
||||
res["Msg"] = "order already shipped"
|
||||
AdminPlayerBack(a, res)
|
||||
}
|
||||
Player := G_GameLogicPtr.GetPlayer(int64(OrderInfo.Uid))
|
||||
if Player != nil {
|
||||
go TriggerShippingOrderOrigin(Player, &msg.ReqShippingOrder{
|
||||
OrderSn: req.OrderSn,
|
||||
})
|
||||
res["Msg"] = "player online,triggered sync"
|
||||
AdminPlayerBack(a, res)
|
||||
} else {
|
||||
OrderInfo.PayStatus = MergeConst.ORDER_STATUS_PAY
|
||||
OrderInfo.PayChannelOrderId = req.ChannelOrderSn
|
||||
db.UpdatePlayerChargeData(OrderInfo)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func AdminPlayerInfo(args []interface{}) error {
|
||||
a, buf := ParseAdminArgs(args)
|
||||
|
||||
@ -163,7 +163,7 @@ func HandleClientReq(args []interface{}) {
|
||||
log.Error("uid : %d, func : %s, fatal : %s", 0, m.GetFunc(), r)
|
||||
}
|
||||
}()
|
||||
ResLogin := VerifyUser(accountInfo, detail)
|
||||
ResLogin, accountInfo := VerifyUser(accountInfo, detail)
|
||||
if ResLogin.ResultCode != 0 {
|
||||
G_GameLogicPtr.PackLoginResInfo(a, ResLogin)
|
||||
return
|
||||
|
||||
@ -312,15 +312,16 @@ func (c *ChargeMod) BackData() *msg.ResCharge {
|
||||
}
|
||||
WeeklyDiscount := make(map[int32]*msg.WeeklyDiscountInfo)
|
||||
WeeklyDiscountInfo := chargeCfg.GetWeeklyInfoAll()
|
||||
for k, v := range WeeklyDiscountInfo {
|
||||
LimitNum := c.WeeklyDiscount[k]
|
||||
WeeklyDiscount[int32(k)] = &msg.WeeklyDiscountInfo{
|
||||
Discount: int32(v.Discount),
|
||||
Count: int32(v.WeeklyLimit - LimitNum),
|
||||
Id: int32(k),
|
||||
if c.IsWeeklyDiscountDay() {
|
||||
for k, v := range WeeklyDiscountInfo {
|
||||
LimitNum := c.WeeklyDiscount[k]
|
||||
WeeklyDiscount[int32(k)] = &msg.WeeklyDiscountInfo{
|
||||
Discount: int32(v.Discount),
|
||||
Count: int32(v.WeeklyLimit - LimitNum),
|
||||
Id: int32(k),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &msg.ResCharge{
|
||||
Charge: float32(c.Charge),
|
||||
Total: int32(c.Total),
|
||||
|
||||
@ -44,6 +44,7 @@ type ChessBorad struct {
|
||||
ChessMap map[string]int32
|
||||
Honor map[int]int // 荣誉室
|
||||
Retire map[string]int // 退役发射器系列
|
||||
RetireReward map[string]bool
|
||||
RetireChessMap map[string][]int
|
||||
}
|
||||
|
||||
@ -96,6 +97,9 @@ func (cb *ChessBorad) ver() {
|
||||
cb.ChessBag.List[i] = ChessBagGrid{}
|
||||
}
|
||||
}
|
||||
if cb.RetireReward == nil {
|
||||
cb.RetireReward = make(map[string]bool)
|
||||
}
|
||||
if cb.PartBag.List == nil {
|
||||
cb.PartBag.List = make(map[int]PartBagGrid)
|
||||
}
|
||||
@ -418,11 +422,18 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo {
|
||||
for k := range cb.Honor {
|
||||
Ho = append(Ho, int32(k))
|
||||
}
|
||||
Rw := make([]string, 0)
|
||||
for k, v := range cb.RetireReward {
|
||||
if v == true {
|
||||
Rw = append(Rw, k)
|
||||
}
|
||||
}
|
||||
return &msg.ResPlayerChessInfo{
|
||||
ChessList: GoUtil.SliceIntToInt32(cb.ChessList),
|
||||
ChessBuff: GoUtil.SliceIntToInt32(cb.ChessBuff),
|
||||
RetireEmit: Re,
|
||||
Honor: Ho,
|
||||
ChessList: GoUtil.SliceIntToInt32(cb.ChessList),
|
||||
ChessBuff: GoUtil.SliceIntToInt32(cb.ChessBuff),
|
||||
RetireEmit: Re,
|
||||
RetireReward: Rw,
|
||||
Honor: Ho,
|
||||
ChessBag: &msg.ChessBag{
|
||||
ChessBagGrids: ChessBagGrids,
|
||||
ChessBuyCnt: int32(cb.ChessBag.Buy),
|
||||
@ -671,3 +682,14 @@ func (cb *ChessBorad) GetPartBag() map[int]int {
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (cb *ChessBorad) GetRetireReward(Id string) ([]*item.Item, error) {
|
||||
if cb.RetireReward[Id] == true {
|
||||
return nil, errors.New("emit retire reward has been get")
|
||||
}
|
||||
if cb.Retire[Id] != EMIT_RETIRE_END {
|
||||
return nil, errors.New("emit not finish retire")
|
||||
}
|
||||
cb.RetireReward[Id] = true
|
||||
return mergeDataCfg.GetRetireReward(), nil
|
||||
}
|
||||
|
||||
@ -22,6 +22,19 @@ type FriendMod struct {
|
||||
Npc []int // npc id
|
||||
Bubble map[int]*BubbleInfo // 气泡
|
||||
ActivityLog []*ActLogInfo // 活动日志
|
||||
ReplyList []*ReplyInfo // 好友回复列表
|
||||
DailySponsor int // 好友赞助次数
|
||||
}
|
||||
|
||||
type ReplyInfo struct {
|
||||
Id int
|
||||
Uid int
|
||||
Type int
|
||||
Param string
|
||||
Status int
|
||||
AddTime int64
|
||||
ReplyTime int64
|
||||
EndTime int64
|
||||
}
|
||||
|
||||
type ActLogInfo struct {
|
||||
@ -53,6 +66,11 @@ type ApplyInfo struct {
|
||||
Uid int64
|
||||
}
|
||||
|
||||
const (
|
||||
REPLY_TYPE_GREETING = 1 // 问候
|
||||
REPLY_TYPE_GREETING_Get = 2 // 收到问候
|
||||
)
|
||||
|
||||
// 24小时内与玩家进行过以下互动的用户,若被选中参加本次宠物宝藏,在其头像旁添加礼物盒
|
||||
const (
|
||||
INTERACT_TYPE_VISIT = 1 // 拜访过玩家的Pet Playroom并进行过小游戏或点赞的用户
|
||||
@ -91,6 +109,8 @@ const (
|
||||
LOG_TYPE_CARD_GIVE_ACCEPT = 28 // 接受卡牌请求
|
||||
LOG_TYPE_FRIEND_INVITE = 29 // 邀请注册
|
||||
LOG_TYPE_TREASURE_HELP = 30 // 好友宝藏帮助
|
||||
LOG_TYPE_FRIEND_SPONSOR = 31 // 好友赞助体力
|
||||
LOG_TYPE_FRIEND_SPONSOR_GET = 32 // 获得好友赞助体力
|
||||
)
|
||||
|
||||
const (
|
||||
@ -183,6 +203,10 @@ func (f *FriendMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) ZeroUpdate() {
|
||||
f.DailySponsor = f.GetDailySponsorLimit()
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetNpc() []int {
|
||||
return f.Npc
|
||||
}
|
||||
@ -474,3 +498,51 @@ func (f *FriendMod) GetActLogLast() *ActLogInfo {
|
||||
}
|
||||
return f.ActivityLog[len(f.ActivityLog)-1]
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string) {
|
||||
f.AutoId++
|
||||
EndTime := GoUtil.Now() + 24*3600
|
||||
f.ReplyList = append(f.ReplyList, &ReplyInfo{
|
||||
Id: f.AutoId,
|
||||
Uid: Uid,
|
||||
Type: Type,
|
||||
Param: Param,
|
||||
Status: 0,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: EndTime,
|
||||
})
|
||||
}
|
||||
|
||||
func (f *FriendMod) ReplyFriend(LogId int) *ReplyInfo {
|
||||
for _, v := range f.ReplyList {
|
||||
if v.Id == LogId {
|
||||
v.Status = 1
|
||||
v.ReplyTime = GoUtil.Now()
|
||||
return v
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetSponsor() int {
|
||||
return f.DailySponsor
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetDailySponsorLimit() int {
|
||||
len := len(f.FriendList)
|
||||
if len < 5 {
|
||||
return 3
|
||||
}
|
||||
if len <= 30 {
|
||||
return 2
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetSponsorReward() ([]*item.Item, error) {
|
||||
if f.DailySponsor <= 0 {
|
||||
return nil, fmt.Errorf("no sponsor left")
|
||||
}
|
||||
f.DailySponsor--
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 25)}, nil
|
||||
}
|
||||
|
||||
@ -104,6 +104,9 @@ const (
|
||||
|
||||
HANDLE_TYPE_VAR_EXPIRE_SET // 设置全服过期数据
|
||||
HANDLE_TYPE_VAR_EXPIRE_GET // 获取全服过期数据
|
||||
|
||||
HANDLE_TYPE_FRIEND_GREETING_REPLY // 好友问候回复
|
||||
HANDLE_TYPE_FRIEND_SPONSOER // 好友赞助体力
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user