Articles
Reference material on the technologies behind my projects.
- MoonLoader and Lua scripting for GTA: San AndreasWhat MoonLoader is, how Lua scripts for GTA: San Andreas and SA:MP work, how they differ from CLEO, which libraries are used and how to get started.
- ImGui in GTA: San Andreas – interfaces for Lua scriptsHow windowed interfaces in MoonLoader scripts work: what Dear ImGui and mimgui are, what window code looks like, and why a visual editor like ImGUI Editor helps.
- How to run SA:MP on LinuxHow to run GTA: San Andreas with SAMP 0.3.7, CLEO, SAMPFUNCS and MoonLoader on Ubuntu via PlayOnLinux and Wine 3.2: system setup, Wine settings, common font issues.
- How to format Lua codeA Lua style guide for MoonLoader scripts and open-source projects: quotes, snake_case, indentation, comments, tables, function calls, DRY. Based on the LuaRocks guide.
- How to run an SL:MP serverSetting up an SL:MP server on Windows or Linux: client and server requirements, the server.cfg fields, opening UDP port 7777 in the firewall and router, and connecting via the launcher.
- SL:MP vs SA:MP vs MTA: what's the differenceComparing three GTA: San Andreas multiplayers: which scripting languages SA:MP, MTA:SA and SL:MP use, where the code runs, source availability and who each one suits. Table and breakdown.
- UDP in Lua with LuaSocketWorking with UDP in Lua via LuaSocket: a non-blocking LuaJIT server, a MoonLoader client with wait(0), sendto and receivefrom, and handling packet loss and ordering. Code examples.
- How to install MoonLoader and SAMPFUNCSInstalling MoonLoader and SAMPFUNCS for GTA: San Andreas and SA:MP 0.3.7-R1: what to download, where the files go, how the moonloader folder is laid out and how to check the log.
- A SA:MP key binder in Lua: chat commands and RP linesHow to write a SA:MP binder on MoonLoader: a chat command, several RP lines with delays in lua_thread, $ID$, $NAME$ and $ARGS$ tags with string.gsub, and a key bind.
- Script settings in MoonLoader: inicfg and CP1251How to store Lua script settings for SA:MP: inicfg.load and inicfg.save, default values, the moonloader/config folder, CP1251 encoding and the encoding library for chat and ImGui.
- Deploying a Node.js app with pm2 and nginxStep-by-step Node.js deployment on a Linux server: installing Node, npm ci, running under pm2 with autostart, nginx as a reverse proxy, Express trust proxy, certbot HTTPS and 301 redirects.
- SEO for an Express site: server-side checklistServer-side SEO for Express: canonical host, trailing slash, real 404, ETag and Cache-Control, compression, canonical and hreflang, sitemap.xml, robots.txt, JSON-LD, llms.txt, IndexNow.