From 1b279c6a8db9e6ec8a56371c555140de1f8cb40b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 28 九月 2025 14:12:25 +0800
Subject: [PATCH] 219 【付费内容】首充-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 12 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py | 6
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 48 ----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 114 +++++-----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 34 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 14 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 3
PySysDB/PySysDBPY.h | 16
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py | 293 ++++++++++-------------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 10
10 files changed, 189 insertions(+), 361 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index dd09dae..dde1e3c 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1810,7 +1810,7 @@
//充值商品编号表
-struct tagOrderInfo
+struct OrderInfo
{
char _OrderInfo; //商品编号
char _AppID; //appID
@@ -1823,7 +1823,7 @@
//充值表
-struct tagCTG
+struct CTG
{
BYTE _RecordID; //记录ID
BYTE CanResetBuyCount; //是否允许重置次数
@@ -1844,7 +1844,7 @@
//充值自选物品表
-struct tagCTGSelectItem
+struct CTGSelectItem
{
WORD _SelectID; //自选ID
DWORD ItemID; //物品ID
@@ -1854,11 +1854,13 @@
//首充表
-struct tagFirstGold
+struct FirstCharge
{
- BYTE _Day; //首充第几天
- dict JobItemInfo; //职业物品奖励 {"职业":[[物品ID,个数], ...], ...}
- list CommItemList; //通用物品奖励 [[物品ID,个数], ...]
+ BYTE _FirstID; //首充ID
+ WORD NeedCTGID; //所需充值ID
+ list AwardListDay1; //第1天奖励 [[物品ID,个数,装备定制ID], ...]
+ list AwardListDay2; //第2天奖励 [[物品ID,个数,装备定制ID], ...]
+ list AwardListDay3; //第3天奖励 [[物品ID,个数,装备定制ID], ...]
};
//等级奖励表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index f2128de..49b6543 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1138,18 +1138,6 @@
PacketSubCMD_3=0x26
PacketCallFunc_3=OnSelectCTGItem
-;首充
-[PlayerGoldGift]
-ScriptName = Player\PlayerGoldGift.py
-Writer = xdh
-Releaser = xdh
-RegType = 0
-RegisterPackCount = 1
-
-PacketCMD_1=0xA5
-PacketSubCMD_1=0x11
-PacketCallFunc_1=OnTryFirstGoldItem
-
;限时抢购
[PlayerFlashSale]
ScriptName = Player\PlayerFlashSale.py
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index edd7edc..d56aa96 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3521,12 +3521,8 @@
Def_PDict_CTGSelectItemValue = "CTGSelectItemValue_%s" # 充值自选选择记录,参数(CTG对应的商品记录ID) 每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品
Def_PDict_OnlineRechargeTHAward = "OnlineRechargeTHAward" # 在线特惠充值额外奖励 - 是否已领取奖励
Def_PDict_DayFreeGoldGiftState = "DayFreeGoldGiftState" # 每日免费直购礼包领取记录
-Def_PDict_GoldGiftFirstRecord = "GoldGiftFirstRecord" # 首充领取记录,按位记录首充第x天是否已领取
-Def_PDict_FirstGoldServerDay = "FirstGoldServerDay" # 首充时的开服天
-Def_PDict_FirstGoldRemainTime = "FirstGoldRemainTime" # 首充提示剩余时间
-Def_PDict_FirstGoldTipStartTime = "FirstGoldTipStartTime" # 首充提示开始时间
-Def_PDict_FirstGoldTry = "FirstGoldTry" # 首充试用状态 0-不可试用 1-可试用 2-已试用
-Def_PDict_SuperGiftStartTime = "SuperGiftStartTime" # 超值礼包开始时间
+Def_PDict_FirstChargeRecord = "FirstChargeRecord_%s" # 首充领取记录,按位记录首充第x天是否已领取,参数(首充ID)
+Def_PDict_FirstChargeTime = "FirstChargeTime_%s" # 首充充值时间戳,参数(首充ID)
Def_PDict_IsReBorn = "Def_PDict_IsReBorn" # 是否回城复活
Def_PDict_FamilyWarDailyReward = "FamilyWarDailyReward" # 王者仙盟每日俸禄领取状态
Def_PDict_Family_Contribution = "FamilyContribution" #战盟贡献度
@@ -5167,7 +5163,7 @@
Def_RewardType_LVAward, # 玩家等级奖励5
Def_RewardType_XBXZ, # 仙宝寻主奖励6
Def_RewardType_DayRealmPoint, # 每日任务修行点奖励7
-Def_RewardType_GoldGiftFirst, # 首充礼包奖励8
+Def_RewardType_FirstCharge, # 首充礼包奖励8
Def_RewardType_MWSoulAward, # 法宝之魂奖励9 -废弃
Def_RewardType_FreeGoods, # 极品白拿10
Def_RewardType_CostRebate, # 消费返利11
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 9a3f902..cdd8bc4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -8856,54 +8856,6 @@
#------------------------------------------------------
-# A5 11 试用首充武器 #tagCMTryFirstGoldItem
-
-class tagCMTryFirstGoldItem(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ]
-
- def __init__(self):
- self.Clear()
- self.Cmd = 0xA5
- self.SubCmd = 0x11
- 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 = 0xA5
- self.SubCmd = 0x11
- return
-
- def GetLength(self):
- return sizeof(tagCMTryFirstGoldItem)
-
- def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
-
- def OutputString(self):
- DumpString = '''// A5 11 试用首充武器 //tagCMTryFirstGoldItem:
- Cmd:%s,
- SubCmd:%s
- '''\
- %(
- self.Cmd,
- self.SubCmd
- )
- return DumpString
-
-
-m_NAtagCMTryFirstGoldItem=tagCMTryFirstGoldItem()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMTryFirstGoldItem.Cmd,m_NAtagCMTryFirstGoldItem.SubCmd))] = m_NAtagCMTryFirstGoldItem
-
-
-#------------------------------------------------------
# A5 73 解锁命格孔 #tagCMUnLockBirthChartHole
class tagCMUnLockBirthChartHole(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index fd93a81..7cce16d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -30983,22 +30983,17 @@
#------------------------------------------------------
-# AA 02 首充信息 #tagMCFirstGoldInfo
+# AA 02 首充信息 #tagSCFirstChargeInfo
-class tagMCFirstGoldInfo(Structure):
+class tagSCFirstCharge(Structure):
_pack_ = 1
_fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("FirstGoldRewardState", c_ubyte), #首充奖励领奖记录,按位记录首充第X天是否已领取,第1天为第0索引位
- ("FirstGoldTry", c_ubyte), #首充试用状态0-不可试用 1-可试用 2-已试用
- ("FirstGoldServerDay", c_ushort), #首充时是开服第几天,从1开始,0代表未记录充值
+ ("ChargeTime", c_int), #充值该首充的时间戳
+ ("AwardRecord", c_ushort), #首充奖励领奖记录,按二进制位记录首充第X天是否已领取
]
def __init__(self):
self.Clear()
- self.Cmd = 0xAA
- self.SubCmd = 0x02
return
def ReadData(self, stringData, _pos=0, _len=0):
@@ -31007,91 +31002,92 @@
return _pos + self.GetLength()
def Clear(self):
- self.Cmd = 0xAA
- self.SubCmd = 0x02
- self.FirstGoldRewardState = 0
- self.FirstGoldTry = 0
- self.FirstGoldServerDay = 0
+ self.ChargeTime = 0
+ self.AwardRecord = 0
return
def GetLength(self):
- return sizeof(tagMCFirstGoldInfo)
+ return sizeof(tagSCFirstCharge)
def GetBuffer(self):
return string_at(addressof(self), self.GetLength())
def OutputString(self):
- DumpString = '''// AA 02 首充信息 //tagMCFirstGoldInfo:
- Cmd:%s,
- SubCmd:%s,
- FirstGoldRewardState:%d,
- FirstGoldTry:%d,
- FirstGoldServerDay:%d
+ DumpString = '''// AA 02 首充信息 //tagSCFirstChargeInfo:
+ ChargeTime:%d,
+ AwardRecord:%d
'''\
%(
- self.Cmd,
- self.SubCmd,
- self.FirstGoldRewardState,
- self.FirstGoldTry,
- self.FirstGoldServerDay
+ self.ChargeTime,
+ self.AwardRecord
)
return DumpString
-m_NAtagMCFirstGoldInfo=tagMCFirstGoldInfo()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldInfo.Cmd,m_NAtagMCFirstGoldInfo.SubCmd))] = m_NAtagMCFirstGoldInfo
-
-
-#------------------------------------------------------
-# AA 08 首充提示剩余时间 #tagMCFirstGoldTime
-
-class tagMCFirstGoldTime(Structure):
- _pack_ = 1
- _fields_ = [
- ("Cmd", c_ubyte),
- ("SubCmd", c_ubyte),
- ("FirstGoldRemainTime", c_int), #首充提示剩余时间
- ]
+class tagSCFirstChargeInfo(Structure):
+ Head = tagHead()
+ Count = 0 #(BYTE Count)
+ FirstChargeList = list() #(vector<tagSCFirstCharge> FirstChargeList)
+ data = None
def __init__(self):
self.Clear()
- self.Cmd = 0xAA
- self.SubCmd = 0x08
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x02
return
- def ReadData(self, stringData, _pos=0, _len=0):
+ def ReadData(self, _lpData, _pos=0, _Len=0):
self.Clear()
- memmove(addressof(self), stringData[_pos:], self.GetLength())
- return _pos + self.GetLength()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ for i in range(self.Count):
+ temFirstChargeList = tagSCFirstCharge()
+ _pos = temFirstChargeList.ReadData(_lpData, _pos)
+ self.FirstChargeList.append(temFirstChargeList)
+ return _pos
def Clear(self):
- self.Cmd = 0xAA
- self.SubCmd = 0x08
- self.FirstGoldRemainTime = 0
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x02
+ self.Count = 0
+ self.FirstChargeList = list()
return
def GetLength(self):
- return sizeof(tagMCFirstGoldTime)
+ length = 0
+ length += self.Head.GetLength()
+ length += 1
+ for i in range(self.Count):
+ length += self.FirstChargeList[i].GetLength()
+
+ return length
def GetBuffer(self):
- return string_at(addressof(self), self.GetLength())
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteBYTE(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.FirstChargeList[i].GetLength(), self.FirstChargeList[i].GetBuffer())
+ return data
def OutputString(self):
- DumpString = '''// AA 08 首充提示剩余时间 //tagMCFirstGoldTime:
- Cmd:%s,
- SubCmd:%s,
- FirstGoldRemainTime:%d
+ DumpString = '''
+ Head:%s,
+ Count:%d,
+ FirstChargeList:%s
'''\
%(
- self.Cmd,
- self.SubCmd,
- self.FirstGoldRemainTime
+ self.Head.OutputString(),
+ self.Count,
+ "..."
)
return DumpString
-m_NAtagMCFirstGoldTime=tagMCFirstGoldTime()
-ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCFirstGoldTime.Cmd,m_NAtagMCFirstGoldTime.SubCmd))] = m_NAtagMCFirstGoldTime
+m_NAtagSCFirstChargeInfo=tagSCFirstChargeInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagSCFirstChargeInfo.Head.Cmd,m_NAtagSCFirstChargeInfo.Head.SubCmd))] = m_NAtagSCFirstChargeInfo
#------------------------------------------------------
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
index 789ea5c..d99150a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py
@@ -33,11 +33,6 @@
# @remarks 函数详细说明.
def OnExec(curPlayer, msgList):
curPlayer.SetChangeCoinPointTotal(0, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldGiftFirstRecord, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldServerDay, 0)
- PlayerGoldGift.Sync_FirstGoldInfo(curPlayer)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_SuperGiftStartTime, 0)
# 重置充值次数信息
syncRecordIDList = []
ipyDataMgr = IpyGameDataPY.IPY_Data()
@@ -68,5 +63,6 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealToday, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealTotal, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGRealFirstTime, 0)
+ PlayerGoldGift.ClearFirstCharge(curPlayer)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 72f6bd6..8d1ae8b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1495,10 +1495,12 @@
("BYTE", "IsAuctionItem", 0),
),
- "FirstGold":(
- ("BYTE", "Day", 1),
- ("dict", "JobItemInfo", 0),
- ("list", "CommItemList", 0),
+ "FirstCharge":(
+ ("BYTE", "FirstID", 1),
+ ("WORD", "NeedCTGID", 0),
+ ("list", "AwardListDay1", 0),
+ ("list", "AwardListDay2", 0),
+ ("list", "AwardListDay3", 0),
),
"LVAward":(
@@ -4704,15 +4706,17 @@
def GetIsAuctionItem(self): return self.attrTuple[3] # 是否拍品 BYTE
# 首充表
-class IPY_FirstGold():
+class IPY_FirstCharge():
def __init__(self):
self.attrTuple = None
return
- def GetDay(self): return self.attrTuple[0] # 首充第几天 BYTE
- def GetJobItemInfo(self): return self.attrTuple[1] # 职业物品奖励 {"职业":[[物品ID,个数], ...], ...} dict
- def GetCommItemList(self): return self.attrTuple[2] # 通用物品奖励 [[物品ID,个数], ...] list
+ def GetFirstID(self): return self.attrTuple[0] # 首充ID BYTE
+ def GetNeedCTGID(self): return self.attrTuple[1] # 所需充值ID WORD
+ def GetAwardListDay1(self): return self.attrTuple[2] # 第1天奖励 [[物品ID,个数,装备定制ID], ...] list
+ def GetAwardListDay2(self): return self.attrTuple[3] # 第2天奖励 [[物品ID,个数,装备定制ID], ...] list
+ def GetAwardListDay3(self): return self.attrTuple[4] # 第3天奖励 [[物品ID,个数,装备定制ID], ...] list
# 等级奖励表
class IPY_LVAward():
@@ -6593,7 +6597,7 @@
self.__LoadFileData("OrderInfo", onlyCheck)
self.__LoadFileData("CTG", onlyCheck)
self.__LoadFileData("CTGSelectItem", onlyCheck)
- self.__LoadFileData("FirstGold", onlyCheck)
+ self.__LoadFileData("FirstCharge", onlyCheck)
self.__LoadFileData("LVAward", onlyCheck)
self.__LoadFileData("Invest", onlyCheck)
self.__LoadFileData("XBXZ", onlyCheck)
@@ -7874,12 +7878,12 @@
self.CheckLoadData("CTGSelectItem")
return self.ipyCTGSelectItemCache[index]
- def GetFirstGoldCount(self):
- self.CheckLoadData("FirstGold")
- return self.ipyFirstGoldLen
- def GetFirstGoldByIndex(self, index):
- self.CheckLoadData("FirstGold")
- return self.ipyFirstGoldCache[index]
+ def GetFirstChargeCount(self):
+ self.CheckLoadData("FirstCharge")
+ return self.ipyFirstChargeLen
+ def GetFirstChargeByIndex(self, index):
+ self.CheckLoadData("FirstCharge")
+ return self.ipyFirstChargeCache[index]
def GetLVAwardCount(self):
self.CheckLoadData("LVAward")
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index d6271f0..e0d04c7 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -26,7 +26,6 @@
import ChItem
import ItemCommon
import ItemControler
-import ChEquip
import FunctionNPCCommon
import PlayerGMOper
import ReadChConfig
@@ -37,7 +36,6 @@
import ChPyNetSendPack
import DataRecordPack
import PlayerBillboard
-import UpdatePlayerName
import PlayerOnlinePrize
import PlayerLVAward
import PlayerGoldGift
@@ -541,9 +539,6 @@
#通知玩家死亡时间
#PlayerControl.PlayerControl(curPlayer).NotifyPlayerDeadTime(curPlayer)
- #角色改名次数
- #UpdatePlayerName.Sync_UpdatePlayerNameCount(curPlayer)
-
# 坐骑相关通知
PlayerHorse.PlayerHorseLogin(curPlayer)
@@ -899,9 +894,6 @@
# 同步排行榜
PlayerBillboard.UpdatePlayerBillboardOnLeaveServer(curPlayer, isAll=True)
-
- # 重置玩家改名次数
- #UpdatePlayerName.ResetChangeNameCnt(curPlayer)
return
#---------------------------------------------------------------------
@@ -2166,8 +2158,6 @@
#在线时间
PlayerOnlinePrize.CalcOnlineTime(curPlayer)
- #首充提示时间
- PlayerGoldGift.UpdateFirstGoldTime(curPlayer)
#玩家未回图形验证码下线将会记录错误次数
#===========================================================================
# if curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_Captcha_WaitSign) \
@@ -3300,8 +3290,8 @@
elif rewardType == ChConfig.Def_RewardType_LVAward:
PlayerLVAward.GetPlayerLVAward(curPlayer, dataEx)
# 首充礼包奖励
- elif rewardType == ChConfig.Def_RewardType_GoldGiftFirst:
- PlayerGoldGift.GetPlayerGoldGiftFirst(curPlayer, dataEx)
+ elif rewardType == ChConfig.Def_RewardType_FirstCharge:
+ PlayerGoldGift.GetPlayerFirstCharge(curPlayer, dataEx, dataExStr)
# 领取极品白拿
elif rewardType == ChConfig.Def_RewardType_FreeGoods:
PlayerFreeGoods.OnGetFreeGoods(curPlayer, dataEx)
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 5bb9f03..64e705e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py
@@ -751,7 +751,6 @@
changeCoinPointBefore = curPlayer.GetChangeCoinPointTotal()
curPlayer.SetChangeCoinPointTotal(min(changeCoinPointBefore + orderCoin, ChConfig.Def_UpperLimit_DWord), 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 0)
todayCTGCoinTotal = min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCoinTotal) + orderCoin, ChConfig.Def_UpperLimit_DWord)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCoinTotal, todayCTGCoinTotal)
@@ -777,8 +776,6 @@
if coinType == ChConfig.CoinType_Gold:
PlayerActRechargeRebateGold.AddRechargeRebateGoldRMB(curPlayer, addGold)
- #仙界盛典-充值大礼
- PlayerGoldGift.OnPlayerChargeGold(curPlayer)
#累积充值X元
PlayerActTotalRecharge.AddTotalRechargeGold(curPlayer, orderCoin, coinType)
PlayerActSingleRecharge.UpdSingleRechargeValue(curPlayer, orderCoin, coinType) # 单笔累充
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
index 06d0f9a..0253314 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldGift.py
@@ -2,168 +2,143 @@
# -*- coding: GBK -*-
#-------------------------------------------------------------------------------
#
-#-------------------------------------------------------------------------------
+##@package Player.PlayerGoldGift
#
-##@package PlayerGoldGift
-#
-# @todo: 记录玩家的充值豪礼奖励信息,二进制位标示,目前用了一个字典
+# @todo:充值礼包
# @author hxp
-# @date 2013-10-16 17:00
+# @date 2025-09-28
+# @version 1.0
#
-# @version 3.0
-# 简要说明:
-# 详细描述:
-# @change: "2013-10-22 11:10" hxp 修改读取奖励物品表方式
-# @change: "2013-11-12 17:00" hxp 增加首充奖励领取逻辑
-# @change: "2013-12-09 18:00" hxp 增加领奖全服广播mark
-# @change: "2014-05-11 14:35" xcc 增加mark如果为空,就不提示
-# @change: "2014-06-06 20:30" hxp 领奖全服广播修改
-# @change: "2014-06-12 21:00" hxp 增加天天首充
-# @change: "2014-08-22 12:00" hxp 去除多余全服广播
-# @change: "2014-10-09 14:00" hxp 首充/天天首充规则修改,天天首充一天只能领取一次
-# @change: "2014-12-16 18:00" hxp 发送充值豪礼发送邮件
-# @change: "2014-12-22 14:00" hxp 增加单日充值多选一礼包
-# @change: "2015-02-06 10:30" hxp 单日充值多选一礼包支持配置星期几
-# @change: "2015-02-11 18:30" hxp 单日充值多选一礼包开服前几天不开启的仅限制星期几的活动
-# @change: "2015-04-23 12:00" hxp 当日充值多选一礼包支持多个钻石档奖励
-# @change: "2015-04-28 16:00" hxp 增加每日充值元宝数通知
-# @change: "2015-05-21 14:30" hxp 增加当日充值无限领取礼包
-# @change: "2015-06-09 20:30" hxp 奖励名称改为客户端配置
-# @change: "2016-01-26 15:00" hxp PY表支持重读
-# @change: "2016-06-27 14:00" hxp 首充支持可配置额度
-#------------------------------------------------------------------------------
-#"""Version = 2017-05-12 18:00"""
-#------------------------------------------------------------------------------
+# 详细描述: 充值礼包,主要一些常用、通用的
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-28 14:30"""
+#-------------------------------------------------------------------------------
+
+import ChConfig
import GameWorld
import IPY_GameWorld
import ItemControler
-import ChConfig
-import ItemCommon
import PlayerControl
-import ShareDefine
import DataRecordPack
import ChPyNetSendPack
import NetPackCommon
import IpyGameDataPY
import CommFunc
-import ChEquip
+import ObjPool
import time
+def OnDay(curPlayer):
+ DoDailyPackBuyGiftOnDay(curPlayer)
+ return
+
+def OnLogin(curPlayer):
+ Sync_FirstChargeInfo(curPlayer)
+ Sync_HistoryChargeAwardGetRecordInfo(curPlayer)
+ Sync_DailyPackBuyGiftInfo(curPlayer)
+ return
+
+def OnGiftByCTGID(curPlayer, ctgID):
+ OnActFirstCharge(curPlayer, ctgID)
+ OnActiviteDailyPackBuyGift(curPlayer, ctgID)
+ return
+
##------------------------------------------------------------------------------
-def DoFirstGoldOpen(curPlayer):
- ## 首充开启 记录提示剩余时间
- if curPlayer.GetChangeCoinPointTotal():
+
+def ClearFirstCharge(curPlayer):
+ ## 重置首充 - 一般是GM用
+ resetCTGIDList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetFirstChargeCount()):
+ ipyData = ipyDataMgr.GetFirstChargeByIndex(index)
+ firstID = ipyData.GetFirstID()
+ ctgID = ipyData.GetNeedCTGID()
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstChargeTime % firstID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstChargeRecord % firstID, 0)
+ resetCTGIDList.append(ctgID)
+ Sync_FirstChargeInfo(curPlayer)
+ return
+
+def OnActFirstCharge(curPlayer, ctgID):
+ ## 激活首充档位
+ firstIpyData = None
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetFirstChargeCount()):
+ ipyData = ipyDataMgr.GetFirstChargeByIndex(index)
+ if ipyData.GetNeedCTGID() == ctgID:
+ firstIpyData = ipyData
+ break
+
+ if not firstIpyData:
return
- showSysTime = IpyGameDataPY.GetFuncCfg("FirstGold", 3)
- if not showSysTime:
- return
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldRemainTime, showSysTime)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, int(time.time()))
- Sync_FirstGoldTime(curPlayer)
- return
-
-def UpdateFirstGoldTime(curPlayer):
- #更新首充提示剩余时间
- remainTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime)
- if not remainTime:
+ firstID = firstIpyData.GetFirstID()
+ chargeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstChargeTime % firstID)
+ if chargeTime:
+ GameWorld.DebugLog("该首充档位已经激活过了,不重复激活: ctgID=%s,chargeTime=%s" % (ctgID, chargeTime))
return
- if curPlayer.GetChangeCoinPointTotal():
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldRemainTime, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, 0)
- else:
- curTime = int(time.time())
- startTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTipStartTime)
- remainTime = max(0, remainTime - (curTime - startTime))
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldRemainTime, remainTime)
- if not remainTime:
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, 0)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstChargeTime % firstID, int(time.time()))
+ GameWorld.DebugLog("记录首充档位充值时间戳: ctgID=%s" % ctgID)
+ Sync_FirstChargeInfo(curPlayer)
return
-def Sync_FirstGoldTime(curPlayer):
- ##通知首充提示剩余时间
- showSysTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime)
- if not showSysTime:
- return
- sendPack = ChPyNetSendPack.tagMCFirstGoldTime()
- sendPack.Clear()
- sendPack.FirstGoldRemainTime = showSysTime
- NetPackCommon.SendFakePack(curPlayer, sendPack)
- return
-
-
-def GetPlayerGoldGiftFirst(curPlayer, giftDay):
+def GetPlayerFirstCharge(curPlayer, giftDay, firstIDStr):
'''领取玩家首充奖励
@param dayIndex: 首充第几天奖励
'''
-
- if not giftDay:
+ firstID = GameWorld.ToIntDef(firstIDStr)
+ if not firstID or not giftDay:
return
- openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
- firstGoldServerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldServerDay)
- if not firstGoldServerDay:
- GameWorld.DebugLog("还未充值过!firstGoldServerDay=%s" % firstGoldServerDay)
+ playerID = curPlayer.GetPlayerID()
+ chargeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstChargeTime % firstID)
+ if not chargeTime:
+ GameWorld.DebugLog("该档位未首充! firstID=%s" % firstID, playerID)
return
- canGetMaxDay = openServerDay - firstGoldServerDay + 1
+
+ canGetMaxDay = GameWorld.GetDiff_Day(int(time.time()), chargeTime) + 1
if giftDay > canGetMaxDay:
- GameWorld.DebugLog("还未到可领取的首充天,无法领取!openServerDay=%s,firstGoldServerDay=%s,canGetMaxDay=%s < giftDay=%s"
- % (openServerDay, firstGoldServerDay, canGetMaxDay, giftDay))
+ GameWorld.DebugLog("还未到可领取的首充天,无法领取!chargeTime=%s,giftDay=%s > %s"
+ % (GameWorld.ChangeTimeNumToStr(chargeTime), giftDay, canGetMaxDay), playerID)
return
- dayIndex = giftDay - 1
- getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldGiftFirstRecord)
- if getRecord & pow(2, dayIndex):
- GameWorld.DebugLog("已经领取过首充奖励!giftDay=%s" % giftDay, curPlayer.GetPlayerID())
+ getRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstChargeRecord % firstID)
+ if getRecord & pow(2, giftDay):
+ GameWorld.DebugLog("已经领取过首充奖励!firstID=%s,giftDay=%s,getRecord=%s" % (firstID, giftDay, getRecord), playerID)
return
- if not curPlayer.GetChangeCoinPointTotal():
- GameWorld.DebugLog("没有充值过,无法领取首充奖励!", curPlayer.GetPlayerID())
- return
-
- ipyData = IpyGameDataPY.GetIpyGameData("FirstGold", giftDay)
+ ipyData = IpyGameDataPY.GetIpyGameData("FirstCharge", firstID)
if not ipyData:
- return
- jobItemInfoDict = ipyData.GetJobItemInfo()
- commItemList = ipyData.GetCommItemList()
-
- rewardItemList = []
- jobStr = str(curPlayer.GetJob())
- if jobStr in jobItemInfoDict:
- rewardItemList += jobItemInfoDict[jobStr]
- rewardItemList += commItemList
-
- if not rewardItemList:
return
- needSpace = len(rewardItemList)
-
- # 检查背包
- packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
- if needSpace > packSpace:
- PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
+ if not hasattr(ipyData, "GetAwardListDay%s" % giftDay):
return
+ awardList = getattr(ipyData, "GetAwardListDay%s" % giftDay)()
# 更新已领取成功标记
- updGetRecord = getRecord | pow(2, dayIndex)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GoldGiftFirstRecord, updGetRecord)
- GameWorld.DebugLog("领取首充奖励: giftDay=%s,getRecord=%s,updGetRecord=%s, %s" % (giftDay, getRecord, updGetRecord, rewardItemList))
+ updGetRecord = getRecord | pow(2, giftDay)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstChargeRecord % firstID, updGetRecord)
+ GameWorld.DebugLog("领取首充奖励: firstID=%s,giftDay=%s,getRecord=%s,updGetRecord=%s, %s" % (firstID, giftDay, getRecord, updGetRecord, awardList))
- # 给物品
- isAuctionItem = False
- for itemID, itemCount in rewardItemList:
- ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
- ItemControler.NotifyGiveAwardInfo(curPlayer, rewardItemList, "GoldGiftFirst")
+ ItemControler.GivePlayerItemOrMail(curPlayer, awardList, event=["FirstCharge", False, {}])
- # 全服提示
- if len(rewardItemList) >= 2:
- PlayerControl.WorldNotify(0, "FirstPayReward1", [curPlayer.GetPlayerName(), rewardItemList[0][0], rewardItemList[1][0], giftDay])
-
- # 记录领取事件
- infoDict = {"GiftDay":giftDay, "ItemList":rewardItemList}
- DataRecordPack.DR_GoldGiftGiveItem(curPlayer, "FirstGoldGift", infoDict)
-
- # 通知客户端
- Sync_FirstGoldInfo(curPlayer)
+ Sync_FirstChargeInfo(curPlayer)
+ return
+
+def Sync_FirstChargeInfo(curPlayer):
+ ## 通知首充信息
+ clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFirstChargeInfo)
+ clientPack.FirstChargeList = []
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetFirstChargeCount()):
+ ipyData = ipyDataMgr.GetFirstChargeByIndex(index)
+ firstID = ipyData.GetFirstID()
+ firstCharge = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCFirstCharge)
+ firstCharge.ChargeTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstChargeTime % firstID)
+ firstCharge.AwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstChargeRecord % firstID)
+ clientPack.FirstChargeList.append(firstCharge)
+ clientPack.Count = len(clientPack.FirstChargeList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
return
################################ 每日打包直购礼包 ###################################
@@ -341,73 +316,6 @@
###################################################################
-## 充值豪礼OnDay
-# @param curPlayer: 玩家
-# @return: None
-def OnDay(curPlayer):
- DoDailyPackBuyGiftOnDay(curPlayer)
- return
-
-## 充值豪礼OnLogin
-# @param curPlayer: 玩家
-# @return: None
-def OnLogin(curPlayer):
- Sync_FirstGoldInfo(curPlayer)
-
- Sync_FirstGoldTime(curPlayer)
- Sync_HistoryChargeAwardGetRecordInfo(curPlayer)
- #更新首充提示开始计时时间
- if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldRemainTime):
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTipStartTime, int(time.time()))
- Sync_DailyPackBuyGiftInfo(curPlayer)
- return
-
-## 玩家充值元宝
-# @param curPlayer: 玩家
-# @param addGold: 充元宝数
-# @return: None
-def OnPlayerChargeGold(curPlayer):
- return
-
-def OnGiftByCTGID(curPlayer, ctgID):
-
- firstGoldCTGIDList = IpyGameDataPY.GetFuncEvalCfg("FirstGold", 4)
- if ctgID in firstGoldCTGIDList:
- OnActiviteFirstGold(curPlayer)
-
- OnActiviteDailyPackBuyGift(curPlayer, ctgID)
- return
-
-def OnActiviteFirstGold(curPlayer):
- firstGoldServerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldServerDay)
- if not firstGoldServerDay:
- recordServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldServerDay, recordServerDay)
- GameWorld.DebugLog("记录首充开服天: recordServerDay=%s" % recordServerDay)
- Sync_FirstGoldInfo(curPlayer)
-
- return
-
-def Sync_FirstGoldInfo(curPlayer):
- ## 通知首充信息
- sendPack = ChPyNetSendPack.tagMCFirstGoldInfo()
- sendPack.Clear()
- sendPack.FirstGoldRewardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GoldGiftFirstRecord)
- sendPack.FirstGoldTry = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldTry)
- sendPack.FirstGoldServerDay = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_FirstGoldServerDay)
- NetPackCommon.SendFakePack(curPlayer, sendPack)
- return
-
-#// A5 11 试用首充武器 #tagCMTryFirstGoldItem
-#
-#struct tagCMTryFirstGoldItem
-#
-#{
-# tagHead Head;
-#};
-def OnTryFirstGoldItem(index, clientData, tick):
- return
-
def OnGetHistoryRechargeAward(curPlayer, awardID):
# 领取历史充值奖励
@@ -460,7 +368,6 @@
DataRecordPack.SendEventPack("HistoryRechargeAward", {'awardID':awardID, 'needCoin':needCoin}, curPlayer)
return
-
## 通知等级奖励领取记录信息
# @param None
# @return None
@@ -469,4 +376,4 @@
sendPack.Clear()
sendPack.AwardGetRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HistoryChargeAwardGetRecord, 0)
NetPackCommon.SendFakePack(curPlayer, sendPack)
- return
\ No newline at end of file
+ return
--
Gitblit v1.8.0