201 Commits

Author SHA1 Message Date
8db3853fb7 Revert "Update meta_api.cpp (#883)"
This reverts commit 7cb045c688.
2021-03-12 18:35:55 +01:00
70d1aff519 Revert "Resolve old bot's connection state issues (#917)" (#949)
This reverts commit bee4b47b07.
2021-03-12 18:31:01 +01:00
bee4b47b07 Resolve old bot's connection state issues (#917)
* final bot's fixes

Fixes: #916
Fixes: #883
Fixes: #875

* suggestions

* suggestions

Co-authored-by: shel <2@shelru.ru>
2021-03-09 23:10:59 +01:00
8c6b0f84bb Fix Windows build. 2021-02-10 13:32:02 -08:00
a4e929eedc Possible memory leaks on deattach (#912)
Co-authored-by: shel <2@shelru.ru>
2020-12-06 12:09:57 -08:00
c81f68aac3 Update cvars.inc (#919) 2020-12-06 12:01:52 -08:00
03f4c7dd2c Update checkout-deps.sh (#915) 2020-12-06 11:59:11 -08:00
7cb045c688 Update meta_api.cpp (#883)
Fixes: #875
2020-11-22 18:02:53 -08:00
73f3afa95f push (#911)
Co-authored-by: shel <2@shelru.ru>
2020-11-22 15:43:17 -08:00
2fadf887e6 Return max heap size note (#910)
Co-authored-by: shel <2@shelru.ru>
2020-11-22 15:12:54 -08:00
1027df054a Updated 'checkout-deps' to check for 'pip'/'pip3' prior to installing 'AMBuild' (#897) 2020-07-31 14:33:28 -07:00
2e3c105c7d Pass menu ID in MPROP_PAGE_CALLBACK function (#885)
Co-authored-by: shel <2@shelru.ru>
2020-07-17 11:05:13 +02:00
ff2fc19b08 Update newmenus.cpp (#884)
Fixes: #881

Co-authored-by: shel <2@shelru.ru>
2020-07-17 01:57:29 +02:00
f4fefd0bb4 Fix uninitialized member unexpected results (#896)
Co-authored-by: shel <2@shelru.ru>
2020-07-16 16:40:31 -07:00
b26118006a 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:49:19 +02:00
ed1ab00faf Fix internal player's team id returning -1 in a specific but valid situation (#772)
* Fix internal player's team id returning -1 in a specific but valid situation

* Use a local variable

* Fix spaces
2020-06-03 23:53:26 +02:00
6d6a41b894 Improve AdminSlot plugin (#631)
* Adminslot: Trim spaces

* Adminslot: Use semicolon everywhere

* Adminslot: Use brackets everywhere

* Adminslot: Hook cvars change and make sure max visible players is set right away

* Adminslot: Rename g_sv_visiblemaxplayers

* Adminslot: Move free slot calculation in its own function

* Adminslot: Use create_cvar and define appropriate bounds

* Adminslot: Use get_playersnum_ex with flag for clarity

* Adminslot: Move all the logic inside setVisibleSlots

Looks like the commit should have been split for clarity.

The initial purpose is to avoid code duplication and regroup checks.
The logic is the same with a little improvement to handle situations where a cvar is changed on-the-fly and sv_visiblemaxplayers needs to be reset.

Ultimately, the logic is the following:

 - At player's connection:
 -- Do nothing if amx_reservation == 0 and sv_visiblemaxplayers <= 0. If sv_visiblemaxplayers is set, we reset it directly.
 -- Check if player needs to be kicked. If not, and amx_hideslots == 0, then do nothing.
 -- Otherwise we update sv_visiblemaxplayers

 - Others events:
 -- Do nothing if either amx_reservation == 0 or amx_hideslots == 0, and if sv_visiblemaxplayers <= 0. If sv_visiblemaxplayers is set, we reset it directly.
 -- Otherwise we update sv_visiblemaxplayers

* Adminslot: Rename variables and adjust constantness

* Adminslot: Add a description to the cvars

* Adjust CVAR_HIDESLOTS english sentence

* Add the Deutsch translations
2020-06-03 23:52:47 +02:00
b9b4001bf9 Add menu_item_setaccess native (#826)
* Add set access.

* Update newmenus.inc

* typo

* Update newmenus.inc
2020-05-29 21:40:35 +02:00
1bc342a692 Public vars for plugin data (#714)
* Add public vars for plugin data and small refactoring get_xvar_id native

* Add new command to display info about the plugin and add url to amxx plugins command

* Add optional args to register_plugin native (url, description)

* Add enum of args for register_plugin native

* Creating a variable inside an if statement (C++17)

* Displaying the URL of the plugin if it is present

* Getting an ID only with more than three arguments

* Creating a variable inside an if statement (C++17)

* Fix typo

* Revert "Creating a variable inside an if statement (C++17)"

This reverts commit 835e0bc6c413f11b1bbf964daea87b57f653f5d7.

* Revert "Creating a variable inside an if statement (C++17)"

This reverts commit b2c1e7c77576c02a00c8c3f103457000d3298ceb.

* Revert "Displaying the URL of the plugin if it is present"

This reverts commit 9e31230368449966d16635c696d97c04adadeaa9.

* Binary compatibility for previously compiled plugins

* Displaying the URL of the plugin if it is present

* Quotation marks replaced by square brackets and change arg name to id

* Fix getting url

* The 'atoi' function replaced to 'stoi'

* Add likely/unlikely defines for using built-in function provided by GCC

* Small fixes with auto and inconsistent var name

* Replace stoi to strtol function

* Removed explicit buffer id

* Revert "Add likely/unlikely defines for using built-in function provided by GCC"

This reverts commit 94cee479ed245b98195501466850d01a3f08fd13.

* Add url and description params to get_plugin function
2020-05-29 12:37:40 +02:00
368bde1d07 Yet another Hungarian langugage revise (#816)
Revised by Norbee. @ ebateam.eu

He was just lazy to do a PR :P
2020-05-29 01:13:38 +02:00
51ede1097d 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-05-29 01:10:38 +02:00
a5f2b5539f 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-05-29 01:04:16 +02:00
307e71455a Fix broken DoD Fun module natives (#851)
* Update hardcorded offsets

* Fixed using incorrect parameter for setting string
2020-05-29 00:54:36 +02:00
b60f58ac34 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-05-29 00:51:14 +02:00
6ef40779e7 Add missing is_user_authorized() native (#840)
* Add missing is_user_authorized() native

It is implemented in core, but missing in amxmodx.inc

* Fix typo
2020-03-05 14:52:14 +01:00
18a5f6f5ea Fix MySQL connector link (#844) 2020-03-04 21:10:41 +01:00
d3ef881f31 Fix unreachable code warning in constraint_offset() (#784) 2019-12-20 11:17:08 +01:00
0eba9b3708 Close cmdaccess.ini file if fopen found the file... (#815)
Close file if fopen found the file...
2019-12-20 11:12:46 +01:00
0ccba67006 Fix compilation with GCC 8.2+ (#617)
* GCC 8.2 support

* Add GCC version check

* -Werror=class-memaccess fix in code

* Use assignment for Stats
2019-10-29 21:48:31 +01:00
c86813697a 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:21:09 +01:00
4f6b779bf4 Adjust TextMsg/SayText maximum buffer length from 190 to 187 due to "%s" parameter added in #763 2019-10-23 16:27:26 +02:00
d819df80f9 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:28:40 +02:00
5120deaf74 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:49:30 +02:00
d01aa5762f Fix behavior change about endianness check in maxmind/libmaxminddb#123 (#770) 2019-10-20 23:21:57 +02:00
8930ecf7c5 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:55:05 +02:00
aa06e5ab93 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 15:46:04 +02:00
8309a1e06b Send pre-formatted string in SayText and TextMSg as a parameter instead of as the format string (#763) 2019-10-17 15:42:46 +02:00
7a44e6ec66 Fix GeoIP2 database file extraction (#764) 2019-10-17 15:42:27 +02:00
0bd69445f9 CSPForward::execute: Fix uninitialized retVal (#747) 2019-08-02 09:47:38 +02:00
5a257a7a42 Merge pull request #664 from IgnacioFDM/add-sqdistance
Add square distance functions to xs.inc
2019-06-19 22:37:56 +02:00
136cc23463 Merge pull request #698 from CrXane/master
Albanian Language translation support
2019-06-19 22:36:06 +02:00
024003d6f0 Fix MPROP_SHOWPAGE option not working as expected (#726)
Typo from #473.
2019-06-19 22:26:03 +02:00
abba8f1a7c 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:25:41 +02:00
16c5e4b34b Merge pull request #15 from lspublic/patch-46
Update miscstats.txt
2019-06-11 15:04:04 +02:00
132277bfdc Merge pull request #16 from lspublic/patch-47
Update multilingual.txt
2019-06-11 15:03:56 +02:00
f1332bb4af Merge pull request #17 from lspublic/patch-48
Update nextmap.txt
2019-06-11 15:03:46 +02:00
d659761195 Merge pull request #18 from lspublic/patch-49
Update pausecfg.txt
2019-06-11 15:03:37 +02:00
8a57a94480 Merge pull request #19 from lspublic/patch-50
Update plmenu.txt
2019-06-11 15:03:27 +02:00
0409910e1f Merge pull request #20 from lspublic/patch-51
Update restmenu.txt
2019-06-11 15:03:18 +02:00
c392d358a7 Merge pull request #21 from lspublic/patch-52
Update scrollmsg.txt
2019-06-11 15:03:10 +02:00
a901a127eb Merge pull request #22 from lspublic/patch-53
Update stats_dod.txt
2019-06-11 15:02:46 +02:00
2f90940c3f Merge pull request #23 from lspublic/patch-54
Update statscfg.txt
2019-06-11 15:02:38 +02:00
e66b466745 Merge pull request #24 from lspublic/patch-55
Update statsx.txt
2019-06-11 15:02:29 +02:00
9068f3c95a Merge pull request #25 from lspublic/patch-56
Update telemenu.txt
2019-06-11 15:02:18 +02:00
d2e71dd1f2 Merge pull request #26 from lspublic/patch-57
Update time.txt
2019-06-11 15:02:06 +02:00
58e552ceff Merge pull request #27 from lspublic/patch-58
Update timeleft.txt
2019-06-11 15:01:55 +02:00
8a19774edd Merge pull request #14 from lspublic/patch-45
Update menufront.txt
2019-06-11 15:01:30 +02:00
66876f89cd Merge pull request #13 from lspublic/patch-44
Update mapsmenu.txt
2019-06-11 15:01:17 +02:00
d18cc72510 Merge pull request #12 from lspublic/patch-43
Update mapchooser.txt
2019-06-11 15:00:45 +02:00
179b802c7b Merge pull request #11 from lspublic/patch-42
Update languages.txt
2019-06-11 15:00:15 +02:00
aba5897818 Merge pull request #10 from lspublic/patch-41
Update imessage.txt
2019-06-11 14:59:46 +02:00
ee2d846e0d Merge pull request #9 from lspublic/patch-40
Update common.txt
2019-06-11 14:59:20 +02:00
a6897ec39b Update common.txt 2019-06-11 14:58:19 +02:00
8aabf09067 Merge pull request #8 from lspublic/patch-39
Update cmdmenu.txt
2019-06-11 14:57:23 +02:00
b5fb4611cd Merge pull request #7 from lspublic/patch-38
Update antiflood.txt
2019-06-11 14:57:03 +02:00
f41aeef8b0 Merge pull request #4 from lspublic/patch-35
Update adminhelp.txt
2019-06-11 14:56:25 +02:00
7561426bd4 Merge pull request #5 from lspublic/patch-36
Update adminslots.txt
2019-06-11 14:56:06 +02:00
1bac8319c4 Merge pull request #6 from lspublic/patch-37
Update adminvote.txt
2019-06-11 14:55:36 +02:00
c6eb8a11d8 Merge pull request #3 from lspublic/patch-34
Update admincmd.txt
2019-06-11 14:54:31 +02:00
6aa012f062 Merge pull request #2 from lspublic/patch-33
Update adminchat.txt
2019-06-11 14:52:26 +02:00
887dd5b6d1 Update admincmd.txt 2019-06-11 14:47:44 +02:00
703a6872bc Update admincmd.txt 2019-06-11 14:44:41 +02:00
71eb9fe0d8 Update adminchat.txt 2019-06-11 14:42:04 +02:00
096dae9095 Fix MPROP_SHOWPAGE option not working as expected
Typo from #473.
2019-05-29 11:47:57 +02:00
1eb8a7f8c2 Update timeleft.txt
Some file change
2019-05-23 19:30:14 +02:00
8cbbf71f0c Update time.txt
Some file change
2019-05-23 19:29:24 +02:00
6923c1b209 Update telemenu.txt
Some file change
2019-05-23 19:28:37 +02:00
de93fa0824 Update statsx.txt
Some file change
2019-05-23 19:27:52 +02:00
118f33a83e Update statscfg.txt
Some file change
2019-05-23 19:27:02 +02:00
bc0d83bc92 Update stats_dod.txt
Some file change
2019-05-23 19:26:03 +02:00
bc36bb23df Update scrollmsg.txt
Some file change
2019-05-23 19:24:53 +02:00
00967632d5 Update restmenu.txt
Some file change
2019-05-23 19:24:35 +02:00
74171687f7 Update plmenu.txt
Some file change
2019-05-23 19:22:57 +02:00
88d9145524 Update pausecfg.txt
Some file change
2019-05-23 19:22:06 +02:00
50971fd9d0 Update nextmap.txt
Some file change
2019-05-23 19:21:06 +02:00
45c2e90a3f Update multilingual.txt
Update some file change
2019-05-23 19:20:19 +02:00
a6ccf82419 Update miscstats.txt
Some file change
2019-05-23 19:19:04 +02:00
3c3ac7a36c Update menufront.txt
Some file changes
2019-05-23 19:18:00 +02:00
41abeb3322 Update mapsmenu.txt
Some file changes
2019-05-23 19:17:13 +02:00
1e89e4c685 Update mapchooser.txt
Some file changes
2019-05-23 19:16:17 +02:00
653c5edcf4 Update languages.txt
Some files change in text
2019-05-23 19:15:28 +02:00
302d127f6f Update imessage.txt
Some file changes in text
2019-05-23 19:14:34 +02:00
0eeda72922 Update common.txt
Some file changes in text
2019-05-23 19:12:51 +02:00
cb1941c99a Update cmdmenu.txt
Some file changes in text
2019-05-23 19:11:47 +02:00
51adc75e96 Update antiflood.txt
Some changes in text
2019-05-23 19:10:37 +02:00
8882bd5ca0 Update adminvote.txt
Some changes in text
2019-05-23 19:09:13 +02:00
0928d7a6fe Update adminslots.txt
Some changes in file
2019-05-23 19:07:45 +02:00
e502c61f2c Update adminhelp.txt
Some changes in text
2019-05-23 19:06:18 +02:00
38848ff636 Update admincmd.txt
Some changes in text
2019-05-23 19:05:07 +02:00
59ce7064c7 Update adminchat.txt
Some changes in text
2019-05-23 19:01:09 +02:00
8cee128e50 Added Albanian translation: timeleft.txt 2019-05-16 22:26:59 +04:00
7ddc462135 Added Albanian translation: time.txt 2019-05-16 22:26:05 +04:00
cd76998995 Added Albanian translation: time.txt 2019-05-16 22:25:46 +04:00
48c0ae1711 Added Albanian translation: statsx.txt 2019-05-16 22:24:36 +04:00
85124d3417 Added Albanian translation: statscfg.txt 2019-05-16 22:20:46 +04:00
8b1a83f085 Added Albanian translation: stats_dod.txt 2019-05-16 22:11:15 +04:00
3fb981f6be Added Albanian translation: miscstats.txt 2019-05-16 22:03:59 +04:00
388a68e694 Added Albanian translation: scrollmsg.txt 2019-05-16 21:55:16 +04:00
60e2109b4f Added Albanian translation: restmenu.txt 2019-05-16 21:53:48 +04:00
ca7e289273 Added Albanian translation: plmenu.txt 2019-05-16 21:36:18 +04:00
437ad0f8ec Added Albanian translation: pausecfg.txt 2019-05-16 21:33:25 +04:00
32ff785d85 Added Albanian translation: nextmap.txt 2019-05-16 21:17:47 +04:00
2d607b6d68 Added Albanian translation: multilingual.txt 2019-05-16 21:16:02 +04:00
9c21bcd18b Added Albanian translation: miscstats.txt 2019-05-16 21:13:14 +04:00
dcdd5a1442 Added Albanian translation: menufront.txt 2019-05-16 21:00:55 +04:00
072095445e Added Albanian translation: mapsmenu.txt 2019-05-16 20:56:34 +04:00
486da2f44b Hungarian language update (#719)
Thanks for the help to Norbee. @ ebateam
2019-05-16 15:11:10 +02:00
681acffee9 Bump ReHLDS API version to 3.6 (#721) 2019-05-16 14:55:41 +02:00
dfd835eba5 String changes for missing path exception messages (#718)
Resolves #652
2019-05-14 00:37:49 +02:00
ecbff2e8f1 Added Albanian translation: mapchooser.txt 2019-05-12 14:55:46 +04:00
55f01c9488 Added Albanian translation: imessage.txt 2019-05-12 14:50:43 +04:00
49c219e6a2 Added Albanian translation: common.txt 2019-05-12 14:48:39 +04:00
cccb8c84af Added Albanian translation: cmdmenu.txt 2019-05-12 14:43:46 +04:00
3dc5ec0331 Added Albanian translation: antiflood.txt 2019-05-12 14:42:24 +04:00
12664d9427 Added Albanian translation: adminvote.txt 2019-05-12 14:41:25 +04:00
365a0559b3 Added Albanian translation: adminhelp.txt 2019-05-12 14:33:37 +04:00
62052ee590 Added Albanian language: adminslots.txt 2019-05-12 14:29:29 +04:00
0aa97dee3f Added Albanian language: adminhelp.txt 2019-05-12 14:27:33 +04:00
4c55da4de9 Added Albanian translation: admincmd.txt 2019-05-12 14:19:20 +04:00
0f667692b1 Added Albanian translation: adminchat.txt 2019-05-12 13:22:40 +04:00
6addd9c074 Added Albanian translation: admin.txt 2019-05-12 13:20:57 +04:00
295d09df8b 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-04-30 09:59:15 +02:00
1cc7786a4c Add new public var with mapname and new constant (#687)
* Add new public var with current map name

* Add a constant to define max map's name length

* Reducing the maximum buffer size to store a map's name

* The PLATFORM_MAX_PATH constant replaced to MAX_MAPNAME_LENGTH
2019-04-27 01:01:54 +02:00
f301fbaf08 Accidentally deleted 2019-04-14 12:02:24 +02:00
05cd0af3a5 Delete restmenu.txt 2019-04-14 11:52:49 +02:00
97fc80dd03 Merge branch 'master' into master 2019-04-14 10:12:59 +02:00
d3ca82411a Added Albanian translation 2019-04-14 10:04:22 +02:00
3e91def7f0 Added Albanian translation 2019-04-14 10:03:46 +02:00
96a74ec654 Added Albanian translation 2019-04-14 10:03:09 +02:00
4f3b9e7a60 Added Albanian translation 2019-04-14 10:02:37 +02:00
df819beab5 Added Albanian translation 2019-04-14 10:01:56 +02:00
7ecc62aaef Added Albanian translation 2019-04-14 10:01:19 +02:00
ef570a987a Added Albanian translation 2019-04-14 10:00:20 +02:00
09548bfd2c Added Albanian translation 2019-04-14 09:59:16 +02:00
2e0c240573 Added Albanian translation 2019-04-14 09:47:12 +02:00
dc59d826a3 Added Albanian translation 2019-04-14 09:46:38 +02:00
35788efa07 Added Albanian translation 2019-04-14 09:46:05 +02:00
ac6364bfdc Added Albanian translation 2019-04-14 09:45:39 +02:00
6655fe7c28 Added Albanian translation 2019-04-14 09:45:06 +02:00
bb31835dea Added Albanian translation 2019-04-14 09:44:34 +02:00
bd67978c3a Added Albanian translation 2019-04-14 09:44:05 +02:00
ede7b69b25 Added Albanian translation 2019-04-14 09:43:10 +02:00
7b2ef405a3 Added Albanian translation 2019-04-14 09:42:35 +02:00
8264328235 Added Albanian translation 2019-04-14 09:42:02 +02:00
113c50b1fa Added Albanian translation 2019-04-14 09:41:30 +02:00
340e2b9df2 Added Albanian translation 2019-04-14 09:40:46 +02:00
3486a7d7fc Added Albanian translation 2019-04-14 09:40:18 +02:00
e1d1004cd6 Added Albanian translation 2019-04-14 09:39:46 +02:00
8940de5956 Added Albanian translation 2019-04-14 09:38:58 +02:00
304af5055e Added Albanian translation 2019-04-14 09:38:06 +02:00
7c07ae6099 Added Albanian translation 2019-04-14 09:32:25 +02:00
1c39c85929 Added Albanian translation 2019-04-14 09:29:46 +02:00
5b07b25d62 Added Albanian translation 2019-04-14 09:28:49 +02:00
6bed09db57 Fix TE_DLIGHT documentation (#685)
There's no "brightness" parameter in TE_DLIGHT. Probably will cause server crash if it be passed.
2019-04-07 17:08:47 +02:00
ca69c36c1e Updated Portuguese Brazilian translation in miscstats.txt with latest additions (#674)
Updated Portuguese Brazilian translation in miscstats.txt with latest additions
2019-04-07 17:08:21 +02:00
f623126fe1 Improve documentation in engine_const.inc (#665) 2019-02-11 12:15:45 +01:00
f392c90729 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-02-11 12:13:19 +01:00
fd64327313 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-30 16:04:11 +01:00
38cd5ab1cd 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 15:57:54 +01:00
5947926a09 Add player validation for menu_display (#671)
Invalid player triggered crash because get/set_pdata is unsafe
2019-01-30 15:19:30 +01:00
ea7ffafd88 Add square distance functions to xs.inc 2019-01-26 09:41:45 -03:00
ba083deb1e Removed garbage generated by VS (#658) 2019-01-24 21:13:48 +01:00
f365c943b7 Updated Hungarian translation in miscstats.txt with latest additions (#661) 2019-01-24 21:12:32 +01:00
9417ec188d 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-24 21:09:15 +01:00
af56d964c1 Bump ReHLDS version to 3.5 (#647) 2018-12-18 10:16:33 +01:00
7c7ad3d3c0 Fix again a menu regression (behavior change) due to typos in #471 (#636) 2018-11-02 14:16:57 +01:00
bb84a43a7b Fix a navigation bug in Plugin Cvars menu (#637) 2018-11-02 14:16:36 +01:00
20d917a307 Port bugfix for incorrect heap deallocation on conditional operator (#627)
* Revert 4f8917ec (experimental bugfix for heap in conditional)

* Port bugfix for incorrect heap deallocation on conditional operator (ported from compuphase upstream)

* Fix the upstream bugfix

Fixed the wrong order of heaplist nodes and the incorrect calculation of the max. heap usage.

* Add an additional pass for functions that return array if they are used before definition (inside definition (recursion) is a "before definition" situation too)
2018-11-02 14:15:31 +01:00
77eb33d5f2 Compiler: Fix undefined symbol: pow10 (#615)
* Compiler: Fix undefined symbol: pow10

* Add version check

* Remove deprecated pow10
2018-10-14 17:44:59 +02:00
75cf5f55f9 Make UTF-8 safe others strings natives (#610) 2018-10-14 17:44:15 +02:00
fb615aaef1 Compiler: Increase the maximum number of array dimension (#584)
* Compiler: Increase the maximum number of array dimension to 4

* Compiler: Fix array initialization
2018-10-13 15:05:04 +02:00
7f7d01fb8d 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-12 21:04:14 +02:00
87b6f274a0 CS Miscstats: Fix enemy remaining option displaying the message to the wrong team (#611) 2018-10-11 11:12:06 +02:00
0b5584a334 Fix missing files in PackageScript from previous commit 2018-09-28 18:31:48 +02:00
f82455dd84 Move hamdata.ini to gamedata (#597)
* Replace atoi by strtol in the config parser

* Move hamdata.ini data to gamedata files

* Reference the new files in master file

* Remove all the parsing code and use config manager to get the offsets

* Remove any hamdata.ini references
2018-09-28 16:51:54 +02:00
8717ffe07c Implement menu_create "ml" param to allow menu title/item to be looked up as multilingual key (#593)
* Clean up menu_create() internal code

No code changes. Just modernizing code a little and tidying up things.

* Implement menu_create() "ml" param

* Include newmenu.inc to VS project files

* Adjust documentation

* Put back the quote in the log error message.
2018-09-28 16:46:52 +02:00
b4768a3d1d 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 16:43:41 +02:00
f1f95425b6 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 16:39:03 +02:00
49430082f5 Fixed a typo in get_user_flags description (#605)
* Fixed a typo in get_user_flags description

* Remove
2018-09-28 16:36:19 +02:00
22fd09efea Add constants for get_user_origin() (#604) 2018-09-28 16:22:21 +02:00
e8c8111178 Put back <time.h> from previous commit 2018-09-23 23:14:33 +02:00
08213d8ead GeoIP: Add "reload" command (#588)
* Add reload option

* Adjust logic

* Modernize the code a little
2018-09-23 23:01:49 +02:00
c3225afda1 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-23 22:59:18 +02:00
dfbeec069c Fix invalid handle passed in the SMC/INI parser callbacks (#592) 2018-09-20 23:32:41 +02:00
a54b9f05a7 Compiler: Fix broken UTF8 support (#329) 2018-09-20 20:27:15 +02:00
1f0dc33875 Fix typo in json_object_get_value_at documentation (#587) 2018-09-16 20:03:39 +02:00
8d1f924248 Upload amxmodx-latest-<package>-<os> text file when packaging. (#585) 2018-09-14 20:21:47 +02:00
5694acf482 Compiler: Fix an issue related to passing arrays based on an enumeration to a function (#582) 2018-09-14 15:47:11 +02:00
8f88dc5ac8 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-11 20:19:28 +02:00
b1b053c205 Bump version 2018-09-11 00:48:15 +02:00
c9e9ef905e Promote git revision number to 4th version string component 2018-09-11 00:46:07 +02:00
91 changed files with 13744 additions and 6720 deletions

2
.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -693,6 +693,9 @@
<None Include="..\..\plugins\include\string_stocks.inc">
<Filter>Pawn Includes</Filter>
</None>
<None Include="..\..\plugins\include\newmenus.inc">
<Filter>Pawn Includes</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Object Include="..\Jit\helpers-x86.obj">

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -359,6 +359,7 @@ void show_help()
printf("\t-o<name> set base name of output file\n");
printf("\t-p<name> set name of \"prefix\" file\n");
printf("\t-r[name] write cross reference report to console or to specified file\n");
printf("\t-sui[+/-] show stack usage info\n");
}
#if defined(__linux__) || defined(__APPLE__)

View File

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

View File

@ -628,6 +628,7 @@ int pc_compile(int argc, char *argv[])
/* reset "defined" flag of all functions and global variables */
reduce_referrers(&glbtab);
delete_symbols(&glbtab,0,TRUE,FALSE);
delete_heaplisttable();
#if !defined NO_DEFINE
delete_substtable();
inst_datetime_defines();
@ -755,14 +756,55 @@ cleanup:
#if !defined SC_LIGHT
if (errnum==0 && strlen(errfname)==0) {
int flag_exceed=0;
if (sc_amxlimit > 0 && (long)(hdrsize+code_idx+glb_declared*sizeof(cell)+sc_stksize*sizeof(cell)) >= sc_amxlimit)
flag_exceed=1;
if ((sc_debug & sSYMBOLIC)!=0 || verbosity>=2 || flag_exceed) {
int recursion = 0, flag_exceed = 0;
long stacksize = 0L;
unsigned long maxStackUsage = 0L;
unsigned long dynamicStackSizeLimit = (long)sc_stksize * sizeof(cell);
if (sc_amxlimit > 0) {
long totalsize = hdrsize + code_idx + glb_declared * sizeof(cell) + dynamicStackSizeLimit;
if (totalsize >= sc_amxlimit)
flag_exceed = 1;
} /* if */
/* if */
if(sc_stkusageinfo) {
stacksize = max_stacksize(&glbtab, &recursion);
maxStackUsage = stacksize * sizeof(cell);
if (recursion) {
pc_printf("Note: estimated max. usage: unknown, due to recursion\n");
} /* if */
else if (maxStackUsage >= dynamicStackSizeLimit) {
pc_printf("Note: estimated max. stack usage is %ld cells %ld bytes, limit %ld bytes\n", stacksize, maxStackUsage, dynamicStackSizeLimit);
}
} /* if */
/* if */
/* Note: Seems like `stacksize + 32 >= (long)sc_stksize` condition in original compiler invented to show stack usage warning if it's exceeded, that's why it's defined */
if ((sc_debug & sSYMBOLIC)!=0 || verbosity>=2 || /* stacksize + 32 >= (long)sc_stksize || */ flag_exceed) {
pc_printf("Header size: %8ld bytes\n", (long)hdrsize);
pc_printf("Code size: %8ld bytes\n", (long)code_idx);
pc_printf("Data size: %8ld bytes\n", (long)glb_declared*sizeof(cell));
pc_printf("Stack/heap size: %8ld bytes\n", (long)sc_stksize*sizeof(cell));
pc_printf("Stack/heap size: %8ld bytes", dynamicStackSizeLimit);
if(sc_stkusageinfo) {
pc_printf(" | estimated max. usage");
/* if */
if (recursion) {
pc_printf(": unknown, due to recursion\n");
}
/* else if ((pc_memflags & suSLEEP_INSTR) != 0)
pc_printf(": unknown, due to the \"sleep\" instruction\n");*/
else {
pc_printf("=%ld cells (%ld bytes)\n", stacksize, maxStackUsage);
} /* if */
}
else {
pc_printf("\n");
} /* if */
pc_printf("Total requirements:%8ld bytes\n", (long)hdrsize+(long)code_idx+(long)glb_declared*sizeof(cell)+(long)sc_stksize*sizeof(cell));
} /* if */
if (flag_exceed)
@ -805,6 +847,7 @@ cleanup:
free(sc_documentation);
#endif
delete_autolisttable();
delete_heaplisttable();
if (errnum!=0) {
if (strlen(errfname)==0)
pc_printf("\n%d Error%s.\n",errnum,(errnum>1) ? "s" : "");
@ -960,6 +1003,8 @@ static void initglobals(void)
sc_documentation=NULL;
sc_makereport=FALSE; /* do not generate a cross-reference report */
#endif
sc_stkusageinfo=FALSE;/* stack usage info disabled by default */
}
/* set_extension
@ -1022,6 +1067,8 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
const char *ptr;
int arg,i,isoption;
static const char stackusageinfo[4] = { 's', 'u', 'i', '\0' };
for (arg=1; arg<argc; arg++) {
#if DIRSEP_CHAR=='/'
isoption= argv[arg][0]=='-';
@ -1150,9 +1197,18 @@ static void parseoptions(int argc,char **argv,char *oname,char *ename,char *pnam
else
about();
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));
break;
}
case 't':
i=atoi(option_value(ptr));
if (i>0)
@ -1432,6 +1488,7 @@ static void about(void)
#endif
pc_printf(" -S<num> stack/heap size in cells (default=%d)\n",(int)sc_stksize);
pc_printf(" -s<num> skip lines from the input file\n");
pc_printf(" -sui[+/-] show stack usage info\n");
pc_printf(" -t<num> TAB indent size (in character positions, default=%d)\n",sc_tabsize);
pc_printf(" -v<num> verbosity level; 0=quiet, 1=normal, 2=verbose (default=%d)\n",verbosity);
pc_printf(" -w<num> disable a specific warning by its number\n");
@ -2170,26 +2227,24 @@ static cell calc_arraysize(int dim[],int numdim,int cur)
return dim[cur]+(dim[cur]*calc_arraysize(dim,numdim,cur+1));
}
static cell adjust_indirectiontables(int dim[],int numdim,int cur,cell increment,
int startlit,constvalue *lastdim,int *skipdim)
static void adjust_indirectiontables(int dim[],int numdim,int startlit,
constvalue *lastdim,int *skipdim)
{
static int base;
int d;
int cur;
int i,d;
cell accum;
cell size;
assert(cur>=0 && cur<numdim);
assert(increment>=0);
assert(cur>0 && startlit==-1 || startlit>=0 && startlit<=litidx);
if (cur==0)
assert(startlit==-1 || startlit>=0 && startlit<=litidx);
base=startlit;
if (cur==numdim-1)
return 0;
size=1;
for (cur=0; cur<numdim-1; cur++) {
/* 2 or more dimensions left, fill in an indirection vector */
assert(dim[cur]>0);
if (dim[cur+1]>0) {
for (i=0; i<size; i++)
for (d=0; d<dim[cur]; d++)
litq[base++]=(dim[cur]+d*(dim[cur+1]-1)+increment) * sizeof(cell);
accum=dim[cur]*(dim[cur+1]-1);
litq[base++]=(size*dim[cur]+(dim[cur+1]-1)*(dim[cur]*i+d)) * sizeof(cell);
} else {
/* final dimension is variable length */
constvalue *ld;
@ -2197,6 +2252,7 @@ static int base;
assert(lastdim!=NULL);
assert(skipdim!=NULL);
accum=0;
for (i=0; i<size; i++) {
/* skip the final dimension sizes for all earlier major dimensions */
for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) {
assert(ld!=NULL);
@ -2204,19 +2260,15 @@ static int base;
for (d=0; d<dim[cur]; d++) {
assert(ld!=NULL);
assert(strtol(ld->name,NULL,16)==d);
litq[base++]=(dim[cur]+accum+increment) * sizeof(cell);
litq[base++]=(size*dim[cur]+accum) * sizeof(cell);
accum+=ld->value-1;
*skipdim+=1;
ld=ld->next;
} /* 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;
size*=dim[cur];
} /* for */
}
/* initials
@ -2274,7 +2326,7 @@ static void initials2(int ident,int tag,cell *size,int dim[],int numdim,
for (tablesize=calc_arraysize(dim,numdim-1,0); tablesize>0; tablesize--)
litadd(0);
if (dim[numdim-1]!=0) /* error 9 has already been given */
adjust_indirectiontables(dim,numdim,0,0,curlit,NULL,NULL);
adjust_indirectiontables(dim,numdim,curlit,NULL,NULL);
} /* if */
return;
} /* if */
@ -2340,7 +2392,7 @@ static void initials2(int ident,int tag,cell *size,int dim[],int numdim,
* of the array and we can properly adjust the indirection vectors
*/
if (err==0)
adjust_indirectiontables(dim,numdim,0,0,curlit,&lastdim,&skipdim);
adjust_indirectiontables(dim,numdim,curlit,&lastdim,&skipdim);
delete_consttable(&lastdim); /* clear list of minor dimension sizes */
} /* if */
} /* if */
@ -5455,6 +5507,16 @@ static void doreturn(void)
/* nothing */;
sub=addvariable(curfunc->name,(argcount+3)*sizeof(cell),iREFARRAY,sGLOBAL,curfunc->tag,dim,numdim,idxtag);
sub->parent=curfunc;
/* Function that returns array can be used before it is defined, so at
* the call point (if it is before definition) we may not know if this
* function returns array and what is its size (for example inside the
* conditional operator), so we don't know how many cells on the heap
* we need. Calculating heap consumption is required for the fix of
* incorrect heap deallocation on conditional operator. That's why we
* need an additional pass.
*/
if ((curfunc->usage & uREAD)!=0)
sc_reparse=TRUE;
} /* if */
/* get the hidden parameter, copy the array (the array is on the heap;
* it stays on the heap for the moment, and it is removed -usually- at
@ -5727,3 +5789,137 @@ static int *readwhile(void)
return (wqptr-wqSIZE);
} /* if */
}
#if !defined SC_LIGHT
static long max_stacksize_recurse(symbol** sourcesym, symbol* sym, symbol** rsourcesym, long basesize, int* pubfuncparams, int* recursion)
{
long size, maxsize;
int i, stkpos;
assert(sourcesym != NULL);
assert(sym != NULL);
assert(sym->ident == iFUNCTN);
assert((sym->usage & uNATIVE) == 0);
assert(recursion != NULL);
maxsize = sym->x.stacksize;
for (i = 0; i < sym->numrefers; i++) {
if (sym->refer[i] != NULL) {
assert(sym->refer[i]->ident == iFUNCTN);
assert((sym->refer[i]->usage & uNATIVE) == 0); /* a native function cannot refer to a user-function */
*(rsourcesym) = sym;
*(rsourcesym + 1) = NULL;
for (stkpos = 0; sourcesym[stkpos] != NULL; stkpos++) {
if (sym->refer[i] == sourcesym[stkpos]) { /* recursion detection */
*recursion = 1;
goto break_recursion; /* recursion was detected, quit loop */
} /* if */
} /* for */
/* add this symbol to the stack */
sourcesym[stkpos] = sym;
sourcesym[stkpos + 1] = NULL;
/* check size of callee */
size = max_stacksize_recurse(sourcesym, sym->refer[i], rsourcesym + 1, sym->x.stacksize, pubfuncparams, recursion);
if (maxsize < size)
maxsize = size;
/* remove this symbol from the stack */
sourcesym[stkpos] = NULL;
} /* if */
} /* for */
break_recursion:
if ((sym->usage & uPUBLIC) != 0) {
/* Find out how many parameters a public function has, then see if this
* is bigger than some maximum
*/
arginfo* arg = sym->dim.arglist;
int count = 0;
assert(arg != 0);
while (arg->ident != 0) {
count++;
arg++;
} /* while */
assert(pubfuncparams != 0);
if (count > * pubfuncparams)
*pubfuncparams = count;
} /* if */
return maxsize + basesize;
}
static long max_stacksize(symbol* root, int* recursion)
{
/* Loop over all non-native functions. For each function, loop
* over all of its referrers, accumulating the stack requirements.
* Detect (indirect) recursion with a "mark-and-sweep" algorithm.
* I (mis-)use the "compound" field of the symbol structure for
* the marker, as this field is unused for functions.
*
* Note that the stack is shared with the heap. A host application
* may "eat" cells from the heap as well, through amx_Allot(). The
* stack requirements are thus only an estimate.
*/
long size, maxsize;
int maxparams, numfunctions;
symbol* sym;
symbol** symstack, ** rsymstack;
assert(root != NULL);
assert(recursion != NULL);
/* count number of functions (for allocating the stack for recursion detection) */
numfunctions = 0;
for (sym = root->next; sym != NULL; sym = sym->next) {
if (sym->ident == iFUNCTN) {
assert(sym->compound == 0);
if ((sym->usage & uNATIVE) == 0)
numfunctions++;
} /* if */
} /* if */
/* allocate function symbol stack */
symstack = (symbol**)malloc((numfunctions + 1) * sizeof(symbol*));
rsymstack = (symbol**)malloc((numfunctions + 1) * sizeof(symbol*));
if (symstack == NULL || rsymstack == NULL)
error(103); /* insufficient memory (fatal error) */
memset(symstack, 0, (numfunctions + 1) * sizeof(symbol*));
memset(rsymstack, 0, (numfunctions + 1) * sizeof(symbol*));
maxsize = 0;
maxparams = 0;
*recursion = 0; /* assume no recursion */
for (sym = root->next; sym != NULL; sym = sym->next) {
int recursion_detected;
/* drop out if this is not a user-implemented function */
if (sym->ident != iFUNCTN || (sym->usage & uNATIVE) != 0)
continue;
/* accumulate stack size for this symbol */
symstack[0] = sym;
assert(symstack[1] == NULL);
recursion_detected = 0;
size = max_stacksize_recurse(symstack, sym, rsymstack, 0L, &maxparams, &recursion_detected);
if (recursion_detected) {
if (rsymstack[1] == NULL) {
pc_printf("recursion detected: function %s directly calls itself\n", sym->name);
}
else {
int i;
pc_printf("recursion detected: function %s indirectly calls itself:\n", sym->name);
pc_printf("%s ", sym->name);
for (i = 1; rsymstack[i] != NULL; i++) {
pc_printf("<- %s ", rsymstack[i]->name);
}
pc_printf("<- %s\n", sym->name);
}
*recursion = recursion_detected;
}
assert(size >= 0);
if (maxsize < size)
maxsize = size;
} /* for */
free((void*)symstack);
free((void*)rsymstack);
maxsize++; /* +1 because a zero cell is always pushed on top
* of the stack to catch stack overwrites */
return maxsize + (maxparams + 1);/* +1 because # of parameters is always pushed on entry */
}
#endif

View File

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

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

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -4105,4 +4105,67 @@
"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

@ -0,0 +1,938 @@
/**
* 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

@ -0,0 +1,874 @@
/**
* 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

@ -0,0 +1,902 @@
/**
* 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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,878 @@
/**
* 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

@ -0,0 +1,746 @@
/**
* 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,7 +110,6 @@ Section "MainSection" SEC01
File "installer\files\base\addons\amxmodx\configs\core.ini"
File "installer\files\base\addons\amxmodx\configs\custommenuitems.cfg"
File "installer\files\base\addons\amxmodx\configs\cvars.ini"
File "installer\files\base\addons\amxmodx\configs\hamdata.ini"
File "installer\files\base\addons\amxmodx\configs\maps.ini"
File "installer\files\base\addons\amxmodx\configs\modules.ini"
File "installer\files\base\addons\amxmodx\configs\plugins.ini"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -29,6 +29,11 @@
*/
#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.
*
@ -44,6 +49,11 @@
*/
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
*/
@ -341,7 +351,6 @@ enum
kRenderFxExplode, /* Scale up really big! */
kRenderFxGlowShell, /* Glowing Shell */
kRenderFxClampMinScale, /* Keep this sprite from getting very small (SPRITES only!) */
kRenderFxLightMultiplier, /* CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier */
};
/**

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -627,6 +627,37 @@ stock Float:xs_vec_distance_2d(const Float:vec1[], const Float:vec2[])
(vec1[1]-vec2[1]) * (vec1[1]-vec2[1]));
}
/**
* Computes the square of the distance between two vectors (points).
* This is faster than the distance.
*
* @param vec1 First vector.
* @param vec2 Second vector.
*
* @return The square of the distance between two vectors.
*/
stock Float:xs_vec_sqdistance(const Float:vec1[], const Float:vec2[])
{
return (vec1[0]-vec2[0]) * (vec1[0]-vec2[0]) +
(vec1[1]-vec2[1]) * (vec1[1]-vec2[1]) +
(vec1[2]-vec2[2]) * (vec1[2]-vec2[2]);
}
/**
* Computes the square of the distance between two 2D vectors (points).
* This is faster than the distance.
*
* @param vec1 First vector.
* @param vec2 Second vector.
*
* @return The square of the distance between two vectors.
*/
stock Float:xs_vec_sqdistance_2d(const Float:vec1[], const Float:vec2[])
{
return (vec1[0]-vec2[0]) * (vec1[0]-vec2[0]) +
(vec1[1]-vec2[1]) * (vec1[1]-vec2[1]);
}
/**
* Normalizes a vector. Normalized vector is a vector with the length of 1 unit,
* but with the same direction as the original vector.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1 +1 @@
1.9.0
1.10.0

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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