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