Releases: MinoMino/minqlx
v0.4.0
v0.3.1 - Small Hotfix
There was a small bug preventing plugin_manager
's !loadall
command from working that was fixed.
v0.3.0
NOTE: This release requires the latest plugins. Update your plugins by changing the directory to qlds/minqlx-plugins
and doing git pull
.
- Added boolean flags to the abstract database class and the Redis implementation. (by @carmethene)
- Changed
new_game
andmap
event to go off slightly later when changing maps to allow instantiating minqlx.Game without it throwing an exception due to configstring 0 not being set. - Added possibility to reference custom workshop items. This can be done by hooking
map
and doing for instanceself.game.steamworks_items += [workshop_id1, workshop_id2]
. Note that the server is not aware of the reference, so it can't be used to add maps and such while running, but it can be used to add custom sounds. - Added new event
userinfo
which passes the player and a dictionary containing the changes made to their current userinfo cvars (which can be accessed withplayer.cvars
). You can modify the dictionary and return it in the handler to modify the changes or add your own before passing it on to the engine. - Added setters for a lot of player cvars set using userinfo. For instance, it's now possible to do
player.handicap = 50
orplayer.country = "jp"
. Note that the client still believes it has the older cvars, so any change to a userinfo cvar by the client will try to revert the changes made server-side. To avoid this, hookuserinfo
and check for those changes. Seenames
plugin for an example. - Removed the net_port from
player.ip
. - Fixed a bug where modifying client commands in
client_command
event could cause the engine to process a gibberish string due to it being deallocated before use. Preemptively did the same fix to other events as well. - Made the minqlx map subtitles append instead of replace the map's subtitle to avoid overwriting map credits.
- Added
player.is_alive
property with a setter that allows killing and respawning a player. - Made it possible to use the special keyword
DEFAULT
in theqlx_plugins
list to load all the default plugins. Useful if you want to load default plugins and some other ones, but don't want to manually add new default ones. - Simplified version setting when compiling C module. Will no longer leave
common.h
dirty if you for instance were to interrupt it mid-compile. - Added branch name to versions.
- Made commands execute before the
chat
event instead of the other way around. This prevents plugins likeirc
andlog
from logging commands as if typed in chat that don't actually show up in-game. - Changed
minqlx.console_command()
to execute immediately instead of the next frame. - Added a way to redirect output from
minqlx.console_command()
to a channel.- Example:
with minqlx.redirect_print(channel): minqlx.console_command("echo Hello world!")
- Example:
- Added
player.channel
property that is aTellChannel
instance for that player. - Various smaller changes and bug fixes you can read about in commit messages.
v0.2.0
- Renamed
Player.state
toPlayer.connection_state
- Added
stats
attribute to Player containing some player stats in the form of a named tuple. - Added
state
attribute to Player containing information about the state of the player in the form of a named tuple. - Added
Vector3
struct sequence. - Added
velocity()
andposition()
methods to Player. - Added
armor
,health
, andnoclip
properties to Player, with setters. - Allow passing a custom name to
AbstractDummyPlayer
's constructor. - Added
weapons()
,weapon()
, andammo()
methods to Player. - Fixed
pyrestart
console command to not require a new game before pyminqlx works again. - Added
player_spawn
event and hookedClientSpawn
to make it work. Useful especially for setting weapons and ammo. - Added
callvote()
method to Plugin. - Added
holdable
property to Player, with a setter. - Added
powerups()
method to Player. - Added
flight()
method to Player. - Changed behavior of how it sends very long messages to be way more efficient and greatly reduce the chances of overflowing the command buffer and booting a player.
- Added
allow_single_player()
function to minqlx module to allow games to continue with less than two players. This can allow a race server to start a game with just one player. See thesolorace
plugin.
v0.1.2 - Potential Crash Fix
Fixed bug where I wasn't increasing the reference count of None when I should have, potentially causing it to try to deallocate None and crash. It's a pretty rare crash.
v0.1.1 - Critical Bug Fix
Fixed a bug that would cause the server to crash due to long unicode names getting truncated by QLDS, often creating invalid UTF-8 sequences. The invalid UTF-8 would make PyUnicode_FromString()
cause a segfault. Errors are now ignored, just like the font rendering in QL seems to do.
This should also fix some UnicodeDecodeError exceptions being thrown occasionally due to something similar happening with server commands or client commands.
v0.1.0
- Fixed a bug that would throw exceptions when people would type stuff prefixed with spaces.
- Removed reliance on configstrings for player info stuff to fix #13.
- Massive update to game structures.
- Small improvement to the hooking library.
- New event
console_print
added, and logging of console output to the log file. - Debug build no longer prints debug level logging to stdout/stderr.
- Fixed a bug where music could be played as a sound and vice versa. It would cause a mass disconnect.
- Fixed a rare bug caused by multiple consecutive delimiters in weird userinfos.
- Allow editing of client and server commands using their respective events, just like
set_configstring
works. - Fixed a bug where votes with
vote 2
would trigger thevote
event as if the player voted yes, when it really should be no. - Small optimization to minqlx.player_info() and minqlx.Plugin.player().
- Fixed a bug where kicks were not triggering
player_disconnect
due to using the original function instead of our own hook. - Changed logging behavior yet again. It now uses
logging.handlers.RotatingFileHandler
which will automatically make sure log files don't surpass a certain size and instead back them up and start on a fresh file when the threshold is hit.qlx_logs
andqlx_logsSize
cvars added to configure above logging behavior.
- Allow
player_disconnect
to get the player in question even if connection state is set toCS_FREE
. - Fixed a bug where getting player info in
player_connect
would allow anyCS_FREE
client to be fetched instead of just the client in question. minqlx.send_server_command()
and -minqlx.client_command()
now also trigger their respective events- Fixed a bug where the player voting wasn't being passed with the
vote
event.
v0.0.4a - Mostly just a hotfix
v0.0.4 introduced a nasty crash when a player would disconnect while in the loading screen caused by a stupid way of getting the client number. I've preemptively also fixed it in a couple of other places.
I also sneaked in a small change that adds a new event new_game
that goes off for map changes, game starts, and for aborts. This can be used to set configstring 3, since it's reset in all these cases, meaning map
alone won't do it.
v0.0.4
NOTE: This release requires the latest plugins (v0.0.3).
- Added new rcon command
qlx
that executes a command as if the owner did it. This makes it possible to interact with the Python part of minqlx over rcon. - Cvars to override permissions were prefixed with
qlx_
, and client command overriding cvar was renamed. They are notqlx_perm_<command>
andqlx_ccmd_perm_<command>
. team_switch
event changed behavior. It now fires off after an actual team switch and not just whenever someone tries to change teams. Cancelling the event puts the player back to the old team. Old behavior moved toteam_switch_attempt
.- The last
minqlx.log
is renamed tominqlx.log.bak
to make sure it doesn't get wiped if you run the server using supervisor or something similar. - Fixed
slap
andslay
commands having the whole announcement string colored if someone's name was colored. - Channels based on
ChatChannel
can passdelimiter
andlimit
keywords to prevent messed up output when replying with long messages with newlines. (e.g. !id and !mappool) - Attempt addressing #11 by changing to SV_DropClient instead of a ClientDisconnect hook for the
player_disconnect
event. A positive side-effect of this is that we now also get the reason for a disconnect, so the event was changed to pass that argument too. - pyminqlx initialization happens a bit earlier in the launch process.
- Added methods to stop sounds and music for all players.
- Added
names
plugin to the default plugin list.
v0.0.3
A small release to fix some bugs.
- Commands that execute two or more console commands in the same frame fixed (e.g. !switch).
- Fixed bug where changes to existing cvars using minqlx.set_cvar() were not working (e.g !teamsize).
- Made the player's name be fetched from the client_t structure's "name" field instead of userinfo or configstring to try to get rid of a rare bug where the name for some reason disappears.
- Cleaned C code a bit from old unused code.
- Fixed the run_server scripts not being executable by default.