From 6fcf3513ccde191e067c8dfd8279cccedf95eb77 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 17 五月 2019 19:22:25 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 新版
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStone.py | 104 ++++++++++++++++++++++++++-------------------------
1 files changed, 53 insertions(+), 51 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 14c4633..e34e150 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,14 +30,15 @@
import PlayerSuccess
import PlayerWeekParty
import ShareDefine
-import EquipZhuXian
+import EventShell
+#import EquipZhuXian
g_stoneCanPlaceList = [] #可镶嵌的位置
-def OnLogin(curPlayer):
- ###登录发包同步客户端宝石信息
- Sycn_StoneHoleInfo(curPlayer)
- return
+#def OnLogin(curPlayer):
+# ###登录发包同步客户端宝石信息
+# Sycn_StoneHoleInfo(curPlayer)
+# return
def GetAllStoneEquipIndexList():
###得到所有可镶嵌宝石装备位列表
@@ -95,9 +96,31 @@
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):
@@ -144,7 +167,7 @@
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
@@ -162,6 +185,7 @@
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)
@@ -184,12 +208,14 @@
# ItemControler.SetItemIsBind(curEquip, True)
# 刷新属性
- RefreshAttrByStoneAction(curPlayer, equipPackType, True)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, True, classLV)
#同步客户端
Sycn_StoneHoleInfo(curPlayer, [equipPackIndex])
#成就
DoStoneSuccess(curPlayer)
+
+ EventShell.EventRespons_InlayStone(curPlayer)
return
def DoStoneSuccess(curPlayer):
@@ -262,10 +288,15 @@
GameWorld.DebugLog("孔为空或不存在宝石!")
return
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':equipPackIndex})
+ if not ipyData:
+ return
+ classLV = ipyData.GetClassLV()
+
__DoChangeEquipHoleStone(curPlayer, equipPackIndex, holeIndex, 0, 0, "StonePick", True)
# 刷新属性
- RefreshAttrByStoneAction(curPlayer, equipPackType, False)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, False, classLV)
#同步客户端
Sycn_StoneHoleInfo(curPlayer, [equipPackIndex])
@@ -278,23 +309,7 @@
def GetTotalStoneLV(curPlayer):
##宝石总等级
- totalStoneLV = 0
- 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 holeIndex in holeIndexList:
- curGemID = GetEquipIndexStoneIDAndIsBand(curPlayer, equipIndex, holeIndex)[0]
- if curGemID == 0:
- continue
- curGem = gameData.GetItemByTypeID(curGemID)
- if not curGem:
- continue
- gemLV = curGem.GetEffectByIndex(0).GetEffectValue(1)
- totalStoneLV += gemLV
- return totalStoneLV
+ return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalStoneLV)
#// A3 06 宝石升级 #tagCMEquipStoneUpgrade
#struct tagCMEquipStoneUpgrade
@@ -348,6 +363,10 @@
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:
@@ -384,7 +403,7 @@
__DoChangeEquipHoleStone(curPlayer, equipPackIndex, holeIndex, upgradeStoneID, stoneIsBind, "StoneUpgrade", False)
# 刷新属性
- RefreshAttrByStoneAction(curPlayer, equipPackType, False)
+ RefreshAttrByStoneAction(curPlayer, equipPackType, False, classLV)
#同步客户端
Sycn_StoneHoleInfo(curPlayer, [equipPackIndex])
@@ -462,20 +481,20 @@
return
-def RefreshAttrByStoneAction(curPlayer, packType, isNeedNotify):
+def RefreshAttrByStoneAction(curPlayer, packType, isNeedNotify, classLV):
## 宝石刷新属性
# 装备等级改变,判断是否为玩家身上的装备,如果是的话刷新玩家属性
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)
+ #elif packType == ShareDefine.rptZhuXianEquip:
+ # EquipZhuXian.RefreshZhuXianAttr(curPlayer)
return
@@ -528,24 +547,6 @@
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, equipPackType, stonePackType, pickoffHoleList, eventName, isRefreshAttr):
@@ -576,8 +577,9 @@
equipIndexList.append(equipIndex)
PlayerControl.SendMailByKey("GemToPlayer", [curPlayer.GetPlayerID()], mailItemInfoList)
- if isRefreshAttr:
- RefreshAttrByStoneAction(curPlayer, equipPackType, False)
+ #目前只有脱装备会触发,暂时屏蔽,由脱装备触发刷属性
+ #if isRefreshAttr:
+ # RefreshAttrByStoneAction(curPlayer, equipPackType, False)
if equipIndexList:
Sycn_StoneHoleInfo(curPlayer, equipIndexList)
--
Gitblit v1.8.0