hxp
2019-01-19 ad46a0c520f5b6e8e432c97bb2416e80a5b6eceb
ServerPython/CoreServerGroup/GameServer/Script/GameWorldLogic/GameWorldBoss.py
@@ -39,8 +39,10 @@
import PlayerCompensation
import IpyGameDataPY
import PyGameDataStruct
import CrossRealmPlayer
import PyDataManager
import PlayerControl
import CrossRealmMsg
import CommFunc
import PyGameData
import PlayerGeTui
@@ -102,9 +104,9 @@
    if bossID <= 0:
        return
    
    bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID = msgList
    bossID, killPlayerName, hurtValue, isNotify, realMapID, dataMapID, copyMapID, killerIDList = msgList
    if GameWorld.IsCrossServer():
        CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID)
        CrossBoss.DoCrossBossOnKilled(bossID, killPlayerName, realMapID, dataMapID, copyMapID, killerIDList)
        return
    
    mapID = dataMapID
@@ -501,7 +503,6 @@
    state = gameWorld.GetDictByKey(ChConfig.Def_WorldKey_OperationActionState % ShareDefine.OperationActionName_BossReborn)
    if state:
        Sync_BossRebornPoint(curPlayer)
    Sync_DogzNPCRefreshTime(curPlayer)
    return
## 地图启动ok通知
@@ -516,10 +517,6 @@
    if IsMapNeedBossShunt(0):
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntPlayer, PyGameData.g_bossShuntPlayerInfo)
        GameWorld.SendCommMapServerMsg(ShareDefine.Def_Notify_WorldKey_BossShuntLineState, PyGameData.g_bossShuntLineState)
    #通知一个参数
    bossID = IpyGameDataPY.GetFuncCfg('DogzFBRefreshCfg', 2)
    onlineCnt = __GetBossOnlineHeroCnt(bossID)[0]
    GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_BossOnlineHeroCnt % bossID, onlineCnt)
    
    #仙盟击杀骑宠boss数
    if PyGameData.g_familyKillHorsePetRobBossCntDict:
@@ -529,16 +526,37 @@
##--------------------------------------------------------------------------------------------------
def CrossServerMsg_DropGoodItem(msgList, tick):
    ## 收到跨服服务器同步的掉落好物品信息
    playerID = msgList[0]
    curPlayer = GameWorld.GetPlayerManager().FindPlayerByID(playerID)
    if curPlayer:
        msgList[1] = curPlayer.GetName() # 本服玩家在线,修改为本服玩家的名字展示
    OnKillBossDropGoodItem(msgList, tick)
    return
def OnKillBossDropGoodItem(msgList, tick):
    # playerName, mapID, npcID, itemID, userData
    if len(msgList) != 7:
    if len(msgList) != 8:
        return
    playerID, killerName, mapID, npcID, itemID, userData, weightValue = msgList
    GameWorld.DebugLog("击杀Boss掉落好物品: mapID=%s,npcID=%s,killerName=%s,itemID=%s, userData=%s, weightValue=%s"
                       % (mapID, npcID, killerName, itemID, userData, weightValue))
    playerID, killerName, mapID, npcID, itemID, userData, weightValue, serverGroupID = msgList
    GameWorld.DebugLog("击杀Boss掉落好物品: mapID=%s,npcID=%s,killerName=%s,itemID=%s, userData=%s, weightValue=%s, serverGroupID=%s"
                       % (mapID, npcID, killerName, itemID, userData, weightValue, serverGroupID))
    maxRecordCnt = IpyGameDataPY.GetFuncCfg('DropRecordNum')
    if not maxRecordCnt:
        return
    if GameWorld.IsCrossServer():
        # 同步到玩家对应子服
        if not serverGroupID:
            return
        zoneIpyData = CrossRealmPlayer.GetServerCrossZoneIpyData(mapID, serverGroupID)
        if not zoneIpyData:
            return
        serverGroupIDList = zoneIpyData.GetServerGroupIDList()
        CrossRealmMsg.SendMsgToClientServer(ShareDefine.CrossServerMsg_DropGoodItem, msgList, serverGroupIDList)
        return
    recType = ShareDefine.Def_UniversalGameRecType_BossDropGoodItemInfo
    universalRecMgr = GameWorld.GetUniversalRecMgr()
    recordList = universalRecMgr.GetTypeList(recType)
@@ -568,6 +586,9 @@
        
    PlayerUniversalGameRec.MapServer_UniversalGameRec(None, recType, [mapID, npcID, itemID, playerID, weightValue],
                                                      [killerName, "", userData])
    msgList = [killerName, playerID, mapID, npcID, itemID, userData]
    PlayerControl.WorldNotify(0, 'DropRecord' , msgList)
    return
@@ -634,8 +655,6 @@
    
    newNum = newOnlieCnt * 100 + unUpdataCnt
    PlayerDBGSEvent.SetDBGSTrig_ByKey(ShareDefine.Def_Notify_WorldKey_GameWorldBossOnlineCnt % bossid, newNum)
    if bossid == IpyGameDataPY.GetFuncCfg('DogzFBRefreshCfg', 2):
        GameWorld.SendMapServerMsgEx(ShareDefine.Def_Notify_WorldKey_BossOnlineHeroCnt % bossid, newOnlieCnt)
    GameWorld.DebugLog("设置计算boss刷新时间用的在线人数 Change:bossid=%s, beforeOnlineCnt = %s, newOnlieCnt = %s, unUpdataCnt=%s" % (bossid, beforeOnlineCnt, newOnlieCnt, unUpdataCnt))
    return
@@ -1059,38 +1078,6 @@
    packData.RebornCnt = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_BossRebornCnt)
    playerManager = GameWorld.GetPlayerManager()
    if not curPlayer:
        for i in xrange(playerManager.GetActivePlayerCount()):
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None or not curPlayer.GetInitOK():
                continue
            if PlayerControl.GetIsTJG(curPlayer):
                continue
            NetPackCommon.SendFakePack(curPlayer, packData)
    else:
        if PlayerControl.GetIsTJG(curPlayer):
            return
        NetPackCommon.SendFakePack(curPlayer, packData)
    return
def Sync_DogzNPCRefreshTime(curPlayer=None):
    #同步神兽副本NPC刷新时间
    refreshTimeDict = PyGameData.g_dogzNPCRefreshTimeDict
    if not refreshTimeDict:
        return
    curTime = int(time.time())
    packData = ChPyNetSendPack.tagGCDogzNPCRefreshTime()
    packData.InfoList=[]
    for npcid, timeinfo in refreshTimeDict.items():
        lastRefreshTime, nextNeedTime = timeinfo
        remainTime = max(0, nextNeedTime - curTime + lastRefreshTime)
        timeInfo = ChPyNetSendPack.tagDogzTimeInfoObj()
        timeInfo.NPCID = npcid
        timeInfo.RefreshSecond = remainTime
        packData.InfoList.append(timeInfo)
    packData.Cnt = len(packData.InfoList)
    if not curPlayer:
        playerManager = GameWorld.GetPlayerManager()
        for i in xrange(playerManager.GetActivePlayerCount()):
            curPlayer = playerManager.GetActivePlayerAt(i)
            if curPlayer == None or not curPlayer.GetInitOK():