#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # #------------------------------------------------------------------------------- ##@package ChEquip # ×°±¸Âß¼­´¦Àí # # @author alee # @date 2017-07-29 00:30 # @version 1.0 # # ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ #------------------------------------------------------------------------------ #"""Version = 2017-07-29 00:30""" #------------------------------------------------------------------------------ import IPY_GameWorld import GameWorld import ItemControler import PlayerControl import ChConfig import ItemCommon import ShareDefine import ChPyNetSendPack import NetPackCommon import IpyGameDataPY import OpenServerCampaign import FormulaControl import PlayerOnline def RefreshRoleEquipAttr(curPlayer): ## Ë¢ÐÂÖ÷¹«×°±¸ÊôÐÔ CalcRoleEquipAttr(curPlayer) PlayerOnline.GetOnlinePlayer(curPlayer).RefreshRoleAttr() return def CalcRoleEquipAttr(curPlayer): ## ¼ÆËãÖ÷¹«×°±¸ÊôÐÔ playerID = curPlayer.GetPlayerID() mainEquipAttrDict = {} packType = IPY_GameWorld.rptEquip equipPack = curPlayer.GetItemManager().GetPack(packType) # Ö÷×°±¸ for equipPlace in ChConfig.Def_MainEquipPlaces: equipIndex = equipPlace - 1 if equipIndex < 0 or equipIndex >= equipPack.GetCount(): continue curEquip = equipPack.GetAt(equipIndex) if not curEquip or curEquip.IsEmpty(): continue #itemColor = curEquip.GetItemColor() baseAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrID) baseAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetBaseAttrValue) if baseAttrIDCnt == baseAttrValueCnt: for i in xrange(baseAttrIDCnt): attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrID, i) attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetBaseAttrValue, i) mainEquipAttrDict[attrID] = mainEquipAttrDict.get(attrID, 0) + attrValue legendAttrIDCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrID) legendAttrValueCnt = curEquip.GetUserAttrCount(ShareDefine.Def_IudetLegendAttrValue) if legendAttrIDCnt == legendAttrValueCnt: for i in xrange(legendAttrIDCnt): attrID = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrID, i) attrValue = curEquip.GetUserAttrByIndex(ShareDefine.Def_IudetLegendAttrValue, i) mainEquipAttrDict[attrID] = mainEquipAttrDict.get(attrID, 0) + attrValue GameWorld.DebugLog("Ö÷Ïß×°±¸ÊôÐÔ: %s" % mainEquipAttrDict, playerID) PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_MainEquip, mainEquipAttrDict) return ## Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä # @param self ÀàʵÀý # @return ·µ»ØÖµÎÞÒâÒå # @remarks Ë¢ÐÂ×°±¸¶ÔÈËÎïÊôÐԵĸıä def RefreshPlayerEquipAttribute(curPlayer, classLV=0): return #// A3 18 ÁéÆ÷Í»ÆÆ #tagCMLingQiEquipBreak # #struct tagCMLingQiEquipBreak #{ # tagHead Head; # DWORD ItemID; //Í»ÆÆµÄÎïÆ·ID #}; def OnLingQiEquipBreak(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) breakItemID = clientData.ItemID ipyData = IpyGameDataPY.GetIpyGameData('LingQiAttr', breakItemID) if not ipyData: return nextItemID = ipyData.GetNextItemID() #Í»ÆÆºóµÄÎïÆ·ID if not IpyGameDataPY.GetIpyGameData('LingQiAttr', nextItemID): return breakItemData = GameWorld.GetGameData().GetItemByTypeID(breakItemID) nextItemData = GameWorld.GetGameData().GetItemByTypeID(nextItemID) if not breakItemData or not nextItemData: return equipIndex = ItemCommon.GetEquipPackIndex(breakItemData) if equipIndex != ItemCommon.GetEquipPackIndex(nextItemData): GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·ºÍÍ»ÆÆºóµÄÎïÆ·²»ÊÇͬ¸ö×°±¸Î»£¡breakItemID=%s,nextItemID=%s" % (breakItemID, nextItemID)) return equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) curEquip = equipPack.GetAt(equipIndex) if not curEquip or curEquip.IsEmpty(): GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·Î´´©´÷£¡breakItemID=%s" % (breakItemID)) return if curEquip.GetEndureReduceType(): GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·ÊÇʱЧÎïÆ·£¡breakItemID=%s" % (breakItemID)) return if curEquip.GetItemTypeID() != breakItemID: GameWorld.DebugLog("Í»ÆÆµÄÎïÆ·Î´´©´÷£¡breakItemID=%s" % (breakItemID)) return costItemDict = ipyData.GetUpCostItem() itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(costItemDict, itemPack) if lackItemDict: GameWorld.DebugLog("Í»ÆÆÏûºÄÎïÆ·²»×㣡breakItemID=%s,costItemDict=%s,lackItemDict=%s" % (breakItemID, costItemDict, lackItemDict)) return #¿ÛÏûºÄ ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, 'LingQiEquipBreak') ItemCommon.DelItem(curPlayer, curEquip, 1, False, ChConfig.ItemDel_LingQiEquipBreak, {}, True) #¸øÍ»ÆÆºóÁéÆ÷ if not ItemControler.PutItemInTempSwap(curPlayer, nextItemID): GameWorld.Log("ÁéÆ÷Í»ÆÆºóID(%s)·ÅÈëÁÙʱ½»»»±³°üʧ°Ü!" % (nextItemID), curPlayer.GetID()) return ItemCommon.DoLogicSwitchItemEx(curPlayer, ShareDefine.rptTempSwap, IPY_GameWorld.rptEquip, 0, equipIndex) changeItemStarLV = 0 #curItem.GetItemStarLV() changeItemStoneCnt = 0 #curItem.GetUseStoneCount() changeItemHoleCnt = 0 #curItem.GetCanPlaceStoneCount() changeItemUseData = '' curPlayer.ChangeEquip(nextItemID, equipIndex, changeItemStarLV, changeItemHoleCnt, changeItemStoneCnt, changeItemUseData) #Ë¢ÊôÐÔ RefreshPlayerLingQiEquipAttr(curPlayer) playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() #֪ͨ½á¹û resultPack = ChPyNetSendPack.tagMCLingQiEquipBreakResult() resultPack.Clear() resultPack.MakeItemID = nextItemID NetPackCommon.SendFakePack(curPlayer, resultPack) PlayerControl.WorldNotify(0, 'SpiritOrgan', [curPlayer.GetName(), breakItemID, nextItemID]) return #// A3 27 ÁéÆ÷ÅàÑø #tagCMLingQiTrain # #struct tagCMLingQiTrain #{ # tagHead Head; # BYTE EquipPlace; //ÁéÆ÷×°±¸Î» # BYTE TrainType; //ÅàÑøÀàÐÍ£º 1-»ù´¡ÅàÑø£¬2-ÌØÊâÅàÑø£¬3-°Ù·Ö±ÈÅàÑø # WORD UseItemCnt; //ÏûºÄ²ÄÁϸöÊý #}; def OnLingQiTrain(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) equipPlace = clientData.EquipPlace # ÁéÆ÷×°±¸Î» trainType = clientData.TrainType # ÅàÑøÀàÐÍ costItemCount = clientData.UseItemCnt # ÏûºÄ²ÄÁϸöÊý trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType)) curEatItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType)) GameWorld.DebugLog("ÁéÆ÷ÅàÑø: equipPlace=%s,trainType=%s,trainLV=%s,costItemCount=%s,curEatItemCount=%s" % (equipPlace, trainType, trainLV, costItemCount, curEatItemCount)) if equipPlace not in ChConfig.EquipPlace_LingQi: return if trainType <= 0 or trainType > GetLingQiTrainTypes(equipPlace): return if trainLV <= 0: GameWorld.DebugLog(" ÅàÑøÎ´¼¤»î trainType=%s" % trainType) return trainIpyData = IpyGameDataPY.GetIpyGameData("LingQiTrain", equipPlace, trainType, trainLV) if not trainIpyData: return needRealmLV = trainIpyData.GetNeedRealmLV() curRealmLV = PlayerControl.GetTrainRealmLVReal(curPlayer, 3) if curRealmLV < needRealmLV: GameWorld.DebugLog(" ¾³½ç²»×㣬ÎÞ·¨ÅàÑø£¡ curRealmLV(%s) < needRealmLV(%s)" % (curRealmLV, needRealmLV)) return needEatCountTotal = trainIpyData.GetEatCntTotal() if not needEatCountTotal: GameWorld.DebugLog(" ¸ÃÅàÑøÒÑÂú¼¶£¡") return costItemIDList = IpyGameDataPY.GetFuncEvalCfg("LingQiTrain", 1, {}).get(str(equipPlace), []) costItemID = costItemIDList[trainType - 1] if not costItemID or not costItemCount: return costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount) lackCnt = costItemCount - bindCnt - unBindCnt if lackCnt > 0: GameWorld.DebugLog(" ÏûºÄµÀ¾ß²»×㣬ÎÞ·¨ÅàÑø!costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s" % (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt)) return delCnt = costItemCount # ¿Û³ýÏûºÄ if delCnt: ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "LingQiTrain") updClassLV = trainLV updEatItemCount = curEatItemCount + costItemCount GameWorld.DebugLog(" updEatItemCount=%s,needEatCountTotal=%s" % (updEatItemCount, needEatCountTotal)) if updEatItemCount >= needEatCountTotal: updClassLV += 1 updEatItemCount -= needEatCountTotal GameWorld.DebugLog(" ½ø½×: updClassLV=%s,updEatItemCount=%s" % (updClassLV, updEatItemCount)) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType), updClassLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType), updEatItemCount) # Éý½× if updClassLV > trainLV: pass Sync_LingQiTrainData(curPlayer, equipPlace) # Ë¢ÊôÐÔ RefreshPlayerLingQiEquipAttr(curPlayer) PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState() return def GetLingQiTrainTypes(equipPlace): return len(IpyGameDataPY.GetFuncEvalCfg("LingQiTrain", 1, {}).get(str(equipPlace), [])) def Sync_LingQiTrainData(curPlayer, equipPlace): clientPack = ChPyNetSendPack.tagMCLingQiTrainInfo() clientPack.EquipPlace = equipPlace clientPack.TrainLVList = [] clientPack.TrainItemCountList = [] for trainType in xrange(1, GetLingQiTrainTypes(equipPlace) + 1): trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType)) if trainLV == 0: trainLV = 1 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType), trainLV) clientPack.TrainLVList.append(trainLV) clientPack.TrainItemCountList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType))) clientPack.TrainTypes = len(clientPack.TrainLVList) NetPackCommon.SendFakePack(curPlayer, clientPack) return def RefreshPlayerLingQiEquipAttr(curPlayer): ''' Ë¢ÐÂÍæ¼ÒÁéÆ÷×°±¸ÊôÐÔ ''' return classLV = 0 # ÁéÆ÷½×ĬÈÏΪ0 allAttrList = [{} for _ in range(4)] lingQiAttrList = [{} for _ in range(4)] equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) equipScoreTotal = 0 lv = curPlayer.GetLV() lqAttrFormatDict = IpyGameDataPY.GetFuncEvalCfg("OutOfPrintValue", 2, {}) for equipPlace in ChConfig.EquipPlace_LingQi: ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace) if not ipyData: continue equipIndex = ipyData.GetGridIndex() curEquip = equipPack.GetAt(equipIndex) if not curEquip or curEquip.IsEmpty(): continue if not ItemCommon.CheckItemCanUseByExpireTime(curEquip): # ¹ýÆÚ continue equipScoreTotal += ItemCommon.GetEquipGearScore(curEquip) itemID = curEquip.GetItemTypeID() #»ù´¡ÊôÐÔЧ¹û for effIndex in xrange(curEquip.GetEffectCount()): curEff = curEquip.GetEffectByIndex(effIndex) effID = curEff.GetEffectID() if effID == 0: break PlayerControl.CalcAttrDict_Type(effID, curEff.GetEffectValue(0), lingQiAttrList) #ÁéÆ÷ÊôÐÔ lingQiIpyData = IpyGameDataPY.GetIpyGameDataNotLog("LingQiAttr", itemID) if lingQiIpyData: lingQiAttrIDList = lingQiIpyData.GetLingQiAttrID() lingQiAttrValueList = lingQiIpyData.GetLingQiAttrValue() for lqIndex, lqAttrID in enumerate(lingQiAttrIDList): if str(lqAttrID) in lqAttrFormatDict: attrFormat = lqAttrFormatDict[str(lqAttrID)] maxOOPValue = lingQiAttrValueList[lqIndex] lqAttrValue = eval(FormulaControl.GetCompileFormula("LingQiAttrFormat_%s" % lqAttrID, attrFormat)) else: lqAttrValue = lingQiAttrValueList[lqIndex] PlayerControl.CalcAttrDict_Type(lqAttrID, lqAttrValue, lingQiAttrList) # ÐÂÅàÑøÊôÐÔ guardTrainAttrList = [{} for _ in range(4)] wingTrainAttrList = [{} for _ in range(4)] peerlessWeaponTrainAttrList = [{} for _ in range(4)] peerlessWeapon2TrainAttrList = [{} for _ in range(4)] ipyDataMgr = IpyGameDataPY.IPY_Data() for index in xrange(ipyDataMgr.GetLingQiTrainCount()): trainIpyData = ipyDataMgr.GetLingQiTrainByIndex(index) equipPlace = trainIpyData.GetEquipPlace() trainType = trainIpyData.GetTrainType() dataTrainLV = trainIpyData.GetTrainLV() if equipPlace == ShareDefine.retGuard1: lingQiTrainAttrList = guardTrainAttrList elif equipPlace == ShareDefine.retWing: lingQiTrainAttrList = wingTrainAttrList elif equipPlace == ShareDefine.retPeerlessWeapon: lingQiTrainAttrList = peerlessWeaponTrainAttrList elif equipPlace == ShareDefine.retPeerlessWeapon2: lingQiTrainAttrList = peerlessWeapon2TrainAttrList else: continue trainLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainLV % (equipPlace, trainType)) if dataTrainLV > trainLV: continue elif dataTrainLV == trainLV: trainItemCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_LingQiTrainItemCount % (equipPlace, trainType)) else: trainItemCount = trainIpyData.GetEatCntTotal() # µÈ½×¶îÍâÊôÐÔ lvAttrTypeList = trainIpyData.GetLVAttrTypeList() lvAttrValueList = trainIpyData.GetLVAttrValueList() for i, attrID in enumerate(lvAttrTypeList): attrValue = lvAttrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue, lingQiTrainAttrList) # ÅàÑøµ¤Ôö¼ÓÊôÐÔ eatCntEverytime = trainIpyData.GetEatCntEverytime() if trainItemCount and eatCntEverytime: eatItemAttrTypeList = trainIpyData.GetEatItemAttrTypeList() eatItemAttrValueList = trainIpyData.GetEatItemAttrValueList() attrMultiple = trainItemCount / eatCntEverytime for i, attrID in enumerate(eatItemAttrTypeList): attrValue = eatItemAttrValueList[i] PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, lingQiTrainAttrList) #GameWorld.DebugLog("ÊØ»¤ÅàÑøÊôÐÔ: %s" % guardTrainAttrList) #GameWorld.DebugLog("³á°òÅàÑøÊôÐÔ: %s" % wingTrainAttrList) #GameWorld.DebugLog("ÃðÊÀÅàÑøÊôÐÔ: %s" % peerlessWeaponTrainAttrList) #GameWorld.DebugLog("ÊÉ»êÅàÑøÊôÐÔ: %s" % peerlessWeapon2TrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GuardTarin, guardTrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_WingTarin, wingTrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PeerlessWeaponTrain, peerlessWeaponTrainAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PeerlessWeapon2Train, peerlessWeapon2TrainAttrList) lqFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2)) PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_LingQi, lqFightPowerEx) #GameWorld.DebugLog("ÁéÆ÷ÊôÐÔ1: %s" % allAttrList) #GameWorld.DebugLog("ÁéÆ÷ÊôÐÔ2: %s" % lingQiAttrList) #GameWorld.DebugLog("ÁéÆ÷ÆÀ·ÖÕ½Á¦: equipScoreTotal=%s, %s" % (equipScoreTotal, lqFightPowerEx)) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQi, allAttrList) PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingQiAttr, lingQiAttrList) return def CalcAttr_LegendAttr(curPlayer, curEquip, allAttrListEquip, legendAttrDict={}): ## ¼ÆËã´«ÆæÊôÐÔ return #// A5 C6 ×°±¸²¿Î»ÐǼ¶Ì××°¼¤»î #tagCMEquipPartSuiteActivate # #struct tagCMEquipPartSuiteActivate #{ # tagHead Head; # BYTE ClassLV; // ËùÊô×°±¸½× # WORD SuiteID; // Ì××°ID # BYTE SuiteCount; // ¼þÊý # BYTE Star; // ÐÇÊý #}; def OnEquipPartSuiteActivate(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) classLV = clientData.ClassLV suiteID = clientData.SuiteID suiteCount = clientData.SuiteCount star = clientData.Star ipyDataList = IpyGameDataPY.GetIpyGameDataList('EquipSuitAttr', suiteID) if not ipyDataList: return actIpyData = None for ipyData in ipyDataList: needCount = ipyData.GetSuiteCnt() needStar = ipyData.GetStar() if suiteCount == needCount and star == needStar: actIpyData = ipyData break if not actIpyData: return activateIndex = actIpyData.GetActivateIndex() # ÕâÀï¾Í²»ÅжÏÊÇ·ñÂú×ã¼þÊý¡¢ÐÇÊýÌõ¼þÁË£¬ËãÊôÐÔµÄʱºò±¾ÉíÒ²ÊÇÌõ¼þÖ®Ò»£¬ÊÇ·ñ¼¤»îÖ»ÊǸ½¼ÓÌõ¼þ£¬ÕâÀïÖ»´¦Àí¼¤»î״̬±ä¸ü£¬ÄÜ·ñ¼¤»îǰ¶ËÅжϼ´¿É isActivate = GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex) if isActivate: return GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_EquipPartSuiteActivate, activateIndex, 1) Sync_EquipPartSuiteActivateInfo(curPlayer) #¹ã²¥ notifyMark = actIpyData.GetIsNotify() if notifyMark: PlayerControl.WorldNotify(0, 'AllStarLevelUp' if needStar else 'AllStarLevelUp2', [curPlayer.GetPlayerName(), suiteID, suiteCount, star]) RefreshPlayerEquipAttribute(curPlayer, classLV) #Ë¢ÐÂËùÓÐÊôÐÔ playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() return def Sync_EquipPartSuiteActivateInfo(curPlayer): ## ͬ²½×°±¸Î»ÐǼ¶Ì××°¼¤»î״̬ÐÅÏ¢ #keyCount = 10 ipyDataMgr = IpyGameDataPY.IPY_Data() dataCount = ipyDataMgr.GetEquipSuitAttrCount() if not dataCount: return lastIpyData = ipyDataMgr.GetEquipSuitAttrByIndex(dataCount - 1) if not lastIpyData: return keyCount = 1 + lastIpyData.GetActivateIndex() / 31 activateStateList = [] for i in xrange(keyCount): activateStateList.append(curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartSuiteActivate % i)) if activateStateList.count(0) == keyCount: return activateInfo = ChPyNetSendPack.tagMCEquipPartSuiteActivateInfo() activateInfo.SuiteActivateStateInfo = activateStateList activateInfo.Count = len(activateInfo.SuiteActivateStateInfo) NetPackCommon.SendFakePack(curPlayer, activateInfo) return def ChangeEquipEffectByPlusMaster(curPlayer, classLV): # Ç¿»¯´óÊ¦ÌØÐ§ if (classLV != GetEquipFacadeClassLV(curPlayer)): return masterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV) ## Ç¿»¯´óʦӰÏì½ÇÉ«Íâ¹ÛÏÔʾ Ç¿»¯´óʦµÈ¼¶ * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° oldEquipShowSwitch = curPlayer.GetEquipShowSwitch() updEquipShowSwitch = oldEquipShowSwitch % 1000 + oldEquipShowSwitch / 1000000 * 1000000+ 1000 * masterPlusLV GameWorld.DebugLog('Ç¿»¯´óʦӰ±ä»¯Ó°Ïì½ÇÉ«Íâ¹ÛÏÔʾ,oldEquipShowSwitch=%s,updEquipShowSwitch=%s'% (oldEquipShowSwitch, updEquipShowSwitch)) if oldEquipShowSwitch != updEquipShowSwitch: curPlayer.SetEquipShowSwitch(updEquipShowSwitch) return def ChangeEquipfacadeByHorsePetSkin(curPlayer, skinType, skinIndex): ##Æï³è¾õÐÑÍâ¹Û±ä¸ü Áé³èÍâ¹ÛË÷Òý*10000000+×øÆïÍâ¹ÛË÷Òý*1000000+Áé¸ùÌØÐ§±íkey * 1000+µÚ¼¸Ì×*10+ÊÇ·ñÓÐÌ××° oldEquipShowSwitch = curPlayer.GetEquipShowSwitch() if skinType == 1: updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 7, skinIndex) else: updEquipShowSwitch = GameWorld.ChangeDataByDigitPlace(oldEquipShowSwitch, 8, skinIndex) if oldEquipShowSwitch == updEquipShowSwitch: return curPlayer.SetEquipShowSwitch(updEquipShowSwitch) return def GetPlayerMaxEquipClassLV(curPlayer): ## »ñÈ¡Íæ¼Òµ±Ç°½âËøµÄ×°±¸½× key = "RealmEquipClassLVMap" RealmEquipClassLVMap = IpyGameDataPY.GetConfigEx(key) if not RealmEquipClassLVMap: RealmEquipClassLVMap = {} infoDict = {} ipyDataMgr = IpyGameDataPY.IPY_Data() for index in xrange(ipyDataMgr.GetEquipControlCount()): ipyData = ipyDataMgr.GetEquipControlByIndex(index) infoDict[ipyData.GetNeedRealmLV()] = ipyData.GetClassLV() needReamlLVList = infoDict.keys() needReamlLVList.sort() # ÉýÐòÅÅ for i, realmLV in enumerate(needReamlLVList): classLV = infoDict[realmLV] if i == len(needReamlLVList) - 1: RealmEquipClassLVMap[realmLV] = classLV if i == 0: continue else: preRealmLV = needReamlLVList[i - 1] preClassLV = infoDict[preRealmLV] for pRealmLV in range(preRealmLV, realmLV): RealmEquipClassLVMap[pRealmLV] = preClassLV GameWorld.DebugLog("¼ÓÔØ¾³½ç¶ÔÓ¦¿ª·Å×î´ó×°±¸½×ÉèÖÃ: %s" % RealmEquipClassLVMap) IpyGameDataPY.SetConfigEx(key, RealmEquipClassLVMap) playerRealmLV = curPlayer.GetOfficialRank() if playerRealmLV in RealmEquipClassLVMap: return RealmEquipClassLVMap[playerRealmLV] maxRealmLV = max(RealmEquipClassLVMap) if playerRealmLV >= maxRealmLV: return RealmEquipClassLVMap[maxRealmLV] return 0 #»ñÈ¡µ±Ç°Êǵڼ¸Ì××°±¸Íâ¹Û def GetEquipFacadeClassLV(curPlayer):return curPlayer.GetEquipShowSwitch()%1000/10 ## »ñÈ¡¹«¹²²¿Î»Ç¿»¯ÊìÁ·¶È def GetEquipPartProficiency(curPlayer, packType, index): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartProficiency % (packType, index)) ## ÉèÖù«¹²²¿Î»Ç¿»¯ÊìÁ·¶È def SetEquipPartProficiency(curPlayer, packType, index, value): PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartProficiency % (packType, index), value) return ## »ñÈ¡¹«¹²²¿Î»Ç¿»¯µÈ¼¶ def GetEquipPartPlusLV(curPlayer, packType, index): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusLV % (packType, index)) ## ÉèÖù«¹²²¿Î»Ç¿»¯µÈ¼¶ def SetEquipPartPlusLV(curPlayer, packType, index, curEquip, setPlusLV): befPlusLV = GetEquipPartPlusLV(curPlayer, packType, index) if befPlusLV == setPlusLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusLV % (packType, index), setPlusLV) #=========================================================================== # if curEquip and not curEquip.IsEmpty(): # curEquip.SetItemStarLV(starLV) #=========================================================================== # ͬ²½¸üÐÂÇ¿»¯×ܵȼ¶ befTotalPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV) updTotalPlusLV = max(0, befTotalPlusLV + setPlusLV - befPlusLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusLV, updTotalPlusLV) GameWorld.DebugLog("ÉèÖÃÇ¿»¯µÈ¼¶: index=%s,befPlusLV=%s,setPlusLV=%s,befTotalPlusLV=%s,updTotalPlusLV=%s" % (index, befPlusLV, setPlusLV, befTotalPlusLV, updTotalPlusLV)) return ## »ñÈ¡¹«¹²²¿Î»Ç¿»¯½ø»¯µÈ¼¶ def GetEquipPartPlusEvolveLV(curPlayer, packType, index): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)) ## ÉèÖù«¹²²¿Î»Ç¿»¯½ø»¯µÈ¼¶ def SetEquipPartPlusEvolveLV(curPlayer, packType, index, setEvolveLV): befEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index)) if befEvolveLV == setEvolveLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartPlusEvolveLV % (packType, index), setEvolveLV) # ͬ²½¸üнø»¯×ܵȼ¶ befTotalPlusEvolveLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV) updTotalPlusEvolveLV = max(0, befTotalPlusEvolveLV + setEvolveLV - befEvolveLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalPlusEvolveLV, updTotalPlusEvolveLV) GameWorld.DebugLog("ÉèÖýø»¯µÈ¼¶: index=%s,befEvolveLV=%s,setEvolveLV=%s,befTotalPlusEvolveLV=%s,updTotalPlusEvolveLV=%s" % (index, befEvolveLV, setEvolveLV, befTotalPlusEvolveLV, updTotalPlusEvolveLV)) return ## ֪ͨ¹«¹²²¿Î»Ç¿»¯µÈ¼¶ def NotifyEquipPartPlusLV(curPlayer, packType=IPY_GameWorld.rptEquip, index=None): ePartStarLVPack = ChPyNetSendPack.tagMCEquipPartPlusInfo() ePartStarLVPack.Clear() ePartStarLVPack.InfoList = [] syncIndexList = [] if index == None: equipMaxClasslv = IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') for equipPlace in ChConfig.Pack_EquipPart_CanPlusStar.get(packType, []): for classlv in xrange(1, equipMaxClasslv+1): ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classlv, equipPlace) if not ipyData: continue syncIndexList.append(ipyData.GetGridIndex()) else: syncIndexList = [index] for i in syncIndexList: ePartStarLV = ChPyNetSendPack.tagMCEquipPartPlusLV() ePartStarLV.Clear() ePartStarLV.PackType = packType ePartStarLV.EquipIndex = i ePartStarLV.EquipPartStarLV = GetEquipPartPlusLV(curPlayer, packType, i) ePartStarLV.Proficiency = GetEquipPartProficiency(curPlayer, packType, i) ePartStarLV.EvolveLV = GetEquipPartPlusEvolveLV(curPlayer, packType, i) ePartStarLVPack.InfoList.append(ePartStarLV) ePartStarLVPack.Count = len(ePartStarLVPack.InfoList) NetPackCommon.SendFakePack(curPlayer, ePartStarLVPack) return ## È«ÉíÇ¿»¯µÈ¼¶ def GetTotalPlusLV(curPlayer, isActive=True): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusLV) ## È«Éí½ø»¯µÈ¼¶ def GetTotalPlusEvolveLV(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalPlusEvolveLV) ## È«Éí³È×°¼°ÒÔÉÏ×°±¸Êý def GetEquipOrangeCount(curPlayer): return curPlayer.NomalDictGetProperty(ChConfig.Def_PlayerKey_EquipOrangeCount) # »ñȡװ±¸µÄÇ¿»¯ÀàÐÍ def GetEquipPlusType(curEquip): equipPlace = curEquip.GetEquipPlace() plusTypeDict = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelLimit", 1) if not plusTypeDict: GameWorld.ErrLog("ûÓÐÇ¿»¯ÀàÐÍÓ³Éä±í") return return plusTypeDict.get(equipPlace) # »ñÈ¡ÂúÌ××°»¯µÄ×îµÍ½×Êý£¬Èç5¼þÌ×£¬4¼þ5¼¶£¬1¼þ3¼¶£¬Ôò·µ»Ø3 def GetEquipSuitsLVByType(curPlayer, suitType, groupType): return 0 # suiteLV = 999 # equipSuitTypeDict = IpyGameDataPY.GetFuncEvalCfg('EquipSuitType') # if groupType not in equipSuitTypeDict: # return 0 # maxCnt = len(equipSuitTypeDict[groupType]) # cnt = 0 # for equipPlace in equipSuitTypeDict[groupType]: # curSuiteLV = GetEquipPartSuiteLV(curPlayer, equipPlace, suitType) # if curSuiteLV > 0: # cnt += 1 # suiteLV = min(curSuiteLV, suiteLV) # # if cnt != maxCnt: # return 0 # return 0 if suiteLV == 999 else suiteLV def SetEquipPartStar(curPlayer, index, setStarLV): #ÉèÖù«¹²²¿Î»ÐÇÊý befStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartStar % index) if befStarLV == setStarLV: return PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStar % index, setStarLV) # ͬ²½¸üÐÂÐǼ¶×ܵȼ¶ befTotalStarLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar) updTotalStarLV = max(0, befTotalStarLV + setStarLV - befStarLV) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalEquipStar, updTotalStarLV) # ¿ª·þ»î¶¯Êý¾Ý OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StarLV, updTotalStarLV) GameWorld.DebugLog("ÉèÖò¿Î»ÐǼ¶: index=%s,befStarLV=%s,setStarLV=%s,befTotalStarLV=%s,updTotalStarLV=%s" % (index, befStarLV, setStarLV, befTotalStarLV, updTotalStarLV)) 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 GetTotalEquipStars(curPlayer): ##»ñÈ¡²¿Î»×ÜÐÇÊý return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalEquipStar) ## ֪ͨ¹«¹²²¿Î»ÐÇÊý 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(1, equipMaxClasslv+1): 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