#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
  
 | 
##@package KillScreenNPC  
 | 
# µ±Ç°ÆÁÄ»NPCÈ«²¿ËÀÍö  
 | 
#  
 | 
# @author ifo  
 | 
# @date 2010-4-23  
 | 
# @version 1.2  
 | 
#  
 | 
# ÐÞ¸Äʱ¼ä ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ  
 | 
# @change: "2014-01-27 15:00" hxp Ôö¼ÓnpcËÀÍöÖ´ÐÐDoLogic_AttackResult  
 | 
#  
 | 
# VER = "2014-01-27 15:00" zhengyang Ìí¼Ó×¢ÊÍ  
 | 
# VER = "2016-08-22 14:00" hxp Ö»»÷ɱ¹ÖÎï  
 | 
#  
 | 
# Ä£¿éÏêϸ˵Ã÷  
 | 
  
 | 
import IPY_GameWorld  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import BaseAttack  
 | 
import AttackCommon  
 | 
import GameObj  
 | 
import NPCCommon  
 | 
  
 | 
  
 | 
## GMÃüÁîÖ´ÐÐÈë¿Ú  
 | 
#  @param curPlayer µ±Ç°Íæ¼Ò  
 | 
#  @param playerList ²ÎÊýÁбí []  
 | 
#  @return None  
 | 
#  @remarks º¯ÊýÏêϸ˵Ã÷.  
 | 
def OnExec(curPlayer, playerList):  
 | 
  
 | 
    isMapAllNPC = 0  
 | 
    if len(playerList) > 0:  
 | 
        isMapAllNPC = playerList[0]  
 | 
          
 | 
    if isMapAllNPC:  
 | 
        __KillMapAllNPC(curPlayer)  
 | 
    else:  
 | 
        __KillScreenNPC(curPlayer)  
 | 
    return  
 | 
  
 | 
def __KillScreenNPC(curPlayer):  
 | 
    gameMap = GameWorld.GetMap()     
 | 
    tick = GameWorld.GetGameWorld().GetTick()  
 | 
    for i in range(curPlayer.GetPosX()-ChConfig.Def_Screen_Area,curPlayer.GetPosX()+ChConfig.Def_Screen_Area):  
 | 
        for j in range(curPlayer.GetPosY()-ChConfig.Def_Screen_Area,curPlayer.GetPosY()+ChConfig.Def_Screen_Area):  
 | 
            tempObj = gameMap.GetPosObj(i,j)  
 | 
            if not tempObj:  
 | 
                continue  
 | 
            for k in range(0,tempObj.GetObjCount()):  
 | 
                curObj = tempObj.GetObjByIndex(k)  
 | 
                if curObj == None:  
 | 
                    continue  
 | 
                if curObj.GetGameObjType() != IPY_GameWorld.gotNPC:  
 | 
                    continue  
 | 
                #curNPC = GameWorld.GetNPCManager().GetNPCByIndex(curObj.GetIndex())  
 | 
                curNPC = GameWorld.GetObj(curObj.GetID(), IPY_GameWorld.gotNPC)  
 | 
                __DoKillNPC(curPlayer, curNPC, tick)  
 | 
    return  
 | 
  
 | 
  
 | 
def __KillMapAllNPC(curPlayer):  
 | 
    tick = GameWorld.GetGameWorld().GetTick()  
 | 
    gameNPCManager = GameWorld.GetNPCManager()  
 | 
    for index in range(gameNPCManager.GetNPCCount()):  
 | 
        curNPC = gameNPCManager.GetNPCByIndex(index)  
 | 
        __DoKillNPC(curPlayer, curNPC, tick)  
 | 
    return  
 | 
  
 | 
def __DoKillNPC(curPlayer, curNPC, tick):  
 | 
    if not curNPC or curNPC.GetID() == 0 or GameObj.GetHP(curNPC) <= 0:  
 | 
        return  
 | 
    curFaction = curPlayer.GetFaction()  
 | 
    npcFaction = NPCCommon.GetFaction(curNPC)  
 | 
    if curFaction and npcFaction:  
 | 
        if curFaction == npcFaction:  
 | 
            return  
 | 
    elif npcFaction == ChConfig.CampType_Justice:  
 | 
        return  
 | 
    if curNPC.GetCurAction() == IPY_GameWorld.laNPCDie:  
 | 
        return  
 | 
    if curNPC.GetType() not in [IPY_GameWorld.ntMonster, ChConfig.ntPriWoodPilePVE, ChConfig.ntPriWoodPilePVP]:  
 | 
        return  
 | 
    if not curNPC.GetVisible():  
 | 
        return  
 | 
    if not AttackCommon.CheckSightLevel(curPlayer, curNPC):  
 | 
        return  
 | 
    curHP = GameObj.GetHP(curNPC)  
 | 
    AttackCommon.NPCAddObjInHurtList(curPlayer, curNPC, curHP, curHP)  
 | 
      
 | 
    #if curPlayer.GetTeamID() > 0:  
 | 
    #    AttackCommon.AddHurtValue(curNPC, curPlayer.GetTeamID(), ChConfig.Def_NPCHurtTypeTeam, curHP)  
 | 
    #    AttackCommon.AddTeamPlayerHurtValue(curNPC, curPlayer.GetTeamID(), curPlayer.GetPlayerID(), curHP)  
 | 
    #else:  
 | 
    #    AttackCommon.AddHurtValue(curNPC, curPlayer.GetPlayerID(), ChConfig.Def_NPCHurtTypePlayer, curHP)  
 | 
      
 | 
    #ͳһµ÷Óù¥»÷½áÊø¶¯×÷  
 | 
    GameObj.SetHP(curNPC, 0)  
 | 
    curNPC.SetDict(ChConfig.Def_PlayerKey_LastHurt, curPlayer.GetPlayerID())  
 | 
    BaseAttack.DoLogic_AttackResult(curPlayer, curNPC, None, tick)  
 | 
#                    curNPCControl = NPCCommon.NPCControl(curNPC)  
 | 
#                    curNPCControl.SetKilled()  
 | 
    return  
 |