From 5dfc9bf567fdf69a0ee8899c4966ce64b4cfe5ad Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 三月 2026 12:07:54 +0800
Subject: [PATCH] 547 【红颜系统】新增红颜-服务端(新增激活方式8-定军阁层;新增红颜特殊效果5-遣散/吞噬额外返还;统一A801、0320物品获得标记;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 33 ++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py | 5 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py | 20 ++++++---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 4 +
PySysDB/PySysDBPY.h | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py | 14 ++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py | 4 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 ++++
8 files changed, 75 insertions(+), 14 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 05b66d7..c1542a9 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -234,6 +234,7 @@
DWORD StarAddPer; // 卡牌每星级加成
list BookActAwardMoney; // 图鉴激活奖励货币 类型|值
list DismissReturnItems; // 遣散每星返还道具 [[物品ID,个数], ...]
+ list BeautyReturnItems; // 红颜效果返还道具基数 [[物品ID,个数], ...]
list RecommendAwardMoney; // 阵容推荐激活奖励货币 类型|值
};
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index b06ccd3..7b5990c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4923,3 +4923,11 @@
CoinType_ExchangePayCoin, # 代表转换 6
CoinType_PayCoin, # 代币充值 7
) = range(8)
+
+# 物品产出来源特殊标记
+(
+ItemSrcSign_Default, # 无
+ItemSrcSign_GubaoEff, # 古宝效果额外产出 1
+ItemSrcSign_BeautyEff, # 红颜效果额外产出 2
+ItemSrcSign_TitleEff, # 称号效果额外产出 3
+) = range(1 + 3)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
index 7a2442a..5f19cd4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py
@@ -74,9 +74,10 @@
itemList += FBCommon.GetSweepAwardList(mapID, lineID, sweepCnt)
GameWorld.DebugLog("白骨盈野扫荡: mapID=%s,lineID=%s,sweepCnt=%s,itemList=%s" % (mapID, lineID, sweepCnt, itemList))
+ isBind = ItemControler.GetIsBindValue(srcSign=ChConfig.ItemSrcSign_BeautyEff)
exItemCount, exItemID = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_FBZhanchuiItemEx) # 扫荡额外物品奖励
if exItemCount and exItemID:
- itemList += [[exItemID, exItemCount, 1]] # 标记是红颜效果额外获得的
+ itemList += [[exItemID, exItemCount, isBind]] # 标记是红颜效果额外获得的
GameWorld.DebugLog("红颜额外增加扫荡物品奖励: exItemID=%s, exItemCount=%s, itemList=%s" % (exItemID, exItemCount, itemList))
ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
@@ -86,7 +87,7 @@
for itemInfo in itemList:
itemDict = {"ItemID":itemInfo[0], "Count":itemInfo[1]}
if len(itemInfo) > 2:
- itemDict['BeautyEx'] = itemInfo[2]
+ itemDict['IsBind'] = itemInfo[2]
jsonItemList.append(itemDict)
overDict = {FBCommon.Over_itemInfo:jsonItemList, FBCommon.Over_isSweep:1}
FBCommon.NotifyFBOver(curPlayer, mapID, lineID, isPass, overDict)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index 8bab621..b9d1d70 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -238,6 +238,7 @@
("DWORD", "StarAddPer", 0),
("list", "BookActAwardMoney", 0),
("list", "DismissReturnItems", 0),
+ ("list", "BeautyReturnItems", 0),
("list", "RecommendAwardMoney", 0),
),
@@ -2046,7 +2047,8 @@
def GetStarAddPer(self): return self.attrTuple[6] # 卡牌每星级加成 DWORD
def GetBookActAwardMoney(self): return self.attrTuple[7] # 图鉴激活奖励货币 类型|值 list
def GetDismissReturnItems(self): return self.attrTuple[8] # 遣散每星返还道具 [[物品ID,个数], ...] list
- def GetRecommendAwardMoney(self): return self.attrTuple[9] # 阵容推荐激活奖励货币 类型|值 list
+ def GetBeautyReturnItems(self): return self.attrTuple[9] # 红颜效果返还道具基数 [[物品ID,个数], ...] list
+ def GetRecommendAwardMoney(self): return self.attrTuple[10] # 阵容推荐激活奖励货币 类型|值 list
# 武将品质突破表
class IPY_HeroQualityBreak():
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
index 42129e6..d09f2da 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Item/ItemControler.py
@@ -2005,14 +2005,20 @@
GameWorld.ErrLog('DoLogic_PutItemInPack Error 物品无法放入背包')
return False
+def GetIsBindValue(isBind=0, srcSign=0):
+ ## 获取IsBind值,适用于配置或者通知前端特殊标记用,兼容是否绑定/拍品设定
+ # @param isBind: 可支持原绑定/拍品逻辑,如果该项目没有该逻辑暂时默认都为0
+ # @param srcSign: 标记物品特殊来源,如xx特权额外产出等
+ return srcSign * 10 + isBind
+
## 是否拍品
-def GetIsAuctionItem(curItem): return curItem.GetIsBind()
+def GetIsAuctionItem(curItem): return 0#curItem.GetIsBind()
def SetIsAuctionItem(curItem, isAuctionItem, curPlayer=None):
- curItem.SetIsBind(isAuctionItem)
-
- if isAuctionItem:
- curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
- return
+ #curItem.SetIsBind(isAuctionItem)
+ #
+ #if isAuctionItem:
+ # curItem.SetUserAttr(ShareDefine.Def_IudetAuctionItemCreateTime, int(time.time()))
+ # return
return
def GetItemCountByID(curPlayer, itemID):
@@ -2265,7 +2271,7 @@
break
if isSendMail:
- PlayerControl.SendMailByKey(mailKey, [curPlayer.GetPlayerID()], giveItemList)
+ PlayerMail.SendMailByKey(mailKey, curPlayer.GetPlayerID(), giveItemList)
GameWorld.DebugLog("GivePlayerItemOrMail背包空间不够,发送邮件: mailItemList=%s" % str(giveItemList), curPlayer.GetPlayerID())
else:
for itemID, itemCnt, isAuctionItem in giveItemList:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
index 175e207..31a2aeb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
@@ -23,6 +23,7 @@
import IpyGameDataPY
import ChPyNetSendPack
import OpenServerActivity
+import GameLogic_Dingjunge
import PlayerGoldRush
import NetPackCommon
import ItemControler
@@ -39,7 +40,8 @@
UnlockWay_FBZhanchui, # 白骨盈野过关 5
UnlockWay_OfficialRank, # 官职达到 6
UnlockWay_TravelCnt, # 游历次数 7
-) = range(1, 1 + 7)
+UnlockWay_FBDingjunge, # 定军阁通关层 8
+) = range(1, 1 + 8)
# 皮肤解锁方式
UnlockWaySkin_Default = 1 # 默认解锁 1
@@ -51,7 +53,8 @@
EffType_ArenaItemEx, # 2. 演武场挑战胜利,概率额外获得1个物品的概率 TypeValue:物品ID Value:概率
EffType_TravelEnergy, # 3.游历体力上限增加 Value:增加上限
EffType_FBZhanchuiItemEx, # 4.白骨盈野扫荡额外物品奖励 TypeValue:物品ID Value:数量
-) = range(1, 1 + 4)
+EffType_HeroItemExPer, # 5.遣散/吞噬武将额外返还 Value:百分比
+) = range(1, 1 + 5)
def OnPlayerLogin(curPlayer):
SyncBeautyInfo(curPlayer)
@@ -182,6 +185,13 @@
GameWorld.DebugLog("激活红颜所需副本未过关! beautyID=%s,mapID=%s,funcLineID=%s" % (beautyID, mapID, funcLineID), playerID)
return
+ elif unlockWay == UnlockWay_FBDingjunge:
+ passLayer = GameLogic_Dingjunge.GetPassLayerMax(curPlayer)
+ needLayer = unlockValue
+ if passLayer < needLayer:
+ GameWorld.DebugLog("激活红颜所需定军阁通关层不足! beautyID=%s,passLayer=%s < %s" % (beautyID, passLayer, needLayer), playerID)
+ return
+
elif unlockWay == UnlockWay_OfficialRank:
realmLV = curPlayer.GetOfficialRank()
needRealmLV = unlockValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py
index 23f5274..6d35443 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerGoldInvest.py
@@ -285,7 +285,7 @@
gubaoPowerType = exItemGubaoPowerDict[investType]
# 古宝月卡奖励双倍特权
exItemList = []
- gubaoExSign = 10 # 标记古宝额外奖励
+ isBind = ItemControler.GetIsBindValue(srcSign=ChConfig.ItemSrcSign_GubaoEff)
for itemInfo in rewardItemList:
itemID, itemCount = itemInfo[:2]
addPer = PlayerGubao.GetGubaoPowerValue(curPlayer, gubaoPowerType, itemID)
@@ -294,7 +294,7 @@
countEx = int(itemCount * addPer / 100.0)
if not countEx:
continue
- exItemList.append([itemID, countEx, gubaoExSign])
+ exItemList.append([itemID, countEx, isBind])
if exItemList:
rewardItemList += exItemList
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
index 1a6b85b..3c974cf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -28,6 +28,7 @@
import PlayerControl
import PlayerOnline
import PlayerPreset
+import PlayerBeauty
import PlayerTask
import GameWorld
import ChConfig
@@ -413,6 +414,12 @@
for itemID, itemCount in dismissReturnItems:
returnCnt = max(1, int(itemCount * ratio / 100.0))
returnItemList.append([itemID, returnCnt])
+ returnItemExDict = {}
+ __calcHeroQualityReturnItemEx(curPlayer, qualityIpyData, returnItemExDict)
+ for key, itemCount in returnItemExDict.items():
+ itemID, isBind = key
+ returnItemList.append([itemID, itemCount, isBind])
+ GameWorld.DebugLog("吞噬额外总返还: %s" % returnItemList)
ItemControler.GivePlayerItemOrMail(curPlayer, returnItemList, event=["HeroStarUPReturn", False, {}])
OpenServerActivity.UpdOSA_HeroTrainBillboard(curPlayer) # 升星
@@ -1427,6 +1434,7 @@
ratio = IpyGameDataPY.GetFuncCfg("HeroRebirth", 5)
dismissItemList = []
returnItemDict = {}
+ returnItemExDict = {}
curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptHero)
for itemIndex in itemIndexList:
if itemIndex < 0 or itemIndex >= curPack.GetCount():
@@ -1469,6 +1477,7 @@
GameWorld.DebugLog(" 星级返还: quality=%s,heroStar=%s,ratio=%s,%s,总%s" % (quality, heroStar, ratio, dismissReturnItems, returnItemDict))
__calcHeroLVReturnitem(quality, heroLV, returnItemDict, ratio)
__calcHeroBreakReturnitem(quality, breakLV, returnItemDict, ratio)
+ __calcHeroQualityReturnItemEx(curPlayer, qualityIpyData, returnItemExDict)
dismissItemList.append([itemIndex, heroItem])
if not dismissItemList:
@@ -1479,10 +1488,34 @@
if returnItemDict:
returnItemList = [[k, v] for k, v in returnItemDict.items()]
+ for key, itemCount in returnItemExDict.items():
+ itemID, isBind = key
+ returnItemList.append([itemID, itemCount, isBind])
+ GameWorld.DebugLog("遣散总返还: %s" % returnItemList)
ItemControler.GivePlayerItemOrMail(curPlayer, returnItemList, event=["HeroDismiss", False, {}])
return
+def __calcHeroQualityReturnItemEx(curPlayer, qualityIpyData, returnItemExDict):
+ ## 其他功能额外返还
+
+ # 红颜特殊效果
+ beautyReturnItems = qualityIpyData.GetBeautyReturnItems()
+ if beautyReturnItems:
+ isBind = ItemControler.GetIsBindValue(srcSign=ChConfig.ItemSrcSign_BeautyEff)
+ retPer = PlayerBeauty.GetBeautyEffInfo(curPlayer, PlayerBeauty.EffType_HeroItemExPer)[0] # 红颜遣散/吞噬额外返还百分比
+ for itemID, itemCount in beautyReturnItems:
+ if not retPer:
+ break
+ key = (itemID, isBind)
+ retCnt = max(1, int(round(itemCount * retPer / 100.0)))
+ returnItemExDict[key] = returnItemExDict.get(key, 0) + retCnt
+ GameWorld.DebugLog(" 红颜返还: retPer=%s,%s,总%s" % (retPer, beautyReturnItems, returnItemExDict))
+
+ # 称号特殊效果
+
+ return
+
#// B4 12 战斗阵容预设保存 #tagCSHeroPresetSave
#
#struct tagCSHeroPresetPos
--
Gitblit v1.8.0