From dc0b92c1e2fe9f3d24c183b325dad54d088735c1 Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期四, 10 七月 2025 17:01:24 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_ServerCode --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py | 209 ++++++++++------------------------------------------ 1 files changed, 40 insertions(+), 169 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 e839b60..020ef1f 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerControl.py @@ -2884,8 +2884,10 @@ #轮回殿 PlayerActLunhuidian.AddLunhuidianValue(curPlayer, PlayerActLunhuidian.AwardType_PayMoney, type_Price, price) if type_Price == ShareDefine.TYPE_Price_Xiantao: - unXiantaoCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_UnXiantaoCnt) - NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_UnXiantaoCnt, unXiantaoCnt + price) + 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) PlayerPrestigeSys.AddRealmTaskValue(curPlayer, PlayerPrestigeSys.RealmTaskType_UseXiantao, price) unitPrice = price if quantity == 1 else int(math.ceil(price * 1.0 / quantity)) # 单价 #reason_name = "Unknown" if not costType else costType @@ -3731,31 +3733,25 @@ NetPackCommon.SendFakePack(curPlayer, sendPack) #副本获得经验, 无论获得多少经验均需通知, 有些副本逻辑需要通过获得经验时机处理 - if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: - FBLogic.OnGetExp(curPlayer, finalAddExp, expViewType) - + #if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull: + # FBLogic.OnGetExp(curPlayer, finalAddExp, expViewType) + return finalAddExp # 参数 addSkillID 表示因什么技能杀死NPC获得经验 def __AddExp(self, curPlayer, addExp, expViewType, isSysHint, addSkillID=0, expRateEx=0): - if addExp == 0: + if addExp <= 0: # 不进入计算 return addExp, expViewType #取得人物当前经验 - #curTotalExp = GetPlayerTotalExp(curPlayer) - curTotalExp = curPlayer.GetExpPoint() * ChConfig.Def_PerPointValue + curPlayer.GetTotalExp() - - maxLV = GetPlayerMaxLV(curPlayer) - maxLVExpStore = IpyGameDataPY.GetFuncCfg("MaxLVExpStore", 1) + curTotalExp = GetPlayerTotalExp(curPlayer) - curLV = curPlayer.GetLV() -# # 检查转生等级 -# if curLV >= nextReinLV and curTotalExp >= maxLVExpStore: -# self.__NotifyExpFull(curPlayer, "GeRen_liubo_260986") -# GameWorld.DebugLog("经验已满!需先转生!curLV=%s,reinLV=%s" % (curLV, nextReinLV), curPlayer.GetPlayerID()) -# return 0 - + maxLV = GetPlayerMaxLV(curPlayer) + maxLVExpStore = IpyGameDataPY.GetFuncCfg("PlayerMaxLV", 2) + + curLV = curPlayer.GetLV() + # 检查最大等级,maxLVExpStore -1时不限累计经验上限 if curLV >= maxLV and curTotalExp >= maxLVExpStore and maxLVExpStore != -1: self.__NotifyExpFull(curPlayer, "GeRen_admin_825676") @@ -3765,90 +3761,26 @@ # 杀怪 if expViewType == ShareDefine.Def_ViewExpType_KillNPC: exp_rate = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_TotalExpRate) - superRate = PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(curPlayer, None, None, ChConfig.TriggerType_AddExpRate) - if superRate: - # 龙凤镯 经验 - expViewType = ShareDefine.Def_ViewExpType_KillNPCSuper - if addSkillID == ChConfig.Def_SkillID_LXHY_AddExpRate: - addSkill = GameWorld.GetGameData().GetSkillBySkillID(addSkillID) - hasEffect = SkillCommon.GetSkillEffectByEffectID(addSkill, ChConfig.Def_Skill_Effect_AddExpRate) - if hasEffect: - #烈焰战神 经验 - superRate += hasEffect.GetEffectValue(0) - expViewType = ShareDefine.Def_ViewExpType_LYZS - exp_rate += superRate - elif expViewType in [ShareDefine.Def_ViewExpType_GameEvent, ShareDefine.Def_ViewExpType_Sit]: exp_rate = curPlayer.GetGameEventExpRate() exp_rate += GetFamilySitExpPer(curPlayer) else: exp_rate = max(GameWorld.GetGameWorld().GetExpRate(), ChConfig.Def_MaxRateValue) - + exp_rate += expRateEx #输入的经验有可能为long型 addExp = int(addExp * exp_rate / float(ChConfig.Def_MaxRateValue)) - #防沉迷计算 - addExp = PlayerGameWallow.ChangeExpByWallow(curPlayer, addExp) - - #=========================================================================================== - # #特殊地图杀怪经验外层加成 - # if expViewType == ShareDefine.Def_ViewExpType_KillNPC: - # #mapID = GameWorld.GetMap().GetMapID() - # #if mapID in ChConfig.Def_FBMapID_BZZDAll: - # # nobleVIPOuterRate = ... - # # #nobleVIPAddExp += 0 if not nobleVIPOuterRate else int(addExp * nobleVIPOuterRate / float(ChConfig.Def_MaxRateValue)) - # # nobleVIPAddExp += nobleVIPOuterRate - # - # outerExpRate = FBLogic.OnGetOuterExpRate(curPlayer) - # if outerExpRate > 0: - # addExp = int(addExp * outerExpRate / float(ChConfig.Def_MaxRateValue)) - #=========================================================================================== - # 不可再升级时,增加后的经验不可超过最大可存储经验 - #if curLV >= nextReinLV or curLV >= maxLV: if curLV >= maxLV and maxLVExpStore > 0: addExp = min(addExp, max(0, maxLVExpStore - curTotalExp)) - + if addExp <= 0: #无法获得经验 GameWorld.DebugLog("无法获得经验") return 0, expViewType - #addExp = min(addExp, ChConfig.Def_UpperLimit_DWord) # 单次加经验不超过20亿 - - #缓存获取的经验值, 用于兑换家族荣誉 - #if curPlayer.GetFamilyID() != 0: - # curPlayer.SetPerExp(min(curPlayer.GetPerExp() + addExp, ChConfig.Def_UpperLimit_DWord)) - - #人物头顶提示 - #======================================================================= - # viewExpCnt = min(2, addExp / ChConfig.Def_UpperLimit_DWord) # 最多飘两次20亿的 - # viewExp = addExp % ChConfig.Def_UpperLimit_DWord - # for _ in range(viewExpCnt): - # curPlayer.Notify_GetExpView(ChConfig.Def_UpperLimit_DWord, expViewType) - # if viewExp: - # curPlayer.Notify_GetExpView(viewExp, expViewType) - # - # if isSysHint: - # # 杀怪附加加成显示 - # if expViewType == ShareDefine.Def_ViewExpType_KillNPC: - # nobleVIPAddExp = int(nobleVIPAddExp / 100.0) - # #NotifyCode(curPlayer, "GeRen_liubo_74717", [addExp, nobleVIPAddExp]) - # elif expViewType in [ShareDefine.Def_ViewExpType_GameEvent, - # ShareDefine.Def_ViewExpType_Sit]: - # #小游戏事件特殊提示,打坐获取经验 - # NotifyCode(curPlayer, "ObtainExperience", [addExp]) - # elif expViewType == ShareDefine.Def_ViewExpType_MousePos: - # #鼠标位置提示获得经验 - # NotifyCode(curPlayer, "GeRen_admin_887936", [addExp]) - # else: - # #正常信息提示 - # NotifyCode(curPlayer, "GeRen_lhs_0", [addExp]) - #======================================================================= - #给人物经验 先设经验后升级 - #SetPlayerTotalExp(curPlayer, curTotalExp + addExp) totalExp = curTotalExp + addExp curExp = totalExp % ChConfig.Def_PerPointValue expPoint = totalExp / ChConfig.Def_PerPointValue @@ -3857,13 +3789,10 @@ curPlayer.SetExpPoint(expPoint) if curPlayer.GetTotalExp() != curExp: curPlayer.SetTotalExp(curExp) - - #GameWorld.Log("玩家 = %s 得到经验 = %s ,当前经验倍率 = %s"%(curPlayer.GetName(), addExp,expRate )) - #小于转生等级才可升级 - #if curLV < nextReinLV and curLV < maxLV: + if curLV < maxLV: self.PlayerLvUp() - + #添加经验成功 return addExp, expViewType @@ -3887,25 +3816,18 @@ #玩家死亡不可升级 return - #lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV()) - lvIpyData = IpyGameDataPY.GetIpyGameData("PlayerLV", curPlayer.GetLV()) + lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV()) if not lvIpyData: - GameWorld.ErrLog("经验表异常 lv= %s" % curPlayer.GetLV()) return - - #lvUpNeedExp = GetLVUPTotalExpNeed(lvIpyData) - lvUpNeedExp = lvIpyData.GetExpPoint() * ChConfig.Def_PerPointValue + lvIpyData.GetExp() - + lvUpNeedExp = GetLVUPTotalExpNeed(lvIpyData) if lvUpNeedExp <= 0: return #增加经验 - #curTotalExp = GetPlayerTotalExp(curPlayer) - curTotalExp = curPlayer.GetExpPoint() * ChConfig.Def_PerPointValue + curPlayer.GetTotalExp() + curTotalExp = GetPlayerTotalExp(curPlayer) #未达到升级经验 if curTotalExp < lvUpNeedExp: return - needSyncTalentPoint = False playerNeedDoLVUp = False curLV = curPlayer.GetLV() maxLV = GetPlayerMaxLV(curPlayer) @@ -3913,14 +3835,7 @@ curPlayer.BeginRefreshState() #befXP = curPlayer.GetXP() befLV = curPlayer.GetLV() - befFreePoint = curPlayer.GetFreePoint() - befBaseSTR = curPlayer.GetBaseSTR() - befBasePNE = curPlayer.GetBasePNE() - befBasePHY = curPlayer.GetBasePHY() - befBaseCON = curPlayer.GetBaseCON() - - #升级前的世界等级经验 - #beforeExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) + #befFreePoint = curPlayer.GetFreePoint() while curTotalExp >= lvUpNeedExp and curLV < maxLV: @@ -3935,24 +3850,17 @@ isNotifyServer = False curPlayer.SetLV(curLV, isNotifyServer) - EventReport.WriteEvent_level_up(curPlayer) + #EventReport.WriteEvent_level_up(curPlayer) # 记录玩家升级 DataRecordPack.DR_PlayerUpgrade(curPlayer, curPlayer.GetLV(), GetPlayerTotalExp(curPlayer), lvUpNeedExp) DataRecordPack.Cache_FightPowerChangeInfo(curPlayer, ChConfig.PowerDownType_LVUP, {'lv':curLV}) self.__GiveLVMailAward(curLV) - self.__DoLVUPAddPoint() # 升级加点 + #self.__DoLVUPAddPoint() # 升级加点 #self.__DoLvUpAddSkill() # 升级加技能 lvIpyData = GetPlayerLVIpyData(curPlayer.GetLV()) - # 大师天赋点 - if lvIpyData: - addTalentPoint = lvIpyData.GetTalentPoint() - if addTalentPoint: - needSyncTalentPoint = True - PlayerGreatMaster.AddGreatMasterSkillPointByLV(curPlayer, addTalentPoint) - PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_LVUp, 1) #---是否继续循环--- curTotalExp = curTotalExp - lvUpNeedExp @@ -3967,50 +3875,24 @@ #有升级, 转生时刚好是转生等级会默认+1级 if playerNeedDoLVUp: aftLV = curPlayer.GetLV() - aftFreePoint = curPlayer.GetFreePoint() - aftBaseSTR = curPlayer.GetBaseSTR() - aftBasePNE = curPlayer.GetBasePNE() - aftBasePHY = curPlayer.GetBasePHY() - aftBaseCON = curPlayer.GetBaseCON() + #aftFreePoint = curPlayer.GetFreePoint() if aftLV > befLV: curPlayer.SetLV(aftLV, False) # 这里不再通知GameServer - PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_LV, aftLV) + PlayerTongTianLing.AddTongTianTaskValue(curPlayer, ChConfig.TTLTaskType_LVUp, aftLV - befLV) + PlayerTask.UpdTaskValue(curPlayer, ChConfig.TaskType_LV) PlayerSuccess.UptateSuccessProgress(curPlayer, ShareDefine.SuccType_HeroLV, aftLV) PlayerActivity.DoAddActivityByLV(curPlayer, befLV, aftLV) - if aftFreePoint > befFreePoint: - curPlayer.SetFreePoint(aftFreePoint) - #NotifyCode(curPlayer, "ObtainAttributeDot", [aftFreePoint - befFreePoint]) - if aftBaseSTR > befBaseSTR: - curPlayer.SetBaseSTR(aftBaseSTR) - if aftBasePNE > befBasePNE: - curPlayer.SetBasePNE(aftBasePNE) - if aftBasePHY > befBasePHY: - curPlayer.SetBasePHY(aftBasePHY) - if aftBaseCON > befBaseCON: - curPlayer.SetBaseCON(aftBaseCON) + #if aftFreePoint > befFreePoint: + # curPlayer.SetFreePoint(aftFreePoint) PlayerGubao.DoGubaoAddFreePoint(curPlayer) - #=================================================================== - # if curPlayer.GetXP() != befXP: - # curPlayer.SetXP(curPlayer.GetXP()) - #=================================================================== - - #享受世界等级 - #=================================================================== - #curExpRate = PlayerWorldAverageLv.GetWorldAverageLvExpRate(curPlayer) - #if beforeExpRate <= 0 and curExpRate > 0: - # NotifyCode(curPlayer, "GeRen_liubo_127574") - #=================================================================== - # 天赋点通知 - if needSyncTalentPoint: - PlayerGreatMaster.Sync_GreatMasterFreeSkillPoint(curPlayer) # 升级需要执行的游戏功能处理 GameFuncComm.DoFuncOpenLogic(curPlayer) ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer) # 灵器属性会随等级成长 - if aftLV%10 == 0: - # 控制下刷新次数 - PlayerPet.CalcPetItemAddPlayerAttr(curPlayer) # 宠物有随等级变化的技能 + #if aftLV%10 == 0: + # # 控制下刷新次数 + # PlayerPet.CalcPetItemAddPlayerAttr(curPlayer) # 宠物有随等级变化的技能 self.RefreshPlayerAttrState(billboardFunc=PlayerBillboard.UpdatePlayerLVBillboard) #放在功能开启后面 @@ -5934,6 +5816,13 @@ SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_ForbidenTalk, 0) return +def IsMainLevelPass(curPlayer, lvID): + ## 判断玩家是否过关某个主线关卡ID + # @param lvID: 关卡唯一ID,与策划约定好 = 章节*100+关卡编号 + passChapterID, passLevelNum, _ = GetMainLevelPassInfo(curPlayer) + passValue = passChapterID * 100 + passLevelNum # 因为pass的记录是带波数的,即当前关卡boss还没过关,所以只有大于该记录值的才算过关 + return passValue > lvID + ## 主线关卡过关进度值 = 章节*10000+关卡编号*100+第x波 def GetMainLevelPassValue(curPlayer): return curPlayer.GetExAttr1() def SetMainLevelPassValue(curPlayer, value): curPlayer.SetExAttr1(value, False, False) # 不通知GameServer @@ -6381,29 +6270,11 @@ count += 1 return count - - -## 获取节假日经验加成 -# @param curPlayer: 玩家实例 -# @return: 节假日经验加成 -def GetHolidayExpRate(curPlayer): - return 0 - - -## 获取世界boss经验加成 -# @param curPlayer: 玩家实例 -# @return: 世界boss经验加成 -def GetWorldBossExpRate(curPlayer): - return 0 - ## 获取玩家当前等级升级所需总经验 # @param playerLv 玩家等级 # @return 返回值, 升级需要的总经验 def GetLVUPTotalNeedExp(curPlayer): curLV = curPlayer.GetLV() - #if curLV >= IpyGameDataPY.GetFuncCfg("PlayerMaxLV") and PlayerGreatMaster.IsGreatMasterOpen(curPlayer): - # return PlayerGreatMaster.GetTotalExpByGreatMasterLV(curPlayer.GetLV2()) - return GetTotalExpByPlayerLv(curLV) ## 根据等级获得升级需要的总经验 @@ -6425,7 +6296,7 @@ def GetLVUPTotalExpNeed(lvIpyData): if not lvIpyData: return 0 - return lvIpyData.GetExpPoint() * ChConfig.Def_PerPointValue + lvIpyData.GetExp() + return lvIpyData.GetExp() def GetPlayerMaxLV(curPlayer): ## 获取玩家实际可升的最大等级 -- Gitblit v1.8.0