<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alliedmods.net/index.php?action=history&amp;feed=atom&amp;title=Category_talk%3ASourceMod_Documentation</id>
	<title>Category talk:SourceMod Documentation - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alliedmods.net/index.php?action=history&amp;feed=atom&amp;title=Category_talk%3ASourceMod_Documentation"/>
	<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category_talk:SourceMod_Documentation&amp;action=history"/>
	<updated>2026-04-03T21:16:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category_talk:SourceMod_Documentation&amp;diff=6099&amp;oldid=prev</id>
		<title>Sdj0310: Removing all content from page</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category_talk:SourceMod_Documentation&amp;diff=6099&amp;oldid=prev"/>
		<updated>2008-08-09T07:20:38Z</updated>

		<summary type="html">&lt;p&gt;Removing all content from page&lt;/p&gt;
&lt;a href=&quot;https://wiki.alliedmods.net/index.php?title=Category_talk:SourceMod_Documentation&amp;amp;diff=6099&amp;amp;oldid=6098&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Sdj0310</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.alliedmods.net/index.php?title=Category_talk:SourceMod_Documentation&amp;diff=6098&amp;oldid=prev</id>
		<title>Sdj0310: New page: #pragma semicolon 1  #include &lt;sourcemod&gt; #include &lt;sdktools&gt;  #define PLUGIN_VERSION &quot;1.0.0.4&quot;  #define TRACE_START 24.0 #define TRACE_END 64.0  #define MDL_LASER &quot;sprites/laser.vmt&quot;  #de...</title>
		<link rel="alternate" type="text/html" href="https://wiki.alliedmods.net/index.php?title=Category_talk:SourceMod_Documentation&amp;diff=6098&amp;oldid=prev"/>
		<updated>2008-08-09T07:20:02Z</updated>

		<summary type="html">&lt;p&gt;New page: #pragma semicolon 1  #include &amp;lt;sourcemod&amp;gt; #include &amp;lt;sdktools&amp;gt;  #define PLUGIN_VERSION &amp;quot;1.0.0.4&amp;quot;  #define TRACE_START 24.0 #define TRACE_END 64.0  #define MDL_LASER &amp;quot;sprites/laser.vmt&amp;quot;  #de...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#pragma semicolon 1&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;sourcemod&amp;gt;&lt;br /&gt;
#include &amp;lt;sdktools&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define PLUGIN_VERSION &amp;quot;1.0.0.4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define TRACE_START 24.0&lt;br /&gt;
#define TRACE_END 64.0&lt;br /&gt;
&lt;br /&gt;
#define MDL_LASER &amp;quot;sprites/laser.vmt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define SND_MINEPUT &amp;quot;npc/roller/blade_cut.wav&amp;quot;&lt;br /&gt;
#define SND_MINEACT &amp;quot;npc/roller/mine/rmine_blades_in2.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define TEAM_T 2&lt;br /&gt;
#define TEAM_CT 3&lt;br /&gt;
&lt;br /&gt;
#define COLOR_T &amp;quot;255 0 0&amp;quot;&lt;br /&gt;
#define COLOR_CT &amp;quot;0 0 255&amp;quot;&lt;br /&gt;
#define COLOR_DEF &amp;quot;0 255 255&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#define MAX_LINE_LEN 256&lt;br /&gt;
&lt;br /&gt;
// globals&lt;br /&gt;
new gRemaining[MAXPLAYERS+1];    // how many tripmines player has this spawn&lt;br /&gt;
new gCount = 1;&lt;br /&gt;
new String:mdlMine[256];&lt;br /&gt;
&lt;br /&gt;
// convars&lt;br /&gt;
new Handle:cvNumMines = INVALID_HANDLE;&lt;br /&gt;
new Handle:cvActTime = INVALID_HANDLE;&lt;br /&gt;
new Handle:cvModel = INVALID_HANDLE;&lt;br /&gt;
new Handle:cvTeamRestricted = INVALID_HANDLE;&lt;br /&gt;
&lt;br /&gt;
public Plugin:myinfo = {&lt;br /&gt;
	name = &amp;quot;Tripmines&amp;quot;,&lt;br /&gt;
	author = &amp;quot;L. Duke (mod by user)&amp;quot;,&lt;br /&gt;
	description = &amp;quot;Plant a trip mine&amp;quot;,&lt;br /&gt;
	version = PLUGIN_VERSION,&lt;br /&gt;
	url = &amp;quot;http://www.lduke.com/&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public OnPluginStart() &lt;br /&gt;
{&lt;br /&gt;
  // events&lt;br /&gt;
  HookEvent(&amp;quot;player_death&amp;quot;, PlayerDeath);&lt;br /&gt;
  HookEvent(&amp;quot;player_spawn&amp;quot;,PlayerSpawn);&lt;br /&gt;
  &lt;br /&gt;
  // convars&lt;br /&gt;
  CreateConVar(&amp;quot;sm_tripmines_version&amp;quot;, PLUGIN_VERSION, &amp;quot;Tripmines&amp;quot;, FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY);&lt;br /&gt;
  cvNumMines = CreateConVar(&amp;quot;sm_tripmines_allowed&amp;quot;, &amp;quot;5&amp;quot;);&lt;br /&gt;
  cvActTime = CreateConVar(&amp;quot;sm_tripmines_activate_time&amp;quot;, &amp;quot;2.0&amp;quot;);&lt;br /&gt;
  cvModel = CreateConVar(&amp;quot;sm_tripmines_model&amp;quot;, &amp;quot;models/props_lab/tpplug.mdl&amp;quot;);&lt;br /&gt;
  cvTeamRestricted = CreateConVar(&amp;quot;sm_tripmines_restrictedteam&amp;quot;, &amp;quot;2&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // commands&lt;br /&gt;
  RegConsoleCmd(&amp;quot;sm_tripmine&amp;quot;, Command_TripMine);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public OnEventShutdown(){&lt;br /&gt;
	UnhookEvent(&amp;quot;player_death&amp;quot;, PlayerDeath);&lt;br /&gt;
	UnhookEvent(&amp;quot;player_spawn&amp;quot;,PlayerSpawn);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public OnMapStart()&lt;br /&gt;
{&lt;br /&gt;
  // set model based on cvar&lt;br /&gt;
  GetConVarString(cvModel, mdlMine, sizeof(mdlMine));&lt;br /&gt;
  &lt;br /&gt;
  // precache models&lt;br /&gt;
  PrecacheModel(mdlMine, true);&lt;br /&gt;
  PrecacheModel(MDL_LASER, true);&lt;br /&gt;
  &lt;br /&gt;
  // precache sounds&lt;br /&gt;
  PrecacheSound(SND_MINEPUT, true);&lt;br /&gt;
  PrecacheSound(SND_MINEACT, true);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// When a new client is put in the server we reset their mines count&lt;br /&gt;
public OnClientPutInServer(client){&lt;br /&gt;
  if(client &amp;amp;&amp;amp; !IsFakeClient(client)) gRemaining[client] = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)&lt;br /&gt;
{&lt;br /&gt;
	new client;&lt;br /&gt;
	client = GetClientOfUserId(GetEventInt(event, &amp;quot;userid&amp;quot;));&lt;br /&gt;
	gRemaining[client] = GetConVarInt(cvNumMines);&lt;br /&gt;
	return Plugin_Continue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast){&lt;br /&gt;
	new client;&lt;br /&gt;
	client = GetClientOfUserId(GetEventInt(event, &amp;quot;userid&amp;quot;));&lt;br /&gt;
	gRemaining[client] = 0;&lt;br /&gt;
	return Plugin_Continue;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action:Command_TripMine(client, args)&lt;br /&gt;
{  &lt;br /&gt;
  // make sure client is not spectating&lt;br /&gt;
  if (!IsPlayerAlive(client))&lt;br /&gt;
    return Plugin_Handled;&lt;br /&gt;
    &lt;br /&gt;
  // check restricted team &lt;br /&gt;
  new team = GetClientTeam(client);&lt;br /&gt;
  if(team == GetConVarInt(cvTeamRestricted))&lt;br /&gt;
  { &lt;br /&gt;
    PrintHintText(client, &amp;quot;Your team does not have access to this equipment.&amp;quot;);&lt;br /&gt;
    return Plugin_Handled;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // call SetMine if any remain in client's inventory&lt;br /&gt;
  if (gRemaining[client]&amp;gt;0) {&lt;br /&gt;
    SetMine(client);&lt;br /&gt;
  }&lt;br /&gt;
  else {&lt;br /&gt;
    PrintHintText(client, &amp;quot;You do not have any tripmines.&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  return Plugin_Handled;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SetMine(client)&lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
  // setup unique target names for entities to be created with&lt;br /&gt;
  new String:beam[64];&lt;br /&gt;
  new String:beammdl[64];&lt;br /&gt;
  new String:tmp[128];&lt;br /&gt;
  Format(beam, sizeof(beam), &amp;quot;tmbeam%d&amp;quot;, gCount);&lt;br /&gt;
  Format(beammdl, sizeof(beammdl), &amp;quot;tmbeammdl%d&amp;quot;, gCount);&lt;br /&gt;
  gCount++;&lt;br /&gt;
  if (gCount&amp;gt;10000)&lt;br /&gt;
  {&lt;br /&gt;
    gCount = 1;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // trace client view to get position and angles for tripmine&lt;br /&gt;
  &lt;br /&gt;
  decl Float:start[3], Float:angle[3], Float:end[3], Float:normal[3], Float:beamend[3];&lt;br /&gt;
  GetClientEyePosition( client, start );&lt;br /&gt;
  GetClientEyeAngles( client, angle );&lt;br /&gt;
  GetAngleVectors(angle, end, NULL_VECTOR, NULL_VECTOR);&lt;br /&gt;
  NormalizeVector(end, end);&lt;br /&gt;
&lt;br /&gt;
  start[0]=start[0]+end[0]*TRACE_START;&lt;br /&gt;
  start[1]=start[1]+end[1]*TRACE_START;&lt;br /&gt;
  start[2]=start[2]+end[2]*TRACE_START;&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  end[0]=start[0]+end[0]*TRACE_END;&lt;br /&gt;
  end[1]=start[1]+end[1]*TRACE_END;&lt;br /&gt;
  end[2]=start[2]+end[2]*TRACE_END;&lt;br /&gt;
&lt;br /&gt;
  TR_TraceRayFilter(start, end, CONTENTS_SOLID, RayType_EndPoint, FilterAll, 0);&lt;br /&gt;
  &lt;br /&gt;
  if (TR_DidHit(INVALID_HANDLE))&lt;br /&gt;
  {&lt;br /&gt;
    // update client's inventory&lt;br /&gt;
    gRemaining[client]-=1;&lt;br /&gt;
    &lt;br /&gt;
    // find angles for tripmine&lt;br /&gt;
    TR_GetEndPosition(end, INVALID_HANDLE);&lt;br /&gt;
    TR_GetPlaneNormal(INVALID_HANDLE, normal);&lt;br /&gt;
    GetVectorAngles(normal, normal);&lt;br /&gt;
    &lt;br /&gt;
    // trace laser beam&lt;br /&gt;
    TR_TraceRayFilter(end, normal, CONTENTS_SOLID, RayType_Infinite, FilterAll, 0);&lt;br /&gt;
    TR_GetEndPosition(beamend, INVALID_HANDLE);&lt;br /&gt;
    &lt;br /&gt;
    // create tripmine model&lt;br /&gt;
    new ent = CreateEntityByName(&amp;quot;prop_physics_override&amp;quot;);&lt;br /&gt;
    SetEntityModel(ent,mdlMine);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;StartDisabled&amp;quot;, &amp;quot;false&amp;quot;);&lt;br /&gt;
    DispatchSpawn(ent);&lt;br /&gt;
    TeleportEntity(ent, end, normal, NULL_VECTOR);&lt;br /&gt;
    SetEntProp(ent, Prop_Data, &amp;quot;m_usSolidFlags&amp;quot;, 152);&lt;br /&gt;
    SetEntProp(ent, Prop_Data, &amp;quot;m_CollisionGroup&amp;quot;, 1);&lt;br /&gt;
    SetEntityMoveType(ent, MOVETYPE_NONE);&lt;br /&gt;
    SetEntProp(ent, Prop_Data, &amp;quot;m_MoveCollide&amp;quot;, 0);&lt;br /&gt;
    SetEntProp(ent, Prop_Data, &amp;quot;m_nSolidType&amp;quot;, 6);&lt;br /&gt;
    SetEntPropEnt(ent, Prop_Data, &amp;quot;m_hLastAttacker&amp;quot;, client);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;targetname&amp;quot;, beammdl);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;ExplodeRadius&amp;quot;, &amp;quot;256&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;ExplodeDamage&amp;quot;, &amp;quot;400&amp;quot;);&lt;br /&gt;
    Format(tmp, sizeof(tmp), &amp;quot;%s,Break,,0,-1&amp;quot;, beammdl);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;OnHealthChanged&amp;quot;, tmp);&lt;br /&gt;
    Format(tmp, sizeof(tmp), &amp;quot;%s,Kill,,0,-1&amp;quot;, beam);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;OnBreak&amp;quot;, tmp);&lt;br /&gt;
    SetEntProp(ent, Prop_Data, &amp;quot;m_takedamage&amp;quot;, 2);&lt;br /&gt;
    AcceptEntityInput(ent, &amp;quot;Enable&amp;quot;);&lt;br /&gt;
    new team = GetClientTeam(client);&lt;br /&gt;
&lt;br /&gt;
    HookSingleEntityOutput(ent, &amp;quot;OnBreak&amp;quot;, mineBreak, true);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    // create laser beam&lt;br /&gt;
        if(team == TEAM_T)&lt;br /&gt;
    {&lt;br /&gt;
    ent = CreateEntityByName(&amp;quot;env_beam&amp;quot;);&lt;br /&gt;
    TeleportEntity(ent, beamend, NULL_VECTOR, NULL_VECTOR);&lt;br /&gt;
    SetEntityModel(ent, MDL_LASER);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;texture&amp;quot;, MDL_LASER);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;targetname&amp;quot;, beam);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;TouchType&amp;quot;, &amp;quot;4&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;LightningStart&amp;quot;, beam);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;BoltWidth&amp;quot;, &amp;quot;4.0&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;life&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;rendercolor&amp;quot;, &amp;quot;0 0 0&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;renderamt&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;HDRColorScale&amp;quot;, &amp;quot;1.0&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;decalname&amp;quot;, &amp;quot;Bigshot&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;StrikeTime&amp;quot;, &amp;quot;0&amp;quot;);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;TextureScroll&amp;quot;, &amp;quot;35&amp;quot;);&lt;br /&gt;
    Format(tmp, sizeof(tmp), &amp;quot;%s,Break,,0,-1&amp;quot;, beammdl);&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;OnTouchedByEntity&amp;quot;, tmp);   &lt;br /&gt;
    SetEntPropVector(ent, Prop_Data, &amp;quot;m_vecEndPos&amp;quot;, end);&lt;br /&gt;
    SetEntPropFloat(ent, Prop_Data, &amp;quot;m_fWidth&amp;quot;, 4.0);&lt;br /&gt;
    AcceptEntityInput(ent, &amp;quot;TurnOff&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    new Handle:data = CreateDataPack();&lt;br /&gt;
    CreateTimer(GetConVarFloat(cvActTime), TurnBeamOn, data);&lt;br /&gt;
    WritePackCell(data, client);&lt;br /&gt;
    WritePackCell(data, ent);&lt;br /&gt;
    WritePackFloat(data, end[0]);&lt;br /&gt;
    WritePackFloat(data, end[1]);&lt;br /&gt;
    WritePackFloat(data, end[2]);&lt;br /&gt;
    &lt;br /&gt;
    // play sound&lt;br /&gt;
    EmitSoundToAll(SND_MINEPUT, ent, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, SNDVOL_NORMAL, 100, ent, end, NULL_VECTOR, true, 0.0);&lt;br /&gt;
    &lt;br /&gt;
    // send message&lt;br /&gt;
    PrintHintText(client, &amp;quot;Tripmines remaining: %d&amp;quot;, gRemaining[client]);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    PrintHintText(client, &amp;quot;Invalid location for Tripmine&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public Action:TurnBeamOn(Handle:timer, Handle:data)&lt;br /&gt;
{&lt;br /&gt;
  decl String:color[26];&lt;br /&gt;
&lt;br /&gt;
  ResetPack(data);&lt;br /&gt;
  new client = ReadPackCell(data);&lt;br /&gt;
  new ent = ReadPackCell(data);&lt;br /&gt;
&lt;br /&gt;
  if (IsValidEntity(ent))&lt;br /&gt;
  {&lt;br /&gt;
    new team = GetClientTeam(client);&lt;br /&gt;
    if(team == TEAM_T) color = COLOR_T;&lt;br /&gt;
    else if(team == TEAM_CT) color = COLOR_CT;&lt;br /&gt;
    else color = COLOR_DEF;&lt;br /&gt;
&lt;br /&gt;
    DispatchKeyValue(ent, &amp;quot;rendercolor&amp;quot;, color);&lt;br /&gt;
    AcceptEntityInput(ent, &amp;quot;TurnOn&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    new Float:end[3];&lt;br /&gt;
    end[0] = ReadPackFloat(data);&lt;br /&gt;
    end[1] = ReadPackFloat(data);&lt;br /&gt;
    end[2] = ReadPackFloat(data);&lt;br /&gt;
&lt;br /&gt;
    EmitSoundToAll(SND_MINEACT, ent, SNDCHAN_AUTO, SNDLEVEL_NORMAL, SND_NOFLAGS, SNDVOL_NORMAL, 100, ent, end, NULL_VECTOR, true, 0.0);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  CloseHandle(data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public mineBreak (const String:output[], caller, activator, Float:delay)&lt;br /&gt;
{&lt;br /&gt;
	UnhookSingleEntityOutput(caller, &amp;quot;OnBreak&amp;quot;, mineBreak);&lt;br /&gt;
	AcceptEntityInput(caller,&amp;quot;kill&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public bool:FilterAll (entity, contentsMask)&lt;br /&gt;
{&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Sdj0310</name></author>
		
	</entry>
</feed>