From 69dc81f34df6887f26cbde4fad3fab687573f5b7 Mon Sep 17 00:00:00 2001 From: xdh <xiefantasy@qq.com> Date: 星期二, 28 五月 2019 14:55:29 +0800 Subject: [PATCH] 6965 【2.0】【后端】炼丹功能精简优化 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py | 312 ++++++++++++++++++++++++++++++--------------------- 1 files changed, 185 insertions(+), 127 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py index 1a482ed..fc67321 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py @@ -28,32 +28,44 @@ import NetPackCommon import DataRecordPack import PlayerSuccess +import PlayerWeekParty import ShareDefine +import EventShell +#import EquipZhuXian +g_stoneCanPlaceList = [] #可镶嵌的位置 - -def OnLogin(curPlayer): - ###登录发包同步客户端宝石信息 - Sycn_StoneHoleInfo(curPlayer) - return +#def OnLogin(curPlayer): +# ###登录发包同步客户端宝石信息 +# Sycn_StoneHoleInfo(curPlayer) +# return 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): #循环宝石类型对应的装备位 - stoneCanPlaceList += IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1) - - return stoneCanPlaceList + placeList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1) + for place in placeList: + 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开放孔数 @@ -84,10 +96,44 @@ def SetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex, changeStoneID, isBind): ### 保存装备位孔位宝石ID和绑定信息 + befStoneID, befIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex) + if befStoneID == changeStoneID and befIsBind == isBind: + return + + isBind = 0 #现绑定无用,默认存0 PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStoneID % (equipIndex, holeIndex), - changeStoneID * ChConfig.Def_Stone_SaveStoneInfoXNumber + isBind) + changeStoneID * ChConfig.Def_Stone_SaveStoneInfoXNumber + isBind) + + # 同步更新宝石总等级 + gameData = GameWorld.GetGameData() + befStoneLV = 0 + if befStoneID: + befGem = gameData.GetItemByTypeID(befStoneID) + befStoneLV = 0 if not befGem else befGem.GetEffectByIndex(0).GetEffectValue(1) + + aftStoneLV = 0 + if changeStoneID: + aftGem = gameData.GetItemByTypeID(changeStoneID) + aftStoneLV = 0 if not aftGem else aftGem.GetEffectByIndex(0).GetEffectValue(1) + + befTotalStoneLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalStoneLV) + updTotalStoneLV = max(0, befTotalStoneLV + aftStoneLV - befStoneLV) + PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TotalStoneLV, updTotalStoneLV) + GameWorld.DebugLog("设置宝石等级: equipIndex=%s,holeIndex=%s,befStoneLV=%s,aftStoneLV=%s,befTotalStoneLV=%s,updTotalStoneLV=%s" + % (equipIndex, holeIndex, befStoneLV, aftStoneLV, befTotalStoneLV, updTotalStoneLV)) return +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 + return equipPackType, stonePackType, placeIndex #//A3 04 宝石镶嵌或替换 #tagCMEquipEnchase #struct tagCMEquipEnchase @@ -102,25 +148,26 @@ playerID = curPlayer.GetPlayerID() # 验证背包类型合法性 - equipIndex = clientData.EquipIndex + equipPackIndex = clientData.EquipIndex stoneIndex = clientData.StoneIndex holeIndex = clientData.HoleIndex - GameWorld.DebugLog("宝石镶嵌: equipIndex=%s,stoneIndex=%s,holeIndex=%s" % (equipIndex, stoneIndex, holeIndex), playerID) + GameWorld.DebugLog("宝石镶嵌: equipPackIndex=%s,stoneIndex=%s,holeIndex=%s" % (equipPackIndex, stoneIndex, holeIndex), playerID) + equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex) #获得装备位装备实例 - equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - curEquip = equipPack.GetAt(equipIndex) + equipPack = curPlayer.GetItemManager().GetPack(equipPackType) + curEquip = equipPack.GetAt(placeIndex) if not ItemCommon.CheckItemCanUse(curEquip): GameWorld.Log("目标装备为空或不可用,无法镶嵌!", playerID) return #获得宝石实例 - itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + itemPack = curPlayer.GetItemManager().GetPack(stonePackType) curStone = itemPack.GetAt(stoneIndex) - if not ItemCommon.CheckItemCanUse(curStone): + if not ItemCommon.CheckItemCanUse(curStone) or ItemControler.GetIsAuctionItem(curStone): GameWorld.Log("目标宝石为空或不可用,无法镶嵌!", playerID) return @@ -135,38 +182,43 @@ stoneEffType = curStoneEff.GetEffectValue(0) stoneCanPlaceList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneEffType, 1) - - if equipIndex not in stoneCanPlaceList: - GameWorld.Log("该宝石不可镶嵌在该装备位!stoneItemID=%s,stoneEffType=%s,stoneCanPlaceList=%s,equipPlace=%s" - % (stoneItemID, stoneEffType, stoneCanPlaceList, equipIndex), playerID) + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackIndex}) + if not ipyData: + return + classLV = ipyData.GetClassLV() + if ipyData.GetEquipPlace() not in stoneCanPlaceList: + GameWorld.Log("该宝石不可镶嵌在该装备位!stoneItemID=%s,stoneEffType=%s,stoneCanPlaceList=%s,equipPackIndex=%s" + % (stoneItemID, stoneEffType, stoneCanPlaceList, equipPackIndex), playerID) return - equipClassLV = ItemCommon.GetItemClassLV(curEquip) - if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex): + equipStar = ChEquip.GetEquipPartStarByRank(curPlayer, placeIndex, curEquip) + if not __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType): return # 扣除宝石 - ItemCommon.DelItem(curPlayer, curStone, 1, True, ChConfig.ItemDel_EquipEnchase, {"EquipPlace":equipIndex, "HoleIndex":holeIndex}) + ItemCommon.DelItem(curPlayer, curStone, 1, True, ChConfig.ItemDel_EquipEnchase, {"equipPackIndex":equipPackIndex, "HoleIndex":holeIndex}) isBind = 1 if isBind else 0 # 变更宝石孔宝石信息 - __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, stoneItemID, isBind, "EquipStone", True) + __DoChangeEquipHoleStone(curPlayer, equipPackIndex, holeIndex, stoneItemID, isBind, "EquipStone", True) # #镶嵌成功 # if not curEquip.GetIsBind(): # ItemControler.SetItemIsBind(curEquip, True) # 刷新属性 - RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, True) + RefreshAttrByStoneAction(curPlayer, equipPackType, True, classLV) #同步客户端 - Sycn_StoneHoleInfo(curPlayer, [equipIndex]) + Sycn_StoneHoleInfo(curPlayer, [equipPackIndex]) #成就 - __DoStoneSuccess(curPlayer) + DoStoneSuccess(curPlayer) + + EventShell.EventRespons_InlayStone(curPlayer) return -def __DoStoneSuccess(curPlayer): +def DoStoneSuccess(curPlayer): PlayerSuccess.ResetSuccessByType(curPlayer, ShareDefine.SuccType_InlayStone1) PlayerSuccess.ResetSuccessByType(curPlayer, ShareDefine.SuccType_InlayStone2) totalStoneLV = 0 @@ -198,6 +250,7 @@ # 记录开服活动宝石总等级 OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StoneLV, totalStoneLV) PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_StoneTotalLV, totalStoneLV) + PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, totalStoneLV, False, True) return #//A3 05 宝石摘取 #tagCMEquipStonePick @@ -211,45 +264,62 @@ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex) playerID = curPlayer.GetPlayerID() # 验证背包类型合法性 - equipIndex = clientData.EquipIndex + equipPackIndex = clientData.EquipIndex holeIndex = clientData.HoleIndex - GameWorld.DebugLog("宝石摘除: equipIndex=%s,holeIndex=%s" % (equipIndex, holeIndex), playerID) + GameWorld.DebugLog("宝石摘除: equipPackIndex=%s,holeIndex=%s" % (equipPackIndex, holeIndex), playerID) + equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex) #获得装备位装备实例 - equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - curEquip = equipPack.GetAt(equipIndex) + equipPack = curPlayer.GetItemManager().GetPack(equipPackType) + curEquip = equipPack.GetAt(placeIndex) if not ItemCommon.CheckItemCanUse(curEquip): GameWorld.Log("目标装备为空或不可用,无法镶嵌!", playerID) return #验证背包空间 - if not ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem, True): + if not ItemCommon.CheckPackHasSpace(curPlayer, stonePackType, True): return # 验证宝石 - stoneID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0] + stoneID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0] if not stoneID: GameWorld.DebugLog("孔为空或不存在宝石!") return - __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, 0, 0, "StonePick", True) + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackIndex}) + if not ipyData: + return + classLV = ipyData.GetClassLV() + + __DoChangeEquipHoleStone(curPlayer, equipPackIndex, holeIndex, 0, 0, "StonePick", True) # 刷新属性 - RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False) + RefreshAttrByStoneAction(curPlayer, equipPackType, False, classLV) #同步客户端 - Sycn_StoneHoleInfo(curPlayer, [equipIndex]) + Sycn_StoneHoleInfo(curPlayer, [equipPackIndex]) - totalStoneLV = 0 + totalStoneLV = GetTotalStoneLV(curPlayer) + # 记录开服活动宝石总等级 + OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StoneLV, totalStoneLV) + PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Stone, totalStoneLV, False, True) + return + +def GetTotalStoneLV(curPlayer): + ##宝石总等级 + return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalStoneLV) + +def GetStoneCntByLV(curPlayer, stoneLV): + ##指定等级的宝石数量 + cnt = 0 holeIndexList = GetAllEquipPlaceHoleIndex() + maxHoleCount = len(holeIndexList) + equipIndexList = GetAllStoneEquipIndexList() gameData = GameWorld.GetGameData() - playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - for equipIndex in xrange(playerEquip.GetCount()): - if equipIndex not in ShareDefine.RoleEquipType : - continue - for holeIndex in holeIndexList: + for equipIndex in equipIndexList: + for holeIndex in xrange(maxHoleCount): curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0] if curGemID == 0: continue @@ -257,12 +327,9 @@ if not curGem: continue gemLV = curGem.GetEffectByIndex(0).GetEffectValue(1) - totalStoneLV += gemLV - - # 记录开服活动宝石总等级 - OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StoneLV, totalStoneLV) - return - + if gemLV >= stoneLV: + cnt += 1 + return cnt #// A3 06 宝石升级 #tagCMEquipStoneUpgrade #struct tagCMEquipStoneUpgrade @@ -277,21 +344,21 @@ playerID = curPlayer.GetPlayerID() # 验证背包类型合法性 - equipIndex = clientData.EquipIndex + equipPackIndex = clientData.EquipIndex holeIndex = clientData.HoleIndex upWay = clientData.UpWay - GameWorld.DebugLog("宝石升级: equipPlace=%s,holeIndex=%s" % (equipIndex, holeIndex), playerID) - + GameWorld.DebugLog("宝石升级: equipPackIndex=%s,holeIndex=%s" % (equipPackIndex, holeIndex), playerID) + equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex) #获得装备位装备实例 - equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - curEquip = equipPack.GetAt(equipIndex) + equipPack = curPlayer.GetItemManager().GetPack(equipPackType) + curEquip = equipPack.GetAt(placeIndex) if not ItemCommon.CheckItemCanUse(curEquip): GameWorld.Log("目标装备为空或不可用,无法镶嵌!", playerID) return #升级宝石ID - stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex) + stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex) if stoneID == 0: GameWorld.DebugLog("孔为空或不存在宝石!") return @@ -307,12 +374,7 @@ level = curStoneEff.GetEffectValue(1) upgradeStoneID = curStoneEff.GetEffectValue(2) - stoneTypeItemIDDict = IpyGameDataPY.GetFuncEvalCfg("GemUpCostFormula", 1) - GameWorld.DebugLog("stoneEffType=%s,stoneTypeItemIDDict=%s,level=%s,upgradeStoneID=%s" - % (stoneEffType, stoneTypeItemIDDict, level, upgradeStoneID)) - if stoneEffType not in stoneTypeItemIDDict: - return - stoneTypeItemID = stoneTypeItemIDDict[stoneEffType] + GameWorld.DebugLog("stoneEffType=%s,level=%s,upgradeStoneID=%s" % (stoneEffType, level, upgradeStoneID)) if not upgradeStoneID: GameWorld.Log("该宝石已是最大级,不能升级!stoneIndex=%s,stoneItemID=%s,curEffID=%s,upgradeStoneID=%s" @@ -321,7 +383,15 @@ needCount = IpyGameDataPY.GetFuncCfg("GemUpCostFormula", 2) # 合成下一级所需宝石个数 if not needCount: return + ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackIndex}) + if not ipyData: + return + classLV = ipyData.GetClassLV() if upWay == 0: #仙玉 + stoneTypeItemIDDict = IpyGameDataPY.GetFuncEvalCfg("GemUpCostFormula", 1) + if stoneEffType not in stoneTypeItemIDDict: + return + stoneTypeItemID = stoneTypeItemIDDict[stoneEffType] unitPrice = ItemCommon.GetShopItemPrice(stoneTypeItemID, IPY_GameWorld.TYPE_Price_Gold_Money) if not unitPrice: return @@ -335,7 +405,7 @@ return else: #同级宝石 - costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, stoneItemID) + costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, stoneItemID, packType=stonePackType) if bindCnt + unBindCnt < needCount-1: GameWorld.DebugLog("同级宝石不足 %s!" % (needCount-1)) return @@ -343,25 +413,25 @@ costIndexList = (costItemIndexList[0]+costItemIndexList[1])[:2] else: costIndexList = (costItemIndexList[1]+costItemIndexList[0])[:2] - itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) + itemPack = curPlayer.GetItemManager().GetPack(stonePackType) hasBind = ItemCommon.ReduceItem(curPlayer, itemPack, costIndexList, needCount-1, False, ChConfig.ItemDel_StoneUpgrade, - {"EquipPlace":equipIndex, "HoleIndex":holeIndex}) + {"equipPackIndex":equipPackIndex, "HoleIndex":holeIndex}) if hasBind: stoneIsBind = True - __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False) + __DoChangeEquipHoleStone(curPlayer, equipPackIndex, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False) # 刷新属性 - RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False) + RefreshAttrByStoneAction(curPlayer, equipPackType, False, classLV) #同步客户端 - Sycn_StoneHoleInfo(curPlayer, [equipIndex]) + Sycn_StoneHoleInfo(curPlayer, [equipPackIndex]) - __DoStoneSuccess(curPlayer) + DoStoneSuccess(curPlayer) return -def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex): +def __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType): ##验证孔合法性 holeIndexList = GetAllEquipPlaceHoleIndex() @@ -370,16 +440,17 @@ return False openCommHoleCnt = 0 # 已经开放装备常规孔数 - 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) @@ -401,65 +472,69 @@ # 常规孔 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 -def __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, changeStoneID, isBind, eventName, isPickoff): +def __DoChangeEquipHoleStone(curPlayer, equipPackIndex, holeIndex, changeStoneID, isBind, eventName, isPickoff): ## 变更玩家装备孔宝石 #获得装备位孔索引宝石存储信息 - stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex) + stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex) #保存装备位孔位上宝石ID和绑定状态 - SetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex, changeStoneID, isBind) + SetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex, changeStoneID, isBind) if isPickoff and stoneID: + equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPackIndex) itemCount = 1 # 摘除的宝石都绑定 - if ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem): - ItemControler.GivePlayerItem(curPlayer, stoneID, itemCount, True if stoneIsBind else False, - [IPY_GameWorld.rptItem, IPY_GameWorld.rptAnyWhere], - event=[ChConfig.ItemGive_StonePickoff, False, {"EquipPlace":equipIndex, "HoleIndex":holeIndex}]) + if ItemCommon.CheckPackHasSpace(curPlayer, stonePackType): + ItemControler.GivePlayerItem(curPlayer, stoneID, itemCount, 0, + [stonePackType], + event=[ChConfig.ItemGive_StonePickoff, False, {"equipPackIndex":equipPackIndex, "HoleIndex":holeIndex}]) else: PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], [[stoneID, 1, stoneIsBind]]) - DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {"holeIndex":holeIndex, "stoneID":stoneID}) + DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {'equipPackIndex':equipPackIndex,"holeIndex":holeIndex, "stoneID":stoneID, 'changeStoneID':changeStoneID}) + EventShell.EventRespons_StoneChange(curPlayer) return -def RefreshAttrByStoneAction(curPlayer, packType, isNeedNotify): +def RefreshAttrByStoneAction(curPlayer, packType, isNeedNotify, classLV): ## 宝石刷新属性 # 装备等级改变,判断是否为玩家身上的装备,如果是的话刷新玩家属性 - if packType in [IPY_GameWorld.rptEquip, IPY_GameWorld.rptHorseEquip]: + if packType in [IPY_GameWorld.rptEquip]: #先刷装备BUFF 再计算属性 if isNeedNotify: curPlayer.SetDict(ChConfig.Def_PlayerKey_AttrActivatyNotify, ChConfig.Def_AttrActivatyNotify_Stone) - ChEquip.RefreshPlayerEquipAttribute(curPlayer) + ChEquip.RefreshPlayerEquipAttribute(curPlayer, classLV) #刷新所有属性 playControl = PlayerControl.PlayerControl(curPlayer) playControl.RefreshPlayerAttrState() - + #elif packType == ShareDefine.rptZhuXianEquip: + # EquipZhuXian.RefreshZhuXianAttr(curPlayer) return -def DoMoveEquipStone(curPlayer, equipIndex): +def DoMoveEquipStone(curPlayer, equipPackIndex): ###替换装备时宝石转移 - equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip) - curEquip = equipPack.GetAt(equipIndex) + 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 #需要拆卸宝石的孔列表 @@ -469,10 +544,10 @@ for holeIndex in xrange(maxEquipHoleCnt): if holeIndex < openEquipHoleCnt: continue - curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0] + curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0] if curGemID == 0: continue - pickoffHoleList.append([equipIndex, holeIndex]) + pickoffHoleList.append([equipPackIndex, holeIndex]) #没有开启普通装备孔,需摘除VIP孔 if not openEquipHoleCnt: @@ -481,39 +556,21 @@ maxVipHoleCnt = len(gemOpenVipList)# 最大VIP开放孔数 #判断VIP等级孔信息 for holeIndex in xrange(ChConfig.Def_Stone_VipHole, ChConfig.Def_Stone_VipHole + maxVipHoleCnt): - curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0] + curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPackIndex, holeIndex)[0] if curGemID == 0: continue - pickoffHoleList.append([equipIndex, holeIndex]) + pickoffHoleList.append([equipPackIndex, holeIndex]) # 脱装备的外层刷属性, 这里不刷 - __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, "EquipChange", False) + __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, "EquipChange", False) return def OnVIPTimeOut(curPlayer): ## VIP到期处理 #过期一样有效,屏蔽该逻辑 - #=============================================================================================== - # #获得vip等级孔信息 - # gemOpenVipList = IpyGameDataPY.GetFuncEvalCfg("GemOpenVip", 1) - # maxVipHoleCnt = len(gemOpenVipList)# 最大Vip开放孔数 - # - # #获得所有可镶嵌宝石装备位 - # stoneCanPlaceList = GetAllStoneEquipIndexList() - # #需要拆卸宝石的孔列表 - # pickoffHoleList = [] - # for equipIndex in stoneCanPlaceList: - # for holeIndex in xrange(ChConfig.Def_Stone_VipHole, ChConfig.Def_Stone_VipHole + maxVipHoleCnt): - # stoneInfo = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex) - # if not stoneInfo[0]: - # continue - # pickoffHoleList.append([equipIndex, holeIndex]) - # - # __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, "VIPChange", True) - #=============================================================================================== return -def __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, eventName, isRefreshAttr): +def __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, eventName, isRefreshAttr): ## 系统摘除宝石 if not pickoffHoleList: @@ -523,7 +580,7 @@ equipIndexList = [] stoneCount = len(pickoffHoleList) - packSpace = ItemCommon.GetItemPackSpace(curPlayer, IPY_GameWorld.rptItem, stoneCount) + packSpace = ItemCommon.GetItemPackSpace(curPlayer, stonePackType, stoneCount) if packSpace >= stoneCount: for equipIndex, holeIndex in pickoffHoleList: __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, 0, 0, eventName, True) @@ -536,13 +593,14 @@ stoneInfo = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex) mailItemInfoList.append([stoneInfo[0], 1, stoneInfo[1]]) SetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex, 0, 0) - DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {"holeIndex":holeIndex, "stoneID":stoneInfo[0]}) + DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {'changeStoneID':0,'equipIndex':equipIndex,"holeIndex":holeIndex, "stoneID":stoneInfo[0]}) if equipIndex not in equipIndexList: equipIndexList.append(equipIndex) PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], mailItemInfoList) - if isRefreshAttr: - RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False) + #目前只有脱装备会触发,暂时屏蔽,由脱装备触发刷属性 + #if isRefreshAttr: + # RefreshAttrByStoneAction(curPlayer, equipPackType, False) if equipIndexList: Sycn_StoneHoleInfo(curPlayer, equipIndexList) -- Gitblit v1.8.0