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