Merge branch 'sdk' into online

This commit is contained in:
hahwu 2025-11-12 19:33:05 +08:00
commit e4ec8d930a
16 changed files with 3034 additions and 2168 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -735,6 +735,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqSeparateChess", ReqSeparateChess) // 分解棋子
RegisterMsgProcessFunc("ReqUpgradeChess", ReqUpgradeChess) // 升级棋子
RegisterMsgProcessFunc("ReqSellChessNum", ReqSellChessNum) //购买能量
RegisterMsgProcessFunc("ReqGetChessRetireReward", ReqGetChessRetireReward) //领取棋子退役奖励
//领取图鉴奖励
RegisterMsgProcessFunc("ReqGetHandbookReward", ReqGetHandbookReward) //领取图鉴奖励
@ -742,6 +743,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
//领取订单奖励
RegisterMsgProcessFunc("ReqRewardOrder", ReqRewardOrder) // 领取订单奖励
RegisterMsgProcessFunc("ReqDelOrder", ReqDelOrder) // 删除订单
RegisterMsgProcessFunc("ReqCreatePetOrder", ReqCreatePetOrder) // 生成消耗品订单
//装饰
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate) // 装饰
@ -817,6 +819,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc
RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求
RegisterMsgProcessFunc("ReqFriendByCode", ReqFriendByCode) // 根据邀请码查询好友
RegisterMsgProcessFunc("ReqFriendReplyHandle", ReqFriendReplyHandle) // 回复好友信息
RegisterMsgProcessFunc("ReqSearchPlayer", ReqSearchPlayer) // 搜索好友
RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -312,6 +312,7 @@ func (c *ChargeMod) BackData() *msg.ResCharge {
}
WeeklyDiscount := make(map[int32]*msg.WeeklyDiscountInfo)
WeeklyDiscountInfo := chargeCfg.GetWeeklyInfoAll()
if c.IsWeeklyDiscountDay() {
for k, v := range WeeklyDiscountInfo {
LimitNum := c.WeeklyDiscount[k]
WeeklyDiscount[int32(k)] = &msg.WeeklyDiscountInfo{
@ -320,7 +321,7 @@ func (c *ChargeMod) BackData() *msg.ResCharge {
Id: int32(k),
}
}
}
return &msg.ResCharge{
Charge: float32(c.Charge),
Total: int32(c.Total),

View File

@ -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,10 +422,17 @@ 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,
RetireReward: Rw,
Honor: Ho,
ChessBag: &msg.ChessBag{
ChessBagGrids: ChessBagGrids,
@ -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
}

View File

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

View File

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