This article's documentation is for anything that uses the Source engine. Click here for more information.

Spraycan: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
(vscript example)
Line 11: Line 11:
{{varcom|cl_playerspraydisable|0||Disable visibility of player sprays.}}
{{varcom|cl_playerspraydisable|0||Disable visibility of player sprays.}}
{{varcom|end}}
{{varcom|end}}
== Example vscript use ==
{{note|Tested in {{l4d2}}}}
Can be used to spray a spray of a chosen connected player. Following function takes player handle of a player from whose eye position and angles spraycan is created and userid of player whose spray we want to use.
<syntaxhighlight lang=js>
function Spray(sprayer, userid) {
    SpawnEntityFromTable("spraycan", {
    vscripts = "spraycan_setup",
        target = ""+userid, //passing userid via target keyvalue (of course can be achieved in other ways)
    origin = sprayer.EyePosition(),
    angles = sprayer.EyeAngles().ToKVString(),
        nextthink = 1, //won't work without this
    thinkfunction = "RocketRaccoonSupremacy" //existing thinkfunction needs to be specified for the entity to work
    });
}
</syntaxhighlight>
<code>spraycan_setup.nut</code> contains:
<syntaxhighlight lang=js>function RocketRaccoonSupremacy() {
    EntFire("!self", "Kill", "", 2); //entity killed after 2 seconds just in case something fails
    return 999;
}
local target = NetProps.GetPropString(self, "m_target");
local id = target.tointeger();
local player = GetPlayerFromUserID(id);
NetProps.SetPropEntity(self, "m_hOwnerEntity", player);
EmitSoundOn("SprayCan.Paint", self);
</syntaxhighlight>


== See also ==
== See also ==
* {{ent|info_projecteddecal}}
* {{ent|info_projecteddecal}}
* {{ent|infodecal}}
* {{ent|infodecal}}

Revision as of 12:56, 2 April 2025

edit
Icon-NotInFGD.png
This entity is not in the FGD by default.
It should not be put directly in a map because it can only be configured through code.
C++ Class hierarchy
CSprayCan
CPointEntity
CBaseEntity
C++ player.cpp

spraycan is an entity available in all Source Source games except Counter-Strike: Global Offensive Counter-Strike: Global Offensive. This is the entity that applies player-chosen spray on walls when they use their spray bind (impulse 201).

ConVars

Cvar/Command Parameters or default value Descriptor Effect
decalfrequency 10 seconds How much must a player wait in seconds before they are able to spray another time
r_spray_lifetime 10 Number of rounds player sprays are visible
Note.pngNote:In Left 4 Dead seriesLeft 4 Dead series sprays disappear after r_spray_lifetime / 2 rounds
cl_logofile Spraypoint logo decal.
cl_playerspraydisable 0 Disable visibility of player sprays.

Example vscript use

Note.pngNote:Tested in Left 4 Dead 2

Can be used to spray a spray of a chosen connected player. Following function takes player handle of a player from whose eye position and angles spraycan is created and userid of player whose spray we want to use.

function Spray(sprayer, userid) {
    SpawnEntityFromTable("spraycan", {
    	vscripts = "spraycan_setup",
        target = ""+userid, //passing userid via target keyvalue (of course can be achieved in other ways)
    	origin = sprayer.EyePosition(),
    	angles = sprayer.EyeAngles().ToKVString(),
        nextthink = 1, //won't work without this
    	thinkfunction = "RocketRaccoonSupremacy" //existing thinkfunction needs to be specified for the entity to work
    });
}

spraycan_setup.nut contains:

function RocketRaccoonSupremacy() {
    EntFire("!self", "Kill", "", 2); //entity killed after 2 seconds just in case something fails
    return 999;
}

local target = NetProps.GetPropString(self, "m_target");
local id = target.tointeger();
local player = GetPlayerFromUserID(id);

NetProps.SetPropEntity(self, "m_hOwnerEntity", player);
EmitSoundOn("SprayCan.Paint", self);

See also