<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wolfwiki.anime.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hadr0</id>
	<title>WolfWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wolfwiki.anime.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Hadr0"/>
	<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php/Special:Contributions/Hadr0"/>
	<updated>2026-11-08T12:47:49Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2862</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2862"/>
		<updated>2007-12-23T22:53:16Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
http://static.shiven.net/hadro/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=83% align=left valign=center&amp;gt;&lt;br /&gt;
== Lua Scripts ==&lt;br /&gt;
=== [http://static.shiven.net/hadro/old-skbot.lua anti spawnkill bot] ===&lt;br /&gt;
An old script which was once used to enforce [http://shiven.net shiven.net] spawnkilling rules. Its an example of how gameplay can be changed enormously with Lua. It is however trailored to the Fueldump map. Player positions are constantly checked against conditions. Coordinates for the no-spawnkilling boxes can be read in-game with \viewpos. But more complex 3D shapes may require decompiling the map&#039;s .bsp file (with [http://en.wikibooks.org/wiki/Q3Map2 Q3Map2]) and the [http://www.qeradiant.com/cgi-bin/trac.cgi GtkRadiant] map editor.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/inacmod.lua player inactivity modification] ===&lt;br /&gt;
In addition to g_inactivity and g_spectatorinactivity, this mod offers the ability to put a player to spectator after being AFK a certain time. It can be configured to only drop spectators when the server has reached a certain population limit. Players on private slots can be protected against the drop.&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/minipb.lua minipb extension] ===&lt;br /&gt;
This offers server side protections like spam protection of other Lua mod&#039;s et_ClientCommand() function. Optionally block client commands \readyteam and the broken \guids. It can put a forced delay between vote-casts per player. Muted player are blocked from private messages and votes. Duplicate name checking and some other useful [http://www.evenbalance.com/publications/et-ad/index.htm Punkbuster] functions are present.&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/spammod.lua spam modification] ===&lt;br /&gt;
Inspired by the oh so addictive ETAdmin_mod !spam, this mod will read a simple file like [http://static.shiven.net/hadro/spam.luadat spam.luadat] and allow everyone to spam. It is recommended to load this mod after the minipb extension. But don&#039;t take my word for it ;)&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/ifskrest.lua infight selfkill restrictor] ===&lt;br /&gt;
Inspired by McSteve&#039;s infight selfkill announcer, this one simply disables \kill for a period of time after taking damage. By default it will block for two seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2820</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2820"/>
		<updated>2007-11-09T21:34:45Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
:::Sorry. I wrote my own function but it isn&#039;t really the same. I need an copy of the original code segment or the &#039;&#039;&#039;isspam&#039;&#039;&#039; flag! --[[User:Pdi|pdi]] 03:43, 10 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
:hmm been thinking about the hostname from the socket request.. this may not a practical as a hostname lookup can take several tenth of a second.. so there may be too much lag when a player connects.. since et is single-threaded and has to wait for the call to complete (?) Still, bit-support would come in handy for a variety of purposes. [[User:Hadr0|Hadr0]] 13:34, 9 November 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn + intermission ==&lt;br /&gt;
&amp;lt;p&amp;gt;Instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned)&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Hell why not add a trigger-intermission event? its so messy to monitor the gamestate-cvar within the runframe-event. and i just don&#039;t trust et_print().. players can change their name/inject BS into that function at will. Thank you!!&amp;lt;/p&amp;gt;&lt;br /&gt;
-[[User:Hadr0|Hadr0]] 06:46, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== b_anticheat ==&lt;br /&gt;
maybe a wild idea but hows about a callback function if a cheater is spotted via the etpro anticheat system? cos i dont want to kick &#039;em for 99999 seconds (on average our server is rebooted once per week) so i&#039;d like to intercept the call with lua and do a proper ban. (+perhaps axx to the arrays where kicks are held, or is that engine stuff?) -[[User:Hadr0|Hadr0]] 05:56, 9 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== bug? ==&lt;br /&gt;
et.trap_DropClient doesn&#039;t trigger the lua&#039;s own et_ClientDisconnect(). its not a big deal as its possible to call that function explicitly before dropping, and it does trigger other lua&#039;s disconnect-event. PB-drops for example DO trigger the disconnect event. So i was wondering if this was intentional? (i dont think earlier versions had it) -[[User:Hadr0|Hadr0]] 03:50, 10 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2818</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2818"/>
		<updated>2007-10-10T10:50:56Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
:::Sorry. I wrote my own function but it isn&#039;t really the same. I need an copy of the original code segment or the &#039;&#039;&#039;isspam&#039;&#039;&#039; flag! --[[User:Pdi|pdi]] 03:43, 10 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn + intermission ==&lt;br /&gt;
&amp;lt;p&amp;gt;Instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned)&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Hell why not add a trigger-intermission event? its so messy to monitor the gamestate-cvar within the runframe-event. and i just don&#039;t trust et_print().. players can change their name/inject BS into that function at will. Thank you!!&amp;lt;/p&amp;gt;&lt;br /&gt;
-[[User:Hadr0|Hadr0]] 06:46, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== b_anticheat ==&lt;br /&gt;
maybe a wild idea but hows about a callback function if a cheater is spotted via the etpro anticheat system? cos i dont want to kick &#039;em for 99999 seconds (on average our server is rebooted once per week) so i&#039;d like to intercept the call with lua and do a proper ban. (+perhaps axx to the arrays where kicks are held, or is that engine stuff?) -[[User:Hadr0|Hadr0]] 05:56, 9 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== bug? ==&lt;br /&gt;
et.trap_DropClient doesn&#039;t trigger the lua&#039;s own et_ClientDisconnect(). its not a big deal as its possible to call that function explicitly before dropping, and it does trigger other lua&#039;s disconnect-event. PB-drops for example DO trigger the disconnect event. So i was wondering if this was intentional? (i dont think earlier versions had it) -[[User:Hadr0|Hadr0]] 03:50, 10 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2816</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2816"/>
		<updated>2007-10-09T12:56:58Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn + intermission ==&lt;br /&gt;
&amp;lt;p&amp;gt;Instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned)&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Hell why not add a trigger-intermission event? its so messy to monitor the gamestate-cvar within the runframe-event. and i just don&#039;t trust et_print().. players can change their name/inject BS into that function at will. Thank you!!&amp;lt;/p&amp;gt;&lt;br /&gt;
-[[User:Hadr0|Hadr0]] 06:46, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== b_anticheat ==&lt;br /&gt;
maybe a wild idea but hows about a callback function if a cheater is spotted via the etpro anticheat system? cos i dont want to kick &#039;em for 99999 seconds (on average our server is rebooted once per week) so i&#039;d like to intercept the call with lua and do a proper ban. (+perhaps axx to the arrays where kicks are held, or is that engine stuff?) -[[User:Hadr0|Hadr0]] 05:56, 9 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2815</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2815"/>
		<updated>2007-10-09T11:25:11Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn + intermission ==&lt;br /&gt;
&amp;lt;p&amp;gt;Instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned)&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Hell why not add a trigger-intermission event? its so messy to monitor the gamestate-cvar within the runframe-event. and i just don&#039;t trust et_print().. players can change their name/inject BS into that function at will. Thank you!!&amp;lt;/p&amp;gt;&lt;br /&gt;
-[[User:Hadr0|Hadr0]] 06:46, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== b_anticheat ==&lt;br /&gt;
maybe a wild idea but hows about a callback function if a cheater is spotted via the etpro anticheat system? cos i dont want to kick &#039;em for 99999 seconds (on average our server is rebooted once per week) so i&#039;d like to intercept the call with lua and do a proper ban. -[[User:Hadr0|Hadr0]] 04:25, 9 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2814</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2814"/>
		<updated>2007-10-08T13:46:06Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn + intermission ==&lt;br /&gt;
&amp;lt;p&amp;gt;Instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned)&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Hell why not add a trigger-intermission event? its so messy to monitor the gamestate-cvar within the runframe-event. and i just don&#039;t trust et_print().. players can change their name/inject BS into that function at will. Thank you!!&amp;lt;/p&amp;gt;&lt;br /&gt;
-[[User:Hadr0|Hadr0]] 06:46, 8 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2813</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2813"/>
		<updated>2007-10-08T13:42:36Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn + intermission ==&lt;br /&gt;
Instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
Hell why not add a trigger-intermission event? its so messy to monitor the gamestate-cvar within the runframe-event. and i just don&#039;t trust et_print().. players can change their name/inject BS into that function at will. Thank you!!&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2812</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2812"/>
		<updated>2007-10-08T12:16:51Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
(static compile if loadlib isnt gonna happen plx) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn ==&lt;br /&gt;
instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned) -[[User:Hadr0|Hadr0]] 05:16, 8 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2811</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2811"/>
		<updated>2007-10-08T12:04:14Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;please call &amp;lt;b&amp;gt;et_Obituary()&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;et_Print()&amp;lt;/b&amp;gt; at the end of the engine function because we can do better output then. example: the engine output (ETPlayer killed himself.) is after the lua output (Hahaha! ETPlayer seems to be a selfkill noob!). thx!! --[[User:Pdi|pdi]] 09:13, 26 December 2006 (PST)&lt;br /&gt;
:It is called at the beginning of the function so lua mods can override obituary and print entirely if they want. I can make a separate lua hook which is called at the end of the function, eg et_ObituaryPost and et_PrintPost. [[User:Bani|Bani]] 11:52, 3 January 2007 (PST)&lt;br /&gt;
::Ok, this sounds good to me! Big THX!! :) Please have also a look at field section of this page! ;) --[[User:Pdi|pdi]] 05:41, 4 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Can we have a intercepted version of &#039;&#039;&#039;et_Obituary()&#039;&#039;&#039; to return &#039;&#039;&#039;1&#039;&#039;&#039; to intercept it with a mod and return &#039;&#039;&#039;0&#039;&#039;&#039; to pass it through to the server? --[[User:Pdi|pdi]] 15:16, 8 March 2007 (PST)&lt;br /&gt;
:Or a simple &#039;&#039;&#039;return STRING&#039;&#039;&#039; would be cool. So we can override the normal server output with other texts like &amp;quot;PlayerA does something with PlayerB.&amp;quot;. Atm no returncode can replace et_Obituary&#039;s output!? Thx! --[[User:Pdi|pdi]] 03:44, 9 March 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
Please add a third var to et_ClientCommand() function: et_ClientCommand(clientnum, command, &#039;&#039;&#039;isspam&#039;&#039;&#039;) - &#039;&#039;&#039;isspam&#039;&#039;&#039; indicates if the client command is ignored by spam filter limit (1) or not (0). Thx!! --[[User:Pdi|pdi]] 05:01, 13 May 2007 (PDT)&lt;br /&gt;
:Or can someone explain how spam protection is calculated by etpro mod? Any source code example please!? So I can reproduce it in LUA! THX! --[[User:Pdi|pdi]] 05:34, 17 May 2007 (PDT)&lt;br /&gt;
::Try loading my &#039;client command filter&#039; before your mod -[[User:Hadr0|Hadr0]] 05:04, 8 October 2007 (PDT)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Fields for the next release ==&lt;br /&gt;
I think Kotoko wants the &#039;&#039;&#039;ps.velocity&#039;&#039;&#039; field here. It would be a good idea, I think. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 20:23, 5 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
bani: RW access to all &amp;quot;sess.*&amp;quot; fields (sess.skillpoints, sess.startskillpoints, sess.startxptotal, ...) would be great. thanx! --[[User:Pdi|pdi]] 05:55, 2 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: please make all &amp;quot;pers.*&amp;quot; fields (pers.clientTimeNudge, pers.clientMaxPackets, ...) available. thanx! --[[User:Pdi|pdi]] 01:04, 17 August 2006 (PDT)&lt;br /&gt;
:you can get timenudge and maxpackets from the userinfo --[[User:ReyalP|ReyalP]] 20:19, 18 August 2006 (PDT)&lt;br /&gt;
::i know, but i ask for all pers.* fields. pers.clientTimeNudge and pers.clientMaxPackets are only examples. :) --[[User:Pdi|pdi]] 01:56, 21 August 2006 (PDT)&lt;br /&gt;
&lt;br /&gt;
bani: will we have rw access to those fields (all sess.* and all pers.*) with next update? please!! --[[User:Pdi|pdi]] 07:02, 19 October 2006 (PDT)&lt;br /&gt;
: we are not going to add all the fields. A lot of them don&#039;t make sense for lua mods. Explain which ones you need --[[User:ReyalP|ReyalP]] 20:57, 5 February 2007 (PST)&lt;br /&gt;
::Ok, didn&#039;t know why i&#039;m asking for (long time ago) but fields for xp/skill (sess.skillpoints array - if i remember) control would be great. THX!! --[[User:Pdi|pdi]] 00:54, 7 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ps.weapon&#039;&#039;&#039;, so arbitrary weapons can be added to or removed from arbitrary classes. For example, trickjump servers don&#039;t like Field Ops spamming airstrikes or artillery, but they do appreciate the ammo they give out. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 21:09, 5 December 2006 (PST)&lt;br /&gt;
: ps.weapon won&#039;t do that for you. ps.weapon&#039;&#039;&#039;s&#039;&#039;&#039; might :) --[[User:ReyalP|ReyalP]] 17:14, 6 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Okay then, &#039;&#039;&#039;ps.weapon&#039;&#039;&#039; so that medics can be set to spawn with the adrenaline needle out instead of the smg. --[[User:FARMICEUDICAL|FARMICEUDICAL]] 03:23, 11 December 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
Please give read access to &#039;&#039;&#039;g_campaignInfo_t&#039;&#039;&#039; in a field like &#039;&#039;&#039;campaignInfo&#039;&#039;&#039;. Thx!! --[[User:Pdi|pdi]] 08:57, 7 January 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
access to lasthurt_client and lasthurt_mod would be really nice. --[[User:Syd|Syd]] 02:30, 25 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== LoadLib ==&lt;br /&gt;
&lt;br /&gt;
Add loadlib ppl it says u have lua basic included but not loadlib !!&lt;br /&gt;
&lt;br /&gt;
(on windows it gives an error attept to call global load lin a nil valua)[[User:=FF=im2good4u|=FF=Im2good4u]] 05:16, 15 February 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== XP control not just skill ==&lt;br /&gt;
&lt;br /&gt;
I would like to request RW access to the &amp;quot;sess.skillpoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
At least a callback on et.G_AddSkillPoints ( &#039;&#039;&#039;cno&#039;&#039;&#039;, &#039;&#039;&#039;skill&#039;&#039;&#039;, &#039;&#039;&#039;points&#039;&#039;&#039; ) [[User:=FF=im2good4u|=FF=Im2good4u]] 07:45, 8 March 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== Locations == &lt;br /&gt;
 [22:08:57] &amp;lt;Vetinari&amp;gt; [NW]reyalP: if you&#039;re exposing map coords, it would &lt;br /&gt;
   be nice to have something like et.PostitionName( et.gentity_get(id, &amp;quot;r.currentOrigin&amp;quot;)) &lt;br /&gt;
   &amp;lt;-- location name or map coords &amp;quot;(B, 3)&amp;quot;, so I don&#039;t have to parse the _loc.dat ;-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== et_ClientSay ? ==&lt;br /&gt;
err.. what&#039;s this:&lt;br /&gt;
 -- et_ClientSay had to be removed in order to intercept all commands &lt;br /&gt;
 -- so here&#039;s a wrapper for that&lt;br /&gt;
    arg0 = et.trap_Argv(0) -- get the main command&lt;br /&gt;
    if arg0 == &amp;quot;say&amp;quot; then&lt;br /&gt;
        return et_ClientSay( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
&lt;br /&gt;
This should be &lt;br /&gt;
        return et.G_Say( clientNum, et.SAY_ALL, et.ConcatArgs(1))&lt;br /&gt;
?&lt;br /&gt;
&lt;br /&gt;
:No, et_ClientSay is a function you would define yourself to filter or do something with chats. It was it&#039;s own callback in earlier version of the API. -[[User:ReyalP|ReyalP]] 17:19, 24 February 2007 (PST)&lt;br /&gt;
&lt;br /&gt;
== additional libs ==&lt;br /&gt;
&lt;br /&gt;
HI i&#039;d like LuaBit and LuaSocket support so we can enhance ET banishments: http://lua-users.org/wiki/BitwiseOperators&lt;br /&gt;
http://www.tecgraf.puc-rio.br/~diego/professional/luasocket/old/luasocket-2.0-alpha/dns.html&lt;br /&gt;
&lt;br /&gt;
== et_ClientSpawn ==&lt;br /&gt;
instead of using the vulnerable et_Print(text) to find the medic, i&#039;d like et_ClientSpawn(clientNum,the_guy_who_gave_the_vive_or_-1_if_spawned)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2804</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2804"/>
		<updated>2007-08-20T00:55:49Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
http://static.shiven.net/hadro/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=83% align=left valign=center&amp;gt;&lt;br /&gt;
== Lua Scripts ==&lt;br /&gt;
=== [http://static.shiven.net/hadro/old-skbot.lua anti spawnkill bot] ===&lt;br /&gt;
An old script which was once used to enforce [http://shiven.net shiven.net] spawnkilling rules. Its an example of how gameplay can be changed enormously with Lua. It is however trailored to the Fueldump map. Player positions are constantly checked against conditions. Coordinates for the no-spawnkilling boxes can be read in-game with \viewpos. But more complex 3D shapes may require decompiling the map&#039;s .bsp file (with [http://en.wikibooks.org/wiki/Q3Map2 Q3Map2]) and the [http://www.qeradiant.com/cgi-bin/trac.cgi GtkRadiant] map editor.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/inacmod.lua player inactivity modification] ===&lt;br /&gt;
In addition to g_inactivity and g_spectatorinactivity, this mod offers the ability to put a player to spectator after being AFK a certain time. It can be configured to only drop spectators when the server has reached a certain population limit. Players on private slots can be protected against the drop.&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/clcomf.lua client command filter] ===&lt;br /&gt;
Primarily used to spam-protect and mute-enforce other Lua mod&#039;s et_ClientCommand() function. Optionally block some client commands like \readyteam and the broken \guids. It can put a forced delay between vote-casts per player. Match_mutespecs is made more clear and a muted player can be blocked from PMs and votes.&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/spammod.lua spam modification] ===&lt;br /&gt;
Inspired by the oh so addictive ETAdmin_mod !spam, this mod will read a simple file like [http://static.shiven.net/hadro/spam.luadat spam.luadat] and allow everyone to spam. It is recommended to load this mod after the client command filter. But don&#039;t take my word for it ;)&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/ifskrest.lua infight selfkill restrictor] ===&lt;br /&gt;
Inspired by McSteve&#039;s infight selfkill announcer, this one simply disables \kill for a period of time after taking damage. By default it will block for two seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2803</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2803"/>
		<updated>2007-08-20T00:46:11Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&lt;br /&gt;
http://static.shiven.net/hadro/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=83% align=left valign=center&amp;gt;&lt;br /&gt;
== Lua Scripts ==&lt;br /&gt;
=== [http://static.shiven.net/hadro/old-skbot.lua anti spawnkill bot] ===&lt;br /&gt;
An old script which was once used to enforce [http://shiven.net shiven.net] spawnkilling rules. Its an example of how gameplay can be changed enormously with Lua. It is however trailored to the Fueldump map. Player positions are constantly checked against conditions. Coordinates for the no-spawnkilling boxes can be read in-game with \viewpos. But more complex 3D shapes may require decompiling the map&#039;s .bsp file (with [http://en.wikibooks.org/wiki/Q3Map2 Q3Map2]) and the [http://www.qeradiant.com/cgi-bin/trac.cgi GtkRadiant] map editor.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/inacmod.lua player inactivity modification] ===&lt;br /&gt;
In addition to g_inactivity and g_spectatorinactivity, this mod offers the ability to put a player to spectator after being AFK a certain time. It can be configured to only drop spectators when the server has reached a certain population limit. Players on private slots can be protected against the drop.&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/clcomf.lua client command filter] ===&lt;br /&gt;
Primarily used to spam-protect and mute-enforce other Lua mod&#039;s et_ClientCommand() function. Optionally block some client commands like \readyteam and the broken \guids. It can put a forced delay between vote-casts per player. Match_mutespecs is made more clear and a muted player can be blocked from PMs and votes.&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/spammod.lua spam modification] ===&lt;br /&gt;
Inspired by the oh so addictive ETAdmin_mod !spam, this mod will read a simple file like [http://static.shiven.net/hadro/spammod.luadat spammod.luadat] and allow everyone to spam. It is recommended to load this mod after the client command filter. But don&#039;t take my word for it ;)&lt;br /&gt;
&lt;br /&gt;
=== [http://static.shiven.net/hadro/ifskrest.lua infight selfkill restrictor] ===&lt;br /&gt;
Inspired by McSteve&#039;s infight selfkill announcer, this one simply disables \kill for a period of time after taking damage. By default it will block for two seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2065</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2065"/>
		<updated>2006-01-25T09:35:59Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
:You can use et.G_Damage() in the new test version to do that.--[[User:Bani|Bani]] 01:38, 23 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice... --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Still would like access to the ping, or a dummy variable if they are 999, but also the ammount of time they are inactive.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Gotenks|Gotenks]] (Sorry for double post) 1:53, 31 December 2005 (CST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani i need a console print function on the client that does sepport ascii plz [[User:=FF=im2good4u|=FF=Im2good4u]] 12:49, 12 January 2006 (PST)&lt;br /&gt;
:et.trap_SendServerCommand( clientnum, &amp;quot;print \&amp;quot;hello ascii console on the client\n\&amp;quot; ) ) --[[User:Bani|Bani]] 22:33, 15 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani: how about a et_sound(id, sound) event? [[User:gotenks|gotenks]] 20:45, 17 January 2006 (CST)&lt;br /&gt;
:[http://wolfwiki.anime.net/index.php/ETPro:Lua_Mod_API#sound et.G_Sound( entnum, soundindex )] --[[User:Bani|Bani]] 22:07, 18 January 2006 (PST)&lt;br /&gt;
:bani, i was referring to an on event call, so when a sound is played et_sound(id,sound) would be called.[[User:gotenks|gotenks]] 21:45, 20 January 2006 (CST)&lt;br /&gt;
::most sounds are clientside... this would not be of much use. --[[User:Bani|Bani]] 04:42, 22 January 2006 (PST)&lt;br /&gt;
:::except for checking when something like a killing spree sound is activated--[[User:gotenks|gotenks]] 07:54, 23 January 2006 (CST)&lt;br /&gt;
:::::There would be no way for you to know what sound was activated. You can&#039;t get a filename from the soundindex.--[[User:Bani|Bani]] 10:19, 24 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Is it possible to get a player&#039;s live angles? Fieldname &amp;quot;s.angles&amp;quot; only gives the spawn angles. Tried &amp;quot;rotate&amp;quot;, &amp;quot;s.angles2&amp;quot;, &amp;quot;TargetAngles&amp;quot;, &amp;quot;r.currentAngles&amp;quot; as well but they just give 0.000000 for each element. thanks for any help --[[User:Hadr0|Hadr0]] 01:35, 25 January 2006 (PST)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2049</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2049"/>
		<updated>2006-01-15T23:50:04Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
:You can use et.G_Damage() in the new test version to do that.--[[User:Bani|Bani]] 01:38, 23 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice... --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Still would like access to the ping, or a dummy variable if they are 999, but also the ammount of time they are inactive.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Gotenks|Gotenks]] (Sorry for double post) 1:53, 31 December 2005 (CST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani i need a console print function on the client that does sepport ascii plz [[User:=FF=im2good4u|=FF=Im2good4u]] 12:49, 12 January 2006 (PST)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2047</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=2047"/>
		<updated>2006-01-14T16:48:42Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- getUserEguid(cno) - get a client&#039;s etpro guid?&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
:You can use et.G_Damage() in the new test version to do that.--[[User:Bani|Bani]] 01:38, 23 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice... --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Still would like access to the ping, or a dummy variable if they are 999, but also the ammount of time they are inactive.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Gotenks|Gotenks]] (Sorry for double post) 1:53, 31 December 2005 (CST)&lt;br /&gt;
----&lt;br /&gt;
Inside function et_ClientCommand(cno, cmd), is there a way of knowing if the client&#039;s spam-protection-limit is reached? Could some fieldname or function parameter be added?&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 08:48, 14 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
== IPC stuff ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
i would like a et_IPCReceive whit an return value so u can send info back on a request&lt;br /&gt;
&lt;br /&gt;
i would like a et_IPCSend that can send to all lua mods then them mods can decide if the wana use that message or not&lt;br /&gt;
[[User:=FF=im2good4u|=FF=Im2good4u]] 12:35, 8 January 2006 (PST)&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
  et_IPCReceive wouldn&#039;t send it to the other mod... afaik... so just use another send&lt;br /&gt;
  just et_IPCSend to all modules (afaik, you can even send to ones not there), simple loop function&lt;br /&gt;
[[User:gotenks|gotenks]] 20:04, 8 January 2006 (CST)&lt;br /&gt;
&lt;br /&gt;
yeh probely but its not verry handy its better to get the good vmnumber or to e able to send on mod filenames&lt;br /&gt;
&lt;br /&gt;
apart from that returning a value will be more handy since tnhe u cna contine in 1 funtion else u got to reacise it in the recieve funtion [[User:=FF=im2good4u|=FF=Im2good4u]] 10:45, 9 January 2006 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
bani i need a console print function on the client that does sepport ascii plz [[User:=FF=im2good4u|=FF=Im2good4u]] 12:49, 12 January 2006 (PST)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2046</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=2046"/>
		<updated>2006-01-14T12:39:02Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=400 align=center valign=center&amp;gt;&lt;br /&gt;
http://www.dinotopia.com/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=100% align=left valign=center&amp;gt;&lt;br /&gt;
== Profile ==&lt;br /&gt;
* &#039;&#039;&#039;ET Server&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;[http://www.shiven.net www.shiven.net]&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;E-mail&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;adr7777@hotmail.com&#039;&#039;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anti Spawn Kill Bot==&lt;br /&gt;
&lt;br /&gt;
This bot enforces Shiven spawnkilling rules. It can detect a spawn switch and gives the withdrawing&lt;br /&gt;
team time to clear the area. It is meant as an illustration of Lua&#039;s power.&lt;br /&gt;
&lt;br /&gt;
Players are punished by removing health. Allies can go through axis spawn in the first map part.. but only while holding a knife. Lua&#039;s function et_ClientCommand(cno, cmd) can not be triggered by &amp;quot;+attack&amp;quot; command. So making a no-fire zone was done this way.&lt;br /&gt;
&lt;br /&gt;
It currently only supports the Fuel Dump map. But adding more maps should not be hard.&lt;br /&gt;
A useful tool for determining box/sphere coordinates is the Radiant map editor.&lt;br /&gt;
Decompile the maps .bsp first using q3map2.&lt;br /&gt;
&lt;br /&gt;
skbot.lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Lua Guardian&lt;br /&gt;
-- Anti Spawn Kill Bot&lt;br /&gt;
-- created by Hadro&lt;br /&gt;
-- contact adr7777@hotmail.com&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- many thanks to the regulars from &#039;shiven.net ** 24/7 action&#039;&lt;br /&gt;
-- for putting up with my genocidal beta tests =)&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3]&lt;br /&gt;
-- checks if a player is in a box with lowest coordinates origin[1,2,3] and highest coordinates endpt[1,2,3]&lt;br /&gt;
--&lt;br /&gt;
-- (ppos[1] - origin[1])^2 + (ppos[2] - origin[2])^2 + (ppos[3] - origin[3])^2 &amp;lt; radius^2&lt;br /&gt;
-- checks if a player is in a sphere with center origin[1,2,3] and radius&lt;br /&gt;
-- spheres are not used for the fueldump map&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
version    = &amp;quot;1.0&amp;quot;&lt;br /&gt;
samplerate = 500 -- bot will check player positions every x milliseconds&lt;br /&gt;
&lt;br /&gt;
function et_RunFrame(levelTime)&lt;br /&gt;
  if math.mod(levelTime, samplerate) ~= 0 then return end&lt;br /&gt;
  if mapname ~= &amp;quot;fueldump&amp;quot; then return end&lt;br /&gt;
&lt;br /&gt;
  for cno=0, num_cl-1, 1 do&lt;br /&gt;
    phealth = et.gentity_get(cno, &amp;quot;health&amp;quot;)&lt;br /&gt;
    if phealth &amp;gt; 0 then&lt;br /&gt;
      msg = nil&lt;br /&gt;
      ppos = et.gentity_get(cno,&amp;quot;r.currentOrigin&amp;quot;)&lt;br /&gt;
      teamnum = et.gentity_get(cno, &amp;quot;sess.sessionTeam&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 1 then -- if you are Axis:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- allied spawn hut&lt;br /&gt;
          origin = { -2864, -9376, 64 }&lt;br /&gt;
          endpt = { 496, -6192, 1152 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)wiped out ^3for getting too close to allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        elseif spawnfullyswitched == 1 then -- if spawn as switched and delay has passed:&lt;br /&gt;
          -- balcony lookout&lt;br /&gt;
          origin = { -4968, -2066, 792 }&lt;br /&gt;
          endpt = { -4454, -808, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- office &amp;amp; balcony over main door&lt;br /&gt;
          origin = { -5752, -3080, 488 }&lt;br /&gt;
          endpt = { -5192, -1568, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          --lower office&lt;br /&gt;
          origin = { -5720, -2064, 344 }&lt;br /&gt;
          endpt = { -4848, -1272, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if axis&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 2 then -- if you are Allies:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- dont trickjump over axis facade roof in first map part&lt;br /&gt;
          origin = { -9272, -5328, 608 }&lt;br /&gt;
          endpt = { -8576, -5028, 792 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^3Please don&#039;t do that LAME trickjump now, ^7%s&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- knife only in axis spawn region&lt;br /&gt;
          if et.gentity_get(cno, &amp;quot;s.weapon&amp;quot;) ~= 1 then&lt;br /&gt;
            -- balcony lookout&lt;br /&gt;
            origin = { -4968, -2066, 792 }&lt;br /&gt;
            endpt = { -4454, -808, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- office &amp;amp; balcony over main door&lt;br /&gt;
            origin = { -5752, -3080, 488 }&lt;br /&gt;
            endpt = { -5192, -1568, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- lower office&lt;br /&gt;
            origin = { -5720, -2064, 344 }&lt;br /&gt;
            endpt = { -4848, -1272, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        else -- if spawn switched&lt;br /&gt;
          -- axis facade&lt;br /&gt;
          origin = { -9424, -5600, 440 }&lt;br /&gt;
          endpt = { -8928, -5160, 600 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^5spanked ^3for entering axis upper spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- axis rear spawn exit&lt;br /&gt;
          origin = { -9240, -7448, 208 }&lt;br /&gt;
          endpt = { -8728, -7184, 352 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)annihilated ^3for entering axis rear spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if allies&lt;br /&gt;
      if msg ~= nil then&lt;br /&gt;
        et.gentity_set(cno, &amp;quot;health&amp;quot;, -511)&lt;br /&gt;
        msg = string.format(msg, et.Info_ValueForKey(et.trap_GetUserinfo(cno), &amp;quot;name&amp;quot;))&lt;br /&gt;
        msg = string.format(&amp;quot;qsay %s\n&amp;quot;, msg)&lt;br /&gt;
        et.trap_SendConsoleCommand(et.EXEC_APPEND, msg)&lt;br /&gt;
        et.trap_SendServerCommand(cno, &amp;quot;cp \&amp;quot;^1!! DO NOT SPAWNKILL !!\&amp;quot;\n&amp;quot; )&lt;br /&gt;
      end&lt;br /&gt;
    end -- if health &amp;gt; 0&lt;br /&gt;
  end -- for loop&lt;br /&gt;
&lt;br /&gt;
  if fdspawnswitch == 1 and spawnfullyswitched == nil then&lt;br /&gt;
    if switchcounter == switchtime then&lt;br /&gt;
      spawnfullyswitched = 1&lt;br /&gt;
    else&lt;br /&gt;
      if switchcounter == 0 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn will be protected in 45 seconds\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      if switchcounter == switchtime - 1 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn is now protected\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      switchcounter = switchcounter + 1&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_InitGame(levelTime, randomSeed, restart)&lt;br /&gt;
  num_cl = et.trap_Cvar_Get(&amp;quot;sv_maxclients&amp;quot;)&lt;br /&gt;
  mapname = et.trap_Cvar_Get(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
  origin = {}&lt;br /&gt;
  endpt = {}&lt;br /&gt;
  switchcounter = 0&lt;br /&gt;
  switchtime = 45 / samplerate * 1000 -- 45 seconds to spawn protection switch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_ClientCommand(cno, cmd)&lt;br /&gt;
  if cmd ~= &amp;quot;say&amp;quot; then return 0 end&lt;br /&gt;
  if string.lower(et.ConcatArgs(1)) ~= &amp;quot;!luatest&amp;quot; then return 0 end&lt;br /&gt;
  et.trap_SendConsoleCommand(et.EXEC_APPEND, &amp;quot;qsay \&amp;quot;^3test for ^6Lua ^7Guardian - Anti Spawn Kill Bot\&amp;quot;\n&amp;quot;)&lt;br /&gt;
  if mapname == &amp;quot;fueldump&amp;quot; then&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3sampling at ^7%d ^3milliseconds\&amp;quot;\n&amp;quot;, version, samplerate)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  else&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3no parameters set for ^7%s ^3map\&amp;quot;\n&amp;quot;, version, mapname)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  end&lt;br /&gt;
  return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_Print(text)&lt;br /&gt;
  if text == &amp;quot;Setting Axis autospawn to Axis Fuel Dump\n&amp;quot; then fdspawnswitch = 1 end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that shiven.net uses a slightly different type of anti spawnkill bot. One that uses &#039;invincibility zones&#039; for more info see our [http://www.shiven.net/rules.html server rules]. The essence however is still the same.&amp;lt;br&amp;gt;&lt;br /&gt;
Not much time was spent programming this so feel free to do with it what you please.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1994</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1994"/>
		<updated>2005-12-24T00:58:50Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://bani.anime.net/banimod/forums/viewtopic.php?t=6279 fixed.]--[[User:Bani|Bani]] 17:56, 22 December 2005 (PST)&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
:You can use et.G_Damage() in the new test version to do that.--[[User:Bani|Bani]] 01:38, 23 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;br /&gt;
:oh nevermind, i see this can be done now with xp = et.gentity_get(cno, &amp;quot;ps.stats&amp;quot;, 8)&lt;br /&gt;
:nice. . . --[[User:Hadr0|Hadr0]] 16:58, 23 December 2005 (PST)&lt;br /&gt;
--------&lt;br /&gt;
add a way to determine if a client is 999, and if possible why he&#039;s 999 (loading, connecting, loosing packets, etc)&amp;lt;br&amp;gt;&lt;br /&gt;
--Gotenks&lt;br /&gt;
&lt;br /&gt;
999 means: server has not been sent data from client for &amp;gt; 1000 ms. So there is no way to certainly tell why.&lt;br /&gt;
The timeoutflag is stored in the pmflags IIRC. Don&#039;t know if lua can read them right now. --[[User:Deus|Deus]] 23:12, 22 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Access to weapon stats during game similar to end of round stats that are displayed.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:LethalInjection|LethalInjection]] 23:52, 22 December 2005 (PST)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1987</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1987"/>
		<updated>2005-12-21T23:38:15Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
trap sen server cmd is a ET engine trap the comand u send it send to the client and recived as a server command no a client command&lt;br /&gt;
&lt;br /&gt;
to add ill well that would be al ot of coding for not much [[User:=FF=im2good4u|=FF=Im2good4u]] 12:12, 20 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
aight thnx.&amp;lt;br&amp;gt;&lt;br /&gt;
heres another api request, i&#039;d like to be able to get a clients xp directly. et.gentity_get(cno, &amp;quot;sess.game_points&amp;quot;) seems to return 0 always (?)&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 15:38, 21 December 2005 (PST)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1985</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1985"/>
		<updated>2005-12-20T13:06:11Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1984</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1984"/>
		<updated>2005-12-20T11:00:22Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- cunfo = get/setClientUserInfo(cno) - get/set a clients CLIENT-user info&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1983</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1983"/>
		<updated>2005-12-20T10:12:07Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=400 align=center valign=center&amp;gt;&lt;br /&gt;
http://www.dinotopia.com/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=100% align=left valign=center&amp;gt;&lt;br /&gt;
== Profile ==&lt;br /&gt;
* &#039;&#039;&#039;ET Server&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;[http://www.shiven.net www.shiven.net]&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;E-mail&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;adr7777@hotmail.com&#039;&#039;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anti Spawn Kill Bot==&lt;br /&gt;
&lt;br /&gt;
This bot enforces Shiven spawnkilling rules. It can detect a spawn switch and gives the withdrawing&lt;br /&gt;
team time to clear the area. To see it operational /connect shiven.net&lt;br /&gt;
&lt;br /&gt;
Players are punished by removing health. Allies can go through axis spawn in the first map part.. but only while holding a knife. This is the best i could do to avoid spawncamping. Lua&#039;s function et_ClientCommand(cno, cmd) can not be triggered by &amp;quot;+attack&amp;quot; command. So making a no-fire zone had to be done this way.&lt;br /&gt;
&lt;br /&gt;
It currently only supports the Fuel Dump map. But adding more maps should not be hard.&lt;br /&gt;
A useful tool for determining box/sphere coordinates is the Radiant map editor.&lt;br /&gt;
Decompile the maps .bsp first using q3map2.&lt;br /&gt;
&lt;br /&gt;
skbot.lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Lua Guardian&lt;br /&gt;
-- Anti Spawn Kill Bot&lt;br /&gt;
-- created by Hadro&lt;br /&gt;
-- contact adr7777@hotmail.com&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- many thanks to the regulars from &#039;shiven.net ** 24/7 action&#039;&lt;br /&gt;
-- for putting up with my genocidal beta tests =)&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3]&lt;br /&gt;
-- checks if a player is in a box with lowest coordinates origin[1,2,3] and highest coordinates endpt[1,2,3]&lt;br /&gt;
--&lt;br /&gt;
-- (ppos[1] - origin[1])^2 + (ppos[2] - origin[2])^2 + (ppos[3] - origin[3])^2 &amp;lt; radius^2&lt;br /&gt;
-- checks if a player is in a sphere with center origin[1,2,3] and radius&lt;br /&gt;
-- spheres are not used for the fueldump map&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
version    = &amp;quot;1.0&amp;quot;&lt;br /&gt;
samplerate = 500 -- bot will check player positions every x milliseconds&lt;br /&gt;
&lt;br /&gt;
function et_RunFrame(levelTime)&lt;br /&gt;
  if math.mod(levelTime, samplerate) ~= 0 then return end&lt;br /&gt;
  if mapname ~= &amp;quot;fueldump&amp;quot; then return end&lt;br /&gt;
&lt;br /&gt;
  for cno=0, num_cl-1, 1 do&lt;br /&gt;
    phealth = et.gentity_get(cno, &amp;quot;health&amp;quot;)&lt;br /&gt;
    if phealth &amp;gt; 0 then&lt;br /&gt;
      msg = nil&lt;br /&gt;
      ppos = et.gentity_get(cno,&amp;quot;r.currentOrigin&amp;quot;)&lt;br /&gt;
      teamnum = et.gentity_get(cno, &amp;quot;sess.sessionTeam&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 1 then -- if you are Axis:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- allied spawn hut&lt;br /&gt;
          origin = { -2864, -9376, 64 }&lt;br /&gt;
          endpt = { 496, -6192, 1152 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)wiped out ^3for getting too close to allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        elseif spawnfullyswitched == 1 then -- if spawn as switched and delay has passed:&lt;br /&gt;
          -- balcony lookout&lt;br /&gt;
          origin = { -4968, -2066, 792 }&lt;br /&gt;
          endpt = { -4454, -808, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- office &amp;amp; balcony over main door&lt;br /&gt;
          origin = { -5752, -3080, 488 }&lt;br /&gt;
          endpt = { -5192, -1568, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          --lower office&lt;br /&gt;
          origin = { -5720, -2064, 344 }&lt;br /&gt;
          endpt = { -4848, -1272, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if axis&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 2 then -- if you are Allies:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- dont trickjump over axis facade roof in first map part&lt;br /&gt;
          origin = { -9272, -5328, 608 }&lt;br /&gt;
          endpt = { -8576, -5028, 792 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^3Please don&#039;t do that LAME trickjump now, ^7%s&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- knife only in axis spawn region&lt;br /&gt;
          if et.gentity_get(cno, &amp;quot;s.weapon&amp;quot;) ~= 1 then&lt;br /&gt;
            -- balcony lookout&lt;br /&gt;
            origin = { -4968, -2066, 792 }&lt;br /&gt;
            endpt = { -4454, -808, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- office &amp;amp; balcony over main door&lt;br /&gt;
            origin = { -5752, -3080, 488 }&lt;br /&gt;
            endpt = { -5192, -1568, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- lower office&lt;br /&gt;
            origin = { -5720, -2064, 344 }&lt;br /&gt;
            endpt = { -4848, -1272, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        else -- if spawn switched&lt;br /&gt;
          -- axis facade&lt;br /&gt;
          origin = { -9424, -5600, 440 }&lt;br /&gt;
          endpt = { -8928, -5160, 600 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^5spanked ^3for entering axis upper spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- axis rear spawn exit&lt;br /&gt;
          origin = { -9240, -7448, 208 }&lt;br /&gt;
          endpt = { -8728, -7184, 352 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)annihilated ^3for entering axis rear spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if allies&lt;br /&gt;
      if msg ~= nil then&lt;br /&gt;
        et.gentity_set(cno, &amp;quot;health&amp;quot;, -511)&lt;br /&gt;
        msg = string.format(msg, et.Info_ValueForKey(et.trap_GetUserinfo(cno), &amp;quot;name&amp;quot;))&lt;br /&gt;
        msg = string.format(&amp;quot;qsay %s\n&amp;quot;, msg)&lt;br /&gt;
        et.trap_SendConsoleCommand(et.EXEC_APPEND, msg)&lt;br /&gt;
        et.trap_SendServerCommand(cno, &amp;quot;cp \&amp;quot;^1!! DO NOT SPAWNKILL !!\&amp;quot;\n&amp;quot; )&lt;br /&gt;
      end&lt;br /&gt;
    end -- if health &amp;gt; 0&lt;br /&gt;
  end -- for loop&lt;br /&gt;
&lt;br /&gt;
  if fdspawnswitch == 1 and spawnfullyswitched == nil then&lt;br /&gt;
    if switchcounter == switchtime then&lt;br /&gt;
      spawnfullyswitched = 1&lt;br /&gt;
    else&lt;br /&gt;
      if switchcounter == 0 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn will be protected in 45 seconds\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      if switchcounter == switchtime - 1 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn is now protected\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      switchcounter = switchcounter + 1&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_InitGame(levelTime, randomSeed, restart)&lt;br /&gt;
  num_cl = et.trap_Cvar_Get(&amp;quot;sv_maxclients&amp;quot;)&lt;br /&gt;
  mapname = et.trap_Cvar_Get(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
  origin = {}&lt;br /&gt;
  endpt = {}&lt;br /&gt;
  switchcounter = 0&lt;br /&gt;
  switchtime = 45 / samplerate * 1000 -- 45 seconds to spawn protection switch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_ClientCommand(cno, cmd)&lt;br /&gt;
  if cmd ~= &amp;quot;say&amp;quot; then return 0 end&lt;br /&gt;
  if string.lower(et.ConcatArgs(1)) ~= &amp;quot;!luatest&amp;quot; then return 0 end&lt;br /&gt;
  et.trap_SendConsoleCommand(et.EXEC_APPEND, &amp;quot;qsay \&amp;quot;^3test for ^6Lua ^7Guardian - Anti Spawn Kill Bot\&amp;quot;\n&amp;quot;)&lt;br /&gt;
  if mapname == &amp;quot;fueldump&amp;quot; then&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3sampling at ^7%d ^3milliseconds\&amp;quot;\n&amp;quot;, version, samplerate)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  else&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3no parameters set for ^7%s ^3map\&amp;quot;\n&amp;quot;, version, mapname)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  end&lt;br /&gt;
  return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_Print(text)&lt;br /&gt;
  if text == &amp;quot;Setting Axis autospawn to Axis Fuel Dump\n&amp;quot; then fdspawnswitch = 1 end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: typing !luatest in main chat will give the current status of the mod. Any possible future&lt;br /&gt;
mods will support this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1982</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1982"/>
		<updated>2005-12-20T10:10:01Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life,&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- cunfo = getClientUserInfo(cno) - get a clients CLIENT-user info&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] 02:10, 20 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User_talk:Hadr0&amp;diff=1981</id>
		<title>User talk:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User_talk:Hadr0&amp;diff=1981"/>
		<updated>2005-12-20T10:09:04Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FWIW, things like +attack aren&#039;t clientcommands, they are &#039;buttons&#039; in usercmds. These aren&#039;t accessable from lua, and it would not be easy to make them available in a sane way. [[User:ReyalP|ReyalP]] 16:58, 19 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
ok thnx --[[User:Hadr0|Hadr0]] 02:09, 20 December 2005 (PST)&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1980</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1980"/>
		<updated>2005-12-20T10:04:25Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- cunfo = getClientUserInfo(cno) - get a clients CLIENT-user info&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] Monday, December 19, 2005 at 13:00:08 (UTC)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1978</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1978"/>
		<updated>2005-12-19T15:10:57Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: /* Anti Spawn Kill Bot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=400 align=center valign=center&amp;gt;&lt;br /&gt;
http://www.dinotopia.com/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=100% align=left valign=center&amp;gt;&lt;br /&gt;
== Profile ==&lt;br /&gt;
* &#039;&#039;&#039;ET Server&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;[http://www.shiven.net www.shiven.net]&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;E-mail&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;adr7777@hotmail.com&#039;&#039;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anti Spawn Kill Bot==&lt;br /&gt;
&lt;br /&gt;
This bot enforces Shiven spawnkilling rules. It can detect a spawn switch and gives the withdrawing&lt;br /&gt;
team time to clear the area. To see it operational /connect shiven.net&lt;br /&gt;
&lt;br /&gt;
Players are punished by removing health. Allies can go through axis spawn in the first map part.. but only while holding a knife. This is the best i could do to avoid spawncamping. Unfortunately, Lua&#039;s function et_ClientCommand(cno, cmd) was not triggered when a client issues &amp;quot;+attack&amp;quot; command. So making a no-fire zone had to be done this way.&lt;br /&gt;
&lt;br /&gt;
It currently only supports the Fuel Dump map. But adding more maps should not be hard.&lt;br /&gt;
A useful tool for determining box/sphere coordinates is the Radiant map editor.&lt;br /&gt;
Decompile the maps .bsp first using q3map2.&lt;br /&gt;
&lt;br /&gt;
skbot.lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Lua Guardian&lt;br /&gt;
-- Anti Spawn Kill Bot&lt;br /&gt;
-- created by Hadro&lt;br /&gt;
-- contact adr7777@hotmail.com&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- many thanks to the regulars from &#039;shiven.net ** 24/7 action&#039;&lt;br /&gt;
-- for putting up with my genocidal beta tests =)&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3]&lt;br /&gt;
-- checks if a player is in a box with lowest coordinates origin[1,2,3] and highest coordinates endpt[1,2,3]&lt;br /&gt;
--&lt;br /&gt;
-- (ppos[1] - origin[1])^2 + (ppos[2] - origin[2])^2 + (ppos[3] - origin[3])^2 &amp;lt; radius^2&lt;br /&gt;
-- checks if a player is in a sphere with center origin[1,2,3] and radius&lt;br /&gt;
-- spheres are not used for the fueldump map&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
version    = &amp;quot;1.0&amp;quot;&lt;br /&gt;
samplerate = 500 -- bot will check player positions every x milliseconds&lt;br /&gt;
&lt;br /&gt;
function et_RunFrame(levelTime)&lt;br /&gt;
  if math.mod(levelTime, samplerate) ~= 0 then return end&lt;br /&gt;
  if mapname ~= &amp;quot;fueldump&amp;quot; then return end&lt;br /&gt;
&lt;br /&gt;
  for cno=0, num_cl-1, 1 do&lt;br /&gt;
    phealth = et.gentity_get(cno, &amp;quot;health&amp;quot;)&lt;br /&gt;
    if phealth &amp;gt; 0 then&lt;br /&gt;
      msg = nil&lt;br /&gt;
      ppos = et.gentity_get(cno,&amp;quot;r.currentOrigin&amp;quot;)&lt;br /&gt;
      teamnum = et.gentity_get(cno, &amp;quot;sess.sessionTeam&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 1 then -- if you are Axis:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- allied spawn hut&lt;br /&gt;
          origin = { -2864, -9376, 64 }&lt;br /&gt;
          endpt = { 496, -6192, 1152 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)wiped out ^3for getting too close to allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        elseif spawnfullyswitched == 1 then -- if spawn as switched and delay has passed:&lt;br /&gt;
          -- balcony lookout&lt;br /&gt;
          origin = { -4968, -2066, 792 }&lt;br /&gt;
          endpt = { -4454, -808, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- office &amp;amp; balcony over main door&lt;br /&gt;
          origin = { -5752, -3080, 488 }&lt;br /&gt;
          endpt = { -5192, -1568, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          --lower office&lt;br /&gt;
          origin = { -5720, -2064, 344 }&lt;br /&gt;
          endpt = { -4848, -1272, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if axis&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 2 then -- if you are Allies:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- dont trickjump over axis facade roof in first map part&lt;br /&gt;
          origin = { -9272, -5328, 608 }&lt;br /&gt;
          endpt = { -8576, -5028, 792 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^3Please don&#039;t do that LAME trickjump now, ^7%s&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- knife only in axis spawn region&lt;br /&gt;
          if et.gentity_get(cno, &amp;quot;s.weapon&amp;quot;) ~= 1 then&lt;br /&gt;
            -- balcony lookout&lt;br /&gt;
            origin = { -4968, -2066, 792 }&lt;br /&gt;
            endpt = { -4454, -808, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- office &amp;amp; balcony over main door&lt;br /&gt;
            origin = { -5752, -3080, 488 }&lt;br /&gt;
            endpt = { -5192, -1568, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- lower office&lt;br /&gt;
            origin = { -5720, -2064, 344 }&lt;br /&gt;
            endpt = { -4848, -1272, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        else -- if spawn switched&lt;br /&gt;
          -- axis facade&lt;br /&gt;
          origin = { -9424, -5600, 440 }&lt;br /&gt;
          endpt = { -8928, -5160, 600 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^5spanked ^3for entering axis upper spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- axis rear spawn exit&lt;br /&gt;
          origin = { -9240, -7448, 208 }&lt;br /&gt;
          endpt = { -8728, -7184, 352 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)annihilated ^3for entering axis rear spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if allies&lt;br /&gt;
      if msg ~= nil then&lt;br /&gt;
        et.gentity_set(cno, &amp;quot;health&amp;quot;, -511)&lt;br /&gt;
        msg = string.format(msg, et.Info_ValueForKey(et.trap_GetUserinfo(cno), &amp;quot;name&amp;quot;))&lt;br /&gt;
        msg = string.format(&amp;quot;qsay %s\n&amp;quot;, msg)&lt;br /&gt;
        et.trap_SendConsoleCommand(et.EXEC_APPEND, msg)&lt;br /&gt;
        et.trap_SendServerCommand(cno, &amp;quot;cp \&amp;quot;^1!! DO NOT SPAWNKILL !!\&amp;quot;\n&amp;quot; )&lt;br /&gt;
      end&lt;br /&gt;
    end -- if health &amp;gt; 0&lt;br /&gt;
  end -- for loop&lt;br /&gt;
&lt;br /&gt;
  if fdspawnswitch == 1 and spawnfullyswitched == nil then&lt;br /&gt;
    if switchcounter == switchtime then&lt;br /&gt;
      spawnfullyswitched = 1&lt;br /&gt;
    else&lt;br /&gt;
      if switchcounter == 0 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn will be protected in 45 seconds\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      if switchcounter == switchtime - 1 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn is now protected\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      switchcounter = switchcounter + 1&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_InitGame(levelTime, randomSeed, restart)&lt;br /&gt;
  num_cl = et.trap_Cvar_Get(&amp;quot;sv_maxclients&amp;quot;)&lt;br /&gt;
  mapname = et.trap_Cvar_Get(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
  origin = {}&lt;br /&gt;
  endpt = {}&lt;br /&gt;
  switchcounter = 0&lt;br /&gt;
  switchtime = 45 / samplerate * 1000 -- 45 seconds to spawn protection switch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_ClientCommand(cno, cmd)&lt;br /&gt;
  if cmd ~= &amp;quot;say&amp;quot; then return 0 end&lt;br /&gt;
  if string.lower(et.ConcatArgs(1)) ~= &amp;quot;!luatest&amp;quot; then return 0 end&lt;br /&gt;
  et.trap_SendConsoleCommand(et.EXEC_APPEND, &amp;quot;qsay \&amp;quot;^3test for ^6Lua ^7Guardian - Anti Spawn Kill Bot\&amp;quot;\n&amp;quot;)&lt;br /&gt;
  if mapname == &amp;quot;fueldump&amp;quot; then&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3sampling at ^7%d ^3milliseconds\&amp;quot;\n&amp;quot;, version, samplerate)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  else&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3no parameters set for ^7%s ^3map\&amp;quot;\n&amp;quot;, version, mapname)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  end&lt;br /&gt;
  return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_Print(text)&lt;br /&gt;
  if text == &amp;quot;Setting Axis autospawn to Axis Fuel Dump\n&amp;quot; then fdspawnswitch = 1 end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: typing !luatest in main chat will give the current status of the mod. Any possible future&lt;br /&gt;
mods will support this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1977</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1977"/>
		<updated>2005-12-19T13:02:06Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- cunfo = getClientUserInfo(cno) - get a clients CLIENT-user info&amp;lt;br&amp;gt;&lt;br /&gt;
- function et_ClientCommand(cno, cmd) - could this react to &amp;quot;+attack&amp;quot; and absorb it &#039;return 1&#039;?&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Hadr0|Hadr0]] Monday, December 19, 2005 at 13:00:08 (UTC)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1976</id>
		<title>Talk:Lua Mod API</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=Talk:Lua_Mod_API&amp;diff=1976"/>
		<updated>2005-12-19T12:58:37Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- et.G_SlotSound( slotnum, soundindex ) -&amp;gt;  Plays the sound soundindex at for the player @ slotnum only. --[[User:RoadKillPuppy|RoadKillPuppy]] 14:17, 16 December 2005 (PST)&lt;br /&gt;
:you can do this with tempentities and SVF_SINGLECLIENT ...&lt;br /&gt;
:--[[User:Bani|Bani]] 17:32, 16 December 2005 (PST)&lt;br /&gt;
&lt;br /&gt;
some of this can be done via function et_Print(text).. but this would greatly simplify life&amp;lt;br&amp;gt;&lt;br /&gt;
my wish list for christmas:&amp;lt;br&amp;gt;&lt;br /&gt;
- eguid = getUserIAC(cno) - get a clients etpro guid - if consolecommand &amp;quot;guids&amp;quot; can do it, why not Lua&amp;lt;br&amp;gt;&lt;br /&gt;
- repair gentity_set for vec3 - scotty fix the transporter please&amp;lt;br&amp;gt;&lt;br /&gt;
- cunfo = getClientUserInfo(cno) - get a clients CLIENT-user info&amp;lt;br&amp;gt;&lt;br /&gt;
- function et_ClientCommand(cno, cmd) - could this react to &amp;quot;+attack&amp;quot; and absorb it &#039;return 1&#039;?&amp;lt;br&amp;gt;&lt;br /&gt;
- et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) - punish client as alternative to setting health&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1971</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1971"/>
		<updated>2005-12-18T11:03:37Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=400 align=center valign=center&amp;gt;&lt;br /&gt;
http://www.dinotopia.com/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=100% align=left valign=center&amp;gt;&lt;br /&gt;
== Profile ==&lt;br /&gt;
* &#039;&#039;&#039;ET Server&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;[http://www.shiven.net www.shiven.net]&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;E-mail&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;adr7777@hotmail.com&#039;&#039;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anti Spawn Kill Bot==&lt;br /&gt;
&lt;br /&gt;
This bot enforces Shiven spawnkilling rules. It can detect a spawn switch and gives the withdrawing&lt;br /&gt;
team time to clear the area. To see it operational /connect shiven.net&lt;br /&gt;
&lt;br /&gt;
Players are punished by removing health. Lua doesnt support this (yet):&amp;lt;br&amp;gt;&lt;br /&gt;
et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) -- this would show corpses&lt;br /&gt;
&lt;br /&gt;
Allies can go through axis spawn in the first map part.. but only while holding a knife.&lt;br /&gt;
This is the best i could do to avoid spawncamping. Unfortunately, Lua&#039;s function&lt;br /&gt;
et_ClientCommand(cno, cmd) was not triggered when a client issues &amp;quot;+attack&amp;quot; command.&lt;br /&gt;
So making a no-fire zone had to be done this way.&lt;br /&gt;
&lt;br /&gt;
It currently only supports the Fuel Dump map. But adding more maps should not be hard.&lt;br /&gt;
A useful tool for determining box/sphere coordinates is the Radiant map editor.&lt;br /&gt;
Decompile the maps .bsp first using q3map2.&lt;br /&gt;
&lt;br /&gt;
skbot.lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Lua Guardian&lt;br /&gt;
-- Anti Spawn Kill Bot&lt;br /&gt;
-- created by Hadro&lt;br /&gt;
-- contact adr7777@hotmail.com&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- many thanks to the regulars from &#039;shiven.net ** 24/7 action&#039;&lt;br /&gt;
-- for putting up with my genocidal beta tests =)&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3]&lt;br /&gt;
-- checks if a player is in a box with lowest coordinates origin[1,2,3] and highest coordinates endpt[1,2,3]&lt;br /&gt;
--&lt;br /&gt;
-- (ppos[1] - origin[1])^2 + (ppos[2] - origin[2])^2 + (ppos[3] - origin[3])^2 &amp;lt; radius^2&lt;br /&gt;
-- checks if a player is in a sphere with center origin[1,2,3] and radius&lt;br /&gt;
-- spheres are not used for the fueldump map&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
version    = &amp;quot;1.0&amp;quot;&lt;br /&gt;
samplerate = 500 -- bot will check player positions every x milliseconds&lt;br /&gt;
&lt;br /&gt;
function et_RunFrame(levelTime)&lt;br /&gt;
  if math.mod(levelTime, samplerate) ~= 0 then return end&lt;br /&gt;
  if mapname ~= &amp;quot;fueldump&amp;quot; then return end&lt;br /&gt;
&lt;br /&gt;
  for cno=0, num_cl-1, 1 do&lt;br /&gt;
    phealth = et.gentity_get(cno, &amp;quot;health&amp;quot;)&lt;br /&gt;
    if phealth &amp;gt; 0 then&lt;br /&gt;
      msg = nil&lt;br /&gt;
      ppos = et.gentity_get(cno,&amp;quot;r.currentOrigin&amp;quot;)&lt;br /&gt;
      teamnum = et.gentity_get(cno, &amp;quot;sess.sessionTeam&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 1 then -- if you are Axis:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- allied spawn hut&lt;br /&gt;
          origin = { -2864, -9376, 64 }&lt;br /&gt;
          endpt = { 496, -6192, 1152 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)wiped out ^3for getting too close to allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        elseif spawnfullyswitched == 1 then -- if spawn as switched and delay has passed:&lt;br /&gt;
          -- balcony lookout&lt;br /&gt;
          origin = { -4968, -2066, 792 }&lt;br /&gt;
          endpt = { -4454, -808, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- office &amp;amp; balcony over main door&lt;br /&gt;
          origin = { -5752, -3080, 488 }&lt;br /&gt;
          endpt = { -5192, -1568, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          --lower office&lt;br /&gt;
          origin = { -5720, -2064, 344 }&lt;br /&gt;
          endpt = { -4848, -1272, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if axis&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 2 then -- if you are Allies:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- dont trickjump over axis facade roof in first map part&lt;br /&gt;
          origin = { -9272, -5328, 608 }&lt;br /&gt;
          endpt = { -8576, -5028, 792 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^3Please don&#039;t do that LAME trickjump now, ^7%s&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- knife only in axis spawn region&lt;br /&gt;
          if et.gentity_get(cno, &amp;quot;s.weapon&amp;quot;) ~= 1 then&lt;br /&gt;
            -- balcony lookout&lt;br /&gt;
            origin = { -4968, -2066, 792 }&lt;br /&gt;
            endpt = { -4454, -808, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- office &amp;amp; balcony over main door&lt;br /&gt;
            origin = { -5752, -3080, 488 }&lt;br /&gt;
            endpt = { -5192, -1568, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- lower office&lt;br /&gt;
            origin = { -5720, -2064, 344 }&lt;br /&gt;
            endpt = { -4848, -1272, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        else -- if spawn switched&lt;br /&gt;
          -- axis facade&lt;br /&gt;
          origin = { -9424, -5600, 440 }&lt;br /&gt;
          endpt = { -8928, -5160, 600 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^5spanked ^3for entering axis upper spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- axis rear spawn exit&lt;br /&gt;
          origin = { -9240, -7448, 208 }&lt;br /&gt;
          endpt = { -8728, -7184, 352 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)annihilated ^3for entering axis rear spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if allies&lt;br /&gt;
      if msg ~= nil then&lt;br /&gt;
        et.gentity_set(cno, &amp;quot;health&amp;quot;, -511)&lt;br /&gt;
        msg = string.format(msg, et.Info_ValueForKey(et.trap_GetUserinfo(cno), &amp;quot;name&amp;quot;))&lt;br /&gt;
        msg = string.format(&amp;quot;qsay %s\n&amp;quot;, msg)&lt;br /&gt;
        et.trap_SendConsoleCommand(et.EXEC_APPEND, msg)&lt;br /&gt;
        et.trap_SendServerCommand(cno, &amp;quot;cp \&amp;quot;^1!! DO NOT SPAWNKILL !!\&amp;quot;\n&amp;quot; )&lt;br /&gt;
      end&lt;br /&gt;
    end -- if health &amp;gt; 0&lt;br /&gt;
  end -- for loop&lt;br /&gt;
&lt;br /&gt;
  if fdspawnswitch == 1 and spawnfullyswitched == nil then&lt;br /&gt;
    if switchcounter == switchtime then&lt;br /&gt;
      spawnfullyswitched = 1&lt;br /&gt;
    else&lt;br /&gt;
      if switchcounter == 0 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn will be protected in 45 seconds\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      if switchcounter == switchtime - 1 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn is now protected\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      switchcounter = switchcounter + 1&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_InitGame(levelTime, randomSeed, restart)&lt;br /&gt;
  num_cl = et.trap_Cvar_Get(&amp;quot;sv_maxclients&amp;quot;)&lt;br /&gt;
  mapname = et.trap_Cvar_Get(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
  origin = {}&lt;br /&gt;
  endpt = {}&lt;br /&gt;
  switchcounter = 0&lt;br /&gt;
  switchtime = 45 / samplerate * 1000 -- 45 seconds to spawn protection switch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_ClientCommand(cno, cmd)&lt;br /&gt;
  if cmd ~= &amp;quot;say&amp;quot; then return 0 end&lt;br /&gt;
  if string.lower(et.ConcatArgs(1)) ~= &amp;quot;!luatest&amp;quot; then return 0 end&lt;br /&gt;
  et.trap_SendConsoleCommand(et.EXEC_APPEND, &amp;quot;qsay \&amp;quot;^3test for ^6Lua ^7Guardian - Anti Spawn Kill Bot\&amp;quot;\n&amp;quot;)&lt;br /&gt;
  if mapname == &amp;quot;fueldump&amp;quot; then&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3sampling at ^7%d ^3milliseconds\&amp;quot;\n&amp;quot;, version, samplerate)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  else&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3no parameters set for ^7%s ^3map\&amp;quot;\n&amp;quot;, version, mapname)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  end&lt;br /&gt;
  return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_Print(text)&lt;br /&gt;
  if text == &amp;quot;Setting Axis autospawn to Axis Fuel Dump\n&amp;quot; then fdspawnswitch = 1 end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: typing !luatest in main chat will give the current status of the mod. Any possible future&lt;br /&gt;
mods will support this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1968</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1968"/>
		<updated>2005-12-18T07:20:52Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=400 align=center valign=center&amp;gt;&lt;br /&gt;
http://www.dinotopia.com/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=100% align=left valign=center&amp;gt;&lt;br /&gt;
== Profile ==&lt;br /&gt;
* &#039;&#039;&#039;ET Server&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;[http://www.shiven.net www.shiven.net]&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;E-mail&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;adr7777@hotmail.com&#039;&#039;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anti Spawn Kill Bot==&lt;br /&gt;
&lt;br /&gt;
This bot enforces Shiven spawnkilling rules. It can detect a spawn switch and gives the withdrawing&lt;br /&gt;
team time to clear the area. To see it operational /connect shiven.net&lt;br /&gt;
&lt;br /&gt;
Players are punished by removing health. Lua doesnt support this (yet):&amp;lt;br&amp;gt;&lt;br /&gt;
et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) -- this would show corpses&lt;br /&gt;
&lt;br /&gt;
Allies can go through axis spawn in the first map part.. but only while holding a knife.&lt;br /&gt;
This is the best i could do to avoid spawncamping. Unfortunately, Lua&#039;s function&lt;br /&gt;
et_ClientCommand(cno, cmd) was not triggered when a client issues &amp;quot;+attack&amp;quot; command.&lt;br /&gt;
So making a no-fire zone had to be done this way.&lt;br /&gt;
&lt;br /&gt;
It currently only supports the Fuel Dump map. But adding more maps should not be hard.&lt;br /&gt;
A useful tool for determining box/sphere coordinates is the Radiant map editor.&lt;br /&gt;
Decompile the maps .bsp first using q3map2.&lt;br /&gt;
&lt;br /&gt;
skbot.lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Lua Guardian&lt;br /&gt;
-- Anti Spawn Kill Bot&lt;br /&gt;
-- created by Hadro&lt;br /&gt;
-- contact adr7777@hotmail.com&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- many thanks to the regulars from &#039;shiven.net ** 24/7 action&#039;&lt;br /&gt;
-- for putting up with my genocidal beta tests =)&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3]&lt;br /&gt;
-- checks if a player is in a box with lowest coordinates origin[1,2,3] and highest coordinates endpt[1,2,3]&lt;br /&gt;
--&lt;br /&gt;
-- (ppos[1] - origin[1])^2 + (ppos[2] - origin[2])^2 + (ppos[3] - origin[3])^2 &amp;lt; radius^2&lt;br /&gt;
-- checks if a player is in a sphere with center origin[1,2,3] and radius&lt;br /&gt;
-- spheres are not used for the fueldump map&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
version    = &amp;quot;1.0&amp;quot;&lt;br /&gt;
samplerate = 500 -- bot will check player positions every x milliseconds&lt;br /&gt;
&lt;br /&gt;
function et_RunFrame(levelTime)&lt;br /&gt;
  if math.mod(levelTime, samplerate) ~= 0 then return end&lt;br /&gt;
  if mapname ~= &amp;quot;fueldump&amp;quot; then return end&lt;br /&gt;
&lt;br /&gt;
  for cno=0, num_cl-1, 1 do&lt;br /&gt;
    phealth = et.gentity_get(cno, &amp;quot;health&amp;quot;)&lt;br /&gt;
    if phealth &amp;gt; 0 then&lt;br /&gt;
      msg = nil&lt;br /&gt;
      ppos = et.gentity_get(cno,&amp;quot;r.currentOrigin&amp;quot;)&lt;br /&gt;
      teamnum = et.gentity_get(cno, &amp;quot;sess.sessionTeam&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 1 then -- if you are Axis:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- allied spawn hut&lt;br /&gt;
          origin = { -2864, -9376, 64 }&lt;br /&gt;
          endpt = { 496, -6192, 1152 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)wiped out ^3for getting too close to allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        elseif spawnfullyswitched == 1 then -- if spawn as switched and delay has passed:&lt;br /&gt;
          -- balcony lookout&lt;br /&gt;
          origin = { -4968, -2066, 792 }&lt;br /&gt;
          endpt = { -4454, -808, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- office &amp;amp; balcony over main door&lt;br /&gt;
          origin = { -5752, -3080, 488 }&lt;br /&gt;
          endpt = { -5192, -1568, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          --lower office&lt;br /&gt;
          origin = { -5720, -2064, 344 }&lt;br /&gt;
          endpt = { -4848, -1272, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if axis&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 2 then -- if you are Allies:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- dont trickjump over axis facade roof in first map part&lt;br /&gt;
          origin = { -9272, -5328, 608 }&lt;br /&gt;
          endpt = { -8576, -5028, 792 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^3Please don&#039;t do that LAME trickjump now, ^7%s&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- knife only in axis spawn region&lt;br /&gt;
          if et.gentity_get(cno, &amp;quot;s.weapon&amp;quot;) ~= 1 then&lt;br /&gt;
            -- balcony lookout&lt;br /&gt;
            origin = { -4968, -2066, 792 }&lt;br /&gt;
            endpt = { -4454, -808, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- office &amp;amp; balcony over main door&lt;br /&gt;
            origin = { -5752, -3080, 488 }&lt;br /&gt;
            endpt = { -5192, -1568, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- lower office&lt;br /&gt;
            origin = { -5720, -2064, 344 }&lt;br /&gt;
            endpt = { -4848, -1272, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        else -- if spawn switched&lt;br /&gt;
          -- axis facade&lt;br /&gt;
          origin = { -9424, -5600, 440 }&lt;br /&gt;
          endpt = { -8928, -5160, 600 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^5spanked ^3for entering axis upper spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- axis rear spawn exit&lt;br /&gt;
          origin = { -9240, -7448, 208 }&lt;br /&gt;
          endpt = { -8728, -7184, 352 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)annihilated ^3for entering axis rear spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if allies&lt;br /&gt;
      if msg ~= nil then&lt;br /&gt;
        et.gentity_set(cno, &amp;quot;health&amp;quot;, -511)&lt;br /&gt;
        msg = string.format(msg, et.Info_ValueForKey(et.trap_GetUserinfo(cno), &amp;quot;name&amp;quot;))&lt;br /&gt;
        msg = string.format(&amp;quot;qsay %s\n&amp;quot;, msg)&lt;br /&gt;
        et.trap_SendConsoleCommand(et.EXEC_APPEND, msg)&lt;br /&gt;
        et.trap_SendServerCommand(cno, &amp;quot;cp \&amp;quot;^1!! DO NOT SPAWNKILL !!\&amp;quot;\n&amp;quot; )&lt;br /&gt;
      end&lt;br /&gt;
    end -- if health &amp;gt; 0&lt;br /&gt;
  end -- for loop&lt;br /&gt;
&lt;br /&gt;
  if fdspawnswitch == 1 and spawnfullyswitched == nil then&lt;br /&gt;
    if switchcounter == switchtime then&lt;br /&gt;
      spawnfullyswitched = 1&lt;br /&gt;
    else&lt;br /&gt;
      if switchcounter == 0 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn will be protected in 45 seconds\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      if switchcounter == switchtime - 1 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn is now protected\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      switchcounter = switchcounter + 1&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_InitGame(levelTime, randomSeed, restart)&lt;br /&gt;
  num_cl = et.trap_Cvar_Get(&amp;quot;sv_maxclients&amp;quot;)&lt;br /&gt;
  mapname = et.trap_Cvar_Get(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
  origin = {}&lt;br /&gt;
  endpt = {}&lt;br /&gt;
  switchcounter = 0&lt;br /&gt;
  switchtime = 45 / samplerate * 1000 -- 45 seconds to spawn protection switch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_ClientCommand(cno, cmd)&lt;br /&gt;
  if cmd ~= &amp;quot;say&amp;quot; then return 0 end&lt;br /&gt;
  if string.lower(et.ConcatArgs(1)) ~= &amp;quot;!luatest&amp;quot; then return 0 end&lt;br /&gt;
  et.trap_SendConsoleCommand(et.EXEC_APPEND, &amp;quot;qsay \&amp;quot;^3test for ^6Lua ^7Guardian - Anti Spawn Kill Bot\&amp;quot;\n&amp;quot;)&lt;br /&gt;
  if mapname == &amp;quot;fueldump&amp;quot; then&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3sampling at ^7%d ^3milliseconds\&amp;quot;\n&amp;quot;, version, samplerate)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  else&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3no parameters set for ^7%s ^3map\&amp;quot;\n&amp;quot;, version, mapname)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  end&lt;br /&gt;
  return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_Print(text)&lt;br /&gt;
  if text ~= &amp;quot;Setting Axis autospawn to Axis Fuel Dump\n&amp;quot; then return end&lt;br /&gt;
  fdspawnswitch = 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: typing !luatest in main chat will give the current status of the mod. Any possible future&lt;br /&gt;
mods will support this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
	<entry>
		<id>https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1967</id>
		<title>User:Hadr0</title>
		<link rel="alternate" type="text/html" href="https://wolfwiki.anime.net/index.php?title=User:Hadr0&amp;diff=1967"/>
		<updated>2005-12-18T07:17:55Z</updated>

		<summary type="html">&lt;p&gt;Hadr0: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table witdh=100% height=100&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td width=400 align=center valign=center&amp;gt;&lt;br /&gt;
http://www.dinotopia.com/hadro.jpg&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=100% align=left valign=center&amp;gt;&lt;br /&gt;
== Profile ==&lt;br /&gt;
* &#039;&#039;&#039;Our ET Server&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;[http://www.shiven.net www.shiven.net]&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;E-mail&#039;&#039;&#039;&lt;br /&gt;
** &#039;&#039;adr7777@hotmail.com&#039;&#039;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Anti Spawn Kill Bot==&lt;br /&gt;
&lt;br /&gt;
This bot enforces Shiven spawnkilling rules. It can detect a spawn switch and gives the withdrawing&lt;br /&gt;
team time to clear the area. To see it operational /connect shiven.net&lt;br /&gt;
&lt;br /&gt;
Players are punished by removing health. Lua doesnt support this (yet):&amp;lt;br&amp;gt;&lt;br /&gt;
et.trap_SendServerCommand(cno, &amp;quot;kill&amp;quot;) -- this would show corpses&lt;br /&gt;
&lt;br /&gt;
Allies can go through axis spawn in the first map part.. but only while holding a knife.&lt;br /&gt;
This is the best i could do to avoid spawncamping. Unfortunately, Lua&#039;s function&lt;br /&gt;
et_ClientCommand(cno, cmd) was not triggered when a client issues &amp;quot;+attack&amp;quot; command.&lt;br /&gt;
So making a no-fire zone had to be done this way.&lt;br /&gt;
&lt;br /&gt;
It currently only supports the Fuel Dump map. But adding more maps should not be hard.&lt;br /&gt;
A useful tool for determining box/sphere coordinates is the Radiant map editor.&lt;br /&gt;
Decompile the maps .bsp first using q3map2.&lt;br /&gt;
&lt;br /&gt;
skbot.lua code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- Lua Guardian&lt;br /&gt;
-- Anti Spawn Kill Bot&lt;br /&gt;
-- created by Hadro&lt;br /&gt;
-- contact adr7777@hotmail.com&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- many thanks to the regulars from &#039;shiven.net ** 24/7 action&#039;&lt;br /&gt;
-- for putting up with my genocidal beta tests =)&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
-- origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3]&lt;br /&gt;
-- checks if a player is in a box with lowest coordinates origin[1,2,3] and highest coordinates endpt[1,2,3]&lt;br /&gt;
--&lt;br /&gt;
-- (ppos[1] - origin[1])^2 + (ppos[2] - origin[2])^2 + (ppos[3] - origin[3])^2 &amp;lt; radius^2&lt;br /&gt;
-- checks if a player is in a sphere with center origin[1,2,3] and radius&lt;br /&gt;
-- spheres are not used for the fueldump map&lt;br /&gt;
-----------------------------------------------------------------------------------------------------&lt;br /&gt;
version    = &amp;quot;1.0&amp;quot;&lt;br /&gt;
samplerate = 500 -- bot will check player positions every x milliseconds&lt;br /&gt;
&lt;br /&gt;
function et_RunFrame(levelTime)&lt;br /&gt;
  if math.mod(levelTime, samplerate) ~= 0 then return end&lt;br /&gt;
  if mapname ~= &amp;quot;fueldump&amp;quot; then return end&lt;br /&gt;
&lt;br /&gt;
  for cno=0, num_cl-1, 1 do&lt;br /&gt;
    phealth = et.gentity_get(cno, &amp;quot;health&amp;quot;)&lt;br /&gt;
    if phealth &amp;gt; 0 then&lt;br /&gt;
      msg = nil&lt;br /&gt;
      ppos = et.gentity_get(cno,&amp;quot;r.currentOrigin&amp;quot;)&lt;br /&gt;
      teamnum = et.gentity_get(cno, &amp;quot;sess.sessionTeam&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 1 then -- if you are Axis:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- allied spawn hut&lt;br /&gt;
          origin = { -2864, -9376, 64 }&lt;br /&gt;
          endpt = { 496, -6192, 1152 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)wiped out ^3for getting too close to allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        elseif spawnfullyswitched == 1 then -- if spawn as switched and delay has passed:&lt;br /&gt;
          -- balcony lookout&lt;br /&gt;
          origin = { -4968, -2066, 792 }&lt;br /&gt;
          endpt = { -4454, -808, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- office &amp;amp; balcony over main door&lt;br /&gt;
          origin = { -5752, -3080, 488 }&lt;br /&gt;
          endpt = { -5192, -1568, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          --lower office&lt;br /&gt;
          origin = { -5720, -2064, 344 }&lt;br /&gt;
          endpt = { -4848, -1272, 1024 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)crushed ^3for entering allied spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if axis&lt;br /&gt;
&lt;br /&gt;
      if teamnum == 2 then -- if you are Allies:&lt;br /&gt;
        if fdspawnswitch == nil then&lt;br /&gt;
          -- dont trickjump over axis facade roof in first map part&lt;br /&gt;
          origin = { -9272, -5328, 608 }&lt;br /&gt;
          endpt = { -8576, -5028, 792 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^3Please don&#039;t do that LAME trickjump now, ^7%s&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- knife only in axis spawn region&lt;br /&gt;
          if et.gentity_get(cno, &amp;quot;s.weapon&amp;quot;) ~= 1 then&lt;br /&gt;
            -- balcony lookout&lt;br /&gt;
            origin = { -4968, -2066, 792 }&lt;br /&gt;
            endpt = { -4454, -808, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- office &amp;amp; balcony over main door&lt;br /&gt;
            origin = { -5752, -3080, 488 }&lt;br /&gt;
            endpt = { -5192, -1568, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- lower office&lt;br /&gt;
            origin = { -5720, -2064, 344 }&lt;br /&gt;
            endpt = { -4848, -1272, 1024 }&lt;br /&gt;
            if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
              msg = &amp;quot;^7%s^3, you can ONLY pass through axis spawn holding a ^7KNIFE&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
          end&lt;br /&gt;
        else -- if spawn switched&lt;br /&gt;
          -- axis facade&lt;br /&gt;
          origin = { -9424, -5600, 440 }&lt;br /&gt;
          endpt = { -8928, -5160, 600 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^5spanked ^3for entering axis upper spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
          -- axis rear spawn exit&lt;br /&gt;
          origin = { -9240, -7448, 208 }&lt;br /&gt;
          endpt = { -8728, -7184, 352 }&lt;br /&gt;
          if origin[1] &amp;lt; ppos[1] and ppos[1] &amp;lt; endpt[1] and origin[2] &amp;lt; ppos[2] and ppos[2] &amp;lt; endpt[2] and origin[3] &amp;lt; ppos[3] and ppos[3] &amp;lt; endpt[3] then&lt;br /&gt;
            msg = &amp;quot;^7%s ^3was ^)annihilated ^3for entering axis rear spawn&amp;quot;&lt;br /&gt;
          end&lt;br /&gt;
        end&lt;br /&gt;
      end -- if allies&lt;br /&gt;
      if msg ~= nil then&lt;br /&gt;
        et.gentity_set(cno, &amp;quot;health&amp;quot;, -511)&lt;br /&gt;
        msg = string.format(msg, et.Info_ValueForKey(et.trap_GetUserinfo(cno), &amp;quot;name&amp;quot;))&lt;br /&gt;
        msg = string.format(&amp;quot;qsay %s\n&amp;quot;, msg)&lt;br /&gt;
        et.trap_SendConsoleCommand(et.EXEC_APPEND, msg)&lt;br /&gt;
        et.trap_SendServerCommand(cno, &amp;quot;cp \&amp;quot;^1!! DO NOT SPAWNKILL !!\&amp;quot;\n&amp;quot; )&lt;br /&gt;
      end&lt;br /&gt;
    end -- if health &amp;gt; 0&lt;br /&gt;
  end -- for loop&lt;br /&gt;
&lt;br /&gt;
  if fdspawnswitch == 1 and spawnfullyswitched == nil then&lt;br /&gt;
    if switchcounter == switchtime then&lt;br /&gt;
      spawnfullyswitched = 1&lt;br /&gt;
    else&lt;br /&gt;
      if switchcounter == 0 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn will be protected in 45 seconds\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      if switchcounter == switchtime - 1 then&lt;br /&gt;
        et.trap_SendServerCommand(-1, &amp;quot;cpm \&amp;quot;^6Lua^7: allied spawn is now protected\&amp;quot;\n&amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
      switchcounter = switchcounter + 1&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_InitGame(levelTime, randomSeed, restart)&lt;br /&gt;
  num_cl = et.trap_Cvar_Get(&amp;quot;sv_maxclients&amp;quot;)&lt;br /&gt;
  mapname = et.trap_Cvar_Get(&amp;quot;mapname&amp;quot;)&lt;br /&gt;
  origin = {}&lt;br /&gt;
  endpt = {}&lt;br /&gt;
  switchcounter = 0&lt;br /&gt;
  switchtime = 45 / samplerate * 1000 -- 45 seconds to spawn protection switch&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_ClientCommand(cno, cmd)&lt;br /&gt;
  if cmd ~= &amp;quot;say&amp;quot; then return 0 end&lt;br /&gt;
  if string.lower(et.ConcatArgs(1)) ~= &amp;quot;!luatest&amp;quot; then return 0 end&lt;br /&gt;
  et.trap_SendConsoleCommand(et.EXEC_APPEND, &amp;quot;qsay \&amp;quot;^3test for ^6Lua ^7Guardian - Anti Spawn Kill Bot\&amp;quot;\n&amp;quot;)&lt;br /&gt;
  if mapname == &amp;quot;fueldump&amp;quot; then&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3sampling at ^7%d ^3milliseconds\&amp;quot;\n&amp;quot;, version, samplerate)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  else&lt;br /&gt;
    tosend = string.format(&amp;quot;qsay \&amp;quot;^3&amp;gt;version ^7%s ^3no parameters set for ^7%s ^3map\&amp;quot;\n&amp;quot;, version, mapname)&lt;br /&gt;
    et.trap_SendConsoleCommand(et.EXEC_APPEND, tosend)&lt;br /&gt;
  end&lt;br /&gt;
  return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function et_Print(text)&lt;br /&gt;
  if text ~= &amp;quot;Setting Axis autospawn to Axis Fuel Dump\n&amp;quot; then return end&lt;br /&gt;
  fdspawnswitch = 1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: typing !luatest in main chat will give the current status of the mod. Any possible future&lt;br /&gt;
mods will support this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Category:ETPro:Mods]]&lt;/div&gt;</summary>
		<author><name>Hadr0</name></author>
	</entry>
</feed>