79 Commits

Author SHA1 Message Date
Hedel Nasser
363871a860 Fixed value check in json_object_set_value (#1023)
Same fix as #1015, but for 1.9
2021-12-03 15:53:29 -08:00
pizzahut2
8e8dfa33ed Update stats.sma (#1002)
Triggered the "Invalid weapon id" at another location in the source code, so patched all cases where the argument could be 0.
2021-10-07 17:12:29 -07:00
pizzahut2
f442b3d84f Update stats.sma (#998)
Fix runtime error when a player "killed self with teledeath". Happens when a map hasn't enough spawn points.
2021-09-28 09:56:17 -07:00
Smilex_Gamer
8817f3e541 European Portuguese Language translation fixes (#902)
* European Portuguese translation fix: admin.txt

* European Portuguese translation fix: admincmd.txt

* Added European Portuguese translation: adminslots.txt

Added new translations

* European Portuguese translation fix: common.txt

* European Portuguese translation fix: menufront.txt

* European Portuguese translation fix: miscstats.txt

* European Portuguese translation fix: pausecfg.txt

* European Portuguese translation fix: restmenu.txt

* European Portuguese translation fix: statscfg.txt
2021-09-17 13:22:03 +02:00
OciXCrom
81e4aa29a6 Add missing kRenderFx constant (#928)
* Add missing kRenderFx constant

* Change constant name to match SDK
2021-09-17 13:21:52 +02:00
Daniele386
1754c0b959 Minor German Language Update (#926)
* Update admincmd.txt

* Update statsx.txt

* Update miscstats.txt

* Update menufront.txt

* Update menufront.txt

* Update admincmd.txt

* Update adminvote.txt

* Update restmenu.txt

* Update mapsmenu.txt

* Update nextmap.txt

* Update stats_dod.txt

* Update statscfg.txt

* Update stats_dod.txt

* Update adminvote.txt
2021-09-17 13:11:58 +02:00
Franco Romaniello
bb4b818250 Update parson and fix json_object_set_value (#983)
* Remove parson folder

* add submodule parson

* FIX amxx_json_object_set_value generate a crash if invalid value is passed

* restore parson folder status
2021-09-17 13:08:08 +02:00
Franco Romaniello
f5fea6ab7b Fix typo in message_const.inc TE_FIZZ comment (#990) 2021-09-17 13:07:43 +02:00
Harsha Raghu
f031b97e91 [TFCX] Fix Medic infection Crash on Linux (#991)
* [TFCX] Fix Medic infection Crash on Linux

Issue: #988

* [TFCX] Removed redundant code

- Added `_DEBUG_TFCX` preprocessor directive
- Deleted redundant code (which fetches pdata)
2021-09-17 13:01:40 +02:00
pizzahut2
beaa8c436b Revert "Update CMisc.h (#985)" (#987)
Turned out both test servers still had an old "tfc_i386.so" file which took precedence over the newer "tfc.so" library, so both servers were misconfigured and that's why the offsets didn't work.
2021-09-02 11:51:55 -07:00
pizzahut2
f3d21a3fb1 Update CMisc.h (#985)
LINUXOFFSET is back at 3 since HLDS Linux build 8308 (dated July 24, 2019).
2021-08-26 22:28:11 -07:00
Franco Romaniello
3340884edb fix alpha2 order in set_hudmessage (#982) 2021-08-16 14:23:52 -07:00
Franco Romaniello
d1fc99fc28 [FEATURE REQUEST] set_hudmessage add missing parameters (#981) 2021-08-16 13:27:50 -07:00
David Anderson
5e7e1775bd Another macOS build fix. 2021-07-11 22:21:37 -07:00
David Anderson
9d4c9c5ce9 Fix mac build. 2021-07-11 22:04:48 -07:00
David Anderson
2064e224d1 Quell warning on macOS. 2021-07-11 21:04:23 -07:00
David Anderson
73f52fd53a Fix Windows build. 2021-07-11 21:01:06 -07:00
David Anderson
6c8c605fa3 Update minimum macOS to 10.7. 2021-07-11 21:00:26 -07:00
David Anderson
d67510b841 Switch to libc++ on mac. 2021-07-11 20:50:54 -07:00
David Anderson
00b769e3f2 Use python3 in bootstrap. 2021-07-11 17:36:06 -07:00
Fysiks
f92e60a8ac Add ignore for amxx binaries (#960) 2021-07-02 04:09:02 +02:00
Fysiks
8e902cb63b Fix for loop index out of bounds error (#966)
Fixes an index out of bounds error when refreshMenus() and subsequently findAdminsWithMenu() is called when there is 32 players in the server. Indexing the playersList array in the for loop condition causes it to try to index with a value of 32 on the very last condition check which is not valid for this array.
2021-06-19 20:34:51 +02:00
FEDERICOMB
8fdc6540ca Fix stock "SQL_QueryAndIgnore" documentation (#965) 2021-06-19 20:34:43 +02:00
Vincent Herbet
5eea3e5b42 Revert "Do not allow admins to change cvars with FCVAR_SPONLY flag when not in singleplayer via amx_cvar"
adbc3e0c53

Behavior change. For now reverting it to give time and decide how it should be handled properly.
2020-06-24 22:51:56 +02:00
regener
1bfec70029 Yet another Hungarian langugage revise (#816)
Revised by Norbee. @ ebateam.eu

He was just lazy to do a PR :P
# Conflicts:
#	plugins/lang/admincmd.txt
#	plugins/lang/adminhelp.txt
#	plugins/lang/menufront.txt
2020-06-04 00:24:24 +02:00
Juice
bdeb2a133f admincmd.sma exploits fix (#822)
* [admincmd.sma] Fix typo in isCommandArgSafe

'

* [admincmd.sma] Update amx_cvar command handler

- Fix exploiting of "mapchangecfgfile" cvar to execute potentially dangerous console commands
- Add newline delimiter check and restrict for ****cfgfile cvars values

* Restrict having ".." character sequence in amx_map command argument

Fixes exploit on Windows servers that allows executing potentially dangerous console commands

* Do not allow admins to change cvars with FCVAR_SPONLY flag when not in singleplayer via amx_cvar

1. Make amx_cvar command obey FCVAR_SPONLY flag.
2. Fix exploiting of amx_nextmap cvar value which is used in nextmap plugin.
2020-06-04 00:18:22 +02:00
Juice
936c9477be adminvote.sma exploit fix (#823)
* Restrict having ".." character sequence in amx_votemap command arguments

Fixes exploit on Windows servers that allows executing potentially dangerous console commands

* Fix typo

containi -> contain
2020-06-04 00:16:18 +02:00
diamond-optic
4b335adfe8 Fix broken DoD Fun module natives (#851)
* Update hardcorded offsets

* Fixed using incorrect parameter for setting string
2020-06-04 00:10:59 +02:00
Eren Kaya
e463e06480 Turkish Translation Fixes/Addings (#862)
* Update admin.txt

Fixed translation [tr]

* Update adminchat.txt

* Update admincmd.txt

* Update adminhelp.txt

* Update adminslots.txt

* Update adminvote.txt

* Update antiflood.txt

* Update cmdmenu.txt

* Update common.txt

* Update imessage.txt

* Update mapchooser.txt

* Update menufront.txt

* Update mapsmenu.txt

* Update miscstats.txt

* Update multilingual.txt

* Update nextmap.txt

* Update pausecfg.txt

* Update plmenu.txt

* Update restmenu.txt

* Update scrollmsg.txt

* Update stats_dod.txt

* Update statscfg.txt

* Update telemenu.txt

* Update time.txt

* Update timeleft.txt

* Update statsx.txt

* Update adminhelp.txt

* Update admincmd.txt
2020-06-04 00:08:44 +02:00
Vincent Herbet
d0c8084ac9 Fix MySQL connector link (#844) 2020-06-04 00:08:08 +02:00
Cleverson
32a29f5a78 Close cmdaccess.ini file if fopen found the file... (#815)
Close file if fopen found the file...
2020-06-04 00:04:03 +02:00
Vincent Herbet
15a14a0a43 Fix new lines with TextMsg and SayText (side-effect of #763) (#778)
* Fix newlines for TextMsg

* Fix newlines for SayText

* Adjust comments

* Replace hardcoded detination value with HUD_* constants

* Make sure only official mods can use format string

* Fix typos

* Split condition for readability

* CS only: Fix newlines in TextMsg and with print_center
2019-10-28 00:22:05 +01:00
Arkshine
be3f2f540b Adjust TextMsg/SayText maximum buffer length from 190 to 187 due to "%s" parameter added in #763 2019-10-23 16:25:50 +02:00
Juice
4a2aecfe85 Fix issues with amxclient_cmd and read_args/read_argv* natives (#761)
* Fixes to read_args and read_argv* natives

* Fixed crash with read_argv* natives and commands sent with amxclient_cmd native
* Fixed read_args returning argv[0] instead of empty string when both amxclient_cmd's arguments were not specified

* Fix spaces
2019-10-22 10:30:13 +02:00
Vincent Herbet
9ca3a685ed Update gamedata for all supported mods (#771)
* Update CS gamedata

* Update TFC gamedata

* Update DoD gamedata

* Update Valve gamedata

* Update Gearbox gamedata
2019-10-21 11:51:18 +02:00
Vincent Herbet
78ecb35e3c Fix behavior change about endianness check in maxmind/libmaxminddb#123 (#770) 2019-10-20 23:25:11 +02:00
twisterniq
dafabc73c0 Add new plugin defines regarding the AMX Mod X version (#723)
* Add AMXX_VERSION_LOCAL define

* Add new defines regarding version of AMX Mod X

Added new defines: AMXX_VERSION_MAJOR_NUM and AMXX_VERSION_MINOR_NUM

* Rename AMXX_VERSION_LOCAL define

Define AMXX_VERSION_LOCAL was renamed to AMXX_VERSION_LOCAL_REV_NUM
2019-10-17 18:57:40 +02:00
Smilex_Gamer
163afa041e European Portuguese Language translation support (#750)
* Added European Portuguese translation: admin.txt

* Added European Portuguese translation: adminchat.txt

* Added European Portuguese translation: admincmd.txt

* Added European Portuguese translation: adminhelp.txt

* Added European Portuguese translation: adminslots.txt

* Added European Portuguese translation: adminvote.txt

* Added European Portuguese translation: antiflood.txt

* Added European Portuguese translation: cmdmenu.txt

* Added European Portuguese translation: common.txt

* Added European Portuguese translation: imessage.txt

* Added European Portuguese translation: languages.txt

* Added European Portuguese translation: mapchooser.txt

* Added European Portuguese translation: mapsmenu.txt

* Added European Portuguese translation: menufront.txt

* Added European Portuguese translation: miscstats.txt

* Added European Portuguese translation: multilingual.txt

* Added European Portuguese translation: nextmap.txt

* Added European Portuguese translation: pausecfg.txt

* Added European Portuguese translation: plmenu.txt

* Added European Portuguese translation: restmenu.txt

* Added European Portuguese translation: scrollmsg.txt

* Added European Portuguese translation: stats_dod.txt

* Added European Portuguese translation: statscfg.txt

* Added European Portuguese translation: statsx.txt

* Added European Portuguese translation: telemenu.txt

* Added European Portuguese translation: time.txt

* Added European Portuguese translation: timeleft.txt
2019-10-17 16:38:16 +02:00
Arkshine
c064459b67 Add Albanian language support 2019-10-17 16:37:48 +02:00
Vincent Herbet
4410d219f7 Send pre-formatted string in SayText and TextMSg as a parameter instead of as the format string (#763) 2019-10-17 15:54:04 +02:00
Vincent Herbet
6fb27a03a7 Fix GeoIP2 database file extraction (#764) 2019-10-17 15:53:43 +02:00
Dmitry Novikov
5e48c9b6db CSPForward::execute: Fix uninitialized retVal (#747) 2019-10-17 15:53:29 +02:00
Vincent Herbet
9e962ce097 Bump ReHLDS API version to 3.6 (#721) 2019-10-17 15:52:49 +02:00
regener
78d1c0f1cd String changes for missing path exception messages (#718)
Resolves #652
2019-10-17 15:52:49 +02:00
Juice
691ae9f8d4 Compiler: Fix undefined symbol: pow10 (#615) (#759)
* Compiler: Fix undefined symbol: pow10

* Add version check

* Remove deprecated pow10

(cherry picked from commit 77eb33d5f2)
2019-10-17 15:43:26 +02:00
Adam Richard
6cecb34e29 Fix typo on engine.inc documentation (#730)
`register_think` first parameter is `Classname[]`, but, it's written `Touched` on its description.
2019-06-19 22:30:43 +02:00
Vincent Herbet
4ef0a78abd Fix MPROP_SHOWPAGE option not working as expected
Typo from #473.
2019-06-19 22:30:43 +02:00
regener
1f09bd53f6 Hungarian language update (#719)
Thanks for the help to Norbee. @ ebateam
2019-05-16 15:12:21 +02:00
Adam Richard
c8bd4bb169 Fix string incorrectly formatted in CS Misc Stats plugin (#704)
Recently, I got those below errors on logs:
```
String formatted incorrectly - parameter 12 (total 12)
L 04/29/2019 - 23:24:40: [AMXX] Displaying debug trace (plugin "miscstats.amxx", version "1.8.3-dev+5154")
L 04/29/2019 - 23:24:40: [AMXX] Run time error 25: parameter error 
L 04/29/2019 - 23:24:40: [AMXX]    [0] miscstats.sma::checkKills (line 922)
```

It just looks like `"RAMPAGE!!! %s^n%L %d %L (%d hs)"` misses last format rule, which should be `"%L"` pointing to `HS` lang key.
2019-05-16 15:06:45 +02:00
CrazY
2dd36300bf Fix TE_DLIGHT documentation (#685)
There's no "brightness" parameter in TE_DLIGHT. Probably will cause server crash if it be passed.
2019-05-16 15:06:30 +02:00
Cleverson
c867d9a7cb Updated Portuguese Brazilian translation in miscstats.txt with latest additions (#674)
Updated Portuguese Brazilian translation in miscstats.txt with latest additions
2019-05-16 15:06:27 +02:00
voed
b3980d2e5d Improve documentation in engine_const.inc (#665) 2019-05-16 15:06:07 +02:00
Cleverson
2bc04236db Fix documentation (#678)
* Lack register_event() on event_enable/disable

Lack register_event() on enable_event and disable_event descriptions

* It shoud be m_iJoiningState not m_iJointState

It shoud be m_iJoiningState not m_iJointState
2019-05-16 15:05:56 +02:00
regener
211003750c Fix back/next/exit buttons not translated in plugin's cvar/command menus (#667)
* Menu buttons stayed english in Plugin's cvar/command menus

That worked, but if there is any better solution to get it working feel free to edit :D

* Changed language parsing to %L
2019-01-30 16:08:27 +01:00
voed
6dba7c4f17 Add player validation for menu_display (#671)
Invalid player triggered crash because get/set_pdata is unsafe
2019-01-30 16:08:08 +01:00
voed
7515038e07 Removed garbage generated by VS (#658) 2019-01-30 16:07:48 +01:00
regener
2bb5e92d93 Updated Hungarian translation in miscstats.txt with latest additions (#661) 2019-01-30 16:07:30 +01:00
Adam Richard
77bbdbb59c Fix typo in json_parse documentation (#663)
Just a small fix on json_parse return description. I'm sure it was supposed to be `Invalid_JSON` instead of `Invalid_JSONValue`.
Thank you, guys, that's one of my favorites features.
2019-01-30 16:07:08 +01:00
PartialCloning
70d822e17f Revert RETURN_META(MRES_HANDLED); (#662)
#554 (Revert "Fun: Make TraceLine a post forward") did not fully revert back TraceLine. RETURN_META(MRES_HANDLED); was added by #421 (Update Fun module) but still remains there.
2019-01-24 21:11:24 +01:00
Vincent Herbet
6c53524d86 Bump ReHLDS version to 3.5 (#647) 2018-12-18 10:17:50 +01:00
Vincent Herbet
9eb1f427df Fix again a menu regression (behavior change) due to typos in #471 (#636) 2018-11-03 22:54:15 +01:00
Vincent Herbet
5c5fbd83d1 Fix a navigation bug in Plugin Cvars menu (#637) 2018-11-03 22:52:52 +01:00
Vincent Herbet
be526418bf Make UTF-8 safe others strings natives (#610) 2018-10-14 17:46:28 +02:00
Daniele386
f63bc38f5c Major Update to german translation (#620)
* Update miscstats.txt

#618

* Update statsx.txt

#618

* Update and rename mapchooser.txt to admincmd

* Rename admincmd to mapchooser.txt

* Update admincmd.txt

* Update common.txt

* Update multilingual.txt

* Update multilingual.txt

* Update scrollmsg.txt

* Update statscfg.txt

* Update adminchat.txt

* Update adminhelp.txt

* Update adminvote.txt

* Update cmdmenu.txt

* Update common.txt

* Update mapchooser.txt

* Update mapsmenu.txt

* Update menufront.txt

* Update miscstats.txt

* Update multilingual.txt

* Update nextmap.txt

* Update pausecfg.txt

* Update plmenu.txt

plmenu.txt adresses only the behaviour in the "Menü", not the text in the chat!

* Update restmenu.txt

* Update scrollmsg.txt

* Update stats_dod.txt

* Update statscfg.txt

* Update statsx.txt

* Update telemenu.txt

* Update timeleft.txt

* Update admincmd.txt

* Update plmenu.txt

* Update adminchat.txt

* Update admincmd.txt

* Update mapsmenu.txt

* Update miscstats.txt

added changes due to PR #611 !

* Update miscstats.txt

* Update pausecfg.txt

* Update admincmd.txt

* Update statscfg.txt
2018-10-13 15:05:53 +02:00
Vincent Herbet
09b95aa6ab CS Miscstats: Fix enemy remaining option displaying the message to the wrong team (#611) 2018-10-11 13:49:16 +02:00
OciXCrom
a0ea98da35 Add a bunch of constants to define max lengths (#566)
* Add constants for max IP and SteamID length

* Change max authid length to 64

* Fix port typo

* Add more defines

* Remove max query length
2018-09-28 17:20:29 +02:00
Vincent Herbet
d867a95fd6 Fix a crash with set_tr/2 when -1 is passed in TR_pHit + allow worldspawn (0) in set_tr/2 (#601)
* Fix a crash with set_ptr2 when -1 is passed in TR_pHit

* Allow wordspawn in set_tr|2(TR_pHit, ...)
2018-09-28 17:20:29 +02:00
justgo97
05bd01cd5e Fixed a typo in get_user_flags description (#605)
* Fixed a typo in get_user_flags description

* Remove
2018-09-28 17:20:29 +02:00
justgo97
d93ee596bb Add constants for get_user_origin() (#604) 2018-09-28 17:20:29 +02:00
Arkshine
523bb334d5 Put back <time.h> from previous commit 2018-09-28 17:20:29 +02:00
Duko
a635b383fc GeoIP: Add "reload" command (#588)
* Add reload option

* Adjust logic

* Modernize the code a little
2018-09-28 17:20:06 +02:00
PartialCloning
3238b25495 Additions to hlsdk_const and cstrike_const (#573)
* Additions to hlsdk_const

Added values to hlsdk_const using regamedll_cs and reapi as reference.

* Update cstrike_const.inc

* Prefix constants with CS_ to avoid name collision and for consistency
2018-09-28 17:19:23 +02:00
Juice
e993cdccae Update Russian ML translations (#598)
* Updated Russian ML translations

* Remove [bs] TRANSF_SILENT translation

Since it's totally not related to pull request and it was translated wrong because I looked for Makedonian translation for some reason.

* Updated Russian ML translations
2018-09-28 09:01:43 +02:00
Vincent Herbet
e059c1f5ab Fix invalid handle passed in the SMC/INI parser callbacks (#592) 2018-09-21 00:04:51 +02:00
IgnacioFDM
ddf0cc69dd Compiler: Fix broken UTF8 support (#329) 2018-09-20 21:12:08 +02:00
Vincent Herbet
9f00bf4f55 Fix typo in json_object_get_value_at documentation (#587) 2018-09-16 20:05:18 +02:00
Vincent Herbet
ac64ef041b Upload amxmodx-latest-<package>-<os> text file when packaging. (#585) 2018-09-14 20:31:17 +02:00
OciXCrom
7e23047c53 Fix admin chat displaying the wrong language (#559)
* Fix admin chat displaying the wrong language

* Switch %L to %l

* Improve loop

* %L to %l again

* Change git add . to != 0
2018-09-13 14:46:36 +02:00
Arkshine
91f36f2308 Promote git revision number to 4th version string component 2018-09-11 00:51:05 +02:00
91 changed files with 6785 additions and 13809 deletions

2
.gitignore vendored
View File

@@ -84,5 +84,7 @@ Thumbs.db
# AMXX plugin build related files
plugins/compile.dat
plugins/compiled/
*.amx
*.amxx
build_deps/

View File

@@ -227,6 +227,11 @@ class AMXXConfig(object):
cxx.cflags += ['-Wno-unused-result', '-Wno-error=sign-compare']
if have_clang:
cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch']
if cxx.version >= 'apple-clang-10.0':
cxx.cxxflags += [
'-Wno-inconsistent-missing-override',
'-Wno-varargs',
]
if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4':
cxx.cxxflags += ['-Wno-deprecated-register']
else:
@@ -317,15 +322,18 @@ class AMXXConfig(object):
def configure_mac(self, cxx):
cxx.defines += ['OSX', '_OSX', 'POSIX']
cxx.cflags += ['-mmacosx-version-min=10.5']
cxx.cflags += [
'-mmacosx-version-min=10.7',
'-Wno-address-of-packed-member',
]
cxx.linkflags += [
'-mmacosx-version-min=10.5',
'-mmacosx-version-min=10.7',
'-arch', 'i386',
'-lstdc++',
'-stdlib=libstdc++',
'-stdlib=libc++',
'-framework', 'CoreServices',
]
cxx.cxxflags += ['-stdlib=libstdc++']
cxx.cxxflags += ['-stdlib=libc++']
def configure_windows(self, cxx):
cxx.defines += ['WIN32', '_WINDOWS']

View File

@@ -325,16 +325,16 @@ SMCResult CGameConfig::ReadSMC_KeyValue(const SMCStates *states, const char *key
}
else if (!strcmp(key, "size"))
{
TempType.fieldSize = ke::Max<int>(0, strtol(value, nullptr, 0));
TempType.fieldSize = ke::Max<int>(0, atoi(value));
}
else if (!strcmp(key, "unsigned"))
{
TempType.fieldUnsigned = !!strtol(value, nullptr, 0);
TempType.fieldUnsigned = !!atoi(value);
}
else if (g_LibSys.IsPlatformCompatible(key, &m_MatchedPlatform))
{
m_FoundOffset = true;
TempType.fieldOffset = strtol(value, nullptr, 0);
TempType.fieldOffset = atoi(value);
}
break;
}
@@ -397,7 +397,7 @@ SMCResult CGameConfig::ReadSMC_KeyValue(const SMCStates *states, const char *key
if (m_AddressReadCount < limit)
{
m_AddressRead[m_AddressReadCount] = strtol(value, nullptr, 0);
m_AddressRead[m_AddressReadCount] = atoi(value);
m_AddressReadCount++;
}
else

View File

@@ -180,18 +180,6 @@ class CGameConfigManager : public IGameConfigManager
member = type.fieldOffset; \
}
#define GET_OFFSET_NO_ERROR(classname, member) \
static int member = -1; \
if (member == -1) \
{ \
TypeDescription type; \
if (!CommonConfig->GetOffsetByClass(classname, #member, &type) || type.fieldOffset < 0)\
{ \
return; \
} \
member = type.fieldOffset; \
}
extern CGameConfigManager ConfigManager;
extern IGameConfig *CommonConfig;

View File

@@ -15,7 +15,6 @@
#include "debugger.h"
#include "libraries.h"
#include <amxmodx_version.h>
#include "engine_strucs.h"
extern const char *no_function;
@@ -155,37 +154,6 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
*get_amxaddr(plugin->getAMX(), addr) = gpGlobals->maxClients;
}
if (amx_FindPubVar(plugin->getAMX(), "MapName", &addr) != AMX_ERR_NOTFOUND)
{
set_amxstring(plugin->getAMX(), addr, STRING(gpGlobals->mapname), MAX_MAPNAME_LENGTH - 1);
}
auto length = 0;
if (amx_FindPubVar(plugin->getAMX(), "PluginName", &addr) != AMX_ERR_NOTFOUND)
{
plugin->setTitle(get_amxstring(plugin->getAMX(), addr, 0, length));
}
if (amx_FindPubVar(plugin->getAMX(), "PluginVersion", &addr) != AMX_ERR_NOTFOUND)
{
plugin->setVersion(get_amxstring(plugin->getAMX(), addr, 0, length));
}
if (amx_FindPubVar(plugin->getAMX(), "PluginAuthor", &addr) != AMX_ERR_NOTFOUND)
{
plugin->setAuthor(get_amxstring(plugin->getAMX(), addr, 0, length));
}
if (amx_FindPubVar(plugin->getAMX(), "PluginURL", &addr) != AMX_ERR_NOTFOUND)
{
plugin->setUrl(get_amxstring(plugin->getAMX(), addr, 0, length));
}
if (amx_FindPubVar(plugin->getAMX(), "PluginDescription", &addr) != AMX_ERR_NOTFOUND)
{
plugin->setDescription(get_amxstring(plugin->getAMX(), addr, 0, length));
}
if (amx_FindPubVar(plugin->getAMX(), "NULL_STRING", &addr) != AMX_ERR_NOTFOUND)
{
plugin->m_pNullStringOfs = get_amxaddr(plugin->getAMX(), addr);
@@ -307,7 +275,6 @@ CPluginMngr::CPlugin::CPlugin(int i, const char* p, const char* n, char* e, size
title = unk;
author = unk;
version = unk;
url = unk;
char file[PLATFORM_MAX_PATH];
char* path = build_pathname_r(file, sizeof(file), "%s/%s", p, n);

View File

@@ -56,8 +56,6 @@ public:
ke::AString version;
ke::AString title;
ke::AString author;
ke::AString url;
ke::AString description;
ke::AString errorMsg;
unsigned int failcounter;
@@ -80,8 +78,6 @@ public:
inline const char* getVersion() { return version.chars();}
inline const char* getTitle() { return title.chars();}
inline const char* getAuthor() { return author.chars();}
inline const char* getUrl() { return url.chars(); }
inline const char* getDescription() { return description.chars(); }
inline const char* getError() { return errorMsg.chars();}
inline int getStatusCode() { return status; }
inline int getId() const { return id; }
@@ -90,8 +86,6 @@ public:
inline void setTitle(const char* n) { title = n; }
inline void setAuthor(const char* n) { author =n; }
inline void setVersion(const char* n) { version = n; }
inline void setUrl(const char* n) { url = n; }
inline void setDescription(const char* n) { description = n; }
inline void setError(const char* n) { errorMsg = n; }
inline bool isValid() const { return (status >= ps_paused); }
inline bool isPaused() const { return ((status == ps_paused) || (status == ps_stopped)); }

View File

@@ -23,30 +23,15 @@
extern CFlagManager FlagMan;
ke::Vector<CAdminData *> DynamicAdmins;
const char *g_sInaccessibleXVars[] =
{
"MaxClients",
"MapName",
"PluginName",
"PluginVersion",
"PluginAuthor",
"PluginURL",
"NULL_STRING",
"NULL_VECTOR"
};
static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
{
int len;
char* sName = get_amxstring(amx, params[1], 0, len);
cell ptr;
for (auto name : g_sInaccessibleXVars)
if (!strcmp(sName, "MaxClients") || !strcmp(sName, "NULL_STRING") || !strcmp(sName, "NULL_VECTOR"))
{
if (!strcmp(sName, name))
{
return -1;
}
return -1;
}
for (CPluginMngr::iterator a = g_plugins.begin(); a ; ++a)
@@ -540,13 +525,27 @@ static cell AMX_NATIVE_CALL next_hudchannel(AMX *amx, cell *params)
return pPlayer->NextHUDChannel();
}
static cell AMX_NATIVE_CALL set_hudmessage(AMX *amx, cell *params) /* 11 param */
static cell AMX_NATIVE_CALL set_hudmessage(AMX *amx, cell *params) /* 13 param */
{
g_hudset.a1 = 0;
g_hudset.a2 = 0;
g_hudset.r2 = 255;
g_hudset.g2 = 255;
g_hudset.b2 = 250;
cell num_params = params[0] / sizeof(cell);
if(num_params >= 13) {
cell *color2 = get_amxaddr(amx, params[13]);
g_hudset.a1 = params[12];
g_hudset.a2 = color2[3];
g_hudset.r2 = color2[0];
g_hudset.g2 = color2[1];
g_hudset.b2 = color2[2];
}
else {
g_hudset.a1 = 0;
g_hudset.a2 = 0;
g_hudset.r2 = 255;
g_hudset.g2 = 255;
g_hudset.b2 = 250;
}
g_hudset.r1 = static_cast<byte>(params[1]);
g_hudset.g1 = static_cast<byte>(params[2]);
g_hudset.b1 = static_cast<byte>(params[3]);
@@ -1448,34 +1447,29 @@ static cell AMX_NATIVE_CALL show_menu(AMX *amx, cell *params) /* 3 param */
return 1;
}
static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 5 param */
static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 3 param */
{
enum { arg_count, arg_title, arg_version, arg_author, arg_url, arg_description };
CPluginMngr::CPlugin* a = g_plugins.findPluginFast(amx);
int i;
a->setTitle(get_amxstring(amx, params[arg_title], 0, i));
a->setVersion(get_amxstring(amx, params[arg_version], 0, i));
a->setAuthor(get_amxstring(amx, params[arg_author], 0, i));
char *title = get_amxstring(amx, params[1], 0, i);
char *vers = get_amxstring(amx, params[2], 1, i);
char *author = get_amxstring(amx, params[3], 2, i);
#if defined BINLOG_ENABLED
g_BinLog.WriteOp(BinLog_Registered, a->getId(), a->getTitle(), a->getVersion());
g_BinLog.WriteOp(BinLog_Registered, a->getId(), title, vers);
#endif
if (params[arg_count] / sizeof(cell) > arg_author)
{
a->setUrl(get_amxstring(amx, params[arg_url], 0, i));
a->setDescription(get_amxstring(amx, params[arg_description], 0, i));
}
a->setTitle(title);
a->setVersion(vers);
a->setAuthor(author);
/* Check if we need to add fail counters */
i = 0;
unsigned int counter = 0;
while (NONGPL_PLUGIN_LIST[i].author != NULL)
{
if (strcmp(NONGPL_PLUGIN_LIST[i].author, a->getAuthor()) == 0)
if (strcmp(NONGPL_PLUGIN_LIST[i].author, author) == 0)
{
counter++;
}
@@ -1483,7 +1477,7 @@ static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 5 param *
{
counter++;
}
if (stricmp(NONGPL_PLUGIN_LIST[i].title, a->getTitle()) == 0)
if (stricmp(NONGPL_PLUGIN_LIST[i].title, title) == 0)
{
counter++;
}
@@ -1517,34 +1511,31 @@ static cell AMX_NATIVE_CALL register_menucmd(AMX *amx, cell *params) /* 3 param
return 1;
}
static cell AMX_NATIVE_CALL get_plugin(AMX *amx, cell *params) /* 15 param */
static cell AMX_NATIVE_CALL get_plugin(AMX *amx, cell *params) /* 11 param */
{
enum
{
arg_count, arg_plugin, arg_name, arg_namelen, arg_title, arg_titlelen,
arg_version, arg_versionlen, arg_author, arg_authorlen, arg_status, arg_statuslen,
arg_url, arg_urllen, arg_description, arg_descriptionlen
};
CPluginMngr::CPlugin* a;
if (params[arg_plugin] < 0)
if (params[1] < 0)
a = g_plugins.findPluginFast(amx);
else
a = g_plugins.findPlugin((int)params[arg_plugin]);
a = g_plugins.findPlugin((int)params[1]);
if (a)
{
set_amxstring(amx, params[arg_name], a->getName(), params[arg_namelen]);
set_amxstring(amx, params[arg_title], a->getTitle(), params[arg_titlelen]);
set_amxstring(amx, params[arg_version], a->getVersion(), params[arg_versionlen]);
set_amxstring(amx, params[arg_author], a->getAuthor(), params[arg_authorlen]);
set_amxstring(amx, params[arg_status], a->getStatus(), params[arg_statuslen]);
set_amxstring(amx, params[2], a->getName(), params[3]);
set_amxstring(amx, params[4], a->getTitle(), params[5]);
set_amxstring(amx, params[6], a->getVersion(), params[7]);
set_amxstring(amx, params[8], a->getAuthor(), params[9]);
set_amxstring(amx, params[10], a->getStatus(), params[11]);
if (params[arg_count] / sizeof(cell) > arg_url)
if (params[0] / sizeof(cell) >= 12)
{
set_amxstring(amx, params[arg_url], a->getUrl(), params[arg_urllen]);
set_amxstring(amx, params[arg_description], a->getDescription(), params[arg_descriptionlen]);
cell *jit_info = get_amxaddr(amx, params[12]);
#if defined AMD64 || !defined JIT
*jit_info = 0;
#else
*jit_info = a->isDebug() ? 0 : 1;
#endif
}
return a->getId();

View File

@@ -88,44 +88,21 @@ void Client_TeamInfo(void* mValue)
if (index < 1 || index > gpGlobals->maxClients) break;
char* msg = (char*)mValue;
if (!msg) break;
auto pPlayer = GET_PLAYER_POINTER_I(index);
pPlayer->team = msg;
g_players[index].team = msg;
g_teamsIds.registerTeam(msg, -1);
pPlayer->teamId = g_teamsIds.findTeamId(msg);
if (pPlayer->teamId == -1)
g_players[index].teamId = g_teamsIds.findTeamId(msg);
/**
* CS fix for SPECTATOR team.
* -
* When a player chooses spectator, ScoreInfo is sent before TeamInfo and with 0 as index.
* This means for the first round of first spectator, SPECTATOR name is not associated with its index.
* The following fix manually sets the team index when we hit SPECTATOR team.
*/
if (g_players[index].teamId == -1 && g_bmod_cstrike && !strcmp(msg, "SPECTATOR"))
{
/**
* CS fix for SPECTATOR team.
* -
* When a player chooses spectator, ScoreInfo is sent before TeamInfo and with 0 as index.
* This means for the first round of first spectator, SPECTATOR name is not associated with its index.
* The following fix manually sets the team index when we hit SPECTATOR team.
*/
if (g_bmod_cstrike && !strcmp(msg, "SPECTATOR"))
{
pPlayer->teamId = 3;
g_teamsIds.registerTeam(msg, 3);
}
/**
* Fixes in-between situation where the team name is not yet associated with a valid index
* and ScoreInfo is executed later (used to retrieve the index). E.g. a player is dead,
* then changes team. Index will return -1 until ScoreInfo is sent, usually at the next spawn.
*/
else if ((g_bmod_cstrike || g_bmod_dod || g_bmod_tfc || g_bmod_gearbox || g_bmod_valve)
&& pPlayer->pEdict->pvPrivateData
&& !pPlayer->IsAlive())
{
GET_OFFSET_NO_ERROR("CBasePlayer", m_iTeam);
const auto teamId = get_pdata<int>(pPlayer->pEdict, m_iTeam);
pPlayer->teamId = teamId;
g_teamsIds.registerTeam(msg, teamId);
}
g_players[index].teamId = 3;
g_teamsIds.registerTeam(msg, 3);
}
break;

View File

@@ -774,15 +774,6 @@ void C_ServerDeactivate_Post()
g_vault.clear();
g_xvars.clear();
g_plugins.clear();
g_langMngr.Clear();
ArrayHandles.clear();
TrieHandles.clear();
TrieIterHandles.clear();
TrieSnapshotHandles.clear();
DataPackHandles.clear();
TextParsersHandles.clear();
GameConfigHandle.clear();
g_CvarManager.OnPluginUnloaded();
@@ -1154,12 +1145,12 @@ void C_ClientCommand(edict_t *pEntity)
if (item == MENU_BACK)
{
if (pMenu->pageCallback >= 0)
executeForwards(pMenu->pageCallback, static_cast<cell>(pPlayer->index), static_cast<cell>(MENU_BACK), static_cast<cell>(menu));
executeForwards(pMenu->pageCallback, static_cast<cell>(pPlayer->index), static_cast<cell>(MENU_BACK));
pMenu->Display(pPlayer->index, pPlayer->page - 1);
} else if (item == MENU_MORE) {
if (pMenu->pageCallback >= 0)
executeForwards(pMenu->pageCallback, static_cast<cell>(pPlayer->index), static_cast<cell>(MENU_MORE), static_cast<cell>(menu));
executeForwards(pMenu->pageCallback, static_cast<cell>(pPlayer->index), static_cast<cell>(MENU_MORE));
pMenu->Display(pPlayer->index, pPlayer->page + 1);
} else {
@@ -1739,14 +1730,6 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
g_plugins.clear();
g_langMngr.Clear();
ArrayHandles.clear();
TrieHandles.clear();
TrieIterHandles.clear();
TrieSnapshotHandles.clear();
DataPackHandles.clear();
TextParsersHandles.clear();
GameConfigHandle.clear();
ClearMessages();
modules_callPluginsUnloaded();

View File

@@ -457,7 +457,6 @@ md -p JIT 2&gt;NUL
<None Include="..\..\plugins\include\cvars.inc" />
<None Include="..\..\plugins\include\datapack.inc" />
<None Include="..\..\plugins\include\gameconfig.inc" />
<None Include="..\..\plugins\include\newmenus.inc" />
<None Include="..\..\plugins\include\string_const.inc" />
<None Include="..\..\plugins\include\string_stocks.inc" />
<None Include="..\..\plugins\include\textparse_ini.inc" />

View File

@@ -54,7 +54,7 @@
</Filter>
<Filter Include="ReSDK\engine">
<UniqueIdentifier>{04fab577-6f56-40d0-8f69-7ce1b8bf3bb9}</UniqueIdentifier>
</Filter>
</Filter>
<Filter Include="Third Party\UTF8Rewind">
<UniqueIdentifier>{270f3524-564f-4154-bb35-242a6faac09e}</UniqueIdentifier>
</Filter>
@@ -693,13 +693,10 @@
<None Include="..\..\plugins\include\string_stocks.inc">
<Filter>Pawn Includes</Filter>
</None>
<None Include="..\..\plugins\include\newmenus.inc">
<Filter>Pawn Includes</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Object Include="..\Jit\helpers-x86.obj">
<Filter>Assembly\Builds</Filter>
</Object>
</ItemGroup>
</Project>
</Project>

View File

@@ -10,7 +10,6 @@
#include "amxmodx.h"
#include "CMenu.h"
#include "newmenus.h"
#include "format.h"
ke::Vector<Menu *> g_NewMenus;
CStack<int> g_MenuFreeStack;
@@ -91,9 +90,9 @@ bool CloseNewMenus(CPlayer *pPlayer)
return true;
}
Menu::Menu(const char *title, AMX *amx, int fid, bool use_ml) : m_Title(title), m_ItemColor("\\r"),
m_NeverExit(false), m_ForceExit(false), m_AutoColors(g_coloredmenus), thisId(0), func(fid),
isDestroying(false), pageCallback(-1), showPageNumber(true), useMultilingual(use_ml), amx(amx), items_per_page(7)
Menu::Menu(const char *title, AMX *amx, int fid) : m_Title(title), m_ItemColor("\\r"),
m_NeverExit(false), m_AutoColors(g_coloredmenus), thisId(0), func(fid),
isDestroying(false), pageCallback(-1), showPageNumber(true), items_per_page(7)
{
CPluginMngr::CPlugin *pPlugin = g_plugins.findPluginFast(amx);
menuId = g_menucmds.registerMenuId(title, amx);
@@ -357,32 +356,18 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
m_Text = nullptr;
auto title = m_Title.chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, title);
if (definition)
{
title = definition;
}
}
char buffer[255];
if (showPageNumber && items_per_page && (pages != 1))
{
if (m_AutoColors)
ke::SafeSprintf(buffer, sizeof(buffer), "\\y%s %d/%d\n\\w\n", title, page + 1, pages);
ke::SafeSprintf(buffer, sizeof(buffer), "\\y%s %d/%d\n\\w\n", m_Title.chars(), page + 1, pages);
else
ke::SafeSprintf(buffer, sizeof(buffer), "%s %d/%d\n\n", title, page + 1, pages);
ke::SafeSprintf(buffer, sizeof(buffer), "%s %d/%d\n\n", m_Title.chars(), page + 1, pages);
} else {
if (m_AutoColors)
ke::SafeSprintf(buffer, sizeof(buffer), "\\y%s\n\\w\n", title);
ke::SafeSprintf(buffer, sizeof(buffer), "\\y%s\n\\w\n", m_Title.chars());
else
ke::SafeSprintf(buffer, sizeof(buffer), "%s\n\n", title);
ke::SafeSprintf(buffer, sizeof(buffer), "%s\n\n", m_Title.chars());
}
m_Text = m_Text + buffer;
@@ -418,27 +403,27 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{
flags &= ~Display_Back;
}
menuitem *pItem = NULL;
int option = 0;
keys = 0;
bool enabled = true;
int ret = 0;
int slots = 0;
int option_display = 0;
for (item_t i = start; i < end; i++)
{
// reset enabled
enabled = true;
pItem = m_Items[i];
if (pItem->access && !(pItem->access & g_players[player].flags[0]))
{
enabled = false;
}
if (pItem->handler != -1)
{
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
@@ -470,44 +455,31 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{
keys |= (1<<option);
}
option_display = ++option;
if (option_display == 10)
{
option_display = 0;
}
auto itemName = pItem->name.chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, itemName);
if (definition)
{
itemName = definition;
}
}
if (pItem->isBlank)
{
ke::SafeSprintf(buffer, sizeof(buffer), "%s\n", itemName);
ke::SafeSprintf(buffer, sizeof(buffer), "%s\n", pItem->name.chars());
}
else if (enabled)
{
if (m_AutoColors)
if (m_AutoColors)
{
ke::SafeSprintf(buffer, sizeof(buffer), "%s%d.\\w %s\n", m_ItemColor.chars(),option_display, itemName);
ke::SafeSprintf(buffer, sizeof(buffer), "%s%d.\\w %s\n", m_ItemColor.chars(),option_display, pItem->name.chars());
} else {
ke::SafeSprintf(buffer, sizeof(buffer), "%d. %s\n", option_display, itemName);
ke::SafeSprintf(buffer, sizeof(buffer), "%d. %s\n", option_display, pItem->name.chars());
}
} else {
if (m_AutoColors)
{
ke::SafeSprintf(buffer, sizeof(buffer), "\\d%d. %s\n\\w", option_display, itemName);
ke::SafeSprintf(buffer, sizeof(buffer), "\\d%d. %s\n\\w", option_display, pItem->name.chars());
} else {
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", itemName);
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", pItem->name.chars());
}
}
slots++;
@@ -544,20 +516,6 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
/* Don't bother if there is only one page */
if (pages > 1)
{
auto tempItemName = m_OptNames[abs(MENU_BACK)].chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, tempItemName);
if (definition)
{
tempItemName = definition;
}
}
if (flags & Display_Back)
{
keys |= (1<<option++);
@@ -568,13 +526,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
"%s%d. \\w%s\n",
m_ItemColor.chars(),
option == 10 ? 0 : option,
tempItemName);
m_OptNames[abs(MENU_BACK)].chars());
} else {
ke::SafeSprintf(buffer,
sizeof(buffer),
"%d. %s\n",
option == 10 ? 0 : option,
tempItemName);
m_OptNames[abs(MENU_BACK)].chars());
}
} else {
option++;
@@ -584,26 +542,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
sizeof(buffer),
"\\d%d. %s\n\\w",
option == 10 ? 0 : option,
tempItemName);
m_OptNames[abs(MENU_BACK)].chars());
} else {
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", tempItemName);
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", m_OptNames[abs(MENU_BACK)].chars());
}
}
m_Text = m_Text + buffer;
tempItemName = m_OptNames[abs(MENU_MORE)].chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, tempItemName);
if (definition)
{
tempItemName = definition;
}
}
if (flags & Display_Next)
{
keys |= (1<<option++);
@@ -614,13 +559,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
"%s%d. \\w%s\n",
m_ItemColor.chars(),
option == 10 ? 0 : option,
tempItemName);
m_OptNames[abs(MENU_MORE)].chars());
} else {
ke::SafeSprintf(buffer,
sizeof(buffer),
"%d. %s\n",
option == 10 ? 0 : option,
tempItemName);
m_OptNames[abs(MENU_MORE)].chars());
}
} else {
option++;
@@ -630,9 +575,9 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
sizeof(buffer),
"\\d%d. %s\n\\w",
option == 10 ? 0 : option,
tempItemName);
m_OptNames[abs(MENU_MORE)].chars());
} else {
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", tempItemName);
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", m_OptNames[abs(MENU_MORE)].chars());
}
}
m_Text = m_Text + buffer;
@@ -641,26 +586,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
option += 2;
}
}
if ((items_per_page && !m_NeverExit) || (m_ForceExit && numItems < 10))
{
auto exitName = m_OptNames[abs(MENU_EXIT)].chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, exitName);
if (definition)
{
exitName = definition;
}
}
/* Visual pad has not been added yet */
if (!items_per_page)
m_Text = m_Text + "\n";
keys |= (1<<option++);
if (m_AutoColors)
{
@@ -669,17 +601,17 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
"%s%d. \\w%s\n",
m_ItemColor.chars(),
option == 10 ? 0 : option,
exitName);
m_OptNames[abs(MENU_EXIT)].chars());
} else {
ke::SafeSprintf(buffer,
sizeof(buffer),
"%d. %s\n",
option == 10 ? 0 : option,
exitName);
m_OptNames[abs(MENU_EXIT)].chars());
}
m_Text = m_Text + buffer;
}
return m_Text.ptr();
}
@@ -688,45 +620,38 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
LogError(amx, AMX_ERR_NATIVE, "Invalid menu id %d(%d)", p, g_NewMenus.length()); \
return 0; }
// native menu_create(const title[], const handler[], bool:ml = false);
//Makes a new menu handle (-1 for failure)
//native csdm_makemenu(title[]);
static cell AMX_NATIVE_CALL menu_create(AMX *amx, cell *params)
{
enum args { arg_count, arg_title, arg_handler, arg_ml };
int len;
char *title = get_amxstring(amx, params[1], 0, len);
validate_menu_text(title);
char *handler = get_amxstring(amx, params[2], 1, len);
int length;
const auto title = get_amxstring(amx, params[arg_title], 0, length);
const auto handler = get_amxstring(amx, params[arg_handler], 1, length);
const auto callback = registerSPForwardByName(amx, handler, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
if (callback == -1)
int func = registerSPForwardByName(amx, handler, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
if (func == -1)
{
LogError(amx, AMX_ERR_NOTFOUND, R"(Invalid function "%s")", handler);
LogError(amx, AMX_ERR_NOTFOUND, "Invalid function \"%s\"", handler);
return 0;
}
validate_menu_text(title);
auto pMenu = new Menu(title, amx, callback, params[arg_ml] != 0);
Menu *pMenu = new Menu(title, amx, func);
if (g_MenuFreeStack.empty())
{
g_NewMenus.append(pMenu);
pMenu->thisId = static_cast<int>(g_NewMenus.length()) - 1;
}
else
{
const auto position = g_MenuFreeStack.front();
pMenu->thisId = (int)g_NewMenus.length() - 1;
} else {
int pos = g_MenuFreeStack.front();
g_MenuFreeStack.pop();
g_NewMenus[position] = pMenu;
pMenu->thisId = position;
g_NewMenus[pos] = pMenu;
pMenu->thisId = pos;
}
return pMenu->thisId;
}
static cell AMX_NATIVE_CALL menu_addblank(AMX *amx, cell *params)
{
GETMENU(params[1]);
@@ -1046,20 +971,6 @@ static cell AMX_NATIVE_CALL menu_item_setcall(AMX *amx, cell *params)
return 1;
}
static cell AMX_NATIVE_CALL menu_item_setaccess(AMX *amx, cell *params)
{
GETMENU(params[1]);
menuitem *pItem = pMenu->GetMenuItem(static_cast<item_t>(params[2]));
if (!pItem)
return 0;
pItem->access = params[3];
return 1;
}
static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
{
GETMENU(params[1]);
@@ -1083,7 +994,7 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
break;
}
int callback = registerSPForwardByName(amx, str, FP_CELL, FP_CELL, FP_CELL, FP_DONE);
int callback = registerSPForwardByName(amx, str, FP_CELL, FP_CELL, FP_DONE);
if (callback < 0)
{
LogError(amx, AMX_ERR_NATIVE, "Function %s not present", str);
@@ -1291,7 +1202,6 @@ AMX_NATIVE_INFO g_NewMenuNatives[] =
{"menu_item_getinfo", menu_item_getinfo},
{"menu_makecallback", menu_makecallback},
{"menu_item_setcall", menu_item_setcall},
{"menu_item_setaccess", menu_item_setaccess},
{"menu_item_setcmd", menu_item_setcmd},
{"menu_item_setname", menu_item_setname},
{"menu_destroy", menu_destroy},

View File

@@ -95,7 +95,7 @@ typedef unsigned int page_t;
class Menu
{
public:
Menu(const char *title, AMX *amx, int fid, bool use_ml);
Menu(const char *title, AMX *amx, int fid);
~Menu();
menuitem *GetMenuItem(item_t item);
@@ -127,8 +127,6 @@ public:
bool isDestroying;
int pageCallback;
bool showPageNumber;
bool useMultilingual;
AMX *amx;
public:
unsigned int items_per_page;
};

View File

@@ -9,7 +9,6 @@
#include "amxmodx.h"
#include <amxmodx_version.h>
#include <string>
void amx_command()
{
@@ -26,7 +25,7 @@ void amx_command()
if (!strcmp(cmd, "plugins") || !strcmp(cmd, "list"))
{
print_srvconsole("Currently loaded plugins:\n");
print_srvconsole(" %-3.2s %-23.22s %-11.10s %-17.16s %-32.31s %-12.11s %-9.8s\n", "id", "name", "version", "author", "url", "file", "status");
print_srvconsole(" %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", "name", "version", "author", "file", "status");
int plugins = 0;
int running = 0;
@@ -41,7 +40,7 @@ void amx_command()
if ((*a).isValid() && !(*a).isPaused())
++running;
print_srvconsole(" [%3d] %-3i %-23.22s %-11.10s %-17.16s %-32.31s %-12.11s %-9.8s\n", plugins, (*a).getId(), (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getUrl(), (*a).getName(), (*a).getStatus());
print_srvconsole(" [%3d] %-23.22s %-11.10s %-17.16s %-16.15s %-9.8s\n", plugins, (*a).getTitle(), (*a).getVersion(), (*a).getAuthor(), (*a).getName(), (*a).getStatus());
}
++a;
}
@@ -64,52 +63,6 @@ void amx_command()
print_srvconsole("%d plugins, %d running\n", plugins, running);
}
else if (!strcmp(cmd, "plugin"))
{
if (CMD_ARGC() < 3)
{
print_srvconsole("Usage: amxx plugin [ id ]\nFor a list of plugins, use the \"amxx plugins\" command\n");
}
else
{
char *pEnd;
auto id = strtol(CMD_ARGV(2), &pEnd, 10);
if (!pEnd)
{
print_srvconsole("Invalid plugin index %i.\n", id);
return;
}
auto plugin = g_plugins.findPlugin(id);
if (plugin && plugin->isValid())
{
print_srvconsole(" Name: %s\n", plugin->getTitle());
print_srvconsole(" Version: %s\n", plugin->getVersion());
print_srvconsole(" Author: %s\n", plugin->getAuthor());
auto url = plugin->getUrl();
if (url[0])
{
print_srvconsole(" URL: %s\n", url);
}
auto description = plugin->getDescription();
if (description[0])
{
print_srvconsole(" Description: %s\n", description);
}
print_srvconsole(" Filename: %s\n", plugin->getName());
print_srvconsole(" Status: %s\n", plugin->getStatus());
}
else
{
print_srvconsole("Plugin index %i not found.\n", id);
}
}
}
else if (!strcmp(cmd, "pause") && CMD_ARGC() > 2)
{
const char* sPlugin = CMD_ARGV(2);
@@ -291,7 +244,6 @@ void amx_command()
print_srvconsole(" version - display amxx version info\n");
print_srvconsole(" gpl - print the license\n");
print_srvconsole(" plugins [ criteria ] - list plugins currently loaded or ones matching given search criteria\n");
print_srvconsole(" plugin [ id ] - information about a plugin\n");
print_srvconsole(" modules - list modules currently loaded\n");
print_srvconsole(" cvars [ plugin ] [ index ] - list cvars handled by amxx or show information about a cvar if index is provided\n");
print_srvconsole(" cmds [ plugin ] - list commands registered by plugins\n");

View File

@@ -221,11 +221,11 @@ void UTIL_HudMessage(edict_t *pEntity, const hudtextparms_t &textparms, const ch
WRITE_BYTE(textparms.r1);
WRITE_BYTE(textparms.g1);
WRITE_BYTE(textparms.b1);
WRITE_BYTE(0);
WRITE_BYTE(255);
WRITE_BYTE(255);
WRITE_BYTE(250);
WRITE_BYTE(0);
WRITE_BYTE(textparms.a1);
WRITE_BYTE(textparms.r2);
WRITE_BYTE(textparms.g2);
WRITE_BYTE(textparms.b2);
WRITE_BYTE(textparms.a2);
WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8)));
WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8)));
WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8)));

View File

@@ -29,4 +29,4 @@ build_script:
- mkdir build
- cd build
- c:\python27\python ../configure.py --enable-optimize --nasm="C:\nasm\nasm-2.13.03\nasm.exe"
- ambuild
- c:\python27\scripts\ambuild

View File

@@ -343,23 +343,22 @@ char *FindFileName(int argc, char **argv)
void show_help()
{
printf("Options:\n");
printf("\t-A<num> alignment in bytes of the data segment and the stack\n");
printf("\t-a output assembler code\n");
printf("\t-C[+/-] compact encoding for output file (default=-)\n");
printf("\t-c<name> codepage name or number; e.g. 1252 for Windows Latin-1\n");
printf("\t-Dpath active directory path\n");
printf("\t-d0 no symbolic information, no run-time checks\n");
printf("\t-d1 [default] run-time checks, no symbolic information\n");
printf("\t-d2 full debug information and dynamic checking\n");
printf("\t-d3 full debug information, dynamic checking, no optimization\n");
printf("\t-e<name> set name of error file (quiet compile)\n");
printf("\t-H<hwnd> window handle to send a notification message on finish\n");
printf("\t-i<name> path for include files\n");
printf("\t-l create list file (preprocess only)\n");
printf("\t-o<name> set base name of output file\n");
printf("\t-p<name> set name of \"prefix\" file\n");
printf("\t-r[name] write cross reference report to console or to specified file\n");
printf("\t-sui[+/-] show stack usage info\n");
printf("\t-A<num> alignment in bytes of the data segment and the stack\n");
printf("\t-a output assembler code\n");
printf("\t-C[+/-] compact encoding for output file (default=-)\n");
printf("\t-c<name> codepage name or number; e.g. 1252 for Windows Latin-1\n");
printf("\t-Dpath active directory path\n");
printf("\t-d0 no symbolic information, no run-time checks\n");
printf("\t-d1 [default] run-time checks, no symbolic information\n");
printf("\t-d2 full debug information and dynamic checking\n");
printf("\t-d3 full debug information, dynamic checking, no optimization\n");
printf("\t-e<name> set name of error file (quiet compile)\n");
printf("\t-H<hwnd> window handle to send a notification message on finish\n");
printf("\t-i<name> path for include files\n");
printf("\t-l create list file (preprocess only)\n");
printf("\t-o<name> set base name of output file\n");
printf("\t-p<name> set name of \"prefix\" file\n");
printf("\t-r[name] write cross reference report to console or to specified file\n");
}
#if defined(__linux__) || defined(__APPLE__)

View File

@@ -54,7 +54,7 @@
#define CTRL_CHAR '^' /* default control character */
#define sCHARBITS 8 /* size of a packed character */
#define sDIMEN_MAX 4 /* maximum number of array dimensions */
#define sDIMEN_MAX 3 /* maximum number of array dimensions */
#define sLINEMAX 4095 /* input line length (in characters) */
#define sCOMP_STACK 32 /* maximum nesting of #if .. #endif sections */
#define sDEF_LITMAX 500 /* initial size of the literal pool, in "cells" */
@@ -280,12 +280,6 @@ typedef struct s_stringpair {
char *documentation;
} stringpair;
typedef struct s_valuepair {
struct s_valuepair *next;
long first;
long second;
} valuepair;
/* macros for code generation */
#define opcodes(n) ((n)*sizeof(cell)) /* opcode size */
#define opargs(n) ((n)*sizeof(cell)) /* size of typical argument */
@@ -706,9 +700,6 @@ SC_FUNC void delete_docstringtable(void);
SC_FUNC stringlist *insert_autolist(char *string);
SC_FUNC char *get_autolist(int index);
SC_FUNC void delete_autolisttable(void);
SC_FUNC valuepair *push_heaplist(long first, long second);
SC_FUNC int popfront_heaplist(long *first, long *second);
SC_FUNC void delete_heaplisttable(void);
SC_FUNC stringlist *insert_dbgfile(const char *filename);
SC_FUNC stringlist *insert_dbgline(int linenr);
SC_FUNC stringlist *insert_dbgsymbol(symbol *sym);
@@ -812,7 +803,6 @@ SC_VDECL int rational_digits; /* number of fractional digits */
SC_VDECL int sc_allowproccall;/* allow/detect tagnames in lex() */
SC_VDECL char *pc_deprecate; /* if non-NULL, mark next declaration as deprecated */
SC_VDECL int sc_warnings_are_errors;
SC_VDECL int sc_stkusageinfo; /* show stack usage info? */
SC_VDECL constvalue sc_automaton_tab; /* automaton table */
SC_VDECL constvalue sc_state_tab; /* state table */

View File

@@ -628,7 +628,6 @@ int pc_compile(int argc, char *argv[])
/* reset "defined" flag of all functions and global variables */
reduce_referrers(&glbtab);
delete_symbols(&glbtab,0,TRUE,FALSE);
delete_heaplisttable();
#if !defined NO_DEFINE
delete_substtable();
inst_datetime_defines();
@@ -756,55 +755,14 @@ cleanup:
#if !defined SC_LIGHT
if (errnum==0 && strlen(errfname)==0) {
int recursion = 0, flag_exceed = 0;
long stacksize = 0L;
unsigned long maxStackUsage = 0L;
unsigned long dynamicStackSizeLimit = (long)sc_stksize * sizeof(cell);
if (sc_amxlimit > 0) {
long totalsize = hdrsize + code_idx + glb_declared * sizeof(cell) + dynamicStackSizeLimit;
if (totalsize >= sc_amxlimit)
flag_exceed = 1;
} /* if */
/* if */
if(sc_stkusageinfo) {
stacksize = max_stacksize(&glbtab, &recursion);
maxStackUsage = stacksize * sizeof(cell);
if (recursion) {
pc_printf("Note: estimated max. usage: unknown, due to recursion\n");
} /* if */
else if (maxStackUsage >= dynamicStackSizeLimit) {
pc_printf("Note: estimated max. stack usage is %ld cells %ld bytes, limit %ld bytes\n", stacksize, maxStackUsage, dynamicStackSizeLimit);
}
} /* if */
/* if */
/* Note: Seems like `stacksize + 32 >= (long)sc_stksize` condition in original compiler invented to show stack usage warning if it's exceeded, that's why it's defined */
if ((sc_debug & sSYMBOLIC)!=0 || verbosity>=2 || /* stacksize + 32 >= (long)sc_stksize || */ flag_exceed) {
int flag_exceed=0;
if (sc_amxlimit > 0 && (long)(hdrsize+code_idx+glb_declared*sizeof(cell)+sc_stksize*sizeof(cell)) >= sc_amxlimit)
flag_exceed=1;
if ((sc_debug & sSYMBOLIC)!=0 || verbosity>=2 || flag_exceed) {
pc_printf("Header size: %8ld bytes\n", (long)hdrsize);
pc_printf("Code size: %8ld bytes\n", (long)code_idx);
pc_printf("Data size: %8ld bytes\n", (long)glb_declared*sizeof(cell));
pc_printf("Stack/heap size: %8ld bytes", dynamicStackSizeLimit);
if(sc_stkusageinfo) {
pc_printf(" | estimated max. usage");
/* if */
if (recursion) {
pc_printf(": unknown, due to recursion\n");
}
/* else if ((pc_memflags & suSLEEP_INSTR) != 0)
pc_printf(": unknown, due to the \"sleep\" instruction\n");*/
else {
pc_printf("=%ld cells (%ld bytes)\n", stacksize, maxStackUsage);
} /* if */
}
else {
pc_printf("\n");
} /* if */
pc_printf("Stack/heap size: %8ld bytes\n", (long)sc_stksize*sizeof(cell));
pc_printf("Total requirements:%8ld bytes\n", (long)hdrsize+(long)code_idx+(long)glb_declared*sizeof(cell)+(long)sc_stksize*sizeof(cell));
} /* if */
if (flag_exceed)
@@ -847,7 +805,6 @@ cleanup:
free(sc_documentation);
#endif
delete_autolisttable();
delete_heaplisttable();
if (errnum!=0) {
if (strlen(errfname)==0)
pc_printf("\n%d Error%s.\n",errnum,(errnum>1) ? "s" : "");
@@ -1003,8 +960,6 @@ static void initglobals(void)
sc_documentation=NULL;
sc_makereport=FALSE; /* do not generate a cross-reference report */
#endif
sc_stkusageinfo=FALSE;/* stack usage info disabled by default */
}
/* set_extension
@@ -1067,8 +1022,6 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
const char *ptr;
int arg,i,isoption;
static const char stackusageinfo[4] = { 's', 'u', 'i', '\0' };
for (arg=1; arg<argc; arg++) {
#if DIRSEP_CHAR=='/'
isoption= argv[arg][0]=='-';
@@ -1197,18 +1150,9 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
else
about();
break;
case 's': {
if(strlen(ptr) >= (sizeof(stackusageinfo) - 1)) {
if(*(ptr+1) == stackusageinfo[1] && *(ptr+2) == stackusageinfo[2]) {
ptr += 2;
sc_stkusageinfo = toggle_option(ptr, sc_stkusageinfo);
break;
}
}
case 's':
skipinput=atoi(option_value(ptr));
break;
}
case 't':
i=atoi(option_value(ptr));
if (i>0)
@@ -1462,44 +1406,43 @@ static void about(void)
setcaption();
pc_printf("Usage: pawncc <filename> [filename...] [options]\n\n");
pc_printf("Options:\n");
pc_printf(" -A<num> alignment in bytes of the data segment and the stack\n");
pc_printf(" -a output assembler code\n");
pc_printf(" -A<num> alignment in bytes of the data segment and the stack\n");
pc_printf(" -a output assembler code\n");
#if AMX_COMPACTMARGIN > 2
pc_printf(" -C[+/-] compact encoding for output file (default=%c)\n", sc_compress ? '+' : '-');
pc_printf(" -C[+/-] compact encoding for output file (default=%c)\n", sc_compress ? '+' : '-');
#endif
pc_printf(" -c<name> codepage name or number; e.g. 1252 for Windows Latin-1\n");
pc_printf(" -c<name> codepage name or number; e.g. 1252 for Windows Latin-1\n");
#if defined dos_setdrive
pc_printf(" -Dpath active directory path\n");
pc_printf(" -Dpath active directory path\n");
#endif
pc_printf(" -d0 no symbolic information, no run-time checks\n");
pc_printf(" -d1 [default] run-time checks, no symbolic information\n");
pc_printf(" -d2 full debug information and dynamic checking\n");
pc_printf(" -d3 full debug information, dynamic checking, no optimization\n");
pc_printf(" -e<name> set name of error file (quiet compile)\n");
pc_printf(" -d0 no symbolic information, no run-time checks\n");
pc_printf(" -d1 [default] run-time checks, no symbolic information\n");
pc_printf(" -d2 full debug information and dynamic checking\n");
pc_printf(" -d3 full debug information, dynamic checking, no optimization\n");
pc_printf(" -e<name> set name of error file (quiet compile)\n");
#if defined __WIN32__ || defined _WIN32 || defined _Windows
pc_printf(" -H<hwnd> window handle to send a notification message on finish\n");
pc_printf(" -H<hwnd> window handle to send a notification message on finish\n");
#endif
pc_printf(" -i<name> path for include files\n");
pc_printf(" -l create list file (preprocess only)\n");
pc_printf(" -o<name> set base name of (P-code) output file\n");
pc_printf(" -p<name> set name of \"prefix\" file\n");
pc_printf(" -i<name> path for include files\n");
pc_printf(" -l create list file (preprocess only)\n");
pc_printf(" -o<name> set base name of (P-code) output file\n");
pc_printf(" -p<name> set name of \"prefix\" file\n");
#if !defined SC_LIGHT
pc_printf(" -r[name] write cross reference report to console or to specified file\n");
pc_printf(" -r[name] write cross reference report to console or to specified file\n");
#endif
pc_printf(" -S<num> stack/heap size in cells (default=%d)\n",(int)sc_stksize);
pc_printf(" -s<num> skip lines from the input file\n");
pc_printf(" -sui[+/-] show stack usage info\n");
pc_printf(" -t<num> TAB indent size (in character positions, default=%d)\n",sc_tabsize);
pc_printf(" -v<num> verbosity level; 0=quiet, 1=normal, 2=verbose (default=%d)\n",verbosity);
pc_printf(" -w<num> disable a specific warning by its number\n");
pc_printf(" -E treat warnings as errors\n");
pc_printf(" -X<num> abstract machine size limit in bytes\n");
pc_printf(" -\\ use '\\' for escape characters\n");
pc_printf(" -^ use '^' for escape characters\n");
pc_printf(" -;[+/-] require a semicolon to end each statement (default=%c)\n", sc_needsemicolon ? '+' : '-');
pc_printf(" -([+/-] require parantheses for function invocation (default=%c)\n", optproccall ? '-' : '+');
pc_printf(" sym=val define constant \"sym\" with value \"val\"\n");
pc_printf(" sym= define constant \"sym\" with value 0\n");
pc_printf(" -S<num> stack/heap size in cells (default=%d)\n",(int)sc_stksize);
pc_printf(" -s<num> skip lines from the input file\n");
pc_printf(" -t<num> TAB indent size (in character positions, default=%d)\n",sc_tabsize);
pc_printf(" -v<num> verbosity level; 0=quiet, 1=normal, 2=verbose (default=%d)\n",verbosity);
pc_printf(" -w<num> disable a specific warning by its number\n");
pc_printf(" -E treat warnings as errors\n");
pc_printf(" -X<num> abstract machine size limit in bytes\n");
pc_printf(" -\\ use '\\' for escape characters\n");
pc_printf(" -^ use '^' for escape characters\n");
pc_printf(" -;[+/-] require a semicolon to end each statement (default=%c)\n", sc_needsemicolon ? '+' : '-');
pc_printf(" -([+/-] require parantheses for function invocation (default=%c)\n", optproccall ? '-' : '+');
pc_printf(" sym=val define constant \"sym\" with value \"val\"\n");
pc_printf(" sym= define constant \"sym\" with value 0\n");
#if defined __WIN32__ || defined _WIN32 || defined _Windows || defined __MSDOS__
pc_printf("\nOptions may start with a dash or a slash; the options \"-d0\" and \"/d0\" are\n");
pc_printf("equivalent.\n");
@@ -2227,48 +2170,53 @@ static cell calc_arraysize(int dim[],int numdim,int cur)
return dim[cur]+(dim[cur]*calc_arraysize(dim,numdim,cur+1));
}
static void adjust_indirectiontables(int dim[],int numdim,int startlit,
constvalue *lastdim,int *skipdim)
static cell adjust_indirectiontables(int dim[],int numdim,int cur,cell increment,
int startlit,constvalue *lastdim,int *skipdim)
{
static int base;
int cur;
int i,d;
int d;
cell accum;
cell size;
assert(startlit==-1 || startlit>=0 && startlit<=litidx);
base=startlit;
size=1;
for (cur=0; cur<numdim-1; cur++) {
/* 2 or more dimensions left, fill in an indirection vector */
if (dim[cur+1]>0) {
for (i=0; i<size; i++)
for (d=0; d<dim[cur]; d++)
litq[base++]=(size*dim[cur]+(dim[cur+1]-1)*(dim[cur]*i+d)) * sizeof(cell);
} else {
/* final dimension is variable length */
constvalue *ld;
assert(dim[cur+1]==0);
assert(lastdim!=NULL);
assert(skipdim!=NULL);
accum=0;
for (i=0; i<size; i++) {
/* skip the final dimension sizes for all earlier major dimensions */
for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) {
assert(ld!=NULL);
} /* for */
for (d=0; d<dim[cur]; d++) {
assert(ld!=NULL);
assert(strtol(ld->name,NULL,16)==d);
litq[base++]=(size*dim[cur]+accum) * sizeof(cell);
accum+=ld->value-1;
*skipdim+=1;
ld=ld->next;
} /* for */
} /* for */
} /* if */
size*=dim[cur];
} /* for */
assert(cur>=0 && cur<numdim);
assert(increment>=0);
assert(cur>0 && startlit==-1 || startlit>=0 && startlit<=litidx);
if (cur==0)
base=startlit;
if (cur==numdim-1)
return 0;
/* 2 or more dimensions left, fill in an indirection vector */
assert(dim[cur]>0);
if (dim[cur+1]>0) {
for (d=0; d<dim[cur]; d++)
litq[base++]=(dim[cur]+d*(dim[cur+1]-1)+increment) * sizeof(cell);
accum=dim[cur]*(dim[cur+1]-1);
} else {
/* final dimension is variable length */
constvalue *ld;
assert(dim[cur+1]==0);
assert(lastdim!=NULL);
assert(skipdim!=NULL);
accum=0;
/* skip the final dimension sizes for all earlier major dimensions */
for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) {
assert(ld!=NULL);
} /* for */
for (d=0; d<dim[cur]; d++) {
assert(ld!=NULL);
assert(strtol(ld->name,NULL,16)==d);
litq[base++]=(dim[cur]+accum+increment) * sizeof(cell);
accum+=ld->value-1;
*skipdim+=1;
ld=ld->next;
} /* for */
} /* if */
/* create the indirection tables for the lower level */
if (cur+2<numdim) { /* are there at least 2 dimensions below this one? */
increment+=(dim[cur]-1)*dim[cur+1]; /* this many indirection tables follow */
for (d=0; d<dim[cur]; d++)
increment+=adjust_indirectiontables(dim,numdim,cur+1,increment,-1,lastdim,skipdim);
} /* if */
return accum;
}
/* initials
@@ -2326,7 +2274,7 @@ static void initials2(int ident,int tag,cell *size,int dim[],int numdim,
for (tablesize=calc_arraysize(dim,numdim-1,0); tablesize>0; tablesize--)
litadd(0);
if (dim[numdim-1]!=0) /* error 9 has already been given */
adjust_indirectiontables(dim,numdim,curlit,NULL,NULL);
adjust_indirectiontables(dim,numdim,0,0,curlit,NULL,NULL);
} /* if */
return;
} /* if */
@@ -2392,7 +2340,7 @@ static void initials2(int ident,int tag,cell *size,int dim[],int numdim,
* of the array and we can properly adjust the indirection vectors
*/
if (err==0)
adjust_indirectiontables(dim,numdim,curlit,&lastdim,&skipdim);
adjust_indirectiontables(dim,numdim,0,0,curlit,&lastdim,&skipdim);
delete_consttable(&lastdim); /* clear list of minor dimension sizes */
} /* if */
} /* if */
@@ -5507,16 +5455,6 @@ static void doreturn(void)
/* nothing */;
sub=addvariable(curfunc->name,(argcount+3)*sizeof(cell),iREFARRAY,sGLOBAL,curfunc->tag,dim,numdim,idxtag);
sub->parent=curfunc;
/* Function that returns array can be used before it is defined, so at
* the call point (if it is before definition) we may not know if this
* function returns array and what is its size (for example inside the
* conditional operator), so we don't know how many cells on the heap
* we need. Calculating heap consumption is required for the fix of
* incorrect heap deallocation on conditional operator. That's why we
* need an additional pass.
*/
if ((curfunc->usage & uREAD)!=0)
sc_reparse=TRUE;
} /* if */
/* get the hidden parameter, copy the array (the array is on the heap;
* it stays on the heap for the moment, and it is removed -usually- at
@@ -5789,137 +5727,3 @@ static int *readwhile(void)
return (wqptr-wqSIZE);
} /* if */
}
#if !defined SC_LIGHT
static long max_stacksize_recurse(symbol** sourcesym, symbol* sym, symbol** rsourcesym, long basesize, int* pubfuncparams, int* recursion)
{
long size, maxsize;
int i, stkpos;
assert(sourcesym != NULL);
assert(sym != NULL);
assert(sym->ident == iFUNCTN);
assert((sym->usage & uNATIVE) == 0);
assert(recursion != NULL);
maxsize = sym->x.stacksize;
for (i = 0; i < sym->numrefers; i++) {
if (sym->refer[i] != NULL) {
assert(sym->refer[i]->ident == iFUNCTN);
assert((sym->refer[i]->usage & uNATIVE) == 0); /* a native function cannot refer to a user-function */
*(rsourcesym) = sym;
*(rsourcesym + 1) = NULL;
for (stkpos = 0; sourcesym[stkpos] != NULL; stkpos++) {
if (sym->refer[i] == sourcesym[stkpos]) { /* recursion detection */
*recursion = 1;
goto break_recursion; /* recursion was detected, quit loop */
} /* if */
} /* for */
/* add this symbol to the stack */
sourcesym[stkpos] = sym;
sourcesym[stkpos + 1] = NULL;
/* check size of callee */
size = max_stacksize_recurse(sourcesym, sym->refer[i], rsourcesym + 1, sym->x.stacksize, pubfuncparams, recursion);
if (maxsize < size)
maxsize = size;
/* remove this symbol from the stack */
sourcesym[stkpos] = NULL;
} /* if */
} /* for */
break_recursion:
if ((sym->usage & uPUBLIC) != 0) {
/* Find out how many parameters a public function has, then see if this
* is bigger than some maximum
*/
arginfo* arg = sym->dim.arglist;
int count = 0;
assert(arg != 0);
while (arg->ident != 0) {
count++;
arg++;
} /* while */
assert(pubfuncparams != 0);
if (count > * pubfuncparams)
*pubfuncparams = count;
} /* if */
return maxsize + basesize;
}
static long max_stacksize(symbol* root, int* recursion)
{
/* Loop over all non-native functions. For each function, loop
* over all of its referrers, accumulating the stack requirements.
* Detect (indirect) recursion with a "mark-and-sweep" algorithm.
* I (mis-)use the "compound" field of the symbol structure for
* the marker, as this field is unused for functions.
*
* Note that the stack is shared with the heap. A host application
* may "eat" cells from the heap as well, through amx_Allot(). The
* stack requirements are thus only an estimate.
*/
long size, maxsize;
int maxparams, numfunctions;
symbol* sym;
symbol** symstack, ** rsymstack;
assert(root != NULL);
assert(recursion != NULL);
/* count number of functions (for allocating the stack for recursion detection) */
numfunctions = 0;
for (sym = root->next; sym != NULL; sym = sym->next) {
if (sym->ident == iFUNCTN) {
assert(sym->compound == 0);
if ((sym->usage & uNATIVE) == 0)
numfunctions++;
} /* if */
} /* if */
/* allocate function symbol stack */
symstack = (symbol**)malloc((numfunctions + 1) * sizeof(symbol*));
rsymstack = (symbol**)malloc((numfunctions + 1) * sizeof(symbol*));
if (symstack == NULL || rsymstack == NULL)
error(103); /* insufficient memory (fatal error) */
memset(symstack, 0, (numfunctions + 1) * sizeof(symbol*));
memset(rsymstack, 0, (numfunctions + 1) * sizeof(symbol*));
maxsize = 0;
maxparams = 0;
*recursion = 0; /* assume no recursion */
for (sym = root->next; sym != NULL; sym = sym->next) {
int recursion_detected;
/* drop out if this is not a user-implemented function */
if (sym->ident != iFUNCTN || (sym->usage & uNATIVE) != 0)
continue;
/* accumulate stack size for this symbol */
symstack[0] = sym;
assert(symstack[1] == NULL);
recursion_detected = 0;
size = max_stacksize_recurse(symstack, sym, rsymstack, 0L, &maxparams, &recursion_detected);
if (recursion_detected) {
if (rsymstack[1] == NULL) {
pc_printf("recursion detected: function %s directly calls itself\n", sym->name);
}
else {
int i;
pc_printf("recursion detected: function %s indirectly calls itself:\n", sym->name);
pc_printf("%s ", sym->name);
for (i = 1; rsymstack[i] != NULL; i++) {
pc_printf("<- %s ", rsymstack[i]->name);
}
pc_printf("<- %s\n", sym->name);
}
*recursion = recursion_detected;
}
assert(size >= 0);
if (maxsize < size)
maxsize = size;
} /* for */
free((void*)symstack);
free((void*)rsymstack);
maxsize++; /* +1 because a zero cell is always pushed on top
* of the stack to catch stack overwrites */
return maxsize + (maxparams + 1);/* +1 because # of parameters is always pushed on entry */
}
#endif

View File

@@ -1190,8 +1190,6 @@ static int command(void)
if (comma)
lptr++;
} while (comma);
} else if (strcmp(str, "showstackusageinfo")==0) {
sc_stkusageinfo=TRUE;
} else {
error(207); /* unknown #pragma */
} /* if */

65
compiler/libpc300/sc3.c Normal file → Executable file
View File

@@ -1010,60 +1010,38 @@ static int hier13(value *lval)
{
int lvalue=plnge1(hier12,lval);
if (matchtoken('?')) {
int locheap=decl_heap; /* save current heap delta */
long heap1,heap2; /* max. heap delta either branch */
valuepair *heaplist_node;
int flab1=getlabel();
int flab2=getlabel();
value lval2 = {0};
int array1,array2;
int orig_heap=decl_heap;
int diff1=0,diff2=0;
if (lvalue) {
rvalue(lval);
} else if (lval->ident==iCONSTEXPR) {
ldconst(lval->constval,sPRI);
error(lval->constval ? 206 : 205); /* redundant test */
} /* if */
if (sc_status==statFIRST) {
/* We should push a new node right now otherwise we will pop it in the
* wrong order on the write stage.
*/
heaplist_node=push_heaplist(0,0); /* save the pointer to write the actual data later */
} else if (sc_status==statWRITE || sc_status==statSKIP) {
#if !defined NDEBUG
int result=
#endif
popfront_heaplist(&heap1,&heap2);
assert(result); /* pop off equally many items than were pushed */
} /* if */
jmp_eq0(flab1); /* go to second expression if primary register==0 */
PUSHSTK_I(sc_allowtags);
sc_allowtags=FALSE; /* do not allow tagnames here (colon is a special token) */
if (sc_status==statWRITE) {
modheap(heap1*sizeof(cell));
decl_heap+=heap1; /* equilibrate the heap (see comment below) */
} /* if */
if (hier13(lval))
rvalue(lval);
if (lval->ident==iCONSTEXPR) /* load constant here */
ldconst(lval->constval,sPRI);
sc_allowtags=(short)POPSTK_I(); /* restore */
heap1=decl_heap-locheap; /* save heap space used in "true" branch */
assert(heap1>=0);
decl_heap=locheap; /* restore heap delta */
jumplabel(flab2);
setlabel(flab1);
if (orig_heap!=decl_heap) {
diff1=abs(decl_heap-orig_heap);
decl_heap=orig_heap;
}
needtoken(':');
if (sc_status==statWRITE) {
modheap(heap2*sizeof(cell));
decl_heap+=heap2; /* equilibrate the heap (see comment below) */
} /* if */
if (hier13(&lval2))
rvalue(&lval2);
if (lval2.ident==iCONSTEXPR) /* load constant here */
ldconst(lval2.constval,sPRI);
heap2=decl_heap-locheap; /* save heap space used in "false" branch */
assert(heap2>=0);
array1= (lval->ident==iARRAY || lval->ident==iREFARRAY);
array2= (lval2.ident==iARRAY || lval2.ident==iREFARRAY);
if (array1 && !array2) {
@@ -1077,26 +1055,19 @@ static int hier13(value *lval)
if (!matchtag(lval->tag,lval2.tag,FALSE))
error(213); /* tagname mismatch ('true' and 'false' expressions) */
setlabel(flab2);
if (sc_status==statFIRST) {
/* Calculate the max. heap space used by either branch and save values of
* max - heap1 and max - heap2. On the second pass, we use these values
* to equilibrate the heap space used by either branch. This is needed
* because we don't know (at compile time) which branch will be taken,
* but the heap cannot be restored inside each branch because the result
* on the heap may needed by the remaining expression.
*/
int max=(heap1>heap2) ? heap1 : heap2;
heaplist_node->first=max-heap1;
heaplist_node->second=max-heap2;
decl_heap=locheap+max; /* otherwise it will contain locheap+heap2 and the
* max. heap usage will be wrong for the upper
* expression */
} /* if */
assert(sc_status!=statWRITE || heap1==heap2);
if (lval->ident==iARRAY)
lval->ident=iREFARRAY; /* iARRAY becomes iREFARRAY */
else if (lval->ident!=iREFARRAY)
lval->ident=iEXPRESSION; /* iREFARRAY stays iREFARRAY, rest becomes iEXPRESSION */
if (orig_heap!=decl_heap) {
diff2=abs(decl_heap-orig_heap);
decl_heap=orig_heap;
}
if (diff1==diff2) {
decl_heap+=(diff1/2);
} else {
decl_heap+=(diff1+diff2);
}
return FALSE; /* conditional expression is no lvalue */
} else {
return lvalue;
@@ -2087,8 +2058,7 @@ static int nesting=0;
error(35,argidx+1); /* argument type mismatch */
/* Verify that the dimensions match with those in arg[argidx].
* A literal array always has a single dimension.
* An iARRAYCELL parameter is also assumed to have a single dimension,
* but its size may be >1 in case of an enumeration pseudo-array.
* An iARRAYCELL parameter is also assumed to have a single dimension.
*/
if (lval.sym==NULL || lval.ident==iARRAYCELL) {
if (arg[argidx].numdim!=1) {
@@ -2096,8 +2066,7 @@ static int nesting=0;
} else if (arg[argidx].dim[0]!=0) {
assert(arg[argidx].dim[0]>0);
if (lval.ident==iARRAYCELL) {
if (lval.constval==0 || arg[argidx].dim[0]!=lval.constval)
error(47); /* array sizes must match */
error(47); /* array sizes must match */
} else {
assert(lval.constval!=0); /* literal array must have a size */
/* A literal array must have exactly the same size as the

View File

@@ -443,52 +443,6 @@ SC_FUNC void delete_autolisttable(void)
}
/* ----- value pair list ----------------------------------------- */
static valuepair heaplist = {NULL, 0, 0};
SC_FUNC valuepair *push_heaplist(long first, long second)
{
valuepair *cur, *last;
if ((cur=malloc(sizeof(valuepair)))==NULL)
error(103); /* insufficient memory (fatal error) */
cur->first=first;
cur->second=second;
cur->next=NULL;
for (last=&heaplist; last->next!=NULL; last=last->next)
/* nothing */;
last->next=cur;
return cur;
}
SC_FUNC int popfront_heaplist(long *first, long *second)
{
valuepair *front=heaplist.next;
if (front==NULL)
return 0;
/* copy fields */
*first=front->first;
*second=front->second;
/* unlink and free */
heaplist.next=front->next;
free(front);
return 1;
}
SC_FUNC void delete_heaplisttable(void)
{
valuepair *cur;
while (heaplist.next!=NULL) {
cur=heaplist.next;
heaplist.next=cur->next;
free(cur);
} /* while */
}
/* ----- debug information --------------------------------------- */
static stringlist dbgstrings = {NULL, NULL};

View File

@@ -87,7 +87,6 @@ SC_VDEFINE int sc_allowproccall=0; /* allow/detect tagnames in lex() */
SC_VDEFINE char *pc_deprecate = NULL;/* if non-null, mark next declaration as deprecated */
SC_VDEFINE int sc_showincludes=0; /* show include files */
SC_VDEFINE int sc_warnings_are_errors=0;
SC_VDEFINE int sc_stkusageinfo = FALSE; /* show stack usage info? */
SC_VDEFINE constvalue sc_automaton_tab = { NULL, "", 0, 0}; /* automaton table */
SC_VDEFINE constvalue sc_state_tab = { NULL, "", 0, 0}; /* state table */

4719
configs/hamdata.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1566,7 +1566,7 @@
//
// Team Fortress Classic
//
"entities.games/tfc/offsets-cbaseentity.txt"
{
"game" "tfc"
@@ -3404,7 +3404,7 @@
//
// Half-Life: Deathmatch
//
"entities.games/valve/offsets-cbaseentity.txt"
{
"game" "valve"
@@ -4105,67 +4105,4 @@
"game" "valve"
}
//
// Virtual Functions
//
"virtual.games/ag/offsets-common.txt"
{
"game" "ag"
}
"virtual.games/cstrike/offsets-common.txt"
{
"game" "cstrike"
"game" "czero"
}
"virtual.games/dod/offsets-common.txt"
{
"game" "dod"
}
"virtual.games/esf/offsets-common.txt"
{
"game" "esf"
}
"virtual.games/esf_openbeta/offsets-common.txt"
{
"game" "esf_openbeta"
}
"virtual.games/gearbox/offsets-common.txt"
{
"game" "gearbox"
}
"virtual.games/ns/offsets-common.txt"
{
"game" "ns"
"game" "nsp"
}
"virtual.games/svencoop/offsets-common.txt"
{
"game" "svencoop"
}
"virtual.games/tfc/offsets-common.txt"
{
"game" "tfc"
}
"virtual.games/ts/offsets-common.txt"
{
"game" "ts"
}
"virtual.games/valve/offsets-common.txt"
{
"game" "valve"
"game" "dmc"
}
}

View File

@@ -1,938 +0,0 @@
/**
* Do not edit this file. Any changes will be overwritten by the gamedata
* updater or by upgrading your AMX Mod X install.
*
* To override data in this file, create a subdirectory named "custom" and
* place your own gamedata file(s) inside of it. Such files will be parsed
* after AMXX's own.
*
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(AMX_Mod_X)
*/
"Games"
{
"#default"
{
"Offsets"
{
"pev"
{
"windows" "4"
"linux" "0"
}
"base"
{
"windows" "0x0"
"linux" "0x60"
}
"spawn"
{
"windows" "0"
"linux" "2"
}
"precache"
{
"windows" "1"
"linux" "3"
}
"keyvalue"
{
"windows" "2"
"linux" "4"
}
"objectcaps"
{
"windows" "5"
"linux" "7"
}
"activate"
{
"windows" "6"
"linux" "8"
}
"setobjectcollisionbox"
{
"windows" "7"
"linux" "9"
}
"classify"
{
"windows" "8"
"linux" "10"
}
"deathnotice"
{
"windows" "9"
"linux" "11"
}
"traceattack"
{
"windows" "10"
"linux" "12"
}
"takedamage"
{
"windows" "11"
"linux" "13"
}
"takehealth"
{
"windows" "12"
"linux" "14"
}
"killed"
{
"windows" "13"
"linux" "15"
}
"bloodcolor"
{
"windows" "14"
"linux" "16"
}
"tracebleed"
{
"windows" "15"
"linux" "17"
}
"istriggered"
{
"windows" "16"
"linux" "18"
}
"mymonsterpointer"
{
"windows" "17"
"linux" "19"
}
"mysquadmonsterpointer"
{
"windows" "18"
"linux" "20"
}
"gettogglestate"
{
"windows" "19"
"linux" "21"
}
"addpoints"
{
"windows" "20"
"linux" "22"
}
"addpointstoteam"
{
"windows" "21"
"linux" "23"
}
"addplayeritem"
{
"windows" "22"
"linux" "24"
}
"removeplayeritem"
{
"windows" "23"
"linux" "25"
}
"giveammo"
{
"windows" "24"
"linux" "26"
}
"getdelay"
{
"windows" "25"
"linux" "27"
}
"ismoving"
{
"windows" "26"
"linux" "28"
}
"overridereset"
{
"windows" "27"
"linux" "29"
}
"damagedecal"
{
"windows" "28"
"linux" "30"
}
"settogglestate"
{
"windows" "29"
"linux" "31"
}
"startsneaking"
{
"windows" "30"
"linux" "32"
}
"stopsneaking"
{
"windows" "31"
"linux" "33"
}
"oncontrols"
{
"windows" "32"
"linux" "34"
}
"issneaking"
{
"windows" "33"
"linux" "35"
}
"isalive"
{
"windows" "34"
"linux" "36"
}
"isbspmodel"
{
"windows" "35"
"linux" "37"
}
"reflectgauss"
{
"windows" "36"
"linux" "38"
}
"hastarget"
{
"windows" "37"
"linux" "39"
}
"isinworld"
{
"windows" "38"
"linux" "40"
}
"isplayer"
{
"windows" "39"
"linux" "41"
}
"isnetclient"
{
"windows" "40"
"linux" "42"
}
"teamid"
{
"windows" "41"
"linux" "43"
}
"getnexttarget"
{
"windows" "42"
"linux" "44"
}
"think"
{
"windows" "43"
"linux" "45"
}
"touch"
{
"windows" "44"
"linux" "46"
}
"use"
{
"windows" "45"
"linux" "47"
}
"blocked"
{
"windows" "46"
"linux" "48"
}
"respawn"
{
"windows" "48"
"linux" "50"
}
"updateowner"
{
"windows" "49"
"linux" "51"
}
"fbecomeprone"
{
"windows" "50"
"linux" "52"
}
"center"
{
"windows" "51"
"linux" "53"
}
"eyeposition"
{
"windows" "52"
"linux" "54"
}
"earposition"
{
"windows" "53"
"linux" "55"
}
"bodytarget"
{
"windows" "54"
"linux" "56"
}
"illumination"
{
"windows" "55"
"linux" "57"
}
"fvisible"
{
"windows" "56"
"linux" "58"
}
"fvecvisible"
{
"windows" "57"
"linux" "59"
}
"look"
{
"windows" "60"
"linux" "62"
}
"changeyaw"
{
"windows" "63"
"linux" "65"
}
"irelationship"
{
"windows" "65"
"linux" "67"
}
"monsterinitdead"
{
"windows" "67"
"linux" "69"
}
"becomedead"
{
"windows" "68"
"linux" "70"
}
"bestvisibleenemy"
{
"windows" "70"
"linux" "72"
}
"finviewcone"
{
"windows" "71"
"linux" "73"
}
"fvecinviewcone"
{
"windows" "72"
"linux" "74"
}
"runai"
{
"windows" "61"
"linux" "63"
}
"monsterthink"
{
"windows" "64"
"linux" "66"
}
"monsterinit"
{
"windows" "66"
"linux" "68"
}
"checklocalmove"
{
"windows" "73"
"linux" "75"
}
"move"
{
"windows" "74"
"linux" "76"
}
"moveexecute"
{
"windows" "75"
"linux" "77"
}
"shouldadvanceroute"
{
"windows" "76"
"linux" "78"
}
"getstoppedactivity"
{
"windows" "77"
"linux" "79"
}
"stop"
{
"windows" "78"
"linux" "80"
}
"checkrangeattack1"
{
"windows" "79"
"linux" "81"
}
"checkrangeattack2"
{
"windows" "80"
"linux" "82"
}
"checkmeleeattack1"
{
"windows" "81"
"linux" "83"
}
"checkmeleeattack2"
{
"windows" "82"
"linux" "84"
}
"schedulechange"
{
"windows" "88"
"linux" "90"
}
"canplaysequence"
{
"windows" "89"
"linux" "91"
}
"canplaysentence"
{
"windows" "90"
"linux" "92"
}
"playsentence"
{
"windows" "91"
"linux" "93"
}
"playscriptedsentence"
{
"windows" "92"
"linux" "94"
}
"sentencestop"
{
"windows" "93"
"linux" "95"
}
"getidealstate"
{
"windows" "94"
"linux" "96"
}
"setactivity"
{
"windows" "95"
"linux" "97"
}
"reportaistate"
{
"windows" "96"
"linux" "98"
}
"checkenemy"
{
"windows" "97"
"linux" "99"
}
"ftriangulate"
{
"windows" "98"
"linux" "100"
}
"setyawspeed"
{
"windows" "99"
"linux" "101"
}
"buildnearestroute"
{
"windows" "100"
"linux" "102"
}
"findcover"
{
"windows" "101"
"linux" "103"
}
"coverradius"
{
"windows" "103"
"linux" "105"
}
"fcancheckattacks"
{
"windows" "104"
"linux" "106"
}
"checkammo"
{
"windows" "105"
"linux" "107"
}
"ignoreconditions"
{
"windows" "106"
"linux" "108"
}
"fvalidatehinttype"
{
"windows" "107"
"linux" "109"
}
"fcanactiveidle"
{
"windows" "108"
"linux" "110"
}
"isoundmask"
{
"windows" "109"
"linux" "111"
}
"hearingsensitivity"
{
"windows" "112"
"linux" "114"
}
"barnaclevictimbitten"
{
"windows" "113"
"linux" "115"
}
"barnaclevictimreleased"
{
"windows" "114"
"linux" "116"
}
"preschedulethink"
{
"windows" "115"
"linux" "117"
}
"getdeathactivity"
{
"windows" "116"
"linux" "118"
}
"gibmonster"
{
"windows" "117"
"linux" "119"
}
"hashumangibs"
{
"windows" "118"
"linux" "120"
}
"hasaliengibs"
{
"windows" "119"
"linux" "121"
}
"fademonster"
{
"windows" "120"
"linux" "122"
}
"deathsound"
{
"windows" "122"
"linux" "124"
}
"alertsound"
{
"windows" "123"
"linux" "125"
}
"idlesound"
{
"windows" "124"
"linux" "126"
}
"painsound"
{
"windows" "125"
"linux" "127"
}
"stopfollowing"
{
"windows" "126"
"linux" "128"
}
"player_jump"
{
"windows" "127"
"linux" "129"
}
"player_duck"
{
"windows" "128"
"linux" "130"
}
"player_prethink"
{
"windows" "129"
"linux" "131"
}
"player_postthink"
{
"windows" "130"
"linux" "132"
}
"player_getgunposition"
{
"windows" "121"
"linux" "123"
}
"player_shouldfadeondeath"
{
"windows" "62"
"linux" "64"
}
"player_impulsecommands"
{
"windows" "132"
"linux" "134"
}
"player_updateclientdata"
{
"windows" "131"
"linux" "133"
}
"item_addtoplayer"
{
"windows" "59"
"linux" "61"
}
"item_addduplicate"
{
"windows" "60"
"linux" "62"
}
"item_getiteminfo"
{
"windows" "61"
"linux" "63"
}
"item_candeploy"
{
"windows" "62"
"linux" "64"
}
"item_deploy"
{
"windows" "63"
"linux" "65"
}
"item_canholster"
{
"windows" "64"
"linux" "66"
}
"item_holster"
{
"windows" "65"
"linux" "67"
}
"item_updateiteminfo"
{
"windows" "66"
"linux" "68"
}
"item_preframe"
{
"windows" "67"
"linux" "69"
}
"item_postframe"
{
"windows" "68"
"linux" "70"
}
"item_drop"
{
"windows" "69"
"linux" "71"
}
"item_kill"
{
"windows" "70"
"linux" "72"
}
"item_attachtoplayer"
{
"windows" "71"
"linux" "73"
}
"item_primaryammoindex"
{
"windows" "72"
"linux" "74"
}
"item_secondaryammoindex"
{
"windows" "73"
"linux" "75"
}
"item_updateclientdata"
{
"windows" "74"
"linux" "76"
}
"item_getweaponptr"
{
"windows" "75"
"linux" "77"
}
"item_itemslot"
{
"windows" "76"
"linux" "78"
}
"weapon_extractammo"
{
"windows" "77"
"linux" "79"
}
"weapon_extractclipammo"
{
"windows" "78"
"linux" "80"
}
"weapon_addweapon"
{
"windows" "79"
"linux" "81"
}
"weapon_playemptysound"
{
"windows" "80"
"linux" "82"
}
"weapon_resetemptysound"
{
"windows" "81"
"linux" "83"
}
"weapon_sendweaponanim"
{
"windows" "82"
"linux" "84"
}
"weapon_isusable"
{
"windows" "83"
"linux" "85"
}
"weapon_primaryattack"
{
"windows" "84"
"linux" "86"
}
"weapon_secondaryattack"
{
"windows" "85"
"linux" "87"
}
"weapon_reload"
{
"windows" "86"
"linux" "88"
}
"weapon_weaponidle"
{
"windows" "87"
"linux" "89"
}
"weapon_retireweapon"
{
"windows" "88"
"linux" "90"
}
"weapon_shouldweaponidle"
{
"windows" "89"
"linux" "91"
}
"weapon_usedecrement"
{
"windows" "90"
"linux" "92"
}
}
}
}

View File

@@ -1,874 +0,0 @@
/**
* Do not edit this file. Any changes will be overwritten by the gamedata
* updater or by upgrading your AMX Mod X install.
*
* To override data in this file, create a subdirectory named "custom" and
* place your own gamedata file(s) inside of it. Such files will be parsed
* after AMXX's own.
*
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(AMX_Mod_X)
*/
"Games"
{
"#default"
{
"Offsets"
{
"pev"
{
"windows" "4"
"linux" "4"
"mac" "4"
}
"base"
{
"windows" "0x0"
"linux" "0x0"
"mac" "0x0"
}
"spawn"
{
"windows" "0"
"linux" "0"
"mac" "0"
}
"precache"
{
"windows" "1"
"linux" "1"
"mac" "1"
}
"keyvalue"
{
"windows" "3"
"linux" "3"
"mac" "3"
}
"objectcaps"
{
"windows" "6"
"linux" "6"
"mac" "6"
}
"activate"
{
"windows" "7"
"linux" "7"
"mac" "7"
}
"setobjectcollisionbox"
{
"windows" "8"
"linux" "8"
"mac" "8"
}
"classify"
{
"windows" "9"
"linux" "9"
"mac" "9"
}
"deathnotice"
{
"windows" "10"
"linux" "10"
"mac" "10"
}
"traceattack"
{
"windows" "11"
"linux" "11"
"mac" "11"
}
"takedamage"
{
"windows" "12"
"linux" "12"
"mac" "12"
}
"takehealth"
{
"windows" "13"
"linux" "13"
"mac" "13"
}
"killed"
{
"windows" "14"
"linux" "14"
"mac" "14"
}
"bloodcolor"
{
"windows" "15"
"linux" "15"
"mac" "15"
}
"tracebleed"
{
"windows" "16"
"linux" "16"
"mac" "16"
}
"istriggered"
{
"windows" "17"
"linux" "17"
"mac" "17"
}
"mymonsterpointer"
{
"windows" "18"
"linux" "18"
"mac" "18"
}
"mysquadmonsterpointer"
{
"windows" "19"
"linux" "19"
"mac" "19"
}
"gettogglestate"
{
"windows" "20"
"linux" "20"
"mac" "20"
}
"addpoints"
{
"windows" "21"
"linux" "21"
"mac" "21"
}
"addpointstoteam"
{
"windows" "22"
"linux" "22"
"mac" "22"
}
"addplayeritem"
{
"windows" "23"
"linux" "23"
"mac" "23"
}
"removeplayeritem"
{
"windows" "24"
"linux" "24"
"mac" "24"
}
"giveammo"
{
"windows" "25"
"linux" "25"
"mac" "25"
}
"getdelay"
{
"windows" "26"
"linux" "26"
"mac" "26"
}
"ismoving"
{
"windows" "27"
"linux" "27"
"mac" "27"
}
"overridereset"
{
"windows" "28"
"linux" "28"
"mac" "28"
}
"damagedecal"
{
"windows" "29"
"linux" "29"
"mac" "29"
}
"settogglestate"
{
"windows" "30"
"linux" "30"
"mac" "30"
}
"startsneaking"
{
"windows" "31"
"linux" "31"
"mac" "31"
}
"stopsneaking"
{
"windows" "32"
"linux" "32"
"mac" "32"
}
"oncontrols"
{
"windows" "33"
"linux" "33"
"mac" "33"
}
"issneaking"
{
"windows" "34"
"linux" "34"
"mac" "34"
}
"isalive"
{
"windows" "35"
"linux" "35"
"mac" "35"
}
"isbspmodel"
{
"windows" "36"
"linux" "36"
"mac" "36"
}
"reflectgauss"
{
"windows" "37"
"linux" "37"
"mac" "37"
}
"hastarget"
{
"windows" "38"
"linux" "38"
"mac" "38"
}
"isinworld"
{
"windows" "39"
"linux" "39"
"mac" "39"
}
"isplayer"
{
"windows" "40"
"linux" "40"
"mac" "40"
}
"isnetclient"
{
"windows" "41"
"linux" "41"
"mac" "41"
}
"teamid"
{
"windows" "42"
"linux" "42"
"mac" "42"
}
"getnexttarget"
{
"windows" "43"
"linux" "43"
"mac" "43"
}
"think"
{
"windows" "44"
"linux" "44"
"mac" "44"
}
"touch"
{
"windows" "45"
"linux" "45"
"mac" "45"
}
"use"
{
"windows" "46"
"linux" "46"
"mac" "46"
}
"blocked"
{
"windows" "47"
"linux" "47"
"mac" "47"
}
"respawn"
{
"windows" "48"
"linux" "48"
"mac" "48"
}
"updateowner"
{
"windows" "49"
"linux" "49"
"mac" "49"
}
"fbecomeprone"
{
"windows" "50"
"linux" "50"
"mac" "50"
}
"center"
{
"windows" "51"
"linux" "51"
"mac" "51"
}
"eyeposition"
{
"windows" "52"
"linux" "52"
"mac" "52"
}
"earposition"
{
"windows" "53"
"linux" "53"
"mac" "53"
}
"bodytarget"
{
"windows" "54"
"linux" "54"
"mac" "54"
}
"illumination"
{
"windows" "55"
"linux" "55"
"mac" "55"
}
"fvisible"
{
"windows" "56"
"linux" "56"
"mac" "56"
}
"fvecvisible"
{
"windows" "57"
"linux" "57"
"mac" "57"
}
"changeyaw"
{
"windows" "59"
"linux" "59"
"mac" "59"
}
"hashumangibs"
{
"windows" "60"
"linux" "60"
"mac" "60"
}
"hasaliengibs"
{
"windows" "61"
"linux" "61"
"mac" "61"
}
"fademonster"
{
"windows" "62"
"linux" "62"
"mac" "62"
}
"gibmonster"
{
"windows" "63"
"linux" "63"
"mac" "63"
}
"getdeathactivity"
{
"windows" "64"
"linux" "64"
"mac" "64"
}
"becomedead"
{
"windows" "65"
"linux" "65"
"mac" "65"
}
"irelationship"
{
"windows" "67"
"linux" "67"
"mac" "67"
}
"painsound"
{
"windows" "68"
"linux" "68"
"mac" "68"
}
"reportaistate"
{
"windows" "70"
"linux" "70"
"mac" "70"
}
"monsterinitdead"
{
"windows" "71"
"linux" "71"
"mac" "71"
}
"look"
{
"windows" "72"
"linux" "72"
"mac" "72"
}
"bestvisibleenemy"
{
"windows" "73"
"linux" "73"
"mac" "73"
}
"finviewcone"
{
"windows" "75"
"linux" "74"
"mac" "74"
}
"fvecinviewcone"
{
"windows" "74"
"linux" "75"
"mac" "75"
}
"player_jump"
{
"windows" "76"
"linux" "76"
"mac" "76"
}
"player_duck"
{
"windows" "77"
"linux" "77"
"mac" "77"
}
"player_prethink"
{
"windows" "78"
"linux" "78"
"mac" "78"
}
"player_postthink"
{
"windows" "79"
"linux" "79"
"mac" "79"
}
"player_getgunposition"
{
"windows" "80"
"linux" "80"
"mac" "80"
}
"player_shouldfadeondeath"
{
"windows" "66"
"linux" "66"
"mac" "66"
}
"player_impulsecommands"
{
"windows" "83"
"linux" "83"
"mac" "83"
}
"player_updateclientdata"
{
"windows" "82"
"linux" "82"
"mac" "82"
}
"item_addtoplayer"
{
"windows" "59"
"linux" "59"
"mac" "59"
}
"item_addduplicate"
{
"windows" "60"
"linux" "60"
"mac" "60"
}
"item_getiteminfo"
{
"windows" "61"
"linux" "61"
"mac" "61"
}
"item_candeploy"
{
"windows" "62"
"linux" "62"
"mac" "62"
}
"item_deploy"
{
"windows" "64"
"linux" "64"
"mac" "64"
}
"item_canholster"
{
"windows" "66"
"linux" "66"
"mac" "66"
}
"item_holster"
{
"windows" "67"
"linux" "67"
"mac" "67"
}
"item_updateiteminfo"
{
"windows" "68"
"linux" "68"
"mac" "68"
}
"item_preframe"
{
"windows" "69"
"linux" "69"
"mac" "69"
}
"item_postframe"
{
"windows" "70"
"linux" "70"
"mac" "70"
}
"item_drop"
{
"windows" "71"
"linux" "71"
"mac" "71"
}
"item_kill"
{
"windows" "72"
"linux" "72"
"mac" "72"
}
"item_attachtoplayer"
{
"windows" "73"
"linux" "73"
"mac" "73"
}
"item_primaryammoindex"
{
"windows" "74"
"linux" "74"
"mac" "74"
}
"item_secondaryammoindex"
{
"windows" "75"
"linux" "75"
"mac" "75"
}
"item_updateclientdata"
{
"windows" "76"
"linux" "76"
"mac" "76"
}
"item_getweaponptr"
{
"windows" "77"
"linux" "77"
"mac" "77"
}
"item_itemslot"
{
"windows" "79"
"linux" "79"
"mac" "79"
}
"weapon_extractammo"
{
"windows" "80"
"linux" "80"
"mac" "80"
}
"weapon_extractclipammo"
{
"windows" "81"
"linux" "81"
"mac" "81"
}
"weapon_addweapon"
{
"windows" "82"
"linux" "82"
"mac" "82"
}
"weapon_playemptysound"
{
"windows" "83"
"linux" "83"
"mac" "83"
}
"weapon_resetemptysound"
{
"windows" "84"
"linux" "84"
"mac" "84"
}
"weapon_isusable"
{
"windows" "86"
"linux" "86"
"mac" "86"
}
"weapon_primaryattack"
{
"windows" "87"
"linux" "87"
"mac" "87"
}
"weapon_secondaryattack"
{
"windows" "88"
"linux" "88"
"mac" "88"
}
"weapon_reload"
{
"windows" "89"
"linux" "89"
"mac" "89"
}
"weapon_weaponidle"
{
"windows" "90"
"linux" "90"
"mac" "90"
}
"weapon_retireweapon"
{
"windows" "91"
"linux" "91"
"mac" "91"
}
"weapon_shouldweaponidle"
{
"windows" "92"
"linux" "92"
"mac" "92"
}
"weapon_usedecrement"
{
"windows" "93"
"linux" "93"
"mac" "93"
}
"cstrike_restart"
{
"windows" "2"
"linux" "2"
"mac" "2"
}
"cstrike_roundrespawn"
{
"windows" "84"
"linux" "84"
"mac" "84"
}
"cstrike_item_candrop"
{
"windows" "63"
"linux" "63"
"mac" "63"
}
"cstrike_item_isweapon"
{
"windows" "65"
"linux" "65"
"mac" "65"
}
"cstrike_item_getmaxspeed"
{
"windows" "78"
"linux" "78"
"mac" "78"
}
"cstrike_weapon_sendweaponanim"
{
"windows" "85"
"linux" "85"
"mac" "85"
}
"cstrike_player_resetmaxspeed"
{
"windows" "69"
"linux" "69"
"mac" "69"
}
"cstrike_player_isbot"
{
"windows" "81"
"linux" "81"
"mac" "81"
}
"cstrike_player_getautoaimvector"
{
"windows" "85"
"linux" "85"
"mac" "85"
}
"cstrike_player_blind"
{
"windows" "86"
"linux" "86"
"mac" "86"
}
"cstrike_player_ontouchingweapon"
{
"windows" "87"
"linux" "87"
"mac" "87"
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,902 +0,0 @@
/**
* Do not edit this file. Any changes will be overwritten by the gamedata
* updater or by upgrading your AMX Mod X install.
*
* To override data in this file, create a subdirectory named "custom" and
* place your own gamedata file(s) inside of it. Such files will be parsed
* after AMXX's own.
*
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(AMX_Mod_X)
*/
"Games"
{
"#default"
{
"Offsets"
{
"pev"
{
"windows" "4"
"linux" "0"
}
"base"
{
"windows" "0x0"
"linux" "0x60"
}
"spawn"
{
"windows" "0"
"linux" "2"
}
"precache"
{
"windows" "1"
"linux" "3"
}
"keyvalue"
{
"windows" "2"
"linux" "4"
}
"objectcaps"
{
"windows" "5"
"linux" "7"
}
"activate"
{
"windows" "6"
"linux" "8"
}
"setobjectcollisionbox"
{
"windows" "7"
"linux" "9"
}
"classify"
{
"windows" "8"
"linux" "10"
}
"deathnotice"
{
"windows" "9"
"linux" "11"
}
"traceattack"
{
"windows" "10"
"linux" "12"
}
"takedamage"
{
"windows" "11"
"linux" "13"
}
"takehealth"
{
"windows" "12"
"linux" "14"
}
"killed"
{
"windows" "13"
"linux" "15"
}
"bloodcolor"
{
"windows" "14"
"linux" "16"
}
"tracebleed"
{
"windows" "15"
"linux" "17"
}
"istriggered"
{
"windows" "16"
"linux" "18"
}
"mymonsterpointer"
{
"windows" "17"
"linux" "19"
}
"mysquadmonsterpointer"
{
"windows" "18"
"linux" "20"
}
"gettogglestate"
{
"windows" "19"
"linux" "21"
}
"addpoints"
{
"windows" "20"
"linux" "22"
}
"addpointstoteam"
{
"windows" "21"
"linux" "23"
}
"addplayeritem"
{
"windows" "22"
"linux" "24"
}
"removeplayeritem"
{
"windows" "23"
"linux" "25"
}
"getdelay"
{
"windows" "24"
"linux" "26"
}
"ismoving"
{
"windows" "25"
"linux" "27"
}
"overridereset"
{
"windows" "26"
"linux" "28"
}
"damagedecal"
{
"windows" "27"
"linux" "29"
}
"settogglestate"
{
"windows" "28"
"linux" "30"
}
"startsneaking"
{
"windows" "29"
"linux" "31"
}
"stopsneaking"
{
"windows" "30"
"linux" "32"
}
"oncontrols"
{
"windows" "31"
"linux" "33"
}
"issneaking"
{
"windows" "32"
"linux" "34"
}
"isalive"
{
"windows" "33"
"linux" "35"
}
"isbspmodel"
{
"windows" "34"
"linux" "36"
}
"reflectgauss"
{
"windows" "35"
"linux" "37"
}
"hastarget"
{
"windows" "36"
"linux" "38"
}
"isinworld"
{
"windows" "37"
"linux" "39"
}
"isplayer"
{
"windows" "38"
"linux" "40"
}
"isnetclient"
{
"windows" "39"
"linux" "41"
}
"teamid"
{
"windows" "40"
"linux" "42"
}
"getnexttarget"
{
"windows" "41"
"linux" "43"
}
"think"
{
"windows" "42"
"linux" "44"
}
"touch"
{
"windows" "43"
"linux" "45"
}
"use"
{
"windows" "44"
"linux" "46"
}
"blocked"
{
"windows" "45"
"linux" "47"
}
"respawn"
{
"windows" "46"
"linux" "48"
}
"updateowner"
{
"windows" "47"
"linux" "49"
}
"fbecomeprone"
{
"windows" "48"
"linux" "50"
}
"center"
{
"windows" "49"
"linux" "51"
}
"eyeposition"
{
"windows" "50"
"linux" "52"
}
"earposition"
{
"windows" "51"
"linux" "53"
}
"bodytarget"
{
"windows" "52"
"linux" "54"
}
"illumination"
{
"windows" "53"
"linux" "55"
}
"fvisible"
{
"windows" "54"
"linux" "56"
}
"fvecvisible"
{
"windows" "55"
"linux" "57"
}
"look"
{
"windows" "57"
"linux" "59"
}
"changeyaw"
{
"windows" "60"
"linux" "62"
}
"irelationship"
{
"windows" "62"
"linux" "64"
}
"monsterinitdead"
{
"windows" "64"
"linux" "66"
}
"becomedead"
{
"windows" "65"
"linux" "67"
}
"bestvisibleenemy"
{
"windows" "67"
"linux" "69"
}
"finviewcone"
{
"windows" "68"
"linux" "70"
}
"fvecinviewcone"
{
"windows" "69"
"linux" "71"
}
"runai"
{
"windows" "58"
"linux" "60"
}
"monsterthink"
{
"windows" "61"
"linux" "63"
}
"monsterinit"
{
"windows" "63"
"linux" "65"
}
"checklocalmove"
{
"windows" "70"
"linux" "72"
}
"move"
{
"windows" "71"
"linux" "73"
}
"moveexecute"
{
"windows" "72"
"linux" "74"
}
"shouldadvanceroute"
{
"windows" "73"
"linux" "75"
}
"getstoppedactivity"
{
"windows" "74"
"linux" "76"
}
"stop"
{
"windows" "75"
"linux" "77"
}
"checkrangeattack1"
{
"windows" "76"
"linux" "78"
}
"checkrangeattack2"
{
"windows" "77"
"linux" "79"
}
"checkmeleeattack1"
{
"windows" "78"
"linux" "80"
}
"checkmeleeattack2"
{
"windows" "79"
"linux" "81"
}
"schedulechange"
{
"windows" "85"
"linux" "87"
}
"canplaysequence"
{
"windows" "86"
"linux" "88"
}
"canplaysentence"
{
"windows" "87"
"linux" "89"
}
"playsentence"
{
"windows" "88"
"linux" "90"
}
"playscriptedsentence"
{
"windows" "89"
"linux" "91"
}
"sentencestop"
{
"windows" "90"
"linux" "92"
}
"getidealstate"
{
"windows" "91"
"linux" "93"
}
"setactivity"
{
"windows" "92"
"linux" "94"
}
"reportaistate"
{
"windows" "93"
"linux" "95"
}
"checkenemy"
{
"windows" "94"
"linux" "96"
}
"ftriangulate"
{
"windows" "95"
"linux" "97"
}
"setyawspeed"
{
"windows" "96"
"linux" "98"
}
"buildnearestroute"
{
"windows" "97"
"linux" "99"
}
"findcover"
{
"windows" "98"
"linux" "100"
}
"coverradius"
{
"windows" "100"
"linux" "102"
}
"fcancheckattacks"
{
"windows" "101"
"linux" "103"
}
"checkammo"
{
"windows" "102"
"linux" "104"
}
"ignoreconditions"
{
"windows" "103"
"linux" "105"
}
"fvalidatehinttype"
{
"windows" "104"
"linux" "106"
}
"fcanactiveidle"
{
"windows" "105"
"linux" "107"
}
"isoundmask"
{
"windows" "106"
"linux" "108"
}
"hearingsensitivity"
{
"windows" "109"
"linux" "111"
}
"barnaclevictimbitten"
{
"windows" "110"
"linux" "112"
}
"barnaclevictimreleased"
{
"windows" "111"
"linux" "113"
}
"preschedulethink"
{
"windows" "112"
"linux" "114"
}
"getdeathactivity"
{
"windows" "113"
"linux" "115"
}
"gibmonster"
{
"windows" "114"
"linux" "116"
}
"hashumangibs"
{
"windows" "115"
"linux" "117"
}
"hasaliengibs"
{
"windows" "116"
"linux" "118"
}
"fademonster"
{
"windows" "117"
"linux" "119"
}
"deathsound"
{
"windows" "119"
"linux" "121"
}
"alertsound"
{
"windows" "120"
"linux" "122"
}
"idlesound"
{
"windows" "121"
"linux" "123"
}
"painsound"
{
"windows" "122"
"linux" "124"
}
"stopfollowing"
{
"windows" "123"
"linux" "125"
}
"player_jump"
{
"windows" "124"
"linux" "126"
}
"player_prethink"
{
"windows" "125"
"linux" "127"
}
"player_postthink"
{
"windows" "126"
"linux" "128"
}
"player_getgunposition"
{
"windows" "118"
"linux" "120"
}
"player_shouldfadeondeath"
{
"windows" "59"
"linux" "61"
}
"player_impulsecommands"
{
"windows" "128"
"linux" "130"
}
"player_updateclientdata"
{
"windows" "127"
"linux" "129"
}
"item_addtoplayer"
{
"windows" "57"
"linux" "59"
}
"item_addduplicate"
{
"windows" "58"
"linux" "60"
}
"item_getiteminfo"
{
"windows" "59"
"linux" "61"
}
"item_candeploy"
{
"windows" "60"
"linux" "62"
}
"item_deploy"
{
"windows" "61"
"linux" "63"
}
"item_canholster"
{
"windows" "62"
"linux" "64"
}
"item_holster"
{
"windows" "63"
"linux" "65"
}
"item_updateiteminfo"
{
"windows" "64"
"linux" "66"
}
"item_preframe"
{
"windows" "65"
"linux" "67"
}
"item_postframe"
{
"windows" "66"
"linux" "68"
}
"item_drop"
{
"windows" "67"
"linux" "69"
}
"item_kill"
{
"windows" "68"
"linux" "70"
}
"item_attachtoplayer"
{
"windows" "69"
"linux" "71"
}
"item_primaryammoindex"
{
"windows" "70"
"linux" "72"
}
"item_secondaryammoindex"
{
"windows" "71"
"linux" "73"
}
"item_updateclientdata"
{
"windows" "72"
"linux" "74"
}
"item_getweaponptr"
{
"windows" "73"
"linux" "75"
}
"item_itemslot"
{
"windows" "74"
"linux" "76"
}
"weapon_playemptysound"
{
"windows" "75"
"linux" "77"
}
"weapon_resetemptysound"
{
"windows" "76"
"linux" "78"
}
"weapon_sendweaponanim"
{
"windows" "77"
"linux" "79"
}
"weapon_primaryattack"
{
"windows" "78"
"linux" "80"
}
"weapon_secondaryattack"
{
"windows" "79"
"linux" "81"
}
"weapon_weaponidle"
{
"windows" "80"
"linux" "82"
}
"weapon_retireweapon"
{
"windows" "81"
"linux" "83"
}
"weapon_shouldweaponidle"
{
"windows" "82"
"linux" "84"
}
"weapon_usedecrement"
{
"windows" "83"
"linux" "85"
}
"esf_weapon_holsterwhenmeleed"
{
"windows" "84"
"linux" "86"
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,878 +0,0 @@
/**
* Do not edit this file. Any changes will be overwritten by the gamedata
* updater or by upgrading your AMX Mod X install.
*
* To override data in this file, create a subdirectory named "custom" and
* place your own gamedata file(s) inside of it. Such files will be parsed
* after AMXX's own.
*
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(AMX_Mod_X)
*/
"Games"
{
"#default"
{
"Offsets"
{
"pev"
{
"windows" "4"
"linux" "4"
}
"base"
{
"windows" "0x0"
"linux" "0x0"
}
"spawn"
{
"windows" "0"
"linux" "0"
}
"precache"
{
"windows" "1"
"linux" "1"
}
"keyvalue"
{
"windows" "2"
"linux" "2"
}
"objectcaps"
{
"windows" "5"
"linux" "5"
}
"activate"
{
"windows" "6"
"linux" "6"
}
"setobjectcollisionbox"
{
"windows" "7"
"linux" "7"
}
"classify"
{
"windows" "8"
"linux" "8"
}
"deathnotice"
{
"windows" "9"
"linux" "9"
}
"traceattack"
{
"windows" "10"
"linux" "10"
}
"takedamage"
{
"windows" "11"
"linux" "11"
}
"takehealth"
{
"windows" "12"
"linux" "12"
}
"killed"
{
"windows" "14"
"linux" "14"
}
"bloodcolor"
{
"windows" "16"
"linux" "16"
}
"tracebleed"
{
"windows" "17"
"linux" "17"
}
"istriggered"
{
"windows" "18"
"linux" "18"
}
"mymonsterpointer"
{
"windows" "19"
"linux" "19"
}
"mysquadmonsterpointer"
{
"windows" "20"
"linux" "20"
}
"gettogglestate"
{
"windows" "21"
"linux" "21"
}
"addpoints"
{
"windows" "22"
"linux" "22"
}
"addpointstoteam"
{
"windows" "23"
"linux" "23"
}
"addplayeritem"
{
"windows" "24"
"linux" "24"
}
"removeplayeritem"
{
"windows" "25"
"linux" "25"
}
"giveammo"
{
"windows" "26"
"linux" "26"
}
"getdelay"
{
"windows" "27"
"linux" "27"
}
"ismoving"
{
"windows" "28"
"linux" "28"
}
"overridereset"
{
"windows" "29"
"linux" "29"
}
"damagedecal"
{
"windows" "30"
"linux" "30"
}
"settogglestate"
{
"windows" "31"
"linux" "31"
}
"startsneaking"
{
"windows" "32"
"linux" "32"
}
"stopsneaking"
{
"windows" "33"
"linux" "33"
}
"oncontrols"
{
"windows" "34"
"linux" "34"
}
"issneaking"
{
"windows" "35"
"linux" "35"
}
"isalive"
{
"windows" "36"
"linux" "36"
}
"isbspmodel"
{
"windows" "37"
"linux" "37"
}
"reflectgauss"
{
"windows" "38"
"linux" "38"
}
"hastarget"
{
"windows" "39"
"linux" "39"
}
"isinworld"
{
"windows" "40"
"linux" "40"
}
"isplayer"
{
"windows" "41"
"linux" "41"
}
"isnetclient"
{
"windows" "42"
"linux" "42"
}
"teamid"
{
"windows" "43"
"linux" "43"
}
"getnexttarget"
{
"windows" "46"
"linux" "46"
}
"think"
{
"windows" "47"
"linux" "47"
}
"touch"
{
"windows" "48"
"linux" "48"
}
"use"
{
"windows" "49"
"linux" "49"
}
"blocked"
{
"windows" "50"
"linux" "50"
}
"respawn"
{
"windows" "52"
"linux" "52"
}
"updateowner"
{
"windows" "53"
"linux" "53"
}
"fbecomeprone"
{
"windows" "54"
"linux" "54"
}
"center"
{
"windows" "55"
"linux" "55"
}
"eyeposition"
{
"windows" "56"
"linux" "56"
}
"earposition"
{
"windows" "57"
"linux" "57"
}
"bodytarget"
{
"windows" "58"
"linux" "58"
}
"illumination"
{
"windows" "59"
"linux" "59"
}
"fvisible"
{
"windows" "60"
"linux" "60"
}
"fvecvisible"
{
"windows" "61"
"linux" "61"
}
"changeyaw"
{
"windows" "65"
"linux" "65"
}
"hashumangibs"
{
"windows" "66"
"linux" "66"
}
"hasaliengibs"
{
"windows" "67"
"linux" "67"
}
"fademonster"
{
"windows" "68"
"linux" "68"
}
"gibmonster"
{
"windows" "69"
"linux" "69"
}
"getdeathactivity"
{
"windows" "70"
"linux" "70"
}
"becomedead"
{
"windows" "71"
"linux" "71"
}
"irelationship"
{
"windows" "73"
"linux" "73"
}
"painsound"
{
"windows" "74"
"linux" "74"
}
"reportaistate"
{
"windows" "75"
"linux" "75"
}
"monsterinitdead"
{
"windows" "76"
"linux" "76"
}
"look"
{
"windows" "77"
"linux" "77"
}
"bestvisibleenemy"
{
"windows" "78"
"linux" "78"
}
"finviewcone"
{
"windows" "80"
"linux" "80"
}
"fvecinviewcone"
{
"windows" "81"
"linux" "81"
}
"player_jump"
{
"windows" "83"
"linux" "83"
}
"player_duck"
{
"windows" "84"
"linux" "84"
}
"player_prethink"
{
"windows" "85"
"linux" "85"
}
"player_postthink"
{
"windows" "86"
"linux" "86"
}
"player_getgunposition"
{
"windows" "87"
"linux" "87"
}
"player_shouldfadeondeath"
{
"windows" "72"
"linux" "72"
}
"player_impulsecommands"
{
"windows" "101"
"linux" "101"
}
"player_updateclientdata"
{
"windows" "99"
"linux" "99"
}
"item_addtoplayer"
{
"windows" "64"
"linux" "64"
}
"item_addduplicate"
{
"windows" "65"
"linux" "65"
}
"item_getiteminfo"
{
"windows" "68"
"linux" "68"
}
"item_candeploy"
{
"windows" "69"
"linux" "69"
}
"item_deploy"
{
"windows" "70"
"linux" "70"
}
"item_canholster"
{
"windows" "71"
"linux" "71"
}
"item_holster"
{
"windows" "72"
"linux" "72"
}
"item_updateiteminfo"
{
"windows" "74"
"linux" "74"
}
"item_preframe"
{
"windows" "75"
"linux" "75"
}
"item_postframe"
{
"windows" "76"
"linux" "76"
}
"item_drop"
{
"windows" "77"
"linux" "77"
}
"item_kill"
{
"windows" "78"
"linux" "78"
}
"item_attachtoplayer"
{
"windows" "79"
"linux" "79"
}
"item_primaryammoindex"
{
"windows" "80"
"linux" "80"
}
"item_secondaryammoindex"
{
"windows" "81"
"linux" "81"
}
"item_updateclientdata"
{
"windows" "82"
"linux" "82"
}
"item_getweaponptr"
{
"windows" "83"
"linux" "83"
}
"item_itemslot"
{
"windows" "84"
"linux" "84"
}
"weapon_extractammo"
{
"windows" "85"
"linux" "85"
}
"weapon_extractclipammo"
{
"windows" "86"
"linux" "86"
}
"weapon_addweapon"
{
"windows" "87"
"linux" "87"
}
"weapon_playemptysound"
{
"windows" "88"
"linux" "88"
}
"weapon_resetemptysound"
{
"windows" "89"
"linux" "89"
}
"weapon_sendweaponanim"
{
"windows" "94"
"linux" "94"
}
"weapon_isusable"
{
"windows" "73"
"linux" "73"
}
"weapon_primaryattack"
{
"windows" "98"
"linux" "98"
}
"weapon_secondaryattack"
{
"windows" "99"
"linux" "99"
}
"weapon_reload"
{
"windows" "100"
"linux" "100"
}
"weapon_weaponidle"
{
"windows" "101"
"linux" "101"
}
"weapon_retireweapon"
{
"windows" "102"
"linux" "102"
}
"weapon_shouldweaponidle"
{
"windows" "103"
"linux" "103"
}
"weapon_usedecrement"
{
"windows" "104"
"linux" "104"
}
"ns_getpointvalue"
{
"windows" "13"
"linux" "13"
}
"ns_awardkill"
{
"windows" "15"
"linux" "15"
}
"ns_resetentity"
{
"windows" "45"
"linux" "45"
}
"ns_updateonremove"
{
"windows" "51"
"linux" "51"
}
"ns_setbonecontroller"
{
"windows" "63"
"linux" "63"
}
"ns_savedataforreset"
{
"windows" "64"
"linux" "64"
}
"ns_gethull"
{
"windows" "79"
"linux" "79"
}
"ns_getmaxwalkspeed"
{
"windows" "88"
"linux" "88"
}
"ns_setteamid"
{
"windows" "90"
"linux" "90"
}
"ns_geteffectiveplayerclass"
{
"windows" "91"
"linux" "91"
}
"ns_getauthenticationmask"
{
"windows" "92"
"linux" "92"
}
"ns_effectiveplayerclasschanged"
{
"windows" "93"
"linux" "93"
}
"ns_needsteamupdate"
{
"windows" "94"
"linux" "94"
}
"ns_sendteamupdate"
{
"windows" "95"
"linux" "95"
}
"ns_sendweaponupdate"
{
"windows" "96"
"linux" "96"
}
"ns_initplayerfromspawn"
{
"windows" "97"
"linux" "97"
}
"ns_packdeadplayeritems"
{
"windows" "98"
"linux" "98"
}
"ns_getanimationforactivity"
{
"windows" "100"
"linux" "100"
}
"ns_startobserver"
{
"windows" "102"
"linux" "102"
}
"ns_stopobserver"
{
"windows" "103"
"linux" "103"
}
"ns_getadrenalinefactor"
{
"windows" "104"
"linux" "104"
}
"ns_givenameditem"
{
"windows" "106"
"linux" "106"
}
"ns_suicide"
{
"windows" "107"
"linux" "107"
}
"ns_getcanuseweapon"
{
"windows" "108"
"linux" "108"
}
"ns_weapon_getweaponprimetime"
{
"windows" "90"
"linux" "90"
}
"ns_weapon_primeweapon"
{
"windows" "91"
"linux" "91"
}
"ns_weapon_getisweaponprimed"
{
"windows" "92"
"linux" "92"
}
"ns_weapon_getisweaponpriming"
{
"windows" "93"
"linux" "93"
}
"ns_weapon_defaultdeploy"
{
"windows" "95"
"linux" "95"
}
"ns_weapon_defaultreload"
{
"windows" "96"
"linux" "96"
}
"ns_weapon_getdeploytime"
{
"windows" "97"
"linux" "97"
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,746 +0,0 @@
/**
* Do not edit this file. Any changes will be overwritten by the gamedata
* updater or by upgrading your AMX Mod X install.
*
* To override data in this file, create a subdirectory named "custom" and
* place your own gamedata file(s) inside of it. Such files will be parsed
* after AMXX's own.
*
* For more information, see http://wiki.alliedmods.net/Gamedata_Updating_(AMX_Mod_X)
*/
"Games"
{
"#default"
{
"Offsets"
{
"pev"
{
"windows" "4"
"linux" "0"
}
"base"
{
"windows" "0x0"
"linux" "0x60"
}
"spawn"
{
"windows" "7"
"linux" "9"
}
"precache"
{
"windows" "8"
"linux" "10"
}
"keyvalue"
{
"windows" "9"
"linux" "11"
}
"objectcaps"
{
"windows" "12"
"linux" "14"
}
"activate"
{
"windows" "13"
"linux" "15"
}
"setobjectcollisionbox"
{
"windows" "16"
"linux" "18"
}
"classify"
{
"windows" "17"
"linux" "19"
}
"deathnotice"
{
"windows" "18"
"linux" "20"
}
"traceattack"
{
"windows" "19"
"linux" "21"
}
"takedamage"
{
"windows" "20"
"linux" "22"
}
"takehealth"
{
"windows" "21"
"linux" "23"
}
"killed"
{
"windows" "22"
"linux" "24"
}
"bloodcolor"
{
"windows" "23"
"linux" "25"
}
"tracebleed"
{
"windows" "24"
"linux" "26"
}
"istriggered"
{
"windows" "25"
"linux" "27"
}
"mymonsterpointer"
{
"windows" "26"
"linux" "28"
}
"mysquadmonsterpointer"
{
"windows" "27"
"linux" "29"
}
"gettogglestate"
{
"windows" "28"
"linux" "30"
}
"addpoints"
{
"windows" "29"
"linux" "31"
}
"addpointstoteam"
{
"windows" "30"
"linux" "32"
}
"addplayeritem"
{
"windows" "31"
"linux" "33"
}
"removeplayeritem"
{
"windows" "32"
"linux" "34"
}
"giveammo"
{
"windows" "33"
"linux" "35"
}
"getdelay"
{
"windows" "34"
"linux" "36"
}
"ismoving"
{
"windows" "35"
"linux" "37"
}
"overridereset"
{
"windows" "36"
"linux" "38"
}
"damagedecal"
{
"windows" "37"
"linux" "39"
}
"settogglestate"
{
"windows" "38"
"linux" "40"
}
"startsneaking"
{
"windows" "39"
"linux" "41"
}
"stopsneaking"
{
"windows" "40"
"linux" "42"
}
"oncontrols"
{
"windows" "41"
"linux" "43"
}
"issneaking"
{
"windows" "42"
"linux" "44"
}
"isalive"
{
"windows" "43"
"linux" "45"
}
"isbspmodel"
{
"windows" "44"
"linux" "46"
}
"reflectgauss"
{
"windows" "45"
"linux" "47"
}
"hastarget"
{
"windows" "46"
"linux" "48"
}
"isinworld"
{
"windows" "47"
"linux" "49"
}
"isplayer"
{
"windows" "48"
"linux" "50"
}
"isnetclient"
{
"windows" "49"
"linux" "51"
}
"teamid"
{
"windows" "50"
"linux" "52"
}
"getnexttarget"
{
"windows" "51"
"linux" "53"
}
"think"
{
"windows" "52"
"linux" "54"
}
"touch"
{
"windows" "53"
"linux" "55"
}
"use"
{
"windows" "54"
"linux" "56"
}
"blocked"
{
"windows" "55"
"linux" "57"
}
"respawn"
{
"windows" "57"
"linux" "59"
}
"updateowner"
{
"windows" "58"
"linux" "60"
}
"fbecomeprone"
{
"windows" "59"
"linux" "61"
}
"center"
{
"windows" "60"
"linux" "62"
}
"eyeposition"
{
"windows" "61"
"linux" "63"
}
"earposition"
{
"windows" "62"
"linux" "64"
}
"bodytarget"
{
"windows" "63"
"linux" "65"
}
"illumination"
{
"windows" "64"
"linux" "66"
}
"fvisible"
{
"windows" "65"
"linux" "67"
}
"fvecvisible"
{
"windows" "66"
"linux" "68"
}
"changeyaw"
{
"windows" "68"
"linux" "70"
}
"hashumangibs"
{
"windows" "69"
"linux" "71"
}
"hasaliengibs"
{
"windows" "70"
"linux" "72"
}
"fademonster"
{
"windows" "71"
"linux" "73"
}
"gibmonster"
{
"windows" "72"
"linux" "74"
}
"getdeathactivity"
{
"windows" "73"
"linux" "75"
}
"becomedead"
{
"windows" "74"
"linux" "76"
}
"irelationship"
{
"windows" "76"
"linux" "78"
}
"painsound"
{
"windows" "77"
"linux" "79"
}
"reportaistate"
{
"windows" "78"
"linux" "80"
}
"monsterinitdead"
{
"windows" "79"
"linux" "81"
}
"look"
{
"windows" "80"
"linux" "82"
}
"bestvisibleenemy"
{
"windows" "81"
"linux" "83"
}
"finviewcone"
{
"windows" "82"
"linux" "84"
}
"fvecinviewcone"
{
"windows" "83"
"linux" "85"
}
"player_jump"
{
"windows" "84"
"linux" "86"
}
"player_duck"
{
"windows" "85"
"linux" "87"
}
"player_prethink"
{
"windows" "86"
"linux" "88"
}
"player_postthink"
{
"windows" "87"
"linux" "89"
}
"player_getgunposition"
{
"windows" "88"
"linux" "90"
}
"player_shouldfadeondeath"
{
"windows" "75"
"linux" "77"
}
"player_impulsecommands"
{
"windows" "90"
"linux" "92"
}
"player_updateclientdata"
{
"windows" "89"
"linux" "91"
}
"item_addtoplayer"
{
"windows" "68"
"linux" "70"
}
"item_addduplicate"
{
"windows" "69"
"linux" "71"
}
"item_candeploy"
{
"windows" "71"
"linux" "73"
}
"item_deploy"
{
"windows" "72"
"linux" "74"
}
"item_canholster"
{
"windows" "73"
"linux" "75"
}
"item_holster"
{
"windows" "74"
"linux" "76"
}
"item_updateiteminfo"
{
"windows" "75"
"linux" "77"
}
"item_preframe"
{
"windows" "76"
"linux" "78"
}
"item_postframe"
{
"windows" "77"
"linux" "79"
}
"item_drop"
{
"windows" "78"
"linux" "80"
}
"item_kill"
{
"windows" "79"
"linux" "81"
}
"item_attachtoplayer"
{
"windows" "80"
"linux" "82"
}
"item_primaryammoindex"
{
"windows" "81"
"linux" "83"
}
"item_secondaryammoindex"
{
"windows" "82"
"linux" "84"
}
"item_updateclientdata"
{
"windows" "83"
"linux" "85"
}
"item_getweaponptr"
{
"windows" "84"
"linux" "86"
}
"item_itemslot"
{
"windows" "85"
"linux" "87"
}
"weapon_extractammo"
{
"windows" "86"
"linux" "88"
}
"weapon_extractclipammo"
{
"windows" "87"
"linux" "89"
}
"weapon_addweapon"
{
"windows" "88"
"linux" "90"
}
"weapon_playemptysound"
{
"windows" "89"
"linux" "91"
}
"weapon_resetemptysound"
{
"windows" "90"
"linux" "92"
}
"weapon_sendweaponanim"
{
"windows" "91"
"linux" "93"
}
"weapon_isusable"
{
"windows" "92"
"linux" "94"
}
"weapon_primaryattack"
{
"windows" "93"
"linux" "95"
}
"weapon_secondaryattack"
{
"windows" "94"
"linux" "96"
}
"weapon_reload"
{
"windows" "96"
"linux" "98"
}
"weapon_weaponidle"
{
"windows" "97"
"linux" "99"
}
"weapon_retireweapon"
{
"windows" "98"
"linux" "100"
}
"weapon_shouldweaponidle"
{
"windows" "99"
"linux" "101"
}
"weapon_usedecrement"
{
"windows" "100"
"linux" "102"
}
"ts_breakablerespawn"
{
"windows" "0"
"linux" "2"
}
"ts_canusedthroughwalls"
{
"windows" "1"
"linux" "3"
}
"ts_giveslowmul"
{
"windows" "2"
"linux" "4"
}
"ts_goslow"
{
"windows" "3"
"linux" "5"
}
"ts_inslow"
{
"windows" "4"
"linux" "6"
}
"ts_isobjective"
{
"windows" "5"
"linux" "7"
}
"ts_enableobjective"
{
"windows" "6"
"linux" "8"
}
"ts_onfreeentprivatedata"
{
"windows" "10"
"linux" "12"
}
"ts_shouldcollide"
{
"windows" "11"
"linux" "13"
}
"ts_weapon_alternateattack"
{
"windows" "95"
"linux" "97"
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -110,6 +110,7 @@ Section "MainSection" SEC01
File "installer\files\base\addons\amxmodx\configs\core.ini"
File "installer\files\base\addons\amxmodx\configs\custommenuitems.cfg"
File "installer\files\base\addons\amxmodx\configs\cvars.ini"
File "installer\files\base\addons\amxmodx\configs\hamdata.ini"
File "installer\files\base\addons\amxmodx\configs\maps.ini"
File "installer\files\base\addons\amxmodx\configs\modules.ini"
File "installer\files\base\addons\amxmodx\configs\plugins.ini"

View File

@@ -131,7 +131,7 @@ void CPlayer::restartStats(bool all)
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
life = {};
memset(&life,0,sizeof(life));
}
void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -95,14 +95,14 @@ void CPlayer::restartStats(bool all)
if ( all )
{
memset(weapons,0,sizeof(weapons));
memset(static_cast<void *>(&round),0,sizeof(round));
memset(&round,0,sizeof(round));
memset(weaponsRnd,0,sizeof(weaponsRnd));
}
memset(weaponsLife,0,sizeof(weaponsLife)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
life = {};
memset(&life,0,sizeof(life));
}
void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -172,7 +172,7 @@ void PlayerPreThink_Post(edict_t *pEntity)
if(pPlayer->clearRound && pPlayer->clearRound < gpGlobals->time)
{
pPlayer->clearRound = 0.0f;
memset(static_cast<void *>(&pPlayer->round),0,sizeof(pPlayer->round));
memset(&pPlayer->round,0,sizeof(pPlayer->round));
memset(pPlayer->weaponsRnd,0,sizeof(pPlayer->weaponsRnd));
}

View File

@@ -1255,7 +1255,7 @@ static cell AMX_NATIVE_CALL create_tr2(AMX *amx, cell *params)
tr = g_FreeTRs.front();
g_FreeTRs.pop();
}
memset(static_cast<void *>(tr), 0, sizeof(TraceResult));
memset(tr, 0, sizeof(TraceResult));
return reinterpret_cast<cell>(tr);
}

View File

@@ -11,46 +11,381 @@
// Ham Sandwich Module
//
#include <amxxmodule.h>
#include "amxxmodule.h"
#include "ham_const.h"
#include "hooklist.h"
#include "offsets.h"
#include <amtl/am-string.h>
IGameConfig *CommonConfig;
IGameConfigManager *ConfigManager;
extern hook_t hooklist[];
int ReadConfig(void)
enum
{
ConfigManager = MF_GetConfigManager();
LEX_INVALID = 0,
char error[256] = "";
LEX_UNKNOWN,
if (!ConfigManager->LoadGameConfigFile("common.games", &CommonConfig, error, sizeof error))
LEX_START_SEC,
LEX_END_SEC,
LEX_MIRROR,
LEX_PEV,
LEX_BASE,
LEX_END
};
const char *tokens[] =
{
"", // LEX_INVALID
"", // LEX_UNKNOWN
"@section", // LEX_START_SEC
"@end", // LEX_END_SEC
"@mirror", // LEX_MIRROR
"pev", // LEX_PEV
"base", // LEX_BASE
"", // LEX_END
};
static void trim_line(char *input);
static void read_mirror(char *input);
static void skip_to_end_of_section(FILE *fp);
static int lex(char*& buffer);
int lex(char*& buffer)
{
trim_line(buffer);
size_t len;
for (int i=0; i<LEX_END; i++)
{
MF_Log("common.games gamedata could not be read: %s", error);
return -1;
}
TypeDescription value;
if (CommonConfig->GetOffset("pev", &value))
{
Offsets.SetPev(value.fieldOffset);
}
if (CommonConfig->GetOffset("base", &value))
{
Offsets.SetBase(value.fieldOffset);
}
for (auto index = 0; index < HAM_LAST_ENTRY_DONT_USE_ME_LOL; ++index)
{
if (CommonConfig->GetOffset(hooklist[index].name, &value))
if (tokens[i]!=NULL && *(tokens[i])!='\0')
{
hooklist[index].isset = 1;
hooklist[index].vtid = value.fieldOffset;
len=strlen(tokens[i]);
if (strncmp(buffer,tokens[i],len)==0)
{
buffer+=len+1;
return i;
}
}
}
return LEX_UNKNOWN;
}
// How we handle "mirrors"
// We just note down the current mod name, and every time
// we come across a mirror with the destination that matches
// the current mod name, we change the current mod name to
// the source for that mirror.
char CurrentModName[64];
static void read_mirror(char *input)
{
char *data=input;
char *data2;
char source[64];
char dest[64];
char old;
while ( *data!=' ' &&
*data!='\t' &&
*data!='\0')
{
data++;
}
old=*data;
*data='\0';
// mark down the source
ke::SafeSprintf(source, sizeof(source), "%s", input);
*data=old;
while ( *data==' ' ||
*data=='\t')
{
data++;
}
data2=data;
while ( *data!=' ' &&
*data!='\t' &&
*data!='\0')
{
data++;
}
old=*data;
*data='\0';
ke::SafeSprintf(dest, sizeof(dest), "%s", data2);
*data=old;
if (strcmp(dest, CurrentModName)==0)
{
ke::SafeSprintf(CurrentModName, sizeof(CurrentModName), "%s", source);
}
}
static void trim_line(char *input)
{
char *oldinput=input;
char *start=input;
while ( *start==' ' ||
*start=='\t' ||
*start=='\r' ||
*start=='\n')
{
start++;
}
// Overwrite the whitespace
if (start != input)
{
while ((*input++=*start++)!='\0')
/* do nothing */ ;
}
start=oldinput;
start+=strlen(start) - 1;
while ( start >= oldinput &&
( *start == '\0' ||
*start == ' ' ||
*start == '\r' ||
*start == '\n' ||
*start == '\t'))
{
start--;
}
start++;
*start='\0';
// Now find any comments and cut off at the start
while (*start != '\0')
{
if (*start == ';')
{
*start='\0';
break;
}
start++;
}
}
void skip_to_end_of_section(FILE *fp)
{
char buffer[1024];
while (!feof(fp))
{
buffer[0]='\0';
fgets(buffer, sizeof(buffer)-1, fp);
trim_line(buffer);
char *b=&buffer[0];
if (lex(b)==LEX_END_SEC)
{
break;
}
}
}
static const char* get_localinfo( const char* name , const char* def = 0 )
{
const char* b = LOCALINFO( (char*)name );
if (((b==0)||(*b==0)) && def )
SET_LOCALINFO((char*)name,(char*)(b = def) );
return b;
}
int read_start_section(char *data)
{
if (strncasecmp(data, CurrentModName, strlen(CurrentModName))==0)
{
data+=strlen(CurrentModName)+1;
trim_line(data);
#ifdef _WIN32
if (strcmp(data, "windows")==0)
#elif defined(__linux__)
if (strcmp(data, "linux")==0)
#elif defined(__APPLE__)
if (strcmp(data, "mac")==0)
#endif
{
return 1;
}
}
return 0;
}
int read_number(char *input)
{
char *end; /* Temporary pointer, needed for strtoul(). */
// if begins with 0x or 0X it's to be interpretted as hex
if (*input=='0' &&
(*(input+1)=='x' || *(input+1)=='X'))
{
return strtoul(input,&end,16);
}
// otherwise it's to be interpretted as base 10
return strtoul(input,&end,10);
}
void process_pev(char *data)
{
trim_line(data);
Offsets.SetPev(read_number(data));
}
void process_base(char *data)
{
trim_line(data);
Offsets.SetBase(read_number(data));
}
void process_key(char *data)
{
size_t size=0;
char *a=data;
while (*a != ' ' && *a != '\t' && *a != '\0')
{
a++;
size++;
}
if (size==0)
{
return;
}
int set=0;
for (int i=0; i< HAM_LAST_ENTRY_DONT_USE_ME_LOL; i++)
{
if (strncmp(data, hooklist[i].name, size)==0)
{
data+=size+1;
trim_line(data);
int value=read_number(data);
hooklist[i].isset=1;
hooklist[i].vtid=value;
set=1;
break;
}
}
if (set==0)
{
printf("stray key in process_key: %s\n", data);
}
}
int ReadConfig(void)
{
char FileName[512];
MF_BuildPathnameR(FileName,sizeof(FileName),"%s",get_localinfo("amxx_configsdir","addons/amxmodx/configs"));
strncat(FileName,"/hamdata.ini",sizeof(FileName)-1);
FILE *fp=fopen(FileName,"r");
ke::SafeSprintf(CurrentModName, sizeof(CurrentModName), "%s", MF_GetModname());
if (!fp)
{
MF_Log("Unable to open \"%s\" for reading.", FileName);
return -1;
}
char data[2048];
int insec=0;
while (!feof(fp))
{
data[0]='\0';
fgets(data, sizeof(data)-1, fp);
char *b=&data[0];
switch(lex(b))
{
case LEX_PEV:
{
if (insec)
{
process_pev(b);
}
break;
};
case LEX_BASE:
{
if (insec)
{
process_base(b);
}
break;
};
case LEX_MIRROR:
{
read_mirror(b);
break;
};
case LEX_START_SEC:
{
insec=read_start_section(b);
if (!insec)
{
skip_to_end_of_section(fp);
}
break;
};
case LEX_END_SEC:
{
insec=0;
break;
};
case LEX_UNKNOWN:
{
if (insec)
{
process_key(b);
}
};
}
}
fclose(fp);
return 1;
}

View File

@@ -558,7 +558,7 @@ enum
HAM_OK = 0,
HAM_INVALID_FUNC, // The function is not valid
HAM_FUNC_NOT_CONFIGURED, // This function is not configured in gamedata
HAM_FUNC_NOT_CONFIGURED, // This function is not configured in hamdata.ini
HAM_FUNC_NOT_AVAILABLE, // This function is not more available in the mod
HAM_ERR_END

View File

@@ -33,7 +33,7 @@ extern HLTypeConversion TypeConversion;
return 0; \
} else if (hooklist[x].isset == 0) { \
char msg[1024]; \
ke::SafeSprintf(msg, sizeof(msg), "Function %s is not configured in gamedata.", hooklist[x].name); \
ke::SafeSprintf(msg, sizeof(msg), "Function %s is not configured in hamdata.ini.", hooklist[x].name); \
FailPlugin(amx, x, HAM_FUNC_NOT_CONFIGURED, msg); \
return 0; \
}

View File

@@ -136,7 +136,7 @@ extern bool gDoForwards;
#define CHECK_RETURN_VEC() \
if (thisresult < HAM_OVERRIDE) \
{ \
memcpy(static_cast<void *>(out), &origret, sizeof(Vector)); \
memcpy(out, &origret, sizeof(Vector)); \
return; \
}
@@ -852,8 +852,8 @@ void Hook_Vector_Float_Cbase_Int(Hook *hook, Vector *out, void *pthis, float f1,
MAKE_VECTOR()
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector));
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
int iEnt = TypeConversion.cbase_to_id(cb);
@@ -879,7 +879,7 @@ void Hook_Vector_Float_Cbase_Int(Hook *hook, Vector *out, void *pthis, float f1,
POP()
CHECK_RETURN_VEC()
memcpy(static_cast<void *>(out), &ret, sizeof(Vector));
memcpy(out, &ret, sizeof(Vector));
}
void Hook_Void_Cbase_Cbase_Int_Float(Hook *hook, void *pthis, void *cb1, void *cb2, int i1, float f1)
@@ -1038,8 +1038,8 @@ void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis)
MAKE_VECTOR()
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector));
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
PRE_START()
PRE_END()
@@ -1056,7 +1056,7 @@ void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis)
KILL_VECTOR()
POP()
CHECK_RETURN_VEC()
memcpy(static_cast<void *>(out), &ret, sizeof(Vector));
memcpy(out, &ret, sizeof(Vector));
}
@@ -1074,8 +1074,8 @@ void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1)
MAKE_VECTOR()
P_PTRVECTOR(v1)
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector));
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
PRE_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(v1), 3, false)
@@ -1094,7 +1094,7 @@ void Hook_Vector_pVector(Hook *hook, Vector *out, void *pthis, Vector *v1)
KILL_VECTOR()
POP()
CHECK_RETURN_VEC()
memcpy(static_cast<void *>(out), &ret, sizeof(Vector));
memcpy(out, &ret, sizeof(Vector));
}
int Hook_Int_pVector(Hook *hook, void *pthis, Vector *v1)
@@ -1476,8 +1476,8 @@ void Hook_Vector_Float(Hook *hook, Vector *out, void *pthis, float f1)
MAKE_VECTOR()
P_FLOAT(f1)
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector));
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
PRE_START()
, f1
@@ -1496,7 +1496,7 @@ void Hook_Vector_Float(Hook *hook, Vector *out, void *pthis, float f1)
KILL_VECTOR()
POP()
CHECK_RETURN_VEC()
memcpy(static_cast<void *>(out), &ret, sizeof(Vector));
memcpy(out, &ret, sizeof(Vector));
}
@@ -3269,8 +3269,8 @@ void Hook_Vector_Vector_Vector_Vector(Hook *hook, Vector *out, void *pthis, Vect
P_VECTOR(v2)
P_VECTOR(v3)
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector));
memset(&ret, 0x0, sizeof(Vector));
memset(&origret, 0x0, sizeof(Vector));
PRE_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(&v1), 3, false)
@@ -3294,7 +3294,7 @@ void Hook_Vector_Vector_Vector_Vector(Hook *hook, Vector *out, void *pthis, Vect
POP()
CHECK_RETURN_VEC()
memcpy(static_cast<void *>(out), &ret, sizeof(Vector));
memcpy(out, &ret, sizeof(Vector));
}
const char *Hook_Str_Str(Hook *hook, void *pthis, const char* str)

View File

@@ -697,6 +697,12 @@ static cell AMX_NATIVE_CALL amxx_json_object_set_value(AMX *amx, cell *params)
return 0;
}
if (!JsonMngr->IsValidHandle(params[3]))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON value! %d", params[3]);
return 0;
}
int len;
auto name = MF_GetAmxString(amx, params[2], 0, &len);

View File

@@ -178,7 +178,7 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
float save_time = m_qrInfo.queue_time;
memset(static_cast<void *>(&m_qrInfo), 0, sizeof(m_qrInfo));
memset(&m_qrInfo, 0, sizeof(m_qrInfo));
m_qrInfo.queue_time = save_time;

View File

@@ -162,7 +162,7 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
float save_time = m_qrInfo.queue_time;
memset(static_cast<void *>(&m_qrInfo), 0, sizeof(m_qrInfo));
memset(&m_qrInfo, 0, sizeof(m_qrInfo));
m_qrInfo.queue_time = save_time;

View File

@@ -130,7 +130,7 @@ void CPlayer::restartStats(bool all)
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
life = {};
memset(&life,0,sizeof(life));
}
void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -121,10 +121,23 @@ void Client_Damage(void* mValue){
if ( FNullEnt( enemy ) )
break;
#ifdef _DEBUG_TFCX
ALERT(at_logged, "Clinet_damage Called with state-%d dmg-%d Netname'%s'(Class'%s') slno-'%d'\n",
mState, damage, STRING(mPlayer->pEdict->v.netname),
STRING(mPlayer->pEdict->v.classname), mPlayer->pEdict->serialnumber);
ALERT(at_logged, " Called with enemy-slno-%d Netname:'%s'(Class'%s')\n", mPlayer->pEdict->serialnumber,
STRING(enemy->v.netname), STRING(enemy->v.classname));
#endif // _DEBUG_TFCX
if (enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT) ) { // attacker is player and his active weapon
pAttacker = GET_PLAYER_POINTER(enemy);
#ifdef _DEBUG_TFCX
ALERT(at_logged, " attacker is player and his active weapon id-%d, has flags - (FL_CLIENT | FL_FAKECLIENT)\n\n", pAttacker->current);
#endif // _DEBUG_TFCX
aim = pAttacker->aiming;
weapon = pAttacker->current;
@@ -150,6 +163,15 @@ void Client_Damage(void* mValue){
pAttacker = GET_PLAYER_POINTER(enemy->v.owner);
#ifdef _DEBUG_TFCX
ALERT(at_logged, " attacker is Class'%s'(with its enmy as Netname'%s'[Class'%s']) and his owner is '%s(%s)' enemy->owner has flags - FL_CLIENT | FL_FAKECLIENT\n\n",
(enemy ? STRING(enemy->v.classname) : "Null"),
(enemy->v.enemy ? STRING(enemy->v.enemy->v.netname) : "Null"),
(enemy->v.enemy ? STRING(enemy->v.enemy->v.classname) : "Null"),
(enemy->v.owner ? STRING(enemy->v.owner->v.netname) : "Null"),
(enemy->v.owner ? STRING(enemy->v.owner->v.classname) : "Null"));
#endif // _DEBUG_TFCX
const char *szClass = STRING(enemy->v.classname);
switch(szClass[10]){
@@ -185,16 +207,8 @@ void Client_Damage(void* mValue){
if ( !weapon ) {
switch(szClass[3]){
case 'e':
weapon = TFC_WPN_TIMER; // TFC_WPN_MEDKIT ??
tempInt = get_pdata_ehandle(mPlayer->pEdict, pdTimerOwner * 4); // function is char-based.
if (tempInt < 1 || tempInt > gpGlobals->maxClients)
{
break;
}
pAttacker = GET_PLAYER_POINTER_I(tempInt);
weapon = TFC_WPN_TIMER; // TFC_WPN_MEDKIT ?? //ShootingKing: Class - "timer"
pAttacker = GET_PLAYER_POINTER(enemy->v.enemy);
if (pAttacker->teamId == mPlayer->teamId) // ???
{

View File

@@ -82,7 +82,7 @@ void CPlayer::restartStats(bool all)
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
life = {};
memset(&life,0,sizeof(life));
}
void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -14,97 +14,64 @@
#include <amxmodx>
#include <amxmisc>
new CvarReservation;
new CvarHideSlots;
new CvarHandleMaxVisiblePlayers;
new g_ResPtr
new g_HidePtr
new g_sv_visiblemaxplayers
public plugin_init()
{
register_plugin("Slots Reservation", AMXX_VERSION_STR, "AMXX Dev Team");
register_dictionary("adminslots.txt");
register_dictionary("common.txt");
hook_cvar_change(create_cvar("amx_reservation", "0", FCVAR_PROTECTED, fmt("%L", LANG_SERVER, "CVAR_RESERVATION"), .has_min = true, .min_val = 0.0, .has_max = true, .max_val = float(MaxClients - 1)), "@OnReservationChange");
hook_cvar_change(create_cvar("amx_hideslots" , "0", FCVAR_NONE , fmt("%L", LANG_SERVER, "CVAR_HIDESLOTS") , .has_min = true, .min_val = 0.0, .has_max = true, .max_val = 1.0), "@OnHideSlotsChange");
CvarHandleMaxVisiblePlayers = get_cvar_pointer("sv_visiblemaxplayers");
register_plugin("Slots Reservation", AMXX_VERSION_STR, "AMXX Dev Team")
register_dictionary("adminslots.txt")
register_dictionary("common.txt")
g_ResPtr = register_cvar("amx_reservation", "0", FCVAR_PROTECTED)
g_HidePtr = register_cvar("amx_hideslots", "0")
g_sv_visiblemaxplayers = get_cvar_pointer("sv_visiblemaxplayers")
}
@OnReservationChange(const handle, const oldValue[], const newValue[])
public plugin_cfg()
{
CvarReservation = strtol(newValue);
setVisibleSlots();
set_task(3.0, "MapLoaded")
}
@OnHideSlotsChange(const handle, const oldValue[], const newValue[])
public MapLoaded()
{
CvarHideSlots = strtol(newValue);
setVisibleSlots();
if (get_pcvar_num(g_HidePtr))
{
setVisibleSlots(get_playersnum(1), MaxClients - get_pcvar_num(g_ResPtr))
}
}
public client_authorized(id)
{
setVisibleSlots(id);
new players = get_playersnum(1)
new limit = MaxClients - get_pcvar_num(g_ResPtr)
if (access(id, ADMIN_RESERVATION) || (players <= limit))
{
if (get_pcvar_num(g_HidePtr))
setVisibleSlots(players, limit)
return
}
server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "DROPPED_RES")
}
public client_remove(id)
{
setVisibleSlots();
if (get_pcvar_num(g_HidePtr))
{
setVisibleSlots(get_playersnum(1), MaxClients - get_pcvar_num(g_ResPtr))
}
}
setVisibleSlots(const playerId = 0)
setVisibleSlots(players, limit)
{
if ((playerId == 0 && !CvarHideSlots) || !CvarReservation)
{
if (get_pcvar_num(CvarHandleMaxVisiblePlayers) > 0)
{
resetVisibleSlots(MaxClients);
}
new num = players + 1
return;
}
new const playersCount = get_playersnum_ex(GetPlayers_IncludeConnecting);
new const freeVisibleSlots = MaxClients - CvarReservation;
if (playerId != 0)
{
if (playersCount > freeVisibleSlots && !access(playerId, ADMIN_RESERVATION))
{
server_cmd("kick #%d ^"%L^"", get_user_userid(playerId), playerId, "DROPPED_RES");
return;
}
if (!CvarHideSlots)
{
return;
}
}
new maxVisiblePlayers = playersCount + 1;
if (playersCount == MaxClients)
{
maxVisiblePlayers = MaxClients;
}
else if (playersCount < freeVisibleSlots)
{
maxVisiblePlayers = freeVisibleSlots;
}
resetVisibleSlots(maxVisiblePlayers);
}
resetVisibleSlots(value)
{
if (value == MaxClients)
{
value = -1; // Default sv_visiblemaxplayers value.
}
set_pcvar_num(CvarHandleMaxVisiblePlayers, value);
if (players == MaxClients)
num = MaxClients
else if (players < limit)
num = limit
set_pcvar_num(g_sv_visiblemaxplayers, num)
}

View File

@@ -495,8 +495,10 @@ findAdminsWithMenu(playersList[MAX_PLAYERS], &playersCount, const commandLevel =
get_players(playersList, playersCount, "ch");
for (new i = 0; i < playersCount, (player = playersList[i]); ++i)
for (new i = 0; i < playersCount; ++i)
{
player = playersList[i]
if (player_menu_info(player, menu, newmenu) && newmenu != -1 && newmenu == MenuHandle[player])
{
if (commandLevel == -1 || access(player, commandLevel)) // extra safety
@@ -519,8 +521,10 @@ refreshMenus(const commandLevel = 0, const bool:displaySaveMessage = false)
return;
}
for (new i = 0, player; i < playersCount, (player = playersList[i]); ++i)
for (new i = 0, player; i < playersCount; ++i)
{
player = playersList[i]
MenuHandle[player] = displayMenu(player, MenuPosition[player]);
if (displaySaveMessage)

View File

@@ -29,11 +29,6 @@
*/
#define MAX_STRING_LENGTH 16384
/**
* The maximum buffer size required to store a map's name.
*/
#define MAX_MAPNAME_LENGTH 64
/**
* Defines and constants related to the maximum number of clients.
*
@@ -49,11 +44,6 @@
*/
public stock const MaxClients;
/**
* Current map name
*/
public stock const MapName[MAX_MAPNAME_LENGTH];
/**
* Pass this into certain functions to act as a C++ NULL
*/
@@ -351,6 +341,7 @@ enum
kRenderFxExplode, /* Scale up really big! */
kRenderFxGlowShell, /* Glowing Shell */
kRenderFxClampMinScale, /* Keep this sprite from getting very small (SPRITES only!) */
kRenderFxLightMultiplier, /* CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier */
};
/**

View File

@@ -761,8 +761,12 @@ stock constraint_offset(low, high, seed, offset)
{
return low + (offset % numElements);
}
return high - (abs(offset) % numElements) + 1;
else
{
return high - (abs(offset) % numElements) + 1;
}
return 0; // Makes the compiler happy -_-
}
/**

View File

@@ -243,12 +243,10 @@ forward client_putinserver(id);
* @param plugin_name Name of the plugin
* @param version Version of the plugin
* @param author Author of the plugin
* @param url URL of the plugin
* @param description Description of the plugin
*
* @return Plugin id of the calling plugin
*/
native register_plugin(const plugin_name[], const version[], const author[], const url[] = "", const description[] = "");
native register_plugin(const plugin_name[], const version[], const author[]);
/**
* Precaches a model file.
@@ -672,7 +670,7 @@ native disable_logevent(handle);
*
* @param red Red component of hudmessage color
* @param green Green component of hudmessage color
* @param blue Blue component of hudmessage color
* @param blue Blue component of hudmessage color
* @param x Location of the message on the x axis in percent
* @param y Location of the message on the y axis in percent
* @param effects Display effect
@@ -681,10 +679,12 @@ native disable_logevent(handle);
* @param fadeintime Time it takes the message to fully appear (fade-in)
* @param fadeouttime Time it takes the message to fully disappear (fade-out)
* @param channel Channel to use on the client
*
* @param alpha1 Alpha component of hudmessage color
* @param color2[4] Color 2 array {r,g,b,a}
*
* @noreturn
*/
native set_hudmessage(red = 200, green = 100, blue = 0, Float:x = -1.0, Float:y = 0.35, effects = 0, Float:fxtime = 6.0, Float:holdtime = 12.0, Float:fadeintime = 0.1, Float:fadeouttime = 0.2, channel = -1);
native set_hudmessage(red = 200, green = 100, blue = 0, Float:x = -1.0, Float:y = 0.35, effects = 0, Float:fxtime = 6.0, Float:holdtime = 12.0, Float:fadeintime = 0.1, Float:fadeouttime = 0.2, channel = -1, alpha1 = 0, color2[4] = {255, 255, 250, 0});
/**
* Displays a message on the client HUD.
@@ -923,19 +923,6 @@ native is_user_bot(index);
*/
native is_user_hltv(index);
/**
* Returns if the client is authorized.
*
* @note This does not throw an error if the provided index is out of the
* 1 to MaxClients range. That means you can safely use this native
* without manually verifying that the index is a valid client index.
*
* @param index Client index
*
* @return 1 if client is authorized, 0 otherwise
*/
native is_user_authorized(index);
/**
* Returns if the client is connected.
*
@@ -2331,15 +2318,12 @@ native is_plugin_loaded(const name[], bool:usefilename = false);
* @param len4 Maximum author buffer size
* @param status Buffer to copy plugin status flags to
* @param len5 Maximum status buffer size
* @param url Buffer to copy plugin url to
* @param len6 Maximum url buffer size
* @param desc Buffer to copy plugin description to
* @param len7 Maximum description buffer size
* @param ... Unused and ignored
*
* @return Plugin index on success, -1 if there is no plugin with given
* index
*/
native get_plugin(index, filename[] = "", len1 = 0, name[] = "", len2 = 0, version[] = "", len3 = 0, author[] = "", len4 = 0, status[] = "", len5 = 0, url[] = "", len6 = 0, desc[] = "", len7 = 0);
native get_plugin(index, filename[] = "", len1 = 0, name[] = "", len2 = 0, version[] = "", len3 = 0, author[] = "", len4 = 0, status[] = "", len5 = 0, ...);
/**
* Returns the number of loaded AMXX plugins.

View File

@@ -12,6 +12,6 @@
#endif
#define _amxmodx_version_included
#define AMXX_VERSION 1.10.0
#define AMXX_VERSION_NUM 1100
stock const AMXX_VERSION_STR[] = "1.10.0-manual";
#define AMXX_VERSION 1.9.0
#define AMXX_VERSION_NUM 190
stock const AMXX_VERSION_STR[] = "1.9.0-manual";

View File

@@ -70,7 +70,7 @@ native create_cvar(const name[], const string[], flags = FCVAR_NONE, const descr
* Registers a new cvar for the engine.
*
* @note Deprecated. Consider to use create_cvar for more options.
* @note For a list of possible cvar flags see FCVAR_* constants in cvars.inc
* @note For a list of possible cvar flags see FCVAR_* constants in amxconst.inc
* @note If an already existing cvar is registered it will not be duplicated.
* The default value is only set when the cvar is registered for the very
* first time since the server was started.

View File

@@ -40,7 +40,7 @@
* This is the entity from which the function is being executed on.
* @note All functions and forwards (eg: {Register,Execute}Ham[B]) require
* the mod to have the pev and base keys in addition to the function
* keys for the corresponding mod/operating system in gamedata
* keys for the corresponding mod/operating system in hamdata.ini
* @note Some functions that return booleans may need to be logically ANDed
* to get the desired results because the mod will return the full integer
* value. E.g.: (ExecuteHam(Ham_TS_IsObjective, this) & 0x0000FFFF) != 0
@@ -4328,7 +4328,7 @@ enum HamError
HAM_OK = 0,
HAM_INVALID_FUNC, // The function is not valid
HAM_FUNC_NOT_CONFIGURED, // This function is not configured in gamedata
HAM_FUNC_NOT_CONFIGURED, // This function is not configured in hamdata.ini
HAM_FUNC_NOT_AVAILABLE, // This function is not more available in the mod
HAM_ERR_END

View File

@@ -15,7 +15,7 @@
* Ham Sandwich is a module that is used to hook and call virtual functions of
* entities.
* Virtual functions are mod-specific functions. This means that in order
* for this to work on a mod, it needs to be configured with the gamedata
* for this to work on a mod, it needs to be configured with the hamdata.ini
* file.
* Be very careful with parameter passing to these functions.
*/

View File

@@ -737,7 +737,7 @@ enum
* write_byte(TE_FIZZ)
* write_short(entity)
* write_short(sprite index)
* write_byte density)
* write_byte(density)
*/
#define TE_FIZZ 105

View File

@@ -76,7 +76,7 @@
/**
* Function to be called on Back and Next (param1 = string)
* public function(id, status, menu); where status is either MENU_BACK or MENU_MORE
* public function(id, status); where status is either MENU_BACK or MENU_MORE
* Pass NULL_STRING to disable the callback
*/
#define MPROP_PAGE_CALLBACK 11
@@ -117,14 +117,13 @@
* @param title Title the menu should use.
* @param handler Name of the handler function. The function will be invoked
* once and only once to every menu_display() call.
* @param ml If true, the menu title and items will be looked up as multilingual keys
* when the menu displays.
* @param ml Unused (should be 0).
* @return Menu resource identifier which must be destroyed via
* menu_destroy(). All menus are destroyed when the plugin
* unloads.
* @error Function name not found.
*/
native menu_create(const title[], const handler[], bool:ml = false);
native menu_create(const title[], const handler[], ml=0);
/**
* Creates a menu item callback handler.
@@ -257,17 +256,6 @@ native menu_item_setcmd(menu, item, const info[]);
*/
native menu_item_setcall(menu, item, callback=-1);
/**
* Sets an item's access.
*
* @param menu Menu resource identifier.
* @param item Item identifier.
* @param access New access required by the player for access to the item.
* @return 1 on success, 0 on failure.
* @error Invalid menu resource.
*/
native menu_item_setaccess(menu, item, access=0);
/**
* Destroys a menu. Player menus will be cancelled (although may still linger
* on the HUD), and future attempts to access the menu resource will result in

View File

@@ -519,7 +519,7 @@ stock SQL_SimpleQueryFmt(Handle:db, error[]="", maxlength=0, &rows=0, const fmt[
* @param queryfmt The query string that can be formated with format specifiers.
* @pram ... Additional arguments for formating the query.
*
* @return 1 on error.
* @return -1 on error.
* >= 0 on success (with the number of affected rows).
*/
stock SQL_QueryAndIgnore(Handle:db, const queryfmt[], any:...)

File diff suppressed because it is too large Load Diff

View File

@@ -314,7 +314,7 @@ NO_ENTRY = Ju nuk mund të futeni në server...
LOADED_ADMIN = 1 admin foi carregado do ficheiro
LOADED_ADMINS = %d admins foram carregados do ficheiro
SQL_CANT_CON = Erro de SQL: não foi possível conectar-se: '%s'
SQL_CANT_LOAD_ADMINS = Erro de SQl: não foi possível carregar admins: '%s'
SQL_CANT_LOAD_ADMINS = Erro de SQL: não foi possível carregar admins: '%s'
NO_ADMINS = Não foram encontrados admins.
SQL_LOADED_ADMIN = 1 admin foi carregado da base de dados
SQL_LOADED_ADMINS = %d admins foram carregados da base de dados

View File

@@ -204,7 +204,7 @@ COL_CYAN = cián
COL_ORANGE = narancs
COL_OCEAN = óceán
COL_MAROON = barna
PRINT_ALL = (MIND) %s : %s
PRINT_ALL = (MIND) %s : %s
[lt]
COL_WHITE = balta

View File

@@ -126,8 +126,8 @@ PAUSED = pausiert
UNPAUSED = fortgesetzt
UNABLE_PAUSE = Server konnte das Spiel nicht anhalten. Reale Spieler werden auf dem Server benötigt.
SERVER_PROC = Server führt %s aus
PAUSING = Pausiere
UNPAUSING = setze fort
PAUSING = pausiert den Server...
UNPAUSING = setzt den Server fort...
PAUSE = Pause
UNPAUSE = Fortsetzen
COM_SENT_SERVER = Befehlszeile "%s" zur Serverconsole gesendet
@@ -138,11 +138,11 @@ ACCESS = Berechtigung
TOTAL_NUM = Total %d
SKIP_MATCH = Überspringe "%s" (stimmt überein mit "%s")
SKIP_IMM = Überspringe "%s" (Immunität)
KICK_PL = Kickt "%s"
KICK_PL = Kicke "%s"
YOU_DROPPED = Du wurdest gekickt, weil der Admin nur spezielle Spielergruppen auf dem Server zulässt
KICKED_CLIENTS = Kickt %d clients
ADMIN_LEAVE_1 = ADMIN: erlaubt %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: erlaubt %s %s %s %s
KICKED_CLIENTS = %d Spieler gekickt
ADMIN_LEAVE_1 = ADMIN: Spieler ohne Berechtigung %s %s %s %s verlassen den Server!
ADMIN_LEAVE_2 = ADMIN %s: Spieler ohne Berechtigung %s %s %s %s verlassen den Server!
ADMIN_NICK_1 = ADMIN: ändert Name von %s zu "%s"
ADMIN_NICK_2 = ADMIN %s: ändert Name von %s zu "%s"
CHANGED_NICK = Name von %s zu "%s" geändert
@@ -1134,8 +1134,8 @@ IP_REMOVED = IP "%s" eltávolítva a banlistáról
AUTHID_REMOVED = Authid "%s" eltávolítva a banlistáról
ADMIN_UNBAN_1 = ADMIN: %s ban visszavonva
ADMIN_UNBAN_2 = ADMIN %s: %s ban visszavonva
ADMIN_ADDBAN_1 = ADMIN: bannolta %s játékost
ADMIN_ADDBAN_2 = ADMIN %s: bannolta %s játékost
ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = Bannolva
REASON = Indok
FOR_MIN = %s percre
@@ -1145,7 +1145,7 @@ ADMIN_SLAY_1 = ADMIN: %s megölve
ADMIN_SLAY_2 = ADMIN %s: %s megölve
CLIENT_SLAYED = "%s" játékos megölve
ADMIN_SLAP_1 = ADMIN: %s megütve %d sebzéssel
ADMIN_SLAP_2 = ADMIN %s: %s megütve %d sebzéssel
ADMIN_SLAP_2 = ADMIN %s: megütve %s %d sebzéssel
CLIENT_SLAPED = "%s" játékos megütve %d sebzéssel
MAP_NOT_FOUND = Nem található ilyen nevű pálya
ADMIN_MAP_1 = ADMIN: pályaváltás %s
@@ -1153,15 +1153,15 @@ ADMIN_MAP_2 = ADMIN %s: pályaváltás %s
NO_MORE_CVARS = Nem lehet több cvart hozzáadni az rcon hozzáféréshez!
UNKNOWN_CVAR = Ismeretlen cvar: %s
UNKNOWN_XVAR = Ismeretlen xvar: %s
CVAR_NO_ACC = Nincs engedélyed a cvarhoz
XVAR_NO_ACC = Nincs engedélyed az xvarhoz
CVAR_NO_ACC = Nincs engedélyed a cvar-hoz
XVAR_NO_ACC = Nincs engedélyed a xvar-hoz
CVAR_IS = Cvar "%s" jelenleg "%s"
XVAR_IS = Xvar "%s" jelenleg "%s"
PROTECTED = Védett
SET_CVAR_TO = %s cvar átállítva: %s -> "%s"
SET_XVAR_TO = %s xvar átállítva: %s -> "%s"
CVAR_CHANGED = Cvar "%s" átállítva "%s" értékre.
XVAR_CHANGED = Xvar "%s" átállítva "%s" értékre.
SET_CVAR_TO = %s beállítva cvar %s -> "%s"
SET_XVAR_TO = %s beállítva xvar %s -> "%s"
CVAR_CHANGED = Cvar "%s" átállítva "%s"-ra.
XVAR_CHANGED = Xvar "%s" átállítva "%s"-ra.
LOADED_PLUGINS = Jelenleg betöltött pluginok
NAME = Név
VERSION = Verzió
@@ -1194,11 +1194,11 @@ YOU_DROPPED = Le lettél csatlakoztatva, mert az admin csak bizonyos csapat tagj
KICKED_CLIENTS = kirúgva %d felhasználó
ADMIN_LEAVE_1 = ADMIN: ledobta %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: ledobta %s %s %s %s
ADMIN_NICK_1 = ADMIN: %s nevét átírta, mostantól a neve "%s"
ADMIN_NICK_2 = ADMIN %s: %s nevét átírta, mostantól a neve "%s"
CHANGED_NICK = %s neve mostantól: "%s"
ADMIN_EXTEND_1 = ADMIN: Pálya hosszabbítása %d perccel
ADMIN_EXTEND_2 = ADMIN %s: Pálya hosszabbítása %d perccel
ADMIN_NICK_1 = ADMIN: névváltás %s-ról "%s"-ra
ADMIN_NICK_2 = ADMIN %s: nevváltás %s-ról "%s"ra
CHANGED_NICK = Névváltás %s-ról "%s"ra
ADMIN_EXTEND_1 = ADMIN: Páya hosszabbítása %d perccel
ADMIN_EXTEND_2 = ADMIN %s: Páya hosszabbítása %d perccel
MAP_EXTENDED = %s pálya meghosszabbítva %d perccel
ADMIN_MUST_TEMPBAN = Csak időhöz kötött bant tudsz kiosztani, maximum %d percet
ADMIN_MUST_TEMPUNBAN = Csak a nemrég általad bannolt játékosokat oldhatod fel
@@ -1819,9 +1819,9 @@ CLIENT_BANNED = O cliente "%s" foi banido
ADMIN_SLAY_1 = ADMIN: matou %s
ADMIN_SLAY_2 = ADMIN %s: matou %s
CLIENT_SLAYED = O cliente "%s" foi morto
ADMIN_SLAP_1 = ADMIN: esbofeteou %s com %d dano
ADMIN_SLAP_2 = ADMIN %s: esbofeteou %s com %d dano
CLIENT_SLAPED = O cliente "%s" foi esbofeteado com %d dano
ADMIN_SLAP_1 = ADMIN: esbofeteou %s com %d de dano
ADMIN_SLAP_2 = ADMIN %s: esbofeteou %s com %d de dano
CLIENT_SLAPED = O cliente "%s" foi esbofeteado com %d de dano
MAP_NOT_FOUND = O mapa com esse nome não foi encontrado ou é inválido
ADMIN_MAP_1 = ADMIN: mudou de mapa para %s
ADMIN_MAP_2 = ADMIN %s: mudou de mapa para %s
@@ -1831,7 +1831,7 @@ UNKNOWN_XVAR = Xvar desconhecida: %s
CVAR_NO_ACC = Tu não tens acesso a essa cvar
XVAR_NO_ACC = Tu não tens acesso a essa xvar
CVAR_IS = A cvar "%s" é "%s"
XVAR_IS = A Xvar "%s" é "%s"
XVAR_IS = A xvar "%s" é "%s"
PROTECTED = PROTEGIDO
SET_CVAR_TO = %s mudou a cvar %s para "%s"
SET_XVAR_TO = %s mudou a xvar %s para "%s"
@@ -1867,7 +1867,7 @@ SKIP_MATCH = A saltar "%s" (a coincidir com "%s")
SKIP_IMM = A saltar "%s" (imunidade)
KICK_PL = A expulsar "%s"
YOU_DROPPED = Tu foste desconectado pois o admin só deixa entrar um grupo de clientes específico
KICKED_CLIENTS = %d clientes expulsados
KICKED_CLIENTS = Foram expulsos %d clientes
ADMIN_LEAVE_1 = ADMIN: deixou %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: deixou %s %s %s %s
ADMIN_NICK_1 = ADMIN: mudou o nome de %s para "%s"
@@ -1876,5 +1876,5 @@ CHANGED_NICK = Mudou o nome de %s para "%s"
ADMIN_EXTEND_1 = ADMIN: extendeu o mapa por %d minutos
ADMIN_EXTEND_2 = ADMIN %s: extendeu o mapa por %d minutos
MAP_EXTENDED = O mapa "%s" foi extendido por %d minutos
ADMIN_MUST_TEMPBAN = Tu só podes banir jogadores temporariamente temporariamente, até %d minutos
ADMIN_MUST_TEMPUNBAN = Tu só podes desbanir jogadores que tu baniste recentemente
ADMIN_MUST_TEMPBAN = Tu só podes banir jogadores temporariamente, até %d minutos
ADMIN_MUST_TEMPUNBAN = Tu só podes desbanir jogadores que baniste recentemente

View File

@@ -149,8 +149,8 @@ HELP_USE_BEGIN = Írj 'amx_help 1'-et az első oldalhoz
TYPE_HELP = Írj 'amx_help'-et a konzolba, hogy láthasd a parancsokat
TIME_INFO_1 = Hátrálévő idő: %d:%02d perc. Következő pálya: %s
TIME_INFO_2 = Nincs időhatár. A következő pálya: %s
HELP_CMD_INFO = <bejegyzés száma> [megjelenítendő bejegyzések száma (csak szerver)] - információt nyújt az elérhető parancsokhoz
SEARCH_CMD_INFO = <egyezés> <bejegyzés száma> [megjelenítendő bejegyzések száma (csak szerver)] - információt nyújt a talált parancsokhoz
HELP_CMD_INFO = <bejegyzés száma.> [megjeneítendő bejegyzések száma (csak szerver)] - információt nyújt az elérhető parancsokhoz
SEARCH_CMD_INFO = <egyezés> <bejegyzés száma> [megjeneítendő bejegyzések száma (csak szerver)] - információt nyújt az egyező parancsokhoz
NO_MATCHING_RESULTS = ^nNem található egyezés^n
[lt]

View File

@@ -1,12 +1,8 @@
[en]
DROPPED_RES = Dropped due to slot reservation
CVAR_RESERVATION = Amount of slots to reserve
CVAR_HIDESLOTS = If you set this to 1, you can hide slots on your server.^nIf the server's public and hidden slots are full, you must manually connect with the "connect" console command.
[de]
DROPPED_RES = Sorry, dieser Slot ist reserviert
CVAR_RESERVATION = Anzahl der zu reservierenden Slots
CVAR_HIDESLOTS = Wenn diese CVAR auf 1 gesetzt wird, können Slots auf Ihrem Server ausgeblendet werden.^nWenn die öffentlichen Slots auf dem Server "voll" sind und weitere freie Slots ausgeblendet sind, müssen Sie die Verbindung manuell über den Konsolenbefehl "connect" herstellen.
[sr]
DROPPED_RES = Server je pun, nemate pristup rezervisanim mestima
@@ -76,3 +72,5 @@ DROPPED_RES = U largua për shkak të rezervimit të vendit që është plugini
[pt]
DROPPED_RES = Foste desconectado por causa da reservação de slots
CVAR_RESERVATION = Quantidade de slots para reservar
CVAR_HIDESLOTS = Se tu definires isto para 1, tu podes esconder slots no teu servidor.^nSe os slots públicos e escondidos do servidor estiverem cheios, tu deverás manualmente conectar com o comando de consola "connect".

View File

@@ -45,10 +45,10 @@ VOTING_RES_2 = %s (erhielt "%d") (benötigt "%d")
VOTING_SUCCESS = Abstimmung erfolgreich
VOTING_RES_3 = %s (erhielt "%d") (benötigt "%d"). Ergebnis: %s
THE_RESULT = Das Ergebnis
WANT_CONTINUE = Forfahren?
VOTED_FOR = %s stimmten dafür
VOTED_AGAINST = %s stimmten dagegen
VOTED_FOR_OPT = %s stimmten für Option #%d
WANT_CONTINUE = Fortfahren?
VOTED_FOR = %s stimmte dafür
VOTED_AGAINST = %s stimmte dagegen
VOTED_FOR_OPT = %s stimmte für Option #%d
ALREADY_VOTING = Abstimmung läuft bereits...
VOTING_NOT_ALLOW = Abstimmung ist momentan nicht möglich!
GIVEN_NOT_VALID = %s ist unzulässig
@@ -516,18 +516,18 @@ NO_VOTE_CANC = Ezzel a parancsal nem lehet visszavonni a szavazást.
RES_REF = A szavazás eredménytelen.
RES_ACCEPTED = A szavazás sikeres.
VOTING_FAILED = Szavazás sikertelen
VOTING_RES_1 = %s (igen "%d") (nem "%d") ("%d" szükséges)
VOTING_RES_2 = %s (van "%d") ("%d" szükséges)
VOTING_RES_1 = %s (igen "%d") (nem "%d") (kell "%d")
VOTING_RES_2 = %s (van "%d") (kell "%d")
VOTING_SUCCESS = Szavazás sikeres
VOTING_RES_3 = %s (van "%d") ("%d" szükséges). Az eredmény: %s
VOTING_RES_3 = %s (van "%d") (kell "%d"). Az eredmeny: %s
THE_RESULT = Az eredmény
WANT_CONTINUE = Folytatod?
VOTED_FOR = %s az igenre szavazott
VOTED_AGAINST = %s a nemre szavazott
VOTED_FOR_OPT = %s a #%d -re szavazott
ALREADY_VOTING = Már folyamatban van egy szavazás...
ALREADY_VOTING = Már folyik 1 szavazás...
VOTING_NOT_ALLOW = A szavazás most nincs engedélyezve
GIVEN_NOT_VALID = A megadott %s nem helyes
GIVEN_NOT_VALID = Az adott %s nem helyes
MAP_IS = a pálya
MAPS_ARE = a pálya
CHOOSE_MAP = Válassz pályát

View File

@@ -345,8 +345,8 @@ USAGE = Használat
MORE_CL_MATCHT = Több játékosra is egyezik a megadott feltétel
CL_NOT_FOUND = Nincs ilyen nevű játékos
CLIENT_IMM = "%s" immunitás joggal rendelkezik
CANT_PERF_DEAD = Ezt a műveletet nem hajthatod végre "%s" játékoson mivel halott
CANT_PERF_BOT = Ezt a műveletet nem hajthatod végre "%s" játékoson mivel bot
CANT_PERF_DEAD = Ezt a műveletet nem hajthatod végre "%s" játékoson mert halott
CANT_PERF_BOT = Ezt a műveletet nem hajthatod végre "%s" játékoson mert bot
ON = BE
OFF = KI
@@ -538,9 +538,9 @@ YES = Sim
NO = Não
BAN = banir
KICK = expulsar
NO_ACC_COM = Tu nao tens acesso a esse comando
NO_ACC_COM = Tu não tens acesso a esse comando
USAGE = Uso
MORE_CL_MATCHT = Tem mais do que um cliente que corresponde ao teu argumento
MORE_CL_MATCHT = mais do que um cliente a corresponder o teu argumento
CL_NOT_FOUND = O cliente com esse nome ou userid não foi encontrado
CLIENT_IMM = O cliente "%s" tem imunidade
CANT_PERF_DEAD = Essa ação não pode ser executada no cliente morto "%s"

View File

@@ -30,7 +30,7 @@ VOTE_FAILED = Abstimmung gescheitert
THE_WINNER = Der Gewinner
WANT_CONT = Willst du fortfahren?
VOT_CANC = Abstimmung abgebrochen
X_VOTED_FOR = %s stimmten für Option #%d
X_VOTED_FOR = %s stimmte für Option #%d
VOTEMAP_MENU = Menü > Mapwahl
START_VOT = Starte Abstimmung
SEL_MAPS = Ausgewählte Maps

View File

@@ -17,10 +17,10 @@ RES_WEAP = Restrict Weapons
TELE_PLAYER = Teleport Player
[de]
KICK_PLAYER = Kick Spieler
BAN_PLAYER = Ban Spieler
SLAP_SLAY = Schlage/Kille Spieler
TEAM_PLAYER = Team Spieler ^n
KICK_PLAYER = Spieler kicken
BAN_PLAYER = Spieler bannen
SLAP_SLAY = Spieler schlagen/killen
TEAM_PLAYER = Team der Spieler ändern ^n
CHANGEL = Mapwechsel
VOTE_MAPS = Map Abstimmung ^n
SPECH_STUFF = Soundausgabe
@@ -32,7 +32,7 @@ LANG_SET = Spracheinstellung
STATS_SET = Statistik-Einstellungen ^n
PAUSE_PLUG = Plugins pausieren
RES_WEAP = Waffen verbieten
TELE_PLAYER = Teleport Spieler
TELE_PLAYER = Spieler teleportieren
[sr]
KICK_PLAYER = Kick Igraca
@@ -279,7 +279,7 @@ SPECH_STUFF = Beszéd menü
CLIENT_COM = Játékos parancsok
SERVER_COM = Szerver parancsok
CVARS_SET = Cvar Beállítások
CONFIG = Konfiguráció
CONFIG = Configuráció
LANG_SET = Nyelv Beállítások
STATS_SET = Statisztika beállítások ^n
PAUSE_PLUG = Pluginok Szüneteltetése
@@ -438,7 +438,7 @@ TEAM_PLAYER = Equipa do Jogador ^n
CHANGEL = Mudar de Mapa
VOTE_MAPS = Votação de Mapas ^n
SPECH_STUFF = Menu de Voz
CLIENT_COM = Comandos do Client
CLIENT_COM = Comandos do Cliente
SERVER_COM = Comandos do Servidor
CVARS_SET = Definições de Cvars
CONFIG = Configuração

View File

@@ -56,7 +56,7 @@ KNIFE_MSG_4 = %s messerte und verstümmelte %s
LAST_MSG_1 = Nun hängt alles von dir ab!
LAST_MSG_2 = Hoffentlich hast du ein Medipack dabei.
LAST_MSG_3 = Deine Teamkameraden sind alle tot. Viel Glück!
LAST_MSG_4 = Nun bist du allein. Hab Spass dabei!
LAST_MSG_4 = Nun bist du allein. Hab Spaß dabei!
HE_MSG_1 = %s sendet ein kleines Geschenk an %s
HE_MSG_2 = %s wirft ein Knallbonbon zu %s
HE_MSG_3 = %s macht einen Präzisionswurf zu %s
@@ -70,7 +70,7 @@ HS_MSG_2 = $kn entfernte den Kopf von $vn^nmit einem Präzisionsschuss.
HS_MSG_3 = $kn verwandelte den Kopf ^nvon $vn in Pudding.
HS_MSG_4 = $kn besiegte $vn durch einen Kopfschuss.
HS_MSG_5 = $vn's Kopf wurde in der Gegend verteilt
HS_MSG_6 = $kn hat einen super ^nTreffer gelandet,das weiss ^n$vn nun auch.
HS_MSG_6 = $kn hat einen super ^nTreffer gelandet,das weiß ^n$vn nun auch.
HS_MSG_7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn...
DOUBLE_KILL = Wow! %s machte einen Doppelkill!!!
PREPARE_FIGHT = Vorbereiten zum Kampf!^nRunde %d
@@ -717,29 +717,29 @@ HS = hs
[hu]
WITH = eddig
KNIFE_MSG_1 = %s felvágta %s játékost!
KNIFE_MSG_2 = %s szétszabta %s játékost!
KNIFE_MSG_3 = %s felnyársalta %s játékost!
KNIFE_MSG_4 = %s megkéselte %s játékost!
KNIFE_MSG_1 = %s felvágta %s-t!
KNIFE_MSG_2 = %s szétszabta %s-t!
KNIFE_MSG_3 = %s felnyársalta %s-t!
KNIFE_MSG_4 = %s megkéselte %s-t!
LAST_MSG_1 = Mostmár minden rajtad múlik!
LAST_MSG_2 = Remélem van nálad életcsomag!
LAST_MSG_3 = Már csak te maradtál. Hajrá!
LAST_MSG_4 = Egyedül maradtál. Sok sikert!
HE_MSG_1 = %s megajándékozta %s egy gránáttal
HE_MSG_2 = %s felrobbantotta %s játékost
HE_MSG_3 = %s kirobbantotta %s játékost
HE_MSG_4 = %s szétrobbantotta %s játékost
HE_MSG_2 = %s felrobbantotta %s-t
HE_MSG_3 = %s kirobbantotta %s-t
HE_MSG_4 = %s szétrobbantotta %s-t
SHE_MSG_1 = %s felrobbantotta magát...
SHE_MSG_2 = %s megnézte közelebbről a gránátját...
SHE_MSG_3 = %s azt hitte krumpli van a kezében...
SHE_MSG_4 = %s Felrobbant!
HS_MSG_1 = $kn megölte $vn játékost egy fejlövéssel!
HS_MSG_2 = $kn eltávolíttotta $vn fejét^na(z) $wn fegyverrel.
HS_MSG_3 = $kn hullócsillagot csinált $vn fejéből egy $wn fegyverrel
HS_MSG_4 = $kn orbalőtte $vn játékost
HS_MSG_1 = $kn megölte $vn t egy fejlövéssel!
HS_MSG_2 = $kn eltávolíttotta $vn fejét^naz $wn-vel.
HS_MSG_3 = $kn hullócsillagot csinált $vn fejéből egy $wn-vel
HS_MSG_4 = $kn orbalőtte $vn-t
HS_MSG_5 = $vn feje földkörüli pályára állt.
HS_MSG_6 = $kn segítségével $wn feje már a csillagok között tündökölhet...
HS_MSG_7 = Mi az? Talán egy repülő? Dehogy... Csak $vn feje
HS_MSG_7 = Miaz? Talán egy repülő? Dehogy... Csak $vn-feje
DOUBLE_KILL = Wow! %s: Duplagyilok!!!
PREPARE_FIGHT = Készülj fel a harcra!^n%d. KÖR
KILLED_ROW = Egymás utáni %d ölés.
@@ -1172,7 +1172,7 @@ PREPARE_FIGHT = Preparem-se para LUTAR!^nRonda %d
KILLED_ROW = Tu mataste %d vezes de seguida
DIED_ROUNDS = Cuidado! Tu morreste %d vezes de seguida...
KILLED_CHICKEN = Alguém matou a galinha!!!
BLEW_RADIO = Alguém explodiu rádio!!!
BLEW_RADIO = Alguém explodiu o rádio!!!
REACHED_TARGET = Oh meu deus! %s alcançou o objetivo!
PLANT_BOMB = %s está a plantar a bomba!
DEFUSING_BOMB = %s está a desarmar a bomba...
@@ -1185,7 +1185,7 @@ CT = CT
CTS = CTS
TERRORIST = TERRORISTA
TERRORISTS = TERRORISTAS
REMAINING = %d %s Restante...
REMAINING = %d %s Restante(s)...
REMAINING_ENEMY = Resta um inimigo...
REMAINING_ENEMIES = Restam %d inimigos...
KILLS = mortes

View File

@@ -5,7 +5,7 @@ FRIEND_FIRE = Friendly fire
[de]
NEXT_MAP = Nächste Map:
PLAYED_MAP = Gespielte Maps
PLAYED_MAP = Aktuelle Map
FRIEND_FIRE = Friendly fire
[sr]

View File

@@ -936,18 +936,18 @@ CLEAR_PAUSED = Pastro skedarin me pushime
[pt]
PAUSE_COULDNT_FIND = Não foi possível encontrar um plugin coincidindo "%s"
PAUSE_PLUGIN_MATCH = Plugin coincidindo "%s"
PAUSE_CONF_CLEARED = Ficheiro de Configuração limpo. Recarrega o map se for necessário
PAUSE_ALR_CLEARED = A Configuração já foi limpa!
PAUSE_CONF_CLEARED = Ficheiro de configuração limpo. Recarrega o mapa se for necessário
PAUSE_ALR_CLEARED = A configuração já foi limpa!
PAUSE_CONF_SAVED = Configuração guardada com sucesso
PAUSE_SAVE_FAILED = Falha ao guardar a Configuração!!!
PAUSE_SAVE_FAILED = Falha ao guardar a configuração!!!
LOCKED = BLOQUEADO
PAUSE_UNPAUSE = Pausar/Despausar Plugins
CLEAR_STOPPED = Limpar ficheiro de plugins parados
SAVE_STOPPED = Guardar plugins parados
PAUSED_PLUGIN = %d plugin pausado
PAUSED_PLUGINS = %d plugins pausados
UNPAUSED_PLUGIN = %d plugin despausado
UNPAUSED_PLUGINS = %d plugins despausados
PAUSED_PLUGIN = %d plugin foi pausado
PAUSED_PLUGINS = %d plugins foram pausados
UNPAUSED_PLUGIN = %d plugin foi despausado
UNPAUSED_PLUGINS = %d plugins foram despausados
CANT_MARK_MORE = Não é possível marcar mais plugins como não-pausáveis!
PAUSE_LOADED = Pausar Plugins: Plugins carregados
STOPPED = parado
@@ -958,17 +958,17 @@ PAUSE_USE_MORE = Usa 'amx_pausecfg list %d' para mostrar mais
PAUSE_USE_BEGIN = Usa 'amx_pausecfg list 1' para voltar ao início
PAUSE_USAGE = Uso: amx_pausecfg <comando> [nome]
PAUSE_COMMANDS = Comandos
COM_PAUSE_OFF = ^toff - pausar todos os plugins que não estão na lista
COM_PAUSE_ON = ^ton - despausar todos os plugins
COM_PAUSE_STOP = ^tstop <ficheiro> - parar um plugin
COM_PAUSE_PAUSE = ^tpause <ficheiro> - pausar um plugin
COM_PAUSE_ENABLE = ^tenable <ficheiro> - ativar um plugin
COM_PAUSE_SAVE = ^tsave - guardar a lista de plugins parados
COM_PAUSE_CLEAR = ^tclear - limpar a lista de plugins parados
COM_PAUSE_LIST = ^tlist [id] - listar plugins
COM_PAUSE_ADD = ^tadd <título> - marcar um plugin como não-pausável
COM_PAUSE_OFF = ^toff - pausa todos os plugins que não estão na lista
COM_PAUSE_ON = ^ton - despausa todos os plugins
COM_PAUSE_STOP = ^tstop <ficheiro> - para um plugin
COM_PAUSE_PAUSE = ^tpause <ficheiro> - pausa um plugin
COM_PAUSE_ENABLE = ^tenable <ficheiro> - ativa um plugin
COM_PAUSE_SAVE = ^tsave - guarda a lista de plugins parados
COM_PAUSE_CLEAR = ^tclear - limpa a lista de plugins parados
COM_PAUSE_LIST = ^tlist [id] - lista plugins
COM_PAUSE_ADD = ^tadd <título> - marca um plugin como não-pausável
SAVE_PAUSED = Guardar plugins pausados
COM_PAUSE_SAVE_PAUSED = ^tsave - guarda a lista de plugins pausados
COM_PAUSE_CLEAR_PAUSED = ^tclear - limpa a lista de plugins pausados
CANT_UNPAUSE_PLUGIN = O Plugin "%s" está parado e não pode ser pausado nem despausado.
CANT_UNPAUSE_PLUGIN = O plugin "%s" está parado e não pode ser nem pausado nem despausado.
CLEAR_PAUSED = Limpar ficheiro de plugins pausados

View File

@@ -293,10 +293,10 @@ SLAP_SLAY_MENU = Ütés/Ölés Menü
SLAP_WITH_DMG = Megütve %d sebzéssel
SLAY = Megölés
KICK_MENU = Kick Menü
ADMIN_TRANSF_1 = ADMIN: %s átállítva %s csapatba
ADMIN_TRANSF_2 = ADMIN %s: %s átállítva %s csapatba
ADMIN_TRANSF_1 = ADMIN: %s átállítva %s-nak
ADMIN_TRANSF_2 = ADMIN %s: %s átállítva %s-nak
TEAM_MENU = Csapat Menü
TRANSF_TO = Átállítva %s csapatba
TRANSF_TO = Átállítva %s-nek
TRANSF_SILENT = Csendes Átállítás
CL_CMD_MENU = Kliens parancsok Menü
NO_CMDS = Nincs elérhető parancs

66
plugins/lang/restmenu.txt Normal file → Executable file
View File

@@ -87,8 +87,8 @@ ADMIN_MENU_SAVEDCFG = Menu: %N saved items restrictions in "%s"
[de]
EQ_WE_RES = Ausrüstung und Waffen wurden verboten
EQ_WE_UNRES = Ausrüstung und Waffen wurden freigegeben
HAVE_BEEN = sind gewesen
HAS_BEEN = ist gewesen
HAVE_BEEN = wurden
HAS_BEEN = wurde
RESTRICTED = verboten
UNRESTRICTED = wieder erlaubt
NO_EQ_WE = Konnte diese Ausrüstung oder Waffe nicht finden
@@ -105,9 +105,9 @@ REST_COULDNT_LOAD = Konfiguration konnte nicht geladen werden (Datei "%s")
COM_REST_USAGE = Benutze: amx_restrict <Befehl> [Wert]
COM_REST_COMMANDS = Befehle:
COM_REST_ON = " on - Setze Verbot auf die gesamte Ausrüstung"
COM_REST_OFF = " off - Verbot für Ausrüstung aufheben"
COM_REST_OFF = " off - Verbot für die gesamte Ausrüstung aufheben"
COM_REST_ONV = " on <value> [...] - Setze spezielles Verbot"
COM_REST_OFFV = " off <value> [...] - Spezielles Verbot aufgehoben"
COM_REST_OFFV = " off <value> [...] - Spezielles Verbot aufheben"
COM_REST_LIST = " list <value> - Zeigt die Liste der verfügbaren Waffen und Ausrüstungen"
COM_REST_SAVE = " save - Verbote speichern"
COM_REST_LOAD = " load [file] - Lädt Verbote [aus einer Datei]"
@@ -155,14 +155,20 @@ MENU_ITEM_M249 = FN M249 Para
MENU_ITEM_VEST = Kevlarweste
MENU_ITEM_VESTHELM = Kevlarweste & Helm
MENU_ITEM_FLASHBANG = Blendgranate
MENU_ITEM_HEGRENADE = HE Granate
MENU_ITEM_SMOKEGRENADE = Rauch Granate
MENU_ITEM_DEFUSER = Entschärfungs Kit
MENU_ITEM_HEGRENADE = HE-Granate
MENU_ITEM_SMOKEGRENADE = Rauchgranate
MENU_ITEM_DEFUSER = Entschärfungskit
MENU_ITEM_NVGS = Nachtsichtgerät
MENU_ITEM_SHIELD = Tactical Shield
MENU_ITEM_PRIAMMO = Primär Waffen Munition
MENU_ITEM_SECAMMO = Sekundär Waffen Munition
MENU_ITEM_PRIAMMO = Primärwaffenmunition
MENU_ITEM_SECAMMO = Sekundärwaffenmunition
CONFIG_FILE_HEADER = ; Erstellt durch %s Plugin. Nicht verändern!^n; Wert Name^n
ADMIN_UPD_RES_1 = ADMIN: Waffen- und Ausrüstungsverbote wurden aktualisiert.
ADMIN_UPD_RES_2 = ADMIN %s: Waffen- und Ausrüstungsverbote wurden aktualisiert.
ADMIN_CMD_UPDATEDCFG = Cmd: %N Waffen- und Ausrüstungsverbote wurden aktualisiert.
ADMIN_CMD_LOADEDCFG = Cmd: %N Waffen- und Ausrüstungsverbote wurden von "%s" geladen.
ADMIN_CMD_SAVEDCFG = Cmd: %N Waffen- und Ausrüstungsverbote wurden in "%s" gespeichert.
ADMIN_MENU_SAVEDCFG = Menu: %N Waffen- und Ausrüstungsverbote wurden in "%s" gespeichert.
[sr]
EQ_WE_RES = Oprema i oruzje su zabranjeni
@@ -782,23 +788,23 @@ MENU_ITEM_SECAMMO = Gloante pentru armele secundare
CONFIG_FILE_HEADER = ; Generat de pluginul %s. Nu modifica!^n; numele valorii^n
[hu]
EQ_WE_RES = Felszerelések és fegyverek felfüggesztve
EQ_WE_UNRES = Felszerelések és fegyverek engedélyezve
HAVE_BEEN = lettek
HAS_BEEN = lettek
RESTRICTED = felfüggesztve
UNRESTRICTED = engedélyezve
NO_EQ_WE = Nem található ilyen felszerelés vagy fegyver
WEAP_RES = Fegyver felfüggesztés
VALUE = érték
EQ_WE_RES = Felszerelések és fegyverek felfüggesztve
EQ_WE_UNRES = Felszerelések és fegyverek engedélyezve
HAVE_BEEN = lettek
HAS_BEEN = lettek
RESTRICTED = felfüggesztve
UNRESTRICTED = engedélyezve
NO_EQ_WE = Nem található ilyen felszerelés vagy fegyver
WEAP_RES = Fegyver felfüggesztés
VALUE = érték
REST_ENTRIES_OF = Bejegyzések %i - %i összesen %i
REST_USE_MORE = Írd be 'amx_restrict list %i' a többhöz
REST_USE_BEGIN = Írd be 'amx_restrict list 1' az elsőhöz
REST_USE_HOW = Írd be 'amx_restrict list <érték>' (1 -> 8)
REST_CONF_SAVED = Beállítások elmentve (fájl "%s")
REST_COULDNT_SAVE = Mentés sikertelen (fájl "%s")
REST_CONF_LOADED = Beállítások betöltve (fájl "%s")
REST_COULDNT_LOAD = Nem lehet betölteni a beállításokat (fájl "%s")
REST_USE_MORE = Írd be 'amx_restrict list %i' a többhöz
REST_USE_BEGIN = Írd be 'amx_restrict list 1' az elsőhöz
REST_USE_HOW = Írd be 'amx_restrict list <érték>' (1 -> 8)
REST_CONF_SAVED = Beállitások elmentve (file "%s")
REST_COULDNT_SAVE = Mentés sikertelen (file "%s")
REST_CONF_LOADED = Beállítások betöltve (file "%s")
REST_COULDNT_LOAD = Nem lehet betölteni a beállításokat (file "%s")
COM_REST_USAGE = Használat: amx_restrict <parancs> [érték]
COM_REST_COMMANDS = Parancsok:
COM_REST_ON = " on - A teljes felszerelés tiltása"
@@ -807,7 +813,7 @@ COM_REST_ONV = " on <érték> [...] - Egyedi tiltás beállítás
COM_REST_OFFV = " off <érték> [...] - Egyedi tiltás visszavonása"
COM_REST_LIST = " list <érték> - Az elérhető felszerelések és fegyverek listázása
COM_REST_SAVE = " save - Felfüggesztések mentése"
COM_REST_LOAD = " load [fájl] - Felfüggesztések betöltése [fájlból]"
COM_REST_LOAD = " load [file] - Felfüggesztések betöltése [fájlból]"
COM_REST_VALUES = Elérhető felfüggesztési értékek:^nammo, equip, pistol, shotgun, sub, rifle, sniper, machine
COM_REST_TYPE = Írd be 'amx_restrict list' a többi speciális értékhez
REST_WEAP = Fegyverek felfüggesztése
@@ -1363,9 +1369,9 @@ REST_ENTRIES_OF = Entradas %i - %i de %i
REST_USE_MORE = Usa 'amx_restrict list %i' para mostrar mais
REST_USE_BEGIN = Usa 'amx_restrict list 1' para voltar ao início
REST_USE_HOW = Usa 'amx_restrict list <valor>' (1 -> 8)
REST_CONF_SAVED = A Configuração foi guardada (ficheiro "%s")
REST_CONF_SAVED = A configuração foi guardada (ficheiro "%s")
REST_COULDNT_SAVE = Não foi possível guardar a configuração (ficheiro "%s")
REST_CONF_LOADED = A Configuração foi carregada (ficheiro "%s")
REST_CONF_LOADED = A configuração foi carregada (ficheiro "%s")
REST_COULDNT_LOAD = Não foi possível carregar a configuração (ficheiro "%s")
COM_REST_USAGE = Uso: amx_restrict <comando> [valor]
COM_REST_COMMANDS = Comandos:
@@ -1381,7 +1387,7 @@ COM_REST_TYPE = Escreve 'amx_restrict list' para mais valores específi
REST_WEAP = Restringir Armas
SAVE_SET = Guardar definições
CONF_SAV_SUC = Configuração guardada com sucesso
CONF_SAV_FAIL = Falha ao guardar a Configuração!!!
CONF_SAV_FAIL = Falha ao guardar a configuração!!!
REG_CMD_MENU = - mostra o menu de restrição de armas
REG_CMD_REST = - mostra a ajuda para restrição de armas
RESTRICTED_ITEM = * Este item é restrito *
@@ -1427,7 +1433,7 @@ MENU_ITEM_NVGS = Óculos de Visão Noturna
MENU_ITEM_SHIELD = Escudo Tático
MENU_ITEM_PRIAMMO = Munição da arma primária
MENU_ITEM_SECAMMO = Munição da arma secundária
CONFIG_FILE_HEADER = ; Gerado por %s Plugin. Não modifique!^n; nome do valor^n
CONFIG_FILE_HEADER = ; Gerado pelo Plugin %s. Não modifique!^n; nome do valor^n
ADMIN_UPD_RES_1 = ADMIN: atualizou a restrição de itens
ADMIN_UPD_RES_2 = ADMIN %s: atualizou a restrição de itens
ADMIN_CMD_UPDATEDCFG = Cmd: %N atualizou a restrição de itens

View File

@@ -133,7 +133,7 @@ HEAD_MSG2 = $kn entfernte den Kopf von $vn^nmit einem Präzisionsschuss.
HEAD_MSG3 = $kn verwandelte den Kopf ^nvon $vn in Pudding.
HEAD_MSG4 = $vn killte $kn durch einen Kopfschuss.
HEAD_MSG5 = $vn's Kopf wurde in der Gegend verteilt
HEAD_MSG6 = $kn hat einen super ^nTreffer gelandet,das weiss ^n$vn nun auch.
HEAD_MSG6 = $kn hat einen super ^nTreffer gelandet,das weiß ^n$vn nun auch.
HEAD_MSG7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn...
DOUBLE_MSG1 = Wow! %s machte einen Doppelkill!!!
DOUBLE_MSG2 = Unglaublich! %s macht einen dreifachen Kill !!!
@@ -141,8 +141,8 @@ DOUBLE_MSG3 = Überraschung! %s macht %d Kills auf einmal !!!
MORTAR_MSG1 = %s stellte den Mörser auf und schickte %s in den Himmel.
MORTAR_MSG2 = %s killte %s über eine lange Distanz.
KILL_INFO1 = %s killte dich mit der %s^nüber eine Entfernung von %.2f Meter.^n
KILL_INFO2 = Er machte %d Schaden bei dir mit %d Treffern ^nund hat noch %dHP.^n
KILL_INFO3 = Du machtest %d Schaden bei ihm mit %d Treffern.^n
KILL_INFO2 = Er machte %d Schaden bei dir mit %d Treffer(n) ^nund hat noch %dHP.^n
KILL_INFO3 = Du machtest %d Schaden bei ihm mit %d Treffer(n).^n
KILL_INFO4 = Du hast ihn getroffen in den/das:^n%s^n
STILL_HAS = %s hat noch %dHP
NO_KILLER = Du hast keinen Killer...
@@ -153,14 +153,14 @@ VICTIMS = Opfer:
DMG = Schaden
HIT_S = Treffer
YOU_HIT = Du trafst %s in:
SERVER_STATS = Server Statistik
SERVER_STATS = Serverstatistik
SHOW_STATS = Statistik anzeigen
SHOW_RANK = Rang anzeigen
TA_MSG = %s schiesst auf einen Kameraden
TA_MSG = %s schießt auf einen Kameraden
TK_MSG = %s killte einen Kameraden!
NADE_CAUGHT = Wow! %s fängt eine gegnerische Granate!
NADE_FAILEDTK = Oops.. %s killte dich bei dem Versuch, die Granate zurückzuwerfen..
NADE_FAILED = %s konnte feindliche Granate nicht zurückwerfen.
NADE_FAILED = %s konnte die feindliche Granate nicht zurückwerfen.
NADE_MASTER = OMG! %s ist der Meister der Granaten !!!
DISABLED_MSG = Server hat diese Option deaktiviert.
MOST_KILLS = Meisten Kills
@@ -1424,98 +1424,98 @@ M_THEIR_RANK_IS = Pozitia lor este
M_OF = din
[hu]
WHOLEBODY = egész test
WHOLEBODY = egesz test
HEAD = fej
CHEST = csipő
CHEST = csipo
STOMACH = has
LEFTARM = balkar
RIGHTARM = jobbkar
LEFTLEG = balláb
RIGHTLEG = jobbláb
MULTI_MSG = Multi-Gyilok! %s^n%d ölés (%d fej)
ULTRA_MSG = Ultra-Gyilok!!! %s^n%d ölés (%d fej)
SPREE_MSG = %s ÖLDÖKLÉSI SOROZAT!!!^n %d ölés(%d fej)
RAMPAGE_MSG = RAMPAGE!!! %s^n%d ölés (%d fej)
UNSTOPPABLE_MSG = %s a MEGÁLLÍTHATATLAN!!!^n%d ölés (%d fej)
MONSTER_MSG = %s EGY GYILOKGÉP!^n%d ölés (%d fej)
GODLIKE_MSG = %s AZ ISTEN!!!!^n%d ölés (%d fej)
LEFTLEG = ballab
RIGHTLEG = jobblab
MULTI_MSG = Multi-Gyilok! %s^nwith %d oles (%d fej)
ULTRA_MSG = Ultra-Gyilok!!! %s^nwith %d oles (%d fej)
SPREE_MSG = %s OLDOKLESI SOROZAT!!!^nwith %d oles(%d fej)
RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d oles (%d fej)
UNSTOPPABLE_MSG = %s a MEGALLITHATATLAN!!!^nwith %d oles (%d fej)
MONSTER_MSG = %s EGY GYILOKGEP!^nwith %d oles (%d fej)
GODLIKE_MSG = %s AZ ISTEN!!!!^nwith %d oles (%d fej)
MULTI_SMALL = %s: Multi-Gyilok!
ULTRA_SMALL = %s: Ultra-Gyilok!!!
SPREE_SMALL = %s ÖLDÖKLÉSI SOROZAT!!!
SPREE_SMALL = %s IS ON A KILLING SPREE!!!
RAMPAGE_SMALL = %s: RAMPAGE!!!
UNSTOPPABLE_SMALL = %s A MEGÁLLÍTHATATLAN!!!
MONSTER_SMALL = %s EGY GYILOKGÉP!
UNSTOPPABLE_SMALL = %s A MEGALLITHATATLAN!!!
MONSTER_SMALL = %s EGY GYILOKGEPP!
GODLIKE_SMALL = %s AZ ISTEN!!!
KNIFE_MSG1 = %s Felvágta %s-t
KNIFE_MSG2 = %s Szétszabta%s-t
KNIFE_MSG3 = %s szétvágta %s-t
KNIFE_MSG4 = %s megkéselte %s-t
HE_MSG1 = %s megajándékozta %s egy gránáttal
KNIFE_MSG1 = %s Felvagta %s-t
KNIFE_MSG2 = %s Szetszabta%s-t
KNIFE_MSG3 = %s szetvagta %s-t
KNIFE_MSG4 = %s megkeselte %s-t
HE_MSG1 = %s megajandekozta %s egy granattal
HE_MSG2 = %s felrobbantotta %s
HE_MSG3 = %s kirobbantotta %s
HE_MSG4 = %s szétrobbantotta %s
SHE_MSG1 = %s felrobbantotta magát...
SHE_MSG2 = %s megnézte közelebbről a gránátját...
SHE_MSG3 = %s azt hitte krumpli van a kezében...
HE_MSG4 = %s szetrobbantotta %s
SHE_MSG1 = %s felrobbantotta magat...
SHE_MSG2 = %s megnezte kozelebrol a granatjat...
SHE_MSG3 = %s azt hitte krumpli van a kezeben...
SHE_MSG4 = %s Felrobbant!
HEAD_MSG1 = $kn megölte $vn -t egy fejlövéssel!
HEAD_MSG2 = $kn eltávolyttotta $vn fejét^naz $wn-vel.
HEAD_MSG3 = $kn hullócsillagot csinált $vn fejéből egy $wn-vel
HEAD_MSG4 = $vn fejen lett lőve $kn fegyvere által...
HEAD_MSG5 = $vn feje földkörüli pályára állt.
HEAD_MSG6 = $kn segítségével $wn feje már a csillagok között tündökölhet...
HEAD_MSG7 = Mi az? Talan egy repülő? Dehogy... Csak $vn-feje
DOUBLE_MSG1 = Wow! %s duplán ölt!!!
DOUBLE_MSG2 = Hihetetlen! %s triplán ölt!!!
DOUBLE_MSG3 = Szuper! %s egyhuzamban %d embert gyilkolt meg!!!
MORTAR_MSG1 = %s felállított egy kilövőállást és egyszerre %s lázadót irtott ki vele
MORTAR_MSG2 = %s egyhuzamban %s embert ölt
KILL_INFO1 = %s megölt téged egy %sel^n%.2f méterről.^n
KILL_INFO2 = Ő %d sebzett rajtad, %d találattal^nNeki maradt %dhpja.^n
KILL_INFO3 = Te %d sebeztél rajta %d találattal.^n
KILL_INFO4 = Ő eltalált téged itt:^n%s^n
STILL_HAS = %s maradt még %dhpja
HEAD_MSG1 = $kn megolte $vn t egy fejlovessel!
HEAD_MSG2 = $kn eltavolittotta $vn fejet^naz $wn-vel.
HEAD_MSG3 = $kn hullocsillagot csinalt $vn fejobel egy $wn-vel
HEAD_MSG4 = $vn fejen lett love $kn fegyvere altal...
HEAD_MSG5 = $vn feje foldkoruli palyara alt.
HEAD_MSG6 = $kn segitsegevel $wn feje mar a csillagok kozott tundokolhet...
HEAD_MSG7 = Miaz? Talan egy repulo? Dehogy... Csak $vn-feje
DOUBLE_MSG1 = Wow! %s duplan olt!!!
DOUBLE_MSG2 = Hihetetlen! %s triplan olt !!!
DOUBLE_MSG3 = Szuper! %s egyhuzamban %d embert gyilkolt meg !!!
MORTAR_MSG1 = %s fel allitott egy kilovoallast, es egyszerre %s lazadod irtott ki vele
MORTAR_MSG2 = %s egyhuzamban %s embert olt
KILL_INFO1 = %s megolt teged egy %sel^n%.2f meterrol.^n
KILL_INFO2 = O %d -et sebzett rajtad, %d talalattal^nNeki maradt %dhpja.^n
KILL_INFO3 = Te %d -et sebeztel rajta %d talalattal.^n
KILL_INFO4 = O eltalalt teged itt:^n%s^n
STILL_HAS = %s-nek meg van %dhpja
NO_KILLER = Nincs gyilkosod...
TOPX = Legjobb %d
FFIRE_IS = Csapattárs sebzés:
ATTACKERS = Támadók:
VICTIMS = Áldozatok:
DMG = sebzés
HIT_S = találat
YOU_HIT = Te eltaláltad %st itt:
SERVER_STATS = Szerver Állapot
SHOW_STATS = Állás mutatása
SHOW_RANK = Helyezés mutatása
TA_MSG = %s megtámadta a csapattársát
TK_MSG = %s megölte a csapattársát!
NADE_CAUGHT = Wow! %s elkapott egy ellenséges gránátot!
NADE_FAILEDTK = Hopsz.. %s megölt téged miközben próbálta visszadobni az ellenség gránátját..
NADE_FAILED = %s nem tudta visszadobni az ellenséges gránátot..
NADE_MASTER = OMG! %s egy gránátmester!!!
DISABLED_MSG = A szerver letiltotta ezt az opciót
MOST_KILLS = Legtöbb ölés
KILL = ölés
KILLS = ölés
HEADSHOT = fejlövés
HEADSHOTS = fejlövések
FFIRE_IS = Csapattars sebzes:
ATTACKERS = Tamadok:
VICTIMS = Aldozatok:
DMG = sebzes
HIT_S = talalat
YOU_HIT = Te eltalaltad %st itt:
SERVER_STATS = Szerver Sztatusz
SHOW_STATS = Allas mutatasa
SHOW_RANK = Helyezes mutatasa
TA_MSG = %s megtamadta a csapattarsat
TK_MSG = %s megolte a csapattarsat!
NADE_CAUGHT = Wow! %s elkapott egy ellenseges granatot!
NADE_FAILEDTK = Oops.. %s megolt teged, visszaprobalta dobni az ellenseges granatot..
NADE_FAILED = %s -nek nem sikerult visszadobni az ellenseges granatot..
NADE_MASTER = OMG! %s egy granatmester!!!
DISABLED_MSG = A szerver letiltotta ezt az opciot
MOST_KILLS = Legtobb gyilok
KILL = oles
KILLS = oles
HEADSHOT = fejloves
HEADSHOTS = vejloves
BEST_SCORE = Legjobb pont
POINTS = pont
MOST_DAMAGE = Legtöbb sebzés
DAMAGE = sebzés
HIT = találat
HITS = találat
M_KILLS = Ölés:
M_DEATHS = Halál:
M_SCORE = Eredmény:
MOST_DAMAGE = Legtobb sebzes
DAMAGE = sebzes
HIT = talalat
HITS = talalat
M_KILLS = Oles:
M_DEATHS = Halal:
M_SCORE = Eredmeny:
M_TKS = TK:
M_HITS = Találat:
M_SHOTS = Lövés:
M_HS = Fejlövés:
M_HITS = Talalat:
M_SHOTS = Loves:
M_HS = Fejloves:
M_WEAPON = Fegyver:
M_DAMAGE = Sebzés:
M_NICK = Becenév:
M_YOUR_RANK_IS = A te helyezésed
M_THEIR_RANK_IS = Az ő helyezése
M_DAMAGE = Sebzes:
M_NICK = Nick:
M_YOUR_RANK_IS = A te helyezesed
M_THEIR_RANK_IS = Az o helyezese
M_OF = a
[lt]

View File

@@ -89,7 +89,7 @@ STATS_CONF_LOADED = Statistik-Konfiguration erfolgreich geladen
STATS_CONF_FAIL_LOAD = Fehler beim Laden der Statistik-Konfiguration!!!
STATS_CONF = Statistik-Konfiguration
STATS_ENTRIES_OF = Einträge %i - %i von %i
STATS_USE_MORE = Benutze 'amx_statscfg list %i' für mehr Info´s
STATS_USE_MORE = Benutze 'amx_statscfg list %i' für mehr Infos
STATS_USE_BEGIN = Benutze 'amx_statscfg list 1' um zum Anfang zu gelangen
CANT_ADD_STATS = Kann keine Statistik mehr hinzufügen, das Limit ist erreicht!
COM_STATS_USAGE = Benutze: amx_statscfg <Befehl> [Parameter] ...
@@ -121,7 +121,7 @@ ST_LAST_MAN = Letzter Mann
ST_KNIFE_KILL = Messerkill
ST_KNIFE_KILL_SOUND = Messerkill Sound
ST_HE_KILL = Granatenkill
ST_HE_SUICIDE = Granaten Selbstmord
ST_HE_SUICIDE = Granatenselbstmord
ST_HS_KILL = Headshotkill
ST_HS_KILL_SOUND = Headshotkill Sound
ST_ROUND_CNT = Rundenzähler
@@ -144,7 +144,7 @@ ST_SHOW_MOST_DISRUPTIVE = Zeige meisten Durchschläge
ST_SHOW_HUD_STATS_DEF = Standard HUD-Stats
ST_SHOW_DIST_HS_HUD = Distanz&HS in HUD Liste
ST_STATS_PLAYER_MAP_END = Stats am Ende der Map
ST_STATS_TOP15_MAP_END = Top15 am ende der Map
ST_STATS_TOP15_MAP_END = Top15 am Ende der Map
ST_SAY_HP = Say /hp
ST_SAY_STATSME = Say /statsme
ST_SAY_RANKSTATS = Say /rankstats
@@ -162,7 +162,7 @@ ST_BOMB_CD_HUD = Bomben Countdown HUD
ST_LAST_MAN_SOUND = Letzter Mann Sound
ST_LAST_MAN_HEALTH = Letzter Mann HP
ST_HE_KILL_SOUND = Granatenkill Sound
ST_HE_SUICIDE_SOUND = Granaten Selbstmord Sound
ST_HE_SUICIDE_SOUND = Granatenselbstmord Sound
[sr]
NO_OPTION = Nepostoji optcija(e) sa tom promenljivom (ime "%s")
@@ -1250,13 +1250,13 @@ STATS_CONF_FAILED = Nem sikerült a mentés!!!
STATS_CONF_LOADED = Beállítások sikeresen betöltve
STATS_CONF_FAIL_LOAD = Nem sikerült betölteni a beállításokat!!!
STATS_CONF = Statisztika beállítások
STATS_ENTRIES_OF = %i - %i bejegyzés az összesből (%i db)
STATS_USE_MORE = Írj 'amx_statscfg list %i' többz
STATS_ENTRIES_OF = Bejegyzések %i - %i a %i -ból/-ből
STATS_USE_MORE = Írj 'amx_statscfg list %i' a többihez
STATS_USE_BEGIN = Írj 'amx_statscfg list 1' az elsőhoz
STATS_ENABLED = Statisztika engedélyezve
STATS_DISABLED = Statisztika letiltva
CANT_ADD_STATS = Nem lehet több statot hozzáadni, limit elérve!
COM_STATS_USAGE = Használat: amx_statscfg <parancs> [paraméterek] ...
COM_STATS_USAGE = Használat: amx_statscfg <parancs> [paraméterek] ...
COM_STATS_COM = Parancsok:
COM_STATS_ON = ^ton <változó> - megadott opció engedélyezése
COM_STATS_OFF = ^toff <változó> - megadott opció tiltása
@@ -1295,28 +1295,28 @@ ST_DOUBLE_KILL = Double Kill
ST_DOUBLE_KILL_SOUND = Double Kill Sound
ST_PLAYER_NAME = Player Name
ST_FIRST_BLOOD_SOUND = First Blood Sound
ST_SHOW_KILLER_CHAT = Gyilkos HP&AP mutatása
ST_SHOW_ATTACKERS = Támadók mutatása
ST_SHOW_VICTIMS = Áldozatok mutatása
ST_SHOW_KILLER = Gyilkos mutatása
ST_SHOW_TEAM_SCORE = Csapat eredmények mutatása
ST_SHOW_TOTAL_STATS = Összes eredmény mutatása
ST_SHOW_BEST_SCORE = Legjobb eredmény mutatása
ST_SHOW_KILLER_CHAT = Show Killer HP&AP
ST_SHOW_ATTACKERS = Show Attackers
ST_SHOW_VICTIMS = Show Victims
ST_SHOW_KILLER = Show Killer
ST_SHOW_TEAM_SCORE = Show Team Score
ST_SHOW_TOTAL_STATS = Show Total Stats
ST_SHOW_BEST_SCORE = Show Best Score
ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive
ST_SHOW_HUD_STATS_DEF = Show HUD-stats default
ST_SHOW_DIST_HS_HUD = Táv & HS a HUD listában
ST_STATS_PLAYER_MAP_END = Statisztika a pálya végén
ST_STATS_TOP15_MAP_END = Top15 a pálya végén
ST_SAY_HP = Írd /hp
ST_SAY_STATSME = Írd /statsme
ST_SAY_RANKSTATS = Írd /rankstats
ST_SAY_ME = Írd /me
ST_SAY_RANK = Írd /rank
ST_SAY_REPORT = Írd /report
ST_SAY_SCORE = Írd /score
ST_SAY_TOP15 = Írd /top15
ST_SAY_STATS = Írd /stats
ST_SPEC_RANK = Nézelődő Rank információ
ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists
ST_STATS_PLAYER_MAP_END = Stats at the end of map
ST_STATS_TOP15_MAP_END = Top15 at the end of map
ST_SAY_HP = Say /hp
ST_SAY_STATSME = Say /statsme
ST_SAY_RANKSTATS = Say /rankstats
ST_SAY_ME = Say /me
ST_SAY_RANK = Say /rank
ST_SAY_REPORT = Say /report
ST_SAY_SCORE = Say /score
ST_SAY_TOP15 = Say /top15
ST_SAY_STATS = Say /stats
ST_SPEC_RANK = Spec. Rank Info
ST_BOMB_PLANTED_SOUND = Bomb Planted Sound
ST_BOMB_DEF_SUCC_SOUND = Bomb Defuse Succ. Sound
ST_BOMB_DEF_FAIL_SOUND = Bomb Def. Failure Sound
@@ -1991,10 +1991,10 @@ ST_HE_SUICIDE_SOUND = Zëri Vetëvrasjes Granatë
[pt]
NO_OPTION = Não foi possível encontrar a(s) opção(ões) com essa variável (nome "%s")
STATS_CONF_SAVED = A configuração das Estatísticas foi guardada com sucesso
STATS_CONF_FAILED = Falha ao guardar a configuração das Estatísticas!!!
STATS_CONF_LOADED = A configuração das Estatísticas foi carregada com sucesso
STATS_CONF_FAIL_LOAD = Falha ao carregar a configuração das Estatísticas!!!
STATS_CONF_SAVED = A configuração das estatísticas foi guardada com sucesso
STATS_CONF_FAILED = Falha ao guardar a configuração das estatísticas!!!
STATS_CONF_LOADED = A configuração das estatísticas foi carregada com sucesso
STATS_CONF_FAIL_LOAD = Falha ao carregar a configuração das estatísticas!!!
STATS_CONF = Configuração das Estatísticas
STATS_ENTRIES_OF = Entradas %i - %i de %i
STATS_USE_MORE = Usa 'amx_statscfg list %i' para mostrar mais
@@ -2010,7 +2010,7 @@ COM_STATS_SAVE = ^tsave - guardar configuração das estatísticas
COM_STATS_LOAD = ^tload - carregar configuração das estatísticas
COM_STATS_LIST = ^tlist [id] - listar status das estatísticas
COM_STATS_ADD = ^tadd <nome> <variável> - adicionar uma estatística á lista
NO_STATS = Os plugins de Estatísticas não estão^ninstalados neste servidor^n
NO_STATS = Os plugins de estatísticas não estão^ninstalados neste servidor^n
SAVE_CONF = Guardar configuração
ST_MULTI_KILL = MultiKill
ST_MULTI_KILL_SOUND = Som do MultiKill

View File

@@ -66,8 +66,8 @@ DMG = Schaden
VICTIMS = Opfer
MOST_DMG = Am meisten verursachter Schaden durch
KILLED_YOU_DIST = %s hat dich mit einer %s ^naus %0.2f Metern Entfernung gekillt.
DID_DMG_HITS = Er verursachte %d Schaden bei dir mit %d Treffern^nund hat noch %dhp und %dap.
YOU_DID_DMG = Du hast bei ihm %d Schaden mit %d Treffern angerichtet.
DID_DMG_HITS = Er verursachte %d Schaden bei dir mit %d Treffer(n)^nund hat noch %dhp und %dap.
YOU_DID_DMG = Du hast bei ihm %d Schaden mit %d Treffer(n) angerichtet.
EFF = Effizienz
BEST_SCORE = Die meisten Punkte
KILL_S = Kill(s)
@@ -772,7 +772,7 @@ LEFTARM = balkar
RIGHTARM = jobbkar
LEFTLEG = balláb
RIGHTLEG = jobbláb
MODE_SET_TO = "amx_statsx_mode" átállítva "%s" értékre
MODE_SET_TO = "amx_statsx_mode" set to "%s"
ATTACKERS = Támadók
ACC = Pontosság
HIT_S = Találat
@@ -780,15 +780,15 @@ DMG = sebzés
VICTIMS = Áldozatok
MOST_DMG = Legtöbb sebzés:
KILLED_YOU_DIST = %s megölt téged %s^n %0.2f méterről.
DID_DMG_HITS = Ő %d sebzést okozott neked %d találattal ^nés maradt neki %d hp és %d ap.
YOU_DID_DMG = Te %d sebzést okoztál neki %d találattal.
DID_DMG_HITS = Ő %d -t sebzett rajtad ^n találattal és maradt neki %d hp és %d ap.
YOU_DID_DMG = Te %d sebeztél rajta %d találattal.
EFF = Hatékonyság
BEST_SCORE = Legjobb pont
KILL_S = Ölés
TOTAL = Teljes
SHOT_S = Lövések
HITS_YOU_IN = %s eltalált téged
KILLED_BY_WITH = Megölt %s, %s fegyverrel %0.0f méterről
KILLED_BY_WITH = Megölt %s, %s-el %0.0fméterről
NO_HITS = nincs találat
YOU_NO_KILLER = Nincs gyilkosod...
YOU_HIT = Eltaláltad %s %d alkalommal, %d összes sebzés rajta
@@ -799,10 +799,10 @@ HITS = Találat
SHOTS = Lövés
YOUR = Te
PLAYERS = Játékosok
RANK_IS = helyezése %d a %d helyből
RANK_IS = helyezése %d a %d -ból/ből
DAMAGE = Sebzés
WEAPON = Fegyver
YOUR_RANK_IS = A te helyezésed %d a %d helyből %d öléssel, %d találattal, %0.2f%% hatékonysággal és %0.2f%% pontossággal.
YOUR_RANK_IS = A te helyezésed %d a %d -ból %d ölessel, %d találattal, %0.2f% effel és %0.2f% accal.
AMMO = töltény
HEALTH = élet
ARMOR = páncél

View File

@@ -104,10 +104,10 @@ CUR_LOC = Locatia Actuala
SAVE_LOC = Salveaza Locatie
[hu]
ADMIN_TELEPORT_1 = ADMIN: %s teleportálva
ADMIN_TELEPORT_2 = ADMIN %s: %s teleportálva
TELE_MENU = Teleport Menü
CUR_LOC = Jelenlegi hely
ADMIN_TELEPORT_1 = ADMIN: %s teleport
ADMIN_TELEPORT_2 = ADMIN %s: %s teleport
TELE_MENU = Teleport Menu
CUR_LOC = Mostani hely
SAVE_LOC = Hely mentése
[lt]

View File

@@ -469,7 +469,7 @@ public client_putinserver(id)
public client_damage(attacker,victim,damage,wpnindex,hitplace,TA){
if ( BulletDamage ) {
if ( attacker==victim || xmod_is_melee_wpn(wpnindex) ) return PLUGIN_CONTINUE
if ( attacker==victim || !wpnindex || xmod_is_melee_wpn(wpnindex) ) return PLUGIN_CONTINUE
set_hudmessage(0, 100, 200, 0.45, 0.85, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(attacker,g_damage_sync,"%i",damage)
set_hudmessage(200, 0, 0, 0.55, 0.85, 2, 0.1, 4.0, 0.02, 0.02, -1)
@@ -575,7 +575,7 @@ public client_death(killer,victim,wpnindex,hitplace,TK){
set_task( 4.0 + float( param[1] ) ,"checkKills",0,param,sizeof(param))
}
if ( xmod_is_melee_wpn(wpnindex) && ( KnifeKill || KnifeKillSound ) ){
if ( ( KnifeKill || KnifeKillSound ) && wpnindex && xmod_is_melee_wpn(wpnindex) ){
if ( KnifeKill ){
set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1)
for (new i=1;i<=MaxClients;i++){
@@ -598,7 +598,7 @@ public client_death(killer,victim,wpnindex,hitplace,TK){
}
}
if ( headshot && (HeadShotKill || HeadShotKillSound) && !xmod_is_melee_wpn(wpnindex) ){
if ( headshot && (HeadShotKill || HeadShotKillSound) && wpnindex && !xmod_is_melee_wpn(wpnindex) ){
if ( HeadShotKill ){
new weapon[32], message[256]
xmod_get_wpnname(wpnindex,weapon,charsmax(weapon))

View File

@@ -1 +1 @@
1.10.0
1.9.0

View File

@@ -21,13 +21,13 @@
#define AMXX_BUILD_LOCAL_REV "0"
#define AMXX_BUILD_CSET "0"
#define AMXX_BUILD_MAJOR "1"
#define AMXX_BUILD_MINOR "10"
#define AMXX_BUILD_MINOR "9"
#define AMXX_BUILD_RELEASE "0"
#define AMXX_BUILD_UNIQUEID AMXX_BUILD_LOCAL_REV ":" AMXX_BUILD_CSET
#define AMXX_VERSION_STRING AMXX_BUILD_MAJOR "." AMXX_BUILD_MINOR "." AMXX_BUILD_RELEASE "-" AMXX_BUILD_TAG
#define AMXX_VERSION_FILE 1,10,0,0
#define AMXX_VERSION_FILE 1,9,0,0
#endif
#define AMXX_BUILD_TIMESTAMP __DATE__ " " __TIME__

View File

@@ -22,7 +22,6 @@
#define MAX_LIGHTSTYLES 64
#define MAX_PACKET_ENTITIES 256
#define MAX_PATH_LENGTH 260
#define MAX_MAPNAME_LENGTH 64
#define MAX_LATENT 32
#define FRAGMENT_SIZE 1400

View File

@@ -35,18 +35,6 @@ folder_list = [
'base/addons/amxmodx/data/gamedata/common.games/gamerules.games/tfc',
'base/addons/amxmodx/data/gamedata/common.games/gamerules.games/gearbox',
'base/addons/amxmodx/data/gamedata/common.games/gamerules.games/valve',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/ag',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/cstrike',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/dod',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/esf',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/esf_openbeta',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/gearbox',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/ns',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/svencoop',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/tfc',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/ts',
'base/addons/amxmodx/data/gamedata/common.games/virtual.games/valve',
'base/addons/amxmodx/data/gamedata/modules.games',
'base/addons/amxmodx/data/lang',
'base/addons/amxmodx/dlls',
@@ -178,6 +166,7 @@ configs = [
'core.ini',
'custommenuitems.cfg',
'cvars.ini',
'hamdata.ini',
'maps.ini',
'miscstats.ini',
'modules.ini',
@@ -430,72 +419,6 @@ CopyFiles('gamedata/common.games', 'base/addons/amxmodx/data/gamedata/common.gam
]
)
CopyFiles('gamedata/common.games/virtual.games/ag', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/ag',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/cstrike', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/cstrike',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/dod', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/dod',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/esf', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/esf',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/esf_openbeta', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/esf_openbeta',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/gearbox', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/gearbox',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/ns', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/ns',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/svencoop', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/svencoop',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/tfc', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/tfc',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/ts', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/ts',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/virtual.games/valve', 'base/addons/amxmodx/data/gamedata/common.games/virtual.games/valve',
[
'offsets-common.txt',
]
)
CopyFiles('gamedata/common.games/hostages.games/cstrike', 'base/addons/amxmodx/data/gamedata/common.games/hostages.games/cstrike',
[
'offsets-chostageimprov.txt',

View File

@@ -29,12 +29,12 @@ $argn = $#ARGV + 1;
print "Attempting to reconfigure...\n";
my $conf_args = '--enable-optimize --no-color --symbol-files';
if ($argn > 0 && $^O !~ /MSWin/) {
$result = `CC=$ARGV[0] CXX=$ARGV[0] python ../build/configure.py $conf_args`;
$result = `CC=$ARGV[0] CXX=$ARGV[0] python3 ../build/configure.py $conf_args`;
} else {
if ($^O =~ /MSWin/) {
$result = `C:\\Python38\\Python.exe ..\\build\\configure.py $conf_args`;
} else {
$result = `CC=clang CXX=clang python ../build/configure.py $conf_args`;
$result = `CC=clang CXX=clang python3 ../build/configure.py $conf_args`;
}
}
print "$result\n";

View File

@@ -21,9 +21,6 @@ download_archive ()
fi
}
ismac=0
iswin=0
if [ "$1" != "--no-mysql" ]; then
ismac=0
iswin=0
@@ -92,55 +89,21 @@ repo="https://github.com/alliedmodders/hlsdk"
origin=
checkout
python_cmd=`command -v python`
if [ -z "$python_cmd" ]; then
python_cmd=`command -v python3`
if [ -z "$python_cmd" ]; then
echo "No suitable installation of Python detected"
exit 1
fi
fi
`$python_cmd -c "import ambuild2"` 2>&1 1>/dev/null
`python -c "import ambuild2"`
if [ $? -eq 1 ]; then
echo "AMBuild is required to build SourceMod"
`$python_cmd -m pip --version` 2>&1 1>/dev/null
if [ $? -eq 1 ]; then
echo "The detected Python installation does not have PIP"
echo "Installing the latest version of PIP available (VIA \"get-pip.py\")"
get_pip="./get-pip.py"
get_pip_url="https://bootstrap.pypa.io/get-pip.py"
if [ `command -v wget` ]; then
wget $get_pip_url -O $get_pip
elif [ `command -v curl` ]; then
curl -o $get_pip $get_pip_url
else
echo "Failed to locate wget or curl. Install one of these programs to download 'get-pip.py'."
exit 1
fi
$python_cmd $get_pip
if [ $? -eq 1 ]; then
echo "Installation of PIP has failed"
exit 1
fi
fi
repo="https://github.com/alliedmodders/ambuild"
origin=
branch=master
name=ambuild
checkout
if [ $iswin -eq 1 ] || [ $ismac -eq 1 ]; then
$python_cmd -m pip install ./ambuild
cd ambuild
if [ $iswin -eq 1 ]; then
python setup.py install
else
python setup.py build
echo "Installing AMBuild at the user level. Location can be: ~/.local/bin"
$python_cmd -m pip install --user ./ambuild
python setup.py install --user
fi
fi

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,8 @@
/*
Parson ( http://kgabis.github.com/parson/ )
Copyright (c) 2012 - 2017 Krzysztof Gabis
SPDX-License-Identifier: MIT
Parson 1.2.1 ( http://kgabis.github.com/parson/ )
Copyright (c) 2012 - 2021 Krzysztof Gabis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -29,6 +31,12 @@ extern "C"
{
#endif
#define PARSON_VERSION_MAJOR 1
#define PARSON_VERSION_MINOR 2
#define PARSON_VERSION_PATCH 1
#define PARSON_VERSION_STRING "1.2.1"
#include <stddef.h> /* size_t */
/* Types and enums */
@@ -60,6 +68,10 @@ typedef void (*JSON_Free_Function)(void *);
from stdlib will be used for all allocations */
void json_set_allocation_functions(JSON_Malloc_Function malloc_fun, JSON_Free_Function free_fun);
/* Sets if slashes should be escaped or not when serializing JSON. By default slashes are escaped.
This function sets a global setting and is not thread safe. */
void json_set_escape_slashes(int escape_slashes);
/* Parses first JSON value in a file, returns NULL in case of error */
JSON_Value * json_parse_file(const char *filename);
@@ -108,6 +120,7 @@ JSON_Status json_validate(const JSON_Value *schema, const JSON_Value *value);
*/
JSON_Value * json_object_get_value (const JSON_Object *object, const char *name);
const char * json_object_get_string (const JSON_Object *object, const char *name);
size_t json_object_get_string_len(const JSON_Object *object, const char *name); /* doesn't account for last null character */
JSON_Object * json_object_get_object (const JSON_Object *object, const char *name);
JSON_Array * json_object_get_array (const JSON_Object *object, const char *name);
double json_object_get_number (const JSON_Object *object, const char *name); /* returns 0 on fail */
@@ -119,6 +132,7 @@ int json_object_get_boolean(const JSON_Object *object, const char *nam
this way. */
JSON_Value * json_object_dotget_value (const JSON_Object *object, const char *name);
const char * json_object_dotget_string (const JSON_Object *object, const char *name);
size_t json_object_dotget_string_len(const JSON_Object *object, const char *name); /* doesn't account for last null character */
JSON_Object * json_object_dotget_object (const JSON_Object *object, const char *name);
JSON_Array * json_object_dotget_array (const JSON_Object *object, const char *name);
double json_object_dotget_number (const JSON_Object *object, const char *name); /* returns 0 on fail */
@@ -142,6 +156,7 @@ int json_object_dothas_value_of_type(const JSON_Object *object, const char *name
* json_object_set_value does not copy passed value so it shouldn't be freed afterwards. */
JSON_Status json_object_set_value(JSON_Object *object, const char *name, JSON_Value *value);
JSON_Status json_object_set_string(JSON_Object *object, const char *name, const char *string);
JSON_Status json_object_set_string_with_len(JSON_Object *object, const char *name, const char *string, size_t len); /* length shouldn't include last null character */
JSON_Status json_object_set_number(JSON_Object *object, const char *name, double number);
JSON_Status json_object_set_boolean(JSON_Object *object, const char *name, int boolean);
JSON_Status json_object_set_null(JSON_Object *object, const char *name);
@@ -150,6 +165,7 @@ JSON_Status json_object_set_null(JSON_Object *object, const char *name);
* json_object_dotset_value does not copy passed value so it shouldn't be freed afterwards. */
JSON_Status json_object_dotset_value(JSON_Object *object, const char *name, JSON_Value *value);
JSON_Status json_object_dotset_string(JSON_Object *object, const char *name, const char *string);
JSON_Status json_object_dotset_string_with_len(JSON_Object *object, const char *name, const char *string, size_t len); /* length shouldn't include last null character */
JSON_Status json_object_dotset_number(JSON_Object *object, const char *name, double number);
JSON_Status json_object_dotset_boolean(JSON_Object *object, const char *name, int boolean);
JSON_Status json_object_dotset_null(JSON_Object *object, const char *name);
@@ -168,13 +184,14 @@ JSON_Status json_object_clear(JSON_Object *object);
*/
JSON_Value * json_array_get_value (const JSON_Array *array, size_t index);
const char * json_array_get_string (const JSON_Array *array, size_t index);
size_t json_array_get_string_len(const JSON_Array *array, size_t index); /* doesn't account for last null character */
JSON_Object * json_array_get_object (const JSON_Array *array, size_t index);
JSON_Array * json_array_get_array (const JSON_Array *array, size_t index);
double json_array_get_number (const JSON_Array *array, size_t index); /* returns 0 on fail */
int json_array_get_boolean(const JSON_Array *array, size_t index); /* returns -1 on fail */
size_t json_array_get_count (const JSON_Array *array);
JSON_Value * json_array_get_wrapping_value(const JSON_Array *array);
/* Frees and removes value at given index, does nothing and returns JSONFailure if index doesn't exist.
* Order of values in array may change during execution. */
JSON_Status json_array_remove(JSON_Array *array, size_t i);
@@ -184,6 +201,7 @@ JSON_Status json_array_remove(JSON_Array *array, size_t i);
* json_array_replace_value does not copy passed value so it shouldn't be freed afterwards. */
JSON_Status json_array_replace_value(JSON_Array *array, size_t i, JSON_Value *value);
JSON_Status json_array_replace_string(JSON_Array *array, size_t i, const char* string);
JSON_Status json_array_replace_string_with_len(JSON_Array *array, size_t i, const char *string, size_t len); /* length shouldn't include last null character */
JSON_Status json_array_replace_number(JSON_Array *array, size_t i, double number);
JSON_Status json_array_replace_boolean(JSON_Array *array, size_t i, int boolean);
JSON_Status json_array_replace_null(JSON_Array *array, size_t i);
@@ -195,6 +213,7 @@ JSON_Status json_array_clear(JSON_Array *array);
* json_array_append_value does not copy passed value so it shouldn't be freed afterwards. */
JSON_Status json_array_append_value(JSON_Array *array, JSON_Value *value);
JSON_Status json_array_append_string(JSON_Array *array, const char *string);
JSON_Status json_array_append_string_with_len(JSON_Array *array, const char *string, size_t len); /* length shouldn't include last null character */
JSON_Status json_array_append_number(JSON_Array *array, double number);
JSON_Status json_array_append_boolean(JSON_Array *array, int boolean);
JSON_Status json_array_append_null(JSON_Array *array);
@@ -205,6 +224,7 @@ JSON_Status json_array_append_null(JSON_Array *array);
JSON_Value * json_value_init_object (void);
JSON_Value * json_value_init_array (void);
JSON_Value * json_value_init_string (const char *string); /* copies passed string */
JSON_Value * json_value_init_string_with_len(const char *string, size_t length); /* copies passed string, length shouldn't include last null character */
JSON_Value * json_value_init_number (double number);
JSON_Value * json_value_init_boolean(int boolean);
JSON_Value * json_value_init_null (void);
@@ -215,6 +235,7 @@ JSON_Value_Type json_value_get_type (const JSON_Value *value);
JSON_Object * json_value_get_object (const JSON_Value *value);
JSON_Array * json_value_get_array (const JSON_Value *value);
const char * json_value_get_string (const JSON_Value *value);
size_t json_value_get_string_len(const JSON_Value *value); /* doesn't account for last null character */
double json_value_get_number (const JSON_Value *value);
int json_value_get_boolean(const JSON_Value *value);
JSON_Value * json_value_get_parent (const JSON_Value *value);
@@ -224,6 +245,7 @@ JSON_Value_Type json_type (const JSON_Value *value);
JSON_Object * json_object (const JSON_Value *value);
JSON_Array * json_array (const JSON_Value *value);
const char * json_string (const JSON_Value *value);
size_t json_string_len(const JSON_Value *value); /* doesn't account for last null character */
double json_number (const JSON_Value *value);
int json_boolean(const JSON_Value *value);