From 8eec7c10e8d56fad0159556eb1ef7f3d6d68a479 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 26 一月 2021 11:40:17 +0800
Subject: [PATCH] 8710 【开发】【主干】【BT2】根据世界等级配置奖励(集字活动支持按世界等级配置不同奖励);
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py | 291 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 196 insertions(+), 95 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
index e670e3c..672fbf9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipPlus.py
@@ -33,6 +33,8 @@
import ChConfig
import ChEquip
import EventShell
+import ChPyNetSendPack
+import NetPackCommon
#-------------------------------------------------------------------------------------------
#===============================================================================
@@ -58,15 +60,16 @@
# 判断 1.装备 2.最高强化等级, 3.铜钱数
if packType not in ChConfig.Pack_EquipPart_CanPlusStar:
- GameWorld.DebugLog("packType not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
+ #GameWorld.DebugLog("packType not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
return
+
ipyData = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'GridIndex':index})
if not ipyData:
return
equipPlace = ipyData.GetEquipPlace()
- indexList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
- if equipPlace not in indexList:
- GameWorld.Log(" index not in ChConfig.Pack_EquipPart_CanPlusStar", playerID)
+ equipPlaceList = ChConfig.Pack_EquipPart_CanPlusStar[packType]
+ if equipPlace not in equipPlaceList:
+ #GameWorld.Log("index=%s, equipPlace=%s not in ChConfig.Pack_EquipPart_CanPlusStar" % (index, equipPlace), playerID)
return
# 暂不判断开启等级由客户端处理
@@ -74,109 +77,126 @@
curPack = curPlayer.GetItemManager().GetPack(packType)
curEquip = curPack.GetAt(index)
if not curEquip or curEquip.IsEmpty():
- GameWorld.DebugLog("OnEquipMayaPlus() equip is empty")
+ GameWorld.DebugLog("equip is empty")
return
- maxPlusLV = ItemCommon.GetItemMaxPlusLV(curPlayer, index, curEquip)
- curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
- if curPartPlusLV >= maxPlusLV:
- GameWorld.Log("OnEquipMayaPlus:curPartPlusLV(%s) >= maxPlusLV(%s)" % (curPartPlusLV, maxPlusLV), playerID)
- return
-
- # 强化处理
- result = DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index)
-
- updPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
- #GameWorld.Log(" result=%s,curStarLV=%s,updStarLV=%s" % (result, curPartPlusLV, updPartStarLV), playerID)
- if result == ChConfig.Def_ComposeState_None:
- return
-
- #===========================================================================
- # curPlayer.Sync_MakeItemAnswer(ShareDefine.Def_mitEquipMayaPlus, result)
-
- # 每日活动
- PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_EquipPlus)
- PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)
- #===========================================================================
-
-
- # 强化变更时处理
- if curPartPlusLV != updPartPlusLV:
- DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))
- # 增加强化成就
- PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlus, 1)
- EventShell.EventRespons_EquipPlus(curPlayer, ipyData.GetClassLV(), updPartPlusLV)
- return
-
-
-
-## 开始装备强化
-# @param index 为装备位
-# @return
-def DoLogic_EquipMayaPlus(curPlayer, curEquip, packType, index):
- result = ChConfig.Def_ComposeState_None
-
findType = ChEquip.GetEquipPlusType(curEquip)
- if findType == -1:
- return result
+ if not findType:
+ return
curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
- ipyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartPlusLV)
- if not ipyData:
+ classLV = ItemCommon.GetItemClassLV(curEquip)
+ plusMaxIpyData = IpyGameDataPY.GetIpyGameData("ItemPlusMax", findType, classLV)
+ if not plusMaxIpyData:
return
- costSilver = ipyData.GetCostCount()
-
- if not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver):
- # 金币不足,返回
- return result
-
- totalExp = ipyData.GetTotalExp()
- curExp = ChEquip.GetEquipPartProficiency(curPlayer, packType, index) + ipyData.GetAddExp()
-
- if curExp >= totalExp:
- #升级
- curPartPlusLV = __EquipMayaPlusChange(curPlayer, packType, curEquip, index)
- curExp = curExp - totalExp
+ plusLVMax = plusMaxIpyData.GetPlusLVMax()
+ if curPartPlusLV >= plusLVMax:
+ #GameWorld.DebugLog("强化达到本阶最大等级,无法强化! classLV=%s,plusLVMax=%s,curPartPlusLV=%s" % (classLV, plusLVMax, curPartPlusLV))
+ return
+ plusIpyData = IpyGameDataPY.GetIpyGameData("ItemPlus", findType, curPartPlusLV)
+ if not plusIpyData:
+ return
+ costSilver = plusIpyData.GetCostCount()
+ costItemInfo = plusIpyData.GetCostItemInfo()
+ if not costSilver and not costItemInfo:
+ #GameWorld.DebugLog("已到强化最大等级! curPartPlusLV=%s" % curPartPlusLV, playerID)
+ return
+
+ curEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, index) # 进化等级
+ nextEvolveLV = curEvolveLV + 1
+ evolveIpyData = IpyGameDataPY.GetIpyGameDataNotLog('EquipPlusEvolve', equipPlace, nextEvolveLV)
+ if not evolveIpyData:
+ return
+ maxPlusLV = evolveIpyData.GetNeedPlusLV()
+ if curPartPlusLV >= maxPlusLV:
+ GameWorld.Log("已到当前强化最大等级,进化后增加强化等级上限! curPartPlusLV(%s) >= maxPlusLV(%s), curEvolveLV=%s"
+ % (curPartPlusLV, maxPlusLV, curEvolveLV), playerID)
+ return
+
+ if costSilver and not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver):
+ GameWorld.DebugLog("铜钱不足,无法强化! costSilver=%s" % costSilver)
+ return
+
+ costItemID, costItemCount = 0, 0
+ if costItemInfo:
+ costItemID, costItemCount = costItemInfo
+ itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+ hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(costItemID, itemPack, costItemCount)
+ if not hasEnough:
+ GameWorld.DebugLog("材料不足,无法强化! costItemID=%s, costItemCount=%s" % (costItemID, costItemCount))
+ return
+ if costSilver:
+ PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)
+
+ if costItemID:
+ ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, costItemCount, True, ChConfig.ItemDel_EquipPlus)
+
+ isLVUp = False
+ curExp = 0
+ addExp = plusIpyData.GetAddExp()
+ totalExp = plusIpyData.GetTotalExp()
+ if addExp and totalExp:
+ curExp = ChEquip.GetEquipPartProficiency(curPlayer, packType, index) + addExp
+ if curExp >= totalExp:
+ curExp = curExp - totalExp
+ isLVUp = True
+ else:
+ isLVUp = True
+
+ if isLVUp:
+ curPartPlusLV += 1
+ __EquipMayaPlusChange(curPlayer, packType, curEquip, index, curPartPlusLV)
+
+ #DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartPlusLV)
ChEquip.SetEquipPartProficiency(curPlayer, packType, index, curExp)
ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, index)
- # 支付金币
- PlayerControl.PayMoney(curPlayer, IPY_GameWorld.TYPE_Price_Silver_Money, costSilver, isNotify=False)
+ PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_EquipPlus)
+ PlayerActLogin.AddLoginAwardActionCnt(curPlayer, ChConfig.Def_LoginAct_EquipPlus, 1)
+ return
- DataRecordPack.DR_UpStarLVSuccess(curPlayer, curExp, curPartPlusLV)
- return ChConfig.Def_ComposeState_Sucess
-
-
-
-## 玛雅加强等级改变
-# @param curPlayer: 玩家
-# @param packType: 背包类型
-# @param curEquip: 当前装备
-# @param succeedRate: 成功率
-# @param failStarLV: 失败时的强化数
-# @return
-def __EquipMayaPlusChange(curPlayer, packType, curEquip, index):
- curPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
- updPlusLV = curPlusLV + 1
+def __EquipMayaPlusChange(curPlayer, packType, curEquip, index, updPlusLV):
+ ## 玛雅加强等级改变
+
ChEquip.SetEquipPartPlusLV(curPlayer, packType, index, curEquip, updPlusLV)
broadCastLVList = IpyGameDataPY.GetFuncEvalCfg("StrengthenLevelBroadCast", 1)
- #GameWorld.DebugLog("PlusLVChange index=%s,updPlusLV=%s,broadCastLVList=%s" % (index, updPlusLV, broadCastLVList))
if updPlusLV in broadCastLVList:
itemID = curEquip.GetItemTypeID()
- superItemInfo = ItemCommon.GetNotifySuperItemInfo(curPlayer, curEquip, index)
- msgParamList = [curPlayer.GetPlayerName(), itemID, superItemInfo, updPlusLV]
+ userData = curEquip.GetUserData()
+ guid = ItemCommon.CacheNotifyEquipDetailInfo(curPlayer, curEquip)
+ msgParamList = [curPlayer.GetPlayerName(), itemID, userData, guid, updPlusLV]
PlayerControl.WorldNotify(0, "StrengthenCongratulation", msgParamList)
- # 成就
- #PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_EquipPlusLV, 1, [updPlusLV])
-
- #任务触发
- #EventShell.EventRespons_OnEquipPartStarUp(curPlayer, setLV)
+ classLV = ItemCommon.GetItemClassLV(curEquip)
+
+ DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV)
+ # 强化成就
+ __UpdateEquipPlusSuccess(curPlayer, classLV)
+ EventShell.EventRespons_EquipPlus(curPlayer, classLV, updPlusLV)
+
# 开服活动数据
- OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_PlusLV, ChEquip.GetTotalPlusLV(curPlayer))
- return updPlusLV
+ #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Plus, ChEquip.GetTotalPlusLV(curPlayer))
+ return
+def __UpdateEquipPlusSuccess(curPlayer, classLV):
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True)
+ if not ipyDataList:
+ return
+
+ packType = IPY_GameWorld.rptEquip
+ plusLVCountDict = {}
+ for ipyData in ipyDataList:
+ index = ipyData.GetGridIndex()
+ plusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, index)
+ if not plusLV:
+ continue
+ conditionKey = (classLV, plusLV)
+ plusLVCountDict[conditionKey] = plusLVCountDict.get(conditionKey, 0) + 1
+
+ #GameWorld.DebugLog("强化成就数据: classLV=%s,plusLVCountDict=%s" % (classLV, plusLVCountDict))
+ PlayerSuccess.UpdateSuccessProgressByConditions(curPlayer, ShareDefine.SuccType_EquipPlus, plusLVCountDict)
+ return
def DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV):
#先刷装备BUFF 再计算属性
@@ -205,28 +225,109 @@
if not ItemCommon.CheckItemCanUse(curEquip):
return
curEvolveLV = ChEquip.GetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex)
- maxEvolveLV = ItemCommon.GetItemMaxPlusEvolveLV(curPlayer, equipPackindex, curEquip)
- if curEvolveLV >= maxEvolveLV:
- GameWorld.DebugLog('装备强化进化, 已达最大进化等级equipPackindex=%s, maxEvolveLV=%s'%(equipPackindex, maxEvolveLV))
- return
nextEvolveLV = curEvolveLV + 1
equipPlace = curEquip.GetEquipPlace()
ipyData = IpyGameDataPY.GetIpyGameData('EquipPlusEvolve', equipPlace, nextEvolveLV)
if not ipyData:
return
+ needPlusLV = ipyData.GetNeedPlusLV()
+ curPartPlusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, equipPackindex)
+ if curPartPlusLV < needPlusLV:
+ GameWorld.DebugLog("强化等级不足,无法进化! curPartPlusLV=%s < needPlusLV=%s, nextEvolveLV=%s"
+ % (curPartPlusLV, needPlusLV, nextEvolveLV))
+ return
+
costItemDict = ipyData.GetCostItem()
delItemDict = {}
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
for itemID, itemCnt in costItemDict.items():
hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(itemID, itemPack, itemCnt)
if not hasEnough:
- GameWorld.DebugLog('装备强化进化 材料不足itemID= %s,itemCnt=%s'%(itemID, itemCnt))
+ GameWorld.DebugLog('装备强化进化 材料不足itemID= %s,itemCnt=%s' % (itemID, itemCnt))
return
delItemDict[tuple(indexList)] = itemCnt
for itemIndexList, delCnt in delItemDict.items():
- ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_EquipPlusEvolve)
-
+ ItemCommon.ReduceItem(curPlayer, itemPack, itemIndexList, delCnt, True, ChConfig.ItemDel_EquipPlus)
+
ChEquip.SetEquipPartPlusEvolveLV(curPlayer, packType, equipPackindex, nextEvolveLV)
DoLogic_OnEquipPartStarLVChange(curPlayer, packType, ItemCommon.GetItemClassLV(curEquip))
ChEquip.NotifyEquipPartPlusLV(curPlayer, packType, equipPackindex)
+ EventShell.EventRespons_EquipPlusEvolve(curPlayer, nextEvolveLV)
return
+
+
+#// A5 C7 激活大师强化等级 #tagCMActivateMasterPlusLV
+#
+#struct tagCMActivateMasterPlusLV
+#{
+# tagHead Head;
+# BYTE ClassLV; // 所属装备阶
+# WORD MasterPlusLV; // 大师强化等级
+#};
+def OnActivateMasterPlusLV(index, clientData, tick):
+
+ curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+ classLV = clientData.ClassLV
+ actMasterPlusLV = clientData.MasterPlusLV
+
+ curMasterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV)
+ if curMasterPlusLV >= actMasterPlusLV:
+ # 已经激活过了
+ GameWorld.DebugLog("已经激活过该强化大师等级了! actMasterPlusLV=%s,curMasterPlusLV=%s" % (actMasterPlusLV, curMasterPlusLV))
+ return
+
+ ipyData = IpyGameDataPY.GetIpyGameDataByCondition("ItemPlusMaster", {"ClassLV":classLV, "MasterPlusLV":actMasterPlusLV}, False, False)
+ if not ipyData:
+ GameWorld.DebugLog("不存在该强化大师等级! actMasterPlusLV=%s" % actMasterPlusLV)
+ return
+
+ packType = IPY_GameWorld.rptEquip
+ # 判断可否激活
+ for equipPlace in ChConfig.EquipPlace_Base:
+ ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
+ if not ipyData:
+ return
+ equipIndex = ipyData.GetGridIndex()
+ plusLV = ChEquip.GetEquipPartPlusLV(curPlayer, packType, equipIndex)
+ if plusLV < actMasterPlusLV:
+ GameWorld.DebugLog("部位强化等级不足,无法激活强化大师! equipPlace=%s,equipIndex=%s,plusLV=%s < %s"
+ % (equipPlace, equipIndex, plusLV, actMasterPlusLV))
+ return
+
+ GameWorld.DebugLog("激活强化大师等级! classLV=%s,actMasterPlusLV=%s" % (classLV, actMasterPlusLV))
+
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV, actMasterPlusLV)
+
+ SyncEquipMasterPlusLVInfo(curPlayer, classLV)
+ ChEquip.ChangeEquipEffectByPlusMaster(curPlayer, classLV)
+ #刷新所有属性
+ DoLogic_OnEquipPartStarLVChange(curPlayer, packType, classLV)
+ return
+
+def SyncEquipMasterPlusLVInfo(curPlayer, classLV=0, isForce=False):
+ ## 同步大师强化等级信息
+ if not classLV:
+ needSyncClassLVList = xrange(1, IpyGameDataPY.GetFuncCfg('EquipMaxClasslv') + 1)
+ else:
+ needSyncClassLVList = [classLV]
+
+ masterPlusLVInfoList = []
+ for classLV in needSyncClassLVList:
+ masterPlusLV = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_EquipPartMasterPlusLV % classLV)
+ if not masterPlusLV and not isForce:
+ continue
+ lvInfo = ChPyNetSendPack.tagMCMasterPlusLV()
+ lvInfo.ClassLV = classLV
+ lvInfo.MasterPlusLV = masterPlusLV
+ masterPlusLVInfoList.append(lvInfo)
+
+ if not masterPlusLVInfoList:
+ return
+
+ clientPack = ChPyNetSendPack.tagMCMasterPlusLVInfo()
+ clientPack.MasterPlusLVInfoList = masterPlusLVInfoList
+ clientPack.Count = len(masterPlusLVInfoList)
+ NetPackCommon.SendFakePack(curPlayer, clientPack)
+ return
+
+
--
Gitblit v1.8.0