From d7f44d8d871a90c818bdb3ffe9a60af875b7100a Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 30 九月 2025 10:12:23 +0800 Subject: [PATCH] 135 【挑战】战锤秘境-服务端(白骨盈野;副本基础;副本扫荡;广告奖励支持;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 140 +++++++++++++++------------------------------- 1 files changed, 45 insertions(+), 95 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py index b74e0cb..4537a3c 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -416,10 +416,6 @@ NotifyCode(curPlayer, "CrossMap10") return False - if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene): - GameWorld.Log("客户端自定义场景下无法传送!", curPlayer.GetPlayerID()) - return False - return True @@ -1000,10 +996,8 @@ playerID = curPlayer.GetPlayerID() if not isDisconnect: CrossPlayerData.ClearCrossSyncDataCache(curPlayer) - PyGameData.g_fbBuyBuffTimeDict.pop(playerID, None) #清除地图玩家缓存 PyGameData.g_playerReqEnterFBEx.pop(playerID, None) - NPCCommon.ClearPriWoodPile(curPlayer) #移除地图缓存的境界难度玩家ID信息 for playerIDList in PyGameData.g_realmDiffPlayerDict.values(): if playerID in playerIDList: @@ -1408,7 +1402,7 @@ #进入副本通用检查 fbIpyData = FBCommon.GetFBIpyData(mapID) fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, lineID) - sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID() + sceneMapID = mapID #if not fbLineIpyData else fbLineIpyData.GetMapID() #过滤封包地图ID if not GameWorld.GetMap().IsMapIDExist(sceneMapID): GameWorld.ErrLog('###非法地图数据,sceneMapID: %s' % (sceneMapID), curPlayer.GetID()) @@ -1437,15 +1431,14 @@ GameWorld.Log("非队长,无法发起进入组队副本请求!", curPlayer.GetPlayerID()) return isSendToGameServer = True - if isSendToGameServer or mapID in ChConfig.Def_MapID_SendToGameServer \ - or mapID in ReadChConfig.GetEvalChConfig("MapID_SendToGameServer"): + if isSendToGameServer: extendParamList = [] if mapID in ChConfig.Def_MapID_LineIDToPropertyID: - enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID) + enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FbEnterCnt % mapID) extendParamList = [enterCnt] - elif mapID in ChConfig.MirrorBattleMapIDList: - reqInfoEx["sceneMapID"] = sceneMapID - extendParamList = [reqInfoEx] + #elif mapID in ChConfig.MirrorBattleMapIDList: + # reqInfoEx["sceneMapID"] = sceneMapID + # extendParamList = [reqInfoEx] SendToGameServerEnterFB(curPlayer, mapID, lineID, tick, extendParamList) return @@ -1536,12 +1529,6 @@ if isNotify: NotifyCode(curPlayer, "Carry_lhs_697674") return ShareDefine.EntFBAskRet_Sit - - if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene): - if isNotify: - NotifyCode(curPlayer, "Carry_lhs_697674") - GameWorld.Log("客户端自定义场景下无法进入副本!", curPlayer.GetPlayerID()) - return ShareDefine.EntFBAskRet_Other if playerAction in ChConfig.Def_Player_Cannot_TransState: #Carry_lhs_697674:您当前所处的状态不能进行传送! @@ -1675,8 +1662,7 @@ curPlayer.SetDict(ChConfig.Def_PlayerKey_TransTick, tick) mapID = FBCommon.GetRecordMapID(mapID) - fbLineIpyData = FBCommon.GetFBLineIpyData(mapID, funcLineID) - sceneMapID = mapID if not fbLineIpyData else fbLineIpyData.GetMapID() + sceneMapID = mapID #if not fbLineIpyData else fbLineIpyData.GetMapID() # 地图分流, 减少单地图压力 FBMapShuntDict = ReadChConfig.GetEvalChConfig("FBMapShunt") @@ -1836,8 +1822,8 @@ return tagLineID tagLinePlayerCountDict = PyGameData.g_commMapLinePlayerCountDict[tagMapID] # 此分线包含所有分线,含未开放的及活动分线 - if bossID and tagMapID != ChConfig.Def_FBMapID_BossHome: - tagLineID = 0 # Boss的话未分流前先强制1线,即为0 + #if bossID and tagMapID != ChConfig.Def_FBMapID_BossHome: + # tagLineID = 0 # Boss的话未分流前先强制1线,即为0 playerID = curPlayer.GetPlayerID() playChangeLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_PlayChangeLineID) funcChangeLineID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_FuncChangeLineID) @@ -2499,6 +2485,20 @@ NetPackCommon.SendFakePack(curPlayer, clientPack) return +def GetUnXiantaoCntEquip(curPlayer): + '''因为战锤对应装备是1个战锤可能对应多个装备掉落,所以分解装备的时候1个战锤需要支持可拆分 + 所以需要支持小数存储,暂定以支持3位小数存储 + ''' + return curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip) / 1000.0 +def AddUnXiantaoCntEquip(curPlayer, addCnt): + unXiantaoCntEquip = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip) + addCnt * 1000 + return NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, unXiantaoCntEquip) +def SetUnXiantaoCntEquip(curPlayer, unXiantaoCntEquip): + ## 保存装备未结算战锤数,保留3位小数 + # @param unXiantaoCntEquip: 实际的未结算数量,支持小数 + unXiantaoCntEquip = int(round(unXiantaoCntEquip, 3) * 1000) # 保留3为小数 + return NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, unXiantaoCntEquip) + ##玩家是否有钱款 # @param curPlayer 玩家实例 # @param TYPE_Price ,货币类型 @@ -2789,8 +2789,7 @@ unXiantaoCntExp = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntExp) NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntExp, unXiantaoCntExp + price) # 累加未结算战锤 - 装备 - unXiantaoCntEquip = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCntEquip) - NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntEquip, unXiantaoCntEquip + price) + AddUnXiantaoCntEquip(curPlayer, price) # 累加未结算战锤 - 战利品 chapterID = GetMainLevelNowInfo(curPlayer)[0] chapterIpyData = IpyGameDataPY.GetIpyGameData("MainChapter", chapterID) @@ -2968,7 +2967,7 @@ # @return 返回值真, 给钱成功 # @param isSysHint 是否系统提示(默认是) # @remarks 玩家获得金钱 -def GiveMoney(curPlayer, priceType, value, giveType=ChConfig.Def_GiveMoney_Unknown, addDataDict={}, isSysHint=True, isGiveBourseMoney=True): +def GiveMoney(curPlayer, priceType, value, giveType=ChConfig.Def_GiveMoney_Unknown, addDataDict={}, isSysHint=True, isGiveBourseMoney=True, notifyAward=False): if value == 0: return True @@ -3047,6 +3046,9 @@ # NotifyCode(curPlayer, "GetMoney", [priceType, str(round(value/100.0, 2))]) # else: # NotifyCode(curPlayer, "GetMoney", [priceType, value]) + if notifyAward: + ItemControler.NotifyGiveAwardInfo(curPlayer, [], giveType, moneyInfo={priceType:value}) + __GiveMoneyAfter(curPlayer, priceType, value, giveType, addDataDict) if befMoney == 0: @@ -3312,41 +3314,6 @@ return IpyGameDataPY.GetFuncCfg("PKConfig", 2) #--------------------------------------------------------------------- -##获得玩家升级, 获得的属性点 -# @param curPlayer 玩家实例 -# @return 返回值, 获得的属性点 -# @remarks 获得玩家升级, 获得的属性点 -def GetLvUp_AddPoint(curPlayer): - curPlayerID = curPlayer.GetID() - curLV = curPlayer.GetLV() # 当前等级 - - addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {}) - addPoint = GameWorld.GetDictValueByRangeKey(addPointDict, curLV, 0) - - if addPoint == None: - raise Exception('玩家获得升级属性点异常, curLV = %s PlayerID = %s' % (curLV, curPlayerID)) - return - return int(addPoint+ GetFabaoAddPoint(curPlayer) + GetTitleAddExtraPoint(curPlayer)) - -def GetAllPointByLV(curPlayer): - ##获取当前等级可得到属性点数 - openLV = GameFuncComm.GetFuncLimitLV(ShareDefine.GameFuncID_AddPoint) - curLV = curPlayer.GetLV() - if curLV < openLV: - return 0 - # 初始点+(升级点+法宝效果)*称号效果倍数+境界点 - setFreePoint = IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 2) - fabaoAddPoint = GetFabaoAddPoint(curPlayer) - titleAddPoint = GetTitleAddExtraPoint(curPlayer) - addPointDict = IpyGameDataPY.GetFuncEvalCfg("LVUPAddPoint", 1, {}) - for rangLVs, point in addPointDict.items(): - if curLV < rangLVs[0]: - continue - setFreePoint += (point + fabaoAddPoint + titleAddPoint) * (min(curLV, rangLVs[1]) - rangLVs[0] + 1) - - #境界提升点数 - setFreePoint += curPlayer.GetOfficialRank() * IpyGameDataPY.GetFuncCfg("LVUPAddPoint", 3) - return setFreePoint def GetTitleAddExtraPoint(curPlayer): # 称号额外增加玩家每级获得的灵根点 @@ -3354,23 +3321,6 @@ if titleID and curPlayer.GetDienstgradManager().GetDienstgrad(titleID): return IpyGameDataPY.GetFuncCfg("TitleAddPoint", 2) return 0 - -def GetFabaoAddPoint(curPlayer): - #法宝额外增加玩家每级获得的灵根点 - return 0 - -def DoAddPointOpen(curPlayer): - '''加点功能开启''' - beforeFreePoint = curPlayer.GetFreePoint() - - setFreePoint = GetAllPointByLV(curPlayer) - curLV = curPlayer.GetLV() - addDataDict = {'beforeFreePoint':beforeFreePoint} - curPlayer.SetFreePoint(setFreePoint) - DataRecordPack.DR_Freepoint(curPlayer, "AddPointOpen", setFreePoint, addDataDict) - GameWorld.DebugLog(' 加点功能开启处理 beforeFreePoint=%s,curLV=%s, setFreePoint=%s'%(beforeFreePoint, curLV, setFreePoint), curPlayer.GetID()) - return - #--------------------------------------------------------------------- ############################################################### @@ -4250,11 +4200,11 @@ if actExpIpyData and curPlayer.GetLV() >= actExpIpyData.GetLVLimit(): fightExpRate += actExpIpyData.GetAddExpRate() - if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成 - fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队 + #if curPlayer.GetMapID() not in [ChConfig.Def_FBMapID_FamilyInvade]: #守卫人皇不加组队加成 + # fightExpRate += curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TeamExpRate) # 组队 #地图多倍经验加成,默认是1倍不加成 - mapExpAddMultiple = max(0, FBCommon.GetAreaRewardMultiple(curPlayer) - 1) + mapExpAddMultiple = 0 fightExpRate += mapExpAddMultiple * ChConfig.Def_MaxRateValue if totalExpRate != fightExpRate: @@ -4409,6 +4359,8 @@ value = ComMainLevelValue(chapterID, levelNum, wave) SetMainLevelPassValue(curPlayer, value) if wave == 0: + lvID = chapterID * 100 + levelNum + PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_MainLevel, lvID) PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel) return value def GetMainLevelPassInfo(curPlayer): @@ -4471,16 +4423,6 @@ curPlayer.SetExAttr5(value, False, True) if not value: CrossPlayerData.ClearCrossSyncDataCache(curPlayer) - return - -## 前端自定义场景 -def GetCustomMapID(curPlayer): return curPlayer.GetExAttr14() / 1000 -def GetCustomLineID(curPlayer): return curPlayer.GetExAttr14() % 1000 -## 自定义场景后端判断已结算后需直接重置为0,防止前端没有退出场景直接下线导致数据没有重置,可能引发可以重复进 -def SetCustomMap(curPlayer, mapID, lineID): - value = mapID * 1000 + lineID - if value != curPlayer.GetExAttr14(): - curPlayer.SetExAttr14(value, False, True) return ## 铜钱点, 支持铜钱超20亿 @@ -4595,7 +4537,7 @@ NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_FightPower_HighestEx, highestFightPower / ChConfig.Def_PerPointValue) GameWorld.DebugLog("总战力: %s, 历史最高战力: %s, beforeFightPower=%s" % (value, highestFightPower, beforeFightPower), curPlayer.GetPlayerID()) - PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer) + #PlayerBillboard.UpdatePlayerFPTotalBillboard(curPlayer) # 记录开服活动数据 #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_FightPower, totalFightPower) #if beforeFightPower != totalFightPower: @@ -4743,6 +4685,13 @@ if not lvIpyData: return 0 return lvIpyData.GetExp() + +def GetOpenMaxLV(): + ## 获取游戏开放的最大等级 + maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1) + ipyDataMgr = IpyGameDataPY.IPY_Data() + realmIpyData = ipyDataMgr.GetRealmByIndex(ipyDataMgr.GetRealmCount() - 1) + return min(maxLV, realmIpyData.GetLVMax()) def GetPlayerMaxLV(curPlayer): ## 获取玩家实际可升的最大等级 @@ -4950,10 +4899,11 @@ if value == 0: curPlayer.NomalDictDelProperty(key, dType) - return + return 0 # 2^31 - 1 - curPlayer.NomalDictAddProperty(key, min(value, ChConfig.Def_UpperLimit_DWordEx), dType) - return + value = max(0, min(value, ChConfig.Def_UpperLimit_DWordEx)) + curPlayer.NomalDictAddProperty(key, value, dType) + return value ## 通知祝福值 def Sync_BlessValue(curPlayer, blessType, value, multiple=0): -- Gitblit v1.8.0