#!/usr/bin/python # -*- coding: GBK -*- # # @todo: µ±Ç°ÉñÊÞ£¨°üÀ¨×°±¸£©ÊôÐÔÏÈçÉúÃü£©+xx%£¬¿É¶àÅä # # @author: Alee # @date 2018-1-20 ÏÂÎç02:50:26 # @version 1.0 # # @note: # #--------------------------------------------------------------------- #µ¼Èë import ChConfig import PlayerControl import ShareDefine import IpyGameDataPY import PlayerDogz import ChEquip #--------------------------------------------------------------------- ## buffÏßÐÔÔö¼ÓÊôÐÔ # @param defender Buff³ÐÊÜÕß # @param curEffect ¼¼ÄÜЧ¹û # @param calcDict ¼¼ÄÜЧ¹ûÀÛ¼Ó×ܱí # @return None def OnCalcBuffEx(defender, curEffect, calcDict, curBuff): attrType = curEffect.GetEffectValue(1) attrList = GetTheDogzAttr(defender, curEffect.GetEffectValue(2)) value = int(attrList[2].get(attrType, 0)*curEffect.GetEffectValue(0)*1.0/ChConfig.Def_MaxRateValue) calcDict[attrType] = calcDict.get(attrType, 0) + value return ## ·µ»ØbuffÀàÐÍ£¬ÏßÐÔÓë·ñ # @param # @return None # @remarks º¯ÊýÏêϸ˵Ã÷. def GetCalcType(): return ChConfig.TYPE_Linear # Ö¸¶¨ÉñÊÞÊôÐÔ def GetTheDogzAttr(curPlayer, dogzID): allAttrList = [{} for _ in range(4)] dogzEquipPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptDogzEquip) equipPackCount = dogzEquipPack.GetCount() ipyData = IpyGameDataPY.GetIpyGameData("Dogz", dogzID) if not ipyData: return allAttrList # 1. »ù´¡ÊôÐÔ attrTypeList = ipyData.GetBaseAttrTypes() attrValueList = ipyData.GetBaseAttrValues() if attrTypeList and len(attrTypeList) == len(attrValueList): for attrIndex, baseAttrID in enumerate(attrTypeList): baseAttrValue = attrValueList[attrIndex] PlayerControl.CalcAttrDict_Type(baseAttrID, baseAttrValue, allAttrList) #GameWorld.DebugLog(" »ù´¡ÊôÐÔ: baseAttrID=%s,baseAttrValue=%s, %s" % (baseAttrID, baseAttrValue, allAttrList)) # 2. ×°±¸ÊôÐÔ startIndex = (dogzID - 1) * PlayerDogz.DogzEquipCount for equipIndex in range(startIndex, startIndex + PlayerDogz.DogzEquipCount): if equipIndex < 0 or equipIndex >= equipPackCount: break curEquip = dogzEquipPack.GetAt(equipIndex) if curEquip.IsEmpty(): continue #itemID = curEquip.GetItemTypeID() # ×°±¸»ù´¡ÊôÐÔ for effIndex in xrange(curEquip.GetEffectCount()): curEffect = curEquip.GetEffectByIndex(effIndex) if not curEffect or not curEffect.GetEffectID(): break effID = curEffect.GetEffectID() if not effID or effID == ChConfig.Def_Effect_DogzEquipPlusExp: continue effValue = curEffect.GetEffectValue(0) PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrList) #GameWorld.DebugLog(" ×°±¸»ù´¡: itemID=%s,effID=%s,effValue=%s, %s" % (itemID, effID, effValue, allAttrList)) # Ç¿»¯ÊôÐÔ curPlusLV = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetDogzEquipPlus, 0) plusIpyData = IpyGameDataPY.GetIpyGameData("DogzEquipPlus", curEquip.GetEquipPlace(), curPlusLV) if plusIpyData: plusAttrTypeList = plusIpyData.GetPlusAttrTypes() plusAttrValueList = plusIpyData.GetPlusAttrValues() if plusAttrTypeList and len(plusAttrTypeList) == len(plusAttrValueList): for plusIndex, plusAttrID in enumerate(plusAttrTypeList): plusAttrValue = plusAttrValueList[plusIndex] PlayerControl.CalcAttrDict_Type(plusAttrID, plusAttrValue, allAttrList) #GameWorld.DebugLog(" ×°±¸Ç¿»¯: itemID=%s,plusAttrID=%s, plusAttrValue=%s, %s" % (itemID, plusAttrID, plusAttrValue, allAttrList)) # ´«ÆæÊôÐÔ ChEquip.CalcAttr_LegendAttr(curPlayer, curEquip, allAttrList) return allAttrList