| #!/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  | 
|   |