From 0584da519dfcde7f58caf78b53d1eb0570e34ec3 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 14 一月 2026 15:23:49 +0800
Subject: [PATCH] 302 【公会】BOSS讨伐-服务端(修复无讨伐次数无法进行怒气斩杀bug;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py | 102 ++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 80 insertions(+), 22 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
index a9c21b0..5a9df8e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGubao.py
@@ -25,10 +25,19 @@
import ItemControler
import PlayerOnline
import ChConfig
-import ObjPool
+# 特殊效果类型
GubaoEffType_GoldRush = 1 # 参与淘金
GubaoEffType_Arena = 2 # 参与演武场
+GubaoEffType_Tianzi = 3 # 每参加1次天子的考验
+GubaoEffType_MainLevelBoss = 4 # 每击败1只主线BOSS
+GubaoEffType_Zhanchui = 5 # 每完成1次白骨盈野
+GubaoEffType_Travel = 6 # 每游历1次(消耗体力)
+
+# 特权效果类型
+GubaoPowerType_TravelMultiRate = 1 # 游历双倍奖励概率
+GubaoPowerType_InvestMonthAwardPer = 2 # 月卡领取额外奖励
+GubaoPowerType_InvestLifeAwardPer = 3 # 永久卡领取额外奖励
def GetGubaoInfo(curPlayer, gubaoID):
info = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GubaoInfo % gubaoID)
@@ -38,7 +47,7 @@
return lv, star, layer
def SetGubaoInfo(curPlayer, gubaoID, lv, star, layer):
## 特殊效果层*100000 + 等级*100 + 星级
- info = min(layer, 99) * 100000 + min(lv, 999) * 100 + min(star, 99)
+ info = min(layer, 9999) * 100000 + min(lv, 999) * 100 + min(star, 99)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_GubaoInfo % gubaoID, info)
return
@@ -127,9 +136,24 @@
if not nextIpyData:
GameWorld.DebugLog("古宝已满星! gubaoID=%s,quality=%s,star=%s" % (gubaoID, quality, star), playerID)
return
+ qualityStarCond = nextIpyData.GetQualityStarCond() # 需同品质X个X星
needSelfCnt = nextIpyData.GetStarUPNeedSelfCnt()
needItemList = nextIpyData.GetStarUPNeedItemList()
+ if qualityStarCond and len(qualityStarCond) == 2:
+ needGBCnt, needGBStar = qualityStarCond
+ condGubaoCnt = 0
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in xrange(ipyDataMgr.GetGubaoCount()):
+ gbIpyData = ipyDataMgr.GetGubaoByIndex(index)
+ _, gbStar, _ = GetGubaoInfo(curPlayer, gbIpyData.GetGubaoID())
+ if gbIpyData.GetGubaoQuality() == quality and gbStar >= needGBStar:
+ condGubaoCnt += 1
+ if condGubaoCnt < needGBCnt:
+ GameWorld.DebugLog("古宝升星所需同品质星级古宝数不足! quality=%s,nextStar=%s,condGubaoCnt=%s < %s,needGBStar=%s"
+ % (quality, nextStar, condGubaoCnt, needGBCnt, needGBStar), playerID)
+ return
+
if needItemList:
itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList(needItemList, itemPack)
@@ -248,6 +272,7 @@
playerID = curPlayer.GetPlayerID()
attrDict = {}
+ powerDict = {}
gubaoStarDict = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
@@ -257,6 +282,8 @@
if not IsGubaoActivated(curPlayer, gubaoID):
continue
+
+ quality = ipyData.GetGubaoQuality()
lv, star, layer = GetGubaoInfo(curPlayer, gubaoID)
gubaoStarDict[gubaoID] = star
@@ -270,22 +297,41 @@
perStarAdd = BaseAttrPerStarAddList[bIndex]
attrValue = baseValue + perStarAdd * star
attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
- GameWorld.DebugLog("古宝基础属性! gubaoID=%s,star=%s,addAttr=%s,v:%s,perStar:%s,%s"
- % (gubaoID, star, BaseAttrIDList, BaseAttrValueList, BaseAttrPerStarAddList, attrDict), playerID)
+ #GameWorld.DebugLog("古宝基础属性! gubaoID=%s,star=%s,addAttr=%s,v:%s,perStar:%s,%s"
+ # % (gubaoID, star, BaseAttrIDList, BaseAttrValueList, BaseAttrPerStarAddList, attrDict), playerID)
# 特殊属性
attrID = ipyData.GetSpecAttrID()
- effType = ipyData.GetSpecEffType()
- SpecAttrValue = ipyData.GetSpecAttrValue()
- SpecAttrPerLVAdd = ipyData.GetSpecAttrPerLVAdd()
- SpecAttrPerStarAdd = ipyData.GetSpecAttrPerStarAdd()
- attrValue = SpecAttrValue + SpecAttrPerLVAdd * max(lv - 1, 0) + SpecAttrPerStarAdd * star
- if effType: # 有特殊效果类型的
- attrValue *= layer
- attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
- GameWorld.DebugLog("古宝特殊属性! gubaoID=%s,lv=%s,star=%s,effType=%s,layer=%s,attrID=%s,v=%s,perLV=%s,perStar=%s,attrValue=%s,%s"
- % (gubaoID, lv, star, effType, layer, attrID, SpecAttrValue, SpecAttrPerLVAdd, SpecAttrPerStarAdd, attrValue, attrDict), playerID)
+ if attrID:
+ effType = ipyData.GetSpecEffType()
+ layerMax = ipyData.GetSpecEffLayerMax()
+ SpecAttrValue = ipyData.GetSpecAttrValue()
+ SpecAttrPerStarAdd = ipyData.GetSpecAttrPerStarAdd()
+ specLVAttr = 0
+ lvAttrIpyData = IpyGameDataPY.GetIpyGameData("GubaoLVAttr", quality, lv)
+ if lvAttrIpyData:
+ specAttrIDList = lvAttrIpyData.GetSpecAttrIDList()
+ specAttrValueList = lvAttrIpyData.GetSpecAttrValueList()
+ for sIndex in range(min(len(specAttrIDList), len(specAttrValueList))):
+ if specAttrIDList[sIndex] == attrID:
+ specLVAttr = specAttrValueList[sIndex]
+ if not layerMax or not effType:
+ layer, layerMax = 1, 1 # 无层级限制的默认1层
+ attrValue = int((SpecAttrValue + SpecAttrPerStarAdd * star + specLVAttr / float(layerMax)) * layer)
+ attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+ #GameWorld.DebugLog("古宝特殊属性! gubaoID=%s,quality=%s,lv=%s,star=%s,effType=%s,layer=%s/%s,attrID=%s,v=%s,perStar=%s,specLVAttr=%s,attrValue=%s,%s"
+ # % (gubaoID, quality, lv, star, effType, layer, layerMax, attrID, SpecAttrValue, SpecAttrPerStarAdd, specLVAttr, attrValue, attrDict), playerID)
+ # 特权
+ powerType = ipyData.GetPowerType()
+ if powerType:
+ powerTypeValue = ipyData.GetPowerTypeValue()
+ powerValue = ipyData.GetPowerValue()
+ powerPerStarAdd = ipyData.GetPowerPerStarAdd()
+ powerValueTotal = powerValue + powerPerStarAdd * star
+ powerKey = (powerType, powerTypeValue)
+ powerDict[powerKey] = powerDict.get(powerKey, 0) + powerValueTotal
+
# 共鸣
for index in range(ipyDataMgr.GetGubaoResonanceCount()):
ipyData = ipyDataMgr.GetGubaoResonanceByIndex(index)
@@ -293,8 +339,11 @@
gubaoIDList = ipyData.GetGubaoIDList()
if not gubaoIDList:
continue
- starList = [gubaoStarDict.get(gubaoID, 0) for gubaoID in gubaoIDList]
+ starList = [gubaoStarDict.get(gubaoID, -1) for gubaoID in gubaoIDList]
minStar = min(starList) # 共鸣星级,取组合中最低古宝星级
+ if minStar < 0:
+ #GameWorld.DebugLog("共鸣存在未激活的古宝,无效")
+ continue
attrIpyDataList = IpyGameDataPY.GetIpyGameDataList("GubaoResonanceAttr", resonanceID)
if not attrIpyDataList:
@@ -308,7 +357,7 @@
resonanceAttrIpyData = attrIpyData
if not resonanceAttrIpyData:
- GameWorld.DebugLog("没有古宝共鸣属性! resonanceID=%s,minStar=%s,starList=%s" % (resonanceID, minStar, starList), playerID)
+ #GameWorld.DebugLog("没有古宝共鸣属性! resonanceID=%s,minStar=%s,starList=%s" % (resonanceID, minStar, starList), playerID)
continue
resonanceAttrIDList = resonanceAttrIpyData.GetResonanceAttrIDList()
@@ -316,14 +365,23 @@
for i, attrID in enumerate(resonanceAttrIDList):
attrValue = resonanceAttrValueList[i]
attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
- GameWorld.DebugLog("古宝共鸣: resonanceID=%s,resonanceStar=%s,starList=%s,addAttr=%s,%s,%s"
- % (resonanceID, resonanceAttrIpyData.GetResonanceStar(), starList,
- resonanceAttrIDList, resonanceAttrValueList, attrDict), playerID)
+ #GameWorld.DebugLog("古宝共鸣: resonanceID=%s,resonanceStar=%s,starList=%s,addAttr=%s,%s,%s"
+ # % (resonanceID, resonanceAttrIpyData.GetResonanceStar(), starList,
+ # resonanceAttrIDList, resonanceAttrValueList, attrDict), playerID)
# 保存计算值
GameWorld.DebugLog("古宝属性: %s" % attrDict, playerID)
- PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_Gubao, attrDict)
+ GameWorld.DebugLog("古宝特权: %s" % powerDict, playerID)
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_Gubao, attrDict, powerDict)
return
+
+def GetGubaoPowerValue(curPlayer, powerType, powerTypeValue=0):
+ ## 获取古宝特权值
+ powerDict = PlayerOnline.GetOnlinePlayer(curPlayer).GetCalcSpecInfo(ChConfig.Def_CalcAttr_Gubao)
+ powerKey = (powerType, powerTypeValue)
+ if powerKey not in powerDict:
+ return 0
+ return powerDict[powerKey]
def AddGubaoSpecEffLayer(curPlayer, effType, addLayer):
## 增加古宝特殊效果属性层级
@@ -433,7 +491,7 @@
# 没有指定时只同步激活的
continue
lv, star, layer = GetGubaoInfo(curPlayer, gubaoID)
- gubao = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagMCGubao)
+ gubao = ChPyNetSendPack.tagMCGubao()
gubao.GubaoID = gubaoID
gubao.GubaoLV = lv
gubao.GubaoStar = star
@@ -443,7 +501,7 @@
if not gubaoInfoList:
return
- clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagMCGubaoInfo)
+ clientPack = ChPyNetSendPack.tagMCGubaoInfo()
clientPack.GubaoInfoList = gubaoInfoList
clientPack.Count = len(clientPack.GubaoInfoList)
NetPackCommon.SendFakePack(curPlayer, clientPack)
--
Gitblit v1.8.0