From 27449927086d449e2316e2a5422cc82077bae377 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期三, 23 一月 2019 14:24:44 +0800 Subject: [PATCH] 6026 子 【开发】【1.5.100】诛仙装备开发 / 【后端】【1.5.100】诛仙装备分解 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py | 1 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini | 6 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py | 84 ++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 112 +++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 20 ++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py | 111 ++++++++++ PySysDB/PySysDBPY.h | 8 ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py | 84 ++++++++ ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py | 112 +++++++++++ ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4 10 files changed, 533 insertions(+), 9 deletions(-) diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h index 832ed26..c88ffaa 100644 --- a/PySysDB/PySysDBPY.h +++ b/PySysDB/PySysDBPY.h @@ -1632,4 +1632,12 @@ dict GradeAward; //评级奖励 WORD UnLockEquipPlace; //解锁的装备位 DWORD NeedPower; //推荐战力 +}; + +//诛仙装备分解表 + +struct tagZhuXianEquipDecompose +{ + BYTE _ClassLV; //阶级 + dict DecomposeInfo; //{(产出物品ID,..):饼图,..} }; \ No newline at end of file diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py index 1df956a..481d0ec 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetPack.py @@ -7136,6 +7136,90 @@ #------------------------------------------------------ +# A3 32 诛仙装备分解 #tagCMZhuXianEquipDecompose + +class tagCMZhuXianEquipDecompose(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//材料所在背包索引的数量 + IndexList = list() #(vector<WORD> IndexList)//材料所在背包索引列表 + ItemIDList = list() #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表 + IsAuto = 0 #(BYTE IsAuto)//是否自动分解 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x32 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.IndexList.append(value) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ItemIDList.append(value) + self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x32 + self.Count = 0 + self.IndexList = list() + self.ItemIDList = list() + self.IsAuto = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 * self.Count + length += 4 * self.Count + length += 1 + + return length + + def GetBuffer(self): + 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.WriteWORD(data, self.IndexList[i]) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.ItemIDList[i]) + data = CommFunc.WriteBYTE(data, self.IsAuto) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + IndexList:%s, + ItemIDList:%s, + IsAuto:%d + '''\ + %( + self.Head.OutputString(), + self.Count, + "...", + "...", + self.IsAuto + ) + return DumpString + + +m_NAtagCMZhuXianEquipDecompose=tagCMZhuXianEquipDecompose() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhuXianEquipDecompose.Head.Cmd,m_NAtagCMZhuXianEquipDecompose.Head.SubCmd))] = m_NAtagCMZhuXianEquipDecompose + + +#------------------------------------------------------ # A5 30 购买魔魂铜钱经验什么的 #tagCMBuySomething class tagCMBuySomething(Structure): diff --git a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py index 90a694f..def89d1 100644 --- a/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py +++ b/ServerPython/CoreServerGroup/GameServer/Script/ChPyNetSendPack.py @@ -20107,6 +20107,118 @@ #------------------------------------------------------ +# A8 15 诛仙装备分解结果通知 #tagMCZhuXianDecomposeResult + +class tagMCZhuXianDecomposeItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), #物品ID + ("ItemCnt", c_ubyte), #物品数量 + ("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(tagMCZhuXianDecomposeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A8 15 诛仙装备分解结果通知 //tagMCZhuXianDecomposeResult: + ItemID:%d, + ItemCnt:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCnt, + self.IsBind + ) + return DumpString + + +class tagMCZhuXianDecomposeResult(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)//数量 + ItemList = list() #(vector<tagMCZhuXianDecomposeItem> ItemList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temItemList = tagMCZhuXianDecomposeItem() + _pos = temItemList.ReadData(_lpData, _pos) + self.ItemList.append(temItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x15 + self.Cnt = 0 + self.ItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + length += self.ItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + ItemList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagMCZhuXianDecomposeResult=tagMCZhuXianDecomposeResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianDecomposeResult.Head.Cmd,m_NAtagMCZhuXianDecomposeResult.Head.SubCmd))] = m_NAtagMCZhuXianDecomposeResult + + +#------------------------------------------------------ # AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo class tagMCActLoginAwardItem(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini index 885c20d..2689b26 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/PyNetPack.ini @@ -1350,7 +1350,7 @@ Writer = hxp Releaser = hxp RegType = 0 -RegisterPackCount = 2 +RegisterPackCount = 3 PacketCMD_1=0xA3 PacketSubCMD_1=0x30 @@ -1360,6 +1360,10 @@ PacketSubCMD_2=0x31 PacketCallFunc_2=OnUnEquipZhuXianItem +PacketCMD_3=0xA3 +PacketSubCMD_3=0x32 +PacketCallFunc_3=OnZhuXianEquipDecompose + ;个推 [PlayerGeTui] ScriptName = Player\PlayerGeTui.py diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py index 173dabb..2dd7da7 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py @@ -4881,7 +4881,8 @@ ItemDel_ChatBubbleBox, # 激活聊天气泡框 ItemDel_GatherSoul, # 聚魂分解 ItemDel_CoatDecompose, # 时装分解 -) = range(2000, 2000 + 37) +ItemDel_ZhuXianDecompose, # 诛仙装备分解 +) = range(2000, 2000 + 38) # 物品扣除类型对应信息 {类型:eventName, ...} ItemDelTypeDict = { @@ -4922,6 +4923,7 @@ ItemDel_ChatBubbleBox:"ChatBubbleBox", ItemDel_GatherSoul:"GatherSoul", ItemDel_CoatDecompose:"CoatDecompose", + ItemDel_ZhuXianDecompose:"ZhuXianDecompose", } ##================================================================================================== diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py index 1df956a..481d0ec 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetPack.py @@ -7136,6 +7136,90 @@ #------------------------------------------------------ +# A3 32 诛仙装备分解 #tagCMZhuXianEquipDecompose + +class tagCMZhuXianEquipDecompose(Structure): + Head = tagHead() + Count = 0 #(BYTE Count)//材料所在背包索引的数量 + IndexList = list() #(vector<WORD> IndexList)//材料所在背包索引列表 + ItemIDList = list() #(vector<DWORD> ItemIDList)//材料所在背包物品ID列表 + IsAuto = 0 #(BYTE IsAuto)//是否自动分解 + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x32 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Count,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Count): + value,_pos=CommFunc.ReadWORD(_lpData,_pos) + self.IndexList.append(value) + for i in range(self.Count): + value,_pos=CommFunc.ReadDWORD(_lpData,_pos) + self.ItemIDList.append(value) + self.IsAuto,_pos = CommFunc.ReadBYTE(_lpData, _pos) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA3 + self.Head.SubCmd = 0x32 + self.Count = 0 + self.IndexList = list() + self.ItemIDList = list() + self.IsAuto = 0 + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + length += 2 * self.Count + length += 4 * self.Count + length += 1 + + return length + + def GetBuffer(self): + 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.WriteWORD(data, self.IndexList[i]) + for i in range(self.Count): + data = CommFunc.WriteDWORD(data, self.ItemIDList[i]) + data = CommFunc.WriteBYTE(data, self.IsAuto) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Count:%d, + IndexList:%s, + ItemIDList:%s, + IsAuto:%d + '''\ + %( + self.Head.OutputString(), + self.Count, + "...", + "...", + self.IsAuto + ) + return DumpString + + +m_NAtagCMZhuXianEquipDecompose=tagCMZhuXianEquipDecompose() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMZhuXianEquipDecompose.Head.Cmd,m_NAtagCMZhuXianEquipDecompose.Head.SubCmd))] = m_NAtagCMZhuXianEquipDecompose + + +#------------------------------------------------------ # A5 30 购买魔魂铜钱经验什么的 #tagCMBuySomething class tagCMBuySomething(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py index 90a694f..def89d1 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py @@ -20107,6 +20107,118 @@ #------------------------------------------------------ +# A8 15 诛仙装备分解结果通知 #tagMCZhuXianDecomposeResult + +class tagMCZhuXianDecomposeItem(Structure): + _pack_ = 1 + _fields_ = [ + ("ItemID", c_int), #物品ID + ("ItemCnt", c_ubyte), #物品数量 + ("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(tagMCZhuXianDecomposeItem) + + def GetBuffer(self): + return string_at(addressof(self), self.GetLength()) + + def OutputString(self): + DumpString = '''// A8 15 诛仙装备分解结果通知 //tagMCZhuXianDecomposeResult: + ItemID:%d, + ItemCnt:%d, + IsBind:%d + '''\ + %( + self.ItemID, + self.ItemCnt, + self.IsBind + ) + return DumpString + + +class tagMCZhuXianDecomposeResult(Structure): + Head = tagHead() + Cnt = 0 #(BYTE Cnt)//数量 + ItemList = list() #(vector<tagMCZhuXianDecomposeItem> ItemList) + data = None + + def __init__(self): + self.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x15 + return + + def ReadData(self, _lpData, _pos=0, _Len=0): + self.Clear() + _pos = self.Head.ReadData(_lpData, _pos) + self.Cnt,_pos = CommFunc.ReadBYTE(_lpData, _pos) + for i in range(self.Cnt): + temItemList = tagMCZhuXianDecomposeItem() + _pos = temItemList.ReadData(_lpData, _pos) + self.ItemList.append(temItemList) + return _pos + + def Clear(self): + self.Head = tagHead() + self.Head.Clear() + self.Head.Cmd = 0xA8 + self.Head.SubCmd = 0x15 + self.Cnt = 0 + self.ItemList = list() + return + + def GetLength(self): + length = 0 + length += self.Head.GetLength() + length += 1 + for i in range(self.Cnt): + length += self.ItemList[i].GetLength() + + return length + + def GetBuffer(self): + data = '' + data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer()) + data = CommFunc.WriteBYTE(data, self.Cnt) + for i in range(self.Cnt): + data = CommFunc.WriteString(data, self.ItemList[i].GetLength(), self.ItemList[i].GetBuffer()) + return data + + def OutputString(self): + DumpString = ''' + Head:%s, + Cnt:%d, + ItemList:%s + '''\ + %( + self.Head.OutputString(), + self.Cnt, + "..." + ) + return DumpString + + +m_NAtagMCZhuXianDecomposeResult=tagMCZhuXianDecomposeResult() +ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCZhuXianDecomposeResult.Head.Cmd,m_NAtagMCZhuXianDecomposeResult.Head.SubCmd))] = m_NAtagMCZhuXianDecomposeResult + + +#------------------------------------------------------ # AA 0C 登录奖励活动信息 #tagMCActLoginAwardInfo class tagMCActLoginAwardItem(Structure): diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py index cc6f62a..d416a88 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py @@ -199,6 +199,7 @@ # 记录开服活动宝石总等级 OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StoneLV, totalStoneLV) PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_StoneTotalLV, totalStoneLV) + PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, totalStoneLV, False, True) return #//A3 05 宝石摘取 #tagCMEquipStonePick diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py index c646e09..95334be 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py @@ -1285,6 +1285,11 @@ ("WORD", "UnLockEquipPlace", 0), ("DWORD", "NeedPower", 0), ), + + "ZhuXianEquipDecompose":( + ("BYTE", "ClassLV", 1), + ("dict", "DecomposeInfo", 0), + ), } @@ -3916,6 +3921,17 @@ def GetGradeAward(self): return self.GradeAward # 评级奖励 def GetUnLockEquipPlace(self): return self.UnLockEquipPlace # 解锁的装备位 def GetNeedPower(self): return self.NeedPower # 推荐战力 + +# 诛仙装备分解表 +class IPY_ZhuXianEquipDecompose(): + + def __init__(self): + self.ClassLV = 0 + self.DecomposeInfo = {} + return + + def GetClassLV(self): return self.ClassLV # 阶级 + def GetDecomposeInfo(self): return self.DecomposeInfo # {(产出物品ID,..):饼图,..} def Log(msg, playerID=0, par=0): @@ -4183,6 +4199,8 @@ self.ipyZhuXianBossLen = len(self.ipyZhuXianBossCache) self.ipyZhuXianTowerCache = self.__LoadFileData("ZhuXianTower", IPY_ZhuXianTower) self.ipyZhuXianTowerLen = len(self.ipyZhuXianTowerCache) + self.ipyZhuXianEquipDecomposeCache = self.__LoadFileData("ZhuXianEquipDecompose", IPY_ZhuXianEquipDecompose) + self.ipyZhuXianEquipDecomposeLen = len(self.ipyZhuXianEquipDecomposeCache) Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict)) Log("IPY_DataMgr InitOK!") return @@ -4591,6 +4609,8 @@ def GetZhuXianBossByIndex(self, index): return self.ipyZhuXianBossCache[index] def GetZhuXianTowerCount(self): return self.ipyZhuXianTowerLen def GetZhuXianTowerByIndex(self, index): return self.ipyZhuXianTowerCache[index] + def GetZhuXianEquipDecomposeCount(self): return self.ipyZhuXianEquipDecomposeLen + def GetZhuXianEquipDecomposeByIndex(self, index): return self.ipyZhuXianEquipDecomposeCache[index] IPYData = IPY_DataMgr() def IPY_Data(): return IPYData diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py index 6592e7e..92d5fd1 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py @@ -20,29 +20,39 @@ import ShareDefine import PlayerControl import DataRecordPack +import IPY_GameWorld +import ItemControler import IpyGameDataPY +import NetPackCommon +import ChPyNetSendPack import SkillCommon import PyGameData import ChConfig + +import random + def GetZhuXianEquipIndexByPlace(equipPlace): ## 获取诛仙装备位对应的索引 return equipPlace - 1 - 120 + def GetZhuXianEquipPlaceByIndex(equipIndex): ## 获取诛仙装备索引对应装备位 return equipIndex + 1 + 120 + def GetZhuXianEquipPlaceIndexIsUnlock(curPlayer, equipPlaceIndex): ## 获取诛仙装备位是否解锁 # @param equipPlaceIndex: 注意传入的参数是装备位索引 equipPlace = GetZhuXianEquipPlaceByIndex(equipPlaceIndex) - placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {}) # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁 + placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {}) # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁 if str(equipPlace) not in placeUnlockDict: return True needTowerLV = placeUnlockDict[str(equipPlace)] - curTowerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ZhuXianTowerPassLV) # 已过关的诛仙塔层数 + curTowerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ZhuXianTowerPassLV) # 已过关的诛仙塔层数 return curTowerLV >= needTowerLV + def CheckLearnZhuXianSkill(curPlayer, skillID): ## 检查诛仙装备位装备阶数 @@ -68,6 +78,7 @@ return return True + #// A3 30 装备诛仙装备 #tagCMEquipZhuXianItem # @@ -127,6 +138,7 @@ RefreshZhuXianAttr(curPlayer) return + #// A3 31 卸下诛仙装备 #tagCMUnEquipZhuXianItem # #struct tagCMUnEquipZhuXianItem @@ -157,10 +169,12 @@ RefreshZhuXianAttr(curPlayer) return + def RefreshZhuXianAttr(curPlayer): CalcZhuXianAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return + def CalcZhuXianAttr(curPlayer): ## 刷新诛仙属性 @@ -170,14 +184,14 @@ allAttrList = [{} for _ in range(4)] allAttrListZXSuit = [{} for _ in range(4)] - equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力 - equipPlaceClassLVDict = {} #装备位对应装备阶 {装备位:阶, ...} - equipPlaceBaseAttrDict = {} #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...} + equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力 + equipPlaceClassLVDict = {} #装备位对应装备阶 {装备位:阶, ...} + equipPlaceBaseAttrDict = {} #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...} - attrIDSkillPlusDict = IpyGameDataPY.GetFuncEvalCfg("SkillPlusAttrID", 1, {}) # 属性ID对应影响的技能TypeID列表 {属性ID:[技能TypeID列表, ...], ...} + attrIDSkillPlusDict = IpyGameDataPY.GetFuncEvalCfg("SkillPlusAttrID", 1, {}) # 属性ID对应影响的技能TypeID列表 {属性ID:[技能TypeID列表, ...], ...} addAttrIDList = range(ShareDefine.Def_Effect_SkillAddPer1, ShareDefine.Def_Effect_SkillAddPer7 + 1) reduceAttrIDList = range(ShareDefine.Def_Effect_SkillReducePer1, ShareDefine.Def_Effect_SkillReducePer7 + 1) - zxSkillPlusAttrDict = {} # 玩家诛仙装备影响技能TypeID属性字典 {属性ID:值, ...} + zxSkillPlusAttrDict = {} # 玩家诛仙装备影响技能TypeID属性字典 {属性ID:值, ...} zhuXianEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip) equipPackCount = zhuXianEquipPack.GetCount() @@ -309,6 +323,7 @@ curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx) return + def GetZhuXianEquipSkillAddPer(playerID, skillTypeID): ## 获取诛仙装备伤害百分比提升值 if playerID not in PyGameData.g_zhuXianSkillAddPerDict: @@ -317,6 +332,7 @@ if skillTypeID not in skillAddPerDict: return 0 return skillAddPerDict[skillTypeID] + def GetZhuXianEquipSkillReducePer(playerID, skillTypeID): ## 获取诛仙装备减伤百分比提升值 @@ -327,3 +343,84 @@ return 0 return skillReducePerDict[skillTypeID] + +#// A3 32 诛仙装备分解 #tagCMZhuXianEquipDecompose +# +#struct tagCMZhuXianEquipDecompose +#{ +# tagHead Head; +# BYTE Count; //材料所在背包索引的数量 +# WORD IndexList[Count]; //材料所在背包索引列表 +# DWORD ItemIDList[Count]; //材料所在背包物品ID列表 +# BYTE IsAuto; //是否自动分解 +#}; +## 诛仙装备分解 +# @param playerIndex 玩家索引 +# @param clientData 客户端封包 +# @param tick 时间 +# @return None +def OnZhuXianEquipDecompose(index, clientData, tick): + curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) + if not clientData.Count: + return + playerID = curPlayer.GetID() + eatIndexList = clientData.IndexList + eatItemIDList = clientData.ItemIDList + isAuto = clientData.IsAuto + giveItemDict = {} #分解得到物品 + + itemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem) + for i, index in enumerate(eatIndexList): + eatItem = itemPack.GetAt(index) + if not eatItem or eatItem.IsEmpty(): + continue + eatItemID = eatItem.GetItemTypeID() + if eatItemID != eatItemIDList[i]: + GameWorld.Log('诛仙装备分解 发的物品ID不对应index=%s eatItemID=%s,ItemIDList[i]=%s' % (index, eatItemID, eatItemIDList[i]), playerID) + continue + if eatItem.GetType() not in ChConfig.Def_ZhuXianEquiipType: + GameWorld.Log('诛仙装备分解 发的物品不是诛仙装备 eatItemID=%s' % eatItemID, playerID) + continue + + itemClassLV = ItemCommon.GetItemClassLV(eatItem) + ipyData = IpyGameDataPY.GetIpyGameData('ZhuXianEquipDecompose', itemClassLV) + if not ipyData: + GameWorld.DebugLog('ZhuXianEquipDecompose 未配置该阶级分解itemClassLV=%s' % itemClassLV, playerID) + continue + decomposeInfoDict = ipyData.GetDecomposeInfo() + getItemDict = {} + for itemIDList, rateList in decomposeInfoDict.items(): + giveitemCnt = GameWorld.GetResultByRandomList(rateList, 0) + if not giveitemCnt: + continue + if isinstance(itemIDList, tuple): + itemID = random.choice(itemIDList) + else: + itemID = itemIDList + giveItemDict[itemID] = giveItemDict.get(itemID, 0) + giveitemCnt + getItemDict[itemID] = getItemDict.get(itemID, 0) + giveitemCnt + saveDataDict = {'getItemDict':getItemDict, 'isAuto':isAuto} + ItemCommon.DelItem(curPlayer, eatItem, 1, True, ChConfig.ItemDel_ZhuXianDecompose, saveDataDict) + if giveItemDict: + needSpace = len(giveItemDict) + packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, needSpace) + if packSpace < needSpace: + prizeItemList = [[giveItemID, itemCnt, 1] for giveItemID, itemCnt in giveItemDict.items()] + PlayerControl.SendMailByKey("DefaultLackSpace", [curPlayer.GetPlayerID()], prizeItemList) + else: + for giveItemID, itemCnt in giveItemDict.items(): + ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, True, [IPY_GameWorld.rptItem], True) + + #通知结果 + packData = ChPyNetSendPack.tagMCZhuXianDecomposeResult() + packData.Clear() + packData.ItemList = [] + for itemID, itemCnt in giveItemDict.items(): + itemInfo = ChPyNetSendPack.tagMCZhuXianDecomposeItem() + itemInfo.ItemID = itemID + itemInfo.ItemCnt = itemCnt + itemInfo.IsBind = 1 + packData.ItemList.append(itemInfo) + packData.Cnt = len(packData.ItemList) + NetPackCommon.SendFakePack(curPlayer, packData) + return -- Gitblit v1.8.0