<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.minetest.org/index.php?action=history&amp;feed=atom&amp;title=Mods%2Fbasic_robot_csm</id>
	<title>Mods/basic robot csm - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.minetest.org/index.php?action=history&amp;feed=atom&amp;title=Mods%2Fbasic_robot_csm"/>
	<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;action=history"/>
	<updated>2026-04-24T13:38:01Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=12422&amp;oldid=prev</id>
		<title>&gt;Voxel at 05:25, 18 April 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=12422&amp;oldid=prev"/>
		<updated>2021-04-18T05:25:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:25, 17 April 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>&gt;Voxel</name></author>
	</entry>
	<entry>
		<id>https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=8657&amp;oldid=prev</id>
		<title>&gt;Voxel at 05:25, 18 April 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=8657&amp;oldid=prev"/>
		<updated>2021-04-18T05:25:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:25, 17 April 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>&gt;Voxel</name></author>
	</entry>
	<entry>
		<id>https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=4892&amp;oldid=prev</id>
		<title>&gt;Voxel at 05:25, 18 April 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=4892&amp;oldid=prev"/>
		<updated>2021-04-18T05:25:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:25, 17 April 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>&gt;Voxel</name></author>
	</entry>
	<entry>
		<id>https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=1127&amp;oldid=prev</id>
		<title>&gt;Voxel at 05:25, 18 April 2021</title>
		<link rel="alternate" type="text/html" href="https://wiki.minetest.org/index.php?title=Mods/basic_robot_csm&amp;diff=1127&amp;oldid=prev"/>
		<updated>2021-04-18T05:25:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:Mods/basic_robot_csm}}&lt;br /&gt;
{{Mod Data &lt;br /&gt;
| name=basic_robot_csm&lt;br /&gt;
| luaname=basic_robot_csm&lt;br /&gt;
| type=Robots&lt;br /&gt;
| author=rnd &lt;br /&gt;
| version=[https://github.com/ac-minetest/basic_robot_csm/archive/master.zip 2017-08-19]&lt;br /&gt;
| forum=[https://forum.minetest.net/viewtopic.php?f=53&amp;amp;t=18415 Forum]&lt;br /&gt;
| source=[https://github.com/ac-minetest/basic_robot_csm/ GitHub]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
This is the user-documentation about the mod '''basic_robot_csm''' by rnd - [https://forum.minetest.net/viewtopic.php?f=53&amp;amp;t=18415 Forum] [https://github.com/ac-minetest/basic_robot_csm github],&amp;lt;br /&amp;gt;&lt;br /&gt;
a lua-sandbox / chat-bot / calculator.&lt;br /&gt;
&lt;br /&gt;
==Intro==&lt;br /&gt;
basic_robot_csm is a lightweight robot mod running on the minetest-client.&lt;br /&gt;
&lt;br /&gt;
Users can write programs for this bot in [http://www.lua.org/ Lua].&lt;br /&gt;
&lt;br /&gt;
For safety, these programs are executed inside a sandbox that only allows certain lua-commands.&lt;br /&gt;
&lt;br /&gt;
Input &amp;amp; Output happens mainly via chat, but it is also possible to play sounds, &amp;lt;br /&amp;gt;&lt;br /&gt;
and to process formspecs.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
There is no robot-entity that moves independent of the player like in the mod [[Mods/basic robot|basic_robot]].&lt;br /&gt;
&lt;br /&gt;
===How to get===&lt;br /&gt;
* install a minetest-version 0.4.16dev, 0.5.0 or later&lt;br /&gt;
* download mod from github&lt;br /&gt;
* unpack in &amp;quot;minetest DIR&amp;quot;/clientmods/&lt;br /&gt;
* enable client mods in advanced settings menu or in minetest.conf&lt;br /&gt;
* inside /clientmods/mods.conf there should be a line:&lt;br /&gt;
: load_mod_basic_robot_csm = true&lt;br /&gt;
* while playing say &amp;quot;.bot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===How to use===&lt;br /&gt;
The chat-command '.bot' will present an editor-form with tabs and some buttons:&lt;br /&gt;
* Tabs 1-8 for source-code.&lt;br /&gt;
* Button &amp;quot;'''Start'''&amp;quot; starts executing the code of the program in the current tab.&lt;br /&gt;
* Button &amp;quot;'''Stop'''&amp;quot; stops the program.&lt;br /&gt;
* Button &amp;quot;'''Help'''&amp;quot; shows some helptext.&lt;br /&gt;
* Button &amp;quot;'''Save'''&amp;quot; saves the program of the current tab (using mod-storage). &lt;br /&gt;
&lt;br /&gt;
Select a tab, &lt;br /&gt;
enter a program (or use cut&amp;amp;paste)&lt;br /&gt;
: e.g. say(&amp;quot;Hi&amp;quot;)&lt;br /&gt;
press SAVE-button,&lt;br /&gt;
press START-button.&lt;br /&gt;
&lt;br /&gt;
The first line of text is used as the tab-title.&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
See commands in init.lua, function getSandboxEnv().&amp;lt;br /&amp;gt;&lt;br /&gt;
See also&lt;br /&gt;
* [https://github.com/minetest/minetest/blob/master/doc/client_lua_api.md client_lua_api]&lt;br /&gt;
* [https://rubenwardy.com/minetest_modding_book/lua_api.html Lua Modding API Reference]&lt;br /&gt;
Lua-docs:&lt;br /&gt;
* https://www.lua.org/docs.html&lt;br /&gt;
* http://lua-users.org/wiki/&lt;br /&gt;
&lt;br /&gt;
===misc===&lt;br /&gt;
* robot_version&lt;br /&gt;
* say&lt;br /&gt;
* colorize&lt;br /&gt;
* tonumber&lt;br /&gt;
* pairs&lt;br /&gt;
* ipairs&lt;br /&gt;
* error&lt;br /&gt;
* type&lt;br /&gt;
* rom&lt;br /&gt;
* minetest&lt;br /&gt;
: see [https://rubenwardy.com/minetest_modding_book/lua_api.html#helper-functions Lua Modding API Reference], 'Helper functions' and below&lt;br /&gt;
&lt;br /&gt;
===self===&lt;br /&gt;
* self.name&lt;br /&gt;
* self.pos&lt;br /&gt;
* self.viewdir&lt;br /&gt;
* self.listen_msg&lt;br /&gt;
* self.sent_msg&lt;br /&gt;
* self.read_form&lt;br /&gt;
* self.sound&lt;br /&gt;
* self.sound_stop&lt;br /&gt;
* self.remove&lt;br /&gt;
&lt;br /&gt;
===code===&lt;br /&gt;
* code.set&lt;br /&gt;
* code.run&lt;br /&gt;
&lt;br /&gt;
===os===&lt;br /&gt;
* os.date&lt;br /&gt;
* os.clock&lt;br /&gt;
* os.time &lt;br /&gt;
* os.difftime &lt;br /&gt;
&lt;br /&gt;
===table===&lt;br /&gt;
* table.maxn&lt;br /&gt;
* table.concat&lt;br /&gt;
* table.insert&lt;br /&gt;
* table.remove&lt;br /&gt;
* table.sort&lt;br /&gt;
&lt;br /&gt;
===string===&lt;br /&gt;
* string.byte    &lt;br /&gt;
* string.char&lt;br /&gt;
* string.len&lt;br /&gt;
&lt;br /&gt;
* string.find&lt;br /&gt;
* string.gmatch&lt;br /&gt;
&lt;br /&gt;
* string.format&lt;br /&gt;
* string.lower&lt;br /&gt;
* string.upper&lt;br /&gt;
&lt;br /&gt;
* string.rep&lt;br /&gt;
* string.reverse&lt;br /&gt;
&lt;br /&gt;
* string.sub &lt;br /&gt;
* string.gsub&lt;br /&gt;
&lt;br /&gt;
===math===&lt;br /&gt;
* math.abs&lt;br /&gt;
* math.min&lt;br /&gt;
* math.max&lt;br /&gt;
* math.ceil&lt;br /&gt;
* math.floor&lt;br /&gt;
&lt;br /&gt;
* math.huge&lt;br /&gt;
* math.modf&lt;br /&gt;
* math.fmod&lt;br /&gt;
&lt;br /&gt;
* math.random&lt;br /&gt;
&lt;br /&gt;
* math.exp&lt;br /&gt;
* math.frexp&lt;br /&gt;
* math.ldexp&lt;br /&gt;
&lt;br /&gt;
* math.log&lt;br /&gt;
* math.log10&lt;br /&gt;
&lt;br /&gt;
* math.pow&lt;br /&gt;
* math.sqrt&lt;br /&gt;
&lt;br /&gt;
* math.pi&lt;br /&gt;
* math.deg&lt;br /&gt;
* math.rad&lt;br /&gt;
&lt;br /&gt;
* math.acos&lt;br /&gt;
* math.cos&lt;br /&gt;
* math.cosh&lt;br /&gt;
&lt;br /&gt;
* math.asin&lt;br /&gt;
* math.sin&lt;br /&gt;
* math.sinh&lt;br /&gt;
&lt;br /&gt;
* math.tan&lt;br /&gt;
* math.tanh&lt;br /&gt;
* math.atan&lt;br /&gt;
* math.atan2&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
==Example programs==&lt;br /&gt;
When a program is started,&lt;br /&gt;
it is executed repeatedly (about once per second)&lt;br /&gt;
until stopped.&amp;lt;br /&amp;gt;&lt;br /&gt;
To stop it, press the STOP-button,&lt;br /&gt;
or use the command&lt;br /&gt;
: self.remove()&lt;br /&gt;
in the program.&lt;br /&gt;
&lt;br /&gt;
===HelloWorld===&lt;br /&gt;
 --HW&lt;br /&gt;
 say(&amp;quot;Hi&amp;quot;)&lt;br /&gt;
 self.remove()&lt;br /&gt;
&lt;br /&gt;
===Execute command===&lt;br /&gt;
The second parameter for say() specifies that the text goes 'to server'.&lt;br /&gt;
 --Cmd&lt;br /&gt;
 say(&amp;quot;/time&amp;quot;,true)&lt;br /&gt;
 say(&amp;quot;/who&amp;quot;,true)&lt;br /&gt;
 self.remove()&lt;br /&gt;
&lt;br /&gt;
===Report time===&lt;br /&gt;
 --TimeDate&lt;br /&gt;
 td = os.date(&amp;quot;%Y-%m-%d  %H:%M:%S&amp;quot;)&lt;br /&gt;
 say( &amp;quot;Time&amp;amp;Date: &amp;quot;..td )&lt;br /&gt;
 -- this will repeat&lt;br /&gt;
&lt;br /&gt;
===Report position===&lt;br /&gt;
Show the position of the player:&lt;br /&gt;
 --Pos.&lt;br /&gt;
 p = self.pos()  -- returns a table, with elements x, y, and z&lt;br /&gt;
 say(&amp;quot;Position: x=&amp;quot; .. p.x .. &amp;quot;, y=&amp;quot; ..  p.y .. &amp;quot;, z=&amp;quot; ..  p.z)&lt;br /&gt;
 -- this will repeat&lt;br /&gt;
&lt;br /&gt;
===Play sound===&lt;br /&gt;
This can only play soundfiles that are already on the server.&lt;br /&gt;
 --Sound&lt;br /&gt;
 self.sound(&amp;quot;default_break_glass&amp;quot;)&lt;br /&gt;
 self.remove()&lt;br /&gt;
&lt;br /&gt;
===Screenshot===&lt;br /&gt;
 -- sc&lt;br /&gt;
 minetest.take_screenshot()&lt;br /&gt;
 self.remove()&lt;br /&gt;
&lt;br /&gt;
===MiniMap===&lt;br /&gt;
Switch the minimap on / off:&lt;br /&gt;
 --mm&lt;br /&gt;
 local mmm=minetest.ui.minimap:get_mode()&lt;br /&gt;
 say('minimap-mode='..mmm)  -- 0:off, 1..6&lt;br /&gt;
 &lt;br /&gt;
 if mmm==0 then&lt;br /&gt;
   minetest.ui.minimap:show()&lt;br /&gt;
 else&lt;br /&gt;
   minetest.ui.minimap:hide()&lt;br /&gt;
 end&lt;br /&gt;
 self.remove()&lt;br /&gt;
&lt;br /&gt;
===FormSpec===&lt;br /&gt;
 -- todo&lt;br /&gt;
&lt;br /&gt;
===Calculations===&lt;br /&gt;
 --Calc&lt;br /&gt;
 if not i then i=1 end&lt;br /&gt;
 x=17/i&lt;br /&gt;
 say(i..&amp;quot; --&amp;gt; &amp;quot;..x)&lt;br /&gt;
 i=i+1&lt;br /&gt;
 if i&amp;gt;20 then say(&amp;quot;Stop.&amp;quot;); self.remove() end&lt;br /&gt;
&lt;br /&gt;
====Math====&lt;br /&gt;
 --Math&lt;br /&gt;
 if not i then&lt;br /&gt;
   i=0&lt;br /&gt;
   say(&amp;quot;pi=&amp;quot;..math.pi)&lt;br /&gt;
 end&lt;br /&gt;
 i=i+1&lt;br /&gt;
 x=math.random(1,6)&lt;br /&gt;
 say(x)&lt;br /&gt;
 if i&amp;gt;=5 then say(&amp;quot;Stop.&amp;quot;); self.remove() end&lt;br /&gt;
 -- Todo: statistics&lt;br /&gt;
&lt;br /&gt;
===Chat-listener===&lt;br /&gt;
Check the chat-messages for keywords,&lt;br /&gt;
and answer with a message.&lt;br /&gt;
 --Chat&lt;br /&gt;
 msg = self.listen_msg();&lt;br /&gt;
 if msg then&lt;br /&gt;
   p=string.find(msg,&amp;quot;help&amp;quot;)&lt;br /&gt;
   if p then say(&amp;quot;What is the problem ?&amp;quot;) end&lt;br /&gt;
   --&lt;br /&gt;
   p=string.find(msg,&amp;quot;wiki&amp;quot;)&lt;br /&gt;
   www=&amp;quot;http://wiki.minetest.net/ROBOTS_SKYBLOCK&amp;quot;&lt;br /&gt;
   if p then say(&amp;quot;see the wiki at &amp;quot;..www) end&lt;br /&gt;
   --&lt;br /&gt;
 end&lt;br /&gt;
:Note: this is an example, not ready for regular use, because it will find &lt;br /&gt;
:those keywords in a lot of places, where triggering is unintended.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Chat-bell===&lt;br /&gt;
Plays a sound when your name appears in the text on chat.&lt;br /&gt;
 --chatbell&lt;br /&gt;
 if not myname then &lt;br /&gt;
   myname=&amp;quot;hajo&amp;quot;&lt;br /&gt;
   bell  =&amp;quot;default_break_glass&amp;quot; -- can only play soundfiles from the server&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 msg = self.listen_msg();&lt;br /&gt;
 if msg then&lt;br /&gt;
   p1=string.find(msg,&amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
   if p1 then&lt;br /&gt;
     p2=string.find(msg,myname) or 0&lt;br /&gt;
     if p2&amp;gt;p1 then  -- don't trigger on your own chat&lt;br /&gt;
       self.sound(bell) &lt;br /&gt;
     end&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
====Chat-bell2====&lt;br /&gt;
Plays a sound when your name appears in the text on chat,&lt;br /&gt;
but ignore some players.&lt;br /&gt;
 --todo&lt;br /&gt;
 --chatbell2&lt;br /&gt;
 if not bell then &lt;br /&gt;
   bell1 = &amp;quot;note_a&amp;quot; -- can only play soundfiles from the server&lt;br /&gt;
   bell2 = &amp;quot;fire_flint_and_steel&amp;quot;&lt;br /&gt;
   bell3 = &amp;quot;default_break_glass&amp;quot;&lt;br /&gt;
   myname= self.name()&lt;br /&gt;
   ignorelist=&amp;quot;x y z&amp;quot;&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 msg = self.listen_msg();&lt;br /&gt;
 if msg then&lt;br /&gt;
   p=string.find(msg,&amp;quot;&amp;gt;&amp;quot;)&lt;br /&gt;
   if p then&lt;br /&gt;
     who=string.sub(msg,2,p-1)&lt;br /&gt;
     msg=string.sub(msg,p+1)&lt;br /&gt;
     bell=&amp;quot;&amp;quot;&lt;br /&gt;
     p=string.find(msg,myname) or 0&lt;br /&gt;
     p=string.find(ignorelist,who) or 0&lt;br /&gt;
     say(who..&amp;quot;&amp;gt;&amp;quot;..p)&lt;br /&gt;
 --todo...&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===Quiz-Solver===&lt;br /&gt;
At the tutorial on the server [[ROBOTS_SKYBLOCK]],&lt;br /&gt;
the robot #18 runs a math-quiz,&amp;lt;br /&amp;gt;&lt;br /&gt;
asking questions like &amp;quot;WHAT IS 12*13&amp;quot;, via chat.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following program watches for these questions,&lt;br /&gt;
calculates the result, and answers via chat.&lt;br /&gt;
&lt;br /&gt;
 -- Quiz-solver - 2017-09-03&lt;br /&gt;
 -- for tutorial-robot #18&lt;br /&gt;
 if not q then q=0 end&lt;br /&gt;
 &lt;br /&gt;
 msg = self.listen_msg();&lt;br /&gt;
 if msg then&lt;br /&gt;
   p=string.find(msg,&amp;quot;WHAT IS&amp;quot;)&lt;br /&gt;
   if p then  -- get the numbers of the math-question:&lt;br /&gt;
     q1=string.sub(msg,p+8,p+9)&lt;br /&gt;
     q2=string.sub(msg,p+11,p+12)&lt;br /&gt;
   --say(p..&amp;quot;&amp;gt;&amp;quot;..q1..&amp;quot;&amp;gt;&amp;gt;&amp;quot;..q2)&lt;br /&gt;
     n1=tonumber(q1)&lt;br /&gt;
     n2=tonumber(q2)&lt;br /&gt;
     say( n1*n2, true )&lt;br /&gt;
     q=q+1&lt;br /&gt;
     if q&amp;gt;10 then say(&amp;quot;Stop.&amp;quot;); self.remove() end&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
==Questions/Ideas/Suggestions==&lt;br /&gt;
* move SAVE-button to top&lt;br /&gt;
* strip &amp;quot;--&amp;quot; from tab-text&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;.bot 1&amp;quot; .. &amp;quot;.bot 8&amp;quot; run code from corresponding source-tab&lt;br /&gt;
* &amp;quot;.bot 0&amp;quot;  - stop program&lt;br /&gt;
* &amp;quot;.bot -1&amp;quot; - pause/unpause program&lt;br /&gt;
* &amp;quot;.bot anyText&amp;quot; - use as input to current running program&lt;br /&gt;
&lt;br /&gt;
* command / special tab for autostart-program&lt;br /&gt;
: eg. to do settings / commands when joining a server&lt;br /&gt;
&lt;br /&gt;
* if mod-storage is empty, create short demo-program in first tab &lt;br /&gt;
&lt;br /&gt;
* say(text,target) - extend target-spec (from only 'toserver' now) to 'owner' and 'userX'&lt;br /&gt;
: eg. to show debug-messages only to owner, or send PM to a certain user&lt;br /&gt;
&lt;br /&gt;
* how to catch chat-messages starting with &amp;quot;***&amp;quot; ?&lt;br /&gt;
&lt;br /&gt;
* write text to file, eg. chatlog ?&lt;br /&gt;
&lt;br /&gt;
* set player-attributes, e.g. skin&lt;br /&gt;
&lt;br /&gt;
* error when soundfile not found&lt;br /&gt;
&lt;br /&gt;
[[Category:Mods]]&lt;/div&gt;</summary>
		<author><name>&gt;Voxel</name></author>
	</entry>
</feed>