Excuse the messy code, it's just for testing atm.
Full script:
Syntax: Select all
from memory import get_object_pointer
from memory import make_object
from memory import Convention, Argument, Return
from events import GameEvent
from memory.hooks import PreHook, PostHook
from core import PLATFORM
from effects import temp_entities, effects
from memory import StackData, Pointer, make_object
import memory
from memory.manager import manager
from memory.manager import CustomType
from memory.manager import Argument
#POINTER BOOL FLOAT ULONG CHAR USHORT DOUBLE SHORT LONGLONG STRING INT UINT UCHAR LONG
from memory.manager import Return
from memory import get_size
from filters.players import PlayerIter
from players.helpers import *
from players.entity import PlayerEntity
from entities.entity import BaseEntity
from _mathlib import Vector, RadianEuler, QAngle
from memory.manager import manager
from memory.helpers import Array
from filters.recipients import RecipientFilter
from messages import SayText2
from events import Event
from commands.client import ClientCommand
from commands.say import SayCommand
from players import PlayerGenerator
from engines.server import engine_server
from listeners.tick.delays import tick_delays
spray_locations = {}
#CSS
#offsets https://github.com/Source-Python-Dev-Team/Source.Python/blob/master/addons/source-python/data/source-python/virtuals/cstrike/CTempEntsSystem.ini
SPRAY_DECAL_FUNC = get_object_pointer(
temp_entities).make_virtual_function(
28 if PLATFORM == 'windows' else 29,
Convention.THISCALL,
(Argument.POINTER, Argument.POINTER, Argument.FLOAT, Argument.POINTER, Argument.INT, Argument.INT),
Return.VOID
)
#Try prehooking the func from lib too!!!
@PreHook(SPRAY_DECAL_FUNC)
#POINTER + IRecipientFilter& filer, float delay, const Vector* pos, int player, int entity
def pre_spray_decal(arguments):
vector = make_object(Vector, arguments[3])
player = PlayerEntity(arguments[4])
spray_locations[player.index] = vector
print(vector)
SayText2(message="\x04{0} \x01sprayed their spray @ \x05{1} {2} {3}\x01!".format(player.name, vector.x, vector.y, vector.z)).send()
def index_from_partial_name(name):
for playerinfo in PlayerGenerator():
if name in playerinfo.get_name():
return index_from_playerinfo(playerinfo)
def do_trace(playerinfo, command):
command = " ".join(list(command)[2:])
i_player = index_from_playerinfo(playerinfo)
a = index_from_partial_name(command)
if not a:
SayText2(message="Could not trace spray from \x04{0}\x01!".format(command)).send(RecipientFilter(i_player))
target = PlayerEntity(a)
try:
vector = spray_locations[target.index]
except KeyError:
SayText2(message="Could not trace spray from \x04{0}\x01!".format(target.name)).send(RecipientFilter(i_player))
else:
i_model = engine_server.precache_model('sprites/laserbeam.vmt')
#ngineServer.precache_decal("sprites/laser.vmt")
SayText2(message="Traced spray from \x04{0}\x01 to \x05{1} {2} {3}\x01!".format(target.name, vector.x, vector.y, vector.z)).send(RecipientFilter(i_player))
tick_delays.delay(0, effects.beam, vector, PlayerEntity(i_player).get_abs_origin(), i_model, i_model, 0, 0, 20.0, 1, 1, 0, 0, 255, 0, 255, 255, 0)
""" tick_delays.delay(0, temp_entities.beam_ent_point, RecipientFilter(i_player), # users
0.0, # fDelay
i_player, # iStartEntityIndex
PlayerEntity(i_player).get_abs_origin(), # vStartOrigin
0, # iEndEntityIndex
vector, # vEndOrigin
i_model, # szModelPath
1, # iHaloIndex
1, # iStartFrame
255, # iFrameRate
5.0, # fLife
3.0, # fWidth
3.0, # fEndWidth
10, # fFadeLength
5.0, # fAmplitude
255, # iRed
255, # iGreen
255, # iBlue
255, # iAlpha
1, # iSpeed)
)"""
@Event
def player_disconnect(event):
p_index = index_from_userid(event.get_int('userid'))
try:
del spray_locations[p_index]
except KeyError:
pass
@SayCommand('!tracespray')
def test_entry(playerinfo, teamonly, command):
do_trace(playerinfo, command)
@ClientCommand('egn_tracespray')
def entry_client(playerinfo, command):
do_trace(playerinfo, command)
"""
Gives:
EgN-L| Doldol | DSU sprayed their spray @ -1433.946044921875 528.03125 126.11534881591797!
EgN-L| Doldol | DSU : !tracespray
Traced spray from EgN-L| Doldol | DSU to 437893726208000.0 6.305843089461677e-44 437893122228224.0!
"""