コード例 #1
0
def wcs_teleport_command(command_info, player:convert_userid_to_player, x:float, y:float, z:float):
    if player is None:
        return

    location = Vector(x, y, z)
    origin = player.origin
    angles = QAngle(*player.get_property_vector('m_angAbsRotation'))

    forward = Vector()
    right = Vector()
    up = Vector()
    angles.get_angle_vectors(forward, right, up)

    forward.normalize()
    forward *= 10

    playerinfo = player.playerinfo
    mins, maxs = playerinfo.mins, playerinfo.maxs
    players = TraceFilterSimple(PlayerIter())

    for _ in range(100):
        ray = Ray(location, location, mins, maxs)
        trace = GameTrace()
        engine_trace.trace_ray(ray, ContentMasks.PLAYER_SOLID, players, trace)

        if not trace.did_hit():
            player.teleport(origin=location)
            break

        location -= forward

        if location.get_distance(origin) <= 10.0:
            break
コード例 #2
0
def wcs_nearcoord_command(command_info, var:str, players:convert_identifier_to_players, x:float, y:float, z:float, distance:float, command:str):
    vector = Vector(x, y, z)

    for player in players:
        if vector.get_distance(player.origin) <= distance:
            for cmd in [f'es_xset {var} {player.userid}'] + command.split(';'):
                execute_server_command(*split(cmd))
コード例 #3
0
ファイル: commands.py プロジェクト: AlexxDone/WCS_GO
def _wcs_teleport(command):
    userid = int(command[1])
    x = float(command[2])
    y = float(command[3])
    z = float(command[4])
    target_location = Vector(
        x,
        y,
        z,
    )
    player = Player.from_userid(userid)
    origin = player.origin
    angles = QAngle(*player.get_property_vector('m_angAbsRotation'))
    forward = Vector()
    right = Vector()
    up = Vector()
    angles.get_angle_vectors(forward, right, up)
    forward.normalize()
    forward *= 10.0
    loop_limit = 100
    can_teleport = 1
    while is_player_stuck(player.index, target_location):
        target_location -= forward
        loop_limit -= 1
        if target_location.get_distance(origin) <= 10.0 or loop_limit < 1:
            can_teleport = 0
            break
    if can_teleport == 1:
        player.teleport(target_location, None, None)
コード例 #4
0
ファイル: __init__.py プロジェクト: RedJohnies/W3
def chain_lightning(wcsplayer, variables):
    player = wcsplayer.player

    if not player.dead:
        team = player.team_index

        if team >= 2:
            max_targets = variables['max_targets']
            radius = variables['radius']

            targets = []
            immune = 0

            vector = Vector(*player.origin)

            # TODO: Check if there's a wall between the two players
            for target, wcstarget in PlayerReadyIter(['alive', 'ct' if wcsplayer.player.team_index == 2 else 't']):
                if wcstarget.data.get('ulti_immunity', False):
                    immune += 1

                    chain_lightning_block_victim_message.send(target.index)
                else:
                    vector2 = target.origin
                    distance = vector.get_distance(vector2)

                    if distance <= radius:
                        targets.append((wcstarget, Vector(*vector2)))

                        max_targets -= 1

                        if not max_targets:
                            break

            if immune:
                chain_lightning_block_attacker_message.send(wcsplayer.index, count=immune)

            if targets:
                wcsplayer.skills['chain_lightning'].reset_cooldown()

                vector.z += 35

                damage = variables['damage']

                for (wcstarget, vector2) in targets:
                    wcstarget.take_damage(damage, wcsplayer.index, 'orcish_horde-chain_lightning')

                    vector2.z += 35
                    chain_lightning_0_effect.create(start_point=vector, end_point=vector2)
                    chain_lightning_1_effect.create(start_point=vector, end_point=vector2)
                    chain_lightning_2_effect.create(start_point=vector, end_point=vector2)

                chain_lightning_count_message.send(wcsplayer.index, count=len(targets))
            else:
                chain_lightning_failed_message.send(wcsplayer.index)
コード例 #5
0
ファイル: commands.py プロジェクト: AlexxDone/WCS_GO
def _getdistance(command):
    var = str(command[1])
    x1 = float(command[2])
    y1 = float(command[3])
    z1 = float(command[4])
    x2 = float(command[5])
    y2 = float(command[6])
    z2 = float(command[7])
    vec1 = Vector(x1, y1, z1)
    vec2 = Vector(x2, y2, z2)
    distance = vec1.get_distance(vec2)
    ConVar(var).set_float(distance)
コード例 #6
0
def teleport(wcsplayer, variables):
    player = wcsplayer.player

    vector1 = Vector(*player.origin)
    vector2 = Vector(*player.view_coordinates)

    if variables['range'] >= vector1.get_distance(vector2):
        vector2 -= vector1
        vector2 *= 2
        player.set_property_vector('m_vecBaseVelocity', vector2)

        wcsplayer.skills['teleport'].reset_cooldown()

        vector1.z += 25
        teleport_effect_0.create(origin=vector1)
        teleport_effect_1.create(mins=vector1, maxs=vector1)
        teleport_effect_2.create(origin=vector1)
        teleport_effect_3.create(center=vector1)
    else:
        teleport_failed_message.send(wcsplayer.index)
コード例 #7
0
def wcs_getdistance_command(command_info, var:ConVar, x:float, y:float, z:float, x2:float, y2:float, z2:float):
    vector = Vector(x, y, z)
    vector2 = Vector(x2, y2, z2)

    var.set_float(vector.get_distance(vector2))
コード例 #8
0
def entangling_roots(wcsplayer, variables):
    player = wcsplayer.player

    if not player.dead:
        team = player.team_index

        if team >= 2:
            radius = variables['radius']

            targets = []
            immune = 0

            vector = Vector(*player.origin)

            # TODO: Check if there's a wall between the two players
            for target, wcstarget in PlayerReadyIter(
                ['alive', 'ct' if team == 2 else 't']):
                if wcstarget.data.get('ulti_immunity', False):
                    immune += 1

                    entangling_roots_block_victim_message.send(target.index)
                else:
                    vector2 = target.origin
                    distance = vector.get_distance(vector2)

                    if distance <= radius:
                        targets.append((wcstarget, Vector(*vector2)))

            if immune:
                entangling_roots_block_attacker_message.send(wcsplayer.index,
                                                             count=immune)

            if targets:
                wcsplayer.skills['entangling_roots'].reset_cooldown()

                vector.z += 35

                duration = variables['duration']

                for (wcstarget, vector2) in targets:
                    stuck = wcstarget.data.get('stuck', 0)

                    if not stuck:
                        if not wcstarget.data.get('noclip'):
                            wcstarget.player.move_type = MoveType.NONE

                    wcstarget.data['stuck'] = stuck + 1

                    delay = Delay(duration, _reset_root, (wcstarget, ))
                    delay.args += (delay, )
                    _delays[wcstarget].append(delay)

                    vector2.z += 10
                    entangling_roots_0_effect.create(center=vector2)

                    vector2.z += 15
                    entangling_roots_1_effect.create(center=vector2)

                    vector2.z += 10
                    entangling_roots_2_effect.create(start_point=vector,
                                                     end_point=vector2)
                    entangling_roots_3_effect.create(start_point=vector,
                                                     end_point=vector2)
                    entangling_roots_4_effect.create(start_point=vector,
                                                     end_point=vector2)

                entangling_roots_count_message.send(wcsplayer.index,
                                                    count=len(targets))
            else:
                entangling_roots_failed_message.send(wcsplayer.index)