From 5c8b87ef0812652af80655923ac5ca277b346f61 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 12 三月 2026 18:38:57 +0800
Subject: [PATCH] 541 【幻境阁】新增称号加成效果-服务端
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Dingjunge.py | 4
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Dingjunge.py | 13 +++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py | 23 ++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Zhanchui.py | 7 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 5 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py | 14 +++
PySysDB/PySysDBPY.h | 5 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/HJG.py | 8 -
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py | 104 ++++++++++++++++++++++++++
13 files changed, 173 insertions(+), 20 deletions(-)
diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index c1542a9..ff5773e 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -235,6 +235,7 @@
list BookActAwardMoney; // 图鉴激活奖励货币 类型|值
list DismissReturnItems; // 遣散每星返还道具 [[物品ID,个数], ...]
list BeautyReturnItems; // 红颜效果返还道具基数 [[物品ID,个数], ...]
+ list TitleReturnItems; // 称号效果返还道具基数 [[物品ID,个数], ...]
list RecommendAwardMoney; // 阵容推荐激活奖励货币 类型|值
};
@@ -410,6 +411,10 @@
list AttrIDList; //属性ID列表
list InitAttrValueList; //初始属性值列表
list AttrPerStarAddList; //每星加成值列表
+ BYTE EffType; //天赋效果类型
+ DWORD EffTypeValue; //效果类型值
+ DWORD EffValue; //效果初始值
+ DWORD EffPerStarAdd; //效果每星成长
};
//形象表
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 7b5990c..17cf530 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3458,6 +3458,7 @@
# 称号
Def_PDict_TitleState = "TitleState_%s" # 称号状态,参数(key编号)
Def_PDict_TitleEndTime = "TitleEndTime_%s" # 称号到期时间戳,0为永久,参数(称号ID)
+Def_PDict_TitleGoldRewardTime = "TitleGRewardTime_%s" # 称号每日俸禄上次发放时间戳,参数(称号ID)
Def_PDict_TitleStar = "TitleStar_%s" # 称号星级,参数(称号ID)
# 形象
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Dingjunge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Dingjunge.py
index cb08d07..151f122 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Dingjunge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/Dingjunge.py
@@ -52,8 +52,8 @@
else:
todayLineID = value1
highestLineID = paramList[1] if len(paramList) > 1 else None
- if not todayLineID:
- todayLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DJGLineID)
+ #if not todayLineID:
+ # todayLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_DJGLineID)
if not highestLineID:
highestLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FBPassLineID % mapID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/HJG.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/HJG.py
index 22c4c1a..5ab9503 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/HJG.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/HJG.py
@@ -44,7 +44,7 @@
value1 = msgList[0]
# 删除称号
- if value1 == "t1":
+ if value1 == "t0":
titleID = msgList[1] if len(msgList) > 1 else 0
if not titleID:
for index in range(ipyDataMgr.GetTitleCount()):
@@ -52,8 +52,7 @@
titleID = ipyData.GetTitleID()
if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID):
continue
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleEndTime % titleID, 0)
+ PlayerHJG.DelTitle(curPlayer, titleID, False)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % titleID, 0)
syncTitleIDList.append(titleID)
else:
@@ -61,8 +60,7 @@
if not ipyData:
GameWorld.DebugAnswer(curPlayer, "该称号不存在:%s" % titleID)
return
- GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID, 0)
- PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleEndTime % titleID, 0)
+ PlayerHJG.DelTitle(curPlayer, titleID, False)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleStar % titleID, 0)
syncTitleIDList.append(titleID)
GameWorld.DebugAnswer(curPlayer, "删除称号:%s" % syncTitleIDList)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Dingjunge.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Dingjunge.py
index f45f86a..a5d190e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Dingjunge.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GameWorldLogic/FBProcess/GameLogic_Dingjunge.py
@@ -25,7 +25,10 @@
import IpyGameDataPY
import NetPackCommon
import PlayerOnline
+import PlayerHJG
import ChConfig
+
+import math
# 自动选择排序优先级索引
(
@@ -220,7 +223,7 @@
awardIpyData = quickIpyData
if not awardIpyData:
return
- awardItemList = awardIpyData.GetQuickAwardList()
+ quickAwardList = awardIpyData.GetQuickAwardList()
# 设置起始层关卡
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_DJGLineID, todayLineID)
@@ -229,6 +232,14 @@
GivePassLayerEff(curPlayer, addEffCnt)
SyncDingjungeInfo(curPlayer)
+ awardItemList = []
+ isBind = ItemControler.GetIsBindValue(srcSign=ChConfig.ItemSrcSign_TitleEff)
+ djgPer = PlayerHJG.GetTitleEffInfo(curPlayer, PlayerHJG.TitleEff_DingjungeQuickPer)[0]
+ for itemID, itemCount in quickAwardList:
+ awardItemList.append([itemID, itemCount])
+ if djgPer:
+ itemCountEx = int(math.ceil(itemCount * djgPer / 100.0))
+ awardItemList.append([itemID, itemCountEx, isBind])
ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["Dingjunge", False, {}])
return
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 5f19cd4..e7cd5d8 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
@@ -23,6 +23,7 @@
import PlayerSuccess
import ShareDefine
import PlayerTask
+import PlayerHJG
import ChConfig
def OnTurnFightRequest(curPlayer, mapID, funcLineID, tagType, tagID, valueList):
@@ -80,6 +81,12 @@
itemList += [[exItemID, exItemCount, isBind]] # 标记是红颜效果额外获得的
GameWorld.DebugLog("红颜额外增加扫荡物品奖励: exItemID=%s, exItemCount=%s, itemList=%s" % (exItemID, exItemCount, itemList))
+ isBind = ItemControler.GetIsBindValue(srcSign=ChConfig.ItemSrcSign_TitleEff)
+ exItemCount, exItemID = PlayerHJG.GetTitleEffInfo(curPlayer, PlayerHJG.TitleEff_FBZhanchuiItemEx) # 扫荡额外物品奖励
+ if exItemCount and exItemID:
+ itemList += [[exItemID, exItemCount, isBind]] # 标记是称号效果额外获得的
+ GameWorld.DebugLog("称号额外增加扫荡物品奖励: exItemID=%s, exItemCount=%s, itemList=%s" % (exItemID, exItemCount, itemList))
+
ItemControler.GivePlayerItemOrMail(curPlayer, itemList, event=["Zhanchui", False, {}], isNotifyAward=False)
isPass = 1
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index b9d1d70..e71a47d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -239,6 +239,7 @@
("list", "BookActAwardMoney", 0),
("list", "DismissReturnItems", 0),
("list", "BeautyReturnItems", 0),
+ ("list", "TitleReturnItems", 0),
("list", "RecommendAwardMoney", 0),
),
@@ -389,6 +390,10 @@
("list", "AttrIDList", 0),
("list", "InitAttrValueList", 0),
("list", "AttrPerStarAddList", 0),
+ ("BYTE", "EffType", 0),
+ ("DWORD", "EffTypeValue", 0),
+ ("DWORD", "EffValue", 0),
+ ("DWORD", "EffPerStarAdd", 0),
),
"Model":(
@@ -2048,7 +2053,8 @@
def GetBookActAwardMoney(self): return self.attrTuple[7] # 图鉴激活奖励货币 类型|值 list
def GetDismissReturnItems(self): return self.attrTuple[8] # 遣散每星返还道具 [[物品ID,个数], ...] list
def GetBeautyReturnItems(self): return self.attrTuple[9] # 红颜效果返还道具基数 [[物品ID,个数], ...] list
- def GetRecommendAwardMoney(self): return self.attrTuple[10] # 阵容推荐激活奖励货币 类型|值 list
+ def GetTitleReturnItems(self): return self.attrTuple[10] # 称号效果返还道具基数 [[物品ID,个数], ...] list
+ def GetRecommendAwardMoney(self): return self.attrTuple[11] # 阵容推荐激活奖励货币 类型|值 list
# 武将品质突破表
class IPY_HeroQualityBreak():
@@ -2257,7 +2263,11 @@
def GetStarMax(self): return self.attrTuple[6] # 最高星级 BYTE
def GetAttrIDList(self): return self.attrTuple[7] # 属性ID列表 list
def GetInitAttrValueList(self): return self.attrTuple[8] # 初始属性值列表 list
- def GetAttrPerStarAddList(self): return self.attrTuple[9] # 每星加成值列表 list
+ def GetAttrPerStarAddList(self): return self.attrTuple[9] # 每星加成值列表 list
+ def GetEffType(self): return self.attrTuple[10] # 天赋效果类型 BYTE
+ def GetEffTypeValue(self): return self.attrTuple[11] # 效果类型值 DWORD
+ def GetEffValue(self): return self.attrTuple[12] # 效果初始值 DWORD
+ def GetEffPerStarAdd(self): return self.attrTuple[13] # 效果每星成长 DWORD
# 形象表
class IPY_Model():
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 31a2aeb..d1a3b4f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBeauty.py
@@ -590,14 +590,13 @@
# 保存计算值
GameWorld.DebugLog("红颜属性: %s" % attrDict, playerID)
GameWorld.DebugLog("红颜效果: %s" % effTypeDict, playerID)
- PyGameData.g_beautyEffTypeDict[playerID] = effTypeDict
- PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_Beauty, attrDict)
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_Beauty, attrDict, effTypeDict)
return
def GetBeautyEffInfo(curPlayer, effType):
## 获取红颜特殊效果信息
# @return: effValue, effTypeValue
- effTypeDict = PyGameData.g_beautyEffTypeDict.get(curPlayer.GetPlayerID(), {})
+ effTypeDict = PlayerOnline.GetOnlinePlayer(curPlayer).GetCalcSpecInfo(ChConfig.Def_CalcAttr_Beauty)
return effTypeDict.get(effType, [0, 0])
def SyncBeautyInfo(curPlayer, beautyIDList=None, skinIDList=None):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
index cc038a9..b47dad3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerEventCounter.py
@@ -50,6 +50,7 @@
import PlayerHero
import PlayerTree
import PlayerLLMJ
+import PlayerHJG
import DBDataMgr
import datetime
@@ -288,6 +289,7 @@
PlayerLLMJ.PlayerOnDay(curPlayer)
FunctionNPCCommon.ShopItemOnDay(curPlayer)
OpenServerActivity.PlayerOnDay(curPlayer)
+ PlayerHJG.PlayerOnDay(curPlayer)
# 特殊时间点X点过天
#elif onEventType == ShareDefine.Def_OnEventTypeEx:
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py
index 7ff73d0..4692c04 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHJG.py
@@ -26,6 +26,7 @@
import NetPackCommon
import PlayerFace
import PlayerHero
+import PlayerMail
import ChConfig
import random
@@ -36,6 +37,14 @@
HJGType_FacePic = 3
HJGType_ChatBox = 4
HJGType_Title = 5
+
+# 称号效果类型
+(
+TitleEff_FBZhanchuiItemEx, # 1.白骨盈野扫荡额外物品奖励 TypeValue:物品ID Value:数量
+TitleEff_DayGold, # 2.每天俸禄元宝数量 Value:元宝数量
+TitleEff_HeroItemExPer, # 3.遣散/吞噬武将额外返还 Value:百分比
+TitleEff_DingjungeQuickPer, # 4. 定军阁速战获取奖励提高百分比 Value:百分比
+) = range(1, 1 + 4)
def OnPlayerLogin(curPlayer):
SyncTitleInfo(curPlayer)
@@ -49,6 +58,10 @@
OnMinuteModel(curPlayer)
PlayerFace.OnMinute(curPlayer)
PlayerChatBox.OnMinute(curPlayer)
+ return
+
+def PlayerOnDay(curPlayer):
+ OnDayTitle(curPlayer)
return
#// B2 25 幻境阁操作 #tagCSHJGOP
@@ -134,6 +147,7 @@
playerID = curPlayer.GetPlayerID()
attrDict = {}
+ titleEffDict = {}
ipyDataMgr = IpyGameDataPY.IPY_Data()
# 称号
@@ -153,6 +167,19 @@
perStarAdd = perStarAddList[aIndex] if len(perStarAddList) > aIndex else 0
attrValue = initValue + perStarAdd * star
attrDict[attrID] = attrDict.get(attrID, 0) + attrValue
+
+ # 特殊效果
+ effType = ipyData.GetEffType()
+ effTypeValue = ipyData.GetEffTypeValue()
+ effValue = ipyData.GetEffValue()
+ effPerStarAdd = ipyData.GetEffPerStarAdd()
+ if effType:
+ effValue = effValue + effPerStarAdd * star
+ if effType not in titleEffDict:
+ titleEffDict[effType] = [0, effTypeValue]
+ titleEffDict[effType][0] = titleEffDict[effType][0] + effValue
+ #GameWorld.DebugLog("称号特殊效果: titleID=%s,effType=%s,star=%s,%s" % (titleID, effType, star, titleEffDict), playerID)
+
#GameWorld.DebugLog("幻境阁累加称号,总属性: %s" % attrDict)
# 形象
@@ -234,9 +261,83 @@
# 保存计算值
GameWorld.DebugLog("幻境阁属性: %s" % attrDict, playerID)
PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcAttr(ChConfig.Def_CalcAttr_HJG, attrDict)
+ PlayerOnline.GetOnlinePlayer(curPlayer).SetCalcSpecInfo("Title", titleEffDict)
return
## ----------------------------------------- 称号 --------------------------------------------------
+
+def GetTitleEffInfo(curPlayer, effType):
+ ## 获取称号特殊效果信息
+ # @return: effValue, effTypeValue
+ titleEffDict = PlayerOnline.GetOnlinePlayer(curPlayer).GetCalcSpecInfo("Title")
+ return titleEffDict.get(effType, [0, 0])
+
+def __GiveTitleGoldSalary(curPlayer, ipyData):
+ ## 给称号每日俸禄 - 邮件发放
+
+ if not ipyData:
+ return
+
+ titleID = ipyData.GetTitleID()
+ effType = ipyData.GetEffType()
+ if effType != TitleEff_DayGold:
+ #GameWorld.DebugLog("非俸禄效果称号不处理! titleID=%s" % titleID)
+ return
+
+ if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID):
+ #GameWorld.DebugLog("未激活俸禄效果称号不处理! titleID=%s" % titleID)
+ return
+
+ playerID = curPlayer.GetPlayerID()
+
+ curTime = int(time.time())
+ lastRewardTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleGoldRewardTime % titleID)
+ if not lastRewardTime:
+ lastRewardTime = curTime - 3600 * 24 # 未发放过的设置为昨天,让今天也可以发放
+ #GameWorld.DebugLog("从未发放过该称号俸禄")
+
+ endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleEndTime % titleID)
+ calcTime = curTime if (not endTime or endTime > curTime) else endTime
+
+ rewardDays = GameWorld.GetDiff_Day(calcTime, lastRewardTime)
+ GameWorld.DebugLog("俸禄称号可发放天数: %s,titleID=%s,lastRewardTime=%s,calcTime=%s,endTime=%s"
+ % (rewardDays, titleID, GameWorld.ChangeTimeNumToStr(lastRewardTime), GameWorld.ChangeTimeNumToStr(calcTime),
+ GameWorld.ChangeTimeNumToStr(endTime)), playerID)
+ if rewardDays <= 0:
+ #GameWorld.DebugLog("不用发放称号每日俸禄: titleID=%s" % (titleID), playerID)
+ return
+
+ moneyItemID = ItemCommon.GetMoneyItemID(IPY_GameWorld.TYPE_Price_Gold_Money)
+ if not moneyItemID:
+ return
+
+ star = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TitleStar % titleID)
+ effValue = ipyData.GetEffValue()
+ effPerStarAdd = ipyData.GetEffPerStarAdd()
+
+ goldOneDay = effValue + effPerStarAdd * star
+ giveGold = int(goldOneDay * rewardDays)
+
+ mailItemList = [[moneyItemID, giveGold]]
+ GameWorld.DebugLog("邮件发放称号每日俸禄! titleID=%s,rewardDays=%s,goldOneDay=%s, %s" % (titleID, rewardDays, goldOneDay, mailItemList), playerID)
+ updRewardTime = curTime
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleGoldRewardTime % titleID, updRewardTime)
+ if rewardDays > 1:
+ PlayerMail.SendMailByKey("TitleGoldSalaryDays", playerID, mailItemList, [titleID, rewardDays], limitDays=3)
+ else:
+ PlayerMail.SendMailByKey("TitleGoldSalaryDay", playerID, mailItemList, [titleID], limitDays=3)
+ return
+
+def OnDayTitle(curPlayer):
+ ipyDataMgr = IpyGameDataPY.IPY_Data()
+ for index in range(ipyDataMgr.GetTitleCount()):
+ ipyData = ipyDataMgr.GetTitleByIndex(index)
+ titleID = ipyData.GetTitleID()
+ if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID):
+ # 未激活的不处理
+ continue
+ __GiveTitleGoldSalary(curPlayer, ipyData) # 过天发放
+ return
def OnMinuteTitle(curPlayer):
curTime = int(time.time())
@@ -315,6 +416,7 @@
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleEndTime % titleID, updEndTime)
RefreshHJGAttr(curPlayer)
SyncTitleInfo(curPlayer, [titleID])
+ __GiveTitleGoldSalary(curPlayer, ipyData) # 激活发放
return True
def DelTitle(curPlayer, titleID, isRefreshAttr=True, notifyMail=""):
@@ -325,8 +427,10 @@
if not GameWorld.GetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID):
return
GameWorld.Log("删除称号: titleID=%s,notifyMail=%s" % (titleID, notifyMail), playerID)
+ __GiveTitleGoldSalary(curPlayer, ipyData) # 过期补发
GameWorld.SetDictValueByBit(curPlayer, ChConfig.Def_PDict_TitleState, titleID, 0)
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleEndTime % titleID, 0)
+ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_TitleGoldRewardTime % titleID, 0)
# 星级不重置,重新激活后再次生效
if PlayerControl.GetTitleID(curPlayer) == titleID:
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 3c974cf..751c96b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerHero.py
@@ -30,10 +30,12 @@
import PlayerPreset
import PlayerBeauty
import PlayerTask
+import PlayerHJG
import GameWorld
import ChConfig
import random
+import math
def PlayerOnDay(curPlayer):
if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_HeroAwakeRebirthCnt):
@@ -1499,21 +1501,32 @@
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] # 红颜遣散/吞噬额外返还百分比
+ 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)))
+ retCnt = max(1, int(math.ceil(itemCount * retPer / 100.0)))
returnItemExDict[key] = returnItemExDict.get(key, 0) + retCnt
GameWorld.DebugLog(" 红颜返还: retPer=%s,%s,总%s" % (retPer, beautyReturnItems, returnItemExDict))
- # 称号特殊效果
-
+ # 称号特殊效果: 遣散/吞噬额外返还百分比
+ titleReturnItems = qualityIpyData.GetTitleReturnItems()
+ if titleReturnItems:
+ isBind = ItemControler.GetIsBindValue(srcSign=ChConfig.ItemSrcSign_TitleEff)
+ retPer = PlayerHJG.GetTitleEffInfo(curPlayer, PlayerHJG.TitleEff_HeroItemExPer)[0]
+ for itemID, itemCount in titleReturnItems:
+ if not retPer:
+ break
+ key = (itemID, isBind)
+ retCnt = max(1, int(math.ceil(itemCount * retPer / 100.0)))
+ returnItemExDict[key] = returnItemExDict.get(key, 0) + retCnt
+ GameWorld.DebugLog(" 称号返还: retPer=%s,%s,总%s" % (retPer, titleReturnItems, returnItemExDict))
+
return
#// B4 12 战斗阵容预设保存 #tagCSHeroPresetSave
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index cc59c81..aaf5e53 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -235,6 +235,11 @@
def GetCalcSpecInfo(self, calcIndex, presetID=0):
calcKey = (calcIndex, presetID) if presetID else calcIndex
return self._calcSpecEffDict.get(calcKey, {})
+ def SetCalcSpecInfo(self, calcKey, specEffInfo, presetID=0):
+ # @param calcKey: 与calcIndex公用,只是使用其他自定义key,一般用于同个属性功能点,但是又需要区分不同的子功能点时可用
+ calcKey = (calcKey, presetID) if presetID else calcKey
+ self._calcSpecEffDict[calcKey] = specEffInfo
+ return
def GetCalcAttr(self, calcIndex, presetID=0):
calcKey = (calcIndex, presetID) if presetID else calcIndex
return self._calcAttrDict.get(calcKey, {})
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
index a6e1d69..b6ed785 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/PyGameData.py
@@ -48,8 +48,6 @@
g_arenaPlayerMatchDict = {} # 本服竞技场玩家匹配记录缓存 {playerID:[tagPlayerID, ...], ...}
g_qunyingPlayerMatchDict = {} # 群英榜玩家匹配记录缓存,该功能允许重复的机器人ID,所以记录匹配名次 {playerID:[rank, ...], ...}
-g_beautyEffTypeDict = {} # 红颜特殊效果缓存 {playerID:{effType:[effValue, effTypeValue], ...}, ...}
-
g_mapIDTxtInfo = {} # MapID.txt 加载的信息
g_realmDiffPlayerDict = {} # 境界难度玩家信息 {realm:[playerID, ...], ...}
g_realmDiffNPCRefresh = {} # {(lineID, realm):{refreshID:tagNPCRefresh, ...}}
--
Gitblit v1.8.0