<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="lt">
	<id>https://lt.doc.boardgamearena.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sourisdudesert</id>
	<title>Board Game Arena - Naudotojo indėlis [lt]</title>
	<link rel="self" type="application/atom+xml" href="https://lt.doc.boardgamearena.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Sourisdudesert"/>
	<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/Specialus:Ind%C4%97lis/Sourisdudesert"/>
	<updated>2026-09-16T19:56:41Z</updated>
	<subtitle>Naudotojo indėlis</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Contact_us&amp;diff=945</id>
		<title>Contact us</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Contact_us&amp;diff=945"/>
		<updated>2025-06-30T15:55:27Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Board Game Arena&#039;&#039;&#039; is located in France.&lt;br /&gt;
&lt;br /&gt;
== Contact e-mail ==&lt;br /&gt;
&lt;br /&gt;
contact(at)boardgamearena.com&lt;br /&gt;
&lt;br /&gt;
We receive &#039;&#039;&#039;a lot&#039;&#039;&#039; of e-mails. Please do not send us an e-mail in any of these two cases:&lt;br /&gt;
&lt;br /&gt;
* If you want to report a bug, please do it in the corresponding forum&lt;br /&gt;
* If you want to report a player for violation of BGA policy, use the &amp;quot;report this player&amp;quot; button on his/her profile.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=899</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=899"/>
		<updated>2013-06-20T20:10:01Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* BGA unexpected exceptions logs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
BGA Studio logs are available directly from your game development interface.&lt;br /&gt;
&lt;br /&gt;
Logs allows you to check out what happened recently on server and to debug your game.&lt;br /&gt;
&lt;br /&gt;
== BGA request&amp;amp;SQL logs ==&lt;br /&gt;
&lt;br /&gt;
This log is useful:&lt;br /&gt;
* When you want to check what SQL requests has been built during a request.&lt;br /&gt;
* When you want to debug your PHP code using &amp;quot;self::trace&amp;quot;&lt;br /&gt;
* When you want to know why a request takes too many time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On this log, you can see:&lt;br /&gt;
&lt;br /&gt;
=== Your requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
Note that the best way to check your Ajax request is to read the [[http://en.doc.boardgamearena.com/Tools_and_tips_of_BGA_Studio#Input.2FOutput_debugging_section Input/Output section]].&lt;br /&gt;
&lt;br /&gt;
=== Request responses ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [notice] [T403] [4/mytest0] OK-0 169 d141 c8 e0 I9 A158 V0 T0 /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
You can recognize a response because it contains [notice]. Usually, there is one response for each request.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s details the beginning of the log:&lt;br /&gt;
* 20/06 21:50:56: the date&lt;br /&gt;
* [notice]&lt;br /&gt;
* [T403]: this is a log from table 403&lt;br /&gt;
* [4/mytest0]: this is use &amp;quot;mytest0&amp;quot;, with id 4&lt;br /&gt;
* OK-0: it means that the request ended up successfully, with no exception (expected or unexpected).&lt;br /&gt;
* 169: this is the time taken to process the request (169ms).&lt;br /&gt;
* d141: this is the total Database time used to process the request (141ms).&lt;br /&gt;
&lt;br /&gt;
=== SQL requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] 0.26 SELECT player_tokenColor FROM player WHERE player_id =&#039;4&#039;&lt;br /&gt;
&lt;br /&gt;
All requests to Database are traced in this log. You can see here the time take by the request (0,26ms).&lt;br /&gt;
&lt;br /&gt;
=== Custom trace ===&lt;br /&gt;
&lt;br /&gt;
You can use special PHP methods in your PHP code to left some trace in this log:&lt;br /&gt;
* self::trace( &amp;quot;your message here&amp;quot; );    // Display &amp;quot;your message here&amp;quot; in the log&lt;br /&gt;
* self::dump( &amp;quot;My variable&amp;quot;, $variable_to_dump );   // Display the content of $variable_to_dump in the log&lt;br /&gt;
&lt;br /&gt;
== BGA unexpected exceptions logs ==&lt;br /&gt;
&lt;br /&gt;
In this log you can check the last Unexpected exceptions from your game.&lt;br /&gt;
&lt;br /&gt;
Exceptions management on PHP side [[http://en.doc.boardgamearena.com/Main_game_logic:_yourgamename.game.php#Managing_errors_and_exceptions is described here]].&lt;br /&gt;
&lt;br /&gt;
The log displayed the complete stacktrace of the exception, so you can debug it.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=898</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=898"/>
		<updated>2013-06-20T20:07:24Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
BGA Studio logs are available directly from your game development interface.&lt;br /&gt;
&lt;br /&gt;
Logs allows you to check out what happened recently on server and to debug your game.&lt;br /&gt;
&lt;br /&gt;
== BGA request&amp;amp;SQL logs ==&lt;br /&gt;
&lt;br /&gt;
This log is useful:&lt;br /&gt;
* When you want to check what SQL requests has been built during a request.&lt;br /&gt;
* When you want to debug your PHP code using &amp;quot;self::trace&amp;quot;&lt;br /&gt;
* When you want to know why a request takes too many time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On this log, you can see:&lt;br /&gt;
&lt;br /&gt;
=== Your requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
Note that the best way to check your Ajax request is to read the [[http://en.doc.boardgamearena.com/Tools_and_tips_of_BGA_Studio#Input.2FOutput_debugging_section Input/Output section]].&lt;br /&gt;
&lt;br /&gt;
=== Request responses ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [notice] [T403] [4/mytest0] OK-0 169 d141 c8 e0 I9 A158 V0 T0 /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
You can recognize a response because it contains [notice]. Usually, there is one response for each request.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s details the beginning of the log:&lt;br /&gt;
* 20/06 21:50:56: the date&lt;br /&gt;
* [notice]&lt;br /&gt;
* [T403]: this is a log from table 403&lt;br /&gt;
* [4/mytest0]: this is use &amp;quot;mytest0&amp;quot;, with id 4&lt;br /&gt;
* OK-0: it means that the request ended up successfully, with no exception (expected or unexpected).&lt;br /&gt;
* 169: this is the time taken to process the request (169ms).&lt;br /&gt;
* d141: this is the total Database time used to process the request (141ms).&lt;br /&gt;
&lt;br /&gt;
=== SQL requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] 0.26 SELECT player_tokenColor FROM player WHERE player_id =&#039;4&#039;&lt;br /&gt;
&lt;br /&gt;
All requests to Database are traced in this log. You can see here the time take by the request (0,26ms).&lt;br /&gt;
&lt;br /&gt;
=== Custom trace ===&lt;br /&gt;
&lt;br /&gt;
You can use special PHP methods in your PHP code to left some trace in this log:&lt;br /&gt;
* self::trace( &amp;quot;your message here&amp;quot; );    // Display &amp;quot;your message here&amp;quot; in the log&lt;br /&gt;
* self::dump( &amp;quot;My variable&amp;quot;, $variable_to_dump );   // Display the content of $variable_to_dump in the log&lt;br /&gt;
&lt;br /&gt;
== BGA unexpected exceptions logs ==&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=897</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=897"/>
		<updated>2013-06-20T20:06:31Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* SQL requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
BGA Studio logs are available directly from your game development interface.&lt;br /&gt;
&lt;br /&gt;
Logs allows you to check out what happened recently on server and to debug your game.&lt;br /&gt;
&lt;br /&gt;
== BGA request&amp;amp;SQL logs ==&lt;br /&gt;
&lt;br /&gt;
This log is useful:&lt;br /&gt;
* When you want to check what SQL requests has been built during a request.&lt;br /&gt;
* When you want to debug your PHP code using &amp;quot;self::trace&amp;quot;&lt;br /&gt;
* When you want to know why a request takes too many time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On this log, you can see:&lt;br /&gt;
&lt;br /&gt;
=== Your requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
Note that the best way to check your Ajax request is to read the [[http://en.doc.boardgamearena.com/Tools_and_tips_of_BGA_Studio#Input.2FOutput_debugging_section Input/Output section]].&lt;br /&gt;
&lt;br /&gt;
=== Request responses ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [notice] [T403] [4/mytest0] OK-0 169 d141 c8 e0 I9 A158 V0 T0 /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
You can recognize a response because it contains [notice]. Usually, there is one response for each request.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s details the beginning of the log:&lt;br /&gt;
* 20/06 21:50:56: the date&lt;br /&gt;
* [notice]&lt;br /&gt;
* [T403]: this is a log from table 403&lt;br /&gt;
* [4/mytest0]: this is use &amp;quot;mytest0&amp;quot;, with id 4&lt;br /&gt;
* OK-0: it means that the request ended up successfully, with no exception (expected or unexpected).&lt;br /&gt;
* 169: this is the time taken to process the request (169ms).&lt;br /&gt;
* d141: this is the total Database time used to process the request (141ms).&lt;br /&gt;
&lt;br /&gt;
=== SQL requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] 0.26 SELECT player_tokenColor FROM player WHERE player_id =&#039;4&#039;&lt;br /&gt;
&lt;br /&gt;
All requests to Database are traced in this log. You can see here the time take by the request (0,26ms).&lt;br /&gt;
&lt;br /&gt;
=== Custom trace ===&lt;br /&gt;
&lt;br /&gt;
You can use special PHP methods in your PHP code to left some trace in this log:&lt;br /&gt;
* self::trace( &amp;quot;your message here&amp;quot; );    // Display &amp;quot;your message here&amp;quot; in the log&lt;br /&gt;
* self::dump( &amp;quot;My variable&amp;quot;, $variable_to_dump );   // Display the content of $variable_to_dump in the log&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=896</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=896"/>
		<updated>2013-06-20T20:02:52Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* BGA request&amp;amp;SQL logs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
BGA Studio logs are available directly from your game development interface.&lt;br /&gt;
&lt;br /&gt;
Logs allows you to check out what happened recently on server and to debug your game.&lt;br /&gt;
&lt;br /&gt;
== BGA request&amp;amp;SQL logs ==&lt;br /&gt;
&lt;br /&gt;
This log is useful:&lt;br /&gt;
* When you want to check what SQL requests has been built during a request.&lt;br /&gt;
* When you want to debug your PHP code using &amp;quot;self::trace&amp;quot;&lt;br /&gt;
* When you want to know why a request takes too many time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On this log, you can see:&lt;br /&gt;
&lt;br /&gt;
=== Your requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
Note that the best way to check your Ajax request is to read the [[http://en.doc.boardgamearena.com/Tools_and_tips_of_BGA_Studio#Input.2FOutput_debugging_section Input/Output section]].&lt;br /&gt;
&lt;br /&gt;
=== Request responses ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [notice] [T403] [4/mytest0] OK-0 169 d141 c8 e0 I9 A158 V0 T0 /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
You can recognize a response because it contains [notice]. Usually, there is one response for each request.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s details the beginning of the log:&lt;br /&gt;
* 20/06 21:50:56: the date&lt;br /&gt;
* [notice]&lt;br /&gt;
* [T403]: this is a log from table 403&lt;br /&gt;
* [4/mytest0]: this is use &amp;quot;mytest0&amp;quot;, with id 4&lt;br /&gt;
* OK-0: it means that the request ended up successfully, with no exception (expected or unexpected).&lt;br /&gt;
* 169: this is the time taken to process the request (169ms).&lt;br /&gt;
* d141: this is the total Database time used to process the request (141ms).&lt;br /&gt;
&lt;br /&gt;
=== SQL requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] 0.26 SELECT player_tokenColor FROM player WHERE player_id =&#039;4&#039;&lt;br /&gt;
&lt;br /&gt;
All requests to Database are traced in this log. You can see here the time take by the request (0,26ms).&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=895</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=895"/>
		<updated>2013-06-20T19:58:49Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Request responses */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
BGA Studio logs are available directly from your game development interface.&lt;br /&gt;
&lt;br /&gt;
Logs allows you to check out what happened recently on server and to debug your game.&lt;br /&gt;
&lt;br /&gt;
== BGA request&amp;amp;SQL logs ==&lt;br /&gt;
&lt;br /&gt;
On this log, you can see:&lt;br /&gt;
&lt;br /&gt;
=== Your requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
Note that the best way to check your Ajax request is to read the [[http://en.doc.boardgamearena.com/Tools_and_tips_of_BGA_Studio#Input.2FOutput_debugging_section Input/Output section]].&lt;br /&gt;
&lt;br /&gt;
=== Request responses ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [notice] [T403] [4/mytest0] OK-0 169 d141 c8 e0 I9 A158 V0 T0 /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
You can recognize a response because it contains [notice]. Usually, there is one response for each request.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s details the beginning of the log:&lt;br /&gt;
* 20/06 21:50:56: the date&lt;br /&gt;
* [notice]&lt;br /&gt;
* [T403]: this is a log from table 403&lt;br /&gt;
* [4/mytest0]: this is use &amp;quot;mytest0&amp;quot;, with id 4&lt;br /&gt;
* OK-0: it means that the request ended up successfully, with no exception (expected or unexpected).&lt;br /&gt;
* 169: this is the time taken to process the request (169ms).&lt;br /&gt;
* d141: this is the total Database time used to process the request (141ms).&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=894</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=894"/>
		<updated>2013-06-20T19:58:36Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
BGA Studio logs are available directly from your game development interface.&lt;br /&gt;
&lt;br /&gt;
Logs allows you to check out what happened recently on server and to debug your game.&lt;br /&gt;
&lt;br /&gt;
== BGA request&amp;amp;SQL logs ==&lt;br /&gt;
&lt;br /&gt;
On this log, you can see:&lt;br /&gt;
&lt;br /&gt;
=== Your requests ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [info] [T403] [4/mytest0] /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
Note that the best way to check your Ajax request is to read the [[http://en.doc.boardgamearena.com/Tools_and_tips_of_BGA_Studio#Input.2FOutput_debugging_section Input/Output section]].&lt;br /&gt;
&lt;br /&gt;
=== Request responses ===&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
  20/06 21:50:56 [notice] [T403] [4/mytest0] OK-0 169 d141 c8 e0 I9 A158 V0 T0 /cinco/cinco/exchange4Cards.html?id=4&amp;amp;lock=97d1c7a1-903a-4d1f-8206-de39ce8204fc&amp;amp;table=403&amp;amp;testuser=4&amp;amp;dojo.preventCache=1371757856044&lt;br /&gt;
&lt;br /&gt;
You can recognize a response because it contains [notice]. Usually, there is one response for each request.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s details the beginning of the log:&lt;br /&gt;
 * 20/06 21:50:56: the date&lt;br /&gt;
 * [notice]&lt;br /&gt;
 * [T403]: this is a log from table 403&lt;br /&gt;
 * [4/mytest0]: this is use &amp;quot;mytest0&amp;quot;, with id 4&lt;br /&gt;
 * OK-0: it means that the request ended up successfully, with no exception (expected or unexpected).&lt;br /&gt;
 * 169: this is the time taken to process the request (169ms).&lt;br /&gt;
 * d141: this is the total Database time used to process the request (141ms).&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=893</id>
		<title>Studio logs</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_logs&amp;diff=893"/>
		<updated>2013-06-20T19:19:29Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: Created page with &amp;quot;(to be written)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(to be written)&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio&amp;diff=892</id>
		<title>Studio</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio&amp;diff=892"/>
		<updated>2013-06-20T19:19:17Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* BGA Studio user guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Bga_studio_small.jpg]]&lt;br /&gt;
&lt;br /&gt;
Note: Please DO NOT translate Studio Documentation, so that there can be one place where you can find the latest information available.&lt;br /&gt;
&lt;br /&gt;
== What is Board Game Arena Studio? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Board Game Arena Studio&#039;&#039;&#039; is a platform to build online board game adaptation using the Board Game Arena platform.&lt;br /&gt;
&lt;br /&gt;
It is open to any gamer with development skills :)&lt;br /&gt;
&lt;br /&gt;
See announcement here:&lt;br /&gt;
http://forum.boardgamearena.com/viewtopic.php?f=10&amp;amp;t=1973&lt;br /&gt;
&lt;br /&gt;
== Discover BGA Studio in 5 presentations ==&lt;br /&gt;
&lt;br /&gt;
Why, how, what... to start discovering BGA Studio, we prepared 5 &amp;quot;powerpoint&amp;quot; presentations for you:&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/5-reasons-why-you-should-use-bga-studio-for-your-online-board-game 5 reasons why you should use BGA Studio for your online board game]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/the-8-steps-to-create-a-board-game-on-board-game-arena The 8 steps to create a board game on Board Game Arena]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/the-bga-framework-at-a-glance The BGA Framework at a glance]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/bga-studio-focus-on-bga-game-state-machine Focus on BGA game state machine]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/bga-studio-guidelines BGA developers guidelines]&lt;br /&gt;
&lt;br /&gt;
== How to join the BGA developer team? ==&lt;br /&gt;
&lt;br /&gt;
Please see this page: [[How to join BGA developer team?]]&lt;br /&gt;
&lt;br /&gt;
== Great, I&#039;m in! ... How should I start? ==&lt;br /&gt;
&lt;br /&gt;
If you didn&#039;t already, check the presentations at the top of this page to get the basics.&lt;br /&gt;
&lt;br /&gt;
Then, you should checkout the [[First steps with BGA Studio]] to make sure that runs fine.&lt;br /&gt;
&lt;br /&gt;
After that, we advise you to take a peek at one or both of these two game creation tutorials:&lt;br /&gt;
* [[Tutorial reversi]]&lt;br /&gt;
* [[Tutorial gomoku]]&lt;br /&gt;
&lt;br /&gt;
Then start editing files and see what happens! ;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions, please check out the &#039;&#039;&#039;[[Studio FAQ]]&#039;&#039;&#039; first, then if you didn&#039;t find the answer you were looking for, please post your question on the [http://forum.boardgamearena.com/viewforum.php?f=12 &#039;&#039;&#039;development forum&#039;&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
== BGA Studio documentation ==&lt;br /&gt;
&lt;br /&gt;
=== BGA Studio Framework reference ===&lt;br /&gt;
&lt;br /&gt;
This part of the documentation focuses on the development framework itself: functions and methods available to build your game.&lt;br /&gt;
&lt;br /&gt;
[[Studio file reference|File structure of a BGA game]]&lt;br /&gt;
&lt;br /&gt;
==== Game logic ====&lt;br /&gt;
&lt;br /&gt;
* [[Main game logic: yourgamename.game.php]]&lt;br /&gt;
* [[Your game state machine: states.inc.php]]&lt;br /&gt;
* [[Game database model: dbmodel.sql]]&lt;br /&gt;
* [[Players actions: yourgamename.action.php]]&lt;br /&gt;
* [[Game material description: material.inc.php]]&lt;br /&gt;
* [[Game statistics: stats.inc.php]]&lt;br /&gt;
&lt;br /&gt;
==== Game interface ====&lt;br /&gt;
&lt;br /&gt;
* [[Game interface logic: yourgamename.js]]&lt;br /&gt;
* [[Game art: img directory]]&lt;br /&gt;
* [[Game interface stylesheet: yourgamename.css]]&lt;br /&gt;
* [[Game layout: view and template: yourgamename.view.php and yourgamename_yourgamename.tpl]]&lt;br /&gt;
&lt;br /&gt;
==== Other components ====&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] (how to make your game translatable)&lt;br /&gt;
* [[Game options and preferences: gameoptions.inc.php]]&lt;br /&gt;
* [[Game replay]]&lt;br /&gt;
&lt;br /&gt;
=== BGA Studio game components reference ===&lt;br /&gt;
&lt;br /&gt;
Game components are useful tools you can use in your game adaptations.&lt;br /&gt;
&lt;br /&gt;
* [[Deck]]: a PHP component to manage cards (deck, hands, picking cards, moving cards, shuffle deck, ...).&lt;br /&gt;
* [[Counter]]: a JS component to manage a counter that can increase/decrease (ex: player&#039;s score).&lt;br /&gt;
* [[Draggable]]: a JS component to manage drag&#039;n&#039;drop actions.&lt;br /&gt;
* [[ExpandableSection]]: a JS component to manage a rectangular block of HTML than can be displayed/hidden.&lt;br /&gt;
* [[Scrollmap]]: a JS component to manage a scrollable game area (useful when the game area can be infinite. Examples:  Saboteur or Takenoko games).&lt;br /&gt;
* [[Stock]]: a JS component to manage and display a set of game elements displayed at a position.&lt;br /&gt;
* [[Wrapper]]: a JS component to wrap a  &amp;amp;lt;div&amp;amp;gt; element around his child, even if these elements are absolute positioned.&lt;br /&gt;
* [[Zone]]: a JS component to manage a zone of the board where several game elements can come and leave, but should be well displayed together (See for example: token&#039;s places at Can&#039;t Stop).&lt;br /&gt;
&lt;br /&gt;
=== BGA Studio user guide ===&lt;br /&gt;
&lt;br /&gt;
This part of the documentation is a user guide for the BGA Studio online development environment.&lt;br /&gt;
&lt;br /&gt;
* [[Tools and tips of BGA Studio]]&lt;br /&gt;
&lt;br /&gt;
* [[Practical debugging]]&lt;br /&gt;
&lt;br /&gt;
* [[Studio logs]]&lt;br /&gt;
&lt;br /&gt;
* [[Studio back-office]]&lt;br /&gt;
&lt;br /&gt;
* [[Studio FAQ]]&lt;br /&gt;
&lt;br /&gt;
== BGA Developer team organization ==&lt;br /&gt;
&lt;br /&gt;
* [[Steps to create a BGA game]]&lt;br /&gt;
* [[Post-release phase]]&lt;br /&gt;
&lt;br /&gt;
== Other resources ==&lt;br /&gt;
&lt;br /&gt;
[http://forum.boardgamearena.com/viewforum.php?f=12 Development forum]&lt;br /&gt;
&lt;br /&gt;
[http://forum.boardgamearena.com/viewforum.php?f=4 Bugs forum]&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Club_Board_Game_Arena&amp;diff=876</id>
		<title>Club Board Game Arena</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Club_Board_Game_Arena&amp;diff=876"/>
		<updated>2013-06-10T20:09:36Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Why can&#039;t you just have a standard donation system where I can choose any money amount ?==&lt;br /&gt;
&lt;br /&gt;
With this &amp;quot;club&amp;quot; system, we try to highlight players who supported this website recently or do so on a regular basis. Depending on the amount of your donation, you are a member of the club for a given period of time.&lt;br /&gt;
&lt;br /&gt;
Many websites are using a more classical approach with a simple &amp;quot;donation box&amp;quot;. By experience, we know that these websites rely on just a few generous users. Board Game Arena chooses to set 3 fixed amounts for donations in order to rely on a bigger number of small donors.&lt;br /&gt;
&lt;br /&gt;
==Is it mandatory to join the club ?==&lt;br /&gt;
&lt;br /&gt;
Of course not.&lt;br /&gt;
&lt;br /&gt;
You can play for free without any limitation even if you are not a member of the club: Board Game Arena is a free service. Statistics are just an extra : you don&#039;t need statistics to play and have fun, don&#039;t you ? As a matter of fact, most players are not club members.&lt;br /&gt;
&lt;br /&gt;
==What is a beginner account ? http://en.boardgamearena.com/theme/img/accounttypes/beginner.gif ==&lt;br /&gt;
&lt;br /&gt;
When you join Board Game Arena, your get a &amp;quot;beginner account&amp;quot; (http://en.boardgamearena.com/theme/img/accounttypes/beginner.gif) for 30 days. This beginner account allow you to view your own ELO ranking (http://en.boardgamearena.com/theme/img/common/rank.png) for each game. After 30 days, your account becomes a standard &#039;&#039;&#039;non member&#039;&#039;&#039; account (http://en.boardgamearena.com/theme/img/accounttypes/free.gif).&lt;br /&gt;
&lt;br /&gt;
==What becomes of the money ?==&lt;br /&gt;
&lt;br /&gt;
Board Game Arena service is managed by a semi-professional team who needs money to make it run (in particular: hosting cost).&lt;br /&gt;
&lt;br /&gt;
Player donations are used to develop this website (new features, new games), to make it run (hosting, maintenance), to build the player community (events)...&lt;br /&gt;
&lt;br /&gt;
A big &amp;quot;thank you&amp;quot; to all members of the Board Game Arena Club  whose contributions allow this website to exist for the enjoyment of everyone !&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=862</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=862"/>
		<updated>2013-05-30T10:39:38Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Table description&lt;br /&gt;
 | Inappropriate table description&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Table description is inappropriate when it contains insults, insanity, or tend to discriminate a group of people. &lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Kingmaking&lt;br /&gt;
 | Kingmaking action during a game&lt;br /&gt;
 | The report must contains the table id, the exact move number, and the exact explanation why this is a kingmaking action. To declare a player guilty, the player must have played an obvious move against his own interest, and it have to be a good player (clues: his ELO, number of game played, ...). As the difference between a mistake and a kingmaking action is very tight, one kingmaking report is not enough to find a player guilty: only players who regularly play against their interest should be found guilty.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Bug exploit&lt;br /&gt;
 | Exploit a known bug during a game&lt;br /&gt;
 | The bug must have been reported in the forum, and an exact reference to this bug must be in the report, with the table id and the move number. Minor bugs that can be considered as &amp;quot;variants&amp;quot; are NOT concerned (ex: pick 4 cards instead of 3). Bugs that violate the spirit of the game are concerned.&lt;br /&gt;
 | No penalty applies: if there is a bug that has been widely used for a game, a global ELO reset (or an ELO adjustment for players who exploited the bug) will be done. &lt;br /&gt;
 |-&lt;br /&gt;
 ! Private information&lt;br /&gt;
 | Some player gives some private information during the game&lt;br /&gt;
 | Players have the right to pretend things during a game. As these infos could be true or false, and could be exploited by other players too, moderators should be cautious when judging these cases. This case concerns players that had a strong voluntee to kill the pleasure of the game by giving some private information during the game.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Multiple accounts&lt;br /&gt;
 | A player is using multiple accounts (most of the time: to boost his ELO rank)&lt;br /&gt;
 | The report must contains the usernames of all intimidated accounts, and the reason why the report author think that multiple accounts are used. This is very difficult to find out if different accounts corresponds to different person. For example: BGA accepts that multiple players plays from the same IP adress, to allow people from the same family to play at the same table. In addition, some players are using multiple accounts, but these accounts are not playing together (which is acceptable). Strong tools are available for moderators to detect multiple accounts that are used the wrong way.&lt;br /&gt;
 | For secondary accounts: ban forever. For main account: ELO reseted to 1500 / ELO penalty for all games.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Something else&lt;br /&gt;
 | Tranlation stealing / vandalism&lt;br /&gt;
 | The player is writing inapropriate / poor quality translations (or writes a lot of very minor modifications to someone else translation) to gain free club membership, &lt;br /&gt;
 | Immediate ban from the website (to avoid vandalism).&lt;br /&gt;
 |-&lt;br /&gt;
 ! Something else&lt;br /&gt;
 | Player is slow to play&lt;br /&gt;
 | Players have the right to think as long as they do not go over their alloted time. If the player is slow on purpose, the good answer is: thumb down.&lt;br /&gt;
 | No penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Something else&lt;br /&gt;
 | Player quit the game before the end&lt;br /&gt;
 | In this case, player automatically gets a ELO penalty + a red mark on his profile. There is no need to do something else.&lt;br /&gt;
 | No penalty&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=861</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=861"/>
		<updated>2013-05-30T10:34:18Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Table description&lt;br /&gt;
 | Inappropriate table description&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Table description is inappropriate when it contains insults, insanity, or tend to discriminate a group of people. &lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Kingmaking&lt;br /&gt;
 | Kingmaking action during a game&lt;br /&gt;
 | The report must contains the table id, the exact move number, and the exact explanation why this is a kingmaking action. To declare a player guilty, the player must have played an obvious move against his own interest, and it have to be a good player (clues: his ELO, number of game played, ...). As the difference between a mistake and a kingmaking action is very tight, one kingmaking report is not enough to find a player guilty: only players who regularly play against their interest should be found guilty.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Bug exploit&lt;br /&gt;
 | Exploit a known bug during a game&lt;br /&gt;
 | The bug must have been reported in the forum, and an exact reference to this bug must be in the report, with the table id and the move number. Minor bugs that can be considered as &amp;quot;variants&amp;quot; are NOT concerned (ex: pick 4 cards instead of 3). Bugs that violate the spirit of the game are concerned.&lt;br /&gt;
 | No penalty applies: if there is a bug that has been widely used for a game, a global ELO reset (or an ELO adjustment for players who exploited the bug) will be done. &lt;br /&gt;
 |-&lt;br /&gt;
 ! Private information&lt;br /&gt;
 | Some player gives some private information during the game&lt;br /&gt;
 | Players have the right to pretend things during a game. As these infos could be true or false, and could be exploited by other players too, moderators should be cautious when judging these cases. This case concerns players that had a strong voluntee to kill the pleasure of the game by giving some private information during the game.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Multiple accounts&lt;br /&gt;
 | A player is using multiple accounts (most of the time: to boost his ELO rank)&lt;br /&gt;
 | The report must contains the usernames of all intimidated accounts, and the reason why the report author think that multiple accounts are used. This is very difficult to find out if different accounts corresponds to different person. For example: BGA accepts that multiple players plays from the same IP adress, to allow people from the same family to play at the same table. In addition, some players are using multiple accounts, but these accounts are not playing together (which is acceptable). Strong tools are available for moderators to detect multiple accounts that are used the wrong way.&lt;br /&gt;
 | For secondary accounts: ban forever. For main account: ELO reseted to 1500 / ELO penalty for all games.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=860</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=860"/>
		<updated>2013-05-30T10:25:54Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Table description&lt;br /&gt;
 | Inappropriate table description&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Table description is inappropriate when it contains insults, insanity, or tend to discriminate a group of people. &lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Kingmaking&lt;br /&gt;
 | Kingmaking action during a game&lt;br /&gt;
 | The report must contains the table id, the exact move number, and the exact explanation why this is a kingmaking action. To declare a player guilty, the player must have played an obvious move against his own interest, and it have to be a good player (clues: his ELO, number of game played, ...). As the difference between a mistake and a kingmaking action is very tight, one kingmaking report is not enough to find a player guilty: only players who regularly play against their interest should be found guilty.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Bug exploit&lt;br /&gt;
 | Exploit a known bug during a game&lt;br /&gt;
 | The bug must have been reported in the forum, and an exact reference to this bug must be in the report, with the table id and the move number. Minor bugs that can be considered as &amp;quot;variants&amp;quot; are NOT concerned (ex: pick 4 cards instead of 3). Bugs that violate the spirit of the game are concerned.&lt;br /&gt;
 | No penalty applies: if there is a bug that has been widely used for a game, a global ELO reset (or an ELO adjustment for players who exploited the bug) will be done. &lt;br /&gt;
 |-&lt;br /&gt;
 ! Private information&lt;br /&gt;
 | Some player gives some private information during the game&lt;br /&gt;
 | Players have the right to pretend things during a game. As these infos could be true or false, and could be exploited by other players too, moderators should be cautious when judging these cases. This case concerns players that had a strong voluntee to kill the pleasure of the game by giving some private information during the game.&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=859</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=859"/>
		<updated>2013-05-30T10:21:14Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Table description&lt;br /&gt;
 | Inappropriate table description&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Table description is inappropriate when it contains insults, insanity, or tend to discriminate a group of people. &lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Kingmaking&lt;br /&gt;
 | Kingmaking action during a game&lt;br /&gt;
 | The report must contains the table id, the exact move number, and the exact explanation why this is a kingmaking action. To declare a player guilty, the player must have played an obvious move against his own interest, and it have to be a good player (clues: his ELO, number of game played, ...). As the difference between a mistake and a kingmaking action is very tight, one kingmaking report is not enough to find a player guilty: only players who regularly play against their interest should be found guilty.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Bug exploit&lt;br /&gt;
 | Exploit a known bug during a game&lt;br /&gt;
 | The bug must have been reported in the forum, and an exact reference to this bug must be in the report, with the table id and the move number. Minor bugs that can be considered as &amp;quot;variants&amp;quot; are NOT concerned (ex: pick 4 cards instead of 3). Bugs that violate the spirit of the game are concerned.&lt;br /&gt;
 | No penalty applies: if there is a bug that has been widely used for a game, a global ELO reset (or an ELO adjustment for players who exploited the bug) will be done. &lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=858</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=858"/>
		<updated>2013-05-30T10:20:40Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Table description&lt;br /&gt;
 | Inappropriate table description&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Table description is inappropriate when it contains insults, insanity, or tend to discriminate a group of people. &lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Kingmaking&lt;br /&gt;
 | Kingmaking action during a game&lt;br /&gt;
 | The report must contains the table id, the exact move number, and the exact explanation why this is a kingmaking action. To declare a player guilty, the player must have played an obvious move against his own interest, and it have to be a good player (clues: his ELO, number of game played, ...). As the difference between a mistake and a kingmaking action is very tight, one kingmaking report is not enough to find a player guilty: only players who regularly play against their interest should be found guilty.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. Relapses can lead to higher reputation points penalties.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Bug exploit&lt;br /&gt;
 | Exploit a known bug during a game&lt;br /&gt;
 | The bug must have been reported in the forum, and an exact reference to this bug must be in the report, with the table id and the move number. Minor bugs that can be considered as &amp;quot;variants&amp;quot; are NOT concerned (ex: pick 4 cards instead of 3). Bugs that violate the spirit of the game are concerned.&lt;br /&gt;
 | No penalty applies: if there is a bug that has been widely used for a game, a global ELO reset will be done. &lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=857</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=857"/>
		<updated>2013-05-30T10:14:21Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Table description&lt;br /&gt;
 | Inappropriate table description&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Table description is inappropriate when it contains insults, insanity, or tend to discriminate a group of people. &lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Kingmaking&lt;br /&gt;
 | Kingmaking action during a game&lt;br /&gt;
 | The report must contains the table id, the exact move number, and the exact explanation why this is a kingmaking action. To declare a player guilty, the player must have played an obvious move against his own interest, and it have to be a good player (clues: his ELO, number of game played, ...). As the difference between a mistake and a kingmaking action is very tight, one kingmaking report is not enough to find a player guilty: only players who regularly play against their interest should be found guilty.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should warn the player that this is a only small warning. &lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=856</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=856"/>
		<updated>2013-05-30T10:07:32Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Player profile influence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
=== Incomplete reports ===&lt;br /&gt;
&lt;br /&gt;
Analyzing reports takes a lot of time, and many reports are received. If any needed information is missing in the report, moderators may (and most of the time, should) close the report.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=855</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=855"/>
		<updated>2013-05-30T10:05:16Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate username&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Username are inappropriate when this is obviously an insult for many people. Moderators shouldn&#039;t moderate a username that is insulting by accident in a language that is not widely used on BGA.&lt;br /&gt;
 | Ban from the website. Moderators should explain that the player is welcome with another username on BGA. Note that if the player has a long seniority on BGA (=many games played), moderators should be very cautious on the case: if no one notice the username until now, it is probably not inappropriate.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=854</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=854"/>
		<updated>2013-05-30T09:59:42Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Avatar&lt;br /&gt;
 | Inappropriate avatar: porn, extreme violence, advertising...&lt;br /&gt;
 | If needed, report author should explain why this is inappropriate. Avatar is really inappropriate in 3 cases:&lt;br /&gt;
1°) It can hurt underage players (porn, extreme violence)&lt;br /&gt;
2°) This is advertisement / this violate some intellectual property&lt;br /&gt;
3°) The avatar contains a reference that discriminate a group of people (ex: nazi cross)&lt;br /&gt;
 | Avatar immediate removal + Devilkin 3 days to devilkin forever depending on the gravity. In any case: the player should be warn that this is the last warning before ban. If the player obviously don&#039;t measure the meaning of the avatar, the penalty can be reduced.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=853</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=853"/>
		<updated>2013-05-30T09:51:19Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Aggressive attitude&lt;br /&gt;
 | Aggressive attitude during a game: can&#039;t wait the other player, provocation, ...&lt;br /&gt;
 | As a rule of thumb: as long as there is no insult, this is not an issue: thumb down are the solution. BUT, if the player is really borderline and should be warned, a moderation action is needed.&lt;br /&gt;
 | -1 to -10 reputation penalty. Moderators should explain that this is a small warning, and that a change of attitude is needed.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |-&lt;br /&gt;
&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=852</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=852"/>
		<updated>2013-05-30T09:42:40Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* General rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
=== Player profile influence ===&lt;br /&gt;
&lt;br /&gt;
The player profile IS taken into account to determine if the player is guilty or not guilty. Moderators gives more credit to players with a good profile than the other.&lt;br /&gt;
&lt;br /&gt;
The player profile is NOT taken into account when choosing the penalty if the player is found guilty.&lt;br /&gt;
&lt;br /&gt;
Good profile elements are:&lt;br /&gt;
* A good thumb up / thumb down ratio.&lt;br /&gt;
* Player is registered since a long time / has a lot of games player.&lt;br /&gt;
* Players is involved in the website (ex: realized translations).&lt;br /&gt;
* Player is supporting BGA (member of the club).&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=851</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=851"/>
		<updated>2013-05-30T09:38:11Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults during a game, on table chat&lt;br /&gt;
 | Must be present in the report: table ID, and the insults terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on general chat&lt;br /&gt;
 | Must be present in the report: the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 30 days for small insults and insanity, Devilkin forever for real insults. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Insults&lt;br /&gt;
 | Insults on public space (wall, forum, comments...)&lt;br /&gt;
 | Must be present in the report: where to find the insult, the insult terms. If the insult is not in English, or if the insult is not obvious, the report author must specify why this is insulting.&lt;br /&gt;
 | Devilkin 3 days for small insults and insanity, Devilkin 30 days for real insults. Smaller penalty (ex: 1 day) can be applied if this was obviously a stupid joke. In any case: the player should be warn that this is the last warning before ban.&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=850</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=850"/>
		<updated>2013-05-30T09:29:32Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 1A&lt;br /&gt;
 | Donnée 1B&lt;br /&gt;
 | Donnée 1C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 2A&lt;br /&gt;
 | Donnée 2B&lt;br /&gt;
 | Donnée 2C&lt;br /&gt;
 |-&lt;br /&gt;
 ! Donnée 1A&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=849</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=849"/>
		<updated>2013-05-30T09:28:47Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* General rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Relapse ===&lt;br /&gt;
&lt;br /&gt;
In case there is a relapse, the penalty increases exponentially.&lt;br /&gt;
&lt;br /&gt;
This is the moderator job to determine the right penalty to apply in this case, considering the fact that the player has been warned by a first penalty.&lt;br /&gt;
&lt;br /&gt;
Moderators should consider there is a relapse only if the new wrong action occurs AFTER the previous penalty has been applied and the associated moderation email has been sent.&lt;br /&gt;
&lt;br /&gt;
Considering it&#039;s a lot of work to analyze reports about players who do the same action again and again, the &amp;quot;ban forever&amp;quot; penalty can be applied to any case if the player relapses.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 1&lt;br /&gt;
 | Donnée 1A&lt;br /&gt;
 | Donnée 1B&lt;br /&gt;
 | Donnée 1C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 2&lt;br /&gt;
 | Donnée 2A&lt;br /&gt;
 | Donnée 2B&lt;br /&gt;
 | Donnée 2C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 3&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=848</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=848"/>
		<updated>2013-05-30T09:19:59Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Penalty grid */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Category&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Case type&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Details&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Standard penalty&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 1&lt;br /&gt;
 | Donnée 1A&lt;br /&gt;
 | Donnée 1B&lt;br /&gt;
 | Donnée 1C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 2&lt;br /&gt;
 | Donnée 2A&lt;br /&gt;
 | Donnée 2B&lt;br /&gt;
 | Donnée 2C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 3&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=847</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=847"/>
		<updated>2013-05-30T09:18:38Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;br /&gt;
&lt;br /&gt;
== Penalty grid ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
|+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Titre col. A&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Titre col. B&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Titre col. C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 1&lt;br /&gt;
 | Donnée 1A&lt;br /&gt;
 | Donnée 1B&lt;br /&gt;
 | Donnée 1C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 2&lt;br /&gt;
 | Donnée 2A&lt;br /&gt;
 | Donnée 2B&lt;br /&gt;
 | Donnée 2C&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Titre ligne 3&lt;br /&gt;
 | Donnée 3A&lt;br /&gt;
 | Donnée 3B&lt;br /&gt;
 | Donnée 3C&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=846</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=846"/>
		<updated>2013-05-30T09:16:56Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== General rules ==&lt;br /&gt;
&lt;br /&gt;
=== Beyond a Reasonable Doubt ===&lt;br /&gt;
&lt;br /&gt;
In case there is a any possible doubt, a player should be considered not guilty.&lt;br /&gt;
&lt;br /&gt;
=== Moderators independance ===&lt;br /&gt;
&lt;br /&gt;
Moderators must not process reports if they know the protagonists (author or targeted player). Playing online with the protagonist does not mean to &amp;quot;know&amp;quot; them. &amp;quot;Know&amp;quot; means: know them personally or playing with them online very regularly.&lt;br /&gt;
&lt;br /&gt;
=== Appeal ===&lt;br /&gt;
&lt;br /&gt;
Players has the right to appeal against the moderation decision, by forwarding received moderation email to &amp;quot;contact@boardgamearena.com&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
They &#039;&#039;&#039;MUST&#039;&#039;&#039; explain in the email why the moderator did not respect the BGA moderation policy. If the explanation is not convincing, the email will be ignored. If the player is obviously guilty and if the moderation policy hasn&#039;t been violated, BGA admins will double the penalties.&lt;br /&gt;
&lt;br /&gt;
=== Penalty grid ===&lt;br /&gt;
&lt;br /&gt;
Moderators should respect the penalties grid as much as possible. However, they have the right to adjust the penalty depending on the gravity of the case. The following situation can lead moderators to increase the penalties:&lt;br /&gt;
_ the player has been reported several time for the same type of case.&lt;br /&gt;
_ the player wrong action can be obviously qualified by one or several of the following terms: racism, xenophobia, homophobia, sexism, and as a rule of thumb any type of discrimination against a particular category of people.&lt;br /&gt;
_ on case there is a provocation, the penalty may be be reduced a little, and the author of the provocation may have a warning BUT, as everyone should keep quiet and polite even if there are provoked, this is a moderator choice.&lt;br /&gt;
&lt;br /&gt;
=== Special urgency ban procedure ===&lt;br /&gt;
&lt;br /&gt;
Whatever the case type, moderators has the right to ban a player from the website (forever) if this player set up a situation that is out of control and must be stopped within hours. This special procedure should only be used if there is an immediate danger for the community (ex: vandalism, flow of insults, massive spam, ...).&lt;br /&gt;
&lt;br /&gt;
=== About private jokes ===&lt;br /&gt;
&lt;br /&gt;
If a wrong action happened in a private circle (ex: at a game table, with no spectators), and if none of the present players reported the action, the moderator must consider this was a &amp;quot;private joke&amp;quot; and must not apply any penalty. In the contrary, if the wrong action is public (ex: post/comment on the wall), the moderator may consider this as a wrong action even if there is no report.&lt;br /&gt;
&lt;br /&gt;
=== Prescription ===&lt;br /&gt;
&lt;br /&gt;
For operational reason, a report that is older than 2 weeks may be closed by moderators because it is too old.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=845</id>
		<title>Moderationpolicy</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Moderationpolicy&amp;diff=845"/>
		<updated>2013-05-30T09:10:34Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: Created page with &amp;quot;fff&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;fff&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Main_game_logic:_yourgamename.game.php&amp;diff=837</id>
		<title>Main game logic: yourgamename.game.php</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Main_game_logic:_yourgamename.game.php&amp;diff=837"/>
		<updated>2013-05-22T09:01:51Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This file is the main file for your game logic. Here you initialize the game, persist data, implement the rules and notify changes to the client interface.&lt;br /&gt;
&lt;br /&gt;
== File Structure ==&lt;br /&gt;
&lt;br /&gt;
The details on how the file is structured is described directly with comments on the code skeleton provided to you.&lt;br /&gt;
 &lt;br /&gt;
Basically, here&#039;s this structure:&lt;br /&gt;
* EmptyGame (constructor): where you define global variables.&lt;br /&gt;
* setupNewGame: initial setup of the game.&lt;br /&gt;
* getAllDatas: where you retrieve all game data during a complete reload of the game.&lt;br /&gt;
* getGameProgression: where you compute the game progression indicator.&lt;br /&gt;
* Utility functions: your utility functions.&lt;br /&gt;
* Player actions: the entry points for players actions. &lt;br /&gt;
* Game state arguments: methods to return additional data on specific game states.&lt;br /&gt;
* Game state actions: the logic to run when entering a new game state.&lt;br /&gt;
* zombieTurn: what to do it&#039;s the turn of a zombie player.&lt;br /&gt;
&lt;br /&gt;
== Accessing player informations ==&lt;br /&gt;
&lt;br /&gt;
; getPlayersNumber()&lt;br /&gt;
: Returns the number of players playing at the table&lt;br /&gt;
: Note: doesn&#039;t work in setupNewGame so use count($players) instead&lt;br /&gt;
&lt;br /&gt;
; getActivePlayerId()&lt;br /&gt;
: Get the &amp;quot;active_player&amp;quot;, whatever what is the current state type.&lt;br /&gt;
: Note: it does NOT mean that this player is active right now, because state type could be &amp;quot;game&amp;quot; or &amp;quot;multiplayer&amp;quot;&lt;br /&gt;
: Note: avoid using this method in a &amp;quot;multiplayer&amp;quot; state because it does not mean anything.&lt;br /&gt;
&lt;br /&gt;
; getActivePlayerName()&lt;br /&gt;
: Get the &amp;quot;active_player&amp;quot; name&lt;br /&gt;
: Note: avoid using this method in a &amp;quot;multiplayer&amp;quot; state because it does not mean anything.&lt;br /&gt;
&lt;br /&gt;
; loadPlayersBasicInfos()&lt;br /&gt;
: Get an associative array with generic data about players (ie: not game specific data).&lt;br /&gt;
: The key of the associative array is the player id.&lt;br /&gt;
: The content of each value is:&lt;br /&gt;
: * player_name&lt;br /&gt;
: * player_color (ex: ff0000)&lt;br /&gt;
&lt;br /&gt;
; getCurrentPlayerId()&lt;br /&gt;
: Get the &amp;quot;current_player&amp;quot;. The current player is the one from which the action originated (the one who send the request).&lt;br /&gt;
: &#039;&#039;&#039;Be careful&#039;&#039;&#039;: It is not always the active player.&lt;br /&gt;
: In general, you shouldn&#039;t use this method, unless you are in &amp;quot;multiplayer&amp;quot; state.&lt;br /&gt;
&lt;br /&gt;
; getCurrentPlayerName()&lt;br /&gt;
: Get the &amp;quot;current_player&amp;quot; name&lt;br /&gt;
: Be careful using this method (see above).&lt;br /&gt;
&lt;br /&gt;
; getCurrentPlayerColor()&lt;br /&gt;
: Get the &amp;quot;current_player&amp;quot; color&lt;br /&gt;
: Be careful using this method (see above).&lt;br /&gt;
&lt;br /&gt;
; isCurrentPlayerZombie()&lt;br /&gt;
: Check the &amp;quot;current_player&amp;quot; zombie status. If true, player leave the game.&lt;br /&gt;
&lt;br /&gt;
== Accessing database ==&lt;br /&gt;
&lt;br /&gt;
The main game logic should be the only point from where you should access to the game database. You access your database using SQL queries with the methods below.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
BGA is using [http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-transactions.html database transactions]. It means that your database changes WON&#039;T BE APPLIED to the database until your request ends normally. Using transaction is in fact very useful for you: at any time, if your game logic detects that something is wrong (ex: unallowed move), you just have to throw an exception and all the changes already performed on the game situation will be removed.&lt;br /&gt;
&lt;br /&gt;
; DbQuery( $sql )&lt;br /&gt;
: This is the generic method to access the database.&lt;br /&gt;
: It can execute any type of SELECT/UPDATE/DELETE/REPLACE query on the database.&lt;br /&gt;
: You should use it for UPDATE/DELETE/REPLACE query. For SELECT queries, the specialized methods above are much better.&lt;br /&gt;
&lt;br /&gt;
; getUniqueValueFromDB( $sql )&lt;br /&gt;
: Returns a unique value from DB or null if no value is found.&lt;br /&gt;
: $sql must be a SELECT query.&lt;br /&gt;
: Raise an exception if more than 1 row is returned.&lt;br /&gt;
&lt;br /&gt;
; getCollectionFromDB( $sql, $bSingleValue=false )&lt;br /&gt;
: Returns an associative array of rows for a sql SELECT query.&lt;br /&gt;
: The key of the resulting associative array is the first field specified in the SELECT query.&lt;br /&gt;
: The value of the resulting associative array if an associative array with all the field specified in the SELECT query and associated values.&lt;br /&gt;
: First column must be a primary or alternate key.&lt;br /&gt;
: The resulting collection can be empty.&lt;br /&gt;
: If you specified $bSingleValue=true and if your SQL query request 2 fields A and B, the method returns an associative array &amp;quot;A=&amp;gt;B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::getCollectionFromDB( &amp;quot;SELECT player_id id, player_name name, player_score score FROM player&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
array(&lt;br /&gt;
 1234 =&amp;gt; array( &#039;id&#039;=&amp;gt;1234, &#039;name&#039;=&amp;gt;&#039;myuser0&#039;, &#039;score&#039;=&amp;gt;1 ),&lt;br /&gt;
 1235 =&amp;gt; array( &#039;id&#039;=&amp;gt;1235, &#039;name&#039;=&amp;gt;&#039;myuser1&#039;, &#039;score&#039;=&amp;gt;0 )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::getCollectionFromDB( &amp;quot;SELECT player_id id, player_name name FROM player&amp;quot;, true );&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
array(&lt;br /&gt;
 1234 =&amp;gt; &#039;myuser0&#039;,&lt;br /&gt;
 1235 =&amp;gt; &#039;myuser1&#039;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; getNonEmptyCollectionFromDB( $sql )&lt;br /&gt;
: Idem than previous one, but raise an exception if the collection is empty&lt;br /&gt;
&lt;br /&gt;
; function getObjectFromDB( $sql )&lt;br /&gt;
: Returns one row for the sql SELECT query as an associative array or null if there is no result&lt;br /&gt;
: Raise an exception if the query return more than one row&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::getObjectFromDB( &amp;quot;SELECT player_id id, player_name name, player_score score FROM player WHERE player_id=&#039;$player_id&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
array(&lt;br /&gt;
  &#039;id&#039;=&amp;gt;1234, &#039;name&#039;=&amp;gt;&#039;myuser0&#039;, &#039;score&#039;=&amp;gt;1 &lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; getNonEmptyObjectFromDB( $sql )&lt;br /&gt;
: Idem than previous one, but raise an exception if no row is found&lt;br /&gt;
&lt;br /&gt;
; getObjectListFromDB( $sql, $bUniqueValue=false )&lt;br /&gt;
: Return an array of rows for a sql SELECT query.&lt;br /&gt;
: the result if the same than &amp;quot;getCollectionFromDB&amp;quot; except that the result is a simple array (and not an associative array).&lt;br /&gt;
: The result can be empty.&lt;br /&gt;
: If you specified $bUniqueValue=true and if your SQL query request 1 field, the method returns directly an array of values.&lt;br /&gt;
&lt;br /&gt;
Example 1:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::getObjectListFromDB( &amp;quot;SELECT player_id id, player_name name, player_score score FROM player&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
array(&lt;br /&gt;
 array( &#039;id&#039;=&amp;gt;1234, &#039;name&#039;=&amp;gt;&#039;myuser0&#039;, &#039;score&#039;=&amp;gt;1 ),&lt;br /&gt;
 array( &#039;id&#039;=&amp;gt;1235, &#039;name&#039;=&amp;gt;&#039;myuser1&#039;, &#039;score&#039;=&amp;gt;0 )&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example 2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::getObjectListFromDB( &amp;quot;SELECT player_id id, player_name name FROM player&amp;quot;, true );&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
array(&lt;br /&gt;
 &#039;myuser0&#039;,&lt;br /&gt;
 &#039;myuser1&#039;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; getDoubleKeyCollectionFromDB( $sql, $bSingleValue=false )&lt;br /&gt;
: Return an associative array of associative array, from a SQL SELECT query.&lt;br /&gt;
: First array level correspond to first column specified in SQL query.&lt;br /&gt;
: Second array level correspond to second column specified in SQL query.&lt;br /&gt;
: If bSingleValue = true, keep only third column on result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; DbGetLastId()&lt;br /&gt;
: Return the PRIMARY key of the last inserted row (see PHP mysql_insert_id function).&lt;br /&gt;
&lt;br /&gt;
; DbAffectedRow()&lt;br /&gt;
: Return the number of row affected by the last operation&lt;br /&gt;
&lt;br /&gt;
; escapeStringForDB( $string )&lt;br /&gt;
: You must use this function on every string type data in your database that contains unsafe data.&lt;br /&gt;
: (unsafe = can be modified by a player).&lt;br /&gt;
: This method makes sure that no SQL injection will be done through the string used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::getObjectFromDB( &amp;quot;SELECT player_id id, player_name name, player_color color FROM player WHERE player_id=&#039;1234&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
array(&lt;br /&gt;
 &#039;id&#039; =&amp;gt; 1234,&lt;br /&gt;
 &#039;name&#039; =&amp;gt; &#039;myuser1&#039;,&lt;br /&gt;
 &#039;color&#039; =&amp;gt; &#039;ff0000&#039;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; function getNonEmptyObjectFromDB( $sql )&lt;br /&gt;
: Idem, but raise an exception if the query doesn&#039;t return exactly one row&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: see Editing [[Game database model: dbmodel.sql]] to know how to define your database model.&lt;br /&gt;
&lt;br /&gt;
== Use globals ==&lt;br /&gt;
&lt;br /&gt;
Sometimes, you have to keep a single integer value that is global to your game, and you don&#039;t want to create a DB table specifically for it.&lt;br /&gt;
&lt;br /&gt;
Using a BGA framework &amp;quot;global&amp;quot;, you can do such a thing. Your value will be stored in the &amp;quot;global&amp;quot; table in database, and you can access it with simple methods.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;initGameStateLabels&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method is located at the beginning of your game logic. This is the place you defines the globals used in your game logic, by assigning them IDs.&lt;br /&gt;
&lt;br /&gt;
You can define up to 89 globals, with IDs from 10 to 89. You must NOT use globals outside this range as globals are used by other components of the framework.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        self::initGameStateLabels( array( &lt;br /&gt;
                &amp;quot;my_first_global_variable&amp;quot; =&amp;gt; 10,&lt;br /&gt;
                &amp;quot;my_second_global_variable&amp;quot; =&amp;gt; 11&lt;br /&gt;
        ) );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;setGameStateInitialValue( $value_label, $value_value )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Init your global value. Must be called before any use of your global, so you should call this method from your &amp;quot;setupNewGame&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;getGameStateValue( $value_label )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Retrieve the current value of a global.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;setGameStateValue( $value_label, $value_value )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set the current value of a global.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;incGameStateValue( $value_label, $increment )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Increment the current value of a global. If increment is negative, decrement the value of the global.&lt;br /&gt;
&lt;br /&gt;
Return the final value of the global.&lt;br /&gt;
&lt;br /&gt;
== Game states and active players ==&lt;br /&gt;
&lt;br /&gt;
; checkAction( $actionName, $bThrowException=true )&lt;br /&gt;
: Check if action is valid regarding current game state (exception if fails)&lt;br /&gt;
: The action is valid if it is listed as a &amp;quot;possibleactions&amp;quot; in the current game state (see game state description).&lt;br /&gt;
: This method MUST be called in the first place in ALL your PHP methods that handle players action, in order to make sure a player can&#039;t do an action when the rules disallow it at this moment of the game.&lt;br /&gt;
: if &amp;quot;bThrowException&amp;quot; is set to &amp;quot;false&amp;quot;, the function return false in case of failure instead of throwing and exception. This is useful when several actions are possible in order to test each of them without throwing exceptions.&lt;br /&gt;
&lt;br /&gt;
; activeNextPlayer()&lt;br /&gt;
: Make the next player active in the natural player order.&lt;br /&gt;
: Note: you CANT use this method in a &amp;quot;activeplayer&amp;quot; or &amp;quot;multipleactiveplayer&amp;quot; state. You must use a &amp;quot;game&amp;quot; type game state for this.&lt;br /&gt;
&lt;br /&gt;
; activePrevPlayer()&lt;br /&gt;
: Make the previous player active (in the natural player order).&lt;br /&gt;
: Note: you CANT use this method in a &amp;quot;activeplayer&amp;quot; or &amp;quot;multipleactiveplayer&amp;quot; state. You must use a &amp;quot;game&amp;quot; type game state for this.&lt;br /&gt;
&lt;br /&gt;
; $this-&amp;gt;gamestate-&amp;gt;changeActivePlayer( $player_id )&lt;br /&gt;
: You can call this method to make any player active.&lt;br /&gt;
: Note: you CANT use this method in a &amp;quot;activeplayer&amp;quot; or &amp;quot;multipleactiveplayer&amp;quot; state. You must use a &amp;quot;game&amp;quot; type game state for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; $this-&amp;gt;gamestate-&amp;gt;getActivePlayerList()&lt;br /&gt;
: With this method you can retrieve the list of the active player at any time.&lt;br /&gt;
: During a &amp;quot;game&amp;quot; type gamestate, it will return a void array.&lt;br /&gt;
: During a &amp;quot;activeplayer&amp;quot; type gamestate, it will return an array with one value (the active player id).&lt;br /&gt;
: during a &amp;quot;multipleactiveplayer&amp;quot; type gamestate, it will return an array of the active players id.&lt;br /&gt;
: Note: you should only use this method is the latter case.&lt;br /&gt;
&lt;br /&gt;
; $this-&amp;gt;gamestate-&amp;gt;setAllPlayersMultiactive()&lt;br /&gt;
: With this method, all playing players are made active.&lt;br /&gt;
: Usually, you use this method at the beginning (ex: &amp;quot;st&amp;quot; action method) of a multiplayer game state when all players have to do some action.&lt;br /&gt;
&lt;br /&gt;
; $this-&amp;gt;gamestate-&amp;gt;setPlayersMultiactive( $players, $next_state )&lt;br /&gt;
: Make a specific list of players active during a multiactive gamestate.&lt;br /&gt;
: Bare in mind it doesn&#039;t deactivate other previously active players.&lt;br /&gt;
: &amp;quot;players&amp;quot; is the array of player id that should be made active.&lt;br /&gt;
: In case &amp;quot;players&amp;quot; is empty, the method trigger the &amp;quot;next_state&amp;quot; transition to go to the next game state.&lt;br /&gt;
&lt;br /&gt;
; $this-&amp;gt;gamestate-&amp;gt;setPlayerNonMultiactive( $player_id, $next_state )&lt;br /&gt;
: During a multiactive game state, make the specified player inactive.&lt;br /&gt;
: Usually, you call this method during a multiactive game state after a player did his action.&lt;br /&gt;
: If this player was the last active player, the method trigger the &amp;quot;next_state&amp;quot; transition to go to the next game state.&lt;br /&gt;
&lt;br /&gt;
; $this-&amp;gt;gamestate-&amp;gt;checkPossibleAction( $action )&lt;br /&gt;
: (rarely used)&lt;br /&gt;
: This works exactly like &amp;quot;checkAction&amp;quot;, except that it do NOT check if current player is active.&lt;br /&gt;
: This is used specifically in certain game states when you want to authorize some additional actions for players that are not active at the moment.&lt;br /&gt;
: Example: in Libertalia game, you want to authorize players to change their mind about card played. They are of course not active at the time they change their mind, so you cannot use &amp;quot;checkAction&amp;quot; and use &amp;quot;checkPossibleAction&amp;quot; instead.&lt;br /&gt;
&lt;br /&gt;
== Players turn order ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;getNextPlayerTable()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Return an associative array which associate each player with the next player around the table.&lt;br /&gt;
&lt;br /&gt;
In addition, key 0 is associated to the first player to play.&lt;br /&gt;
&lt;br /&gt;
Example: if three player with ID 1, 2 and 3 are around the table, in this order, the method returns:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   array( &lt;br /&gt;
    1 =&amp;gt; 2, &lt;br /&gt;
    2 =&amp;gt; 3, &lt;br /&gt;
    3 =&amp;gt; 1, &lt;br /&gt;
    0 =&amp;gt; 1 &lt;br /&gt;
   );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;getPrevPlayerTable()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same as above, but the associative array associate the previous player around the table.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;getPlayerAfter( $player_id )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get player playing after given player in natural playing order.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;getPlayerBefore( $player_id )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Get player playing before given player in natural playing order.&lt;br /&gt;
&lt;br /&gt;
== Notify players ==&lt;br /&gt;
&lt;br /&gt;
To understand notifications, please read [http://www.slideshare.net/boardgamearena/the-bga-framework-at-a-glance The BGA Framework at a glance] first.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Notifications are sent at the very end of the request, when it ends normally. It means that if you throw an exception for any reason (ex: move not allowed), no notifications will be sent to players.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;notifyAllPlayers( $notification_type, $notification_log, $notification_args )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Send a notification to all players of the game.&lt;br /&gt;
&lt;br /&gt;
* notification_type:&lt;br /&gt;
A string that defines the type of your notification.&lt;br /&gt;
&lt;br /&gt;
Your game interface Javascript logic will use this to know what is the type of the received notification (and to trigger the corresponding method).&lt;br /&gt;
&lt;br /&gt;
* notification_log:&lt;br /&gt;
A string that defines what is to be displayed in the game log.&lt;br /&gt;
&lt;br /&gt;
You can use an empty string here (&amp;quot;&amp;quot;). In this case, nothing is displayed in the game log.&lt;br /&gt;
&lt;br /&gt;
If you define a real string here, you should use &amp;quot;clienttranslate&amp;quot; method to make sure it can be translate.&lt;br /&gt;
&lt;br /&gt;
You can use arguments in your notification_log strings, that refers to values defines in the &amp;quot;notification_args&amp;quot; argument (see below).&lt;br /&gt;
&lt;br /&gt;
Note: you CAN use some HTML inside your notification log, and it is working. However:&lt;br /&gt;
_ pay attention to keep the log clear.&lt;br /&gt;
_ try to not include some HTML tags inside the &amp;quot;clienttranslate&amp;quot; method, otherwise it will make the translators work more difficult. You can use a notification argument instead, and provide your HTML through this argument.&lt;br /&gt;
&lt;br /&gt;
* notification_args:&lt;br /&gt;
The arguments of your notifications, as an associative array.&lt;br /&gt;
&lt;br /&gt;
This array will be transmitted to the game interface logic, in order the game interface can be updated.&lt;br /&gt;
&lt;br /&gt;
Complete notifyAllPlayers example (from &amp;quot;Reversi&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
self::notifyAllPlayers( &amp;quot;playDisc&amp;quot;, clienttranslate( &#039;${player_name} plays a disc and turns over ${returned_nbr} disc(s)&#039; ), array(&lt;br /&gt;
        &#039;player_id&#039; =&amp;gt; $player_id,&lt;br /&gt;
        &#039;player_name&#039; =&amp;gt; self::getActivePlayerName(),&lt;br /&gt;
        &#039;returned_nbr&#039; =&amp;gt; count( $turnedOverDiscs ),&lt;br /&gt;
        &#039;x&#039; =&amp;gt; $x,&lt;br /&gt;
        &#039;y&#039; =&amp;gt; $y&lt;br /&gt;
     ) );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can see in the example above the use of the &amp;quot;clienttranslate&amp;quot; method, and the use of 2 arguments &amp;quot;player_name&amp;quot; and &amp;quot;returned_nbr&amp;quot; in the notification log.&lt;br /&gt;
&lt;br /&gt;
Important: NO private date must be sent with this method, as a cheater could see it even it is not used explicitly by the game interface logic. If you want to send private information to a player, please use notifyPlayer below.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;notifyPlayer( $player_id, $notification_type, $notification_log, $notification_args )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same as above, except that the notification is sent to one player only.&lt;br /&gt;
&lt;br /&gt;
This method must be used each time some private information must be transmitted to a player.&lt;br /&gt;
&lt;br /&gt;
== Game statistics ==&lt;br /&gt;
&lt;br /&gt;
There are 2 types of statistics:&lt;br /&gt;
* a &amp;quot;player&amp;quot; statistic is a statistic associated to a player&lt;br /&gt;
* a &amp;quot;table&amp;quot; statistics is a statistic not associated to a player (global statistic for this game).&lt;br /&gt;
&lt;br /&gt;
See [[Game statistics: stats.inc.php]] to see how you defines statistics for your game.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;initStat( $table_or_player, $name, $value, $player_id=null )&#039;&#039;&#039;&lt;br /&gt;
Create a statistic entry for the specified statistics with a default value.&lt;br /&gt;
This method must be called for each statistics of your game, in your setupNewGame method.&lt;br /&gt;
&lt;br /&gt;
&#039;table_or_player&#039; must be set to &amp;quot;table&amp;quot; if this is a table statistics, or &amp;quot;player&amp;quot; if this is a player statistics.&lt;br /&gt;
&lt;br /&gt;
&#039;name&#039; is the name of your statistics, as it has been defined in your stats.inc.php file.&lt;br /&gt;
&lt;br /&gt;
&#039;value&#039; is the initial value of the statistics. If this is a player statistics and if the player is not specified by &amp;quot;player_id&amp;quot; argument, the value is set for ALL players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;function setStat( $value, $name, $player_id = null )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Set a statistic value.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;player_id&amp;quot; is not specified, setStat consider it is a TABLE statistic.&lt;br /&gt;
&lt;br /&gt;
If &amp;quot;player_id&amp;quot; is specified, setStat consider it is a PLAYER statistic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;incStat( $delta, $name, $player_id = null )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Increment (or decrement) specified statistic value. Same behavior as above.&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
See [[Translations]]&lt;br /&gt;
&lt;br /&gt;
== Manage player scores and Tie breaker ==&lt;br /&gt;
&lt;br /&gt;
At the end of the game, players automatically get a rank depending on their score: the player with the biggest score is #1, the player with the second biggest score is #2, and so on...&lt;br /&gt;
&lt;br /&gt;
During the game, you update player&#039;s score directly by updating &amp;quot;player_score&amp;quot; field of &amp;quot;player&amp;quot; table in database.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  // +2 points to active player&lt;br /&gt;
  self::DbQuery( &amp;quot;UPDATE player SET player_score=player_score+2 WHERE player_id=&#039;&amp;quot;.self::getActivePlayerId().&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
  // Set score of active player to 5&lt;br /&gt;
  self::DbQuery( &amp;quot;UPDATE player SET player_score=5 WHERE player_id=&#039;&amp;quot;.self::getActivePlayerId().&amp;quot;&#039;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget to notify the client side in order the score control can be updated accordingly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tie breaker&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Tie breaker is used when two players get the same score at the end of a game.&lt;br /&gt;
&lt;br /&gt;
Tie breaker is using &amp;quot;player_score_aux&amp;quot; field of &amp;quot;player&amp;quot; table. It is updated exactly like the &amp;quot;player_score&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
Tie breaker score is displayed only for players who are tied at the end of the game. Most of the time, it is not supposed to be displayed explicitly during the game.&lt;br /&gt;
&lt;br /&gt;
When you are using &amp;quot;player_score_aux&amp;quot; functionality, you must describe the formula to use in your Constructor method like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         $this-&amp;gt;tie_breaker_description = self::_(&amp;quot;Describe here your tie breaker formula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This description will be used as a tooltip to explain to players how this auxiliary score has been calculated.&lt;br /&gt;
&lt;br /&gt;
== Reflexion time ==&lt;br /&gt;
&lt;br /&gt;
; function giveExtraTime( $player_id, $specific_time=null )&lt;br /&gt;
: Give standard extra time to this player.&lt;br /&gt;
: Standard extra time depends on the speed of the game (small with &amp;quot;slow&amp;quot; game option, bigger with other options).&lt;br /&gt;
: You can also specify an exact time to add, in seconds, with the &amp;quot;specified_time&amp;quot; argument (rarely used).&lt;br /&gt;
&lt;br /&gt;
== Managing errors and exceptions ==&lt;br /&gt;
&lt;br /&gt;
Note: when you throw an exception, all database changes and all notifications are cancelled immediately. This way, the game situation that were existing before the request is completely restored.&lt;br /&gt;
&lt;br /&gt;
; throw new BgaUserException ( $error_message)&lt;br /&gt;
: Base class to notify a user error&lt;br /&gt;
: You must throw this exception when a player want to do something that he is not allowed to do.&lt;br /&gt;
: The error message will be shown to the player as a &amp;quot;red message&amp;quot;, so it must be translated.&lt;br /&gt;
: Throwing such an exception is NOT considered as a bug, so it is not traced in BGA error logs.&lt;br /&gt;
&lt;br /&gt;
Example from Gomoku:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     throw new BgaUserException( self::_(&amp;quot;There is already a stone on this intersection, you can&#039;t play there&amp;quot;) );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; throw new BgaVisibleSystemException ( $error_message)&lt;br /&gt;
: You must throw this exception when you detect something that is not supposed to happened into your code.&lt;br /&gt;
: The error message is shown to the user as an &amp;quot;Unexpected error&amp;quot;, in order he can report it in the forum.&lt;br /&gt;
: The error message is logged in BGA error logs. If it happens regularly, we will report it to you.&lt;br /&gt;
&lt;br /&gt;
; throw new BgaSystemException ( $error_message)&lt;br /&gt;
: Base class to notify a system exception. The message will be hidden from the user, but show in the logs. Use this if the message contains technical information.&lt;br /&gt;
: You shouldn&#039;t use this type of exception except if you think the information shown could be critical. Indeed: a generic error message will be shown to the user, so it&#039;s going to be difficult for you to see what happened.&lt;br /&gt;
&lt;br /&gt;
== Zombie mode ==&lt;br /&gt;
&lt;br /&gt;
When a player leaves a game for any reason (expelled, quit), he becomes a &amp;quot;zombie player&amp;quot;. In this case, the results of the game won&#039;t count for statistics, but this is cool if the other players can finish the game anyway. That&#039;s why zombie mode exists: allow the other player to finish the game, even if the situation is not ideal.&lt;br /&gt;
&lt;br /&gt;
While developing your zombie mode, keep in mind that:&lt;br /&gt;
* Do not refer to the rules, because this situation is not planned by the rules.&lt;br /&gt;
* Try to figure that you are playing with your friends and one of them has to leave: how can we finish the game without killing the spirit of the game?&lt;br /&gt;
* The idea is NOT to develop an artificial intelligence for the game.&lt;br /&gt;
&lt;br /&gt;
Most of the time, the best thing to do when it is zombie player turn is to jump immediately to a state where he is not active anymore. For example, if he is in a game state where he has a choice between playing A and playing B, the best thing to do is NOT to choose A or B, but to pass. So, even if there&#039;s no &amp;quot;pass&amp;quot; action in the rules, add a &amp;quot;zombiepass&amp;quot; transitition in your game state and use it.&lt;br /&gt;
&lt;br /&gt;
Each time a zombie player must play, your &amp;quot;zombieTurn&amp;quot; method is called.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* $state: the name of the current game state.&lt;br /&gt;
* $active_player: the id of the active player.&lt;br /&gt;
&lt;br /&gt;
Most of the time, your zombieTurn method looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    function zombieTurn( $state, $active_player )&lt;br /&gt;
    {&lt;br /&gt;
    	$statename = $state[&#039;name&#039;];&lt;br /&gt;
&lt;br /&gt;
        if( $statename == &#039;myFirstGameState&#039;&lt;br /&gt;
             ||  $statename == &#039;my2ndGameState&#039;&lt;br /&gt;
             ||  $statename == &#039;my3rdGameState&#039;&lt;br /&gt;
               ....&lt;br /&gt;
           )&lt;br /&gt;
        {&lt;br /&gt;
            $this-&amp;gt;gamestate-&amp;gt;nextState( &amp;quot;zombiePass&amp;quot; );&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
            throw new BgaVisibleSystemException( &amp;quot;Zombie mode not supported at this game state: &amp;quot;.$statename );&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that in the example above, all corresponding game state should implement &amp;quot;zombiePass&amp;quot; as a transition.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Game_interface_logic:_yourgamename.js&amp;diff=834</id>
		<title>Game interface logic: yourgamename.js</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Game_interface_logic:_yourgamename.js&amp;diff=834"/>
		<updated>2013-05-20T19:23:38Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Animations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is the main file for your game interface. Here you will define:&lt;br /&gt;
&lt;br /&gt;
* which actions on the page will generate calls to the server&lt;br /&gt;
* what happens when you get a notification for change from the server and how it will show in the browser. &lt;br /&gt;
&lt;br /&gt;
== File structure ==&lt;br /&gt;
&lt;br /&gt;
The details on how the file is structured is described directly with comments on the code skeleton provided to you.&lt;br /&gt;
&lt;br /&gt;
Basically, here&#039;s this structure:&lt;br /&gt;
* constructor: here you can define variable global to your whole interface.&lt;br /&gt;
* setup: this method is called when the page is refreshed, in order you can setup the game interface.&lt;br /&gt;
* onEnteringState: the method is called when entering in a new game state. This way you can customize the view for this game state.&lt;br /&gt;
* onLeavingState: the method is called when leaving a game state.&lt;br /&gt;
* onUpdateActionButtons: called when entering in a new state, in order you can add action buttons in status bar.&lt;br /&gt;
* (utility methods): at this place you can define your utility methods&lt;br /&gt;
* (player&#039;s actions): at this place you can write your handlers for player&#039;s action on the interface (ex: click on an item).&lt;br /&gt;
* setupNotifications: in this method you associate notifications with notification handlers. This way, for each game notification, you trigger a javascript method to handle it and update the game interface.&lt;br /&gt;
* (notification handlers): at this place you can define your notifications handlers.&lt;br /&gt;
&lt;br /&gt;
== General tips ==&lt;br /&gt;
&lt;br /&gt;
; this.player_id&lt;br /&gt;
: Id of the player on whose browser the code is running.&lt;br /&gt;
&lt;br /&gt;
; this.isSpectator&lt;br /&gt;
: Flag set to true if the user at the table is a spectator (not a player).&lt;br /&gt;
: Note: if you want to hide some element for spectators, you&#039;d better use [[Game_interface_stylesheet:_yourgamename.css#spectatorMode|CSS &#039;spectatorMode&#039; class]].&lt;br /&gt;
&lt;br /&gt;
; this.gamedatas&lt;br /&gt;
: Contains your initial set of datas to init the game, created at game start or game refresh (F5)&lt;br /&gt;
: You can update it as needed to keep an up to date reference of the game on the client side if you need it (most of the time you don&#039;t).&lt;br /&gt;
&lt;br /&gt;
; isCurrentPlayerActive()&lt;br /&gt;
: Returns true if the player on whose browser the code is running is currently active (it&#039;s his turn to play)&lt;br /&gt;
&lt;br /&gt;
; this.getActivePlayerId()&lt;br /&gt;
: Return the ID of active player, or null if we are not in a &amp;quot;activeplayer&amp;quot; type state.&lt;br /&gt;
&lt;br /&gt;
; this.getActivePlayers()&lt;br /&gt;
: Return an array with the IDs of players that are currently active (or an empty array if there is not).&lt;br /&gt;
&lt;br /&gt;
== Dojo framework ==&lt;br /&gt;
&lt;br /&gt;
BGA is using the [http://dojotoolkit.org/ Dojo Javascript framework].&lt;br /&gt;
&lt;br /&gt;
The Dojo framework allows us to do complex things easier, and the BGA framework is using Dojo framework a lot.&lt;br /&gt;
&lt;br /&gt;
To realize game although, you only need to use a few part of the Dojo framework. All the Dojo methods you need to use are describe on this page.&lt;br /&gt;
&lt;br /&gt;
== Access and manipulate the DOM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$(&#039;some_html_element_id&#039;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The $() function is used to get some HTML element using its &amp;quot;id&amp;quot; attribute.&lt;br /&gt;
&lt;br /&gt;
Example 1: modify the content of a &amp;quot;span&amp;quot; element:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
In your HTML code:&lt;br /&gt;
   &amp;lt;span id=&amp;quot;a_value_in_the_game_interface&amp;quot;&amp;gt;1234&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your Javascript code:&lt;br /&gt;
   $(&#039;a_value_in_the_game_interface&#039;).innerHTML = &amp;quot;9999&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: $() is the standard method to access some HTML element with BGA Framework. You must not use &amp;quot;getElementById&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.style&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With dojo.style you can modify a CSS property of any HTML element of your interface.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // Make an element disappear&lt;br /&gt;
     dojo.style( &#039;my_element&#039;, &#039;display&#039;, &#039;none&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Give an element a 2px border&lt;br /&gt;
     dojo.style( &#039;my_element&#039;, &#039;borderWidth&#039;, &#039;2px&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Change the background position of an element&lt;br /&gt;
     // (very practical when you are using CSS sprite to transform an element to another)&lt;br /&gt;
     dojo.style( &#039;my_element&#039;, &#039;backgroundPosition&#039;, &#039;-20px -50px&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: you must always use dojo.style to modify CSS properties of HTML elements.&lt;br /&gt;
&lt;br /&gt;
Note²: if you have to modify several CSS properties of an element, or if you have some complex CSS transformation to do, you should consider using dojo.addClass/dojo.removeClass (see below).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo CSS classes manipulation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In many situation, a bunch of many small CSS property update can be replaced by a CSS class change (ie: you add a CSS class to your element instead of applying all modification manually).&lt;br /&gt;
&lt;br /&gt;
Advantages are:&lt;br /&gt;
* All your CSS stuff remains in your CSS file.&lt;br /&gt;
* You can add/remove a list of CSS modifications with a simple function and whithout error.&lt;br /&gt;
* You can test if you applied the stuff to an element with &amp;quot;dojo.hasClass&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
Example from &amp;quot;Reversi&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // We add &amp;quot;possibleMove&amp;quot; to an element&lt;br /&gt;
    dojo.addClass( &#039;square_&#039;+x+&#039;_&#039;+y, &#039;possibleMove&#039; );&lt;br /&gt;
&lt;br /&gt;
    // In our CSS file, the class is defined as:&lt;br /&gt;
    .possibleMove {&lt;br /&gt;
      background-color: white;&lt;br /&gt;
      opacity: 0.2;&lt;br /&gt;
      filter:alpha(opacity=20); /* For IE8 and earlier */  &lt;br /&gt;
      cursor: pointer;  &lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // So we&#039;ve applied 4 CSS property change in one line of code.&lt;br /&gt;
&lt;br /&gt;
     // ... and when we need to check if a square is a possible move on client side:&lt;br /&gt;
     if( dojo.hasClass( &#039;square_&#039;+x+&#039;_&#039;+y, &#039;possibleMove&#039; ) )&lt;br /&gt;
     { ... }&lt;br /&gt;
&lt;br /&gt;
     // ... and if we want to remove all possible moves in one line of code (see &amp;quot;dojo.query&amp;quot; method):&lt;br /&gt;
     dojo.query( &#039;.possibleMove&#039; ).removeClass( &#039;possibleMove&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conclusion: we encourage you to use dojo.addClass, dojo.removeClass and dojo.hasClass to make your life easier :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.query&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With dojo.query, you can query a bunch of HTML elements with a single function, with a &amp;quot;CSS selector&amp;quot; style.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // All elements with class &amp;quot;possibleMove&amp;quot;:&lt;br /&gt;
     var elements = dojo.query( &#039;.possibleMove&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Count number of tokens (ie: elements with class &amp;quot;token&amp;quot;) on the board (ie: element with id &amp;quot;board&amp;quot;):&lt;br /&gt;
     dojo.query( &#039;#board .token&#039; ).length;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But what is really cool with dojo.query is that you can combine it with almost all methods above.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // Trigger a method when the mouse enter in any element with class &amp;quot;meeple&amp;quot;:&lt;br /&gt;
     dojo.query( &#039;.meeple&#039; ).connect( &#039;onmouseenter&#039;, this, &#039;myMethodToTrigger&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Hide all meeples who are on the board&lt;br /&gt;
     dojo.query( &#039;#board .meeple&#039; ).style( &#039;display&#039;, &#039;none&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.place&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
dojo.place is the best function to insert some HTML code somewhere in your game interface without breaking something. It is much better to use that &amp;quot;innerHTML=&#039;&#039;&amp;quot; method as soon as you must insert HTML tags and not only values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // Insert your HTML code as a child of a container element&lt;br /&gt;
     dojo.place( &amp;quot;&amp;lt;your html code&amp;gt;&amp;quot;, &amp;quot;your_container_element_id&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
     // Replace the container element with your new html&lt;br /&gt;
     dojo.place( &amp;quot;&amp;lt;your html code&amp;gt;&amp;quot;, &amp;quot;your_container_element_id&amp;quot;, &amp;quot;replace&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the third parameter of dojo.place can take various interesting value: &amp;quot;first&amp;quot;, &amp;quot;after&amp;quot;, ... [http://dojotoolkit.org/reference-guide/1.7/dojo/place.html See full doc on dojo.place].&lt;br /&gt;
&lt;br /&gt;
Usually, when you want to insert some piece of HTML in your game interface, you should use &amp;quot;[[Game_layout:_view_and_template:_yourgamename.view.php_and_yourgamename_yourgamename.tpl#Javascript_templates|Javascript templates]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;addStyleToClass: function( cssClassName, cssProperty, propertyValue )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same as dojo.style(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dojo Animations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
BGA animations is based on Dojo Animation ([http://dojotoolkit.org/documentation/tutorials/1.8/animation/ see tutorial here]).&lt;br /&gt;
&lt;br /&gt;
However, most of the time, you can just use methods below, which are built on top of Dojo Animation.&lt;br /&gt;
&lt;br /&gt;
Note: one interesting method from Dojo that could be useful from time to time is &amp;quot;Dojo.Animation&amp;quot;. It allows you to make any CSS property &amp;quot;slide&amp;quot; from one value to another.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.slideToObject( mobile_obj, target_obj, duration, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use slideToObject to &amp;quot;slide&amp;quot; an element to a target position.&lt;br /&gt;
&lt;br /&gt;
Sliding element on the game area is the recommended and the most used way to animate your game interface. Using slides allow players to figure out what is happening on the game, as if they were playing with the real boardgame.&lt;br /&gt;
&lt;br /&gt;
The parameters are:&lt;br /&gt;
* mobile_obj: the ID of the object to move. This object must be &amp;quot;relative&amp;quot; or &amp;quot;absolute&amp;quot; positioned.&lt;br /&gt;
* target_obj: the ID of the target object. This object must be &amp;quot;relative&amp;quot; or &amp;quot;absolute&amp;quot; positioned. Note that it is not mandatory that mobile_obj and target_obj have the same size. If their size are different, the system slides the center of mobile_obj to the center of target_obj.&lt;br /&gt;
* duration: (optional) defines the duration in millisecond of the slide. The default is 500 milliseconds.&lt;br /&gt;
* delay: (optional). If you defines a delay, the slide will start only after this delay. This is particularly useful when you want to slide several object from the same position to the same position: you can give a 0ms delay to the first object, a 100ms delay to the second one, a 200ms delay to the third one, ... this way they won&#039;t be superposed during the slide.&lt;br /&gt;
&lt;br /&gt;
BE CAREFUL: The method returns an dojo.fx animation, so you can combine it with other animation if you want to. It means that you have to call the &amp;quot;play()&amp;quot; method, otherwise the animation WON&#039;T START.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.slideToObject( &amp;quot;some_token&amp;quot;, &amp;quot;some_place_on_board&amp;quot; ).play();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.slideToObjectPos( mobile_obj, target_obj, target_x, target_y, duration, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method does exactly the same than &amp;quot;slideToObjectPos&amp;quot;, except than you can specify some (x,y) coordinates. This way, &amp;quot;mobile_obj&amp;quot; will slide to the specified x,y position relatively to &amp;quot;target_obj&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example: slide a token to some place on the board, 10 pixels to the bottom:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.slideToObjectPos( &amp;quot;some_token&amp;quot;, &amp;quot;some_place_on_board&amp;quot;, 0, 10 ).play();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.slideTemporaryObject( mobile_obj_html, mobile_obj_parent, from, to, duration, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method is useful when you want to slide a temporary HTML object from one place to another. As this object does not exists before the animation and won&#039;t remain after, it could be complex to create this object (with dojo.place), to place it at its origin (with placeOnObject) to slide it (with slideToObject) and to make it disappear at the end.&lt;br /&gt;
&lt;br /&gt;
slideTemporaryObject does all of this for you:&lt;br /&gt;
* mobile_obj_html is a piece of HTML code that represent the object to slide.&lt;br /&gt;
* mobile_obj_parent is the ID of an HTML element of your interface that will be the parent of this temporary HTML object.&lt;br /&gt;
* from is the ID of the origin of the slide.&lt;br /&gt;
* to is the ID of the target of the slide.&lt;br /&gt;
* duration/delay works exactly like in &amp;quot;slideToObject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.slideTemporaryObject( &#039;&amp;lt;div class=&amp;quot;token_icon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;, &#039;tokens&#039;, &#039;my_origin_div&#039;, &#039;my_target_div&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.fadeOutAndDestroy( node )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function fade out the target HTML node, then destroy it.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.fadeOutAndDestroy( &amp;quot;a_card_that_must_disappear&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CAREFUL: the HTML node still exists until during few milliseconds, until the fadeOut has been completed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotating elements&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can check here [http://jimfulton.info/demos/dojo-animated-rotate.html an example of use] of Dojo to make an element rotate.&lt;br /&gt;
&lt;br /&gt;
This example combines &amp;quot;Dojo.Animation&amp;quot; method and a CSS3 property that allow you to rotate the element.&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: to asses browser compatibility, you must select the CSS property to use just like in the example (see sourcecode below):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        var transform;&lt;br /&gt;
        dojo.forEach(&lt;br /&gt;
            [&#039;transform&#039;, &#039;WebkitTransform&#039;, &#039;msTransform&#039;,&lt;br /&gt;
             &#039;MozTransform&#039;, &#039;OTransform&#039;],&lt;br /&gt;
            function (name) {&lt;br /&gt;
                if (typeof dojo.body().style[name] != &#039;undefined&#039;) {&lt;br /&gt;
                    transform = name;&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        // ... and then use &amp;quot;transform&amp;quot; as the name of your CSS property for rotation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Moving elements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.placeOnObject( mobile_obj, target_obj )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
placeOnObject works exactly like &amp;quot;slideToObject&amp;quot;, except that the effect is immediate.&lt;br /&gt;
&lt;br /&gt;
This is not really an animation, but placeOnObject is frequently used before starting an animation.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // (We just created an object &amp;quot;my_new_token&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  // Place the new token on current player board&lt;br /&gt;
  this.placeOnObject( &amp;quot;my_new_token&amp;quot;, &amp;quot;overall_player_board_&amp;quot;+this.player_id );&lt;br /&gt;
  &lt;br /&gt;
  // Then slide it to its position on the board&lt;br /&gt;
  this.slideToObject( &amp;quot;my_new_token&amp;quot;, &amp;quot;a_place_on_board&amp;quot; ).play();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.placeOnObjectPos( mobile_obj, target_obj, target_x, target_y )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method works exactly like placeOnObject, except than you can specify some (x,y) coordinates. This way, &amp;quot;mobile_obj&amp;quot; will be placed to the specified x,y position relatively to &amp;quot;target_obj&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.attachToNewParent( mobile_obj, target_obj )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With this method, you change the HTML parent of &amp;quot;mobile_obj&amp;quot; element. &amp;quot;target_obj&amp;quot; is the new parent of this element. The beauty of &lt;br /&gt;
attachToNewParent is that the mobile_obj element DOES NOT MOVE during this process.&lt;br /&gt;
&lt;br /&gt;
Note: what happens is that the method calculate a relative position of mobile_obj to make sure it does not move after the HTML parent changes.&lt;br /&gt;
&lt;br /&gt;
Why using this method?&lt;br /&gt;
&lt;br /&gt;
Changing the HTML parent of an element can be useful for the following reasons:&lt;br /&gt;
* When the HTML parent moves, all its child are moving with them. If some game elements is no more linked with a parent HTML object, you may want to attach it to another place.&lt;br /&gt;
* The z_order (vertical order of display) depends on the position in the DOM, so you may need to change the parent of some game elements when they are moving in your game area.&lt;br /&gt;
&lt;br /&gt;
CAREFUL: when you attach an HTML element with a new parent, you break all references to this HTML element (ex: dojo.connect).&lt;br /&gt;
&lt;br /&gt;
== Players input ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.connect&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Used to associate a player event with one of your notification method.&lt;br /&gt;
&lt;br /&gt;
Example: associate a click on an element (&amp;quot;my_element&amp;quot;) with one of our method (&amp;quot;onClickOnMyElement&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      dojo.connect( $(&#039;my_element&#039;), &#039;onClick&#039;, this, &#039;onClickOnMyElement&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: this is the only possible correct way to associate a player input event to your code, and you must not use anything else.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.checkAction( &amp;quot;my_action_name&amp;quot; )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usage: checkAction: function( action, nomessage )&lt;br /&gt;
&lt;br /&gt;
Check if player can do the specified action by taking into account:&lt;br /&gt;
* current game state&lt;br /&gt;
* interface locking (a player can&#039;t do any action if an action is already in progress)&lt;br /&gt;
&lt;br /&gt;
return true if action is authorized (ie: the action is listed as a &amp;quot;possibleaction&amp;quot; in current game state).&lt;br /&gt;
&lt;br /&gt;
return false and display an error message if not (display no message if nomessage parameter is true). The displayed error message could be either &amp;quot;This move is not allowed at this moment&amp;quot; or &amp;quot;An action is already in progress&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  function onClickOnGameElement( evt )&lt;br /&gt;
  {&lt;br /&gt;
     if( this.checkAction( &amp;quot;my_action&amp;quot; ) )&lt;br /&gt;
     {&lt;br /&gt;
        // Do the action&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.ajaxcall( url, parameters, obj_callback, callback, callback_error )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method must be used to send a player input to the game server.&lt;br /&gt;
&lt;br /&gt;
* url: the url of the action to perform. For a game, it must be: &amp;quot;/&amp;lt;mygame&amp;gt;/&amp;lt;mygame&amp;gt;/myAction.html&amp;quot;&lt;br /&gt;
* parameters: an array of parameter to send to the game server. Note that &amp;quot;lock:true&amp;quot; must always be specified in this list of parameter in order the interface can be locked during the server call.&lt;br /&gt;
* obj_callback: must be set to &amp;quot;this&amp;quot;.&lt;br /&gt;
* callback: a function to trigger when the server returns and everything went fine.&lt;br /&gt;
* callback_error: (optional and rarely used) a function to trigger when the server returns an error.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.ajaxcall( &#039;/mygame/mygame/myaction.html&#039;, { lock: true, &lt;br /&gt;
   arg1: myarg1, &lt;br /&gt;
   arg2: myarg2, &lt;br /&gt;
   ...&lt;br /&gt;
}, this, function( result ) {&lt;br /&gt;
   // Do some stuff after a successful call&lt;br /&gt;
} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restricted arguments names (please don&#039;t use them):&lt;br /&gt;
* &amp;quot;action&amp;quot;&lt;br /&gt;
* &amp;quot;module&amp;quot;&lt;br /&gt;
* &amp;quot;class&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.confirmationDialog()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Display a confirmation dialog with a yes/no choice.&lt;br /&gt;
&lt;br /&gt;
We advice you to NOT use this function unless the player action is really critical and could ruins the game, because it slows down the game and upset players.&lt;br /&gt;
&lt;br /&gt;
Usage: this.confirmationDialog( &amp;quot;Question to displayed&amp;quot;, callback_function_if_click_on_yes );&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.confirmationDialog( _(&#039;Are you sure to use this bonus (points penalty at the end of the game) ?&#039;),&lt;br /&gt;
                         dojo.hitch( this, function() {&lt;br /&gt;
                           this.ajaxcall( &#039;/seasons/seasons/useBonus.html&#039;,&lt;br /&gt;
                                { id:bonus_id, lock:true }, this, function( result ) {} );&lt;br /&gt;
                        } ) ); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; addEventToClass: function( cssClassName, eventName, functionName )&lt;br /&gt;
: Same as dojo.connect(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addActionButton( id, label, method, (opt)depreciated, (opt)bHighlight )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use this method to add an action button in the main action status bar.&lt;br /&gt;
&lt;br /&gt;
Arguments:&lt;br /&gt;
* id: a ID that should be unique in your HTML DOM document.&lt;br /&gt;
* label: the text of the button. Should be translatable (use _() function).&lt;br /&gt;
* method: the name of your method that must be triggered when the player clicks on this button.&lt;br /&gt;
* depreciated (optional): do not use this. Please not specify this argument or use &amp;quot;null&amp;quot;.&lt;br /&gt;
* bHighlight: if set to &amp;quot;true&amp;quot;, the button is going blink to catch player&#039;s attention. Please don&#039;t abuse of blinking button.&lt;br /&gt;
&lt;br /&gt;
You should only use this method in your &amp;quot;onUpdateActionButtons&amp;quot; method. Usually, you use it like this (from Hears example):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        onUpdateActionButtons: function( stateName, args )&lt;br /&gt;
        {&lt;br /&gt;
            console.log( &#039;onUpdateActionButtons: &#039;+stateName );&lt;br /&gt;
                      &lt;br /&gt;
            if( this.isCurrentPlayerActive() )&lt;br /&gt;
            {            &lt;br /&gt;
                switch( stateName )&lt;br /&gt;
                {&lt;br /&gt;
                case &#039;giveCards&#039;:&lt;br /&gt;
                    this.addActionButton( &#039;giveCards_button&#039;, _(&#039;Give selected cards&#039;), &#039;onGiveCards&#039; ); &lt;br /&gt;
                    break;&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example above, we are adding a &amp;quot;Give selected cards&amp;quot; button in the case we are on game state &amp;quot;giveCards&amp;quot;. When player clicks on this button, it triggers our &amp;quot;onGiveCards&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
See [[Translations]]&lt;br /&gt;
&lt;br /&gt;
== Notifications ==&lt;br /&gt;
&lt;br /&gt;
When something happens on the server side, your game interface Javascript logic received a notification.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how you can handle these notifications on the client side.&lt;br /&gt;
&lt;br /&gt;
=== Subscribe to notifications ===&lt;br /&gt;
&lt;br /&gt;
Your Javascript &amp;quot;setupNotifications&amp;quot; method is the place where you can subscribe to notifications from your PHP code.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how you associate one of your Javascript method to a notification &amp;quot;playDisc&amp;quot; (from Reversi example):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // In setupNotifications method:&lt;br /&gt;
   dojo.subscribe( &#039;playDisc&#039;, this, &amp;quot;notif_playDisc&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the &amp;quot;playDisc&amp;quot; corresponds to the name of the notification you define it in your PHP code, in your &amp;quot;notifyAllPlayers&amp;quot; or &amp;quot;notifyPlayer&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
Then, you have to define your &amp;quot;notif_playDisc&amp;quot; method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        notif_playDisc: function( notif )&lt;br /&gt;
        {&lt;br /&gt;
            // Remove current possible moves (makes the board more clear)&lt;br /&gt;
            dojo.query( &#039;.possibleMove&#039; ).removeClass( &#039;possibleMove&#039; );        &lt;br /&gt;
        &lt;br /&gt;
            this.addDiscOnBoard( notif.args.x, notif.args.y, notif.args.player_id );&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a notification handler like our &amp;quot;notif_playDisc&amp;quot; method, you can access to all notifications arguments with &amp;quot;notif.args&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // If you did this on PHP side:&lt;br /&gt;
    self::notifyAllPlayers( &amp;quot;myNotification&amp;quot;, &#039;&#039;, array( &amp;quot;myArgument&amp;quot; =&amp;gt; 3 ) );&lt;br /&gt;
&lt;br /&gt;
    // On Javascript side, you can access the &amp;quot;myArgument&amp;quot; like this:&lt;br /&gt;
    notif_myNotification: function( notif )&lt;br /&gt;
    {&lt;br /&gt;
       alert( &amp;quot;myArgument = &amp;quot; + notif.args.myArgument );&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Synchronous notifications ===&lt;br /&gt;
&lt;br /&gt;
When several notifications are received by your game interface, these notifications are processed immediately, one after the other, in the same exact order they have been generated in your PHP game logic.&lt;br /&gt;
&lt;br /&gt;
However, sometimes, you need to give some time to the players to figure out what happened on the game before jumping to the next notification. Indeed, in many games, they are a lot of automatic actions, and the computer is going to resolve all these actions very fast if you don&#039;t tell it not to do so.&lt;br /&gt;
&lt;br /&gt;
As an example, for Reversi, when someone is playing a disc, we want to wait 500 milliseconds before doing anything else in order the opponent player can figure out what move has been played.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how we do this, right after our subscription:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       dojo.subscribe( &#039;playDisc&#039;, this, &amp;quot;notif_playDisc&amp;quot; );&lt;br /&gt;
       this.notifqueue.setSynchronous( &#039;playDisc&#039;, 500 );   // Wait 500 milliseconds after executing the playDisc handler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tooltips ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addTooltip( nodeId, _( helpString ), _( actionString ), delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a simple text tooltip to the DOM node.&lt;br /&gt;
&lt;br /&gt;
Specify &#039;helpString&#039; to display some information about &amp;quot;what is this game element?&amp;quot;.&lt;br /&gt;
Specify &#039;actionString&#039; to display some information about &amp;quot;what happens when I click on this element?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You must specify both helpString and actionString. Most of the time, you use only one and specify a void string (&amp;quot;&amp;quot;) for the other one.&lt;br /&gt;
&lt;br /&gt;
Usually, _() must be used for the text to be marked for translation.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Delay&amp;quot; is an optional parameter. Usually, it is primarily used to specify a zero delay for some game element when the tooltip gives really important information for the game - but remember: no essential information must be placed in tooltips as they won&#039;t be displayed in some browser (see Guidelines).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.addTooltip( &#039;cardcount&#039;, _(&#039;Number of cards in hand&#039;), &#039;&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addTooltipHtml( nodeId, html, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add an HTML tooltip to the DOM node (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addTooltipToClass( cssClass, _( helpString ), _( actionString ), delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a simple text tooltip to all the DOM nodes set with this cssClass. &lt;br /&gt;
&lt;br /&gt;
IMPORTANT: all concerned nodes must have IDs to get tooltips.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;addTooltipHtmlToClass( cssClass, html, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add an HTML tooltip to to all the DOM nodes set with this cssClass (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: all concerned nodes must have IDs to get tooltips&lt;br /&gt;
&lt;br /&gt;
== Dialogs, warning messages, confirmation dialogs, ... ==&lt;br /&gt;
&lt;br /&gt;
=== Warning messages ===&lt;br /&gt;
&lt;br /&gt;
Sometimes, there is something important that is happening on the game and you have to make sure all players get the message. Most of the time, the evolution of the game situation or the game log is enough, but sometimes you need something more visible.&lt;br /&gt;
&lt;br /&gt;
Ex: someone fulfill one of the end of the game condition, so this is the last turn.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.showMessage( msg, type )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
showMessage shows a message in a big rectangular area on the top of the screen of current player.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;msg&amp;quot; is the string to display. It should be translated.&lt;br /&gt;
* &amp;quot;type&amp;quot; can be set to &amp;quot;info&amp;quot; or &amp;quot;error&amp;quot;. If set to &amp;quot;info&amp;quot;, the message will be an informative message on a white background. If set to &amp;quot;error&amp;quot;, the message will be an error message on a red background.&lt;br /&gt;
&lt;br /&gt;
Important: the normal way to inform players about the progression of the game is the game log. &amp;quot;showMessage&amp;quot; is intrusive and should not be used often.&lt;br /&gt;
&lt;br /&gt;
=== Confirmation dialog ===&lt;br /&gt;
&lt;br /&gt;
When an important action with a lot of consequences is triggered by the player, you may want to propose a confirmation dialog.&lt;br /&gt;
&lt;br /&gt;
CAREFUL: the general guidelines of BGA is to AVOID the use of confirmation dialog. Confirmation dialogs slow down the game and bother players. The players knows that they have to pay attention about each move when they are playing online.&lt;br /&gt;
&lt;br /&gt;
The situation where you should use a confirmation dialog are the following:&lt;br /&gt;
* It must not happen very often during a game.&lt;br /&gt;
* It must be linked to an action that can really &amp;quot;kill a game&amp;quot; if the player do not pay attention.&lt;br /&gt;
* It must be something that can be done by mistake (ex: a link on the action status bar).&lt;br /&gt;
&lt;br /&gt;
How to display a confirmation dialog:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        this.confirmationDialog( _(&#039;Are you sure you want to make this?&#039;), dojo.hitch( this, function() {&lt;br /&gt;
            this.ajaxcall( &#039;/mygame/mygame/makeThis.html&#039;, { lock:true }, this, function( result ) {} );&lt;br /&gt;
        } ) );   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dialogs ===&lt;br /&gt;
&lt;br /&gt;
At first, you shouldn&#039;t use dialogs windows.&lt;br /&gt;
&lt;br /&gt;
BGA guidelines specify that all game elements should be displayed on the main screen. Players can eventually scroll down to see game elements they don&#039;t need to see anytime, and you may eventually create anchors to move between game area section. Of course dialogs windows are very practical, but the thing is: all players know how to scroll down, and not all players know how to show up your dialog window. In addition, when the dialog shows up, players can&#039;t access the other game components.&lt;br /&gt;
&lt;br /&gt;
Sometimes although, you need to display a dialog window. Here is how you do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  // Create the new dialog. You should store the handler in a member variable to access it later&lt;br /&gt;
  this.myDlg = new dijit.Dialog({ title: _(&amp;quot;my dialog title to translate&amp;quot;) });&lt;br /&gt;
&lt;br /&gt;
  // Create the HTML of my dialog. The best practice here is to use [[Game_layout:_view_and_template:_yourgamename.view.php_and_yourgamename_yourgamename.tpl#Javascript_templates|Javascript templates]]:&lt;br /&gt;
  var html = this.format_block( &#039;jstpl_myDialogTemplate&#039;, { &lt;br /&gt;
                arg1: myArg1,&lt;br /&gt;
                arg2: myArg2,&lt;br /&gt;
                ...&lt;br /&gt;
            } );  &lt;br /&gt;
&lt;br /&gt;
  // Show the dialog&lt;br /&gt;
  this.myDlg.attr(&amp;quot;content&amp;quot;, html );&lt;br /&gt;
  this.myDlg.show(); &lt;br /&gt;
&lt;br /&gt;
  // Now that the dialog has been displayed, you can connect your method to some dialog elements&lt;br /&gt;
  // Example, a &amp;quot;close&amp;quot; button:&lt;br /&gt;
  dojo.connect( $(&#039;closeDlg&#039;), &#039;onclick&#039;, this, function(evt){&lt;br /&gt;
                evt.preventDefault();&lt;br /&gt;
                this.myDlg.hide();&lt;br /&gt;
            } );  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: be careful with &amp;quot;hide()&amp;quot; method to close your dialog: the dialog and its content is not completely removed from the DOM. It can cause you problems if you try to display the same dialog several times. A good practice is to wrap all the content of your dialog in a &amp;quot;&amp;lt;div id=&#039;myDlgContent&#039;&amp;gt;&amp;quot; div element, and to call &amp;quot;dojo.destroy(&#039;myDlgContent&#039;)&amp;quot; before displaying your dialog.&lt;br /&gt;
&lt;br /&gt;
=== Scoring dialogs ===&lt;br /&gt;
&lt;br /&gt;
Sometimes at the end of a round you want to display a big table that details the points wins in each section of the game.&lt;br /&gt;
&lt;br /&gt;
Example: in Hearts game, we display at the end of each round the number of &amp;quot;heart&amp;quot; cards collected by each player, the player who collected the Queen of Spades, and the total number of points loose by each player.&lt;br /&gt;
&lt;br /&gt;
Scoring dialogs are managed entirely on &#039;&#039;&#039;PHP side&#039;&#039;&#039;, but they are described here as their effects are visible only on client side.&lt;br /&gt;
&lt;br /&gt;
Displaying a scoring dialog is quite simple and is using a special notification type: &amp;quot;tableWindow&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // on PHP side:&lt;br /&gt;
  $this-&amp;gt;notifyAllPlayers( &amp;quot;tableWindow&amp;quot;, &#039;&#039;, array(&lt;br /&gt;
            &amp;quot;id&amp;quot; =&amp;gt; &#039;finalScoring&#039;,&lt;br /&gt;
            &amp;quot;title&amp;quot; =&amp;gt; clienttranslate(&amp;quot;Title of the scoring dialog&amp;quot;),&lt;br /&gt;
            &amp;quot;table&amp;quot; =&amp;gt; $table&lt;br /&gt;
        ) ); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;table&amp;quot; argument is a 2 dimensional PHP array that describe the table you want to display, line by line and column by column.&lt;br /&gt;
&lt;br /&gt;
Example: display an 3x3 array of strings&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $table = array(&lt;br /&gt;
      array( &amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;three&amp;quot; ),    // This is my first line&lt;br /&gt;
      array( &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;, &amp;quot;six&amp;quot; ),    // This is my second line&lt;br /&gt;
      array( &amp;quot;seven&amp;quot;, &amp;quot;height&amp;quot;, &amp;quot;nine&amp;quot; )    // This is my third line&lt;br /&gt;
   );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see above, in each &amp;quot;cell&amp;quot; of your array you can display a simple string value. But you can also display a complex value with a template and associated arguments like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $table = array(&lt;br /&gt;
      array( &amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, array( &amp;quot;str&amp;quot; =&amp;gt; &amp;quot;a string with an ${argument}&amp;quot;, &amp;quot;args&amp;quot; =&amp;gt; array( &#039;argument&#039; =&amp;gt; &#039;argument_value&#039; )  ) ),&lt;br /&gt;
      array( &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;, &amp;quot;six&amp;quot; ), &lt;br /&gt;
      array( &amp;quot;seven&amp;quot;, &amp;quot;height&amp;quot;, &amp;quot;nine&amp;quot; )&lt;br /&gt;
   );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is especially useful when you want to display player names with colors. Example from &amp;quot;Hearts&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $firstRow = array( &#039;&#039; );&lt;br /&gt;
        foreach( $players as $player_id =&amp;gt; $player )&lt;br /&gt;
        {&lt;br /&gt;
            $firstRow[] = array( &#039;str&#039; =&amp;gt; &#039;${player_name}&#039;,&lt;br /&gt;
                                 &#039;args&#039; =&amp;gt; array( &#039;player_name&#039; =&amp;gt; $player[&#039;player_name&#039;] ),&lt;br /&gt;
                                 &#039;type&#039; =&amp;gt; &#039;header&#039;&lt;br /&gt;
                               );&lt;br /&gt;
        }&lt;br /&gt;
        $table[] = $firstRow;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update players score ==&lt;br /&gt;
&lt;br /&gt;
Increase a player score (with a positive or negative number):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  this.scoreCtrl[ player_id ].incValue( score_delta );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set a player score to a specific value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  this.scoreCtrl[ player_id ].setValue( new_score );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Players panels ==&lt;br /&gt;
&lt;br /&gt;
=== Adding stuff to player&#039;s panel ===&lt;br /&gt;
&lt;br /&gt;
At first, create a new &amp;quot;JS template&amp;quot; string in your template (tpl) file:&lt;br /&gt;
&lt;br /&gt;
(from Reversi example)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var jstpl_player_board = &#039;\&amp;lt;div class=&amp;quot;cp_board&amp;quot;&amp;gt;\&lt;br /&gt;
    &amp;lt;div id=&amp;quot;stoneicon_p${id}&amp;quot; class=&amp;quot;gmk_stoneicon gmk_stoneicon_${color}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span id=&amp;quot;stonecount_p${id}&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;\&lt;br /&gt;
&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you add this piece of code in your JS file to add this template to each player panel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            // Setting up player boards&lt;br /&gt;
            for( var player_id in gamedatas.players )&lt;br /&gt;
            {&lt;br /&gt;
                var player = gamedatas.players[player_id];&lt;br /&gt;
                         &lt;br /&gt;
                // Setting up players boards if needed&lt;br /&gt;
                var player_board_div = $(&#039;player_board_&#039;+player_id);&lt;br /&gt;
                dojo.place( this.format_block(&#039;jstpl_player_board&#039;, player ), player_board_div );&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: the code above is of course from your &amp;quot;setup&amp;quot; function in your Javascript).&lt;br /&gt;
&lt;br /&gt;
Very often, you have to distinguish current player and others players. In this case, you just have to create another JS template (ex: jstpl_otherplayer_board) and use it when &amp;quot;player_id&amp;quot; is different than &amp;quot;this.player_id&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Player&#039;s panel disabling/enabling ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.disablePlayerPanel( player_id )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Disable given player panel (the panel background become gray).&lt;br /&gt;
&lt;br /&gt;
Usually, this is used to signal that this played passes, or will be inactive during a while.&lt;br /&gt;
&lt;br /&gt;
Note that the only effect of this is visual. There are no consequences on the behaviour of the panel itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.enablePlayerPanel( player_id )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enable a player panel that has been disabled before.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.enableAllPlayerPanels()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enable all player panels that has been disabled before.&lt;br /&gt;
&lt;br /&gt;
== Image loading ==&lt;br /&gt;
&lt;br /&gt;
See also [[Game_art:_img_directory]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Be careful&#039;&#039;&#039;: by default, ALL images of your img directory are loaded on a player&#039;s browser when he loads the game. For this reason, don&#039;t let in your img directory images that are not useful, otherwise it&#039;s going to slowdown the game load.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dontPreloadImage( image_file_name )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Using dontPreloadImage, you tell the interface to not preload a specific image in your img directory.&lt;br /&gt;
&lt;br /&gt;
Example of use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.dontPreloadImage( &#039;cards.png&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is particularly useful if for example you have 2 different themes for a game. To accelerate the loading of the game, you can specify to not preload images corresponding to the other theme.&lt;br /&gt;
&lt;br /&gt;
Another example of use: in &amp;quot;Gosu&amp;quot; game with Kamakor extension, you play with 5 sets of cards among 10 available. Cards images are organized by sets, and we only preload the images corresponding to the 5 current sets.&lt;br /&gt;
&lt;br /&gt;
== Other useful stuff ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.hitch&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With dojo.hitch, you can create a callback function that will run with your game object context whatever happen.&lt;br /&gt;
&lt;br /&gt;
Typical example: display a BGA confirmation dialog with a callback function created with dojo.hitch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        this.confirmationDialog( _(&#039;Are you sure you want to make this?&#039;), dojo.hitch( this, function() {&lt;br /&gt;
            this.ajaxcall( &#039;/mygame/mygame/makeThis.html&#039;, { lock:true }, this, function( result ) {} );&lt;br /&gt;
        } ) );   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example above, using dojo.hitch, we are sure that the &amp;quot;this&amp;quot; object will be set when the callback is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; updateCounters(counters)&lt;br /&gt;
: Useful for updating game counters in the player panel (such as resources). &lt;br /&gt;
: &#039;counters&#039; arg is an associative array [counter_name_value =&amp;gt; [ &#039;counter_name&#039; =&amp;gt; counter_name_value, &#039;counter_value&#039; =&amp;gt; counter_value_value], ... ]&lt;br /&gt;
: All counters must be referenced in this.gamedatas.counters and will be updated.&lt;br /&gt;
: DOM objects referenced by &#039;counter_name&#039; will have their innerHTML updated with &#039;counter_value&#039;.&lt;br /&gt;
&lt;br /&gt;
== BGA GUI components ==&lt;br /&gt;
&lt;br /&gt;
BGA framework provides some useful ready-to-use components for the game interface:&lt;br /&gt;
&lt;br /&gt;
[[Studio#BGA_Studio_game_components_reference]]&lt;br /&gt;
&lt;br /&gt;
Note that each time you are using an additional component, you must declare it at the top of your Javascript file in the list of modules used.&lt;br /&gt;
&lt;br /&gt;
Example if you are using &amp;quot;ebg.stock&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define([&lt;br /&gt;
    &amp;quot;dojo&amp;quot;,&amp;quot;dojo/_base/declare&amp;quot;,&lt;br /&gt;
    &amp;quot;ebg/core/gamegui&amp;quot;,&lt;br /&gt;
    &amp;quot;ebg/counter&amp;quot;,&lt;br /&gt;
    &amp;quot;ebg/stock&amp;quot;  /// &amp;lt;=== we are using ebg.stock module&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Game_interface_logic:_yourgamename.js&amp;diff=833</id>
		<title>Game interface logic: yourgamename.js</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Game_interface_logic:_yourgamename.js&amp;diff=833"/>
		<updated>2013-05-20T19:18:50Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Animations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This is the main file for your game interface. Here you will define:&lt;br /&gt;
&lt;br /&gt;
* which actions on the page will generate calls to the server&lt;br /&gt;
* what happens when you get a notification for change from the server and how it will show in the browser. &lt;br /&gt;
&lt;br /&gt;
== File structure ==&lt;br /&gt;
&lt;br /&gt;
The details on how the file is structured is described directly with comments on the code skeleton provided to you.&lt;br /&gt;
&lt;br /&gt;
Basically, here&#039;s this structure:&lt;br /&gt;
* constructor: here you can define variable global to your whole interface.&lt;br /&gt;
* setup: this method is called when the page is refreshed, in order you can setup the game interface.&lt;br /&gt;
* onEnteringState: the method is called when entering in a new game state. This way you can customize the view for this game state.&lt;br /&gt;
* onLeavingState: the method is called when leaving a game state.&lt;br /&gt;
* onUpdateActionButtons: called when entering in a new state, in order you can add action buttons in status bar.&lt;br /&gt;
* (utility methods): at this place you can define your utility methods&lt;br /&gt;
* (player&#039;s actions): at this place you can write your handlers for player&#039;s action on the interface (ex: click on an item).&lt;br /&gt;
* setupNotifications: in this method you associate notifications with notification handlers. This way, for each game notification, you trigger a javascript method to handle it and update the game interface.&lt;br /&gt;
* (notification handlers): at this place you can define your notifications handlers.&lt;br /&gt;
&lt;br /&gt;
== General tips ==&lt;br /&gt;
&lt;br /&gt;
; this.player_id&lt;br /&gt;
: Id of the player on whose browser the code is running.&lt;br /&gt;
&lt;br /&gt;
; this.isSpectator&lt;br /&gt;
: Flag set to true if the user at the table is a spectator (not a player).&lt;br /&gt;
: Note: if you want to hide some element for spectators, you&#039;d better use [[Game_interface_stylesheet:_yourgamename.css#spectatorMode|CSS &#039;spectatorMode&#039; class]].&lt;br /&gt;
&lt;br /&gt;
; this.gamedatas&lt;br /&gt;
: Contains your initial set of datas to init the game, created at game start or game refresh (F5)&lt;br /&gt;
: You can update it as needed to keep an up to date reference of the game on the client side if you need it (most of the time you don&#039;t).&lt;br /&gt;
&lt;br /&gt;
; isCurrentPlayerActive()&lt;br /&gt;
: Returns true if the player on whose browser the code is running is currently active (it&#039;s his turn to play)&lt;br /&gt;
&lt;br /&gt;
; this.getActivePlayerId()&lt;br /&gt;
: Return the ID of active player, or null if we are not in a &amp;quot;activeplayer&amp;quot; type state.&lt;br /&gt;
&lt;br /&gt;
; this.getActivePlayers()&lt;br /&gt;
: Return an array with the IDs of players that are currently active (or an empty array if there is not).&lt;br /&gt;
&lt;br /&gt;
== Dojo framework ==&lt;br /&gt;
&lt;br /&gt;
BGA is using the [http://dojotoolkit.org/ Dojo Javascript framework].&lt;br /&gt;
&lt;br /&gt;
The Dojo framework allows us to do complex things easier, and the BGA framework is using Dojo framework a lot.&lt;br /&gt;
&lt;br /&gt;
To realize game although, you only need to use a few part of the Dojo framework. All the Dojo methods you need to use are describe on this page.&lt;br /&gt;
&lt;br /&gt;
== Access and manipulate the DOM ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;$(&#039;some_html_element_id&#039;)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The $() function is used to get some HTML element using its &amp;quot;id&amp;quot; attribute.&lt;br /&gt;
&lt;br /&gt;
Example 1: modify the content of a &amp;quot;span&amp;quot; element:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
In your HTML code:&lt;br /&gt;
   &amp;lt;span id=&amp;quot;a_value_in_the_game_interface&amp;quot;&amp;gt;1234&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your Javascript code:&lt;br /&gt;
   $(&#039;a_value_in_the_game_interface&#039;).innerHTML = &amp;quot;9999&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: $() is the standard method to access some HTML element with BGA Framework. You must not use &amp;quot;getElementById&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.style&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With dojo.style you can modify a CSS property of any HTML element of your interface.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // Make an element disappear&lt;br /&gt;
     dojo.style( &#039;my_element&#039;, &#039;display&#039;, &#039;none&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Give an element a 2px border&lt;br /&gt;
     dojo.style( &#039;my_element&#039;, &#039;borderWidth&#039;, &#039;2px&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Change the background position of an element&lt;br /&gt;
     // (very practical when you are using CSS sprite to transform an element to another)&lt;br /&gt;
     dojo.style( &#039;my_element&#039;, &#039;backgroundPosition&#039;, &#039;-20px -50px&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: you must always use dojo.style to modify CSS properties of HTML elements.&lt;br /&gt;
&lt;br /&gt;
Note²: if you have to modify several CSS properties of an element, or if you have some complex CSS transformation to do, you should consider using dojo.addClass/dojo.removeClass (see below).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo CSS classes manipulation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In many situation, a bunch of many small CSS property update can be replaced by a CSS class change (ie: you add a CSS class to your element instead of applying all modification manually).&lt;br /&gt;
&lt;br /&gt;
Advantages are:&lt;br /&gt;
* All your CSS stuff remains in your CSS file.&lt;br /&gt;
* You can add/remove a list of CSS modifications with a simple function and whithout error.&lt;br /&gt;
* You can test if you applied the stuff to an element with &amp;quot;dojo.hasClass&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
Example from &amp;quot;Reversi&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // We add &amp;quot;possibleMove&amp;quot; to an element&lt;br /&gt;
    dojo.addClass( &#039;square_&#039;+x+&#039;_&#039;+y, &#039;possibleMove&#039; );&lt;br /&gt;
&lt;br /&gt;
    // In our CSS file, the class is defined as:&lt;br /&gt;
    .possibleMove {&lt;br /&gt;
      background-color: white;&lt;br /&gt;
      opacity: 0.2;&lt;br /&gt;
      filter:alpha(opacity=20); /* For IE8 and earlier */  &lt;br /&gt;
      cursor: pointer;  &lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // So we&#039;ve applied 4 CSS property change in one line of code.&lt;br /&gt;
&lt;br /&gt;
     // ... and when we need to check if a square is a possible move on client side:&lt;br /&gt;
     if( dojo.hasClass( &#039;square_&#039;+x+&#039;_&#039;+y, &#039;possibleMove&#039; ) )&lt;br /&gt;
     { ... }&lt;br /&gt;
&lt;br /&gt;
     // ... and if we want to remove all possible moves in one line of code (see &amp;quot;dojo.query&amp;quot; method):&lt;br /&gt;
     dojo.query( &#039;.possibleMove&#039; ).removeClass( &#039;possibleMove&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conclusion: we encourage you to use dojo.addClass, dojo.removeClass and dojo.hasClass to make your life easier :)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.query&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With dojo.query, you can query a bunch of HTML elements with a single function, with a &amp;quot;CSS selector&amp;quot; style.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // All elements with class &amp;quot;possibleMove&amp;quot;:&lt;br /&gt;
     var elements = dojo.query( &#039;.possibleMove&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Count number of tokens (ie: elements with class &amp;quot;token&amp;quot;) on the board (ie: element with id &amp;quot;board&amp;quot;):&lt;br /&gt;
     dojo.query( &#039;#board .token&#039; ).length;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But what is really cool with dojo.query is that you can combine it with almost all methods above.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // Trigger a method when the mouse enter in any element with class &amp;quot;meeple&amp;quot;:&lt;br /&gt;
     dojo.query( &#039;.meeple&#039; ).connect( &#039;onmouseenter&#039;, this, &#039;myMethodToTrigger&#039; );&lt;br /&gt;
&lt;br /&gt;
     // Hide all meeples who are on the board&lt;br /&gt;
     dojo.query( &#039;#board .meeple&#039; ).style( &#039;display&#039;, &#039;none&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.place&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
dojo.place is the best function to insert some HTML code somewhere in your game interface without breaking something. It is much better to use that &amp;quot;innerHTML=&#039;&#039;&amp;quot; method as soon as you must insert HTML tags and not only values.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     // Insert your HTML code as a child of a container element&lt;br /&gt;
     dojo.place( &amp;quot;&amp;lt;your html code&amp;gt;&amp;quot;, &amp;quot;your_container_element_id&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
     // Replace the container element with your new html&lt;br /&gt;
     dojo.place( &amp;quot;&amp;lt;your html code&amp;gt;&amp;quot;, &amp;quot;your_container_element_id&amp;quot;, &amp;quot;replace&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the third parameter of dojo.place can take various interesting value: &amp;quot;first&amp;quot;, &amp;quot;after&amp;quot;, ... [http://dojotoolkit.org/reference-guide/1.7/dojo/place.html See full doc on dojo.place].&lt;br /&gt;
&lt;br /&gt;
Usually, when you want to insert some piece of HTML in your game interface, you should use &amp;quot;[[Game_layout:_view_and_template:_yourgamename.view.php_and_yourgamename_yourgamename.tpl#Javascript_templates|Javascript templates]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;addStyleToClass: function( cssClassName, cssProperty, propertyValue )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same as dojo.style(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
=== Animations ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dojo Animations&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
BGA animations is based on Dojo Animation ([http://dojotoolkit.org/documentation/tutorials/1.8/animation/ see tutorial here]).&lt;br /&gt;
&lt;br /&gt;
However, most of the time, you can just use methods below, which are built on top of Dojo Animation.&lt;br /&gt;
&lt;br /&gt;
Note: one interesting method from Dojo that could be useful from time to time is &amp;quot;AnimateProperty&amp;quot;. It allows you to make any CSS property &amp;quot;slide&amp;quot; from one value to another.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.slideToObject( mobile_obj, target_obj, duration, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use slideToObject to &amp;quot;slide&amp;quot; an element to a target position.&lt;br /&gt;
&lt;br /&gt;
Sliding element on the game area is the recommended and the most used way to animate your game interface. Using slides allow players to figure out what is happening on the game, as if they were playing with the real boardgame.&lt;br /&gt;
&lt;br /&gt;
The parameters are:&lt;br /&gt;
* mobile_obj: the ID of the object to move. This object must be &amp;quot;relative&amp;quot; or &amp;quot;absolute&amp;quot; positioned.&lt;br /&gt;
* target_obj: the ID of the target object. This object must be &amp;quot;relative&amp;quot; or &amp;quot;absolute&amp;quot; positioned. Note that it is not mandatory that mobile_obj and target_obj have the same size. If their size are different, the system slides the center of mobile_obj to the center of target_obj.&lt;br /&gt;
* duration: (optional) defines the duration in millisecond of the slide. The default is 500 milliseconds.&lt;br /&gt;
* delay: (optional). If you defines a delay, the slide will start only after this delay. This is particularly useful when you want to slide several object from the same position to the same position: you can give a 0ms delay to the first object, a 100ms delay to the second one, a 200ms delay to the third one, ... this way they won&#039;t be superposed during the slide.&lt;br /&gt;
&lt;br /&gt;
BE CAREFUL: The method returns an dojo.fx animation, so you can combine it with other animation if you want to. It means that you have to call the &amp;quot;play()&amp;quot; method, otherwise the animation WON&#039;T START.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.slideToObject( &amp;quot;some_token&amp;quot;, &amp;quot;some_place_on_board&amp;quot; ).play();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.slideToObjectPos( mobile_obj, target_obj, target_x, target_y, duration, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method does exactly the same than &amp;quot;slideToObjectPos&amp;quot;, except than you can specify some (x,y) coordinates. This way, &amp;quot;mobile_obj&amp;quot; will slide to the specified x,y position relatively to &amp;quot;target_obj&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example: slide a token to some place on the board, 10 pixels to the bottom:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.slideToObjectPos( &amp;quot;some_token&amp;quot;, &amp;quot;some_place_on_board&amp;quot;, 0, 10 ).play();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.slideTemporaryObject( mobile_obj_html, mobile_obj_parent, from, to, duration, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method is useful when you want to slide a temporary HTML object from one place to another. As this object does not exists before the animation and won&#039;t remain after, it could be complex to create this object (with dojo.place), to place it at its origin (with placeOnObject) to slide it (with slideToObject) and to make it disappear at the end.&lt;br /&gt;
&lt;br /&gt;
slideTemporaryObject does all of this for you:&lt;br /&gt;
* mobile_obj_html is a piece of HTML code that represent the object to slide.&lt;br /&gt;
* mobile_obj_parent is the ID of an HTML element of your interface that will be the parent of this temporary HTML object.&lt;br /&gt;
* from is the ID of the origin of the slide.&lt;br /&gt;
* to is the ID of the target of the slide.&lt;br /&gt;
* duration/delay works exactly like in &amp;quot;slideToObject&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.slideTemporaryObject( &#039;&amp;lt;div class=&amp;quot;token_icon&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&#039;, &#039;tokens&#039;, &#039;my_origin_div&#039;, &#039;my_target_div&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.fadeOutAndDestroy( node )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function fade out the target HTML node, then destroy it.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.fadeOutAndDestroy( &amp;quot;a_card_that_must_disappear&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CAREFUL: the HTML node still exists until during few milliseconds, until the fadeOut has been completed.&lt;br /&gt;
&lt;br /&gt;
=== Moving elements ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.placeOnObject( mobile_obj, target_obj )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
placeOnObject works exactly like &amp;quot;slideToObject&amp;quot;, except that the effect is immediate.&lt;br /&gt;
&lt;br /&gt;
This is not really an animation, but placeOnObject is frequently used before starting an animation.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // (We just created an object &amp;quot;my_new_token&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  // Place the new token on current player board&lt;br /&gt;
  this.placeOnObject( &amp;quot;my_new_token&amp;quot;, &amp;quot;overall_player_board_&amp;quot;+this.player_id );&lt;br /&gt;
  &lt;br /&gt;
  // Then slide it to its position on the board&lt;br /&gt;
  this.slideToObject( &amp;quot;my_new_token&amp;quot;, &amp;quot;a_place_on_board&amp;quot; ).play();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.placeOnObjectPos( mobile_obj, target_obj, target_x, target_y )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method works exactly like placeOnObject, except than you can specify some (x,y) coordinates. This way, &amp;quot;mobile_obj&amp;quot; will be placed to the specified x,y position relatively to &amp;quot;target_obj&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.attachToNewParent( mobile_obj, target_obj )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With this method, you change the HTML parent of &amp;quot;mobile_obj&amp;quot; element. &amp;quot;target_obj&amp;quot; is the new parent of this element. The beauty of &lt;br /&gt;
attachToNewParent is that the mobile_obj element DOES NOT MOVE during this process.&lt;br /&gt;
&lt;br /&gt;
Note: what happens is that the method calculate a relative position of mobile_obj to make sure it does not move after the HTML parent changes.&lt;br /&gt;
&lt;br /&gt;
Why using this method?&lt;br /&gt;
&lt;br /&gt;
Changing the HTML parent of an element can be useful for the following reasons:&lt;br /&gt;
* When the HTML parent moves, all its child are moving with them. If some game elements is no more linked with a parent HTML object, you may want to attach it to another place.&lt;br /&gt;
* The z_order (vertical order of display) depends on the position in the DOM, so you may need to change the parent of some game elements when they are moving in your game area.&lt;br /&gt;
&lt;br /&gt;
CAREFUL: when you attach an HTML element with a new parent, you break all references to this HTML element (ex: dojo.connect).&lt;br /&gt;
&lt;br /&gt;
== Players input ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.connect&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Used to associate a player event with one of your notification method.&lt;br /&gt;
&lt;br /&gt;
Example: associate a click on an element (&amp;quot;my_element&amp;quot;) with one of our method (&amp;quot;onClickOnMyElement&amp;quot;):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      dojo.connect( $(&#039;my_element&#039;), &#039;onClick&#039;, this, &#039;onClickOnMyElement&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: this is the only possible correct way to associate a player input event to your code, and you must not use anything else.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.checkAction( &amp;quot;my_action_name&amp;quot; )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Usage: checkAction: function( action, nomessage )&lt;br /&gt;
&lt;br /&gt;
Check if player can do the specified action by taking into account:&lt;br /&gt;
* current game state&lt;br /&gt;
* interface locking (a player can&#039;t do any action if an action is already in progress)&lt;br /&gt;
&lt;br /&gt;
return true if action is authorized (ie: the action is listed as a &amp;quot;possibleaction&amp;quot; in current game state).&lt;br /&gt;
&lt;br /&gt;
return false and display an error message if not (display no message if nomessage parameter is true). The displayed error message could be either &amp;quot;This move is not allowed at this moment&amp;quot; or &amp;quot;An action is already in progress&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  function onClickOnGameElement( evt )&lt;br /&gt;
  {&lt;br /&gt;
     if( this.checkAction( &amp;quot;my_action&amp;quot; ) )&lt;br /&gt;
     {&lt;br /&gt;
        // Do the action&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.ajaxcall( url, parameters, obj_callback, callback, callback_error )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This method must be used to send a player input to the game server.&lt;br /&gt;
&lt;br /&gt;
* url: the url of the action to perform. For a game, it must be: &amp;quot;/&amp;lt;mygame&amp;gt;/&amp;lt;mygame&amp;gt;/myAction.html&amp;quot;&lt;br /&gt;
* parameters: an array of parameter to send to the game server. Note that &amp;quot;lock:true&amp;quot; must always be specified in this list of parameter in order the interface can be locked during the server call.&lt;br /&gt;
* obj_callback: must be set to &amp;quot;this&amp;quot;.&lt;br /&gt;
* callback: a function to trigger when the server returns and everything went fine.&lt;br /&gt;
* callback_error: (optional and rarely used) a function to trigger when the server returns an error.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.ajaxcall( &#039;/mygame/mygame/myaction.html&#039;, { lock: true, &lt;br /&gt;
   arg1: myarg1, &lt;br /&gt;
   arg2: myarg2, &lt;br /&gt;
   ...&lt;br /&gt;
}, this, function( result ) {&lt;br /&gt;
   // Do some stuff after a successful call&lt;br /&gt;
} );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restricted arguments names (please don&#039;t use them):&lt;br /&gt;
* &amp;quot;action&amp;quot;&lt;br /&gt;
* &amp;quot;module&amp;quot;&lt;br /&gt;
* &amp;quot;class&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.confirmationDialog()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Display a confirmation dialog with a yes/no choice.&lt;br /&gt;
&lt;br /&gt;
We advice you to NOT use this function unless the player action is really critical and could ruins the game, because it slows down the game and upset players.&lt;br /&gt;
&lt;br /&gt;
Usage: this.confirmationDialog( &amp;quot;Question to displayed&amp;quot;, callback_function_if_click_on_yes );&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.confirmationDialog( _(&#039;Are you sure to use this bonus (points penalty at the end of the game) ?&#039;),&lt;br /&gt;
                         dojo.hitch( this, function() {&lt;br /&gt;
                           this.ajaxcall( &#039;/seasons/seasons/useBonus.html&#039;,&lt;br /&gt;
                                { id:bonus_id, lock:true }, this, function( result ) {} );&lt;br /&gt;
                        } ) ); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; addEventToClass: function( cssClassName, eventName, functionName )&lt;br /&gt;
: Same as dojo.connect(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addActionButton( id, label, method, (opt)depreciated, (opt)bHighlight )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use this method to add an action button in the main action status bar.&lt;br /&gt;
&lt;br /&gt;
Arguments:&lt;br /&gt;
* id: a ID that should be unique in your HTML DOM document.&lt;br /&gt;
* label: the text of the button. Should be translatable (use _() function).&lt;br /&gt;
* method: the name of your method that must be triggered when the player clicks on this button.&lt;br /&gt;
* depreciated (optional): do not use this. Please not specify this argument or use &amp;quot;null&amp;quot;.&lt;br /&gt;
* bHighlight: if set to &amp;quot;true&amp;quot;, the button is going blink to catch player&#039;s attention. Please don&#039;t abuse of blinking button.&lt;br /&gt;
&lt;br /&gt;
You should only use this method in your &amp;quot;onUpdateActionButtons&amp;quot; method. Usually, you use it like this (from Hears example):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        onUpdateActionButtons: function( stateName, args )&lt;br /&gt;
        {&lt;br /&gt;
            console.log( &#039;onUpdateActionButtons: &#039;+stateName );&lt;br /&gt;
                      &lt;br /&gt;
            if( this.isCurrentPlayerActive() )&lt;br /&gt;
            {            &lt;br /&gt;
                switch( stateName )&lt;br /&gt;
                {&lt;br /&gt;
                case &#039;giveCards&#039;:&lt;br /&gt;
                    this.addActionButton( &#039;giveCards_button&#039;, _(&#039;Give selected cards&#039;), &#039;onGiveCards&#039; ); &lt;br /&gt;
                    break;&lt;br /&gt;
&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        },   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example above, we are adding a &amp;quot;Give selected cards&amp;quot; button in the case we are on game state &amp;quot;giveCards&amp;quot;. When player clicks on this button, it triggers our &amp;quot;onGiveCards&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
== Translations ==&lt;br /&gt;
&lt;br /&gt;
See [[Translations]]&lt;br /&gt;
&lt;br /&gt;
== Notifications ==&lt;br /&gt;
&lt;br /&gt;
When something happens on the server side, your game interface Javascript logic received a notification.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how you can handle these notifications on the client side.&lt;br /&gt;
&lt;br /&gt;
=== Subscribe to notifications ===&lt;br /&gt;
&lt;br /&gt;
Your Javascript &amp;quot;setupNotifications&amp;quot; method is the place where you can subscribe to notifications from your PHP code.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how you associate one of your Javascript method to a notification &amp;quot;playDisc&amp;quot; (from Reversi example):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   // In setupNotifications method:&lt;br /&gt;
   dojo.subscribe( &#039;playDisc&#039;, this, &amp;quot;notif_playDisc&amp;quot; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: the &amp;quot;playDisc&amp;quot; corresponds to the name of the notification you define it in your PHP code, in your &amp;quot;notifyAllPlayers&amp;quot; or &amp;quot;notifyPlayer&amp;quot; method.&lt;br /&gt;
&lt;br /&gt;
Then, you have to define your &amp;quot;notif_playDisc&amp;quot; method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        notif_playDisc: function( notif )&lt;br /&gt;
        {&lt;br /&gt;
            // Remove current possible moves (makes the board more clear)&lt;br /&gt;
            dojo.query( &#039;.possibleMove&#039; ).removeClass( &#039;possibleMove&#039; );        &lt;br /&gt;
        &lt;br /&gt;
            this.addDiscOnBoard( notif.args.x, notif.args.y, notif.args.player_id );&lt;br /&gt;
        },&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In a notification handler like our &amp;quot;notif_playDisc&amp;quot; method, you can access to all notifications arguments with &amp;quot;notif.args&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // If you did this on PHP side:&lt;br /&gt;
    self::notifyAllPlayers( &amp;quot;myNotification&amp;quot;, &#039;&#039;, array( &amp;quot;myArgument&amp;quot; =&amp;gt; 3 ) );&lt;br /&gt;
&lt;br /&gt;
    // On Javascript side, you can access the &amp;quot;myArgument&amp;quot; like this:&lt;br /&gt;
    notif_myNotification: function( notif )&lt;br /&gt;
    {&lt;br /&gt;
       alert( &amp;quot;myArgument = &amp;quot; + notif.args.myArgument );&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Synchronous notifications ===&lt;br /&gt;
&lt;br /&gt;
When several notifications are received by your game interface, these notifications are processed immediately, one after the other, in the same exact order they have been generated in your PHP game logic.&lt;br /&gt;
&lt;br /&gt;
However, sometimes, you need to give some time to the players to figure out what happened on the game before jumping to the next notification. Indeed, in many games, they are a lot of automatic actions, and the computer is going to resolve all these actions very fast if you don&#039;t tell it not to do so.&lt;br /&gt;
&lt;br /&gt;
As an example, for Reversi, when someone is playing a disc, we want to wait 500 milliseconds before doing anything else in order the opponent player can figure out what move has been played.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how we do this, right after our subscription:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
       dojo.subscribe( &#039;playDisc&#039;, this, &amp;quot;notif_playDisc&amp;quot; );&lt;br /&gt;
       this.notifqueue.setSynchronous( &#039;playDisc&#039;, 500 );   // Wait 500 milliseconds after executing the playDisc handler&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tooltips ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addTooltip( nodeId, _( helpString ), _( actionString ), delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a simple text tooltip to the DOM node.&lt;br /&gt;
&lt;br /&gt;
Specify &#039;helpString&#039; to display some information about &amp;quot;what is this game element?&amp;quot;.&lt;br /&gt;
Specify &#039;actionString&#039; to display some information about &amp;quot;what happens when I click on this element?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You must specify both helpString and actionString. Most of the time, you use only one and specify a void string (&amp;quot;&amp;quot;) for the other one.&lt;br /&gt;
&lt;br /&gt;
Usually, _() must be used for the text to be marked for translation.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Delay&amp;quot; is an optional parameter. Usually, it is primarily used to specify a zero delay for some game element when the tooltip gives really important information for the game - but remember: no essential information must be placed in tooltips as they won&#039;t be displayed in some browser (see Guidelines).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   this.addTooltip( &#039;cardcount&#039;, _(&#039;Number of cards in hand&#039;), &#039;&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addTooltipHtml( nodeId, html, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add an HTML tooltip to the DOM node (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.addTooltipToClass( cssClass, _( helpString ), _( actionString ), delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add a simple text tooltip to all the DOM nodes set with this cssClass. &lt;br /&gt;
&lt;br /&gt;
IMPORTANT: all concerned nodes must have IDs to get tooltips.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;addTooltipHtmlToClass( cssClass, html, delay )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Add an HTML tooltip to to all the DOM nodes set with this cssClass (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
&lt;br /&gt;
IMPORTANT: all concerned nodes must have IDs to get tooltips&lt;br /&gt;
&lt;br /&gt;
== Dialogs, warning messages, confirmation dialogs, ... ==&lt;br /&gt;
&lt;br /&gt;
=== Warning messages ===&lt;br /&gt;
&lt;br /&gt;
Sometimes, there is something important that is happening on the game and you have to make sure all players get the message. Most of the time, the evolution of the game situation or the game log is enough, but sometimes you need something more visible.&lt;br /&gt;
&lt;br /&gt;
Ex: someone fulfill one of the end of the game condition, so this is the last turn.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.showMessage( msg, type )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
showMessage shows a message in a big rectangular area on the top of the screen of current player.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;msg&amp;quot; is the string to display. It should be translated.&lt;br /&gt;
* &amp;quot;type&amp;quot; can be set to &amp;quot;info&amp;quot; or &amp;quot;error&amp;quot;. If set to &amp;quot;info&amp;quot;, the message will be an informative message on a white background. If set to &amp;quot;error&amp;quot;, the message will be an error message on a red background.&lt;br /&gt;
&lt;br /&gt;
Important: the normal way to inform players about the progression of the game is the game log. &amp;quot;showMessage&amp;quot; is intrusive and should not be used often.&lt;br /&gt;
&lt;br /&gt;
=== Confirmation dialog ===&lt;br /&gt;
&lt;br /&gt;
When an important action with a lot of consequences is triggered by the player, you may want to propose a confirmation dialog.&lt;br /&gt;
&lt;br /&gt;
CAREFUL: the general guidelines of BGA is to AVOID the use of confirmation dialog. Confirmation dialogs slow down the game and bother players. The players knows that they have to pay attention about each move when they are playing online.&lt;br /&gt;
&lt;br /&gt;
The situation where you should use a confirmation dialog are the following:&lt;br /&gt;
* It must not happen very often during a game.&lt;br /&gt;
* It must be linked to an action that can really &amp;quot;kill a game&amp;quot; if the player do not pay attention.&lt;br /&gt;
* It must be something that can be done by mistake (ex: a link on the action status bar).&lt;br /&gt;
&lt;br /&gt;
How to display a confirmation dialog:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        this.confirmationDialog( _(&#039;Are you sure you want to make this?&#039;), dojo.hitch( this, function() {&lt;br /&gt;
            this.ajaxcall( &#039;/mygame/mygame/makeThis.html&#039;, { lock:true }, this, function( result ) {} );&lt;br /&gt;
        } ) );   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dialogs ===&lt;br /&gt;
&lt;br /&gt;
At first, you shouldn&#039;t use dialogs windows.&lt;br /&gt;
&lt;br /&gt;
BGA guidelines specify that all game elements should be displayed on the main screen. Players can eventually scroll down to see game elements they don&#039;t need to see anytime, and you may eventually create anchors to move between game area section. Of course dialogs windows are very practical, but the thing is: all players know how to scroll down, and not all players know how to show up your dialog window. In addition, when the dialog shows up, players can&#039;t access the other game components.&lt;br /&gt;
&lt;br /&gt;
Sometimes although, you need to display a dialog window. Here is how you do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  // Create the new dialog. You should store the handler in a member variable to access it later&lt;br /&gt;
  this.myDlg = new dijit.Dialog({ title: _(&amp;quot;my dialog title to translate&amp;quot;) });&lt;br /&gt;
&lt;br /&gt;
  // Create the HTML of my dialog. The best practice here is to use [[Game_layout:_view_and_template:_yourgamename.view.php_and_yourgamename_yourgamename.tpl#Javascript_templates|Javascript templates]]:&lt;br /&gt;
  var html = this.format_block( &#039;jstpl_myDialogTemplate&#039;, { &lt;br /&gt;
                arg1: myArg1,&lt;br /&gt;
                arg2: myArg2,&lt;br /&gt;
                ...&lt;br /&gt;
            } );  &lt;br /&gt;
&lt;br /&gt;
  // Show the dialog&lt;br /&gt;
  this.myDlg.attr(&amp;quot;content&amp;quot;, html );&lt;br /&gt;
  this.myDlg.show(); &lt;br /&gt;
&lt;br /&gt;
  // Now that the dialog has been displayed, you can connect your method to some dialog elements&lt;br /&gt;
  // Example, a &amp;quot;close&amp;quot; button:&lt;br /&gt;
  dojo.connect( $(&#039;closeDlg&#039;), &#039;onclick&#039;, this, function(evt){&lt;br /&gt;
                evt.preventDefault();&lt;br /&gt;
                this.myDlg.hide();&lt;br /&gt;
            } );  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tip: be careful with &amp;quot;hide()&amp;quot; method to close your dialog: the dialog and its content is not completely removed from the DOM. It can cause you problems if you try to display the same dialog several times. A good practice is to wrap all the content of your dialog in a &amp;quot;&amp;lt;div id=&#039;myDlgContent&#039;&amp;gt;&amp;quot; div element, and to call &amp;quot;dojo.destroy(&#039;myDlgContent&#039;)&amp;quot; before displaying your dialog.&lt;br /&gt;
&lt;br /&gt;
=== Scoring dialogs ===&lt;br /&gt;
&lt;br /&gt;
Sometimes at the end of a round you want to display a big table that details the points wins in each section of the game.&lt;br /&gt;
&lt;br /&gt;
Example: in Hearts game, we display at the end of each round the number of &amp;quot;heart&amp;quot; cards collected by each player, the player who collected the Queen of Spades, and the total number of points loose by each player.&lt;br /&gt;
&lt;br /&gt;
Scoring dialogs are managed entirely on &#039;&#039;&#039;PHP side&#039;&#039;&#039;, but they are described here as their effects are visible only on client side.&lt;br /&gt;
&lt;br /&gt;
Displaying a scoring dialog is quite simple and is using a special notification type: &amp;quot;tableWindow&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // on PHP side:&lt;br /&gt;
  $this-&amp;gt;notifyAllPlayers( &amp;quot;tableWindow&amp;quot;, &#039;&#039;, array(&lt;br /&gt;
            &amp;quot;id&amp;quot; =&amp;gt; &#039;finalScoring&#039;,&lt;br /&gt;
            &amp;quot;title&amp;quot; =&amp;gt; clienttranslate(&amp;quot;Title of the scoring dialog&amp;quot;),&lt;br /&gt;
            &amp;quot;table&amp;quot; =&amp;gt; $table&lt;br /&gt;
        ) ); &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;table&amp;quot; argument is a 2 dimensional PHP array that describe the table you want to display, line by line and column by column.&lt;br /&gt;
&lt;br /&gt;
Example: display an 3x3 array of strings&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $table = array(&lt;br /&gt;
      array( &amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, &amp;quot;three&amp;quot; ),    // This is my first line&lt;br /&gt;
      array( &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;, &amp;quot;six&amp;quot; ),    // This is my second line&lt;br /&gt;
      array( &amp;quot;seven&amp;quot;, &amp;quot;height&amp;quot;, &amp;quot;nine&amp;quot; )    // This is my third line&lt;br /&gt;
   );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see above, in each &amp;quot;cell&amp;quot; of your array you can display a simple string value. But you can also display a complex value with a template and associated arguments like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   $table = array(&lt;br /&gt;
      array( &amp;quot;one&amp;quot;, &amp;quot;two&amp;quot;, array( &amp;quot;str&amp;quot; =&amp;gt; &amp;quot;a string with an ${argument}&amp;quot;, &amp;quot;args&amp;quot; =&amp;gt; array( &#039;argument&#039; =&amp;gt; &#039;argument_value&#039; )  ) ),&lt;br /&gt;
      array( &amp;quot;four&amp;quot;, &amp;quot;five&amp;quot;, &amp;quot;six&amp;quot; ), &lt;br /&gt;
      array( &amp;quot;seven&amp;quot;, &amp;quot;height&amp;quot;, &amp;quot;nine&amp;quot; )&lt;br /&gt;
   );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is especially useful when you want to display player names with colors. Example from &amp;quot;Hearts&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        $firstRow = array( &#039;&#039; );&lt;br /&gt;
        foreach( $players as $player_id =&amp;gt; $player )&lt;br /&gt;
        {&lt;br /&gt;
            $firstRow[] = array( &#039;str&#039; =&amp;gt; &#039;${player_name}&#039;,&lt;br /&gt;
                                 &#039;args&#039; =&amp;gt; array( &#039;player_name&#039; =&amp;gt; $player[&#039;player_name&#039;] ),&lt;br /&gt;
                                 &#039;type&#039; =&amp;gt; &#039;header&#039;&lt;br /&gt;
                               );&lt;br /&gt;
        }&lt;br /&gt;
        $table[] = $firstRow;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Update players score ==&lt;br /&gt;
&lt;br /&gt;
Increase a player score (with a positive or negative number):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  this.scoreCtrl[ player_id ].incValue( score_delta );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set a player score to a specific value:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  this.scoreCtrl[ player_id ].setValue( new_score );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Players panels ==&lt;br /&gt;
&lt;br /&gt;
=== Adding stuff to player&#039;s panel ===&lt;br /&gt;
&lt;br /&gt;
At first, create a new &amp;quot;JS template&amp;quot; string in your template (tpl) file:&lt;br /&gt;
&lt;br /&gt;
(from Reversi example)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var jstpl_player_board = &#039;\&amp;lt;div class=&amp;quot;cp_board&amp;quot;&amp;gt;\&lt;br /&gt;
    &amp;lt;div id=&amp;quot;stoneicon_p${id}&amp;quot; class=&amp;quot;gmk_stoneicon gmk_stoneicon_${color}&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;span id=&amp;quot;stonecount_p${id}&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;\&lt;br /&gt;
&amp;lt;/div&amp;gt;&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, you add this piece of code in your JS file to add this template to each player panel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            // Setting up player boards&lt;br /&gt;
            for( var player_id in gamedatas.players )&lt;br /&gt;
            {&lt;br /&gt;
                var player = gamedatas.players[player_id];&lt;br /&gt;
                         &lt;br /&gt;
                // Setting up players boards if needed&lt;br /&gt;
                var player_board_div = $(&#039;player_board_&#039;+player_id);&lt;br /&gt;
                dojo.place( this.format_block(&#039;jstpl_player_board&#039;, player ), player_board_div );&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: the code above is of course from your &amp;quot;setup&amp;quot; function in your Javascript).&lt;br /&gt;
&lt;br /&gt;
Very often, you have to distinguish current player and others players. In this case, you just have to create another JS template (ex: jstpl_otherplayer_board) and use it when &amp;quot;player_id&amp;quot; is different than &amp;quot;this.player_id&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Player&#039;s panel disabling/enabling ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.disablePlayerPanel( player_id )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Disable given player panel (the panel background become gray).&lt;br /&gt;
&lt;br /&gt;
Usually, this is used to signal that this played passes, or will be inactive during a while.&lt;br /&gt;
&lt;br /&gt;
Note that the only effect of this is visual. There are no consequences on the behaviour of the panel itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.enablePlayerPanel( player_id )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enable a player panel that has been disabled before.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;this.enableAllPlayerPanels()&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Enable all player panels that has been disabled before.&lt;br /&gt;
&lt;br /&gt;
== Image loading ==&lt;br /&gt;
&lt;br /&gt;
See also [[Game_art:_img_directory]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Be careful&#039;&#039;&#039;: by default, ALL images of your img directory are loaded on a player&#039;s browser when he loads the game. For this reason, don&#039;t let in your img directory images that are not useful, otherwise it&#039;s going to slowdown the game load.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dontPreloadImage( image_file_name )&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Using dontPreloadImage, you tell the interface to not preload a specific image in your img directory.&lt;br /&gt;
&lt;br /&gt;
Example of use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
this.dontPreloadImage( &#039;cards.png&#039; );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is particularly useful if for example you have 2 different themes for a game. To accelerate the loading of the game, you can specify to not preload images corresponding to the other theme.&lt;br /&gt;
&lt;br /&gt;
Another example of use: in &amp;quot;Gosu&amp;quot; game with Kamakor extension, you play with 5 sets of cards among 10 available. Cards images are organized by sets, and we only preload the images corresponding to the 5 current sets.&lt;br /&gt;
&lt;br /&gt;
== Other useful stuff ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dojo.hitch&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With dojo.hitch, you can create a callback function that will run with your game object context whatever happen.&lt;br /&gt;
&lt;br /&gt;
Typical example: display a BGA confirmation dialog with a callback function created with dojo.hitch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        this.confirmationDialog( _(&#039;Are you sure you want to make this?&#039;), dojo.hitch( this, function() {&lt;br /&gt;
            this.ajaxcall( &#039;/mygame/mygame/makeThis.html&#039;, { lock:true }, this, function( result ) {} );&lt;br /&gt;
        } ) );   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the example above, using dojo.hitch, we are sure that the &amp;quot;this&amp;quot; object will be set when the callback is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; updateCounters(counters)&lt;br /&gt;
: Useful for updating game counters in the player panel (such as resources). &lt;br /&gt;
: &#039;counters&#039; arg is an associative array [counter_name_value =&amp;gt; [ &#039;counter_name&#039; =&amp;gt; counter_name_value, &#039;counter_value&#039; =&amp;gt; counter_value_value], ... ]&lt;br /&gt;
: All counters must be referenced in this.gamedatas.counters and will be updated.&lt;br /&gt;
: DOM objects referenced by &#039;counter_name&#039; will have their innerHTML updated with &#039;counter_value&#039;.&lt;br /&gt;
&lt;br /&gt;
== BGA GUI components ==&lt;br /&gt;
&lt;br /&gt;
BGA framework provides some useful ready-to-use components for the game interface:&lt;br /&gt;
&lt;br /&gt;
[[Studio#BGA_Studio_game_components_reference]]&lt;br /&gt;
&lt;br /&gt;
Note that each time you are using an additional component, you must declare it at the top of your Javascript file in the list of modules used.&lt;br /&gt;
&lt;br /&gt;
Example if you are using &amp;quot;ebg.stock&amp;quot;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
define([&lt;br /&gt;
    &amp;quot;dojo&amp;quot;,&amp;quot;dojo/_base/declare&amp;quot;,&lt;br /&gt;
    &amp;quot;ebg/core/gamegui&amp;quot;,&lt;br /&gt;
    &amp;quot;ebg/counter&amp;quot;,&lt;br /&gt;
    &amp;quot;ebg/stock&amp;quot;  /// &amp;lt;=== we are using ebg.stock module&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Game_interface_stylesheet:_yourgamename.css&amp;diff=832</id>
		<title>Game interface stylesheet: yourgamename.css</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Game_interface_stylesheet:_yourgamename.css&amp;diff=832"/>
		<updated>2013-05-20T13:14:58Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the CSS stylesheet of your game User Interface.&lt;br /&gt;
    &lt;br /&gt;
Styles defined on this file will be applied to the HTML elements you define in your HTML template (yourgame_yourgame.tpl), and to HTML elements you create dynamically with Javascript.&lt;br /&gt;
    &lt;br /&gt;
Usually, you are using CSS to:&lt;br /&gt;
    &lt;br /&gt;
1°) define the overall layout of your game&lt;br /&gt;
(ex: place the board on the top left, place player&#039;s hand beside, place the deck on the right, ...).&lt;br /&gt;
&lt;br /&gt;
2°) create your CSS-sprites:&lt;br /&gt;
All images of your games should be gathered into a small number of image files. Then, using background-image and background-position CSS properties, you create HTML blocks that can display these images correctly.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    Example of CSS sprites (a black token and a white token, 20x20px each, embedded in the same &amp;quot;tokens.png&amp;quot; 40x20px image):&lt;br /&gt;
&lt;br /&gt;
    .white_token {&lt;br /&gt;
        background-image: url(&#039;../../img/emptygame/tokens.png&#039;);&lt;br /&gt;
        background-position: 0px 0px;&lt;br /&gt;
    }&lt;br /&gt;
    .black_token {&lt;br /&gt;
        background-image: url(&#039;../../img/emptygame/tokens.png&#039;);&lt;br /&gt;
        background-position: -20px 0px;&lt;br /&gt;
    }&lt;br /&gt;
    .token {&lt;br /&gt;
        width: 20px;&lt;br /&gt;
        height: 20px;&lt;br /&gt;
        background-repeat: none;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
3°) ... anything else:&lt;br /&gt;
&lt;br /&gt;
It is really easy to add and remove CSS classes dynamically from your Javascript with dojo.addClass and dojo.removeClass. It is also easy to check if an element has a class (dojo.hasClass) or to get all elements with a specific class (dojo.query). &lt;br /&gt;
&lt;br /&gt;
This is why, very often, using CSS classes for the logic of your user interface allow you to do complex thing easily.&lt;br /&gt;
        &lt;br /&gt;
Note: on the production platform, this file will be compressed and comments will be removed. Consequently, don&#039;t hesitate to put as many comments as necessary.&lt;br /&gt;
&lt;br /&gt;
Important: ALL the CSS directives for your game must be included in this CSS file. You can&#039;t create additional CSS files and import them.&lt;br /&gt;
&lt;br /&gt;
== Warning: using Z-index ==&lt;br /&gt;
&lt;br /&gt;
You may use z-index CSS property in your game interface, but you should pay attention to the following: BGA dialogs are displayed with a z-index of 950. If you want to use z-index safely, you should use value &#039;&#039;&#039;lower than 900&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
About z-index: don&#039;t forget that if you are using a z-index, your element will be displayed above all elements that do not have a z-index. So it&#039;s no use to have big z-index values: 1 is enough most of the time :)&lt;br /&gt;
&lt;br /&gt;
== spectatorMode ==&lt;br /&gt;
&lt;br /&gt;
When a spectator (= a player that is not part of the game) is viewing a game, the BGA framework add the CSS class &amp;quot;spectatorMode&amp;quot; to the wrapping HTML tag of your game.&lt;br /&gt;
&lt;br /&gt;
This way, if you want to apply a special style to some elements of your game for spectators, you can do this in your CSS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.spectatorMode #your_element_id {&lt;br /&gt;
    /* your special style */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The most common usage of this is to hide some elements to spectators. For example, to hide &amp;quot;my hand&amp;quot; elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.spectatorMode #my_hand {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_FAQ&amp;diff=831</id>
		<title>Studio FAQ</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_FAQ&amp;diff=831"/>
		<updated>2013-05-20T13:04:57Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* I added some game options / some game statistics, but they don&amp;#039;t show? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a place where we will collect and answer frequently asked questions.&lt;br /&gt;
&lt;br /&gt;
== What should I use to access the files through SFTP? ==&lt;br /&gt;
&lt;br /&gt;
There is a lot of tools to do that. Use the one you are the most comfortable with.&lt;br /&gt;
&lt;br /&gt;
On Linux Gnome, you can for example use the &#039;Connect to server&#039; function of the Nautilus file management system, or use sshfs.&lt;br /&gt;
&lt;br /&gt;
On Windows, there is for example the [http://winscp.net/ WinSCP client].&lt;br /&gt;
&lt;br /&gt;
== I can&#039;t edit the files in my game directory, it looks like they are readonly. What&#039;s happening? ==&lt;br /&gt;
&lt;br /&gt;
Maybe there is a maintenance operation underway.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t get access back after some time (say one or two hours), please send us a mail to check.&lt;br /&gt;
&lt;br /&gt;
== I can&#039;t access the Studio back-office, I get a &#039;Not authorized&#039; error message? ==&lt;br /&gt;
&lt;br /&gt;
You should first connect to the Studio website (with any of your &amp;lt;developer name&amp;gt;&amp;lt;number&amp;gt; accounts). As the authentication is shared with the back-office, then you will be able to access it.&lt;br /&gt;
&lt;br /&gt;
== I don&#039;t know the name to use to commit my game, what name should I use? ==&lt;br /&gt;
&lt;br /&gt;
The game name for committing is the name of the game in lower case and without spaces or special characters (ex: puertorico).&lt;br /&gt;
It is the same name as the name used for the game folder in your SFTP access.&lt;br /&gt;
&lt;br /&gt;
== What is the working language on BGA studio? ==&lt;br /&gt;
&lt;br /&gt;
Working language is &#039;&#039;&#039;English&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Variables and functions must be named with English words.&lt;br /&gt;
&lt;br /&gt;
Comments must be written in English.&lt;br /&gt;
&lt;br /&gt;
Game interface strings and game logs must be written in English.&lt;br /&gt;
&lt;br /&gt;
== How can I provide translation in my language? == &lt;br /&gt;
&lt;br /&gt;
BGA administrators will translate the game in French before the game release.&lt;br /&gt;
&lt;br /&gt;
After the game release, the collaborative translation interface can be used to translate into other languages.&lt;br /&gt;
&lt;br /&gt;
Check [[Translations]] to see how to make your game translatable.&lt;br /&gt;
&lt;br /&gt;
== I updated the images in the &#039;img&#039; folder of my game, but they don&#039;t show? ==&lt;br /&gt;
&lt;br /&gt;
On BGA Studio, there is the gameserver you are developing on, and the main site server that is used to launch the games. The game icon, box and the publisher logo are hosted on the main site server, so they are not immediately available when you modify them on the gameserver. To deploy them on the main site, you have to use the [[Studio back-office]] to do a commit.&lt;br /&gt;
&lt;br /&gt;
If the images still don&#039;t show after that, please try emptying your browser cache and reloading the page.&lt;br /&gt;
&lt;br /&gt;
== I added some game options / some game statistics, but they don&#039;t show? ==&lt;br /&gt;
&lt;br /&gt;
When you modify these 2 files, you need to deploy the update from your BGA backoffice page.&lt;br /&gt;
&lt;br /&gt;
== Should I use images free from copyright? ==&lt;br /&gt;
&lt;br /&gt;
If you are developing a game in the public domain, yes (or you can make your own if you feel it&#039;s better). &lt;br /&gt;
&lt;br /&gt;
If you are developing a game for which we have a licence, we will usually provide art files from the publisher.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Gamehelphearts&amp;diff=830</id>
		<title>Gamehelphearts</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Gamehelphearts&amp;diff=830"/>
		<updated>2013-05-20T13:03:03Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hearts is a card game for 4 players, every man for himself. It uses the standard 52-card pack.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rank&#039;&#039;&#039;&lt;br /&gt;
A (high) to 2 (low).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Setup&#039;&#039;&#039;&lt;br /&gt;
The entire deck is dealt, giving you a hand of 13 cards. After looking at your hand, choose three cards to pass to another player.&lt;br /&gt;
&lt;br /&gt;
The passing rotation is: (1st hand) to the player on your left, (2nd hand) to the player across the table, (3rd hand) to the player on your right, (4th hand) no passing. The rotation repeats until the game ends.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tricks&#039;&#039;&#039;&lt;br /&gt;
After passing cards, the player holding the 2 of clubs leads the first trick.&lt;br /&gt;
&lt;br /&gt;
Each player must follow suit if possible. If you have no cards of the suit led, you may play a card of any suit. Exception: You may not play a heart or the Queen of Spades on the first trick, even if you have no clubs.&lt;br /&gt;
&lt;br /&gt;
The highest card of the suit led wins the trick. The winner of a trick starts the next trick.&lt;br /&gt;
&lt;br /&gt;
Hearts may not be led until a heart has been played (this is called &amp;quot;breaking&amp;quot; hearts). The Queen of Spades may be lead at any time. [NB: In traditional Hearts, playing the Queen of Spades also breaks hearts.]&lt;br /&gt;
&lt;br /&gt;
There is no trump suit.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scoring&#039;&#039;&#039;&lt;br /&gt;
At the end of each hand, each heart taken by a player counts -1, and the Queen of Spades counts -13.&lt;br /&gt;
&lt;br /&gt;
If one player has taken all 13 hearts &#039;&#039;and&#039;&#039; the Queen of Spades (this is known as &amp;quot;shooting the moon&amp;quot;, or &amp;quot;slam&amp;quot;), that player scores 0 and all other players score -26.  Warning other players about an attempt to shoot the moon is team play, and a breach of Hearts etiquette.&lt;br /&gt;
&lt;br /&gt;
When one or more players reach zero, the game ends. The player with the highest score wins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variants&#039;&#039;&#039;&lt;br /&gt;
Normal game is 100 points.&lt;br /&gt;
Quick game is 75 points.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=825</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=825"/>
		<updated>2013-05-13T12:21:13Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Updating string to translate */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== How to submit changes? ==&lt;br /&gt;
&lt;br /&gt;
To submit your changes, you just have to commit your work from BGA Studio backoffice, as you did during the development phase.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: as soon as you commited your changes, we assume that your code is ready to deploy &#039;&#039;&#039;anytime&#039;&#039;&#039; on BGA. Consequently, please do not commit a development in progress.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
=== Updating Statistics ===&lt;br /&gt;
&lt;br /&gt;
You should be careful when updating a statistics:&lt;br /&gt;
&lt;br /&gt;
* If you want to add a new statistics, please refer to the paragraph above (&amp;quot;changes that breaks the games in progress&amp;quot;).&lt;br /&gt;
* If you want to update a statistic, please update it and do not remove/create another one. Otherwise, the statistic won&#039;t keep the same ID and players will lost all the historical statistics data.&lt;br /&gt;
* If your game is published on BGA, please don&#039;t remove any statistics (historical data will be lost).&lt;br /&gt;
&lt;br /&gt;
=== Updating string to be translated  ===&lt;br /&gt;
&lt;br /&gt;
When you update a string that has been marked to be translatable, please keep in mind that all current translations done by the BGA community will be lost.&lt;br /&gt;
&lt;br /&gt;
Consequently, when you are about to modify a string to be translated (after release), please ask you the following questions:&lt;br /&gt;
* Is it just an English misspelling? In this case, it is better to fix the English translation of the string than the original string to be translated.&lt;br /&gt;
* Has the meaning of the string changed? If yes, you HAVE to change the original string in order to invalidate all translations that has been done already.&lt;br /&gt;
* Is there a similar string already used elsewhere in my game? In this case, you&#039;d better use it again to enjoy immediately all translations already available.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;br /&gt;
&lt;br /&gt;
If you do some major changes to your game like:&lt;br /&gt;
* Introducing a new expansion.&lt;br /&gt;
* Major code rewriting/refactoring.&lt;br /&gt;
&lt;br /&gt;
... please tell us. In this case, we can:&lt;br /&gt;
* Make your game back from &amp;quot;gold&amp;quot; to &amp;quot;public beta&amp;quot;, to incite player to report bugs.&lt;br /&gt;
* Discuss with you about the release date of the next BGA package.&lt;br /&gt;
* Pay attention to your game when publishing the package.&lt;br /&gt;
* And eventually, publish a news about it :)&lt;br /&gt;
&lt;br /&gt;
===Post-release and commit===&lt;br /&gt;
&lt;br /&gt;
As said above: for games already published on BGA, we assume that your code is ready to deploy as soon as you commited your changes.&lt;br /&gt;
&lt;br /&gt;
In consequence, please:&lt;br /&gt;
* Do not commit until you finished and tested your updates.&lt;br /&gt;
* Do not commit a development in progress.&lt;br /&gt;
* As a rule of thumb: do not commit something that will bring the game in a state that should not be seen by players.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=824</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=824"/>
		<updated>2013-05-13T12:18:44Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Changes that breaks the games in progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== How to submit changes? ==&lt;br /&gt;
&lt;br /&gt;
To submit your changes, you just have to commit your work from BGA Studio backoffice, as you did during the development phase.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: as soon as you commited your changes, we assume that your code is ready to deploy &#039;&#039;&#039;anytime&#039;&#039;&#039; on BGA. Consequently, please do not commit a development in progress.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
=== Updating Statistics ===&lt;br /&gt;
&lt;br /&gt;
You should be careful when updating a statistics:&lt;br /&gt;
&lt;br /&gt;
* If you want to add a new statistics, please refer to the paragraph above (&amp;quot;changes that breaks the games in progress&amp;quot;).&lt;br /&gt;
* If you want to update a statistic, please update it and do not remove/create another one. Otherwise, the statistic won&#039;t keep the same ID and players will lost all the historical statistics data.&lt;br /&gt;
* If your game is published on BGA, please don&#039;t remove any statistics (historical data will be lost).&lt;br /&gt;
&lt;br /&gt;
=== Updating string to translate  ===&lt;br /&gt;
&lt;br /&gt;
When you update a string that has been marked to be translatable, please keep in mind that all current translations done by the BGA community will be lost.&lt;br /&gt;
&lt;br /&gt;
Consequently, when you are about to modify a string to be translated (after release), please ask you the following questions:&lt;br /&gt;
* Is it just an English mispelling? In this case, it is better to fix the English translation of the string than the original string to be translated.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;br /&gt;
&lt;br /&gt;
If you do some major changes to your game like:&lt;br /&gt;
* Introducing a new expansion.&lt;br /&gt;
* Major code rewriting/refactoring.&lt;br /&gt;
&lt;br /&gt;
... please tell us. In this case, we can:&lt;br /&gt;
* Make your game back from &amp;quot;gold&amp;quot; to &amp;quot;public beta&amp;quot;, to incite player to report bugs.&lt;br /&gt;
* Discuss with you about the release date of the next BGA package.&lt;br /&gt;
* Pay attention to your game when publishing the package.&lt;br /&gt;
* And eventually, publish a news about it :)&lt;br /&gt;
&lt;br /&gt;
===Post-release and commit===&lt;br /&gt;
&lt;br /&gt;
As said above: for games already published on BGA, we assume that your code is ready to deploy as soon as you commited your changes.&lt;br /&gt;
&lt;br /&gt;
In consequence, please:&lt;br /&gt;
* Do not commit until you finished and tested your updates.&lt;br /&gt;
* Do not commit a development in progress.&lt;br /&gt;
* As a rule of thumb: do not commit something that will bring the game in a state that should not be seen by players.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Steps_to_create_a_BGA_game&amp;diff=809</id>
		<title>Steps to create a BGA game</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Steps_to_create_a_BGA_game&amp;diff=809"/>
		<updated>2013-05-09T18:54:43Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Here&#039;s a summary of the different steps you would follow when developing a game with BGA Studio.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step !! How to reach this ste?p !! What happened during the step?&lt;br /&gt;
|-&lt;br /&gt;
| Initial || [[How to join BGA developer team?]] || You discuss with us to choose your game&lt;br /&gt;
|-&lt;br /&gt;
| Assigned || You choosed a game  || You can start the development of the game&lt;br /&gt;
|-&lt;br /&gt;
| Pre-alpha || You&#039;ve started to write some piece of code  || You develop the game. During this phase, we can assist you with the framework and give you some pieces of advice.&lt;br /&gt;
|-&lt;br /&gt;
| Alpha || You tell us that your development is finished || The game is incorporate in BGA global &amp;quot;package&amp;quot;, and is published on BGA preproduction server. We are reviewing the game on our side and with you, and help you to finalize some details to polish the game.&lt;br /&gt;
|-&lt;br /&gt;
| Private beta || We give a &amp;quot;go&amp;quot; || On preproduction platform, the publisher, the designer, we and you can test the game together and separately. We help you to take into account remarks from the publisher and the designer.&lt;br /&gt;
|-&lt;br /&gt;
| Public beta || The adaptation is approved by the publiher || We find together a good launch date for the game, we announce the game on BGA news, and then player can start to play! During the first days, it is common that some bugs are reported by players, and you can fix them following the instructions in [[Post-release phase]].&lt;br /&gt;
|-&lt;br /&gt;
| Gold || The game is stable on BGA || Congrats! You can still modify and optimize things following the instructions in [[Post-release phase]].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_function_reference&amp;diff=806</id>
		<title>Studio function reference</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_function_reference&amp;diff=806"/>
		<updated>2013-05-06T17:08:23Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Client side (Javascript functions) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page references useful server side and client side functions (and some interesting class variables), so that nobody needs to reinvent the wheel (unless he wants to).&lt;br /&gt;
&lt;br /&gt;
This list is not exhaustive, in particular functions already well described by comments in the &#039;EmptyGame&#039; game template may not be described again below.&lt;br /&gt;
&lt;br /&gt;
== Server side (PHP functions) ==&lt;br /&gt;
&lt;br /&gt;
== Client side (Javascript functions) ==&lt;br /&gt;
&lt;br /&gt;
; this.player_id&lt;br /&gt;
: Id of the player on whose browser the code is running.&lt;br /&gt;
&lt;br /&gt;
; this.isSpectator&lt;br /&gt;
: Flag set to true if the user at the table is a spectator (not a player).&lt;br /&gt;
&lt;br /&gt;
; this.gamedatas&lt;br /&gt;
: Contains your initial set of datas to init the game, created at game start or game refresh (F5)&lt;br /&gt;
: You can update it as needed to keep an up to date reference of the game on the client side.&lt;br /&gt;
&lt;br /&gt;
; slideToObject: function( mobile_obj, target_obj, duration, delay )&lt;br /&gt;
: Return an dojo.fx animation that is sliding a DOM object from its current position over another one&lt;br /&gt;
: Animate a slide of the DOM object referred to by domNodeToSlide from its current position to the xpos, ypos relative to the object referred to by domNodeToSlideTo.&lt;br /&gt;
&lt;br /&gt;
; slideToObjectPos: function( mobile_obj, target_obj, target_x, target_y, duration, delay )&lt;br /&gt;
: Return an dojo.fx animation that is sliding a DOM object from its current position over another one at the given coordinates relative to the target object.&lt;br /&gt;
&lt;br /&gt;
; updateCounters(counters)&lt;br /&gt;
: Useful for updating game counters in the player panel (such as resources). &lt;br /&gt;
: &#039;counters&#039; arg is an associative array [counter_name_value =&amp;gt; [ &#039;counter_name&#039; =&amp;gt; counter_name_value, &#039;counter_value&#039; =&amp;gt; counter_value_value], ... ]&lt;br /&gt;
: All counters must be referenced in this.gamedatas.counters and will be updated.&lt;br /&gt;
: DOM objects referenced by &#039;counter_name&#039; will have their innerHTML updated with &#039;counter_value&#039;.&lt;br /&gt;
&lt;br /&gt;
; addTooltip( node, _( helpString ), _( actionString ), delay );&lt;br /&gt;
: Add a simple text tooltip to the DOM node. Only one of &#039;helpString&#039; or &#039;actionString&#039; must be used. _() must be used for the text to be marked for translation.&lt;br /&gt;
&lt;br /&gt;
; addTooltipHtml( node, html, delay );&lt;br /&gt;
: Add an HTML tooltip to the DOM node (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
&lt;br /&gt;
; addTooltipToClass( cssClass, _( helpString ), _( actionString ), delay );&lt;br /&gt;
: Add a simple text tooltip to all the DOM nodes set with this cssClass. Only one of &#039;helpString&#039; or &#039;actionString&#039; must be used. _() must be used for the text to be marked for translation.&lt;br /&gt;
: NB: all concerned nodes must have IDs to get tooltips&lt;br /&gt;
&lt;br /&gt;
; addTooltipHtmlToClass( cssClass, html, delay );&lt;br /&gt;
: Add an HTML tooltip to to all the DOM nodes set with this cssClass (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
: NB: all concerned nodes must have IDs to get tooltips&lt;br /&gt;
&lt;br /&gt;
; addEventToClass: function( cssClassName, eventName, functionName )&lt;br /&gt;
: DEPRECATED (please use connectClass below)&lt;br /&gt;
&lt;br /&gt;
; connectClass: function( cssClassName, eventName, functionName )&lt;br /&gt;
: Same as dojo.connect(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; addStyleToClass: function( cssClassName, cssProperty, propertyValue )&lt;br /&gt;
: Same as dojo.style(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
; isCurrentPlayerActive()&lt;br /&gt;
: Returns true if the player on whose browser the code is running is currently active (it&#039;s his turn to play)&lt;br /&gt;
&lt;br /&gt;
; checkAction: function( action, nomessage )&lt;br /&gt;
: Check if player can do the specified action by taking into account:  _ current game state &amp;amp; _ interface locking&lt;br /&gt;
: return true if action is authorized&lt;br /&gt;
: return false and display an error message if not (display no message if nomessage is specified)&lt;br /&gt;
&lt;br /&gt;
; showMessage: function( msg, type )&lt;br /&gt;
: Show an information message during a few seconds at the top of the page&lt;br /&gt;
: Type can be &#039;error&#039; or &#039;info&#039;&lt;br /&gt;
&lt;br /&gt;
; this.scoreCtrl[ player_id ].incValue( score_delta );&lt;br /&gt;
: Adds score_delta (positive or negative integer) to the current score value for player&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio_function_reference&amp;diff=805</id>
		<title>Studio function reference</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio_function_reference&amp;diff=805"/>
		<updated>2013-05-06T17:07:55Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Client side (Javascript functions) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page references useful server side and client side functions (and some interesting class variables), so that nobody needs to reinvent the wheel (unless he wants to).&lt;br /&gt;
&lt;br /&gt;
This list is not exhaustive, in particular functions already well described by comments in the &#039;EmptyGame&#039; game template may not be described again below.&lt;br /&gt;
&lt;br /&gt;
== Server side (PHP functions) ==&lt;br /&gt;
&lt;br /&gt;
== Client side (Javascript functions) ==&lt;br /&gt;
&lt;br /&gt;
; this.player_id&lt;br /&gt;
: Id of the player on whose browser the code is running.&lt;br /&gt;
&lt;br /&gt;
; this.isSpectator&lt;br /&gt;
: Flag set to true if the user at the table is a spectator (not a player).&lt;br /&gt;
&lt;br /&gt;
; this.gamedatas&lt;br /&gt;
: Contains your initial set of datas to init the game, created at game start or game refresh (F5)&lt;br /&gt;
: You can update it as needed to keep an up to date reference of the game on the client side.&lt;br /&gt;
&lt;br /&gt;
; slideToObject: function( mobile_obj, target_obj, duration, delay )&lt;br /&gt;
: Return an dojo.fx animation that is sliding a DOM object from its current position over another one&lt;br /&gt;
: Animate a slide of the DOM object referred to by domNodeToSlide from its current position to the xpos, ypos relative to the object referred to by domNodeToSlideTo.&lt;br /&gt;
&lt;br /&gt;
; slideToObjectPos: function( mobile_obj, target_obj, target_x, target_y, duration, delay )&lt;br /&gt;
: Return an dojo.fx animation that is sliding a DOM object from its current position over another one at the given coordinates relative to the target object.&lt;br /&gt;
&lt;br /&gt;
; updateCounters(counters)&lt;br /&gt;
: Useful for updating game counters in the player panel (such as resources). &lt;br /&gt;
: &#039;counters&#039; arg is an associative array [counter_name_value =&amp;gt; [ &#039;counter_name&#039; =&amp;gt; counter_name_value, &#039;counter_value&#039; =&amp;gt; counter_value_value], ... ]&lt;br /&gt;
: All counters must be referenced in this.gamedatas.counters and will be updated.&lt;br /&gt;
: DOM objects referenced by &#039;counter_name&#039; will have their innerHTML updated with &#039;counter_value&#039;.&lt;br /&gt;
&lt;br /&gt;
; addTooltip( node, _( helpString ), _( actionString ), delay );&lt;br /&gt;
: Add a simple text tooltip to the DOM node. Only one of &#039;helpString&#039; or &#039;actionString&#039; must be used. _() must be used for the text to be marked for translation.&lt;br /&gt;
&lt;br /&gt;
; addTooltipHtml( node, html, delay );&lt;br /&gt;
: Add an HTML tooltip to the DOM node (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
&lt;br /&gt;
; addTooltipToClass( cssClass, _( helpString ), _( actionString ), delay );&lt;br /&gt;
: Add a simple text tooltip to all the DOM nodes set with this cssClass. Only one of &#039;helpString&#039; or &#039;actionString&#039; must be used. _() must be used for the text to be marked for translation.&lt;br /&gt;
: NB: all concerned nodes must have IDs to get tooltips&lt;br /&gt;
&lt;br /&gt;
; addTooltipHtmlToClass( cssClass, html, delay );&lt;br /&gt;
: Add an HTML tooltip to to all the DOM nodes set with this cssClass (for more elaborate content such as presenting a bigger version of a card).&lt;br /&gt;
: NB: all concerned nodes must have IDs to get tooltips&lt;br /&gt;
&lt;br /&gt;
; addEventToClass: function( cssClassName, eventName, functionName )&lt;br /&gt;
: DEPRECATED (see connectClass below)&lt;br /&gt;
&lt;br /&gt;
; connectClass: function( cssClassName, eventName, functionName )&lt;br /&gt;
: Same as dojo.connect(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; addStyleToClass: function( cssClassName, cssProperty, propertyValue )&lt;br /&gt;
: Same as dojo.style(), but for all the nodes set with the specified cssClassName&lt;br /&gt;
&lt;br /&gt;
; isCurrentPlayerActive()&lt;br /&gt;
: Returns true if the player on whose browser the code is running is currently active (it&#039;s his turn to play)&lt;br /&gt;
&lt;br /&gt;
; checkAction: function( action, nomessage )&lt;br /&gt;
: Check if player can do the specified action by taking into account:  _ current game state &amp;amp; _ interface locking&lt;br /&gt;
: return true if action is authorized&lt;br /&gt;
: return false and display an error message if not (display no message if nomessage is specified)&lt;br /&gt;
&lt;br /&gt;
; showMessage: function( msg, type )&lt;br /&gt;
: Show an information message during a few seconds at the top of the page&lt;br /&gt;
: Type can be &#039;error&#039; or &#039;info&#039;&lt;br /&gt;
&lt;br /&gt;
; this.scoreCtrl[ player_id ].incValue( score_delta );&lt;br /&gt;
: Adds score_delta (positive or negative integer) to the current score value for player&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=803</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=803"/>
		<updated>2013-05-02T12:05:14Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* What can be modified after release? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== How to submit changes? ==&lt;br /&gt;
&lt;br /&gt;
To submit your changes, you just have to commit your work from BGA Studio backoffice, as you did during the development phase.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: as soon as you commited your changes, we assume that your code is ready to deploy &#039;&#039;&#039;anytime&#039;&#039;&#039; on BGA. Consequently, please do not commit a development in progress.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;br /&gt;
&lt;br /&gt;
If you do some major changes to your game like:&lt;br /&gt;
* Introducing a new expansion.&lt;br /&gt;
* Major code rewriting/refactoring.&lt;br /&gt;
&lt;br /&gt;
... please tell us. In this case, we can:&lt;br /&gt;
* Make your game back from &amp;quot;gold&amp;quot; to &amp;quot;public beta&amp;quot;, to incite player to report bugs.&lt;br /&gt;
* Discuss with you about the release date of the next BGA package.&lt;br /&gt;
* Pay attention to your game when publishing the package.&lt;br /&gt;
* And eventually, publish a news about it :)&lt;br /&gt;
&lt;br /&gt;
===Post-release and commit===&lt;br /&gt;
&lt;br /&gt;
As said above: for games already published on BGA, we assume that your code is ready to deploy as soon as you commited your changes.&lt;br /&gt;
&lt;br /&gt;
In consequence, please:&lt;br /&gt;
* Do not commit until you finished and tested your updates.&lt;br /&gt;
* Do not commit a development in progress.&lt;br /&gt;
* As a rule of thumb: do not commit something that will bring the game in a state that should not be seen by players.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=802</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=802"/>
		<updated>2013-05-02T12:01:12Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* How to submit changes? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== How to submit changes? ==&lt;br /&gt;
&lt;br /&gt;
To submit your changes, you just have to commit your work from BGA Studio backoffice, as you did during the development phase.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Warning&#039;&#039;&#039;: as soon as you commited your changes, we assume that your code is ready to deploy &#039;&#039;&#039;anytime&#039;&#039;&#039; on BGA. Consequently, please do not commit a development in progress.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;br /&gt;
&lt;br /&gt;
If you do some major changes to your game like:&lt;br /&gt;
* Introducing a new expansion.&lt;br /&gt;
* Major code rewriting/refactoring.&lt;br /&gt;
&lt;br /&gt;
... please tell us. In this case, we can:&lt;br /&gt;
* Make your game back from &amp;quot;gold&amp;quot; to &amp;quot;public beta&amp;quot;, to incite player to report bugs.&lt;br /&gt;
* Discuss with you about the release date of the next BGA package.&lt;br /&gt;
* Pay attention to your game when publishing the package.&lt;br /&gt;
* And eventually, publish a news about it :)&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=801</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=801"/>
		<updated>2013-05-02T12:01:04Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* BGA packages: when my updates will be visible by players? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== How to submit changes? ==&lt;br /&gt;
&lt;br /&gt;
To submit your changes, you just have to commit your work from BGA Studio backoffice, as you did during the development phase.&lt;br /&gt;
&lt;br /&gt;
Warning: as soon as you commited your changes, we assume that your code is ready to deploy &#039;&#039;&#039;anytime&#039;&#039;&#039; on BGA. Consequently, please do not commit a development in progress.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;br /&gt;
&lt;br /&gt;
If you do some major changes to your game like:&lt;br /&gt;
* Introducing a new expansion.&lt;br /&gt;
* Major code rewriting/refactoring.&lt;br /&gt;
&lt;br /&gt;
... please tell us. In this case, we can:&lt;br /&gt;
* Make your game back from &amp;quot;gold&amp;quot; to &amp;quot;public beta&amp;quot;, to incite player to report bugs.&lt;br /&gt;
* Discuss with you about the release date of the next BGA package.&lt;br /&gt;
* Pay attention to your game when publishing the package.&lt;br /&gt;
* And eventually, publish a news about it :)&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=800</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=800"/>
		<updated>2013-04-29T14:14:49Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* Major changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;br /&gt;
&lt;br /&gt;
If you do some major changes to your game like:&lt;br /&gt;
* Introducing a new expansion.&lt;br /&gt;
* Major code rewriting/refactoring.&lt;br /&gt;
&lt;br /&gt;
... please tell us. In this case, we can:&lt;br /&gt;
* Make your game back from &amp;quot;gold&amp;quot; to &amp;quot;public beta&amp;quot;, to incite player to report bugs.&lt;br /&gt;
* Discuss with you about the release date of the next BGA package.&lt;br /&gt;
* Pay attention to your game when publishing the package.&lt;br /&gt;
* And eventually, publish a news about it :)&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=799</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=799"/>
		<updated>2013-04-29T14:11:38Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== Bugs reporting ==&lt;br /&gt;
&lt;br /&gt;
Bugs are reported in the [http://forum.boardgamearena.com/viewforum.php?f=4 BGA bugs forum].&lt;br /&gt;
&lt;br /&gt;
During days after your game has been published and from time to time, please have a look at it to check if everything is fine.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;br /&gt;
* Thus, during the package delivery, we will block the game and let game in progress end before publishing the new version.&lt;br /&gt;
&lt;br /&gt;
===Major changes===&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=798</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=798"/>
		<updated>2013-04-29T14:09:13Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: /* What can be modified after release? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed. Each time you make a change, you should ask you the question &amp;quot;it is safe to make this change in a game in progress&amp;quot;, and if the answer is &amp;quot;no&amp;quot; you have to inform us.&lt;br /&gt;
&lt;br /&gt;
Example of changes that break the games in progress:&lt;br /&gt;
* Changes in the database schema of the game (dbmodel.sql).&lt;br /&gt;
* New global variable or game option accessed during the game (if it&#039;s only used during setup, it should be safe).&lt;br /&gt;
* New statistic (it won&#039;t be initialized properly, so it&#039;s going to crash the game).&lt;br /&gt;
* Change ID of existing game states (adding new game states is fine).&lt;br /&gt;
&lt;br /&gt;
Of course, as a rule of thumb, you should avoid to introduce changes that break a game in progress. Sometimes however, you do not have any other choice. In this case:&lt;br /&gt;
* Try to group all your updates in one BGA package, thus we won&#039;t have to block your game several times.&lt;br /&gt;
* Tell us explicitly that you introduce some update that can break games in progress, &#039;&#039;&#039;as soon as you commit your update&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=797</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=797"/>
		<updated>2013-04-29T14:02:35Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
* If the situation is critical, we can suspend the game from BGA waiting for the update.&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game, and this is done in close collaboration with you. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;br /&gt;
&lt;br /&gt;
== What can be modified after release? ==&lt;br /&gt;
&lt;br /&gt;
Everything can be modified. BUT, some items requires a special attention, and you must inform us in some cases:&lt;br /&gt;
&lt;br /&gt;
===Changes that breaks the games in progress===&lt;br /&gt;
&lt;br /&gt;
Some changes will break the games in progress at the moment the release/the hotfix will be performed.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=796</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=796"/>
		<updated>2013-04-29T13:59:21Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
* We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
* We can build another package. Of course, it&#039;s better to fix several bugs in each package, in order we don&#039;t have to build another package right after the first one :)&lt;br /&gt;
&lt;br /&gt;
Of course, we particularly care of your game during the days after your game is available on BGA. During this period of time, there&#039;s no problem to build package and to hotfix just for your game. You just have to inform us when you&#039;re ready to publish a new version.&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=795</id>
		<title>Post-release phase</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Post-release_phase&amp;diff=795"/>
		<updated>2013-04-29T13:55:59Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: Created page with &amp;quot; Your game is now on BGA: congrats!  But what happened when there are some bugs to fix or when you want to optimize something?  Don&amp;#039;t be afraid: you&amp;#039;re still allowed to modify...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Your game is now on BGA: congrats!&lt;br /&gt;
&lt;br /&gt;
But what happened when there are some bugs to fix or when you want to optimize something?&lt;br /&gt;
&lt;br /&gt;
Don&#039;t be afraid: you&#039;re still allowed to modify your game. You just have to pay attention to the points below.&lt;br /&gt;
&lt;br /&gt;
== BGA packages: when my updates will be visible by players? ==&lt;br /&gt;
&lt;br /&gt;
BGA website is updated with &amp;quot;packages&amp;quot;. When needed, we build a new package with all games and release a new version of BGA with this package.&lt;br /&gt;
&lt;br /&gt;
It means that your updates won&#039;t be visible by players until a new package is build and released on the website.&lt;br /&gt;
&lt;br /&gt;
Usually, there is less than 2 weeks between 2 packages, so it&#039;s quick. BUT, if you detect some major bug in your game, please warn us immediately so we can decide what to do. Usually, we do the following:&lt;br /&gt;
 * We can do a &amp;quot;hotfix&amp;quot;: you send us a very little change and we fix the website immediately. This is only possible if you change only the PHP side. The good news is that most blocking bugs are on PHP side - the client side bugs are most of the time solved by a page refresh. Of course, we don&#039;t hotfix minor bugs.&lt;br /&gt;
 * We can build another package: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note: don&#039;t forget that in any case, you need to commit your changes to made them available for the next package. Modifications that are not commited are not included in the packages.&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Steps_to_create_a_BGA_game&amp;diff=794</id>
		<title>Steps to create a BGA game</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Steps_to_create_a_BGA_game&amp;diff=794"/>
		<updated>2013-04-29T13:33:24Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: Created page with &amp;quot; Here&amp;#039;s a summary of the different steps you would follow when developing a game with BGA Studio.  {| class=&amp;quot;wikitable&amp;quot; |- ! Step !! How to reach this ste?p !! What happened d...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Here&#039;s a summary of the different steps you would follow when developing a game with BGA Studio.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step !! How to reach this ste?p !! What happened during the step?&lt;br /&gt;
|-&lt;br /&gt;
| Initial || [[How to join BGA developer team?]] || You discuss with us to choose your game&lt;br /&gt;
|-&lt;br /&gt;
| Assigned || You choosed a game  || You can start the development of the game&lt;br /&gt;
|-&lt;br /&gt;
| Pre-alpha || You&#039;ve started to write some piece of code  || You develop the game. During this phase, we can assist you with the framework and give you some pieces of advice.&lt;br /&gt;
|-&lt;br /&gt;
| Alpha || You tell us that your development is finished || We are reviewing the game on our side and with you, and help you to finalize some details to polish the game.&lt;br /&gt;
|-&lt;br /&gt;
| Private beta || We give a &amp;quot;go&amp;quot; || The game is incorporate in BGA global &amp;quot;package&amp;quot;, and is published on BGA preproduction server. On this platform, the publisher, the designer, we and you can test the game together and separately. We help you to take into account remarks from the publisher and the designer.&lt;br /&gt;
|-&lt;br /&gt;
| Public beta || The adaptation is approved by the publiher || We find together a good launch date for the game, we announce the game on BGA news, and then player can start to play! During the first days, it is common that some bugs are reported by players, and you can fix them following the instructions in [[Post-release phase]].&lt;br /&gt;
|-&lt;br /&gt;
| Gold || The game is stable on BGA || Congrats! You can still modify and optimize things following the instructions in [[Post-release phase]].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
	<entry>
		<id>https://lt.doc.boardgamearena.com/index.php?title=Studio&amp;diff=793</id>
		<title>Studio</title>
		<link rel="alternate" type="text/html" href="https://lt.doc.boardgamearena.com/index.php?title=Studio&amp;diff=793"/>
		<updated>2013-04-29T13:09:31Z</updated>

		<summary type="html">&lt;p&gt;Sourisdudesert: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Bga_studio_small.jpg]]&lt;br /&gt;
&lt;br /&gt;
Note: Please DO NOT translate Studio Documentation, so that there can be one place where you can find the latest information available.&lt;br /&gt;
&lt;br /&gt;
== What is Board Game Arena Studio? ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Board Game Arena Studio&#039;&#039;&#039; is a platform to build online board game adaptation using the Board Game Arena platform.&lt;br /&gt;
&lt;br /&gt;
It is open to any gamer with development skills :)&lt;br /&gt;
&lt;br /&gt;
See announcement here:&lt;br /&gt;
http://forum.boardgamearena.com/viewtopic.php?f=10&amp;amp;t=1973&lt;br /&gt;
&lt;br /&gt;
== Discover BGA Studio in 5 presentations ==&lt;br /&gt;
&lt;br /&gt;
Why, how, what... to start discovering BGA Studio, we prepared 5 &amp;quot;powerpoint&amp;quot; presentations for you:&lt;br /&gt;
&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/5-reasons-why-you-should-use-bga-studio-for-your-online-board-game 5 reasons why you should use BGA Studio for your online board game]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/the-8-steps-to-create-a-board-game-on-board-game-arena The 8 steps to create a board game on Board Game Arena]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/the-bga-framework-at-a-glance The BGA Framework at a glance]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/bga-studio-focus-on-bga-game-state-machine Focus on BGA game state machine]&lt;br /&gt;
* [http://www.slideshare.net/boardgamearena/bga-studio-guidelines BGA developers guidelines]&lt;br /&gt;
&lt;br /&gt;
== How to join the BGA developer team? ==&lt;br /&gt;
&lt;br /&gt;
Please see this page: [[How to join BGA developer team?]]&lt;br /&gt;
&lt;br /&gt;
== Great, I&#039;m in! ... How should I start? ==&lt;br /&gt;
&lt;br /&gt;
If you didn&#039;t already, check the presentations at the top of this page to get the basics.&lt;br /&gt;
&lt;br /&gt;
Then, you should checkout the [[First steps with BGA Studio]] to make sure that runs fine.&lt;br /&gt;
&lt;br /&gt;
After that, we advise you to take a peek at one or both of these two game creation tutorials:&lt;br /&gt;
* [[Tutorial reversi]]&lt;br /&gt;
* [[Tutorial gomoku]]&lt;br /&gt;
&lt;br /&gt;
Then start editing files and see what happens! ;)&lt;br /&gt;
&lt;br /&gt;
If you have any questions, please check out the &#039;&#039;&#039;[[Studio FAQ]]&#039;&#039;&#039; first, then if you didn&#039;t find the answer you were looking for, please post your question on the [http://forum.boardgamearena.com/viewforum.php?f=12 &#039;&#039;&#039;development forum&#039;&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
== BGA Studio documentation ==&lt;br /&gt;
&lt;br /&gt;
=== BGA Studio Framework reference ===&lt;br /&gt;
&lt;br /&gt;
This part of the documentation focuses on the development framework itself: functions and methods available to build your game.&lt;br /&gt;
&lt;br /&gt;
[[Studio file reference|File structure of a BGA game]]&lt;br /&gt;
&lt;br /&gt;
==== Game logic ====&lt;br /&gt;
&lt;br /&gt;
* [[Main game logic: yourgamename.game.php]]&lt;br /&gt;
* [[Your game state machine: states.inc.php]]&lt;br /&gt;
* [[Game database model: dbmodel.sql]]&lt;br /&gt;
* [[Players actions: yourgamename.action.php]]&lt;br /&gt;
* [[Game material description: material.inc.php]]&lt;br /&gt;
* [[Game statistics: stats.inc.php]]&lt;br /&gt;
&lt;br /&gt;
==== Game interface ====&lt;br /&gt;
&lt;br /&gt;
* [[Game interface logic: yourgamename.js]]&lt;br /&gt;
* [[Game art: img directory]]&lt;br /&gt;
* [[Game interface stylesheet: yourgamename.css]]&lt;br /&gt;
* [[Game layout: view and template: yourgamename.view.php and yourgamename_yourgamename.tpl]]&lt;br /&gt;
&lt;br /&gt;
==== Other components ====&lt;br /&gt;
&lt;br /&gt;
* [[Translations]] (how to make your game translatable)&lt;br /&gt;
* [[Game options and preferences: gameoptions.inc.php]]&lt;br /&gt;
* [[Game replay]]&lt;br /&gt;
&lt;br /&gt;
=== BGA Studio game components reference ===&lt;br /&gt;
&lt;br /&gt;
Game components are useful tools you can use in your game adaptations.&lt;br /&gt;
&lt;br /&gt;
* [[Deck]]: a PHP component to manage cards (deck, hands, picking cards, moving cards, shuffle deck, ...).&lt;br /&gt;
* [[Counter]]: a JS component to manage a counter that can increase/decrease (ex: player&#039;s score).&lt;br /&gt;
* [[Draggable]]: a JS component to manage drag&#039;n&#039;drop actions.&lt;br /&gt;
* [[ExpandableSection]]: a JS component to manage a rectangular block of HTML than can be displayed/hidden.&lt;br /&gt;
* [[Scrollmap]]: a JS component to manage a scrollable game area (useful when the game area can be infinite. Examples:  Saboteur or Takenoko games).&lt;br /&gt;
* [[Stock]]: a JS component to manage and display a set of game elements displayed at a position.&lt;br /&gt;
* [[Wrapper]]: a JS component to wrap a  &amp;amp;lt;div&amp;amp;gt; element around his child, even if these elements are absolute positioned.&lt;br /&gt;
* [[Zone]]: a JS component to manage a zone of the board where several game elements can come and leave, but should be well displayed together (See for example: token&#039;s places at Can&#039;t Stop).&lt;br /&gt;
&lt;br /&gt;
=== BGA Studio user guide ===&lt;br /&gt;
&lt;br /&gt;
This part of the documentation is a user guide for the BGA Studio online development environment.&lt;br /&gt;
&lt;br /&gt;
* [[Tools and tips of BGA Studio]]&lt;br /&gt;
&lt;br /&gt;
* [[Practical debugging]]&lt;br /&gt;
&lt;br /&gt;
* [[Studio back-office]]&lt;br /&gt;
&lt;br /&gt;
* [[Studio FAQ]]&lt;br /&gt;
&lt;br /&gt;
== BGA Developer team organization ==&lt;br /&gt;
&lt;br /&gt;
* [[Steps to create a BGA game]]&lt;br /&gt;
* [[Post-release phase]]&lt;br /&gt;
&lt;br /&gt;
== Other resources ==&lt;br /&gt;
&lt;br /&gt;
[http://forum.boardgamearena.com/viewforum.php?f=12 Development forum]&lt;br /&gt;
&lt;br /&gt;
[http://forum.boardgamearena.com/viewforum.php?f=4 Bugs forum]&lt;/div&gt;</summary>
		<author><name>Sourisdudesert</name></author>
	</entry>
</feed>