Commit Graph
88 Commits
Author SHA1 Message Date
peace-maker f7c54e9027 Fix silent error on large ArrayList startsize (#1705)
If there isn't enough memory to resize the ArrayList to the startsize on construction, throw an error instead of ignoring the OOM.

Fixes #1551
2022-01-31 22:07:32 +01:00
peace-maker 1c30b88069 Cache copy of library on first symbol/signature lookup (#1642)
Always perform signature searches on an unaltered copy of the binary. This avoids signature mismatches if the same function is detoured twice and thus the first bytes of the function were replaced by the detour.
2021-11-18 17:55:32 +01:00
Peace-Maker 9cb693d8a3 Ignore all build* folders in .gitignore
I frequently have one like `buildwin` and `buildlin` for the different OS in WSL.
2021-11-17 13:17:39 +01:00
Peace-Maker 896e92264f Use SourceMod's version number 2021-11-17 13:17:39 +01:00
Peace-Maker f32b210ec9 Print OS errors if mprotect fails
This helped catch a bug in DHooks before, so it's worth adding it in here as well.
2021-11-17 13:17:39 +01:00
Peace-Maker 8f7ecf66a4 Use JMP patching of CDetour 2021-11-17 13:17:39 +01:00
Peace-Maker 581068c09b Add copyright headers 2021-11-17 13:17:39 +01:00
Peace-Maker 0f5f1a814e Import DHooks + Dynamic Detouring
This is the latest DHooks version from https://github.com/peace-maker/DHooks2/tree/1314f2d1b4d870677a1b9f628c770f2799878f9b
2021-11-17 13:17:39 +01:00
peace-maker d192527707 Fix unpacking of GeoLite2 database (#1516)
Apparently you can't unpack and uncompress in one go in Windows and tar -C doesn't affect the input file.
2021-06-30 12:32:40 +01:00
peace-maker 845c20ad93 Start using Github Actions (#1488)
* Start using Github Actions

Build on windows and linux. Cannot build for macos,
since the builders only support xcode 10+ which dropped
x86 support.

* Build sourcepawn tooling as separate package

Upload build artifacts containing only spcomp and the includes.
This adds a new `--scripting-only` flag to configure.py which skips
everything and goes straight to building spcomp and packaging the
include folder with it.

* Only run the workflows for the master branch

* Split common operations into PackageHelpers file

Don't duplicate the code for packaging releases for the tooling-only packages. Instead use a common `PackageHelpers` class which provides the functionality common to both packages.

This replaces the explicit list of files to package with a directory scan, so we don't have to list them all.

The pgsql sql-init-scripts were missing from the release package before, so they were added here as well. Three scripts from the testsuite were missing from the explicit list (mapdisplayname, floats, findmap), so they're now included.

* Fix Python 2 compatibility

os.scandir is Python 3 only.
2021-05-09 01:46:08 +02:00
peace-maker 1fbe5e1daa A2S_Rules fix: Only change host_rules_show if patching was successful (#1459)
If lookup of the patch location failed, don't turn on responding to A2S_Rules queries. Otherwise we'll see the log getting spammed with too large packet sizes again. #1447
2021-04-19 09:33:36 +02:00
peace-makerandErik Minekus e5342afe2a Add PostgreSQL database driver (#32)
* Add PostgreSQL DBI extension

Bug #3849
This adds a postgresql database driver called "pgsql".
The ambuild script changes could be very wrong ;)

* Add pgsql support to clientprefs

This was originally made by Lyfe in bug 3849! Thanks for that.
PostgreSQL supports the 'IF NOT EXISTS' clause when creating tables
since version 9.1, so i've switched to use that.

* Added pgsql support to sql-admin-manager

* Add --pgsql-path to ambuild configure

* More ambuild fixes

* Compile libpq with ambuild

* Try to generate postgres configs

* Add dummy config file

* More ambuild fixes

* Get errorcode and readable error in preparequery

No need to stop getting the errorCode, if the error string should be
retrieved. Just return both!

* Fix indentation in AMBuilderPGSQL

* Try to patch and configure postgres through ambuild

* Revert "Try to patch and configure postgres through ambuild"

This reverts commit 68dfc82b8eb0ce11f621af67ec247b5f47e4a189.

* Update to use PostgreSQL 9.4

* Move postgres preparation into seperate script

Fetching, preparing and configuring of the postgresql sourcecode
is done in a seperate prepare_postgresql.sh script now.

People can use this script for their manual builds,
if they don't want to use checkout-deps.sh.

* Add patch to configure.in again

Remove the version check for autoconf in postgres 9.4 too.

* Nit: Support older objdirs for hasPgSql ambuild option

* Update to use PostgreSQL 9.4.6

* Use newer AMTL and PGSQL 9.6

* Fix threaded queries

When running the thread part of a query, it already gets the atomic
lock. Don't try to get it twice in that case.

Use a seperate lock to protect access to the lastInsertID and
lastAffectedRows variables.

* Fix SetCharacterSet racing with threaded queries

Same fix like in the mysql driver.

* Use ke::AutoLock for lastInsertID mutex

* Fix fetching one more row than available

Don't try to access a row that doesn't exist when iterating rows.

* Improve sanity checks on column access

Don't call libpq functions with out of bounds column indices.

* Let QuoteString return false if quoting failed

* Fix build for x64 support changes and update to PGSQL 9.6.9

* Fix linux build

* Fix building of connection options string

snprintf doesn't support overlapping buffers.

* Update to PostgreSQL 9.6.15

* Fix crash after freeing first IQuery object

* Fix code crunch

* Fix memory leak, cleanup

* Nuke MSVC project and Makefile

* Remove unsupported numeric error codes

* Use STL threads

* Add prebuilt libpq for Linux and Windows

* Restore and fix version.rc file

* Add PostgreSQL build instructions

* Add prebuilt libpq for Mac

* Add win64 libpq build

This is version 9.6.15 since that's what I still had laying around.

* Fix buildscript

* Fix x64 build on linux and mac

Co-authored-by: Erik Minekus <[email protected]>
2021-03-11 11:21:51 +01:00
Peace-Maker 3c30f7b971 Fix crash when creating threads with Thread_AutoRelease
Setting the Thread_AutoRelease flag (default when using IThreader::MakeThread) caused a use-after-free after running the thread body.
2021-03-11 09:48:39 +01:00
peace-maker 6ea1e39ee4 core/sm: Harden plugin loading path requirements (#1437)
* Harden plugin loading path requirements

Restrict loading of plugins to the `sourcemod/plugins` folder and require the `.smx` file extension.

Symlinks inside the `plugins` folder are fine.

This behavior was abused as part of justCTF 2020 in the PainterHell challenge by cypis. Thank you!

* Restrict extension loading to extensions folder

* Add NULL file extension check in LoadExtension

hi @KyleS
2021-03-07 14:33:33 -08:00
peace-maker 5bc48b2ab3 Prefer python3 over python(2) in checkout-deps (#1424)
* Prefer python3 over python(2) in checkout-deps

We require Python 3 and don't want to accidentally use Python 2 if both are available.

* Use python3 in travis build

* Install python3-pip package on travis trusty image

* Fix pip detection in checkout-deps.sh
2021-03-07 13:50:15 +01:00
Peace-Maker 91a1fd074b Fix sql injection in sql-admin-manager plugin
This bug was found as part of justCTF 2020 in the PainterHell challenge by cypis. Thank you!

Admins with the root flag could inject their own queries towards the admin database connection.

The sql-admin-manager plugin is disabled by default.
2021-02-02 11:20:02 +01:00
Peace-Maker ba8753836e Cleanly remove all hooks on extension unload
Allows to e.g. reload sdktools during runtime without crashing. Useful for fast development cycles.
2020-12-16 15:52:48 +01:00
Peace-Maker 3eb2cd2971 Remove verbose hl2sdk-X not found warning
None of the available usage options have any use for such a warning.
2020-10-28 20:55:00 +01:00
peace-maker 5e819f6596 Update SourcePawn (#1365) 2020-10-14 18:15:35 -07:00
peace-maker 510bd261f8 core: Add Insurgency support for amd64 Windows (#1295)
* Add basic Insurgency support on Windows x64

This allows SourceMod to load on x64 Insurgency. There are still a lot of variable truncation warnings that have to be dealt with.

* Fix 32bit builds

* Compile MySQL extension as well

The hack for __iob_func being removed from the core runtime, but required by the old mysql we're building against can be simplified a lot due to the `_ReturnAddress` intrinsic available since MSVC 2015.

* Don't include the offset we want to extract in the signature
2020-08-06 19:53:06 -07:00
Peace-Maker 37355f9c57 Remove cloning of Dota 2 SDK in CI
SourceMod doesn't support Source 1 Dota 2 anymore and neither Source 2. Speed up CI by only cloning the hl2sdks that are tested.

This adds a `-s sdk1,sdk2` parameter to the checkout-deps.sh script similar to the `-SDKs` option of the powershell script to select specific sdks to update instead of all.
2020-07-30 11:37:00 -07:00
Peace-Maker 15450a6d0c Fix use-after-free when creating custom user messages
When creating our own "owned and local" protobuf message in `StartProtobufMessage`, `m_FakeEngineBuffer` is used to track that message. In `EndMessage` the message is optionally converted to a "private" one with the right abi on osx and passed to the engine's `SendUserMessage`. On linux and windows the same message as in the `m_FakeEngineBuffer` is passed though without conversion. `engine->SendUserMessage` has a vtable hook which sets `m_FakeEngineBuffer` to the passed argument.

`m_FakeEngineBuffer` frees the message it previously held, since it's "owned" from `StartProtobufMessage`, but that's the same one that's passed in as argument so a use-after-free in the engine happens when the now-freed message pointer is forwarded to the real `SendUserMessage` in the engine.

The message created in `StartProtobufMessage` wasn't free'd at all when hooks are blocked too. This fix moves the message buffer into a local variable which is destroyed at the end of the function.

Fixes #1286 and #1296
2020-06-23 10:32:55 -07:00
peace-maker bc89e54f6d NPOTB: Always use hl2sdk-proxy-repo in checkout-deps (#1236) 2020-05-08 15:12:21 -07:00
peace-maker 5597fc56d3 Fix crash when ArrayList runs out of memory (#1235)
The allocation size was still updated to the bigger size even if memory allocation failed. Trying to write to the supposedly available new space would overflow the heap and crash. Fixes #1233
2020-04-30 17:59:54 +01:00
peace-maker 23efe26655 Update Contagion gamedata again (#1216)
Updates vtable offsets after Patch 2.1.2.2 again. #1171
2020-03-18 16:04:41 +00:00
peace-maker 739c07ca9b Fix heap corruption in CUtlVector destructor (#1165) 2020-02-08 15:36:21 -08:00
peace-maker c052eb3969 Update Contagion gamedata (#1169) 2020-02-06 22:11:05 -08:00
peace-maker e3f4d239f1 IBinTools: Block loading incompatible interface versions (#979)
In #705 SourceMod received support for x64 binaries. The `IBinTools` interface was updated to call functions in 64bit binaries. The `PassInfo` struct's size was increased and the `Create(V)Call()` functions signatures changed, thus making the interface incompatible for consumers which were compiled against an earlier version.

`SMInterface::IsVersionCompatible` wasn't adjusted to that fact, so extensions compiled against pre SM 1.10 could request an `IBinTools` interface pointer, but crash when they try to use it.

This change makes requests to older interface versions invalid, thus letting `RequestInterface` return `NULL` for older extensions. It doesn't fix the backwards incompatibility, but at least makes the problem more blatant, so extensions can handle it themselves.
2019-04-11 14:51:38 -07:00
peace-maker f0aec6b0b6 Fix typo in fallback to "default" maplists section (#923)
When lookup of a more specialized entry in the maplists.cfg failed, it wouldn't fallback to the "default" section, but just try to parse the same section again.
2018-11-13 16:32:18 +00:00
peace-maker 1b795a70b0 Add GameData methodmap (#766) 2018-10-11 20:27:56 -07:00
peace-maker 7e3b1c395b Mark new methodmap natives as optional (#867)
The `TopMenu` methodmap natives weren't marked as optional if the extension was optional like the other normal natives.

The `Regex` natives weren't marked as optional at all before if the regex extension was included optionally.

This makes the error message cleaner in case topmenus aren't loaded.
```
adminmenu.smx (Admin Menu): Required extension "TopMenus" file("topmenus.ext") not running
basebans.smx (Basic Ban Commands): Native "TopMenu.Display" was not found
```
2018-08-06 20:11:01 +01:00
peace-maker 6fcb411fe4 MySQL: Support multiple result sets in prepared queries (#825)
Prepared statements can return multiple result sets since MySQL 5.5. That can happen when calling stored procedures using `CALL x();`.

This change removes the previous caching of result bindings, since the number of fields in a result can differ from result set to result set. This could potentially have a negative impact on prepared statements always only returning one result set, since the result binding buffers are recreated everytime the statement is executed instead of once. That difference should be negligible.

Fixes #823.
2018-06-05 18:33:33 +01:00
peace-maker 9cc518e408 Fix MySQL extension build using vs2015 (#824)
MySQL defines its own timespec_t. Official mysql builds are built using VS2013, so you still need to compile the client library yourself to be able to link it, but this change makes the dbi extension compatible with future versions already.
2018-06-05 09:29:11 -04:00
peace-maker be6a930e82 Update SQLite to version 3.22.0 (#783)
This includes numerous bug fixes, optimizations and new features from releases over the past 5 years.

http://sqlite.org/chronology.html
2018-03-19 19:09:12 -04:00
peace-maker f9faf9e48c Allow different values per platform in "Keys" gamedata section (#765)
This adds support for platform specific custom key values in the `Keys` section in game config files. Now you can have different values for the same key per platform.

Previously you could only add general key values in gamedata files that were the same on all platforms like
```
"Keys"
{
	"key"	"value"
}
```

This patch allows you to set the value per platform in a subsection like
```
"Keys"
{
	"key"
	{
		"windows"	"value1"
		"linux"	"value2"
		"mac"	"value3"
	}
}
```

Looking up the `key` will return the value matching the host platform.
2018-02-06 14:40:51 +00:00
peace-maker a8080c0bbb Fix description of nominations convars (#758) 2018-01-27 12:00:04 +00:00
peace-maker 7e898ee530 Fix core config values not being cached (#673)
Valid core config options aren't cached to be retrieved using `GetCoreConfigValue` after they've been loaded from core.cfg or set through the `sm config` root console menu.

E.g. `sm config ServerLang` would return `[SM] No such config option "ServerLang" exists.` all the time.

Stop notifying other listeners if the config key was consumed, but don't skip adding it to the cache.

Also fix `FollowCSGOServerGuidelines` always showing as unhandled command when being changed through `sm config FollowCSGOServerGuidelines yes`.
2017-09-23 17:24:39 -07:00
Peace-Maker 7eef3948b1 Don't break backwards compatibility with unmanaged forwards
Instead of adding new functions to `IForward`, we just allow NULL to be passed to `PushArray` and `PushString`.
2017-08-25 23:23:50 +02:00
Peace-Maker e609a33e6d Cleanup CForward::Execute using a helper function
Flatten out the nesting a bit.
2017-08-25 23:23:37 +02:00
Peace-Maker 41a9889cdd Add Call_PushNullVector and Call_PushNullString
Be able to push NULL_[VECTOR|STRING] to a forward or direct function call.
The callee can check the parameter using the IsNullVector/IsNullString natives.
2017-08-25 23:23:24 +02:00
Peace-Maker 3de269946c Add IsNativeParamNullVector and IsNativeParamNullString natives
Lets plugins check if some other plugin passed NULL_VECTOR or
NULL_STRING to a native in the native callback.
2017-08-25 23:23:07 +02:00
Peace-Maker 9fa4ed8bac Add IsNullVector and IsNullString natives
Let plugins check if a string or vector passed to a function is their
NULL_VECTOR or NULL_STRING.
2017-08-25 23:22:39 +02:00
Peace-Maker 60320cd845 Cleanup CForward::Execute using a helper function
Flatten out the nesting a bit.
2017-07-22 23:08:31 +02:00
peace-maker 8840ce905d Update to latest SourcePawn (#639) 2017-07-18 12:48:39 +01:00
peace-maker 1351df4260 Add OnPlayerRunCmdPost forward (#591)
* Add OnPlayerRunCmdPost forward

Allow plugins to catch the values that are actually used by the game
after some eventual changes by other plugins.

* Add |const| qualifier to arrays in OnPlayerRunCmdPost forward
2017-05-09 15:16:05 +01:00
Peace-Maker de42dfc783 Add Call_PushNullVector and Call_PushNullString
Be able to push NULL_[VECTOR|STRING] to a forward or direct function call.
The callee can check the parameter using the IsNullVector/IsNullString natives.
2017-05-04 22:56:31 -06:00
peace-maker ed42d2feea Add missing parameter to DataPack.IsReadable (#603) 2017-04-30 13:49:18 -04:00
peace-maker 0961e5dde3 Fix crash when accessing gamerules during mapchange (#593)
If the gamerules proxy entity doesn't exist, don't try to generate the
reference for it.
2017-03-11 08:54:38 -08:00
Peace-Maker b67da15b5b Add IsNativeParamNullVector and IsNativeParamNullString natives
Lets plugins check if some other plugin passed NULL_VECTOR or
NULL_STRING to a native in the native callback.
2017-03-03 11:47:03 -07:00
Peace-Maker c1888c2d05 Add IsNullVector and IsNullString natives
Let plugins check if a string or vector passed to a function is their
NULL_VECTOR or NULL_STRING.
2017-03-03 11:45:39 -07:00
peace-maker 86363dd3ec Add ADT array blocksize getter (#578)
Add GetArrayBlockSize and GetStackBlockSize and equivalent properties to
the methodmaps to get the blocksize the array or stack was created with.

Useful when getting array handles from other plugins you didn't create
yourself.
2017-02-09 19:26:14 +00:00
peace-maker 0743b757f6 Fix regression with GetEntPropEnt always returning -1 (#584)
Regression in #583

The `CBaseHandle *` was compared to a `IHandleEntity **` always failing
instead of comparing the actual base handles.

Fixes a small typo in MatchTypeDescAsInteger too, where a FIELD_CUSTOM
could fall through badly.
2017-02-09 07:43:15 -05:00
peace-maker 9e27a867dd Fix typo in menu manager drawing no spacer (#581)
The "Back" slot was hidden even if the page had a "Next" button. Draw
the spacer correctly!
2017-02-04 08:16:27 -05:00
peace-maker ea8fdd8fbb Fix crash when a database transaction fails (bug 6531) (#577)
If one of the queries fails in a transaction, the DBI system would only allocate an array of the size of the amount of all the successful queries before the failed one. It writes data for all the queries though effectively writing past the array bounds leading to heap corruption.

Create the right sized array!
2017-01-22 22:27:31 -08:00
peace-maker b74573fa12 Fix crash in CloneArray for too large arrays (#566)
If there is not enough memory to clone an array, throw an error instead
of crashing the server.
2016-12-11 20:55:11 -08:00
peace-maker d3d16a93cf Fix threaded query's result handle access rights (#567)
Plugins were able to close the results handle in the threaded query
callback causing a double free crash. The access rights are setup right
before the handle is created, but weren't used.
2016-12-11 16:35:53 -08:00
peace-maker 151834a948 Fix case of not calling OnMapTimeLeftChanged in CS:GO (#563)
Round end reasons in CS:GO are +1 from the ones in CS:S. The
CSRoundEnd_GameStart reason for when the OnMapTimeLeftChanged forward
should be called should be one higher than in CS:S.
2016-12-01 17:09:48 -08:00
peace-maker 3e201dd521 Add DETOUR_DECL_* marcos for more parameter counts (#561)
Add more macros for up to 8 parameters, because DETOUR_DECL_MEMBER8 is
the highest one yet.
2016-11-29 14:55:39 -08:00
Peace-Maker 7907a07686 Update to latest SourcePawn 2016-10-27 00:42:20 -06:00
Peace-Maker 4a8068d1c4 Suppress logging of "Plugin not runnable" errors
SourceMod itself and thirdparty extensions call functions in plugins
without making sure it is runnable. The plugin pausing feature isn't
supported anymore and is set to get nuked #438 which will reduce the
amount of not-runnable error reports.

We can't fix every third party extension, so suppressing the error from
the logs will stop the spam until pausing is removed.

#489 can be reverted after this.
2016-10-26 23:48:56 -06:00
peace-maker 47eb7d60e5 Fix use-after-free crash in SQLite extension (#481)
When the server crashed and the process got terminated, the SqDriver
instance was killed first (e.g. by atexit). SqDatabase tries to access
SqDriver in its destructor.
This patch tells SqDatabase to not use anything from SqDriver anymore
after SqDriver got destroyed.

Next to that, the clientprefs extension relied on the IDatabase pointer
being valid to get the driver pointer. Cache the pointer, so the dbi
system still knows the IDBThreadOperation belonged to the now gone
driver, even after the database object is gone.
2016-10-03 16:31:17 +01:00
Peace-Maker ecbedb7b11 Don't expose CellArrays in ISourceMod to extensions
Don't let extensions have access to the internal implementation of cell
arrays.
2016-08-26 15:09:18 -07:00
Peace-Maker 5b9ae5917b Add ICellArray and create/free in ISourceMod
Add an ICellArray interface to expose the adt_array CellArray class from
logic to core.
Add methods to ISourceMod to create and delete ICellArray instances in
logic.
2016-08-21 21:32:23 +02:00
Peace-Maker 2c8614c639 Keep optional natives optional after reloading
Bug 6518

Starting from no plugins loaded, after the final step of the following,
basetriggers will be marked as errored because mapchooser is missing:

Load basetriggers
Load mapchooser
Unload mapchooser
Load mapchooser
Unload mapchooser

We lose the SP_NTVFLAG_OPTIONAL when removing a WeakNative. The
__pl_mapchooser_SetNTVOptional() is only called in basetriggers when it
is loaded. It adds the OPTIONAL flag to the mapchooser natives the
basetrigger plugin uses.
When mapchooser is loaded, the native is overwritten and the OPTIONAL
flag consumed (WeakNative registered), but not preserved. Later when
mapchooser is unloaded the WeakNative is removed in
CNativeOwner::UnbindWeakRef, but the OPTIONAL flag isn't added again.
The next time mapchooser is loaded, the natives aren't optional anymore
and will cause a real dependency.

The change in ShareSys isn't needed to fix the error, but is included to
keep the SP_NTVFLAG_OPTIONAL flag consistent.
2016-07-21 01:52:47 +02:00
peace-maker f425236bac Increase topmenu display buffer size (#520)
The buffer for menu options was 64 chars. That limit can easily be
reached by some utf8 string which would get truncated. Double the buffer
size to 128 chars.
2016-06-20 16:03:54 +01:00
Peace-Maker 4f4903a05e Don't try to call functions in paused plugins
This avoids spam of "Plugin not runnable" exceptions on shutdown or
plugin unload.

When re/unloading a plugin which has other ones depending on it, like
the adminmenu, It pauses the depending plugins putting them in an
"Depends on plugin: %s" error state. ForwardSys doesn't remove them from
the forward lists on pause, specially the global forwards, and still
tries to call all the global forwards like OnPlayerRunCmd and
OnLibraryAdded etc. on the paused plugins. Executing functions in paused
runtimes has been ignored in the VM before introducing the "Exception"
mechanism, but now they're all logged.

This adds checks to make sure the plugin is runnable before calling a
function. (Stolen from #438)
2016-03-14 13:24:23 +01:00
Peace-Maker df59fd5b0e Fix scheduled plugin unloading
When unloading a plugin no plugin is allowed to execute code. There's
been some flawed logic in the scheduling, leading it to bail out if the
plugin was marked for scheduled unloading..

Also change the "error" message of `sm plugins unload` to something
nice.
2016-02-29 16:40:24 +01:00
Peace-Maker 060f63e9db Fix printing dependent extension name
Typo which will print the name of the extension being unloaded instead
of the one which would be unloaded as well because of it.
2016-02-27 21:22:09 +01:00
Peace-Maker 1c0a5b0420 Change Panel.DrawItem return tag to |int| (bug 6463) 2016-01-22 18:30:32 +01:00
Peace-Maker d3cc797f0f Add missing |bool| return tag to RemoveFromTrie native 2016-01-05 16:52:30 +01:00
Peace-Maker edb820eae8 Add info message when loading custom gamedata
Print a message to console when there is a gamedata file loaded from the
|custom| folder.
2016-01-03 22:28:24 +01:00
Peace-Maker 0a14d3f50c Fix calling timer callback in paused plugins
Don't try to call the timer callback, if it's not runnable.
Error wasn't reported before the exception refactoring.
2015-08-09 01:50:36 +02:00
Peace-Maker c6a7e86762 Lock database before setting character set
SQL_SetCharset wasn't thread safe and could race with other threaded
queries causing a crash.
2015-06-29 20:44:45 +02:00
Peace-Maker 4b8a581c9a Fix crash in games that don't support radio style menus
Fix regression in ad7d920
GetMenuStyleHandle(MenuStyle_Radio) crashes games, which don't support
the radio menu style. The style is never added to the menu manager, if
it's not supported, so GetMenuStyleHandle tries to call IsSupported on a
nullptr
2015-03-21 18:53:41 -04:00
Peace-Maker b53947ccc3 Add TE_SendToAllInRange
Add helper stock to mimic PVS and PAS recipient filters for tempents in
the SDK.
2015-03-03 17:22:01 +01:00
Peace-Maker ff9ae0782e Fix missing params in OnTakeDamagePost typedef
Looks like the |weapon| parameter went missing during the switch to the
transitional syntax.

There was no -Post typedef including the |damagecustom| bit at all too.
2015-01-03 19:45:27 +01:00
Peace-Maker 6c17f247df Don't unpack mysql verbosely
I doubt we're interested in the filename of every single file
contained in the mysql archive when it's decompressed.

It bloats up the travis build log.
2014-12-20 11:32:15 +01:00
Peace-Maker 9b2e77711a Plugin_Failed == "An unrecoverable error"
Change the meaning of Plugin_Failed status to indicate, that the plugin
can't recover from the error.
Make sure those previously loaded plugins are shown correctly in sm
plugins info x.
2014-12-20 11:08:30 +01:00
Peace-Maker 0b131d6864 Pause dependent plugins on SetFailState (bug 6120)
When a plugin calls SetFailState it is paused and all natives it
registered are unavailable. Other plugins, which depend on those natives
keep running and error whenever they try to call those natives.

This correctly sets the dependent plugins to an error state as if the
plugin which called SetFailState was unloaded.
2014-12-20 11:07:57 +01:00
Peace-Maker bfcfbbe107 Add WritePackFunction and ReadPackFunction natives
Adds type safety to CDataPack. Cells can't be read as Float anymore. Now
you're able to store a function pointer in a datapack and be sure the
pointer can't be read as a cell and a cell can't be read as a function
pointer.
2014-08-04 02:05:25 +02:00
Peace-Maker 1181144e57 Fix regression. SDKHook_ReloadPost never firing
The switch to vtable hooks typo'd the ReloadPost hooks.
2014-07-16 20:40:52 +02:00
Peace-Maker c2c7f090ba Fix .gitignore typo
VS build directories weren't excluded correctly
2014-06-30 15:06:22 +02:00
Peace-Maker 909c6ec594 Refresh sorting of topmenu after (re)LoadTopMenuConfig (bug 6032, r=psychonic). 2014-06-29 21:07:55 -04:00
peace-maker 0d79b7a542 Merge pull request #2 from psychonic/pawn_stringconcat2
Fix build.
2014-06-11 08:48:41 +02:00
Peace-Maker 7868767dde Add string literal concatenation using ellipses "..." (bug 4261, PR #5)
commit cd0d31805c
Author: Peace-Maker <[email protected]>
Date:   Wed May 28 03:07:25 2014 +0200

    Ignore \ ctrlchar in lexing

commit cf617a4d20
Author: Peace-Maker <[email protected]>
Date:   Tue May 27 13:32:59 2014 +0200

    Add string literal concatenation using ellipses "..." (bug 4261)

    Backported the changes CompuPhase did to the compiler to support string
    literal concatenation including all fixes in later commits from r30 on.
    http://code.google.com/p/pawnscript/source/detail?r=30

    Pawn uses ellipses "..." to concatenate so it looks like this:

    #define PROJECT_AUTHOR "Greyscale"
    #define PROJECT_COPYRIGHT "Copyright (C) 2010  " ... PROJECT_AUTHOR

    This would result in PROJECT_COPYRIGHT being defined as
    "Copyright (C) 2010  Greyscale"

    While i've been at it, that stringizing a macro parameter feature was
    ported too.
    From the changelog for version 3.3.4026
    (http://www.compuphase.com/pawn/pawnhistory.htm):

    The macro substition processor now recognizes the "#" character for
    "stringizing" a parameter. For example, if you have the definition
    #define log(%1) #%1
    Then the expression log(test) will result in "test".
    Note that concatenation of literal strings requires an ellipsis in pawn
    (which is different than C/C++). So to combine the parameter with
    literal strings, use a syntax like:
    #define log(%1) "logging: " ... #%1 ... "\n"
    The stringize operator is only available in the replacement text of a
    macro.

    Doing
    PrintToServer(log(hello));
    would print
    logging: hello\n
2014-05-27 19:30:13 -07:00
Peace-Maker 6ac013376f Call OnLibraryAdded for all available libraries (bug 5925, PR #4)
commit c1b064c9232553045f6f5bfaf7df0feb6ceb4571
Author: Peace-Maker <[email protected]>
Date:   Wed May 28 03:16:22 2014 +0200

    Coding style adjustments

commit 37a16dbba24cc2035fb8838be8729067cb9bc13a
Author: Peace-Maker <[email protected]>
Date:   Wed May 28 03:03:25 2014 +0200

    Load core.phrases before calling OnLibraryAdded

commit 676ac951111c7e8f565debbd4316850a4c4a8d00
Author: Peace-Maker <[email protected]>
Date:   Tue May 27 13:18:48 2014 +0200

    Call OnLibraryAdded for all available librarys (bug 5925)

    When loading multiple plugins at once (on server start or mapchange)
    OnLibraryAdded is only called for libraries which are loaded after the
    current plugin. The plugin isn't informed about the libraries that were
    added before its OnPluginStart forward was called.

    This patch calls OnLibraryAdded for all already registered libraries the
    current plugin has missed.
2014-05-27 19:26:58 -07:00
Peace-Maker cd0d31805c Ignore \ ctrlchar in lexing 2014-05-28 03:07:25 +02:00
Peace-Maker cf617a4d20 Add string literal concatenation using ellipses "..." (bug 4261)
Backported the changes CompuPhase did to the compiler to support string
literal concatenation including all fixes in later commits from r30 on.
http://code.google.com/p/pawnscript/source/detail?r=30

Pawn uses ellipses "..." to concatenate so it looks like this:

#define PROJECT_AUTHOR "Greyscale"
#define PROJECT_COPYRIGHT "Copyright (C) 2010  " ... PROJECT_AUTHOR

This would result in PROJECT_COPYRIGHT being defined as
"Copyright (C) 2010  Greyscale"

While i've been at it, that stringizing a macro parameter feature was
ported too.
From the changelog for version 3.3.4026
(http://www.compuphase.com/pawn/pawnhistory.htm):

The macro substition processor now recognizes the "#" character for
"stringizing" a parameter. For example, if you have the definition
#define log(%1) #%1
Then the expression log(test) will result in "test".
Note that concatenation of literal strings requires an ellipsis in pawn
(which is different than C/C++). So to combine the parameter with
literal strings, use a syntax like:
#define log(%1) "logging: " ... #%1 ... "\n"
The stringize operator is only available in the replacement text of a
macro.

Doing
PrintToServer(log(hello));
would print
logging: hello\n
2014-05-27 13:32:59 +02:00