<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[The Limelight Blog]]></title><description><![CDATA[Blog Posts, information and discussion from the Limelight Team.]]></description><link>https://blog.limelightgaming.info/</link><image><url>http://blog.limelightgaming.info/favicon.png</url><title>The Limelight Blog</title><link>https://blog.limelightgaming.info/</link></image><generator>Ghost 3.40</generator><lastBuildDate>Wed, 25 Mar 2026 13:10:07 GMT</lastBuildDate><atom:link href="https://blog.limelightgaming.info/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Development Contributor Workflow]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://i.imgur.com/2P032Ei.png" class="kg-image" alt></figure><p>In May 2020, we started developing an improved development workflow for contributors. When Luvbunny wanted to contribute his code to the CityRP 2 core,<br>he couldn't just do it because he (and other contributors) had to rely on core developers, to get their code up and running on the beta</p>]]></description><link>https://blog.limelightgaming.info/development-contributor-workflow/</link><guid isPermaLink="false">6055f3e41b2d9c00012e76c7</guid><category><![CDATA[Development]]></category><category><![CDATA[coding]]></category><category><![CDATA[code]]></category><category><![CDATA[dev]]></category><category><![CDATA[gameserver]]></category><category><![CDATA[github]]></category><category><![CDATA[git]]></category><category><![CDATA[programming]]></category><category><![CDATA[contributor]]></category><dc:creator><![CDATA[Steven Burnett]]></dc:creator><pubDate>Sat, 20 Mar 2021 14:15:15 GMT</pubDate><media:content url="http://blog.limelightgaming.info/content/images/2021/03/contrib4.png" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://i.imgur.com/2P032Ei.png" class="kg-image" alt="Development Contributor Workflow"></figure><img src="http://blog.limelightgaming.info/content/images/2021/03/contrib4.png" alt="Development Contributor Workflow"><p>In May 2020, we started developing an improved development workflow for contributors. When Luvbunny wanted to contribute his code to the CityRP 2 core,<br>he couldn't just do it because he (and other contributors) had to rely on core developers, to get their code up and running on the beta server.<br>They had to request files from a core developer whom would send them those files via Discord/E-Mail, just to receive them back after the contributors made their changes. The core developer would then commit those changed files to the beta repository. A very painful process which ultimately blocked and delayed the process of getting contributions into the core.<br><br>Well, no more.</p><p>Our new contributor workflow offers a much better and self-reliant development experience.</p><p>Similar to our core repository <strong>cityrp2</strong>, we also have the <strong>cityrp2-contrib</strong> repo.<br>The <strong>cityrp2-contrib</strong> repo contains a branch for each of our lua contributors,<br>where they can commit their own <em><strong>addons</strong></em>, <strong><em>plugins</em></strong>, <strong><em>items</em></strong> and/or edits to existing core files, that a core developer can place there.<br>The only requirement is that the file and folder structure resembles our core structure, as for example: <strong><em>addons/my-addon</em></strong> or <strong><em>gamemodes/plugins/my-plugin</em></strong>.<br><br>Each commit will create or extend a PR/MR (pull-request/merge-request) in the core <strong>cityrp2</strong> repository, where core developers will be notified and can review the changes and eventually push them onto the beta server with a simple click of a button.</p><p>The best feature: <br>	Contributors and core developers can assist one another!<br>	Let's say Contributor John_Doe is working on adding new market items.<br>	He would get his own branch where he can work on his code independently.<br>	At some point he might need help from another contributor or core developer<br>	and he reaches out for help. <br>	Contributor Jane_Doe can now pull John_Does's branch and make edits.<br>	She commits those changes back into John's branch, that will trigger the<br>	PR/MR process (as described above).<br>	The reviewers (core developers) can now see that Jane commited the latest<br>	changes on behalf of John and his branch.<br>	<br>To sum it all up:</p><ul><li>Contributors get their own branch in the <strong>cityrp2-contrib</strong> repository (incl. their own description).</li><li>Contributors can work independently on their code.</li><li>Contributors can get assistance from other contribs/developers.</li><li>Core Developers can review the code and merge them automatically.</li><li>No more file sending back and forth via external services.</li><li>More comfort for contributors and core developers.</li></ul><p>We will constantly improve this workflow, i.e. allowing auto merge on the beta server for trusted contributors, also booting a sandboxed environment (server= for the contributor.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://i.imgur.com/YWZzOhr.png" class="kg-image" alt="Development Contributor Workflow"><figcaption>Core Developers get notified about a new review request</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://i.imgur.com/ibCf134.png" class="kg-image" alt="Development Contributor Workflow"><figcaption>Contributors can manage their own coding space (branch, files, folder, etc)</figcaption></figure><h3 id="become-a-contributor-today-and-help-us-improve-limelight-cityrp-"><a href="https://limelightgaming.net/forums/forum-479.html"><strong>Become a contributor</strong></a> today and help us improve Limelight CityRP!</h3><p></p><p><em>A special thanks goes out to Luvbunny, whom has experienced the old rusty and hard way of contributing code to us. We are still working on getting his great contribution shipped and would like to thank him for pressuring us into improving the workflow, back in 2020.</em></p>]]></content:encoded></item><item><title><![CDATA[HR Blog #4 - What *are* they doing over there?]]></title><description><![CDATA[Uh oh, we've not posted recently? So what have we been up to? Well...]]></description><link>https://blog.limelightgaming.info/hr-blog-4-what-are-they-doing-over-there/</link><guid isPermaLink="false">5e780fb1fdf69000010ef6f2</guid><category><![CDATA[Human Resources]]></category><dc:creator><![CDATA[Night]]></dc:creator><pubDate>Mon, 23 Mar 2020 11:58:47 GMT</pubDate><content:encoded><![CDATA[<p>Hey everyone.</p><p>Firstly, I'd like to apologise for not making a blog post sooner. I've been struggling for topics as of recent, so if you've got anything that you particularly want to see me then <a href="https://limelightgaming.net/forums/private.php?action=send&amp;uid=3749">please drop me a Forum PM</a>. Now let's talk about what we've been getting up to as of recent on the HR side of things!</p><p>Due to the nature of the position, it's hard to talk about everything I do because not everything I do can be spoken about openly which is difficult when you're trying to keep the community looped into what the human resources team is up to, especially when we often deal with a load of issues on a daily basis. However, both the admin team and HR have still been making observations to how specific processes could be made to work better, one observation we've made recently is how forum warnings are issued and how we punish people who break them using the warning system.</p><p>Before the revamp earlier today happened, the warning system was quite tedious to use as you could never be too sure what rule violation fell under which point. This could lead to people getting warned under the wrong warning type, meaning points may not be issued properly for the violation that happened, though it's worth noting that we didn't see this happen in practice.</p><p>So because we saw an issue, we went off to work! Our wonderful Doctor Internet started to write up a generalised list of all of our forum rules, combining them into simple, short descriptors for each section. For example, posting rules 2, 3 and 4 could all be shortened by referencing them as disrespect. We ended up doing this for every rule there is, combining them and then once done, admins had the opportunity to comment and suggest changes to what the list was.</p><p>After a few days and admins having agreed that the newly proposed list was reasonable, we had our final list! Then it goes over to me and Overlewd so we can decide the appropriate amount of points to assign, as well as how long it should take for those points to expire. Two more days later, we finally came up with a nice list of everything, as well as times and points. From there, it's just a matter of making sure the forum system is updated to include them.</p><p>This did take admittedly longer than I'd like, as I had no idea how to set that sort of thing up, nor did I know whether I had access to change that but after a little bit of tinkering around on the forums for a while, I realised I did have access so after a quick message out to the staff saying to avoid warning someone for the next 20 minutes, I started changing it up! Thankfully it didn't take that long, the system for sorting out warning types is actually quite straightforward as it turns out!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/03/firefox_L88GhuGeYJ.png" class="kg-image"><figcaption>My post on the thread raised for the issue, outlining the new warning types, their points and their length of expiry.</figcaption></figure><p>You might be seeing the list of warning types and thinking to yourself, "Jeez Night, 5 points for unsafe content, threatening and lying in the courthouse? That's a bit extreme isn't it?" and in normal circumstances I'd agree, but when we say unsafe content, we're talking about harmful or malicious software, hacks, warez, spyware and IP loggers, that sort of stuff. The stuff that you obviously shouldn't be posting in the first place.</p><p>With threatening, staff have been briefed that warnings under this type shouldn't occur unless the comment is a clear, serious and credible threat. In some cases, it may be more appropriate to warn someone under disrespect/flaming, trolling/useless/irrelevant content or perhaps not at all, but this of course will be up to staff discretion.</p><p>Hopefully with these changes, punishments on the forum will become a bit more standardised and uniform, making it fairer for everyone. Before, we only had 4 or 5 different options to warn someone under. Now look at how it is!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/03/firefox_sUD4HcyLyw.png" class="kg-image"><figcaption>For example, if I wanted to warn Roach... I've now got 12 different reasons with the correct points for each rule break! Sorry Roach.</figcaption></figure><p>If you find you get warned for double of what's listed here, it may be that your permanently suspended and in this case, all point values are doubled. If you don't think your warning level makes sense, of course feel free to speak to either the issuing staff member or HR as normal.</p><p>Thank you all, and until next time!</p>]]></content:encoded></item><item><title><![CDATA[Insight into the Teacher Team]]></title><description><![CDATA[Insight into the Teacher Team procedures and back-end.]]></description><link>https://blog.limelightgaming.info/insight-into-the-teacher-team/</link><guid isPermaLink="false">5e5cf42fc12f7400010e6078</guid><category><![CDATA[Teacher]]></category><dc:creator><![CDATA[Bambo]]></dc:creator><pubDate>Thu, 05 Mar 2020 17:39:42 GMT</pubDate><content:encoded><![CDATA[<p>Limelight Teacher Team has been there since the inception of the community. Guiding the players old &amp; new alike. Informing them of the rules, in-game systems and assisting them on the forums.</p><p>In time, their duties increased with the implementation of newer systems and also with access to new abilities. For example, assisting in the <a href="https://discord.gg/ZnyeYe4">Public Discord</a> by answering questions or assisting in the Team Discord by collecting information, giving opinions and helping test new features.</p><p>While their primary objective is to assist players in-game, Teachers also do a lot of work on the forums, discord and other areas for the community. We especially value the assistance of Teachers who are experienced, meaning who have been a Teacher for a long time as their experience can guide newer Teachers and help them ease into the team faster.</p><hr><h2 id="teacher-activity">Teacher Activity</h2><p>Teacher Activity has been raised as a discussion point recently, and we are working on resolving the issue by bringing new guidelines to how the team works. With the new guidelines, we wanted to ensure that Activity is not only in-game, but also on the forums. We also wanted to encourage Teachers to host more events and mini-events by bringing a new event requirement. </p><h3 id="in-game-hours">In-Game Hours</h3><p>Teachers are required to have at least 10 hours a month, which might increase in the future however we did not want to make the requirement high, forcing Teachers on the server as that would take the fun away and if you are volunteering, the payment is the fun you get from assisting the community and enjoying the server.</p><p>We wanted to ensure, while we still had Teachers go in-game, their experience wasn't forced, and they were having fun.</p><h3 id="forum-activity">Forum Activity</h3><p>We could view forum assistance of Teachers as one of the secondary objectives of sorts. They assist in the Help &amp; Support section of the forums, with moderation abilities. They keep the forum section organized, and provide support to questions raised. Teachers also have a Teacher Lounge in which they can suggest new Teacher systems, organize events, give opinions in matters.</p><h3 id="hosting-events">Hosting Events</h3><p>Encouraging roleplay is another secondary objective of the Teachers, this can be done by them hosting mini-events on the live server, hosting events on the event server or rewarding a roleplay they believe deserves recognition with REPs.</p><p>To improve on this front, we wanted to bring a new requirement, in which Teachers are required to host at least 1 event in 3 months. These events could be a mini-event on live or an event on the event server. We know that hosting an event is difficult, that's why we encourage Teachers to work together and for mini-events provide a list of ideas they can use.</p><hr><h2 id="strike-system">Strike System</h2><p>Alright, this is not as evil as it sounds.</p><p>To keep track of Teacher mis-steps, the previous liaisons Night &amp; Daley introduced the strike system for the teachers.</p><p>In this system if an incident was deemed strike worthy, the Teacher in question would receive one. If a teacher received 3-strikes, their position would be taken from them.</p><p>Strikes do expire, however they stay on record.</p><p>Thankfully, no one received 3-strikes since the implementation of the system.</p><p>This system currently ties into the activity requirements.</p><p>If a Teacher doesn't fulfill the activity requirement of that month without a valid reason of absence (exams, real life occurences) they will receive a strike.</p><p>This way, we provide the Teachers with a chance.</p><hr><h2 id="meetings">Meetings</h2><p>We want to be informed about our Teachers, and ask how they are doing, what can be improved and their opinions on subjects regularly.</p><p>That is why, we decided to have interviews with every Teacher individually every month. We also decided to have bi-monthly Teacher Team meetings to get an overall discussion going, addressing general Teacher Team concerns.</p><hr><h2 id="application-process">Application Process</h2><p>The application process has not changed much in foundation for years, some elements of the application forms have changed but in general, it is the same. However, we did have concerns to address and issues to resolve regarding the procedure.</p><p>For example, while voting for a player internally, we can't be sure about some elements brought up, which can be minor and/or resolved via a trial run.</p><p>That is why we decided to introduce a brief trial period to new Teachers. This would ensure the team gave a chance to players with minor concerns, and we would try to resolve those concerns during the trial run.</p><p>This was mainly introduced so we made sure we keep getting new blood into the team.</p><p>With the Trial Period, we also introduced an application interview in which we talked with the applicant, asking questions brought up internally or just to get their opinion. This is so we can get to know the applicant better and address concerns raised on their thread.</p><hr><p>In short, we are working to improve the Teacher Team, the procedures and better the experience of the Teachers and the community.</p>]]></content:encoded></item><item><title><![CDATA[Infrastructure Upgrade 11/2019]]></title><description><![CDATA[In 2018, two years after our last huge upgrade, we noticed that some of our software packages, tools and even the operating systems on both of our servers would enter EOL (End-Of-Life) state in spring 2019.]]></description><link>https://blog.limelightgaming.info/infrastructure-upgrade-11-2019/</link><guid isPermaLink="false">5e0c7bb5c6f2600001fcadf6</guid><category><![CDATA[Development]]></category><category><![CDATA[infrastructure]]></category><category><![CDATA[server]]></category><category><![CDATA[security]]></category><category><![CDATA[git]]></category><category><![CDATA[svn]]></category><category><![CDATA[github]]></category><category><![CDATA[dev]]></category><category><![CDATA[db]]></category><category><![CDATA[database]]></category><category><![CDATA[gameserver]]></category><category><![CDATA[game]]></category><category><![CDATA[tooling]]></category><category><![CDATA[cd]]></category><category><![CDATA[ci]]></category><category><![CDATA[deployment]]></category><category><![CDATA[testing]]></category><category><![CDATA[linter]]></category><category><![CDATA[integration]]></category><category><![CDATA[documentation]]></category><category><![CDATA[code]]></category><category><![CDATA[programming]]></category><category><![CDATA[coding]]></category><category><![CDATA[mybb]]></category><category><![CDATA[markdown]]></category><category><![CDATA[converter]]></category><category><![CDATA[processor]]></category><category><![CDATA[update]]></category><category><![CDATA[backup]]></category><category><![CDATA[bash]]></category><category><![CDATA[php]]></category><category><![CDATA[vcs]]></category><category><![CDATA[scm]]></category><dc:creator><![CDATA[Steven Burnett]]></dc:creator><pubDate>Sat, 11 Jan 2020 15:54:37 GMT</pubDate><content:encoded><![CDATA[<p>It's been two months since we've upgraded our entire infrastructure.</p><p>In 2018, two years after our last huge upgrade, we noticed that some of our software packages, tools and even the operating systems on both of our servers would enter <a href="https://en.wikipedia.org/wiki/End-of-life_(product)">EOL (End-Of-Life)</a> state in spring 2019. This lead to extensive planning and discussions in a joint working group for months, mainly so that the next upgrade would provide future stability including improved workflows for our developers. I remember back in 2016 when upgrading both servers was quickly done because our <a href="https://en.wikipedia.org/wiki/Backup">backups</a> contained data of just one year (August 2015 - August 2016). But after 3 years and 3 months (08/16 - 11/19) you can imagine how many backups and how much data would need to be taken care of.</p><p>Meanwhile members of the joint upgrade taskforce suggested that we could also upgrade our development workflows, using the latest <a href="https://en.wikipedia.org/wiki/PHP">PHP</a> Version, supporting <a href="https://en.wikipedia.org/wiki/Docker_(software)">Docker</a> and moving our <a href="https://en.wikipedia.org/wiki/Version_control">VCS (Version Control System)</a> from <a href="https://en.wikipedia.org/wiki/Apache_Subversion">SVN</a> to <a href="https://en.wikipedia.org/wiki/Git">git</a>. Not only would this improve our overall performance on development, but also help us reduce bugs, and offer new modern services as well.</p><h2 id="the-limelight-scm-application">The Limelight SCM Application</h2><p>And this is where the upgrade journey started in April 2019.<br>Searching for a suitable git hosting provider was a no-brainer and we went with Github.com. Our HoS (Head of Security) Faustie set up a <a href="https://github.com/limelight-development">GitHub organization</a> and I started working on a <a href="https://en.wikipedia.org/wiki/Version_control">source control management</a> application, Limelight SCM, that would provide <a href="https://en.wikipedia.org/wiki/Continuous_deployment">continuous deployment (CD)</a> for our web services. Doctor Internet then migrated these services to git and we started using them in production. <br>To aid our developers in upgrading their PHP Code to support PHP 7.x+, we added a tool to our SCM that would perform sanity- and compatibility-checks.<br><br>Our SCM application is unique in such a way that it offers:<br>- Namespace Management (folder routing to subdomains)<br>- Branch Management (production, development, feature, fix)<br>- Deployment Statuses / Reports<br>- Dealing with unstaged changes<br>- Support for external tools (Composer, PHP7 compat, ..)<br>- Protection of deployments (.htaccess, webserver, ..)<br>- Integrated namespace blacklist<br>- Permission management for deployments<br>- Adapters for extending/configuring the SCM<br><br>For instance, this is our .scmconfig adapter configuration:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/scmconfig.png" class="kg-image"><figcaption>.scmconfig file - spec. version 1.0</figcaption></figure><h2 id="upgrade-day-s-">Upgrade Day(s)</h2><p>Before we were able to start upgrading, we had to carefully make backups.<br>Those backups contain the databases, game servers, teamspeak and other system utilities.</p><p><strong>The Beta Server</strong><br>Until Nov 11th, the beta server lived in its own SVN repository, and a couple of changes had to be made for supporting git. Instead of working on two repositories (Live and Beta), we decided that with git we wanted just one main repository with separate branches:</p><p>Master Branch = the production-ready code (live server)<br>Development Branch= represents the beta server</p><p><strong>Goodbye Beta Server.....for now</strong><br>Those changes ultimately resulted in archiving the beta server to its own git repository, as we were unable to simply merge the beta code to the new development branch of the main repository. Both repositories had different commit histories.</p><p><strong>Hello again, Beta Server!</strong><br>Instead, the new beta server was created from the development branch of the main repository, and we started backporting code from the beta repository to the development branch of the main repository.</p><p><strong>Upgrading the DS1 server</strong><br>Now we were able to start upgrading our server DS1(EU) that is primarily responsible for running the gameservers and its databases. The installation was quickly performed until we ran into some difficulties when booting our secondary <a href="https://en.wikipedia.org/wiki/Network_interface_controller">NIC (Networking Interface Controller)</a>.<br>After booting into rescue mode - investigating, we quickly found the problem. Our secondary NIC was using an identifier that was not yet configured on the new freshly installed OS.<br>So we did that, brought the secondary NIC up and it was just fine.<br><br><strong>Game servers back online!</strong><br>After retrieving our backups, installing the database server and additional dev services, we focused on getting the game servers running.<br>This included testing and tackling some issues on the beta server.</p><figure class="kg-card kg-image-card"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-13_27_55--development---Discord.png" class="kg-image"></figure><p><em>Yes, we  spent the whole day and night (from 11th Nov 11am to 12th Nov 7 am) on upgrading the DS1 server.</em></p><p><strong>Configuring our new development environment</strong><br>We kept monitoring the game servers until we started setting up our dev environment. For that we configured Githubs CI/CD tooling, and as we were ready to test it, suddenly the whole thing was unoperative. Luckily many other companies/developers reported the same issue so that Github was pressured to fix it.</p><figure class="kg-card kg-image-card"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-13_52_20--development---Discord.png" class="kg-image"></figure><p>Four hours later, our CD pipelines (deployments) started deploying code.<br>On Nov 13th at 2 am, our developers were able to use our new development environment, thus pushing updates.<br>By 1 pm, Doctor implemented a proper git configuration (.gitignore, Code permissions &amp; Co.) and added his gamemode <a href="https://en.wikipedia.org/wiki/Lint_(software)">linter</a> to our automated workflows.</p><figure class="kg-card kg-image-card"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_01_56--development---Discord.png" class="kg-image"></figure><p>At that time the linter reported over 8200 warnings...not bad actually.<br>This helps us reduce error prone code in the future.<br><br><strong>Commit Dispatcher &amp; DB Processor</strong><br>Now it was time to somehow get our commit messages into the changelogs database, on which our changelogs service relies on. To keep things organized and in one place, I decided to re-write my old changelogger NodeJS application, this time using a scripting language called Bash-Scripting. </p><figure class="kg-card kg-image-card"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_07_14--development---Discord.png" class="kg-image"></figure><p>Meanwhile Temar enrolled for some lessons in linting.</p><figure class="kg-card kg-image-card"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_12_47--development---Discord.png" class="kg-image"></figure><p>Later I realized how using database-insertions in Bash Scripting was not safe enough, so I had to choose another route. I decided to write a PHP CLI <a href="https://en.wikipedia.org/wiki/Command-line_interface">(Command-Line-Interface)</a> Script, and split the application into parts -<br>the Commit Dispatcher and <a href="https://github.com/limelight-development/db-processor">DBI (Database Insertion Processor)</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_36_02-unknown.png--743-487-.png" class="kg-image"><figcaption>CD (Continuous Deployment) workflow @ master branch</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_16_38--development---Discord.png" class="kg-image"><figcaption>Hello World from git!</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_38_33-Limelight---Changelogs--421-.png" class="kg-image"><figcaption><a href="https://limelightgaming.net/services/changelogs/index.php?rev=cbff49f">https://limelightgaming.net/services/changelogs/index.php?rev=cbff49f</a></figcaption></figure><p><strong>Forums -&gt; Github issues integration</strong></p><p>At the same time Doctor was working on migrating our gamemode issues boards to Github. To make things even prettier, he proposed writing an integration that would link our forum bug-reports directly to our Github issue boards, making it easier for developers to work on fixing bugs. He started working on a <a href="https://github.com/limelight-development/bbcode-markdown-converter">bbcode-markdown-converter</a> to convert forum tags (bold, italic, etc) to Markdown format.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_20_46--development---Discord.png" class="kg-image"><figcaption>Doctor preparing stuff for his integration</figcaption></figure><p>And one hour later he presented first results:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/MRZcbrwzIz1w.png" class="kg-image"><figcaption>Forums bug reports synchronized to our development issues boards</figcaption></figure><p><strong>Bambo lives in the future</strong><br>Bambo and Temar were one of the first devs to publish an update using our new dev environment. It was not long before Night noticed a bug in the changelogs viewer/in-game loading screen:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_47_39--development---Discord.png" class="kg-image"><figcaption>-70 minutes?</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-14_55_26--development---Discord.png" class="kg-image"><figcaption><a href="https://limelightgaming.net/services/changelogs/index.php?rev=0d6543d">https://limelightgaming.net/services/changelogs/index.php?rev=0d6543d</a></figcaption></figure><p>With git we started using a more accurate time tracking that includes timezones.<br>Our old SVN timestamps were one hour behind to accurately match the timezone settings of our DS1 server. With Doctors addition to support timezones in the changelogs-viewer, we also went with using the deployments execution timestamp + 3600 seconds (1 hour) to get the most accurate time for the changelogs.</p><hr><p><strong>Upgrading the VPS1 server</strong></p><p>Now that the DS1 upgrade was completed, we focused on getting it done on VPS1 - our web-server.<br><br>On Nov 15th around 1 pm, we created some last-minute backups and started the procedure. The setup was done 3 hours later, and this is where the journey starts.<br>Switching to the latest PHP 7 version was much harder than expected.<br>Even though we had been using using our SCM compatibility checker for months, many services did not successfully pass the switch.<br>It took us 7 hours (11 pm) to manually search and fix these services.<br>By Nov 16th at 2 am we completed upgrading/testing our forums and started backporting our ACP (Admin Control Panel) and Gamepanel to support our latest PHP version. </p><p>By 4:30 am in the morning the <s>nightmare</s> fun was over and we sent the entire web-server back online.<br><br>During the day, Doctor completed his Forums -&gt; Github integration while also fixing the <a href="https://github.com/limelight-development/LL-API-PHP-Wrapper">Limelight API</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/UYJ8vKLP1D9J.png" class="kg-image"><figcaption>Forums Github Integration</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/Krzz27flRXfh.png" class="kg-image"><figcaption>Forums Github Integration</figcaption></figure><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2020/01/2020-01-11-15_22_51--development---Discord-1.png" class="kg-image"><figcaption>Doctor solving problems</figcaption></figure><hr><p><strong>Since then we....</strong></p><ul><li>we fixed some broken deployments</li><li>improved our development environment</li><li>added documentation scripts to our CI/CD workflows</li><li>brought back our in-game update announcer on Dec 5th</li><li>published the <a href="https://github.com/limelight-development/bbcode-markdown-converter">bbcode-markdown-converter</a> as an open source project</li><li>published the <a href="https://github.com/limelight-development/db-processor">DB processor</a> as an open source project</li><li>and more....</li></ul><p><strong>Special thanks to all involved and you for sticking with us!</strong></p><hr><p>Stay tuned on development regarding our services:<br><br>	<strong>Our Open-Source Projects:</strong> <a href="https://limelightgaming.info/">https://limelightgaming.info/</a><br>	<strong>Our Github Organization:</strong>  <a href="https://github.com/limelight-development">https://github.com/limelight-development</a></p><p>	<strong>CityRP2 Updates:</strong><br>			Changelogs:			<a href="https://limelightgaming.net/services/changelogs/">https://limelightgaming.net/services/changelogs/</a><br>			Discord Channel:   <a href="https://discord.gg/t9NAJBW">https://discord.gg/t9NAJBW</a><br>	<br>	<strong>Web Updates:</strong><br>			Discord Channel:   <a href="https://discord.gg/6XdkFGv">https://discord.gg/6XdkFGv</a></p><p>	<strong>API Updates:</strong><br>			Discord Channel:   <a href="https://discord.gg/4vxZhdg">https://discord.gg/4vxZhdg</a><br><br>	<strong>Twitter:	</strong><a href="https://twitter.com/L2_Gaming">https://twitter.com/L2_Gaming</a><br>	Youtube:	<a href="https://www.youtube.com/channel/UCPwbrL76xojKB59fau6O-vw">https://www.youtube.com/channel/UCPwbrL76xojKB59fau6O-vw</a></p>]]></content:encoded></item><item><title><![CDATA[Development Blog #9 - how suggestions???]]></title><description><![CDATA[Questions we get all the time, "How do suggestions work?", "Why hasn't this been implemented?", "Why are you so bad?". There's a thread, but perhaps it's time to write a post, and keep people updated?]]></description><link>https://blog.limelightgaming.info/development-blog-9-how-do-suggestions/</link><guid isPermaLink="false">5dc57ff7e8b77c00010ed793</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Fri, 08 Nov 2019 15:29:47 GMT</pubDate><content:encoded><![CDATA[<p>Questions we get all the time, "How do suggestions work?", "Why hasn't this been implemented?", "Why are you so bad?". There's a thread, but perhaps it's time to write a post, and keep people updated?</p><hr><h2 id="step-1-suggestions">Step 1: Suggestions</h2><p>The first step is that people post their suggestions, in the suggestions forum. Surprising, I know.</p><p>These stick around until:<br>A. They have been open for about a week. AND<br>B. They have had like 10 votes.</p><p>If they have enough support (50% I think), it gets moved into the "Staff Review" section, if it doesn't, it gets denied.</p><hr><h2 id="step-2-waiting-for-staff-review">Step 2: Waiting for Staff Review</h2><p>Here suggestions sit until staff get around to posting review threads.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/11/image.png" class="kg-image"><figcaption>Review Manager</figcaption></figure><p>From the review manager, we can send polls to development, moderation, administration and business. We need to fill in a quick description for the suggestion, and any development advice we have.</p><p>This is also the place where we check for if a suggestion is feasible and possible. If it is, a staff review is posted internally, if not, it's denied.</p><hr><h2 id="step-3-staff-review">Step 3: Staff Review</h2><p>Every votes. And leaves reasons. Except when they don't :&lt;</p><p>The default length of these polls are three days, but can be extended.</p><p>If it passes, the internal thread is moved for development, and the external thread is moved to "approved. If it doesn't pass, the reasons are posted publicly and the thread is moved to denied. The internal thread is then moved to the archive.</p><hr><h2 id="step-4-additional-planning">Step 4: Additional Planning</h2><p>Here, suggestions are mixed with ongoing plans (MESKA, new skills, optimisation etc) to form full plans. This was done by the content team, but is generally handled by development. This can be simply adding suggestions together to make larger updates, or more in-depth planning through working groups.</p><p>In this step, new updates may make old suggestions irrelevant, and so suggestions are sometimes denied months after because they're no longer relevant.</p><hr><h2 id="step-5-development">Step 5: Development</h2><p>Then, developers are matched to updates. Some developers work on local servers (such as Burnett). Others work on beta directly (myself). The developers work to build the update, sometimes referring back to update plans or working groups, speaking to the community input, developers or administrators to get input into the new plans.</p><p>Now, why does this take so long to do? We don't have many developers, some developers are better at particular things. Some prefer other things. Some are looking to expand skill sets. Some need more support. Overall, we get more suggestions than we can implement, so the backlog increases.</p><hr><h2 id="step-6-debugging">Step 6: Debugging</h2><p>Debugging takes several phases. Stage 1 is merging everything onto beta. Beta has several differences to live. Seperate databases, often has newer code being tested, but generally if code works on beta, it should work on live.</p><p>Stage 2 comes after that, where code is merged live and tested again on the staging server. This is a copy of live, same DB, same code, it even logs to the same files. It's as close as being live as we can get, without rebooting the live server.</p><p>Stage 3 is when everything is live. We can't catch everything, so we rely on bug reports from the community, you catch what we miss, and do things we don't think of.</p><hr><h2 id="secret-step-7-balance">Secret Step 7: Balance</h2><p>While we strive to keep things as balanced as we can on release, we might get things too good or too bad, so we change values. Contraband gets buffed and nerfed. Timers changed from 5 minutes per cycle to 1 minute and is now on 2 minutes. Wood values have been changed maybe 6 times since they were made sellable. Weapon damage and fire rates are changed to improve the meta and make each weapon viable. This can also be prompted through suggestions. Sometimes data says stuff is balanced, but the community thinks otherwise, so it can be easier to just rebalance stuff than to explain the data.</p><hr><p>So hopefully that explains how we do suggestions, why they can take so long and how they're chosen to be worked on.</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #8 - Planning for the future.]]></title><description><![CDATA[The future, it's a scary, it's an unknown; we need to make sure we're ready for it. So, we make plans, roadmaps and try to figure out what we're doing, both for the short and the long term.]]></description><link>https://blog.limelightgaming.info/dev-blog-8-planning-for-the-future/</link><guid isPermaLink="false">5daac8cde8b77c00010ed66a</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Thu, 07 Nov 2019 11:16:50 GMT</pubDate><content:encoded><![CDATA[<p>First off, I'd like to thank Pufitee for the <a href="https://discordapp.com/channels/377812809326788610/377812809326788612/633077132645498880">topic for this blog</a>.</p><p>The future, it's a scary, it's an unknown; we need to make sure we're ready for it. So, we make plans, roadmaps and try to figure out what we're doing, both for the short and the long term.</p><hr><p>So, what are the issues that we face in development which we can plan to resolve. After all, any issue we face can be broken down into smaller ones, right?</p><h1 id="-1-content">#1 - Content</h1><p>Content keeps people engaged. People like doing stuff. Whether that's replacing <em>things </em>with improved things, or making new things, new content brings people back and keeps people here. For this, we're looking to do a few things.</p><h3 id="-1-1-meska">#1.1 - MESKA</h3><p><a href="https://limelightgaming.net/forums/thread-25138.html">MESKA</a>, if you haven't seen it, is our metrics, skills and achievements engine. It's designed as a tool for longer term player progression, making it so "money" isn't the only endgame for players. Developing skills takes time, it can't just be crammed into a weekend.</p><p>For development though, we're planning to build new skills to link in, developing the skills that are already there. This can be tying old systems into MESKA (as with Fishing) or developing new systems which link into MESKA (as with Faustie's upcoming work).</p><h3 id="-1-2-events">#1.2 - Events</h3><p>To help both staff and players with their events, we're working on improving our event tools. Pre-made sets of content, easier modification of game rules / jobs / whatever else, easier management of maps, sets of tools to make it easier to run events.</p><p>All of this links into just "making things easier" for players running events, staff hosting events and developers who make sure everything's in place for these events.</p><h2 id="-2-improving-technology">#2 - Improving Technology</h2><p>One of the things we've tried to stay at the forefront of is keeping our systems and security up to date.</p><h3 id="-2-1-forums">#2.1 - Forums</h3><p>One of our plans is to continue ensuring the forums remain secure, up to date and quick. This can be through updating plugins to improve speed, writing new plugins to keep users secure and more.</p><h3 id="-2-2-the-full-stack-">#2.2 - The full stack.</h3><p>With the infrastructure upgrade comes upgrades to many core sets of software and services. This lets us use new features, improve code readability and more.</p><h2 id="-3-paying-back-debt">#3 - Paying Back Debt</h2><p>As I said back in <a href="https://blog.limelightgaming.info/dev-blog-7-technical-debt-you-dont-want-to-wait-for-the-bailiffs-to-call/">Dev Blog #7</a>, we don't want to wait for the bailiffs to call. Removing old functions, rewriting old code, improving the code base and optimising where we can are key improvements which need to be made. It makes it faster to develop, prevents rewriting stuff we already have, and much more to let us focus on getting stuff done, not working around arcane systems <em>to</em> get it done.</p>]]></content:encoded></item><item><title><![CDATA[HR Blog #3 - staff position pls?]]></title><description><![CDATA[So why do we still use the handpicked system to recruit staff? Well...]]></description><link>https://blog.limelightgaming.info/hr-blog-3-staff-position-pls/</link><guid isPermaLink="false">5db43462e8b77c00010ed68e</guid><category><![CDATA[Human Resources]]></category><dc:creator><![CDATA[Night]]></dc:creator><pubDate>Sat, 26 Oct 2019 20:26:15 GMT</pubDate><content:encoded><![CDATA[<p>A question I routinely get from players is how staff are selected, and if they can get a staff position. I wrote a very nice guide in the Help &amp; Support section about <a href="https://limelightgaming.net/forums/thread-23591.html">how staff are selected and what the process is</a>, but figured it would be best to go into a bit more detail about why we have stuck to the same system we have done for years now. So with that being said, let's get into it shall we?</p><h3 id="what-is-the-procedure">What is the procedure?</h3><p>Since the community's inception in 2015, we've always relied on the same system that we use today, this being how administrators are able to "recommend" a player for staff, then other administrators also vote as to whether they find the candidate suitable for the position or not. If the vote is successful, then great! A mentor is assigned to that person and they're promoted to trial mod. If not, feedback may be shared at HR's discretion with the candidate and hopefully they'll stand a better chance when they're next raised as a potential candidate.</p><h3 id="why-do-we-use-this-system"><strong>Why do we use this system?</strong></h3><p>Seeing how administrators have to interact with our players on a pretty much daily basis (across forums, Discord and in-game), they should know our players quite well. Of course, we can't expect <em>everyone</em> on our admin team to know <em>every</em> player that joins our community - after all, over 46 thousand people have joined our servers since they've went live, that's a lot of people! Where an administrator is unable to form an opinion, they're able to "abstain" from voting whilst they try to gain an opinion, if they're unable to do this, they may be asked by HR to choose either to vote in support of the candidate, or vote against the candidate dependent on how tight the vote is.</p><h3 id="why-do-we-continue-to-use-this-system">Why do we continue to use this system?</h3><p>This system has presented very few, if any issues for us over the years, and well, there's no need to fix what isn't broken. This system has been used to onboard/progress all current staff on the team (amongst either LL or pre-split) and has reliably worked for us since we've implemented it.</p><h3 id="would-we-consider-allowing-staff-applications">Would we consider allowing staff applications?</h3><p>This is a difficult question to answer. There's many advantages and disadvantages to using a system like that, so let's quickly cover some.</p><p><strong>Advantages:</strong></p><ul><li>Those who would like the position can easily make themselves known, instead of hoping that an administrator picks up on them.</li><li>It could possibly allow us to onboard more staff.</li><li>Less paperwork for the admin team.</li></ul><p><strong>Disadvantages:</strong></p><ul><li>It's very easy to make yourself look good on paper - people may not be as genuine as they make out.</li><li>It may lead to a decrease in staff quality, as the bar for entering the staff team could be lowered due to this.</li><li>A candidate may be able to persuade others to vote in their favour, when they should be solely relying on the opinions of others rather than trying to sway it in their favour. Keeping the process blind to the candidate would overcome this.</li></ul><p>And those are just a few off the top of my head. Would we be willing to consider it? Maybe, who knows? Personally I stand somewhere in the middle. I see the advantages to it, but the disadvantages put me off. If the admin team wishes to change this, of course this will be discussed then but until that time comes, we believe we have a fair system that works well for all parties involved.</p><h2 id="to-conclude-">To conclude...</h2><p>Do we want more staff? Yes, definitely. We're always on the lookout for new members of staff that might be able to join us and make a difference, but we would expect these candidates to prove themselves to us before a vote is made. If you'd like staff, chuck our tags on, try to be helpful to others, keep your record in check (after all, how can you be expected to enforce the rules if you break them yourself?) and keep a cool head, if you're lucky then you might just find yourself on top of a roof being offered the position!</p><p>We'd love to welcome more people onto the staff team, but we (or so I'd like to think!) have a high expectation of our staff and the candidates that we consider for staff. Whilst this blog post should hopefully help to clear up some questions and concerns, you can find a bit more detail on our staff process in the <a href="https://limelightgaming.net/forums/thread-23591.html">thread I posted a while back</a>. If you've got any questions, you're more than welcome to ask either myself or Overlewd and we'd be happy to try and answer them.</p><p>Until next time!</p>]]></content:encoded></item><item><title><![CDATA[HR Blog #2 - Nurturing the future and developing our moderation team.]]></title><description><![CDATA[Time to talk about our staff recruitment process. Interested to learn more? Read on!]]></description><link>https://blog.limelightgaming.info/hr-blog-2-nurturing-the-future-and-developing-our-moderation-team/</link><guid isPermaLink="false">5da39bcadf40c700010d0fec</guid><category><![CDATA[Human Resources]]></category><dc:creator><![CDATA[Night]]></dc:creator><pubDate>Mon, 14 Oct 2019 19:47:15 GMT</pubDate><content:encoded><![CDATA[<p>Hey there all, it's time for another HR blog!</p><p>I've been wondering about what to write, because for the most part my position includes a lot of work that I'm either not able to talk about at all, or stuff that I'm not able to talk about too much but I figured I can talk about a change that we made a little while ago in how our moderation team works - mentorship and trial periods. Hopefully by the end of this blog post, you'll learn why we implemented these two systems, what the key problems were and learn a thing or two about how progression is handled internally amongst the team. Here goes! Let's start off with...</p><h2 id="identifying-the-problem-">Identifying the problem.</h2><p>Back before the change, we were severely restricted in our ability to take in new members of staff because there was a lot of risk attached. The way that the "stage one" role was designed gave a lot of powers, which made it difficult for us to hand out to an array of people and if there was any hint of risk being attached to that person, it would most likely result in us denying that candidate. We risked potentially exposing sensitive staff tools and internal information to someone who may have ended up being a poor fit for the role. This meant that we needed to be extremely careful when it came to voting a candidate into moderator, because we needed to be fairly certain as to how they'd behave on trial. This could lead to significantly long periods of time where promotion threads weren't touched or a poor voting outcome for the candidate. All of this whilst our server desperately needed more moderators to help manage the player count when other members of staff weren't able to. We needed to think of a solution, and fast.</p><h2 id="the-solution-">The Solution.</h2><p>And so became the trial moderator system we have today! The idea of the trial moderator system was to allow us to take more of a risk with those we let on to the team whilst still maintaining a high quality of staffing that you see on the server. Trial moderators do not have much access internally and have limited access to the more advanced tools, but are still able to handle a lot of the common problems that happen on the server. Trial moderators are quite limited in the amount of time they're able to punish someone for, however are able to ask for extensions first or feedback into cases if they're ever unsure about a case. This is where the mentorship system ties in, as it greatly helps our trial moderators with understanding how to handle situations where they may not be entirely sure on how to do so.</p><p>The mentorship system is our way of ensuring that trial moderators didn't feel like they were just abandoned and left on their own to fight off whatever may come their way. When a promotion is approved amongst the admin team, we also decide who is going to work alongside the trial moderator and make sure that they feel comfortable and are assisted to do the best that they can and (hopefully) progress further up the chain! A mentor is someone who a trial moderator could turn to if they have questions of any sort, and they would also act as a way for administrators to communicate their feedback (both positive and negative) to the trial moderator so that they're able to improve. After all, how can you be expected to improve if you aren't told what you're doing well and what needs a bit of work? We highlighted this recently amongst the entire team with the wave of <a href="https://limelightgaming.net/forums/thread-25923-post-283338.html">staff feedback</a> that we gathered, which we aim to conduct on a regular basis.</p><p>The introduction of both these systems really helped us introduce a lot more staff members to the team and we hope that it continues to do so. I personally feel like the addition of both of these systems has really come to help us in regards to staffing the server, and after seeing (and even myself, having mentored a few of the staff members on the team today) the effects of the mentorship and trial moderator programs alike, I really believe that it's a success and I hope our player base sees it that way too.</p><h2 id="conclusion">Conclusion</h2><p>I hope this blog post has provided a decent insight into our progression system and how it's handled, with some luck you'll now see how things were from our perspective and why the change needed to be made. As always though, if you've got further questions then you're welcome to ask myself or Overlewd and we'll do our best.</p><p>Till next time!</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #7 - Technical Debt, you don't want to wait for the bailiffs to call.]]></title><description><![CDATA[People who have seen either my or Faustie's forum posts, or were around for the community meeting have heard us talk about technical debt, but we haven't really explained what it is or what it means.]]></description><link>https://blog.limelightgaming.info/dev-blog-7-technical-debt-you-dont-want-to-wait-for-the-bailiffs-to-call/</link><guid isPermaLink="false">5da48fc8df40c700010d1087</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Mon, 14 Oct 2019 15:50:22 GMT</pubDate><content:encoded><![CDATA[<p>People who have seen either my or Faustie's forum posts, or were around for the community meeting have heard us talk about technical debt, but we haven't really explained what it is or what it means.</p><h2 id="what-does-wikipedia-say">What does Wikipedia say?</h2><blockquote><strong>Technical debt</strong> (also known as <strong>design debt</strong><sup><a href="https://en.wikipedia.org/wiki/Technical_debt#cite_note-Girish_2014-1">[1]</a></sup> or <strong>code debt</strong>) is a concept in <a href="https://en.wikipedia.org/wiki/Software_development">software development</a> that reflects the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer.<sup><a href="https://en.wikipedia.org/wiki/Technical_debt#cite_note-2">[2]</a></sup></blockquote><p><em><a href="https://en.wikipedia.org/wiki/Technical_debt">Wikipedia</a>, licensed under <a href="https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License">CC Attribution Share Alike</a>.</em></p><p>That doesn't really help much, does it?</p><h2 id="in-simple-terms-">In simple terms.</h2><p>Technical Debt is just like real debt. You borrow from the future, to the benefit of now. Whether that be building systems which "just work", without considering how that can be expanded in the future, or not documenting complex systems. It works now, but takes more time and effort to fix later.</p><h2 id="is-this-a-bad-thing">Is this a bad thing?</h2><p>In the short term? No. We all write code first, get it working, then make changes, optimise, write documentation afterwards. So long as it stays limited, and gets fixed quickly, <em>before </em>the system goes live? That's just how development works.</p><h2 id="so-how-does-this-effect-limelight">So, how does this effect Limelight?</h2><p>Well, it takes a few forms, affecting different developers differently.</p><h3 id="documentation">Documentation</h3><p>This is a big, big issue, affecting both gamemode and web developers. People have been annoyed by my documentation updates, but they're needed.</p><p>Documentation, to keep it simple, is written words, used to pass information between developers. Most documentation is written as a "func-doc", or function document. It's a block of text explaining the function, what it does, its arguments and returns.  </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/drawplate.png" class="kg-image"><figcaption>L2 plates plate drawing code.</figcaption></figure><p>This is an example from <a href="https://l2-plates.info">L2 Plates</a>. Not the best example, but it gives a broad overview of what the function does. It draws a license plate on a vehicle. Each argument is explained. Each argument type is noted. At a glance, you know how to use the function.</p><p>But, there's another layer, the function and its arguments are self-documenting. The function name is readable and describes what it does (it draws a plate). You can guess what each argument is. The entity being drawn on, the plate data, the license plate text, the plate title, the material and colour being used, and a set of trace data. It's easy to understand and quick to read.</p><p>Let's find a bad example.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/laptop.png" class="kg-image"><figcaption>Police Laptop code.</figcaption></figure><p>Here, the name of the function (player has free laptop) doesn't match what the comment says it does (enforcing a player's laptop REP restriction), it takes me longer, as I have to check the code to see which is right.</p><p>This sort of thing makes it slower to develop, and easier to get things wrong.</p><h3 id="testing">Testing</h3><p>Not so much a problem in CityRP, but more with web development. Anyone who's paid attention to my discord's open source library channel has noted a lot of commits relating to testing. This is automated unit testing, to make sure the libraries works as intended, and that changes I make don't break stuff.</p><p>For example in the <a href="https://git.doctor-internet.dev/interphp/interdb/">PHP version of InterDB</a>, there's currently 5 test sets, running 21 tests with 31 checks, and that only covers 54% of the code.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/coverage.png" class="kg-image"><figcaption>Code Coverage report.</figcaption></figure><p>Compare that to Limelight services, where, as of writing, none of our code is tested automatically. This means that changes can accidently break stuff, and if nobody notices, it might get pushed live.</p><p>Yikes.</p><h3 id="old-code">Old Code</h3><p>While old code isn't bad in itself, it's often a product of the time it was written. Code can be slower, use features that have been / are being removed, or just extremely unclean. Again, as I keep saying, it makes development today slower, in exchange for getting it working in the past.</p><h2 id="what-are-we-doing">What are we doing?</h2><p>Quite a bit. New <a href="https://limelightgaming.net/docs/LSD-1.pdf">Style Guides</a>, requirements to document code, testing requirements. Training developers to recognise poor practices, and rectify them.</p>]]></content:encoded></item><item><title><![CDATA[HR Blog #1 - It's time for some activity!]]></title><description><![CDATA[So you've probably noticed the changes we announced a little while ago in regards to the new activity policies we announced for moderators and administrators. We figured it'd probably be best to give a little detail rather than just throwing it down and leaving it at that...]]></description><link>https://blog.limelightgaming.info/hr-blog-1-its-time-for-some-activity/</link><guid isPermaLink="false">5da1cb71df40c700010d0e8d</guid><category><![CDATA[Human Resources]]></category><dc:creator><![CDATA[Night]]></dc:creator><pubDate>Sat, 12 Oct 2019 14:14:03 GMT</pubDate><content:encoded><![CDATA[<p>So you've probably noticed the changes we announced a little while ago in regards to the new activity policies we announced for moderators and administrators. We figured it'd probably be best to give a little detail rather than just throwing it down and leaving it at that.</p><p>As you've probably noticed, there's a few staff on the team who aren't really around as much. This isn't necessarily their own fault, as this can be because they might be dealing with personal issues, burn out, college, school work or they might even be on holiday. Up until now, we've been quite generous with members of staff and their activity, but it's time to change. We want to have a staff team that actively engages with our players, that knows what happens on the servers as well as what happens within the community. If you're only visiting the forums once a week for 5 minutes, that doesn't always tell you what's going on, and with administrators especially who are expected to vote on topics that directly influence the shape of the server, it's difficult to vote without being around to know what shape the server is in to start with.</p><p>Before this policy change came into effect, we only had one requirement to activity. As long as you met the quota of hours per month that we laid out, you would be fine however we didn't have many ways to enforce this properly and as a result, a lot of staff members slipped under the radar when they went inactive, so eventually it just became a waiting game for that member of staff to become too inactive that they were eventually demoted after warnings, and whilst that wasn't a horribly bad system, it definitely needed work, so when I joined the SA team, amongst advice from other administrators telling me that this was a problem that needed a solution, I discussed this with the other SA-HR, @Overlewd, and after a while of planning it out, we made the policies we have today!</p><h2 id="but-night-what-are-these-policies-">But Night, what are these policies?!</h2><p>Good question! These policies differ for administrators and moderators. We'll start with the policy for moderators since that's the easiest one there is.</p><blockquote><em>Following the three strike system, a moderator should aim to get <strong>20 hours</strong> per month on the server. Failing this, a strike will be issued. If three strikes are issued, then the moderator will be immediately demoted to veteran (assuming they're senior moderator). A strike can expire assuming the moderator is able to meet activity requirements for 2 consecutive months.</em></blockquote><blockquote><em>If a moderator warns us ahead of time that they aren't able to meet the activity requirement, assuming that the reason is fair and isn't repetitive, the strike for that month will not be issued however this won't count as a consecutive month towards expiring a strike.</em></blockquote><p>For administrators, the policy is the same wording as above, except with their additional duties kept in mind as well:</p><blockquote><em>An administrator should aim to achieve <strong>60%</strong> of all monthly staff review polls voted on. This follows the same three strike rule, however instead of immediate demotion to veteran, the administrator would be demoted to senior moderator. These strikes are separate from activity strikes, and expire in the same fashion as well. . Exceptions to this policy can be made by HR, however since it's not difficult to vote on staff review polls, this will be kept in mind when determining whether a reason is valid or not to count as an exception. Any member of staff demoted by this policy is able to reapply to their position after a cooldown. If they're successful in reapplying to the role, they'll return with 2 strikes (either activity or staff review, whichever they were demoted for) to prevent the situation from repeating itself.</em></blockquote><h2 id="but-night-what-about-the-administrators-who-have-other-positions-in-the-community">But Night, what about the administrators who have other positions in the community?</h2><p>If an administrator is spending a lot of time outside of the game in their role, this would naturally be taken into account when deciding whether they've done enough work in that role to compensate for the missing hours. For example, if I've spent 4 hours or so organising events, doing graphical design and writing threads, in order for me not to receive a strike for that month, I would need 16 hours in-game.</p><h2 id="what-about-the-superadmins-and-even-the-owner">What about the superadmins and even the owner?</h2><p>Seeing how our responsibilities, for the most part, lie outside of the game, we're not included in the scope of either policy. We'll aim to meet the requirements where we can but we can't gain strikes through this system.</p><h2 id="are-developers-included">Are developers included?</h2><p>Yes and no. Developers who are <em>only </em>developers aren't included in the scope of this as it would be down to Dev Management for them to handle, but Developers who also hold either moderator/administrator privileges are included in that yes, but would be placed to developer only.</p><h2 id="how-do-hr-keep-track-of-this-surely-it-must-be-difficult-">How do HR keep track of this? Surely it must be difficult...</h2><p>We already post end of month recaps to both the moderators and the administrators, with a breakdown of which staff member has done the most player reports, hours in-game, posts on the forum and all sorts. Using these statistics (as well as a wonderful little table made by @Doctor Internet), we're able to keep track of staff members who don't meet the requirement. Look how nice it is!</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/bys2OvJ.png" class="kg-image"><figcaption>Top 5 members of staff for last month. Pssh, Decay slacking with only 43%...</figcaption></figure><h2 id="what-if-someone-s-really-struggling-can-hr-help-them-at-all">What if someone's really struggling? Can HR help them at all?</h2><p>Of course we can! We have complete discretion over the two policies. It's in our interest to work with the staff member rather than trying to shove them out because staff members can be difficult to replace, especially as you end up higher in the team. We can grant exceptions to people if the reason is good enough, although this exception will almost always be an exception for the current month rather than on a continuous basis unless there's extenuating circumstances.</p><h2 id="is-it-just-superadmins-and-the-owner-who-are-immune-to-this-policy">Is it just superadmins and the owner who are immune to this policy?</h2><p>No. There's currently two other people who are immune to this policy, @Burnett and @Doctor Internet because these two are critical to Limelight both as a business and a community. Burnett helps to maintain our security infrastructure and ensure that services are secure, as a result he needs the access to look after them and that means he's best placed as an administrator. Doctor Internet, as you're likely aware by his development blog posts and his dedication to his role in developer management, helps coordinate our development efforts alongside @Faustie, as well as helping to maintain critical Limelight services and infrastructure as well. Whilst they're immune from this policy, they're both expected to try and achieve the requirements where they can but they won't accumulate strikes either.</p><h2 id="what-do-hr-aim-to-achieve-by-putting-these-policies-in-place-is-it-not-just-words">What do HR aim to achieve by putting these policies in place? Is it not just words?</h2><p>You're right. It is just words for now, but these words give us strength to address the issue of activity much better than how it was before when this policy didn't exist. You'll see these words slowly turn into actions in a few months time, where we're then given the means to address the staff members who aren't meeting what's expected of them. This should in turn help to increase the staff presence on both the server and the forum, engaging with our community and being aware of what's happening.</p><h2 id="conclusion"><strong>Conclusion</strong></h2><p>So I hope that's provided a nice insight into how our new activity policies work. I guess only time will tell whether this move was good or bad, but we'll cross that bridge when we come to it. Here's to the first HR blog of (hopefully) many. As always, if you've got any questions, feel free to shoot Overlewd or myself a message and we'll try our best to answer them. Peace out, take care all.</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #6 - Refunds, Replacements and Corrections. The secret life of ItemIDs.]]></title><description><![CDATA[You may have noticed we've had to take the servers down for a bit, run some magic, then go back up.This can take hours or it can take minutes. But the question is, what does it have to do with the bind generator? This, is the secret life of ItemIDs.]]></description><link>https://blog.limelightgaming.info/dev-blog-6/</link><guid isPermaLink="false">5da1b8f9df40c700010d0e20</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Wed, 09 Oct 2019 16:40:00 GMT</pubDate><content:encoded><![CDATA[<p>You may have noticed we've had to take the servers down for a bit, run some magic, then go back up.<br>This can take hours, as we saw with the <a href="https://limelightgaming.net/forums/thread-25917.html">Accessories and Suit Price Changes</a>, or it can take minutes, as we saw with <a href="https://discordapp.com/channels/377812809326788610/377812809326788612/631462862350581760">today's maintenance</a>.<br>But the question is, what are we doing, why is the time so variable, and how does it relate to the <a href="https://limelightgaming.net/services/binds/">Bind Generator</a>?<br>This, is the secret life of ItemIDs.</p><h2 id="what-are-item-ids">What are Item IDs?</h2><p>It's simple, item IDs (technically know as "unique IDs") are a way for the gamemode to say which item is which.<br>Why not just use names? Names can overlap (Think how both the Undercover and Civilian Dodge Charger have the same name), names can have spaces, names can be super long and hard to type.<br>Item IDs, on the other hand, are fairly short, simple, have no spaces, and are to the point.</p><p>For example, Closed Suit 'Charles Bishop' with Overcoat? That's a long name. It's ID? trenchcoat_08. Nice and simple.<br>It's used by the inventory command, the item use functions, the F1 menu. It's how the game talks about items.<br>That's why generated commands from the keybind generator use those IDs.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/piano.png" class="kg-image"><figcaption>F's in chat for pianos?</figcaption></figure><h2 id="so-now-we-know-what-they-are-and-why-they-re-important-what-are-the-issues">So, now we know what they are and why they're important, what are the issues?</h2><p>Well, there's one big issue. They're really hard to change.<br>You make a mistake, and set a Burger to have the Unique ID "Bruger"? Unless you catch it before it goes live, you've not got a chance.<br>The moment someone buys a burger and has it in their inventory, it's saved in the database, you can't just rename it.<br><br>You could issue refunds, but that means turning the servers off, and going through each person's items.<br>You could make a new item, and quietly turn off the old one, but then people lose stuff.<br>Or, you could make a new item, and set the old one to be replaced by the new one. When people join, the game quietly turns the old item into the new one. But people don't always join, so that old ID is still there.<br><br>And, if you want a new item, that ID can't be used, as people still have it. It's difficult.<br><br>Combine this with the fact that <em>some</em> functions are case insensitive (an issue that caused the market to not show a type of ammo).<br>Well, it's all pretty yikes. Lots of small issues that combine into bigger ones.</p><h2 id="corrections">Corrections</h2><p>So, how do we do corrections? Glad you asked.<br><br>It's pretty easy, let's grab the code that defines a hat.</p><pre><code class="language-lua">BASE:Clone()
    :SetName("Grey Cs Baseball Hat")
    :SetSkin(2, true)
    :Register("baseballhat2_3")
ITEM:Replacement("baseballhat2_3", "baseballhat07_3")</code></pre><p>BASE is the baseball cap item, which has the stuff that's the same. The model, the description, the price.<br>ITEM is a table which has all our functions in it.<br></p><p>So, part 1, we make the real item. baseballhat2_3 is a real item that works.<br>Then, ITEM:Replacement() clones that item, making an identical copy (same price, same description).<br>It marks it as replaced by the real item, makes it unbuyable and makes it so using it gives you the real item (back in the day, it wouldn't auto-replace, so that's so people could get the new item))<br>Finally, it takes that copy, and says to the game "this is the old item".</p><p>Two items, one old, one new, and when people log in, it replaces.<br>Pretty cool.</p><p>But, that only works when people connect. If people have old items and don't join for a while, they keep them. We'll solve that later.</p><h2 id="replacements">Replacements</h2><p>Honestly, this is the same as corrections, but we use a different item. (Also the example uses older item definitions, but it does the same thing.)</p><pre><code class="language-lua">local ITEM = {}
ITEM.name = "Toyota Supra"
ITEM.cost = 190000
ITEM.model = "models/supra.mdl"
ITEM.plural = "Toyota Supra"
ITEM.uniqueID = "supra"
ITEM.description = "A tuned car with a fast nitro gas system. This item is 0 big"
ITEM.vehiclelist = "Supra"
ITEM.category = "Vehicles"
ITEM.replaced = true
ITEM.replacedid = "corvette_c7_stingray_2014"

cityrp.item.register(ITEM, "base_vehicle")</code></pre><h2 id="refunds">Refunds</h2><p>Uh, refunds. Well.<br>Three ways.<br><br>Set item.outdated (I think it's outdated anyway), then that adds the sell button for a full refund.<br>We take the server down, find anyone with the item, and give them money.<br>Or, we create a "refund cheque" item, that's worth however much, and use the replacement technique to give everyone cheques (useful if there's multiple items).<br><br>#1 and #3 have the same issues, they're manual.<br>#2 can take a long time. But, we have a tool for it.</p><h3 id="the-mass-refund-service-">The Mass Refund Service.</h3><p>In a secure section of the website, is the mass refund service.<br>It runs a script in PHP, gets every player, their inventory, scans through, checks against a list, and issues refunds.<br>But, it's running on a website, with limited resources, and makes a huge webpage. It's slow, and last time I used it, it crashed my Chrome.<br>Two hours of downtime, and no way of checking what actually happened? That's not good enough.</p><h3 id="the-mass-refund-tool-">The Mass Refund Tool.</h3><p>So, instead of that, I wrote another PHP tool.<br>A <a href="https://en.wikipedia.org/wiki/Command-line_interface">CLI</a> tool, thats quick and versatile, and does a bunch more stuff than just refunds.</p><p>You want a list of all items on beta, where less than 30 are owned, but have a total value of more than $100k?</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/refund.png" class="kg-image"><figcaption>Mass Refund Tool, fetching beta items with less than 30 owned but value of more than 100k$</figcaption></figure><p>Boom, there it is.</p><p>Now, when I say quick, <em>how quick</em>?<br>To give you an idea, the service took 2 hours for the last set of DB changes we ran. The tool did it in 10 minutes.</p><p>But, more than that, the service was very simple. It took a list of IDs and a money amount, and would take any of those IDs and give money back.<br>It worked, but only really for refunds.<br><br>What can the new one do? It can, refund items to money, convert items to other items, convert items to multiple items, or do combinations of all of that.<br>People had an old car, and you want to give them a new model? Easy.</p><pre><code class="language-json">{
    "ferrari": "spider",
    "mclaren_p1": "mclaren_2014_p1",
    "mustang": "1970_ford_mustang_boss_429",
    "volvo": "volvos60"
}</code></pre><p>Want to refund anyone who had charged taser cell schematics?</p><pre><code class="language-json">{
    "sch_charged_cell": 30000
}</code></pre><p>You want to give anyone who had a GMC Savana News Van 5k and a regular GMC Savana? Not a problem.</p><pre><code class="language-json">{
    "gmcsavana_news": {
        "money": 5000,
        "gmcsavana": 1
    }
}</code></pre><p>Now, what else is nice. Imagine you wanted to refund everyone who had a GMC Savana.</p><p>You could run both the refunds for the News van first, then a refund for the Savana, but the tool handles that for you.</p><pre><code class="language-json">{
    "gmcsavana_news": {
        "money": 5000,
        "gmcsavana": 1
    },
    "gmcsavana": 60000
}</code></pre><p>Anyone who had a Savana gets 60k, anyone who had a Savana News gets 65k.</p><h2 id="so-what-did-we-do-this-morning">So, what did we do this morning?</h2><p>Well, I went over the list of replaced items, more than 100 of them, and set the refund tool to process them.<br>And it took 5 minutes.</p><p>Specifically, we:</p><ul><li>Fixed some non-existent beanies.</li><li>Removed accessories which never existed.</li><li>Replaced the BMW GTR with the Nissan GTR.</li><li>Replaced the old Ferrari, Volvo, P1, Kamaz, Mustang, Police Charger, Tow Truck with their current IDs.</li><li>Replaced all the old fire engines with the current one.</li><li>Fixed the old GMC Savanah.</li><li>Replaced the old GMC Savanah News with the GMC Savana &amp; a 5k refund (as the News van was more expensive).</li><li>Replaced the old Secret Service Suburban and Fire Suburban.</li><li>Replaced the 3 old sign IDs with the current one.</li><li>Removed a bunch of beta items.</li><li>Replaced the HL2 axe with the woodcutters axe.</li><li>Merged Quad Mag / BetaC Mods, both are replaced by the extended mag kit.</li><li>Fixed there being like 3 versions of each ammotype.</li><li>Replaced all goldfish with salmon, all fish with rotten food.</li><li>Fixed the Burger unique ID.</li><li>Replaced the old fishing rod with the new one.</li><li>Changed the turkey dinner unique ID (as it was still christmas dinner).</li><li>Old Gov/Police caps.</li><li>Some really really old suits.</li><li>Processed fully the response clothing, dodge monaco police, pepper spray, package, christmas cracker, 5.45x39mm and charged cell refunds.</li></ul><p>Then, deleted all the replacements / old items.<br>Saving DB space, as we don't have items in inventories that can't be used.<br>Saving game code space, as we don't have items there.<br>Freeing up new IDs if we ever need them.<br>And finally, letting people use items that were stored in their inventory.</p><h2 id="so-finally-">So finally.</h2><p>Hopefully this has been insightful, if a bit rambly, on item IDs, our refund tools, item files and more.<br>I hope y'all have a good day.</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #5 - Development Feedback]]></title><description><![CDATA[So, if you've been looking on that top scrolling notification bar, you'll have seen that we had a development feedback survey. It's time to get back in and analyse the results. Thank you to the over 200 people that responded.]]></description><link>https://blog.limelightgaming.info/dev-blog-5-development-feedback/</link><guid isPermaLink="false">5da1b3c3df40c700010d0d8b</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Fri, 08 Feb 2019 12:48:00 GMT</pubDate><content:encoded><![CDATA[<p>So, if you've been looking on that top scrolling notification bar, you'll have seen that we had a development feedback survey. It's time to get back in and analyse the results. Thank you to the over 200 people that responded.</p><h2 id="part-1-graphs">Part 1 - Graphs</h2><p>Graphs are nice and easy. Nibble sized chunks of data, for getting small overviews of large data sets.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/roadmap.png" class="kg-image"><figcaption>Are you aware of the development roadmap?</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/rep-rewards.png" class="kg-image"><figcaption>Are you aware of the available REP rewards?</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/dev-blogs.png" class="kg-image"><figcaption>Are you aware of the development blogs?</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/changelogs.png" class="kg-image"><figcaption>Are you aware of the changelogs?</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/communicate.png" class="kg-image"><figcaption>Do you feel as though you can communicate with the development team?</figcaption></figure><p>So let's break this down nicely.<br><br>Numero uno. The roadmap. It's good, most people know about it.<br>Dos. REP Rewards. Less people knew, but still the vast majority.<br>Tres. Dev Blogs. Again, less people knew, but still a majority.<br>Four. Changelogs. People know. Not many read. :(</p><p>Now, the big hitter. Communication. Obviously, we need to do better here, and I can see why. It can seem like the only way to talk to dev is through suggestions. Whilst we are bound to suggestions, both myself and Faustie are willing to talk to people, take in viewpoints and explain why certain choices were made. If you have an idea about how to open up new channels of communication, please let us know.</p><h2 id="part-2-long-form">Part 2 - Long Form</h2><p>As well as graphs, we had some longer form questions, so it's time to look through some of the responses there.</p><h3 id="2a-are-you-satisfied-with-development-blog-content">2a - Are you satisfied with development blog content?</h3><blockquote>The developers can sometimes seem lazy, only releasing (to us) useless document updates in the changelogs, or meaningless blabbers of code. Limelight needs real updates and for the developers to be working on the game itself rather than making everything look pretty.</blockquote><p>Whilst this isn't anything to do with dev blog content, it's interesting. Let's look into it a bit more.<br><br>As I've said before, the changelogs are there to record the work we do, and let the community know what we're doing. The added documentation is there to pay back some of the technical debt from over 10 years of amateur coding, repeated over-patching and lack of any standards. If that's what I'm doing, then that's what gets logged.<br><br>That being said, I can see why it would be annoying, seeing documentation updates instead of anything you can physically do. You can check the roadmap, see what's also being worked on (as it's not always worked on in public). We don't want to totally hide everything we do.</p><blockquote>Not really, seems like another place LL can promise updates but never deliver, reminds me of Theresa May. What happened to the Evobank? - BREXIT</blockquote><p>Nice meme.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/memes.png" class="kg-image"><figcaption>Dev blogs, and the status of the topics they talk about.</figcaption></figure><p>Everything we've released a dev blog on has been released. I see no undelivered promises there?<br>And where's EvoBank? The developer who was working on it resigned. We can't really control resignations.</p><blockquote>No, Its massive lack of updates even though the developer team is big. the suggestions being approved should be a priority for the develepors.</blockquote><p>Again, not about dev blogs...<br>But still, we are working on approved suggestions. Nearly 37 pages of them.</p><blockquote>No, lack of updates. That big development team but only 1 guy doing the work. What a shame</blockquote><p>Again, this isn't to do with the dev blogs. Seems that people misunderstood the question, which is a shame.<br>To answer it anyway, lots of people code and do work. @<a href="https://limelightgaming.net/forums/user-2555.html"><strong>Bambo</strong></a> works his ass off with the forums. Other people work behind the scenes, on larger projects. I tend to work on smaller ones. Different people doing different things is pretty fair, I think.</p><blockquote>Fuck u</blockquote><p>ur house or mine bb?</p><h3 id="2b-further-questions-comments">2b - Further Questions/Comments</h3><blockquote>More devblogs would be great.</blockquote><p>Pushing out devblogs is hard. They have to be written, not just another place to "promise updates but never deliver", but also be on topics people are interested to learn about.</p><blockquote>instead of making an useless Rep Tree and thins like that better improve the server or add atleast useful content on the Server which actually changes the Gameplay but better just Improve it so you have no ping lag and atleast 30-40FPS constantly, don't say "Oh no, that's impossible" Many other and BIGGER servers with more/same amount of content somehow can do it.</blockquote><p>Woah Cowboy, hold up the rodeo.<br><br>Firstly, the REP tree was made by a pure web developer. Someone who doesn't code in lua, and doesn't have the access to make lua changes. The alternative is them sitting there, with their thumbs up their butt.<br><br>Secondly, ping lag was basically nullified at higher player-counts by our networking module, and we're working on optimisation through our optimisation project. Take a look at <a href="https://blog.limelightgaming.info/dev-blog-2-optimisation/">dev blog 2</a> for more info about that.</p><blockquote>Why does it take so long to implement such a small suggestion that has been out there since 2016, like adding a few props or 1 swep.</blockquote><p>It can be that it's just a low priority. For the vast majority of suggestions, this is the reality.<br>Some require changes to content, which take <em>days</em> to do.<br>Some don't fall within current planning.<br>Sometimes, we just miss them. There are a lot of suggestions.<br><br>There are many reasons, and those are just some of them.</p><blockquote>No, instead its a statement. The Development Team work hard, and there hard work is greatly appreciated by the community. And I am 99% sure everyone else will agree with this, although there may not be a "public update" released we all know you are working on making the community better. Keep up the good work.</blockquote><p>Thank you.</p><blockquote>When a suggestion goes into staff review, would it be possible we see developer's thoughts about the suggestion?</blockquote><p>It depends. If it gets denied, you see them anyway. If it gets approved, it doesn't really matter.</p><blockquote>Over the past year it may seem like we have lost more features then we gained. Cruical elements like Atmos or Vcmod (understandibly) got removed. I do understand that there was pretty much no choice in doing so. But therefore we also lost imortant elements of rp imersion. Back in our early days Limelights selling point (so to speak) was its variety of imersive ingame content [atmos, photon, those "new" tdm cars, evo city radio etc. Its more then understandable that some of those things have been taken out but i am hoping there is some way to replace them in the nearer feature. Since we cant pump out cars endlessly other content will have to catch peoples attention. Therefore the ehnaced crafting system as well as the skill system will be a cruical step forward. Putting out a roadmap is also a well thought out decision as this way our people can get excited for whats to come.<br>What i personaly would love to see (also i dont deem it to be too nescessary), would be more instruments, a return of the rt screen, a cooking system (as a part of the crafting and skills system) and perhaps some more immersive misc content as this never stopped to amaze people. But i understand that we are pretty much going that direction already.</blockquote><p>For sure, I agree with a lot of this.<br><br>That being said, it's a difficult balancing game, new content vs improving connectivity between content vs fixing issues in old content vs updating old content.<br>Really heavy systems that people want, ie Photon, VCMod, Stormfox vs Optimisation.<br>New flashy systems, vs having detailed systems with solid interconnections between them.</p><blockquote>Doctor Internet Head of anything and everything fucking demote the twat</blockquote><p>I think I've seen this before somewhere.<br>Though, let's be fair. I only run the contributor program, so I'm not really the "head of anything and everything". I report to Faustie for my contributor/development duties, to HR for my administration and to Enzyme/Faustie for Business and Data Protection. I don't run everything myself.<br>Nice that you think so though &lt;3</p><blockquote>From the outside LL appears as though it has very little updates, the little updates that are released are made to be Huge updates when really all that's been done is added a few Cars....</blockquote><p>I hope this year has made a different for the updates released. We've done a lot of work, not just releasing a few cars.</p><blockquote>Doctor seems to be the only person whom has been truly active in development, while the voting system when down the pot. I only remember seeing two votes being voted upon, I believe its a good way of finding out the opinion of the whole community, including those whom don't use the forums.</blockquote><p>For myself being the only active one, that's not really true, plenty of developers are active, even if less so than myself. Some are active in other areas, such as Bambo, Burnett and Faustie.</p><p>For the voting system, it's a pain to set up, so is generally only used for larger votes. We could use it more, but it's a pain for us to use.</p><blockquote>Get a tutorial of every updates. (ex. Meth cooking since we don't have a gravity gun)</blockquote><p>Teachers and the guides sections.</p><blockquote>Pollux &gt; Doctor Internet at Development &lt;3</blockquote><p>gonna drop a big fat :doubt: on that one.</p><blockquote>It would have been nice if Dr. Internet did not remove me from his friends list after I have reported many bugs and did my best to help the development in giving feedback and ideas.</blockquote><p>I'm going to brutally honest. Anyone who sends me bug reports via steam or discord gets told the same thing. Post a bug report. If you kept doing that, that's most likely why you got removed.<br>If not, just drop me another invite. I clean out my steam friends every few months for people I don't talk to, I probs deleted you then.<br><br>Aside from that, I'm always up for more feedback and discussion. It's good for everyone.</p><blockquote>The theme in-game (health bar etc) should be changed back to normal</blockquote><p>What <em>is</em> "to normal"?</p><blockquote>Yes, what happend to the GTA 4 and GTAv limelight props packs? Can gamers ever see those prop packs come back?</blockquote><p>They're still there, in our content packs?</p><p></p><p>In the end, I hope this has answered some questions, and given some more insight into what we do, and why we do it.</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #4 - /drop exploit, a post mortem.]]></title><description><![CDATA[When exploits happen, we fix them, but do we ever explain how they happened? The /drop exploit, a post mortem.]]></description><link>https://blog.limelightgaming.info/dev-blog-4-drop-exploit/</link><guid isPermaLink="false">5da1b2b9df40c700010d0d7e</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Wed, 28 Nov 2018 12:36:00 GMT</pubDate><content:encoded><![CDATA[<h2 id="how-were-we-alerted">How were we alerted?</h2><p>I was bored and checking various automated systems, and comparing them against stored logs. The system had flagged up some suspect accounts, where there was a difference between the items spawned with / picked up / bought, and the items that they had in their inventory on the next spawn. Looking into this further, I saw masses of weapon drops, a single weapon being used, followed by an inventory manager transaction, a weapon /drop, and the weapons being picked back up. So myself and Nightmare hopped on staging, started testing, and I started looking through the inventory manager, item drop and weapon drop codes.</p><h2 id="how-did-the-exploit-work">How did the exploit work?</h2><p>The exploit worked by using the interaction between two unrelated systems, the inventory manager and the /drop command. When dropping weapons from the inventory, if you drop <em>all</em> the weapons in your inventory, you automatically de-equip the weapon you're holding too. The inventory manager doesn't do that, however. This meant you could have no weapons in your inventory, but still have one equipped in your hand. /drop didn't care about that, it would always create a weapon item anyway. So, as long as an exploiter had a friend they could get their other weapon back from, they could repeatedly do this (albeit only with single weapons, and each round could take up to 60 seconds).</p><p>However, the inventory manager was only a single method of being able to exploit this. Administrators could have used it by spawning weapons from the Q menu (though I found no evidence of this), or if players have had items removed with the item take command, this condition could also have been present.</p><h2 id="has-it-been-fixed">Has it been fixed?</h2><p>No, I'm telling everyone how to do it because I specifically didn't patch it. /s<br>Yeah, it's been patched. And the fix was Q/A'd. I'm shocked.</p><h2 id="how-was-it-fixed">How was it fixed?</h2><p>/drop was patched. If the player doesn't have any of the selected weapons in their inventory, /drop acts as /holster.</p><h2 id="what-have-we-learnt">What have we learnt?</h2><p>Well,<br>1. Old code doesn't always do what you expect it to do when you integrate it with new systems.<br>2. We should always check for edge cases, even when other systems should prevent those edge cases.</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #2 - Optimisation]]></title><description><![CDATA[Optimisation is a complaint we get a lot of complaints about, from the community, from staff and from me; yet fixing it isn't as simple as flicking a switch.]]></description><link>https://blog.limelightgaming.info/dev-blog-2-optimisation/</link><guid isPermaLink="false">5da1ae56df40c700010d0d15</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[John Internet]]></dc:creator><pubDate>Fri, 16 Feb 2018 08:25:00 GMT</pubDate><media:content url="http://blog.limelightgaming.info/content/images/2019/10/graphs.png" medium="image"/><content:encoded><![CDATA[<img src="http://blog.limelightgaming.info/content/images/2019/10/graphs.png" alt="Dev Blog #2 - Optimisation"><p>This is the second dev blog. I can't promise a blog as riveting and easy to understand as @<a href="https://limelightgaming.net/forums/user-2242.html">Noble</a>'s <a href="https://limelightgaming.net/services/blog/?bid=1">Last Dev Blog</a>, though I'll try. Optimisation, it's a tricky topic.</p><h2 id="what-are-we-doing-and-where-are-we-going">What are we doing and where are we going?</h2><p>Optimisation is a complaint we get a lot of complaints about, from the community, from staff and from me; yet fixing it isn't as simple as flicking a switch.<br><br>We've put a lot of planning into ensuring that the optimisation we do is actually worth it, and improves things for you, rather than just chucking code into the window, and praying for an improvement.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/planning.png" class="kg-image" alt="Dev Blog #2 - Optimisation"><figcaption>The optimisation overview plan.</figcaption></figure><p><em>This is the initial planning overview document, and we're still only on stage 2!</em></p><p></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/data-collection.png" class="kg-image" alt="Dev Blog #2 - Optimisation"><figcaption>Collected data on current network and game performance.</figcaption></figure><h2 id="stage-1-data-collection">Stage 1 - Data Collection</h2><p>We've done a lot of data collection on the baseline, as you can see. We can move on from that, thankfully. There'll be more to do in time, but for now we can leave it.<br></p><h2 id="stage-2-networking">Stage 2 - Networking</h2><p>At higher populations, FPS can be bad, but normally it's not the worst. At higher populations, pings start shooting through the roof. We've already done some work with network optimisation in <a href="https://limelightgaming.net/services/changelogs/index.php?rev=5368">Revision 5368</a> but we still have more work to do. However, we've got pings down to an acceptable level, so we can focus more on client-side issues.</p><h2 id="stage-3-server-side-processing">Stage 3 - Server-side Processing</h2><p>Not a huge problem, but still can be an issue at higher populations, especially for things like driving. This is just slimming down the amount of stuff constantly running.</p><h2 id="stage-4-client-side-processing">Stage 4 - Client-side Processing</h2><p>Yeah, it's bad. Some systems can have frame-rates half on CityRP compared to other game-modes.</p><h2 id="how-to-optimise">How to Optimise?</h2><p>In general, resolving the issues we have is two-fold.<br><br>Firstly, we can reduce what we do. For example, instead of using heavy functions, we can use lighter approximations (these things don't need to be perfect, only good enough). This reduces the amount of work either you or the server have to do.<br><br>Secondly, we can reduce the number of times we do things. A light function becomes heavy if you use it 50,000,000 times a second. I can't really go into more detail, because it's always dependent on the individual bit of code being worked on. However, most of the times we can try and cut out useless or redundant loops, try not looping etc.</p><h2 id="why-was-this-never-done-before">Why was this never done before?</h2><p>It's difficult to say, because there's so many reasons.</p><p>Firstly, the history of CityRP has a lot to do with it.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/history.png" class="kg-image" alt="Dev Blog #2 - Optimisation"><figcaption>The History of CityRP.</figcaption></figure><p>We're so old, there's a lot of older bits of code which need to be removed, but haven't been yet.<br><br>Secondly, we've had some poorer development practices in the past. Most of our developers haven't come from software development backgrounds. For example, @<a href="https://limelightgaming.net/forums/user-2323.html">Faustie</a> is self-taught. This has led to things sometimes being suboptimal. However, we are working to bring everyone up to speed, to ensure that future code is optimised, and as I said before, we're going over and rectifying the past now.<br><br>That's optimisation, that's what we've done and what's happening.</p>]]></content:encoded></item><item><title><![CDATA[Dev Blog #1 - All About U and I.]]></title><description><![CDATA[Welcome to the first official dev blog I'Il be this evening's entertainment. Less of a boring lecture about technical magic and more like show and tell. You know, when that one kid would always have the coolest stuff to bring in and you just sat there jealous with a pet rock. Or was that just me?]]></description><link>https://blog.limelightgaming.info/dev-blog-1-all-about-u-and-i/</link><guid isPermaLink="false">5da1cc0edf40c700010d0e95</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[Noble]]></dc:creator><pubDate>Mon, 29 Jan 2018 08:23:00 GMT</pubDate><media:content url="http://blog.limelightgaming.info/content/images/2019/10/hud.gif" medium="image"/><content:encoded><![CDATA[<img src="http://blog.limelightgaming.info/content/images/2019/10/hud.gif" alt="Dev Blog #1 - All About U and I."><p>Editor's Note: Whilst we were moving everything from the forums to the blog, we saw that some of the images were missing from the post, so we're removing them from the post here. Sorry about that folks.</p><hr><p>Welcome to the first official Limelight development blog, I'll be this evening's entertainment. We're starting with a New Year's resolution to keep the community more informed as to what we have in store for future updates and changes to the gamemode. Think less of a boring lecture about the technical magic @<a href="https://limelightgaming.net/forums/user-2746.html"><strong>Doctor Internet</strong></a> performs to fix my screwups and more like show and tell when you were a kid. You know, when that one kid would always have the coolest stuff to bring in and you just sat there jealous with a pet rock. Or was that just me? Anyway the point is we want to give you small sampling of what we're working on and have you saying "Damn that's cool, now when can I play with it?"</p><p>For now there's no set schedule on these (you guys know how we are with schedules) but as soon as someone from development has something cool to show we'll be sure to get it here first.</p><h3 id="orange-you-glad-we-re-now-blue">Orange You Glad We're Now Blue?</h3><p>As many of you have noticed Limelight went through a bit of a color change the past week with some roughening up from the community. This was to be expected as orange had been the color of our community for quite some time but we felt it was time to grow and change a little. For now our forums have transitioned to steel before we begin our final departure to a new design. When will that be? We have no ETA as of now as we have a few other projects we'd like to complete before I'm released from my chains fully available to start on it.</p><p>The new branding we put into place was to ensure that going forward Limelight had a distinct, solid look to better guide our developers and media team when implementing it. We know some of you have your doubts still but we haven't given up on winning you over.</p><h2 id="the-u-and-i-of-user-interface">The U and I of User Interface</h2><p>For those of you who don't know I'm pretty handicapped when it comes to being able to implement content directly in-game. Most of my designing and coding usually had to be recreated by some poor soul as we've seen with the current HUD and F1 menu. Luckily @<a href="https://limelightgaming.net/forums/user-2243.html">Mathias</a> has a potential cure to allow me to be of better service to the team and, you know, not get fired. We won't go into the dirty details but the goal is to use web-based languages to allow me to directly create the front-end designs of our interfaces that can be easy moved to in-game..</p><p>TLDR; Interfaces will look prettier and take less time to develop, a major win-win.</p><p>Our first challenge has been to redesign the HUD so it stands out as a unique part of the gamemode. Something that's there when you really need it but still out of the way and not obstructing your view. This hasn't been the easiest issue to tackle and I've already trashed 5 prior designs before getting to where we are today.</p><p>There was a lot of heavy inspiration from games such as Destiny, The Division, and Arma to create a HUD that stands out from the common Gmod HUDs we've all seen before. It was important to build it in a modular sense so that when certain elements we're unneeded they could simply be hidden away. Don't have any props spawned? Then no need to display a prop limit counter. The same applies to armor (kevlar), oxygen levels, and flashlight battery. We feel the icons are fairly straightforward to what they represent and help us save valuable screen space by keep descriptor text off of it. And in case you were wondering, top bar is health and bottom bar is stamina.</p><p>A proper speedometer and detailed information about your vehicle was also something we knew had to be done in the new HUD as the current one was never finished. For that we knew we wanted to mirror the same design as the left and keep everything as minimal and on a needed basis only.</p><p>As you can see the design has been mirrored over for a digital speedometer and some important information about your vehicle. There is of course your fuel meter as well as a door locked/unlocked indicator and a red car icon appearing if your car is turned off with the /engineoff command. Replacing a heathbar for your vehicle is a check engine light that will turn on when your car's health is low. Just like real life you can sometimes drive some time with the light on, but it'd be best to get something like that checked out by a qualified mechanic.</p><h2 id="can-i-get-a-10-101-on-a-police-database">Can I get a 10-101 on a Police Database?</h2><p>We've heard the frustration over the current state of the police database and have made it one of our priorities to get finished as soon as we can. We've redesigned the database from the ground up (minus the case).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="http://blog.limelightgaming.info/content/images/2019/10/police-computer.gif" class="kg-image" alt="Dev Blog #1 - All About U and I."><figcaption><em>As you can see, I've had my fair share of run-ins with the law.</em></figcaption></figure><p>That's all I got for now! These are a few of the projects that I'm working heavily on and hope we've given the community a glimpse at how we're going about solving the issues that are important to you. Please note that everything above is subject to change (you know how these things are) but the general ideas and structures they're built around will very much stay the same.</p><p>Until next time, Noble out.<br></p>]]></content:encoded></item></channel></rss>