Releases: openmultiplayer/server-beta-old
open.mp Server RC1
It's here!
It's finally here!
After four years, two rewrites, arguments and drama, and countless other hurdles; it is finally here!
Release Candidate 1 (RC1) of the open.mp server.
This, hopefully, represents the final version of the code for our 1.0 release, and if everything goes smoothly with this version we will be able to finally open the so-called open.mp in just a few days from now.
Before I get in to the meat of the release I want to first sincerely thank every member of the open.mp team for helping the mod get this far. It has not been easy, mostly because of how invested everyone truly was - we all wanted what was best for the mod, for the community, for SA:MP, for our servers, and for our players; we wouldn't have embarked on this journey if that wasn't the case. Unfortunately strong differing opinions on what is best sometimes causes friction. But we're here now. So to all, a huge thank you:
- Amir
- Cheaterman
- Freaksken
- Graber
- Hual
- Josh
- JustMichael
- kseny
- Nexius
- pkfin
- Potassium
- Southclaws
- TommyB
- Y_Less
- Zeex
- And probably more...
Anyway, now the bit you actually care about...
Now we're out of beta, we're (if all goes well this week) releasing on time. So along with the server itself, which you've seen a dozen times before, we have some new goodies for you:
Pawn
The download has the official includes, no more patching the old SA:MP includes with omp.inc
, now we're doing it properly! It also has a new compiler. Ever wonder when 3.10.11 was coming? Well wait no longer (if you built it yourself, you could think of this one as 3.10.12)! With this combination you'll probably get loads of new warnings, but worry not - we have a tool for that as well, to automatically upgrade a load of code, adding well-defined symbol names, const
, and more in all the right places. Maybe you already noticed this, you've been using it for months, but the virtual machine (the bit inside the server) has been updated as well! Oh, and all those string natives you know and love, like SendClientMessage
and AddMenuItem
? They all format now. All of them*.
A full list of what's available:
- Symbol length limit increased to 64, no more
OnPlyrDoTheTing
to try and fit your names in. Leading to... - Multiple natives decompressed - is
Col
short forColour
orCollision
? Now you know! - Tags. Tags everywhere. See the included documentation.
- The official includes are finally const-correct. No more complaining that some people might not have them.
- Compiler version updated:
__nameof
,__addressof
, fixes, and too many more things to go in to here. switch
is way faster.- More warnings for previously undetected issues. The more problems the compiler can find, the fewer you need to.
- An upgrader tool to add tags and
const
to user-code and fix several new warnings. - More consistent naming. Every native has been closely examined and compared to ensure the maximum level of similarity and intuitiveness in naming.
- Added
{Float, _}:...
everywhere. What does this mean? It means no moreformat()
** - think y_va but natively. -O2
, the highest pawn optimisation level, works when using the new compiler and VM. Some includes may need to be updated, but some already have. To help with that...- The
__optimisation
macro was added so code can configure itself when compiled with-O2
.
Documentation on the updated includes:
https://github.com/openmultiplayer/omp-stdlib
Documentation on the new compiler:
https://github.com/openmultiplayer/compiler/
https://github.com/pawn-lang/compiler/
Documentation on qawno:
https://github.com/openmultiplayer/qawno/
Documentation on the upgrader tool:
https://github.com/openmultiplayer/upgrade
* Almost all of them.
** Almost no more format()
.
SDK
Pawn is the long-standing, and still official, way to write modes for your server. It isn't going away, but for those of you who want more control we are finally releasing the full SDK (the Software Development Kit). This is a C++ interface to the server, the same one used by all the components that make up the core open.mp code. Anything they can do you can do too (compared to plugins, which were only designed to provide functions to pawn, not write modes).
We have some documentation under way, it takes time unfortunately. But in the meantime have several example components for those of you who want to get straight stuck in. These are all templates you can build upon, and go from basically nothing to a fully working component with most common features:
https://github.com/openmultiplayer/empty-template
https://github.com/openmultiplayer/basic-template
https://github.com/openmultiplayer/pawn-template
https://github.com/openmultiplayer/full-template
A few terms to get you started, so you can start to understand what it is that you're reading:
- Component - A logical individual piece of the server, like objects or pickups. Ones you don't need don't need to be loaded.
- Extension - Code that extends another bit of code. You can write component extensions, but the most common ones are player extensions, which define some structure of data to be associated with a player in addition to all their normal data like health and weapons.
- UID - Unique IDentifier, a number that represents your component, and your component alone. This ia always required and can be got here: http://open.mp/uid
- Entity - A thing, usually a thing a player can interact with, and which you might have a lot of. Objects are entities, but other players are also entities, even commands in a processor could be called entities.
- Pool - Something that holds entities. When you have a lot you need to be able to access them by name or ID in some way, this is what a pool does.
- Interface - Components use an abstract base class as an interface. This declares which methods a component has, but doesn't contain the code for the methods. Interfaces are passed around so that components can communicate with each other, but implementations are kept private.
- SDK - The collection of all the interfaces defined by the core server.
- ABI - An Application Binary Interface is the way compiled code talks to other compiled code. The interfaces exported by the SDK are ABI stable, which means that using two components compiled at different times will still work together.
- pawn-natives - The library on which all native declarations are built. Useing a wrapper called
SCRIPT_API
around this library: https://github.com/openmultiplayer/pawn-natives - Event - Something that happens externally. Things like players connecting and typing commands are events. Any component can define events and tell other components when those events happen.
- Handler - A component that wants to know when an event happens.
If you have questions, the best place is probably the brand new (revived) forums:
Features
Beside all the new features announced for pawn, there are several new (and newly announced) features in the server:
- Per-player gang zones, as were in YSF.
- Per-player pickups, also as in YSF.
AttachPlayerObjectToPlayer
.- Better PawnPlus support.
:memory:
, and other special names support in SQLite.- SQLite open flags.
exclude
config option to not load certain components.- Show config parse errors, don't just silently fail.
- SDK major version check, just in case we ever make major server changes (hopefully we won't).
Fixes
There were a few new bugs introduced in beta 11, and a few minor ones left over from before. The ones fixed include:
funcidx
already registered warning.- GDK plugins (streamer etc) missing natives.
- Random crash on GMX.
- GDK callbacks sometimes not called.
- No logging when requested in SQLite component.
- Some settings not reset on GMX.
- NPCs were connecting when there were a lot done at once.
.so
was still needed in Linux legacy plugin names.
Links
Firstly, the forums are back up. Head there for all your questions:
Or if you prefer:
Next, despite it being offered a few times, we have explicitly resisted any money up to this point; because we didn't feel it was right until we had proven ourselves with a release. With this post, that time is now, so if anyone wants to help support us (all donations will go towards infrastructure and future client dev work), it would be most appreciated:
https://www.patreon.com/open_mp
https://opencollective.com/openmultiplayer
And of course everything is still in active development, so please do check all the links above regularly to see what's new that we have.
open.mp server public beta build 11
Please wait for plugin maintainers to update their plugins
List of ported libraries to open.mp
Reported issues solved in beta build 11
New Natives:
native bool:IsPlayerUsingOfficialClient(playerid);
native bool:AllowPlayerTeleport(playerid, bool:allow);
native bool:IsPlayerTeleportAllowed(playerid);
native bool:AllowPlayerWeapons(playerid, bool:allow);
native bool:ArePlayerWeaponsAllowed(playerid);
native void:AllowAdminTeleport(bool:allow);
native bool:IsAdminTeleportAllowed();
native void:AllowInteriorWeapons(bool:allow);
native bool:AreInteriorWeaponsAllowed();
native bool:AreAllAnimationsEnabled();
native void:EnableAllAnimations(bool:enable);
Note: the list below only shows some of the notable issues we have fixed, alongside that there's always code and performance improvements
Full changelog including fixes and new changes:
- Fix
gmx
issues with clearing player pools - Throw a warning when NPC executable is not found by the given path from config
- Format improvements and better error managements
- Fix vehicles having trailers being respawned by keeping their positions
- Fix server crash when invalid model path is provided
- Fix server loading from path with non ASCII characters
- Add UTF-8 support in some places internally
- 1:1
GetNetworkStats
output - Add missing console commands to command list
- Pawn VM upgrade
- Prevent server crashes when invalid file handle is given, now we use internally tracked IDs
- Report warnings when trying to register an already registered native name
- Don't load modes when config has default RCON password
- Fix raknet "full server" exploit
- Provide a proper and better Pawn component SDK
- Split player events in SDK for sake of performance and future ABI stability proof
- Parse
--config
array options - Fix animation preloading for the player animation is applied to
- Throw an error (to stdout) when config.json is invalid
game.group_player_objects
, new config to determine whether to mix object IDs in the pool for global&per-player objects or not- Enable all game animations (previously
BLOWJOBS
andSNM
were disabled)
open.mp server public beta build 10 (hotfix)
PLEASE WAIT FOR PLUGIN MAINTAINERS TO UPDATE THEIR THIRD PARTY COMPONENTS TO SUPPORT BETA 9/10 OR THE SERVER WILL CRASH AND BURN
Reported issues solved in beta build 10
Full changelog including fixes and new changes:
- Fixed plugins which use std::filesystem crashing on Linux with static build
- Dynamic Linux build now statically links libstdc++ and only dynamically links libssl 1.1.1q
- Lowered Linux GLIBCXX version requirement to 3.4.11 (CentOS 6 and newer)
- Fixed 0.3dl models being cleared on gmx
open.mp server public beta build 9
PLEASE WAIT FOR PLUGIN MAINTAINERS TO UPDATE THEIR THIRD PARTY COMPONENTS OR THE SERVER WILL CRASH AND BURN
Reported issues solved in beta build 9
Full changelog including fixes and new changes:
-
Dynamic tick rate. Specify a target tickrate, rather than a fixed sleep time.
- Use the
tickrate
console command to set the rate. sleep
can now be a float to accomodate precise tick rates.
- Use the
-
More plugin compatibility - fsutil, Discord connector (only with non static build)
-
SetSpawnInfo
return fixed. -
Fix weather and time not resetting after GMX.
-
Fix various GMX bugs.
-
Fix various console commands.
-
Fix
GetPlayerClass
. -
Fix
GetVehicleLastDriver
. -
Add
GetVehicles
native. -
Add
GetPlayers
native. -
Add
GetActors
native. -
All lagcomp modes are now available through config.
-
Fix trailer sync.
-
Fix
GetVehicleLastDriver
. -
Fix
GetPlayerRotationQuat
. -
Fix crash in vehicle component.
-
Implemented all DL natives and callbacks (
AddSimpleModel
,AddSimpleModelTimed
,GetPlayerCustomSkin
,OnPlayerFinishedDownloading
,OnPlayerRequestDownload
):RedirectDownload
native andOnPlayerRequestDownload
callback are now deprecated in favour of CDN config options.
-
Add
artwork.cdn
config option to set a remote download address. -
Add
artwork.enable
(legacy:useartwork
) config option. -
Add
artwork.models_path
(legacy:artpath
) config option.- Server can load custom models from
artconfig.txt
file like SA:MP does.
- Server can load custom models from
-
0.3.7 compatibility is preserved and can be configured by
network.allow_037_clients
config option (true by default). -
open.mp server comes now with a built in webserver used to serve custom models
- Webserver is using open.mp server bind address and port. Please allow TCP connections on your port in firewall if you plan to use it.
- If your public IP address is different than bind address (ex: you're behind a router) you'll need to set it in
network.public_addr
config option.
Notes:
-
Due to few changes old config.json files may not work properly. Please use
./omp-server --default-config
to generate a new one -
server.cfg users are not affected.
-
While allowing 0.3.7 connections only 1000 objects can be created
-
open.mp server now provides two types of Linux builds, standard and static. You are encouraged to use the standard build if possible, it will minimize incompatibilities with various plugins; however, it will require openssl 1.1 installed on your system. If you can't install modern openssl on your system (typically if it's very old), you can use the static build, but some plugins or components might fail to load and crash the server.
open.mp server public beta build 8
Please wait for plugin maintainers to update their plugins
List of ported libraries to open.mp (Updated)
Reported issues solved in beta build 8
Note: the list below only shows some of the notable issues we have fixed, alongside that there's always code and performance improvements
Full changelog including fixes and new changes:
- Build for GNU ARMv7 and add binaries
- Fix TogglePlayerSpectating calling OnPlayerStateChange
- Fix an infinite loop in RakNet
- Some spectating sync validations
- Fix
chat_input_filter
config issue not being loaded - Sync validations for NaN values and infinite values
- Fix
GameTextFor(Player/All)f
- Fix SpawnPlayer when player is in vehicle
- Better warning message for
AttachPlayerObjectToPlayer
- Capping hostname, language, and gamemode text in query
- Add
ffind
,dfind
,ftouch
natives for files - Add rcon console command failure message
- Fix some of
gmx
bugs - Fix a crash causing with receiving broken camera mode
- Validation for class ids
- Fix menu columns count issue (causing creating wide menus)
- Fix an issue with components not being found in linux docker
- Fix GetConsoleVarAsInt/GetServerVarAsInt if variable type is bool
- Format negative maxlength check
- Fix
SetPlayerPos
when skin is applied to player while in vehicle - Fix random vehicle color issues
- Fix
chat_input_filter
config issue not being loaded - Fix detonator crasher
- Fix player data not being reset after server restart
- Reset player state when spectating ends
- Fix
SetSpawnInfo
used inOnPlayerRequestClass
open.mp server public beta build 7
List of ported libraries to open.mp
Reported issues solved in beta build 7
Full changelog including fixes and new changes:
Fix markers sync after SetPlayerMarkerForPlayer
use
Fix vehicle unoccupied sync when there are passengers
Fix passenger sync not updating player vehicle for some models
Fix SetPlayerSkin
breaking player animation while in vehicle
Fix unnecessary spectating state change calls
Fix OnGameModeExit
call order
Fix higher characters becoming negative
open.mp server public beta build 6
Please wait for plugin maintainers to update their plugins
List of ported libraries to open.mp (Updated)
Reported issues solved in beta build 6
PLEASE NOTE:
Old config.json files don't work any more create a new one using ./omp-server --dump-config
(creates a new config.json using your server.cfg
) or use ./omp-server --default-config
to generate a new one with default values
Don't worry you can still use your server.cfg
without any issue
Full changelog including fixes and new changes:
- New config structure (old config.json files don't work anymore) and new key names
- Remove
--write-config
and now introduce--dump-config
(generates config.json from your server.cfg) and--default-config
- Add new
Player3DTextLabel
natives - Fix TextDraws component name (shows while booting server)
- Fix an issue some people not being able to load GangZones.so component on linux
- Add tickrate count to
GetNetworkStats
- Fix packetloss percentage showing the wrong number in Network Stats natives
- Add
sleep
console command - Various sync validation and fixes when receiving data from clients
- Add YSF format functions (i.e:
SendClientMessagef
) - Fix formatting for packed strings
- Improvements in GangZones processing
- Fix gangzone event handler calls ordering
- Fix GangZoneShowForPlayer creating GangZone more than once when called multiple times
- Fix
NetStats_GetConnectedTime
- Fix
TextDrawSetPreviewRot
- Fix
PutPlayerInVehicle
telling server player is inside while they are not due to slow sync - Reset player's stored values on
gmx
- Fix spectating state bug showing spectator to player for some moment as AFK
- Reset player's controllable state on spawn
- Fix
DeletePVar
andDeleteSVar
- Add
GetRunningTimers
- Fix player team setting and getting, also update when needed
- Fix using SetPlayerTeam in OnPlayerRequestClass
- Add
worldtime
console command - Fix
CreateExplosion
for not sending correct type - Handle packets sent before player initialization, including
ID_RECEIVED_STATIC_DATA
&ID_NEW_INCOMING_CONNECTION
and custom ones - Port many fixes from fixes.inc
New natives:
native SendClientMessagef(playerid, color, const message[], {Float,_}:...);
native SendClientMessageToAllf(color, const message[], {Float,_}:...);
native GameTextForPlayerf(playerid, displaytime, style, const message[], {Float,_}:...);
native GameTextForAllf(displaytime, style, const message[], {Float,_}:...);
native SendPlayerMessageToPlayerf(playerid, senderid, const message[], {Float,_}:...);
native SendPlayerMessageToAllf(senderid, const message[], {Float,_}:...);
native SendRconCommandf(const command[], {Float,_}:...);
native GetRunningTimers();
native RemovePlayerWeapon(playerid, weaponid);
open.mp server public beta build 5
List of plugins ported to open.mp
Reported issues solved in beta build 5
Other changes which may not be listed above:
- Add per-player gangzones and new callbacks
- Fix
TextDrawSetStringForPlayer
- Fix
GetVehicleColor
andSetVehicleColor
- Fix player velocity having random values when not initialized
- Fix
GetPlayerAnimationIndex
, now returns 0 when player is not on foot - Fix version mismatch kick (now mods like SAMP Addon and CodsMP should work)
- Add missing server rules
- Fix
Kick
crash - Fix legacy config's filterscripts path
- Fix samp-npc path for windows (NOTE: if your automatically generated config has it as
./samp-npc.exe
remove./
from the beginning) - Many internal changes for improvements and more flexibility for plugin developers
New scripting api (natives and callbacks); available in here
// Gangzone - Global
native UseGangZoneCheck(zoneid, bool:toggle);
forward OnPlayerEnterGangZone(playerid, zoneid);
forward OnPlayerLeaveGangZone(playerid, zoneid);
forward OnPlayerClickGangZone(playerid, zoneid);
// Gangzone - Player
native CreatePlayerGangZone(playerid, Float:minx, Float:miny, Float:maxx, Float:maxy);
native PlayerGangZoneDestroy(playerid, zoneid);
native PlayerGangZoneShow(playerid, zoneid, color);
native PlayerGangZoneHide(playerid, zoneid);
native PlayerGangZoneFlash(playerid, zoneid, color);
native PlayerGangZoneStopFlash(playerid, zoneid);
native IsValidPlayerGangZone(playerid, zoneid);
native IsPlayerInPlayerGangZone(playerid, zoneid);
native IsPlayerGangZoneVisible(playerid, zoneid);
native PlayerGangZoneGetColor(playerid, zoneid);
native PlayerGangZoneGetFlashColor(playerid, zoneid);
native IsPlayerGangZoneFlashing(playerid, zoneid);
native PlayerGangZoneGetPos(playerid, zoneid, &Float:fMinX, &Float:fMinY, &Float:fMaxX, &Float:fMaxY);
native UsePlayerGangZoneCheck(playerid, zoneid, bool:use);
forward OnPlayerEnterPlayerGangZone(playerid, zoneid);
forward OnPlayerLeavePlayerGangZone(playerid, zoneid);
forward OnPlayerClickPlayerGangZone(playerid, zoneid);
open.mp server public beta build 4
List of plugins ported to open.mp
Reported issues solved in beta build 4
Other fixes that are not listed above:
- Fix a bug where sending an empty packet freezes the server
- Some changes in Menu SDK in sake of consistency and better naming
- Some changes in TextDraw SDK in sake of consistency and better naming
- Some changes in Class SDK in sake of consistency and better naming
- Change Pawn component events priority to the lowest
- Fix GetPlayerTargetActor
- Don't clear player data before calling OnPlayerDisconnect
- Add TextDrawSetStringForPlayer
- Disable rcon completely when rcon_password is empty
open.mp server public beta build 3
List of plugins ported to open.mp
Reported issues solved in beta build 3
Changelog:
- Make addSiren parameter optional in CreateVehicle to support old scripts with old samp includes
- Add GetWeaponSlot pawn native.
- Update host name internally to be used in scoreboard and on connect, when it's changed at runtime
- Create objects after player is fully connected
- Change respawn delay 0 behavior in CreateVehicle, now following how samp works
- Fix spawning samp-npc process on Linux
- Fix PutPlayerInVehicle seat
- Add HidePlayerDialog
- Hide dialog if ShowPlayerDialog is called with INVALID_DIALOG_ID as dialog ID
- Fix sending death message when killer ID is INVALID_PLAYER_ID
- Fix setCameraLookAt not working with CAMERA_MOVE
- Fix OnVehicleSirenStateChange
- Fix HTTP request type issue
- Rename GetVehiclePaintJob to GetVehiclePaintjob
- Fix rcon_password
- Fix a client crash when an invalid fighting style is set