From 5ca218ac01201f10c196a07b61ef3b1fe59040e5 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 18 九月 2025 18:30:07 +0800 Subject: [PATCH] 129 【战斗】战斗系统-服务端(B427使用技能无伤血时默认发目标;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 64 ++++++++++++++++++++----------- 1 files changed, 41 insertions(+), 23 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 73e7616..2f18462 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py @@ -23,6 +23,7 @@ import PlayerControl import IpyGameDataPY import FormulaControl +import PlayerPrestigeSys import PlayerHero import GameWorld import ChConfig @@ -156,6 +157,8 @@ # 主线战斗 self.mainFight = TurnAttack.MainFight(playerID) + + self._lastBatBufferInfo = [] # 最后一场战斗临时回放 ["guid", "buffer"] return def OnClear(self): @@ -246,6 +249,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(): ## 准在线玩家管理 @@ -403,6 +411,7 @@ CalcRoleBase(curPlayer) ChEquip.CalcRoleEquipAttr(curPlayer) PlayerHero.CalcHeroAddAttr(curPlayer) + PlayerPrestigeSys.CalcOfficialRankAttr(curPlayer) return def doRefreshLineupAttr(curPlayer, olPlayer, lineup): @@ -468,10 +477,11 @@ elif skinIDList: skinID = skinIDList[0] + starMax = PlayerHero.GetHeroStarMax(heroItem) InitAddPer += qualityIpyData.GetInitAddPer() - LVAddPer += qualityIpyData.GetLVAddPer() * heroLV + LVAddPer += qualityIpyData.GetLVAddPer() * max(0, heroLV - 1) BreakLVAddPer += qualityIpyData.GetBreakLVAddPer() * breakLV - StarAddPer += qualityIpyData.GetStarAddPer() * star + StarAddPer += qualityIpyData.GetStarAddPer() * min(star, starMax) lineupHero = lineup.GetLineupHero(posNum) #if False: @@ -498,21 +508,6 @@ selfAttrDict[int(k)] = v heroSelfAttrInfo[heroID] = selfAttrDict - # 星级天赋 - starTalentAttrDict = {} - idCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentID) - lvCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDLV) - for aIndex in range(min(idCount, lvCount)): - talentID = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentID, aIndex) - talentLV = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentIDLV, aIndex) - stIpyData = IpyGameDataPY.GetIpyGameData("HeroTalent", talentID) - if not stIpyData: - continue - attrID = stIpyData.GetAttrID() - attrValue = stIpyData.GetAttrValue() * talentLV - starTalentAttrDict[attrID] = starTalentAttrDict.get(attrID, 0) + attrValue - heroStarTalentInfo[heroID] = starTalentAttrDict - # 突破潜能 breakAttrDict = {} breakIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroBreak", heroID) @@ -532,12 +527,15 @@ heroBreakAttrInfo[heroID] = breakAttrDict # 觉醒天赋 + maxUnlockSlot = IpyGameDataPY.GetFuncCfg("HeroStarTalent", 1) # 常规天赋槽个数 awakeTalentAttrDict = {} - awakeIpyDataList = IpyGameDataPY.GetIpyGameDataList("HeroAwake", heroID) + awakeIpyDataList = IpyGameDataPY.GetIpyGameDataListNotLog("HeroAwake", heroID) if awakeIpyDataList: for awakeIpyData in awakeIpyDataList: if awakeIpyData.GetAwakeLV() > awakeLV: break + unlockTalentSlot = awakeIpyData.GetUnlockTalentSlot() + maxUnlockSlot = max(maxUnlockSlot, unlockTalentSlot) attrIDList = awakeIpyData.GetAttrIDList() attrValueList = awakeIpyData.GetAttrValueList() for aIndex in range(min(len(attrIDList), len(attrValueList))): @@ -548,6 +546,21 @@ if skillID: lineupHero.heroSkillIDList.append(skillID) heroAwakeTalentInfo[heroID] = awakeTalentAttrDict + + # 星级天赋 + starTalentAttrDict = {} + idCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentID) + lvCount = heroItem.GetUserAttrCount(ShareDefine.Def_IudetHeroTalentIDLV) + for aIndex in range(min(idCount, lvCount, maxUnlockSlot)): # 重生导致已觉醒槽位失效时属性也无效 + talentID = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentID, aIndex) + talentLV = heroItem.GetUserAttrByIndex(ShareDefine.Def_IudetHeroTalentIDLV, aIndex) + stIpyData = IpyGameDataPY.GetIpyGameData("HeroTalent", talentID) + if not stIpyData: + continue + attrID = stIpyData.GetAttrID() + attrValue = stIpyData.GetAttrValue() * talentLV + starTalentAttrDict[attrID] = starTalentAttrDict.get(attrID, 0) + attrValue + heroStarTalentInfo[heroID] = starTalentAttrDict # 羁绊统计 for fetterID in heroIpyData.GetFetterIDList(): @@ -620,6 +633,7 @@ 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) GameWorld.DebugLog(" 国家武将统计=%s" % countryHeroInfo, playerID) GameWorld.DebugLog(" 羁绊武将统计=%s" % fetterHeroInfo, playerID) @@ -634,6 +648,7 @@ GameWorld.DebugLog(" 主公等级属性=%s" % lvAttrDict, playerID) GameWorld.DebugLog(" 主公装备属性=%s" % equipAttrDict, playerID) GameWorld.DebugLog(" 主公图鉴属性=%s" % bookAttrDict, playerID) + GameWorld.DebugLog(" 主公官职属性=%s" % realmAttrDict, playerID) PlayerLV = curPlayer.GetLV() OfficialLV = curPlayer.GetOfficialRank() @@ -665,6 +680,9 @@ 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 + lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = 0, 0, 0, 0 if attrID in ChConfig.BaseAttrIDList: lineupInitAddPer, lineupLVAddPer, lineupBreakLVAddPer, lineupStarAddPer = InitAddPer, LVAddPer, BreakLVAddPer, StarAddPer @@ -690,7 +708,7 @@ 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, "lineupInitAddPer":lineupInitAddPer, "lineupLVAddPer":lineupLVAddPer, "lineupBreakLVAddPer":lineupBreakLVAddPer, "lineupStarAddPer":lineupStarAddPer, "heroSelfValue":heroSelfValue, "heroSelfPer":heroSelfPer, "inheritPer":inheritPer, "lineupHaloValue":lineupHaloValue, "lineupHaloPer":lineupHaloPer, "fetterValue":fetterValue, "fetterPer":fetterPer, @@ -699,9 +717,9 @@ } 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) @@ -717,7 +735,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 = {} @@ -741,7 +759,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) -- Gitblit v1.8.0