from events import Event
from players.entity import Player
from filters.entities import EntityIter
from effects import beam
from filters.recipients import RecipientFilter
from mathlib import Vector
from engines.precache import Model
from effects import box
from effects.base import TempEntity
from entities.entity import Entity
from entities.constants import MoveType
from entities.constants import SolidFlags
from colors import Color
from listeners import OnLevelInit
model = Model('sprites/tp_beam001.vmt')
ent_model = Model('models/props_c17/oildrum001.mdl')
ent_list = {}
beam_list = {}
@Event('player_say')
def say(ev):
userid = int(ev['userid'])
player = Player.from_userid(userid)
do_box()
for index in beam_list:
x,y = beam_list[index]
print("beam1: "+str(x)+" beam2: "+str(y))
def do_box():
points = [(ent_list[0],ent_list[1]),(ent_list[1],ent_list[3]),(ent_list[3],ent_list[2]),(ent_list[2],ent_list[0]),(ent_list[5],ent_list[6]),(ent_list[6],ent_list[8]),(ent_list[8],ent_list[7]),(ent_list[7],ent_list[5])]
for x,y in points:
index = points.index((x,y))
beam_one = create_beam(x,y)
beam_two = create_beam(x,y)
beam_list[index] = (beam_one,beam_two)
def create_beam(start,end):
start_entity = Entity(start)
end_entity = Entity(end)
beam = Entity.create("env_beam")
beam.spawn_flags = 1
beam.teleport(start_entity.origin, None, None)
beam.set_key_value_int('damage', 0)
beam.set_key_value_float('HDRColorScale', 1.0)
beam.set_key_value_int('life', 0)
beam.set_key_value_string(
'LightningStart', str(start))
beam.set_key_value_string(
'LightningEnd', str(end))
beam.set_key_value_int('Radius', 255)
beam.set_key_value_int('renderamt', 100)
beam.set_key_value_color('rendercolor', Color(255,255,255,255))
beam.set_key_value_int('StrikeTime', 1)
beam.set_key_value_string('texture', "sprites/laserbeam.spr")
beam.set_key_value_int('TextureScroll', 1)
beam.set_key_value_int('TouchType', 3)
beam.model = model
beam.set_property_vector('m_vecEndPos', end_entity.origin)
beam.spawn()
beam.flags=1 << 11 | 1 << 12
beam.call_input('TurnOff')
beam.call_input('TurnOn')
beam.call_input('Width',15.0)
return beam.index
def create_corners(start,end,number):
x1, y1, z1 = start
x2, y2, z2 = end
a = start #rechts oben
b = Vector(x2, y1, z1) #links oben
e = Vector(x1, y2, z1) #rechts unten
f = Vector(x2, y2, z1) #links unten
#A | E rechts oben
#B | F links oben
#C | G rechts unten
#D | H links unten
#0 - 1
#1 - 3
#3 - 2
#2 - 0
points = (a,b,e,f)
for counter,point in enumerate(points):
entity = Entity.create('prop_physics')
entity.origin = point
entity.model = ent_model
entity.spawn()
entity.move_type = MoveType.NONE
entity.target_name = ""+str(entity.index)
entity.solid_flags |= SolidFlags.NOT_SOLID
#entity.color = Color(255,255,255,0)
if number == 1:
ent_list[counter] = entity.index
else:
ent_list[counter+5] = entity.index
@Event('round_start')
def round_start(ev):
cnt = 0
for ent in EntityIter():
if ent.classname == 'func_bomb_target':
cnt += 1
st = Vector(*ent.mins)
end = Vector(*ent.maxs)
st[2] += 40
end[2] = st[2]
create_corners(st,end,cnt)