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 # AMXX plugin build related files
plugins/compile.dat plugins/compile.dat
plugins/compiled/ plugins/compiled/
*.amx
*.amxx
build_deps/ build_deps/

View File

@@ -227,6 +227,11 @@ class AMXXConfig(object):
cxx.cflags += ['-Wno-unused-result', '-Wno-error=sign-compare'] cxx.cflags += ['-Wno-unused-result', '-Wno-error=sign-compare']
if have_clang: if have_clang:
cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch'] 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': if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4':
cxx.cxxflags += ['-Wno-deprecated-register'] cxx.cxxflags += ['-Wno-deprecated-register']
else: else:
@@ -317,15 +322,18 @@ class AMXXConfig(object):
def configure_mac(self, cxx): def configure_mac(self, cxx):
cxx.defines += ['OSX', '_OSX', 'POSIX'] 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 += [ cxx.linkflags += [
'-mmacosx-version-min=10.5', '-mmacosx-version-min=10.7',
'-arch', 'i386', '-arch', 'i386',
'-lstdc++', '-lstdc++',
'-stdlib=libstdc++', '-stdlib=libc++',
'-framework', 'CoreServices', '-framework', 'CoreServices',
] ]
cxx.cxxflags += ['-stdlib=libstdc++'] cxx.cxxflags += ['-stdlib=libc++']
def configure_windows(self, cxx): def configure_windows(self, cxx):
cxx.defines += ['WIN32', '_WINDOWS'] 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")) 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")) else if (!strcmp(key, "unsigned"))
{ {
TempType.fieldUnsigned = !!strtol(value, nullptr, 0); TempType.fieldUnsigned = !!atoi(value);
} }
else if (g_LibSys.IsPlatformCompatible(key, &m_MatchedPlatform)) else if (g_LibSys.IsPlatformCompatible(key, &m_MatchedPlatform))
{ {
m_FoundOffset = true; m_FoundOffset = true;
TempType.fieldOffset = strtol(value, nullptr, 0); TempType.fieldOffset = atoi(value);
} }
break; break;
} }
@@ -397,7 +397,7 @@ SMCResult CGameConfig::ReadSMC_KeyValue(const SMCStates *states, const char *key
if (m_AddressReadCount < limit) if (m_AddressReadCount < limit)
{ {
m_AddressRead[m_AddressReadCount] = strtol(value, nullptr, 0); m_AddressRead[m_AddressReadCount] = atoi(value);
m_AddressReadCount++; m_AddressReadCount++;
} }
else else

View File

@@ -180,18 +180,6 @@ class CGameConfigManager : public IGameConfigManager
member = type.fieldOffset; \ 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 CGameConfigManager ConfigManager;
extern IGameConfig *CommonConfig; extern IGameConfig *CommonConfig;

View File

@@ -15,7 +15,6 @@
#include "debugger.h" #include "debugger.h"
#include "libraries.h" #include "libraries.h"
#include <amxmodx_version.h> #include <amxmodx_version.h>
#include "engine_strucs.h"
extern const char *no_function; extern const char *no_function;
@@ -155,37 +154,6 @@ int CPluginMngr::loadPluginsFromFile(const char* filename, bool warn)
*get_amxaddr(plugin->getAMX(), addr) = gpGlobals->maxClients; *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) if (amx_FindPubVar(plugin->getAMX(), "NULL_STRING", &addr) != AMX_ERR_NOTFOUND)
{ {
plugin->m_pNullStringOfs = get_amxaddr(plugin->getAMX(), addr); 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; title = unk;
author = unk; author = unk;
version = unk; version = unk;
url = unk;
char file[PLATFORM_MAX_PATH]; char file[PLATFORM_MAX_PATH];
char* path = build_pathname_r(file, sizeof(file), "%s/%s", p, n); char* path = build_pathname_r(file, sizeof(file), "%s/%s", p, n);

View File

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

View File

@@ -23,30 +23,15 @@
extern CFlagManager FlagMan; extern CFlagManager FlagMan;
ke::Vector<CAdminData *> DynamicAdmins; 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) static cell AMX_NATIVE_CALL get_xvar_id(AMX *amx, cell *params)
{ {
int len; int len;
char* sName = get_amxstring(amx, params[1], 0, len); char* sName = get_amxstring(amx, params[1], 0, len);
cell ptr; 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) 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(); 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; cell num_params = params[0] / sizeof(cell);
g_hudset.a2 = 0;
g_hudset.r2 = 255; if(num_params >= 13) {
g_hudset.g2 = 255; cell *color2 = get_amxaddr(amx, params[13]);
g_hudset.b2 = 250;
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.r1 = static_cast<byte>(params[1]);
g_hudset.g1 = static_cast<byte>(params[2]); g_hudset.g1 = static_cast<byte>(params[2]);
g_hudset.b1 = static_cast<byte>(params[3]); 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; 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); CPluginMngr::CPlugin* a = g_plugins.findPluginFast(amx);
int i; int i;
char *title = get_amxstring(amx, params[1], 0, i);
a->setTitle(get_amxstring(amx, params[arg_title], 0, i)); char *vers = get_amxstring(amx, params[2], 1, i);
a->setVersion(get_amxstring(amx, params[arg_version], 0, i)); char *author = get_amxstring(amx, params[3], 2, i);
a->setAuthor(get_amxstring(amx, params[arg_author], 0, i));
#if defined BINLOG_ENABLED #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 #endif
if (params[arg_count] / sizeof(cell) > arg_author) a->setTitle(title);
{ a->setVersion(vers);
a->setUrl(get_amxstring(amx, params[arg_url], 0, i)); a->setAuthor(author);
a->setDescription(get_amxstring(amx, params[arg_description], 0, i));
}
/* Check if we need to add fail counters */ /* Check if we need to add fail counters */
i = 0; i = 0;
unsigned int counter = 0; unsigned int counter = 0;
while (NONGPL_PLUGIN_LIST[i].author != NULL) 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++; counter++;
} }
@@ -1483,7 +1477,7 @@ static cell AMX_NATIVE_CALL register_plugin(AMX *amx, cell *params) /* 5 param *
{ {
counter++; counter++;
} }
if (stricmp(NONGPL_PLUGIN_LIST[i].title, a->getTitle()) == 0) if (stricmp(NONGPL_PLUGIN_LIST[i].title, title) == 0)
{ {
counter++; counter++;
} }
@@ -1517,34 +1511,31 @@ static cell AMX_NATIVE_CALL register_menucmd(AMX *amx, cell *params) /* 3 param
return 1; 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; CPluginMngr::CPlugin* a;
if (params[arg_plugin] < 0) if (params[1] < 0)
a = g_plugins.findPluginFast(amx); a = g_plugins.findPluginFast(amx);
else else
a = g_plugins.findPlugin((int)params[arg_plugin]); a = g_plugins.findPlugin((int)params[1]);
if (a) if (a)
{ {
set_amxstring(amx, params[arg_name], a->getName(), params[arg_namelen]); set_amxstring(amx, params[2], a->getName(), params[3]);
set_amxstring(amx, params[arg_title], a->getTitle(), params[arg_titlelen]); set_amxstring(amx, params[4], a->getTitle(), params[5]);
set_amxstring(amx, params[arg_version], a->getVersion(), params[arg_versionlen]); set_amxstring(amx, params[6], a->getVersion(), params[7]);
set_amxstring(amx, params[arg_author], a->getAuthor(), params[arg_authorlen]); set_amxstring(amx, params[8], a->getAuthor(), params[9]);
set_amxstring(amx, params[arg_status], a->getStatus(), params[arg_statuslen]); 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]); cell *jit_info = get_amxaddr(amx, params[12]);
set_amxstring(amx, params[arg_description], a->getDescription(), params[arg_descriptionlen]); #if defined AMD64 || !defined JIT
*jit_info = 0;
#else
*jit_info = a->isDebug() ? 0 : 1;
#endif
} }
return a->getId(); return a->getId();

View File

@@ -88,44 +88,21 @@ void Client_TeamInfo(void* mValue)
if (index < 1 || index > gpGlobals->maxClients) break; if (index < 1 || index > gpGlobals->maxClients) break;
char* msg = (char*)mValue; char* msg = (char*)mValue;
if (!msg) break; if (!msg) break;
g_players[index].team = msg;
auto pPlayer = GET_PLAYER_POINTER_I(index);
pPlayer->team = msg;
g_teamsIds.registerTeam(msg, -1); g_teamsIds.registerTeam(msg, -1);
pPlayer->teamId = g_teamsIds.findTeamId(msg); g_players[index].teamId = g_teamsIds.findTeamId(msg);
if (pPlayer->teamId == -1) /**
* 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"))
{ {
/** g_players[index].teamId = 3;
* CS fix for SPECTATOR team. g_teamsIds.registerTeam(msg, 3);
* -
* 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);
}
} }
break; break;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -9,7 +9,6 @@
#include "amxmodx.h" #include "amxmodx.h"
#include <amxmodx_version.h> #include <amxmodx_version.h>
#include <string>
void amx_command() void amx_command()
{ {
@@ -26,7 +25,7 @@ void amx_command()
if (!strcmp(cmd, "plugins") || !strcmp(cmd, "list")) if (!strcmp(cmd, "plugins") || !strcmp(cmd, "list"))
{ {
print_srvconsole("Currently loaded plugins:\n"); 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 plugins = 0;
int running = 0; int running = 0;
@@ -41,7 +40,7 @@ void amx_command()
if ((*a).isValid() && !(*a).isPaused()) if ((*a).isValid() && !(*a).isPaused())
++running; ++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; ++a;
} }
@@ -64,52 +63,6 @@ void amx_command()
print_srvconsole("%d plugins, %d running\n", plugins, running); 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) else if (!strcmp(cmd, "pause") && CMD_ARGC() > 2)
{ {
const char* sPlugin = CMD_ARGV(2); const char* sPlugin = CMD_ARGV(2);
@@ -291,7 +244,6 @@ void amx_command()
print_srvconsole(" version - display amxx version info\n"); print_srvconsole(" version - display amxx version info\n");
print_srvconsole(" gpl - print the license\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(" 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(" 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(" 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"); 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.r1);
WRITE_BYTE(textparms.g1); WRITE_BYTE(textparms.g1);
WRITE_BYTE(textparms.b1); WRITE_BYTE(textparms.b1);
WRITE_BYTE(0); WRITE_BYTE(textparms.a1);
WRITE_BYTE(255); WRITE_BYTE(textparms.r2);
WRITE_BYTE(255); WRITE_BYTE(textparms.g2);
WRITE_BYTE(250); WRITE_BYTE(textparms.b2);
WRITE_BYTE(0); WRITE_BYTE(textparms.a2);
WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8))); WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8)));
WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8))); WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8)));
WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8))); WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8)));

View File

@@ -29,4 +29,4 @@ build_script:
- mkdir build - mkdir build
- cd build - cd build
- c:\python27\python ../configure.py --enable-optimize --nasm="C:\nasm\nasm-2.13.03\nasm.exe" - 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() void show_help()
{ {
printf("Options:\n"); printf("Options:\n");
printf("\t-A<num> alignment in bytes of the data segment and the stack\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-a output assembler code\n");
printf("\t-C[+/-] compact encoding for output file (default=-)\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-c<name> codepage name or number; e.g. 1252 for Windows Latin-1\n");
printf("\t-Dpath active directory path\n"); printf("\t-Dpath active directory path\n");
printf("\t-d0 no symbolic information, no run-time checks\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-d1 [default] run-time checks, no symbolic information\n");
printf("\t-d2 full debug information and dynamic checking\n"); printf("\t-d2 full debug information and dynamic checking\n");
printf("\t-d3 full debug information, dynamic checking, no optimization\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-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-H<hwnd> window handle to send a notification message on finish\n");
printf("\t-i<name> path for include files\n"); printf("\t-i<name> path for include files\n");
printf("\t-l create list file (preprocess only)\n"); printf("\t-l create list file (preprocess only)\n");
printf("\t-o<name> set base name of output file\n"); printf("\t-o<name> set base name of output file\n");
printf("\t-p<name> set name of \"prefix\" 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-r[name] write cross reference report to console or to specified file\n");
printf("\t-sui[+/-] show stack usage info\n");
} }
#if defined(__linux__) || defined(__APPLE__) #if defined(__linux__) || defined(__APPLE__)

View File

@@ -54,7 +54,7 @@
#define CTRL_CHAR '^' /* default control character */ #define CTRL_CHAR '^' /* default control character */
#define sCHARBITS 8 /* size of a packed 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 sLINEMAX 4095 /* input line length (in characters) */
#define sCOMP_STACK 32 /* maximum nesting of #if .. #endif sections */ #define sCOMP_STACK 32 /* maximum nesting of #if .. #endif sections */
#define sDEF_LITMAX 500 /* initial size of the literal pool, in "cells" */ #define sDEF_LITMAX 500 /* initial size of the literal pool, in "cells" */
@@ -280,12 +280,6 @@ typedef struct s_stringpair {
char *documentation; char *documentation;
} stringpair; } stringpair;
typedef struct s_valuepair {
struct s_valuepair *next;
long first;
long second;
} valuepair;
/* macros for code generation */ /* macros for code generation */
#define opcodes(n) ((n)*sizeof(cell)) /* opcode size */ #define opcodes(n) ((n)*sizeof(cell)) /* opcode size */
#define opargs(n) ((n)*sizeof(cell)) /* size of typical argument */ #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 stringlist *insert_autolist(char *string);
SC_FUNC char *get_autolist(int index); SC_FUNC char *get_autolist(int index);
SC_FUNC void delete_autolisttable(void); 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_dbgfile(const char *filename);
SC_FUNC stringlist *insert_dbgline(int linenr); SC_FUNC stringlist *insert_dbgline(int linenr);
SC_FUNC stringlist *insert_dbgsymbol(symbol *sym); 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 int sc_allowproccall;/* allow/detect tagnames in lex() */
SC_VDECL char *pc_deprecate; /* if non-NULL, mark next declaration as deprecated */ SC_VDECL char *pc_deprecate; /* if non-NULL, mark next declaration as deprecated */
SC_VDECL int sc_warnings_are_errors; 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_automaton_tab; /* automaton table */
SC_VDECL constvalue sc_state_tab; /* state 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 */ /* reset "defined" flag of all functions and global variables */
reduce_referrers(&glbtab); reduce_referrers(&glbtab);
delete_symbols(&glbtab,0,TRUE,FALSE); delete_symbols(&glbtab,0,TRUE,FALSE);
delete_heaplisttable();
#if !defined NO_DEFINE #if !defined NO_DEFINE
delete_substtable(); delete_substtable();
inst_datetime_defines(); inst_datetime_defines();
@@ -756,55 +755,14 @@ cleanup:
#if !defined SC_LIGHT #if !defined SC_LIGHT
if (errnum==0 && strlen(errfname)==0) { if (errnum==0 && strlen(errfname)==0) {
int recursion = 0, flag_exceed = 0; int flag_exceed=0;
long stacksize = 0L; if (sc_amxlimit > 0 && (long)(hdrsize+code_idx+glb_declared*sizeof(cell)+sc_stksize*sizeof(cell)) >= sc_amxlimit)
unsigned long maxStackUsage = 0L; flag_exceed=1;
unsigned long dynamicStackSizeLimit = (long)sc_stksize * sizeof(cell); if ((sc_debug & sSYMBOLIC)!=0 || verbosity>=2 || flag_exceed) {
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) {
pc_printf("Header size: %8ld bytes\n", (long)hdrsize); pc_printf("Header size: %8ld bytes\n", (long)hdrsize);
pc_printf("Code size: %8ld bytes\n", (long)code_idx); pc_printf("Code size: %8ld bytes\n", (long)code_idx);
pc_printf("Data size: %8ld bytes\n", (long)glb_declared*sizeof(cell)); pc_printf("Data size: %8ld bytes\n", (long)glb_declared*sizeof(cell));
pc_printf("Stack/heap size: %8ld bytes", dynamicStackSizeLimit); pc_printf("Stack/heap size: %8ld bytes\n", (long)sc_stksize*sizeof(cell));
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("Total requirements:%8ld bytes\n", (long)hdrsize+(long)code_idx+(long)glb_declared*sizeof(cell)+(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 */
if (flag_exceed) if (flag_exceed)
@@ -847,7 +805,6 @@ cleanup:
free(sc_documentation); free(sc_documentation);
#endif #endif
delete_autolisttable(); delete_autolisttable();
delete_heaplisttable();
if (errnum!=0) { if (errnum!=0) {
if (strlen(errfname)==0) if (strlen(errfname)==0)
pc_printf("\n%d Error%s.\n",errnum,(errnum>1) ? "s" : ""); pc_printf("\n%d Error%s.\n",errnum,(errnum>1) ? "s" : "");
@@ -1003,8 +960,6 @@ static void initglobals(void)
sc_documentation=NULL; sc_documentation=NULL;
sc_makereport=FALSE; /* do not generate a cross-reference report */ sc_makereport=FALSE; /* do not generate a cross-reference report */
#endif #endif
sc_stkusageinfo=FALSE;/* stack usage info disabled by default */
} }
/* set_extension /* set_extension
@@ -1067,8 +1022,6 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
const char *ptr; const char *ptr;
int arg,i,isoption; int arg,i,isoption;
static const char stackusageinfo[4] = { 's', 'u', 'i', '\0' };
for (arg=1; arg<argc; arg++) { for (arg=1; arg<argc; arg++) {
#if DIRSEP_CHAR=='/' #if DIRSEP_CHAR=='/'
isoption= argv[arg][0]=='-'; isoption= argv[arg][0]=='-';
@@ -1197,18 +1150,9 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
else else
about(); about();
break; break;
case 's': { 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;
}
}
skipinput=atoi(option_value(ptr)); skipinput=atoi(option_value(ptr));
break; break;
}
case 't': case 't':
i=atoi(option_value(ptr)); i=atoi(option_value(ptr));
if (i>0) if (i>0)
@@ -1462,44 +1406,43 @@ static void about(void)
setcaption(); setcaption();
pc_printf("Usage: pawncc <filename> [filename...] [options]\n\n"); pc_printf("Usage: pawncc <filename> [filename...] [options]\n\n");
pc_printf("Options:\n"); pc_printf("Options:\n");
pc_printf(" -A<num> alignment in bytes of the data segment and the stack\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 output assembler code\n");
#if AMX_COMPACTMARGIN > 2 #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 #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 #if defined dos_setdrive
pc_printf(" -Dpath active directory path\n"); pc_printf(" -Dpath active directory path\n");
#endif #endif
pc_printf(" -d0 no symbolic information, no run-time checks\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(" -d1 [default] run-time checks, no symbolic information\n");
pc_printf(" -d2 full debug information and dynamic checking\n"); pc_printf(" -d2 full debug information and dynamic checking\n");
pc_printf(" -d3 full debug information, dynamic checking, no optimization\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(" -e<name> set name of error file (quiet compile)\n");
#if defined __WIN32__ || defined _WIN32 || defined _Windows #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 #endif
pc_printf(" -i<name> path for include files\n"); pc_printf(" -i<name> path for include files\n");
pc_printf(" -l create list file (preprocess only)\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(" -o<name> set base name of (P-code) output file\n");
pc_printf(" -p<name> set name of \"prefix\" file\n"); pc_printf(" -p<name> set name of \"prefix\" file\n");
#if !defined SC_LIGHT #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 #endif
pc_printf(" -S<num> stack/heap size in cells (default=%d)\n",(int)sc_stksize); 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(" -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(" -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(" -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(" -w<num> disable a specific warning by its number\n"); pc_printf(" -E treat warnings as errors\n");
pc_printf(" -E treat warnings as errors\n"); pc_printf(" -X<num> abstract machine size limit in bytes\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(" -^ 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 a semicolon to end each statement (default=%c)\n", sc_needsemicolon ? '+' : '-'); pc_printf(" -([+/-] require parantheses for function invocation (default=%c)\n", optproccall ? '-' : '+');
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=val define constant \"sym\" with value \"val\"\n"); pc_printf(" sym= define constant \"sym\" with value 0\n");
pc_printf(" sym= define constant \"sym\" with value 0\n");
#if defined __WIN32__ || defined _WIN32 || defined _Windows || defined __MSDOS__ #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("\nOptions may start with a dash or a slash; the options \"-d0\" and \"/d0\" are\n");
pc_printf("equivalent.\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)); return dim[cur]+(dim[cur]*calc_arraysize(dim,numdim,cur+1));
} }
static void adjust_indirectiontables(int dim[],int numdim,int startlit, static cell adjust_indirectiontables(int dim[],int numdim,int cur,cell increment,
constvalue *lastdim,int *skipdim) int startlit,constvalue *lastdim,int *skipdim)
{ {
static int base; static int base;
int cur; int d;
int i,d;
cell accum; cell accum;
cell size;
assert(startlit==-1 || startlit>=0 && startlit<=litidx); assert(cur>=0 && cur<numdim);
base=startlit; assert(increment>=0);
size=1; assert(cur>0 && startlit==-1 || startlit>=0 && startlit<=litidx);
for (cur=0; cur<numdim-1; cur++) { if (cur==0)
/* 2 or more dimensions left, fill in an indirection vector */ base=startlit;
if (dim[cur+1]>0) { if (cur==numdim-1)
for (i=0; i<size; i++) return 0;
for (d=0; d<dim[cur]; d++) /* 2 or more dimensions left, fill in an indirection vector */
litq[base++]=(size*dim[cur]+(dim[cur+1]-1)*(dim[cur]*i+d)) * sizeof(cell); assert(dim[cur]>0);
} else { if (dim[cur+1]>0) {
/* final dimension is variable length */ for (d=0; d<dim[cur]; d++)
constvalue *ld; litq[base++]=(dim[cur]+d*(dim[cur+1]-1)+increment) * sizeof(cell);
assert(dim[cur+1]==0); accum=dim[cur]*(dim[cur+1]-1);
assert(lastdim!=NULL); } else {
assert(skipdim!=NULL); /* final dimension is variable length */
accum=0; constvalue *ld;
for (i=0; i<size; i++) { assert(dim[cur+1]==0);
/* skip the final dimension sizes for all earlier major dimensions */ assert(lastdim!=NULL);
for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) { assert(skipdim!=NULL);
assert(ld!=NULL); accum=0;
} /* for */ /* skip the final dimension sizes for all earlier major dimensions */
for (d=0; d<dim[cur]; d++) { for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) {
assert(ld!=NULL); assert(ld!=NULL);
assert(strtol(ld->name,NULL,16)==d); } /* for */
litq[base++]=(size*dim[cur]+accum) * sizeof(cell); for (d=0; d<dim[cur]; d++) {
accum+=ld->value-1; assert(ld!=NULL);
*skipdim+=1; assert(strtol(ld->name,NULL,16)==d);
ld=ld->next; litq[base++]=(dim[cur]+accum+increment) * sizeof(cell);
} /* for */ accum+=ld->value-1;
} /* for */ *skipdim+=1;
} /* if */ ld=ld->next;
size*=dim[cur]; } /* for */
} /* 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 /* 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--) for (tablesize=calc_arraysize(dim,numdim-1,0); tablesize>0; tablesize--)
litadd(0); litadd(0);
if (dim[numdim-1]!=0) /* error 9 has already been given */ 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 */ } /* if */
return; return;
} /* if */ } /* 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 * of the array and we can properly adjust the indirection vectors
*/ */
if (err==0) 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 */ delete_consttable(&lastdim); /* clear list of minor dimension sizes */
} /* if */ } /* if */
} /* if */ } /* if */
@@ -5507,16 +5455,6 @@ static void doreturn(void)
/* nothing */; /* nothing */;
sub=addvariable(curfunc->name,(argcount+3)*sizeof(cell),iREFARRAY,sGLOBAL,curfunc->tag,dim,numdim,idxtag); sub=addvariable(curfunc->name,(argcount+3)*sizeof(cell),iREFARRAY,sGLOBAL,curfunc->tag,dim,numdim,idxtag);
sub->parent=curfunc; 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 */ } /* if */
/* get the hidden parameter, copy the array (the array is on the heap; /* 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 * 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); return (wqptr-wqSIZE);
} /* if */ } /* 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) if (comma)
lptr++; lptr++;
} while (comma); } while (comma);
} else if (strcmp(str, "showstackusageinfo")==0) {
sc_stkusageinfo=TRUE;
} else { } else {
error(207); /* unknown #pragma */ error(207); /* unknown #pragma */
} /* if */ } /* 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); int lvalue=plnge1(hier12,lval);
if (matchtoken('?')) { 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 flab1=getlabel();
int flab2=getlabel(); int flab2=getlabel();
value lval2 = {0}; value lval2 = {0};
int array1,array2; int array1,array2;
int orig_heap=decl_heap;
int diff1=0,diff2=0;
if (lvalue) { if (lvalue) {
rvalue(lval); rvalue(lval);
} else if (lval->ident==iCONSTEXPR) { } else if (lval->ident==iCONSTEXPR) {
ldconst(lval->constval,sPRI); ldconst(lval->constval,sPRI);
error(lval->constval ? 206 : 205); /* redundant test */ error(lval->constval ? 206 : 205); /* redundant test */
} /* if */ } /* 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 */ jmp_eq0(flab1); /* go to second expression if primary register==0 */
PUSHSTK_I(sc_allowtags); PUSHSTK_I(sc_allowtags);
sc_allowtags=FALSE; /* do not allow tagnames here (colon is a special token) */ 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)) if (hier13(lval))
rvalue(lval); rvalue(lval);
if (lval->ident==iCONSTEXPR) /* load constant here */ if (lval->ident==iCONSTEXPR) /* load constant here */
ldconst(lval->constval,sPRI); ldconst(lval->constval,sPRI);
sc_allowtags=(short)POPSTK_I(); /* restore */ 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); jumplabel(flab2);
setlabel(flab1); setlabel(flab1);
if (orig_heap!=decl_heap) {
diff1=abs(decl_heap-orig_heap);
decl_heap=orig_heap;
}
needtoken(':'); needtoken(':');
if (sc_status==statWRITE) {
modheap(heap2*sizeof(cell));
decl_heap+=heap2; /* equilibrate the heap (see comment below) */
} /* if */
if (hier13(&lval2)) if (hier13(&lval2))
rvalue(&lval2); rvalue(&lval2);
if (lval2.ident==iCONSTEXPR) /* load constant here */ if (lval2.ident==iCONSTEXPR) /* load constant here */
ldconst(lval2.constval,sPRI); 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); array1= (lval->ident==iARRAY || lval->ident==iREFARRAY);
array2= (lval2.ident==iARRAY || lval2.ident==iREFARRAY); array2= (lval2.ident==iARRAY || lval2.ident==iREFARRAY);
if (array1 && !array2) { if (array1 && !array2) {
@@ -1077,26 +1055,19 @@ static int hier13(value *lval)
if (!matchtag(lval->tag,lval2.tag,FALSE)) if (!matchtag(lval->tag,lval2.tag,FALSE))
error(213); /* tagname mismatch ('true' and 'false' expressions) */ error(213); /* tagname mismatch ('true' and 'false' expressions) */
setlabel(flab2); 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) if (lval->ident==iARRAY)
lval->ident=iREFARRAY; /* iARRAY becomes iREFARRAY */ lval->ident=iREFARRAY; /* iARRAY becomes iREFARRAY */
else if (lval->ident!=iREFARRAY) else if (lval->ident!=iREFARRAY)
lval->ident=iEXPRESSION; /* iREFARRAY stays iREFARRAY, rest becomes iEXPRESSION */ 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 */ return FALSE; /* conditional expression is no lvalue */
} else { } else {
return lvalue; return lvalue;
@@ -2087,8 +2058,7 @@ static int nesting=0;
error(35,argidx+1); /* argument type mismatch */ error(35,argidx+1); /* argument type mismatch */
/* Verify that the dimensions match with those in arg[argidx]. /* Verify that the dimensions match with those in arg[argidx].
* A literal array always has a single dimension. * A literal array always has a single dimension.
* An iARRAYCELL parameter is also assumed to have 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.
*/ */
if (lval.sym==NULL || lval.ident==iARRAYCELL) { if (lval.sym==NULL || lval.ident==iARRAYCELL) {
if (arg[argidx].numdim!=1) { if (arg[argidx].numdim!=1) {
@@ -2096,8 +2066,7 @@ static int nesting=0;
} else if (arg[argidx].dim[0]!=0) { } else if (arg[argidx].dim[0]!=0) {
assert(arg[argidx].dim[0]>0); assert(arg[argidx].dim[0]>0);
if (lval.ident==iARRAYCELL) { 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 { } else {
assert(lval.constval!=0); /* literal array must have a size */ assert(lval.constval!=0); /* literal array must have a size */
/* A literal array must have exactly the same size as the /* 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 --------------------------------------- */ /* ----- debug information --------------------------------------- */
static stringlist dbgstrings = {NULL, NULL}; 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 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_showincludes=0; /* show include files */
SC_VDEFINE int sc_warnings_are_errors=0; 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_automaton_tab = { NULL, "", 0, 0}; /* automaton table */
SC_VDEFINE constvalue sc_state_tab = { NULL, "", 0, 0}; /* state 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 // Team Fortress Classic
// //
"entities.games/tfc/offsets-cbaseentity.txt" "entities.games/tfc/offsets-cbaseentity.txt"
{ {
"game" "tfc" "game" "tfc"
@@ -3404,7 +3404,7 @@
// //
// Half-Life: Deathmatch // Half-Life: Deathmatch
// //
"entities.games/valve/offsets-cbaseentity.txt" "entities.games/valve/offsets-cbaseentity.txt"
{ {
"game" "valve" "game" "valve"
@@ -4105,67 +4105,4 @@
"game" "valve" "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\core.ini"
File "installer\files\base\addons\amxmodx\configs\custommenuitems.cfg" 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\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\maps.ini"
File "installer\files\base\addons\amxmodx\configs\modules.ini" File "installer\files\base\addons\amxmodx\configs\modules.ini"
File "installer\files\base\addons\amxmodx\configs\plugins.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(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(victims,0,sizeof(victims));
life = {}; memset(&life,0,sizeof(life));
} }
void CPlayer::Init( int pi, edict_t* pe ) void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -95,14 +95,14 @@ void CPlayer::restartStats(bool all)
if ( all ) if ( all )
{ {
memset(weapons,0,sizeof(weapons)); memset(weapons,0,sizeof(weapons));
memset(static_cast<void *>(&round),0,sizeof(round)); memset(&round,0,sizeof(round));
memset(weaponsRnd,0,sizeof(weaponsRnd)); memset(weaponsRnd,0,sizeof(weaponsRnd));
} }
memset(weaponsLife,0,sizeof(weaponsLife)); //DEC-Weapon (Round) stats memset(weaponsLife,0,sizeof(weaponsLife)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(victims,0,sizeof(victims));
life = {}; memset(&life,0,sizeof(life));
} }
void CPlayer::Init( int pi, edict_t* pe ) 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) if(pPlayer->clearRound && pPlayer->clearRound < gpGlobals->time)
{ {
pPlayer->clearRound = 0.0f; 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)); 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(); tr = g_FreeTRs.front();
g_FreeTRs.pop(); g_FreeTRs.pop();
} }
memset(static_cast<void *>(tr), 0, sizeof(TraceResult)); memset(tr, 0, sizeof(TraceResult));
return reinterpret_cast<cell>(tr); return reinterpret_cast<cell>(tr);
} }

View File

@@ -11,46 +11,381 @@
// Ham Sandwich Module // Ham Sandwich Module
// //
#include <amxxmodule.h> #include "amxxmodule.h"
#include "ham_const.h" #include "ham_const.h"
#include "hooklist.h" #include "hooklist.h"
#include "offsets.h" #include "offsets.h"
#include <amtl/am-string.h>
IGameConfig *CommonConfig; extern hook_t hooklist[];
IGameConfigManager *ConfigManager;
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); if (tokens[i]!=NULL && *(tokens[i])!='\0')
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))
{ {
hooklist[index].isset = 1; len=strlen(tokens[i]);
hooklist[index].vtid = value.fieldOffset; 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; return 1;
} }

View File

@@ -558,7 +558,7 @@ enum
HAM_OK = 0, HAM_OK = 0,
HAM_INVALID_FUNC, // The function is not valid 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_FUNC_NOT_AVAILABLE, // This function is not more available in the mod
HAM_ERR_END HAM_ERR_END

View File

@@ -33,7 +33,7 @@ extern HLTypeConversion TypeConversion;
return 0; \ return 0; \
} else if (hooklist[x].isset == 0) { \ } else if (hooklist[x].isset == 0) { \
char msg[1024]; \ 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); \ FailPlugin(amx, x, HAM_FUNC_NOT_CONFIGURED, msg); \
return 0; \ return 0; \
} }

View File

@@ -136,7 +136,7 @@ extern bool gDoForwards;
#define CHECK_RETURN_VEC() \ #define CHECK_RETURN_VEC() \
if (thisresult < HAM_OVERRIDE) \ if (thisresult < HAM_OVERRIDE) \
{ \ { \
memcpy(static_cast<void *>(out), &origret, sizeof(Vector)); \ memcpy(out, &origret, sizeof(Vector)); \
return; \ return; \
} }
@@ -852,8 +852,8 @@ void Hook_Vector_Float_Cbase_Int(Hook *hook, Vector *out, void *pthis, float f1,
MAKE_VECTOR() MAKE_VECTOR()
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector)); memset(&ret, 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector)); memset(&origret, 0x0, sizeof(Vector));
int iEnt = TypeConversion.cbase_to_id(cb); 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() POP()
CHECK_RETURN_VEC() 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) 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() MAKE_VECTOR()
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector)); memset(&ret, 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector)); memset(&origret, 0x0, sizeof(Vector));
PRE_START() PRE_START()
PRE_END() PRE_END()
@@ -1056,7 +1056,7 @@ void Hook_Vector_Void(Hook *hook, Vector *out, void *pthis)
KILL_VECTOR() KILL_VECTOR()
POP() POP()
CHECK_RETURN_VEC() 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() MAKE_VECTOR()
P_PTRVECTOR(v1) P_PTRVECTOR(v1)
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector)); memset(&ret, 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector)); memset(&origret, 0x0, sizeof(Vector));
PRE_START() PRE_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(v1), 3, false) , 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() KILL_VECTOR()
POP() POP()
CHECK_RETURN_VEC() 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) 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() MAKE_VECTOR()
P_FLOAT(f1) P_FLOAT(f1)
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector)); memset(&ret, 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector)); memset(&origret, 0x0, sizeof(Vector));
PRE_START() PRE_START()
, f1 , f1
@@ -1496,7 +1496,7 @@ void Hook_Vector_Float(Hook *hook, Vector *out, void *pthis, float f1)
KILL_VECTOR() KILL_VECTOR()
POP() POP()
CHECK_RETURN_VEC() 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(v2)
P_VECTOR(v3) P_VECTOR(v3)
memset(static_cast<void *>(&ret), 0x0, sizeof(Vector)); memset(&ret, 0x0, sizeof(Vector));
memset(static_cast<void *>(&origret), 0x0, sizeof(Vector)); memset(&origret, 0x0, sizeof(Vector));
PRE_START() PRE_START()
, MF_PrepareCellArrayA(reinterpret_cast<cell *>(&v1), 3, false) , 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() POP()
CHECK_RETURN_VEC() 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) 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; return 0;
} }
if (!JsonMngr->IsValidHandle(params[3]))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON value! %d", params[3]);
return 0;
}
int len; int len;
auto name = MF_GetAmxString(amx, params[2], 0, &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; 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; m_qrInfo.queue_time = save_time;

View File

@@ -162,7 +162,7 @@ void MysqlThread::RunThread(IThreadHandle *pHandle)
float save_time = m_qrInfo.queue_time; 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; 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(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(victims,0,sizeof(victims));
life = {}; memset(&life,0,sizeof(life));
} }
void CPlayer::Init( int pi, edict_t* pe ) void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -121,10 +121,23 @@ void Client_Damage(void* mValue){
if ( FNullEnt( enemy ) ) if ( FNullEnt( enemy ) )
break; 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 if (enemy->v.flags & (FL_CLIENT | FL_FAKECLIENT) ) { // attacker is player and his active weapon
pAttacker = GET_PLAYER_POINTER(enemy); 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; aim = pAttacker->aiming;
weapon = pAttacker->current; weapon = pAttacker->current;
@@ -150,6 +163,15 @@ void Client_Damage(void* mValue){
pAttacker = GET_PLAYER_POINTER(enemy->v.owner); 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); const char *szClass = STRING(enemy->v.classname);
switch(szClass[10]){ switch(szClass[10]){
@@ -185,16 +207,8 @@ void Client_Damage(void* mValue){
if ( !weapon ) { if ( !weapon ) {
switch(szClass[3]){ switch(szClass[3]){
case 'e': case 'e':
weapon = TFC_WPN_TIMER; // TFC_WPN_MEDKIT ?? weapon = TFC_WPN_TIMER; // TFC_WPN_MEDKIT ?? //ShootingKing: Class - "timer"
pAttacker = GET_PLAYER_POINTER(enemy->v.enemy);
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);
if (pAttacker->teamId == mPlayer->teamId) // ??? 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(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(victims,0,sizeof(victims));
life = {}; memset(&life,0,sizeof(life));
} }
void CPlayer::Init( int pi, edict_t* pe ) void CPlayer::Init( int pi, edict_t* pe )

View File

@@ -14,97 +14,64 @@
#include <amxmodx> #include <amxmodx>
#include <amxmisc> #include <amxmisc>
new CvarReservation; new g_ResPtr
new CvarHideSlots; new g_HidePtr
new g_sv_visiblemaxplayers
new CvarHandleMaxVisiblePlayers;
public plugin_init() public plugin_init()
{ {
register_plugin("Slots Reservation", AMXX_VERSION_STR, "AMXX Dev Team"); register_plugin("Slots Reservation", AMXX_VERSION_STR, "AMXX Dev Team")
register_dictionary("adminslots.txt")
register_dictionary("adminslots.txt"); register_dictionary("common.txt")
register_dictionary("common.txt"); g_ResPtr = register_cvar("amx_reservation", "0", FCVAR_PROTECTED)
g_HidePtr = register_cvar("amx_hideslots", "0")
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"); g_sv_visiblemaxplayers = get_cvar_pointer("sv_visiblemaxplayers")
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");
} }
@OnReservationChange(const handle, const oldValue[], const newValue[]) public plugin_cfg()
{ {
CvarReservation = strtol(newValue); set_task(3.0, "MapLoaded")
setVisibleSlots();
} }
@OnHideSlotsChange(const handle, const oldValue[], const newValue[]) public MapLoaded()
{ {
CvarHideSlots = strtol(newValue); if (get_pcvar_num(g_HidePtr))
{
setVisibleSlots(); setVisibleSlots(get_playersnum(1), MaxClients - get_pcvar_num(g_ResPtr))
}
} }
public client_authorized(id) 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) 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) new num = players + 1
{
if (get_pcvar_num(CvarHandleMaxVisiblePlayers) > 0)
{
resetVisibleSlots(MaxClients);
}
return; if (players == MaxClients)
} num = MaxClients
else if (players < limit)
new const playersCount = get_playersnum_ex(GetPlayers_IncludeConnecting); num = limit
new const freeVisibleSlots = MaxClients - CvarReservation;
set_pcvar_num(g_sv_visiblemaxplayers, num)
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);
} }

View File

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

View File

@@ -29,11 +29,6 @@
*/ */
#define MAX_STRING_LENGTH 16384 #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. * Defines and constants related to the maximum number of clients.
* *
@@ -49,11 +44,6 @@
*/ */
public stock const MaxClients; 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 * Pass this into certain functions to act as a C++ NULL
*/ */
@@ -351,6 +341,7 @@ enum
kRenderFxExplode, /* Scale up really big! */ kRenderFxExplode, /* Scale up really big! */
kRenderFxGlowShell, /* Glowing Shell */ kRenderFxGlowShell, /* Glowing Shell */
kRenderFxClampMinScale, /* Keep this sprite from getting very small (SPRITES only!) */ 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 low + (offset % numElements);
} }
else
return high - (abs(offset) % numElements) + 1; {
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 plugin_name Name of the plugin
* @param version Version of the plugin * @param version Version of the plugin
* @param author Author 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 * @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. * Precaches a model file.
@@ -672,7 +670,7 @@ native disable_logevent(handle);
* *
* @param red Red component of hudmessage color * @param red Red component of hudmessage color
* @param green Green 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 x Location of the message on the x axis in percent
* @param y Location of the message on the y axis in percent * @param y Location of the message on the y axis in percent
* @param effects Display effect * @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 fadeintime Time it takes the message to fully appear (fade-in)
* @param fadeouttime Time it takes the message to fully disappear (fade-out) * @param fadeouttime Time it takes the message to fully disappear (fade-out)
* @param channel Channel to use on the client * @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 * @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. * Displays a message on the client HUD.
@@ -923,19 +923,6 @@ native is_user_bot(index);
*/ */
native is_user_hltv(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. * 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 len4 Maximum author buffer size
* @param status Buffer to copy plugin status flags to * @param status Buffer to copy plugin status flags to
* @param len5 Maximum status buffer size * @param len5 Maximum status buffer size
* @param url Buffer to copy plugin url to * @param ... Unused and ignored
* @param len6 Maximum url buffer size
* @param desc Buffer to copy plugin description to
* @param len7 Maximum description buffer size
* *
* @return Plugin index on success, -1 if there is no plugin with given * @return Plugin index on success, -1 if there is no plugin with given
* index * 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. * Returns the number of loaded AMXX plugins.

View File

@@ -12,6 +12,6 @@
#endif #endif
#define _amxmodx_version_included #define _amxmodx_version_included
#define AMXX_VERSION 1.10.0 #define AMXX_VERSION 1.9.0
#define AMXX_VERSION_NUM 1100 #define AMXX_VERSION_NUM 190
stock const AMXX_VERSION_STR[] = "1.10.0-manual"; 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. * Registers a new cvar for the engine.
* *
* @note Deprecated. Consider to use create_cvar for more options. * @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. * @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 * The default value is only set when the cvar is registered for the very
* first time since the server was started. * 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. * This is the entity from which the function is being executed on.
* @note All functions and forwards (eg: {Register,Execute}Ham[B]) require * @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 * 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 * @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 * to get the desired results because the mod will return the full integer
* value. E.g.: (ExecuteHam(Ham_TS_IsObjective, this) & 0x0000FFFF) != 0 * value. E.g.: (ExecuteHam(Ham_TS_IsObjective, this) & 0x0000FFFF) != 0
@@ -4328,7 +4328,7 @@ enum HamError
HAM_OK = 0, HAM_OK = 0,
HAM_INVALID_FUNC, // The function is not valid 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_FUNC_NOT_AVAILABLE, // This function is not more available in the mod
HAM_ERR_END HAM_ERR_END

View File

@@ -15,7 +15,7 @@
* Ham Sandwich is a module that is used to hook and call virtual functions of * Ham Sandwich is a module that is used to hook and call virtual functions of
* entities. * entities.
* Virtual functions are mod-specific functions. This means that in order * 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. * file.
* Be very careful with parameter passing to these functions. * Be very careful with parameter passing to these functions.
*/ */

View File

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

View File

@@ -76,7 +76,7 @@
/** /**
* Function to be called on Back and Next (param1 = string) * 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 * Pass NULL_STRING to disable the callback
*/ */
#define MPROP_PAGE_CALLBACK 11 #define MPROP_PAGE_CALLBACK 11
@@ -117,14 +117,13 @@
* @param title Title the menu should use. * @param title Title the menu should use.
* @param handler Name of the handler function. The function will be invoked * @param handler Name of the handler function. The function will be invoked
* once and only once to every menu_display() call. * 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 * @param ml Unused (should be 0).
* when the menu displays.
* @return Menu resource identifier which must be destroyed via * @return Menu resource identifier which must be destroyed via
* menu_destroy(). All menus are destroyed when the plugin * menu_destroy(). All menus are destroyed when the plugin
* unloads. * unloads.
* @error Function name not found. * @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. * 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); 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 * 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 * 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. * @param queryfmt The query string that can be formated with format specifiers.
* @pram ... Additional arguments for formating the query. * @pram ... Additional arguments for formating the query.
* *
* @return 1 on error. * @return -1 on error.
* >= 0 on success (with the number of affected rows). * >= 0 on success (with the number of affected rows).
*/ */
stock SQL_QueryAndIgnore(Handle:db, const queryfmt[], any:...) 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_ADMIN = 1 admin foi carregado do ficheiro
LOADED_ADMINS = %d admins foram carregados 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_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. NO_ADMINS = Não foram encontrados admins.
SQL_LOADED_ADMIN = 1 admin foi carregado da base de dados SQL_LOADED_ADMIN = 1 admin foi carregado da base de dados
SQL_LOADED_ADMINS = %d admins foram carregados 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_ORANGE = narancs
COL_OCEAN = óceán COL_OCEAN = óceán
COL_MAROON = barna COL_MAROON = barna
PRINT_ALL = (MIND) %s : %s PRINT_ALL = (MIND) %s : %s
[lt] [lt]
COL_WHITE = balta COL_WHITE = balta

View File

@@ -126,8 +126,8 @@ PAUSED = pausiert
UNPAUSED = fortgesetzt UNPAUSED = fortgesetzt
UNABLE_PAUSE = Server konnte das Spiel nicht anhalten. Reale Spieler werden auf dem Server benötigt. UNABLE_PAUSE = Server konnte das Spiel nicht anhalten. Reale Spieler werden auf dem Server benötigt.
SERVER_PROC = Server führt %s aus SERVER_PROC = Server führt %s aus
PAUSING = Pausiere PAUSING = pausiert den Server...
UNPAUSING = setze fort UNPAUSING = setzt den Server fort...
PAUSE = Pause PAUSE = Pause
UNPAUSE = Fortsetzen UNPAUSE = Fortsetzen
COM_SENT_SERVER = Befehlszeile "%s" zur Serverconsole gesendet COM_SENT_SERVER = Befehlszeile "%s" zur Serverconsole gesendet
@@ -138,11 +138,11 @@ ACCESS = Berechtigung
TOTAL_NUM = Total %d TOTAL_NUM = Total %d
SKIP_MATCH = Überspringe "%s" (stimmt überein mit "%s") SKIP_MATCH = Überspringe "%s" (stimmt überein mit "%s")
SKIP_IMM = Überspringe "%s" (Immunität) 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 YOU_DROPPED = Du wurdest gekickt, weil der Admin nur spezielle Spielergruppen auf dem Server zulässt
KICKED_CLIENTS = Kickt %d clients KICKED_CLIENTS = %d Spieler gekickt
ADMIN_LEAVE_1 = ADMIN: erlaubt %s %s %s %s ADMIN_LEAVE_1 = ADMIN: Spieler ohne Berechtigung %s %s %s %s verlassen den Server!
ADMIN_LEAVE_2 = ADMIN %s: erlaubt %s %s %s %s 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_1 = ADMIN: ändert Name von %s zu "%s"
ADMIN_NICK_2 = ADMIN %s: ä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 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 AUTHID_REMOVED = Authid "%s" eltávolítva a banlistáról
ADMIN_UNBAN_1 = ADMIN: %s ban visszavonva ADMIN_UNBAN_1 = ADMIN: %s ban visszavonva
ADMIN_UNBAN_2 = ADMIN %s: %s ban visszavonva ADMIN_UNBAN_2 = ADMIN %s: %s ban visszavonva
ADMIN_ADDBAN_1 = ADMIN: bannolta %s játékost ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: bannolta %s játékost ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = Bannolva BANNED = Bannolva
REASON = Indok REASON = Indok
FOR_MIN = %s percre FOR_MIN = %s percre
@@ -1145,7 +1145,7 @@ ADMIN_SLAY_1 = ADMIN: %s megölve
ADMIN_SLAY_2 = ADMIN %s: %s megölve ADMIN_SLAY_2 = ADMIN %s: %s megölve
CLIENT_SLAYED = "%s" játékos megölve CLIENT_SLAYED = "%s" játékos megölve
ADMIN_SLAP_1 = ADMIN: %s megütve %d sebzéssel 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 CLIENT_SLAPED = "%s" játékos megütve %d sebzéssel
MAP_NOT_FOUND = Nem található ilyen nevű pálya MAP_NOT_FOUND = Nem található ilyen nevű pálya
ADMIN_MAP_1 = ADMIN: pályaváltás %s 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! NO_MORE_CVARS = Nem lehet több cvart hozzáadni az rcon hozzáféréshez!
UNKNOWN_CVAR = Ismeretlen cvar: %s UNKNOWN_CVAR = Ismeretlen cvar: %s
UNKNOWN_XVAR = Ismeretlen xvar: %s UNKNOWN_XVAR = Ismeretlen xvar: %s
CVAR_NO_ACC = Nincs engedélyed a cvarhoz CVAR_NO_ACC = Nincs engedélyed a cvar-hoz
XVAR_NO_ACC = Nincs engedélyed az xvarhoz XVAR_NO_ACC = Nincs engedélyed a xvar-hoz
CVAR_IS = Cvar "%s" jelenleg "%s" CVAR_IS = Cvar "%s" jelenleg "%s"
XVAR_IS = Xvar "%s" jelenleg "%s" XVAR_IS = Xvar "%s" jelenleg "%s"
PROTECTED = Védett PROTECTED = Védett
SET_CVAR_TO = %s cvar átállítva: %s -> "%s" SET_CVAR_TO = %s beállítva cvar %s -> "%s"
SET_XVAR_TO = %s xvar átállítva: %s -> "%s" SET_XVAR_TO = %s beállítva xvar %s -> "%s"
CVAR_CHANGED = Cvar "%s" átállítva "%s" értékre. CVAR_CHANGED = Cvar "%s" átállítva "%s"-ra.
XVAR_CHANGED = Xvar "%s" átállítva "%s" értékre. XVAR_CHANGED = Xvar "%s" átállítva "%s"-ra.
LOADED_PLUGINS = Jelenleg betöltött pluginok LOADED_PLUGINS = Jelenleg betöltött pluginok
NAME = Név NAME = Név
VERSION = Verzió 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ó KICKED_CLIENTS = kirúgva %d felhasználó
ADMIN_LEAVE_1 = ADMIN: ledobta %s %s %s %s ADMIN_LEAVE_1 = ADMIN: ledobta %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: 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_1 = ADMIN: névváltás %s-ról "%s"-ra
ADMIN_NICK_2 = ADMIN %s: %s nevét átírta, mostantól a neve "%s" ADMIN_NICK_2 = ADMIN %s: nevváltás %s-ról "%s"ra
CHANGED_NICK = %s neve mostantól: "%s" CHANGED_NICK = Névváltás %s-ról "%s"ra
ADMIN_EXTEND_1 = ADMIN: Pálya hosszabbítása %d perccel ADMIN_EXTEND_1 = ADMIN: Páya hosszabbítása %d perccel
ADMIN_EXTEND_2 = ADMIN %s: Pálya 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 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_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 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_1 = ADMIN: matou %s
ADMIN_SLAY_2 = ADMIN %s: matou %s ADMIN_SLAY_2 = ADMIN %s: matou %s
CLIENT_SLAYED = O cliente "%s" foi morto CLIENT_SLAYED = O cliente "%s" foi morto
ADMIN_SLAP_1 = ADMIN: esbofeteou %s com %d dano ADMIN_SLAP_1 = ADMIN: esbofeteou %s com %d de dano
ADMIN_SLAP_2 = ADMIN %s: esbofeteou %s com %d dano ADMIN_SLAP_2 = ADMIN %s: esbofeteou %s com %d de dano
CLIENT_SLAPED = O cliente "%s" foi esbofeteado com %d 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 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_1 = ADMIN: mudou de mapa para %s
ADMIN_MAP_2 = ADMIN %s: 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 CVAR_NO_ACC = Tu não tens acesso a essa cvar
XVAR_NO_ACC = Tu não tens acesso a essa xvar XVAR_NO_ACC = Tu não tens acesso a essa xvar
CVAR_IS = A cvar "%s" é "%s" CVAR_IS = A cvar "%s" é "%s"
XVAR_IS = A Xvar "%s" é "%s" XVAR_IS = A xvar "%s" é "%s"
PROTECTED = PROTEGIDO PROTECTED = PROTEGIDO
SET_CVAR_TO = %s mudou a cvar %s para "%s" SET_CVAR_TO = %s mudou a cvar %s para "%s"
SET_XVAR_TO = %s mudou a xvar %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) SKIP_IMM = A saltar "%s" (imunidade)
KICK_PL = A expulsar "%s" KICK_PL = A expulsar "%s"
YOU_DROPPED = Tu foste desconectado pois o admin só deixa entrar um grupo de clientes específico 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_1 = ADMIN: deixou %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: 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" 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_1 = ADMIN: extendeu o mapa por %d minutos
ADMIN_EXTEND_2 = ADMIN %s: 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 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_TEMPBAN = Tu só podes banir jogadores temporariamente, até %d minutos
ADMIN_MUST_TEMPUNBAN = Tu só podes desbanir jogadores que tu baniste recentemente 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 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_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 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 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> [megjelenítendő bejegyzések száma (csak szerver)] - információt nyújt a talált 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 NO_MATCHING_RESULTS = ^nNem található egyezés^n
[lt] [lt]

View File

@@ -1,12 +1,8 @@
[en] [en]
DROPPED_RES = Dropped due to slot reservation 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] [de]
DROPPED_RES = Sorry, dieser Slot ist reserviert 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] [sr]
DROPPED_RES = Server je pun, nemate pristup rezervisanim mestima 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] [pt]
DROPPED_RES = Foste desconectado por causa da reservação de slots 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_SUCCESS = Abstimmung erfolgreich
VOTING_RES_3 = %s (erhielt "%d") (benötigt "%d"). Ergebnis: %s VOTING_RES_3 = %s (erhielt "%d") (benötigt "%d"). Ergebnis: %s
THE_RESULT = Das Ergebnis THE_RESULT = Das Ergebnis
WANT_CONTINUE = Forfahren? WANT_CONTINUE = Fortfahren?
VOTED_FOR = %s stimmten dafür VOTED_FOR = %s stimmte dafür
VOTED_AGAINST = %s stimmten dagegen VOTED_AGAINST = %s stimmte dagegen
VOTED_FOR_OPT = %s stimmten für Option #%d VOTED_FOR_OPT = %s stimmte für Option #%d
ALREADY_VOTING = Abstimmung läuft bereits... ALREADY_VOTING = Abstimmung läuft bereits...
VOTING_NOT_ALLOW = Abstimmung ist momentan nicht möglich! VOTING_NOT_ALLOW = Abstimmung ist momentan nicht möglich!
GIVEN_NOT_VALID = %s ist unzulässig 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_REF = A szavazás eredménytelen.
RES_ACCEPTED = A szavazás sikeres. RES_ACCEPTED = A szavazás sikeres.
VOTING_FAILED = Szavazás sikertelen VOTING_FAILED = Szavazás sikertelen
VOTING_RES_1 = %s (igen "%d") (nem "%d") ("%d" szükséges) VOTING_RES_1 = %s (igen "%d") (nem "%d") (kell "%d")
VOTING_RES_2 = %s (van "%d") ("%d" szükséges) VOTING_RES_2 = %s (van "%d") (kell "%d")
VOTING_SUCCESS = Szavazás sikeres 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 THE_RESULT = Az eredmény
WANT_CONTINUE = Folytatod? WANT_CONTINUE = Folytatod?
VOTED_FOR = %s az igenre szavazott VOTED_FOR = %s az igenre szavazott
VOTED_AGAINST = %s a nemre szavazott VOTED_AGAINST = %s a nemre szavazott
VOTED_FOR_OPT = %s a #%d -re 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 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 MAP_IS = a pálya
MAPS_ARE = a pálya MAPS_ARE = a pálya
CHOOSE_MAP = Válassz pályát 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 MORE_CL_MATCHT = Több játékosra is egyezik a megadott feltétel
CL_NOT_FOUND = Nincs ilyen nevű játékos CL_NOT_FOUND = Nincs ilyen nevű játékos
CLIENT_IMM = "%s" immunitás joggal rendelkezik 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_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 mivel bot CANT_PERF_BOT = Ezt a műveletet nem hajthatod végre "%s" játékoson mert bot
ON = BE ON = BE
OFF = KI OFF = KI
@@ -538,9 +538,9 @@ YES = Sim
NO = Não NO = Não
BAN = banir BAN = banir
KICK = expulsar 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 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 CL_NOT_FOUND = O cliente com esse nome ou userid não foi encontrado
CLIENT_IMM = O cliente "%s" tem imunidade CLIENT_IMM = O cliente "%s" tem imunidade
CANT_PERF_DEAD = Essa ação não pode ser executada no cliente morto "%s" 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 THE_WINNER = Der Gewinner
WANT_CONT = Willst du fortfahren? WANT_CONT = Willst du fortfahren?
VOT_CANC = Abstimmung abgebrochen 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 VOTEMAP_MENU = Menü > Mapwahl
START_VOT = Starte Abstimmung START_VOT = Starte Abstimmung
SEL_MAPS = Ausgewählte Maps SEL_MAPS = Ausgewählte Maps

View File

@@ -17,10 +17,10 @@ RES_WEAP = Restrict Weapons
TELE_PLAYER = Teleport Player TELE_PLAYER = Teleport Player
[de] [de]
KICK_PLAYER = Kick Spieler KICK_PLAYER = Spieler kicken
BAN_PLAYER = Ban Spieler BAN_PLAYER = Spieler bannen
SLAP_SLAY = Schlage/Kille Spieler SLAP_SLAY = Spieler schlagen/killen
TEAM_PLAYER = Team Spieler ^n TEAM_PLAYER = Team der Spieler ändern ^n
CHANGEL = Mapwechsel CHANGEL = Mapwechsel
VOTE_MAPS = Map Abstimmung ^n VOTE_MAPS = Map Abstimmung ^n
SPECH_STUFF = Soundausgabe SPECH_STUFF = Soundausgabe
@@ -32,7 +32,7 @@ LANG_SET = Spracheinstellung
STATS_SET = Statistik-Einstellungen ^n STATS_SET = Statistik-Einstellungen ^n
PAUSE_PLUG = Plugins pausieren PAUSE_PLUG = Plugins pausieren
RES_WEAP = Waffen verbieten RES_WEAP = Waffen verbieten
TELE_PLAYER = Teleport Spieler TELE_PLAYER = Spieler teleportieren
[sr] [sr]
KICK_PLAYER = Kick Igraca KICK_PLAYER = Kick Igraca
@@ -279,7 +279,7 @@ SPECH_STUFF = Beszéd menü
CLIENT_COM = Játékos parancsok CLIENT_COM = Játékos parancsok
SERVER_COM = Szerver parancsok SERVER_COM = Szerver parancsok
CVARS_SET = Cvar Beállítások CVARS_SET = Cvar Beállítások
CONFIG = Konfiguráció CONFIG = Configuráció
LANG_SET = Nyelv Beállítások LANG_SET = Nyelv Beállítások
STATS_SET = Statisztika beállítások ^n STATS_SET = Statisztika beállítások ^n
PAUSE_PLUG = Pluginok Szüneteltetése PAUSE_PLUG = Pluginok Szüneteltetése
@@ -438,7 +438,7 @@ TEAM_PLAYER = Equipa do Jogador ^n
CHANGEL = Mudar de Mapa CHANGEL = Mudar de Mapa
VOTE_MAPS = Votação de Mapas ^n VOTE_MAPS = Votação de Mapas ^n
SPECH_STUFF = Menu de Voz SPECH_STUFF = Menu de Voz
CLIENT_COM = Comandos do Client CLIENT_COM = Comandos do Cliente
SERVER_COM = Comandos do Servidor SERVER_COM = Comandos do Servidor
CVARS_SET = Definições de Cvars CVARS_SET = Definições de Cvars
CONFIG = Configuração 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_1 = Nun hängt alles von dir ab!
LAST_MSG_2 = Hoffentlich hast du ein Medipack dabei. LAST_MSG_2 = Hoffentlich hast du ein Medipack dabei.
LAST_MSG_3 = Deine Teamkameraden sind alle tot. Viel Glück! 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_1 = %s sendet ein kleines Geschenk an %s
HE_MSG_2 = %s wirft ein Knallbonbon zu %s HE_MSG_2 = %s wirft ein Knallbonbon zu %s
HE_MSG_3 = %s macht einen Präzisionswurf 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_3 = $kn verwandelte den Kopf ^nvon $vn in Pudding.
HS_MSG_4 = $kn besiegte $vn durch einen Kopfschuss. HS_MSG_4 = $kn besiegte $vn durch einen Kopfschuss.
HS_MSG_5 = $vn's Kopf wurde in der Gegend verteilt 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... HS_MSG_7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn...
DOUBLE_KILL = Wow! %s machte einen Doppelkill!!! DOUBLE_KILL = Wow! %s machte einen Doppelkill!!!
PREPARE_FIGHT = Vorbereiten zum Kampf!^nRunde %d PREPARE_FIGHT = Vorbereiten zum Kampf!^nRunde %d
@@ -717,29 +717,29 @@ HS = hs
[hu] [hu]
WITH = eddig WITH = eddig
KNIFE_MSG_1 = %s felvágta %s játékost! KNIFE_MSG_1 = %s felvágta %s-t!
KNIFE_MSG_2 = %s szétszabta %s játékost! KNIFE_MSG_2 = %s szétszabta %s-t!
KNIFE_MSG_3 = %s felnyársalta %s játékost! KNIFE_MSG_3 = %s felnyársalta %s-t!
KNIFE_MSG_4 = %s megkéselte %s játékost! KNIFE_MSG_4 = %s megkéselte %s-t!
LAST_MSG_1 = Mostmár minden rajtad múlik! LAST_MSG_1 = Mostmár minden rajtad múlik!
LAST_MSG_2 = Remélem van nálad életcsomag! LAST_MSG_2 = Remélem van nálad életcsomag!
LAST_MSG_3 = Már csak te maradtál. Hajrá! LAST_MSG_3 = Már csak te maradtál. Hajrá!
LAST_MSG_4 = Egyedül maradtál. Sok sikert! LAST_MSG_4 = Egyedül maradtál. Sok sikert!
HE_MSG_1 = %s megajándékozta %s egy gránáttal HE_MSG_1 = %s megajándékozta %s egy gránáttal
HE_MSG_2 = %s felrobbantotta %s játékost HE_MSG_2 = %s felrobbantotta %s-t
HE_MSG_3 = %s kirobbantotta %s játékost HE_MSG_3 = %s kirobbantotta %s-t
HE_MSG_4 = %s szétrobbantotta %s játékost HE_MSG_4 = %s szétrobbantotta %s-t
SHE_MSG_1 = %s felrobbantotta magát... SHE_MSG_1 = %s felrobbantotta magát...
SHE_MSG_2 = %s megnézte közelebbről a gránátjá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_3 = %s azt hitte krumpli van a kezében...
SHE_MSG_4 = %s Felrobbant! SHE_MSG_4 = %s Felrobbant!
HS_MSG_1 = $kn megölte $vn játékost egy fejlövéssel! HS_MSG_1 = $kn megölte $vn t egy fejlövéssel!
HS_MSG_2 = $kn eltávolíttotta $vn fejét^na(z) $wn fegyverrel. 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 fegyverrel HS_MSG_3 = $kn hullócsillagot csinált $vn fejéből egy $wn-vel
HS_MSG_4 = $kn orbalőtte $vn játékost HS_MSG_4 = $kn orbalőtte $vn-t
HS_MSG_5 = $vn feje földkörüli pályára állt. 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_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!!! DOUBLE_KILL = Wow! %s: Duplagyilok!!!
PREPARE_FIGHT = Készülj fel a harcra!^n%d. KÖR PREPARE_FIGHT = Készülj fel a harcra!^n%d. KÖR
KILLED_ROW = Egymás utáni %d ölés. 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 KILLED_ROW = Tu mataste %d vezes de seguida
DIED_ROUNDS = Cuidado! Tu morreste %d vezes de seguida... DIED_ROUNDS = Cuidado! Tu morreste %d vezes de seguida...
KILLED_CHICKEN = Alguém matou a galinha!!! 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! REACHED_TARGET = Oh meu deus! %s alcançou o objetivo!
PLANT_BOMB = %s está a plantar a bomba! PLANT_BOMB = %s está a plantar a bomba!
DEFUSING_BOMB = %s está a desarmar a bomba... DEFUSING_BOMB = %s está a desarmar a bomba...
@@ -1185,7 +1185,7 @@ CT = CT
CTS = CTS CTS = CTS
TERRORIST = TERRORISTA TERRORIST = TERRORISTA
TERRORISTS = TERRORISTAS TERRORISTS = TERRORISTAS
REMAINING = %d %s Restante... REMAINING = %d %s Restante(s)...
REMAINING_ENEMY = Resta um inimigo... REMAINING_ENEMY = Resta um inimigo...
REMAINING_ENEMIES = Restam %d inimigos... REMAINING_ENEMIES = Restam %d inimigos...
KILLS = mortes KILLS = mortes

View File

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

View File

@@ -936,18 +936,18 @@ CLEAR_PAUSED = Pastro skedarin me pushime
[pt] [pt]
PAUSE_COULDNT_FIND = Não foi possível encontrar um plugin coincidindo "%s" PAUSE_COULDNT_FIND = Não foi possível encontrar um plugin coincidindo "%s"
PAUSE_PLUGIN_MATCH = 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_CONF_CLEARED = Ficheiro de configuração limpo. Recarrega o mapa se for necessário
PAUSE_ALR_CLEARED = A Configuração já foi limpa! PAUSE_ALR_CLEARED = A configuração já foi limpa!
PAUSE_CONF_SAVED = Configuração guardada com sucesso 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 LOCKED = BLOQUEADO
PAUSE_UNPAUSE = Pausar/Despausar Plugins PAUSE_UNPAUSE = Pausar/Despausar Plugins
CLEAR_STOPPED = Limpar ficheiro de plugins parados CLEAR_STOPPED = Limpar ficheiro de plugins parados
SAVE_STOPPED = Guardar plugins parados SAVE_STOPPED = Guardar plugins parados
PAUSED_PLUGIN = %d plugin pausado PAUSED_PLUGIN = %d plugin foi pausado
PAUSED_PLUGINS = %d plugins pausados PAUSED_PLUGINS = %d plugins foram pausados
UNPAUSED_PLUGIN = %d plugin despausado UNPAUSED_PLUGIN = %d plugin foi despausado
UNPAUSED_PLUGINS = %d plugins despausados UNPAUSED_PLUGINS = %d plugins foram despausados
CANT_MARK_MORE = Não é possível marcar mais plugins como não-pausáveis! CANT_MARK_MORE = Não é possível marcar mais plugins como não-pausáveis!
PAUSE_LOADED = Pausar Plugins: Plugins carregados PAUSE_LOADED = Pausar Plugins: Plugins carregados
STOPPED = parado 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_USE_BEGIN = Usa 'amx_pausecfg list 1' para voltar ao início
PAUSE_USAGE = Uso: amx_pausecfg <comando> [nome] PAUSE_USAGE = Uso: amx_pausecfg <comando> [nome]
PAUSE_COMMANDS = Comandos PAUSE_COMMANDS = Comandos
COM_PAUSE_OFF = ^toff - pausar todos os plugins que não estão na lista COM_PAUSE_OFF = ^toff - pausa todos os plugins que não estão na lista
COM_PAUSE_ON = ^ton - despausar todos os plugins COM_PAUSE_ON = ^ton - despausa todos os plugins
COM_PAUSE_STOP = ^tstop <ficheiro> - parar um plugin COM_PAUSE_STOP = ^tstop <ficheiro> - para um plugin
COM_PAUSE_PAUSE = ^tpause <ficheiro> - pausar um plugin COM_PAUSE_PAUSE = ^tpause <ficheiro> - pausa um plugin
COM_PAUSE_ENABLE = ^tenable <ficheiro> - ativar um plugin COM_PAUSE_ENABLE = ^tenable <ficheiro> - ativa um plugin
COM_PAUSE_SAVE = ^tsave - guardar a lista de plugins parados COM_PAUSE_SAVE = ^tsave - guarda a lista de plugins parados
COM_PAUSE_CLEAR = ^tclear - limpar a lista de plugins parados COM_PAUSE_CLEAR = ^tclear - limpa a lista de plugins parados
COM_PAUSE_LIST = ^tlist [id] - listar plugins COM_PAUSE_LIST = ^tlist [id] - lista plugins
COM_PAUSE_ADD = ^tadd <título> - marcar um plugin como não-pausável COM_PAUSE_ADD = ^tadd <título> - marca um plugin como não-pausável
SAVE_PAUSED = Guardar plugins pausados SAVE_PAUSED = Guardar plugins pausados
COM_PAUSE_SAVE_PAUSED = ^tsave - guarda a lista de plugins pausados COM_PAUSE_SAVE_PAUSED = ^tsave - guarda a lista de plugins pausados
COM_PAUSE_CLEAR_PAUSED = ^tclear - limpa 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 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 SLAP_WITH_DMG = Megütve %d sebzéssel
SLAY = Megölés SLAY = Megölés
KICK_MENU = Kick Menü KICK_MENU = Kick Menü
ADMIN_TRANSF_1 = ADMIN: %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 csapatba ADMIN_TRANSF_2 = ADMIN %s: %s átállítva %s-nak
TEAM_MENU = Csapat Menü 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 TRANSF_SILENT = Csendes Átállítás
CL_CMD_MENU = Kliens parancsok Menü CL_CMD_MENU = Kliens parancsok Menü
NO_CMDS = Nincs elérhető parancs 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] [de]
EQ_WE_RES = Ausrüstung und Waffen wurden verboten EQ_WE_RES = Ausrüstung und Waffen wurden verboten
EQ_WE_UNRES = Ausrüstung und Waffen wurden freigegeben EQ_WE_UNRES = Ausrüstung und Waffen wurden freigegeben
HAVE_BEEN = sind gewesen HAVE_BEEN = wurden
HAS_BEEN = ist gewesen HAS_BEEN = wurde
RESTRICTED = verboten RESTRICTED = verboten
UNRESTRICTED = wieder erlaubt UNRESTRICTED = wieder erlaubt
NO_EQ_WE = Konnte diese Ausrüstung oder Waffe nicht finden 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_USAGE = Benutze: amx_restrict <Befehl> [Wert]
COM_REST_COMMANDS = Befehle: COM_REST_COMMANDS = Befehle:
COM_REST_ON = " on - Setze Verbot auf die gesamte Ausrüstung" 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_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_LIST = " list <value> - Zeigt die Liste der verfügbaren Waffen und Ausrüstungen"
COM_REST_SAVE = " save - Verbote speichern" COM_REST_SAVE = " save - Verbote speichern"
COM_REST_LOAD = " load [file] - Lädt Verbote [aus einer Datei]" 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_VEST = Kevlarweste
MENU_ITEM_VESTHELM = Kevlarweste & Helm MENU_ITEM_VESTHELM = Kevlarweste & Helm
MENU_ITEM_FLASHBANG = Blendgranate MENU_ITEM_FLASHBANG = Blendgranate
MENU_ITEM_HEGRENADE = HE Granate MENU_ITEM_HEGRENADE = HE-Granate
MENU_ITEM_SMOKEGRENADE = Rauch Granate MENU_ITEM_SMOKEGRENADE = Rauchgranate
MENU_ITEM_DEFUSER = Entschärfungs Kit MENU_ITEM_DEFUSER = Entschärfungskit
MENU_ITEM_NVGS = Nachtsichtgerät MENU_ITEM_NVGS = Nachtsichtgerät
MENU_ITEM_SHIELD = Tactical Shield MENU_ITEM_SHIELD = Tactical Shield
MENU_ITEM_PRIAMMO = Primär Waffen Munition MENU_ITEM_PRIAMMO = Primärwaffenmunition
MENU_ITEM_SECAMMO = Sekundär Waffen Munition MENU_ITEM_SECAMMO = Sekundärwaffenmunition
CONFIG_FILE_HEADER = ; Erstellt durch %s Plugin. Nicht verändern!^n; Wert Name^n 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] [sr]
EQ_WE_RES = Oprema i oruzje su zabranjeni 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 CONFIG_FILE_HEADER = ; Generat de pluginul %s. Nu modifica!^n; numele valorii^n
[hu] [hu]
EQ_WE_RES = Felszerelések és fegyverek felfüggesztve EQ_WE_RES = Felszerelések és fegyverek felfüggesztve
EQ_WE_UNRES = Felszerelések és fegyverek engedélyezve EQ_WE_UNRES = Felszerelések és fegyverek engedélyezve
HAVE_BEEN = lettek HAVE_BEEN = lettek
HAS_BEEN = lettek HAS_BEEN = lettek
RESTRICTED = felfüggesztve RESTRICTED = felfüggesztve
UNRESTRICTED = engedélyezve UNRESTRICTED = engedélyezve
NO_EQ_WE = Nem található ilyen felszerelés vagy fegyver NO_EQ_WE = Nem található ilyen felszerelés vagy fegyver
WEAP_RES = Fegyver felfüggesztés WEAP_RES = Fegyver felfüggesztés
VALUE = érték VALUE = érték
REST_ENTRIES_OF = Bejegyzések %i - %i összesen %i REST_ENTRIES_OF = Bejegyzések %i - %i összesen %i
REST_USE_MORE = Írd be 'amx_restrict list %i' a többhöz 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_BEGIN = Írd be 'amx_restrict list 1' az elsőhöz
REST_USE_HOW = Írd be 'amx_restrict list <érték>' (1 -> 8) REST_USE_HOW = Írd be 'amx_restrict list <érték>' (1 -> 8)
REST_CONF_SAVED = Beállítások elmentve (fájl "%s") REST_CONF_SAVED = Beállitások elmentve (file "%s")
REST_COULDNT_SAVE = Mentés sikertelen (fájl "%s") REST_COULDNT_SAVE = Mentés sikertelen (file "%s")
REST_CONF_LOADED = Beállítások betöltve (fájl "%s") REST_CONF_LOADED = Beállítások betöltve (file "%s")
REST_COULDNT_LOAD = Nem lehet betölteni a beállításokat (fájl "%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_USAGE = Használat: amx_restrict <parancs> [érték]
COM_REST_COMMANDS = Parancsok: COM_REST_COMMANDS = Parancsok:
COM_REST_ON = " on - A teljes felszerelés tiltása" 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_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_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_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_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 COM_REST_TYPE = Írd be 'amx_restrict list' a többi speciális értékhez
REST_WEAP = Fegyverek felfüggesztése 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_MORE = Usa 'amx_restrict list %i' para mostrar mais
REST_USE_BEGIN = Usa 'amx_restrict list 1' para voltar ao início REST_USE_BEGIN = Usa 'amx_restrict list 1' para voltar ao início
REST_USE_HOW = Usa 'amx_restrict list <valor>' (1 -> 8) 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_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") REST_COULDNT_LOAD = Não foi possível carregar a configuração (ficheiro "%s")
COM_REST_USAGE = Uso: amx_restrict <comando> [valor] COM_REST_USAGE = Uso: amx_restrict <comando> [valor]
COM_REST_COMMANDS = Comandos: COM_REST_COMMANDS = Comandos:
@@ -1381,7 +1387,7 @@ COM_REST_TYPE = Escreve 'amx_restrict list' para mais valores específi
REST_WEAP = Restringir Armas REST_WEAP = Restringir Armas
SAVE_SET = Guardar definições SAVE_SET = Guardar definições
CONF_SAV_SUC = Configuração guardada com sucesso 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_MENU = - mostra o menu de restrição de armas
REG_CMD_REST = - mostra a ajuda para restrição de armas REG_CMD_REST = - mostra a ajuda para restrição de armas
RESTRICTED_ITEM = * Este item é restrito * 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_SHIELD = Escudo Tático
MENU_ITEM_PRIAMMO = Munição da arma primária MENU_ITEM_PRIAMMO = Munição da arma primária
MENU_ITEM_SECAMMO = Munição da arma secundá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_1 = ADMIN: atualizou a restrição de itens
ADMIN_UPD_RES_2 = ADMIN %s: 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 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_MSG3 = $kn verwandelte den Kopf ^nvon $vn in Pudding.
HEAD_MSG4 = $vn killte $kn durch einen Kopfschuss. HEAD_MSG4 = $vn killte $kn durch einen Kopfschuss.
HEAD_MSG5 = $vn's Kopf wurde in der Gegend verteilt 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... HEAD_MSG7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn...
DOUBLE_MSG1 = Wow! %s machte einen Doppelkill!!! DOUBLE_MSG1 = Wow! %s machte einen Doppelkill!!!
DOUBLE_MSG2 = Unglaublich! %s macht einen dreifachen Kill !!! 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_MSG1 = %s stellte den Mörser auf und schickte %s in den Himmel.
MORTAR_MSG2 = %s killte %s über eine lange Distanz. 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_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_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 Treffern.^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 KILL_INFO4 = Du hast ihn getroffen in den/das:^n%s^n
STILL_HAS = %s hat noch %dHP STILL_HAS = %s hat noch %dHP
NO_KILLER = Du hast keinen Killer... NO_KILLER = Du hast keinen Killer...
@@ -153,14 +153,14 @@ VICTIMS = Opfer:
DMG = Schaden DMG = Schaden
HIT_S = Treffer HIT_S = Treffer
YOU_HIT = Du trafst %s in: YOU_HIT = Du trafst %s in:
SERVER_STATS = Server Statistik SERVER_STATS = Serverstatistik
SHOW_STATS = Statistik anzeigen SHOW_STATS = Statistik anzeigen
SHOW_RANK = Rang 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! TK_MSG = %s killte einen Kameraden!
NADE_CAUGHT = Wow! %s fängt eine gegnerische Granate! NADE_CAUGHT = Wow! %s fängt eine gegnerische Granate!
NADE_FAILEDTK = Oops.. %s killte dich bei dem Versuch, die Granate zurückzuwerfen.. 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 !!! NADE_MASTER = OMG! %s ist der Meister der Granaten !!!
DISABLED_MSG = Server hat diese Option deaktiviert. DISABLED_MSG = Server hat diese Option deaktiviert.
MOST_KILLS = Meisten Kills MOST_KILLS = Meisten Kills
@@ -1424,98 +1424,98 @@ M_THEIR_RANK_IS = Pozitia lor este
M_OF = din M_OF = din
[hu] [hu]
WHOLEBODY = egész test WHOLEBODY = egesz test
HEAD = fej HEAD = fej
CHEST = csipő CHEST = csipo
STOMACH = has STOMACH = has
LEFTARM = balkar LEFTARM = balkar
RIGHTARM = jobbkar RIGHTARM = jobbkar
LEFTLEG = balláb LEFTLEG = ballab
RIGHTLEG = jobbláb RIGHTLEG = jobblab
MULTI_MSG = Multi-Gyilok! %s^n%d ölés (%d fej) MULTI_MSG = Multi-Gyilok! %s^nwith %d oles (%d fej)
ULTRA_MSG = Ultra-Gyilok!!! %s^n%d ölés (%d fej) ULTRA_MSG = Ultra-Gyilok!!! %s^nwith %d oles (%d fej)
SPREE_MSG = %s ÖLDÖKLÉSI SOROZAT!!!^n %d ölés(%d fej) SPREE_MSG = %s OLDOKLESI SOROZAT!!!^nwith %d oles(%d fej)
RAMPAGE_MSG = RAMPAGE!!! %s^n%d ölés (%d fej) RAMPAGE_MSG = RAMPAGE!!! %s^nwith %d oles (%d fej)
UNSTOPPABLE_MSG = %s a MEGÁLLÍTHATATLAN!!!^n%d ölés (%d fej) UNSTOPPABLE_MSG = %s a MEGALLITHATATLAN!!!^nwith %d oles (%d fej)
MONSTER_MSG = %s EGY GYILOKGÉP!^n%d ölés (%d fej) MONSTER_MSG = %s EGY GYILOKGEP!^nwith %d oles (%d fej)
GODLIKE_MSG = %s AZ ISTEN!!!!^n%d ölés (%d fej) GODLIKE_MSG = %s AZ ISTEN!!!!^nwith %d oles (%d fej)
MULTI_SMALL = %s: Multi-Gyilok! MULTI_SMALL = %s: Multi-Gyilok!
ULTRA_SMALL = %s: Ultra-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!!! RAMPAGE_SMALL = %s: RAMPAGE!!!
UNSTOPPABLE_SMALL = %s A MEGÁLLÍTHATATLAN!!! UNSTOPPABLE_SMALL = %s A MEGALLITHATATLAN!!!
MONSTER_SMALL = %s EGY GYILOKGÉP! MONSTER_SMALL = %s EGY GYILOKGEPP!
GODLIKE_SMALL = %s AZ ISTEN!!! GODLIKE_SMALL = %s AZ ISTEN!!!
KNIFE_MSG1 = %s Felvágta %s-t KNIFE_MSG1 = %s Felvagta %s-t
KNIFE_MSG2 = %s Szétszabta%s-t KNIFE_MSG2 = %s Szetszabta%s-t
KNIFE_MSG3 = %s szétvágta %s-t KNIFE_MSG3 = %s szetvagta %s-t
KNIFE_MSG4 = %s megkéselte %s-t KNIFE_MSG4 = %s megkeselte %s-t
HE_MSG1 = %s megajándékozta %s egy gránáttal HE_MSG1 = %s megajandekozta %s egy granattal
HE_MSG2 = %s felrobbantotta %s HE_MSG2 = %s felrobbantotta %s
HE_MSG3 = %s kirobbantotta %s HE_MSG3 = %s kirobbantotta %s
HE_MSG4 = %s szétrobbantotta %s HE_MSG4 = %s szetrobbantotta %s
SHE_MSG1 = %s felrobbantotta magát... SHE_MSG1 = %s felrobbantotta magat...
SHE_MSG2 = %s megnézte közelebbről a gránátját... SHE_MSG2 = %s megnezte kozelebrol a granatjat...
SHE_MSG3 = %s azt hitte krumpli van a kezében... SHE_MSG3 = %s azt hitte krumpli van a kezeben...
SHE_MSG4 = %s Felrobbant! SHE_MSG4 = %s Felrobbant!
HEAD_MSG1 = $kn megölte $vn -t egy fejlövéssel! HEAD_MSG1 = $kn megolte $vn t egy fejlovessel!
HEAD_MSG2 = $kn eltávolyttotta $vn fejét^naz $wn-vel. HEAD_MSG2 = $kn eltavolittotta $vn fejet^naz $wn-vel.
HEAD_MSG3 = $kn hullócsillagot csinált $vn fejéből egy $wn-vel HEAD_MSG3 = $kn hullocsillagot csinalt $vn fejobel egy $wn-vel
HEAD_MSG4 = $vn fejen lett lőve $kn fegyvere által... HEAD_MSG4 = $vn fejen lett love $kn fegyvere altal...
HEAD_MSG5 = $vn feje földkörüli pályára állt. HEAD_MSG5 = $vn feje foldkoruli palyara alt.
HEAD_MSG6 = $kn segítségével $wn feje már a csillagok között tündökölhet... HEAD_MSG6 = $kn segitsegevel $wn feje mar a csillagok kozott tundokolhet...
HEAD_MSG7 = Mi az? Talan egy repülő? Dehogy... Csak $vn-feje HEAD_MSG7 = Miaz? Talan egy repulo? Dehogy... Csak $vn-feje
DOUBLE_MSG1 = Wow! %s duplán ölt!!! DOUBLE_MSG1 = Wow! %s duplan olt!!!
DOUBLE_MSG2 = Hihetetlen! %s triplán ölt!!! DOUBLE_MSG2 = Hihetetlen! %s triplan olt !!!
DOUBLE_MSG3 = Szuper! %s egyhuzamban %d embert gyilkolt meg!!! 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_MSG1 = %s fel allitott egy kilovoallast, es egyszerre %s lazadod irtott ki vele
MORTAR_MSG2 = %s egyhuzamban %s embert ölt MORTAR_MSG2 = %s egyhuzamban %s embert olt
KILL_INFO1 = %s megölt téged egy %sel^n%.2f méterről.^n KILL_INFO1 = %s megolt teged egy %sel^n%.2f meterrol.^n
KILL_INFO2 = Ő %d sebzett rajtad, %d találattal^nNeki maradt %dhpja.^n KILL_INFO2 = O %d -et sebzett rajtad, %d talalattal^nNeki maradt %dhpja.^n
KILL_INFO3 = Te %d sebeztél rajta %d találattal.^n KILL_INFO3 = Te %d -et sebeztel rajta %d talalattal.^n
KILL_INFO4 = Ő eltalált téged itt:^n%s^n KILL_INFO4 = O eltalalt teged itt:^n%s^n
STILL_HAS = %s maradt még %dhpja STILL_HAS = %s-nek meg van %dhpja
NO_KILLER = Nincs gyilkosod... NO_KILLER = Nincs gyilkosod...
TOPX = Legjobb %d TOPX = Legjobb %d
FFIRE_IS = Csapattárs sebzés: FFIRE_IS = Csapattars sebzes:
ATTACKERS = Támadók: ATTACKERS = Tamadok:
VICTIMS = Áldozatok: VICTIMS = Aldozatok:
DMG = sebzés DMG = sebzes
HIT_S = találat HIT_S = talalat
YOU_HIT = Te eltaláltad %st itt: YOU_HIT = Te eltalaltad %st itt:
SERVER_STATS = Szerver Állapot SERVER_STATS = Szerver Sztatusz
SHOW_STATS = Állás mutatása SHOW_STATS = Allas mutatasa
SHOW_RANK = Helyezés mutatása SHOW_RANK = Helyezes mutatasa
TA_MSG = %s megtámadta a csapattársát TA_MSG = %s megtamadta a csapattarsat
TK_MSG = %s megölte a csapattársát! TK_MSG = %s megolte a csapattarsat!
NADE_CAUGHT = Wow! %s elkapott egy ellenséges gránátot! NADE_CAUGHT = Wow! %s elkapott egy ellenseges granatot!
NADE_FAILEDTK = Hopsz.. %s megölt téged miközben próbálta visszadobni az ellenség gránátját.. NADE_FAILEDTK = Oops.. %s megolt teged, visszaprobalta dobni az ellenseges granatot..
NADE_FAILED = %s nem tudta visszadobni az ellenséges gránátot.. NADE_FAILED = %s -nek nem sikerult visszadobni az ellenseges granatot..
NADE_MASTER = OMG! %s egy gránátmester!!! NADE_MASTER = OMG! %s egy granatmester!!!
DISABLED_MSG = A szerver letiltotta ezt az opciót DISABLED_MSG = A szerver letiltotta ezt az opciot
MOST_KILLS = Legtöbb ölés MOST_KILLS = Legtobb gyilok
KILL = ölés KILL = oles
KILLS = ölés KILLS = oles
HEADSHOT = fejlövés HEADSHOT = fejloves
HEADSHOTS = fejlövések HEADSHOTS = vejloves
BEST_SCORE = Legjobb pont BEST_SCORE = Legjobb pont
POINTS = pont POINTS = pont
MOST_DAMAGE = Legtöbb sebzés MOST_DAMAGE = Legtobb sebzes
DAMAGE = sebzés DAMAGE = sebzes
HIT = találat HIT = talalat
HITS = találat HITS = talalat
M_KILLS = Ölés: M_KILLS = Oles:
M_DEATHS = Halál: M_DEATHS = Halal:
M_SCORE = Eredmény: M_SCORE = Eredmeny:
M_TKS = TK: M_TKS = TK:
M_HITS = Találat: M_HITS = Talalat:
M_SHOTS = Lövés: M_SHOTS = Loves:
M_HS = Fejlövés: M_HS = Fejloves:
M_WEAPON = Fegyver: M_WEAPON = Fegyver:
M_DAMAGE = Sebzés: M_DAMAGE = Sebzes:
M_NICK = Becenév: M_NICK = Nick:
M_YOUR_RANK_IS = A te helyezésed M_YOUR_RANK_IS = A te helyezesed
M_THEIR_RANK_IS = Az ő helyezése M_THEIR_RANK_IS = Az o helyezese
M_OF = a M_OF = a
[lt] [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_FAIL_LOAD = Fehler beim Laden der Statistik-Konfiguration!!!
STATS_CONF = Statistik-Konfiguration STATS_CONF = Statistik-Konfiguration
STATS_ENTRIES_OF = Einträge %i - %i von %i 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 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! CANT_ADD_STATS = Kann keine Statistik mehr hinzufügen, das Limit ist erreicht!
COM_STATS_USAGE = Benutze: amx_statscfg <Befehl> [Parameter] ... COM_STATS_USAGE = Benutze: amx_statscfg <Befehl> [Parameter] ...
@@ -121,7 +121,7 @@ ST_LAST_MAN = Letzter Mann
ST_KNIFE_KILL = Messerkill ST_KNIFE_KILL = Messerkill
ST_KNIFE_KILL_SOUND = Messerkill Sound ST_KNIFE_KILL_SOUND = Messerkill Sound
ST_HE_KILL = Granatenkill ST_HE_KILL = Granatenkill
ST_HE_SUICIDE = Granaten Selbstmord ST_HE_SUICIDE = Granatenselbstmord
ST_HS_KILL = Headshotkill ST_HS_KILL = Headshotkill
ST_HS_KILL_SOUND = Headshotkill Sound ST_HS_KILL_SOUND = Headshotkill Sound
ST_ROUND_CNT = Rundenzähler 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_HUD_STATS_DEF = Standard HUD-Stats
ST_SHOW_DIST_HS_HUD = Distanz&HS in HUD Liste ST_SHOW_DIST_HS_HUD = Distanz&HS in HUD Liste
ST_STATS_PLAYER_MAP_END = Stats am Ende der Map 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_HP = Say /hp
ST_SAY_STATSME = Say /statsme ST_SAY_STATSME = Say /statsme
ST_SAY_RANKSTATS = Say /rankstats 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_SOUND = Letzter Mann Sound
ST_LAST_MAN_HEALTH = Letzter Mann HP ST_LAST_MAN_HEALTH = Letzter Mann HP
ST_HE_KILL_SOUND = Granatenkill Sound ST_HE_KILL_SOUND = Granatenkill Sound
ST_HE_SUICIDE_SOUND = Granaten Selbstmord Sound ST_HE_SUICIDE_SOUND = Granatenselbstmord Sound
[sr] [sr]
NO_OPTION = Nepostoji optcija(e) sa tom promenljivom (ime "%s") 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_LOADED = Beállítások sikeresen betöltve
STATS_CONF_FAIL_LOAD = Nem sikerült betölteni a beállításokat!!! STATS_CONF_FAIL_LOAD = Nem sikerült betölteni a beállításokat!!!
STATS_CONF = Statisztika beállítások STATS_CONF = Statisztika beállítások
STATS_ENTRIES_OF = %i - %i bejegyzés az összesből (%i db) STATS_ENTRIES_OF = Bejegyzések %i - %i a %i -ból/-ből
STATS_USE_MORE = Írj 'amx_statscfg list %i' többz STATS_USE_MORE = Írj 'amx_statscfg list %i' a többihez
STATS_USE_BEGIN = Írj 'amx_statscfg list 1' az elsőhoz STATS_USE_BEGIN = Írj 'amx_statscfg list 1' az elsőhoz
STATS_ENABLED = Statisztika engedélyezve STATS_ENABLED = Statisztika engedélyezve
STATS_DISABLED = Statisztika letiltva STATS_DISABLED = Statisztika letiltva
CANT_ADD_STATS = Nem lehet több statot hozzáadni, limit elérve! 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_COM = Parancsok:
COM_STATS_ON = ^ton <változó> - megadott opció engedélyezése COM_STATS_ON = ^ton <változó> - megadott opció engedélyezése
COM_STATS_OFF = ^toff <változó> - megadott opció tiltása 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_DOUBLE_KILL_SOUND = Double Kill Sound
ST_PLAYER_NAME = Player Name ST_PLAYER_NAME = Player Name
ST_FIRST_BLOOD_SOUND = First Blood Sound ST_FIRST_BLOOD_SOUND = First Blood Sound
ST_SHOW_KILLER_CHAT = Gyilkos HP&AP mutatása ST_SHOW_KILLER_CHAT = Show Killer HP&AP
ST_SHOW_ATTACKERS = Támadók mutatása ST_SHOW_ATTACKERS = Show Attackers
ST_SHOW_VICTIMS = Áldozatok mutatása ST_SHOW_VICTIMS = Show Victims
ST_SHOW_KILLER = Gyilkos mutatása ST_SHOW_KILLER = Show Killer
ST_SHOW_TEAM_SCORE = Csapat eredmények mutatása ST_SHOW_TEAM_SCORE = Show Team Score
ST_SHOW_TOTAL_STATS = Összes eredmény mutatása ST_SHOW_TOTAL_STATS = Show Total Stats
ST_SHOW_BEST_SCORE = Legjobb eredmény mutatása ST_SHOW_BEST_SCORE = Show Best Score
ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive ST_SHOW_MOST_DISRUPTIVE = Show Most Disruptive
ST_SHOW_HUD_STATS_DEF = Show HUD-stats default ST_SHOW_HUD_STATS_DEF = Show HUD-stats default
ST_SHOW_DIST_HS_HUD = Táv & HS a HUD listában ST_SHOW_DIST_HS_HUD = Dist&HS in HUD lists
ST_STATS_PLAYER_MAP_END = Statisztika a pálya végén ST_STATS_PLAYER_MAP_END = Stats at the end of map
ST_STATS_TOP15_MAP_END = Top15 a pálya végén ST_STATS_TOP15_MAP_END = Top15 at the end of map
ST_SAY_HP = Írd /hp ST_SAY_HP = Say /hp
ST_SAY_STATSME = Írd /statsme ST_SAY_STATSME = Say /statsme
ST_SAY_RANKSTATS = Írd /rankstats ST_SAY_RANKSTATS = Say /rankstats
ST_SAY_ME = Írd /me ST_SAY_ME = Say /me
ST_SAY_RANK = Írd /rank ST_SAY_RANK = Say /rank
ST_SAY_REPORT = Írd /report ST_SAY_REPORT = Say /report
ST_SAY_SCORE = Írd /score ST_SAY_SCORE = Say /score
ST_SAY_TOP15 = Írd /top15 ST_SAY_TOP15 = Say /top15
ST_SAY_STATS = Írd /stats ST_SAY_STATS = Say /stats
ST_SPEC_RANK = Nézelődő Rank információ ST_SPEC_RANK = Spec. Rank Info
ST_BOMB_PLANTED_SOUND = Bomb Planted Sound ST_BOMB_PLANTED_SOUND = Bomb Planted Sound
ST_BOMB_DEF_SUCC_SOUND = Bomb Defuse Succ. Sound ST_BOMB_DEF_SUCC_SOUND = Bomb Defuse Succ. Sound
ST_BOMB_DEF_FAIL_SOUND = Bomb Def. Failure Sound ST_BOMB_DEF_FAIL_SOUND = Bomb Def. Failure Sound
@@ -1991,10 +1991,10 @@ ST_HE_SUICIDE_SOUND = Zëri Vetëvrasjes Granatë
[pt] [pt]
NO_OPTION = Não foi possível encontrar a(s) opção(ões) com essa variável (nome "%s") 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_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_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_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_FAIL_LOAD = Falha ao carregar a configuração das estatísticas!!!
STATS_CONF = Configuração das Estatísticas STATS_CONF = Configuração das Estatísticas
STATS_ENTRIES_OF = Entradas %i - %i de %i STATS_ENTRIES_OF = Entradas %i - %i de %i
STATS_USE_MORE = Usa 'amx_statscfg list %i' para mostrar mais 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_LOAD = ^tload - carregar configuração das estatísticas
COM_STATS_LIST = ^tlist [id] - listar status 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 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 SAVE_CONF = Guardar configuração
ST_MULTI_KILL = MultiKill ST_MULTI_KILL = MultiKill
ST_MULTI_KILL_SOUND = Som do MultiKill ST_MULTI_KILL_SOUND = Som do MultiKill

View File

@@ -66,8 +66,8 @@ DMG = Schaden
VICTIMS = Opfer VICTIMS = Opfer
MOST_DMG = Am meisten verursachter Schaden durch MOST_DMG = Am meisten verursachter Schaden durch
KILLED_YOU_DIST = %s hat dich mit einer %s ^naus %0.2f Metern Entfernung gekillt. 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. 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 Treffern angerichtet. YOU_DID_DMG = Du hast bei ihm %d Schaden mit %d Treffer(n) angerichtet.
EFF = Effizienz EFF = Effizienz
BEST_SCORE = Die meisten Punkte BEST_SCORE = Die meisten Punkte
KILL_S = Kill(s) KILL_S = Kill(s)
@@ -772,7 +772,7 @@ LEFTARM = balkar
RIGHTARM = jobbkar RIGHTARM = jobbkar
LEFTLEG = balláb LEFTLEG = balláb
RIGHTLEG = jobblá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 ATTACKERS = Támadók
ACC = Pontosság ACC = Pontosság
HIT_S = Találat HIT_S = Találat
@@ -780,15 +780,15 @@ DMG = sebzés
VICTIMS = Áldozatok VICTIMS = Áldozatok
MOST_DMG = Legtöbb sebzés: MOST_DMG = Legtöbb sebzés:
KILLED_YOU_DIST = %s megölt téged %s^n %0.2f méterről. 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. DID_DMG_HITS = Ő %d -t sebzett rajtad ^n találattal és maradt neki %d hp és %d ap.
YOU_DID_DMG = Te %d sebzést okoztál neki %d találattal. YOU_DID_DMG = Te %d sebeztél rajta %d találattal.
EFF = Hatékonyság EFF = Hatékonyság
BEST_SCORE = Legjobb pont BEST_SCORE = Legjobb pont
KILL_S = Ölés KILL_S = Ölés
TOTAL = Teljes TOTAL = Teljes
SHOT_S = Lövések SHOT_S = Lövések
HITS_YOU_IN = %s eltalált téged 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 NO_HITS = nincs találat
YOU_NO_KILLER = Nincs gyilkosod... YOU_NO_KILLER = Nincs gyilkosod...
YOU_HIT = Eltaláltad %s %d alkalommal, %d összes sebzés rajta YOU_HIT = Eltaláltad %s %d alkalommal, %d összes sebzés rajta
@@ -799,10 +799,10 @@ HITS = Találat
SHOTS = Lövés SHOTS = Lövés
YOUR = Te YOUR = Te
PLAYERS = Játékosok 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 DAMAGE = Sebzés
WEAPON = Fegyver 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 AMMO = töltény
HEALTH = élet HEALTH = élet
ARMOR = páncél ARMOR = páncél

View File

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

View File

@@ -469,7 +469,7 @@ public client_putinserver(id)
public client_damage(attacker,victim,damage,wpnindex,hitplace,TA){ public client_damage(attacker,victim,damage,wpnindex,hitplace,TA){
if ( BulletDamage ) { 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) 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) 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) 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)) 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 ){ if ( KnifeKill ){
set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, -1) 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++){ 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 ){ if ( HeadShotKill ){
new weapon[32], message[256] new weapon[32], message[256]
xmod_get_wpnname(wpnindex,weapon,charsmax(weapon)) 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_LOCAL_REV "0"
#define AMXX_BUILD_CSET "0" #define AMXX_BUILD_CSET "0"
#define AMXX_BUILD_MAJOR "1" #define AMXX_BUILD_MAJOR "1"
#define AMXX_BUILD_MINOR "10" #define AMXX_BUILD_MINOR "9"
#define AMXX_BUILD_RELEASE "0" #define AMXX_BUILD_RELEASE "0"
#define AMXX_BUILD_UNIQUEID AMXX_BUILD_LOCAL_REV ":" AMXX_BUILD_CSET #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_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 #endif
#define AMXX_BUILD_TIMESTAMP __DATE__ " " __TIME__ #define AMXX_BUILD_TIMESTAMP __DATE__ " " __TIME__

View File

@@ -22,7 +22,6 @@
#define MAX_LIGHTSTYLES 64 #define MAX_LIGHTSTYLES 64
#define MAX_PACKET_ENTITIES 256 #define MAX_PACKET_ENTITIES 256
#define MAX_PATH_LENGTH 260 #define MAX_PATH_LENGTH 260
#define MAX_MAPNAME_LENGTH 64
#define MAX_LATENT 32 #define MAX_LATENT 32
#define FRAGMENT_SIZE 1400 #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/tfc',
'base/addons/amxmodx/data/gamedata/common.games/gamerules.games/gearbox', '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/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/gamedata/modules.games',
'base/addons/amxmodx/data/lang', 'base/addons/amxmodx/data/lang',
'base/addons/amxmodx/dlls', 'base/addons/amxmodx/dlls',
@@ -178,6 +166,7 @@ configs = [
'core.ini', 'core.ini',
'custommenuitems.cfg', 'custommenuitems.cfg',
'cvars.ini', 'cvars.ini',
'hamdata.ini',
'maps.ini', 'maps.ini',
'miscstats.ini', 'miscstats.ini',
'modules.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', CopyFiles('gamedata/common.games/hostages.games/cstrike', 'base/addons/amxmodx/data/gamedata/common.games/hostages.games/cstrike',
[ [
'offsets-chostageimprov.txt', 'offsets-chostageimprov.txt',

View File

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

View File

@@ -21,9 +21,6 @@ download_archive ()
fi fi
} }
ismac=0
iswin=0
if [ "$1" != "--no-mysql" ]; then if [ "$1" != "--no-mysql" ]; then
ismac=0 ismac=0
iswin=0 iswin=0
@@ -92,55 +89,21 @@ repo="https://github.com/alliedmodders/hlsdk"
origin= origin=
checkout checkout
python_cmd=`command -v python` `python -c "import ambuild2"`
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
if [ $? -eq 1 ]; then 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" repo="https://github.com/alliedmodders/ambuild"
origin= origin=
branch=master branch=master
name=ambuild name=ambuild
checkout checkout
if [ $iswin -eq 1 ] || [ $ismac -eq 1 ]; then cd ambuild
$python_cmd -m pip install ./ambuild if [ $iswin -eq 1 ]; then
python setup.py install
else else
python setup.py build
echo "Installing AMBuild at the user level. Location can be: ~/.local/bin" 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
fi fi

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,8 @@
/* /*
Parson ( http://kgabis.github.com/parson/ ) SPDX-License-Identifier: MIT
Copyright (c) 2012 - 2017 Krzysztof Gabis
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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@@ -29,6 +31,12 @@ extern "C"
{ {
#endif #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 */ #include <stddef.h> /* size_t */
/* Types and enums */ /* Types and enums */
@@ -60,6 +68,10 @@ typedef void (*JSON_Free_Function)(void *);
from stdlib will be used for all allocations */ from stdlib will be used for all allocations */
void json_set_allocation_functions(JSON_Malloc_Function malloc_fun, JSON_Free_Function free_fun); 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 */ /* Parses first JSON value in a file, returns NULL in case of error */
JSON_Value * json_parse_file(const char *filename); 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); 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); 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_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); 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 */ 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. */ this way. */
JSON_Value * json_object_dotget_value (const JSON_Object *object, const char *name); 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); 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_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); 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 */ 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_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_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(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_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_boolean(JSON_Object *object, const char *name, int boolean);
JSON_Status json_object_set_null(JSON_Object *object, const char *name); 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_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_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(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_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_boolean(JSON_Object *object, const char *name, int boolean);
JSON_Status json_object_dotset_null(JSON_Object *object, const char *name); 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); 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); 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_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); 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 */ 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 */ 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); size_t json_array_get_count (const JSON_Array *array);
JSON_Value * json_array_get_wrapping_value(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. /* 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. */ * Order of values in array may change during execution. */
JSON_Status json_array_remove(JSON_Array *array, size_t i); 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_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_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(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_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_boolean(JSON_Array *array, size_t i, int boolean);
JSON_Status json_array_replace_null(JSON_Array *array, size_t i); 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_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_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(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_number(JSON_Array *array, double number);
JSON_Status json_array_append_boolean(JSON_Array *array, int boolean); JSON_Status json_array_append_boolean(JSON_Array *array, int boolean);
JSON_Status json_array_append_null(JSON_Array *array); 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_object (void);
JSON_Value * json_value_init_array (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 (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_number (double number);
JSON_Value * json_value_init_boolean(int boolean); JSON_Value * json_value_init_boolean(int boolean);
JSON_Value * json_value_init_null (void); 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_Object * json_value_get_object (const JSON_Value *value);
JSON_Array * json_value_get_array (const JSON_Value *value); JSON_Array * json_value_get_array (const JSON_Value *value);
const char * json_value_get_string (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); double json_value_get_number (const JSON_Value *value);
int json_value_get_boolean(const JSON_Value *value); int json_value_get_boolean(const JSON_Value *value);
JSON_Value * json_value_get_parent (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_Object * json_object (const JSON_Value *value);
JSON_Array * json_array (const JSON_Value *value); JSON_Array * json_array (const JSON_Value *value);
const char * json_string (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); double json_number (const JSON_Value *value);
int json_boolean(const JSON_Value *value); int json_boolean(const JSON_Value *value);