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/Player/PlayerHJG.py | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 104 insertions(+), 0 deletions(-)
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:
--
Gitblit v1.8.0