From c06d47322d2892a440dc11b94f06950da762e5bd Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期五, 21 六月 2019 19:41:43 +0800
Subject: [PATCH] 7413 宗门试炼评级通知

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py |  349 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 196 insertions(+), 153 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
index 0341b26..6cb5ca9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -70,6 +70,7 @@
 import PlayerEquipDecompose
 import PlayerGreatMaster
 import PlayerGatherSoul
+import PlayerFairyDomain
 import PlayerCrossRealmPK
 import GameFuncComm
 import PlayerMagicWeapon
@@ -104,6 +105,7 @@
 import PlayerNewFairyCeremony
 import PlayerFeastRedPacket
 import PlayerLuckyTreasure
+import Item_ResetAttrPoint
 import CrossRealmPlayer
 import ChNetSendPack
 import FamilyRobBoss
@@ -114,6 +116,9 @@
 import PlayerDogz
 import PlayerCoat
 import PlayerQuDaoDoubleBill
+import PlayerFB
+import SkillShell
+import PlayerYinji
 
 import datetime
 import time
@@ -224,45 +229,6 @@
     
     return
 
-#// A2 31 前端开始自定义场景 #tagCMClientStartCustomScene
-#
-#struct    tagCMClientStartCustomScene
-#{
-#    tagHead        Head;
-#};
-def OnClientStartCustomScene(index, clientData, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    DoEnterCustomScene(curPlayer)
-    return
-
-def DoEnterCustomScene(curPlayer):
-    ## 进入自定义场景状态
-    curPlayer.SetCanAttack(False)
-    curPlayer.SetVisible(False)
-    curPlayer.SetSight(0)
-    curPet = curPlayer.GetPetMgr().GetFightPet()
-    if curPet:
-        curPet.SetVisible(False)
-        
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 1)
-    GameWorld.Log("玩家开始自定义场景!", curPlayer.GetPlayerID())
-    return
-
-def DoExitCustomScene(curPlayer):
-    ## 退出自定义场景状态
-    curPlayer.SetCanAttack(True)
-    curPlayer.SetVisible(True)
-    curPlayer.SetSight(1)
-    curPlayer.RefreshView()
-    curPlayer.SetSight(ChConfig.Def_PlayerSight_Default)
-    curPlayer.RefreshView()
-    curPet = curPlayer.GetPetMgr().GetFightPet()
-    if curPet:
-        curPet.SetVisible(True)
-    curPlayer.SetDict(ChConfig.Def_PlayerKey_ClientCustomScene, 0)
-    GameWorld.Log("玩家退出自定义场景!", curPlayer.GetPlayerID())
-    return
-
 #// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
 #
 #struct tagCMRefreshMainServerRole
@@ -292,8 +258,10 @@
         CrossRealmPlayer.DoExitCrossRealm(curPlayer)
         
     if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene):
-        DoExitCustomScene(curPlayer)
+        PlayerFB.DoExitCustomScene(curPlayer)
         
+    PetControl.DoLogic_PetLoadMapOK(curPlayer)
+    
     msgInfo = ""
     GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetPlayerID(), 0, 0, "RefreshMainServerRole", msgInfo, len(msgInfo))
     return
@@ -473,7 +441,7 @@
         # 离线过久恢复为非跨服状态
         if PlayerControl.GetCrossMapID(curPlayer):
             PlayerControl.SetCrossMapID(curPlayer, 0)
-            
+        
     SyncGuideState(curPlayer)
     
     #上线检查一次装备属性
@@ -493,7 +461,6 @@
     #PlayerExam.DoLogic_ExitExam(curPlayer, tick, needRefresh = False)
     #清除VIPbuff
     #BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_VIPExp_SkillTypeID, tick)
-    #PlayerReincarnation.ReincarOnLogin(curPlayer)
     
     #通知玩家的buff
     __Sync_ClientBuff(curPlayer)
@@ -527,14 +494,8 @@
     #PK模式
     SyncPKModel(curPlayer)
         
-    #通用强化星级信息
-    ChEquip.NotifyEquipPartPlusLV(curPlayer)
-    ChEquip.NotifyEquipPartStar(curPlayer)
-    Operate_EquipWash.OnEquipWashLogin(curPlayer)
-    #通知套装信息
-    #ChEquip.SyncAllEquipAttrActiveInfo(curPlayer)
-    #装备位宝石镶嵌通知
-    Operate_EquipStone.OnLogin(curPlayer)
+    #装备相关信息
+    ChEquip.OnPlayerEquipLoginLogic(curPlayer)
     
     #大师
     PlayerGreatMaster.MasterOnLogin(curPlayer)
@@ -577,9 +538,6 @@
     PlayerCoin.OnLogin(curPlayer)
     # 首充/天天首充/充值豪礼
     PlayerGoldGift.OnLogin(curPlayer)
-    
-    #玩家回归通知
-    #PlayerRecall.PlayerBack(curPlayer)
     
     #通知购买功能中各购买类型的已购买和可购买次数
     Operate_PlayerBuyZhenQi.DoPlayerLogin(curPlayer)
@@ -748,6 +706,12 @@
     FBHelpBattle.DoPlayerLogin(curPlayer)
     # 聚魂
     PlayerGatherSoul.PlayerLogin(curPlayer)
+    #缥缈仙域
+    PlayerFairyDomain.OnLogin(curPlayer)
+    PlayerFB.OnLogin(curPlayer)
+    #技能专精信息
+    SkillShell.NotifyElementSkillInfo(curPlayer)
+    
     curPlayer.SetState(0)   # 脱机挂恢复为正常上线
     curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
     tjgTime = PlayerTJG.GetTJGTime(curPlayer)
@@ -792,6 +756,10 @@
     mixServerWorldLV = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_LastMixServerWorldLV) # 合服时的世界等级
     GameWorld.Log("玩家合服首登处理! lastMixServerDay=%s,mixServerWorldLV=%s" % (lastMixServerDay, mixServerWorldLV), playerID)    
     PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MixLoginDay, lastMixServerDay)
+    
+    if curPlayer.GetLV() <= 1:
+        GameWorld.Log("    新号不给合服奖励!", playerID)
+        return
     
     # 重置首充双倍
     PlayerCoin.DoResetCTGCount(curPlayer, "MixServer")
@@ -1065,15 +1033,16 @@
         PlayerGameEvent.TakeoffFishermanEquipment(curPlayer)
     #切地图要清除的buff
     __CheckClearBuffOnMapChange(curPlayer, tick)
-    #上线和切地图加有限无敌Buff
-    SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
+            
+    if GameWorld.GetMap().GetMapFBType() != IPY_GameWorld.fbtNull:
+        #副本地图上线切换才加无敌buff
+        SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
             
     #刷新玩家的视野
-    if not GameWorld.IsCrossServer() and PlayerControl.GetCrossMapID(curPlayer):
-        GameWorld.DebugLog("===登录本服地图时,处于跨服状态,不刷新视野!", curPlayer.GetPlayerID())
-        curPlayer.SetSight(0)
-    else:
-        PlayerState.ChangePlayerSigh(curPlayer, tick)
+    if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or PlayerControl.GetCustomMapID(curPlayer)):
+        GameWorld.DebugLog("===登录本服地图时,处于跨服或自定义场景状态,不刷新视野!", curPlayer.GetPlayerID())
+        PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
+    PlayerState.ChangePlayerSigh(curPlayer, tick)
     
     if GameWorld.IsCrossServer():
         curPlayer.SetForbiddenSyncClientState(False)
@@ -1300,15 +1269,6 @@
     curPack.SetCount(ChConfig.Def_PackCnt_DogzEquip)
     curPack.Sync_PackCanUseCount()
     
-    #初始化诛仙物品背包
-    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianItem)
-    curPack.SetCount(ChConfig.Def_PackCnt_ZhuXianItem)
-    curPack.Sync_PackCanUseCount()
-    #初始化诛仙装备背包
-    curPack = curPlayer.GetItemManager().GetPack(ShareDefine.rptZhuXianEquip)
-    curPack.SetCount(ChConfig.Def_PackCnt_ZhuXianEquip)
-    curPack.Sync_PackCanUseCount()
-    
     #初始化临时交换背包
     curPack = itemManager.GetPack(ShareDefine.rptTempSwap)
     curPack.SetCount(ChConfig.Def_PackCnt_TempSwap)
@@ -1417,6 +1377,7 @@
     #if not __CheckGMCanLoadMapOK(curPlayer):
     #    return
     
+    
     #检测账号是否锁定
     if not __CheckForbidLogin(curPlayer):
         return
@@ -1433,12 +1394,12 @@
     firstMission = QuestCommon.GetCommonMission(curPlayer)
     if not (firstMission and firstMission.GetProperty(QuestCommon.Def_NewGuyNoSight) == 1):
         #刷新自己的视野
-        if not GameWorld.IsCrossServer() and PlayerControl.GetCrossMapID(curPlayer):
-            GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服状态,不设置可见!", curPlayer.GetPlayerID())
-        else:
-            curPlayer.RefreshView()
-            curPlayer.SetVisible(True)
-    
+        if not GameWorld.IsCrossServer() and (PlayerControl.GetCrossMapID(curPlayer) or curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ClientCustomScene)):
+            GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服或自定义场景状态,不设置可见!", curPlayer.GetPlayerID())
+            PlayerControl.SetPlayerSightLevel(curPlayer, curPlayer.GetID())
+        curPlayer.RefreshView()
+        curPlayer.SetVisible(True)
+        
     #如果玩家hp为0,设置玩家为死亡状态
     if curPlayer.GetHP() <= 0:
         curPlayer.SetPlayerAction(IPY_GameWorld.paDie)
@@ -1447,10 +1408,12 @@
     #把玩家设置为初始化成功状态
     curPlayer.SetInitOK(True)
     
-    #bug:GM号反隐形在玩家切换地图之后,脚本未设置玩家属性之前,C++通知合并封包导致客户端死B
-    #将反隐形开启转移到脚本
-    if curPlayer.GetGMLevel():
-        curPlayer.SetIsDefVisible(True)
+    #===========================================================================
+    # #bug:GM号反隐形在玩家切换地图之后,脚本未设置玩家属性之前,C++通知合并封包导致客户端死B
+    # #将反隐形开启转移到脚本
+    # if curPlayer.GetGMLevel():
+    #    curPlayer.SetIsDefVisible(True)
+    #===========================================================================
     
     #有限无敌Buff
     if not __CheckLimitSuperBuff(curPlayer):
@@ -1492,11 +1455,6 @@
 
     PlayerTeam.PlayerLoginSetTeam(curPlayer, tick)
     
-    #要求数据库得到邮件状态
-    #curPlayer.DataServer_GetPlayerMailState()
-    
-    #curPlayer.EndLoadMap()
-
     #激活玩家(保证持续性Buff处理间隔)
     PlayerControl.SetIsNeedProcess(curPlayer, True)
 
@@ -1549,7 +1507,7 @@
             GameWorld.Log('玩家登录重置位置失败, 设置附近点 nearPosX = %s nearPosY = %s' % (nearPosX, nearPosY) , curPlayer.GetPlayerID())
 
     #申请得到奖励物品
-    curPlayer.DataServer_CheckPrizeItem()
+    #curPlayer.DataServer_CheckPrizeItem()
     
     #===========================================================================
     # #if curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_Frist_Lock) == 1 \
@@ -1586,12 +1544,11 @@
         GameWorld.DebugLog("进入地图强制切换PK模式: %s" % initAttackModel)
     
     PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
+    PlayerYinji.OnLoadMap(curPlayer)
     ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount()   # 刷新装备珍品星级
     
     #EndLoadMap需放在最后
     curPlayer.EndLoadMap()
-    # 渠道返利 
-    PlayerQuDaoDoubleBill.OnMapQDDoubleBill(curPlayer)
     return True
 
 ## 切换地图同步一次PK模式
@@ -1750,6 +1707,64 @@
     NotifyPlayerBasePoint(curPlayer, pointAttrIDList)
     playerControl = PlayerControl.PlayerControl(curPlayer)
     playerControl.RefreshPlayerAttrState()
+    EventShell.EventRespons_AddPoint(curPlayer)
+    return
+
+#// B2 07 重置加点 #tagCMResetAttrPoint
+#struct    tagCMResetAttrPoint
+#{
+#    tagHead         Head;
+#};
+def OnResetAttrPoint(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    ipyDataMgr = IpyGameDataPY.IPY_Data()
+    canResetIDList = [ipyDataMgr.GetRolePointByIndex(index).GetAttrID() for index in xrange(ipyDataMgr.GetRolePointCount())]
+    canReset = False
+    for attrID in canResetIDList:
+        curPoint = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_AddPointValue % attrID)
+        if curPoint:
+            canReset = True
+            break
+    if not canReset:
+        GameWorld.DebugLog('重置加点 没有点数需要重置')
+        return
+    isFree = curPlayer.GetLV() < IpyGameDataPY.GetFuncCfg('LVUPAddPoint', 4)
+    if not isFree:
+        #优先使用剩余时间最短的时效物品
+        needItemIDList = IpyGameDataPY.GetFuncEvalCfg('LVUPAddPoint', 5)
+        itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
+        delIndex = -1
+        expireTime = 0
+        for itemID in needItemIDList:
+            hasEnough, itemIndexList = ItemCommon.GetItem_FromPack_ByID(itemID, itemPack, 10)
+            if not itemIndexList:
+                #GameWorld.DebugLog("重置加点 item(%s) isn't enough" % (needItemID))
+                continue
+            
+            for itemIndex in itemIndexList:
+                curItem = itemPack.GetAt(itemIndex)
+                if not ItemCommon.CheckItemCanUse(curItem):
+                    continue
+                isExpireItem, remainingTime = ItemCommon.GetItemRemainingTime(curItem)
+                if isExpireItem:
+                    if remainingTime <= 0:
+                        #过期
+                        continue
+                    if not expireTime or remainingTime < expireTime:
+                        expireTime = remainingTime
+                        delIndex = itemIndex
+                else:
+                    delIndex = itemIndex
+                    break
+            if delIndex != -1:
+                break
+        if delIndex is -1:
+            return
+        ItemCommon.ReduceItem(curPlayer, itemPack, [delIndex], 1, False, ChConfig.ItemDel_ResetAttrPoint)
+    
+    Item_ResetAttrPoint.DoResetAttrPoint(curPlayer, 0, 0, 0)
+    
+    EventShell.EventRespons_LingGenReset(curPlayer)
     return
 
 def NotifyPlayerBasePoint(curPlayer, syncAttrIDList=[]):
@@ -2455,7 +2470,7 @@
         GameWorld.DebugLog("当前无跨服地图!")
         return
     
-    if not __CheckCanReborn(curPlayer, rebornType):
+    if not __CheckCanReborn(curPlayer, rebornType, checkHPState=False):
         return
     
     msgDict = {"PlayerID":curPlayer.GetPlayerID(), "RebornType":rebornType}
@@ -2582,62 +2597,64 @@
 #@return 返回值无意义
 #@remarks 客户端封包响应//04 02 获取鼠标左键点击之后对象的详细信息#tagCClickObjGetInfo
 def __Func_PlayerClickOtherPlayerGetInfo(index, tick):
-    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    
-    sendPack = IPY_GameWorld.IPY_CClickObjGetInfo()
-    sendPack_ID = sendPack.GetObjID()
-    sendPack_Type = sendPack.GetObjType()
-    
-    tagObj = GameWorld.GetObj(sendPack_ID, sendPack_Type)
-    
-    if tagObj == None:
-        #GameWorld.Log("玩家请求其他玩家的相貌信息失败, 对象不存在", curPlayer.GetPlayerID())
-        return
-    
-    dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), tagObj.GetPosX(), tagObj.GetPosY())
-    #是否可以目标详细信息
-    canGetDetail = (dist <= curPlayer.GetSight())
-    #目标类型
-    tagObjType = tagObj.GetGameObjType()
-    
-    #仅处理Player和NPC
-    if tagObjType not in [IPY_GameWorld.gotPlayer, IPY_GameWorld.gotNPC]:
-        return
-    
-    #---玩家处理---
-    if tagObjType == IPY_GameWorld.gotPlayer:
-        #获取玩家详细信息成功
-        if canGetDetail:
-            extendDataDict = {}
-            extendDataDict['maxHP'] = tagObj.GetMaxHP()
-            extendDataDict['maxMP'] = tagObj.GetMaxMP()
-            extendDataDict['hit'] = tagObj.GetHit()
-            extendDataDict['miss'] = tagObj.GetMiss()
-            extendDataDict['atkSpeed'] = PlayerControl.GetAtkSpeed(tagObj)
-            extendDataDict['superHitRate'] = tagObj.GetSuperHitRate()
-            extendDataDict['superHit'] = tagObj.GetSuperHit()
-            extendDataDict['luckyHitRate'] = tagObj.GetLuckyHitRate()
-            extendDataDict['greatHitRate'] = tagObj.GetGreatHitRate()
-            extendDataDict['ignoreDefRate'] = tagObj.GetIgnoreDefRate()
-            extendDataDict['damageReduceRate'] = tagObj.GetDamageReduceRate()
-            extendDataDict['damageBackRate'] = tagObj.GetDamageBackRate()
-                        
-            extendData = str(extendDataDict)
-            extendDataLen = len(extendData)
-            curPlayer.PlayerClickOtherPlayerDetail(tagObj, extendDataLen, extendData)
-            return
-        
-        #获取玩家详细信息失败
-        curPlayer.Sync_GetPlayerInfoFail(sendPack_ID)
-        return
-    
-    #---NPC处理---
-    
-    #获取NPC详细信息成功
-    if canGetDetail:
-        curPlayer.PlayerClickOtherNPCDetail(tagObj)
-        return
-    
+    #===========================================================================
+    # curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    # 
+    # sendPack = IPY_GameWorld.IPY_CClickObjGetInfo()
+    # sendPack_ID = sendPack.GetObjID()
+    # sendPack_Type = sendPack.GetObjType()
+    # 
+    # tagObj = GameWorld.GetObj(sendPack_ID, sendPack_Type)
+    # 
+    # if tagObj == None:
+    #    #GameWorld.Log("玩家请求其他玩家的相貌信息失败, 对象不存在", curPlayer.GetPlayerID())
+    #    return
+    # 
+    # dist = GameWorld.GetDist(curPlayer.GetPosX(), curPlayer.GetPosY(), tagObj.GetPosX(), tagObj.GetPosY())
+    # #是否可以目标详细信息
+    # canGetDetail = (dist <= curPlayer.GetSight())
+    # #目标类型
+    # tagObjType = tagObj.GetGameObjType()
+    # 
+    # #仅处理Player和NPC
+    # if tagObjType not in [IPY_GameWorld.gotPlayer, IPY_GameWorld.gotNPC]:
+    #    return
+    # 
+    # #---玩家处理---
+    # if tagObjType == IPY_GameWorld.gotPlayer:
+    #    #获取玩家详细信息成功
+    #    if canGetDetail:
+    #        extendDataDict = {}
+    #        extendDataDict['maxHP'] = tagObj.GetMaxHP()
+    #        extendDataDict['maxMP'] = tagObj.GetMaxMP()
+    #        extendDataDict['hit'] = tagObj.GetHit()
+    #        extendDataDict['miss'] = tagObj.GetMiss()
+    #        extendDataDict['atkSpeed'] = PlayerControl.GetAtkSpeed(tagObj)
+    #        extendDataDict['superHitRate'] = tagObj.GetSuperHitRate()
+    #        extendDataDict['superHit'] = tagObj.GetSuperHit()
+    #        extendDataDict['luckyHitRate'] = tagObj.GetLuckyHitRate()
+    #        extendDataDict['greatHitRate'] = tagObj.GetGreatHitRate()
+    #        extendDataDict['ignoreDefRate'] = tagObj.GetIgnoreDefRate()
+    #        extendDataDict['damageReduceRate'] = tagObj.GetDamageReduceRate()
+    #        extendDataDict['damageBackRate'] = tagObj.GetDamageBackRate()
+    #                    
+    #        extendData = str(extendDataDict)
+    #        extendDataLen = len(extendData)
+    #        curPlayer.PlayerClickOtherPlayerDetail(tagObj, extendDataLen, extendData)
+    #        return
+    #    
+    #    #获取玩家详细信息失败
+    #    curPlayer.Sync_GetPlayerInfoFail(sendPack_ID)
+    #    return
+    # 
+    # #---NPC处理---
+    # 
+    # #获取NPC详细信息成功
+    # if canGetDetail:
+    #    curPlayer.PlayerClickOtherNPCDetail(tagObj)
+    #    return
+    # 
+    #===========================================================================
     #获取NPC详细信息失败
     #暂不处理
     return
@@ -4088,10 +4105,17 @@
 
 #---------------------------------------------------------------------
 
-def __CheckCanReborn(curPlayer, rebornType, gameMap=None):
+def __CheckCanReborn(curPlayer, rebornType, gameMap=None, checkHPState=True):
     ''' 检查可否复活,为了逻辑统一,这里不适用玩家所在的地图,支持跨服状态下判断跨服地图
                 本函数不验证玩家死亡状态等,因为有可能前后端复活状态不一致,如果这里拦住可能导致前端躺尸复活不了
     '''
+    
+    if checkHPState and curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
+        # 当血量大于0收到复活请求时,一般是前后端复活状态不一致的情况下导致的
+        # 由于前端需要根据复活状态判断复活界面相关逻辑,所以这里需要做一些特殊处理,防止某些情况下前后端复活状态不一致导致的一些异常问题
+        # 后端非死亡状态的情况,补同步一次复活包给前端
+        SyncPlayerReborn(curPlayer, rebornType)
+        return
     
     if rebornType not in ChConfig.Def_RebornTypeList:
         return
@@ -4150,13 +4174,6 @@
 
 def __DoPlayerReborn(curPlayer, rebornType, tick, mapBornPlace=0, isAddSuperBuff=True):
     ## 执行玩家复活逻辑,该函数没有执行验证是否可复活等,不可直接调用
-    
-    if curPlayer.GetHP() > 0 and curPlayer.GetPlayerAction() != IPY_GameWorld.paDie:
-        # 当血量大于0收到复活请求时,一般是前后端复活状态不一致的情况下导致的
-        # 由于前端需要根据复活状态判断复活界面相关逻辑,所以这里需要做一些特殊处理,防止某些情况下前后端复活状态不一致导致的一些异常问题
-        # 后端非死亡状态的情况,补同步一次复活包给前端
-        SyncPlayerReborn(curPlayer, rebornType)
-        return
     
     resetHpPercent = ChConfig.Def_MaxRateValue
     isFBReborn = False
@@ -4508,10 +4525,11 @@
 #{
 #    tagHead        Head;
 #    DWORD        DataMapID;
+#    WORD        LineID;
 #};
 def OnEnterCrossServer(index, clientData, tick):
     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
-    PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID)
+    PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID, clientData.LineID)
     return
     
 #===============================================================================
@@ -5341,6 +5359,10 @@
     # 领取节日巡礼积分奖励
     elif rewardType == ChConfig.Def_RewardType_FeastWeekPartyPoint:
         PlayerFeastWeekParty.GetFeastWeekPartyPointAward(curPlayer, dataEx, dataExStr)
+    #缥缈奇遇领取
+    elif rewardType == ChConfig.Def_RewardType_FairyAdventuresAward:
+        PlayerFairyDomain.GetFairyAdventuresAward(curPlayer, dataEx, dataExStr)
+        
     return
     
     
@@ -5813,3 +5835,24 @@
     sendPack.NPCID = npcID
     NetPackCommon.SendFakePack(curPlayer, sendPack)
     return
+
+#// B4 0E 玩家掉血 #tagCMRoleLostHP
+#
+#struct    tagCMRoleLostHP
+#{
+#    tagHead        Head;
+#    DWORD        LostHP;
+#};
+def OnRoleLostHP(index, clientData, tick):
+    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
+    lostHP = clientData.LostHP
+    curHP = curPlayer.GetHP()
+    updHP = curHP - lostHP
+    if updHP <= 0:
+        #玩家已经死亡
+        playerControl = PlayerControl.PlayerControl(curPlayer)
+        playerControl.SetDead()
+    else:
+        curPlayer.SetHP(updHP)
+        
+    return

--
Gitblit v1.8.0