From 138da603366e97015073a44d8c1b5ed671ea4f5b Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 13 二月 2019 10:35:48 +0800
Subject: [PATCH] 5309 【后端】【1.6】运营活动-幸运鉴宝
---
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py | 5
ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py | 47 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 48 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 215 ++++++++++++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 48 ++
ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 215 ++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 14
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py | 233 +++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 67 +++
ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py | 3
PySysDB/PySysDBPY.h | 25 +
ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py | 7
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 3
PySysDB/PySysDBG.h | 17 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 13
17 files changed, 958 insertions(+), 10 deletions(-)
diff --git a/PySysDB/PySysDBG.h b/PySysDB/PySysDBG.h
index e501b42..2f0a95f 100644
--- a/PySysDB/PySysDBG.h
+++ b/PySysDB/PySysDBG.h
@@ -586,4 +586,21 @@
BYTE _WorldLvNum; //世界等级档
DWORD _Rank; //排名
dict Award; //奖励 {"职业":[[物品ID,个数,是否绑定],...], ...}
+};
+
+//幸运鉴宝活动时间表
+
+struct tagActLuckyTreasure
+{
+ DWORD _CfgID; //配置ID
+ char ActMark; //活动组标记
+ list PlatformList; //活动平台列表["平台A", "平台A", ...],配[]代表所有
+ list ServerIDList; //服务器ID列表
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ BYTE ResetType; //重置类型,0-0点重置;1-5点重置
+ dict NotifyInfoStart; //全服提示信息 - 相对开始时间
+ dict NotifyInfoEnd; //全服提示信息 - 相对结束时间
+ list NotifyInfoLoop; //全服提示信息 - 循环广播[间隔分钟, 广播key]
+ WORD LVLimit; //限制等级
};
\ No newline at end of file
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 7ee816c..7afe1df 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -1731,4 +1731,29 @@
BYTE _ShareSoneLV; //共鸣等级
list AttrIDList; //属性ID列表
list AttrValueList; //属性值列表
+};
+
+//幸运鉴宝活动时间表
+
+struct tagActLuckyTreasure
+{
+ DWORD _CfgID; //配置ID
+ char StartDate; //开启日期
+ char EndDate; //结束日期
+ BYTE ResetType; //重置类型,0-0点重置;1-5点重置
+ WORD LVLimit; //限制等级
+ BYTE TemplateID; //模板编号
+ WORD LuckyPoint; //总幸运值
+};
+
+//幸运鉴宝库模板表
+
+struct tagLuckyTreasureTemplate
+{
+ BYTE _TemplateID; //模板ID
+ list WorldLVLimit; //世界等级范围
+ DWORD ItemID; //物品ID
+ WORD ItemCnt; //物品数量
+ BYTE IsBind; //是否绑定
+ DWORD Weight; //权重
};
\ No newline at end of file
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
index b5e3c80..1098c9a 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChConfig.py
@@ -533,6 +533,7 @@
ShareDefine.Def_UniversalGameRecType_DujieHelpAllRecord:500, #渡劫副本护法总记录
ShareDefine.Def_UniversalGameRecType_DujieHelpRecord:10000, #渡劫副本护法详细记录
ShareDefine.Def_UniversalGameRecType_ZhuXianBossRecord:100, #诛仙BOSS结算记录
+ ShareDefine.Def_UniversalGameRecType_LuckyTreasure:5, #幸运鉴宝记录
}
#---------------------------------------------------------------------
#比较标识
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
index 108b33c..7ba6338 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py
@@ -12752,6 +12752,54 @@
#------------------------------------------------------
+# AA 08 开始幸运鉴宝 #tagCMStartLuckyTreasure
+
+class tagCMStartLuckyTreasure(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x08
+ 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 = 0x08
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMStartLuckyTreasure)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 08 开始幸运鉴宝 //tagCMStartLuckyTreasure:
+ Cmd:%s,
+ SubCmd:%s
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd
+ )
+ return DumpString
+
+
+m_NAtagCMStartLuckyTreasure=tagCMStartLuckyTreasure()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMStartLuckyTreasure.Cmd,m_NAtagCMStartLuckyTreasure.SubCmd))] = m_NAtagCMStartLuckyTreasure
+
+
+#------------------------------------------------------
# AB 0B 购买天神经验 #tagCMBuySkyGodExp
class tagCMBuySkyGodExp(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
index a4a0e09..8ac8c37 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py
@@ -23783,6 +23783,221 @@
#------------------------------------------------------
+# AA 1F 幸运鉴宝活动信息 #tagMCLuckyTreasureInfo
+
+class tagMCLuckyTreasureItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemID", c_int), # 物品ID
+ ("ItemCnt", c_ushort), # 物品数量
+ ("IsBind", c_ubyte), # 是否绑定
+ ]
+
+ 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.ItemID = 0
+ self.ItemCnt = 0
+ self.IsBind = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCLuckyTreasureItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 1F 幸运鉴宝活动信息 //tagMCLuckyTreasureInfo:
+ ItemID:%d,
+ ItemCnt:%d,
+ IsBind:%d
+ '''\
+ %(
+ self.ItemID,
+ self.ItemCnt,
+ self.IsBind
+ )
+ return DumpString
+
+
+class tagMCLuckyTreasureInfo(Structure):
+ Head = tagHead()
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+ LimitLV = 0 #(WORD LimitLV)// 限制等级
+ LuckyPoint = 0 #(WORD LuckyPoint)// 总幸运值
+ Count = 0 #(WORD Count)// 物品数
+ ItemList = list() #(vector<tagMCLuckyTreasureItem> ItemList)// 随机库物品信息
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x1F
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.LuckyPoint,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ for i in range(self.Count):
+ temItemList = tagMCLuckyTreasureItem()
+ _pos = temItemList.ReadData(_lpData, _pos)
+ self.ItemList.append(temItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x1F
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.ResetType = 0
+ self.LimitLV = 0
+ self.LuckyPoint = 0
+ self.Count = 0
+ self.ItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 2
+ length += 2
+ for i in range(self.Count):
+ length += self.ItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndtDate)
+ data = CommFunc.WriteBYTE(data, self.ResetType)
+ data = CommFunc.WriteWORD(data, self.LimitLV)
+ data = CommFunc.WriteWORD(data, self.LuckyPoint)
+ data = CommFunc.WriteWORD(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ StartDate:%s,
+ EndtDate:%s,
+ ResetType:%d,
+ LimitLV:%d,
+ LuckyPoint:%d,
+ Count:%d,
+ ItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.StartDate,
+ self.EndtDate,
+ self.ResetType,
+ self.LimitLV,
+ self.LuckyPoint,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCLuckyTreasureInfo=tagMCLuckyTreasureInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyTreasureInfo.Head.Cmd,m_NAtagMCLuckyTreasureInfo.Head.SubCmd))] = m_NAtagMCLuckyTreasureInfo
+
+
+#------------------------------------------------------
+# AA 1E 幸运鉴宝结果信息 #tagMCLuckyTreasureResultInfo
+
+class tagMCLuckyTreasureResultInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("LuckyPoint", c_ushort), # 当前幸运点
+ ("HasFree", c_ubyte), # 是否免费过
+ ("ItemID", c_int), # 物品ID
+ ("ItemCnt", c_ushort), #物品数量
+ ("IsBind", c_ubyte), # 是否绑定
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x1E
+ 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 = 0x1E
+ self.LuckyPoint = 0
+ self.HasFree = 0
+ self.ItemID = 0
+ self.ItemCnt = 0
+ self.IsBind = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCLuckyTreasureResultInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 1E 幸运鉴宝结果信息 //tagMCLuckyTreasureResultInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ LuckyPoint:%d,
+ HasFree:%d,
+ ItemID:%d,
+ ItemCnt:%d,
+ IsBind:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.LuckyPoint,
+ self.HasFree,
+ self.ItemID,
+ self.ItemCnt,
+ self.IsBind
+ )
+ return DumpString
+
+
+m_NAtagMCLuckyTreasureResultInfo=tagMCLuckyTreasureResultInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyTreasureResultInfo.Cmd,m_NAtagMCLuckyTreasureResultInfo.SubCmd))] = m_NAtagMCLuckyTreasureResultInfo
+
+
+#------------------------------------------------------
# AA 23 新仙界盛典全民来嗨玩家信息 #tagMCNewAllPeoplePartyInfo
class tagMCNewAllPeoplePartyCount(Structure):
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
index 3c5ea40..7b8d625 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldActionControl.py
@@ -39,6 +39,7 @@
import PlayerFamilyRedPacket
import PlayerFairyCeremony
import PlayerNewFairyCeremony
+import PlayerUniversalGameRec
import GameWorldProcess
import ChPyNetSendPack
import NetPackCommon
@@ -93,7 +94,9 @@
ipyData = operationActionDict[ShareDefine.OperationActionName_FeastRedPacket][0]
if ipyData:
PlayerFamilyRedPacket.Sync_FeastRedPacket(ipyData, curPlayer)
-
+ # 幸运鉴宝活动进行中
+ if ShareDefine.OperationActionName_LuckyTreasure in operationActionDict:
+ PlayerUniversalGameRec.SendUniversalGameRecInfo(curPlayer, ShareDefine.Def_UniversalGameRecType_LuckyTreasure)
return
def SendMapServerOperationActionState():
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
index 6646cd1..4caf9cb 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/IpyGameDataPY.py
@@ -490,6 +490,20 @@
("DWORD", "Rank", 1),
("dict", "Award", 0),
),
+
+ "ActLuckyTreasure":(
+ ("DWORD", "CfgID", 1),
+ ("char", "ActMark", 0),
+ ("list", "PlatformList", 0),
+ ("list", "ServerIDList", 0),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("BYTE", "ResetType", 0),
+ ("dict", "NotifyInfoStart", 0),
+ ("dict", "NotifyInfoEnd", 0),
+ ("list", "NotifyInfoLoop", 0),
+ ("WORD", "LVLimit", 0),
+ ),
}
@@ -1453,6 +1467,35 @@
def GetWorldLvNum(self): return self.WorldLvNum # 世界等级档
def GetRank(self): return self.Rank # 排名
def GetAward(self): return self.Award # 奖励 {"职业":[[物品ID,个数,是否绑定],...], ...}
+
+# 幸运鉴宝活动时间表
+class IPY_ActLuckyTreasure():
+
+ def __init__(self):
+ self.CfgID = 0
+ self.ActMark = ""
+ self.PlatformList = []
+ self.ServerIDList = []
+ self.StartDate = ""
+ self.EndDate = ""
+ self.ResetType = 0
+ self.NotifyInfoStart = {}
+ self.NotifyInfoEnd = {}
+ self.NotifyInfoLoop = []
+ self.LVLimit = 0
+ return
+
+ def GetCfgID(self): return self.CfgID # 配置ID
+ def GetActMark(self): return self.ActMark # 活动组标记
+ def GetPlatformList(self): return self.PlatformList # 活动平台列表["平台A", "平台A", ...],配[]代表所有
+ def GetServerIDList(self): return self.ServerIDList # 服务器ID列表
+ def GetStartDate(self): return self.StartDate # 开启日期
+ def GetEndDate(self): return self.EndDate # 结束日期
+ def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+ def GetNotifyInfoStart(self): return self.NotifyInfoStart # 全服提示信息 - 相对开始时间
+ def GetNotifyInfoEnd(self): return self.NotifyInfoEnd # 全服提示信息 - 相对结束时间
+ def GetNotifyInfoLoop(self): return self.NotifyInfoLoop # 全服提示信息 - 循环广播[间隔分钟, 广播key]
+ def GetLVLimit(self): return self.LVLimit # 限制等级
def Log(msg, playerID=0, par=0):
@@ -1564,6 +1607,8 @@
self.ipyActNewFairyCeremonyLen = len(self.ipyActNewFairyCeremonyCache)
self.ipyNewUniquenessArriveCache = self.__LoadFileData("NewUniquenessArrive", IPY_NewUniquenessArrive)
self.ipyNewUniquenessArriveLen = len(self.ipyNewUniquenessArriveCache)
+ self.ipyActLuckyTreasureCache = self.__LoadFileData("ActLuckyTreasure", IPY_ActLuckyTreasure)
+ self.ipyActLuckyTreasureLen = len(self.ipyActLuckyTreasureCache)
Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
Log("IPY_DataMgr InitOK!")
return
@@ -1816,6 +1861,8 @@
def GetActNewFairyCeremonyByIndex(self, index): return self.ipyActNewFairyCeremonyCache[index]
def GetNewUniquenessArriveCount(self): return self.ipyNewUniquenessArriveLen
def GetNewUniquenessArriveByIndex(self, index): return self.ipyNewUniquenessArriveCache[index]
+ def GetActLuckyTreasureCount(self): return self.ipyActLuckyTreasureLen
+ def GetActLuckyTreasureByIndex(self, index): return self.ipyActLuckyTreasureCache[index]
IPYData = IPY_DataMgr()
def IPY_Data(): return IPYData
diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
index 7328533..22bbc91 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/ShareDefine.py
@@ -236,6 +236,7 @@
OperationActionName_FeastWeekParty = "ActFeastWeekParty" # 节日巡礼狂欢活动
OperationActionName_FeastRedPacket = "ActFeastRedPacket" # 节日红包活动
OperationActionName_FeastCollectWords = "ActFeastCollectWords" # 节日集字活动
+OperationActionName_LuckyTreasure = "ActLuckyTreasure" # 幸运鉴宝活动
#节日活动类型列表 - 该类型无视开服天,日期到了就开启
FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_FeastCollectWords]
#所有的运营活动列表,含节日活动
@@ -245,14 +246,14 @@
OperationActionName_RealmPoint, OperationActionName_FlashSale,
OperationActionName_WishingWell, OperationActionName_TotalRecharge,
OperationActionName_WeekParty, OperationActionName_LoginAward,
- OperationActionName_NewFairyCeremony, ] \
+ OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure] \
+ FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
OperationActionName_BossReborn, OperationActionName_TotalRecharge,
OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
- OperationActionName_SpringSale,]
+ OperationActionName_SpringSale, OperationActionName_LuckyTreasure]
#活动信息字典key定义
ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -1020,7 +1021,7 @@
Def_UniversalGameRecType_FBHelpBattleCheckInPlayer, #助战玩家登记记录9
Def_UniversalGameRecType_FBHelpBattleRecord, #助战未同步记录10
Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
- Def_UniversalGameRecType_12,
+ Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
Def_UniversalGameRecType_13,
Def_UniversalGameRecType_Reward, # 通用奖励表(TopBar)14
Def_UniversalGameRecType_15,
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
index 1415d89..e8a63f4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini
@@ -1454,4 +1454,16 @@
PacketCMD_3=0xA5
PacketSubCMD_3=0x1C
-PacketCallFunc_3=OnGatherSoulCompound
\ No newline at end of file
+PacketCallFunc_3=OnGatherSoulCompound
+
+;幸运鉴宝
+[PlayerLuckyTreasure]
+ScriptName = Player\PlayerLuckyTreasure.py
+Writer = xdh
+Releaser = xdh
+RegType = 0
+RegisterPackCount = 1
+
+PacketCMD_1=0xAA
+PacketSubCMD_1=0x08
+PacketCallFunc_1=OnStartLuckyTreasure
\ No newline at end of file
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 6a81e0a..f360a47 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3783,6 +3783,11 @@
#诛仙BOSS
Def_PDict_ZhuXianBossHelpCnt = "ZhuXianBossHelpCnt" # 协助次数
+
+#幸运鉴宝
+Def_PDict_LuckyTreasureID = "LuckyTreasureID" # 玩家身上的活动ID,唯一标识,取活动开始日期time值
+Def_PDict_LuckyTreasureFree = "LuckyTreasureFree" #是否免费过
+Def_PDict_LuckyTreasurePoint = "LuckyTreasurePoint" #幸运值
#-------------------------------------------------------------------------------
#类型 Def_PDictType_OnlinePrize
Def_PDict1_OnlinePrizeCnt = "OnlinePrizeCnt" # 新手在线已领取奖励次数
@@ -4651,6 +4656,7 @@
Def_Cost_FBHelpBattle, # 副本助战
Def_Cost_FBGatherSoulBoss, # 聚魂副本BOSS召唤 40
Def_Cost_CrossRealmPK, # 跨服PK
+Def_Cost_LuckyTreasure, #幸运鉴宝
#-----------以下为暂时没用的,先不删除,如有新增消费点则放在这些之前------------
Def_Cost_RefreshArrestTask, # 刷新悬赏任务
Def_Cost_OffLineExp, # 兑换离线经验
@@ -4667,7 +4673,7 @@
Def_Cost_Trade, # 交易
Def_Cost_Rename, # 改名
Def_Cost_SkillLvUp, # 技能升级
-) = range(2000, 2000 + 57)
+) = range(2000, 2000 + 58)
Def_Cost_Reason_SonKey = "reason_name_son" # 消费点原因子类说明key
@@ -4752,6 +4758,7 @@
Def_Cost_FBHelpBattle:"FBHelpBattle",
Def_Cost_FBGatherSoulBoss:"FBGatherSoulBoss",
Def_Cost_CrossRealmPK:"CrossRealmPK",
+Def_Cost_LuckyTreasure:"LuckyTreasure",
}
## -----------------------------------------------------
@@ -4843,7 +4850,8 @@
ItemGive_Refine, # 炼丹
ItemGive_Chests, # 宝箱
ItemGive_TrialExchange, # 宗门兑换
-) = range(1000, 1000 + 20)
+ItemGive_LuckyTreasure, #幸运鉴宝
+) = range(1000, 1000 + 21)
# 物品获得类型对应信息 {类型:eventName, ...}
ItemGiveTypeDict = {
@@ -4867,6 +4875,7 @@
ItemGive_Refine:"Refine",
ItemGive_Chests:"Chests",
ItemGive_TrialExchange:"TrialExchange",
+ ItemGive_LuckyTreasure:"LuckyTreasure",
}
## 物品扣除类型定义,与获得类型不重复,类型定义为 2000 ~ 2999
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
index 108b33c..7ba6338 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py
@@ -12752,6 +12752,54 @@
#------------------------------------------------------
+# AA 08 开始幸运鉴宝 #tagCMStartLuckyTreasure
+
+class tagCMStartLuckyTreasure(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x08
+ 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 = 0x08
+ return
+
+ def GetLength(self):
+ return sizeof(tagCMStartLuckyTreasure)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 08 开始幸运鉴宝 //tagCMStartLuckyTreasure:
+ Cmd:%s,
+ SubCmd:%s
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd
+ )
+ return DumpString
+
+
+m_NAtagCMStartLuckyTreasure=tagCMStartLuckyTreasure()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMStartLuckyTreasure.Cmd,m_NAtagCMStartLuckyTreasure.SubCmd))] = m_NAtagCMStartLuckyTreasure
+
+
+#------------------------------------------------------
# AB 0B 购买天神经验 #tagCMBuySkyGodExp
class tagCMBuySkyGodExp(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index a4a0e09..8ac8c37 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -23783,6 +23783,221 @@
#------------------------------------------------------
+# AA 1F 幸运鉴宝活动信息 #tagMCLuckyTreasureInfo
+
+class tagMCLuckyTreasureItem(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("ItemID", c_int), # 物品ID
+ ("ItemCnt", c_ushort), # 物品数量
+ ("IsBind", c_ubyte), # 是否绑定
+ ]
+
+ 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.ItemID = 0
+ self.ItemCnt = 0
+ self.IsBind = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCLuckyTreasureItem)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 1F 幸运鉴宝活动信息 //tagMCLuckyTreasureInfo:
+ ItemID:%d,
+ ItemCnt:%d,
+ IsBind:%d
+ '''\
+ %(
+ self.ItemID,
+ self.ItemCnt,
+ self.IsBind
+ )
+ return DumpString
+
+
+class tagMCLuckyTreasureInfo(Structure):
+ Head = tagHead()
+ StartDate = "" #(char StartDate[10])// 开始日期 y-m-d
+ EndtDate = "" #(char EndtDate[10])// 结束日期 y-m-d
+ ResetType = 0 #(BYTE ResetType)// 重置类型,0-0点重置;1-5点重置
+ LimitLV = 0 #(WORD LimitLV)// 限制等级
+ LuckyPoint = 0 #(WORD LuckyPoint)// 总幸运值
+ Count = 0 #(WORD Count)// 物品数
+ ItemList = list() #(vector<tagMCLuckyTreasureItem> ItemList)// 随机库物品信息
+ data = None
+
+ def __init__(self):
+ self.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x1F
+ return
+
+ def ReadData(self, _lpData, _pos=0, _Len=0):
+ self.Clear()
+ _pos = self.Head.ReadData(_lpData, _pos)
+ self.StartDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.EndtDate,_pos = CommFunc.ReadString(_lpData, _pos,10)
+ self.ResetType,_pos = CommFunc.ReadBYTE(_lpData, _pos)
+ self.LimitLV,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.LuckyPoint,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ self.Count,_pos = CommFunc.ReadWORD(_lpData, _pos)
+ for i in range(self.Count):
+ temItemList = tagMCLuckyTreasureItem()
+ _pos = temItemList.ReadData(_lpData, _pos)
+ self.ItemList.append(temItemList)
+ return _pos
+
+ def Clear(self):
+ self.Head = tagHead()
+ self.Head.Clear()
+ self.Head.Cmd = 0xAA
+ self.Head.SubCmd = 0x1F
+ self.StartDate = ""
+ self.EndtDate = ""
+ self.ResetType = 0
+ self.LimitLV = 0
+ self.LuckyPoint = 0
+ self.Count = 0
+ self.ItemList = list()
+ return
+
+ def GetLength(self):
+ length = 0
+ length += self.Head.GetLength()
+ length += 10
+ length += 10
+ length += 1
+ length += 2
+ length += 2
+ length += 2
+ for i in range(self.Count):
+ length += self.ItemList[i].GetLength()
+
+ return length
+
+ def GetBuffer(self):
+ data = ''
+ data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
+ data = CommFunc.WriteString(data, 10, self.StartDate)
+ data = CommFunc.WriteString(data, 10, self.EndtDate)
+ data = CommFunc.WriteBYTE(data, self.ResetType)
+ data = CommFunc.WriteWORD(data, self.LimitLV)
+ data = CommFunc.WriteWORD(data, self.LuckyPoint)
+ data = CommFunc.WriteWORD(data, self.Count)
+ for i in range(self.Count):
+ data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer())
+ return data
+
+ def OutputString(self):
+ DumpString = '''
+ Head:%s,
+ StartDate:%s,
+ EndtDate:%s,
+ ResetType:%d,
+ LimitLV:%d,
+ LuckyPoint:%d,
+ Count:%d,
+ ItemList:%s
+ '''\
+ %(
+ self.Head.OutputString(),
+ self.StartDate,
+ self.EndtDate,
+ self.ResetType,
+ self.LimitLV,
+ self.LuckyPoint,
+ self.Count,
+ "..."
+ )
+ return DumpString
+
+
+m_NAtagMCLuckyTreasureInfo=tagMCLuckyTreasureInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyTreasureInfo.Head.Cmd,m_NAtagMCLuckyTreasureInfo.Head.SubCmd))] = m_NAtagMCLuckyTreasureInfo
+
+
+#------------------------------------------------------
+# AA 1E 幸运鉴宝结果信息 #tagMCLuckyTreasureResultInfo
+
+class tagMCLuckyTreasureResultInfo(Structure):
+ _pack_ = 1
+ _fields_ = [
+ ("Cmd", c_ubyte),
+ ("SubCmd", c_ubyte),
+ ("LuckyPoint", c_ushort), # 当前幸运点
+ ("HasFree", c_ubyte), # 是否免费过
+ ("ItemID", c_int), # 物品ID
+ ("ItemCnt", c_ushort), #物品数量
+ ("IsBind", c_ubyte), # 是否绑定
+ ]
+
+ def __init__(self):
+ self.Clear()
+ self.Cmd = 0xAA
+ self.SubCmd = 0x1E
+ 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 = 0x1E
+ self.LuckyPoint = 0
+ self.HasFree = 0
+ self.ItemID = 0
+ self.ItemCnt = 0
+ self.IsBind = 0
+ return
+
+ def GetLength(self):
+ return sizeof(tagMCLuckyTreasureResultInfo)
+
+ def GetBuffer(self):
+ return string_at(addressof(self), self.GetLength())
+
+ def OutputString(self):
+ DumpString = '''// AA 1E 幸运鉴宝结果信息 //tagMCLuckyTreasureResultInfo:
+ Cmd:%s,
+ SubCmd:%s,
+ LuckyPoint:%d,
+ HasFree:%d,
+ ItemID:%d,
+ ItemCnt:%d,
+ IsBind:%d
+ '''\
+ %(
+ self.Cmd,
+ self.SubCmd,
+ self.LuckyPoint,
+ self.HasFree,
+ self.ItemID,
+ self.ItemCnt,
+ self.IsBind
+ )
+ return DumpString
+
+
+m_NAtagMCLuckyTreasureResultInfo=tagMCLuckyTreasureResultInfo()
+ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCLuckyTreasureResultInfo.Cmd,m_NAtagMCLuckyTreasureResultInfo.SubCmd))] = m_NAtagMCLuckyTreasureResultInfo
+
+
+#------------------------------------------------------
# AA 23 新仙界盛典全民来嗨玩家信息 #tagMCNewAllPeoplePartyInfo
class tagMCNewAllPeoplePartyCount(Structure):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 0ac851a..f6939be 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -1354,6 +1354,25 @@
("list", "AttrIDList", 0),
("list", "AttrValueList", 0),
),
+
+ "ActLuckyTreasure":(
+ ("DWORD", "CfgID", 1),
+ ("char", "StartDate", 0),
+ ("char", "EndDate", 0),
+ ("BYTE", "ResetType", 0),
+ ("WORD", "LVLimit", 0),
+ ("BYTE", "TemplateID", 0),
+ ("WORD", "LuckyPoint", 0),
+ ),
+
+ "LuckyTreasureTemplate":(
+ ("BYTE", "TemplateID", 1),
+ ("list", "WorldLVLimit", 0),
+ ("DWORD", "ItemID", 0),
+ ("WORD", "ItemCnt", 0),
+ ("BYTE", "IsBind", 0),
+ ("DWORD", "Weight", 0),
+ ),
}
@@ -4133,6 +4152,46 @@
def GetShareSoneLV(self): return self.ShareSoneLV # 共鸣等级
def GetAttrIDList(self): return self.AttrIDList # 属性ID列表
def GetAttrValueList(self): return self.AttrValueList # 属性值列表
+
+# 幸运鉴宝活动时间表
+class IPY_ActLuckyTreasure():
+
+ def __init__(self):
+ self.CfgID = 0
+ self.StartDate = ""
+ self.EndDate = ""
+ self.ResetType = 0
+ self.LVLimit = 0
+ self.TemplateID = 0
+ self.LuckyPoint = 0
+ return
+
+ def GetCfgID(self): return self.CfgID # 配置ID
+ def GetStartDate(self): return self.StartDate # 开启日期
+ def GetEndDate(self): return self.EndDate # 结束日期
+ def GetResetType(self): return self.ResetType # 重置类型,0-0点重置;1-5点重置
+ def GetLVLimit(self): return self.LVLimit # 限制等级
+ def GetTemplateID(self): return self.TemplateID # 模板编号
+ def GetLuckyPoint(self): return self.LuckyPoint # 总幸运值
+
+# 幸运鉴宝库模板表
+class IPY_LuckyTreasureTemplate():
+
+ def __init__(self):
+ self.TemplateID = 0
+ self.WorldLVLimit = []
+ self.ItemID = 0
+ self.ItemCnt = 0
+ self.IsBind = 0
+ self.Weight = 0
+ return
+
+ def GetTemplateID(self): return self.TemplateID # 模板ID
+ def GetWorldLVLimit(self): return self.WorldLVLimit # 世界等级范围
+ def GetItemID(self): return self.ItemID # 物品ID
+ def GetItemCnt(self): return self.ItemCnt # 物品数量
+ def GetIsBind(self): return self.IsBind # 是否绑定
+ def GetWeight(self): return self.Weight # 权重
def Log(msg, playerID=0, par=0):
@@ -4420,6 +4479,10 @@
self.ipyNewAllPeoplePartyAwardLen = len(self.ipyNewAllPeoplePartyAwardCache)
self.ipyZhuXianStoneAttrCache = self.__LoadFileData("ZhuXianStoneAttr", IPY_ZhuXianStoneAttr)
self.ipyZhuXianStoneAttrLen = len(self.ipyZhuXianStoneAttrCache)
+ self.ipyActLuckyTreasureCache = self.__LoadFileData("ActLuckyTreasure", IPY_ActLuckyTreasure)
+ self.ipyActLuckyTreasureLen = len(self.ipyActLuckyTreasureCache)
+ self.ipyLuckyTreasureTemplateCache = self.__LoadFileData("LuckyTreasureTemplate", IPY_LuckyTreasureTemplate)
+ self.ipyLuckyTreasureTemplateLen = len(self.ipyLuckyTreasureTemplateCache)
Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
Log("IPY_DataMgr InitOK!")
return
@@ -4848,6 +4911,10 @@
def GetNewAllPeoplePartyAwardByIndex(self, index): return self.ipyNewAllPeoplePartyAwardCache[index]
def GetZhuXianStoneAttrCount(self): return self.ipyZhuXianStoneAttrLen
def GetZhuXianStoneAttrByIndex(self, index): return self.ipyZhuXianStoneAttrCache[index]
+ def GetActLuckyTreasureCount(self): return self.ipyActLuckyTreasureLen
+ def GetActLuckyTreasureByIndex(self, index): return self.ipyActLuckyTreasureCache[index]
+ def GetLuckyTreasureTemplateCount(self): return self.ipyLuckyTreasureTemplateLen
+ def GetLuckyTreasureTemplateByIndex(self, index): return self.ipyLuckyTreasureTemplateCache[index]
IPYData = IPY_DataMgr()
def IPY_Data(): return IPYData
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 91c0f21..c589988 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -105,6 +105,7 @@
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerFeastRedPacket
+import PlayerLuckyTreasure
import CrossRealmPlayer
import ChNetSendPack
import FamilyRobBoss
@@ -778,6 +779,8 @@
PlayerBindJadeWheel.OnLogin(curPlayer)
# 许愿池
PlayerWishingWell.OnLogin(curPlayer)
+ #幸运鉴宝
+ PlayerLuckyTreasure.OnLogin(curPlayer)
# 上线查询一次充值订单
curPlayer.SendDBQueryRecharge()
# 小助手
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index 6ea266d..e60c28b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -86,6 +86,7 @@
import PlayerFairyCeremony
import PlayerNewFairyCeremony
import PlayerFeastRedPacket
+import PlayerLuckyTreasure
import PlayerRefineStove
import PlayerFlashSale
import PlayerWishingWell
@@ -1321,6 +1322,8 @@
elif actionName == ShareDefine.OperationActionName_FeastRedPacket:
PlayerFeastRedPacket.RefreshOperationAction_FeastRedPacket()
+ elif actionName == ShareDefine.OperationActionName_LuckyTreasure:
+ PlayerLuckyTreasure.RefreshLuckyTreasureAction()
return
if key == ShareDefine.Def_Notify_WorldKey_CrossZoneName:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py
new file mode 100644
index 0000000..30c9f4f
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerLuckyTreasure.py
@@ -0,0 +1,233 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+#-------------------------------------------------------------------------------
+#
+##@package Player.PlayerLuckyTreasure
+#
+# @todo:幸运鉴宝
+# @author xdh
+# @date 2019-2-12 19:50
+# @version 1.0
+#
+#
+# 详细描述: 幸运鉴宝
+#
+#---------------------------------------------------------------------
+"""Version = 2019-2-12 19:50"""
+#---------------------------------------------------------------------
+
+import IPY_GameWorld
+import GameWorld
+import ChConfig
+import IpyGameDataPY
+import PlayerControl
+import ChPyNetSendPack
+import NetPackCommon
+import ShareDefine
+import PyGameData
+import ItemControler
+import ItemCommon
+
+
+
+def OnLogin(curPlayer):
+ isReset = __CheckPlayerLuckyTreasureAction(curPlayer)
+ if not isReset:
+ actCostRebateInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {})
+ # 活动中同步活动信息
+ if actCostRebateInfo.get(ShareDefine.ActKey_State):
+ SyncLuckyTreasureInfo(curPlayer)
+ SyncLuckyTreasureResultInfo(curPlayer)
+
+ return
+
+def RefreshLuckyTreasureAction():
+ __InitLuckyTreasureRateList()
+ playerManager = GameWorld.GetPlayerManager()
+ for i in xrange(playerManager.GetPlayerCount()):
+ curPlayer = playerManager.GetPlayerByIndex(i)
+ if curPlayer == None or not curPlayer.GetInitOK():
+ continue
+ __CheckPlayerLuckyTreasureAction(curPlayer)
+ return
+
+def __CheckPlayerLuckyTreasureAction(curPlayer):
+ ## 检查玩家幸运鉴宝活动数据信息
+ global g_randomWellDict
+
+ playerID = curPlayer.GetPlayerID()
+
+ actLuckyTreasureInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {})
+ LuckyTreasureID = actLuckyTreasureInfo.get(ShareDefine.ActKey_ID, 0)
+ state = actLuckyTreasureInfo.get(ShareDefine.ActKey_State, 0)
+ #cfgID = actLuckyTreasureInfo.get(ShareDefine.ActKey_CfgID, 0)
+ worldLV = actLuckyTreasureInfo.get(ShareDefine.ActKey_WorldLV, 0)
+ playerLuckyTreasureID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureID) # 玩家身上的活动ID
+
+ # 活动ID 相同的话不处理
+ if LuckyTreasureID == playerLuckyTreasureID:
+ #GameWorld.DebugLog("幸运鉴宝活动ID不变,不处理!", curPlayer.GetPlayerID())
+ return
+ msgStr = str([ShareDefine.Def_UniversalGameRecType_LuckyTreasure, 2])
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'DelUniversalGameRec', msgStr, len(msgStr))
+ GameWorld.DebugLog("幸运鉴宝重置! LuckyTreasureID=%s,playerLuckyTreasureID=%s,state=%s,worldLv=%s"
+ % (LuckyTreasureID, playerLuckyTreasureID, state, worldLV), playerID)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureID, LuckyTreasureID)
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureFree, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasurePoint, 0)
+
+ SyncLuckyTreasureInfo(curPlayer)
+ SyncLuckyTreasureResultInfo(curPlayer)
+ return True
+
+def __InitLuckyTreasureRateList():
+ global g_itemRateList
+ actLuckyTreasureInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {})
+ state = actLuckyTreasureInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actLuckyTreasureInfo.get(ShareDefine.ActKey_CfgID, 0)
+ worldLV = actLuckyTreasureInfo.get(ShareDefine.ActKey_WorldLV, 0)
+ if not cfgID or not worldLV or not state:
+ return
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLuckyTreasure", cfgID)
+ if not actIpyData:
+ return
+ templateID = actIpyData.GetTemplateID()
+ ipyDataList = IpyGameDataPY.GetIpyGameDataList('LuckyTreasureTemplate', templateID)
+ if not ipyDataList:
+ return
+ tWeight = 0
+ g_itemRateList = []
+ for ipyData in ipyDataList:
+ worldLVLimit = ipyData.GetWorldLVLimit()
+ if worldLV < worldLVLimit[0] or worldLV > worldLVLimit[1]:
+ continue
+ itemID = ipyData.GetItemID()
+ itemCnt = ipyData.GetItemCnt()
+ isBind = ipyData.GetIsBind()
+ weight = ipyData.GetWeight()
+ tWeight += weight
+ g_itemRateList.append([tWeight, [itemID, itemCnt, isBind]])
+ return
+
+def __GetRandomRateList():
+ if not g_itemRateList:
+ __InitLuckyTreasureRateList()
+ return g_itemRateList
+
+
+#// AA 08 开始幸运鉴宝 #tagCMStartLuckyTreasure
+#struct tagCMStartLuckyTreasure
+#{
+# tagHead Head;
+#};
+def OnStartLuckyTreasure(index, clientData, tick):
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {})
+ state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0)
+ if not state or not cfgID:
+ return
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLuckyTreasure", cfgID)
+ if not actIpyData:
+ return
+
+ hasFree = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureFree)
+ if hasFree:
+ costMoney = IpyGameDataPY.GetFuncCfg('LuckyAppraisal')
+ if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney):
+ return
+ # 检查背包
+ needSpace = 1
+ packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace)
+ if needSpace > packSpace:
+ PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_998371")
+ return
+
+ randomRateList = __GetRandomRateList()
+ if not randomRateList:
+ return
+ greatItem = randomRateList[-1][1]
+
+ curLuckyPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasurePoint)
+ maxLuckyPoint = actIpyData.GetLuckyPoint()
+ singlePoint = IpyGameDataPY.GetFuncCfg('LuckyAppraisal', 2)
+ if curLuckyPoint + singlePoint >= maxLuckyPoint:
+ giveItem = greatItem
+ newLuckyPoint = 0
+ else:
+ randomResultList = GameWorld.GetResultByRandomListEx(randomRateList, 1, [])
+ if len(randomResultList) != 1:
+ GameWorld.DebugLog(' 开始幸运鉴宝 随机库结果 获取错误 !')
+ return
+ giveItem = randomResultList[0]
+ if giveItem == greatItem:
+ newLuckyPoint = 0
+ playerName = curPlayer.GetName()
+ PlayerControl.WorldNotify(0, 'LuckyAppraisal_1', [playerName, greatItem[0]])
+ msgStr = str([ShareDefine.Def_UniversalGameRecType_LuckyTreasure, [], [curPlayer.GetName()], 2, 0])
+ GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'AddUniversalGameRec', msgStr, len(msgStr))
+
+ else:
+ newLuckyPoint = curLuckyPoint + singlePoint
+ if hasFree:
+ PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costMoney, ChConfig.Def_Cost_LuckyTreasure)
+ else:
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasureFree, 1)
+ #更新幸运值
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LuckyTreasurePoint, newLuckyPoint)
+
+ for itemID, itemCount, isBind in [giveItem]:
+ ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isBind, [IPY_GameWorld.rptItem], event=[ChConfig.ItemGive_LuckyTreasure, False, {"isFree":not hasFree}])
+
+ SyncLuckyTreasureResultInfo(curPlayer, giveItem)
+ return
+
+
+def SyncLuckyTreasureInfo(curPlayer):
+ ##同步幸运鉴宝活动信息
+ actBossRebornInfo = PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_LuckyTreasure, {})
+ state = actBossRebornInfo.get(ShareDefine.ActKey_State, 0)
+ cfgID = actBossRebornInfo.get(ShareDefine.ActKey_CfgID, 0)
+ if not state or not cfgID:
+ return
+ actIpyData = IpyGameDataPY.GetIpyGameData("ActLuckyTreasure", cfgID)
+ if not actIpyData:
+ return
+ openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
+ actInfo = ChPyNetSendPack.tagMCLuckyTreasureInfo()
+ actInfo.Clear()
+ actInfo.StartDate = GameWorld.GetOperationActionDateStr(actIpyData.GetStartDate(), openServerDay)
+ actInfo.EndtDate = GameWorld.GetOperationActionDateStr(actIpyData.GetEndDate(), openServerDay)
+ actInfo.ResetType = actIpyData.GetResetType()
+ actInfo.LimitLV = actIpyData.GetLVLimit()
+ actInfo.LuckyPoint = actIpyData.GetLuckyPoint()
+ actInfo.ItemList = []
+ randomItemList = __GetRandomRateList()
+ for itemInfo in randomItemList:
+ itemID, itemCnt, isBind = itemInfo[1]
+ wellItemInfo = ChPyNetSendPack.tagMCLuckyTreasureItem()
+ wellItemInfo.ItemID = itemID
+ wellItemInfo.ItemCnt = itemCnt
+ wellItemInfo.IsBind = isBind
+ actInfo.ItemList.append(wellItemInfo)
+ actInfo.Count = len(actInfo.ItemList)
+ NetPackCommon.SendFakePack(curPlayer, actInfo)
+ return
+
+
+def SyncLuckyTreasureResultInfo(curPlayer, itemInfo=[]):
+ ##同步幸运鉴宝玩家信息
+ packInfo = ChPyNetSendPack.tagMCLuckyTreasureResultInfo()
+ packInfo.Clear()
+ packInfo.LuckyPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasurePoint)
+ packInfo.HasFree = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LuckyTreasureFree)
+ if itemInfo:
+ packInfo.ItemID = itemInfo[0]
+ packInfo.ItemCnt = itemInfo[1]
+ packInfo.IsBind = itemInfo[2]
+ NetPackCommon.SendFakePack(curPlayer, packInfo)
+ return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
index 7328533..22bbc91 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ShareDefine.py
@@ -236,6 +236,7 @@
OperationActionName_FeastWeekParty = "ActFeastWeekParty" # 节日巡礼狂欢活动
OperationActionName_FeastRedPacket = "ActFeastRedPacket" # 节日红包活动
OperationActionName_FeastCollectWords = "ActFeastCollectWords" # 节日集字活动
+OperationActionName_LuckyTreasure = "ActLuckyTreasure" # 幸运鉴宝活动
#节日活动类型列表 - 该类型无视开服天,日期到了就开启
FeastOperationActionNameList = [OperationActionName_FeastWeekParty, OperationActionName_FeastRedPacket, OperationActionName_FeastCollectWords]
#所有的运营活动列表,含节日活动
@@ -245,14 +246,14 @@
OperationActionName_RealmPoint, OperationActionName_FlashSale,
OperationActionName_WishingWell, OperationActionName_TotalRecharge,
OperationActionName_WeekParty, OperationActionName_LoginAward,
- OperationActionName_NewFairyCeremony, ] \
+ OperationActionName_NewFairyCeremony, OperationActionName_LuckyTreasure] \
+ FeastOperationActionNameList
#需要记录开启活动时的世界等级的运营活动
NeedWorldLVOperationActNameList = [OperationActionName_FairyCeremony, OperationActionName_WishingWell,
OperationActionName_NewFairyCeremony, OperationActionName_FlashSale,
OperationActionName_BossReborn, OperationActionName_TotalRecharge,
OperationActionName_CostRebate, OperationActionName_FlashGiftbag,
- OperationActionName_SpringSale,]
+ OperationActionName_SpringSale, OperationActionName_LuckyTreasure]
#活动信息字典key定义
ActKey_ID = "ID" # 活动ID,唯一标识的ID,一般是活动开启的time值
@@ -1020,7 +1021,7 @@
Def_UniversalGameRecType_FBHelpBattleCheckInPlayer, #助战玩家登记记录9
Def_UniversalGameRecType_FBHelpBattleRecord, #助战未同步记录10
Def_UniversalGameRecType_ZhuXianBossRecord, #诛仙BOSS结算记录11
- Def_UniversalGameRecType_12,
+ Def_UniversalGameRecType_LuckyTreasure, #幸运鉴宝大奖记录12
Def_UniversalGameRecType_13,
Def_UniversalGameRecType_Reward, # 通用奖励表(TopBar)14
Def_UniversalGameRecType_15,
--
Gitblit v1.8.0