From f01668af91d512e1693b185dbad8d579f3bcf92d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 26 二月 2024 14:40:53 +0800
Subject: [PATCH] 10135 【港台】【主干】【砍树】【后端】支持代金券购买
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 7 ++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 58 +++++++++++++++++++++--------
PySysDB/PySysDBPY.h | 5 +-
ServerPython/CoreServerGroup/GameServer/Script/CommFunc.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 3 +
5 files changed, 53 insertions(+), 22 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 9fbb305..f5fe338 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1587,8 +1587,9 @@
BYTE DailyBuyCount; //每日限购次数
BYTE WeekBuyCount; //每周限购次数
BYTE MonthBuyCount; //每月限购次数
- WORD GainGold; //获得仙玉数
- WORD GainGoldPrize; //赠送仙玉数
+ BYTE MoneyType; //获得货币类型
+ WORD GainGold; //获得货币数
+ WORD GainGoldPrize; //赠送货币数
WORD FirstGoldPrize; //首次充值该档位赠送仙玉
list GainItemList; //获得物品列表[[物品ID,个数,是否绑定], ...]
dict ActWorldLVGainItemInfo; //根据活动世界等级获得物品信息,活动专用 {"世界等级":[[物品ID,个数,是否绑定], ...], ...}
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/CommFunc.py b/ServerPython/CoreServerGroup/GameServer/Script/CommFunc.py
index 3e65f93..6a580bd 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/CommFunc.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/CommFunc.py
@@ -565,5 +565,5 @@
@return: 转化为分数值
'''
# 由于float会有不精确的现象出现xxx.9999999的问题,所以这里计算出的结果向上取整
- return int(math.ceil(floatRMB * 100))
+ return int(math.ceil(round(floatRMB * 100)))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index b4450ba..1430194 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -6138,4 +6138,5 @@
CoinType_4,
CoinType_5,
CoinType_ExchangePayCoin, # 代表转换 6
-) = range(7)
+CoinType_PayCoin, # 代币充值 7
+) = range(8)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index f450c40..8ad89e4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1275,6 +1275,7 @@
("BYTE", "DailyBuyCount", 0),
("BYTE", "WeekBuyCount", 0),
("BYTE", "MonthBuyCount", 0),
+ ("BYTE", "MoneyType", 0),
("WORD", "GainGold", 0),
("WORD", "GainGoldPrize", 0),
("WORD", "FirstGoldPrize", 0),
@@ -4867,6 +4868,7 @@
self.DailyBuyCount = 0
self.WeekBuyCount = 0
self.MonthBuyCount = 0
+ self.MoneyType = 0
self.GainGold = 0
self.GainGoldPrize = 0
self.FirstGoldPrize = 0
@@ -4882,8 +4884,9 @@
def GetDailyBuyCount(self): return self.DailyBuyCount # 每日限购次数
def GetWeekBuyCount(self): return self.WeekBuyCount # 每周限购次数
def GetMonthBuyCount(self): return self.MonthBuyCount # 每月限购次数
- def GetGainGold(self): return self.GainGold # 获得仙玉数
- def GetGainGoldPrize(self): return self.GainGoldPrize # 赠送仙玉数
+ def GetMoneyType(self): return self.MoneyType # 获得货币类型
+ def GetGainGold(self): return self.GainGold # 获得货币数
+ def GetGainGoldPrize(self): return self.GainGoldPrize # 赠送货币数
def GetFirstGoldPrize(self): return self.FirstGoldPrize # 首次充值该档位赠送仙玉
def GetGainItemList(self): return self.GainItemList # 获得物品列表[[物品ID,个数,是否绑定], ...]
def GetActWorldLVGainItemInfo(self): return self.ActWorldLVGainItemInfo # 根据活动世界等级获得物品信息,活动专用 {"世界等级":[[物品ID,个数,是否绑定], ...], ...}
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
index ad0476a..8875283 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -80,10 +80,13 @@
PayOrderType_PayCoin, # 代币 6
) = range(1, 1 + 6)
+PayOrderType_Default = PayOrderType_RMB
+
# 充值类型定义
PayType_Gold = 2 # 常规仙玉充值
PayType_GoldPlus = 3 # 至尊仙玉充值
PayType_GrowupBuy = 16 # 成长必买
+PayType_PayCoin = 17 # 代币充值
#---------------------------------------------------------------------
#注意: GetChangeCoinPointTotal 充值点和赠送点总和
@@ -282,7 +285,7 @@
'''
orderInfo = addDRDict.get("orderInfo", "")
orderCoin = addDRDict.get("orderCoin", 0)
- payOrderType = addDRDict.get("payOrderType", PayOrderType_RMB)
+ payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
if not orderCoin or not orderInfo:
DataRecordPack.DR_CTGError(curPlayer, errorInfo, addDRDict)
return
@@ -377,7 +380,7 @@
# @param useCoin 使用的点卷
# @param eventName 兑换事件名
# @return None
-def PlayerCoinToGold(curPlayer, chargeInfo, eventName, payOrderType=PayOrderType_RMB):
+def PlayerCoinToGold(curPlayer, chargeInfo, eventName, payOrderType=PayOrderType_Default):
## 按商品编号充值
orderCoin = chargeInfo.GetCoin() # 金额 已乘以100 人民币单位为分
#notePrizeCoin = chargeInfo.GetPrizeCoin()
@@ -416,13 +419,13 @@
addDRDict["payOrderType"] = payOrderType
- addGold, prizeGold, giveItemList, ctgIpyData = 0, 0, [], None
+ moneyType, addGold, prizeGold, giveItemList, ctgIpyData = 0, 0, 0, [], None
if ipyData.GetCTGID():
ctgResultInfo = __GetCTGInfoByID(curPlayer, ipyData.GetCTGID(), addDRDict)
if not ctgResultInfo:
return
- addGold, prizeGold, giveItemList, ctgIpyData = ctgResultInfo
+ moneyType, addGold, prizeGold, giveItemList, ctgIpyData = ctgResultInfo
elif ipyData.GetGiftbagID():
giftbagID = ipyData.GetGiftbagID()
@@ -438,7 +441,7 @@
coinExp = ipyData.GetCoinExp()
coinType = ChConfig.CoinType_Gold if (ctgIpyData and ctgIpyData.GetPayType() in [PayType_Gold, PayType_GoldPlus]) else ChConfig.CoinType_Buy # 规定2为直充,其他为直购
- if not DoCTGLogic(curPlayer, coinType, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, ctgIpyData, coinExp):
+ if not DoCTGLogic(curPlayer, coinType, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, ctgIpyData, moneyType, coinExp):
return
#充值成功主动查询一次,无充值数量就不会继续查询
@@ -519,17 +522,19 @@
addDRDict.update({"monthBuyCountUpd":monthBuyCountUpd})
giveItemList = GetCTGGiveItemList(ipyData)
- addGold = ipyData.GetGainGold() # 获得仙玉数
- gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送仙玉数,首次充值赠送仙玉时,此仙玉不给
+ moneyType = ipyData.GetMoneyType() # 获得货币类型
+ addGold = ipyData.GetGainGold() # 获得货币数
+ gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送货币数,首次充值赠送仙玉时,此仙玉不给
firstGoldPrize = ipyData.GetFirstGoldPrize() # 首次充值赠送的仙玉
prizeGold = firstGoldPrize if (not totalBuyCount and firstGoldPrize) else gainGoldPrize
- actPrizeGold = PlayerActRechargePrize.DoAddPlayerActRechargePrizeCount(curPlayer, recordID)
- if actPrizeGold:
- prizeGold += actPrizeGold
- addDRDict.update({"actRechargePrize":1})
+ if moneyType == IPY_GameWorld.TYPE_Price_Gold_Money:
+ actPrizeGold = PlayerActRechargePrize.DoAddPlayerActRechargePrizeCount(curPlayer, recordID)
+ if actPrizeGold:
+ prizeGold += actPrizeGold
+ addDRDict.update({"actRechargePrize":1})
Sync_CoinToGoldCountInfo(curPlayer, [recordID])
- return addGold, prizeGold, giveItemList, ipyData
+ return moneyType, addGold, prizeGold, giveItemList, ipyData
def GetCTGGiveItemList(ipyData):
## 获取充值ID对应给物品列表
@@ -560,14 +565,35 @@
giveItemList = gainItemList
return giveItemList
-def DoCTGLogic(curPlayer, coinType, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, ctgIpyData=None, coinExp=0):
+def DoCTGLogic(curPlayer, coinType, orderCoin, addGold, prizeGold, giveItemList, isAddBourseMoney, eventName, addDRDict, ctgIpyData=None, moneyType=IPY_GameWorld.TYPE_Price_Gold_Money, coinExp=0):
+
+ if ctgIpyData and ctgIpyData.GetPayType() == PayType_PayCoin:
+ # 代币充值,仅给代币,不触发其他内容
+ coinType = ChConfig.CoinType_PayCoin
+ orderInfo = addDRDict.get("orderInfo", "")
+ orderCoin = addDRDict.get("orderCoin", 0)
+ payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
+ playerID = curPlayer.GetPlayerID()
+ befPayCoin = PlayerControl.GetPayCoin(curPlayer)
+ if addGold and moneyType == ShareDefine.TYPE_Price_PayCoin:
+ drDict = {ChConfig.Def_Give_Reason_SonKey:orderInfo, "payOrderType":payOrderType}
+ PlayerControl.GiveMoney(curPlayer, moneyType, addGold, eventName, drDict)
+ aftPayCoin = PlayerControl.GetPayCoin(curPlayer)
+ GameWorld.Log("充值代币: orderInfo=%s,orderCoin=%s,payOrderType=%s,eventName=%s,befPayCoin=%s,aftPayCoin=%s"
+ % (orderInfo, orderCoin, payOrderType, eventName, befPayCoin, aftPayCoin), playerID)
+
+ serverDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
+ addDRDict.update({"coinType":coinType, "PayCoin":[befPayCoin, aftPayCoin],
+ "VIPLv":curPlayer.GetVIPLv(), "ServerDay":serverDay, "eventName":eventName})
+ DataRecordPack.DR_CTGOK(curPlayer, addDRDict)
+ return True
if coinType not in [ChConfig.CoinType_Gold, ChConfig.CoinType_Buy, ChConfig.CoinType_ItemSuper]:
DataRecordPack.DR_CTGError(curPlayer, "coinType error! coinType(%s)!" % coinType, addDRDict)
return
isRealMoney = True if addDRDict.get("orderID") else False # 是否真实货币充值,仅真实货币充值订单有orderID,后台充值的不算真实货币充值
- payOrderType = addDRDict.get("payOrderType", PayOrderType_RMB)
+ payOrderType = addDRDict.get("payOrderType", PayOrderType_Default)
if payOrderType == PayOrderType_PayCoin:
isRealMoney = True # 代币充值在游戏内容上算真实充值
ctgRealToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGRealToday) # 当日真实货币充值Coin数 ,不含后台充值- 今日
@@ -587,10 +613,10 @@
bourseMoneyBefore = PlayerControl.GetMoney(curPlayer, ShareDefine.TYPE_Price_BourseMoney)
if addGold:
- PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, addGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
+ PlayerControl.GiveMoney(curPlayer, moneyType, addGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
if prizeGold:
- PlayerControl.GiveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, prizeGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
+ PlayerControl.GiveMoney(curPlayer, moneyType, prizeGold, eventName, addDRDict, isGiveBourseMoney=isAddBourseMoney)
if giveItemList:
ItemControler.GivePlayerItemOrMail(curPlayer, giveItemList, "", event=[ChConfig.ItemGive_CTG, True, copy.deepcopy(addDRDict)])
--
Gitblit v1.8.0