6307 【后端】【2.0】多套装备开发单(穿脱、升星)
28个文件已修改
1 文件已重命名
2个文件已添加
| | |
| | | {
|
| | | list LVRange; //等级范围
|
| | | DWORD GoodsID; //商城表ID
|
| | | };
|
| | |
|
| | | //装备位背包索引映射表
|
| | |
|
| | | struct tagEquipPlaceIndexMap
|
| | | {
|
| | | DWORD GridIndex; //背包格子索引
|
| | | DWORD _ClassLV; //阶级(物品表LV字段)
|
| | | DWORD _EquipPlace; //装备位(物品表EquipPlace字段)
|
| | | };
|
| | |
|
| | | //装备升星表
|
| | |
|
| | | struct tagEquipStarUp
|
| | | {
|
| | | BYTE _ClassLV; //阶级
|
| | | BYTE _EquipPlace; //装备位
|
| | | BYTE _Star; //星数
|
| | | list CostEquipPlace; //可用装备部位
|
| | | list CostEquipColor; //可用装备品质
|
| | | BYTE CostEquipCnt; //装备数量
|
| | | BYTE SuitTotalRate; //全套装加成概率(非套50%)
|
| | | dict CostItemDict; //特殊材料
|
| | | dict StarAttrInfo; //星级属性
|
| | | dict BaseAttrInfo; //基础属性增加
|
| | | }; |
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C5 装备部位升星 #tagCMEquipPartStarUp
|
| | |
|
| | | class tagCMEquipPartStarUp(Structure):
|
| | | Head = tagHead()
|
| | | EquipPackIndex = 0 #(WORD EquipPackIndex)// 部位格子索引
|
| | | CostEquipCnt = 0 #(BYTE CostEquipCnt)// 装备个数
|
| | | CostEquipIndex = list() #(vector<WORD> CostEquipIndex)// 装备索引
|
| | | CostEquipID = list() #(vector<DWORD> CostEquipID)// 装备物品ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC5
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EquipPackIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.CostEquipCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CostEquipCnt):
|
| | | value,_pos=CommFunc.ReadWORD(_lpData,_pos)
|
| | | self.CostEquipIndex.append(value)
|
| | | for i in range(self.CostEquipCnt):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.CostEquipID.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC5
|
| | | self.EquipPackIndex = 0
|
| | | self.CostEquipCnt = 0
|
| | | self.CostEquipIndex = list()
|
| | | self.CostEquipID = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | length += 1
|
| | | length += 2 * self.CostEquipCnt
|
| | | length += 4 * self.CostEquipCnt
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.EquipPackIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.CostEquipCnt)
|
| | | for i in range(self.CostEquipCnt):
|
| | | data = CommFunc.WriteWORD(data, self.CostEquipIndex[i])
|
| | | for i in range(self.CostEquipCnt):
|
| | | data = CommFunc.WriteDWORD(data, self.CostEquipID[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipPackIndex:%d,
|
| | | CostEquipCnt:%d,
|
| | | CostEquipIndex:%s,
|
| | | CostEquipID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EquipPackIndex,
|
| | | self.CostEquipCnt,
|
| | | "...",
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMEquipPartStarUp=tagCMEquipPartStarUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartStarUp.Head.Cmd,m_NAtagCMEquipPartStarUp.Head.SubCmd))] = m_NAtagCMEquipPartStarUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP
|
| | |
|
| | | class tagCMExchangeMasterEXP(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
|
| | |
|
| | | class tagMCEquipPartStar(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("EquipPackIndex", c_ushort), |
| | | ("Star", 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.EquipPackIndex = 0
|
| | | self.Star = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCEquipPartStar)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 B1 装备部位星数信息 //tagMCEquipPartStarInfo:
|
| | | EquipPackIndex:%d,
|
| | | Star:%d
|
| | | '''\
|
| | | %(
|
| | | self.EquipPackIndex,
|
| | | self.Star
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCEquipPartStarInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)// 信息个数
|
| | | InfoList = list() #(vector<tagMCEquipPartStar> InfoList)// 信息列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xB1
|
| | | 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):
|
| | | temInfoList = tagMCEquipPartStar()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xB1
|
| | | self.Count = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | 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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 09 通知玩家部位套装等级 #tagMCEquipPartSuiteLVInfo
|
| | |
|
| | | class tagMCEquipPartSuiteLV(Structure):
|
| | |
| | | Def_mitProduceResult, # 生产采集结果回应
|
| | | Def_mitPetEquipMerge, # 宠物装备合成回应
|
| | | Def_mitEquipInherit, # 装备继承
|
| | | Def_mitEquipPlus, # 装备加强
|
| | | Def_mitEquipStarUp, # 装备升星
|
| | | Def_mitEquipMayaPlus, # 装备玛雅加强
|
| | | Def_mitEquipAddAttr, # 装备追加
|
| | | Def_mitEquipSlotting, # 装备打孔
|
| | |
| | | # 手游不使用C++定义 enum RoleEquipType
|
| | | # 装备位定义
|
| | | RoleEquipType = (
|
| | | retWeapon, #1 主手
|
| | | retWeapon2, #2 副手
|
| | | retHat, #3 帽子
|
| | | retClothes, #4 衣服
|
| | | retBelt, #5 腰带
|
| | | retTrousers, #6 裤子
|
| | | retShoes, #7 鞋子
|
| | | retNeck, #8 项链
|
| | | retFairyCan, #9 仙器
|
| | | retFairyCan2, #10 仙器
|
| | | retWing, #11 翅膀
|
| | | retGuard, #12 守护
|
| | | retBaldric1, #13 佩饰
|
| | | retBaldric2, #14 佩饰
|
| | | retBaldric3, #15 佩饰
|
| | | retBaldric4, #16 佩饰
|
| | | retBaldric5, #17 佩饰
|
| | | retBaldric6, #18 佩饰
|
| | | retHorse, #19 坐骑
|
| | | retWeaponSkin, #20 时装武器
|
| | | retClothesSkin, #21 时装衣服
|
| | | retWeapon2Skin, #22 时装副手
|
| | | retWeapon, #1 主手
|
| | | retWeapon2, #2 副手
|
| | | retHat, #3 帽子
|
| | | retClothes, #4 衣服
|
| | | retBelt, #5 腰带
|
| | | retTrousers, #6 裤子
|
| | | retShoes, #7 鞋子
|
| | | retGlove, #8 手套
|
| | | retNeck, #9 项链
|
| | | retFairyCan, #10 仙器1
|
| | | retFairyCan2, #11 仙器2
|
| | | retJade, #12 玉佩
|
| | | retWing, #13 翅膀
|
| | | retGuard1, #14 守护1
|
| | | retGuard2, #15 守护2
|
| | | retPeerlessWeapon, #16 绝世武器
|
| | | retPeerlessWeapon2, #17 绝世副手
|
| | | retXXX18, #18 暂无
|
| | | retHorse, #19 坐骑
|
| | | retWeaponSkin, #20 时装武器
|
| | | retClothesSkin, #21 时装衣服
|
| | | retWeapon2Skin, #22 时装副手
|
| | | retMax,
|
| | | ) = range(1, 24)
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | # 神兽装备位定义
|
| | | DogzEquipPlace = (
|
| | | dogzetHorn, # 神兽兽角
|
| | |
| | |
|
| | | PacketCMD_1=0xAA
|
| | | PacketSubCMD_1=0x08
|
| | | PacketCallFunc_1=OnStartLuckyTreasure |
| | | PacketCallFunc_1=OnStartLuckyTreasure
|
| | |
|
| | | ;公共部位星数
|
| | | [Operate_EquipStar]
|
| | | ScriptName = Event\EventSrc\Operate_EquipStar.py
|
| | | Writer = xdh
|
| | | Releaser = xdh
|
| | | RegType = 0
|
| | | RegisterPackCount = 1
|
| | |
|
| | | PacketCMD_1=0xA5
|
| | | PacketSubCMD_1=0xC5
|
| | | PacketCallFunc_1=OnEquipPartStarUp |
| | |
| | | Def_ItemType_retBelt = 105 #5 腰带
|
| | | Def_ItemType_retTrousers = 106 #6 裤子
|
| | | Def_ItemType_retShoes = 107 #7 鞋子
|
| | | Def_ItemType_retNeck = 108 #8 项链
|
| | | Def_ItemType_retFairyCan = 109 #9 仙器
|
| | | Def_ItemType_retFairyCan2 = 110 #10 仙器
|
| | | Def_ItemType_retWing = 111 #11 翅膀
|
| | | Def_ItemType_retGuard = 112 #12 守护
|
| | | Def_ItemType_retBaldric1 = 113 #13 佩饰
|
| | | Def_ItemType_retBaldric2 = 114 #14 佩饰
|
| | | Def_ItemType_retBaldric3 = 115 #15 佩饰
|
| | | Def_ItemType_retBaldric4 = 116 #16 佩饰
|
| | | Def_ItemType_retBaldric5 = 117 #17 佩饰
|
| | | Def_ItemType_retBaldric6 = 118 #18 佩饰
|
| | | Def_ItemType_retGlove = 108 #8 手套
|
| | | Def_ItemType_retNeck = 109 #9 项链
|
| | | Def_ItemType_retFairyCan = 110 #10 仙器1
|
| | | Def_ItemType_retFairyCan2 = 111 #11 仙器2
|
| | | Def_ItemType_retJade = 112 #12 玉佩
|
| | | Def_ItemType_retWing = 113 #13 翅膀
|
| | | Def_ItemType_retGuard1 = 114 #14 守护1
|
| | | Def_ItemType_retGuard2 = 115 #15 守护2
|
| | | Def_ItemType_retPeerlessWeapon = 116 #16 绝世武器
|
| | | Def_ItemType_retPeerlessWeapon2 = 117 #17 绝世副手
|
| | |
|
| | | Def_ItemType_DogzEquipHorn = 119 # 神兽兽角
|
| | | Def_ItemType_DogzEquipEye = 120 # 神兽魔眼
|
| | |
| | | ShareDefine.retTrousers:[Def_ItemType_retTrousers],
|
| | | ShareDefine.retShoes:[Def_ItemType_retShoes],
|
| | | ShareDefine.retNeck:[Def_ItemType_retNeck],
|
| | | ShareDefine.retFairyCan:[Def_ItemType_retFairyCan, Def_ItemType_retFairyCan2],
|
| | | ShareDefine.retFairyCan2:[Def_ItemType_retFairyCan, Def_ItemType_retFairyCan2],
|
| | | ShareDefine.retFairyCan:[Def_ItemType_retFairyCan],
|
| | | ShareDefine.retFairyCan2:[Def_ItemType_retFairyCan2],
|
| | | ShareDefine.retWing:[Def_ItemType_retWing],
|
| | | ShareDefine.retGuard:[Def_ItemType_retGuard],
|
| | | ShareDefine.retBaldric1:[Def_ItemType_retBaldric1],
|
| | | ShareDefine.retBaldric2:[Def_ItemType_retBaldric2],
|
| | | ShareDefine.retBaldric3:[Def_ItemType_retBaldric3],
|
| | | ShareDefine.retBaldric4:[Def_ItemType_retBaldric4],
|
| | | ShareDefine.retBaldric5:[Def_ItemType_retBaldric5],
|
| | | ShareDefine.retBaldric6:[Def_ItemType_retBaldric6],
|
| | | ShareDefine.retGuard1:[Def_ItemType_retGuard1],
|
| | | ShareDefine.retGuard2:[Def_ItemType_retGuard2],
|
| | | }
|
| | | #---------------------------------------------------------------------
|
| | | #写死的物品效果ID都放这边------请按数值顺序存放
|
| | |
| | | ShareDefine.retBelt, #5 腰带
|
| | | ShareDefine.retTrousers, #6 裤子
|
| | | ShareDefine.retShoes, #7 鞋子
|
| | | ShareDefine.retNeck, #8 项链
|
| | | ShareDefine.retFairyCan, #9 仙器
|
| | | ShareDefine.retFairyCan2, #10 仙器
|
| | | ShareDefine.retGlove, #8 手套
|
| | | ShareDefine.retNeck, #9 项链
|
| | | ShareDefine.retFairyCan, #10 仙器1
|
| | | ShareDefine.retFairyCan2, #11 仙器2
|
| | | ShareDefine.retJade, #12 玉佩
|
| | | ],
|
| | |
|
| | | }
|
| | |
| | | ]
|
| | |
|
| | | # 需要广播外观的装备部位
|
| | | Def_SyncEquipStateByIndex = [
|
| | | |
| | | Def_SyncEquipStateByIndex = [ |
| | | ShareDefine.retWeapon, #1 主手
|
| | | ShareDefine.retWeapon2, #2 副手
|
| | | ShareDefine.retHat, #3 帽子
|
| | |
| | | ShareDefine.retBelt, #5 腰带
|
| | | ShareDefine.retTrousers, #6 裤子
|
| | | ShareDefine.retShoes, #7 鞋子
|
| | | ShareDefine.retNeck, #8 项链
|
| | | ShareDefine.retFairyCan, #9 仙器
|
| | | ShareDefine.retFairyCan2, #10 仙器
|
| | | ShareDefine.retGlove, #8 手套
|
| | | ShareDefine.retWing, #11 翅膀
|
| | | ShareDefine.retGuard, #12 守护
|
| | | ShareDefine.retGuard1, #14 守护1
|
| | | ShareDefine.retGuard2, #15 守护2
|
| | | ShareDefine.retHorse, #19 坐骑
|
| | | ]
|
| | |
|
| | | #套装装备部位列表
|
| | | Def_SuitEquipPlaceList = [
|
| | | ShareDefine.retWeapon, #1 主手
|
| | | ShareDefine.retWeapon2, #2 副手
|
| | | ShareDefine.retHat, #3 帽子
|
| | | ShareDefine.retClothes, #4 衣服
|
| | | ShareDefine.retBelt, #5 腰带
|
| | | ShareDefine.retTrousers, #6 裤子
|
| | | ShareDefine.retShoes, #7 鞋子
|
| | | ShareDefine.retGlove, #8 手套
|
| | | ]
|
| | | #---------------------------------------------------------------------
|
| | | #特殊物品光环,永久存在
|
| | | Def_SuperBuffList = [
|
| | |
| | | Def_PDict_RunTaskNextMissionID = "RunTaskNextMissionID_%s" # 跑环本轮结束下个任务ID 参数任务类型
|
| | | # 宝石
|
| | |
|
| | | Def_PDict_EquipPartStarLV = "EPStarLV_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
|
| | | Def_PDict_EquipPartPlusLV = "EPPlusLV_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
|
| | | Def_PDict_EquipActiveStarLV = "EquipActiveStarLV" #装备已激活总强化等级
|
| | | Def_PDict_EquipPartProficiency = "EPProf_%s_%s" # 装备部位对应公共强化星级,参数为(packType, index)
|
| | | Def_PDict_EquipActiveStars = "EquipActiveStars" #装备已激活总强化星级
|
| | |
| | | #神兽
|
| | | Def_PDict_DogzFightState = "DogzFightState_%s" # 神兽助战状态,参数为key编号,按神兽ID二进制位存储
|
| | | Def_PDict_DogzBuyHelpbattleCount = "DogzBuyHelpbattleCount" # 额外购买的神兽助战位
|
| | |
|
| | | #装备部位星数
|
| | | Def_PDict_EquipPartStar = "EQPartStar_%s" #装备部位星数 参数 装备背包格子索引
|
| | |
|
| | |
|
| | | #-------------------------------------------------------------------------------
|
| | | #可以从07 41封包购买的背包类型,和对应字典{背包类型:[字典key, 默认格子数]}
|
| | |
| | | ItemDel_GatherSoul, # 聚魂分解
|
| | | ItemDel_CoatDecompose, # 时装分解
|
| | | ItemDel_ZhuXianDecompose, # 诛仙装备分解
|
| | | ) = range(2000, 2000 + 38)
|
| | | ItemDel_EquipStarUp, # 装备升星
|
| | | ) = range(2000, 2000 + 39)
|
| | |
|
| | | # 物品扣除类型对应信息 {类型:eventName, ...}
|
| | | ItemDelTypeDict = {
|
| | |
| | | ItemDel_GatherSoul:"GatherSoul",
|
| | | ItemDel_CoatDecompose:"CoatDecompose",
|
| | | ItemDel_ZhuXianDecompose:"ZhuXianDecompose",
|
| | | ItemDel_EquipStarUp:"EquipStarUp",
|
| | | }
|
| | |
|
| | | ##==================================================================================================
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 C5 装备部位升星 #tagCMEquipPartStarUp
|
| | |
|
| | | class tagCMEquipPartStarUp(Structure):
|
| | | Head = tagHead()
|
| | | EquipPackIndex = 0 #(WORD EquipPackIndex)// 部位格子索引
|
| | | CostEquipCnt = 0 #(BYTE CostEquipCnt)// 装备个数
|
| | | CostEquipIndex = list() #(vector<WORD> CostEquipIndex)// 装备索引
|
| | | CostEquipID = list() #(vector<DWORD> CostEquipID)// 装备物品ID
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC5
|
| | | return
|
| | |
|
| | | def ReadData(self, _lpData, _pos=0, _Len=0):
|
| | | self.Clear()
|
| | | _pos = self.Head.ReadData(_lpData, _pos)
|
| | | self.EquipPackIndex,_pos = CommFunc.ReadWORD(_lpData, _pos)
|
| | | self.CostEquipCnt,_pos = CommFunc.ReadBYTE(_lpData, _pos)
|
| | | for i in range(self.CostEquipCnt):
|
| | | value,_pos=CommFunc.ReadWORD(_lpData,_pos)
|
| | | self.CostEquipIndex.append(value)
|
| | | for i in range(self.CostEquipCnt):
|
| | | value,_pos=CommFunc.ReadDWORD(_lpData,_pos)
|
| | | self.CostEquipID.append(value)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA5
|
| | | self.Head.SubCmd = 0xC5
|
| | | self.EquipPackIndex = 0
|
| | | self.CostEquipCnt = 0
|
| | | self.CostEquipIndex = list()
|
| | | self.CostEquipID = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 2
|
| | | length += 1
|
| | | length += 2 * self.CostEquipCnt
|
| | | length += 4 * self.CostEquipCnt
|
| | |
|
| | | return length
|
| | |
|
| | | def GetBuffer(self):
|
| | | data = ''
|
| | | data = CommFunc.WriteString(data, self.Head.GetLength(), self.Head.GetBuffer())
|
| | | data = CommFunc.WriteWORD(data, self.EquipPackIndex)
|
| | | data = CommFunc.WriteBYTE(data, self.CostEquipCnt)
|
| | | for i in range(self.CostEquipCnt):
|
| | | data = CommFunc.WriteWORD(data, self.CostEquipIndex[i])
|
| | | for i in range(self.CostEquipCnt):
|
| | | data = CommFunc.WriteDWORD(data, self.CostEquipID[i])
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | EquipPackIndex:%d,
|
| | | CostEquipCnt:%d,
|
| | | CostEquipIndex:%s,
|
| | | CostEquipID:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.EquipPackIndex,
|
| | | self.CostEquipCnt,
|
| | | "...",
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagCMEquipPartStarUp=tagCMEquipPartStarUp()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagCMEquipPartStarUp.Head.Cmd,m_NAtagCMEquipPartStarUp.Head.SubCmd))] = m_NAtagCMEquipPartStarUp
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A5 48 兑换大师等级经验 #tagCMExchangeMasterEXP
|
| | |
|
| | | class tagCMExchangeMasterEXP(Structure):
|
| | |
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 B1 装备部位星数信息 #tagMCEquipPartStarInfo
|
| | |
|
| | | class tagMCEquipPartStar(Structure):
|
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("EquipPackIndex", c_ushort), |
| | | ("Star", 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.EquipPackIndex = 0
|
| | | self.Star = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | return sizeof(tagMCEquipPartStar)
|
| | |
|
| | | def GetBuffer(self):
|
| | | return string_at(addressof(self), self.GetLength())
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''// A3 B1 装备部位星数信息 //tagMCEquipPartStarInfo:
|
| | | EquipPackIndex:%d,
|
| | | Star:%d
|
| | | '''\
|
| | | %(
|
| | | self.EquipPackIndex,
|
| | | self.Star
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | class tagMCEquipPartStarInfo(Structure):
|
| | | Head = tagHead()
|
| | | Count = 0 #(BYTE Count)// 信息个数
|
| | | InfoList = list() #(vector<tagMCEquipPartStar> InfoList)// 信息列表
|
| | | data = None
|
| | |
|
| | | def __init__(self):
|
| | | self.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xB1
|
| | | 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):
|
| | | temInfoList = tagMCEquipPartStar()
|
| | | _pos = temInfoList.ReadData(_lpData, _pos)
|
| | | self.InfoList.append(temInfoList)
|
| | | return _pos
|
| | |
|
| | | def Clear(self):
|
| | | self.Head = tagHead()
|
| | | self.Head.Clear()
|
| | | self.Head.Cmd = 0xA3
|
| | | self.Head.SubCmd = 0xB1
|
| | | self.Count = 0
|
| | | self.InfoList = list()
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | | length = 0
|
| | | length += self.Head.GetLength()
|
| | | length += 1
|
| | | for i in range(self.Count):
|
| | | length += self.InfoList[i].GetLength()
|
| | |
|
| | | 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.WriteString(data, self.InfoList[i].GetLength(), self.InfoList[i].GetBuffer())
|
| | | return data
|
| | |
|
| | | def OutputString(self):
|
| | | DumpString = '''
|
| | | Head:%s,
|
| | | Count:%d,
|
| | | InfoList:%s
|
| | | '''\
|
| | | %(
|
| | | self.Head.OutputString(),
|
| | | self.Count,
|
| | | "..."
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
|
| | | m_NAtagMCEquipPartStarInfo=tagMCEquipPartStarInfo()
|
| | | ChNetPackDict[eval("0x%02x%02x"%(m_NAtagMCEquipPartStarInfo.Head.Cmd,m_NAtagMCEquipPartStarInfo.Head.SubCmd))] = m_NAtagMCEquipPartStarInfo
|
| | |
|
| | |
|
| | | #------------------------------------------------------
|
| | | # A3 09 通知玩家部位套装等级 #tagMCEquipPartSuiteLVInfo
|
| | |
|
| | | class tagMCEquipPartSuiteLV(Structure):
|
| | |
| | | RunQuestEvent(curPlayer, "trialexange", costItemID, Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | def EventRespons_EquipByPlace(curPlayer, equipplace):
|
| | | def EventRespons_EquipByPlace(curPlayer, itemClassLV, equipplace):
|
| | | #穿戴某部位装备(非时效)
|
| | | RunQuestEvent(curPlayer, "equipbyplace", equipplace, Def_RunQuestType_Normal)
|
| | | RunQuestEvent(curPlayer, "equipbyplace", '%s_%s'%(itemClassLV, equipplace), Def_RunQuestType_Normal)
|
| | | return
|
| | |
|
| | | def EventRespons_CompoundEquip(curPlayer, itemColor, itemQuality):
|
| | |
| | | #
|
| | | ##@package Event.EventSrc.Operate_EquipPlus
|
| | | #
|
| | | # @todo:部位星级公共模式强化
|
| | | # @todo:部位强化公共模式强化
|
| | | # @author hxp
|
| | | # @date 2015-12-15
|
| | | # @version 1.2
|
| | | #
|
| | | # 详细描述: 部位星级公共模式强化
|
| | | # 详细描述: 部位强化公共模式强化
|
| | | #
|
| | | # @change: "2016-06-30 21:30" hxp 强化达人开服活动
|
| | | # @change: "2016-10-08 18:00" hxp 自动购买物品价格统一取商城物品价格
|
| | |
| | | GameWorld.DebugLog("OnEquipMayaPlus() equip is empty")
|
| | | return
|
| | |
|
| | | maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)
|
| | | curPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
|
| | | maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
|
| | | curPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
|
| | | if curPartStarLV >= maxStarLV:
|
| | | GameWorld.Log("OnEquipMayaPlus:curPartStarLV(%s) >= maxStarLV(%s)" % (curPartStarLV, maxStarLV), playerID)
|
| | | return
|
| | |
| | | # 强化处理
|
| | | result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)
|
| | |
|
| | | updPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
|
| | | updPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
|
| | | #GameWorld.Log(" result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartStarLV, updPartStarLV), playerID)
|
| | | if result == ChConfig.Def_ComposeState_None:
|
| | | return
|
| | |
| | | #===========================================================================
|
| | |
|
| | |
|
| | | # 星级变更时处理
|
| | | # 强化变更时处理
|
| | | if curPartStarLV != updPartStarLV:
|
| | | DoLogic_OnEquipPartStarLVChange(curPlayer, packType)
|
| | | # 增加强化成就
|
| | |
| | | if findType == -1:
|
| | | return result
|
| | |
|
| | | curPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
|
| | | curPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartStarLV)
|
| | | if not ipyData:
|
| | | return
|
| | |
| | | curExp = curExp - totalExp
|
| | |
|
| | | ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)
|
| | | ChEquip.NotifyEquipPartStarLV(curPlayer, packType, index)
|
| | | ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, index)
|
| | | # 支付金币
|
| | | PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)
|
| | |
|
| | |
| | | # @param packType: 背包类型
|
| | | # @param curEquip: 当前装备
|
| | | # @param succeedRate: 成功率
|
| | | # @param failStarLV: 失败时的星级数
|
| | | # @param failStarLV: 失败时的强化数
|
| | | # @return
|
| | | def __EquipMayaPlusChange(curPlayer, packType, curEquip, index):
|
| | | curPlusLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, index)
|
| | | curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
|
| | | updPlusLV = curPlusLV + 1
|
| | | ChEquip.SetEquipPartStarLV(curPlayer, packType, index, curEquip, updPlusLV)
|
| | | ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, updPlusLV)
|
| | |
|
| | | broadCastLVList = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelBroadCast", 1)
|
| | | #GameWorld.DebugLog("PlusLVChange index=%s,updPlusLV=%s,broadCastLVList=%s" % (index, updPlusLV, broadCastLVList))
|
| | |
| | | # minPlusLV = GetMaxEquipPartStarLV()
|
| | | # equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
|
| | | # for i in equipPartIndexList:
|
| | | # partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)
|
| | | # partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
|
| | | # if partStarLV < minPlusLV:
|
| | | # minPlusLV = partStarLV
|
| | | # return minPlusLV
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Event.EventSrc.Operate_EquipStar
|
| | | #
|
| | | # @todo:公共部位星数
|
| | | # @author xdh
|
| | | # @date 2019-3-1
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 公共部位星数
|
| | | #
|
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | #"""Version = 2019-3-1 18:00"""
|
| | | #---------------------------------------------------------------------
|
| | | import ItemCommon
|
| | | import ShareDefine
|
| | | import PlayerControl
|
| | | import IPY_GameWorld
|
| | | import DataRecordPack
|
| | | import IpyGameDataPY
|
| | | import GameWorld
|
| | | import ChConfig
|
| | | import ChEquip
|
| | | #-------------------------------------------------------------------------------------------
|
| | |
|
| | |
|
| | | #===============================================================================
|
| | | #// A5 C5 装备部位升星 #tagCMEquipPartStarUp
|
| | | #struct tagCMEquipPartStarUp
|
| | | #{
|
| | | # tagHead Head;
|
| | | # WORD EquipPackIndex; // 部位格子索引
|
| | | # BYTE CostEquipCnt; // 装备个数
|
| | | # WORD CostEquipIndex[CostEquipCnt]; // 装备索引
|
| | | # DWORD CostEquipID[CostEquipCnt]; // 装备物品ID
|
| | | #};
|
| | | #===============================================================================
|
| | | ## 部位升星
|
| | | # @param playerIndex: 玩家
|
| | | # @param clientData: 封包
|
| | | # @param tick: 当前时间
|
| | | # @return None
|
| | | def OnEquipPartStarUp(playerIndex, clientData, tick): |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | |
| | | equipPackIndex = clientData.EquipPackIndex
|
| | | packType = IPY_GameWorld.rptEquip
|
| | | |
| | | if packType not in ChConfig.Pack_EquipPart_CanPlusStar:
|
| | | return
|
| | | ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackIndex})
|
| | | if not ipyData:
|
| | | return
|
| | | classLV = ipyData.GetClassLV()
|
| | | equipPlace = ipyData.GetEquipPlace()
|
| | | placeList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
|
| | | if equipPlace not in placeList:
|
| | | GameWorld.Log(" equipPlace %s not in ChConfig.Pack_EquipPart_CanPlusStar" % equipPlace, playerID)
|
| | | return
|
| | | |
| | | # 当前装备等级是否到达最高等级
|
| | | curPack = curPlayer.GetItemManager().GetPack(packType)
|
| | | curEquip = curPack.GetAt(equipPackIndex)
|
| | | if not curEquip or curEquip.IsEmpty():
|
| | | GameWorld.DebugLog("OnEquipPartStarUp() equip is empty")
|
| | | return
|
| | | |
| | | maxStar = ItemCommon.GetItemMaxStar(curEquip)
|
| | | curPartStar = ChEquip.GetEquipPartStar(curPlayer, equipPackIndex)
|
| | | if curPartStar >= maxStar:
|
| | | GameWorld.Log("OnEquipPartStarUp:curPartStar(%s) >= maxStar(%s)" % (curPartStar, maxStar), playerID)
|
| | | return
|
| | |
|
| | | # 升星处理
|
| | | result = DoLogic_EquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, clientData)
|
| | | |
| | | updPartStar = ChEquip.GetEquipPartStar(curPlayer, equipPackIndex)
|
| | | GameWorld.DebugLog(" 装备升星 equipPackIndex=%s result=%s,curPartStar=%s,updPartStar=%s" % (equipPackIndex, result, curPartStar, updPartStar), playerID)
|
| | | if result == ChConfig.Def_ComposeState_Sucess:
|
| | | # 星级变更时处理
|
| | | #刷新属性
|
| | | ChEquip.RefreshPlayerEquipAttribute(curPlayer, classLV)
|
| | | playControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playControl.RefreshPlayerAttrState()
|
| | | |
| | | if updPartStar in IpyGameDataPY.GetFuncEvalCfg('EquipPartStarNotify'):
|
| | | PlayerControl.WorldNotify(0, "StarLevelUp", [curPlayer.GetPlayerName(), curEquip.GetItemTypeID(), updPartStar])
|
| | | #EventShell.EventRespons_EquipPlus(curPlayer)
|
| | | return
|
| | | |
| | |
|
| | | ## 开始装备升星
|
| | | # @param index 为装备位
|
| | | # @return |
| | | def DoLogic_EquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, clientData):
|
| | | result = ChConfig.Def_ComposeState_None
|
| | | nextStar = curPartStar + 1
|
| | | ipyData = IpyGameDataPY.GetIpyGameData("EquipStarUp", classLV, equipPlace, nextStar)
|
| | | if not ipyData:
|
| | | return result
|
| | | |
| | | costEquipCnt = ipyData.GetCostEquipCnt()
|
| | | if clientData.CostEquipCnt < costEquipCnt:
|
| | | GameWorld.DebugLog(' 开始装备升星,装备材料不足 %s' % costEquipCnt)
|
| | | return result
|
| | | costEquipPlaceList = ipyData.GetCostEquipPlace()
|
| | | costEquipColorList = ipyData.GetCostEquipColor()
|
| | | suitTotalRate = ipyData.GetSuitTotalRate()
|
| | | singleSuitRate = float(suitTotalRate) / costEquipCnt
|
| | | curRate = 0 #成功概率
|
| | | delEquipIndexList = []
|
| | | itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | for i, index in enumerate(clientData.CostEquipIndex):
|
| | | costEquip = itemPack.GetAt(index)
|
| | | if not costEquip or costEquip.IsEmpty():
|
| | | return result
|
| | | equipID = costEquip.GetItemTypeID()
|
| | | if equipID != clientData.CostEquipID[i]:
|
| | | GameWorld.ErrLog(' 装备升星 客户端发的物品索引与实际物品ID不对应 index=%s,eatItemID=%s,wantEatItemID=%s' % (index, equipID, clientData.CostEquipID[i]))
|
| | | return result
|
| | | if costEquip.GetItemColor() not in costEquipColorList:
|
| | | return result
|
| | | if costEquip.GetEquipPlace() not in costEquipPlaceList:
|
| | | return result
|
| | | delEquipIndexList.append(index)
|
| | | isSuite = costEquip.GetSuiteID()
|
| | | addRate = singleSuitRate if isSuite else singleSuitRate / 2
|
| | | curRate += addRate
|
| | | if curRate <= 0:
|
| | | GameWorld.Log('装备升星异常 概率为0!!equipPackIndex=%s'%equipPackIndex)
|
| | | return result
|
| | | #判断普通物品材料
|
| | | costItemDict = ipyData.GetCostItemDict()
|
| | | if costItemDict:
|
| | | delItemDict = {}
|
| | | for itemID, itemCnt in costItemDict.items():
|
| | | hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, itemPack, itemCnt)
|
| | | if not hasEnough:
|
| | | return result
|
| | | delItemDict[tuple(indexList)] = itemCnt
|
| | | for itemIndexList, delCnt in delItemDict.items():
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_EquipStarUp)
|
| | | #扣装备
|
| | | ItemCommon.ReduceItem(curPlayer, itemPack, delEquipIndexList, len(delEquipIndexList), True, ChConfig.ItemDel_EquipStarUp)
|
| | | isOK = GameWorld.CanHappen(curRate, 100)
|
| | | if isOK:
|
| | | ChEquip.SetEquipPartStar(curPlayer, equipPackIndex, nextStar)
|
| | | ChEquip.NotifyEquipPartStar(curPlayer, equipPackIndex)
|
| | | result = ChConfig.Def_ComposeState_Sucess
|
| | | else:
|
| | | result = ChConfig.Def_ComposeState_Fail
|
| | | curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipStarUp, result)
|
| | | drDict = {"PlayerID":curPlayer.GetPlayerID(), "AccID":curPlayer.GetAccID(), "classLV":classLV, "equipPlace":equipPlace, "IsSuccess":isOK,
|
| | | "curRate":curRate, "nextStar":nextStar}
|
| | | DataRecordPack.SendEventPack("EquipStarUp", drDict, curPlayer)
|
| | | return result
|
| | |
|
| | |
| | | import ShareDefine
|
| | | import EquipZhuXian
|
| | |
|
| | |
|
| | | g_stoneCanPlaceList = [] #可镶嵌的位置
|
| | |
|
| | | def OnLogin(curPlayer):
|
| | | ###登录发包同步客户端宝石信息
|
| | |
| | |
|
| | | def GetAllStoneEquipIndexList():
|
| | | ###得到所有可镶嵌宝石装备位列表
|
| | | |
| | | global g_stoneCanPlaceList
|
| | | if g_stoneCanPlaceList:
|
| | | return g_stoneCanPlaceList
|
| | | #获得宝石类型数量
|
| | | GemTypeCount = IpyGameDataPY.GetFuncCfg("GemTypeCount")
|
| | | #获得所有可镶嵌宝石装备位
|
| | | stoneCanPlaceList = [] |
| | | g_stoneCanPlaceList = [] |
| | | for stoneTypeIndex in xrange(1, GemTypeCount + 1):
|
| | | #循环宝石类型对应的装备位
|
| | | placeList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
|
| | | for place in placeList:
|
| | | if place not in stoneCanPlaceList:
|
| | | stoneCanPlaceList.append(place)
|
| | | return stoneCanPlaceList
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'EquipPlace':place}, True)
|
| | | if not ipyDataList:
|
| | | continue
|
| | | for ipyData in ipyDataList:
|
| | | gridIndex = ipyData.GetGridIndex()
|
| | | if gridIndex not in g_stoneCanPlaceList:
|
| | | g_stoneCanPlaceList.append(gridIndex)
|
| | | return g_stoneCanPlaceList
|
| | |
|
| | | def GetAllEquipPlaceHoleIndex():
|
| | | ### 得到装备位所有孔位
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenClassLVList) # 最大装备阶级开放孔数
|
| | | gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenNeedStarList) # 最大装备阶级开放孔数
|
| | |
|
| | | gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1)
|
| | | maxHoleVipCnt = len(gemOpenVipList)# 最大Vip开放孔数
|
| | |
| | |
|
| | | def GetPackTypeByEquipPlace(equipPlace):
|
| | | ##目前支持镶嵌普通装备、诛仙装备
|
| | | if equipPlace in ShareDefine.ZhuXianEquipPlace:
|
| | | equipPackType = ShareDefine.rptZhuXianEquip
|
| | | stonePackType = ShareDefine.rptZhuXianItem
|
| | | placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
|
| | | else:
|
| | | equipPackType = IPY_GameWorld.rptEquip
|
| | | stonePackType = IPY_GameWorld.rptItem
|
| | | placeIndex = equipPlace
|
| | | # if equipPlace in ShareDefine.ZhuXianEquipPlace:
|
| | | # equipPackType = ShareDefine.rptZhuXianEquip
|
| | | # stonePackType = ShareDefine.rptZhuXianItem
|
| | | # placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
|
| | | # else:
|
| | | equipPackType = IPY_GameWorld.rptEquip
|
| | | stonePackType = IPY_GameWorld.rptItem
|
| | | placeIndex = equipPlace
|
| | | return equipPackType, stonePackType, placeIndex
|
| | |
|
| | | #//A3 04 宝石镶嵌或替换 #tagCMEquipEnchase
|
| | |
| | | % (stoneItemID, stoneEffType, stoneCanPlaceList, equipPlace), playerID)
|
| | | return
|
| | |
|
| | | equipClassLV = ItemCommon.GetItemClassLV(curEquip)
|
| | | if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
|
| | | equipStar = ChEquip.GetEquipPartStar(curEquip)
|
| | | if not __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
|
| | | return
|
| | |
|
| | | # 扣除宝石
|
| | |
| | | DoStoneSuccess(curPlayer)
|
| | | return
|
| | |
|
| | | def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
|
| | | def __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
|
| | | ##验证孔合法性
|
| | |
|
| | | holeIndexList = GetAllEquipPlaceHoleIndex()
|
| | |
| | | return False
|
| | |
|
| | | openCommHoleCnt = 0 # 已经开放装备常规孔数
|
| | | if equipPackType == ShareDefine.rptZhuXianEquip:
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 2)
|
| | | else:
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
|
| | | if equipClassLV >= openClassLV:
|
| | | |
| | | gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | for holeCnt, openStar in enumerate(gemOpenNeedStarList, 1):
|
| | | if equipStar >= openStar:
|
| | | openCommHoleCnt = holeCnt
|
| | |
|
| | | # VIP孔
|
| | | if holeIndex >= ChConfig.Def_Stone_VipHole:
|
| | |
|
| | | if openCommHoleCnt <= 0:
|
| | | GameWorld.Log("装备未开启任何普通宝石孔,无法开启VIP孔位! equipClassLV=%s,openCommHoleCnt=%s" % (equipClassLV, openCommHoleCnt))
|
| | | GameWorld.Log("装备未开启任何普通宝石孔,无法开启VIP孔位! equipStar=%s,openCommHoleCnt=%s" % (equipStar, openCommHoleCnt))
|
| | | return False
|
| | | gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1)
|
| | |
|
| | |
| | |
|
| | | # 常规孔
|
| | | elif holeIndex >= openCommHoleCnt:
|
| | | GameWorld.Log("该装备宝石孔为开放!equipClassLV=%s,holeIndex=%s,openCommHoleCnt=%s" |
| | | % (equipClassLV, holeIndex, openCommHoleCnt), curPlayer.GetPlayerID())
|
| | | GameWorld.Log("该装备宝石孔为开放!equipStar=%s,holeIndex=%s,openCommHoleCnt=%s" |
| | | % (equipStar, holeIndex, openCommHoleCnt), curPlayer.GetPlayerID())
|
| | | return False
|
| | |
|
| | | return True
|
| | |
| | | return
|
| | |
|
| | |
|
| | | def DoMoveEquipStone(curPlayer, equipPlace): |
| | | def DoMoveEquipStone(curPlayer, equipPackIndex): |
| | | ###替换装备时宝石转移
|
| | | equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
|
| | | equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex)
|
| | | equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
|
| | | curEquip = equipPack.GetAt(placeIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | return
|
| | |
|
| | | #获得装备阶级孔信息
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenClassLVList) # 最大装备阶级开放孔数
|
| | | #获得装备星级孔信息
|
| | | gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenNeedStarList) # 最大装备星级开放孔数
|
| | |
|
| | | openEquipHoleCnt = 0 # 已经开放孔数
|
| | | equipClassLV = ItemCommon.GetItemClassLV(curEquip)
|
| | | for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
|
| | | if equipClassLV >= openClassLV:
|
| | | partStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackIndex, curEquip)
|
| | | for holeCnt, openStar in enumerate(gemOpenNeedStarList, 1):
|
| | | if partStar >= openStar:
|
| | | openEquipHoleCnt = holeCnt
|
| | |
|
| | | #需要拆卸宝石的孔列表
|
| | |
| | | for holeIndex in xrange(maxEquipHoleCnt):
|
| | | if holeIndex < openEquipHoleCnt:
|
| | | continue
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0]
|
| | | if curGemID == 0:
|
| | | continue
|
| | | pickoffHoleList.append([equipPlace, holeIndex])
|
| | | pickoffHoleList.append([equipPackIndex, holeIndex])
|
| | |
|
| | | #没有开启普通装备孔,需摘除VIP孔
|
| | | if not openEquipHoleCnt:
|
| | |
| | | maxVipHoleCnt = len(gemOpenVipList)# 最大VIP开放孔数
|
| | | #判断VIP等级孔信息
|
| | | for holeIndex in xrange(ChConfig.Def_Stone_VipHole, ChConfig.Def_Stone_VipHole + maxVipHoleCnt):
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0]
|
| | | if curGemID == 0:
|
| | | continue
|
| | | pickoffHoleList.append([equipPlace, holeIndex])
|
| | | pickoffHoleList.append([equipPackIndex, holeIndex])
|
| | |
|
| | | # 脱装备的外层刷属性, 这里不刷
|
| | | __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, "EquipChange", False)
|
| | |
| | | totalPlusLV = 0
|
| | | for packType, equipPartIndexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
|
| | | for i in equipPartIndexList:
|
| | | partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, packType, i)
|
| | | partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, i)
|
| | | totalPlusLV += partStarLV
|
| | |
|
| | |
|
| | |
| | | # equipPartIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, [])
|
| | | # for i in equipPartIndexList:
|
| | | # #统计全身强化等级
|
| | | # partStarLV = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, i)
|
| | | # partStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
|
| | | # if partStarLV >= star:
|
| | | # partCnt +=1
|
| | | #GameWorld.Log('star=%s,conditionValue=%s,partCnt=%s,%s'%(star,conditionValue,partCnt,QuestRunnerValue.GetEval(conditionType, partCnt, conditionValue)))
|
| | |
| | | if equipIndex == 0:
|
| | | GameWorld.ErrLog("任务赠送装备位置错误 equipIndex=-1")
|
| | | return
|
| | | |
| | | if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipIndex):
|
| | | equipPackIndex = ItemCommon.GetEquipPackIndex(curSingleItem)
|
| | | if ItemCommon.CheckHasEquip(curPlayer, IPY_GameWorld.rptEquip, equipPackIndex):
|
| | | #物品已存在直接给背包
|
| | | if not itemControl.PutInItem(IPY_GameWorld.rptItem, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
|
| | | GameWorld.Log('###任务 = %s给予物品异常, %s, %s' % (missionID, itemID, itemCount), curPlayer.GetPlayerID())
|
| | | curSingleItem.Clear()
|
| | | return
|
| | | else:
|
| | | ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem, equipIndex, 0)
|
| | | ChEquip.DoPlayerEquipItem(curPlayer, curSingleItem,equipPackIndex, 0)
|
| | |
|
| | | #ObtainRes01 <n>获得</n><Info Type="Item" Name="Name" ID="{%S1%}"/><n>×</n><n>{%S2%}!</n>
|
| | | elif not itemControl.PutInItem(packIndex, curSingleItem, event=["AddEventItem", False, {'MissionID':missionID}]):
|
| | |
| | | # @return 返回值无意义
|
| | | # @remarks <Set_Equiptotalstar key="" />
|
| | | def DoType_Set_Equiptotalstar(curPlayer, curMission, curActionNode):
|
| | | key = curActionNode.GetAttribute("key")
|
| | | questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
|
| | | if questID != 0:
|
| | | curMission = curPlayer.FindMission(questID)
|
| | | curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
|
| | | # key = curActionNode.GetAttribute("key")
|
| | | # questID = GameWorld.ToIntDef(curActionNode.GetAttribute("id"), 0)
|
| | | # if questID != 0:
|
| | | # curMission = curPlayer.FindMission(questID)
|
| | | # curMission.SetProperty(key, ChEquip.GetTotalEquipStars(curPlayer))
|
| | | return
|
| | | #---------------------------------------------------------------------
|
| | | ##DoType_调度器
|
| | |
| | | # @return None <Equiptotalstar value="cnt"/>
|
| | | def ConditionType_Equiptotalstar(curPlayer, curMission, curActionNode):
|
| | | totalcnt = GameWorld.ToIntDef(curActionNode.GetAttribute("value"), 0)
|
| | | return ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
|
| | | return #ChEquip.GetTotalEquipStars(curPlayer) >= totalcnt
|
| | |
|
| | | ##激活法宝,确认与成就逻辑后使用
|
| | | # @param None
|
File was renamed from ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/SetEquipPartStarLV.py |
| | |
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package GM.Commands.SetEquipPartStarLV
|
| | | ##@package GM.Commands.SetEquipPartPlusLV
|
| | | #
|
| | | # @todo:设置装备部位公共星级
|
| | | # @todo:设置装备部位公共强化等级
|
| | | # @author hxp
|
| | | # @date 2015-12-15
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 设置装备部位公共星级
|
| | | # 详细描述: 设置装备部位公共强化等级
|
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | """Version = 2015-12-15 17:00"""
|
| | |
| | | for i in indexList:
|
| | | curPack = curPlayer.GetItemManager().GetPack(pType)
|
| | | curEquip = curPack.GetAt(i)
|
| | | ChEquip.SetEquipPartStarLV(curPlayer, pType, i, curEquip, setStarLV)
|
| | | ChEquip.SetEquipPartPlusLV(curPlayer, pType, i, curEquip, setStarLV)
|
| | | ChEquip.SetEquipPartProficiency(curPlayer, pType, i, 0)
|
| | | Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, pType)
|
| | | ChEquip.NotifyEquipPartStarLV(curPlayer)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置所有部位星级为: %s" % setStarLV)
|
| | | ChEquip.NotifyEquipPartPlusLV(curPlayer)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置所有部位强化等级为: %s" % setStarLV)
|
| | | return
|
| | |
|
| | | if len(cmdList) != 3:
|
| | |
| | | curPack = curPlayer.GetItemManager().GetPack(packType)
|
| | | curEquip = curPack.GetAt(index)
|
| | |
|
| | | maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)
|
| | | maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
|
| | | starLV = min(starLV, maxStarLV)
|
| | | ChEquip.SetEquipPartStarLV(curPlayer, packType, index, curEquip, starLV)
|
| | | ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, starLV)
|
| | | ChEquip.SetEquipPartProficiency(curPlayer, packType, index, 0)
|
| | | Operate_EquipPlus.DoLogic_OnEquipPartStarLVChange(curPlayer, packType)
|
| | | return
|
| | |
| | | #===============================================================================
|
| | |
|
| | | #===========================================================================
|
| | | # GameWorld.DebugAnswer(curPlayer, "SetEquipPartStarLV 参数[packType, index, starLV]")
|
| | | # GameWorld.DebugAnswer(curPlayer, "SetEquipPartPlusLV 参数[packType, index, starLV]")
|
| | | # for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
|
| | | # GameWorld.DebugAnswer(curPlayer, " packType=%s(%s)ʱ" % (pType, packTypeStrDict.get(pType, "")))
|
| | | # indexStr = "index="
|
| | |
| | | # indexStr += "%s(%s)," % (i, indexStrDict.get("%s_%s" % (pType, i), ""))
|
| | | # GameWorld.DebugAnswer(curPlayer, " %s" % indexStr)
|
| | | #
|
| | | # GameWorld.DebugAnswer(curPlayer, " SetEquipPartStarLV 星级 可重置所有部位为对应的星级")
|
| | | # GameWorld.DebugAnswer(curPlayer, " SetEquipPartPlusLV 强化等级 可重置所有部位为对应的强化等级")
|
| | | # GameWorld.DebugAnswer(curPlayer, "------------------------------")
|
| | | #===========================================================================
|
| | | return
|
New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package GM.Commands.SetEquipPartStar
|
| | | #
|
| | | # @todo:设置装备部位公共星数
|
| | | # @author xdh
|
| | | # @date 2019-3-2
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 设置装备部位公共星数
|
| | | #
|
| | | #---------------------------------------------------------------------
|
| | | import IpyGameDataPY
|
| | | """Version = 2019-3-2 17:00"""
|
| | | #---------------------------------------------------------------------
|
| | | import PlayerControl
|
| | | import ChEquip
|
| | | import GameWorld
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #逻辑实现
|
| | | ## GM命令执行入口
|
| | | # @param curPlayer 当前玩家
|
| | | # @param cmdList 参数列表 [classlv, equipPlace, starLV]
|
| | | # @return None
|
| | | # @remarks 函数详细说明.
|
| | | def OnExec(curPlayer, cmdList):
|
| | | if not cmdList:
|
| | | __GMHelpAnswer(curPlayer)
|
| | | return
|
| | | |
| | | if len(cmdList) != 3:
|
| | | return
|
| | | classlv, equipPlace, starLV = cmdList
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
|
| | | if not ipyData:
|
| | | __GMHelpAnswer(curPlayer)
|
| | | return
|
| | | equipPackIndex = ipyData.GetGridIndex()
|
| | | ChEquip.SetEquipPartStar(curPlayer, equipPackIndex, starLV)
|
| | | ChEquip.NotifyEquipPartStar(curPlayer, equipPackIndex)
|
| | | ChEquip.RefreshPlayerEquipAttribute(curPlayer, classlv)
|
| | | playControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playControl.RefreshPlayerAttrState()
|
| | | return
|
| | |
|
| | |
|
| | | def __GMHelpAnswer(curPlayer, errorMsg="参数列表 [classlv, equipPlace, starLV]"):
|
| | | if errorMsg:
|
| | | GameWorld.DebugAnswer(curPlayer, "%s" % errorMsg)
|
| | | |
| | | |
| | | return
|
| | |
| | | ("list", "LVRange", 0),
|
| | | ("DWORD", "GoodsID", 0),
|
| | | ),
|
| | |
|
| | | "EquipPlaceIndexMap":(
|
| | | ("DWORD", "GridIndex", 0),
|
| | | ("DWORD", "ClassLV", 1),
|
| | | ("DWORD", "EquipPlace", 1),
|
| | | ),
|
| | |
|
| | | "EquipStarUp":(
|
| | | ("BYTE", "ClassLV", 1),
|
| | | ("BYTE", "EquipPlace", 1),
|
| | | ("BYTE", "Star", 1),
|
| | | ("list", "CostEquipPlace", 0),
|
| | | ("list", "CostEquipColor", 0),
|
| | | ("BYTE", "CostEquipCnt", 0),
|
| | | ("BYTE", "SuitTotalRate", 0),
|
| | | ("dict", "CostItemDict", 0),
|
| | | ("dict", "StarAttrInfo", 0),
|
| | | ("dict", "BaseAttrInfo", 0),
|
| | | ),
|
| | | }
|
| | |
|
| | | |
| | |
| | | |
| | | def GetLVRange(self): return self.LVRange # 等级范围
|
| | | def GetGoodsID(self): return self.GoodsID # 商城表ID |
| | | |
| | | # 装备位背包索引映射表 |
| | | class IPY_EquipPlaceIndexMap(): |
| | | |
| | | def __init__(self): |
| | | self.GridIndex = 0
|
| | | self.ClassLV = 0
|
| | | self.EquipPlace = 0 |
| | | return |
| | | |
| | | def GetGridIndex(self): return self.GridIndex # 背包格子索引
|
| | | def GetClassLV(self): return self.ClassLV # 阶级(物品表LV字段)
|
| | | def GetEquipPlace(self): return self.EquipPlace # 装备位(物品表EquipPlace字段) |
| | | |
| | | # 装备升星表 |
| | | class IPY_EquipStarUp(): |
| | | |
| | | def __init__(self): |
| | | self.ClassLV = 0
|
| | | self.EquipPlace = 0
|
| | | self.Star = 0
|
| | | self.CostEquipPlace = []
|
| | | self.CostEquipColor = []
|
| | | self.CostEquipCnt = 0
|
| | | self.SuitTotalRate = 0
|
| | | self.CostItemDict = {}
|
| | | self.StarAttrInfo = {}
|
| | | self.BaseAttrInfo = {} |
| | | return |
| | | |
| | | def GetClassLV(self): return self.ClassLV # 阶级
|
| | | def GetEquipPlace(self): return self.EquipPlace # 装备位
|
| | | def GetStar(self): return self.Star # 星数
|
| | | def GetCostEquipPlace(self): return self.CostEquipPlace # 可用装备部位
|
| | | def GetCostEquipColor(self): return self.CostEquipColor # 可用装备品质
|
| | | def GetCostEquipCnt(self): return self.CostEquipCnt # 装备数量
|
| | | def GetSuitTotalRate(self): return self.SuitTotalRate # 全套装加成概率(非套50%)
|
| | | def GetCostItemDict(self): return self.CostItemDict # 特殊材料
|
| | | def GetStarAttrInfo(self): return self.StarAttrInfo # 星级属性
|
| | | def GetBaseAttrInfo(self): return self.BaseAttrInfo # 基础属性增加 |
| | |
|
| | |
|
| | | def Log(msg, playerID=0, par=0):
|
| | |
| | | self.ipyLuckyTreasureTemplateLen = len(self.ipyLuckyTreasureTemplateCache)
|
| | | self.ipyMysteryShopCache = self.__LoadFileData("MysteryShop", IPY_MysteryShop)
|
| | | self.ipyMysteryShopLen = len(self.ipyMysteryShopCache)
|
| | | self.ipyEquipPlaceIndexMapCache = self.__LoadFileData("EquipPlaceIndexMap", IPY_EquipPlaceIndexMap)
|
| | | self.ipyEquipPlaceIndexMapLen = len(self.ipyEquipPlaceIndexMapCache)
|
| | | self.ipyEquipStarUpCache = self.__LoadFileData("EquipStarUp", IPY_EquipStarUp)
|
| | | self.ipyEquipStarUpLen = len(self.ipyEquipStarUpCache)
|
| | | Log("IPY_FuncConfig count=%s" % len(self.ipyFuncConfigDict))
|
| | | Log("IPY_DataMgr InitOK!")
|
| | | return
|
| | |
| | | def GetLuckyTreasureTemplateByIndex(self, index): return self.ipyLuckyTreasureTemplateCache[index]
|
| | | def GetMysteryShopCount(self): return self.ipyMysteryShopLen
|
| | | def GetMysteryShopByIndex(self, index): return self.ipyMysteryShopCache[index]
|
| | | def GetEquipPlaceIndexMapCount(self): return self.ipyEquipPlaceIndexMapLen
|
| | | def GetEquipPlaceIndexMapByIndex(self, index): return self.ipyEquipPlaceIndexMapCache[index]
|
| | | def GetEquipStarUpCount(self): return self.ipyEquipStarUpLen
|
| | | def GetEquipStarUpByIndex(self, index): return self.ipyEquipStarUpCache[index]
|
| | |
|
| | | IPYData = IPY_DataMgr()
|
| | | def IPY_Data(): return IPYData
|
| | |
| | | import FormulaControl
|
| | | #---------------------------------------------------------------------
|
| | |
|
| | |
|
| | | ##检查玩家是否可以换装
|
| | | # @param curPlayer 玩家实例
|
| | | # @return 返回值, 是否通过检查
|
| | |
| | |
|
| | | return True
|
| | |
|
| | |
|
| | | ## 执行玩家换装逻辑
|
| | | # @param curPlayer 当前玩家
|
| | | # @param curItem 物品实例
|
| | | # @param packEquipIndex 装备部位
|
| | | # @param equipPackIndex 装备背包索引
|
| | | # @param tick 当前时间
|
| | | # @return 布尔值
|
| | | # @remarks 执行玩家换装逻辑
|
| | | def DoPlayerEquipItem(curPlayer, curItem, packEquipIndex, tick): |
| | | def DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick): |
| | | if equipPackIndex < 0:
|
| | | return False
|
| | | playerItemControl = ItemControler.PlayerItemControler(curPlayer)
|
| | |
|
| | | #---验证是否可以换这件装备---
|
| | |
| | | changeItemEquipPlace = curItem.GetEquipPlace()
|
| | | if changeItemEquipPlace not in ShareDefine.RoleEquipType:
|
| | | return False
|
| | | |
| | | |
| | | if ItemCommon.GetEquipPackIndex(curItem) != equipPackIndex:
|
| | | #检查装备位置和填表是否一致
|
| | | return False
|
| | | |
| | | #--设置穿上物品星级--
|
| | | #===========================================================================
|
| | | # if changeItemEquipPlace in ChConfig.Type_Equip_CanTake:
|
| | | # equipPartStar = GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
|
| | | # equipPartStar = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, changeItemEquipPlace)
|
| | | # if equipPartStar != curItem.GetItemStarLV():
|
| | | # curItem.SetItemStarLV(equipPartStar)
|
| | | #===========================================================================
|
| | |
| | | #---开始换装逻辑---
|
| | |
|
| | | #记录换装物品信息
|
| | | itemClassLV = ItemCommon.GetItemClassLV(curItem)
|
| | | changeItemID = curItem.GetItemTypeID()
|
| | | changeItemStarLV = 0#curItem.GetItemStarLV()
|
| | | changeItemStoneCnt = 0#curItem.GetUseStoneCount()
|
| | | changeItemHoleCnt = 0#curItem.GetCanPlaceStoneCount()
|
| | | changeItemStarLV = 0 #curItem.GetItemStarLV()
|
| | | changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
|
| | | changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
|
| | | changeItemUseData = curItem.GetUserData()
|
| | | itemQuality = curItem.GetItemQuality()
|
| | | endureReduceType = curItem.GetEndureReduceType()
|
| | | #changeItemIsHorse = (curItem.GetType() == ChConfig.Def_Item_Type_Horse)
|
| | |
|
| | | #执行换装动作
|
| | | equipPlace = playerItemControl.EquipItem(curItem, packEquipIndex)
|
| | | equipPlace = playerItemControl.EquipItem(curItem, equipPackIndex)
|
| | |
|
| | | if equipPlace == -1:
|
| | | return False
|
| | |
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | curEquip = equipPack.GetAt(equipPlace)
|
| | | SetEquipItemSuiteLVInfo(curPlayer, packEquipIndex, curEquip)
|
| | | curEquip = equipPack.GetAt(equipPackIndex)
|
| | | #SetEquipItemSuiteLVInfo(curPlayer, packEquipIndex, curEquip)
|
| | | if curEquip.GetUserAttr(ShareDefine.Def_IudetCreateTime) == 0:
|
| | | curEquip.SetUserAttr(ShareDefine.Def_IudetCreateTime, int(time.time()))
|
| | | #---换装成功---
|
| | | if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
|
| | | if equipPackIndex in PlayerControl.GetFaceEquipIndexList(curPlayer):
|
| | | #通知客户端交换物品
|
| | | curPlayer.ChangeEquip(changeItemID, equipPlace, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
|
| | | curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
|
| | |
|
| | | if not endureReduceType:
|
| | | EventShell.EventRespons_EquipByPlace(curPlayer, equipPlace)
|
| | | EventShell.EventRespons_EquipByPlace(curPlayer, itemClassLV, equipPlace)
|
| | | #记录橙装、红装
|
| | | #===========================================================================
|
| | | # if itemQuality in [ChConfig.Def_Quality_Orange, ChConfig.Def_Quality_Red]:
|
| | |
| | | if changeItemEquipPlace == ShareDefine.retWing:
|
| | | PlayerWing.CalcWingAttr(curPlayer)
|
| | | else:
|
| | | RefreshPlayerEquipAttribute(curPlayer)
|
| | | RefreshPlayerEquipAttribute(curPlayer, itemClassLV)
|
| | |
|
| | | #刷新所有属性
|
| | | playControl = PlayerControl.PlayerControl(curPlayer)
|
| | | playControl.RefreshPlayerAttrState()
|
| | | return True
|
| | |
|
| | |
|
| | | def SetEquipItemSuiteLVInfo(curPlayer, equipIndex, curItem):
|
| | | # 设置部位套装信息
|
| | |
| | | for suiteLV in suiteLVList:
|
| | | curItem.AddUserAttr(ShareDefine.Def_IudetPartSuiteLV, suiteLV)
|
| | | return
|
| | |
|
| | |
|
| | | ## 刷新装备对人物属性的改变
|
| | | # @param self 类实例
|
| | | # @return 返回值无意义
|
| | | # @remarks 刷新装备对人物属性的改变
|
| | | def RefreshPlayerEquipAttribute(curPlayer, isRefreshEquipBuff=True):
|
| | | GameWorld.DebugLog("Start RefreshPlayerEquipAttribute!!!")
|
| | | def RefreshPlayerEquipAttribute(curPlayer, classlv=0):
|
| | | GameWorld.DebugLog("Start RefreshPlayerEquipAttribute classlv=%s!!!" % classlv)
|
| | | classlvList = range(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1) if classlv == 0 else [classlv]
|
| | | for rclasslv in classlvList:
|
| | | __CalcEquips_Effect(curPlayer, rclasslv)
|
| | |
|
| | | __CalcEquips_Effect(curPlayer)
|
| | | |
| | | #CalcAllEquipAllPlusLVAttr(curPlayer)
|
| | | |
| | | CalcAllEquipStarsAttr(curPlayer)
|
| | | |
| | | #if isRefreshEquipBuff:
|
| | | # __RefreshPlayerAllEquipBuff(curPlayer)
|
| | | return
|
| | |
|
| | |
|
| | | ## 刷新所有装备对人物属性的改变
|
| | | # @param self 类实例
|
| | |
| | | # return
|
| | | #===============================================================================
|
| | |
|
| | |
|
| | | #===============================================================================
|
| | | # #//07 03 人物装备物品#tagCEquipItem
|
| | | # //角色装备类型
|
| | |
| | | GameWorld.GetPsycoFunc(__Func_PlayerEquipItem)(index, tick)
|
| | | return
|
| | |
|
| | |
|
| | | ## 人物装备物品
|
| | | # @param index 背包索引
|
| | | # @param tick 当前时间
|
| | |
| | | #物品在物品背包的索引
|
| | | packItemIndex = sendPack.GetItemIndex()
|
| | | #角色装备部位
|
| | | packEquipIndex = sendPack.GetRoleEquipType()
|
| | | equipPackIndex = sendPack.GetRoleEquipType()
|
| | |
|
| | | #检查玩家状态是否可以换装
|
| | | if not CheckPlayerCanEquipItem(curPlayer):
|
| | |
| | | #---获取封包需要装备的物品---
|
| | | rolePack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | curItem = rolePack.GetAt(packItemIndex)
|
| | | |
| | | #---执行玩家换装逻辑---
|
| | | if DoPlayerEquipItem(curPlayer, curItem, packEquipIndex, tick):
|
| | | if DoPlayerEquipItem(curPlayer, curItem, equipPackIndex, tick):
|
| | | return
|
| | |
|
| | | #换装失败通知客户端信息
|
| | | curPlayer.Notify_ItemPutFail(IPY_GameWorld.rptItem, packItemIndex, IPY_GameWorld.rptEquip, 0)
|
| | | return
|
| | |
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ## 一键换装(封包)
|
| | |
| | | GameWorld.GetPsycoFunc(__Func_PlayerUnEquip)(index, tick)
|
| | | return
|
| | |
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ## 玩家卸下装备(封包参数)
|
| | | # @param index 玩家索引
|
| | |
| | | if not CheckPlayerCanEquipItem(curPlayer):
|
| | | return
|
| | |
|
| | | equipIndex = sendPack.GetEquipIndex()
|
| | | equipPackIndex = sendPack.GetEquipIndex()
|
| | |
|
| | | #如果卸下的是马匹,需要判定如果马匹装备背包有物品,不让放下
|
| | | #===========================================================================
|
| | |
| | | #===========================================================================
|
| | |
|
| | | playerItemControl = ItemControler.PlayerItemControler(curPlayer)
|
| | | result = playerItemControl.UnEquipItem(equipIndex, sendPack.GetPackIndex())
|
| | | result = playerItemControl.UnEquipItem(equipPackIndex, sendPack.GetPackIndex())
|
| | |
|
| | | if not result:
|
| | | #卸下装备失败
|
| | |
| | |
|
| | | ##特殊装备 , 不需要冲刷属性
|
| | | if equipPlace in ChConfig.EquipItemNoRefreshState:
|
| | | curPlayer.Sync_UnEquipItem(equipID, equipPlace)
|
| | | curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
|
| | | return
|
| | |
|
| | | #先刷装备BUFF 再计算属性
|
| | | if equipIndex == ShareDefine.retWing:
|
| | | if equipPlace == ShareDefine.retWing:
|
| | | PlayerWing.CalcWingAttr(curPlayer)
|
| | | else:
|
| | | RefreshPlayerEquipAttribute(curPlayer)
|
| | |
| | | playControl.RefreshPlayerAttrState()
|
| | |
|
| | | if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
|
| | | curPlayer.Sync_UnEquipItem(equipID, equipPlace)
|
| | | curPlayer.Sync_UnEquipItem(equipID, equipPackIndex)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | IPY_GameWorld.oalUseItem
|
| | | ):
|
| | | return
|
| | | |
| | |
|
| | | #检查使用物品的玩家属性
|
| | | if not ChItem.CheckUseItemSelf_Player(curPlayer):
|
| | |
| | |
|
| | |
|
| | | ## 计算装备对基本属性的改变
|
| | | # @param classlv
|
| | | # @return None
|
| | | def __CalcEquips_Effect(curPlayer):
|
| | | baseEquipAttrDict = {}
|
| | | baseEquipAttr_Weapon = [{} for _ in range(4)] # 武器基础, 物品表装备基础效果属性
|
| | | baseEquipAttr_Armor = [{} for _ in range(4)] # 防具基础, 物品表装备基础效果属性
|
| | | baseEquipAttr_Relics = [{} for _ in range(4)] # 圣器基础, 物品表装备基础效果属性
|
| | | def __CalcEquips_Effect(curPlayer, classlv):
|
| | | # baseEquipAttrDict = {}
|
| | | # baseEquipAttr_Weapon = [{} for _ in range(4)] # 武器基础, 物品表装备基础效果属性
|
| | | # baseEquipAttr_Armor = [{} for _ in range(4)] # 防具基础, 物品表装备基础效果属性
|
| | | # baseEquipAttr_Relics = [{} for _ in range(4)] # 圣器基础, 物品表装备基础效果属性
|
| | |
|
| | | allAttrListEquip = [{} for _ in range(4)] # 装备其他
|
| | | allAttrListPlusBase = [{} for _ in range(4)] # 基础强化属性
|
| | | allAttrListStone = [{} for _ in range(4)] # 宝石属性
|
| | | allAttrListSuit = [{} for _ in range(4)] # 套装属性
|
| | | allAttrListWash = [{} for _ in range(4)] # 洗练属性
|
| | | allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
|
| | | |
| | | allAttrListStar = [{} for _ in range(4)] # 星数属性
|
| | | #allAttrListEquip = [{} for _ in range(4)] # 装备其他
|
| | | #allAttrListPlusBase = [{} for _ in range(4)] # 基础强化属性
|
| | | allAttrListStone = [{} for _ in range(4)] # 宝石属性
|
| | | #allAttrListSuit = [{} for _ in range(4)] # 套装属性
|
| | | #allAttrListWash = [{} for _ in range(4)] # 洗练属性
|
| | | #allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
|
| | |
|
| | | packType = IPY_GameWorld.rptEquip
|
| | | playerEquip = curPlayer.GetItemManager().GetPack(packType)
|
| | | equipPartStarIndexList = ChConfig.Pack_EquipPart_CanPlusStar.get(packType, [])
|
| | | maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #最大套装类型
|
| | | equipPlaceList = [] # 有穿戴装备的装备位列表
|
| | | suitCntDict = {} #套装数量字典
|
| | | legendAttrDict = {} #所有传奇属性
|
| | | equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
|
| | | #maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2) #最大套装类型
|
| | | #equipPlaceList = [] # 有穿戴装备的装备位列表
|
| | | #suitCntDict = {} #套装数量字典
|
| | | #legendAttrDict = {} #所有传奇属性
|
| | | equipScoreTotal = 0 #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
|
| | |
|
| | | #玩家当前可装备的装备类型
|
| | | for equipIndex in xrange(playerEquip.GetCount()):
|
| | | if equipIndex not in ShareDefine.RoleEquipType :
|
| | | for equipPlace in equipPartStarIndexList:
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
|
| | | if not ipyData:
|
| | | continue
|
| | | |
| | | # 翅膀属性在翅膀功能单独刷新
|
| | | if equipIndex in ChConfig.EquipItemNoRefreshState or equipIndex == ShareDefine.retWing:
|
| | | continue
|
| | | |
| | | equipIndex = ipyData.GetGridIndex()
|
| | | curEquip = playerEquip.GetAt(equipIndex)
|
| | | if curEquip.IsEmpty():
|
| | | continue
|
| | |
| | | # 过期
|
| | | continue
|
| | |
|
| | | equipPlaceList.append(equipIndex)
|
| | | #equipPlaceList.append(equipIndex)
|
| | | equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip)
|
| | |
|
| | | #基础属性效果
|
| | | for i in range(0, curEquip.GetEffectCount()):
|
| | | for i in xrange(curEquip.GetEffectCount()):
|
| | | curEffect = curEquip.GetEffectByIndex(i)
|
| | | if not curEffect:
|
| | | break
|
| | | |
| | | effectID = curEffect.GetEffectID()
|
| | | if effectID == 0:
|
| | | #最后一个
|
| | | break
|
| | | |
| | | effectValue = curEffect.GetEffectValue(0)
|
| | | if not effectValue:
|
| | | continue
|
| | | # if equipIndex in ChConfig.BaseEquipPlace_Weapon:
|
| | | # PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Weapon)
|
| | | # elif equipIndex in ChConfig.BaseEquipPlace_Armor:
|
| | | # PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Armor)
|
| | | # elif equipIndex in ChConfig.BaseEquipPlace_Relics:
|
| | | # PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Relics)
|
| | | # #其他非基础部位的
|
| | | # else:
|
| | | # PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
|
| | | # baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
|
| | |
|
| | | #添加物品效果的属性值
|
| | | # if equipIndex == ShareDefine.retWing:
|
| | | # PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListWing)
|
| | | if equipIndex in ChConfig.BaseEquipPlace_Weapon:
|
| | | PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Weapon)
|
| | | elif equipIndex in ChConfig.BaseEquipPlace_Armor:
|
| | | PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Armor)
|
| | | elif equipIndex in ChConfig.BaseEquipPlace_Relics:
|
| | | PlayerControl.CalcAttrDict_Type(effectID, effectValue, baseEquipAttr_Relics)
|
| | | #其他非基础部位的
|
| | | else:
|
| | | PlayerControl.CalcAttrDict_Type(effectID, effectValue, allAttrListEquip)
|
| | | baseEquipAttrDict[effectID] = baseEquipAttrDict.get(effectID, 0) + effectValue
|
| | | |
| | | groupType = GetEquipPartSuiteGroupType(curPlayer, equipIndex)
|
| | | for suiteType in range(1, maxSuiteType+1):
|
| | | suitelv = GetEquipPartSuiteLV(curPlayer, equipIndex, suiteType)
|
| | | if suitelv:
|
| | | maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
|
| | | suiteLV = min(suitelv, maxSuiteLV)
|
| | | if suiteLV:
|
| | | suiteKey = '%s_%s_%s'%(groupType,suiteType,suitelv)
|
| | | suitCntDict[suiteKey] = suitCntDict.get(suiteKey, 0) + 1
|
| | | # groupType = GetEquipPartSuiteGroupType(curPlayer, equipIndex)
|
| | | # for suiteType in range(1, maxSuiteType + 1):
|
| | | # suitelv = GetEquipPartSuiteLV(curPlayer, equipIndex, suiteType)
|
| | | # if suitelv:
|
| | | # maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
|
| | | # suiteLV = min(suitelv, maxSuiteLV)
|
| | | # if suiteLV:
|
| | | # suiteKey = '%s_%s_%s' % (groupType, suiteType, suitelv)
|
| | | # suitCntDict[suiteKey] = suitCntDict.get(suiteKey, 0) + 1
|
| | |
|
| | | #星数属性
|
| | | equipPartStar = GetEquipPartStarByRank(curPlayer, equipIndex, curEquip) #生效的星数
|
| | | CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar)
|
| | | #计算装备宝石加成
|
| | | CalcEquipStone_Effect(curPlayer, equipIndex, allAttrListStone)
|
| | |
|
| | | #物品强化属性,佩饰强化不同要区分
|
| | | if equipIndex in equipPartStarIndexList:
|
| | | equipPartStarLV = GetEquipPartStarLVByRank(curPlayer, packType, equipIndex, curEquip)
|
| | | CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
|
| | | # if equipIndex in equipPartStarIndexList:
|
| | | # equipPartStarLV = GetEquipPartPlusLVByRank(curPlayer, packType, equipIndex, curEquip)
|
| | | # CalcAttr_ItemPlus(curPlayer, curEquip, allAttrListPlusBase, equipPartStarLV)
|
| | |
|
| | | #传奇属性
|
| | | CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict) |
| | | #CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict)
|
| | | #绝世属性
|
| | | CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
|
| | | #CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
|
| | | #洗练属性
|
| | | Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, allAttrListWash)
|
| | | #Operate_EquipWash.CalcAttr_EquipWash(curPlayer, equipIndex, allAttrListWash)
|
| | |
|
| | | #洗练套装属性
|
| | | Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
|
| | | #Operate_EquipWash.CalcAttr_EquipWashSpec(curPlayer, equipPlaceList, allAttrListWash)
|
| | | #套装属性
|
| | | CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
|
| | | #CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListSuit)
|
| | | #GameWorld.DebugLog("所有传奇属性: %s" % legendAttrDict)
|
| | | #保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseWeapon, baseEquipAttr_Weapon)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseArmor, baseEquipAttr_Armor)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseRelics, baseEquipAttr_Relics)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allAttrListEquip)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PlusBase, allAttrListPlusBase)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStone)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Suit, allAttrListSuit)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStone)
|
| | | #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Stone, allAttrListStar)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseWeapon, baseEquipAttr_Weapon)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseArmor, baseEquipAttr_Armor)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipBaseRelics, baseEquipAttr_Relics)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Equip, allAttrListEquip)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PlusBase, allAttrListPlusBase)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Suit, allAttrListSuit)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Wash, allAttrListWash)
|
| | | # PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
|
| | |
|
| | | #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
|
| | | equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
|
| | |
| | | #legendAttrDict[attrID] = legendAttrDict.get(attrID, 0) + value
|
| | |
|
| | | return
|
| | |
|
| | |
|
| | | # 装备绝版属性,随等级变化需在升级再处理
|
| | | def CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip):
|
| | |
| | | ## 计算装备对基本属性的改变
|
| | | # @return None
|
| | | def CalcEquips_OutOfPrint(curPlayer):
|
| | | allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
|
| | | allAttrListOutOfPrintEquip = [{} for _ in range(4)] # 绝版装备属性 需在等级变化独立计算
|
| | |
|
| | | packType = IPY_GameWorld.rptEquip
|
| | | playerEquip = curPlayer.GetItemManager().GetPack(packType)
|
| | |
| | | #绝世属性
|
| | | CalcAttr_OutOfPrintAttr(curPlayer, curEquip, allAttrListOutOfPrintEquip)
|
| | |
|
| | |
|
| | | #保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipOutOfPrint, allAttrListOutOfPrintEquip)
|
| | | return
|
| | |
|
| | |
|
| | | ## 计算装备强化后的属性
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", plusType, equipPartStarLV)
|
| | | if not ipyData:
|
| | | return
|
| | | attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
|
| | | attrTypeList, attrValueList = ipyData.GetAttrType(), ipyData.GetAttrValue()
|
| | | for i, attrID in enumerate(attrTypeList):
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
|
| | | return
|
| | |
| | | notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)
|
| | | isAll, addAttrList = ReadChConfig.GetEvalChConfig('EquipQualityAddAttr')
|
| | | for confInfo in addAttrList:
|
| | | confQuality = confInfo[1] # 配置品质标识 1-卓越,2-套装
|
| | | confQuality = confInfo[1] # 配置品质标识 1-卓越,2-套装
|
| | | cnt = 0
|
| | | if confQuality == 1:
|
| | | cnt = qualityEquipCnt
|
| | |
| | | cnt = suiteEquipCnt
|
| | |
|
| | | confCnt = confInfo[0]
|
| | | if cnt >= confCnt: # 如果件数满足
|
| | | if cnt >= confCnt: # 如果件数满足
|
| | | EquipAddBuff(curPlayer, confInfo[2])
|
| | |
|
| | | if confQuality == 2 and confCnt > notifySuiteCnt and notifyType == \
|
| | |
| | |
|
| | | lastSuiteCntRecord = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyRecordSuiteCnt)
|
| | | if notifySuiteCnt > 0 and notifySuiteCnt > lastSuiteCntRecord:
|
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_917284", [curPlayer.GetPlayerName(), |
| | | PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_917284", [curPlayer.GetPlayerName(),
|
| | | notifySuiteCnt])
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyRecordSuiteCnt, suiteCntRecord)
|
| | | #GameWorld.DebugLog("套装件数 上次记录=%s,更新记录=%s" % (lastSuiteCntRecord, suiteCntRecord))
|
| | | return
|
| | |
|
| | |
|
| | | ## 添加装备全身强化等级对应属性
|
| | | # @param curPlayer 当前玩家
|
| | |
| | |
|
| | | return attrDict
|
| | |
|
| | | ## 添加装备全身星数对应属性
|
| | | def CalcAllEquipStarsAttr(curPlayer):
|
| | | allAttrList = [{} for i in range(4)]
|
| | | totalStars = GetTotalEquipStars(curPlayer)
|
| | | activeStars = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipActiveStars)
|
| | | totalStars = min(totalStars, activeStars)
|
| | | if totalStars:
|
| | | ipyData = IpyGameDataPY.InterpolationSearch("RoleEquipStars", "StarsNeed", totalStars)
|
| | | if ipyData:
|
| | | attrTypeList = ipyData.GetAttrType()
|
| | | attrValueList = ipyData.GetAttrValue()
|
| | | |
| | | for i, attrID in enumerate(attrTypeList):
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValueList[i], allAttrList)
|
| | | #GameWorld.DebugLog("装备全身星数属性: totalStars=%s,allAttrList=%s" % (totalStars, allAttrList), curPlayer.GetPlayerID())
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_EquipAllStars, allAttrList)
|
| | | return
|
| | |
|
| | | ## 装备套装属性计算
|
| | | # @param curPlayer 当前玩家
|
| | | # @return None
|
| | | def CalcEquipSuiteAttr(curPlayer, suitCntDict, allAttrListEquip):
|
| | | Def_EquipSuitMaxCount = 3 #套装最大阶段
|
| | | Def_EquipSuitMaxCount = 3 #套装最大阶段
|
| | | myjob = curPlayer.GetJob()
|
| | | name = curPlayer.GetName()
|
| | |
|
| | | for suiteKey, cnt in suitCntDict.items():
|
| | | groupType,suiteType,suiteLV = suiteKey.split('_')
|
| | | groupType, suiteType, suiteLV = suiteKey.split('_')
|
| | | suiteLV = int(suiteLV)
|
| | | job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob #仙器组合默认职业0
|
| | | job = 0 if groupType == ChConfig.EquipGroupType_Relics else myjob #仙器组合默认职业0
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipSuitAttr', int(groupType), int(suiteType), int(suiteLV), job)
|
| | | if not ipyData:
|
| | | continue
|
| | |
|
| | | for i in range(1, Def_EquipSuitMaxCount+1):
|
| | | countKeyName = 'GetCount%d'%i
|
| | | attrTypeKeyName = 'GetAttrType%d'%i
|
| | | attrValueKeyName = 'GetAttrValue%d'%i
|
| | | for i in range(1, Def_EquipSuitMaxCount + 1):
|
| | | countKeyName = 'GetCount%d' % i
|
| | | attrTypeKeyName = 'GetAttrType%d' % i
|
| | | attrValueKeyName = 'GetAttrValue%d' % i
|
| | | needCnt = getattr(ipyData, countKeyName)()
|
| | | if cnt >= needCnt:
|
| | | attrTypeList = getattr(ipyData, attrTypeKeyName)()
|
| | |
| | | PlayerControl.CalcAttrDict_Type(attrID, value, allAttrListEquip)
|
| | |
|
| | | #套装激活提示(只提示1次)
|
| | | paramList= [name, cnt, suiteLV, groupType, suiteType]
|
| | | paramList = [name, cnt, suiteLV, groupType, suiteType]
|
| | | notifyRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteNotify % (groupType, suiteType, cnt))
|
| | | if not notifyRecord & pow(2, suiteLV):
|
| | | if groupType == ChConfig.EquipGroupType_Armor:
|
| | | if cnt >=5:
|
| | | if cnt >= 5:
|
| | | PlayerControl.WorldNotify(0, 'EquipSuit5', paramList)
|
| | | notifyRecord |= pow(2, suiteLV)
|
| | | else:
|
| | |
| | |
|
| | | return
|
| | |
|
| | |
|
| | | ##全身橙色装备数量触发相关(包含橙色品质以上的装备数量)
|
| | | def OnOrangeQualityCntChange(curPlayer, orangeQualityCnt):
|
| | | notifyType = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_AttrActivatyNotify)
|
| | | if notifyType == ChConfig.Def_AttrActivatyNotify_Equip:
|
| | | EventShell.EventRespons_OrangeQualityCnt(curPlayer, orangeQualityCnt)
|
| | | return
|
| | |
|
| | |
|
| | | ## 1算装备触发的技能 (全身)
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | SkillShell.RefreshSkillBuffByEquip(curPlayer, curEquip)
|
| | | return
|
| | |
|
| | |
|
| | | ## 计算装备镶嵌宝石附加效果->基本属性 (宝石)
|
| | | # @param curPlayer 当前玩家
|
| | | # @param curEquip 当前装备
|
| | |
| | | def CalcEquipStone_Effect(curPlayer, equipIndex, allAttrList):
|
| | | gameData = GameWorld.GetGameData()
|
| | |
|
| | | effIndexList = [1, 2, 3, 4] # 第一个效果值是类型等级效果值,非属性效果值
|
| | | effIndexList = [1, 2, 3, 4] # 第一个效果值是类型等级效果值,非属性效果值
|
| | | gemLVList = []
|
| | | for holeIndex in Operate_EquipStone.GetAllEquipPlaceHoleIndex():
|
| | |
|
| | |
| | | gemLVList.append(gemLV)
|
| | | return gemLVList
|
| | |
|
| | | def CalcEquipStarAttr(curPlayer, classlv, equipPlace, equipPartStar, allAttrListStar):
|
| | | ## 计算装备星数属性
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipStarUp', classlv, equipPlace, equipPartStar)
|
| | | if not ipyData:
|
| | | return
|
| | | starAttrDict = ipyData.GetStarAttrInfo()
|
| | | for attrID, attrValue in starAttrDict.items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
| | | baseAttrDict = ipyData.GetBaseAttrInfo()
|
| | | for attrID, attrValue in baseAttrDict.items():
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
| | | return
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | ## 装备添加Buff
|
| | | # @param curPlayer 当前玩家
|
| | |
| | | if value > 0:
|
| | | curBuff.SetValue(value)
|
| | | return
|
| | |
|
| | |
|
| | | #---------------------------------------------------------------------
|
| | | #===============================================================================
|
| | | # #//03 2F 请求装备显隐#tagRequestEquipShowHide
|
| | | # //装备显示开关
|
| | | # int GetEquipShowSwitch();
|
| | | # int GetEquipShowSwitch(); 第几套*10+是否有套装
|
| | | #===============================================================================
|
| | | ##请求装备显隐.
|
| | | ##请求装备显隐. (设置显示哪套装备外观)
|
| | | # @param index 玩家索引
|
| | | # @param tick 时间戳
|
| | | # @return 返回值无意义
|
| | | # @remarks 客户端封包响应 //03 2F 请求装备显隐#tagRequestEquipShowHide
|
| | | def RequestEquipShowHide(index, tick):
|
| | | |
| | | curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
| | |
|
| | | #---检查刷新间隔--
|
| | |
| | | return
|
| | |
|
| | | sendPack = IPY_GameWorld.IPY_CRequestEquipShowHide()
|
| | | #此功能无需验证
|
| | | curPlayer.SetEquipShowSwitch(sendPack.GetEquipShowSwitch())
|
| | | updEquipShowSwitch = sendPack.GetEquipShowSwitch()
|
| | | oldEquipShowSwitch = curPlayer.GetEquipShowSwitch()
|
| | | if updEquipShowSwitch == oldEquipShowSwitch:
|
| | | return
|
| | | |
| | | #通知外观装备
|
| | | updFaceEquipIndex = 0
|
| | | equipIndexList = []
|
| | | for equipPlace in [ShareDefine.retWeapon, ShareDefine.retWeapon2, ShareDefine.retClothes]:
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', 1, equipPlace)
|
| | | if not ipyData:
|
| | | continue
|
| | | gridIndex = ipyData.GetGridIndex()
|
| | | updFaceEquipIndex = updFaceEquipIndex * 1000 + gridIndex
|
| | | equipIndexList.append(gridIndex)
|
| | | PlayerControl.SetFaceEquipIndex(curPlayer, updFaceEquipIndex)
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | for equipPackIndex in equipIndexList:
|
| | | curEquip = equipPack.GetAt(equipPackIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | continue
|
| | | changeItemID = curEquip.GetItemTypeID()
|
| | | changeItemStarLV = 0 #curItem.GetItemStarLV()
|
| | | changeItemStoneCnt = 0 #curItem.GetUseStoneCount()
|
| | | changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount()
|
| | | changeItemUseData = curEquip.GetUserData()
|
| | | curPlayer.ChangeEquip(changeItemID, equipPackIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData)
|
| | | |
| | | curPlayer.SetEquipShowSwitch(updEquipShowSwitch)
|
| | | curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_RequestEquipShowHide, tick)
|
| | | return
|
| | |
|
| | |
|
| | | ## 获取公共部位强化熟练度
|
| | | def GetEquipPartProficiency(curPlayer, packType, index):
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index))
|
| | |
|
| | |
|
| | | ## 设置公共部位强化熟练度
|
| | | def SetEquipPartProficiency(curPlayer, packType, index, value):
|
| | |
| | |
|
| | |
|
| | | ## 获取公共部位强化星级, 因装备的最高可强化星级影响,用于算当前装备属性使用, 不影响全身星级
|
| | | def GetEquipPartStarLVByRank(curPlayer, packType, index, curEquip):
|
| | | maxStarLV = ItemCommon.GetItemMaxStarLV(curEquip)
|
| | | return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStarLV % (packType, index)), maxStarLV)
|
| | | def GetEquipPartPlusLVByRank(curPlayer, packType, index, curEquip):
|
| | | maxStarLV = ItemCommon.GetItemMaxPlusLV(curEquip)
|
| | | return min(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)), maxStarLV)
|
| | |
|
| | |
|
| | | ## 获取公共部位强化星级
|
| | | def GetEquipPartStarLV(curPlayer, packType, index):
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStarLV % (packType, index))
|
| | | def GetEquipPartPlusLV(curPlayer, packType, index):
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index))
|
| | |
|
| | |
|
| | | ## 设置公共部位强化星级
|
| | | def SetEquipPartStarLV(curPlayer, packType, index, curEquip, starLV):
|
| | | if GetEquipPartStarLV(curPlayer, packType, index) == starLV:
|
| | | def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, starLV):
|
| | | if GetEquipPartPlusLV(curPlayer, packType, index) == starLV:
|
| | | return
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStarLV % (packType, index), starLV)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), starLV)
|
| | | #===========================================================================
|
| | | # if curEquip and not curEquip.IsEmpty():
|
| | | # curEquip.SetItemStarLV(starLV)
|
| | |
| | |
|
| | | return
|
| | |
|
| | | ## 通知公共部位强化星级
|
| | | def NotifyEquipPartStarLV(curPlayer, packType=None, index=None):
|
| | |
|
| | | ## 通知公共部位强化等级
|
| | | def NotifyEquipPartPlusLV(curPlayer, packType=None, index=None):
|
| | | ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarLVInfo()
|
| | | ePartStarLVPack.Clear()
|
| | | ePartStarLVPack.InfoList = []
|
| | |
| | | ePartStarLV.Clear()
|
| | | ePartStarLV.PackType = pType
|
| | | ePartStarLV.EquipIndex = i
|
| | | ePartStarLV.EquipPartStarLV = GetEquipPartStarLV(curPlayer, pType, i)
|
| | | ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, pType, i)
|
| | | ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, pType, i)
|
| | | ePartStarLVPack.InfoList.append(ePartStarLV)
|
| | |
|
| | |
| | | if not curEquip or curEquip.IsEmpty():
|
| | | continue
|
| | |
|
| | | partStarLV = GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, i)
|
| | | partStarLV = GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, i)
|
| | | totalPlusLV += partStarLV
|
| | | return totalPlusLV
|
| | |
|
| | | ## 全身装备星数
|
| | | def GetTotalEquipStars(curPlayer):
|
| | | totalEquipStars = 0
|
| | | equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
|
| | | for i in ChConfig.BaseEquipPlaceList:
|
| | | curEquip = equipPack.GetAt(i)
|
| | | if not curEquip or curEquip.IsEmpty():
|
| | | continue
|
| | | totalEquipStars += curEquip.GetItemQuality()
|
| | | return totalEquipStars
|
| | |
|
| | | # 获取装备的强化类型
|
| | | def GetEquipPlusType(curEquip):
|
| | |
| | |
|
| | | return plusTypeDict.get(equipPlace, -1)
|
| | |
|
| | |
|
| | | def SetEquipPartSuiteLV(curPlayer, index, suiteType, suiteLV):
|
| | | #设置公共部位套装等级
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType), suiteLV)
|
| | |
| | | SetEquipItemSuiteLVInfo(curPlayer, index, equipPack.GetAt(index))
|
| | | return
|
| | |
|
| | |
|
| | | def GetEquipPartSuiteLV(curPlayer, index, suiteType):
|
| | | #获取公共部位套装等级
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteLV % (index, suiteType))
|
| | |
|
| | |
|
| | | def GetEquipPartSuiteGroupType(curPlayer, equipIndex):
|
| | | #获取公共部位套装组合类型
|
| | |
| | | findGroupType = int(groupType)
|
| | | break
|
| | | return findGroupType
|
| | |
|
| | |
|
| | | # 获取满套装化的最低阶数,如5件套,4件5级,1件3级,则返回3
|
| | | def GetEquipSuitsLVByType(curPlayer, suitType, groupType):
|
| | |
| | | NetPackCommon.SendFakePack(curPlayer, ePartSuitePack)
|
| | | return
|
| | |
|
| | |
|
| | | def GetSuiteInfoByPlace(curPlayer, equipPlace, curEquip=None):
|
| | | suiteInfo = {} #{套装类型:等级}
|
| | | suiteInfo = {} #{套装类型:等级}
|
| | | groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
|
| | | maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
|
| | | for suiteType in range(1, maxSuiteType+1):
|
| | | for suiteType in range(1, maxSuiteType + 1):
|
| | | suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
|
| | | if suiteLV:
|
| | | if curEquip:
|
| | |
| | | suiteInfo[suiteType] = suiteLV
|
| | | return suiteInfo
|
| | |
|
| | |
|
| | | def GetEquipPartSuiteLVList(curPlayer, equipPlace, curEquip=None):
|
| | | ## 部位套装等级列表
|
| | | groupType = GetEquipPartSuiteGroupType(curPlayer, equipPlace)
|
| | |
|
| | | suiteLVList = []
|
| | | maxSuiteType = IpyGameDataPY.GetFuncCfg('EquipSuitColorStar', 2)
|
| | | for suiteType in xrange(1, maxSuiteType+1):
|
| | | for suiteType in xrange(1, maxSuiteType + 1):
|
| | | suiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suiteType)
|
| | | if curEquip and suiteLV:
|
| | | maxSuiteLV = Operate_EquipSuitCompose.GetEquipCanDoMaxSuiteLV(curPlayer, curEquip, suiteType, groupType)
|
| | |
| | |
|
| | | suiteLVList.append(suiteLV)
|
| | | return suiteLVList
|
| | |
|
| | |
|
| | | def SetEquipPartStar(curPlayer, equipPackindex, star):
|
| | | #设置公共部位星数
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % equipPackindex, star)
|
| | | return
|
| | |
|
| | |
|
| | | def GetEquipPartStar(curPlayer, equipPackindex):
|
| | | #获取公共部位星数
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % equipPackindex)
|
| | |
|
| | |
|
| | | ## 获取公共部位生效的星数, 因装备的最高可到星数影响,用于算当前装备属性使用, 不影响全身星级
|
| | | def GetEquipPartStarByRank(curPlayer, equipPackindex, curEquip):
|
| | | maxStarLV = ItemCommon.GetItemMaxStar(curEquip)
|
| | | return min(GetEquipPartStar(curPlayer, equipPackindex), maxStarLV)
|
| | |
|
| | |
|
| | | ## 通知公共部位星数
|
| | | def NotifyEquipPartStar(curPlayer, index=None):
|
| | | ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartStarInfo()
|
| | | ePartStarLVPack.Clear()
|
| | | ePartStarLVPack.InfoList = []
|
| | | syncIndexList = []
|
| | | if index == None:
|
| | | equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv')
|
| | | for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(IPY_GameWorld.rptEquip, []):
|
| | | for classlv in xrange(equipMaxClasslv):
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace)
|
| | | if not ipyData:
|
| | | continue |
| | | syncIndexList.append(ipyData.GetGridIndex())
|
| | | else:
|
| | | syncIndexList = [index]
|
| | | |
| | | for index in syncIndexList:
|
| | | ePartStarLV = ChPyNetSendPack.tagMCEquipPartStar()
|
| | | ePartStarLV.Clear()
|
| | | ePartStarLV.EquipPackIndex = index
|
| | | ePartStarLV.Star = GetEquipPartStar(curPlayer, index)
|
| | | ePartStarLVPack.InfoList.append(ePartStarLV)
|
| | | |
| | | ePartStarLVPack.Count = len(ePartStarLVPack.InfoList)
|
| | | NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack)
|
| | | return
|
| | |
|
| | |
|
| | | #// A5 03 全身属性激活 #tagCMActiveAllEquipAttr
|
| | |
| | | return
|
| | | curCnt = curPlayer.NomalDictGetProperty(key)
|
| | | if activeCnt <= curCnt:
|
| | | GameWorld.Log(' 全身属性激活 该数量已激活过! activeType=%s,activeCnt=%s,curCnt=%s'%(activeType, activeCnt, curCnt))
|
| | | GameWorld.Log(' 全身属性激活 该数量已激活过! activeType=%s,activeCnt=%s,curCnt=%s' % (activeType, activeCnt, curCnt))
|
| | | return
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, key, activeCnt)
|
| | |
| | | playControl.RefreshPlayerAttrState()
|
| | | return
|
| | |
|
| | |
|
| | | def SyncAllEquipAttrActiveInfo(curPlayer, activeType=-1):
|
| | | ## 通知全身属性激活数量
|
| | | packData = ChPyNetSendPack.tagMCAllEquipAttrActiveInfo()
|
| | | packData.ActiveInfo = []
|
| | | for aType in [0, 1]:
|
| | | if activeType !=-1 and activeType != aType:
|
| | | if activeType != -1 and activeType != aType:
|
| | | continue
|
| | | if aType == 0:
|
| | | key = ChConfig.Def_PDict_EquipActiveStarLV
|
| | |
| | |
|
| | |
|
| | | def CalcZhuXianAttr(curPlayer):
|
| | | return
|
| | | ## 刷新诛仙属性
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
|
| | |
| | |
|
| | | ## 交换装备
|
| | | # @param curItem 当前物品
|
| | | # @param equipPlace 装备位置
|
| | | # @param equipPackIndex 装备背包格子
|
| | | # @return True or False
|
| | | # @remarks 函数详细说明.
|
| | | def SwitchEquip(self, curItem, equipPlace):
|
| | | def SwitchEquip(self, curItem, equipPackIndex):
|
| | | curPlayer = self.__Player
|
| | | equipPack = self.__PlayerEquip
|
| | |
|
| | | curEquip = equipPack.GetAt(equipPlace)
|
| | | curEquip = equipPack.GetAt(equipPackIndex)
|
| | |
|
| | | #GameWorld.Log("装备位置%d"%equipPlace)
|
| | | if curEquip.IsEmpty():
|
| | |
| | |
|
| | | ## 装备当前物品
|
| | | # @param curItem 当前物品
|
| | | # @param packEquipIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
|
| | | # @param equipPackIndex 客户端发来装备位置(IPY_GameWorld.retMax 代表服务器自动装备)
|
| | | # @return 替换的位置 -1表示替换失败
|
| | | def EquipItem(self, curItem, packEquipIndex):
|
| | | def EquipItem(self, curItem, equipPackIndex):
|
| | | if not self.PlayerCanEquipItem(curItem, True):
|
| | | return -1
|
| | |
|
| | | equipPlace = curItem.GetEquipPlace()
|
| | | if packEquipIndex != equipPlace:
|
| | | #仙器有两个位置,其他装备检查装备位置和填表是否一致
|
| | | if equipPlace not in ChConfig.Def_FairyCanList and packEquipIndex not in ChConfig.Def_FairyCanList:
|
| | | return -1
|
| | |
|
| | | |
| | | curPlayer = self.__Player
|
| | | equipPack = self.__PlayerEquip
|
| | | equipItem = equipPack.GetAt(packEquipIndex)
|
| | | equipItem = equipPack.GetAt(equipPackIndex)
|
| | | desItemID, desUserData = [0, ''] if equipItem.IsEmpty() else [equipItem.GetItemTypeID(), equipItem.GetUserData()]
|
| | | srcItemID, srcUserData = curItem.GetItemTypeID(), curItem.GetUserData()
|
| | | # 装备绑定处理 在 DoLogic_ItemBindType函数有处理,此处注释掉
|
| | |
| | |
|
| | | #--其他装备物品---
|
| | | #itemColor = curItem.GetItemColor()
|
| | | result = self.SwitchEquip(curItem, packEquipIndex)
|
| | | result = self.SwitchEquip(curItem, equipPackIndex)
|
| | | if result:
|
| | | #穿戴某阶某品质的装备成就
|
| | | PlayerSuccess.DoEquipSuccessLogic(curPlayer)
|
| | | #换装宝石处理
|
| | | Operate_EquipStone.DoMoveEquipStone(curPlayer, packEquipIndex)
|
| | | Operate_EquipStone.DoMoveEquipStone(curPlayer, equipPackIndex)
|
| | | #套装降级处理
|
| | | Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, packEquipIndex)
|
| | | #Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, packEquipIndex)
|
| | | EventShell.EventRespons_EquipStar(curPlayer)
|
| | | dataDict = {'dotype':'EquipItem', 'desItemID':desItemID, 'desUserData':desUserData,'srcItemID':srcItemID,'srcUserData':srcUserData}
|
| | | DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
|
| | |
|
| | | self.RefreshStartEquipCount()
|
| | | return packEquipIndex if result else -1
|
| | | return equipPlace if result else -1
|
| | |
|
| | |
|
| | | ## 替换可以叠加物品逻辑
|
| | |
| | |
|
| | | equipID = curEquip.GetItemTypeID()
|
| | | userData = curEquip.GetUserData()
|
| | | equipPlace = curEquip.GetEquipPlace()
|
| | | #该物品锁定不执行==============================================
|
| | | if curEquip.GetIsLocked():
|
| | | PlayerControl.NotifyCode(curPlayer, "RescannotEquip")
|
| | |
| | | return
|
| | | self.RefreshStartEquipCount()
|
| | | #套装降级处理
|
| | | Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, equipIndex)
|
| | | #Operate_EquipSuitCompose.CheckEquipSuitReduce(curPlayer, equipIndex)
|
| | | EventShell.EventRespons_EquipStar(curPlayer)
|
| | | dataDict = {'dotype':'UnEquipItem', 'equipID':equipID, 'userData':userData}
|
| | | DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
|
| | |
| | | #
|
| | | # destItemPlace.PutIn(curEquip)
|
| | | #===============================================================================
|
| | | return equipID, equipIndex
|
| | | return equipID, equipPlace
|
| | |
|
| | | #是否能放入物品(第几个物品栏, 物品序号, 放入的物品, 放入物品ID, 物品是否绑定)
|
| | | #===============================================================================
|
| | |
| | | notifyList[5] = place
|
| | | suiteInfo = PlayerViewCacheTube.__GetEquipPartSuiteInfo(curPlayer)
|
| | | notifyList[6] = "" if not suiteInfo else json.dumps(suiteInfo, ensure_ascii=False)
|
| | | notifyList[7] = ChEquip.GetEquipPartStarLV(curPlayer, IPY_GameWorld.rptEquip, place)
|
| | | notifyList[7] = ChEquip.GetEquipPartPlusLV(curPlayer, IPY_GameWorld.rptEquip, place)
|
| | |
|
| | | # 单部位洗练信息
|
| | | washLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipWashLV % place) + 1
|
| | |
| | | ItemControler.Sync_VPackItem_Clear(curPlayer, packIndex, placeList)
|
| | | return
|
| | |
|
| | | ## 获取物品最高强化星级
|
| | | ## 获取物品最高强化等级
|
| | | # @param itemType: 物品类型
|
| | | # @return 最大星级,0为不可强化
|
| | | def GetItemMaxStarLV(curItem):
|
| | | def GetItemMaxPlusLV(curItem):
|
| | | equipPlace = curItem.GetEquipPlace()
|
| | | plusMaxTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1)
|
| | | if not plusMaxTypeDict:
|
| | | GameWorld.ErrLog("GetItemMaxStarLV没有强化类型映射表")
|
| | | GameWorld.ErrLog("GetItemMaxPlusLV没有强化类型映射表")
|
| | | return 0
|
| | |
|
| | | if equipPlace not in plusMaxTypeDict:
|
| | |
| | |
|
| | | return ipyData.GetLevelMax()
|
| | |
|
| | | ## 获取物品最高星数
|
| | | # @param itemType: 物品类型
|
| | | # @return 最大星级,0为不可强化
|
| | | def GetItemMaxStar(curItem):
|
| | | itemColor = curItem.GetItemColor()
|
| | | maxStarDict = IpyGameDataPY.GetFuncEvalCfg('EquipPartStar', 1)
|
| | | if str(itemColor) not in maxStarDict:
|
| | | return 0
|
| | | classLV = GetItemClassLV(curItem)
|
| | | return maxStarDict[str(itemColor)].get(str(classLV), 0)
|
| | |
|
| | | ## 获取物品阶级
|
| | | def GetItemClassLV(curItem):
|
| | | return curItem.GetLV()
|
| | |
| | | def SetEquipGearScore(curItem, value):
|
| | | return curItem.SetGearScore(value)
|
| | |
|
| | | def GetEquipPackIndex(curItem):
|
| | | ## 根据物品获取对应的可装备背包位置
|
| | | ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', GetItemClassLV(curItem), curItem.GetEquipPlace())
|
| | | if not ipyData:
|
| | | return -1
|
| | | return ipyData.GetGridIndex()
|
| | |
|
| | | ## 每日可使用次数
|
| | | def GetCanUseCountDaily(curItem): return curItem.GetMaxAddSkillCnt()
|
| | | ## 每周可使用次数, 预留,暂不实现
|
| | |
| | | SyncPKModel(curPlayer)
|
| | |
|
| | | #通用强化星级信息
|
| | | ChEquip.NotifyEquipPartStarLV(curPlayer)
|
| | | ChEquip.NotifyEquipPartPlusLV(curPlayer)
|
| | | ChEquip.NotifyEquipPartStar(curPlayer)
|
| | | Operate_EquipWash.OnEquipWashLogin(curPlayer)
|
| | | #通知套装信息
|
| | | ChEquip.NotifyEquipPartSuiteLV(curPlayer)
|
| | |
| | | # ֪ͨGsmeServer;
|
| | | # SendGameServerRefreshState(int inputType, int inputValue)
|
| | |
|
| | | # SetExAttr15 ~ 18 对应神兵类型等级,场景特效用
|
| | |
|
| | | # 禁言 通知gameServer
|
| | | def SetGMForbidenTalk(curPlayer, value):
|
| | |
| | | GameWorld.DebugLog("更新玩家所属服务器组ID: serverGroupID=%s" % serverGroupID)
|
| | | return
|
| | |
|
| | | ##影响外观的3部位索引记录 123456789 123:武器格子索引 456:副手 789:衣服
|
| | | def GetFaceEquipIndexList(curPlayer): |
| | | attr15 = curPlayer.GetExAttr15()
|
| | | return [attr15%1000, attr15/1000%1000, attr15/1000000]
|
| | | def SetFaceEquipIndex(curPlayer, value): return curPlayer.SetExAttr15(value, True, True)
|
| | |
|
| | | ##获得玩家威望值
|
| | | def GetPrestige(curPlayer): return 0
|
| | | def SetPrestige(curPlayer, value): return
|
| | |
| | | return
|
| | | Sync_GodWeaponLVInfo(curPlayer)
|
| | |
|
| | | #老号相关神兵场景特效等级同步支持
|
| | | if curPlayer.GetExAttr15() == 0:
|
| | | playerID = curPlayer.GetPlayerID()
|
| | | ipyDataMgr = IpyGameDataPY.IPY_Data()
|
| | | maxType = ipyDataMgr.GetGodWeaponByIndex(ipyDataMgr.GetGodWeaponCount()-1).GetType()
|
| | | for setWeaponType in xrange(1, maxType + 1):
|
| | | setLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GodWeaponLV % setWeaponType)
|
| | | if not setLV:
|
| | | continue
|
| | | SetGodWeaponLV(curPlayer, setWeaponType, setLV)
|
| | | |
| | | giveSkillList = []
|
| | | for attrLV in xrange(1, setLV + 1):
|
| | | godWeaponData = IpyGameDataPY.GetIpyGameData('GodWeapon', setWeaponType, attrLV)
|
| | | if godWeaponData:
|
| | | giveSkillID = GodWeaponLVUP(curPlayer, godWeaponData, attrLV)
|
| | | if giveSkillID:
|
| | | giveSkillList.append(giveSkillID)
|
| | | GameWorld.Log("老号设置神兵场景等级: setWeaponType=%s,setLV=%s, giveSkillList=%s" % (setWeaponType, setLV, giveSkillList), playerID)
|
| | | |
| | | return
|
| | |
|
| | | def SetGodWeaponLV(curPlayer, weaponType, lv):
|
| | | ## 设置神兵等级,同步设置场景神兵等级
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GodWeaponLV % weaponType, lv)
|
| | | sceneEffectsDict = {Def_GodWeaponType_HP:[lambda curObj, value:curObj.SetExAttr15(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_1],
|
| | | Def_GodWeaponType_Atk:[lambda curObj, value:curObj.SetExAttr16(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_2],
|
| | | Def_GodWeaponType_SuperHit:[lambda curObj, value:curObj.SetExAttr17(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_3],
|
| | | Def_GodWeaponType_Def:[lambda curObj, value:curObj.SetExAttr18(value), ShareDefine.CDBPlayerRefresh_GodWeaponLV_4],
|
| | | }
|
| | | if weaponType in sceneEffectsDict:
|
| | | setFunc, notifyType = sceneEffectsDict[weaponType]
|
| | | setFunc(curPlayer, lv)
|
| | | curPlayer.SendPropertyRefresh(notifyType, lv, False)
|
| | | |
| | | |
| | | totalLV = GetGodWeaponTotalLV(curPlayer)
|
| | | # 开服活动数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_GodWeaponLV, totalLV)
|
| | |
| | | return
|
| | |
|
| | | tryItem = ItemControler.GetOutPutItemObj(tryItemID, 1, 1)
|
| | | if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, equipPlace, tick):
|
| | | if ChEquip.DoPlayerEquipItem(curPlayer, tryItem, ItemCommon.GetEquipPackIndex(tryItem), tick):
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FirstGoldTry, 2)
|
| | | else:
|
| | | curItem.clear()
|
| | |
| | |
|
| | | #---执行玩家换装逻辑---
|
| | | tick = GameWorld.GetGameWorld().GetTick()
|
| | | if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ShareDefine.retHorse, tick):
|
| | | if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
|
| | | if isRideHorse:
|
| | | PlayerRideHorseUp(curPlayer, False)
|
| | |
|
| | |
| | | PlayerRideHorseDown(curPlayer, False)
|
| | |
|
| | | #---执行玩家换装逻辑---
|
| | | if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ShareDefine.retHorse, tick):
|
| | | if ChEquip.DoPlayerEquipItem(curPlayer, curHorse, ItemCommon.GetEquipPackIndex(curHorse), tick):
|
| | | if isRideHorse:
|
| | | PlayerRideHorseUp(curPlayer, False)
|
| | | return
|
| | |
| | | break
|
| | | if cnt:
|
| | | break
|
| | | elif curType == 3:
|
| | | #全身装备X星
|
| | | cnt = ChEquip.GetTotalEquipStars(curPlayer)
|
| | | # elif curType == 3:
|
| | | # #全身装备X星
|
| | | # cnt = ChEquip.GetTotalEquipStars(curPlayer)
|
| | |
|
| | | elif curType == 4:
|
| | | #X阶普通、强化套装
|
| | |
| | | return True
|
| | | equipID = result[0]
|
| | | equipPlace = result[1]
|
| | | if equipPlace == ShareDefine.retGuard:
|
| | | if equipPlace in [ShareDefine.retGuard1, ShareDefine.retGuard2]:
|
| | | PlayerControl.NotifyCode(curPlayer, 'Guardian_Timeout', [equipID, spaceIndex])
|
| | | elif equipPlace == ShareDefine.retWing:
|
| | | PlayerControl.NotifyCode(curPlayer, 'WingTiyan_Timeout')
|
| | |
| | | PlayerGoldGift.FirstGoldTryItemOutTime(curPlayer)
|
| | |
|
| | | # 广播卸装
|
| | | if equipIndex in ChConfig.Def_SyncEquipStateByIndex:
|
| | | curPlayer.Sync_UnEquipItem(equipID, equipPlace)
|
| | | if equipPlace in ChConfig.Def_SyncEquipStateByIndex:
|
| | | curPlayer.Sync_UnEquipItem(equipID, equipIndex)
|
| | | return True
|
| | | #---------------------------------------------------------------------
|
| | | ##全局定时器调用, 刷新玩家状态
|
| | |
| | | ResetSuccessByType(curPlayer, succType)
|
| | | for pType, indexList in ChConfig.Pack_EquipPart_CanPlusStar.items():
|
| | | for i in indexList:
|
| | | equipPartStarLV = ChEquip.GetEquipPartStarLV(curPlayer, pType, i)
|
| | | equipPartStarLV = ChEquip.GetEquipPartPlusLV(curPlayer, pType, i)
|
| | | for pluslv in xrange(1, equipPartStarLV+1):
|
| | | DoAddSuccessProgress(curPlayer, succType, 1, [pluslv])
|
| | |
|
| | |
| | |
|
| | | itemQuality = curEquip.GetItemQuality()
|
| | | classLV = ItemCommon.GetItemClassLV(curEquip)
|
| | | if equipIndex not in [ShareDefine.retWing,ShareDefine.retGuard,ShareDefine.retHorse]:
|
| | | if equipIndex not in [ShareDefine.retWing,ShareDefine.retGuard1,ShareDefine.retGuard2,ShareDefine.retHorse]:
|
| | | DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipColorItem, 1, [classLV, itemColor])
|
| | | if equipIndex in ChConfig.BaseEquipPlace_Weapon:
|
| | | DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipWeapon, 1, [itemColor, itemQuality, classLV])
|
| | |
| | |
|
| | | # 切换守护
|
| | | def ChangeGuard(curPlayer, tick):
|
| | | # 检查过背包中无守护则不再执行
|
| | | if curPlayer.GetDictByKey("AutoCGuardID") == 1:
|
| | | return
|
| | | |
| | | curGuardID = 0 # 装备的守护ID
|
| | | itemIDList = IpyGameDataPY.GetFuncEvalCfg('AutoUseGuardian', 1)
|
| | | guardItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip).GetAt(ShareDefine.retGuard)
|
| | | # 1。 守护存在,判断是否最优先守护
|
| | | if ItemCommon.CheckItemCanUse(guardItem) and ItemCommon.CheckItemCanUseByExpireTime(guardItem):
|
| | | curGuardID = guardItem.GetItemTypeID()
|
| | | if curGuardID == itemIDList[0]:
|
| | | # 最高优先级
|
| | | return
|
| | | if curPlayer.GetDictByKey("AutoCGuardID") == 2:
|
| | | # 当前背包最高
|
| | | return
|
| | | |
| | |
|
| | | findItemList = []
|
| | | curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | |
| | | # 找到背包中优先级最高的守护物品
|
| | | for i in range(0, curPack.GetCount()):
|
| | | item = curPack.GetAt(i)
|
| | | |
| | | if not ItemCommon.CheckItemCanUse(item):
|
| | | continue
|
| | | |
| | | if item.GetItemTypeID() not in itemIDList:
|
| | | continue
|
| | | |
| | | if not ItemCommon.CheckItemCanUseByExpireTime(item):
|
| | | # 背包有不过期的物品
|
| | | continue
|
| | | |
| | | findItemList.append(item)
|
| | | |
| | | if not findItemList:
|
| | | curPlayer.SetDict("AutoCGuardID", 1) # 设置无可替换的标志
|
| | | return
|
| | | |
| | | findItemList.sort(cmp=SortGuard)
|
| | | if curGuardID in itemIDList and itemIDList.index(curGuardID) <= itemIDList.index(findItemList[0].GetItemTypeID()):
|
| | | # 当前装备最高,减少遍历
|
| | | curPlayer.SetDict("AutoCGuardID", 2)
|
| | | return
|
| | | |
| | |
|
| | | #---执行玩家换装逻辑---
|
| | | ChEquip.DoPlayerEquipItem(curPlayer, findItemList[0], ShareDefine.retGuard, tick)
|
| | | curPlayer.SetDict("AutoCGuardID", 0)
|
| | | return #新版本不需要切换
|
| | | # # 检查过背包中无守护则不再执行
|
| | | # if curPlayer.GetDictByKey("AutoCGuardID") == 1:
|
| | | # return
|
| | | # |
| | | # curGuardID = 0 # 装备的守护ID
|
| | | # itemIDList = IpyGameDataPY.GetFuncEvalCfg('AutoUseGuardian', 1)
|
| | | # guardItem = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip).GetAt(ShareDefine.retGuard1)
|
| | | # # 1。 守护存在,判断是否最优先守护
|
| | | # if ItemCommon.CheckItemCanUse(guardItem) and ItemCommon.CheckItemCanUseByExpireTime(guardItem):
|
| | | # curGuardID = guardItem.GetItemTypeID()
|
| | | # if curGuardID == itemIDList[0]:
|
| | | # # 最高优先级
|
| | | # return
|
| | | # if curPlayer.GetDictByKey("AutoCGuardID") == 2:
|
| | | # # 当前背包最高
|
| | | # return
|
| | | # |
| | | #
|
| | | # findItemList = []
|
| | | # curPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
|
| | | # |
| | | # # 找到背包中优先级最高的守护物品
|
| | | # for i in range(0, curPack.GetCount()):
|
| | | # item = curPack.GetAt(i)
|
| | | # |
| | | # if not ItemCommon.CheckItemCanUse(item):
|
| | | # continue
|
| | | # |
| | | # if item.GetItemTypeID() not in itemIDList:
|
| | | # continue
|
| | | # |
| | | # if not ItemCommon.CheckItemCanUseByExpireTime(item):
|
| | | # # 背包有不过期的物品
|
| | | # continue
|
| | | # |
| | | # findItemList.append(item)
|
| | | # |
| | | # if not findItemList:
|
| | | # curPlayer.SetDict("AutoCGuardID", 1) # 设置无可替换的标志
|
| | | # return
|
| | | # |
| | | # findItemList.sort(cmp=SortGuard)
|
| | | # if curGuardID in itemIDList and itemIDList.index(curGuardID) <= itemIDList.index(findItemList[0].GetItemTypeID()):
|
| | | # # 当前装备最高,减少遍历
|
| | | # curPlayer.SetDict("AutoCGuardID", 2)
|
| | | # return
|
| | | # |
| | | #
|
| | | # #---执行玩家换装逻辑---
|
| | | # ChEquip.DoPlayerEquipItem(curPlayer, findItemList[0], ItemCommon.GetEquipPackIndex(findItemList[0]), tick)
|
| | | # curPlayer.SetDict("AutoCGuardID", 0)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | #翅膀信息在翅膀装备位对应装备信息
|
| | |
|
| | | #部位强化数据
|
| | | curPlayerPlusDict["EquipPartStarLV"] = __GetEquipPartStarLVInfo(curPlayer)
|
| | | curPlayerPlusDict["EquipPartStarLV"] = __GetEquipPartPlusLVInfo(curPlayer)
|
| | |
|
| | | #部位宝石数据
|
| | | curPlayerPlusDict["EquipPartStone"] = __GetEquipPartStoneInfo(curPlayer)
|
| | |
| | | dataDict.pop(key)
|
| | | return dataDict
|
| | |
|
| | | ## 公共部位强化星级信息{部位索引:星级, ...}
|
| | | def __GetEquipPartStarLVInfo(curPlayer):
|
| | | ## 公共部位强化星级信息{部位索引:强化等级, ...}
|
| | | def __GetEquipPartPlusLVInfo(curPlayer):
|
| | | pType = IPY_GameWorld.rptEquip # 暂时只取装备背包,之后有扩展再修改
|
| | | indexList = ChConfig.Pack_EquipPart_CanPlusStar[pType]
|
| | | starLVInfoDict = {}
|
| | | for i in indexList:
|
| | | starLV = ChEquip.GetEquipPartStarLV(curPlayer, pType, i)
|
| | | starLV = ChEquip.GetEquipPartPlusLV(curPlayer, pType, i)
|
| | | if starLV:
|
| | | starLVInfoDict[i] = starLV
|
| | | return starLVInfoDict
|
| | |
| | | Def_mitProduceResult, # 生产采集结果回应
|
| | | Def_mitPetEquipMerge, # 宠物装备合成回应
|
| | | Def_mitEquipInherit, # 装备继承
|
| | | Def_mitEquipPlus, # 装备加强
|
| | | Def_mitEquipStarUp, # 装备升星
|
| | | Def_mitEquipMayaPlus, # 装备玛雅加强
|
| | | Def_mitEquipAddAttr, # 装备追加
|
| | | Def_mitEquipSlotting, # 装备打孔
|
| | |
| | | # 3 紫色
|
| | | # 4 橙色
|
| | | # 5 红色
|
| | | # 6 粉色
|
| | | #===============================================================================
|
| | | # 6 粉色#===============================================================================
|
| | | Def_Item_Color_White = 1 #白
|
| | | Def_Item_Color_Blue = 2 #蓝
|
| | | Def_Item_Color_Purple = 3 #紫
|
| | |
| | | # 手游不使用C++定义 enum RoleEquipType
|
| | | # 装备位定义
|
| | | RoleEquipType = (
|
| | | retWeapon, #1 主手
|
| | | retWeapon2, #2 副手
|
| | | retHat, #3 帽子
|
| | | retClothes, #4 衣服
|
| | | retBelt, #5 腰带
|
| | | retTrousers, #6 裤子
|
| | | retShoes, #7 鞋子
|
| | | retNeck, #8 项链
|
| | | retFairyCan, #9 仙器
|
| | | retFairyCan2, #10 仙器
|
| | | retWing, #11 翅膀
|
| | | retGuard, #12 守护
|
| | | retBaldric1, #13 佩饰
|
| | | retBaldric2, #14 佩饰
|
| | | retBaldric3, #15 佩饰
|
| | | retBaldric4, #16 佩饰
|
| | | retBaldric5, #17 佩饰
|
| | | retBaldric6, #18 佩饰
|
| | | retHorse, #19 坐骑
|
| | | retWeaponSkin, #20 时装武器
|
| | | retClothesSkin, #21 时装衣服
|
| | | retWeapon2Skin, #22 时装副手
|
| | | retWeapon, #1 主手
|
| | | retWeapon2, #2 副手
|
| | | retHat, #3 帽子
|
| | | retClothes, #4 衣服
|
| | | retBelt, #5 腰带
|
| | | retTrousers, #6 裤子
|
| | | retShoes, #7 鞋子
|
| | | retGlove, #8 手套
|
| | | retNeck, #9 项链
|
| | | retFairyCan, #10 仙器1
|
| | | retFairyCan2, #11 仙器2
|
| | | retJade, #12 玉佩
|
| | | retWing, #13 翅膀
|
| | | retGuard1, #14 守护1
|
| | | retGuard2, #15 守护2
|
| | | retPeerlessWeapon, #16 绝世武器
|
| | | retPeerlessWeapon2, #17 绝世副手
|
| | | retXXX18, #18 暂无
|
| | | retHorse, #19 坐骑
|
| | | retWeaponSkin, #20 时装武器
|
| | | retClothesSkin, #21 时装衣服
|
| | | retWeapon2Skin, #22 时装副手
|
| | | retMax,
|
| | | ) = range(1, 24)
|
| | |
|
| | |
|
| | |
|
| | |
|
| | | # 神兽装备位定义
|
| | | DogzEquipPlace = (
|
| | | dogzetHorn, # 神兽兽角
|