From 632add2bff0c18c0a28438596be441428dd7889d Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期二, 09 九月 2025 19:34:03 +0800 Subject: [PATCH] 121 【武将】武将系统-服务端(升星材料卡有升级突破时限制升星;遣散增加返还比例设定;重生增加等级消耗、返还比例设定,重生导致觉醒已解锁槽位失效时该槽位天赋属性同步失效;) --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 111 ++++++++++++++++++++++--------------------------------- 1 files changed, 44 insertions(+), 67 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 d3e6b88..9ad261d 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -33,7 +33,6 @@ import PlayerBillboard import GameServerRefresh import IPY_GameWorld -import PlayerGameWallow import ChPyNetSendPack import NetPackCommon import DataRecordPack @@ -51,7 +50,6 @@ import PlayerActTurntable import PlayerCostRebate import PlayerActLunhuidian -import PlayerActGarbageSorting import GY_Query_CrossRealmReg import PlayerTongTianLing import FunctionNPCCommon @@ -1593,10 +1591,6 @@ # @return 无意义 # @remarks 刷新玩家时钟,切地图玩家时钟记录清空,处理相应逻辑 def RefreshPlayerTick(curPlayer): - tick = GameWorld.GetGameWorld().GetTick() - - #防沉迷切线时间 - PlayerGameWallow.DoLogic_WallowOnlineTime(curPlayer, tick) return @@ -2505,6 +2499,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 ,货币类型 @@ -2795,8 +2803,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) @@ -2811,6 +2818,9 @@ NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCntBooty % itemID, unXiantaoCntBooty + price) PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, price) + PlayerTask.AddTaskValue(curPlayer, ChConfig.TaskType_CutTree, price) + + unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价 #reason_name = "Unknown" if not costType else costType reason_name = costType @@ -2890,7 +2900,6 @@ if costType not in ChConfig.CostRebate_DisableType: PlayerCostRebate.AddCostRebateGold(curPlayer, costType, price, infoDict) PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_UseGold, price) - PlayerActGarbageSorting.AddActGarbageTaskProgress(curPlayer, ChConfig.Def_GarbageTask_UseGold, price) else: GameWorld.DebugLog("不计入消费活动的消费类型!costType=%s" % costType, curPlayer.GetPlayerID()) @@ -3316,41 +3325,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): # 称号额外增加玩家每级获得的灵根点 @@ -3358,23 +3332,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 - #--------------------------------------------------------------------- ############################################################### @@ -3581,7 +3538,6 @@ #if curPlayer.GetMaxMP() > 0: # curPlayer.SetMP(curPlayer.GetMaxMP()) - FBLogic.OnPlayerLVUp(curPlayer) # 记录开服活动冲级数据 #OpenServerCampaign.UpdOpenServerCampaignRecordData(curPlayer, ShareDefine.Def_Campaign_Type_LV, curPlayer.GetLV()) #神秘限购 @@ -4413,11 +4369,17 @@ # @param wave: 第x波 value = ComMainLevelValue(chapterID, levelNum, wave) SetMainLevelPassValue(curPlayer, value) + if wave == 0: + PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_MainLevel) return value def GetMainLevelPassInfo(curPlayer): ## 获取主线关卡过关进度信息 # @return: chapterID, levelNum, wave - return GetMainLevelValue(GetMainLevelPassValue(curPlayer)) + chapterID, levelNum, wave = GetMainLevelValue(GetMainLevelPassValue(curPlayer)) + if not chapterID and not levelNum: + chapterID, levelNum, wave = 1, 1, 0 + SetMainLevelPassValue(curPlayer, ComMainLevelValue(chapterID, levelNum, wave)) + return chapterID, levelNum, wave ## 主线关卡当前进度值 = 章节*10000+关卡编号*100+第x波 def GetMainLevelNowValue(curPlayer): return curPlayer.GetExAttr2() @@ -4433,7 +4395,14 @@ def GetMainLevelNowInfo(curPlayer): ## 获取主线关卡当前进度信息 # @return: chapterID, levelNum, wave - return GetMainLevelValue(GetMainLevelNowValue(curPlayer)) + chapterID, levelNum, wave = GetMainLevelValue(GetMainLevelNowValue(curPlayer)) + if not chapterID and not levelNum: + chapterID, levelNum, wave = 1, 1, 1 + SetMainLevelNowInfo(curPlayer, chapterID, levelNum, wave) + if not wave: + wave = 1 + SetMainLevelNowInfo(curPlayer, chapterID, levelNum, wave) + return chapterID, levelNum, wave def ComMainLevelValue(chapterID, levelNum, wave=0): return chapterID * 10000 + levelNum * 100 + wave def GetMainLevelValue(value): @@ -4736,6 +4705,13 @@ 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): ## 获取玩家实际可升的最大等级 maxLV = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 1) @@ -4942,10 +4918,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