From 516f33feb5fe68e90f4d9497b74d67ed52c1cfde Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 22 二月 2019 10:12:51 +0800
Subject: [PATCH] 6273 【后端】【1.6】七日巡礼和节日巡礼增加祈愿条件

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py |  148 ++++++++++++++++++++++++++++---------------------
 1 files changed, 85 insertions(+), 63 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 cc6f62a..b9bd568 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
@@ -30,6 +30,7 @@
 import PlayerSuccess
 import PlayerWeekParty
 import ShareDefine
+import EquipZhuXian
 
 
 
@@ -47,8 +48,10 @@
     stoneCanPlaceList = []      
     for stoneTypeIndex in xrange(1, GemTypeCount + 1):
         #循环宝石类型对应的装备位
-        stoneCanPlaceList += IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
-    
+        placeList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneTypeIndex, 1)
+        for place in placeList:
+            if place not in stoneCanPlaceList:
+                stoneCanPlaceList.append(place)
     return stoneCanPlaceList
 
 def GetAllEquipPlaceHoleIndex():
@@ -89,6 +92,17 @@
                                        changeStoneID * ChConfig.Def_Stone_SaveStoneInfoXNumber + isBind) 
     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
@@ -103,22 +117,23 @@
     playerID = curPlayer.GetPlayerID()
     
     # 验证背包类型合法性
-    equipIndex = clientData.EquipIndex
+    equipPlace = clientData.EquipIndex
     stoneIndex = clientData.StoneIndex
     holeIndex = clientData.HoleIndex
     
-    GameWorld.DebugLog("宝石镶嵌: equipIndex=%s,stoneIndex=%s,holeIndex=%s" % (equipIndex, stoneIndex, holeIndex), playerID)
+    GameWorld.DebugLog("宝石镶嵌: equipPlace=%s,stoneIndex=%s,holeIndex=%s" % (equipPlace, stoneIndex, holeIndex), playerID)
+    equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
     
     #获得装备位装备实例
-    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):
@@ -137,32 +152,32 @@
     stoneEffType = curStoneEff.GetEffectValue(0)
     stoneCanPlaceList = IpyGameDataPY.GetFuncEvalCfg("GemType%s" % stoneEffType, 1)
     
-    if equipIndex not in stoneCanPlaceList:
+    if equipPlace not in stoneCanPlaceList:
         GameWorld.Log("该宝石不可镶嵌在该装备位!stoneItemID=%s,stoneEffType=%s,stoneCanPlaceList=%s,equipPlace=%s" 
-                      % (stoneItemID, stoneEffType, stoneCanPlaceList, equipIndex), playerID)
+                      % (stoneItemID, stoneEffType, stoneCanPlaceList, equipPlace), playerID)
         return
     
     equipClassLV = ItemCommon.GetItemClassLV(curEquip)
-    if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex):
+    if not __CheckStoneHoleCanUse(curPlayer, equipClassLV, 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, {"EquipPlace":equipPlace, "HoleIndex":holeIndex})
     
     isBind = 1 if isBind else 0
     
     # 变更宝石孔宝石信息
-    __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, stoneItemID, isBind, "EquipStone", True)
+    __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, stoneItemID, isBind, "EquipStone", True)
     
 #    #镶嵌成功
 #    if not curEquip.GetIsBind():
 #        ItemControler.SetItemIsBind(curEquip, True)
     
     # 刷新属性
-    RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, True)
+    RefreshAttrByStoneAction(curPlayer, equipPackType, True)
     
     #同步客户端
-    Sycn_StoneHoleInfo(curPlayer, [equipIndex])
+    Sycn_StoneHoleInfo(curPlayer, [equipPlace])
     #成就
     DoStoneSuccess(curPlayer)
     return
@@ -199,6 +214,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
@@ -212,36 +228,37 @@
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(playerIndex)
     playerID = curPlayer.GetPlayerID()
     # 验证背包类型合法性
-    equipIndex = clientData.EquipIndex
+    equipPlace = clientData.EquipIndex
     holeIndex = clientData.HoleIndex
-    GameWorld.DebugLog("宝石摘除: equipIndex=%s,holeIndex=%s" % (equipIndex, holeIndex), playerID)
+    GameWorld.DebugLog("宝石摘除: equipPlace=%s,holeIndex=%s" % (equipPlace, holeIndex), playerID)
     
+    equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
     #获得装备位装备实例
-    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, equipPlace, holeIndex)[0]
     
     if not stoneID:
         GameWorld.DebugLog("孔为空或不存在宝石!")
         return
     
-    __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, 0, 0, "StonePick", True)
+    __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, 0, 0, "StonePick", True)
     
     # 刷新属性
-    RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False)
+    RefreshAttrByStoneAction(curPlayer, equipPackType, False)
     
     #同步客户端
-    Sycn_StoneHoleInfo(curPlayer, [equipIndex])
+    Sycn_StoneHoleInfo(curPlayer, [equipPlace])
     
     totalStoneLV = GetTotalStoneLV(curPlayer)
     # 记录开服活动宝石总等级
@@ -282,21 +299,21 @@
     playerID = curPlayer.GetPlayerID()
     
     # 验证背包类型合法性
-    equipIndex = clientData.EquipIndex
+    equipPlace = clientData.EquipIndex
     holeIndex = clientData.HoleIndex
     upWay = clientData.UpWay
-    GameWorld.DebugLog("宝石升级: equipPlace=%s,holeIndex=%s" % (equipIndex, holeIndex), playerID)
-    
+    GameWorld.DebugLog("宝石升级: equipPlace=%s,holeIndex=%s" % (equipPlace, holeIndex), playerID)
+    equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
     #获得装备位装备实例
-    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, equipPlace, holeIndex)
     if stoneID == 0:
         GameWorld.DebugLog("孔为空或不存在宝石!")      
         return      
@@ -312,12 +329,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"
@@ -327,6 +339,10 @@
     if not needCount:
         return
     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
@@ -340,7 +356,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
@@ -348,25 +364,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})
+                                        {"EquipPlace":equipPlace, "HoleIndex":holeIndex})
         if hasBind:
             stoneIsBind = True
         
     
-    __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False)
+    __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False)
     
     # 刷新属性
-    RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False)
+    RefreshAttrByStoneAction(curPlayer, equipPackType, False)
     
     #同步客户端
-    Sycn_StoneHoleInfo(curPlayer, [equipIndex])
+    Sycn_StoneHoleInfo(curPlayer, [equipPlace])
     
     DoStoneSuccess(curPlayer)
     return
 
-def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex):
+def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex, equipPackType):
     ##验证孔合法性
     
     holeIndexList = GetAllEquipPlaceHoleIndex()
@@ -375,7 +391,10 @@
         return False
     
     openCommHoleCnt = 0 # 已经开放装备常规孔数
-    gemOpenClassLVList = IpyGameDataPY.GetFuncEvalCfg("GemOpen", 1)
+    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:
             openCommHoleCnt = holeCnt
@@ -412,32 +431,33 @@
     
     return True
 
-def __DoChangeEquipHoleStone(curPlayer, equipIndex, holeIndex, changeStoneID, isBind, eventName, isPickoff):
+def __DoChangeEquipHoleStone(curPlayer, equipPlace, holeIndex, changeStoneID, isBind, eventName, isPickoff):
     ## 变更玩家装备孔宝石
     
     #获得装备位孔索引宝石存储信息
-    stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)
+    stoneID, stoneIsBind = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)
     #保存装备位孔位上宝石ID和绑定状态
-    SetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex, changeStoneID, isBind)
+    SetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex, changeStoneID, isBind)
     
     if isPickoff and stoneID:
+        equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
         itemCount = 1
         # 摘除的宝石都绑定
-        if ItemCommon.CheckPackHasSpace(curPlayer, IPY_GameWorld.rptItem):
+        if ItemCommon.CheckPackHasSpace(curPlayer, stonePackType):
             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}])
+                                         [stonePackType], 
+                                         event=[ChConfig.ItemGive_StonePickoff, False, {"EquipPlace":equipPlace, "HoleIndex":holeIndex}])
         else:
             PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], [[stoneID, 1, stoneIsBind]])
             
-    DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {'equipIndex':equipIndex,"holeIndex":holeIndex, "stoneID":stoneID, 'changeStoneID':changeStoneID})    
+    DataRecordPack.DR_StoneItemChange(curPlayer, eventName, {'equipPlace':equipPlace,"holeIndex":holeIndex, "stoneID":stoneID, 'changeStoneID':changeStoneID})    
     return
 
 
 def RefreshAttrByStoneAction(curPlayer, packType, isNeedNotify):
     ## 宝石刷新属性
     # 装备等级改变,判断是否为玩家身上的装备,如果是的话刷新玩家属性
-    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)
@@ -446,14 +466,16 @@
         #刷新所有属性
         playControl = PlayerControl.PlayerControl(curPlayer)
         playControl.RefreshPlayerAttrState()
-        
+    elif packType == ShareDefine.rptZhuXianEquip:
+        EquipZhuXian.RefreshZhuXianAttr(curPlayer)
     return
 
 
-def DoMoveEquipStone(curPlayer, equipIndex): 
+def DoMoveEquipStone(curPlayer, equipPlace): 
     ###替换装备时宝石转移
-    equipPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
-    curEquip = equipPack.GetAt(equipIndex)
+    equipPackType, stonePackType, placeIndex = GetPackTypeByEquipPlace(equipPlace)
+    equipPack = curPlayer.GetItemManager().GetPack(equipPackType)
+    curEquip = equipPack.GetAt(placeIndex)
     if not ItemCommon.CheckItemCanUse(curEquip):
         return
     
@@ -474,10 +496,10 @@
     for holeIndex in xrange(maxEquipHoleCnt):      
         if holeIndex < openEquipHoleCnt:
             continue
-        curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
+        curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipPlace, holeIndex)[0]
         if curGemID == 0:
             continue       
-        pickoffHoleList.append([equipIndex, holeIndex])
+        pickoffHoleList.append([equipPlace, holeIndex])
         
     #没有开启普通装备孔,需摘除VIP孔
     if not openEquipHoleCnt:
@@ -486,13 +508,13 @@
         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, equipPlace, holeIndex)[0]
             if curGemID == 0:                             
                 continue
-            pickoffHoleList.append([equipIndex, holeIndex])
+            pickoffHoleList.append([equipPlace, holeIndex])
             
     # 脱装备的外层刷属性, 这里不刷
-    __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, "EquipChange", False)
+    __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, "EquipChange", False)
     return
 
 def OnVIPTimeOut(curPlayer):
@@ -518,7 +540,7 @@
     #===============================================================================================
     return  
 
-def __DoSysPickoffEquipStone(curPlayer, pickoffHoleList, eventName, isRefreshAttr):
+def __DoSysPickoffEquipStone(curPlayer, equipPackType, stonePackType, pickoffHoleList, eventName, isRefreshAttr):
     ## 系统摘除宝石
     
     if not pickoffHoleList:
@@ -528,7 +550,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)
@@ -547,7 +569,7 @@
         PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], mailItemInfoList)
         
     if isRefreshAttr:
-        RefreshAttrByStoneAction(curPlayer, IPY_GameWorld.rptEquip, False)
+        RefreshAttrByStoneAction(curPlayer, equipPackType, False)
     
     if equipIndexList:
         Sycn_StoneHoleInfo(curPlayer, equipIndexList)

--
Gitblit v1.8.0