From c35e176a3b05f745600c6e60f168313d2b9e7b30 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 九月 2025 12:00:19 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(司马懿技能;增加按层级结算持续buff效果5003;增加非按攻击力计算伤害支持;技能伤害增加可限制最大攻击力百分比上限配置;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py |  465 ++++++----------------------------------------------------
 1 files changed, 48 insertions(+), 417 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
index 65509d3..caf58b5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerState.py
@@ -18,52 +18,31 @@
 import SkillShell
 import BuffSkill
 import PlayerControl
-import EventShell
-import PlayerRequest
-import ChEquip
 import SkillCommon
 import FBLogic
-import AttackCommon
 import ChItem
 import PlayerGMOper
-import GameLogInfo
-import PlayerMissionCollect
-import ItemCommon
 import OperControlManager
 import ShareDefine
-import PlayerAutoCheckOnline
-import PlayerGameWallow
 import ReadChConfig
 import PlayerDienstgrad
-import PlayerVip
 import IpyGameDataPY
-import PlayerFB
 import GameObj
 import GameMap
 import math
 import time
 import PetControl
-import ItemControler
-import PlayerGuaji
-import PlayerTJG
 import AICommon
 import PlayerSuccess
-import CrossPlayerData
 import PassiveBuffEffMng
 import FunctionNPCCommon
 import FormulaControl
-import PlayerGoldGift
-import PlayerActLianqi
-import PlayerActFamilyGCZ
 import PlayerFlashSale
 import PlayerChatBox
 import PlayerFace
-import PlayerWing
-import ChEquip
-import PlayerYinji
-import PlayerActivity
 import PlayerBackup
-import MirrorAttack
+import PlayerOnline
+import PlayerGoldRush
 
 #---------------------------------------------------------------------
 #---------------------------------------------------------------------
@@ -549,7 +528,7 @@
     
     if prepareState == IPY_GameWorld.pstDig:
         #挖宝状态
-        EventShell.EventResponse_OnDig(curPlayer)
+        pass
         
     elif prepareState == IPY_GameWorld.pstSkill:
         SkillShell.SkillPrepareEnd(curPlayer, tick)
@@ -565,11 +544,10 @@
     
     elif prepareState == IPY_GameWorld.pstTownPortal:
         #战斗中回城成功
-        ChItem.UseTownPortal(curPlayer)
+        pass
     
     elif prepareState == IPY_GameWorld.pstMissionCollecting:
-        #任务采集
-        PlayerMissionCollect.EndMissionCollect(curPlayer, tick)
+        pass
         
     elif prepareState == ShareDefine.Def_PstTrans:
         
@@ -580,7 +558,7 @@
         if not TransCostAfterPrepare(curPlayer):
             return
         
-        PlayerControl.PlayerResetWorldPos(curPlayer, mapID, posX, posY, False)
+        PlayerControl.PlayerResetWorldPos(curPlayer, mapID, posX, posY)
         #PlayerControl.NotifyCode(curPlayer, "Map_Deliver_Succeed", [mapID])
         
     #重置玩家状态
@@ -676,25 +654,6 @@
         
     FBLogic.OnCollectOK(curPlayer, curNPC.GetNPCID(), tick)
     return
-
-#---------------------------------------------------------------------
-##刷新时效道具
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值, 是否重刷玩家属性
-# @remarks 刷新以单位时间(分钟)消耗耐久的物品
-def ProcessRefreshTimeItem(curPlayer, tick):
-    reFlash = False
-    
-    #2分钟遍历一次,时效道具时间到不消失,
-    if tick - curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_EquipTime) \
-        < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_TimeItem]:
-        return reFlash
-    #耐久减少值/分钟
-    reFlash = ProcessTimeEquip(curPlayer, tick)
-    
-    return reFlash
-
 
 #---------------------------------------------------------------------
 ##刷新玩家Buff
@@ -812,7 +771,7 @@
     curPlayer.SetDict(ChConfig.Def_PlayerKey_SitForZhenQi, tick)
     
     vipLV = curPlayer.GetVIPLv()
-    vipRate = ShareDefine.Def_MaxRateValue#PlayerVip.GetVIPMuseSitRate(vipLV)
+    vipRate = ShareDefine.Def_MaxRateValue
     
     #取得人物当前经验
     curTotalExp = PlayerControl.GetPlayerTotalExp(curPlayer) # 超过20亿支持,功能待定
@@ -828,7 +787,7 @@
                              isSysHint=False)
         
         if vipLV == 0:
-            canVipRate = ShareDefine.Def_MaxRateValue#PlayerVip.GetVIPMuseSitRate(ShareDefine.Def_VIPType_Platina)
+            canVipRate = ShareDefine.Def_MaxRateValue
             canVipExpValue = int(addExpValue * canVipRate / float(ShareDefine.Def_MaxRateValue))
             #GeRen_chenxin_684833:获得经验%s点,成为VIP经验%s
             PlayerControl.NotifyCode(curPlayer, "GeRen_chenxin_684833", [addExpValue, canVipExpValue])
@@ -882,68 +841,6 @@
     #    curPlayer.SetXP(nextXPValue)
     #===========================================================================
 
-
-#---------------------------------------------------------------------
-##玩家自动回复生命和魔法
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return None
-# @remarks 玩家自动回复生命和魔法
-def ProcessHPMPState(curPlayer, tick):
-    
-#    #仅打坐状态回复
-#    if curPlayer.GetPlayerAction() != IPY_GameWorld.paSit:
-#        return
-    
-    if not curPlayer.IsAlive():
-        #死亡状态不处理
-        return
-    
-    #检测是否到CD时间, 暂定5秒回一次
-    if tick - curPlayer.GetRestoreTime() < ChConfig.Def_HPRestoreInterval:
-        return
-    #设置当前回复开始时间
-    curPlayer.SetRestoreTime(tick)
-
-    #没有恢复能力
-    if curPlayer.GetHPRestorePer() == 0:
-        return
-    
-    #满血不处理
-    if GameObj.GetHP(curPlayer) == GameObj.GetMaxHP(curPlayer):
-        return
-    
-    #战斗中返回
-    #if curPlayer.IsBattleState():
-    #    return False
-    
-#    #战斗对峙返回
-#    if curPlayer.GetIsConfronting():
-#        return False
-    
-    #---回复玩家血量---
-    playerHP = GameObj.GetHP(curPlayer)
-    #playerMP = curPlayer.GetMP()
-    playerMaxHP = GameObj.GetMaxHP(curPlayer)
-    #playerMaxMP = curPlayer.GetMaxMP()
-    
-    # 目前回复频率暂定5秒回复一次,回复数值是1秒的值,所以此处乘5
-    addHPValue = curPlayer.GetHPRestorePer() * 5
-    
-    #addMPValue = GameWorld.GetFloatUpper(playerMaxMP * mpPer + mpValue)
-   
-    #GameWorld.Log('addHPValue = %s, addMPValue = %s'%(addHPValue, addMPValue))
-    
-    #当前不是满血, 就回血
-    if playerHP != playerMaxHP:
-        SkillCommon.SkillAddHP(curPlayer, 0, addHPValue)
-        #GameObj.SetHP(curPlayer, min(playerHP + addHPValue, playerMaxHP))
-    
-    #当前不是满魔, 就回魔
-    #if playerMP != playerMaxMP:
-    #    curPlayer.SetMP(min(playerMP + addMPValue, playerMaxMP))
-    return
-
 #---------------------------------------------------------------------
 ##刷新组队状态
 # @param curPlayer 玩家实例
@@ -970,11 +867,8 @@
 # @remarks 刷新玩家在线时间
 def ProcessPlayer_OnlineTime(curPlayer, tick):
     if not CommonCheckTick(curPlayer, tick, ChConfig.TYPE_Player_Tick_PlayerOnlineTime):
-        return
+        return 
     
-    #处理防沉迷在线时间,
-    PlayerGameWallow.DoLogic_WallowOnlineTime(curPlayer, tick)    
-
     return
 
     
@@ -1060,7 +954,6 @@
 # @return 返回值, 无意义
 # @remarks C++封包触发, 全局定时器, 处理玩家状态
 def __Func_ProcessState(tick):
-    timeClock = time.clock()
     #2009-07-01断言tick >=0 ,服务器tick为DWord,超过24天未重启硬件,将导致逻辑不可预知
     if tick < 0 :
         GameWorld.Log('###服务器运行时间超过24天 tick = %s' % (tick))
@@ -1074,87 +967,10 @@
         if curPlayer.GetID() == 0:
             continue
         
-        ProcessPlayerState(curPlayer, tick) 
-    
-    #记录玩家逻辑处理总耗时
-    GameLogInfo.LogInfo_PlayerLogicTime(timeClock)
+        ProcessPlayerState(curPlayer, tick)
+        
     return
 
-#---------------------------------------------------------------------
-##处理耐久计算方式为:现实时间刷新方式的物品
-# @param curPlayer 玩家实例
-# @return 布尔值
-# @remarks 处理耐久计算方式为:现实时间刷新方式的物品
-def ProcessTimeEquip(curPlayer, tick):
-    itemManager = curPlayer.GetItemManager()
-    hasItemClear = False
-    
-    classLV = 0 # 只处理非境界装备的时效物品
-    curPack = itemManager.GetPack(IPY_GameWorld.rptEquip)
-    for equipPlace in ChConfig.EquipPlace_LingQi:
-        ipyData = IpyGameDataPY.GetIpyGameData('EquipPlaceIndexMap', classLV, equipPlace)
-        if not ipyData:
-            continue
-        index = ipyData.GetGridIndex()
-        curItem = curPack.GetAt(index)
-        
-        #异常物品
-        if not ItemCommon.CheckItemCanUse(curItem):
-            continue
-        
-        if curItem.GetEndureReduceType() not in [ChConfig.Def_EquipReduceType_RTimeItem,
-                                                 ChConfig.Def_EquipReduceType_Time]:
-            continue
-        
-        #处理现实时间物品逻辑
-        if __DoLogic_ProcessTimeEquip(curPlayer, curItem, index):
-            hasItemClear = True
-            
-    if hasItemClear:
-        #装备重刷属性
-        ChEquip.RefreshPlayerLingQiEquipAttr(curPlayer)
-        
-    # 进行更新时效道具刷新时间
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_EquipTime, tick)
-    return hasItemClear
-
-#---------------------------------------------------------------------
-## 装备有效时间到了需要脱下,有效时间物品改成不消失,但是无使用效果 可出售和续费
-def __DoLogic_ProcessTimeEquip(curPlayer, curItem, equipIndex):
-    #验证物品是否过期
-    curItemExpireTime = curItem.GetUserAttr(ShareDefine.Def_IudetExpireTime)
-    if not curItemExpireTime:
-        curItemExpireTime = curItem.GetExpireTime()
-    curItemPastTime = time.time() - curItem.GetUserAttr(ShareDefine.Def_IudetCreateTime)
-    if curItemExpireTime - curItemPastTime > 0:
-        return
-    
-    spaceIndex = ItemControler.GetItemPackSpaceIndex(curPlayer, IPY_GameWorld.rptItem)
-    if spaceIndex == -1:
-        # 没有空位,玩家主动取下,计算属性时无效化
-        # 过期属性时效需刷属性
-        return True
-    
-    result = ItemControler.PlayerItemControler(curPlayer).UnEquipItem(equipIndex, spaceIndex)
-    if not result:
-        # 过期属性时效需刷属性
-        return True
-    equipID = result[0]
-    equipPlace = result[1]
-    if equipPlace in [ShareDefine.retGuard1, ShareDefine.retGuard2]:
-        PlayerControl.NotifyCode(curPlayer, 'Guardian_Timeout', [equipID, spaceIndex])
-    elif equipPlace == ShareDefine.retWing:
-        PlayerControl.NotifyCode(curPlayer, 'WingTiyan_Timeout')
-        
-    tryItemDict = IpyGameDataPY.GetFuncEvalCfg('FirstGoldTryItem', 1, {})
-    tryItemID = tryItemDict.get(curPlayer.GetJob(), 0)
-    if tryItemID and ItemControler.GetAppointItemRealID(tryItemID) == equipID:
-        #首充试用武器过期并且还没首充的提示()
-        if not curPlayer.GetChangeCoinPointTotal():
-            PlayerControl.NotifyCode(curPlayer, 'FirstGoldWPOver')
-            PlayerGoldGift.FirstGoldTryItemOutTime(curPlayer)
-            
-    return True
 #---------------------------------------------------------------------
 ##全局定时器调用, 刷新玩家状态
 # @param curPlayer 玩家实例
@@ -1175,133 +991,80 @@
     #定时备档
     PlayerBackup.CheckPlayerBackup(curPlayer)
     
-    #玩家镜像战斗AI
-    MirrorAttack.ProcessPlayerMirrorAI(curPlayer, tick)
-    
     #被GM封状态响应
     ProcessGMOperLogic(curPlayer, tick)
     
     #刷新玩家战斗状态
-    ProcessPlayerBattle(curPlayer, tick)
+    #ProcessPlayerBattle(curPlayer, tick)
     
     #战斗状态判断
-    CheckBattleState(curPlayer, tick)
+    #CheckBattleState(curPlayer, tick)
     
     #切换玩家呆滞状态
-    ProcessPlayerNeedProcess(curPlayer , tick)
+    #ProcessPlayerNeedProcess(curPlayer , tick)
     
     #放在刷buff前
-    ProcessPassiveSkill(curPlayer, tick)
+    #ProcessPassiveSkill(curPlayer, tick)
     
-    #---影响属性刷新---------------------------------------------
-    #是否刷新列表
-    reFlashList = []
-    
-    #刷新玩家Buff
-    reFlashBuff = ProcessRefreshBuffState(curPlayer, tick)
-    
-    #刷新玩家场景buff效果
-    ProcessPlayerBuffEffect(curPlayer, tick)
-    
-    #时效道具刷新
-    reFlash = ProcessRefreshTimeItem(curPlayer, tick)
-    reFlashList.append(reFlash)
-#    GameWorld.Log('刷新以单位时间(分钟)消耗耐久的物品 %s'%(time.clock() - curTime))
-#    curTime = time.clock()
-    
+    ProcessPlayerSecond(curPlayer, tick)
     ProcessPlayerMinute(curPlayer, tick)
     
-    #vip体验
-    reFlash = PlayerVip.CheckVIPExperience(curPlayer, tick)
-    reFlashList.append(reFlash)
-    
-    #===影响人物行为刷新, 支持控制类BUFF可刷属性======================================
-    # 控制类有属性刷新交给属性处理
-    attrBuffResult, actBuffResult = ProcessRefreshActionBuffState(curPlayer, tick)
-    
-    playerControl = PlayerControl.PlayerControl(curPlayer)
-    if actBuffResult:
-        playerControl.RefreshPlayerActionState()
-    
-    #===行为刷新结束==============================================================    
-    
-    #重刷属性
-    # 1. 循环内需要刷属性
-    # 2. buff消失刷属性
-    # 3. 玩家其他行为触发缓存刷属性
-    # 4. 玩家因buff缓存刷属性
-    if True in reFlashList :
-        #Buff影响到属性刷新
-        playerControl.RefreshPlayerAttrState()
-    
-    
-    #此处才是真正的刷新人物属性值,需刷属性逻辑应在此行前调用
-    if not playerControl.RefreshPlayerAttrStateEx():
-        if reFlashBuff or attrBuffResult:
-            playerControl.RefreshPlayerAttrByBuff()
-        
-        # 只刷BUFF情况
-        playerControl.RefreshPlayerAttrByBuffEx()   
-        
+    PlayerOnline.GetOnlinePlayer(curPlayer).DoRefreshRoleAttr()
     #---到这边应该属性刷新结束,下面的逻辑有的需要用到属性值--------------------
     
     
     #当前玩家的状态
-    curPlayerAction = curPlayer.GetPlayerAction()
+    #curPlayerAction = curPlayer.GetPlayerAction()
     
 #    curTime = time.clock()
     #刷新玩家的准备进度条
-    if curPlayerAction == IPY_GameWorld.paPreparing :
-        ProcessPlayerPrepareState(curPlayer, tick)
+    #if curPlayerAction == IPY_GameWorld.paPreparing :
+    #    ProcessPlayerPrepareState(curPlayer, tick)
     
-    #刷新玩家请求
-    PlayerRequest.ProcessPlayerRequest(curPlayer, tick)
-    
-    #回血回魔状态处理
-    ProcessHPMPState(curPlayer, tick)
-    
-    PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
+    #PlayerYinji.ProcessPlayerYinji(curPlayer, tick)
     
     #刷新组队状态
     #ProcessTeamState(curPlayer, tick)
 
     #玩家在线时间刷新
-    ProcessPlayer_OnlineTime(curPlayer, tick)
+    #ProcessPlayer_OnlineTime(curPlayer, tick)
     
     #反外挂验证
-    PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
+    #PlayerAutoCheckOnline.HackDefense(curPlayer, tick)
     
     #副本相关时间处理
-    PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
-    
-    #脱机计算
-    #PlayerTJG.ProcessPlayerTJG(curPlayer, tick)
-    #挂机收益
-    PlayerGuaji.ProcessGuaji(curPlayer)
-    
-    #PK/boss状态
-    ProcessPKBossState(curPlayer, tick)
+    #PlayerFB.DoPlayerFBTimeProcess(curPlayer, tick)
     
     #恶意攻击时间处理
-    AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
+    #AttackCommon.ProcessMaliciousAttackPlayer(curPlayer, tick)
+
+    #活跃放置
+    #PlayerActivity.ProcessActivityPlace(curPlayer)
+    #自定义场景
+    #FBLogic.OnCustomSceneProcess(curPlayer, tick)
+    #炼器
+    #PlayerActLianqi.OnProcess(curPlayer)
+    #仙盟攻城战
+    #PlayerActFamilyGCZ.OnProcess(curPlayer)
+    #跨服数据同步,放最后
+    #CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
+    return
+
+def ProcessPlayerSecond(curPlayer, tick):
+    #玩家每秒处理,玩家Process可能每秒多次,所以增加一个每秒处理的,减少执行次数
+    lastTick = curPlayer.GetDictByKey("ProcessPlayerSecond")
+    if tick - lastTick < 1000:
+        return
+    curPlayer.SetDict("ProcessPlayerSecond", tick)
+    
     #成就
     PlayerSuccess.FinishDelayAddSuccessProgress(curPlayer, tick, False)
     #限时抢购
     PlayerFlashSale.ProcessFlashSaleMail(curPlayer, tick)
-    #地图经验
-    #ProcessAreaExp(curPlayer, tick)
     #神秘商店刷新
     FunctionNPCCommon.CheckMysticalShopRefresh(curPlayer, tick)
-    #活跃放置
-    PlayerActivity.ProcessActivityPlace(curPlayer)
-    #自定义场景
-    FBLogic.OnCustomSceneProcess(curPlayer, tick)
-    #炼器
-    PlayerActLianqi.OnProcess(curPlayer)
-    #仙盟攻城战
-    PlayerActFamilyGCZ.OnProcess(curPlayer)
-    #跨服数据同步,放最后
-    CrossPlayerData.ProcessCrossPlayer(curPlayer, tick)
+    #淘金
+    PlayerGoldRush.OnProcess(curPlayer)
     return
 
 def ProcessPlayerMinute(curPlayer, tick):
@@ -1375,45 +1138,7 @@
 #        return
 #===============================================================================
     return
-#---------------------------------------------------------------------
-##GM开关活动, 地图服务器给经验
-# @param curPlayer 玩家实例
-# @param tick 时间戳
-# @return 返回值无意义
-# @remarks GM开关活动, 地图服务器给经验
-def ProcessMapGiveExp(curPlayer, tick):
-    gameWorld = GameWorld.GetGameWorld()
-    #经验倍率
-    exp_Multiple = 0
-    if gameWorld.IsEventActive(ChConfig.Def_GY_GM_GameID_MapGiveExp_Ten):
-        exp_Multiple = 10
-    elif gameWorld.IsEventActive(ChConfig.Def_GY_GM_GameID_MapGiveExp_Fifty):
-        exp_Multiple = 50
-    else:
-        #无活动
-        return
-    
-    mapExpTick = curPlayer.GetTickByType(ChConfig.TYPE_Player_Tick_GiveMapExp)
-    
-    if mapExpTick == 0:
-        #第一次设定当前时间
-        curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_GiveMapExp, tick)
-        return
-    
-    if tick - mapExpTick < ChConfig.TYPE_Player_Tick_Time[ChConfig.TYPE_Player_Tick_GiveMapExp]:
-        #没有到刷新间隔
-        return
-    
-    curPlayer.SetTickByType(ChConfig.TYPE_Player_Tick_GiveMapExp, tick) 
-    
-    reExp = 0
-    
-    playerControl = PlayerControl.PlayerControl(curPlayer)
-    #玩家经验增加 参考经验 * 经验倍率
-    playerControl.AddExp(reExp * exp_Multiple)
-    
-    return
-#---------------------------------------------------------------------
+
 ##清空玩家连续击杀数量
 # @param curPlayer 玩家实例
 # @param tick 时间戳
@@ -1473,66 +1198,6 @@
     PlayerGMOper.DoGMOperLogic(curPlayer, tick)
     return
 
-
-#===============================================================================
-# 警告:1.此功能应该会导致更加频繁处理战斗逻辑附带的刷新属性等逻辑
-# 需三思考虑,暂时关闭。
-# 
-# ## 计时器入口,战斗逻辑
-# # @param None
-# # @return None
-# def PlayerProcessFight(timerType, tick):
-#    if not GameWorld.GetGameWorld().GetInitOK() :
-#        return
-#    
-#    #GameWorld.DebugLog("---!!PlayerProcessFight %s"%([timerType, tick]))
-#    
-#    for i in xrange(GameWorld.GetGameWorld().GetGameWorldCount()):
-#        #设置当前的世界
-#        GameWorld.GetGameWorld().SetCurGameWorldIndex(i)
-# 
-#        playerManager = GameWorld.GetPlayerManager()
-#        playerCount = playerManager.GetActivePlayerCount()
-#        for i in range(0, playerCount):
-#            curPlayer = playerManager.GetActivePlayerByIndex(i)
-#            if curPlayer.IsEmpty():
-#                continue
-# 
-#            if not curPlayer.GetInitOK():
-#                #GameWorld.Log("玩家还未初始化成功, 不处理")
-#                continue
-#            
-#            if curPlayer.IsMoving():
-#                continue
-#            
-#            ProcessFight(curPlayer, tick)
-# 
-#    GameWorld.GetGameWorld().SetCurGameWorldIndex(-1)
-#        
-#    return
-#===============================================================================
-
-def ProcessPKBossState(curPlayer, tick):
-    ## 处理PK及boss状态
-    validTime = IpyGameDataPY.GetFuncCfg("PKConfig", 4) * 1000
-    
-    pkStateTick = curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick)
-    if pkStateTick and (tick - pkStateTick) >= validTime:
-        curPlayer.SetDict(ChConfig.Def_PDict_PKStateTick, 0)
-        PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PKState, 0)
-        #GameWorld.DebugLog("退出PK状态!", curPlayer.GetPlayerID())
-        curPlayer.SetDict("StartProDTick", tick) # 开始恢复时间点
-        
-    bossStateTick = curPlayer.GetDictByKey(ChConfig.Def_PDict_BossStateTick)
-    if bossStateTick and (tick - bossStateTick) >= validTime:
-        curPlayer.SetDict(ChConfig.Def_PDict_BossStateTick, 0)
-        PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossState, 0)
-        #GameWorld.DebugLog("退出Boss状态!", curPlayer.GetPlayerID())
-    
-    # 脱离PK战斗 X秒后按比例恢复
-    ProcessProDef(curPlayer, tick)
-    return
-
 def Sync_PKBossState(curPlayer):
     psState = 1 if curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick) else 0
     PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_PKState, psState)
@@ -1540,40 +1205,6 @@
     bossState = 1 if curPlayer.GetDictByKey(ChConfig.Def_PDict_BossStateTick) else 0
     PlayerControl.SendPropertyRefresh(curPlayer, ShareDefine.CDBPlayerRefresh_BossState, bossState)
     return
-
-# 脱离PK战斗 X秒后按比例恢复
-def ProcessProDef(curPlayer, tick):
-    if PlayerControl.GetProDefHPPer(curPlayer) == 0:
-        # 没转化值
-        return
-    
-    # 脱离PK战斗 X秒后按比例恢复
-    if IsInPKState(curPlayer):
-        return
-    
-    if tick - curPlayer.GetDictByKey("StartProDTick") < IpyGameDataPY.GetFuncCfg("MagicExterior", 2) * 1000:
-        return
-    
-    if curPlayer.GetPlayerAction() == IPY_GameWorld.paDie:
-        return
-    
-    # 每秒恢复
-    if tick - curPlayer.GetDictByKey("restoreProDTick") < 1000:
-        return
-    
-    curProDef = PlayerControl.GetProDef(curPlayer)
-    maxProDef = PlayerControl.GetMaxProDef(curPlayer)
-    
-    if curProDef == maxProDef:
-        return
-    
-    #非PK状态恢复护盾
-    PlayerControl.SetProDef(curPlayer, min(curProDef + \
-                            IpyGameDataPY.GetFuncCfg("MagicExterior", 3)*maxProDef/ChConfig.Def_MaxRateValue, maxProDef))
-    curPlayer.SetDict("restoreProDTick", tick)
-
-    return
-
 
 def IsInPKState(curPlayer): return curPlayer.GetDictByKey(ChConfig.Def_PDict_PKStateTick) > 0
 def SetPKStateTick(curPlayer, tick):

--
Gitblit v1.8.0