hxp
2019-05-05 18a10a74bd18363b8a325044d0cec5e4838531a3
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/EquipZhuXian.py
@@ -28,6 +28,7 @@
import SkillCommon
import PyGameData
import ChConfig
import ChEquip
import random
@@ -46,10 +47,22 @@
    ## 获取诛仙装备位是否解锁
    # @param equipPlaceIndex: 注意传入的参数是装备位索引
    equipPlace = GetZhuXianEquipPlaceByIndex(equipPlaceIndex)
    placeUnlockDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 1, {})  # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
    if str(equipPlace) not in placeUnlockDict:
    placeUnlockDict = IpyGameDataPY.GetConfigEx("EquipZhuXianUnlock") # 诛仙装备位对应解锁所需诛仙塔层数 {"装备位":诛仙塔层数, ...} 没配的默认解锁
    if not placeUnlockDict:
        placeUnlockDict = {}
        ipyDataMgr = IpyGameDataPY.IPY_Data()
        for index in xrange(ipyDataMgr.GetZhuXianTowerCount()):
            ipyData = ipyDataMgr.GetZhuXianTowerByIndex(index)
            unlockEquipPlace = ipyData.GetUnLockEquipPlace()
            if not unlockEquipPlace:
                continue
            towerID = ipyData.GetID()
            placeUnlockDict[unlockEquipPlace] = towerID
        IpyGameDataPY.SetConfigEx("EquipZhuXianUnlock", placeUnlockDict)
        GameWorld.DebugLog("加载诛仙塔解锁装备位: placeUnlockDict=%s" % placeUnlockDict)
    if equipPlace not in placeUnlockDict:
        return True
    needTowerLV = placeUnlockDict[str(equipPlace)]
    needTowerLV = placeUnlockDict[equipPlace]
    curTowerLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ZhuXianTowerPassLV)  # 已过关的诛仙塔层数
    return curTowerLV >= needTowerLV
@@ -98,7 +111,7 @@
    
    zhuXianItemPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem)
    curEquip = zhuXianItemPack.GetAt(itemIndex)
    if not ItemCommon.CheckItemCanUse(curEquip):
    if not ItemCommon.CheckItemCanUse(curEquip) or ItemControler.GetIsAuctionItem(curEquip):
        GameWorld.DebugLog("物品为空或不可用: itemIndex=%s" % itemIndex, playerID)
        return
    if not ItemCommon.GetIsZhuXianEquip(curEquip):
@@ -130,7 +143,7 @@
    destEquip = zhuXianEquipPack.GetAt(reqEquipPlaceIndex)
    desItemID, desUserData = [0, ''] if destEquip.IsEmpty() else [destEquip.GetItemTypeID(), destEquip.GetUserData()]
    srcItemID, srcUserData = curEquip.GetItemTypeID(), curEquip.GetUserData()
    if not ItemCommon.DoLogicSwitchItem(curPlayer, curEquip, destEquip, ShareDefine.rptZhuXianEquip):
    if not ItemCommon.DoLogicSwitchItem(curPlayer, destEquip, curEquip, ShareDefine.rptZhuXianEquip):
        return
    dataDict = {'dotype':'EquipZhuXianItem', 'desItemID':desItemID, 'desUserData':desUserData, 'srcItemID':srcItemID, 'srcUserData':srcUserData}
    DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_EquipChange, dataDict)
@@ -171,12 +184,13 @@
def RefreshZhuXianAttr(curPlayer):
    CalcZhuXianAttr(curPlayer)
    PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
    #CalcZhuXianAttr(curPlayer)
    #PlayerControl.PlayerControl(curPlayer).RefreshPlayerAttrState()
    return
def CalcZhuXianAttr(curPlayer):
    return
    ## 刷新诛仙属性
    playerID = curPlayer.GetPlayerID()
    PyGameData.g_zhuXianSkillAddPerDict.pop(playerID, None)
@@ -184,10 +198,11 @@
    
    allAttrList = [{} for _ in range(4)]
    allAttrListZXSuit = [{} for _ in range(4)]
    allAttrListZXStone = [{} for _ in range(4)]
    equipScoreTotal = 0  #为解决装备评分、战力不一致的情况,装备战力改为由评分作为参数计算战力
    equipPlaceClassLVDict = {}  #装备位对应装备阶 {装备位:阶, ...}
    equipPlaceBaseAttrDict = {}  #装备位对应基础属性字典 {装备位:{属性ID:value, ...}, ...}
    equipPlaceStoneLVDict = {}  #装备位对应宝石等级 {装备位:[宝石等级,..], ...}
    attrIDSkillPlusDict = IpyGameDataPY.GetFuncEvalCfg("SkillPlusAttrID", 1, {})  # 属性ID对应影响的技能TypeID列表 {属性ID:[技能TypeID列表, ...], ...}
    addAttrIDList = range(ShareDefine.Def_Effect_SkillAddPer1, ShareDefine.Def_Effect_SkillAddPer7 + 1)
    reduceAttrIDList = range(ShareDefine.Def_Effect_SkillReducePer1, ShareDefine.Def_Effect_SkillReducePer7 + 1)
@@ -229,7 +244,11 @@
                    zxSkillPlusAttrDict[legendAttrID] = zxSkillPlusAttrDict.get(legendAttrID, 0) + legendAttrValue
                else:
                    PlayerControl.CalcAttrDict_Type(legendAttrID, legendAttrValue, allAttrList)
        #宝石属性
        gemlvList = ChEquip.CalcEquipStone_Effect(curPlayer, equipPlace, allAttrListZXStone)
        equipPlaceStoneLVDict[equipPlace] = gemlvList
#    GameWorld.DebugLog("诛仙装备属性: allAttrList=%s" % (allAttrList))
#    GameWorld.DebugLog("    zxSkillPlusAttrDict=%s" % (zxSkillPlusAttrDict))
#    GameWorld.DebugLog("    equipPlaceClassLVDict=%s" % (equipPlaceClassLVDict))
@@ -260,6 +279,10 @@
                               ShareDefine.Def_Effect_ZXRuyiAttrPer:ShareDefine.zxetRuyi,
                               ShareDefine.Def_Effect_ZXPendantAttrPer:ShareDefine.zxetPendant,
                               ShareDefine.Def_Effect_ZXRingAttrPer:ShareDefine.zxetRing,
                               ShareDefine.Def_Effect_ZXWeaponAttrPer:ShareDefine.zxetWeapon1,
                               ShareDefine.Def_Effect_LXWeaponAttrPer:ShareDefine.zxetWeapon2,
                               ShareDefine.Def_Effect_XXWeaponAttrPer:ShareDefine.zxetWeapon3,
                               ShareDefine.Def_Effect_JXWeaponAttrPer:ShareDefine.zxetWeapon4,
                               }
    suitPlaceGroupDict = IpyGameDataPY.GetFuncEvalCfg("EquipZhuXian", 2, {})
    for suitType, placeGroupList in suitPlaceGroupDict.items():
@@ -302,15 +325,51 @@
                    PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXSuit)
            else:
                PlayerControl.CalcAttrDict_Type(suitEffID, suitEffValue, allAttrListZXSuit)
    #宝石共鸣属性
    #GameWorld.DebugLog('equipPlaceStoneLVDict=%s'%equipPlaceStoneLVDict)
    needStoneCnt = IpyGameDataPY.GetFuncCfg('GemResonance')
    for suitType, placeGroupList in suitPlaceGroupDict.items():
        suitType = int(suitType)
        groupStoneLVList = []
        for place in placeGroupList:
            groupStoneLVList += equipPlaceStoneLVDict.get(place, [])
        if len(groupStoneLVList) < needStoneCnt:
            continue
        groupStoneLVList.sort(reverse=True)
        shareStoneLV = min(groupStoneLVList[:needStoneCnt])
        GameWorld.DebugLog("    激活诛仙宝石共鸣: suitType=%s, shareStoneLV=%s" % (suitType, shareStoneLV))
        stoneAttrIpyData = IpyGameDataPY.GetIpyGameData("ZhuXianStoneAttr", suitType, shareStoneLV)
        if not stoneAttrIpyData:
            continue
        attrIDList = stoneAttrIpyData.GetAttrIDList()
        attrValueList = stoneAttrIpyData.GetAttrValueList()
        if len(attrIDList) != len(attrValueList):
            continue
        for i, effID in enumerate(attrIDList):
            effValue = attrValueList[i]
            if effID in suitAttrIDPlusPlaceDict:
                plusPlace = suitAttrIDPlusPlaceDict[effID]
                if plusPlace not in equipPlaceBaseAttrDict:
                    continue
                plusEffDict = equipPlaceBaseAttrDict[plusPlace]
                #GameWorld.DebugLog("            plusPlace=%s,plusEffDict=%s" % (plusPlace, plusEffDict))
                for plusEffID, plusEffValue in plusEffDict.items():
                    addValue = int(plusEffValue * (10000 + effValue) / 10000.0)
                    #GameWorld.DebugLog("                plusEffID=%s,plusEffValue=%s,addValue=%s" % (plusEffID, plusEffValue, addValue))
                    PlayerControl.CalcAttrDict_Type(plusEffID, addValue, allAttrListZXStone)
            else:
                PlayerControl.CalcAttrDict_Type(effID, effValue, allAttrListZXStone)
    # 保存计算值
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
    PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquip, allAttrList)
    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipSuit, allAttrListZXSuit)
    #PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ZXEquipStone, allAttrListZXStone)
    
    #计算装备基础属性附加战力 (目前组成: 评分战力 + ...)
    equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
    GameWorld.DebugLog("诛仙装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
    curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
    #curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ZhuXian, equipFightPowerEx)
    return
@@ -399,7 +458,7 @@
            PlayerControl.SendMailByKey("DefaultLackSpace", [curPlayer.GetPlayerID()], prizeItemList)
        else:
            for giveItemID, itemCnt in giveItemDict.items():
                ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, True, [IPY_GameWorld.rptItem], True)
                ItemControler.GivePlayerItem(curPlayer, giveItemID, itemCnt, 0, [IPY_GameWorld.rptItem])
    
    #通知结果
    packData = ChPyNetSendPack.tagMCZhuXianDecomposeResult()