#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package GM.Commands.PrintNPCHurt  
 | 
#  
 | 
# @todo:ÏÔʾNPCÉËѪÁÐ±í  
 | 
# @author hxp  
 | 
# @date 2017-12-07  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ÏÔʾNPCÉËѪÁÐ±í  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2017-12-07 15:00"""  
 | 
#-------------------------------------------------------------------------------  
 | 
import GameWorld  
 | 
import IPY_GameWorld  
 | 
import FamilyRobBoss  
 | 
import NPCCommon  
 | 
import ChConfig  
 | 
import NPCHurtManager  
 | 
import NPCHurtMgr  
 | 
import PlayerTeam  
 | 
import GameObj  
 | 
  
 | 
##²é¿´µãÑ¡µÄNPC³ðºÞÁÐ±í  
 | 
# @param curPlayer Íæ¼ÒʵÀý  
 | 
# @param cmdList GMÃüÁî²ÎÊýÁÐ±í  
 | 
# @return ·µ»ØÖµÎÞÒâÒå  
 | 
# @remarks GMÃüÁî  
 | 
def OnExec(curPlayer, cmdList):  
 | 
      
 | 
    if not cmdList:  
 | 
        GameWorld.DebugAnswer(curPlayer, "PrintNPCHurt objID ÊÇ·ñÅÅÐò(¿ÉÑ¡)")  
 | 
        return  
 | 
      
 | 
    objID = cmdList[0]  
 | 
    isSort = cmdList[1] if len(cmdList) > 1 else 0  
 | 
    curNPC = GameWorld.GetObj(objID, IPY_GameWorld.gotNPC)  
 | 
    if not curNPC:  
 | 
        GameWorld.DebugAnswer(curPlayer, "objID(%s) ´íÎó ÕÒ²»µ½¶ÔÓ¦NPC" % objID)  
 | 
        return  
 | 
      
 | 
    GameWorld.DebugAnswer(curPlayer, "--- %s --- HP: %s / %s" % (GameWorld.GetGameWorld().GetTick() % 1000, GameObj.GetHP(curNPC), GameObj.GetMaxHP(curNPC)))  
 | 
    GameWorld.DebugAnswer(curPlayer, "ID=%s,team=%s,family=%s" % (curPlayer.GetPlayerID(), curPlayer.GetTeamID(), curPlayer.GetFamilyID()))  
 | 
      
 | 
    # ¹éÊôÏÉÃ˵ģ¬È¡ÏÉÃËÉËѪͳ¼Æ  
 | 
    if NPCCommon.GetDropOwnerType(curNPC) == ChConfig.DropOwnerType_Family:  
 | 
        FamilyRobBoss.OnGMPrintFamilyOwnerBossHurt(curPlayer, curNPC)  
 | 
        return  
 | 
      
 | 
    isAssistHurt = 0  
 | 
    npcHurtList = NPCHurtManager.GetPlayerHurtList(curNPC)  
 | 
    if npcHurtList:  
 | 
        isAssistHurt = 1  
 | 
    if not npcHurtList:  
 | 
        npcHurtList = NPCHurtMgr.GetPlayerHurtList(curNPC)  
 | 
    if not npcHurtList:  
 | 
        npcHurtList = curNPC.GetPlayerHurtList()  
 | 
          
 | 
    if isSort:  
 | 
        npcHurtList.Sort()  #sortÒÔºóÉËѪÁбí´Ó´óµ½Ð¡ÅÅÐò  
 | 
          
 | 
    GameWorld.DebugAnswer(curPlayer, "ID=%s,NPCID=%s, ÉËѪÊý=%s,ÅÅÐò=%s,Ð=%s"   
 | 
                          % (curNPC.GetID(), curNPC.GetNPCID(), npcHurtList.GetHurtCount(), isSort, isAssistHurt))  
 | 
    if isAssistHurt:  
 | 
        for playerID, assistPlayerIDList in npcHurtList.GetNoAssitPlayerIDDict().items():  
 | 
            GameWorld.DebugAnswer(curPlayer, "Íæ¼Ò:%s, ÐÖúÍæ¼Ò:%s" % (playerID, assistPlayerIDList))  
 | 
        for assistPlayerID, tagPlayerID in npcHurtList.GetAssistPlayerIDDict().items():  
 | 
            GameWorld.DebugAnswer(curPlayer, "ÐÖúÍæ¼Ò:%s, Ä¿±ê:%s" % (assistPlayerID, tagPlayerID))  
 | 
              
 | 
    for index in xrange(npcHurtList.GetHurtCount()):  
 | 
        #»ñµÃÉËѪ¶ÔÏó  
 | 
        hurtObj = npcHurtList.GetHurtAt(index)  
 | 
        hurtType = hurtObj.GetValueType()  
 | 
        hurtID = hurtObj.GetValueID()  
 | 
        hurtValue = hurtObj.GetHurtValue()  
 | 
        if not hurtID:  
 | 
            GameWorld.DebugAnswer(curPlayer, "%s ²»´æÔÚ£¡HurtType=%s,ID=%s, V=%s" % (index, hurtType, hurtID, hurtValue))  
 | 
            continue  
 | 
          
 | 
        if hurtType == ChConfig.Def_NPCHurtTypePlayer:  
 | 
            hurtPlayer = GameWorld.GetObj(hurtID, IPY_GameWorld.gotPlayer)  
 | 
            if hurtPlayer == None:  
 | 
                GameWorld.DebugAnswer(curPlayer, "%s Íæ¼ÒID=%s,²»´æÔÚ, V=%s" % (index, hurtID, hurtValue))  
 | 
            elif hurtPlayer.GetHP() <= 0 :  
 | 
                GameWorld.DebugAnswer(curPlayer, "%s Íæ¼ÒID=%s,ѪÁ¿Îª0, V=%s" % (index, hurtID, hurtValue))  
 | 
            else:  
 | 
                d = GameWorld.GetDist(curNPC.GetPosX(), curNPC.GetPosY(), hurtPlayer.GetPosX(), hurtPlayer.GetPosY())  
 | 
                GameWorld.DebugAnswer(curPlayer, "%s Íæ¼ÒID=%s,¾àÀë=%s, V=%s" % (index, hurtID, d, hurtValue))  
 | 
                  
 | 
            if isAssistHurt:  
 | 
                playerHurtValue, assistPlayerHurtDict = npcHurtList.GetPlayerHurtDetail(hurtID)  
 | 
                GameWorld.DebugAnswer(curPlayer, "    ·ÇÐid=%s,v=%s" % (hurtID, playerHurtValue))  
 | 
                for assistPlayerID, assistHurtValue in assistPlayerHurtDict.items():  
 | 
                    GameWorld.DebugAnswer(curPlayer, "        ÐÖúid=%s,v=%s" % (assistPlayerID, assistHurtValue))  
 | 
                      
 | 
        elif hurtType == ChConfig.Def_NPCHurtTypeTeam:  
 | 
            #»ñµÃµ±Ç°¶ÓÎé  
 | 
            curTeam = GameWorld.GetTeamManager().FindTeam(hurtID)  
 | 
            if curTeam == None:  
 | 
                GameWorld.DebugAnswer(curPlayer, "%s ¶ÓÎéID=%s,²»´æÔÚ, V=%s" % (index, hurtID, hurtValue))  
 | 
            else:  
 | 
                GameWorld.DebugAnswer(curPlayer, "%s ¶ÓÎéID=%s,ÈËÊý=%s, V=%s" % (index, hurtID, curTeam.GetMemberCount(), hurtValue))  
 | 
                  
 | 
            if isAssistHurt:  
 | 
                mapTeamPlayerIDList = PlayerTeam.GetMapTeamPlayerIDList(hurtID)  
 | 
                for teamPlayerID in mapTeamPlayerIDList:  
 | 
                    if not npcHurtList.IsNoAssistPlayer(teamPlayerID):  
 | 
                        continue  
 | 
                    playerHurtValue, assistPlayerHurtDict = npcHurtList.GetPlayerHurtDetail(teamPlayerID)  
 | 
                    GameWorld.DebugAnswer(curPlayer, "    ·ÇÐid=%s,v=%s" % (teamPlayerID, playerHurtValue))  
 | 
                    for assistPlayerID, assistHurtValue in assistPlayerHurtDict.items():  
 | 
                        GameWorld.DebugAnswer(curPlayer, "        ÐÖúid=%s,v=%s" % (assistPlayerID, assistHurtValue))  
 | 
                          
 | 
        elif hurtType == ChConfig.Def_NPCHurtTypeNPC:  
 | 
            GameWorld.DebugAnswer(curPlayer, "%s NPC=%s, V=%s" % (index, hurtID, hurtValue))  
 | 
              
 | 
        #Òì³£ÐÅÏ¢,Ìí¼ÓÉËѪÀàÐÍ´íÎó  
 | 
        else:  
 | 
            GameWorld.DebugAnswer(curPlayer, "%s Òì³£!Type=%s,ID=%s, V=%s" % (index, hurtType, hurtID, hurtValue))  
 | 
    return  
 | 
  
 |