Welcome to Revival Servers!

Welcome to Revival. The forums is an important aspect of joining the Community. This is where you can meet other community members, apply for staff, provide suggestions and participate in many other activities.

Tood's Development Application

Status
Not open for further replies.

Tood

Developer.
Staff Blacklisted
Networking Blacklisted
Joined
Jul 15, 2019
Messages
38
Points
8
Age
27
{EDIT}: I can't edit the title but forgot to put the date so 16/07/2019 (UK)

Name (Steam Name):
Narwhalsisbae

Tell us about yourself:

Well hello there! My name is Andrew, known as Tood within the Garry's Mod gaming community, I am 23 years of age and I reside within the rather dull city of Glasgow, Scotland. By day I am a barbershop owner, by night I am a mere Freelance Developer.
I spend hours and hours each night studying the gmod wiki, extracting addons and getting a feel of different methods of content creation and this has got me to where I am today, I am not the best at Lua and Glua but I'm certainly not the worst.
I am confident enough to say that I am happy at the point where I am today.

What role are you taking? (Programmer, Server Configurator, Mapper etc.): Server Configurator or if you think I am better suited to another position then I respect your judgment.

Please describe your experience in the field relevant to the role you're applying for:

Project Nightfall | CWRP - Head Developer.
-------------------------------------------------------------

When I joined the Project Nightfall Development team, I started off as a simple animator working with a very popular product within the Garry's Mod SWRP community, I simply made a few custom animations and I was invited into the team, I then pushed my way through the ranks (Junior Developer - Server Developer - Senior Developer - Head Developer), once I reached the rank of Head Developer I then proceeded to raise my very own Development team and after my leave of the community I am happy with the work we did within.
Work involved within this community: Custom SWEPs, Custom SENTs, Custom SNPCs, simple jobs, categories, worked very precisely with custom NPC stores and more.

Protocol Zero Servers | CWRP & Jedi vs Sith - Director of Development.
----------------------------------------------------------------

During my time as Director of Development for PZS, I was in charge of overseeing and approving all Development work before pushing it to the server, I led yet another team of very talented Developers. We led the community through 2 servers of some decent development work. We worked with a custom capture point script, a custom teleporting system, simple jobs and categories, this server was mainly premade addons to which we simply just worked with the configs provided making improvements to secure playerbase enjoyment.

Supreme Servers | CWRP - Developer
---------------------------------------------------------------

The work involved in this server was the most basic work I've had to do within Garry's mod, the work required is simply jobs and categories, configuring an NPC shop, configuring and improving minor scripts to improve gameplay within the server and creating a few derma panels for a few new ULX commands.

Now to make this even longer, let's go over some examples of my code.

Let's make a nice SWEP that spawns in...a D77H-TCI Pelican

Code:
SWEP.PrintName = "Tood's Pelican SWEP" -- This is the name that appears in the weapons TAB in the Q menu.
SWEP.Author = "The Toodster" -- Who mades this SWEP?
SWEP.Contact = "Discord: The Toodster#0001" -- Add in your contact information so whoever uses this SWEP can get in touch if they have any issues.

SWEP.Instructions = "Click your left mouse button to spawn the designated vehicle, make sure to aim at a fair distance." -- Simply explains how to use the SWEP.

SWEP.Spawnable = true -- Do we want this SWEP to spawn in somewhere?

SWEP.Category = "Tood's SWEPs" -- This is optional, it simply gives your SWEP it's own category, you can just leave this blank and your SWEP will appear in "Other"

SWEP.AdminOnly = false -- Should we allow anyone who has this SWEP spawn it in? Or just admin.

SWEP.Primary.ClipSize = -1 -- Primary ammo such as 12/400, the 12 is the primary ammo, set this to -1 if you don't want any ammo limit. Unlimited ammo is the best am I right?
SWEP.Primary.DefaultClip = -1 -- Clip size you spawn in with, so as we mentioned 12 above, if default is set to 50 then you will spawn with more than the primary clip size.
SWEP.Primary.Automatic = true -- Want this SWEP to fire like a machine gun? set to true, or if you would like a pistol type SWEP with a delay then set to false.
SWEP.Primary.Ammo = "none" -- Ammo type, Machine gun ammo, pistol ammo, SMG etc.
SWEP.Weight = 5 -- Default is 5 for gmod. It simply allows a faster switch time from another weapon.
SWEP.AutoSwitchTo = false -- When you run out of ammo (if you allowed ammo) should you keep this weapon active? Or would you like to switch to a weapon you have?
SWEP.AutoSwitchFrom = false -- Will this weapon be allowed to switch to another weapon when ammo is non existent?
SWEP.Slot = 1 -- Loadout rows 1-6 by default Gmod CHUD, pick a number.
SWEP.SlotPos = 2 -- Whatever number you chose above, what slot you want this to appear in said rows column.
SWEP.DrawAmmo = false -- Do you want the default Gmod HUD to appear with this SWEPs ammo count? (If you allowed ammo)
SWEP.DrawCrosshair = true -- Would you like a little aid with a small crosshair in the middle of your screen wherever you look?

SWEP.ViewModelFOV = 54 -- View Model FOV is simply how close or far away you hold the SWEP. 1 = very long distance away from your body, recommended you keep this at default 54.
SWEP.ViewModel = "models/weapons/c_toolgun.mdl" -- A little tricky for anyone not knowledgable on SWEPs, this is the model that YOU (client) see in 1st & 3rd person.
SWEP.UseHands     = true -- In 1st person would you like just a casual floating SWEP or would you actually like to be holding the SWEP?
SWEP.SetHoldType = "pistol" -- When you switch to 3rd person this determines what you see when holding it, want to hold it like a shotgun? grenade? or just a pistol? Take your pick.
SWEP.WorldModel = "models/weapons/w_toolgun.mdl" -- This is what WE see on the server, you do not see this on yourself, it's what other players see you holding.


function SWEP:PrimaryAttack() -- Let's get down to the code shall we. This function here is simply opened to tell the server and client that the player is using this SWEP.

    if (CLIENT) then return end -- If the client is actually spawning this in then...follow below.
    local ent = ents.Create("halov_pelican") -- Creating a local variable, in this case ent is just a nick name, instead of typing out ents.Create() each time, just use your nick name :).
    if ( not IsValid(ent)) then return end -- If the item you are spawning in using the SWEP doesn't exist on the client and/or server then uh oh the code reads no furhter.
    ent:SetModel("models/helios/pelican/pelican_landed.mdl") -- But the entity is valid so here is the mdl we want to see when the entity is spawned, Q menu, spawnlists, addons then right-click and copy prop variant.
    ent:SetPos(self.Owner:EyePos() + (self.Owner:GetAimVector() * 540)) -- This is simply where the SWEP entity spawns in, so aim your SWEP down to the ground and a little upwards and spawn.
    ent:SetAngles(self.Owner:EyeAngles()) -- Check for where the Owner/client/YOU is looking. What direction, at your feet? In the sky? or just a few yards away.
    ent:Spawn() -- If everything in this code works nicely then spawn the entity in please.
    local phys = ent:GetPhysicsObject() -- We just need to let the server know that the entity is indeed a physics object but ents.Create("republic_speeder") comes with it's own physics so we don't need to bother with the physics code.

    if (not IsValid(phys)) then
        ent:Remove() -- If the entity does not have the correct physics and no physics have been entered anywhere in this code then uh oh take it away!!

        return -- This simply finishes the statement, but DOES NOT END IT, where we started function SWEP:PrimaryAttack().
    end -- This ends the if statement we mentioned above, if ( not IsValid(ent))

    self:SetNextPrimaryFire( CurTime() + 10 ) -- How long before the client can fire the SWEP again, arithmetic value + goes by seconds in this case.

    cleanup.Add(self.Owner, "props", ent) -- Can this entity spawned be cleanup using FAdmin /cleanup or the admin cleanup through the Q menu?
    undo.Create("VehicleSpawn") -- Can the player undo a vehicle that was spawned in? Yes, but how does it know WHAT vehicle? Check below.
    undo.AddEntity(ent) -- This simply allows the entity to be know as the vehicle mentioned above and it can be cleared by cleanup and undone by the client.
    undo.SetPlayer(self.Owner) -- This is a MUST, set this to the Owner which is who spawns it, if not then the client CANNOT undo it.
    undo.Finish() -- Finish the undo when pressing Z, nothing else happens really.
end -- This simply ends the function we created above. functon SWEP:PrimaryAttack()

function SWEP:SecondaryAttack() -- Do we have a secondary attack such as launch a grenade out of this SWEP? Nah, just end the function.
end -- This simply ends the blank function SWEP:SecondaryAttack().

-- And now you have completed your SWEP. Now there is a LOT more to SWEPs, some are easier and some are much more complex.
-- SWEPs = Scripted Weapons. So like a P90 if used on the server comes with many more functions, local variables and more if you were doing a fully functional weapon SWEP.
-- What if the weapon needs specific bone positions to work correctly? You will then need to add in the necessary bones to the SWEP manually.
-- What if the SWEP comes with a scope? or an Iron Sight? Or even just a secondary fire option?
-- These are just a few other things out of probably 200 other things you can do with SWEPs, it just takes time and patience.

Or maybe a straight easy NPC (Pre-Made assets, NPC code done by myself and NPC animations added by myself)

Code:
player_manager.AddValidModel("Sci-Fi Citizen 03", "models/lt_c/sci_fi/humans/male_03.mdl") -- Simply forces this model to be registered on the server.

local Category = "Toods NPCs V1" -- Name of the category within the NPC TAB in the Q menu

local NPC = { Name = "Admiral Ally", -- What would you like this NPC to be named?
            Class = "npc_citizen", -- Citizen is an allied class, there's a few different classes.
            Weapons = { "weapon_pistol" }, -- Which weapon do you want this NPC to spawn with?
            Model = "models/lt_c/sci_fi/humans/male_03.mdl", -- Copy the mdl from the Q menu, spawnlists, addons. ALWAYS MATCH IT WITH player_manager.AddValidModel()
            Health = "400", -- How much HP will this NPC spawn with?
            KeyValues = { citizentype = 4 }, -- Not even going to act like I know what this is, I am not the most experienced with SDK -_-
            Category = Category    } -- Registers the code above within "Tood's NPCs V1"
        
list.Set( "NPC", "npc_guard_ally", NPC ) -- This registers the code as NPC, "npc_guard_ally" is simply what you would get if you done Q menu, NPCs, right click the NPC and paste, NPC just registers the full NPC for use.

local Category = "Toods NPCs V1" -- Name of category.

local NPC = { Name = "Admiral Hostile", -- Name of NPC.
            Class = "npc_combine_s", -- npc_combine_s is the most aggresive and smart variation, you also have npc_combine which isn't quite as smart.
            Weapons = { "weapon_pistol" }, -- Weapon the NPC spawns with.
            Model = "models/lt_c/sci_fi/humans/male_03.mdl", -- mdl from the Q menu, spawnlists, addons.
            Health = "400", -- HP the NPC spawns with.
            Squadename = "Navy", -- Give it a squad, when scripted into the same squad they stick together in-game, easiest way I can explain it.
            Numgrenades = "4", -- Should this NPC have grenades? Just take away this entire line if not. It's Optional.
            Category = Category    } -- Registers the code above within "Tood's NPCs V1".
        
list.Set( "NPC", "npc_guard_hostile", NPC ) -- Save as above, npc_guard_hostile is what you get when yoou go into the Q menu, NPCs and right click the NPC.

When making an NPC, there's an extra few steps you need to take, extract the gma file, open the namedfolder/models/name/name/filenamehere.mdl and decompile the mdl file using a program such as Crowbar, once done simply edit the qc file with a programming editor, Notepad++, VSC, Sublime 2 etc and remove animations that look like.

$includemodel "m_anm.mdl"
$includemodel "m_shd.mdl"
$includemodel "m_gst.mdl"
$includemodel "m_pst.mdl"
Then within the gmod wiki there will be a list of NPC variant animations, metro police, human male, human female, combine etc, just replace the animations above with whatever of the NPC animations in the list. Compile the qc file and move all the compiled files into your models/name/name/ folder then into your addon folder then boot up gmod and you are done. Some playermodels may not work because modellers only make a pm_name_name_name.mdl variant meaning it's skeleton bone structure made in Blender is only compatible as a playermode, if the model is NPC friendly then in the models/ folder you will find an npc_name_name.mdl variant and that's the one you want to change.
Here is a small clip of my own NPC.

And to finish off how about a simple healing entity?

cl_init
Code:
include("shared.lua") -- You must include shared.lua so the function below knows what model it is actually drawing.

function ENT:Draw() -- This function calls on a model to draw, refer to shared.lua for the mdl.

    self:DrawModel() -- This simply tells the gmod engine "Hey there's a model of an entity that I am spawning in, make sure I can see it"

end -- This just end the function.

shared.lua
Code:
ENT.Type = "anim" -- Animated entity as it is actually providing a purpose that affects you and other players.
ENT.Base = "base_gmodentity" -- Well we don't want the entity to do anything except just stay still and do what it's told.

ENT.PrintName = "Healing Entity" -- The name of the entity in the Q menu, entities.

ENT.Author = "The Toodster" -- Who made this entity?
ENT.Contact = "The Toodster#0001" -- Contact me here if you have any issues with my entity, it's very easy so you shouldn't have any issues with it.

ENT.Instructions = "Hold E and watch your HP rise!" -- How do I use this?

ENT.Category = "Health System" -- What category will this entity be in?

ENT.Spawnable = true -- Can we spawn this?
ENT.AdminOnly = false -- Do we want it to be admin only?
ENT.DisableDuplicator = true -- Do we want players or staff to right click using duplicator and paste it?

init.lua
Code:
AddCSLuaFile("cl_init.lua") -- Add the clientside lua file. otherwise DrawModel won't work.
AddCSLuaFile("shared.lua") -- This is so you can see the name and category.

include("shared.lua") -- Includes the shared.lua incase you added like an explosion function in if someone shoots this entity.

function ENT:Initialize() -- This begins running the entity code.

    self:SetModel("models/props_combine/health_charger001.mdl") -- What do we want the healing station to look like?
    self:PhysicsInit(SOLID_VPHYSICS) -- This simply uses the physics that are already premade in the mdl.
    self:SetMoveType(MOVETYPE_VPHYSICS) -- This uses the movement physices that are already premade in the mdl.
    self:SetSolid(SOLID_VPHYSICS) -- You want to make sure this isn't nocollided so set it to it's orginal physics which aren't nocollided.
 
    local phys = self:GetPhysicsObject() -- We need to let the server know that this does indeed have physics, phys is just a nickname instead of typing out self:GetPhysicsObject().
 
    if phys:IsValid() then -- If this does indeed have it's own valid physics then follow below.
 
        phys:Wake() -- We need to wake the model so it can actually be a prop and/or entity without it providing no purpose.
    
    end -- This ends the if statement above.

end -- This ends the function.

    local canheal = 1 -- canheal is just another nickname but this time we actually need a nickname for it to work. Follow below.

function ENT:Use( a, c ) -- This function here either calls on a +USE function, the activator, which is the person using the entity or the caller...which is just the same as activator.

    if IsValid( a ) and a:IsPlayer() and canheal == 1 then -- If the activator is a valid player and if the local variable is equal to an array of 1 then follow below.

        if a:Health() >= a:GetMaxHealth() then return end -- If the activators health is greater than or equal to their max health then this entity just does nothing for them.
        a:SetHealth(a:Health() + 1) -- If the activators health is below full health then when holding their +USE key on this will heal them.
        canheal = 0 -- Once at max health this catches it and stops it's purpose because there's nothing else the entity can do because the activator is at full health.
        timer.Simple(0.3, function() canheal = 1 end) -- This creates a rather simple timer that calls on (a:Health() + 1) and heals the activator 1 HP every 0.3 seconds.
        -- Once finished healing to max health the timer will stop the original local variable of canheal = 1 and switch it to canheal = 0.
 
    end -- Ends the if statement above.
end -- Ends the entire function code listed from function ENT:Use( a, c )



Why do you want to become a developer for Revival? (One Paragraph Min.):
The reason I want to become a Developer for Revival is because an old friend from a different community before he came here has recommended this community numerous times and cannot express how amazing his time and others time has been on this server, I haven't seen someone this happy for a long time on Garry's Mod and after meeting a few different members on the Teamspeak I have come to realize that this community is actually really welcoming and friendly, then I saw that the Revival team were urgently looking for Developers and figured that there was no need to let my experience go to waste and maybe actually help out a community who really needs the help. I have seen a lot of communities rise and fall and without a Developer and/or Development team then communities don't tend to last so I can understand from a personal point of view that when a Developer needs other Developers aid then never let it go past, offer any aid possible because motivation is a Developers key value and without motivation Developers will not last within communities. I want to offer whatever help I can give and I want to continue to see this very popular community thrive like it currently is.

What can you bring to the development team?:
I can offer experience.
I can offer knowledge.
I can offer dedication.
I can offer loyalty.
I have been a Developer, Head Developer and even Director of Development, I am very close within multiple Development discords and I am learning unique and interesting methods that have the same effect and outcome as a casual method but it has a very unique execution, The Development industry is changing and we are learning everyday, to which I can say that I am not ready to stop learning. I can't let this knowledge go to waste and if I can bring this experience to the table and even learn how the Revival Development team work would be an extra bonus. I love helping out communities and Revival is no different.

Any extra information please add it here:

I thank you for your time to read this over.
I deeply apologize for the story with all the code and information, I tend to get a little carried away when describing how certain things work.

Here are a few clips executing the code I have shown above.
https://streamable.com/djx52 - Tood's Pelican SWEP.
https://streamable.com/qlu79 - Tood's Custom NPCs V1. A friendly and hostile variant.
https://streamable.com/8bygw - Tood's Health System.

I respect whatever decision comes to my application.
If there are any questions from anyone then please do not hesitate to contact me on discord at
"The Toodster#0001"
Or drop me a message here on the forums!
 
Last edited:

Malice

Graphics Team // Ex-General Manager and Developer
Graphic's Team
Joined
May 28, 2018
Messages
101
Points
28
+1 Your work looks solid and so does your previous projects
I was wondering what application you were going to post after going right for 10 posts when you joined
You definitely fill a hole that we need. You could probably get an interview with @DECO6
 

Tood

Developer.
Staff Blacklisted
Networking Blacklisted
Joined
Jul 15, 2019
Messages
38
Points
8
Age
27
+1 Your work looks solid and so does your previous projects
I was wondering what application you were going to post after going right for 10 posts when you joined
You definitely fill a hole that we need. You could probably get an interview with @DECO6

Thank you, I appreciate the feedback!
 

William

President
President
Years of Service
Joined
Jan 17, 2017
Messages
439
Points
93
Thank you for your application. We will be reviewing this.
 

Malice

Graphics Team // Ex-General Manager and Developer
Graphic's Team
Joined
May 28, 2018
Messages
101
Points
28
I will be contacting you for an interview. Thanks
Locked and moved
 
Status
Not open for further replies.
Top