-
Notifications
You must be signed in to change notification settings - Fork 23
Pull Requests
Feel free to submit pull requests with features you want added to the mod. However, please try to follow the code style in the mod as it'll make it easier for me to accept and merge in.
Indentation should be with tabs, not spaces. Line endings are in the Windows format, make sure you do not change them.
Also, please use spaces after opening brackets, after commas, before closing brackets etc.
-- Avoid this
local Value=math.min(10,15)
-- Do this instead
local Value = math.min( 10, 15 )
Variable names should use camel case starting with an upper case letter. The only exception is numeric for loops, which should be a single lowercase letter starting with i. For example:
Bad:
local variableName = "Hi"
local variablename = "Hi"
local variable_name = "Hi"
function Plugin:eatCake()
end
Plugin.nextCake = 0
for key, value in pairs( Table ) do
end
for Index = 1, #Table do
end
Good:
local VariableName = "Hi"
function Plugin:EatCake()
end
Plugin.NextCake = 0
for Key, Value in pairs( Table ) do
end
for i = 1, #Table do
end
Also, try to avoid massively long variable names, e.g
--No
local DescriptionOfTheMeaningOfLife = "This is a description."
--Yes
local Description = "This is a description."
Please avoid massive if statement pyramids unless there is no way around it. For example:
--Avoid this
function Bleh( Stuff, Cake, Cookie )
if Stuff then
if Cake then
if Cookie then
print( "Yay." )
end
end
end
end
--Instead do this
function Bleh( Stuff, Cake, Cookie )
if not Stuff or not Cake or not Cookie then return end
print( "Yay." )
end
Avoid cramming code into the minimum amount of lines, this makes it hard to read.
This is bad:
local NextCake = 0
local function DoStuff()
local Time = Shared.GetTime()
if Time < NextCake then return end
NextCake = Time + 5
print( "Here, have some cake." )
end
This is better:
local NextCake = 0
local function DoStuff()
local Time = Shared.GetTime()
if Time < NextCake then return end
NextCake = Time + 5
print( "Here, have some cake." )
end
Where possible, please use the functions included with the mod rather than making your own or using NS2 functions. For example, if you want a list of all players, use Shine.GetAllPlayers()
, or if you want to convert a time to a nicely formatted string, use string.TimeToString()
.
For things that require precise timing, use the timer library. For everything included with Shine to aid developing, see here.
Also, where functions are going to be used often, localise the functions instead of calling them from the global scope. For example:
local Notify = Shared.Message
local SharedTime = Shared.GetTime
local StringFormat = string.format
Notify( StringFormat( "The shared time is: %s.", SharedTime() )
Please avoid using the concatenate operator ..
excessively. It is messy and creates garbage data that the string.format
and table.concat
functions do not.
Bad:
Shared.Message( "The shared time is: "..Shared.GetTime().."\n"..debug.traceback() )
Good:
local Notify = Shared.Message
local StringFormat = string.format
local Time = Shared.GetTime()
local Traceback = debug.traceback()
Notify( StringFormat( "The shared time is: %s.\n%s.", Time, Traceback ) )