From 9aec240e848ba4bb6b473707ad8f48aee5180141 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 29 四月 2019 10:06:52 +0800
Subject: [PATCH] 6632 子 【开发】增加新的符印属性 / 【后端】增加新的符印属性
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py | 261 +++++++++++++++++++++++++++++-----------------------
1 files changed, 145 insertions(+), 116 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 4d898b8..8717ca8 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,9 +28,12 @@
import NetPackCommon
import DataRecordPack
import PlayerSuccess
+import PlayerWeekParty
import ShareDefine
+import EventShell
+#import EquipZhuXian
-
+g_stoneCanPlaceList = [] #可镶嵌的位置
def OnLogin(curPlayer):
###登录发包同步客户端宝石信息
@@ -39,21 +42,30 @@
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,22 @@
def SetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex, changeStoneID, isBind):
### 保存装备位孔位宝石ID和绑定信息
+ isBind = 0 #现绑定无用,默认存0
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartStoneID % (equipIndex, holeIndex),
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
@@ -102,25 +126,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,35 +160,40 @@
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)
+
+ EventShell.EventRespons_InlayStone(curPlayer)
return
def DoStoneSuccess(curPlayer):
@@ -198,6 +228,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,44 +242,56 @@
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 = 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):
+ ##宝石总等级
totalStoneLV = 0
+ equipIndexList = GetAllStoneEquipIndexList()
holeIndexList = GetAllEquipPlaceHoleIndex()
gameData = GameWorld.GetGameData()
- playerEquip = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptEquip)
- for equipIndex in xrange(playerEquip.GetCount()):
- if equipIndex not in ShareDefine.RoleEquipType :
- continue
+ for equipIndex in equipIndexList:
for holeIndex in holeIndexList:
curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
if curGemID == 0:
@@ -258,11 +301,7 @@
continue
gemLV = curGem.GetEffectByIndex(0).GetEffectValue(1)
totalStoneLV += gemLV
-
- # 记录开服活动宝石总等级
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_StoneLV, totalStoneLV)
- return
-
+ return totalStoneLV
#// A3 06 宝石升级 #tagCMEquipStoneUpgrade
#struct tagCMEquipStoneUpgrade
@@ -277,21 +316,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 +346,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 +355,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 +377,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 +385,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)
return
-def __CheckStoneHoleCanUse(curPlayer, equipClassLV, holeIndex):
+def __CheckStoneHoleCanUse(curPlayer, equipStar, holeIndex, equipPackType):
##验证孔合法性
holeIndexList = GetAllEquipPlaceHoleIndex()
@@ -370,16 +412,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 +444,68 @@
# 常规孔
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})
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 +515,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 +527,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 +551,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 +564,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