From 7744cd05d338d9ddb8a97a0a22946bace79fac67 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 22 十月 2024 16:19:31 +0800
Subject: [PATCH] 10284 【后端】 仙宝奇缘新版本-倒贴版本(增加时效代币; 增加终身卡特权;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py |   61 ++++++++++++++++++++++--------
 1 files changed, 45 insertions(+), 16 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
index 64e1b04..b7938cb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py
@@ -88,6 +88,7 @@
 import PlayerTongTianLing
 import PlayerCrossRealmPK
 import FunctionNPCCommon
+import PlayerGoldInvest
 import IPY_PlayerDefine
 import CrossRealmPlayer
 import CrossPlayerData
@@ -3081,7 +3082,7 @@
         
     #代币支付
     elif TYPE_Price == ShareDefine.TYPE_Price_PayCoin:
-        needMoneyCount = GetPayCoin(curPlayer)
+        needMoneyCount = GetPayCoinTotal(curPlayer)
         
     #自定义货币
     elif TYPE_Price in ShareDefine.TYPE_Price_CurrencyDict:
@@ -3245,11 +3246,22 @@
     #代币支付
     elif type_Price == ShareDefine.TYPE_Price_PayCoin:
         curPlayerPayCoin = GetPayCoin(curPlayer)
-        if curPlayerPayCoin < price:
+        curPayCoinDay = GetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay)
+        payCoinTotal = curPlayerPayCoin + curPayCoinDay
+        if payCoinTotal < price:
             return False
         #有足够的钱支付
-        SetPayCoin(curPlayer, curPlayerPayCoin - price)
-        
+        costPayCoinDay = price if (curPayCoinDay >= price) else curPayCoinDay
+        costPayCoin = price
+        if costPayCoinDay:
+            GameWorld.DebugLog("先扣代币时效: curPayCoinDay=%s,price=%s,costPayCoinDay=%s" % (curPayCoinDay, price, costPayCoinDay))
+            SetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay, curPayCoinDay - costPayCoinDay)
+            costPayCoin -= costPayCoinDay
+            GameWorld.DebugLog("再扣代币: costPayCoin=%s" % (costPayCoin))
+        #时效不够扣除,再扣非时效
+        if costPayCoin > 0:
+            SetPayCoin(curPlayer, curPlayerPayCoin - costPayCoin)
+            
     #自定义货币
     elif type_Price in ShareDefine.TYPE_Price_CurrencyDict:
         curCurrency = GetPlayerCurrency(curPlayer, type_Price)
@@ -3345,17 +3357,19 @@
         and costType == ChConfig.Def_Cost_Unknown:
         #GameWorld.DebugLog("该货币没有指定消费类型不记录!type_Price=%s,costType=%s" % (type_Price, costType))
         return
+    if type_Price == ShareDefine.TYPE_Price_PayCoin:
+        playerID = curPlayer.GetPlayerID()
+        nowMoney = GetMoneyReal(curPlayer, type_Price)
+        payCoinDay = GetMoney(curPlayer, ShareDefine.TYPE_Price_PayCoinDay)
+        infoDict["PlayerMoneyCount2"] = payCoinDay
+        orderInfo = infoDict.get("orderInfo", "")
+        GameWorld.Log("记录消耗代币: eventName=%s,price=%s,nowMoney=%s,payCoinDay=%s,orderInfo=%s" % (eventName, price, nowMoney, payCoinDay, orderInfo), playerID)
+        GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [2, price, nowMoney, payCoinDay], orderInfo, 1)
     # 流向用 eventName
     #if eventName:
     DataRecordPack.DR_UseMoney(curPlayer, eventName, type_Price, price, infoDict) # 流向
     EventReport.WriteEvent_virtual_resource(curPlayer, type_Price, reason_name, quantity,
                                             unitPrice, ShareDefine.Def_UserAction_Money_Use, infoDict)
-    if type_Price == ShareDefine.TYPE_Price_PayCoin:
-        playerID = curPlayer.GetPlayerID()
-        nowMoney = GetMoneyReal(curPlayer, type_Price)
-        orderInfo = infoDict.get("orderInfo", "")
-        GameWorld.Log("记录消耗代币: eventName=%s,price=%s,nowMoney=%s,orderInfo=%s" % (eventName, price, nowMoney, orderInfo), playerID)
-        GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [2, price, nowMoney], orderInfo, 1)
     #===========================================================================
     # if type_Price == IPY_GameWorld.TYPE_Price_Gold_Money:
     #    EventReport.WriteEvent_virtual_cost(curPlayer, quantity, unitPrice, reason_name)
@@ -3544,6 +3558,10 @@
         DataRecordPack.DR_GiveMoneyError(curPlayer, priceType, value, giveType, addDataDict)
         return
     
+    # 时效代币后续处理均视为代币,包含系统提示、记录、流向等
+    if priceType == ShareDefine.TYPE_Price_PayCoinDay:
+        priceType = ShareDefine.TYPE_Price_PayCoin
+        
     if isSysHint and priceType != ShareDefine.TYPE_Price_BourseMoney:
         #通知客户端得到金钱
         NotifyCode(curPlayer, "GetMoney", [priceType, value])
@@ -3566,16 +3584,19 @@
         eventName = ChConfig.Def_GetType_Dict[giveType]
         addDataDict["eventName"] = eventName
         
+    if priceType == ShareDefine.TYPE_Price_PayCoin:
+        playerID = curPlayer.GetPlayerID()
+        nowMoney = GetMoneyReal(curPlayer, priceType)
+        payCoinDay = GetMoney(curPlayer, ShareDefine.TYPE_Price_PayCoinDay)
+        addDataDict["PlayerMoneyCount2"] = payCoinDay
+        orderInfo = addDataDict.get("orderInfo", "")
+        GameWorld.Log("记录获得代币: eventName=%s,value=%s,nowMoney=%s,payCoinDay=%s,orderInfo=%s" % (eventName, value, nowMoney, payCoinDay, orderInfo), playerID)
+        GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [1, value, nowMoney, payCoinDay], orderInfo, 1)
+        
     DataRecordPack.DR_GiveMoney(curPlayer, eventName, priceType, value, addDataDict)
     EventReport.WriteEvent_virtual_resource(curPlayer, priceType, giveType, 1, value,
                                             ShareDefine.Def_UserAction_Money_Get, addDataDict)
     
-    if priceType == ShareDefine.TYPE_Price_PayCoin:
-        playerID = curPlayer.GetPlayerID()
-        nowMoney = GetMoneyReal(curPlayer, priceType)
-        orderInfo = addDataDict.get("orderInfo", "")
-        GameWorld.Log("记录获得代币: eventName=%s,value=%s,nowMoney=%s,orderInfo=%s" % (eventName, value, nowMoney, orderInfo), playerID)
-        GameWorld.AddPlayerRec(playerID, ShareDefine.Def_PlayerRecType_PayCoin, [1, value, nowMoney], orderInfo, 1)
 #===============================================================================
 #    reason_name = "Unknown" if not giveType else giveType
 #    eventName = reason_name
@@ -6216,6 +6237,7 @@
     fightExpRate = curPlayer.GetFightExpRate() # 系统及功能累加
     fightExpRate += PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) # 世界等级
     fightExpRate += PlayerVip.GetPrivilegeValue(curPlayer, ChConfig.VIPPrivilege_FightExpRate) # VIP加成
+    fightExpRate += PlayerGoldInvest.GetAddFightExpRate(curPlayer)
     
     actExpRateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_ExpRate, {})# 多倍经验活动加成
     if not PlayerTJG.GetIsTJG(curPlayer) and actExpRateInfo.get(ShareDefine.ActKey_State):
@@ -6433,8 +6455,15 @@
 def SetChatBubbleBox(curPlayer, value): return curPlayer.SetExAttr10(value, False, True)
 
 ##游戏充值支付代币
+def GetPayCoinTotal(curPlayer): return GetPayCoin(curPlayer) + GetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay)
 def GetPayCoin(curPlayer): return curPlayer.GetExAttr11()
 def SetPayCoin(curPlayer, value): return curPlayer.SetExAttr11(min(value, ChConfig.Def_UpperLimit_DWord), False, False)
+def PayCoinOnDay(curPlayer):
+    # 每日过天清除时效代币
+    payCoinDay = GetPlayerCurrency(curPlayer, ShareDefine.TYPE_Price_PayCoinDay)
+    if payCoinDay > 0:
+        PayMoney(curPlayer, ShareDefine.TYPE_Price_PayCoin, payCoinDay, "PayCoinOnDay")
+    return
 
 ## 获取佩戴的称号ID
 def GetTitleID(curPlayer):

--
Gitblit v1.8.0