From 03a39e5d596b6430db2c406a3349a1dae75c7f2e Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 09 七月 2024 16:11:00 +0800 Subject: [PATCH] 10205 【越南】【主干】【港台】【砍树】自选礼包 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/ClearFirstGold.py | 1 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py | 16 - ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 56 ++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 63 +------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 37 ++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py | 76 ++++++++++ PySysDB/PySysDBPY.h | 13 + ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 56 ++++++++ ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 63 +------- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1 11 files changed, 268 insertions(+), 120 deletions(-) diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index 2b218a3..84ac25b 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -1605,8 +1605,19 @@ WORD FirstGoldPrize; //首次充值该档位赠送仙玉 list GainItemList; //获得物品列表[[物品ID,个数,是否绑定], ...] dict ActWorldLVGainItemInfo; //根据活动世界等级获得物品信息,活动专用 {"世界等级":[[物品ID,个数,是否绑定], ...], ...} + list SelectItemInfo; //自选礼包物品信息 [[自选1ID, ...], [自选2ID, ...], ...] char NotifyMark; //广播提示 BYTE PayType; //充值类型 +}; + +//充值自选物品表 + +struct tagCTGSelectItem +{ + WORD _SelectID; //自选ID + DWORD ItemID; //物品ID + DWORD ItemCount; //物品个数 + BYTE IsAuctionItem; //是否拍品 }; //首充表 @@ -2458,7 +2469,7 @@ WORD LVLimit; //限制等级 BYTE IsDayReset; //是否每天重置 BYTE ResetType; //重置类型,0-0点重置;1-5点重置 - dict CTGIDInfo; //充值ID信息 {ctgID:折扣力度百分比, ...} + list CTGIDList; //充值ID列表 [ctgID, ...] dict CTGCountAwardInfo; //累计充值次数额外奖励 }; diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 7f66f5a..a44bae5 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -5257,6 +5257,62 @@ #------------------------------------------------------ +# A1 26 充值自选物品选择 #tagCMSelectCTGItem + +class tagCMSelectCTGItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RecordID", c_ushort), #充值ID + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x26 + 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 = 0xA1 + self.SubCmd = 0x26 + self.RecordID = 0 + self.SelectItemValue = 0 + return + + def GetLength(self): + return sizeof(tagCMSelectCTGItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 26 充值自选物品选择 //tagCMSelectCTGItem: + Cmd:%s, + SubCmd:%s, + RecordID:%d, + SelectItemValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RecordID, + self.SelectItemValue + ) + return DumpString + + +m_NAtagCMSelectCTGItem=tagCMSelectCTGItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectCTGItem.Cmd,m_NAtagCMSelectCTGItem.SubCmd))] = m_NAtagCMSelectCTGItem + + +#------------------------------------------------------ #A1 03 设置是否成年 #tagCMAdult class tagCMAdult(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index db237bc..bde1c54 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -17476,6 +17476,7 @@ ("TotalPayCount", c_int), # 累计总购买次数 ("WeekPayCount", c_ushort), # 周总购买次数 ("MonthPayCount", c_ushort), # 月总购买次数 + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 ] def __init__(self): @@ -17493,6 +17494,7 @@ self.TotalPayCount = 0 self.WeekPayCount = 0 self.MonthPayCount = 0 + self.SelectItemValue = 0 return def GetLength(self): @@ -17507,14 +17509,16 @@ TodayPayCount:%d, TotalPayCount:%d, WeekPayCount:%d, - MonthPayCount:%d + MonthPayCount:%d, + SelectItemValue:%d '''\ %( self.RecordID, self.TodayPayCount, self.TotalPayCount, self.WeekPayCount, - self.MonthPayCount + self.MonthPayCount, + self.SelectItemValue ) return DumpString @@ -32352,45 +32356,6 @@ return DumpString -class tagMCActBuyCountCTGID(Structure): - _pack_ = 1 - _fields_ = [ - ("CTGID", c_ushort), # 充值表ID - ("Discount", c_ushort), # 折扣力度百分比 - ] - - def __init__(self): - self.Clear() - 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.CTGID = 0 - self.Discount = 0 - return - - def GetLength(self): - return sizeof(tagMCActBuyCountCTGID) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 74 购买次数礼包活动信息 //tagMCActBuyCountGiftInfo: - CTGID:%d, - Discount:%d - '''\ - %( - self.CTGID, - self.Discount - ) - return DumpString - - class tagMCActBuyCountGiftInfo(Structure): Head = tagHead() ActNum = 0 #(BYTE ActNum)// 活动编号 @@ -32400,7 +32365,7 @@ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 LimitLV = 0 #(WORD LimitLV)// 限制等级 CTGIDCount = 0 #(BYTE CTGIDCount) - CTGIDInfoList = list() #(vector<tagMCActBuyCountCTGID> CTGIDInfoList)// CTGID信息列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 + CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 GiftCount = 0 #(BYTE GiftCount) BuyCountGiftList = list() #(vector<tagMCActBuyCountGift> BuyCountGiftList)// 购买次数礼包列表 data = None @@ -32422,9 +32387,8 @@ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.CTGIDCount): - temCTGIDInfoList = tagMCActBuyCountCTGID() - _pos = temCTGIDInfoList.ReadData(_lpData, _pos) - self.CTGIDInfoList.append(temCTGIDInfoList) + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.CTGIDList.append(value) self.GiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.GiftCount): temBuyCountGiftList = tagMCActBuyCountGift() @@ -32444,7 +32408,7 @@ self.ResetType = 0 self.LimitLV = 0 self.CTGIDCount = 0 - self.CTGIDInfoList = list() + self.CTGIDList = list() self.GiftCount = 0 self.BuyCountGiftList = list() return @@ -32459,8 +32423,7 @@ length += 1 length += 2 length += 1 - for i in range(self.CTGIDCount): - length += self.CTGIDInfoList[i].GetLength() + length += 2 * self.CTGIDCount length += 1 for i in range(self.GiftCount): length += self.BuyCountGiftList[i].GetLength() @@ -32478,7 +32441,7 @@ data = CommFunc.WriteWORD(data, self.LimitLV) data = CommFunc.WriteBYTE(data, self.CTGIDCount) for i in range(self.CTGIDCount): - data = CommFunc.WriteString(data, self.CTGIDInfoList[i].GetLength(), self.CTGIDInfoList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.CTGIDList[i]) data = CommFunc.WriteBYTE(data, self.GiftCount) for i in range(self.GiftCount): data = CommFunc.WriteString(data, self.BuyCountGiftList[i].GetLength(), self.BuyCountGiftList[i].GetBuffer()) @@ -32494,7 +32457,7 @@ ResetType:%d, LimitLV:%d, CTGIDCount:%d, - CTGIDInfoList:%s, + CTGIDList:%s, GiftCount:%d, BuyCountGiftList:%s '''\ diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini index 1348bb2..68a6d3f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini @@ -1483,7 +1483,7 @@ Writer = hxp Releaser = hxp RegType = 0 -RegisterPackCount = 2 +RegisterPackCount = 3 PacketCMD_1=0xA1 PacketSubCMD_1=0x23 @@ -1493,6 +1493,10 @@ PacketSubCMD_2=0x25 PacketCallFunc_2=OnCoinBuyOrderInfo +PacketCMD_3=0xA1 +PacketSubCMD_3=0x26 +PacketCallFunc_3=OnSelectCTGItem + ;首充 [PlayerGoldGift] ScriptName = Player\PlayerGoldGift.py diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index e312001..82f7828 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -3708,6 +3708,7 @@ Def_PDict_WeekCTGCount = "WeekCTGCount_%s" # 本周充值次数,参数(CTG对应的商品记录ID) Def_PDict_MonthCTGCount = "MonthCTGCount_%s" # 本月充值次数,参数(CTG对应的商品记录ID) Def_PDict_CTGGoodsBuyCount = "CTGGoodsBuyCount_%s" # 对应充值商品已购买次数,参数(CTG对应的商品记录ID) +Def_PDict_CTGSelectItemValue = "CTGSelectItemValue_%s" # 充值自选选择记录,参数(CTG对应的商品记录ID) 每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 Def_PDict_OnlineRechargeTHAward = "OnlineRechargeTHAward" # 在线特惠充值额外奖励 - 是否已领取奖励 Def_PDict_DayFreeGoldGiftState = "DayFreeGoldGiftState" # 每日免费直购礼包领取记录 Def_PDict_GoldGiftFirstRecord = "GoldGiftFirstRecord" # 首充领取记录,按位记录首充第x天是否已领取 diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py index 7f66f5a..a44bae5 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py @@ -5257,6 +5257,62 @@ #------------------------------------------------------ +# A1 26 充值自选物品选择 #tagCMSelectCTGItem + +class tagCMSelectCTGItem(Structure): + _pack_ = 1 + _fields_ = [ + ("Cmd", c_ubyte), + ("SubCmd", c_ubyte), + ("RecordID", c_ushort), #充值ID + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 + ] + + def __init__(self): + self.Clear() + self.Cmd = 0xA1 + self.SubCmd = 0x26 + 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 = 0xA1 + self.SubCmd = 0x26 + self.RecordID = 0 + self.SelectItemValue = 0 + return + + def GetLength(self): + return sizeof(tagCMSelectCTGItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A1 26 充值自选物品选择 //tagCMSelectCTGItem: + Cmd:%s, + SubCmd:%s, + RecordID:%d, + SelectItemValue:%d + '''\ + %( + self.Cmd, + self.SubCmd, + self.RecordID, + self.SelectItemValue + ) + return DumpString + + +m_NAtagCMSelectCTGItem=tagCMSelectCTGItem() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMSelectCTGItem.Cmd,m_NAtagCMSelectCTGItem.SubCmd))] = m_NAtagCMSelectCTGItem + + +#------------------------------------------------------ #A1 03 设置是否成年 #tagCMAdult class tagCMAdult(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index db237bc..bde1c54 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -17476,6 +17476,7 @@ ("TotalPayCount", c_int), # 累计总购买次数 ("WeekPayCount", c_ushort), # 周总购买次数 ("MonthPayCount", c_ushort), # 月总购买次数 + ("SelectItemValue", c_int), # 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 ] def __init__(self): @@ -17493,6 +17494,7 @@ self.TotalPayCount = 0 self.WeekPayCount = 0 self.MonthPayCount = 0 + self.SelectItemValue = 0 return def GetLength(self): @@ -17507,14 +17509,16 @@ TodayPayCount:%d, TotalPayCount:%d, WeekPayCount:%d, - MonthPayCount:%d + MonthPayCount:%d, + SelectItemValue:%d '''\ %( self.RecordID, self.TodayPayCount, self.TotalPayCount, self.WeekPayCount, - self.MonthPayCount + self.MonthPayCount, + self.SelectItemValue ) return DumpString @@ -32352,45 +32356,6 @@ return DumpString -class tagMCActBuyCountCTGID(Structure): - _pack_ = 1 - _fields_ = [ - ("CTGID", c_ushort), # 充值表ID - ("Discount", c_ushort), # 折扣力度百分比 - ] - - def __init__(self): - self.Clear() - 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.CTGID = 0 - self.Discount = 0 - return - - def GetLength(self): - return sizeof(tagMCActBuyCountCTGID) - - def GetBuffer(self): - return string_at(addressof(self), self.GetLength()) - - def OutputString(self): - DumpString = '''// AA 74 购买次数礼包活动信息 //tagMCActBuyCountGiftInfo: - CTGID:%d, - Discount:%d - '''\ - %( - self.CTGID, - self.Discount - ) - return DumpString - - class tagMCActBuyCountGiftInfo(Structure): Head = tagHead() ActNum = 0 #(BYTE ActNum)// 活动编号 @@ -32400,7 +32365,7 @@ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置 LimitLV = 0 #(WORD LimitLV)// 限制等级 CTGIDCount = 0 #(BYTE CTGIDCount) - CTGIDInfoList = list() #(vector<tagMCActBuyCountCTGID> CTGIDInfoList)// CTGID信息列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 + CTGIDList = list() #(vector<WORD> CTGIDList)// CTGID列表;总购买次数前端自己统计,直接取CTGID对应的累计购买次数累加 GiftCount = 0 #(BYTE GiftCount) BuyCountGiftList = list() #(vector<tagMCActBuyCountGift> BuyCountGiftList)// 购买次数礼包列表 data = None @@ -32422,9 +32387,8 @@ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos) self.CTGIDCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.CTGIDCount): - temCTGIDInfoList = tagMCActBuyCountCTGID() - _pos = temCTGIDInfoList.ReadData(_lpData, _pos) - self.CTGIDInfoList.append(temCTGIDInfoList) + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.CTGIDList.append(value) self.GiftCount,_pos = CommFunc.ReadBYTE(_lpData, _pos) for i in range(self.GiftCount): temBuyCountGiftList = tagMCActBuyCountGift() @@ -32444,7 +32408,7 @@ self.ResetType = 0 self.LimitLV = 0 self.CTGIDCount = 0 - self.CTGIDInfoList = list() + self.CTGIDList = list() self.GiftCount = 0 self.BuyCountGiftList = list() return @@ -32459,8 +32423,7 @@ length += 1 length += 2 length += 1 - for i in range(self.CTGIDCount): - length += self.CTGIDInfoList[i].GetLength() + length += 2 * self.CTGIDCount length += 1 for i in range(self.GiftCount): length += self.BuyCountGiftList[i].GetLength() @@ -32478,7 +32441,7 @@ data = CommFunc.WriteWORD(data, self.LimitLV) data = CommFunc.WriteBYTE(data, self.CTGIDCount) for i in range(self.CTGIDCount): - data = CommFunc.WriteString(data, self.CTGIDInfoList[i].GetLength(), self.CTGIDInfoList[i].GetBuffer()) + data = CommFunc.WriteWORD(data, self.CTGIDList[i]) data = CommFunc.WriteBYTE(data, self.GiftCount) for i in range(self.GiftCount): data = CommFunc.WriteString(data, self.BuyCountGiftList[i].GetLength(), self.BuyCountGiftList[i].GetBuffer()) @@ -32494,7 +32457,7 @@ ResetType:%d, LimitLV:%d, CTGIDCount:%d, - CTGIDInfoList:%s, + CTGIDList:%s, GiftCount:%d, BuyCountGiftList:%s '''\ 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 08a11f2..789ea5c 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 @@ -44,6 +44,7 @@ for i in xrange(ipyDataMgr.GetCTGCount()): ipyData = ipyDataMgr.GetCTGByIndex(i) recordID = ipyData.GetRecordID() + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0) totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID) todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID) weekBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index 8f2fd39..fd544bb 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -1294,8 +1294,16 @@ ("WORD", "FirstGoldPrize", 0), ("list", "GainItemList", 0), ("dict", "ActWorldLVGainItemInfo", 0), + ("list", "SelectItemInfo", 0), ("char", "NotifyMark", 0), ("BYTE", "PayType", 0), + ), + + "CTGSelectItem":( + ("WORD", "SelectID", 1), + ("DWORD", "ItemID", 0), + ("DWORD", "ItemCount", 0), + ("BYTE", "IsAuctionItem", 0), ), "FirstGold":( @@ -1930,7 +1938,7 @@ ("WORD", "LVLimit", 0), ("BYTE", "IsDayReset", 0), ("BYTE", "ResetType", 0), - ("dict", "CTGIDInfo", 0), + ("list", "CTGIDList", 0), ("dict", "CTGCountAwardInfo", 0), ), @@ -4187,8 +4195,21 @@ def GetFirstGoldPrize(self): return self.attrTuple[9] # 首次充值该档位赠送仙玉 WORD def GetGainItemList(self): return self.attrTuple[10] # 获得物品列表[[物品ID,个数,是否绑定], ...] list def GetActWorldLVGainItemInfo(self): return self.attrTuple[11] # 根据活动世界等级获得物品信息,活动专用 {"世界等级":[[物品ID,个数,是否绑定], ...], ...} dict - def GetNotifyMark(self): return self.attrTuple[12] # 广播提示 char - def GetPayType(self): return self.attrTuple[13] # 充值类型 BYTE + def GetSelectItemInfo(self): return self.attrTuple[12] # 自选礼包物品信息 [[自选1ID, ...], [自选2ID, ...], ...] list + def GetNotifyMark(self): return self.attrTuple[13] # 广播提示 char + def GetPayType(self): return self.attrTuple[14] # 充值类型 BYTE + +# 充值自选物品表 +class IPY_CTGSelectItem(): + + def __init__(self): + self.attrTuple = None + return + + def GetSelectID(self): return self.attrTuple[0] # 自选ID WORD + def GetItemID(self): return self.attrTuple[1] # 物品ID DWORD + def GetItemCount(self): return self.attrTuple[2] # 物品个数 DWORD + def GetIsAuctionItem(self): return self.attrTuple[3] # 是否拍品 BYTE # 首充表 class IPY_FirstGold(): @@ -5183,7 +5204,7 @@ def GetLVLimit(self): return self.attrTuple[3] # 限制等级 WORD def GetIsDayReset(self): return self.attrTuple[4] # 是否每天重置 BYTE def GetResetType(self): return self.attrTuple[5] # 重置类型,0-0点重置;1-5点重置 BYTE - def GetCTGIDInfo(self): return self.attrTuple[6] # 充值ID信息 {ctgID:折扣力度百分比, ...} dict + def GetCTGIDList(self): return self.attrTuple[6] # 充值ID列表 [ctgID, ...] list def GetCTGCountAwardInfo(self): return self.attrTuple[7] # 累计充值次数额外奖励 dict # 任务活动时间表 @@ -6056,6 +6077,7 @@ self.__LoadFileData("SpringSale", onlyCheck) self.__LoadFileData("OrderInfo", onlyCheck) self.__LoadFileData("CTG", onlyCheck) + self.__LoadFileData("CTGSelectItem", onlyCheck) self.__LoadFileData("FirstGold", onlyCheck) self.__LoadFileData("LVAward", onlyCheck) self.__LoadFileData("Invest", onlyCheck) @@ -7164,6 +7186,13 @@ self.CheckLoadData("CTG") return self.ipyCTGCache[index] + def GetCTGSelectItemCount(self): + self.CheckLoadData("CTGSelectItem") + return self.ipyCTGSelectItemLen + def GetCTGSelectItemByIndex(self, index): + self.CheckLoadData("CTGSelectItem") + return self.ipyCTGSelectItemCache[index] + def GetFirstGoldCount(self): self.CheckLoadData("FirstGold") return self.ipyFirstGoldLen diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py index 5f0a463..3a1da3e 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBuyCountGift.py @@ -86,8 +86,7 @@ ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID) if not ipyData: return - ctgIDInfo = ipyData.GetCTGIDInfo() - resetCTGIDList = ctgIDInfo.keys() + resetCTGIDList = ipyData.GetCTGIDList() PlayerCoin.DoResetCTGCountByIDList(curPlayer, "ActBuyCountGift", resetCTGIDList) return @@ -109,8 +108,7 @@ ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID) if not ipyData: return - CTGIDInfo= ipyData.GetCTGIDInfo() - CTGIDList = CTGIDInfo.keys() + CTGIDList = ipyData.GetCTGIDList() CTGCountAwardInfo = ipyData.GetCTGCountAwardInfo() if buyCount not in CTGCountAwardInfo: GameWorld.DebugLog("购买次数礼包没有该次数礼包奖励! actNum=%s,cfgID=%s,buyCount=%s" % (actNum, cfgID, buyCount), playerID) @@ -168,7 +166,6 @@ ipyData = IpyGameDataPY.GetIpyGameData("ActBuyCountGift", cfgID) if not ipyData: return - CTGIDInfo = ipyData.GetCTGIDInfo() CTGCountAwardInfo = ipyData.GetCTGCountAwardInfo() startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) @@ -180,13 +177,8 @@ actInfo.LimitLV = ipyData.GetLVLimit() actInfo.IsDayReset = ipyData.GetIsDayReset() actInfo.ResetType = ipyData.GetResetType() - actInfo.CTGIDInfoList = [] - for ctgID, discount in CTGIDInfo.items(): - ctg = ChPyNetSendPack.tagMCActBuyCountCTGID() - ctg.CTGID = ctgID - ctg.Discount = discount - actInfo.CTGIDInfoList.append(ctg) - actInfo.CTGIDCount = len(actInfo.CTGIDInfoList) + actInfo.CTGIDList = ipyData.GetCTGIDList() + actInfo.CTGIDCount = len(actInfo.CTGIDList) actInfo.BuyCountGiftList = [] for buyCount, awardItemList in CTGCountAwardInfo.items(): 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 d7cbbc3..705d6e0 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerCoin.py @@ -138,6 +138,7 @@ for i in xrange(ipyDataMgr.GetCTGCount()): ipyData = ipyDataMgr.GetCTGByIndex(i) recordID = ipyData.GetRecordID() + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0) if not ipyData.GetCanResetBuyCount(): continue totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID) @@ -165,6 +166,7 @@ return playerID = curPlayer.GetPlayerID() for recordID in resetCTGIDList: + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0) totalBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID) todayBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID) weekBuyCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID) @@ -200,9 +202,11 @@ #if not ipyData.GetDailyBuyCount(): # continue recordID = ipyData.GetRecordID() - if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID): + selectItemValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGSelectItemValue % recordID) + if not curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TodayCTGCount % recordID) and not selectItemValue: continue PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TodayCTGCount % recordID, 0) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, 0) syncRecordIDList.append(recordID) if syncRecordIDList: Sync_CoinToGoldCountInfo(curPlayer, syncRecordIDList) @@ -252,6 +256,35 @@ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) recordID = clientData.RecordID Sync_CoinToGoldCountInfo(curPlayer, [recordID] if recordID else []) + return + +#// A1 26 充值自选物品选择 #tagCMSelectCTGItem +# +#struct tagCMSelectCTGItem +#{ +# tagHead Head; +# WORD RecordID; //充值ID +# DWORD SelectItemValue; // 自选物品索引值,每两位存储每个自选索引对应选择的物品索引+1,存储位值为0代表未选择,最多支持选择4种物品 +#}; +def OnSelectCTGItem(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + playerID = curPlayer.GetPlayerID() + recordID = clientData.RecordID + selectItemValue = clientData.SelectItemValue + if selectItemValue > ChConfig.Def_UpperLimit_DWord: + GameWorld.ErrLog("充值自选物品选择值溢出! recordID=%s,selectItemValue=%s" % (recordID, selectItemValue), playerID) + return + ipyData = IpyGameDataPY.GetIpyGameData("CTG", recordID) + if not ipyData: + return + selectItemInfo = ipyData.GetSelectItemInfo() + selectItemList, errorInfo = GetSelectItemListInfo(selectItemInfo, selectItemValue) + if errorInfo: + GameWorld.ErrLog("充值自选物品选择错误! recordID=%s,errorInfo=%s" % (recordID, errorInfo), playerID) + return + GameWorld.DebugLog("充值自选物品: recordID=%s,selectItemValue=%s,selectItemList=%s" % (recordID, selectItemValue, selectItemList), playerID) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGSelectItemValue % recordID, selectItemValue) + Sync_CoinToGoldCountInfo(curPlayer, [recordID]) return #// A1 25 代币购买充值商品编号商品 #tagCMCoinBuyOrderInfo @@ -514,6 +547,17 @@ ExchangePayCoin(curPlayer, "Pay count limit month!monthBuyCount=%s" % monthBuyCount, addDRDict) return + selectItemList = [] + selectItemInfo = ipyData.GetSelectItemInfo() + if selectItemInfo: + selectItemValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGSelectItemValue % recordID) + addDRDict.update({"selectItemValue":selectItemValue}) + selectItemList, errorInfo = GetSelectItemListInfo(selectItemInfo, selectItemValue) + if errorInfo: + ExchangePayCoin(curPlayer, errorInfo, addDRDict) + return + addDRDict.update({"selectItemList":selectItemList}) + totalBuyCountUpd = min(totalBuyCount + 1, ChConfig.Def_UpperLimit_DWord) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CTGGoodsBuyCount % recordID, totalBuyCountUpd) addDRDict.update({"totalBuyCountUpd":totalBuyCountUpd}) @@ -530,7 +574,10 @@ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MonthCTGCount % recordID, monthBuyCountUpd) addDRDict.update({"monthBuyCountUpd":monthBuyCountUpd}) - giveItemList = GetCTGGiveItemList(ipyData) + giveItemList = [] + giveItemList += GetCTGGiveItemList(ipyData) + giveItemList += selectItemList + moneyType = ipyData.GetMoneyType() # 获得货币类型 addGold = ipyData.GetGainGold() # 获得货币数 gainGoldPrize = ipyData.GetGainGoldPrize() # 赠送货币数,首次充值赠送仙玉时,此仙玉不给 @@ -544,6 +591,30 @@ Sync_CoinToGoldCountInfo(curPlayer, [recordID]) return moneyType, addGold, prizeGold, giveItemList, ipyData + +def GetSelectItemListInfo(selectItemInfo, selectItemValue): + errorInfo = "" + selectItemList = [] + selectValue = selectItemValue + GameWorld.DebugLog("selectItemValue=%s,selectItemInfo=%s" % (selectItemValue, selectItemInfo)) + for selectNum, selectIDList in enumerate(selectItemInfo, 1): + selectIndex = selectValue % 100 - 1 # 记录的时候+1 + if selectIndex < 0: + errorInfo = "Select item is not complete!selectItemValue=%s,selectNum=%s,selectIndex=%s" % (selectItemValue, selectNum, selectIndex) + return selectItemList, errorInfo + if selectIndex >= len(selectIDList): + errorInfo = "Select item index out of range!selectItemValue=%s,selectNum=%s,selectIndex=%s" % (selectItemValue, selectNum, selectIndex) + return selectItemList, errorInfo + selectID = selectIDList[selectIndex] + selectIpyData = IpyGameDataPY.GetIpyGameData("CTGSelectItem", selectID) + if not selectIpyData: + errorInfo = "SelectID is not exist!selectItemValue=%s,selectNum=%s,selectIndex=%s,selectID=%s" % (selectItemValue, selectNum, selectIndex, selectID) + return selectItemList, errorInfo + selectItemList.append([selectIpyData.GetItemID(), selectIpyData.GetItemCount(), selectIpyData.GetIsAuctionItem()]) + selectValue = selectValue / 100 + GameWorld.DebugLog(" selectNum=%s,selectIndex=%s,selectID=%s,selectItemList=%s,selectItemValue=%s" + % (selectNum, selectIndex, selectID, selectItemList, selectItemValue)) + return selectItemList, errorInfo def GetCTGGiveItemList(ipyData): ## 获取充值ID对应给物品列表 @@ -792,6 +863,7 @@ countInfo.TotalPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGGoodsBuyCount % recordID) countInfo.WeekPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_WeekCTGCount % recordID) countInfo.MonthPayCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MonthCTGCount % recordID) + countInfo.SelectItemValue = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CTGSelectItemValue % recordID) countInfoPack.CTGCountInfoList.append(countInfo) countInfoPack.RecordCount = len(countInfoPack.CTGCountInfoList) NetPackCommon.SendFakePack(curPlayer, countInfoPack) -- Gitblit v1.8.0