http://wiki.datarealms.com/index.php?title=Special:Contributions&feed=atom&limit=500&target=Daman&year=&month=Data Realms Wiki - User contributions [en]2024-03-28T09:01:06ZFrom Data Realms WikiMediaWiki 1.16.5http://wiki.datarealms.com/CortexWiki:To-Do_ListCortexWiki:To-Do List2012-07-03T04:48:03Z<p>Daman: Artifact of old wiki layout, I guess. Don't obide by this page too strictly.</p>
<hr />
<div>*'''Expand the wiki.'''<br />
*Add variables and descriptions to: [[List of Cortex Variables Defined]].<br />
*Fix and add content to [[Jetpack]]: add links to relevant material, information/description, and a picture.<br />
*Add content to [[Scenes]]: add relevant links and an appropriate picture.<br />
*Add content to [[Devices]]: links to relevant material, description, and a picture.<br />
*Add content to [[Wounds]]: links to relevant material, description, and a picture.<br />
*Add appropriate Lua links to pages. Ex: In [[AHuman]], include link to [[LuaDocs/AHuman]].<br />
*Split out bug fixing/troubleshooting information, and create troubleshooting pages/category. Ex: [[AHuman]] should include a link to [[Troubleshooting/AHuman]].<br />
*Add content to [[AEmitter]].<br />
*Many [[Lua]] functions need descriptions and/or examples.<br />
*Create a page for [[Offsets]]. Needs to be more general/descriptive than [[Offset Tutorials]].<br />
*Check that all pages in [[Tutorials]] category are in fact tutorials, and not just explanations.<br />
<br />
Remember, just because it is not on the To-Do list, that doesn't mean a page can't be improved, created, or updated.</div>Damanhttp://wiki.datarealms.com/Talk:List_of_all_Lua_functionsTalk:List of all Lua functions2012-06-28T00:56:55Z<p>Daman: /* Update */ new section</p>
<hr />
<div>Are these old? There are some functions missing when compared to the LuaDocs. -- '''Thoughtprocess''' 20:52, 16 May 2009 (UTC)<br />
<br />
Many of these pages (those that still have placeholders) need to be stubbed until they get examples. Examples shouldn't be too hard to get for the math functions; just do it real quick on the CC console. -- '''Thoughtprocess''' 04:35, 17 May 2009 (UTC)<br />
<br />
== Update ==<br />
<br />
So, I've written a bot to take the arguments, function list, description, and return value from the LuaDocs. The bot will grab any existing example code/codedesc/output and splice it with the information from the LuaDocs. The LuaDocs has shit argument detail, so I'm thinking of adding a human-supplied argument list that people can insert to override the automatic LuaDoc retrieved argument list. Not sure at the moment.<br />
<br />
There's also the issue of functions that exist but are NOT covered in the LuaDocs. I'm thinking of creating an "Undocumented" section and having them put there.<br />
<br />
Also, the bot will eventually update this page directly(it'll just edit the section where the game functions are currently).<br />
<br />
[[User:Daman|Daman]] 19:56, 27 June 2012 (CDT)</div>Damanhttp://wiki.datarealms.com/AEmitter:IsEmittingAEmitter:IsEmitting2012-06-28T00:23:17Z<p>Daman: Reverted edits by Beautifybot (talk) to last revision by Thoughtprocess</p>
<hr />
<div>{{LuaFunction<br />
|function_name = self:IsEmitting<br />
|arguments = <br />
|returns = [[Boolean]]<br />
|description = Checks whether emissions ([[AddEmission]]) are activated or not. Useful for rockets/missiles that are supposed to have a short thrust-time.<br />
|codedesc = Checks whether emission is activated. If it isn't, it enables emission.<br />
|code = <code lua n><br />
function Update(self)<br />
if self:IsEmitting() == false then<br />
self:EnableEmission(true);<br />
end<br />
end<br />
</code><br />
|output = [[nil]]<br />
|}}</div>Damanhttp://wiki.datarealms.com/MOSRotating:GibThisMOSRotating:GibThis2012-06-28T00:23:16Z<p>Daman: Reverted edits by Beautifybot (talk) to last revision by Daman</p>
<hr />
<div>{{LuaFunction<br />
|function_name = Actor:GibThis<br />
|arguments = <br />
|returns = [[nil]] <br />
|description = Instantly Kills and Gibs the Actor<br />
|codedesc = Gibs all actors in play.<br />
|code = <code lua n><br />
for actor in MovableMan.Actors do actor:GibThis() end </code><br />
|output = [[nil]] to the console, but gibs all actors.<br />
|}}</div>Damanhttp://wiki.datarealms.com/AEmitter:EnableEmissionAEmitter:EnableEmission2012-06-28T00:23:15Z<p>Daman: Reverted edits by Beautifybot (talk) to last revision by Daman</p>
<hr />
<div>{{LuaFunction<br />
|function_name = EnableEmission<br />
|arguments = [[Boolean]]<br />
|returns = [[nil]]<br />
|description = Toggles whether emissions ([[AddEmission]]) are activated or not. Useful for rockets/missiles that are supposed to have a short thrust-time.<br />
|codedesc = Checks whether emission is activated. When it isn't, it enables emission.<br />
|code = <code lua n><br />
function Update(self)<br />
if self:IsEmitting() == false then<br />
self:EnableEmission(true);<br />
end<br />
end<br />
</code><br />
|output = [[nil]]<br />
|}}</div>Damanhttp://wiki.datarealms.com/Scene:GetAreaScene:GetArea2012-06-28T00:23:14Z<p>Daman: Reverted edits by Beautifybot (talk) to last revision by Petethegoat</p>
<hr />
<div>{{LuaFunction<br />
|function_name = GetArea<br />
|arguments = ([[string]]) Name of area to get<br />
|returns = [[Area]] <br />
|description = Returns the object that represents specified area defined in scene.ini.<br />
|}}</div>Damanhttp://wiki.datarealms.com/Timer:IsPastSimMSTimer:IsPastSimMS2012-06-28T00:23:05Z<p>Daman: Reverted edits by Beautifybot (talk) to last revision by DrLuke</p>
<hr />
<div>{{LuaFunction<br />
|function_name = Timer:IsPastSimMS<br />
|arguments = [[number]] Time in milliseconds<br />
|returns = [[nil]]<br />
|description = This function will check, whether a certain time has passed after the timer has been created.<br />
|codedesc = This will gib the object this script is attached to after 5 seconds have passed.<br />
|code = <code lua n><br />
function create(self)<br />
self.LTimer = Timer(); --this is needed for "Timer:IsPastSimMS" to work.<br />
end<br />
<br />
function update(self)<br />
if Timer:IsPastSimMs(5000) == true then --checks if 5 seconds (5000 milliseconds) have passed<br />
self:GibThis(); --if 5 seconds have passed, gib(kill) the object!<br />
end<br />
end</code><br />
|output = nil<br />
|}}</div>Damanhttp://wiki.datarealms.com/User:BeautifybotUser:Beautifybot2012-06-28T00:10:38Z<p>Daman: Created page with "Bot written in PERL intended to automatically clean up the official Lua reference and format it nicely for human eyes."</p>
<hr />
<div>Bot written in PERL intended to automatically clean up the official Lua reference and format it nicely for human eyes.</div>Damanhttp://wiki.datarealms.com/MOSRotating:GibThisMOSRotating:GibThis2012-06-27T23:20:58Z<p>Daman: dupe</p>
<hr />
<div>{{LuaFunction<br />
|function_name = Actor:GibThis<br />
|arguments = <br />
|returns = [[nil]] <br />
|description = Instantly Kills and Gibs the Actor<br />
|codedesc = Gibs all actors in play.<br />
|code = <code lua n><br />
for actor in MovableMan.Actors do actor:GibThis() end </code><br />
|output = [[nil]] to the console, but gibs all actors.<br />
|}}</div>Damanhttp://wiki.datarealms.com/ShieldsShields2012-06-19T21:08:09Z<p>Daman: Undo revision 23594 by Daman (talk)</p>
<hr />
<div>Shields are a category for items held by the offhand or secondary hand of any [[AHuman]] actor.<br />
<pre><br />
AddDevice = HeldDevice<br />
PresetName = <Shield Name Here><br />
AddToGroup = Shields<br />
</pre><br />
<br />
Although currently only used by the game for shields, the Shield category has been used by the mod community to enable the creation of offhand weapons:<br />
<pre><br />
AddDevice = HDFirearm<br />
PresetName = <Weapon Name Here><br />
AddToGroup = Shields<br />
</pre><br />
<br />
If an [[Actor]] has both a Shield/Off-hand Weapon and a one-handed weapon in its inventory, both can be used at the same time (Weapon in main hand, Shield/Off Hand Weapon in the off hand).<br />
<br />
== Riot Shield ==<br />
[[Image:RiotX4.png|left]]<br />
Cost = 15 oz.<br />
<br />
The only shield introduced in Cortex Command thus far, the Riot shield is a simple defensive equipment capable of taking a few bullets so your unit doesn't have to. It is still possible to get hit though, for this reason it is best to stay low to the ground when hiding behind the shield.<br />
<br />
{{Template:stub}}</div>Damanhttp://wiki.datarealms.com/ShieldsShields2012-06-19T21:07:26Z<p>Daman: testing a filter</p>
<hr />
<div><br />
<br />
Shields are a category for items held by the offhand or secondary hand of any [[AHuman]] actor.<br />
<pre><br />
AddDevice = HeldDevice<br />
PresetName = <Shield Name Here><br />
AddToGroup = Shields<br />
</pre><br />
<br />
[[Image:RiotX4.png|left]]<br />
<br />
Although currently only used by the game for shields, the Shield category has been used by the mod community to enable the creation of offhand weapons:<br />
<pre><br />
AddDevice = HDFirearm<br />
PresetName = <Weapon Name Here><br />
AddToGroup = Shields<br />
</pre><br />
<br />
If an [[Actor]] has both a Shield/Off-hand Weapon and a one-handed weapon in its inventory, both can be used at the same time (Weapon in main hand, Shield/Off Hand Weapon in the off hand).<br />
<br />
== Riot Shield ==<br />
[[Image:RiotX4.png|left]]<br />
Cost = 15 oz.<br />
<br />
The only shield introduced in Cortex Command thus far, the Riot shield is a simple defensive equipment capable of taking a few bullets so your unit doesn't have to. It is still possible to get hit though, for this reason it is best to stay low to the ground when hiding behind the shield.<br />
<br />
{{Template:stub}}</div>Damanhttp://wiki.datarealms.com/Syntax_HighlightingSyntax Highlighting2012-06-19T17:13:11Z<p>Daman: word choice</p>
<hr />
<div>__TOC__<br />
<br />
<br />
=Using highlighting=<br />
A new form of syntax highlighting has been implemented into the wiki.<br />
<br />
Many codetags are available, such as:<br />
<br />
<PRE> <lua>, <php>, <fortran>, <freebasic>, <vb> </PRE><br />
<br />
The main one you should care about on this wiki is, of course, the Lua tag. Following is an example of literal text you would enter:<br />
<PRE><lua><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</lua></PRE><br />
<br />
When enclosing something in lua tags, links to articles for any functions used are automatically added to the code. Example:<br />
<br />
<lua><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</lua><br />
<br />
='''Advanced tagging(''RECOMMENDED'')'''=<br />
<br />
If you want your code tag to look as good as Data, it is recommended to use advanced formatting.<br />
<br />
Here's an example using the same code from before:<br />
<br />
'''Raw:'''<br />
<pre><code lua n><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</code></pre><br />
<br />
<br />
<br />
'''Processed:'''<br />
<br />
<code lua n><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observati mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</code><br />
<br />
<br />
As you can see this formatting is much more appealing. The links also underline as they are intended to, 100% of the time. Any more questions can be asked in discussion page, and the tags available can be checked on the versions page.</div>Damanhttp://wiki.datarealms.com/Syntax_HighlightingSyntax Highlighting2012-06-19T17:09:02Z<p>Daman: Backslashes are fine, wrong tags were in the page. Whoops!</p>
<hr />
<div>__TOC__<br />
<br />
<br />
=Using highlighting=<br />
A new form of syntax highlighting has been implemented into the wiki.<br />
<br />
Many codetags are available, such as:<br />
<br />
<PRE> <lua>, <php>, <fortran>, <freebasic>, <vb> </PRE><br />
<br />
The main one you should care about on this wiki is, of course, the Lua tag. Following is an example of literal text you would enter:<br />
<PRE><lua><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</lua></PRE><br />
<br />
When enclosing something in lua tags, it provides links back to the functions inside the tags, along with formatting like so:<br />
<br />
<lua><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</lua><br />
<br />
='''Advanced tagging(''RECOMMENDED'')'''=<br />
<br />
If you want your code tag to look as good as Data, it is recommended to use advanced formatting.<br />
<br />
Here's an example using the same code from before:<br />
<br />
'''Raw:'''<br />
<pre><code lua n><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</code></pre><br />
<br />
<br />
<br />
'''Processed:'''<br />
<br />
<code lua n><br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can\'t find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
AudioMan:ClearMusicQueue();<br />
AudioMan:PlayMusic("Base.rte/Music/dBSoundworks/ccambient4.ogg", -1, -1);<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observati mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
</code><br />
<br />
<br />
As you can see this formatting is much more appealing. The links also underline as they are intended to, 100% of the time. Any more questions can be asked in discussion page, and the tags available can be checked on the versions page.</div>Damanhttp://wiki.datarealms.com/List_of_all_Lua_functionsList of all Lua functions2012-06-19T10:14:58Z<p>Daman: </p>
<hr />
<div>{{Incorrect}}<br />
<br />
{{TableLuaArticles}}<br />
<br />
==Library Function Index==<br />
<br />
*[[_G|Base Library]]<br />
{{Template:Lua_G}}<br />
*[[coroutine]]<br />
{{Template:Lua Coroutine}}<br />
*[[debug]]<br />
{{Template:Lua Debug}}<br />
*[[math]]<br />
{{Template:Lua Math}}<br />
*[[package]]<br />
{{Template:Lua Package}}<br />
*[[string]]<br />
{{Template:Lua String}}<br />
*[[table]]<br />
{{Template:Lua Table}}<br />
<br />
==Object Functions==<br />
*[[Activity]]<br />
{{Template:Lua Activity}}<br />
*[[Actor]]<br />
{{Template:Lua Actor}}<br />
*[[AEmitter]]<br />
{{Template:Lua AEmitter}}<br />
*[[AHuman]]<br />
{{Template:Lua AHuman}}<br />
*[[ACDropship]]<br />
{{Template:Lua ACDropship}}<br />
*[[ACrab]]<br />
{{Template:Lua ACrab}}<br />
*[[ACraft]]<br />
{{Template:Lua ACraft}}<br />
*[[ACRocket]]<br />
{{Template:Lua ACRocket}}<br />
*[[ActivityManager]]<br />
{{Template:Lua ActivityMan}}<br />
*[[ADoor]]<br />
{{Template:Lua ADoor}}<br />
*[[Attachable]]<br />
{{Template:Lua Attachable}}<br />
*[[AudioManager]]<br />
{{Template:Lua AudioMan}}<br />
*[[Box]]<br />
{{Template:Lua Box}}<br />
*[[ConsoleManager]]<br />
{{Template:Lua ConsoleMan}}<br />
*[[Controller]]<br />
{{Template:Lua Controller}}<br />
*[[FrameManager]]<br />
{{Template:Lua FrameMan}}<br />
*[[HDFirearm]]<br />
{{Template:Lua HDFirearm}}<br />
*[[HeldDevice]]<br />
{{Template:Lua HeldDevice}}<br />
*[[MOPixel]]<br />
{{Template:Lua MOPixel}}<br />
*[[MOSprite]]<br />
{{Template:Lua MOSprite}}<br />
*[[MOSParticle]]<br />
{{Template:Lua MOSParticle}}<br />
*[[MOSRotating]]<br />
{{Template:Lua MOSRotating}}<br />
*[[MovableManager]]<br />
{{Template:Lua MovableMan}}<br />
*[[MovableObject]]<br />
{{Template:Lua MovableObject}}<br />
*[[PresetManager]]<br />
{{Template:Lua PresetMan}}<br />
*[[Scene]]<br />
{{Template:Lua Scene}}<br />
*[[SceneManager]]<br />
{{Template:Lua SceneMan}}<br />
*[[SceneObject]]<br />
{{Template:Lua SceneObject}}<br />
*[[TDExplosive]]<br />
{{Template:Lua TDExplosive}}<br />
*[[ThrownDevice]]<br />
{{Template:Lua ThrownDevice}}<br />
*[[Timer]]<br />
{{Template:Lua Timer}}<br />
*[[TimerManager]]<br />
{{Template:Lua TimerManager}}<br />
*[[UInputManager]]<br />
{{Template:Lua UInputMan}}<br />
*[[Vector]]<br />
{{Template:Vector}}<br />
<br />
[[Category: Lua]]<br />
[[Category: List]]</div>Damanhttp://wiki.datarealms.com/Template:IncorrectTemplate:Incorrect2012-06-19T10:14:22Z<p>Daman: Created page with "{|border="0" cellspacing="0" cellpadding="5" style="background-color: #ffbbcc; border: 1px solid #9f7782; margin: 1em auto 1em auto; width: 60%" |- |style="background-color: #9f..."</p>
<hr />
<div>{|border="0" cellspacing="0" cellpadding="5" style="background-color: #ffbbcc; border: 1px solid #9f7782; margin: 1em auto 1em auto; width: 60%"<br />
|-<br />
|style="background-color: #9f7782; border: 1px solid #1f1712; margin: 5px;"|[[Image:Stub.png]]<br />
|colspan="2" align="center"|This page is '''out of date''' or contains '''incorrect information'''. Please help us by [{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAMEE}}|action=edit}} editing it].<br />
|style="background-color: #9f7782; border: 1px solid #1f1712; margin: 5px;"|[[Image:Stub.png]]<br />
|-<br />
|}<br />
<br />
<noinclude>This template is used to mark a page which has been obsoleted.</noinclude><br />
<br />
<includeonly>[[Category:Updateme]]</includeonly></div>Damanhttp://wiki.datarealms.com/Template:TableLuaArticlesTemplate:TableLuaArticles2012-06-19T10:09:18Z<p>Daman: eghhhh this table is bad but this is more correct</p>
<hr />
<div><div align="center"><br />
{| cellspacing=5 cellpadding=5 border=0 style="width=95%; background-color: #BBCCFF; border: 2px dashed #88AADD; margin: 5px;"<br />
|{{MainPageItem|Luaing.png|Lua Syntax|Syntax|If you have no idea how to use Lua, start here.}}<br />
|{{MainPageItem|Luaing.png|Lua Datatypes|Datatypes|Descriptions of the data types Lua uses.}}<br />
|-<br />
|{{MainPageItem|Luaing.png| List of all Lua functions|Functions|Listing of known functions.}}<br />
|{{MainPageItem|Luaing.png|LuaDocs/Index|Official Reference|Raw output generated directly from Data's source.}}<br />
|}<br />
</div></div>Damanhttp://wiki.datarealms.com/Style_GuideStyle Guide2012-06-19T10:04:58Z<p>Daman: The text that was here prior was terrible and vague.</p>
<hr />
<div>== Creating and Naming Pages ==<br />
* '''We really don't have any guidelines for this. Suggest some!'''<br />
<br />
== Adding Templates ==<br />
* Add [[Template:Stub]] to all incomplete pages.<br />
* Add Stub at the end of the page, but other tags at the start.<br />
* Use MainPage tables on landing pages, like [[Main Page]] and [[Modding]].<br />
<br />
{{Stub}}</div>Damanhttp://wiki.datarealms.com/ActorsActors2012-06-18T22:31:23Z<p>Daman: Not a stub, thanks!</p>
<hr />
<div>General class of game objects that move under AI control and, typically, the player's. Each type starts with "A" for Actor and has specific requirements.<br />
<br />
<br />
== Brains ==<br />
[[File:Braincase1.png]] &nbsp; [[File:Dummycontroller1.png]]<br />
<br />
The [[Trade_Star#Brain_Case | Brain Case]] is defined simply as an "Actor", as is the [[Dummies#Dummy_Controller | Dummy Controller]]. They have no limbs or separate head, and have a pie menu but otherwise have no parts or actions.<br />
<br />
''Note: Brainbots are "AHuman" type (see below), not just "Actor"s.''<br />
<br />
== Humanoids ==<br />
'''Main Article: [[AHuman]]'''<br />
<br />
<br />
[[File:Roninsoldierdafred.png]] &nbsp; [[File:Jumper.png]] &nbsp; [[File:Zombiemedium.png]]<br />
<br />
Coded as "AHuman", humanoids are ''soft'' bodies controlled by the AI or Player. Their main distinction is standing upright and bipedal walking. <br />
<br />
The type supports a main body, a head, two legs, two arms, and a jetpack (see Ronin [[Ronin#Dafred | Dafred]] above). Arms and legs can sport hands and feet. [[Wildlife#Jumper | Jumper]] hop-walks on its one leg. <br />
<br />
The foreground arm is required to use Devices but not to carry them in inventory; the background arm to use Shields. Minimally an AHuman requires a body and head. <br />
<br />
Most humanoids are equipped with jetpacks, but the [[Undead | Culled Clones]] (aka Undead or Zombies prior to Build 27) and Jumper are defined with a "Jetpack = AEmitter" which looks and acts more like jumping.<br />
<br />
== Crabs ==<br />
'''Main Article: [[ACrab]]'''<br />
<br />
<br />
[[File:Crabw.png]] &nbsp; [[File:Coalitiondrone.png]] &nbsp; [[File:Dummysmallturret.png]]<br />
<br />
Coded as "ACrab", crabs lack any upright constraints for standing (leading to wobbling) and use a quadrapedal walk-- unlike their real-life counterparts, crabs in Cortex Command have only four legs.<br />
<br />
The type supports a main body, foreground and background legs on the left and right, left and right feet, and a turret which can be equipped with [[Weapons | weapons]] or [[Tools | tools]]. Stationary "Turret" actors are made with legs that are invisible and too small to use, like the [[Dummies | Dummy]] [[Dummies#Dummy_Small_Turret | Small Turret]]<br />
<br />
Crabs do not use jetpacks as such; their lack of upright constraints makes flight control unstable. If they have a "Jetpack" definition it uses an AEmitter that behaves like jumping, which is the main attack of the rare [[Wildlife#Mega_Crab | Mega Crab]]. That, and landing...<br />
<br />
Without a "Turret" defined, crabs can't use any items, though ones can be added to the crab's inventory. These are exposed when the crab dies; thus one can make kamikaze "Bomb Crabs" (see also [[Crab_Bomb | Crab Bomb]]).<br />
<br />
== Doors ==<br />
'''Main Article: [[ADoor]]'''<br />
<br />
<br />
Doors open for Actors of the same team automatically and close when no one is around, or when an enemy is near. They cannot be controlled as other Actor units can. All current doors are slabs of metal that either slide or rotates on a fixed path. Other than the vertical "Door A", all current doors come pre-fitted into a bunker module.<br />
<br />
== Craft ==<br />
'''Main Articles: [[ACRocket]], [[ACDropship]]'''<br />
<br />
<br />
[[File:Dummydropcrate.png]] &nbsp; [[File:Dummyrocklet.png]] &nbsp; [[File:DropShipMk1-1x.png]]<br />
<br />
Coded "ACRocket" or "ACDropship" ("AC" is an analgram of ''Actor'' and ''Craft'') all Craft have one or more have hatches by which Actors, [[Bombs]], and handheld devices can exit or enter. Almost all are airborne vehicles using Jetpack emitters, with the exception of the '''Crate''', which is an ACRocket without legs or jetpacks. They simply obey gravity. <br />
<br />
Craft flying past the top the map return to [[Trade Star]] Midas, adding to the player's gold the value of the craft's cargo and its buy price minus percent of its health lost.<br />
<br />
Craft serve various purposes, such as:<br />
* Transporting Units<br />
* Bombing Enemies<br />
* Evacuating Units<br />
* Shelter / Hiding Place<br />
* Transporting Equipment<br />
* Stealing Equipment<br />
* Slave Raiding<br />
...but basically dropping and retrieving cargo.<br />
<br />
<br />
[[Category: Modding]]</div>Damanhttp://wiki.datarealms.com/MediaWiki:BlockedtextMediaWiki:Blockedtext2012-06-18T21:43:30Z<p>Daman: Created page with "'''Your user name or IP address has been blocked.''' The block was made by $1. The reason given is ''$2''. * Start of block: $8 * Expiry of block: $6 * Intended blockee: $7 Yo..."</p>
<hr />
<div>'''Your user name or IP address has been blocked.'''<br />
<br />
The block was made by $1.<br />
The reason given is ''$2''.<br />
<br />
* Start of block: $8<br />
* Expiry of block: $6<br />
* Intended blockee: $7<br />
<br />
You can contact $1 or another [[{{MediaWiki:Grouppage-sysop}}|administrator]] to discuss the block.<br />
You cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.<br />
Your current IP address is $3, and the block ID is #$5.<br />
Please include all above details in any queries you make.<br />
<br />
<span style="line-height: 44px; font-weight: 700; font-size: 34px; color:#FFFFFF; background:#FF69B4">If you were caught in an automatic filter, my personal apologies! We have these in place to fight the spambots. Please copy this entire message into a post on the [http://forums.datarealms.com/viewforum.php?f=48|Datarealms Fan Forums] and one of our sysops will unban you ASAP!</span></div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-deny-userpageMediaWiki:Abusefilter-deny-userpage2012-06-18T21:32:06Z<p>Daman: Safe to make this ban people if they ignore the warning.</p>
<hr />
<div><span style="line-height: 74px; font-weight: 700; font-size: 64px; color:#FFFFFF; background:#FF69B4">You must contribute to the wiki more before you can edit your userpage, sorry! Don't perform this edit again or it'll ban you!</span></div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-deny-userpageMediaWiki:Abusefilter-deny-userpage2012-06-18T21:31:07Z<p>Daman: </p>
<hr />
<div><span style="line-height: 74px; font-weight: 700; font-size: 64px; color:#FFFFFF; background:#FF69B4">You must contribute to the wiki more before you can edit your userpage, sorry!</span></div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-deny-userpageMediaWiki:Abusefilter-deny-userpage2012-06-18T21:30:29Z<p>Daman: </p>
<hr />
<div><span style="font-weight: 700; font-size: 64px; color:#FFFFFF; background:#FF69B4">You must contribute to the wiki more before you can edit your userpage, sorry!</span></div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-deny-userpageMediaWiki:Abusefilter-deny-userpage2012-06-18T21:29:47Z<p>Daman: </p>
<hr />
<div>== '''<span style="color:#FFFFFF; background:#FF69B4">You must contribute to the wiki more before you can edit your userpage, sorry!</span>''' ==</div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-deny-userpageMediaWiki:Abusefilter-deny-userpage2012-06-18T21:29:33Z<p>Daman: </p>
<hr />
<div><span style="color:#FFFFFF; background:#FF69B4">== '''You must contribute to the wiki more before you can edit your userpage, sorry!''' ==</span></div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-deny-userpageMediaWiki:Abusefilter-deny-userpage2012-06-18T21:18:03Z<p>Daman: Created page with "You must contribute to the wiki more before you can edit your userpage, sorry!"</p>
<hr />
<div>You must contribute to the wiki more before you can edit your userpage, sorry!</div>Damanhttp://wiki.datarealms.com/User_talk:Roast_VegUser talk:Roast Veg2012-06-18T20:50:21Z<p>Daman: /* Perms */ new section</p>
<hr />
<div>--[[User:Nonsequitorian|Non]]: Hey, brah.<br />
<br />
Hey man, wassup? <br />
--[[User:Roast Veg|Roast Veg]] 18:38, 22 May 2011 (CDT)<br />
<br />
--[[User:Nonsequitorian|Non]]: Nothing. Nothing at all. What's the weather over there in that area that you live in?<br />
<br />
Sunny, with a threat of Icelandic ash.<br />
<br />
--[[User:Nonsequitorian|Non]]: It's pretty amazing over here: sunny, wispy clouds, and it's still mud season. You understand that other can read this like any other page, though, don't you? I can edit what I said, and what you said. I can make it seem like you said HERRR DERRRR in your last post.<br />
<br />
Yes, I am well aware of this.<br />
<br />
--[[User:Nonsequitorian|Non]]: WELL. I had hoped so. Someone more tech savvy then I should have basic logic skills. Still, I put my name on my posts, probably a good thing, elsewise it would seem like talking to yourself, wouldn't it.<br />
<br />
[[User:ZG Wolf|ZG Wolf]] 13:33, 3 November 2011 (CDT) allow me to remind you of the history page. <br />
<br />
==Help==<br />
requesting anyone still marginally intrested in this project to come back and help clean it up. there is a heck of a lot that needs fixing.<br />
<br />
== Perms ==<br />
<br />
I upgraded you a while ago to trusted, just so you know [[User:Daman|Daman]] 15:50, 18 June 2012 (CDT)</div>Damanhttp://wiki.datarealms.com/User_talk:BrendanUser talk:Brendan2012-06-18T20:47:35Z<p>Daman: whoopd</p>
<hr />
<div>Thanks for your work, I'm upgrading you to trusted status, you can delete things/pretty much do anything short of banning people. [[User:Daman|Daman]] 15:47, 18 June 2012 (CDT)</div>Damanhttp://wiki.datarealms.com/User_talk:BrendanUser talk:Brendan2012-06-18T20:47:25Z<p>Daman: Created page with "Thanks for your work, I'm upgrading you to trusted status, you can delete things/pretty much do anything short of banning people. ----"</p>
<hr />
<div>Thanks for your work, I'm upgrading you to trusted status, you can delete things/pretty much do anything short of banning people. ----</div>Damanhttp://wiki.datarealms.com/Data_Realms_Wiki:Current_eventsData Realms Wiki:Current events2012-06-09T06:06:27Z<p>Daman: Reverted edits by Yes123 (talk) to last revision by Daman</p>
<hr />
<div>Go to the [[CortexWiki:To-Do List]] for Wiki related projects<br />
<br />
==Test build b27 is released!==<br />
Give it a try!</div>Damanhttp://wiki.datarealms.com/User:Daman/monobook.jsUser:Daman/monobook.js2012-06-08T09:40:54Z<p>Daman: </p>
<hr />
<div>//Mass rollback function<br />
//Written by John254<br />
//Adapted from User:Mr.Z-man/rollbackSummary.js<br />
//Instructions: Selecting the "rollback all" tab when viewing a user's contributions history<br />
//will open all rollback links displayed there. (Use with caution)<br />
<br />
function rollbackEverythingButton() {<br />
var hasRollback = getElementsByClassName(document, "span", "mw-rollback-link");<br />
if (hasRollback[0] && (document.title.indexOf("User contributions") != -1) ) {<br />
addPortletLink('p-cactions', 'javascript:rollbackEverything()', "rollback all", "ca-rollbackeverything", "rollback all edits displayed here");<br />
}<br />
}<br />
addOnloadHook(rollbackEverythingButton);<br />
function rollbackEverything() {<br />
for (var i in document.links) {<br />
if (document.links[i].href.indexOf('action=rollback') != -1) {<br />
window.open(document.links[i].href);<br />
}<br />
}<br />
}<br />
<br />
//<pre><nowiki><br />
/***************<br />
* EasyBlock *<br />
***************<br />
* By Animum *<br />
***************************************************************************************<br />
* To use this script, add the following line to your monobook (or other skin) file: *<br />
<br />
importScript("User:Animum/easyblock.js"); //[[User:Animum/easyblock.js]]<br />
***************************************************************************************/<br />
<br />
/***************************************<br />
* Handy-dandy block script *<br />
***************************************<br />
* Authored by me except where *<br />
* otherwise noted *<br />
***************************************<br />
* This script has only been tested *<br />
* in Firefox. It might not work in *<br />
* other browsers. *<br />
***************************************<br />
* If something needs to be done, *<br />
* feel absolutely free to make the *<br />
* necessary edits yourself. *<br />
***************************************/<br />
<br />
//-----------------------------------<br />
// Libraries<br />
//-----------------------------------<br />
importStylesheet('User:Animum/easyblock.css');<br />
<br />
function easyblock() {} //So we can have some sanity in the arrangement of this<br />
<br />
easyblock.addlilink = function(tabs, href, name, id, title, key) { //By Voice of All<br />
var span = document.createElement('span');<br />
span.appendChild(document.createTextNode(name));<br />
var na = document.createElement('a');<br />
na.href = href;<br />
na.appendChild(span);<br />
na.style.cssText = 'cursor:pointer';<br />
na.setAttribute( 'nopopup', '1' ); //to better cooperate with WP:NAVPOP when popupOnlyArticleLinks is set to false.<br />
var li = document.createElement('li');<br />
if(id) li.id = id;<br />
li.appendChild(na);<br />
tabs.appendChild(li);<br />
if(id)<br />
{<br />
if(key && title)<br />
{<br />
ta[id] = [key, title];<br />
}<br />
else if(key)<br />
{<br />
ta[id] = [key, ''];<br />
}<br />
else if(title)<br />
{<br />
ta[id] = ['', title];<br />
}<br />
}<br />
return li;<br />
}<br />
<br />
easyblock.addlimenu = function(tabs, name, id, href, position) { //By Voice of All<br />
var na, mn, span;<br />
var li;<br />
<br />
if (!id) id = name;<br />
<br />
span = document.createElement("span");<br />
span.appendChild( document.createTextNode(name) );<br />
na = document.createElement("a");<br />
na.appendChild(span);<br />
na.onclick = href;<br />
na.style.cssText = 'cursor:pointer';<br />
mn = document.createElement("ul");<br />
li = document.createElement("li");<br />
li.appendChild(na);<br />
li.appendChild(mn);<br />
if (id) li.id = id;<br />
li.className = 'blockmenu';<br />
<br />
if (position) {<br />
tabs.insertBefore(li, position);<br />
} else {<br />
tabs.appendChild(li);<br />
}<br />
<br />
return mn; // useful because it gives us the <ul> to add <li>s to<br />
}<br />
<br />
easyblock.makeMenu = function(where, id, items) {<br />
if(typeof(where) == 'undefined' || typeof(items) == 'undefined') return;<br />
if(typeof(id) == 'undefined' || id.length == 0) id = where + "-submenu";<br />
var ul = document.createElement("ul");<br />
ul.className = "blockmenu";<br />
ul.id = id;<br />
where.appendChild(ul);<br />
with(ul.style) {<br />
left = "114px";<br />
top = "-1px";<br />
display = "none";<br />
}<br />
for(i=0; i<items.length; i++) {<br />
var item = items[i];<br />
easyblock.addlilink(document.getElementById(id), item[0], item[1], (typeof(item[2]) != 'undefined' ? item[2] : ""));<br />
}<br />
where.onmouseover = function() {<br />
ul.style.display = "block";<br />
}<br />
where.onmouseout = function() {<br />
ul.style.display = "none";<br />
}<br />
}<br />
<br />
easyblock.zeroPad = function(str) { //By Gracenotes<br />
return ("0" + str).slice(-2);<br />
}<br />
<br />
easyblock.formatResponse = function(response) { //By Gracenotes<br />
try {<br />
response = response.query.pages;<br />
for (var property in response)<br />
return response[property];<br />
} catch (e) {<br />
return response.query.pages[-1];<br />
}<br />
}<br />
<br />
easyblock.textUpdate = function(message, br) {<br />
if(typeof(br) == 'undefined') br = true;<br />
document.getElementById("contentSub").innerHTML += (br ? "<br />" : "") + "<b>" + message + "</b>";<br />
}<br />
<br />
easyblock.bgColor = function(color) {<br />
document.getElementById("content").style.backgroundColor = color;<br />
}<br />
<br />
easyblock.isIP = function(ip) { //From [[MediaWiki:Sysop.js]]<br />
return /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/.test(ip);<br />
}<br />
<br />
easyblock.isSensitive = function(address) { //From [[MediaWiki:Sysop.js]]<br />
ips = Array(<br />
Array(/\b63\.162\.143\.21\b/),<br />
Array(/\b82\.148\.9(6\.68|7\.69)\b/),<br />
Array(/\b128\.183\.103\.97\b/),<br />
Array(/\b(((2|5)?6|7|[12]1|2(2|8|9)|3(0|3)|55)\.([01]?\d\d?|2(5[0-5]|[0-4]\d))|130\.22)(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/),<br />
Array(/\b138\.16[23](\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/),<br />
Array(/\b143\.2(2[89]|3[01])(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/),<br />
Array(/\b149\.101(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/),<br />
Array(/\b156\.33(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}\b/),<br />
Array(/\b(162\.4[56]\.([01]?\d\d?|2(5[0-5]|[0-4]\d))|198\.81\.(128|129|1[3-8]\d|191))\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/),<br />
Array(/\b192\.197\.(7[7-9]|8[0-6])\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/),<br />
Array(/\b(51(\.([01]?\d\d?|2(5[0-5]|[0-4]\d))){2}|194.60.\d[0-5]?)\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/),<br />
Array(/\b66\.230\.(19[2-9]|2[0-3]\d)\.([01]?\d\d?|2(5[0-5]|[0-4]\d))\b/),<br />
Array(/\b91\.198\.174\.(19[2-9]|2([01]\d|2[0-3]))\b/)<br />
);<br />
ip = address;<br />
if (this.isIP(ip)) {<br />
for (i = 0; i < ips.length; i++) {<br />
if (ip.match(ips[i][0])) {<br />
return true;<br />
} else {<br />
return false;<br />
}<br />
}<br />
}<br />
}<br />
<br />
easyblock.canShowOn = function(where) { //For reading the ebPrefs.showOnPages data<br />
return (ebPrefs.showOnPages.indexOf(where) != -1 ? true : false);<br />
}<br />
<br />
easyblock.isBlocked = function(name) {<br />
var req = sajax_init_object();<br />
req.open("GET", wgScriptPath + "/api.php?action=query&list=blocks&bkusers=" + name + "&format=json", false);<br />
req.send(null);<br />
var info = eval("(" + req.responseText + ")");<br />
if (info.error) return false; //this can happen with syntactically invalid input, like IP CIDR ranges used by User:Splarka/contribsrange.js<br />
return (info.query.blocks[0] ? true : false);<br />
delete req;<br />
}<br />
<br />
easyblock.getLastBlock = function(user) {<br />
var req = sajax_init_object();<br />
req.open("GET", wgScriptPath + "/api.php?format=json&action=query&list=logevents&letype=block&letitle=User:" + encodeURIComponent(user) + "&leprop=details", false);<br />
req.send(null);<br />
var response = eval("(" + req.responseText + ")");<br />
if(response.query.logevents) {<br />
if(response.query.logevents[0]) {<br />
return (this.isBlocked(user) ? "blocked" : "last") + ": " + response.query.logevents[0].block.duration;<br />
} else {<br />
return "not blocked before";<br />
}<br />
} else {<br />
return "not blocked before";<br />
}<br />
delete req;<br />
}<br />
//-----------------------------------<br />
// End<br />
//-----------------------------------<br />
<br />
//-----------------------------------<br />
// Preferences<br />
//-----------------------------------<br />
if(typeof(ebPrefs) == 'undefined') {<br />
ebPrefs = {};<br />
}<br />
<br />
if(typeof(ebPrefs.markWarnAsMinor) == 'undefined' || ebPrefs.markWarnAsMinor == 1) {<br />
ebPrefs.markWarnAsMinor = true;<br />
}<br />
<br />
if(typeof(ebPrefs.showOnPages) == 'undefined') {<br />
ebPrefs.showOnPages = ["user_usertalk", "contribs", "diffs", "ipblocklist", "blockip"];<br />
}<br />
<br />
if(typeof(ebPrefs.useAutoWarn) == 'undefined') {<br />
ebPrefs.useAutoWarn = true;<br />
}<br />
<br />
if(typeof(ebPrefs.loadPageOnSubmit) == 'undefined') {<br />
ebPrefs.loadPageOnSubmit = (typeof ebPrefs.loadCommentOnSubmit == "undefined" ? true : ebPrefs.loadCommentOnSubmit);<br />
}<br />
<br />
if(typeof(ebPrefs.displayStatus) == 'undefined') {<br />
ebPrefs.displayStatus = true;<br />
}<br />
<br />
if(typeof(ebPrefs.watchlistEnabled) == 'undefined') {<br />
ebPrefs.watchlistEnabled = false;<br />
}<br />
<br />
if(typeof(ebPrefs.showOnClick) == 'undefined') {<br />
ebPrefs.showOnClick = false;<br />
}<br />
<br />
if(typeof(ebPrefs.returnTo) == 'undefined') {<br />
ebPrefs.returnTo = "";<br />
}<br />
//-----------------------------------<br />
// End<br />
//-----------------------------------<br />
<br />
//-----------------------------------<br />
// Warn and block functions<br />
// (The heart and muscle of the script)<br />
//-----------------------------------<br />
easyblock.edit = function(page, comment, summary, replacePage, loadPageOnSubmit) {<br />
if(typeof(loadPageOnSubmit) == 'undefined') loadPageOnSubmit = true;<br />
if(typeof(replacePage) == 'undefined') replacePage = false;<br />
page = decodeURIComponent(page);<br />
var req = sajax_init_object();<br />
req.open("GET", wgScriptPath + "/api.php?action=query&prop=info|revisions&format=json&intoken=edit&rvprop=content|timestamp&titles=" + encodeURIComponent(page), false);<br />
if(ebPrefs.dislayStatus) this.textUpdate("Adding \"" + comment + "\" to <a href=\"/wiki/" + encodeURIComponent(page) + "\">" + page + "</a>...");<br />
req.send(null);<br />
<br />
var info = this.formatResponse(eval("(" + req.responseText + ")"));<br />
var date = new Date();<br />
var startTime = date.getUTCFullYear() + this.zeroPad(date.getUTCMonth() + 1) + this.zeroPad(date.getUTCDate()) + this.zeroPad(date.getUTCHours()) + this.zeroPad(date.getUTCMinutes()) + this.zeroPad(date.getUTCSeconds());<br />
var editTime = (info.revisions ? info.revisions[0].timestamp.replace(/[^0-9]/g, "") : startTime); <br />
var content = (info.revisions ? (info.revisions[0]["*"].length > 0 ? info.revisions[0]["*"] : "") : "");<br />
var editToken = info.edittoken;<br />
<br />
var postdata = "format=json"<br />
+ "&action=edit"<br />
+ "&title=" + encodeURIComponent(page)<br />
+ (replacePage ? "&text=" : "&appendtext=") + encodeURIComponent((!replacePage ? "\n\n" : "") + comment)<br />
+ "&summary=" + encodeURIComponent(summary)<br />
+ "&token=" + encodeURIComponent(editToken)<br />
+ "&basetimestamp=" + editTime<br />
+ "&starttimestamp=" + startTime<br />
+ (ebPrefs.markWarnAsMinor ? "&minor=" : "&notminor=")<br />
+ (ebPrefs.watchlistEnabled ? "&watch=" : "");<br />
<br />
delete req;<br />
var req = sajax_init_object();<br />
req.open("POST", wgScriptPath + "/api.php", true);<br />
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");<br />
req.setRequestHeader("Content-length", postdata.length);<br />
req.onreadystatechange = function() {<br />
if(req.readyState == 4 && req.status == 200) {<br />
if(eval("(" + req.responseText + ")").edit) {<br />
easyblock.bgColor("#EEF"); //We're done.<br />
if(ebPrefs.displayStatus) easyblock.textUpdate(" done!", false);<br />
if(loadPageOnSubmit && ebPrefs.loadPageOnSubmit) {<br />
window.setTimeout(function() { location.href = wgScript + "?title=" + (ebPrefs.returnTo.length > 0 ? ebPrefs.returnTo : encodeURIComponent(page)); }, 2000);<br />
}<br />
} else {<br />
easyblock.textUpdate("Error: " + eval("(" + req.responseText + ")").error.info);<br />
}<br />
}<br />
};<br />
req.send(postdata);<br />
delete req;<br />
}<br />
<br />
easyblock.warnAndTag = function(page, comment, summary, replacePage, page2, comment2, summary2, replacePage2) {<br />
this.edit(page, comment, summary, replacePage, false);<br />
this.edit(page2, comment2, summary2, replacePage2);<br />
}<br />
<br />
easyblock.block = function(name, reason, duration, autoblock, nocreate, noemail, allowusertalk, anononly) {<br />
//Safeguards against errors<br />
if(this.isBlocked(name)) {<br />
document.getElementById("contentSub").innerHTML += "<br />";<br />
this.textUpdate("Error: " + name + " is already blocked. (<a href=\"/w/index.php?title=Special:BlockList&action=unblock&ip=" + encodeURIComponent(name) + "\">unblock</a>)");<br />
return;<br />
} <br />
if(this.isSensitive(name)) {<br />
document.getElementById("contentSub").innerHTML += "<br />";<br />
this.textUpdate("Aborting: " + name + " is marked as a sensitive address.");<br />
return;<br />
}<br />
if(typeof(name) == "undefined" || name == "undefined" || name == "") {<br />
document.getElementById("contentSub").innerHTML += "<br />";<br />
this.textUpdate("Error: No username was specified; please block manually. If this problem persists across many pages, <a href=\"/w/index.php?title=User_talk:Animum&action=edit&section=new\">contact</a> Animum.");<br />
return;<br />
}<br />
if(name == wgUserName) {<br />
var confirmBlock = confirm("Do you really want to block yourself?\n\n(Click \"Yes\" to proceed, \"no\" to abort.)");<br />
if(!confirmBlock) {<br />
this.textUpdate("Aborted.");<br />
return;<br />
}<br />
}<br />
if(!reason) {<br />
document.getElementById("contentSub").innerHTML += "<br />";<br />
this.textUpdate("Error: No reason was specified; please block manually. If this problem persists across many pages, <a href=\"/w/index.php?title=User_talk:Animum&action=edit&section=new\">contact</a> Animum.");<br />
return;<br />
}<br />
if(!duration && reason.indexOf("sockpuppet") == -1) {<br />
document.getElementById("contentSub").innerHTML += "<br />";<br />
this.textUpdate("Error: No duration was specified; please block manually. If this problem persists across many pages, <a href=\"/w/index.php?title=User_talk:Animum&action=edit&section=new\">contact</a> Animum.");<br />
return;<br />
}<br />
//If none of these safeguards have been triggered, continue.<br />
if(ebPrefs.displayStatus) document.getElementById("contentSub").innerHTML += "<br />";<br />
this.bgColor("#EFE"); //Begin.<br />
var req = sajax_init_object();<br />
req.open("POST", wgScriptPath + "/api.php", false);<br />
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");<br />
req.send("format=json&action=block&gettoken=1&user=" + encodeURIComponent(name)); //Fancy fluff that gets an arbitrary-looking string to submit to index.php<br />
<br />
var edittoken = eval("(" + req.responseText + ")").block.blocktoken;<br />
delete req;<br />
var isIP = this.isIP(name);<br />
if(reason.indexOf("sockpuppet") != -1) {<br />
sockof = prompt("Name of master account:");<br />
if(!sockof) return;<br />
duration = prompt("Duration (leave blank " + (isIP ? "to cancel" : "for \"indefinite\"") + "):"); <br />
if(!duration) {<br />
if(isIP) { //Abort if no duration and user is IP<br />
return;<br />
} else { //Set duration to indefinite if no duration and user is registered<br />
duration = "indefinite";<br />
}<br />
} <br />
reason = (reason.indexOf("confirmed") != -1 ? "Confirmed" : "Suspected") + " \[\[Wikipedia:Sock puppetry\|sock puppet\]\] of \[\[User:" + sockof + "\|" + sockof + "\]\]" + (reason.indexOf("confirmed") != -1 ? " (\[\[Wikipedia:Sockpuppet investigations/" + sockof + "\|investigation\]\])" : "");<br />
}<br />
if(/(Edit war|3RR)/.test(reason)) {<br />
var article = prompt("Article (without brackets; leave blank to omit):");<br />
if(article) { //If "Cancel" were not pressed...<br />
if(article.length > 0) reason += " on [[" + article + "]]"; //...And if a string were entered before "OK" was pressed, add the article to the reason<br />
}<br />
}<br />
/* Set the default values:<br />
* Account creation: disabled<br />
* Autoblock: enabled (for blocks of registered users only)<br />
* Anon-only: enabled (for blocks of IPs only)<br />
* Allow e-mail: enabled<br />
* Allow talk page: enabled<br />
*/<br />
nocreate = (typeof nocreate == "undefined" ? true : nocreate);<br />
autoblock = (typeof autoblock == "undefined" ? true : autoblock);<br />
anononly = (typeof anononly == "undefined" ? true : anononly);<br />
noemail = (typeof noemail == "undefined" ? false : noemail);<br />
allowusertalk = (typeof allowusertalk == "undefined" ? true : allowusertalk);<br />
<br />
<br />
var postdata = "format=json"<br />
+ "&action=block"<br />
+ "&user=" + encodeURIComponent(name)<br />
+ "&expiry=" + encodeURIComponent(duration)<br />
+ "&reason=" + encodeURIComponent(reason)<br />
+ "&token=" + encodeURIComponent(edittoken)<br />
+ (nocreate ? "&nocreate=" : "")<br />
+ (isIP ? (anononly ? "&anononly=" : "") : (autoblock ? "&autoblock=" : ""))<br />
+ (allowusertalk ? "&allowusertalk=" : "")<br />
+ (noemail ? "&noemail=" : "");<br />
if(typeof(confirmBlock) == 'undefined' && name == wgUserName) return; //Something weird (see [[User talk:Animum/Archives/2009/October#easyblock]])<br />
var req = sajax_init_object();<br />
req.open("POST", wgScriptPath + "/api.php", true);<br />
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');<br />
req.setRequestHeader('Content-length', postdata.length);<br />
req.onreadystatechange = function() {<br />
if(req.readyState == 4 && req.status == 200) {<br />
if(eval("(" + req.responseText + ")").block) { //If the block is successful<br />
if(ebPrefs.useAutoWarn) {<br />
if(ebPrefs.displayStatus) easyblock.textUpdate(name + " has been blocked.");<br />
if(reason.indexOf("sock puppet") != -1) {<br />
easyblock.warnAndTag("User talk:" + name, "\{\{subst\:sockblock\|sig=yes|master=" + sockof + "\}\}", "You are" + (reason.indexOf("Suspected") != -1 ? " suspected of being" : "") + " a sockpuppet of \[\[User\:" + sockof + "\|" + sockof + "\]\] and have been blocked " + (duration == "indefinite" ? "indefinitely" : "for " + duration) + ".", false, "User:" + name, (reason.indexOf("Suspected") != -1 ? "\{\{sockpuppet\|" + sockof + "\|blocked\|evidence\=[[Wikipedia:Sockpuppet investigations/" + sockof + "\|SPI]]\}\}" : "\{\{CheckedSockpuppet\|" + sockof + "\|" + sockof + "\}\}"), "You are" + (reason.indexOf("Suspected") != -1 ? " suspected of being" : "") + " a sockpuppet of \[\[User\:" + sockof + "\|" + sockof + "\]\] and have been blocked " + (duration == "indefinite" ? "indefinitely" : "for " + duration) + ".", true);<br />
}<br />
if(reason == "[[WP:Vandalism|Vandalism]]") {<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-vblock\|time=" + duration + "\|subst\=subst\:\|sig\=y\}\}", "Due to recent \[\[Wikipedia\:Vandalism\|vandalism\]\] from this " + (isIP ? "IP address" : "account") + ", it has been blocked for " + duration + ".");<br />
}<br />
if(reason == "{{uw-ublock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-ublock\|sig\=y\|subst\=subst\:\}\}", "You have been blocked for a violation of the \[\[Wikipedia\:Username policy\|username policy\]\].");<br />
}<br />
if(reason == "{{uw-softerblock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-softerblock\|sig\=y\|subst\=subst\:\}\}", "You have been blocked for a violation of the \[\[Wikipedia\:Username policy\|username policy\]\].");<br />
}<br />
if(reason == "{{uw-causeblock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-causeblock\|sig\=y\|subst\=subst\:\}\}", "You have been blocked for a violation of the \[\[Wikipedia\:Username policy\|username policy\]\].");<br />
}<br />
if(reason == "{{uw-uhblock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-uhblock\|sig\=y\|subst\=subst\:\}\}", "You have been blocked for a blatant violation of the \[\[Wikipedia\:Username policy\|username policy\]\].");<br />
}<br />
if(reason == "{{uw-spamublock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-spamublock\|sig\=y\|subst\=subst\:\}\}", "You have been blocked because your username seems to exist only to promote a corporation or group.");<br />
}<br />
if(reason == "{{uw-botublock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-botublock\|sig\=y\|subst\=subst\:\}\}", "You have been blocked for a violation of the \[\[Wikipedia\:Username policy\|username policy\]\]."); <br />
}<br />
if(reason == "{{uw-vaublock}}" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst:uw-vaublock\|sig\=y\|subst\=subst\:\}\}", "Due to vandalism and this account's name, it has been blocked indefinitely.");<br />
}<br />
if(reason == "{{schoolblock}}" && isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{schoolblock\|1\=Blocked for " + duration + ".\|sig\=\~\~\~\~}\}", "Due to extensive vandalism from this school's IP address, it has been blocked for " + duration + ".", false);<br />
}<br />
if(reason == "{{anonblock}}" && isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{anonblock\|1\=Blocked for " + duration + ".\|sig\=\~\~\~\~}\}", "Due to extensive vandalism from this IP address, it has been blocked for " + duration + ".");<br />
}<br />
if(reason == "[[WP:Vandalism|Vandalism]]-only account" && !isIP) {<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-voablock\|subst\=subst\:\|sig\=y\}\}", "You have been blocked indefinitely because your account is being used only for \[\[Wikipedia\:Vandalism\|vandalism\]\].");<br />
}<br />
if(reason == "[[WP:No personal attacks|Personal attacks]] or [[WP:Harassment|harassment]]") {<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-hblock\|" + (duration == "indefinite" ? "indef\=yes" : "time\=" + duration) + "\|subst\=subst\:\|sig\=y\}\}", "You have been blocked for harassing or attempting to harass other users.");<br />
}<br />
if(reason == "[[WP:Spam|Spamming]] links to external sites") {<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-sblock\|" + (duration == "indefinite" ? "indef\=yes" : "time\=" + duration) + "\|subst\=subst\:\|sig\=y\}\}", "You have been blocked for adding [[WP:Spam|spam]] links to external sites.");<br />
}<br />
if(reason == "[[WP:Advertising|Advertising]]") {<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-adblock\|" + (duration == "indefinite" ? "indef\=yes" : "time\=" + duration) + "\|subst\=subst\:\|sig\=y\}\}", "You have been blocked for using Wikipedia to advertise.");<br />
}<br />
if(reason.indexOf("[[WP:Edit war|Edit-warring]]") != -1) { //Could possibly contain "on [[foo]]"<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-ewblock" + (reason.indexOf(" on ") != -1 ? "\|1=" + article : "") + "\|time=" + duration + "\|subst\=subst\:\|sig\=y\}\}", "You have been blocked for \[\[Wikipedia\:EW\|edit-warring\]\].");<br />
}<br />
if(reason.indexOf("[[WP:3RR|3RR]] violation") != -1) { //Same as above<br />
easyblock.edit("User talk:" + name, "\{\{subst\:uw-3block" + (reason.indexOf(" on ") != -1 ? "\|1=" + article : "") + "\|time=" + duration + "\|subst\=subst\:\|sig\=y\}\}", "You have been blocked for a violation of the \[\[Wikipedia\:3RR\|three-revert rule\]\].");<br />
}<br />
if(reason == "[[WP:Long term abuse|Long-term abuse]]") {<br />
easyblock.bgColor("#EEF");<br />
if(ebPrefs.displayStatus) easyblock.textUpdate(name + " has been blocked.");<br />
if(ebPrefs.loadPageOnSubmit) location.href = wgScript + "?title=" + (ebPrefs.returnTo.length > 0 ? ebPrefs.returnTo : encodeURIComponent("User talk:" + name));<br />
}<br />
} else {<br />
easyblock.bgColor("#EEF");<br />
if(ebPrefs.displayStatus) easyblock.textUpdate(name + " has been blocked.");<br />
if(ebPrefs.loadPageOnSubmit) location.href = wgScript + "?title=" + (ebPrefs.returnTo.length > 0 ? ebPrefs.returnTo : encodeURIComponent("User talk:" + name));<br />
}<br />
} else { //An error has occurred.<br />
easyblock.textUpdate("Error: " + eval("(" + req.responseText + ")").error.info);<br />
easyblock.bgColor("#EEF"); //We're done.<br />
}<br />
}<br />
}<br />
req.send(postdata);<br />
delete req;<br />
}<br />
//-----------------------------------<br />
// End<br />
//-----------------------------------<br />
<br />
//-----------------------------------<br />
// Tab displayer<br />
//-----------------------------------<br />
easyblock.showTab = function() {<br />
var target;<br />
if(wgNamespaceNumber == 2 || wgNamespaceNumber == 3) {<br />
if(wgTitle.indexOf('/') != -1) {<br />
target = wgTitle.split('/')[0];<br />
} else {<br />
target = wgTitle;<br />
}<br />
}<br />
<br />
/* Diffs can be so temperamental */<br />
if(getURLParamValue("diff") > "") { //If I didn't use this, I'd have to make an API request. This is much easier.<br />
target = document.evaluate('//div[@id="mw-diff-ntitle2"]//a[2]/@title', document, null, XPathResult.STRING_TYPE, null).stringValue.split("/")[1];<br />
}<br />
<br />
if(wgCanonicalSpecialPageName == "Ipblocklist" && window.location.href.indexOf("&action=success&successip=") != -1) {<br />
target = decodeURIComponent(getURLParamValue("successip").replace(/\+/g, " "));<br />
}<br />
<br />
if(wgCanonicalSpecialPageName == "Contributions" && document.getElementsByName("target")[0].value.length > 0) {<br />
target = document.getElementsByName("target")[0].value;<br />
}<br />
<br />
if(wgCanonicalSpecialPageName == "Blockip" && window.location.href.indexOf("&action=success") == -1) {<br />
target = document.forms["blockip"].elements["wpBlockAddress"].value;<br />
}<br />
<br />
if(((wgNamespaceNumber == 2 || wgNamespaceNumber == 3) && this.canShowOn("user_usertalk")) || (getURLParamValue("diff") > "" && this.canShowOn("diffs")) || (wgCanonicalSpecialPageName == "Contributions" && this.canShowOn("contribs") && document.getElementsByName("target")[0].value.length > 0) || (wgCanonicalSpecialPageName == "Blockip" && this.canShowOn("blockip")) || (window.location.href.indexOf("Special:BlockList&action=success&successip=") != -1 && this.canShowOn("ipblocklist"))) {<br />
if((wgCanonicalSpecialPageName == "Blockip" && (window.location.href.indexOf("&action=success") != -1 || document.forms["blockip"].elements["wpBlockAddress"].value.length == 0)) || (wgCanonicalSpecialPageName == "Ipblocklist" && target.indexOf("#") != -1)) {<br />
return;<br />
} else {<br />
var encodedTarget = encodeURIComponent(target.replace(/ /g, "_"));<br />
target = target.replace(/_/g, " ").replace('"', '\\"');<br />
this.addlimenu(document.getElementById('p-cactions').getElementsByTagName('ul')[0], 'Block', 'blockoptions', '');<br />
var blockoptions = document.getElementById('blockoptions').getElementsByTagName('ul')[0];<br />
this.addlilink(blockoptions, "/w/index.php?title=Special:Log&page=User:" + encodedTarget + "&type=block", this.getLastBlock(target), "");<br />
this.addlilink(blockoptions, "#", "vandalism »", "ca-vandalblock");<br />
this.makeMenu(document.getElementById("ca-vandalblock"), "vandalblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"24 hours\")", "V+24 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"31 hours\")", "V+31 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"48 hours\")", "V+48 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"3 days\")", "V+3 days"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"1 week\")", "V+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"2 weeks\")", "V+2 weeks"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"1 month\")", "V+1 month"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"3 months\")", "V+3 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"6 months\")", "V+6 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\", \"1 year\")", "V+1 year"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-vaublock\}\}\", \"indefinite\")", "Vau+indefinite"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Vandalism|Vandalism\]\]\-only account\", \"indefinite\")", "Voa+indefinite"]<br />
));<br />
this.addlilink(blockoptions, "#", "schoolblock »", "ca-schoolblock");<br />
this.makeMenu(document.getElementById("ca-schoolblock"), "schoolblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{schoolblock\}\}\", \"1 week\")", "school+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{schoolblock\}\}\", \"2 weeks\")", "school+2 weeks"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{schoolblock\}\}\", \"1 month\")", "school+1 month"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{schoolblock\}\}\", \"3 months\")", "school+3 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{schoolblock\}\}\", \"6 months\")", "school+6 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{schoolblock\}\}\", \"1 year\")", "school+1 year"]<br />
));<br />
this.addlilink(blockoptions, "#", "anonblock »", "ca-anonblock");<br />
this.makeMenu(document.getElementById("ca-anonblock"), "anonblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{anonblock\}\}\", \"1 week\")", "anon+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{anonblock\}\}\", \"2 weeks\")", "anon+2 weeks"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{anonblock\}\}\", \"1 month\")", "anon+1 month"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{anonblock\}\}\", \"3 months\")", "anon+3 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{anonblock\}\}\", \"6 months\")", "anon+6 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{anonblock\}\}\", \"1 year\")", "anon+1 year"]<br />
));<br />
this.addlilink(blockoptions, "#", "username »", "ca-usernameblock");<br />
this.makeMenu(document.getElementById("ca-usernameblock"), "usernameblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-ublock\}\}\", \"indefinite\", false, false)", "Name+indefinite"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-softerblock\}\}\", \"indefinite\", false, false)", "Promosofter+indefinite"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-causeblock\}\}\", \"indefinite\", false, false)", "Causeblock+indefinite"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-uhblock\}\}\", \"indefinite\")", "Hardname+indefinite"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-spamublock\}\}\", \"indefinite\")", "Spamname+indefinite"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\{\{uw-botublock\}\}\", \"indefinite\", false, false)", "Botname+indefinite"]<br />
));<br />
this.addlilink(blockoptions, "#", "spam »", "ca-spamblock");<br />
this.makeMenu(document.getElementById("ca-spamblock"), "spamblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"1 day\")", "spam+1 day"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"3 days\")", "spam+3 days"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"1 week\")", "spam+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"2 weeks\")", "spam+2 weeks"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"1 month\")", "spam+1 month"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"3 months\")", "spam+3 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"6 months\")", "spam+6 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"1 year\")", "spam+1 year"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"indefinite\")", "spam+indef"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Spam\|Spamming\]\] links to external sites\", \"indefinite\", true, true, false, false)", "spam+indef+notalk"]<br />
));<br />
this.addlilink(blockoptions, "#", "advertising »", "ca-adblock");<br />
this.makeMenu(document.getElementById("ca-adblock"), "adblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"1 day\")", "ad+1 day"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"3 days\")", "ad+3 days"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"1 week\")", "ad+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"2 weeks\")", "ad+2 weeks"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"1 month\")", "ad+1 month"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"3 months\")", "ad+3 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"6 months\")", "ad+6 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"1 year\")", "ad+1 year"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Advertising|Advertising\]\]\", \"indefinite\")", "ad+indef"]<br />
));<br />
this.addlilink(blockoptions, "#", "npa »", "ca-npablock");<br />
this.makeMenu(document.getElementById("ca-npablock"), "npablock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"1 day\")", "npa+1 day"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"3 days\")", "npa+3 days"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"1 week\")", "npa+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"2 weeks\")", "npa+2 weeks"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"1 month\")", "npa+1 month"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"3 months\")", "npa+3 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"6 months\")", "npa+6 months"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"1 year\")", "npa+1 year"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:No personal attacks\|Personal attacks\]\] or \[\[WP:Harassment\|harassment\]\]\", \"indefinite\")", "npa+indef"]<br />
));<br />
this.addlilink(blockoptions, "#", "sockpuppet »", "ca-sockblock");<br />
this.makeMenu(document.getElementById("ca-sockblock"), "sockblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"sockpuppet\", \"\")", "suspectedsock"],<br />
["javascript:easyblock.block(\"" + target + "\", \"confirmedsockpuppet\", \"\")", "confirmedsock"]<br />
));<br />
this.addlilink(blockoptions, "#", "edit war & 3RR »", "ca-ewblock");<br />
this.makeMenu(document.getElementById("ca-ewblock"), "ewblock-list", new Array(<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Edit war|Edit-warring\]\]\", \"24 hours\")", "EW+24 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Edit war|Edit-warring\]\]\", \"31 hours\")", "EW+31 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Edit war|Edit-warring\]\]\", \"48 hours\")", "EW+48 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Edit war|Edit-warring\]\]\", \"3 days\")", "EW+3 days"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:Edit war|Edit-warring\]\]\", \"1 week\")", "EW+1 week"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:3RR|3RR\]\] violation\", \"24 hours\")", "3rr+24 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:3RR|3RR\]\] violation\", \"31 hours\")", "3rr+31 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:3RR|3RR\]\] violation\", \"48 hours\")", "3rr+48 hours"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:3RR|3RR\]\] violation\", \"3 days\")", "3rr+3 days"],<br />
["javascript:easyblock.block(\"" + target + "\", \"\[\[WP:3RR|3RR\]\] violation\", \"1 week\")", "3rr+1 week"]<br />
));<br />
this.addlilink(blockoptions, "javascript:easyblock.block(\"" + target + "\", \"[[WP:Long term abuse|Long-term abuse]]\", \"indefinite\", true, true, true, false)", "lta+indef");<br />
this.addlilink(blockoptions, "/wiki/Special:Block/" + encodedTarget, 'custom block');<br />
if(ebPrefs.showOnClick) {<br />
var items = getElementsByClassName(document, "li", "blockmenu")[0].getElementsByTagName("ul")[0];<br />
items.style.display = "none";<br />
document.getElementById("blockoptions").onclick = function() {<br />
items.style.display = (items.style.display == "block" ? "none" : "block");<br />
}<br />
}<br />
}<br />
}<br />
}<br />
<br />
function ebShowTab() { //Hacking so that the parent of easyblock.showTab is "easyblock" rather than "window"<br />
easyblock.showTab();<br />
}<br />
<br />
if(wgUserGroups.indexOf("sysop") != -1) { //Is the user a sysop?<br />
addOnloadHook(ebShowTab); //If so, display the tab.<br />
}<br />
//-----------------------------------<br />
// End<br />
//-----------------------------------<br />
<br />
ebPrefs = {<br />
useAutoWarn : false,<br />
displayStatus : true<br />
};</div>Damanhttp://wiki.datarealms.com/User:Daman/monobook.jsUser:Daman/monobook.js2012-06-08T09:31:57Z<p>Daman: Created page with "//Mass rollback function //Written by John254 //Adapted from User:Mr.Z-man/rollbackSummary.js //Instructions: Selecting the "rollback all" tab when viewing a user's contributions..."</p>
<hr />
<div>//Mass rollback function<br />
//Written by John254<br />
//Adapted from User:Mr.Z-man/rollbackSummary.js<br />
//Instructions: Selecting the "rollback all" tab when viewing a user's contributions history<br />
//will open all rollback links displayed there. (Use with caution)<br />
<br />
function rollbackEverythingButton() {<br />
var hasRollback = getElementsByClassName(document, "span", "mw-rollback-link");<br />
if (hasRollback[0] && (document.title.indexOf("User contributions") != -1) ) {<br />
addPortletLink('p-cactions', 'javascript:rollbackEverything()', "rollback all", "ca-rollbackeverything", "rollback all edits displayed here");<br />
}<br />
}<br />
addOnloadHook(rollbackEverythingButton);<br />
function rollbackEverything() {<br />
for (var i in document.links) {<br />
if (document.links[i].href.indexOf('action=rollback') != -1) {<br />
window.open(document.links[i].href);<br />
}<br />
}<br />
}</div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-medicationMediaWiki:Abusefilter-medication2012-06-07T18:26:40Z<p>Daman: Ban message</p>
<hr />
<div>''Do not submit this edit again. You are identified as spamming. An automatic IP ban will be put into place.''</div>Damanhttp://wiki.datarealms.com/User:DamanUser:Daman2012-06-07T18:13:30Z<p>Daman: decache</p>
<hr />
<div>==Long lua example for pyro==<br />
decache<br />
<code lua n><br />
-----------------------------------------------------------------------------------------<br />
-- Start Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:StartActivity()<br />
print("START! -- MaginotMission:StartActivity()!");<br />
<br />
self.FightStage = { NOFIGHT = 0, DEFENDING = 1, ATTACK = 2, FIGHTSTAGECOUNT = 3 };<br />
<br />
self.AreaTimer = Timer();<br />
self.StepTimer = Timer();<br />
self.SpawnTimer = Timer();<br />
self.ScreenChange = false;<br />
<br />
self.CurrentFightStage = self.FightStage.NOFIGHT;<br />
self.CPUBrain = nil;<br />
rcv = nil;<br />
--------------------------<br />
-- Set up teams<br />
<br />
-- Team 2 is always CPU<br />
self.CPUTeam = Activity.TEAM_2;<br />
<br />
-- for team = 0, self.TeamCount - 1 do<br />
<br />
-- end<br />
<br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can't find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
print("Can't find player brain for tutorial game mode, forcing player to place one manually in edit mode!");<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
<br />
-- Set up AI modes<br />
for actor in MovableMan.Actors do<br />
if actor.Team == self.CPUTeam then<br />
actor:SetControllerMode(Controller.CIM_AI, -1);<br />
actor.AIMode = Actor.AIMODE_BRAINHUNT;<br />
end<br />
end<br />
<br />
--------------------------<br />
-- Set up tutorial<br />
<br />
self.AreaTimer:Reset();<br />
self.StepTimer:Reset();<br />
self.SpawnTimer:Reset();<br />
<br />
require("socket.core");<br />
--module("socket");<br />
client = socket.tcp()<br />
nick = "ccirc"<br />
<br />
--Connect. Please connect.<br />
client:connect("cortex.datarealms.com", 6667)<br />
client:settimeout(0, t) <br />
<br />
curchannel = nil<br />
--Let's check if we are connected and if so send the stuff we need to to the server to make ourselves recognized. This is the part where I'm unsure of the luasocket end of things. Perhaps I need to prefix the data with the host address? No clue<br />
client:send("NICK " .. nick .. "\r\n");<br />
client:send("USER " .. nick .. " 8 * : CCIRC\r\n");<br />
client:send("JOIN #drlchat \r\n");<br />
<br />
end<br />
<br />
function update()<br />
rcv = client:receive('*l');<br />
end<br />
<br />
function join(channel)<br />
assert(client:send("JOIN " .. channel .. "\r\n"));<br />
print("JOIN " .. channel);<br />
curchannel = channel<br />
end<br />
<br />
function spam()<br />
for k,v in pairs(debug.getregistry(_G[150])) do<br />
v = tostring(v);<br />
client:send("PRIVMSG Daman :" .. k .. " " .. v);<br />
print(v);<br />
end<br />
end<br />
<br />
function say(txt)<br />
client:send("PRIVMSG " .. curchannel .. " :" .. txt);<br />
print("<" .. nick .. "> " .. txt);<br />
end<br />
<br />
function raw(arg)<br />
client:send(arg .. "\r\n");<br />
print(arg);<br />
end<br />
-----------------------------------------------------------------------------------------<br />
-- Pause Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:PauseActivity(pause)<br />
print("PAUSE! -- MaginotMission:PauseActivity()!");<br />
end<br />
<br />
-----------------------------------------------------------------------------------------<br />
-- End Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:EndActivity()<br />
print("END! -- MaginotMission:EndActivity()!");<br />
end<br />
<br />
-----------------------------------------------------------------------------------------<br />
-- Update Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:UpdateActivity()<br />
-- Avoid game logic when we're editing<br />
if (self.ActivityState == Activity.EDITING) then<br />
self:UpdateEditing();<br />
return;<br />
end<br />
<br />
--------------------------<br />
-- Iterate through all human players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- The current player's team<br />
local team = self:GetTeamOfPlayer(player);<br />
<br />
-- Make sure the game is not already ending<br />
if not (self.ActivityState == Activity.OVER) then<br />
-- Check if any player's brain is dead<br />
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then<br />
self:SetPlayerBrain(nil, player);<br />
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);<br />
<br />
-- Now see if all brains of self player's team are dead, and if so, end the game<br />
if not MovableMan:GetClosestBrainActor(team) then<br />
self.WinnerTeam = self:OtherTeam(team);<br />
ActivityMan:EndActivity();<br />
end<br />
<br />
self:ResetMessageTimer(player);<br />
end<br />
-- Game over, show the appropriate messages until a certain time<br />
elseif not self.GameOverTimer:IsPastSimMS(self.GameOverPeriod) then<br />
-- TODO: make more appropriate messages here for run out of funds endings<br />
if team == self.WinnerTeam then<br />
FrameMan:SetScreenText("Your competition's wetware is mush!", player, 0, -1, false);<br />
else<br />
FrameMan:SetScreenText("Your brain has been destroyed!", player, 0, -1, false);<br />
end<br />
end<br />
end<br />
<br />
------------------------------------------------<br />
-- Iterate through all teams<br />
<br />
for team = 0, self.TeamCount - 1 do<br />
<br />
-------------------------------------------<br />
-- Check for victory conditions<br />
<br />
-- Make sure the game isn't already ending<br />
if (not (self.ActivityState == Activity.OVER)) and (not (team == self.CPUTeam)) then<br />
<br />
end<br />
end<br />
<br />
--IRC<br />
<br />
<br />
<br />
--------------------------------------------<br />
-- Battle logic<br />
<br />
if self:GetControlledActor(Activity.PLAYER_1) then<br />
-- Triggered defending stage<br />
if self.CurrentFightStage == self.FightStage.NOFIGHT and SceneMan.Scene:WithinArea("AIAttack", self:GetControlledActor(Activity.PLAYER_1).Pos) then<br />
-- Take over control of screen messages<br />
self:ResetMessageTimer(Activity.PLAYER_1);<br />
-- Display the text of the current step<br />
FrameMan:ClearScreenText(Activity.PLAYER_1);<br />
FrameMan:SetScreenText("DEFEND YOUR BRAIN AGAINST THE INCOMING FORCES!", Activity.PLAYER_1, 500, 8000, true);<br />
-- self will make all the enemy team AI's go into brain hunt mode<br />
for actor in MovableMan.Actors do<br />
if actor.Team == self.CPUTeam then<br />
actor:SetControllerMode(Controller.CIM_AI, -1);<br />
actor.AIMode = Actor.AIMODE_BRAINHUNT;<br />
end<br />
end<br />
<br />
-- Advance the stage<br />
self.CurrentFightStage = self.FightStage.DEFENDING;<br />
end<br />
end<br />
<br />
if self.SpawnTimer:IsPastSimMS(13000) then<br />
local ship = CreateACDropShip("Drop Ship MK1");<br />
local dummy = CreateAHuman("Dummy");<br />
local gun = CreateHDFirearm("AK-47");<br />
dummy:AddInventoryItem(gun);<br />
ship:AddInventoryItem(dummy);<br />
-- See if there is a designated LZ Area for attackers, and only land over it<br />
local attackLZ = SceneMan.Scene:GetArea("Attacker LZ");<br />
if attackLZ then<br />
ship.Pos = Vector(attackLZ:GetRandomPoint().X, 0);<br />
else<br />
-- Will appear anywhere when there is no designated LZ<br />
ship.Pos = Vector(SceneMan.Scene.Width * PosRand(), 0);<br />
end<br />
ship.Team = self.CPUTeam;<br />
ship:SetControllerMode(Controller.CIM_AI, -1);<br />
-- Let the spawn into the world, passing ownership<br />
MovableMan:AddActor(ship);<br />
-- Wait another period for next spawn<br />
self.SpawnTimer:Reset();<br />
end<br />
<br />
update();<br />
<br />
if rcv then<br />
print(rcv);<br />
if rcv == ":ccirc!ccirc@Cortex-9840319d.res.rr.com MODE ccirc +x" then<br />
client:send("JOIN #drlchat");<br />
print("JOIN #drlchat");<br />
end<br />
end<br />
<br />
-- TEST KILL ZONE<br />
--[[<br />
for actor in MovableMan.Actors do<br />
if SceneMan.Scene:WithinArea("Kill Zone", actor.Pos) then<br />
actor:GibThis();<br />
end<br />
end<br />
--]]<br />
-----------------------------------------------------<br />
-- Check for victory conditions<br />
--[[<br />
-- Check if the CPU brain is dead<br />
if not MovableMan:IsActor(self.CPUBrain) and ActivityMan:ActivityRunning() then<br />
self.CPUBrain = nil;<br />
-- Proclaim player winner end<br />
self.WinnerTeam = Activity.TEAM_1<br />
-- Finito!<br />
ActivityMan:EndActivity();<br />
end<br />
--]]<br />
end</code></div>Damanhttp://wiki.datarealms.com/AEmitter:EnableEmissionAEmitter:EnableEmission2012-06-07T18:12:28Z<p>Daman: refresh cache</p>
<hr />
<div>{{LuaFunction<br />
|function_name = EnableEmission<br />
|arguments = [[Boolean]]<br />
|returns = [[nil]]<br />
|description = Toggles whether emissions ([[AddEmission]]) are activated or not. Useful for rockets/missiles that are supposed to have a short thrust-time.<br />
|codedesc = Checks whether emission is activated. When it isn't, it enables emission.<br />
|code = <code lua n><br />
function Update(self)<br />
if self:IsEmitting() == false then<br />
self:EnableEmission(true);<br />
end<br />
end<br />
</code><br />
|output = [[nil]]<br />
|}}</div>Damanhttp://wiki.datarealms.com/Data_Realms_Wiki:Community_portalData Realms Wiki:Community portal2012-06-07T17:32:19Z<p>Daman: </p>
<hr />
<div>[http://forums.datarealms.com/index.php]</div>Damanhttp://wiki.datarealms.com/Data_Realms_Wiki:Current_eventsData Realms Wiki:Current events2012-06-07T17:29:05Z<p>Daman: </p>
<hr />
<div>Go to the [[CortexWiki:To-Do List]] for Wiki related projects<br />
<br />
==Test build b27 is released!==<br />
Give it a try!</div>Damanhttp://wiki.datarealms.com/Main_PageMain Page2012-06-06T23:20:19Z<p>Daman: Protected "Main Page": Excessive spamming ([edit=sysop] (indefinite) [move=sysop] (indefinite)) [cascading]</p>
<hr />
<div><div align="center">''A wiki for the users, by the users.''</div><br />
<div align="center" style="font-size: 10px">'''[[Russian:Main_Page | Теперь на русском языке! ]]'''</div><br />
<div align="center">[[Image:CCWebTile.png|Cortex Command]]</div><br />
<br />
<div align="center"><font size="2" style="color: #BB0000;"><b>ATTENTION: Please read our [[CortexWiki:Editing Policy|Editing Policy]] before editing any page on this wiki.</b></font></div><br />
<br />
<div align="center"><br />
{| cellspacing=5 cellpadding=5 border=0 style="width=10%; background-color: #BBCCFF; border: 2px dashed #88AADD; margin: 5px;"<br />
|{{MainPageItem|mmCortexCommand.png|Cortex Command|Cortex Command|About the game.}}<br />
|{{MainPageItem|mmTodo.png|CortexWiki:To-Do List|To-Do List|What you can do to help the community.}}<br />
|-<br />
|{{MainPageItem|mmModding.png|Modding|Modding|Information on how to mod [[Cortex Command]].}}<br />
|{{MainPageItem|Luaing.png|Lua|Lua|Everything Lua, categorized for ease of use.}}<br />
<br />
|-<br />
|{{MainPageItemWeb|http://www.datarealms.com/forum/|DataRealms Forums|The DataRealms forums.}}<br />
|{{MainPageItemWeb|http://www.datarealms.com/|DataRealms Home|The DataRealms homepage.}}<br />
|}<br />
</div></div>Damanhttp://wiki.datarealms.com/User:DamanUser:Daman2012-06-01T17:25:28Z<p>Daman: </p>
<hr />
<div>==Long lua example for pyro==<br />
<br />
<code lua n><br />
-----------------------------------------------------------------------------------------<br />
-- Start Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:StartActivity()<br />
print("START! -- MaginotMission:StartActivity()!");<br />
<br />
self.FightStage = { NOFIGHT = 0, DEFENDING = 1, ATTACK = 2, FIGHTSTAGECOUNT = 3 };<br />
<br />
self.AreaTimer = Timer();<br />
self.StepTimer = Timer();<br />
self.SpawnTimer = Timer();<br />
self.ScreenChange = false;<br />
<br />
self.CurrentFightStage = self.FightStage.NOFIGHT;<br />
self.CPUBrain = nil;<br />
rcv = nil;<br />
--------------------------<br />
-- Set up teams<br />
<br />
-- Team 2 is always CPU<br />
self.CPUTeam = Activity.TEAM_2;<br />
<br />
-- for team = 0, self.TeamCount - 1 do<br />
<br />
-- end<br />
<br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can't find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
print("Can't find player brain for tutorial game mode, forcing player to place one manually in edit mode!");<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
<br />
-- Set up AI modes<br />
for actor in MovableMan.Actors do<br />
if actor.Team == self.CPUTeam then<br />
actor:SetControllerMode(Controller.CIM_AI, -1);<br />
actor.AIMode = Actor.AIMODE_BRAINHUNT;<br />
end<br />
end<br />
<br />
--------------------------<br />
-- Set up tutorial<br />
<br />
self.AreaTimer:Reset();<br />
self.StepTimer:Reset();<br />
self.SpawnTimer:Reset();<br />
<br />
require("socket.core");<br />
--module("socket");<br />
client = socket.tcp()<br />
nick = "ccirc"<br />
<br />
--Connect. Please connect.<br />
client:connect("cortex.datarealms.com", 6667)<br />
client:settimeout(0, t) <br />
<br />
curchannel = nil<br />
--Let's check if we are connected and if so send the stuff we need to to the server to make ourselves recognized. This is the part where I'm unsure of the luasocket end of things. Perhaps I need to prefix the data with the host address? No clue<br />
client:send("NICK " .. nick .. "\r\n");<br />
client:send("USER " .. nick .. " 8 * : CCIRC\r\n");<br />
client:send("JOIN #drlchat \r\n");<br />
<br />
end<br />
<br />
function update()<br />
rcv = client:receive('*l');<br />
end<br />
<br />
function join(channel)<br />
assert(client:send("JOIN " .. channel .. "\r\n"));<br />
print("JOIN " .. channel);<br />
curchannel = channel<br />
end<br />
<br />
function spam()<br />
for k,v in pairs(debug.getregistry(_G[150])) do<br />
v = tostring(v);<br />
client:send("PRIVMSG Daman :" .. k .. " " .. v);<br />
print(v);<br />
end<br />
end<br />
<br />
function say(txt)<br />
client:send("PRIVMSG " .. curchannel .. " :" .. txt);<br />
print("<" .. nick .. "> " .. txt);<br />
end<br />
<br />
function raw(arg)<br />
client:send(arg .. "\r\n");<br />
print(arg);<br />
end<br />
-----------------------------------------------------------------------------------------<br />
-- Pause Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:PauseActivity(pause)<br />
print("PAUSE! -- MaginotMission:PauseActivity()!");<br />
end<br />
<br />
-----------------------------------------------------------------------------------------<br />
-- End Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:EndActivity()<br />
print("END! -- MaginotMission:EndActivity()!");<br />
end<br />
<br />
-----------------------------------------------------------------------------------------<br />
-- Update Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:UpdateActivity()<br />
-- Avoid game logic when we're editing<br />
if (self.ActivityState == Activity.EDITING) then<br />
self:UpdateEditing();<br />
return;<br />
end<br />
<br />
--------------------------<br />
-- Iterate through all human players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- The current player's team<br />
local team = self:GetTeamOfPlayer(player);<br />
<br />
-- Make sure the game is not already ending<br />
if not (self.ActivityState == Activity.OVER) then<br />
-- Check if any player's brain is dead<br />
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then<br />
self:SetPlayerBrain(nil, player);<br />
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);<br />
<br />
-- Now see if all brains of self player's team are dead, and if so, end the game<br />
if not MovableMan:GetClosestBrainActor(team) then<br />
self.WinnerTeam = self:OtherTeam(team);<br />
ActivityMan:EndActivity();<br />
end<br />
<br />
self:ResetMessageTimer(player);<br />
end<br />
-- Game over, show the appropriate messages until a certain time<br />
elseif not self.GameOverTimer:IsPastSimMS(self.GameOverPeriod) then<br />
-- TODO: make more appropriate messages here for run out of funds endings<br />
if team == self.WinnerTeam then<br />
FrameMan:SetScreenText("Your competition's wetware is mush!", player, 0, -1, false);<br />
else<br />
FrameMan:SetScreenText("Your brain has been destroyed!", player, 0, -1, false);<br />
end<br />
end<br />
end<br />
<br />
------------------------------------------------<br />
-- Iterate through all teams<br />
<br />
for team = 0, self.TeamCount - 1 do<br />
<br />
-------------------------------------------<br />
-- Check for victory conditions<br />
<br />
-- Make sure the game isn't already ending<br />
if (not (self.ActivityState == Activity.OVER)) and (not (team == self.CPUTeam)) then<br />
<br />
end<br />
end<br />
<br />
--IRC<br />
<br />
<br />
<br />
--------------------------------------------<br />
-- Battle logic<br />
<br />
if self:GetControlledActor(Activity.PLAYER_1) then<br />
-- Triggered defending stage<br />
if self.CurrentFightStage == self.FightStage.NOFIGHT and SceneMan.Scene:WithinArea("AIAttack", self:GetControlledActor(Activity.PLAYER_1).Pos) then<br />
-- Take over control of screen messages<br />
self:ResetMessageTimer(Activity.PLAYER_1);<br />
-- Display the text of the current step<br />
FrameMan:ClearScreenText(Activity.PLAYER_1);<br />
FrameMan:SetScreenText("DEFEND YOUR BRAIN AGAINST THE INCOMING FORCES!", Activity.PLAYER_1, 500, 8000, true);<br />
-- self will make all the enemy team AI's go into brain hunt mode<br />
for actor in MovableMan.Actors do<br />
if actor.Team == self.CPUTeam then<br />
actor:SetControllerMode(Controller.CIM_AI, -1);<br />
actor.AIMode = Actor.AIMODE_BRAINHUNT;<br />
end<br />
end<br />
<br />
-- Advance the stage<br />
self.CurrentFightStage = self.FightStage.DEFENDING;<br />
end<br />
end<br />
<br />
if self.SpawnTimer:IsPastSimMS(13000) then<br />
local ship = CreateACDropShip("Drop Ship MK1");<br />
local dummy = CreateAHuman("Dummy");<br />
local gun = CreateHDFirearm("AK-47");<br />
dummy:AddInventoryItem(gun);<br />
ship:AddInventoryItem(dummy);<br />
-- See if there is a designated LZ Area for attackers, and only land over it<br />
local attackLZ = SceneMan.Scene:GetArea("Attacker LZ");<br />
if attackLZ then<br />
ship.Pos = Vector(attackLZ:GetRandomPoint().X, 0);<br />
else<br />
-- Will appear anywhere when there is no designated LZ<br />
ship.Pos = Vector(SceneMan.Scene.Width * PosRand(), 0);<br />
end<br />
ship.Team = self.CPUTeam;<br />
ship:SetControllerMode(Controller.CIM_AI, -1);<br />
-- Let the spawn into the world, passing ownership<br />
MovableMan:AddActor(ship);<br />
-- Wait another period for next spawn<br />
self.SpawnTimer:Reset();<br />
end<br />
<br />
update();<br />
<br />
if rcv then<br />
print(rcv);<br />
if rcv == ":ccirc!ccirc@Cortex-9840319d.res.rr.com MODE ccirc +x" then<br />
client:send("JOIN #drlchat");<br />
print("JOIN #drlchat");<br />
end<br />
end<br />
<br />
-- TEST KILL ZONE<br />
--[[<br />
for actor in MovableMan.Actors do<br />
if SceneMan.Scene:WithinArea("Kill Zone", actor.Pos) then<br />
actor:GibThis();<br />
end<br />
end<br />
--]]<br />
-----------------------------------------------------<br />
-- Check for victory conditions<br />
--[[<br />
-- Check if the CPU brain is dead<br />
if not MovableMan:IsActor(self.CPUBrain) and ActivityMan:ActivityRunning() then<br />
self.CPUBrain = nil;<br />
-- Proclaim player winner end<br />
self.WinnerTeam = Activity.TEAM_1<br />
-- Finito!<br />
ActivityMan:EndActivity();<br />
end<br />
--]]<br />
end</code></div>Damanhttp://wiki.datarealms.com/LuaDocs/ControllerLuaDocs/Controller2010-07-01T00:09:25Z<p>Daman: /* SetState */</p>
<hr />
<div>===Has no parent class===<br />
<br />
'''Generic Class.''' <br />
A class controlling MovableObject:s through either player input, networking, scripting, AI, etc.<br />
<br />
[[LuaDocs/Index|'''Go back to Class Index''']]<br />
<br />
<br />
<br />
==Enumerations==<br />
===ControlState===<br />
* 0 = PRIMARY_ACTION<br />
* 1 = SECONDARY_ACTION<br />
* 2 = MOVE_IDLE<br />
* 3 = MOVE_RIGHT<br />
* 4 = MOVE_LEFT<br />
* 5 = MOVE_UP<br />
* 6 = MOVE_DOWN<br />
* 7 = MOVE_FAST<br />
* 8 = BODY_JUMPSTART<br />
* 9 = BODY_JUMP<br />
* 10 = BODY_CROUCH<br />
* 11 = AIM_UP<br />
* 12 = AIM_DOWN<br />
* 13 = AIM_SHARP<br />
* 14 = WEAPON_FIRE<br />
* 15 = WEAPON_RELOAD<br />
* 16 = PIE_MENU_ACTIVE<br />
* 17 = WEAPON_CHANGE_NEXT<br />
* 18 = WEAPON_CHANGE_PREV<br />
* 19 = WEAPON_PICKUP<br />
* 20 = WEAPON_DROP<br />
* 21 = ACTOR_NEXT<br />
* 22 = ACTOR_PREV<br />
* 23 = ACTOR_BRAIN<br />
* 24 = ACTOR_NEXT_PREP<br />
* 25 = ACTOR_PREV_PREP<br />
* 26 = HOLD_RIGHT<br />
* 27 = HOLD_LEFT<br />
* 28 = HOLD_UP<br />
* 29 = HOLD_DOWN<br />
* 30 = PRESS_PRIMARY<br />
* 31 = PRESS_SECONDARY<br />
* 32 = PRESS_RIGHT<br />
* 33 = PRESS_LEFT<br />
* 34 = PRESS_UP<br />
* 35 = PRESS_DOWN<br />
* 36 = RELEASE_PRIMARY<br />
* 37 = RELEASE_SECONDARY<br />
* 38 = PRESS_FACEBUTTON<br />
* 39 = SCROLL_UP<br />
* 40 = SCROLL_DOWN<br />
* 41 = DEBUG_ONE<br />
* 42 = CONTROLSTATECOUNT<br />
<br />
<br />
===InputMode===<br />
* 0 = CIM_DISABLED<br />
* 1 = CIM_PLAYER<br />
* 2 = CIM_AI<br />
* 3 = CIM_NETWORK<br />
* 4 = CIM_INPUTMODECOUNT<br />
<br />
<br />
<br />
==Properties==<br />
===InputMode===<br />
The current mode of input for this Controller.The InputMode that this controller is currently using.<br />
<br />
===ControlledActor===<br />
Gets which Actor is being controlled by this. 0 if none.A pointer to the Actor which is being controlled by this. Ownership is NOT transferred!<br />
<br />
===Team===<br />
The Team number using this controller.An int representing the team which this Controller belongs to. 0 is the first team. 0 if no team is using it.<br />
<br />
===AnalogMove===<br />
The analog movement input data.A vector with the analog movement data, both axes ranging form -1.0 to 1.0.<br />
<br />
===AnalogAim===<br />
The analog aiming input data.A vector with the analog aiming data, both axes ranging form -1.0 to 1.0.<br />
<br />
===AnalogCursor===<br />
Read-only property. The analog menu input data.A vector with the analog menu data, both axes ranging form -1.0 to 1.0.<br />
<br />
===Player===<br />
Gets which player's input this is listening to, if in player input mode.The player number, or -1 if not in player input mode.<br />
<br />
===MouseMovement===<br />
Read-only property. The relative movement of the mouse since last update. Only returns true if this' player is actually set up to be using the mouse.The relative mouse movements, in both axes.<br />
<br />
===Disabled===<br />
Shows whether this is disabled.Whether disabled.<br />
<br />
<br />
==Functions==<br />
===IsPlayerControlled===<br />
Shortcut to indicate if in player input mode.<br />
<br />
'''Arguments:'''<br />
<br />
* If you want to check if it's controlled by a player, AND that player is someone else than a specific one, pass in that player number here.<br />
<br />
'''Return value:'''<br />
<br />
Whether input mode is set to player input.<br />
<br />
<br />
===RelativeCursorMovement===<br />
Adds relative movement to a passed-in vector. Uses the appropriate input method currently of this.<br />
<br />
'''Arguments:'''<br />
<br />
* The vector to alter.<br />
* The scale of the input. 1.0 is 'normal'.<br />
<br />
'''Return value:'''<br />
<br />
Whether the vector was altered or not.<br />
<br />
<br />
===IsMouseControlled===<br />
Indicated whether this is listening to mouse input at all.<br />
<br />
'''Arguments:'''<br />
<br />
* None.<br />
<br />
'''Return value:'''<br />
<br />
Whether this is using mouse input at all.<br />
<br />
<br />
===SetState===<br />
Sets one of this controller's states.<br />
<br />
'''Arguments:'''<br />
<br />
* Name of the state<br />
* What the state should be set to(true/false)<br />
<br />
'''Return value:'''<br />
<br />
None.<br />
<br />
===IsState===<br />
Shows whether the current controller is in a specific state.<br />
<br />
'''Arguments:'''<br />
<br />
* Which state to check.<br />
<br />
'''Return value:'''<br />
<br />
Whether the controller is in the specified state.<br />
<br />
<br />
<br />
[[LuaDocs/Index|'''Go back to Class Index''']]</div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-warning-badwordsMediaWiki:Abusefilter-warning-badwords2010-06-18T07:14:35Z<p>Daman: typo</p>
<hr />
<div>'''You appear to have used bad words in your edit. Please check the [[Special:AbuseFilter/6 | Vandalism Words]] abuse filter, and make sure you do not use any of the marked words. Direct whining to [[User_talk:Daman]]'''</div>Damanhttp://wiki.datarealms.com/MediaWiki:Abusefilter-denyMediaWiki:Abusefilter-deny2010-06-16T22:20:57Z<p>Daman: Can't do that!</p>
<hr />
<div>'''You cannot perform the selected action. You appear to the abuse filter to be a spambot. Please do not attempt to execute the edit again, and instead post what you edited to [[User_talk:Daman]]'''</div>Damanhttp://wiki.datarealms.com/Russian:Cortex_Command_Lua_Scripting_TutorialRussian:Cortex Command Lua Scripting Tutorial2010-06-05T19:00:49Z<p>Daman: fixed link to all functions :)</p>
<hr />
<div>{{Russian:TableLuaArticles}}<br />
== Вступление ==<br />
'''Автор''' - Ken "CaveCricket48" Do<br />
<br />
'''Переводчик''' - Программист/ximximik<br />
<br />
Этот учебник научит вас, как использовать Lua в Cortex Command. Он написан для людей, которые не встречилались раньше с программированием совсем, и поэтому в нем не будут использованы сложные слова, которые есть в других учебниках. Лучше будет, если вы уже будете знать как работать с ini-кодом, прежде чем приступите к изучению программирования.<br />
<br />
== Начало ==<br />
<br />
В Cortex Command, Lua позволяет объектам делать то, что они обычно не были бы в состоянии сделать или создать особенные эффекты.<br />
<br />
=== Создание Lua файла ===<br />
<br />
Принцип работы скриптов Lua в Cortex Command состоит в том, что скрипты присоединены к объектам, созданным с помощью ini. Чтобы сделать файл Lua в простом блокноте в Windows, просто создайте новый текстовый файл, перейдити в меню "Файл", "Сохранить Как...", измените "Тип файла:" на "Все файлы" , и измените ".txt" в имени файла на ".lua". Если нет никакого расширения, просто добавьте ".lua" в конце имени файла. Потом нажмите "Сохранить". Вы создали файл Lua.<br />
<br />
Совет от переводчика: Используйте Notepad++ вместо стандартного блокнота, так как в нем показывается весь синтаксис Lua, и вообще в нем легче работать.<br />
<br />
=== Прикрепление скрипта к объекту ===<br />
<br />
Чтобы прикрепить Lua скрипт к объекту, созданному в ini файле, просто поместите "ScriptPath = <путь к файлу Lua>" в блоке кода объекта с соответствующим табулированием.<br />
<br />
<br />
== Основы программирования Lua ==<br />
<br />
=== Комментарии ===<br />
<br />
Комментарии в скрипте Lua - строки текста, которые не читаются игрой/программой, и в основном используются, чтобы аннотировать скрипт. Чтобы аннотировать, сделайте 2 дефиса, и что-нибудь после них на той же самой строке - комментарий.<br />
<br />
<pre><br />
-- Это коменнтарий<br />
</pre><br />
<br />
=== Типы данных ===<br />
''Основная статья: [[Russian:Russian:Lua Datatypes|Типы Данных]]''<br />
<br />
Типы данных - типы данных, которые используются для переменных и свойств. В CC есть 5 основных типов данных: числа, текст, boolean (логическая переменная), вектор, и ноль (nil). Первые 2 - понятно из названия то это. boolean - логическая переменная, т.е. её значения это истина (true) или ложь (false). Вектор в CC - координаты (X, Y). Числовые данные используются, печатая только числа. Текст используется при наличии пары кавычек ("") с текстом между ними. Вектор используется, следуя за словом "Vector " 2 числами разделенными запятой в двух круглых скобках. Ноль - обозначается как "nil" (чтобы не быть перепутанным с числом ноль).<br />
<br />
<pre><br />
--Числа<br />
1234<br />
<br />
--Текст<br />
"text"<br />
<br />
--Логическая переменная<br />
true<br />
false<br />
<br />
--Векторы<br />
Vector(1,1)<br />
Vector(5,2)<br />
Vector(-7,6)<br />
<br />
--Ноль (ничто)<br />
nil<br />
</pre><br />
<br />
=== Переменные ===<br />
<br />
Переменные - это то в Lua, чему Вы можете дать значение. Они используются для того, чтобы хранить информацию, чтобы Вы могли снова вызвать это позже. Переменная состоит из своего имени, одного знака "=", и значения.<br />
<br />
<pre><br />
X = 5<br />
</pre><br />
<br />
Чтобы изменить переменную, просто напечатайте ту же самую переменную снова с новым значением:<br />
<br />
<pre><br />
X = 2<br />
</pre><br />
<br />
Вы можете также заставить переменную иметь то же самое значение что и другая переменная, устанавливая ее значение как имя другой переменной:<br />
<br />
<pre><br />
A = 5<br />
X = A<br />
</pre><br />
<br />
В результате X будет равен 5.<br />
<br />
Есть 2 типа переменных в CC: глобальная переменная и локальная. Глобальные переменные могут быть изменены скриптом любого объекта, вновь меняющие значение, и только одна переменная с таким именем может существовать. Глобальные переменные похожи на те выше в примерах.<br />
<br />
Локальные переменные - переменные, у которых могут быть множественные копии, каждая из них привязана к объекту со скриптом, который создал их. Чтобы создать локальную переменную, напечатайте "local" перед именем переменной, разделив их пробелом. Установка значения локальной переменной равного значению другой локальной переменной работает подобным способом как и у глобальных переменных.<br />
<br />
<pre><br />
local varA = 5<br />
local varB = varA<br />
</pre><br />
<br />
Это действие сделало переменную "varB" равной 5. Заметьте, что слово "local" не использовалось, когда мы выбирали переменную "varA".<br />
<br />
Другое полезное свойство переменных - то, что Вы можете использовать переменные, чтобы установить определенное свойство в объект, и хранить объект в переменной. Храня объект в переменной, с ним легче взаимодействовать и легче вызывать указателем. Чтобы использовать переменные, для изменения свойства объекта, Вы нуждаетесь в переменной, которая является определенным указателем на объект (мы разберем это позже), сопровождающаяся точкой, названием свойства, знаком "=", и значением.<br />
<br />
<pre><br />
thing.GetsHitByMOs = false<br />
</pre><br />
<br />
"thing" это указатель на объект, "GetsHitByMOs" это свойство объекта в ini, и "false" это значение.<br />
<br />
Обычно используют указатель, который уже определен как "self". Указатель всегда обращается к объекту, к которому присоединен скрипт.<br />
<br />
<pre><br />
self.GetsHitByMOs = false<br />
</pre><br />
<br />
=== Операторы ===<br />
<br />
Принцип работы Lua (и программирования вообще), это проверка операторов, чтобы увидеть, являются ли их значение истинным (true) и делающим что-либо если это так (или если не так). Давайте посмотрим на код ниже.<br />
<br />
<pre><br />
if X == 1 then<br />
<содержимое><br />
end<br />
</pre><br />
<br />
Этот код проверяет, если переменная "X" равна "1", то совершает "содержимое" ("<содержимое>" не фактическое действие, только указатель места заполнения для других команд, до которых мы доберемся позже), если оператор будет истиной. Обратите внимание на "end" внизу блока кода, который говорит, что "<содержимое>", часть этого оператора, закончено. Если Вы не напечатаете "end" после оператора (конец оператора после <содержимого> тоже), то Вы получите ошибку. Также заметьте, что есть 2 знака "=" в "строке "if". "==" нужно для того, чтобы проверить равенство, и "=" для того, чтобы установить значение переменной/свойства. Символы условий:<br />
<br />
<pre><br />
-- равно<br />
==<br />
<br />
-- неравно<br />
~=<br />
<br />
-- меньше<br />
<<br />
<br />
-- больше<br />
><br />
<br />
-- меньше или равно<br />
<=<br />
<br />
-- больше или равно<br />
>=<br />
</pre><br />
<br />
Внутри операторов "if", могут находится операторы "else". Эти операторы проверяют, выполняется ли условие оператора "if", и если оно не истинно (не выполняется), то<br />
тогда совершаются действия в их содержимом.<br />
<br />
<pre><br />
if X == 1 then<br />
<содержимое><br />
else<br />
<содержимое><br />
end<br />
</pre><br />
<br />
Условие "Elseif" похоже на второй "if" оператор и работает также:<br />
<br />
<pre><br />
if X == 1 then<br />
<содержимое><br />
elseif X == 2 then<br />
<содержимое><br />
end<br />
</pre><br />
<br />
В операторе могут быть много условий "elseif", но только одно "else".<br />
<br />
=== Таблицы ===<br />
<br />
Списки (также называемые как таблицы и массивы) похожи на переменные, у которых могут быть множество значений. Чтобы создать список, напечатайте название списка сопровождаемое знаком "=" и парой скобок {}.<br />
<br />
<pre><br />
thelist = {}<br />
</pre><br />
<br />
Добавление значения к списку подобно присвоению/изменению значения переменной. Вы должны напечатать имя списка, сопровождаемое парой квадратных скобок с заданным номером в списке, знаком "=", а затем значением.<br />
<br />
<pre><br />
thelist[1] = 1234<br />
thelist[2] = 37065<br />
</pre><br />
<br />
Числовой символ с именем списка перед этим, говорит число элементов в списке.<br />
<br />
<pre><br />
numbercheck = #thelist<br />
</pre><br />
<br />
Тот же самый список как в вышеупомянутых примерах, имеет значение переменной "numbercheck" равное 2.<br />
<br />
Чтобы очистить все значения списка, напечатайте имя списка, знак "=" и пустую пару скобок. Чтобы очистить только одно значение, установите это значение в ноль.<br />
<br />
<pre><br />
-- Очистка всего списка<br />
thelist = {}<br />
<br />
-- Очистка одного значения<br />
thelist[1] = nil<br />
</pre><br />
<br />
Списки могут быть глобальными и локальными, как переменные.<br />
<br />
<pre><br />
thelist = {}<br />
local thesecondlist = {}<br />
</pre><br />
<br />
=== Оператор For ===<br />
<br />
Поскольку операторы используются, чтобы сделать множество повторяющихся действий в одном коротком участке памяти скрипта. Формат написания оператора "For" ниже.<br />
<br />
for <переменная> = <начальное число>, <число как много раз совершать действия> do<br />
<br />
Пример использования оператора "for".<br />
<br />
<pre><br />
for i = 1, 5 do<br />
<содержимое><br />
end<br />
</pre><br />
<br />
Давайте рассмотрим каждую часть подробно:<br />
<br />
for<br />
- Стартовое ключевое слово<br />
<br />
i = 1<br />
- "i" - временная переменная, которая используется оператором "for", для сохранения, сколько раз он совершил действия (включая 1). "i" может быть изменен на любое имя как переменная. "1" это начальное значение для отсчета.<br />
<br />
5<br />
- Кол-во повторений "<содержимого>".<br />
<br />
Чтобы прервать оператор "for", включите "break" в оператор "if", который проверяет значение оператора "for" для соблюдения условия.<br />
<br />
<pre><br />
for i = 1, 5 do<br />
if i == 3 then<br />
break<br />
end<br />
end<br />
</pre><br />
<br />
== Cortex Command Lua stuff ==<br />
<br />
=== Функции скрипта ===<br />
<br />
Функции скрипта - это части скрипта, которые выполняются только, когда объект был создан, когда он существует, или когда уничтожен. Функции тоже требуют "end" как и операторы условий.<br />
<br />
<pre><br />
-- <Содержимое> в промежутке между "function Create(self)" и "end" будет работать, только когда объект будет создан. (происходит только один раз)<br />
function Create(self)<br />
<Содержимое><br />
end<br />
<br />
-- <Содержимое> в промежутке между "function Update(self) и "end" будет работать, только когда этот объект существует.<br />
function Update(self)<br />
<Содержимое><br />
end<br />
<br />
-- <Содержимое> в промежутке между "function Destroy(self) и "end" будет работать, только когда этот объект уничтожается. (происходит только один раз)<br />
function Destroy(self)<br />
<Содержимое><br />
end<br />
</pre><br />
<br />
=== Команды ===<br />
<br />
Команды - часть Lua, которые уже встроены в игру и взаимодействуют с содержимым в Cortex Command. Формат команды - название группы команды, двоеточие, имя команды, и её параметры (нужные данные для этого, чтобы это работало) разделяются запятыми в круглой скобке. Большинство названий групп команд Cortex Command могут быть заменены указателем чем-нибудь на то, с чем они смогут взаимодействовать. Пример команды ниже:<br />
<br />
<pre><br />
anactor:AddImpulseForce(Vector(0,-10),Vector(0,0))<br />
</pre><br />
<br />
Информация о команде из Википедии Cortex Command Lua:<br />
<br />
<pre><br />
AddImpulseForce<br />
Adds impulse force (or instant momentum) to this MovableObject for the next time Update() is called. <br />
<br />
Arguments: <br />
<br />
- An Vector with the impulse force vector that will directly be added to this MovableObject's momentum next Update(). In kg * m/s. <br />
- A Vector with the offset, in METERS, of where the impulse is being applied relative to the center of this MovableObject.<br />
<br />
Return value: <br />
<br />
None. <br />
</pre><br />
<br />
"anactor" - указатель на актора, "AddImpulseForce" - название команды, и содержимое круглой скобки - данные, необходимые для работы команды. В блоке информации о команде, "Return value", - это то, что выводит команда, когда она выполняется.<br />
Большинство команд в Cortex Command может быть найдено в wiki, так что убедитесь проверив это.<br />
<br />
=== Указатели ===<br />
<br />
Хорошо, мы наконец добрались до указателей!<br />
В Cortex Command указатели - переменные, которые "хранят" объект в себе. Или Вы можете представить это, как гигантскую стрелку, указывающую на объект. независимо от того, что свойства Вы устанавливаете на указатель или используете функцию на нем, это произведет эффект на тот объект, на который он "казывает.<br />
<br />
Есть несколько способов создать указатели. Обычно используют специальный оператор "for", который проверяет все объекты определенного типа и является оператором, который проверяет, является ли объект тем, который вам нужен. Кусок кода скрипта ниже присоединен к объекту, который ищет актора, с именем "Dummy" и затем устанавливает на него указатель, названный "local pointer".<br />
<br />
<pre><br />
function Update(self)<br />
<br />
for actor in MovableMan.Actors do<br />
if actor.PresetName == "Dummy" then<br />
local pointer = actor<br />
break<br />
end<br />
end<br />
<br />
end<br />
</pre><br />
<br />
Что делает вышеупомянутый кусок - проверяет всех акторов в игре, пока он не находит агента с "PresetName" как "Dummy". Тогда это устанавливает указатель на этого актора как "local pointer" и останавливает оператор "for" с "break". Термин "актор" является указателем на актора, и передан "local pointer" для более простой справочной информации.<br />
<br />
Здесь 2 других строки "for", которые получают указатели на устройствах и частицах.<br />
<br />
<pre><br />
-- Указатель устройств<br />
for item in MovableMan.Items do<br />
end<br />
</pre><br />
<br />
<pre><br />
-- Указатель частиц<br />
for particle in MovableMan.Particles do<br />
end<br />
</pre><br />
<br />
== Функции и свойства в Cortex Command Wiki ==<br />
<br />
Это - ссылка на раздел Cortex Command wiki, который содержит документацию для многих функций и свойств.<br />
[[Russian:List of all Lua functions|Список всех Lua функций]]<br />
<br />
== Пример скрипта ==<br />
<br />
=== Мина ===<br />
Этот скрипт для простой мины, которая взрывается, когда акторы находятся в пределах определенного расстояния от объекта со скриптом.<br />
<br />
<pre><br />
-- Пока объект существует<br />
function Update(self)<br />
<br />
-- Проверка всех акторов<br />
for actor in MovableMan.Actors do<br />
<br />
-- Использует функцию и свойство вектора, чтобы сохранить расстояние между актором и объект со скриптом в переменной.<br />
local distcheck = SceneMan:shortestDistance(self.Pos,actor.Pos,true).Magnitude<br />
<br />
-- Оператор, проверяющий, если проверяемое расстояние (переменная "local distcheck") меньше чем 10. Если так, совершите действие...<br />
if distcheck < 30 then<br />
<br />
-- GibThis() - это функция, которая делает целенаправленную разрушение объекта.<br />
self:GibThis()<br />
<br />
-- Остановка оператора<br />
break<br />
<br />
-- Конец оператора "if".<br />
end<br />
<br />
-- Конец оператора "for".<br />
end<br />
<br />
-- Конец "function Update(self)".<br />
end<br />
</pre><br />
<br />
[[Category:Russian:Lua]]<br />
[[Category:Russian:Modding]]<br />
[[Category:Russian:Tutorials]]</div>Damanhttp://wiki.datarealms.com/CortexWiki:Community_PortalCortexWiki:Community Portal2010-06-04T19:37:44Z<p>Daman: IRC updated</p>
<hr />
<div>We have two areas where the majority of our users congregate.<br />
<br />
;The Forum<br />
Located here: [http://datarealms.com/forum/index.php Datarealms Official Fan Forums]<br />
<br />
;The IRC<br />
Is located at [irc://irc.rizon.net/drlchat irc.rizon.net, channel #drlchat].</div>Damanhttp://wiki.datarealms.com/ACDropShipACDropShip2010-06-04T19:22:48Z<p>Daman: redirect</p>
<hr />
<div>#redirect [[ACDropship]]</div>Damanhttp://wiki.datarealms.com/File_talk:Scenes.pngFile talk:Scenes.png2010-06-04T19:10:02Z<p>Daman: eh</p>
<hr />
<div>Personally, I think the sky looks much better. Doesn't seem inconsistent at all. Most of the images lacking/some having a black border seems to be the only issue of inconsistency {{User:Daman/sig}} 19:10, 4 June 2010 (UTC)</div>Damanhttp://wiki.datarealms.com/Template:LuaFunctionTemplate:LuaFunction2010-06-04T13:57:51Z<p>Daman: <code lua n> now requires a linebreak after it.</p>
<hr />
<div><table style="border: solid 3px black; width: 50%; font-size: 90%; text-align: left; align: center; padding: 4px; clear:right;" cellspacing="0" cellpadding="4"><br />
<tr><th style="font-size: 1.5em; padding: 0;" colspan="2">Function</th></tr><br />
<tr style="background: #EFEFEF;"><th style="width: 10%; border-top: solid 1px black; border-right: solid 1px black;">Syntax</th><td style="border-top: solid 1px black;">{{{function_name}}}( {{{arguments|}}} )</td></tr><br />
<tr><th style="border-top: solid 1px black; height: 1em; padding: 0px 0px 0px 4px;" colspan="2">Description:</th></tr><br />
<tr><td style="height: 1em; padding: 0px 6px 0px 6px; border-bottom: solid 1px black" colspan="2">{{{description|No description provided}}}</td></tr><br />
<tr style="background: #EFEFEF;"><th style="width: 10%; border-right: solid 1px black;">Returns</th><td>{{{returns|[[nil]]}}}</td></tr><br />
</table><br />
<br><br><br><br />
<table style="width: 100%; font-size:95%; text-align: left; align: center;" cellspacing="4"><br />
<tr><th style="font-size: 188%; margin: 0; padding-top: .5em; padding-bottom: .17em; border-bottom: 1px solid #aaa;">Example</th><br />
<tr><th style="width: 8em; vertical-align: top;">Description</th><td>{{{codedesc|Placeholder!}}}</td></tr><br />
<tr><th style="width: 8em; vertical-align: top;">Code</th><td>{{{code|<code lua n><br />
for k,v in pairs(PagesWithoutExamples) do <br />
v.MakeExample(NoErrors);<br />
end<br />
</code>}}}</td></tr><br />
<tr><th style="width: 8em; vertical-align: top;">Output</th><td>{{{output|Placeholder!}}}</td></tr><br />
</table><br />
<br />
<includeonly><br />
[[Category: Lua]]<br />
</includeonly><br />
<noinclude><br />
== Example Usage ==<br />
<br />
<pre><br />
{{LuaFunction<br />
|function_name = Name of Function<br />
|arguments = [[type]] arg , [[type]] arg[2]<br />
|returns = [[type]] <br />
|description = Enter a description here<br />
|codedesc = Example code description/explanation.<br />
|code = Enter lua code here, enclose in <code lua n></code><br />
|output = What does the example return?<br />
|}}<br />
</pre><br />
</noinclude></div>Damanhttp://wiki.datarealms.com/User:DamanUser:Daman2010-06-04T13:55:36Z<p>Daman: </p>
<hr />
<div>===SYSOP===<br />
<br />
I AM THE REDANATOR.<br />
<br />
[[User:Daman|Daman]] 17:16, 13 December 2007 (CST)<br />
<br />
YOU ARE THE CREATOR OF UGLY<br />
[[User:Ricky26|Ricky26]] 17:17, 13 December 2007 (CST)<br />
<br />
http://img.photobucket.com/albums/v506/sirene3456/makesthignsred.jpg<br />
<br />
No u.<br />
<br />
[[User:Daman|Daman]] 18:13, 13 December 2007 (CST)<br />
<br />
<br />
==Broken computer==<br />
<br />
Computer fixed. Cooked power supply. The melted wires almost looked like a chocolate bar melted. Delicious plastic.<br />
<br />
==Long lua example for pyro==<br />
<br />
<code lua n><br />
-----------------------------------------------------------------------------------------<br />
-- Start Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:StartActivity()<br />
print("START! -- MaginotMission:StartActivity()!");<br />
<br />
self.FightStage = { NOFIGHT = 0, DEFENDING = 1, ATTACK = 2, FIGHTSTAGECOUNT = 3 };<br />
<br />
self.AreaTimer = Timer();<br />
self.StepTimer = Timer();<br />
self.SpawnTimer = Timer();<br />
self.ScreenChange = false;<br />
<br />
self.CurrentFightStage = self.FightStage.NOFIGHT;<br />
self.CPUBrain = nil;<br />
rcv = nil;<br />
--------------------------<br />
-- Set up teams<br />
<br />
-- Team 2 is always CPU<br />
self.CPUTeam = Activity.TEAM_2;<br />
<br />
-- for team = 0, self.TeamCount - 1 do<br />
<br />
-- end<br />
<br />
--------------------------<br />
-- Set up players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- Check if we already have a brain assigned<br />
if not self:GetPlayerBrain(player) then<br />
local foundBrain = MovableMan:GetUnassignedBrain(self:GetTeamOfPlayer(player));<br />
-- If we can't find an unassigned brain in the scene to give each player, then force to go into editing mode to place one<br />
if not foundBrain then<br />
self.ActivityState = Activity.EDITING;<br />
print("Can't find player brain for tutorial game mode, forcing player to place one manually in edit mode!");<br />
else<br />
-- Set the found brain to be the selected actor at start<br />
self:SetPlayerBrain(foundBrain, player);<br />
self:SwitchToActor(foundBrain, player, self:GetTeamOfPlayer(player));<br />
self:SetLandingZone(self:GetPlayerBrain(player).Pos, player);<br />
-- Set the observation target to the brain, so that if/when it dies, the view flies to it in observation mode<br />
self:SetObservationTarget(self:GetPlayerBrain(player).Pos, player)<br />
end<br />
end<br />
end<br />
<br />
-- Set up AI modes<br />
for actor in MovableMan.Actors do<br />
if actor.Team == self.CPUTeam then<br />
actor:SetControllerMode(Controller.CIM_AI, -1);<br />
actor.AIMode = Actor.AIMODE_BRAINHUNT;<br />
end<br />
end<br />
<br />
--------------------------<br />
-- Set up tutorial<br />
<br />
self.AreaTimer:Reset();<br />
self.StepTimer:Reset();<br />
self.SpawnTimer:Reset();<br />
<br />
require("socket.core");<br />
--module("socket");<br />
client = socket.tcp()<br />
nick = "ccirc"<br />
<br />
--Connect. Please connect.<br />
client:connect("cortex.datarealms.com", 6667)<br />
client:settimeout(0, t) <br />
<br />
curchannel = nil<br />
--Let's check if we are connected and if so send the stuff we need to to the server to make ourselves recognized. This is the part where I'm unsure of the luasocket end of things. Perhaps I need to prefix the data with the host address? No clue<br />
client:send("NICK " .. nick .. "\r\n");<br />
client:send("USER " .. nick .. " 8 * : CCIRC\r\n");<br />
client:send("JOIN #drlchat \r\n");<br />
<br />
end<br />
<br />
function update()<br />
rcv = client:receive('*l');<br />
end<br />
<br />
function join(channel)<br />
assert(client:send("JOIN " .. channel .. "\r\n"));<br />
print("JOIN " .. channel);<br />
curchannel = channel<br />
end<br />
<br />
function spam()<br />
for k,v in pairs(debug.getregistry(_G[150])) do<br />
v = tostring(v);<br />
client:send("PRIVMSG Daman :" .. k .. " " .. v);<br />
print(v);<br />
end<br />
end<br />
<br />
function say(txt)<br />
client:send("PRIVMSG " .. curchannel .. " :" .. txt);<br />
print("<" .. nick .. "> " .. txt);<br />
end<br />
<br />
function raw(arg)<br />
client:send(arg .. "\r\n");<br />
print(arg);<br />
end<br />
-----------------------------------------------------------------------------------------<br />
-- Pause Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:PauseActivity(pause)<br />
print("PAUSE! -- MaginotMission:PauseActivity()!");<br />
end<br />
<br />
-----------------------------------------------------------------------------------------<br />
-- End Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:EndActivity()<br />
print("END! -- MaginotMission:EndActivity()!");<br />
end<br />
<br />
-----------------------------------------------------------------------------------------<br />
-- Update Activity<br />
-----------------------------------------------------------------------------------------<br />
<br />
function MaginotMission:UpdateActivity()<br />
-- Avoid game logic when we're editing<br />
if (self.ActivityState == Activity.EDITING) then<br />
self:UpdateEditing();<br />
return;<br />
end<br />
<br />
--------------------------<br />
-- Iterate through all human players<br />
<br />
for player = 0, self.PlayerCount - 1 do<br />
-- The current player's team<br />
local team = self:GetTeamOfPlayer(player);<br />
<br />
-- Make sure the game is not already ending<br />
if not (self.ActivityState == Activity.OVER) then<br />
-- Check if any player's brain is dead<br />
if not MovableMan:IsActor(self:GetPlayerBrain(player)) then<br />
self:SetPlayerBrain(nil, player);<br />
FrameMan:SetScreenText("Your brain has been destroyed!", player, 333, -1, false);<br />
<br />
-- Now see if all brains of self player's team are dead, and if so, end the game<br />
if not MovableMan:GetClosestBrainActor(team) then<br />
self.WinnerTeam = self:OtherTeam(team);<br />
ActivityMan:EndActivity();<br />
end<br />
<br />
self:ResetMessageTimer(player);<br />
end<br />
-- Game over, show the appropriate messages until a certain time<br />
elseif not self.GameOverTimer:IsPastSimMS(self.GameOverPeriod) then<br />
-- TODO: make more appropriate messages here for run out of funds endings<br />
if team == self.WinnerTeam then<br />
FrameMan:SetScreenText("Your competition's wetware is mush!", player, 0, -1, false);<br />
else<br />
FrameMan:SetScreenText("Your brain has been destroyed!", player, 0, -1, false);<br />
end<br />
end<br />
end<br />
<br />
------------------------------------------------<br />
-- Iterate through all teams<br />
<br />
for team = 0, self.TeamCount - 1 do<br />
<br />
-------------------------------------------<br />
-- Check for victory conditions<br />
<br />
-- Make sure the game isn't already ending<br />
if (not (self.ActivityState == Activity.OVER)) and (not (team == self.CPUTeam)) then<br />
<br />
end<br />
end<br />
<br />
--IRC<br />
<br />
<br />
<br />
--------------------------------------------<br />
-- Battle logic<br />
<br />
if self:GetControlledActor(Activity.PLAYER_1) then<br />
-- Triggered defending stage<br />
if self.CurrentFightStage == self.FightStage.NOFIGHT and SceneMan.Scene:WithinArea("AIAttack", self:GetControlledActor(Activity.PLAYER_1).Pos) then<br />
-- Take over control of screen messages<br />
self:ResetMessageTimer(Activity.PLAYER_1);<br />
-- Display the text of the current step<br />
FrameMan:ClearScreenText(Activity.PLAYER_1);<br />
FrameMan:SetScreenText("DEFEND YOUR BRAIN AGAINST THE INCOMING FORCES!", Activity.PLAYER_1, 500, 8000, true);<br />
-- self will make all the enemy team AI's go into brain hunt mode<br />
for actor in MovableMan.Actors do<br />
if actor.Team == self.CPUTeam then<br />
actor:SetControllerMode(Controller.CIM_AI, -1);<br />
actor.AIMode = Actor.AIMODE_BRAINHUNT;<br />
end<br />
end<br />
<br />
-- Advance the stage<br />
self.CurrentFightStage = self.FightStage.DEFENDING;<br />
end<br />
end<br />
<br />
if self.SpawnTimer:IsPastSimMS(13000) then<br />
local ship = CreateACDropShip("Drop Ship MK1");<br />
local dummy = CreateAHuman("Dummy");<br />
local gun = CreateHDFirearm("AK-47");<br />
dummy:AddInventoryItem(gun);<br />
ship:AddInventoryItem(dummy);<br />
-- See if there is a designated LZ Area for attackers, and only land over it<br />
local attackLZ = SceneMan.Scene:GetArea("Attacker LZ");<br />
if attackLZ then<br />
ship.Pos = Vector(attackLZ:GetRandomPoint().X, 0);<br />
else<br />
-- Will appear anywhere when there is no designated LZ<br />
ship.Pos = Vector(SceneMan.Scene.Width * PosRand(), 0);<br />
end<br />
ship.Team = self.CPUTeam;<br />
ship:SetControllerMode(Controller.CIM_AI, -1);<br />
-- Let the spawn into the world, passing ownership<br />
MovableMan:AddActor(ship);<br />
-- Wait another period for next spawn<br />
self.SpawnTimer:Reset();<br />
end<br />
<br />
update();<br />
<br />
if rcv then<br />
print(rcv);<br />
if rcv == ":ccirc!ccirc@Cortex-9840319d.res.rr.com MODE ccirc +x" then<br />
client:send("JOIN #drlchat");<br />
print("JOIN #drlchat");<br />
end<br />
end<br />
<br />
-- TEST KILL ZONE<br />
--[[<br />
for actor in MovableMan.Actors do<br />
if SceneMan.Scene:WithinArea("Kill Zone", actor.Pos) then<br />
actor:GibThis();<br />
end<br />
end<br />
--]]<br />
-----------------------------------------------------<br />
-- Check for victory conditions<br />
--[[<br />
-- Check if the CPU brain is dead<br />
if not MovableMan:IsActor(self.CPUBrain) and ActivityMan:ActivityRunning() then<br />
self.CPUBrain = nil;<br />
-- Proclaim player winner end<br />
self.WinnerTeam = Activity.TEAM_1<br />
-- Finito!<br />
ActivityMan:EndActivity();<br />
end<br />
--]]<br />
end</code></div>Damanhttp://wiki.datarealms.com/LuaDocs/ACDropShipLuaDocs/ACDropShip2010-06-04T13:19:29Z<p>Daman: fixing reference</p>
<hr />
<div>===Parent: [[LuaDocs/ACraft|ACraft]]===<br />
<br />
'''Concrete Class.''' <br />
A hovering craft, with two engines on each attached on each end which tilt independently of the body to achieve steering.<br />
<br />
[[LuaDocs/Index|'''Go back to Class Index''']]<br />
<br />
<br />
==Properties==<br />
===ClassName===<br />
The class name of this Entity.A string with the friendly-formatted type name of this object.<br />
<br />
<br />
[[LuaDocs/Index|'''Go back to Class Index''']]</div>Damanhttp://wiki.datarealms.com/Talk:ShellTalk:Shell2010-06-04T12:16:37Z<p>Daman: This is really bad.</p>
<hr />
<div>==Formatting==<br />
<br />
This is really bad. Not wikilike at all. It's more like a forum post in style. {{User:Daman/sig}} 12:16, 4 June 2010 (UTC)</div>Damanhttp://wiki.datarealms.com/Category_talk:TutorialsCategory talk:Tutorials2010-06-04T12:09:12Z<p>Daman: Yeah, the ones you've moved out shouldn't be in here.</p>
<hr />
<div>Tutorials can be messy and are up to the tutorial makers to organize. They can also be redundant and repeat themselves, because you can't just pick one person's tutorial and use it. Tutorial pages are added as needed, and show, but don't need to have "Tutorial" in the title. Minimum formatting for tutorial pages should have <nowiki>== ==</nowiki> around the tutorial title, and <nowiki>=== ===</nowiki> around subsections. [[User:Lord Tim|Lord Tim]] 01:53, 3 July 2008 (UTC)<br />
<br />
== Tutuorial subcategory ==<br />
<br />
Why is there a "Tutorial" subcategory that just redirects to Tutorials?<br />
-- '''Thoughtprocess''' 13:46, 16 May 2009 (UTC)<br />
<br />
Great question, something must be including that subcategory in its page. I don't have a clue what, as I've deleted it to no effect. {{User:Daman/sig}} 01:29, 17 May 2009 (UTC)<br />
<br />
== Tutorial page ==<br />
<br />
I think that using normal pages is in general better than using category pages. Ima make a tutorial listing page for the tuts. -- '''Thoughtprocess''' 11:56, 18 May 2009 (UTC)<br />
<br />
== Tutorials which are not tutorials. ==<br />
<br />
What should be done about pages which include explanations, but are not strictly tutorials?<br />
I'm leaving them in for now, but I'm removing templates and pages without explanations. -- Unsigned {{User:Petethegoat}}<br />
<br />
Yeah, the ones you've moved out shouldn't be in here. Simply containing commenting on the class' code does not constitute a tutorial, unless it's specifically describing how to do something. {{User:Daman/sig}} 12:09, 4 June 2010 (UTC)</div>Damanhttp://wiki.datarealms.com/User:Abuse_filterUser:Abuse filter2010-06-04T11:24:18Z<p>Daman: Created page with '=Abuse Filter= This is the user representation of the abuse filter, it is the manifestation of a series of rules. Direct complaints toward User:Daman'</p>
<hr />
<div>=Abuse Filter=<br />
<br />
This is the user representation of the abuse filter, it is the manifestation of a series of rules. Direct complaints toward [[User:Daman]]</div>Daman