Jump to content

PuffyPanda Junior Developer Application


PuffyPanda  

10 members have voted

  1. 1. Poll

    • Positive Support
      11
    • Negative Support
      0


Recommended Posts

  • Steam Name:
    [IG]Dripping wet
  • SteamID32:
    STEAM_0:0:83434927
  • Steam Profile Link:
  • Age?:
    24
  • What Part of the community are you from?
    Imperial RP Server
  • Programming languages you know (etc. LUA, CPP, C#, PYTHON - MUST KNOW ONE LANGUAGE):
    LUA, JS, C#, a bit of python. I have had experience in lua before as I have modded for the binding of isaac in the past and I have had several semesters in university working with c# so i am familiar game programming principles.
  • What type of content do you want to create for our server?
    QOL of life changes and new weapons. The QOL changes made me want to develop for the server in the first place as I saw opportunity to automate some of the more tedious actions in the game and creating new weapons / altering existing is a lot of fun.
  • Have you made any other scripts or content we should know about?
    for gmod specifically I have created two dueling related commands and altered the lightsabre with a new ability

    command 1.) 1v1 Sith dueling

    being in RG I found asking a mod to set health anytime I wanted to duel to be rather annoying; both for myself and the mod and the alternative of shooting one another until health is about the same also proved to rather tedious. So I made a sith specific command that allows any member of sith to challenge another member of sith to a duel. Should the duel be accepted both parties HP will be automatically set

    command 2.) sith tournament

    a sith higher up (Grand inquistor, darth vader etc) can start a tournament. Every valid sith on the server will get a notification saying the tournament will start in the chosen time. During that time any sith can opt in to go in on the tournament and once the timer is up or the person who started the tournament decided to start early, everyone who opted in will automatically have their hp set

    Force paralyze (if DT get tasers SG can have one too)

    being a member of the RG has taught me a lot about just how terrible it feels to try and capture someone without a taser. It is the most horrible feeling in the world spending 45 minutes trying to capture cad bane for the 50th time that night and it just tiresome and tedious. So I made force paralyze. with a very big force tax you can very temporarily keep someone in place. However the person performing the force paralyze is unable to move for the duration of the skill (essentially both parties are stuck in place) this emphasizes RG/SG working together as a member of SG can lock someone down whilst a member of RG can cuff them.

    link to the video showing off the stun. (the sith lightning is just a placeholder sound effect) Video of force paralyze
  • Link to my very basic derma / networking example (was told I just need to show I can do it. If more is needed let me know) video

  • Naturally these scripts / modifications I have made are very personalized to my current experiences in gmod but I am more than happy to hear suggestions on other things people would like automated / made
  • EDIT:

Just occurred to me I should have included my scripts so you can determine my level of programming skill (not that the scripts are that difficult or anything) So I have included them in this post. 

 

 

 

  • Do you accept the Terms & Conditions of this application?
    Yes

sith_tourney.lua

sith_challenge.lua

Edited by PuffyPanda
  • Agree 5
Link to post
Share on other sites

+1 Seems experienced and has some interesting ideas. Nice to see an example that's different as well. If you include a brief example of derma and the net library this will be a great app.

Edited by HenDoge
Link to post
Share on other sites
1 hour ago, HenDoge said:

+1 Seems experienced and has some interesting ideas. Nice to see an example that's different as well. If you include a brief example of derma and the net library this will be a great app.

Thanks for the info. I am uploading my (very very basic) derma, networking example to youtube now and will link in the post. 

  • Agree 1
Link to post
Share on other sites

+1 

Trustworthy

Great ideas

Great application

Overall in my opinion the more developers we have more the fun stuff they can create for the server.

Link to post
Share on other sites
16 hours ago, HenDoge said:

+1 Seems experienced and has some interesting ideas. Nice to see an example that's different as well. If you include a brief example of derma and the net library this will be a great app.

This guy is smart

+1 

Link to post
Share on other sites
  • 2 weeks later...
  • 5 weeks later...

Some suggestions for your code. Instead of doing a bunch of nested "if" statements that don't have "else" or "elseif", you should return makes it more readable and a little itty bitty quicker.

hook.Add("PlayerSay", "SomeCoolCommand", function(ply, txt)
	if text ~= "!gamer" then return end
    if not ply:IsSuperAdmin() then return end
    	--[[
    	Some gamer code here
    ]]
end)

-- Better yet.
hook.Add("PlayerSay", "SomeCoolCommand", function(ply, txt)
	if text ~= "!gamer" or not ply:IsSuperAdmin() then return end
	--[[
    	Some gamer code here
    ]]
end)

It would also be more efficient to combine all the hooks instead of having 3 separate ones. Hooks aren't as efficient as they could be.

 

Some good standards are here: https://www.gmodstore.com/help/script-submissions/topics/developer-guidelines-for-addons-must-read

Link to post
Share on other sites
1 minute ago, Eclipse said:

Some suggestions for your code. Instead of doing a bunch of nested "if" statements that don't have "else" or "elseif", you should return makes it more readable and a little itty bitty quicker.


hook.Add("PlayerSay", "SomeCoolCommand", function(ply, txt)
	if text ~= "!gamer" then return end
    if not ply:IsSuperAdmin() then return end
    	--[[
    	Some gamer code here
    ]]
end)

-- Better yet.
hook.Add("PlayerSay", "SomeCoolCommand", function(ply, txt)
	if text ~= "!gamer" or not ply:IsSuperAdmin() then return end
	--[[
    	Some gamer code here
    ]]
end)

It would also be more efficient to combine all the hooks instead of having 3 separate ones. Hooks aren't as efficient as they could be.

 

Some good standards are here: https://www.gmodstore.com/help/script-submissions/topics/developer-guidelines-for-addons-must-read

Hi eclipse. Thanks for the good suggestions. When it comes to if statements without an else they are generally multi line. When applicaable I like to use single line if statements such as for my modifications for the saber checking privileges . However I really like the idea of combing hooks and using functions to process a command where necessary. I will modfiy my sith challenge and sith tourney scripts and resubmit them to the application. 

 

Also with regards overall efficiency it is always at the top of my mind and the more I learn about gmod the better I will become at it. Any other overall suggestions for general efficiency ?

Link to post
Share on other sites
Just now, PuffyPanda said:

When it comes to if statements without an else they are generally multi line.

I didn't phrase it right, sorry. If it a single check, then it shouldn't be multiline.

Here is an example of a hook that I made that has multiple checks.
In this case isFake is a unique variable for the server it was made for, and the last argument for hook.Add is a ULib thing for order of hooks.

hook.Add("EntityFireBullets", "WarnShotRadius", function(ply, _, isFake)
	if isFake then return end
	--print(ply, ply:GetInfo("Baielywarnshot"), ply.WarnCooldown, ply.MsgWarnCooldown, CurTime())
	if not ply:IsPlayer() or ply:GetInfo("Baielywarnshot") ~= "1" then return end
	ply.WarnCooldown = ply.WarnCooldown or 0

	if ply.WarnCooldown > CurTime() then
		-- Make sure we're not spamming constantly
		ply.MsgWarnCooldown = ply.MsgWarnCooldown or 0

		if ply.MsgWarnCooldown < CurTime() then
			SendMsg(ply, "Woah there! Calm down before giving another warning shot!")
			ply.MsgWarnCooldown = CurTime() + 3
		end

		return
	end

	local hitPos = ply:GetEyeTraceNoCursor().HitPos
	local entities = ents.FindInSphere(hitPos, BaielywarnshotConfig.Radius)
	-- Filter out non-players
	local playersToSend = {}

	for k, ent in pairs(entities) do
		if not ent:IsPlayer() then continue end
		table.insert(playersToSend, ent)
	end

	if #playersToSend < 1 then return end
	table.insert(playersToSend, ply)
	hook.Run("baielyWarnedPlayers", ply, playersToSend)
	net.Start("BaielywarnshotNot")
	net.WriteEntity(ply)
	net.Send(playersToSend)
	ply.WarnCooldown = CurTime() + 7
end, -2)

 

Link to post
Share on other sites
3 minutes ago, Eclipse said:

I didn't phrase it right, sorry. If it a single check, then it shouldn't be multiline.

 

I just looked through my code and found some if statements that could definitely be single line for more readability .

I know switch cases are constant lookup time so I am going to convert each of my hooks into a function and have a single hook that checks the command and if it is valid call on the function. Probably should have done that from the start haha

Link to post
Share on other sites
Just now, PuffyPanda said:

Actually found out gmod lua doesn't have switch statements :) so I will figure something else out

Depending on the scenario, tables are good, you can store functions which a string key

Link to post
Share on other sites

Yea I was looking up alternatives and found that as a neat alternative. Since key lookup times are constant I will most likely go for this approach. Cheers for the recommendation 

6 minutes ago, Eclipse said:

Depending on the scenario, tables are good, you can store functions which a string key

 

Link to post
Share on other sites

Fixed up the sith duel script thanks to the advice from @Eclipse I made it so there is only a singular hook with a variety of functions that the hook can call upon. Modified the challenger table so that it also takes the actual player object at the index. This saved me having to do a for loop whenever I needed to involve the ply that didnt activate the hook. Overall it should be much more efficient and easier to understand.

 

Also working on making the light saber more personalized. I have made it so that different users have access to different force powers and in the coming weeks I will add functionality to allow a select few people to be able to give force powers to select people. Atm the force powers granted list (that is the force powers that specific user has access to ) is only a json text file but I found out gmod supports mySQL so I will look to port it to that

sith_challenge.lua

Edited by PuffyPanda
Link to post
Share on other sites
1 hour ago, PuffyPanda said:

Fixed up the sith duel script thanks to the advice from @Eclipse I made it so there is only a singular hook with a variety of functions that the hook can call upon. Modified the challenger table so that it also takes the actual player object at the index. This saved me having to do a for loop whenever I needed to involve the ply that didnt activate the hook. Overall it should be much more efficient and easier to understand.

 

Also working on making the light saber more personalized. I have made it so that different users have access to different force powers and in the coming weeks I will add functionality to allow a select few people to be able to give force powers to select people. Atm the force powers granted list (that is the force powers that specific user has access to ) is only a json text file but I found out gmod supports mySQL so I will look to port it to that

sith_challenge.lua 4.02 kB · 0 downloads

Much more readable and efficient.

As for your next project, although gmod has a SQL binary here  I suggest you use the inbuilt SQLite gmod uses. Different syntax (Kinda)
https://wiki.facepunch.com/gmod/sql

I'm unsure of what bar Imperial has anymore, but PuffyPanda seems to be effective at utilizing feedback and LUA programming. + 1

Edited by Eclipse
Link to post
Share on other sites

+1, I don't know much about developing but from what I have seen in game this man would be a good fit. His examples are good and I can see them being very applicable to the server.

Edited by Pvtanderson
Link to post
Share on other sites
  • Bailey locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...