| | |
| | | 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
|