ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/ChPlayer.py
@@ -18,7 +18,6 @@
import GameMap
import ChConfig
import EventShell
import SkillShell
import BuffSkill
import PlayerEventCounter
import PlayerTeam
@@ -57,10 +56,8 @@
import PlayerLoginDayAward
import PlayerGodWeapon
import PlayerWorldAverageLv
import GameLogic_ManorWar
import PlayerGoldInvest
import PlayerActivity
import PlayerTeHui
import FBCommon
import PlayerBindJadeWheel
import BossHurtMng
@@ -70,23 +67,20 @@
import PlayerDienstgrad
import PlayerMixLoginDayAward
import PlayerFreeGoods
import ShopItemManage
import PlayerRecover
import GameLogic_IceLode
import PlayerEquipDecompose
import PlayerCoat
import PlayerGreatMaster
import PlayerCostVIP
import PlayerMergeKing
import PlayerMergePK
import PlayerGatherSoul
import PlayerCrossRealmPK
import GameFuncComm
import PlayerMagicWeapon
import GameLogic_TrialTower
import GameLogic_FamilyWar
import PlayerBossReborn
import PlayerWeekParty
import Operate_EquipWash
import PlayerTreasure
import PlayerMergeEvent
import GameLogic_GodArea
import PlayerRune
import PlayerFamilyRedPacket
@@ -101,19 +95,21 @@
import QuestCommon
import PlayerTJG
import GameLogic_XMZZ
import GameLogic_SealDemon
import PlayerFlashSale
import PlayerFlashGiftbag
import PlayerCostRebate
import PlayerActTotalRecharge
import PlayerSpringSale
import PlayerFairyCeremony
import CrossRealmPlayer
import ChNetSendPack
import FamilyRobBoss
import FBHelpBattle
import PyGameData
import PlayerCoin
import PlayerGeTui
import PlayerDogz
import PlayerCoat
import datetime
import time
@@ -184,7 +180,8 @@
    #先发送所有任务, 再刷新日期, 否则会有2个相同的任务在玩家身上
    #把玩家当前的所有任务发送给客户端
    #GameWorld.Log('EventShell.NotifyAllQuestDetail')
    EventShell.NotifyAllQuestDetail(curPlayer, True)
    if not GameWorld.IsCrossServer():
        EventShell.NotifyAllQuestDetail(curPlayer, True)
    
    #刷新人物日期状态
    #GameWorld.Log('PlayerEventCounter.UpdatePlayerLoginTime')
@@ -227,6 +224,128 @@
    
    return
#// A1 08 刷新主服角色信息 #tagCMRefreshMainServerRole
#
#struct tagCMRefreshMainServerRole
#{
#    tagHead        Head;
#};
def OnRefreshMainServerRole(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    Sync_DBPlayer(curPlayer)
    # 强刷一次属性,刷之前重置还没同步过所有属性
    curPlayer.SetDict(ChConfig.Def_PlayerKey_NotifyAllAttrState, 0)
    playerControl = PlayerControl.PlayerControl(curPlayer)
    playerControl.ReCalcAllState()
    if PlayerControl.GetCrossRealmState(curPlayer):
        CrossRealmPlayer.DoExitCrossRealm(curPlayer)
    return
def Sync_DBPlayer(curPlayer):
    ## 同步DBPlayer信息,同0102封包
    dbPlayer = ChPyNetSendPack.tagMCDBPlayer()
    dbPlayer.AccID = curPlayer.GetAccID()
    dbPlayer.PlayerID = curPlayer.GetPlayerID()
    dbPlayer.PlayerName = curPlayer.GetPlayerName()
    dbPlayer.AccState = curPlayer.GetAccState()
    dbPlayer.GMLevel = curPlayer.GetGMLevel()
    dbPlayer.Sex = curPlayer.GetSex()
    dbPlayer.Job = curPlayer.GetJob()
    dbPlayer.ReincarnationLv = curPlayer.GetReincarnationLv()
    dbPlayer.LV = curPlayer.GetLV()
    dbPlayer.LVEx = curPlayer.GetLVEx()
    dbPlayer.LV2 = curPlayer.GetLV2()
    dbPlayer.ExpPoint = curPlayer.GetExpPoint()
    dbPlayer.TotalExp = curPlayer.GetTotalExp()
    dbPlayer.Family = curPlayer.GetFamilyID()
    dbPlayer.FamilyName = curPlayer.GetFamilyName()
    dbPlayer.TeamHornor = curPlayer.GetTeamHornor()
    dbPlayer.FamilyHornor = curPlayer.GetFamilyHornor()
    dbPlayer.FamilyActiveValue = curPlayer.GetFamilyActiveValue()
    dbPlayer.LastWeekFamilyActiveValue = curPlayer.GetLastWeekFamilyActiveValue()
    dbPlayer.CountryHornor = curPlayer.GetCountryHornor()
    dbPlayer.CountryLastWeekHornor = curPlayer.GetCountryLastWeekHornor()
    dbPlayer.Mate = curPlayer.GetMate()
    dbPlayer.Gold = curPlayer.GetGold()
    dbPlayer.GoldPaper = curPlayer.GetGoldPaper()
    dbPlayer.Silver = curPlayer.GetSilver()
    dbPlayer.SilverPaper = curPlayer.GetSilverPaper()
    dbPlayer.FightPoint = curPlayer.GetFightPoint()
    dbPlayer.HappyPoint = curPlayer.GetHappyPoint()
    dbPlayer.LineID = curPlayer.GetLineID()
    dbPlayer.MapID = curPlayer.GetMapID() # 玩家身上的 GetMapID 返回的就是 GetDataMapID
    dbPlayer.PosX = curPlayer.GetPosX()
    dbPlayer.PosY = curPlayer.GetPosY()
    dbPlayer.RebornMapID = curPlayer.GetRebornMapID()
    dbPlayer.RebornPosX = curPlayer.GetRebornPosX()
    dbPlayer.RebornPosY = curPlayer.GetRebornPosY()
    dbPlayer.State = curPlayer.GetState()
    dbPlayer.HP = curPlayer.GetHP()
    dbPlayer.XP = curPlayer.GetXP()
    dbPlayer.HPRestoreSetting = curPlayer.GetHPRestoreSetting()
    dbPlayer.MPRestoreSetting = curPlayer.GetMPRestoreSetting()
    dbPlayer.FreePoint = curPlayer.GetFreePoint()
    dbPlayer.FreeSkillPoint = curPlayer.GetFreeSkillPoint()
    dbPlayer.BaseSTR = curPlayer.GetBaseSTR()
    dbPlayer.BasePNE = curPlayer.GetBasePNE()
    dbPlayer.BasePHY = curPlayer.GetBasePHY()
    dbPlayer.BaseCON = curPlayer.GetBaseCON()
    dbPlayer.STR = curPlayer.GetSTR()
    dbPlayer.PNE = curPlayer.GetPNE()
    dbPlayer.PHY = curPlayer.GetPHY()
    dbPlayer.CON = curPlayer.GetCON()
    #dbPlayer.Setting = curPlayer.GetSetting() # 没有
    dbPlayer.PKValue = curPlayer.GetPKValue()
    #dbPlayer.ActiveValue = curPlayer.GetActiveValue() # 没有
    dbPlayer.BackpackLV = curPlayer.GetBackpackLV()
    dbPlayer.WarehouseLV = curPlayer.GetWarehouseLV()
    dbPlayer.TeamID = curPlayer.GetTeamID()
    dbPlayer.UseGoldType = curPlayer.GetUseGoldType()
    dbPlayer.UseSilverType = curPlayer.GetUseSilverType()
    dbPlayer.AttackMode = curPlayer.GetAttackMode()
    dbPlayer.LastWeekOnlineTime = curPlayer.GetLastWeekOnlineTime()
    dbPlayer.FBID = curPlayer.GetClientLineID()
    dbPlayer.FamilyLV = curPlayer.GetFamilyLV()
    dbPlayer.FriendFavor = curPlayer.GetFriendFavor()
    dbPlayer.Energy = curPlayer.GetEnergy()
    dbPlayer.EquipShowSwitch = curPlayer.GetEquipShowSwitch()
    dbPlayer.LuckValue = curPlayer.GetLuckValue()
    dbPlayer.ExAttr1 = curPlayer.GetExAttr1()
    dbPlayer.ExAttr2 = curPlayer.GetExAttr2()
    dbPlayer.ExAttr3 = curPlayer.GetExAttr3()
    dbPlayer.ExAttr4 = curPlayer.GetExAttr4()
    dbPlayer.ExAttr5 = curPlayer.GetExAttr5()
    dbPlayer.Faction = curPlayer.GetFaction()
    dbPlayer.InfamyValue = curPlayer.GetInfamyValue()
    dbPlayer.OfficialRank = curPlayer.GetOfficialRank()
    dbPlayer.ChangeCoinPointTotal = curPlayer.GetChangeCoinPointTotal()
    dbPlayer.VIPLv = curPlayer.GetVIPLv()
    dbPlayer.VIPLvForPhone = curPlayer.GetVIPLvForPhone()
    dbPlayer.ExAttr6 = curPlayer.GetExAttr6()
    dbPlayer.ExAttr7 = curPlayer.GetExAttr7()
    dbPlayer.ExAttr8 = curPlayer.GetExAttr8()
    dbPlayer.ExAttr9 = curPlayer.GetExAttr9()
    dbPlayer.ExAttr10 = curPlayer.GetExAttr10()
    dbPlayer.ModelMark = curPlayer.GetModelMark()
    dbPlayer.ExAttr11 = curPlayer.GetExAttr11()
    dbPlayer.ExAttr12 = curPlayer.GetExAttr12()
    dbPlayer.ExAttr13 = curPlayer.GetExAttr13()
    dbPlayer.ExAttr14 = curPlayer.GetExAttr14()
    dbPlayer.OperateInfo = curPlayer.GetOperateInfo()
    dbPlayer.Operate = curPlayer.GetOperate()
    dbPlayer.ServerID = curPlayer.GetServerID()
    dbPlayer.ExAttr15 = curPlayer.GetExAttr15()
    dbPlayer.ExAttr16 = curPlayer.GetExAttr16()
    dbPlayer.ExAttr17 = curPlayer.GetExAttr17()
    dbPlayer.ExAttr18 = curPlayer.GetExAttr18()
    dbPlayer.ExAttr19 = curPlayer.GetExAttr19()
    dbPlayer.ExAttr20 = curPlayer.GetExAttr20()
    NetPackCommon.SendFakePack(curPlayer, dbPlayer)
    return
#---------------------------------------------------------------------
##玩家登陆游戏逻辑处理
@@ -246,21 +365,59 @@
    #同步GameServer自己的地图ID
    curPlayer.Sync_GameServer_MapID()
    
    SyncGuideState(curPlayer)
    # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
    # !!!必要发送的数据要注意位置
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(True)
    
    __DoPlayerLoginServer(curPlayer, tick)
    # 屏蔽跨服下关闭和子服重复的数据的发送 pushsend接口, notifyall正常发送
    # !!!必要发送的数据要注意位置
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(False)
        PlayerControl.SetCrossRealmState(curPlayer, 1) # 因为主服上传数据之前该值为0,所以登录跨服后在跨服服务器要设置为1
    return
def __DoPlayerLoginServer(curPlayer, tick):
    ''' 玩家登录需要处理的内容,本服及跨服服务器分开
    '''
    #设置上线时间
    curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
    #初始化玩家背包
    InitPlayerPack(curPlayer)
    #通知玩家物品信息
    __Sync_PackDetel(curPlayer)
    
    #更新主服ID信息
    #UpdatePlayerServerGroupID(curPlayer)
    if GameWorld.IsCrossServer():
        SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
        # 重置所有技能CD
        DoPlayerLoginInMap(curPlayer, tick)
        DataRecordPack.DR_PlayerLogin(curPlayer)
        EventReport.WriteEvent_login(curPlayer)
        #---玩家上线, 宠物逻辑处理---
        PetControl.DoLogic_PetInfo_OnLogin(curPlayer, tick)
        #通知运行成功
        curPlayer.BalanceServer_PlayerLoginInitOK()
        return
    SyncGuideState(curPlayer)
    #上线检查一次装备属性
    ItemControler.PlayerItemControler(curPlayer).CheckRolePackEquipAttr()
    #上线检查加点属性点
    PlayerControl.FixOldAddPoint(curPlayer)
    #更新服务器组ID
    PlayerControl.UpdPlayerServerGroupID(curPlayer)
    
    #上线学习技能
    SkillCommon.PlayerLoginCheckLearnSkill(curPlayer)
    SkillCommon.PlayerLoginMergeServerSkillLogic(curPlayer, tick)
    
    #刷新技能CD
    SkillCommon.PlayerLoginUpdateSkillCD(curPlayer, tick)
@@ -281,12 +438,10 @@
    
    #初始化现实时间物品
    InitRealityTimeItem(curPlayer, tick)
    #---刷新了玩家属性, 登陆只刷新一次,其他地方不用刷
    DoPlayerLoginInMap(curPlayer, tick)
    
    #设置上线时间
    curPlayer.SetLoginTime(GameWorld.GetCurrentDataTimeStr())
    #PlayerControl.SyncOnLineTimeTotal(curPlayer)
    #PlayerControl.SyncOnLineTimeLastOpenPack(curPlayer, IPY_GameWorld.rptItem)
    PlayerGodWeapon.OnLogin(curPlayer)
@@ -302,7 +457,10 @@
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_FuncChangeLineID, 0)
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_HighChangeLineID, 0)
        #GameWorld.DebugLog("离线超过10秒重置切线临时保存的相关记录值!leaveServerSecond=%s" % leaveServerSecond, curPlayer.GetPlayerID())
        # 离线过久恢复为非跨服状态
        if PlayerControl.GetCrossRealmState(curPlayer):
            PlayerControl.SetCrossRealmState(curPlayer, 0)
    # 合服首登处理
    __DoMixServerFirstLogin(curPlayer)
    PlayerBillboard.BillboardOnLogin(curPlayer)
@@ -475,11 +633,10 @@
    PlayerRecover.RecoverOnLogin(curPlayer)
#
#    # ʱװ
#    PlayerCoat.OnLogin_Coat(curPlayer)
#
#    # 跨服匹配
#    PlayerMergePK.MergePKOnLogin(curPlayer)
#    PlayerMergeKing.MergePKOnLogin(curPlayer)
    PlayerCoat.OnLogin_Coat(curPlayer)
    # 跨服PK
    PlayerCrossRealmPK.DoPlayerLogin(curPlayer)
    
    # 自定义货币值同步
    PlayerControl.NotifyPlayerAllCurrency(curPlayer)
@@ -536,6 +693,8 @@
    PlayerFreeGoods.OnLogin(curPlayer)
    # BOSS复活活动
    PlayerBossReborn.OnLogin(curPlayer)
    # 周狂欢活动
    PlayerWeekParty.OnLogin(curPlayer)
    # 仙界盛典活动
    PlayerFairyCeremony.OnLogin(curPlayer)
    # 分支下载奖励记录通知
@@ -556,7 +715,10 @@
    SyncLittleHelper(curPlayer)
    # 聊天气泡框
    SyncChatBubbleBoxState(curPlayer)
    # 副本助战
    FBHelpBattle.DoPlayerLogin(curPlayer)
    # 聚魂
    PlayerGatherSoul.PlayerLogin(curPlayer)
    curPlayer.SetState(0)   # 脱机挂恢复为正常上线
    curPlayer.SetFacePic(0) # 通知数据库是否保存还是下线,做一次恢复,1为保存 0为正常下线
    tjgTime = PlayerTJG.GetTJGTime(curPlayer)
@@ -777,7 +939,7 @@
# @remarks 上线时通知离线时间(离线挂机功能)
def __Sync_PlayerOffline(curPlayer, tick):
    #---等级限制---
    if GameWorld.IsMergeServer():
    if GameWorld.IsCrossServer():
        return
    PlayerTJG.TJGDeadOffline(curPlayer)
    
@@ -787,7 +949,7 @@
#    if curPlayer.GetLV() < lvLimit:
#        return
#    
#    if GameWorld.IsMergeServer():
#    if GameWorld.IsCrossServer():
#        return
#    
#    #当前离线时间(分)
@@ -818,20 +980,6 @@
#===============================================================================
    return
def UpdatePlayerServerGroupID(curPlayer):
    # 更新自己的服务器组ID, 跨服服务器不处理
    if GameWorld.IsMergeServer():
        return
    serverGroupID = GameWorld.GetServerGroupID()
    if not serverGroupID:
        return
    playerServerGroupID = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_ServerGroupID)
    if playerServerGroupID != serverGroupID:
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_ServerGroupID, serverGroupID)
        GameWorld.DebugLog("更新玩家所属服务器组ID: serverGroupID=%s" % serverGroupID)
    return
#---------------------------------------------------------------------
##玩家在地图服务器中登录ok,初始化自己
#@param curPlayer 玩家实例
@@ -860,11 +1008,20 @@
    SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer, ChConfig.Def_SkillID_LimitSuperBuff, tick)
            
    #刷新玩家的视野
    PlayerState.ChangePlayerSigh(curPlayer, tick)
    if not GameWorld.IsCrossServer() and PlayerControl.GetCrossRealmState(curPlayer):
        GameWorld.DebugLog("===登录本服地图时,处于跨服状态,不刷新视野!", curPlayer.GetPlayerID())
    else:
        PlayerState.ChangePlayerSigh(curPlayer, tick)
    
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(False)
    playerControl = PlayerControl.PlayerControl(curPlayer)
    #刷新所有状态
    playerControl.ReCalcAllState()
    if GameWorld.IsCrossServer():
        curPlayer.SetForbiddenSyncClientState(True)
    
    #刷新已分钟单位消耗的物品(不让玩家一上线就掉耐久)
    curPlayer.SetProcessEquipDurgTick(tick)
@@ -1205,8 +1362,11 @@
    firstMission = QuestCommon.GetCommonMission(curPlayer)
    if not (firstMission and firstMission.GetProperty(QuestCommon.Def_NewGuyNoSight) == 1):
        #刷新自己的视野
        curPlayer.RefreshView()
        curPlayer.SetVisible(True)
        if not GameWorld.IsCrossServer() and PlayerControl.GetCrossRealmState(curPlayer):
            GameWorld.DebugLog("===本服LoadMapOK时玩家处于跨服状态,不设置可见!", curPlayer.GetPlayerID())
        else:
            curPlayer.RefreshView()
            curPlayer.SetVisible(True)
    
    #如果玩家hp为0,设置玩家为死亡状态
    if curPlayer.GetHP() <= 0:
@@ -1303,6 +1463,8 @@
        #如果玩家上线后死亡,回程复活
        isLogin = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_LoadMapIsLogin)
        rebornType = ChConfig.rebornType_City if isLogin else ChConfig.rebornType_System
        if GameWorld.IsCrossServer():
            rebornType  = ChConfig.rebornType_System
        PlayerRebornByType(curPlayer, rebornType, tick)
        
    elif curMap.CanMove(posX, posY) != True:
@@ -1336,8 +1498,7 @@
    
    #设置阵营
    if curPlayer.GetFaction() != ChConfig.CampType_Neutral \
                and GameWorld.GetMap().GetMapID() not in ChConfig.Def_MapID_NeedCamp \
                and GameWorld.GetMap().GetMapID() not in ReadChConfig.GetEvalChConfig("MapID_NeedCamp"):
                and FBCommon.GetRecordMapID(GameWorld.GetMap().GetMapID()) not in ChConfig.Def_MapID_NeedCamp:
        #重置阵营
        curPlayer.SetFaction(ChConfig.CampType_Neutral)
        BuffSkill.DelBuffBySkillID(curPlayer, ChConfig.Def_SkillID_Justice, tick)
@@ -1358,6 +1519,7 @@
    
    PassiveBuffEffMng.OnLoadMapGFPassive(curPlayer)
    ItemControler.PlayerItemControler(curPlayer).RefreshStartEquipCount()   # 刷新装备珍品星级
    #EndLoadMap需放在最后
    curPlayer.EndLoadMap()
    return True
@@ -2460,7 +2622,6 @@
    
    GameWorld.Log("PlayerDisconnect!" , curPlayer.GetPlayerID())
    
    PlayerMergeEvent.BroadcastMergePlayerEvent()
    #下线了,将存储在字典中的真实XP值,设置给玩家,完成通知和存储
    #curPlayer.SetXP(curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_RecordXPValue))
    #######################################################################
@@ -2504,7 +2665,7 @@
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_Player_Dict_RoomID, 0)
    
    #下线召回宠物
    #PetControl.ReCallFightPet(curPlayer)
    PetControl.ReCallFightPet(curPlayer)
    
    PlayerTJG.CalcPlayerTJG(curPlayer, tick)
    
@@ -3236,6 +3397,8 @@
    sendPack.Clear()
    
    NetPackCommon.SendFakePack(curPlayer, sendPack)
    GameWorld.Log("地图切换失败", curPlayer.GetID())
    return
#---------------------------------------------------------------------
#===============================================================================
@@ -3623,6 +3786,10 @@
        GameWorld.ErrLog("ChangeLine -> 封包错误, 无此线路 = %s" % (changLineID), curPlayer.GetID())
        return
    
    if GameWorld.IsCrossServer():
        # 跨服服务器无法切线
        return
    mapID = curPlayer.GetMapID()
    
    activityLineID = 0 # 活动线, 默认1线
@@ -3736,6 +3903,11 @@
#@return 死亡冷却时间
def GetRebronTime(curPlayer, playerRebornType):
    mapType = GameWorld.GetMap().GetMapFBType()
    if playerRebornType in [ChConfig.rebornType_Health, ChConfig.rebornType_UseItem]:
        #原地复活、道具复活不用CD
        return 0
    # 副本地图CD
    if mapType != IPY_GameWorld.fbtNull:
        fbRebornTimeDict = IpyGameDataPY.GetFuncEvalCfg('DuplicatesRebornTime', 1)
@@ -3743,9 +3915,7 @@
        if curMapID in fbRebornTimeDict:
            return fbRebornTimeDict[curMapID]
        return fbRebornTimeDict.get(0, 0)
    if playerRebornType in [ChConfig.rebornType_Health, ChConfig.rebornType_UseItem]:
        #原地复活、道具复活不用CD
        return 0
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired):
        findBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_ReviveTired)[0]
        if findBuff:
@@ -3798,7 +3968,7 @@
#@param mapBornPlace 复活位置,默认0为原地
#@return 返回值无意义
#@remarks 自定义函数, 玩家复活
def PlayerRebornByType(curPlayer, playerRebornType, tick, mapBornPlace=0):
def PlayerRebornByType(curPlayer, playerRebornType, tick, mapBornPlace=0, isAddSuperBuff=True):
    curPlayerID = curPlayer.GetID()
    curVipLv = curPlayer.GetVIPLv()
    
@@ -3813,7 +3983,7 @@
    #复活冷却时间(秒)
    rebornTime = GetRebronTime(curPlayer, playerRebornType)    
    #冷却时间到了
    if not CanRebornByTimeOver(curPlayer, rebornTime):
    if playerRebornType != ChConfig.rebornType_System and not CanRebornByTimeOver(curPlayer, rebornTime):
        PlayerControl.NotifyCode(curPlayer, 'RebornCD')
        return False
    
@@ -3907,7 +4077,8 @@
        FBLogic.OnResetFBRebornPlacePos(curPlayer, mapBornPlace, tick)
    
    #复活加无敌Buff
    SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_LimitSuperBuff, tick)
    if isAddSuperBuff:
        SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_LimitSuperBuff, tick)
    #复活疲劳BUff
    if curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_IsAddReviveTired):
        findBuff = SkillCommon.FindBuffByID(curPlayer, ChConfig.Def_SkillID_ReviveTired)[0]
@@ -3920,15 +4091,22 @@
        SkillCommon.AddBuffBySkillType_NoRefurbish(curPlayer , ChConfig.Def_SkillID_ReviveTired, tick, buffSkillLV)
        GameWorld.DebugLog('    复活疲劳BUff buffSkillLV=%s'%(buffSkillLV))
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_IsAddReviveTired,0)
    #复活后清除角色身上的打BOSS和PK状态
    validTime = IpyGameDataPY.GetFuncCfg("PKConfig", 4) * 1000
    if PlayerState.IsInPKState(curPlayer):
        PlayerState.SetPKStateTick(curPlayer, tick - validTime)
    if PlayerState.IsInBossState(curPlayer):
        PlayerState.SetBossStateTick(curPlayer, tick- validTime)
    
    #重算属性
    playerControl = PlayerControl.PlayerControl(curPlayer)
    playerControl.RefreshAllState()
    
    #设置血量
    curPlayer.SetHP(curPlayer.GetMaxHP() * resetHpPercent / ChConfig.Def_MaxRateValue)
    curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue)
    #curPlayer.SetMP(curPlayer.GetMaxMP() * resetMpPercent / ChConfig.Def_MaxRateValue)
    #护盾
    PlayerControl.SetProDef(curPlayer, PlayerControl.GetMaxProDef(curPlayer))
    
    #玩家复活后副本处理
    FBLogic.OnPlayerRebornOver(curPlayer, playerRebornType)
@@ -4250,6 +4428,18 @@
#---------------------------------------------------------------------
#---------------------------------------------------------------------
#// C1 05 进入跨服地图 #tagCMEnterCrossServer
#
#struct    tagCMEnterCrossServer
#{
#    tagHead        Head;
#    DWORD        DataMapID;
#};
def OnEnterCrossServer(index, clientData, tick):
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
    PlayerControl.PlayerEnterCrossServer(curPlayer, clientData.DataMapID)
    return
#===============================================================================
# //03 21 进入副本活动#tagCEnterFbGameEvent
# tagCEnterFbGameEvent       *   GettagCEnterFbGameEvent();
@@ -4502,6 +4692,11 @@
    GameWorld.DebugLog("WorldTransPort packTransportType=%s,mapID=%s,lineID=%s,exData1=%s" 
                       % (packTransportType, mapID, lineID, exData1), playerID)
    lineID = -1 if lineID == 255 else lineID
    if GameWorld.IsCrossServer():
        if curPlayer.GetMapID() != mapID:
            return
        lineID = -1 # 跨服默认只能本线
    #世界传送封包允许类型(世界,大地图,任务)
    if packTransportType not in ChConfig.Def_PackType_TransportType.keys():
        GameWorld.ErrLog('WorldTransPort packTransportType = %s, NoFind' % (packTransportType), playerID)
@@ -4733,7 +4928,7 @@
#@remarks 离线经验兑换
def PlayerExpExchange(index, curPackData, tick):
    # 跨服服务器功能限制
    if GameWorld.IsMergeServer():
    if GameWorld.IsCrossServer():
        return
        
    #兑换公式字典
@@ -5129,94 +5324,13 @@
    # 冰晶矿脉星级奖励
    elif rewardType == ChConfig.Def_RewardType_IceLodeStar:
        GameLogic_IceLode.GetIceLodeStarAward(curPlayer, dataEx)
    # 领取周狂欢活动奖励
    elif rewardType == ChConfig.Def_RewardType_WeekPartyAct:
        PlayerWeekParty.GetWeekPartyActionAward(curPlayer, dataEx, dataExStr)
    # 领取周狂欢积分奖励
    elif rewardType == ChConfig.Def_RewardType_WeekPartyPoint:
        PlayerWeekParty.GetWeekPartyPointAward(curPlayer, dataEx, dataExStr)
    
#
#    # 充值豪礼奖励
#    elif rewardType == ShareDefine.Def_RewardType_GoldGift:
#        PlayerGoldGift.GetPlayerGoldGift(curPlayer, dataEx)
#
#    # 累计签到奖励
#    #elif rewardType == ShareDefine.Def_RewardType_DaySign:
#    #    PlayerSignDay.GiveSignCntAward(curPlayer, dataEx)
#
#    # 天天首充奖励
#    elif rewardType == ShareDefine.Def_RewardType_DailyGold:
#        PlayerGoldGift.GetPlayerDailyGoldChargeGift(curPlayer)
#
#    # 单日充值多选一礼包
#    elif rewardType == ShareDefine.Def_RewardType_SingleGoldGift:
#        giftLV = 0 # 默认第一档0
#        if dataExStr:
#            try:
#                giftLV = int(dataExStr)
#            except:
#                GameWorld.ErrLog("单日充值多选一礼包奖励档错误!%s" % dataExStr)
#        PlayerGoldGift.GetSingleGoldGift(curPlayer, dataEx, giftLV, 0)
#
#    # 当日充值无限领取礼包
#    elif rewardType == ShareDefine.Def_RewardType_UnlimitedGoldGift:
#        PlayerGoldGift.GetSingleGoldGift(curPlayer, 0, 0, 1)
#
#    # 登陆签到奖励
#    #elif rewardType == ShareDefine.Def_RewardType_DayLoginSign:
#    #    PlayerSignDay.GetDaySignAward(curPlayer, dataEx)
#
#    # 跨服PK奖励
#    elif rewardType == ShareDefine.Def_RewardType_MergePKAward:
#        PlayerMergePK.OnQueryMergePKAward(curPlayer, dataEx, GameWorld.ToIntDef(dataExStr), tick)
#
#    # 王者争霸全服荣耀奖励
#    elif rewardType == ShareDefine.Def_RewardType_ServerHonour:
#        PlayerMergeKing.GetMergeKingAward_ServerHonour(curPlayer)
#
#    # 王者争霸晋级排名奖励
#    elif rewardType == ShareDefine.Def_RewardType_MergeKingRank:
#        PlayerMergeKing.GetMergeKingAward_Rank(curPlayer)
#
#    # 王者争霸竞猜积分奖励
#    elif rewardType == ShareDefine.Def_RewardType_MergeKingSupport:
#        PlayerMergeKing.GetMergeKingAward_Support(curPlayer, dataEx, tick)
#
#    # QQ成长礼包奖励
#    elif rewardType in [ShareDefine.Def_RewardType_QQUpYellow, ShareDefine.Def_RewardType_QQUpBlue]:
#        PlayerQQ.GetQQUpReward(curPlayer, rewardType, dataEx)
#
#    # QQ新手礼包奖励
#    elif rewardType == ShareDefine.Def_RewardType_QQNewMan:
#        PlayerQQ.GetQQNewManAward(curPlayer, rewardType, dataEx)
#
#    # QQ每日礼包奖励
#    elif rewardType == ShareDefine.Def_RewardType_QQDayGift:
#        PlayerQQ.GetQQDayGift(curPlayer, rewardType, dataEx)
#
#    # Qzone成长礼包奖励
#    elif rewardType == ShareDefine.Def_RewardType_QzoneUp:
#        PlayerQQ.GetQzoneUpReward(curPlayer, rewardType, dataEx)
#
#    # Qzone新手礼包奖励
#    elif rewardType == ShareDefine.Def_RewardType_QzoneNewMan:
#        PlayerQQ.GetQzoneNewManAward(curPlayer, rewardType, dataEx)
#
#    # Qzone每日礼包奖励
#    elif rewardType == ShareDefine.Def_RewardType_QzoneDayGift:
#        PlayerQQ.GetQzoneDayGift(curPlayer, rewardType, dataEx)
#
#    # 消费VIP等级奖励
#    elif rewardType == ShareDefine.Def_RewardType_CostVIPLV:
#        PlayerCostVIP.GetCostVIPAward(curPlayer, dataEx)
#
#    # 消费VIP成长奖励
#    elif rewardType == ShareDefine.Def_RewardType_CostVIPGrowUp:
#        PlayerCostVIP.GetVIPGrowUpAward(curPlayer, dataEx)
#    # 转生领奖
#    elif rewardType == ShareDefine.Def_RewardType_Reincarnation:
#        PlayerReincarnation.GetReincarnationAward(curPlayer, dataEx)
#    # 跨服boss首次参与奖励
#    elif rewardType == ShareDefine.Def_RewardType_MergeBossFirstJoinAward:
#        GameLogic_MergeBoss.OnGetMergeBossFirstJoinAward(curPlayer)
#    # 悬赏任务积分奖励
#    elif rewardType == ShareDefine.Def_RewardType_ArrestTaskAward:
#        PlayerArrestTask.OnGetArrestPointAward(curPlayer, dataEx)
    return
    
    
@@ -5417,19 +5531,6 @@
        sendMsg = "%s" % str([tagMapID, tagLineID, npcIDList])
        curPlayer.GameServer_QueryPlayerByID(ChConfig.queryType_NPCCnt, 0,
                                 'NPCCnt', sendMsg, len(sendMsg))
    return
## 跨服赛报名状态
#  @param index 玩家索引
#  @param tick 当前时间
#  @return None
def SendRegisterState(curPlayer, state):
    resultPack = ChPyNetSendPack.tagMergeWarRegisterState()
    resultPack.Clear()
    resultPack.RegisterState = state
    NetPackCommon.SendFakePack(curPlayer, resultPack)
    return
@@ -5647,7 +5748,7 @@
    sendPack.Speed = curPlayer.GetSpeed()
    sendPack.MoveType = moveType
    # NotifyAll 做过滤或者数量处理
    PlayerControl.PyNotifyAll(curPlayer, sendPack, False, -1)
    PlayerControl.PyNotifyAll(curPlayer, sendPack, False, 0)
    return
def GetDownloadAward(curPlayer, dataEx):