From ac36bdcfa7db1557790a5b912c3248b22625841f Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期三, 26 十一月 2025 18:49:17 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_ServerCode
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 118 ++++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 92 insertions(+), 26 deletions(-)
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 d0c9d72..72f47e8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -23,7 +23,13 @@
import PlayerControl
import IpyGameDataPY
import FormulaControl
+import PlayerPrestigeSys
+import PlayerBeauty
+import PlayerFamily
+import PlayerHorse
+import PlayerGubao
import PlayerHero
+import PlayerHJG
import GameWorld
import ChConfig
import ChEquip
@@ -61,7 +67,7 @@
self.__refreshState = 0 # 刷属性标记, 0-不需要刷新了,1-需要刷新
self.__freeLineupHeroObjs = [] # 释放的空闲对象[LineupHero, ...]
- self.lineupHeroDict = {} # 阵容武将 {posNum:LineupHero, ...}
+ self.__lineupHeroDict = {} # 刷新阵容后的武将信息 {posNum:LineupHero, ...}
self.fightPower = 0 # 阵容总战力
return
@@ -81,42 +87,41 @@
PlayerHero.Sync_Lineup(self.olPlayer.curPlayer, self.lineupID)
return
+ def IsEmpty(self): return (not self.__lineupHeroDict or not self.heroItemDict)
+
+ def GetPosNumList(self): return self.__lineupHeroDict.keys()
+
def FreeLineupHero(self):
## 释放阵容武将对象,重新计算
- for freeObj in self.lineupHeroDict.values():
+ for freeObj in self.__lineupHeroDict.values():
if freeObj not in self.__freeLineupHeroObjs:
self.__freeLineupHeroObjs.append(freeObj)
- self.lineupHeroDict = {}
+ self.__lineupHeroDict = {}
self.fightPower = 0
return
def GetLineupHero(self, posNum):
lineupHero = None
- if posNum in self.lineupHeroDict:
- lineupHero = self.lineupHeroDict[posNum]
+ if posNum in self.__lineupHeroDict:
+ lineupHero = self.__lineupHeroDict[posNum]
elif self.__freeLineupHeroObjs:
lineupHero = self.__freeLineupHeroObjs.pop(0)
lineupHero.Clear()
- self.lineupHeroDict[posNum] = lineupHero
+ self.__lineupHeroDict[posNum] = lineupHero
else:
lineupHero = LineupHero()
- self.lineupHeroDict[posNum] = lineupHero
+ self.__lineupHeroDict[posNum] = lineupHero
return lineupHero
def GetLineupHeroByID(self, heroID):
lineupHero = None
- for posNum in self.lineupHeroDict.keys():
+ for posNum in self.__lineupHeroDict.keys():
lineupHero = self.GetLineupHero(posNum)
if lineupHero.heroID == heroID:
return lineupHero
if False:
lineupHero = LineupHero()
return lineupHero
-
- def GetLineupInfo(self):
- ## 获取阵容信息,即要用到该阵容了,如战斗或者保存缓存信息等
- self.DoRefreshLineupAttr() # 取阵容时先检查
- return
def SetNeedRefreshState(self):
## 设置需要刷属性
@@ -126,15 +131,16 @@
def RefreshLineupAttr(self, refreshForce=False):
self.__refreshState = 1 # 标记要刷新
if refreshForce:
- self.DoRefreshLineupAttr()
+ self.CheckRefreshLineupAttr()
return
- def DoRefreshLineupAttr(self):
+ def CheckRefreshLineupAttr(self):
+ ## 检查刷新阵容属性
if not self.__refreshState:
return False
+ self.__refreshState = 0
doRefreshLineupAttr(self.olPlayer.curPlayer, self.olPlayer, self)
self.lineupChange = False
- self.__refreshState = 0
return True
def CheckHeroItemUpdate(self, itemIndex):
@@ -156,6 +162,8 @@
# 主线战斗
self.mainFight = TurnAttack.MainFight(playerID)
+
+ self._lastBatBufferInfo = [] # 最后一场战斗临时回放 ["guid", "buffer"]
return
def OnClear(self):
@@ -171,7 +179,8 @@
## 是否真的在线
return self.curPlayer != None
- def GetLineup(self, lineupID):
+ def GetLineup(self, lineupID, checkAttr=True):
+ # @param checkAttr: 检查刷新到最新阵容属性
lineup = None
if lineupID in self.lineupDict:
lineup = self.lineupDict[lineupID]
@@ -179,6 +188,8 @@
lineup = Lineup(self.playerID, lineupID)
self.lineupDict[lineupID] = lineup
lineup.olPlayer = self
+ if checkAttr:
+ lineup.CheckRefreshLineupAttr()
return lineup
def GetCalcAttr(self, calcIndex): return self.calcAttrDict.get(calcIndex, {})
@@ -226,7 +237,7 @@
for lineupID, lineup in self.lineupDict.items():
if not isAllLineup and lineupID != ShareDefine.Lineup_Main:
continue
- if lineup.DoRefreshLineupAttr():
+ if lineup.CheckRefreshLineupAttr():
isRefresh = True
return isRefresh
@@ -246,6 +257,11 @@
GameWorld.DebugLog("武将物品养成更新索引: %s, 影响阵容:%s" % (itemIndexList, effLineupIDList), self.playerID)
return effLineupIDList
+
+ def GetLastBatBuffer(self): return self._lastBatBufferInfo
+ def SetLastBatBuffer(self, guid, batBuffer):
+ self._lastBatBufferInfo = [guid, batBuffer]
+ return
class OnlineMgr():
## 准在线玩家管理
@@ -387,7 +403,7 @@
GameWorld.DebugLog("重载阵容: %s" % lineupDict, curPlayer.GetPlayerID())
for lineupID, heroItemDict in lineupDict.items():
- lineup = olPlayer.GetLineup(lineupID)
+ lineup = olPlayer.GetLineup(lineupID, False)
# 获取其他绑定该阵容的功能,如红颜、灵兽等
@@ -403,6 +419,11 @@
CalcRoleBase(curPlayer)
ChEquip.CalcRoleEquipAttr(curPlayer)
PlayerHero.CalcHeroAddAttr(curPlayer)
+ PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer)
+ PlayerGubao.CalcGubaoAttr(curPlayer)
+ PlayerHJG.CalcHJGAttr(curPlayer)
+ PlayerHorse.CalcHorseAttr(curPlayer)
+ PlayerBeauty.CalcBeautyAttr(curPlayer)
return
def doRefreshLineupAttr(curPlayer, olPlayer, lineup):
@@ -432,6 +453,7 @@
countryHeroInfo = {} # 国家武将统计 {country:[heroID, ...], ...}
fetterHeroInfo = {} # 阵容羁绊武将统计信息 {fetterID:[heroID, ...], ...}
heroSelfAttrInfo = {} # 武将自身属性 {heroID:{attrID:value, ...}, ...}
+ heroLVAttrInfo = {} # 武将等级属性 {heroID:{attrID:value, ...}, ...}
heroStarTalentInfo = {} # 武将星级天赋属性 {heroID:{attrID:value, ...}, ...}
heroBreakAttrInfo = {} # 武将突破潜能属性 {heroID:{attrID:value, ...}, ...}
heroAwakeTalentInfo = {} # 武将觉醒天赋属性 {heroID:{attrID:value, ...}, ...}
@@ -498,6 +520,18 @@
for k, v in heroIpyData.GetBatAttrDict().items():
selfAttrDict[int(k)] = v
heroSelfAttrInfo[heroID] = selfAttrDict
+
+ # 等级属性
+ heroLVAttrDict = {}
+ heroLVIpyData = IpyGameDataPY.GetIpyGameData("HeroQualityLV", quality, heroLV)
+ if heroLVIpyData:
+ attrIDList = heroLVIpyData.GetAttrIDList()
+ attrValueList = heroLVIpyData.GetAttrValueList()
+ for aIndex in range(min(len(attrIDList), len(attrValueList))):
+ attrID = attrIDList[aIndex]
+ attrValue = attrValueList[aIndex]
+ heroLVAttrDict[attrID] = heroLVAttrDict.get(attrID, 0) + attrValue
+ heroLVAttrInfo[heroID] = heroLVAttrDict
# 突破潜能
breakAttrDict = {}
@@ -624,10 +658,16 @@
lvAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_LV)
equipAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_MainEquip)
bookAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_HeroBook)
-
+ realmAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Realm)
+ gubaoAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Gubao)
+ hjgAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_HJG)
+ horseAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Horse)
+ beautyAttrDict = olPlayer.GetCalcAttr(ChConfig.Def_CalcAttr_Beauty)
+
GameWorld.DebugLog(" 国家武将统计=%s" % countryHeroInfo, playerID)
GameWorld.DebugLog(" 羁绊武将统计=%s" % fetterHeroInfo, playerID)
GameWorld.DebugLog(" 武将自身属性=%s" % heroSelfAttrInfo, playerID)
+ GameWorld.DebugLog(" 武将等级属性=%s" % heroLVAttrInfo, playerID)
GameWorld.DebugLog(" 武将吞噬属性=%s" % heroStarTalentInfo, playerID)
GameWorld.DebugLog(" 武将突破潜能=%s" % heroBreakAttrInfo, playerID)
GameWorld.DebugLog(" 武将觉醒天赋=%s" % heroAwakeTalentInfo, playerID)
@@ -638,6 +678,11 @@
GameWorld.DebugLog(" 主公等级属性=%s" % lvAttrDict, playerID)
GameWorld.DebugLog(" 主公装备属性=%s" % equipAttrDict, playerID)
GameWorld.DebugLog(" 主公图鉴属性=%s" % bookAttrDict, playerID)
+ GameWorld.DebugLog(" 主公官职属性=%s" % realmAttrDict, playerID)
+ GameWorld.DebugLog(" 主公古宝属性=%s" % gubaoAttrDict, playerID)
+ GameWorld.DebugLog(" 主幻境阁属性=%s" % hjgAttrDict, playerID)
+ GameWorld.DebugLog(" 主公坐骑属性=%s" % horseAttrDict, playerID)
+ GameWorld.DebugLog(" 主公红颜属性=%s" % beautyAttrDict, playerID)
PlayerLV = curPlayer.GetLV()
OfficialLV = curPlayer.GetOfficialRank()
@@ -654,6 +699,7 @@
lineupHero.heroBatAttrDict = {}
lineupHero.fightPower = 0
+ heroLVAttrDict = heroLVAttrInfo.get(heroID, {})
starTalentAttrDict = heroStarTalentInfo.get(heroID, {})
breakAttrDict = heroBreakAttrInfo.get(heroID, {})
awakeTalentAttrDict = heroAwakeTalentInfo.get(heroID, {})
@@ -669,6 +715,21 @@
bookValue = bookAttrDict.get(attrID, 0)
bookPer = bookAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+ realmValue = realmAttrDict.get(attrID, 0)
+ realmPer = realmAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
+ gubaoValue = gubaoAttrDict.get(attrID, 0)
+ gubaoPer = gubaoAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
+ hjgValue = hjgAttrDict.get(attrID, 0)
+ hjgPer = hjgAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
+ horseValue = horseAttrDict.get(attrID, 0)
+ horsePer = horseAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
+ beautyValue = beautyAttrDict.get(attrID, 0)
+ beautyPer = beautyAttrDict.get(attrPerID, 0) / 10000.0 if attrPerID else 0
+
lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = 0, 0, 0, 0
if attrID in ChConfig.BaseAttrIDList:
lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer
@@ -682,6 +743,7 @@
lineupHaloValue, lineupHaloPer = lineupHaloAttrInfo.get(attrID, 0), 0
fetterValue, fetterPer = fetterAttrDict.get(attrID, 0), 0
+ heroLVValue, heroLVPer = heroLVAttrDict.get(attrID, 0), 0
starTalentValue, starTalentPer = starTalentAttrDict.get(attrID, 0), 0
breakLVValue, breakLVPer = breakAttrDict.get(attrID, 0), 0
awakeTalentValue, awakeTalentPer = awakeTalentAttrDict.get(attrID, 0), 0
@@ -689,23 +751,26 @@
heroSelfPer = selfAttrDict.get(attrPerID, 0) / 10000.0
lineupHaloPer = lineupHaloAttrInfo.get(attrPerID, 0) / 10000.0
fetterPer = fetterAttrDict.get(attrPerID, 0) / 10000.0
+ heroLVPer = heroLVAttrDict.get(attrPerID, 0) / 10000.0
starTalentPer = starTalentAttrDict.get(attrPerID, 0) / 10000.0
breakLVPer = breakAttrDict.get(attrPerID, 0) / 10000.0
awakeTalentPer = awakeTalentAttrDict.get(attrPerID, 0) / 10000.0
# 计算
- attrParamDict = {"lvValue":lvValue, "equipValue":equipValue, "bookValue":bookValue, "bookPer":bookPer,
+ attrParamDict = {"lvValue":lvValue, "equipValue":equipValue, "bookValue":bookValue, "bookPer":bookPer, "realmValue":realmValue, "realmPer":realmPer,
+ "gubaoValue":gubaoValue, "gubaoPer":gubaoPer, "hjgValue":hjgValue, "hjgPer":hjgPer, "horseValue":horseValue, "horsePer":horsePer,
+ "beautyValue":beautyValue, "beautyPer":beautyPer,
"lineupInitAddPer":lineupInitAddPer, "lineupLVAddPer":lineupLVAddPer, "lineupBreakLVAddPer":lineupBreakLVAddPer, "lineupStarAddPer":lineupStarAddPer,
- "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer,
+ "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer, "heroLVValue":heroLVValue, "heroLVPer":heroLVPer,
"lineupHaloValue":lineupHaloValue, "lineupHaloPer":lineupHaloPer, "fetterValue":fetterValue, "fetterPer":fetterPer,
"starTalentValue":starTalentValue, "starTalentPer":starTalentPer, "breakLVValue":breakLVValue, "breakLVPer":breakLVPer,
"awakeTalentValue":awakeTalentValue, "awakeTalentPer":awakeTalentPer,
}
if attrID in ChConfig.BaseAttrIDList:
- attrValue = FormulaControl.Eval("baseAttrFormula", baseAttrFormula, attrParamDict)
+ attrValue = FormulaControl.Eval("baseAttrFormula", baseAttrFormula, attrParamDict, toInt=False, ndigits=3)
else:
- attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict)
+ attrValue = FormulaControl.Eval("otherAttrFormula", otherAttrFormula, attrParamDict, toInt=False, ndigits=3)
#GameWorld.DebugLog(" attrID=%s,attrValue=%s,attrParamDict=%s" % (attrID, attrValue, attrParamDict))
attrIpyData = IpyGameDataPY.GetIpyGameData("PlayerAttr", attrID)
@@ -721,7 +786,7 @@
logAttrDict["%s-%s" % (attrID, attrName)] = attrValue
# 计算战力
- fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict)
+ fightPower = FormulaControl.Eval("fightPowerFormula", fightPowerFormula, fightPowerParamDict, toInt=True)
GameWorld.DebugLog(" heroID=%s,fightPower=%s,heroSkillIDList=%s" % (heroID, fightPower, lineupHero.heroSkillIDList), playerID)
skillTypeIDDict = {}
@@ -745,7 +810,7 @@
skillID = skillData.GetSkillID()
lineupHero.heroSkillIDList.append(skillID)
paramDict = {"SkillPower":skillData.GetFightPower(), "PlayerLV":PlayerLV, "OfficialLV":OfficialLV}
- sFightPower = FormulaControl.Eval("skillFPFormula", skillFPFormula, paramDict)
+ sFightPower = FormulaControl.Eval("skillFPFormula", skillFPFormula, paramDict, toInt=True)
skillFightPower += sFightPower
GameWorld.DebugLog(" skillFightPower=%s,heroSkillIDList=%s" % (skillFightPower, lineupHero.heroSkillIDList), playerID)
@@ -795,6 +860,7 @@
else:
GameWorld.DebugLog("主阵容没有在战斗中,不需要处理", playerID)
+ PlayerFamily.RefreshFamilyMember(curPlayer) # 更新公会
# 更新排行榜
return
--
Gitblit v1.8.0