2574: Allow PaladiN skin to use custom colors r=def- a=d3fault
Hey @def- what png optimizer did you use? The ones I tried either didn't get the file as small as yours, or mucked up the transparency :(. Feel free to optimize and push to my branch (but I'm still kinda curious which one you used)
Co-authored-by: d3fault <d3fault@d3fault.net>
2572: Allow switching weak/strong with saving and loading r=def- a=Zwelf
Fixes#2529 by reverting to the old /load mechanic.
Co-authored-by: Zwelf <zwelf@strct.cc>
2567: Improve sqlite transfer script r=def- a=Zwelf
Good that I looked over the script again. Additionally fixed that the script tell the user to delete too much after finishing the transfer. To clarify: the backup database `ddnet-server.sqlite` shouldn't be deleted.
Solves #2565
Co-authored-by: Zwelf <zwelf@strct.cc>
2552: Flag afk when player timed-out r=def- a=ardadem
Timed out players kills entire team especially on t0 maps. So i just thought we can flag them as afk.
Co-authored-by: Arda Demir <ddmirarda@gmail.com>
2465: Sqlite3 support and prepared statements r=heinrich5991 a=Zwelf
This PR changes the abstraction layer of the score backend to thin abstractions over the MySQL and SQLite3 library. It executes all Queries in one worker thread making it easier to use the ddnet thread pool. This doesn't change much, because each the mysql-connection was locked with `m_SqlLock` beforehand, serializing writes and reads respectively.
Behavior change (even though I tried to minimize them):
* `sv_use_sql` is used to determine if mysql server should be added
* `sv_sql_failure_file` is replaced by `sv_sqlite_file`
* `sv_sqlite_file` is either used as a backup server when `sv_use_sql` is enabled or as the primary read+write server when `sv_use_sql` is disabled
* `/load` now escapes the like-string
Since I am not good at designing config file commands, I would appreciate feedback on this part.
WIP:
* [x] rewrite SQL statements to work in both MySQL and SQLite (preferable just ANSI-SQL)
* [x] create tables (`COLLATE BINARY` and encoding info)
* [x] store rank (UPSERT for points)
* [x] load birthday (different function in sqlite for time handling)
* [x] `/mapinfo` (`convert(? using utf8mb4) COLLATE utf8mb4_general_ci`)
* [x] `/map` (`convert(? using utf8mb4) COLLATE utf8mb4_general_ci`)
* [x] store teamrank (`GROUP_CONCAT`)
* [x] `/teamrank` (`GROUP_CONCAT`)
* [x] ~`/top5team` (`GROUP_CONCAT`)~ doesn't contain GROUP_CONCAT
* [x] `/times` (`UNIX_TIMESTAMP`)
* [x] `/load` without any arguments (`UNIX_TIMESTAMP`)
* [x] all commits compiling, making future bisect easier
* [x] write a sqlite_to_mysql script
* [x] write an old_file_server to sqlite script
* [x] gracefully shutdown DbPool
Co-authored-by: Zwelf <zwelf@strct.cc>