import es import gamethread import random dmg_attacks = {} dmg_death_queue = {} dmg_counter = 0 dmg_events = 1 dmg_fired = {} # victim (person taking damage, also used for area effect) #attacker (person dealing damage) #damage (ammount of damage) #type (type of damage) #interval (how often the damage triggers) #delay (how long the damage lasts for) #radius (radius of the damage) class directdmg: "Extensive Class for Using point_hurt" def __init__(self, dmg_userid): if dmg_userid == 0: dmg_userid = es.getuserid() self.userid = int(dmg_userid) #Damage System (point_hurt) def hurt(self,victim,damage=1,type=2,weapon='point_hurt',interval=0.0,delay=0.0,radius=0,dmg_ff=0): global dmg_attacks, dmg_counter dmg_counter += 1 if dmg_counter > 9999: dmg_counter = 1 if victim and damage > 0: dmg_number = str(dmg_counter) dmg_name = 'skill_damage_' + dmg_number es.server.cmd('es_give ' + str(victim) + ' point_hurt') es.server.cmd('es_fire ' + str(victim) + ' !self addoutput "targetname badboy' + dmg_number + '"') es.server.cmd('est_setentname ' + es.getString('eventscripts_lastgive') + ' ' + dmg_name) es.server.cmd('es_fire ' + str(victim) + ' ' + dmg_name + ' addoutput "Damage ' + str(damage) + '"') es.server.cmd('es_fire ' + str(victim) + ' ' + dmg_name + ' addoutput "DamageType ' + str(type) + '"') es.server.cmd('es_fire ' + str(victim) + ' ' + dmg_name + ' addoutput "DamageDelay ' + str(interval) + '"') if not dmg_ff: team = es.getplayerteam(self.userid) es.setindexprop(es.getInt('eventscripts_lastgive'),'CBaseEntity.m_iTeamNum',team) if radius: es.server.cmd('es_fire ' + str(victim) + ' ' + dmg_name + ' addoutput "DamageRadius ' + str(radius) + '"') es.server.cmd('es_fire ' + str(victim) + ' ' + dmg_name + ' TurnOn') es.server.cmd('es_fire ' + str(victim) + ' targetname notbad') gamethread.delayed(delay,self.__delayed_off,(str(victim),str(dmg_name))) else: if dmg_events: dmg_attacks[int(victim)] = weapon es.server.cmd('es_fire ' + str(self.userid) + ' ' + dmg_name + ' addoutput "DamageTarget badboy' + dmg_number + '"') if delay: es.server.cmd('es_fire ' + str(self.userid) + ' ' + dmg_name + ' TurnOn') gamethread.delayed(delay,self.__delayed_off,(victim,dmg_name)) else: es.server.cmd('es_fire ' + str(self.userid) + ' ' + dmg_name + ' Hurt') es.server.cmd('es_fire ' + str(victim) + ' ' + dmg_name + ' kill') es.server.cmd('es_fire ' + str(victim) + ' targetname notbad') def radius(self,damage=1,type=2,weapon='point_hurt',interval=0.0,delay=0.0,radius=0,dmg_ff=0): if radius == 0: return 0 if damage < 1: damage = 1 if type < 0: type = 0 if interval <= 0.0: interval = 0.1 if delay <= 0.0: delay = 0.1 if weapon == '': weapon = 'point_hurt' self.hurt(self.userid,damage,type,weapon,interval,delay,radius,dmg_ff) def point(self,victim,damage=1,type=2,weapon='point_hurt',dmg_ff=0): if victim < 2: victim = es.getuserid() if damage < 1: damage = 1 if type < 0: type = 0 if weapon == '': weapon = 'point_hurt' self.hurt(victim,damage,type,weapon,0.0,0.0,0,dmg_ff) def repeat(self,victim,damage=1,type=2,weapon='point_hurt',interval=0.0,delay=0.0,dmg_ff=0): if victim < 2: victim = es.getuserid() if damage < 1: damage = 1 if type < 0: type = 0 if interval <= 0.0: interval = 0.1 if delay <= 0.0: delay = 0.1 if weapon == '': weapon = 'point_hurt' self.hurt(self.userid,damage,type,weapon,interval,delay,0,dmg_ff) def store(self,victim,attacker=0,weapon='point_hurt',headshot=0): global dmg_death_queue dmg_death_queue[victim] = {} dmg_death_queue[victim]['userid'] = victim dmg_death_queue[victim]['attacker'] = attacker dmg_death_queue[victim]['weapon'] = weapon dmg_death_queue[victim]['headshot'] = headshot if len(dmg_death_queue) == 1: self.__dmg_death_events(victim) def __delayed_off(self,victim,dmg_name): es.server.cmd('es_fire ' + victim + ' ' + dmg_name + ' TurnOff') es.server.cmd('es_fire ' + victim + ' ' + dmg_name + ' kill') es.server.cmd('es_fire ' + victim + ' targetname notbad') def __dmg_death_events(self,victim): global dmg_death_queue dmg_eventvars = dmg_death_queue[victim] es.server.cmd('est_hook_events_matching ""') es.event('initialize','player_death') es.event('setint','player_death','userid',int(dmg_eventvars['userid'])) es.event('setint','player_death','attacker',int(dmg_eventvars['attacker'])) if dmg_eventvars['weapon'] == 'env_explosion': es.event('setstring','player_death','weapon','suicide_explosion') else: if dmg_eventvars['weapon'] == 'point_hurt': es.event('setstring','player_death','weapon',dmg_attacks[dmg_eventvars['userid']]) else: es.event('setstring','player_death','weapon',dmg_eventvars['weapon']) es.event('setint','player_death','headshot',int(dmg_eventvars['headshot'])) es.event('fire','player_death') def dmg_death_next(self): for dmg_tmp in dmg_death_queue: self.__dmg_death_events(dmg_tmp) return 0 def get(userid): return directdmg(userid) def death_events(flag=0): global dmg_events dmg_events = int(flag) if flag: es.server.cmd('est_hook_events_matching "player_death"') else: es.server.cmd('est_hook_events_matching ""') def dmg_death_fired(userid): global dmg_fired if dmg_fired.has_key(int(userid)): del dmg_fired[int(userid)] return 1 return 0 def dmg_player_death(event_var): global dmg_death_queue, dmg_attacks, dmg_fired if dmg_events: if dmg_death_queue.has_key(int(event_var['userid'])): del dmg_death_queue[int(event_var['userid'])] if dmg_attacks.has_key(int(event_var['userid'])): del dmg_attacks[int(event_var['userid'])] dmg_fired[int(event_var['userid'])] = 1 es.server.cmd('est_hook_events_matching "player_death"') directdmg(int(event_var['userid'])).dmg_death_next() else: if event_var['weapon'] == 'point_hurt': directdmg(int(event_var['userid'])).store(int(event_var['userid']),int(event_var['attacker']),dmg_attacks[int(event_var['userid'])],int(event_var['headshot'])) else: directdmg(int(event_var['userid'])).store(int(event_var['userid']),int(event_var['attacker']),event_var['weapon'],int(event_var['headshot']))