Pull Requests - Person8880/Shine GitHub Wiki
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.
Style guide
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 naming
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."
If pyramids
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
Spacing
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
Function usage
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() )
String usage
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 ) )