hxp
2022-02-21 0c27822ef5e6c67782ed143a4ff03ecfbdfda1fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/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