10407 【越南】【英语】【BT】【GM】【砍树】周末BUG汇总(模块战力支持超20亿;开服活动榜同步修改支持超20亿;)
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MfpType", c_ubyte), #模块编号类型
|
| | | ("FightPower", c_int), #本模块战斗力
|
| | | ("FightPower", c_int), #本模块战斗力,求余亿部分
|
| | | ("FightPowerEx", c_int), #本模块战斗力,整除亿部分,1代表1亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.MfpType = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''//A3 A1 各功能模块战斗力信息 //tagMCModuleFightPowerInfo:
|
| | | MfpType:%d,
|
| | | FightPower:%d
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.MfpType,
|
| | | self.FightPower
|
| | | self.FightPower,
|
| | | self.FightPowerEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("CampaignType", c_ubyte), #奖励类型
|
| | | ("BillAwardRecord", c_ubyte), #排行奖励是否已领取
|
| | | ("TagAwardRecord", c_int), #目标奖励索引位领取记录:0-未领;1-已领
|
| | | ("RecordData", c_int), #活动时的记录值
|
| | | ("RecordData", c_int), #活动时的记录值,求余亿部分,为了统一逻辑,其他非战力榜的也使用此规则
|
| | | ("RecordDataEx", c_int), #活动时的记录值,整除亿部分,1代表1亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.BillAwardRecord = 0
|
| | | self.TagAwardRecord = 0
|
| | | self.RecordData = 0
|
| | | self.RecordDataEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | CampaignType:%d,
|
| | | BillAwardRecord:%d,
|
| | | TagAwardRecord:%d,
|
| | | RecordData:%d
|
| | | RecordData:%d,
|
| | | RecordDataEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.CampaignType,
|
| | | self.BillAwardRecord,
|
| | | self.TagAwardRecord,
|
| | | self.RecordData
|
| | | self.RecordData,
|
| | | self.RecordDataEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | GameWorld.GetFamilyManager().SetFamilyUpperLimitCount(ChConfig.Def_Family_MaxCnt)
|
| | | #排序元宝交易平台
|
| | | GameWorld.GetGameWorld().GetDBGoldOrderFormMgr().Sort()
|
| | | PlayerBillboard.FixBillboardBigCmpValue()
|
| | | #排序排行榜
|
| | | PlayerBillboard.SortServerBillboard()
|
| | | #功能队伍
|
| | |
| | |
|
| | | return
|
| | |
|
| | | def FixBillboardBigCmpValue():
|
| | | ## 修正部分榜单大比较值,支持超20亿,主要为了模块战力等支持超20亿
|
| | | if PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FixBillboardBigCmpValue):
|
| | | GameWorld.Log("修正部分榜单大比较值支持超20亿已经处理过")
|
| | | return
|
| | | PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_FixBillboardBigCmpValue, 1)
|
| | | fixBillTypeList = [ShareDefine.Def_BT_FightPower_Horse]
|
| | | fixBillTypeList += ShareDefine.Def_Campaign_Billboard_Dict.values()
|
| | | GameWorld.Log("修正部分榜单大比较值支持超20亿: %s" % fixBillTypeList)
|
| | | |
| | | billboardMgr = GameWorld.GetBillboard()
|
| | | for billboardType in fixBillTypeList:
|
| | | billBoard = billboardMgr.FindBillboard(billboardType)
|
| | | dataCount = billBoard.GetCount()
|
| | | if not dataCount:
|
| | | continue
|
| | | DataRecordPack.DR_BillboardData(billboardType, "FixBillboardBigCmpValue")
|
| | | GameWorld.Log("修正榜单大比较值: billboardType=%s" % billboardType)
|
| | | for index in range(dataCount):
|
| | | boardData = billBoard.At(index)
|
| | | if not boardData:
|
| | | continue
|
| | | dataID = boardData.GetID()
|
| | | cmpValue = boardData.GetCmpValue()
|
| | | cmpValue2 = boardData.GetCmpValue2()
|
| | | if cmpValue2:
|
| | | GameWorld.Log(" index=%s,dataID=%s, keep CmpValue=%s,CmpValue2=%s" % (index, dataID, cmpValue, cmpValue2))
|
| | | continue
|
| | | boardData.SetCmpValue(0)
|
| | | boardData.SetCmpValue2(cmpValue)
|
| | | |
| | | cmpValue = boardData.GetCmpValue()
|
| | | cmpValue2 = boardData.GetCmpValue2()
|
| | | GameWorld.Log(" index=%s,dataID=%s, Update CmpValue=%s,CmpValue2=%s" % (index, dataID, cmpValue, cmpValue2))
|
| | | |
| | | return
|
| | |
|
| | | def SortServerBillboard():
|
| | | ##排序所有排行榜
|
| | | billboardMgr = GameWorld.GetBillboard()
|
| | |
| | | else:
|
| | | cmpValue3 = playerBillBoardData.GetCmpValue3()
|
| | |
|
| | | GameWorld.DebugLog("更新排行榜值 index=%s,type2=%s,value1=%s,value2=%s,cmpValue=%s,cmpValue2==%s,cmpValue3==%s,isNewData=%s,cmpValueChange=%s,%s" |
| | | % (billboardIndex, type2, value1, value2, cmpValue, cmpValue2, cmpValue3, isNewData, cmpValueChange, kwargs), curPlayerID)
|
| | | |
| | | #设置排行榜数据
|
| | | playerBillBoardData.SetType(billboardIndex)
|
| | | #附属类型
|
| | |
| | | if cmpValue3 > 0:
|
| | | playerBillBoardData.SetCmpValue3(cmpValue3)
|
| | |
|
| | | GameWorld.DebugLog("更新排行榜值 index=%s,type2=%s,value1=%s,value2=%s,cmpValue=%s,cmpValue2==%s,cmpValue3==%s,isNewData=%s,cmpValueChange=%s,%s" |
| | | % (billboardIndex, type2, value1, value2, cmpValue, cmpValue2, cmpValue3, isNewData, cmpValueChange, kwargs), curPlayerID)
|
| | | if not cmpValueChange:
|
| | | return True
|
| | |
|
| | |
| | | #服务器开服自动逻辑处理 小时
|
| | | Def_Server_Hour = 'Def_Server_Hour'
|
| | |
|
| | | # 排行榜大数值比较值修正标记
|
| | | Def_FixBillboardBigCmpValue = "FixBillboardBigCmpValue"
|
| | |
|
| | | # 交易所开关
|
| | | Def_BourseState = "BourseState"
|
| | |
|
| | |
| | | Def_PlayerKey_AttrXPRestorePer = "AttrXPRestorePer" #自动恢复XP值比率
|
| | | Def_PlayerKey_MarkLoadMapTick = "LoadMapTickVIP" #记录切换地图后的tick,VIP
|
| | | Def_PlayerKey_MTFreeOnlineRefreshTick = "MTFreeOnlineRTick" # 寻宝在线计算时间
|
| | | Def_PlayerKey_MFPFightPower = "MFPFightPower_%s" #模块战斗力, 参数(模块类型索引)
|
| | | Def_PlayerKey_MFPFightPower = "MFPFightPower_%s" #模块战斗力, 求余亿部分,参数(模块类型索引)
|
| | | Def_PlayerKey_MFPFightPowerPoint = "MFPFightPowerPoint_%s" #模块战斗力, 整除亿部分,参数(模块类型索引)
|
| | | Def_PlayerKey_MFPSkill = "MFPSkill_%s" #技能附加战斗力, 参数(模块类型索引)
|
| | | Def_PlayerKey_MFPSkillEx = "MFPSkillEx_%s" #技能附加战斗力, 参数(模块类型索引)
|
| | | Def_PlayerKey_MFPEx = "MFPEx_%s" #模块附加战斗力, 参数(模块类型索引)
|
| | | Def_PlayerKey_MFPExPoint = "MFPExPoint_%s" #模块附加战斗力, 参数(模块类型索引)
|
| | | Def_PlayerKey_AtkWithoutBuff = "AtkWithoutBuff" #玩家无buff状态下的攻击值
|
| | |
| | | #奖励记录 - 从低位到高位,每位表示:0-不可领;1-可领取;2-已领
|
| | | Def_PDict_OSC_BillAwardRecord = "OSCBillAwardRecord" # 开服活动排行奖励记录, 按活动类型位存储是否领取/处理过
|
| | | Def_PDict_OSC_TagAwardRecord = "OSCTagAwardRecord_%s" # 开服活动目标奖励记录, 参数(活动类型), 按奖励位存储是否领取
|
| | | Def_PDict_OSC_RecordData = "OSCRecordData_%s" # 开服活动记录数值, 参数(活动类型)
|
| | | Def_PDict_OSC_RecordData = "OSCRecordData_%s" # 开服活动记录数值, 求余亿部分,参数(活动类型)
|
| | | Def_PDict_OSC_RecordDataEx = "OSCRecordDataEx_%s" # 开服活动记录数值, 整除亿部分,参数(活动类型)
|
| | | Def_PDict_OSC_EndMailState = "EndMailState" # 开服活动结束发放邮件处理状态, 记录该状态的目的是防止开服活动版本变更导致旧号重复补发奖励;
|
| | |
|
| | | # 法器
|
| | |
| | | Def_PDict_FightPower_HighestEx = "FightPower_HighestEx" # 历史最高总战斗力
|
| | | Def_PDict_FightPower_Total = "FightPower_Total" # 总战斗力
|
| | | Def_PDict_FightPower_TotalEx = "FightPower_TotalEx" # 总战斗力
|
| | | Def_PDict_FightPower_Horse = "FightPower_Horse" # 坐骑战斗力
|
| | |
|
| | | Def_PDict_FightPower_List = [Def_PDict_FightPower_Total, Def_PDict_FightPower_TotalEx, Def_PDict_FightPower_Horse]
|
| | | Def_PDict_FightPower_List = [Def_PDict_FightPower_Total, Def_PDict_FightPower_TotalEx]
|
| | |
|
| | | # 每日活跃度
|
| | | Def_PDict_Activity_FinishCnt = "Activity_FinishCnt_%s" # 活跃度类型对应完成次数
|
| | |
| | | _pack_ = 1
|
| | | _fields_ = [
|
| | | ("MfpType", c_ubyte), #模块编号类型
|
| | | ("FightPower", c_int), #本模块战斗力
|
| | | ("FightPower", c_int), #本模块战斗力,求余亿部分
|
| | | ("FightPowerEx", c_int), #本模块战斗力,整除亿部分,1代表1亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | def Clear(self):
|
| | | self.MfpType = 0
|
| | | self.FightPower = 0
|
| | | self.FightPowerEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | def OutputString(self):
|
| | | DumpString = '''//A3 A1 各功能模块战斗力信息 //tagMCModuleFightPowerInfo:
|
| | | MfpType:%d,
|
| | | FightPower:%d
|
| | | FightPower:%d,
|
| | | FightPowerEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.MfpType,
|
| | | self.FightPower
|
| | | self.FightPower,
|
| | | self.FightPowerEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | ("CampaignType", c_ubyte), #奖励类型
|
| | | ("BillAwardRecord", c_ubyte), #排行奖励是否已领取
|
| | | ("TagAwardRecord", c_int), #目标奖励索引位领取记录:0-未领;1-已领
|
| | | ("RecordData", c_int), #活动时的记录值
|
| | | ("RecordData", c_int), #活动时的记录值,求余亿部分,为了统一逻辑,其他非战力榜的也使用此规则
|
| | | ("RecordDataEx", c_int), #活动时的记录值,整除亿部分,1代表1亿
|
| | | ]
|
| | |
|
| | | def __init__(self):
|
| | |
| | | self.BillAwardRecord = 0
|
| | | self.TagAwardRecord = 0
|
| | | self.RecordData = 0
|
| | | self.RecordDataEx = 0
|
| | | return
|
| | |
|
| | | def GetLength(self):
|
| | |
| | | CampaignType:%d,
|
| | | BillAwardRecord:%d,
|
| | | TagAwardRecord:%d,
|
| | | RecordData:%d
|
| | | RecordData:%d,
|
| | | RecordDataEx:%d
|
| | | '''\
|
| | | %(
|
| | | self.CampaignType,
|
| | | self.BillAwardRecord,
|
| | | self.TagAwardRecord,
|
| | | self.RecordData
|
| | | self.RecordData,
|
| | | self.RecordDataEx
|
| | | )
|
| | | return DumpString
|
| | |
|
| | |
| | | def __DoOSCReset(curPlayer, campaignType):
|
| | | # 更新领奖记录
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_TagAwardRecord % campaignType, 0)
|
| | | #PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordData % campaignType, 0)
|
| | | GameWorld.DebugAnswer(curPlayer, 'OSCReset %s OK!'%campaignType)
|
| | | return
|
| | |
|
| | |
| | | GameWorld.DebugAnswer(curPlayer, "===== 总战力: %s" % PlayerControl.GetFightPower(curPlayer))
|
| | | for mfpType in ChConfig.MFPTypeAttrFuncIndexDict.keys():
|
| | | fightPower = PlayerControl.GetMFPFightPower(curPlayer, mfpType)
|
| | | mfpSkillFP = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
|
| | | mfpSkillFP = PlayerControl.GetMFPSkillFightPower(curPlayer, mfpType)
|
| | | mfpEx = PlayerControl.GetMFPExFightPower(curPlayer, mfpType)
|
| | | name = mfpTypeName.get(mfpType, "模块%s" % mfpType)
|
| | | if mfpSkillFP or mfpEx:
|
| | |
| | | ShareDefine.Def_Campaign_Type_Wash:"洗练",
|
| | | }
|
| | |
|
| | | if len(cmdList) == 1:
|
| | | recordData = cmdList[0]
|
| | | for oscType, name in oscTypeDict.items():
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordData % oscType, recordData)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置[%s]活动数值: %s OK!" % (name, recordData))
|
| | | OpenServerCampaign.Sync_OpenServerCampaignAward(curPlayer)
|
| | | return
|
| | | |
| | | if len(cmdList) != 2:
|
| | | __AnswerHelp(curPlayer, oscTypeDict)
|
| | | return
|
| | |
| | | __AnswerHelp(curPlayer, oscTypeDict)
|
| | | return
|
| | |
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordData % campaignType, recordData)
|
| | | recordData = OpenServerCampaign.SetOSCRecordData(curPlayer, campaignType, recordData)
|
| | | OpenServerCampaign.Sync_OpenServerCampaignAward(curPlayer, campaignType)
|
| | | GameWorld.DebugAnswer(curPlayer, "设置[%s]活动数值: %s OK!" % (oscTypeDict.get(campaignType), recordData))
|
| | | return
|
| | |
| | | for oscType, name in oscTypeDict.items():
|
| | | helpTypeStr += "%s-%s," % (oscType, name)
|
| | |
|
| | | GameWorld.DebugAnswer(curPlayer, "SetOSCRecordData [活动类型, 数值]")
|
| | | GameWorld.DebugAnswer(curPlayer, "SetOSCRecordData 活动类型 数值")
|
| | | GameWorld.DebugAnswer(curPlayer, "活动类型:%s" % helpTypeStr)
|
| | | return
|
| | |
|
| | |
| | |
|
| | | def DoBillboardOpen(curPlayer):
|
| | | for campaignType, billBoardType in ShareDefine.Def_Campaign_Billboard_Dict.items():
|
| | | value = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)
|
| | | value = GetOSCRecordData(curPlayer, campaignType)
|
| | | GameWorld.DebugLog("排行榜开启,同步开服活动记录!campaignType=%s,billBoardType=%s,value=%s" % (campaignType, billBoardType, value))
|
| | | if CanUpdOSCBillboard(curPlayer, campaignType, value):
|
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, billBoardType, value)
|
| | |
| | | def CanUpdOSCBillboard(curPlayer, campaignType, curValue): return __CanUpdOSCRecordData(campaignType, curValue)
|
| | | def IsNeedSaveOpenServerCampaignRecordData(campaignType): return __CanUpdOSCRecordData(campaignType)
|
| | |
|
| | | def GetOSCRecordData(curPlayer, campaignType):
|
| | | return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType) + \
|
| | | curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordDataEx % campaignType) * ChConfig.Def_PerPointValue
|
| | | |
| | | def SetOSCRecordData(curPlayer, campaignType, updRecordData):
|
| | | recordData = updRecordData % ChConfig.Def_PerPointValue
|
| | | recordDataEx = updRecordData / ChConfig.Def_PerPointValue
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordData % campaignType, recordData)
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordDataEx % campaignType, recordDataEx)
|
| | | return GetOSCRecordData(curPlayer, campaignType)
|
| | |
|
| | | def AddOpenServerCampaignRecordData(curPlayer, campaignType, addValue):
|
| | | ## 增加开服活动数据记录(外调函数)
|
| | | recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)
|
| | | recordData = GetOSCRecordData(curPlayer, campaignType)
|
| | |
|
| | | recordData += addValue
|
| | | UpdOpenServerCampaignRecordData(curPlayer, campaignType, recordData)
|
| | |
| | | #GameWorld.DebugLog(" 非开服活动记录数据时机, campaignType=%s" % campaignType)
|
| | | return
|
| | |
|
| | | recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)
|
| | | recordData = GetOSCRecordData(curPlayer, campaignType)
|
| | |
|
| | | if value == recordData:
|
| | | GameWorld.DebugLog(" 开服活动数据等于历史记录, 不更新 campaignType=%s,recordData=%s,updValue=%s"
|
| | |
| | | return
|
| | |
|
| | | # 更新开服活动时的记录数值
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_OSC_RecordData % campaignType, value)
|
| | | value = SetOSCRecordData(curPlayer, campaignType, value)
|
| | | Sync_OpenServerCampaignAward(curPlayer, campaignType)
|
| | | GameWorld.DebugLog(" 更新开服活动数据记录 campaignType=%s,recordData=%s,updValue=%s"
|
| | | % (campaignType, recordData, value), curPlayer.GetPlayerID())
|
| | |
|
| | | canUpdOSCBill = CanUpdOSCBillboard(curPlayer, campaignType, value)
|
| | | if campaignType in ShareDefine.Def_Campaign_Billboard_Dict and (value <= recordData or canUpdOSCBill):
|
| | | cmpValue = value / ChConfig.Def_PerPointValue
|
| | | cmpValue2 = value % ChConfig.Def_PerPointValue
|
| | | if not canUpdOSCBill:
|
| | | value = -1
|
| | | cmpValue = -1
|
| | | cmpValue2 = 0
|
| | | GameWorld.DebugLog(" 不能上榜降数据的,设置该榜单数据为-1,删除该数据!", curPlayer.GetPlayerID())
|
| | | billBoardType = ShareDefine.Def_Campaign_Billboard_Dict[campaignType]
|
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, billBoardType, value)
|
| | | PlayerBillboard.UpdatePlayerBillboard(curPlayer, billBoardType, cmpValue, cmpValue2)
|
| | | return
|
| | |
|
| | | ##==================================================================================================
|
| | |
| | | return
|
| | |
|
| | | condition = tagAwardIpyData.GetTagCondition()
|
| | | recordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % campaignType)
|
| | | recordData = GetOSCRecordData(curPlayer, campaignType)
|
| | | if recordData < condition:
|
| | | GameWorld.DebugLog(" 未达到该开服活动目标条件奖励!campaignType=%s,index=%s,recordData=%s < condition=%s"
|
| | | % (campaignType, index, recordData, condition), curPlayer.GetPlayerID())
|
| | |
| | | oscAward.BillAwardRecord = 1 if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_BillAwardRecord) & pow(2, syncOSCType) else 0
|
| | | oscAward.TagAwardRecord = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_TagAwardRecord % syncOSCType)
|
| | | oscAward.RecordData = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordData % syncOSCType)
|
| | | oscAward.RecordDataEx = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_OSC_RecordDataEx % syncOSCType)
|
| | | oscAwardListPack.OSCAwardList.append(oscAward)
|
| | |
|
| | | oscAwardListPack.OSCAwardCnt = len(oscAwardListPack.OSCAwardList)
|
| | |
| | | bData["UserData"] = kwargs["userData"]
|
| | | sendMsg = "%s" % (bData)
|
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, "UpdateBillboard", sendMsg, len(sendMsg))
|
| | | GameWorld.DebugLog("同步GameServer排行榜:bType=%s,cmpValue=%s, %s" % (bType, cmpValue, sendMsg), bID)
|
| | | GameWorld.DebugLog("同步GameServer排行榜:bType=%s,cmpValue=%s,cmpValue2=%s %s" % (bType, cmpValue, cmpValue2, sendMsg), bID)
|
| | | return
|
| | |
|
| | | def UpdatePlayerCrossBillboard(curPlayer, bType, groupValue1, cmpValue, cmpValue2=0, cmpValue3=0, value1=0, value2=0,
|
| | |
| | |
|
| | | return True
|
| | |
|
| | | def __GetUpdFightPower(curPlayer, key, fightPower):
|
| | | ##获取更新排行榜的战力
|
| | | #暂定更新实际战力
|
| | | PlayerControl.NomalDictSetProperty(curPlayer, key, fightPower, ChConfig.Def_PDictType_FightPower)
|
| | | return fightPower
|
| | |
|
| | | def UpdateHorseBillboard(curPlayer, isForceUpdate=False, isUpdateTotal=True):
|
| | | ##更新玩家坐骑排行榜
|
| | |
|
| | | HorseFightPower = PlayerControl.GetMFPFightPower(curPlayer, ShareDefine.Def_MFPType_Horse)
|
| | | if not __CheckFightPowerCanUpdate(curPlayer, ChConfig.Def_PDict_FightPower_Horse,
|
| | | HorseFightPower, isForceUpdate):
|
| | | if not HorseFightPower:
|
| | | return
|
| | |
|
| | | HorseFightPower = __GetUpdFightPower(curPlayer, ChConfig.Def_PDict_FightPower_Horse, HorseFightPower)
|
| | | fightPower = HorseFightPower % ChConfig.Def_PerPointValue
|
| | | fightPowerEx = HorseFightPower / ChConfig.Def_PerPointValue
|
| | |
|
| | | UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Horse, HorseFightPower)
|
| | | UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_FightPower_Horse, fightPowerEx, fightPower)
|
| | |
|
| | | if isUpdateTotal:
|
| | | UpdatePlayerFPTotalBillboard(curPlayer, isForceUpdate)
|
| | |
| | |
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_ChatBox, allAttrList)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_ChatBox, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_ChatBox, fightPowerEx)
|
| | | return
|
| | |
|
| | | #// A2 30 设置聊天气泡框 #tagCMSetChatBubbleBox
|
| | |
| | | PlayerControl.CalcAttrDict_Type(int(attrID), attrValue, allAttrList)
|
| | |
|
| | | # 保存计算值
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Coat, initFPAdd)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Coat, initFPAdd)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Coat, allAttrList)
|
| | | return
|
| | |
|
| | |
| | | #GameWorld.DebugLog("MfpType=%s,FightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
|
| | | if totalFightPower > ShareDefine.Def_UpperLimit_DWord:
|
| | | GameWorld.ErrLog("模块战力超过数值上限, MfpType=%s,fightPower=%s, %s" % (self.mfpType, totalFightPower, self.GetMFPAttrStr()))
|
| | | totalFightPower = ShareDefine.Def_UpperLimit_DWord
|
| | | #totalFightPower = ShareDefine.Def_UpperLimit_DWord 模块战力支持超20亿,日志暂保留用于输出提醒
|
| | | return totalFightPower
|
| | |
|
| | | def GetMFPAttrStr(self):
|
| | |
| | | #GameWorld.DebugLog("等级属性点加属性: %s" % allAttrList)
|
| | | #GameWorld.DebugLog("灵根品阶等级属性: %s" % lingGenQualityAttrList)
|
| | | #GameWorld.DebugLog("灵根点数附加战力: %s" % pointFightPowerEx)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Role, pointFightPowerEx) |
| | | SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Role, pointFightPowerEx)
|
| | | SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_RoleBase, allAttrList)
|
| | | SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_LingGenQuailty, lingGenQualityAttrList)
|
| | | return hasChange_Qualitylv
|
| | |
| | | # 因为计算战力需要取到总属性,所以等各功能点属性累加完后再计算
|
| | | for mfpType, mfpObj in mfpObjDict.items():
|
| | | mfpValue = 0 if not fpParam else mfpObj.GetModuleFightPower(fpParam, curPlayer)
|
| | | mfpSkill = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpObj.mfpType)
|
| | | mfpEx = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpObj.mfpType)
|
| | | mfpSkill = GetMFPSkillFightPower(curPlayer, mfpObj.mfpType)
|
| | | mfpEx = GetMFPExFightPower(curPlayer, mfpType)
|
| | | mfpTotal = mfpValue + mfpSkill + mfpEx
|
| | | mfpDict[mfpObj.mfpType] = min(mfpTotal, ChConfig.Def_UpperLimit_DWord)
|
| | | mfpDict[mfpObj.mfpType] = mfpTotal
|
| | |
|
| | | if mfpType == ShareDefine.Def_MFPType_Plus:
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_Plus, mfpTotal)
|
| | |
| | |
|
| | | # 重置模块技能战斗力
|
| | | for mfpType in ShareDefine.ModuleFightPowerTypeList:
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, 0)
|
| | | SetMFPSkillFightPower(curPlayer, mfpType, 0)
|
| | |
|
| | | for i in range(0, skillManager.GetSkillCount()):
|
| | | curSkill = skillManager.GetSkillByIndex(i)
|
| | |
|
| | | mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
|
| | |
|
| | | skillMFP = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, skillMFP + curSkill.GetFightPower())
|
| | | |
| | | skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
|
| | | SetMFPSkillFightPower(curPlayer, mfpType, skillMFP + curSkill.GetFightPower())
|
| | |
|
| | | return
|
| | |
|
| | |
| | | return
|
| | |
|
| | | mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
|
| | | addFightPower = curSkill.GetFightPower() - beforeFightPower
|
| | | skillMFP = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, max(0, skillMFP + addFightPower))
|
| | | addFightPower = curSkill.GetFightPower() - beforeFightPower |
| | | skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
|
| | | SetMFPSkillFightPower(curPlayer, mfpType, max(0, skillMFP + addFightPower))
|
| | | GameWorld.DebugLog("刷新技能附加战斗力: skillID=%s,beforeFightPower=%s,mfpType=%s,skillMFP=%s,updMFP=%s"
|
| | | % (skillID, beforeFightPower, mfpType, skillMFP, skillMFP + addFightPower), curPlayer.GetPlayerID())
|
| | |
|
| | |
| | | return
|
| | | delFightPower = curSkill.GetFightPower()
|
| | | mfpType = ChConfig.Def_SkillFuncType_MFPType.get(curSkill.GetFuncType(), ShareDefine.Def_MFPType_Role)
|
| | | skillMFP = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, max(0, skillMFP - delFightPower))
|
| | | skillMFP = GetMFPSkillFightPower(curPlayer, mfpType)
|
| | | SetMFPSkillFightPower(curPlayer, mfpType, max(0, skillMFP - delFightPower))
|
| | | GameWorld.DebugLog("刷新技能附加战斗力: delSkillID=%s,mfpType=%s,skillMFP=%s,delFightPower=%s"
|
| | | % (delSkillID, mfpType, skillMFP, delFightPower), curPlayer.GetPlayerID())
|
| | |
|
| | |
| | | mfpData = ChPyNetSendPack.tagMCModuleFightPower()
|
| | | mfpData.Clear()
|
| | | mfpData.MfpType = mfpType
|
| | | mfpData.FightPower = fightPower # 当前模块战斗力数值
|
| | | mfpData.FightPower = fightPower % ChConfig.Def_PerPointValue # 当前模块战斗力数值
|
| | | mfpData.FightPowerEx = fightPower / ChConfig.Def_PerPointValue # 当前模块战斗力数值
|
| | | mfpDataList.append(mfpData)
|
| | | totalFightPower += fightPower # 累加总战斗力
|
| | |
|
| | |
| | | ChConfig.Def_PDictType_FightPower)
|
| | | GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (totalFightPower, highestFightPower, beforeFightPower), playerID)
|
| | | PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer)
|
| | | # 记录开服活动数据,开服活动前X天理论上不会超过20E,暂不处理
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, min(totalFightPower, ChConfig.Def_UpperLimit_DWord))
|
| | | # 记录开服活动数据
|
| | | OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower)
|
| | | if beforeFightPower != totalFightPower:
|
| | | CrossPlayerData.OnPlayerFightPowerChange(curPlayer)
|
| | | return
|
| | |
| | | def GetPrestige(curPlayer): return 0
|
| | | def SetPrestige(curPlayer, value): return
|
| | |
|
| | | ##总战斗力,支持超过20E
|
| | | ##总战斗力,支持超过20E = 各模块战力总和
|
| | | def GetFightPower(curPlayer): return curPlayer.GetFightPowerEx() * ChConfig.Def_PerPointValue + curPlayer.GetFightPower()
|
| | | def SetFightPower(curPlayer, value):
|
| | | curPlayer.SetFightPower(value % ChConfig.Def_PerPointValue, value / ChConfig.Def_PerPointValue, False) # 不通知GameServer bNotifyGameServer False
|
| | | return
|
| | |
|
| | | ## 设置模块战斗力,最大20E
|
| | | ## 设置模块战斗力,支持超过20E = 模块公式战力 + 技能附加战力 + 其他附加战力
|
| | | def SetMFPFightPower(curPlayer, mfpType, fightPower):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPower % mfpType, min(fightPower, ChConfig.Def_UpperLimit_DWord))
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPower % mfpType, fightPower % ChConfig.Def_PerPointValue)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPFightPowerPoint % mfpType, fightPower / ChConfig.Def_PerPointValue)
|
| | | return
|
| | |
|
| | | ## 获取模块战斗力
|
| | | def GetMFPFightPower(curPlayer, mfpType):
|
| | | return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPower % mfpType)
|
| | | return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPowerPoint % mfpType) * ChConfig.Def_PerPointValue + \
|
| | | curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPFightPower % mfpType)
|
| | |
|
| | | ## 设置模块附加战斗力,支持超过20E
|
| | | def SetMFPExFightPower(curPlayer, mfpType, fightPower):
|
| | |
| | | def GetMFPExFightPower(curPlayer, mfpType):
|
| | | return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPExPoint % mfpType) * ChConfig.Def_PerPointValue + \
|
| | | curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPEx % mfpType)
|
| | | |
| | | ## 设置模块技能附加战斗力,支持超过20E
|
| | | def SetMFPSkillFightPower(curPlayer, mfpType, fightPower):
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkill % mfpType, fightPower % ChConfig.Def_PerPointValue)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPSkillEx % mfpType, fightPower / ChConfig.Def_PerPointValue)
|
| | | return
|
| | |
|
| | | ## 获取模块技能附加战斗力
|
| | | def GetMFPSkillFightPower(curPlayer, mfpType):
|
| | | return curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkillEx % mfpType) * ChConfig.Def_PerPointValue + \
|
| | | curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_MFPSkill % mfpType)
|
| | | |
| | | #===============================================================================
|
| | | ##获取玩家分线信息
|
| | | # @param curPlayer 玩家实例
|
| | |
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue, allAttrListStar)
|
| | |
|
| | | # 保存计算值
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Dienstgrad, initFPAdd)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Dienstgrad, initFPAdd)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Dienstgrad, allAttrList)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_TitleStar, allAttrListStar)
|
| | | return
|
| | |
| | | equipFightPowerEx = eval(IpyGameDataPY.GetFuncCompileCfg("FightpowerFormula", 2))
|
| | | #GameWorld.DebugLog("神兽装备评分战力: equipScoreTotal=%s,equipFightPowerEx=%s" % (equipScoreTotal, equipFightPowerEx))
|
| | | fightPowerEx += equipFightPowerEx
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Dogz, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Dogz, fightPowerEx)
|
| | |
|
| | | # 技能属性,从Def_CalcAttrFunc_Dogz获取
|
| | | skillAttrList = CalcDogzBattleSkillAttr(curPlayer)
|
| | |
| | |
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Face, allAttrList)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Face, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Face, fightPowerEx)
|
| | | return
|
| | |
|
| | | def CalcFacePicAttr(curPlayer):
|
| | |
| | |
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FacePic, allAttrList)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_FacePic, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_FacePic, fightPowerEx)
|
| | | return
|
| | |
|
| | | #// B2 26 头像幻化 #tagCMFaceChange
|
| | |
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_FamilyTech, allAttrList)
|
| | |
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Other, skillFPEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Other, skillFPEx)
|
| | | return
|
| | |
|
| | |
|
| | |
| | |
|
| | |
|
| | | # 附加战力
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_GodWeapon, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_GodWeapon, fightPowerEx)
|
| | | #GameWorld.DebugLog("神兵属性:%s" % allAttrList)
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_GodWeapon, allAttrList)
|
| | |
| | | attrValue = eatItemAttrValueList[i]
|
| | | PlayerControl.CalcAttrDict_Type(attrID, attrValue * attrMultiple, allAttrListTrain)
|
| | |
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Horse, initFPAdd)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Horse, initFPAdd)
|
| | |
|
| | | #GameWorld.DebugLog("坐骑功能属性: horseLV=%s,horseSpeed=%s,totalItemCount=%s,initFPAdd=%s" % (horseLV, horseSpeed, totalItemCount, initFPAdd))
|
| | |
|
| | |
| | |
|
| | | # 果实对坐骑的加成, 魂石果实算附加属性层,单独计算
|
| | | fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListHorseSoul, ShareDefine.Def_AttrFruitFunc_Horse)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_HorseSoul, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_HorseSoul, fightPowerEx)
|
| | |
|
| | | # 保存计算值
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Horse, allAttrList, customAttrDict=customAttrDictHorse)
|
| | |
| | | totalSignNum = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_TotalSignNum) # 总签到天数
|
| | | # 果实给人物加属性, 魂石果实算附加属性层,单独计算
|
| | | fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrListPetSoul, ShareDefine.Def_AttrFruitFunc_Pet)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_PetSoul, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_PetSoul, fightPowerEx)
|
| | |
|
| | | #灵兽技能给人物加的属性
|
| | | learnSkillList, passiveSkillList = GetPetLearnSkill(curPlayer)
|
| | |
| | |
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetSkin, allAttrListPetSkin)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_PetStar, allAttrListStar)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Pet, fpExTotal)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Pet, fpExTotal)
|
| | | # GameWorld.DebugLog("宠物榜NPCID: %s, petDict=%s" % (billPetNPCID, str(billPetDict)))
|
| | | return
|
| | |
|
| | |
| | | allAttrYaoList = [{} for _ in range(4)]
|
| | | fightPowerEx = PlayerAttrFruit.CalcAttrFruitAddAtrr(curPlayer, allAttrYaoList, ShareDefine.Def_AttrFruitFunc_Stove)
|
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_StoveYao, allAttrYaoList)
|
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_StoveYao, fightPowerEx)
|
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_StoveYao, fightPowerEx)
|
| | | return
|
| | |
|
| | |
|
| | |
| | | |
| | | customAttrDictShentong["shentongSkillInfo"] = shentongSkillInfo |
| | | # 附加战力 |
| | | curPlayer.SetDict(ChConfig.Def_PlayerKey_MFPEx % ShareDefine.Def_MFPType_Shentong, fightPowerEx) |
| | | PlayerControl.SetMFPExFightPower(curPlayer, ShareDefine.Def_MFPType_Shentong, fightPowerEx) |
| | | # 保存计算值 |
| | | PlayerControl.SetCalcAttrListValue(curPlayer, ChConfig.Def_CalcAttrFunc_Shentong, allAttrList, customAttrDict=customAttrDictShentong) |
| | | return |