| | |
| | | import ShareDefine
|
| | | import EquipZhuXian
|
| | |
|
| | |
|
| | | g_stoneCanPlaceList = [] #可镶嵌的位置
|
| | |
|
| | | def OnLogin(curPlayer):
|
| | | ###登录发包同步客户端宝石信息
|
| | |
| | |
|
| | | def GetAllStoneEquipIndexList():
|
| | | ###得到所有可镶嵌宝石装备位列表
|
| | | |
| | | global g_stoneCanPlaceList
|
| | | if g_stoneCanPlaceList:
|
| | | return g_stoneCanPlaceList
|
| | | #获得宝石类型数量
|
| | | GemTypeCount = IpyGameDataPY.GetFuncCfg("GemTypeCount")
|
| | | #获得所有可镶嵌宝石装备位
|
| | | stoneCanPlaceList = [] |
| | | g_stoneCanPlaceList = [] |
| | | for stoneTypeIndex in xrange(1, GemTypeCount + 1):
|
| | | #循环宝石类型对应的装备位
|
| | | placeList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
|
| | | for place in placeList:
|
| | | if place not in stoneCanPlaceList:
|
| | | stoneCanPlaceList.append(place)
|
| | | return stoneCanPlaceList
|
| | | ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'EquipPlace':place}, True)
|
| | | if not ipyDataList:
|
| | | continue
|
| | | for ipyData in ipyDataList:
|
| | | gridIndex = ipyData.GetGridIndex()
|
| | | if gridIndex not in g_stoneCanPlaceList:
|
| | | g_stoneCanPlaceList.append(gridIndex)
|
| | | return g_stoneCanPlaceList
|
| | |
|
| | | def GetAllEquipPlaceHoleIndex():
|
| | | ### 得到装备位所有孔位
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenClassLVList) # 最大装备阶级开放孔数
|
| | | gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenNeedStarList) # 最大装备阶级开放孔数
|
| | |
|
| | | gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1)
|
| | | maxHoleVipCnt = len(gemOpenVipList)# 最大Vip开放孔数
|
| | |
| | |
|
| | | def GetPackTypeByEquipPlace(equipPlace):
|
| | | ##目前支持镶嵌普通装备、诛仙装备
|
| | | if equipPlace in ShareDefine.ZhuXianEquipPlace:
|
| | | equipPackType = ShareDefine.rptZhuXianEquip
|
| | | stonePackType = ShareDefine.rptZhuXianItem
|
| | | placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
|
| | | else:
|
| | | equipPackType = IPY_GameWorld.rptEquip
|
| | | stonePackType = IPY_GameWorld.rptItem
|
| | | placeIndex = equipPlace
|
| | | # if equipPlace in ShareDefine.ZhuXianEquipPlace:
|
| | | # equipPackType = ShareDefine.rptZhuXianEquip
|
| | | # stonePackType = ShareDefine.rptZhuXianItem
|
| | | # placeIndex = EquipZhuXian.GetZhuXianEquipIndexByPlace(equipPlace)
|
| | | # else:
|
| | | equipPackType = IPY_GameWorld.rptEquip
|
| | | stonePackType = IPY_GameWorld.rptItem
|
| | | placeIndex = equipPlace
|
| | | return equipPackType, stonePackType, placeIndex
|
| | |
|
| | | #//A3 04 宝石镶嵌或替换 #tagCMEquipEnchase
|
| | |
| | | % (stoneItemID, stoneEffType, stoneCanPlaceList, equipPlace), playerID)
|
| | | return
|
| | |
|
| | | equipClassLV = ItemCommon.GetItemClassLV(curEquip)
|
| | | if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
|
| | | equipStar = ChEquip.GetEquipPartStar(curEquip)
|
| | | if not __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
|
| | | return
|
| | |
|
| | | # 扣除宝石
|
| | |
| | | DoStoneSuccess(curPlayer)
|
| | | return
|
| | |
|
| | | def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
|
| | | def __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
|
| | | ##验证孔合法性
|
| | |
|
| | | holeIndexList = GetAllEquipPlaceHoleIndex()
|
| | |
| | | return False
|
| | |
|
| | | openCommHoleCnt = 0 # 已经开放装备常规孔数
|
| | | if equipPackType == ShareDefine.rptZhuXianEquip:
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 2)
|
| | | else:
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
|
| | | if equipClassLV >= openClassLV:
|
| | | |
| | | gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | for holeCnt, openStar in enumerate(gemOpenNeedStarList, 1):
|
| | | if equipStar >= openStar:
|
| | | openCommHoleCnt = holeCnt
|
| | |
|
| | | # VIP孔
|
| | | if holeIndex >= ChConfig.Def_Stone_VipHole:
|
| | |
|
| | | if openCommHoleCnt <= 0:
|
| | | GameWorld.Log("装备未开启任何普通宝石孔,无法开启VIP孔位! equipClassLV=%s,openCommHoleCnt=%s" % (equipClassLV, openCommHoleCnt))
|
| | | GameWorld.Log("装备未开启任何普通宝石孔,无法开启VIP孔位! equipStar=%s,openCommHoleCnt=%s" % (equipStar, openCommHoleCnt))
|
| | | return False
|
| | | gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1)
|
| | |
|
| | |
| | |
|
| | | # 常规孔
|
| | | elif holeIndex >= openCommHoleCnt:
|
| | | GameWorld.Log("该装备宝石孔为开放!equipClassLV=%s,holeIndex=%s,openCommHoleCnt=%s" |
| | | % (equipClassLV, holeIndex, openCommHoleCnt), curPlayer.GetPlayerID())
|
| | | GameWorld.Log("该装备宝石孔为开放!equipStar=%s,holeIndex=%s,openCommHoleCnt=%s" |
| | | % (equipStar, holeIndex, openCommHoleCnt), curPlayer.GetPlayerID())
|
| | | return False
|
| | |
|
| | | return True
|
| | |
| | | return
|
| | |
|
| | |
|
| | | def DoMoveEquipStone(curPlayer, equipPlace): |
| | | def DoMoveEquipStone(curPlayer, equipPackIndex): |
| | | ###替换装备时宝石转移
|
| | | equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
|
| | | equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex)
|
| | | equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
|
| | | curEquip = equipPack.GetAt(placeIndex)
|
| | | if not ItemCommon.CheckItemCanUse(curEquip):
|
| | | return
|
| | |
|
| | | #获得装备阶级孔信息
|
| | | gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenClassLVList) # 最大装备阶级开放孔数
|
| | | #获得装备星级孔信息
|
| | | gemOpenNeedStarList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
|
| | | maxEquipHoleCnt = len(gemOpenNeedStarList) # 最大装备星级开放孔数
|
| | |
|
| | | openEquipHoleCnt = 0 # 已经开放孔数
|
| | | equipClassLV = ItemCommon.GetItemClassLV(curEquip)
|
| | | for holeCnt, openClassLV in enumerate(gemOpenClassLVList, 1):
|
| | | if equipClassLV >= openClassLV:
|
| | | partStar = ChEquip.GetEquipPartStarByRank(curPlayer, equipPackIndex, curEquip)
|
| | | for holeCnt, openStar in enumerate(gemOpenNeedStarList, 1):
|
| | | if partStar >= openStar:
|
| | | openEquipHoleCnt = holeCnt
|
| | |
|
| | | #需要拆卸宝石的孔列表
|
| | |
| | | for holeIndex in xrange(maxEquipHoleCnt):
|
| | | if holeIndex < openEquipHoleCnt:
|
| | | continue
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0]
|
| | | if curGemID == 0:
|
| | | continue
|
| | | pickoffHoleList.append([equipPlace, holeIndex])
|
| | | pickoffHoleList.append([equipPackIndex, holeIndex])
|
| | |
|
| | | #没有开启普通装备孔,需摘除VIP孔
|
| | | if not openEquipHoleCnt:
|
| | |
| | | maxVipHoleCnt = len(gemOpenVipList)# 最大VIP开放孔数
|
| | | #判断VIP等级孔信息
|
| | | for holeIndex in xrange(ChConfig.Def_Stone_VipHole, ChConfig.Def_Stone_VipHole + maxVipHoleCnt):
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
|
| | | curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0]
|
| | | if curGemID == 0:
|
| | | continue
|
| | | pickoffHoleList.append([equipPlace, holeIndex])
|
| | | pickoffHoleList.append([equipPackIndex, holeIndex])
|
| | |
|
| | | # 脱装备的外层刷属性, 这里不刷
|
| | | __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, "EquipChange", False)
|