Jump to content

CS2 Project: Time tracking jucatori si admini (C# si Go)


Recommended Posts

Posted

Time tracking CS2

Anul trecut am fost in cautare de sisteme de time tracking de calitate pentru CS2 pana cand am ajuns sa dezvoltam propriul sistem din cauza limitarilor intalnite la solutiile comune adoptate de alte comunitati. Solutiile third-party sunt caracterizate de: performanta slaba, tipuri de date nepotrivite pentru database si lipsa statistici zilnice pentru fiecare jucatori. Platformele online precum GameTracker au fost de asemenea scoase din ecuatie din cauza tracking-ului inexact si din cauza faptului ca se bazeaza pe numele de pe Steam (case-sensitive). 

 

Proiectul FAIRSIDE Activity este scris in format multi-language: C# pentru servere si Go pentru offload task-uri care necesita intensive computing power (precum aplicatia de discord, automatizari externe etc.). Asta inseamna ca serverele de CS2 au parte de performanta maxima deoarece nu fac nimic altceva in afara de tracking one-time pentru fiecare jucator. Pluginul de CS2 scris in C# nu are timere, alocari inutile de memorie, operatii backend useless, reflection sau apeluri pe game-events resource-hungry.

 

Implementare SQL database

Am reusit sa configuram bazele de date pentru activitatea jucatorilor intr-un format incredibil de bun. Am ales tipurile de date potrivite, fara overflow sau underflow si fara oversize exagerat. Reusim astfel sa mentinem dimensiunea bazei de date la un stadiu redus. De asemenea, putem stoca continuu informatii timp de zeci/sute de ani, depasind lejer anul 2038 si problemele aferente despre care am vorbit in alte contexte.

  • 14 bytes per row la tabelul cu timpul zilnic
  • 20-147 bytes per row la tabelul cu timpul total

 

Liniile din tabelul cu timpul total pot fi mai mari deoarece exista mai multe campuri si numele de pe Steam e variabil. Utilizam PRIMARY KEYS (single and composite), FOREIGN KEYS si INDEX doar acolo unde este cazul. Pe langa asta, am aplicat optimizari interne pentru a obtine o performanta excelenta overall. Rezultatele obtinute pe baza benchmark-urilor ne-au intrecut toate asteptarile. Timpurile pentru CREATE, READ, UPDATE si DELETE sunt uimitoare comparativ cu orice alta solutie third-party testata pana acum, desi stocam timpul zilnic pentru fiecare jucator.

 

La migrarea pe noul sistem de time tracking a fost nevoie sa convertim informatiile jucatorilor din vechea baza de date pentru a le salva in noul format. Cum am procedat? Am scris in Go propria aplicatie de conversie a tipurilor de date SQL. Asta ne-a oferit control granular, reusind sa respectam complet exigentele comunitatii. In final, am dezactivat complet toate solutiile third-party pentru time tracking, punand toate serverele de fairside din 2024 pe solutia dezvoltata de FAIRSIDE.RO.

 

Mai multe informatii tehnice

  • There is a one-time call at CS2 server startup to purge data older than x days
  • Optimized for long-term storage and MySQL performance, exceeding all tested third-party solutions in CRUD benchmarks
  • Database compatibility could be narrowed down to SQLite only, if you had this requirement, although it's not recommended since you need the data for web-based dashboards, discord output or other integrations

 

Cum poate fi folosit proiectul

  • To check admins activity
  • To check overall statistics of any player
  • To check the overall statistics of the server for the last months
  • To check players activity before giving out admin access
  • To develop CS2 plugins based on current session or total time spent on the server
  • To develop discord bots, web panels and other types of software
  • Many more use cases could be taken advantage of, as we already have the data in a well-suited format

 

Cum migrati datele catre acest sistem?

O aplicatie custom a fost scrisa in Go cu error handling adecvat pentru a converti date in noul format SQL, asigurand integritate completa. In prezent software-ul de conversie suporta K4-System, dar pot fi adaugate si alte sisteme de ranking la cerere. Unealta de migrare ruleaza pe hardware AMD64 sau ARM64. Asta acopera:

  • common Linux distros on x64 or ARM64
  • Windows 10, 11 (AMD64 and Qualcomm ARM64)
  • MacOS (Intel and Apple Silicon ARM64 series)

 

Cum puteti manipula datele stocate?

  • In-game, by using our C#-powered plugin
  • On Discord, by using our Go-powered app
  • PLANNED: In the browser, by using a web-based dashboard for statistics
  • Anywhere you want to, with custom-made integration based on the database communication
  • Recommendation: for CS2 servers integration we would highly suggest using our C# plugins specifically designed for high-performance scenarios; consume less Internet bandwidth, computing power and RAM compared to any other solution tested up to this point, all while delivering the same results

 

Imbunatatiri viitoare

In prezent ne gandim sa construim un dashboard web-based pentru a imbunatati modul in care puteti manipula datele printr-o interfata grafica, avand in vedere faptul ca unii owneri de servere au cerut asta. Totusi, din moment ce utilizam aplicatia noastra scrisa in Go pentru discord output => acest aspect nu e tratat cu prioritate inalta. Deja avem acces usor la datele stocate pentru a obtine ceea ce dorim.

 

Screenshots

time-tracking-cs2-chat.png time-tracking-cs2-discord-player.png time-tracking-discord-admins.png time-tracking-cs2-discord-commands.png

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...