From 5bd5c3fa2b8a50fd352a895c3e87a3254c705ee7 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 26 六月 2019 10:35:30 +0800
Subject: [PATCH] 4254 【BUG】【2.0】【主干】封魔坛、世界Boss资源找回次数错误
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py | 81 +++++++++++++++++++++++++++++++++++++++-
1 files changed, 78 insertions(+), 3 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
index 7bd532f..aa034f3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/UseItem/Item_Chests.py
@@ -23,9 +23,11 @@
import IPY_GameWorld
import ItemControler
import PlayerRune
+import NPCCommon
import ChConfig
import ChItem
+import random
import math
#---------------------------------------------------------------------
@@ -45,6 +47,7 @@
costItemID = chestsIpyData.GetCostItemID()
costItemCountTotal = chestsIpyData.GetCostItemCount() * useCnt
costGoldTotal = chestsIpyData.GetCostGold() * useCnt
+ auctionItemCanSell = chestsIpyData.GetAucionItemCanSell()
if costGoldTotal and not PlayerControl.HaveMoney(curPlayer, IPY_GameWorld.TYPE_Price_Gold_Money, costGoldTotal):
return
@@ -63,8 +66,8 @@
if not awardInfo:
return
needSpaceDict, jobAwardItemList, moneyType, moneyCount, notifyItemList, updOpenCount = awardInfo
- GameWorld.DebugLog(" needSpaceDict=%s,jobAwardItemList=%s,moneyType=%s,moneyCount=%s,notifyItemList=%s,updOpenCount=%s"
- % (needSpaceDict, jobAwardItemList, moneyType, moneyCount, notifyItemList, updOpenCount))
+ GameWorld.DebugLog(" needSpaceDict=%s,jobAwardItemList=%s,moneyType=%s,moneyCount=%s,notifyItemList=%s,updOpenCount=%s,auctionItemCanSell=%s"
+ % (needSpaceDict, jobAwardItemList, moneyType, moneyCount, notifyItemList, updOpenCount, auctionItemCanSell))
for packType, needSpace in needSpaceDict.items():
packSpace = ItemCommon.GetItemPackSpace(curPlayer, packType, needSpace)
@@ -91,7 +94,8 @@
# 给奖励
syncItemList = []
for itemID, itemCount in jobAwardItemList:
- curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, False)
+ isAuctionItem = 1 if auctionItemCanSell and IpyGameDataPY.GetIpyGameDataNotLog("AuctionItem", itemID) else 0
+ curItem = ItemControler.GetOutPutItemObj(itemID, itemCount, isAuctionItem, curPlayer=curPlayer)
if not curItem:
GameWorld.ErrLog("宝箱创建奖励物品异常!chestsItemID=%s,useCnt=%s,itemID=%s,itemCount=%s,isBind=%s"
% (chestsItemID, useCnt, itemID, itemCount, isBind), curPlayer.GetPlayerID())
@@ -197,6 +201,11 @@
if awardIpyData.GetRandItemList2() and awardIpyData.GetRandTimeList2() and randItemList2DoCount:
if not __AddChestsRandAwardItem(curPlayer, chestsItemID, randItemList2DoCount, awardItemDict, awardIpyData.GetRandItemList2(), awardIpyData.GetRandTimeList2()):
return
+
+ # 装备库
+ if awardIpyData.GetPieRateDrop() or awardIpyData.GetIndepRateDrop():
+ if not __AddChestsEquipItem(curPlayer, chestsItemID, useCount, awardItemDict, awardIpyData):
+ return
# 产出特殊物品广播
needNotifyItemList = awardIpyData.GetNeedNotifyItemList()
@@ -205,6 +214,8 @@
notifyItemList = []
jobAwardItemList = []
for itemID, itemCount in awardItemDict.items():
+ if not itemCount:
+ continue
jobItemID = __GetChestsJobItem(chestsItemID, job, itemID, jobItemList)
if not jobItemID:
return
@@ -245,6 +256,7 @@
itemID = itemInfo[0] # 有配置物品ID,需判断该物品ID是否合法可开出等,支持配置空物品ID
itemData = GameWorld.GetGameData().GetItemByTypeID(itemID)
if not itemData:
+ GameWorld.ErrLog("宝箱奖励物品不存在! chestsItemID=%s,itemID=%s" % (chestsItemID, itemID))
return False
# 符印判断是否已经解锁
@@ -287,6 +299,69 @@
return True
+def __AddChestsEquipItem(curPlayer, chestsItemID, useCount, awardItemDict, awardIpyData):
+ ## 获取宝箱装备库产出
+
+ dropEquipInfoList = []
+ itemJobList = [curPlayer.GetJob()] if awardIpyData.GetIsDropJobSelf() else IpyGameDataPY.GetFuncEvalCfg("OpenJob", 1) # 掉落装备职业列表
+
+ # 饼图概率随机装备
+ pieRateDoCnt = awardIpyData.GetPieRateDoCnt() * useCount
+ pieRateDropList = awardIpyData.GetPieRateDrop() # 饼图概率掉落信息 [(概率,0),(概率,(阶,颜色)),...]
+ for _ in xrange(pieRateDoCnt):
+ dropInfo = GameWorld.GetResultByRandomList(pieRateDropList)
+ if dropInfo:
+ dropEquipInfoList.append(dropInfo)
+ GameWorld.DebugLog("饼图装备掉落结果: pieRateDoCnt=%s, %s" % (pieRateDoCnt, dropEquipInfoList))
+
+ # 独立概率随机装备
+ Def_NPCMaxDropRate = NPCCommon.Def_NPCMaxDropRate
+ indepRateDict = awardIpyData.GetIndepRateDrop() # 独立概率掉落信息 {(阶,颜色):概率,...}
+ for _ in xrange(useCount):
+ for dropInfo, rate in indepRateDict.iteritems():
+ dropRate = rate
+ mustDropCount = dropRate / Def_NPCMaxDropRate
+ dropRate = dropRate % Def_NPCMaxDropRate # 基础概率
+ GameWorld.DebugLog(" dropInfo=%s,rate=%s,mustDropCount=%s,dropRate=%s" % (dropInfo, rate, mustDropCount, dropRate))
+ curDropCount = mustDropCount
+ if GameWorld.CanHappen(dropRate, maxRate=Def_NPCMaxDropRate):
+ curDropCount += 1
+ if not curDropCount:
+ continue
+
+ for _ in xrange(curDropCount):
+ dropEquipInfoList.append(dropInfo)
+
+ GameWorld.DebugLog("装备库产出: dropEquipInfoList=%s" % dropEquipInfoList)
+
+ placeKeyListDict = IpyGameDataPY.GetFuncCfg("EquipDropPartSets", 1)
+ colorSuitRateDict = awardIpyData.GetEquipColorSuitInfo() # 装备颜色对应套装概率 {颜色:套装概率, ...}
+ colorSuitPlaceKeyInfoDict = awardIpyData.GetEquipPartKeyRateInfo() # 装备部位集合信息 {(颜色,是否套装):部位集合key, ...}
+ for classLV, color in dropEquipInfoList:
+ isSuit = 0
+ if color in colorSuitRateDict:
+ suitRate = colorSuitRateDict[color]
+ isSuit = GameWorld.CanHappen(suitRate, maxRate=Def_NPCMaxDropRate)
+ colorSuitKey = (color, isSuit)
+ if colorSuitKey not in colorSuitPlaceKeyInfoDict:
+ GameWorld.ErrLog("未配置颜色套装对应部位集合key! chestsItemID=%s,color=%s,isSuit=%s" % (chestsItemID, color, isSuit))
+ continue
+ placeKey = colorSuitPlaceKeyInfoDict[colorSuitKey]
+ jobList = itemJobList
+ if placeKey not in placeKeyListDict:
+ GameWorld.ErrLog("部位集合key不存在!chestsItemID=%s,placeKey=%s" % (chestsItemID, placeKey))
+ continue
+ placeList = placeKeyListDict[placeKey]
+ randEquipIDList = NPCCommon.__GetEquipIDList(chestsItemID, classLV, color, isSuit, placeList, itemJobList, findType="ChestsItem")
+ if not randEquipIDList:
+ continue
+ randItemID = random.choice(randEquipIDList)
+ __AddAwardItem(awardItemDict, randItemID, 1)
+ GameWorld.DebugLog("开出装备: chestsItemID=%s,itemID=%s,classLV=%s,color=%s,isSuit=%s,placeKey=%s,jobList=%s,randEquipIDList=%s"
+ % (chestsItemID, randItemID, classLV, color, isSuit, placeKey, jobList, randEquipIDList))
+
+ return True
+
def __GetChestsJobItem(chestsItemID, job, itemID, jobItemList):
## 获取宝箱物品奖励对应的职业物品, 职业从1开始
for jobItemIDList in jobItemList:
--
Gitblit v1.8.0