From 957597f4baf9db39d67dfc37f09757d269cd9ec0 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期五, 26 九月 2025 11:32:47 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(孙策技能;按回合触发伤害的dot支持单buff可算多层伤害;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py | 553 ------------------------------------------------------- 1 files changed, 0 insertions(+), 553 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py index 1d0363f..48a75d3 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ChEquip.py @@ -16,16 +16,9 @@ #------------------------------------------------------------------------------ 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): @@ -72,13 +65,6 @@ 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 @@ -87,71 +73,6 @@ # 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 @@ -164,220 +85,11 @@ # 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={}): @@ -395,81 +107,7 @@ # 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+是否有套装 @@ -521,198 +159,7 @@ 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 -- Gitblit v1.8.0