#!/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 curPlayer.GetSightLevel() != curNPC.GetSightLevel():
|
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
|