From 84ede803777ff10b5cbe93b1ec0168af08f55d5e Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 13 一月 2021 18:11:26 +0800
Subject: [PATCH] 8677 【BT】【后端】跨服冲榜活动; 新增跨服活动时间管理模块、跨服榜单;跨服邮件;跨服广播优化;相关GM命令、后台工具;
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py | 67 ++++++++++++++++++++++++++-------
1 files changed, 53 insertions(+), 14 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py
index df20996..d664808 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Event/EventSrc/Operate_EquipStar.py
@@ -24,6 +24,7 @@
import DataRecordPack
import PlayerAuctionHouse
import IpyGameDataPY
+import PlayerSuccess
import GameWorld
import EventShell
import ChConfig
@@ -84,14 +85,14 @@
checkCostResult = __CheckCostInfo(curPlayer, classLV, equipPlace, curPartStar, costEquipIndexList, costEquipIDList, itemPack, autoBuy)
if not checkCostResult:
return
- curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney = checkCostResult
+ curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney = checkCostResult
if autoBuy:
isAutoBuyPreview = autoBuy == 2
# 概率未满 且 自动购买, 则需要执行拍卖行购买装备
if curRate < 100:
playerGoldPaper = curPlayer.GetGoldPaper()
- queryData = [classLV, equipPlace, curPartStar, equipPackIndex, isAutoBuyPreview, curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney, playerGoldPaper]
+ queryData = [classLV, equipPlace, curPartStar, equipPackIndex, isAutoBuyPreview, curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney, playerGoldPaper]
PlayerAuctionHouse.QueryGameServer_AuctionHouse(playerID, "EquipStarAutoBuy", queryData)
return
@@ -110,16 +111,16 @@
# 升星处理
buyEquipCostMoney = 0
- __DoEquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney, buyEquipCostMoney)
+ __DoEquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney, buyEquipCostMoney)
return
def GameServer_EquipStarAutoBuy(curPlayer, result):
## GameServer自动购买拍品结果返回
- classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney, buyEquipCostMoney = result
- __DoEquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney, buyEquipCostMoney)
+ classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney, buyEquipCostMoney = result
+ __DoEquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney, buyEquipCostMoney)
return
-def __DoEquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney, buyEquipCostMoney):
+def __DoEquipStarUp(curPlayer, classLV, equipPlace, curPartStar, equipPackIndex, curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney, buyEquipCostMoney):
## 执行装备部位升星
playerID = curPlayer.GetPlayerID()
@@ -137,10 +138,27 @@
% (curRate, isOK, lackItemCostMoney, buyEquipCostMoney), playerID)
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
- #扣材料物品
- for indexList, delCount in delItemInfoList:
+ #扣材料物品,因为可能还需要先到GameServer,再回MapServer扣除物品,故中间过程物品位置可能发生变化,所以这里不能直接通过index去扣物品,需要重新精确定位
+ for delItemID, delCount in delItemInfoDict.items():
+ if not delCount:
+ continue
+ hasEnough, indexList, findItemIsBind, lackCnt = ItemCommon.GetItem_FromPack_ByID_ExEx(delItemID, itemPack, delCount)
+ GameWorld.DebugLog(" 扣除道具: delItemID=%s,delCount=%s,indexList=%s" % (delItemID, delCount, indexList))
ItemCommon.ReduceItem(curPlayer, itemPack, indexList, delCount, True, ChConfig.ItemDel_EquipStarUp)
- ItemCommon.ReduceItem(curPlayer, itemPack, delEquipIndexList, len(delEquipIndexList), True, ChConfig.ItemDel_EquipStarUp)
+
+ delItemByGUIDDict = {}
+ for index, itemGUID in delEquipGUIDDict.items():
+ delCnt = 1
+ curEquip = itemPack.GetAt(index)
+ if not ItemCommon.CheckItemCanUse(curEquip) or curEquip.GetGUID() != itemGUID:
+ delItemByGUIDDict[itemGUID] = delCnt
+ continue
+ GameWorld.DebugLog(" 扣除装备: index=%s, %s" % (index, itemGUID))
+ ItemCommon.DelItem(curPlayer, curEquip, delCnt, recordName=ChConfig.ItemDel_EquipStarUp)
+ if delItemByGUIDDict:
+ GameWorld.DebugLog(" 扣除装备位置错误,通过GUID补扣! %s" % delItemByGUIDDict)
+ ItemCommon.DelItemByGUID(curPlayer, itemPack, delItemByGUIDDict, recordName=ChConfig.ItemDel_EquipStarUp)
+
drDict = {"PlayerID":playerID, "AccID":curPlayer.GetAccID(), "classLV":classLV, "equipPlace":equipPlace, "IsSuccess":isOK,
"curRate":curRate, "nextStar":nextStar, 'totalEquipStars':totalEquipStars,
"lackItemCostMoney":lackItemCostMoney, "buyEquipCostMoney":buyEquipCostMoney}
@@ -162,6 +180,9 @@
EventShell.EventRespons_EquipStarUp(curPlayer)
updPartStar = ChEquip.GetEquipPartStar(curPlayer, equipPackIndex)
GameWorld.DebugLog(" 装备升星 equipPackIndex=%s result=%s,curPartStar=%s,updPartStar=%s" % (equipPackIndex, result, curPartStar, updPartStar), playerID)
+
+ # 成就
+ EquipStarSuccess(curPlayer, classLV)
# 星级变更时处理
# 刷新属性
@@ -191,7 +212,7 @@
costEquipPlaceList = ipyData.GetCostEquipPlace()
costEquipColorList = ipyData.GetCostEquipColor()
isJobLimit = ipyData.GetIsJobLimit()
- delEquipIndexList = []
+ delEquipGUIDDict = {}
totalEquipStars = ChEquip.GetTotalEquipStars(curPlayer)
if not costEquipCnt:
@@ -246,9 +267,9 @@
addRate = max(minRate, min(addRate, maxRate))
curRate += addRate
GameWorld.DebugLog(" 本件装备增加概率=%s,当前总概率=%s" % (addRate, curRate))
- delEquipIndexList.append(index)
+ delEquipGUIDDict[index] = costEquip.GetGUID()
- delItemInfoList = []
+ delItemInfoDict = {}
lackItemCostMoney = 0
costItemDict = ipyData.GetCostItemDict()
if costItemDict:
@@ -267,7 +288,7 @@
GameWorld.DebugLog(" 缺少必要物品: itemID=%s,lackMoney(%s)*Count(%s)=%s" % (itemID, itemGoldPaper, lackCnt, itemGoldPaper * lackCnt))
else:
delCount = itemCnt
- delItemInfoList.append([indexList, delCount])
+ delItemInfoDict[itemID] = delCount
if totalEquipStars < IpyGameDataPY.GetFuncCfg('EquipStarCustomized'):
curRate = 100
@@ -277,6 +298,24 @@
if curRate >= IpyGameDataPY.GetFuncCfg("EquipStarRate", 4): # 优化高概率体验
curRate = 100
- return curRate, delEquipIndexList, delItemInfoList, lackItemCostMoney
+ return curRate, delEquipGUIDDict, delItemInfoDict, lackItemCostMoney
+def EquipStarSuccess(curPlayer, classLV):
+ ipyDataList = IpyGameDataPY.GetIpyGameDataByCondition('EquipPlaceIndexMap', {'ClassLV':classLV}, True)
+ if not ipyDataList:
+ return
+
+ starCountDict = {}
+ for ipyData in ipyDataList:
+ index = ipyData.GetGridIndex()
+ equipStar = ChEquip.GetEquipPartStar(curPlayer, index)
+ if not equipStar:
+ continue
+ conditionKey = (classLV, equipStar)
+ starCountDict[conditionKey] = starCountDict.get(conditionKey, 0) + 1
+
+ #GameWorld.DebugLog("升星成就数据: classLV=%s,starCountDict=%s" % (classLV, starCountDict))
+ PlayerSuccess.UpdateSuccessProgressByConditions(curPlayer, ShareDefine.SuccType_EquipStar, starCountDict)
+ return
+
--
Gitblit v1.8.0