From 33d7639758f71890d81d37cc17a787c0214a98ed Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 18 十月 2024 14:28:42 +0800
Subject: [PATCH] 10287 【英文】1折活动

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini                        |   12 ++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py                |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py                |   60 ++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py          |   16 ++-
 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py                                     |   60 ++++++++++++
 ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py                                     |    8 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py |   94 ++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                   |    3 
 8 files changed, 251 insertions(+), 10 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 4351f9c..aed54dc 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -17364,6 +17364,66 @@
 
 
 #------------------------------------------------------
+# AA 02 推金币 #tagCMTuijinbi
+
+class  tagCMTuijinbi(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("OpType", c_ubyte),    # 操作类型: 0-抽奖;1-获得金币;2-激活至尊卡
+                  ("Value1", c_int),    # 类型1时为货币类型
+                  ("Value2", c_int),    # 类型1时为货币数值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x02
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x02
+        self.OpType = 0
+        self.Value1 = 0
+        self.Value2 = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMTuijinbi)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 02 推金币 //tagCMTuijinbi:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                OpType:%d,
+                                Value1:%d,
+                                Value2:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.OpType,
+                                self.Value1,
+                                self.Value2
+                                )
+        return DumpString
+
+
+m_NAtagCMTuijinbi=tagCMTuijinbi()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTuijinbi.Cmd,m_NAtagCMTuijinbi.SubCmd))] = m_NAtagCMTuijinbi
+
+
+#------------------------------------------------------
 # AB 0B 购买天神经验 #tagCMBuySkyGodExp
 
 class  tagCMBuySkyGodExp(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 34bb38b..fd4b685 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -1150,7 +1150,8 @@
 CDBPlayerRefresh_HorsePetTrainScore, # 骑宠养成积分 265
 CDBPlayerRefresh_GubaoTrainScore, # 古宝养成积分 266
 CDBPlayerRefresh_TiandaoFruit, # 天道果 267
-) = range(146, 268)
+CDBPlayerRefresh_Tuijinbi, # 推金币次数 268
+) = range(146, 269)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
@@ -1186,6 +1187,7 @@
 TYPE_Price_HorsePetTrainScore = 45    # 骑宠养成积分
 TYPE_Price_GubaoTrainScore = 46    # 古宝养成积分
 TYPE_Price_TiandaoFruit = 47    # 天道果
+TYPE_Price_Tuijinbi = 48    # 推金币次数
 TYPE_Price_PayCoin = 99    # 代币
 
 #key可用于遍历所有货币,value仅GM相关会用到
@@ -1193,7 +1195,8 @@
                  1:"仙玉", 2:"绑玉", 3:"铜钱", 6:"战盟贡献度", 10:"战盟仓库积分", 13:"境界修行点", 14:"符印融合石", 15:"仙盟活跃令", 
                  16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
                  29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
-                 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 99:"代币"
+                 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 48:"推金币次数", 
+                 99:"代币"
                  }
 
 #需要记录累计消耗的货币类型
@@ -1233,6 +1236,7 @@
                            TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
                            TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
                            TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
+                           TYPE_Price_Tuijinbi:CDBPlayerRefresh_Tuijinbi,
                            }
 
 # 支持负值的货币及对应0418刷新类型
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index e0ada7e..4f7768e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -46,6 +46,18 @@
 PacketSubCMD_1=0x32
 PacketCallFunc_1=OnFaQiLVUp
 
+;推金币
+[PlayerSuperDiscount]
+ScriptName = Player\PlayerSuperDiscount.py
+Writer = hxp
+Releaser = hxp
+RegType = 0
+RegisterPackCount = 1
+
+PacketCMD_1=0xAA
+PacketSubCMD_1=0x02
+PacketCallFunc_1=OnTuijinbi
+
 ;坐骑培养
 [PlayerHorse]
 ScriptName = Player\PlayerHorse.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c0d18d0..c5d4d4e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4296,6 +4296,9 @@
 Def_PDict_InvestRewardTime = "InvestRewardTime_%s"  # 投资最后一次领奖时间,参数为(投资类型)
 Def_PDict_InvestKeyCount = 3 # key编号数
 
+# 至尊卡1折折扣,英文版专用
+Def_PDict_TuiJinbiMoney = "TuiJinbiMoney_%s"  # 推金币累计获得货币数,参数(货币类型)
+
 # 成就 Def_PDictType_Success
 Def_PDict_Success_AwardRecord = "Succ_AwardRecord_%s" # 成就领奖记录,参数(key编号),按索引位存储0-未领,1-已领
 Def_PDict_Success_LastDay = "Succ_LastDay_%s" # 连续类型上一次更新进度时的开服天数,参数(成就编号)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 4351f9c..aed54dc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -17364,6 +17364,66 @@
 
 
 #------------------------------------------------------
+# AA 02 推金币 #tagCMTuijinbi
+
+class  tagCMTuijinbi(Structure):
+    _pack_ = 1
+    _fields_ = [
+                  ("Cmd", c_ubyte),
+                  ("SubCmd", c_ubyte),
+                  ("OpType", c_ubyte),    # 操作类型: 0-抽奖;1-获得金币;2-激活至尊卡
+                  ("Value1", c_int),    # 类型1时为货币类型
+                  ("Value2", c_int),    # 类型1时为货币数值
+                  ]
+
+    def __init__(self):
+        self.Clear()
+        self.Cmd = 0xAA
+        self.SubCmd = 0x02
+        return
+
+    def ReadData(self, stringData, _pos=0, _len=0):
+        self.Clear()
+        memmove(addressof(self), stringData[_pos:], self.GetLength())
+        return _pos + self.GetLength()
+
+    def Clear(self):
+        self.Cmd = 0xAA
+        self.SubCmd = 0x02
+        self.OpType = 0
+        self.Value1 = 0
+        self.Value2 = 0
+        return
+
+    def GetLength(self):
+        return sizeof(tagCMTuijinbi)
+
+    def GetBuffer(self):
+        return string_at(addressof(self), self.GetLength())
+
+    def OutputString(self):
+        DumpString = '''// AA 02 推金币 //tagCMTuijinbi:
+                                Cmd:%s,
+                                SubCmd:%s,
+                                OpType:%d,
+                                Value1:%d,
+                                Value2:%d
+                                '''\
+                                %(
+                                self.Cmd,
+                                self.SubCmd,
+                                self.OpType,
+                                self.Value1,
+                                self.Value2
+                                )
+        return DumpString
+
+
+m_NAtagCMTuijinbi=tagCMTuijinbi()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTuijinbi.Cmd,m_NAtagCMTuijinbi.SubCmd))] = m_NAtagCMTuijinbi
+
+
+#------------------------------------------------------
 # AB 0B 购买天神经验 #tagCMBuySkyGodExp
 
 class  tagCMBuySkyGodExp(Structure):
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 d6097d3..cc4026c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -62,6 +62,7 @@
 import PlayerFeastTravel
 import PlayerWeekParty
 import PlayerGoldInvest
+import PlayerSuperDiscount
 import PlayerActTurntable
 import PlayerTongTianLing
 import PlayerZhanling
@@ -83,7 +84,7 @@
 PayOrderType_PayCoin, # 代币 6
 ) = range(1, 1 + 6)
 
-PayOrderType_Default = PayOrderType_VND
+PayOrderType_Default = PayOrderType_USD
 
 # 充值类型定义
 PayType_Gold = 2  # 常规仙玉充值
@@ -440,16 +441,18 @@
         DataRecordPack.DR_CTGError(curPlayer, "Can not found the orderInfo.", addDRDict)
         return
     
-    # 越南版本配表及coin均使用越南盾原值,但是验证用美元验证
-    GameWorld.Log("越南充值验证美元: orderInfo=%s,orderCoin=%s,orderID=%s" % (orderInfo, orderCoin, orderID), curPlayer.GetPlayerID())
+    # 英文1折版两种奖励,根据至尊卡判断, GetPayRMBNum-原价;GetUsdMoney-1折价格
+    discountState = PlayerSuperDiscount.GetSuperDiscountState(curPlayer)
+    GameWorld.Log("英文1折充值验证至尊卡: orderInfo=%s,orderCoin=%s,orderID=%s" % (orderInfo, orderCoin, orderID), curPlayer.GetPlayerID())
     orderCoinUsd = orderCoin # 入库的是美元分
-    orderCoin = CommFunc.RMBToCoin(ipyData.GetPayRMBNum()) # 游戏内orderCoin转化为越南盾
-    usdMoney = ipyData.GetUsdMoney()
+    orderCoin = CommFunc.RMBToCoin(ipyData.GetPayRMBNum()) # 游戏内orderCoin为原价
+    usdMoney = ipyData.GetUsdMoney() if discountState else ipyData.GetPayRMBNum()
     GameWorld.Log("    转化后: orderInfo=%s,orderCoin=%s,orderCoinUsd=%s" % (orderInfo, orderCoin, orderCoinUsd), curPlayer.GetPlayerID())
     addDRDict["orderCoin"] = orderCoin
     addDRDict["orderCoinUsd"] = orderCoinUsd
+    GameWorld.Log("    充值验证: orderCoinUsd=%s,usdMoney=%s,discountState=%s" % (orderCoinUsd, usdMoney, discountState), curPlayer.GetPlayerID())
     if orderCoinUsd != CommFunc.RMBToCoin(usdMoney, 100):
-        DataRecordPack.DR_CTGError(curPlayer, "The orderCoinUsd is not equal to the ipyData's UsdMoney(%s)!" % usdMoney, addDRDict)
+        DataRecordPack.DR_CTGError(curPlayer, "The orderCoinUsd is not equal to the ipyData's UsdMoney(%s)! discountState=%s" % (usdMoney, discountState), addDRDict)
         return
     
     if payOrderType == PayOrderType_PayCoin:
@@ -763,6 +766,7 @@
     #投资
     if ctgIpyData:
         ctgID = ctgIpyData.GetRecordID()
+        PlayerSuperDiscount.ActSuperDiscountByCTG(curPlayer, ctgID)
         PlayerGoldInvest.InvestByCTG(curPlayer, ctgID)
         PlayerGoldGift.OnGiftByCTGID(curPlayer, ctgID)
         PlayerZhanling.OnActiviteByCTGID(curPlayer, ctgID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
new file mode 100644
index 0000000..bafc2e9
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerSuperDiscount.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerSuperDiscount
+#
+# @todo:至尊卡折扣
+# @author hxp
+# @date 2024-10-18
+# @version 1.0
+#
+# 详细描述: 至尊卡折扣,将充值原价购买变成1折,英文版专用
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2024-10-18 15:00"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+import IpyGameDataPY
+import PlayerControl
+import ShareDefine
+import ChConfig
+
+def GetSuperDiscountState(curPlayer):
+    ## 至尊折扣卡激活状态
+    return curPlayer.GetLV2() == 1
+
+def ActSuperDiscountByCTG(curPlayer, ctgID):
+    ## 充值激活
+    ctgList = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 1)
+    if ctgID in ctgList:
+        __DoActiveSuperDiscount(curPlayer, ctgID)
+    return
+
+def __DoActiveSuperDiscount(curPlayer, ctgID=0):
+    ## 激活至尊卡
+    if GetSuperDiscountState(curPlayer):
+        GameWorld.DebugLog("至尊卡已激活!")
+        return
+    
+    if not ctgID:
+        needCreateRoleDays = IpyGameDataPY.GetFuncCfg("EnSuperDiscount", 2)
+        createRoleDays = GameWorld.GetCreateRoleDays(curPlayer)
+        if createRoleDays < needCreateRoleDays:
+            GameWorld.ErrLog("创角天数不足,无法免费激活至尊卡! createRoleDays=%s < %s" % (createRoleDays, needCreateRoleDays), curPlayer.GetPlayerID())
+            return
+        
+    GameWorld.DebugLog("激活至尊卡: ctgID=%s" % (ctgID), curPlayer.GetPlayerID())
+    curPlayer.SetLV2(1)
+    return
+
+#// AA 02 推金币 #tagCMTuijinbi
+#
+#struct     tagCMTuijinbi
+#{
+#    tagHead        Head;
+#    BYTE        OpType;    // 操作类型: 0-抽奖;1-获得金币;2-激活至尊卡
+#    DWORD        Value1;    // 类型1时为货币类型
+#    DWORD        Value2;    // 类型1时为货币数值
+#};
+def OnTuijinbi(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    playerID = curPlayer.GetPlayerID()
+    opType = clientData.OpType
+    value1 = clientData.Value1
+    value2 = clientData.Value2
+    
+    if opType == 0:
+        # 直接扣除次数,仅作为记录用,抽奖逻辑前端自己控制
+        PlayerControl.PayMoney(curPlayer, ShareDefine.TYPE_Price_Tuijinbi, 1, isNotify=False)
+        
+    elif opType == 1:
+        moneyType = value1
+        moneyValue = value2
+        moneyUpperLimitDict = IpyGameDataPY.GetFuncEvalCfg("EnSuperDiscount", 3, {})
+        if moneyType not in moneyUpperLimitDict:
+            GameWorld.DebugLog("推金币没有配置获得该货币奖励上限! moneyType=%s" % moneyType, playerID)
+            return
+        moneyUpperLimit = moneyUpperLimitDict[moneyType]
+        moneyTotal = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TuiJinbiMoney % moneyType)
+        updMoneyTotal = min(moneyTotal + moneyValue, moneyUpperLimit, ChConfig.Def_UpperLimit_DWord)
+        giveMoney = updMoneyTotal - moneyTotal
+        if giveMoney <= 0:
+            GameWorld.ErrLog("推金币已达奖励上限! moneyType=%s,moneyTotal=%s" % (moneyType, moneyTotal), playerID)
+            return
+        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TuiJinbiMoney % moneyType, updMoneyTotal)
+        GameWorld.DebugLog("更新推金币奖励: moneyType=%s,moneyValue=%s,giveMoney=%s,updMoneyTotal=%s" 
+                           % (moneyType, moneyValue, giveMoney, updMoneyTotal), playerID)
+        PlayerControl.GiveMoney(curPlayer, moneyType, giveMoney, "Tuijinbi")
+        
+    elif opType == 2:
+        __DoActiveSuperDiscount(curPlayer)
+        
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 34bb38b..fd4b685 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -1150,7 +1150,8 @@
 CDBPlayerRefresh_HorsePetTrainScore, # 骑宠养成积分 265
 CDBPlayerRefresh_GubaoTrainScore, # 古宝养成积分 266
 CDBPlayerRefresh_TiandaoFruit, # 天道果 267
-) = range(146, 268)
+CDBPlayerRefresh_Tuijinbi, # 推金币次数 268
+) = range(146, 269)
 
 TYPE_Price_Gold_Paper_Money = 5    # 金钱类型,(先用礼券,再用金子)
 TYPE_Price_Family_Contribution = 6 # 战盟贡献度(活跃度转换得来)
@@ -1186,6 +1187,7 @@
 TYPE_Price_HorsePetTrainScore = 45    # 骑宠养成积分
 TYPE_Price_GubaoTrainScore = 46    # 古宝养成积分
 TYPE_Price_TiandaoFruit = 47    # 天道果
+TYPE_Price_Tuijinbi = 48    # 推金币次数
 TYPE_Price_PayCoin = 99    # 代币
 
 #key可用于遍历所有货币,value仅GM相关会用到
@@ -1193,7 +1195,8 @@
                  1:"仙玉", 2:"绑玉", 3:"铜钱", 6:"战盟贡献度", 10:"战盟仓库积分", 13:"境界修行点", 14:"符印融合石", 15:"仙盟活跃令", 
                  16:"助战积分", 18:"荣誉", 19:"Boss积分", 23:"符印精华", 24:"符印碎片", 25:"寻宝积分", 26:"集市额度", 27:"丹精", 28:"魂尘", 
                  29:"聚魂碎片", 30:"核心环", 31:"功能特权令", 32:"环保值", 33:"GM令", 34:"古神币", 35:"功德点", 
-                 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 99:"代币"
+                 39:"成就积分", 40:"万界积分", 43:"凭证积分", 44:"聚魂精华", 45:"骑宠养成积分", 46:"古宝养成积分", 47:"天道果", 48:"推金币次数", 
+                 99:"代币"
                  }
 
 #需要记录累计消耗的货币类型
@@ -1233,6 +1236,7 @@
                            TYPE_Price_HorsePetTrainScore:CDBPlayerRefresh_HorsePetTrainScore,
                            TYPE_Price_GubaoTrainScore:CDBPlayerRefresh_GubaoTrainScore,
                            TYPE_Price_TiandaoFruit:CDBPlayerRefresh_TiandaoFruit,
+                           TYPE_Price_Tuijinbi:CDBPlayerRefresh_Tuijinbi,
                            }
 
 # 支持负值的货币及对应0418刷新类型

--
Gitblit v1.8.0