hxp
2020-09-23 7081f1b83e14d451677f5e5525404983f3ac4eeb
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCHurtManager.py
@@ -266,6 +266,29 @@
    def IsAssistPlayer(self, playerID):
        ## 是否助战伤血玩家
        return playerID in self.__assistPlayerIDDict
    def IsAssistRelation(self, playerID, tagPlayerID):
        ## 玩家双方是否存在协助关系
        # A协助B
        if playerID in self.__assistPlayerIDDict:
            if self.__assistPlayerIDDict[playerID] == tagPlayerID:
                #GameWorld.DebugLog("%s 协助  %s" % (playerID, tagPlayerID))
                return True
        # B协助A
        elif tagPlayerID in self.__assistPlayerIDDict:
            if self.__assistPlayerIDDict[tagPlayerID] == playerID:
                #GameWorld.DebugLog("%s 协助  %s" % (tagPlayerID, playerID))
                return True
        # 协助同一个玩家
        for assPlayerIDList in self.__noAssitPlayerIDDict.values():
            if playerID in assPlayerIDList and tagPlayerID in assPlayerIDList:
                #GameWorld.DebugLog("协助同一玩家! %s %s" % (playerID, tagPlayerID))
                return True
        return False
    
    def OnHurtPlayerEnterTeam(self, playerID, playerName, befTeamID, newTeam, tick):
        ''' 伤血玩家加入队伍
@@ -779,6 +802,7 @@
                    overDict = {FBCommon.Over_isAssist:1, FBCommon.Over_money:FBCommon.GetJsonMoneyList({assistMoneyType:addAssistMoney}),
                                FBCommon.Over_itemInfo:[]}
                    FBCommon.NotifyFBOver(assistPlayer, mapID, PlayerControl.GetFBFuncLineID(assistPlayer), 1, overDict)
                    assistPlayer.Sync_TimeTick(IPY_GameWorld.tttLeaveMap, 0, 10000, True)
                    
                if noAssistPlayer:
                    todayGiftCount = assistPlayer.NomalDictGetProperty(ChConfig.Def_PDict_GetThanksGiftCount % liheItemID)
@@ -886,9 +910,17 @@
def OnPlayerLeaveMap(curPlayer):
    ## 玩家离开地图处理
    
    mapID = curPlayer.GetMapID()
    mapType = GameWorld.GetMap().GetMapFBType()
    changeMapID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ChangeMapID)
    changeLineID = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_ChangeLineID)
    playerID = curPlayer.GetPlayerID()
    for hurtList in PyGameData.g_npcHurtDict.values():
        if hurtList.IsNoAssistPlayer(playerID) or hurtList.IsAssistPlayer(playerID):
            if mapType == IPY_GameWorld.fbtNull and mapID == changeMapID and changeLineID == hurtList.lineID:
                #GameWorld.DebugLog("玩家同地图切线,当前伤血lineID为目标线路,不清伤血!changeLineID=%s" % changeLineID, playerID)
                continue
            GameWorld.DebugLog("玩家离开地图, 删除boss伤血玩家!npcID=%s" % (hurtList.npcID), playerID)
            hurtList.DelHurtPlayer(playerID, "LeaveMap")
            break
@@ -966,6 +998,10 @@
        defendHurtList = PlayerHurtList(lineID, objID, npcID)
        PyGameData.g_npcHurtDict[key] = defendHurtList
    defendHurtList = PyGameData.g_npcHurtDict[key]
    if not defendHurtList.curNPC:
        hurtList = PyGameData.g_npcHurtDict.pop(key)
        hurtList.OnDelete()
        return
    return defendHurtList
def OnNPCHurtPlayerEnterTeam(playerID, playerName, befTeamID, newTeam, tick):
@@ -1024,6 +1060,15 @@
        return False
    return defendHurtList.IsAssistPlayer(playerID)
def IsAssistRelation(curPlayer, tagPlayer):
    ## 双方是否协助关系
    playerID = curPlayer.GetPlayerID()
    tagPlayerID = tagPlayer.GetPlayerID()
    for hurtList in PyGameData.g_npcHurtDict.values():
        if hurtList.IsAssistRelation(playerID, tagPlayerID):
            return True
    return False
def CheckPlayerCanAttackFBNPC(curPlayer, curNPC, mapID, isNotify=False):
    ## 检查玩家可否攻击有副本次数的NPC
    enterCnt = curPlayer.NomalDictGetProperty(ChConfig.Def_Player_Dict_EnterFbCntDay % mapID)