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/PlayerBillboard.py | 226 +++++++++++++++++++++++++++----------------------------- 1 files changed, 108 insertions(+), 118 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py index 4b9a6a4..bde256f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerBillboard.py @@ -15,15 +15,11 @@ #"""Version = 2018-03-06 11:00""" #------------------------------------------------------------------------------- -import ChConfig import GameWorld import ShareDefine -import PlayerControl -import OpenServerCampaign import ChPyNetSendPack import NetPackCommon import IpyGameDataPY -import GameFuncComm import DBDataMgr import time @@ -38,19 +34,13 @@ billboardMgr = DBDataMgr.GetBillboardMgr() for billboardType in drBillboardTypeList: - if billboardType in [ShareDefine.Def_CBT_BossTrialSubmitBak, ShareDefine.Def_CBT_BossTrialSubmitFamilyBak, ShareDefine.Def_CBT_CrossRealmPK]: + if billboardType in []: continue groupList = billboardMgr.GetBillboardGroupList(billboardType) for billboardType, groupValue1, groupValue2 in groupList: billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2) billboardObj.SaveDRData("OnDay") - return - -def DoBillboardOpen(curPlayer): - ## 排行榜开启时需要处理的 - #UpdatePlayerBillboardOnLeaveServer(curPlayer, True) # 主动同步一次榜单 - #OpenServerCampaign.DoBillboardOpen(curPlayer) # 同步开服活动榜单 return def BillboardOnLogin(curPlayer): @@ -71,35 +61,26 @@ # 跨服服务器不用更新本服榜 return - UpdatePlayerLVBillboard(curPlayer) # 等级榜 - UpdatePlayerFPTotalBillboard(curPlayer, True) # 战斗力榜 - UpdateHorseBillboard(curPlayer, True, False) # 坐骑榜 - UpdatePyPetBillboard(curPlayer, True, False) # 灵宠榜 - UpdateRealmBillboard(curPlayer) # 境界榜 - - if isAll: - UpdateRuneTowerBillboard(curPlayer) - return def UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate=False, isCheckRule=True): ##更新玩家总战斗力 - - playerFightPower = PlayerControl.GetFightPower(curPlayer) - if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower, - isForceUpdate, isCheckRule, ChConfig.Def_PDict_FightPower_TotalEx): - return - - fightPower = playerFightPower % ChConfig.Def_PerPointValue - fightPowerEx = playerFightPower / ChConfig.Def_PerPointValue - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Total, fightPower, - ChConfig.Def_PDictType_FightPower) - PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_TotalEx, fightPowerEx, - ChConfig.Def_PDictType_FightPower) - - GameWorld.DebugLog("更新总战斗力:playerFightPower=%s" % (playerFightPower), curPlayer.GetPlayerID()) - - UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower, fightPowerEx, fightPower) +# +# playerFightPower = PlayerControl.GetFightPower(curPlayer) +# if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Total, playerFightPower, +# isForceUpdate, isCheckRule, ChConfig.Def_PDict_FightPower_TotalEx): +# return +# +# fightPower = playerFightPower % ChConfig.Def_PerPointValue +# fightPowerEx = playerFightPower / ChConfig.Def_PerPointValue +# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_Total, fightPower, +# ChConfig.Def_PDictType_FightPower) +# PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_TotalEx, fightPowerEx, +# ChConfig.Def_PDictType_FightPower) +# +# GameWorld.DebugLog("更新总战斗力:playerFightPower=%s" % (playerFightPower), curPlayer.GetPlayerID()) +# +# UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower, fightPowerEx, fightPower) # if bType == ShareDefine.Def_BT_FightPower: # playerID = bID @@ -121,117 +102,126 @@ # UpdatePlayerBillboard(bID, bName, bName2, jobBType, bType2, value1, value2, cmpValue, autoSort, cmpValue2, **kwargs) return -def __CheckFightPowerCanUpdate(curPlayer, key, fightPower, isForceUpdate=False, isCheckRule=True, key2=None): - ''' 检查玩家可否更新战斗力 - @param curPlayer 玩家实例 - @param key 战斗力类型对应key - @param fightPower 当前战斗力 - @param isForceUpdate 是否强制更新(若设置强制更新,在某些潜规则下也不一定能强制更新,如GM等) - @param isCheckRule 是否检查战力范围更新差值 - @return True-可更新 - ''' - if fightPower <= 0: - return False - - historyFightPower = curPlayer.NomalDictGetProperty(key, 0, ChConfig.Def_PDictType_FightPower) - if key2 != None: - historyFightPower += curPlayer.NomalDictGetProperty(key2, 0, ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue - - if not __CanPlayerBillboardComm(curPlayer): - return False - - if isForceUpdate: - GameWorld.DebugLog("战斗力更新检查:强制更新 key=%s,fightPower=%s,history=%s" - % (key, fightPower, historyFightPower), curPlayer.GetPlayerID()) - return True - - if fightPower == historyFightPower: - GameWorld.DebugLog("战斗力更新检查:与上次相同,默认不更新 key=%s,fightPower=%s,history=%s" - % (key, fightPower, historyFightPower), curPlayer.GetPlayerID()) - return False - - return True +#def __CheckFightPowerCanUpdate(curPlayer, key, fightPower, isForceUpdate=False, isCheckRule=True, key2=None): +# ''' 检查玩家可否更新战斗力 +# @param curPlayer 玩家实例 +# @param key 战斗力类型对应key +# @param fightPower 当前战斗力 +# @param isForceUpdate 是否强制更新(若设置强制更新,在某些潜规则下也不一定能强制更新,如GM等) +# @param isCheckRule 是否检查战力范围更新差值 +# @return True-可更新 +# ''' +# if fightPower <= 0: +# return False +# +# historyFightPower = curPlayer.NomalDictGetProperty(key, 0, ChConfig.Def_PDictType_FightPower) +# if key2 != None: +# historyFightPower += curPlayer.NomalDictGetProperty(key2, 0, ChConfig.Def_PDictType_FightPower) * ChConfig.Def_PerPointValue +# +# if not __CanPlayerBillboardComm(curPlayer): +# return False +# +# if isForceUpdate: +# GameWorld.DebugLog("战斗力更新检查:强制更新 key=%s,fightPower=%s,history=%s" +# % (key, fightPower, historyFightPower), curPlayer.GetPlayerID()) +# return True +# +# if fightPower == historyFightPower: +# GameWorld.DebugLog("战斗力更新检查:与上次相同,默认不更新 key=%s,fightPower=%s,history=%s" +# % (key, fightPower, historyFightPower), curPlayer.GetPlayerID()) +# return False +# +# return True def UpdateHorseBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True): ##更新玩家坐骑排行榜 - - HorseFightPower = PlayerControl.GetMFPFightPower(curPlayer, ShareDefine.Def_MFPType_Horse) - if not HorseFightPower: - return - - fightPower = HorseFightPower % ChConfig.Def_PerPointValue - fightPowerEx = HorseFightPower / ChConfig.Def_PerPointValue - - UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Horse, fightPowerEx, fightPower) - - if isUpdateTotal: - UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate) return def UpdatePyPetBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True): ## 更新宠物排行榜 - petMaxAtk = PlayerControl.GetPetMaxAtk(curPlayer) - if not petMaxAtk: - return - UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Pet, petMaxAtk) - - if isUpdateTotal: - UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate) - return - -def UpdatePlayerLVBillboard(curPlayer, isForceUpdate=True): - ##更新玩家等级排行榜 - UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_LV, curPlayer.GetLV()) - return - -def UpdateRuneTowerBillboard(curPlayer): - ##更新玩家符印塔排行榜 - passLV = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_TrialTower_PassLV) - if not passLV: - return - UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_TrialTower, passLV) return def UpdateRealmBillboard(curPlayer): ##境界榜 - if not curPlayer.GetOfficialRank(): - return - UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_Realm, curPlayer.GetOfficialRank()) return -def __CanPlayerBillboardComm(curPlayer): - ## 玩家可否上榜通用检查 - if not GameWorld.IsNormalPlayer(curPlayer): - return False - #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Billboard): - # GameWorld.DebugLog("排行榜未开启,无法上榜!curLV=%s" % (curPlayer.GetLV()), curPlayer.GetPlayerID()) - # return False - - return True +#def __CanPlayerBillboardComm(curPlayer): +# ## 玩家可否上榜通用检查 +# if not GameWorld.IsNormalPlayer(curPlayer): +# return False +# #if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Billboard): +# # GameWorld.DebugLog("排行榜未开启,无法上榜!curLV=%s" % (curPlayer.GetLV()), curPlayer.GetPlayerID()) +# # return False +# +# return True -def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, value1=0, value2=0, autoSort=False, **kwargs): +def UpdatePlayerBillboard(curPlayer, bType, cmpValue, cmpValue2=0, cmpValue3=0, value1=None, value2=0, autoSort=False, **kwargs): ## 更新玩家排行榜 #if not cmpValue and not cmpValue2 and not cmpValue3: # return - if not __CanPlayerBillboardComm(curPlayer): - return - playerJob = GetBillboardJob(curPlayer) playerID = curPlayer.GetID() - playerName = curPlayer.GetName() + playerName = curPlayer.GetPlayerName() playerOpInfo = GetBillboardOperateInfo(curPlayer) + if value1 == None: + value1 = curPlayer.GetOfficialRank() kwargs["value3"] = curPlayer.GetFace() kwargs["value4"] = curPlayer.GetFacePic() - if bType in ShareDefine.BTValue1_OfficialRankList: - value1 = curPlayer.GetOfficialRank() - + kwargs["value5"] = curPlayer.GetModelMark() + groupValue1 = 0 UpdateBillboard(bType, groupValue1, playerID, playerName, playerOpInfo, playerJob, value1, value2, cmpValue, cmpValue2, cmpValue3, autoSort=autoSort, **kwargs) return +def UpdateBillboardByID(dataID, billboardType, cmpValue, cmpValue2=0, cmpValue3=0, autoSort=False): + ## 直接根据榜单ID修改榜单排行相关值,其他值不修改 + if GameWorld.IsCrossServer(): + if billboardType not in ShareDefine.CrossBillboardTypeList: + return + else: + if billboardType not in ShareDefine.BillboardTypeList: + return + + if not dataID: + return + + groupValue1, groupValue2 = 0, 0 + billboardMgr = DBDataMgr.GetBillboardMgr() + billboardObj = billboardMgr.GetBillboard(billboardType, groupValue1, groupValue2) + billboardData = billboardObj.FindByID(dataID) + if not billboardData: + return + + isNewData = False + cmpValueChange = isNewData or billboardData.GetCmpValue() != cmpValue or billboardData.GetCmpValue2() != cmpValue2 \ + or (cmpValue3 and billboardData.GetCmpValue3() != cmpValue3) + + # 没设置值默认为时间time,先上榜的排前面 + if cmpValue3 == 0: + # 时间权值仅在比较值变更的情况下才更新, 防止其他附属值更新时导致比较值相同的玩家名次间会变动的问题 + if cmpValueChange: + calcTime = GameWorld.ChangeTimeStrToNum("2090-01-01 00:00:00") + cmpValue3 = max(0, calcTime - int(time.time())) # 比较值3如果没指定值则默认存当前更新的time + else: + cmpValue3 = billboardData.GetCmpValue3() + + billboardData.SetCmpValue(cmpValue) + billboardData.SetCmpValue2(cmpValue2) + billboardData.SetCmpValue3(cmpValue3) + + GameWorld.DebugLog("更新排行榜值: billboardType=%s,groupValue1=%s,groupValue2=%s,dataID=%s,cmpValueChange=%s,cmpValue=%s,cmpValue2=%s,cmpValue3=%s" + % (billboardType, groupValue1, groupValue2, dataID, cmpValueChange, + cmpValue, cmpValue2, cmpValue3), dataID) + if not autoSort: + if isNewData or cmpValueChange: + billboardObj.SetSortDelay() + else: + billboardObj.SortData() + return True + def UpdateBillboard(billboardType, groupValue1, dataID, name1, name2, type2, value1, value2, cmpValue, cmpValue2=0, cmpValue3=0, groupValue2=0, id2=0, autoSort=True, **kwargs): ''' 更新排行榜 -- Gitblit v1.8.0