57 Commits

Author SHA1 Message Date
4d38b9c73b https://github.com/alliedmodders/amxmodx/pull/567 2022-07-11 13:24:13 +00:00
03cdb55266 https://github.com/alliedmodders/amxmodx/pull/575 2022-07-11 13:22:45 +00:00
950e63d62f https://github.com/alliedmodders/amxmodx/pull/576 2022-07-11 13:20:30 +00:00
0a0a8bc13d https://github.com/alliedmodders/amxmodx/pull/579 2022-07-11 13:18:27 +00:00
63c18bba6c https://github.com/alliedmodders/amxmodx/pull/993 2022-07-11 13:10:17 +00:00
338e8307f8 https://github.com/alliedmodders/amxmodx/pull/1049 2022-07-11 13:01:02 +00:00
475b1cdc29 fix gcc 12.1 compilation 2022-07-10 15:25:45 +00:00
e5c519cf07 update sqlite to version 3.39.0 2022-07-10 15:24:46 +00:00
df6b589ba1 nextmap.sma - Fix mp_chattime getting increased on quick map change (#1044) 2022-06-30 23:16:05 -07:00
fde732f66d Update trie_natives.cpp (#1052)
"Invalid map handle provided (%d)" error is very unclear when it appears in complex code.
2022-06-16 18:47:08 -07:00
49a8b959b3 Update newmenus.inc (#1043) 2022-04-05 00:32:55 -07:00
ec82e3f34c now amxmodx can use std (#1026) 2021-12-06 10:38:46 -08:00
8ee3da24cb Added new debug feature: Performance Monitor. (#1019)
* Performance Monitor.

Search big performance issues for any plugin that in debug mode. No server slow down.
Output is plugin and function name, and server execution lag in ms. Output target: current amxlog file.

* Adding cvar to enable perflog. Force for all plugin if amx_debug is 2.

* Update cvar name

* Use another clock from chrono

* Fix debug check

* Skip internal amxx exec

* Move includes

* Fix debug check in amx_ExecPerf

* Tried to compile without min/max undefined
2021-12-05 18:38:49 -08:00
6e8554d1d2 Fix ConfigsExecutedForward (my mistake) (#1024)
* Fix one big issue what broken all plugins!

If found any config from servercmd, m_ConfigsExecutedForward not called !!!!!!!
If m_ConfigsExecutedForward  not called, this is broke all plugins where used m_ConfigsExecutedForward (example restmenu)

Revert "Fix one big issue what broken all plugins!"

This reverts commit 6ce36f22e1c278f0831ebbddbc1dbbceb91dacb9.

* Fix m_ConfigsExecutedForward after my missprint from previous pr

Fix my missprint from previous pull request 275be8b0a8
2021-12-04 12:04:08 -08:00
275be8b0a8 Fix one big issue what broken all plugins! (#1022)
If found any config from servercmd, m_ConfigsExecutedForward not called !!!!!!!
If m_ConfigsExecutedForward  not called, this is broke all plugins where used m_ConfigsExecutedForward (example restmenu)
2021-12-03 15:07:59 -08:00
f8ac58c839 Fix some misprints and mistakes in code, part 2 (#1021)
* Fix compiler warnings about broken syntax

Revert "Fix compiler warnings about broken syntax"

This reverts commit cd0649806feaab064e93a0fbcd1f4488747f9b79.

Unbreak code

* Unbreak code

* Stop breaking code, please

* Small real unused check

* Fix "breaked" code and fix MAX_WEAPONS misprints

* Compiler break in debug mode if passing upper case strings
2021-12-02 21:24:15 -08:00
e8909c1583 Fixed value check in json_object_set_value (#1015)
Regression from #983
2021-12-02 19:32:04 -08:00
3cda059669 Fix some errors (#1020)
Fix some critical errors
2021-12-02 13:47:57 -08:00
5dcda02b65 [Build] Implement CI for MacOS via appveyor (#1013) 2021-10-24 17:22:56 -07:00
e6d9d9b71c Update stats.sma (#1001)
Triggered the "Invalid weapon id" at another location in the source code, so patched all cases where the argument could be 0.
2021-10-07 17:12:37 -07:00
2563bf6c26 Updated get_user_flags documentation (#1007) 2021-10-07 17:12:04 -07:00
c61735130d [Build] Fix latest MSVC and CLang compiler errors (#1008)
* Explicit cast specification

* Explicit cast specification

* Suppress -Wno-tautological-compare in Clang 10 and above

https://reviews.llvm.org/rG8b0d14a8f0cc085afa2a9c86c237da81c74517fc

* Explicit cast specification

* Add HAVE_STDINT_H compiler flag

* Explicit casting mechanism type specification

* typo
2021-10-07 17:11:49 -07:00
cac80584a0 Setup Github Actions (#1003) 2021-10-05 23:39:38 -07:00
3eefe5562e [Build] Migrate to Python3 (#1000)
* Configure Travis build env for Py3

Using default available version of 3.6.3 in `xenial` dist

* Migrate to py3

* Fix documentation
2021-09-28 11:41:04 -07:00
c317dc55c7 Update stats.sma (#997)
Fix runtime error when a player "killed self with teledeath". Happens when a map hasn't enough spawn points.
2021-09-28 09:56:21 -07:00
8fefd48af2 Create FUNDING.yml and add a ❤️Sponser button (#994) 2021-09-23 10:12:43 -07:00
f37f9d1c66 Fix gcc 9.2 compilation. (#835)
Fix gcc 9.2 compilation.
2021-09-22 17:01:35 -07:00
8413946ace Minor German Language Update (#926)
* Update admincmd.txt

* Update statsx.txt

* Update miscstats.txt

* Update menufront.txt

* Update menufront.txt

* Update admincmd.txt

* Update adminvote.txt

* Update restmenu.txt

* Update mapsmenu.txt

* Update nextmap.txt

* Update stats_dod.txt

* Update statscfg.txt

* Update stats_dod.txt

* Update adminvote.txt
2021-09-17 13:22:30 +02:00
be9ccc42eb European Portuguese Language translation fixes (#902)
* European Portuguese translation fix: admin.txt

* European Portuguese translation fix: admincmd.txt

* Added European Portuguese translation: adminslots.txt

Added new translations

* European Portuguese translation fix: common.txt

* European Portuguese translation fix: menufront.txt

* European Portuguese translation fix: miscstats.txt

* European Portuguese translation fix: pausecfg.txt

* European Portuguese translation fix: restmenu.txt

* European Portuguese translation fix: statscfg.txt
2021-09-17 13:12:46 +02:00
fb7ab6d08d Add missing kRenderFx constant (#928)
* Add missing kRenderFx constant

* Change constant name to match SDK
2021-09-17 13:11:17 +02:00
01e60834fa Use precache_generic() for sounds that are played client-side (#934) 2021-09-17 13:10:46 +02:00
3289b3c63c Update parson and fix json_object_set_value (#983)
* Remove parson folder

* add submodule parson

* FIX amxx_json_object_set_value generate a crash if invalid value is passed

* restore parson folder status
2021-09-17 13:06:54 +02:00
e17d37abe3 [FEATURE REQUEST] set_hudmessage add missing parameters (#992)
Same as https://github.com/alliedmodders/amxmodx/pull/981

Co-Authored-By: Franco Romaniello <romax.cs@gmail.com>

Co-authored-by: Franco Romaniello <romax.cs@gmail.com>
2021-09-17 13:05:28 +02:00
51c3f1b195 Fix typo in message_const.inc TE_FIZZ comment (#990) 2021-09-17 13:03:37 +02:00
2c8be75057 [TFCX] Fix Medic infection Crash on Linux (#991)
* [TFCX] Fix Medic infection Crash on Linux

Issue: #988

* [TFCX] Removed redundant code

- Added `_DEBUG_TFCX` preprocessor directive
- Deleted redundant code (which fetches pdata)
2021-09-17 12:59:54 +02:00
10db2e5c85 Revert "Update CMisc.h (#984)" (#986)
Turned out both test servers still had an old "tfc_i386.so" file which took precedence over the newer "tfc.so" library, so both servers were misconfigured and that's why the offsets didn't work.
2021-09-02 11:51:50 -07:00
05f86f05c0 Update CMisc.h (#984)
LINUXOFFSET is back at 3 since HLDS Linux build 8308 (dated July 24, 2019).
2021-08-26 22:28:01 -07:00
36d5aa97b1 Add missing set_task_* callback info (#952) 2021-08-07 17:31:18 +02:00
b8c490b5e6 Fix newmenus.inc documentation (#942) 2021-08-07 17:30:07 +02:00
301701b1da Fix typo in admincmd.txt (#951)
slaped => slapped

Let's just ignore the fact that the key is misspelled too.
2021-08-07 17:29:11 +02:00
5b1b844184 Fix incorrect uses of feof() (#957)
Using feof() as the while loop condition for detecting the end of the file is incorrect.
2021-08-07 17:28:35 +02:00
6c9c37eb45 Fixed Romanian translation, and added diacritics (#974) 2021-08-07 17:20:50 +02:00
d88b7e3c98 Change default chat time to 0.0 (#977) 2021-08-07 17:19:38 +02:00
6b9d82fa60 Add TIME_ELEMENT_* Romanian language keys in time.txt (#971) 2021-07-26 10:45:55 +02:00
08494d0d66 macOS build fix. 2021-07-11 22:14:16 -07:00
97b03ea567 Another macOS build fix. 2021-07-11 22:10:02 -07:00
344fb3d410 Fix mac build. 2021-07-11 22:08:37 -07:00
37cbccef6a Quell warning on macOS. 2021-07-11 22:08:36 -07:00
7fb6440ce9 Update minimum macOS to 10.7. 2021-07-11 20:55:09 -07:00
1a1b16614a Switch to libc++ on mac. 2021-07-11 20:51:19 -07:00
af32a9790b Switch to Python3 for bootstrapping. 2021-07-11 17:30:38 -07:00
2e5e3ce060 Add month and year support to get_time_length() (#969)
* Add RU

* Add EN

* Add DE

* Add SR

* Add BP

* Add HU

* Add SECONDS_IN_MONTH & timeunit_months

* Add months for API description

* Add SECONDS_IN_YEAR & timeunit_years

* fix typo

* Add FR
2021-07-01 10:51:24 +02:00
c58daeafca Fix stock "SQL_QueryAndIgnore" documentation (#965) 2021-06-19 10:38:25 +02:00
7fef58c374 Fix for loop index out of bounds error (#966)
Fixes an index out of bounds error when refreshMenus() and subsequently findAdminsWithMenu() is called when there is 32 players in the server. Indexing the playersList array in the for loop condition causes it to try to index with a value of 32 on the very last condition check which is not valid for this array.
2021-06-19 10:36:56 +02:00
3c1856f7af Add ignore for amxx binaries (#960) 2021-05-06 20:40:48 -07:00
9fbf91ded0 Fixed a typo in open_dir native (#955)
dir[] parameter is not const, but it never changes.
2021-03-25 10:04:00 -07:00
3d517d69e2 Revert "Update meta_api.cpp (#883)" (#950)
This reverts commit 7cb045c688.
2021-03-12 18:36:40 +01:00
128 changed files with 65110 additions and 33009 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@ -0,0 +1,12 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: https://www.sourcemod.net/donate.php

137
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,137 @@
name: Continuous Integration
on:
workflow_dispatch:
push:
branches:
- master
- 1.9-dev
pull_request:
branches:
- master
- 1.9-dev
jobs:
test:
strategy:
matrix:
include:
- os: ubuntu-latest
os_short: linux
compiler_cc: gcc
compiler_cxx: g++
- os: ubuntu-latest
os_short: linux
compiler_cc: clang
compiler_cxx: clang++
- os: ubuntu-18.04
os_short: linux
compiler_cc: clang-3.9
compiler_cxx: clang++-3.9
- os: ubuntu-18.04
os_short: linux
compiler_cc: gcc-6
compiler_cxx: g++-6
compiler_install: 'g++6 g++-6-multilib'
- os: windows-latest
os_short: windows
compiler_cc: msvc
- os: windows-2016
os_short: windows
compiler_cc: msvc++14.16-vs2017-cl
# MacOS 32 Bins seem not supported
# - os: macos-latest
# os_short: mac
# compiler_cc: clang
# compiler_cxx: clang++
fail-fast: false
runs-on: ${{ matrix.os }}
name: ${{ matrix.os_short }}-${{ matrix.os }}-${{ matrix.compiler_cc }}
env:
DEPENDENCIES_FOLDER: dependencies
DEPENDENCIES_ROOT: ${{ github.workspace }}/dependencies
DEPENDENCIES_ROOT_WIN: ${{ github.workspace }}\dependencies
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
path: amxmodx
# Setup Python for AMBuild
- uses: actions/setup-python@v2
name: Setup Python 3.8
with:
python-version: 3.8
- name: Install Python dependencies
run: |
python3 -m pip install --upgrade pip setuptools wheel
python3 --version
- name: Install AMXModX dependencies (Linux)
if: startsWith(runner.os, 'Linux') || startsWith(runner.os, 'macOS')
shell: bash
run: |
mkdir -p ${{ env.DEPENDENCIES_FOLDER }}
cd ${{ env.DEPENDENCIES_FOLDER }}
# Satisfy checkout-deps requirement for a "amxmodx" folder.
mkdir -p amxmodx
../amxmodx/support/checkout-deps.sh
- name: Install AMXModX dependencies (Windows)
if: startsWith(runner.os, 'Windows')
shell: cmd
run: |
mkdir %DEPENDENCIES_ROOT_WIN%\nasm
curl -L -o "%DEPENDENCIES_ROOT_WIN%\nasm\nasm.zip" https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip
chdir %DEPENDENCIES_ROOT_WIN%\nasm
7z x nasm.zip
chdir %DEPENDENCIES_ROOT_WIN%
git clone https://github.com/alliedmodders/ambuild
git clone https://github.com/alliedmodders/metamod-hl1 metamod-am
git clone https://github.com/alliedmodders/hlsdk
curl -L -o "mysql-connector-c-6.1.1-win32.zip" https://downloads.mysql.com/archives/get/p/19/file/mysql-connector-c-6.1.1-win32.zip
7z x mysql-connector-c-6.1.1-win32.zip -o"mysql"
cd mysql
dir
ren mysql-connector-c-6.1.1-win32 mysql-5.5
move /Y mysql-5.5 ..\
cd ..\ambuild
python3 setup.py install
- name: Install Linux dependencies
if: startsWith(runner.os, 'Linux')
run: |
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
gcc-multilib g++-multilib libstdc++6 lib32stdc++6 \
libc6-dev libc6-dev-i386 linux-libc-dev \
linux-libc-dev:i386 lib32z1-dev nasm ${{ matrix.compiler_cc }} ${{ matrix.compiler_install }}
- name: Select compiler
if: startsWith(runner.os, 'Linux')
run: |
echo "CC=${{ matrix.compiler_cc }}" >> $GITHUB_ENV
echo "CXX=${{ matrix.compiler_cxx }}" >> $GITHUB_ENV
${{ matrix.compiler_cc }} --version
${{ matrix.compiler_cxx }} --version
- uses: ilammy/setup-nasm@v1
- name: Build Linux/macOS
if: startsWith(runner.os, 'Linux') || startsWith(runner.os, 'macOS')
working-directory: amxmodx
run: |
mkdir build
cd build
python3 ../configure.py --enable-optimize --metamod=${{ env.DEPENDENCIES_ROOT }}/metamod-am --hlsdk=${{ env.DEPENDENCIES_ROOT }}/hlsdk --mysql=${{ env.DEPENDENCIES_ROOT }}/mysql-5.5
ambuild
- uses: ilammy/msvc-dev-cmd@v1
with:
arch: x86
- name: Build Windows
if: startsWith(runner.os, 'Windows')
working-directory: amxmodx
shell: cmd
run: |
cl.exe
mkdir build
cd build
python3 ../configure.py --enable-optimize --metamod=${{ env.DEPENDENCIES_ROOT_WIN }}\metamod-am --hlsdk=${{ env.DEPENDENCIES_ROOT_WIN }}\hlsdk --mysql=${{ env.DEPENDENCIES_ROOT_WIN }}\mysql-5.5
ambuild

2
.gitignore vendored
View File

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

View File

@ -16,6 +16,9 @@ language: cpp
sudo: false
compiler:
- clang
install:
- pyenv install 3.6.3
- pyenv global 3.6.3
before_script:
- CHECKOUT_DIR=$PWD && cd ..
- chmod a+x $CHECKOUT_DIR/support/checkout-deps.sh
@ -23,5 +26,5 @@ before_script:
script:
- mkdir build && cd build
- PATH="~/.local/bin:$PATH"
- CC=clang-3.7 CXX=clang-3.7 python ../configure.py --enable-optimize
- CC=clang-3.7 CXX=clang-3.7 python3 ../configure.py --enable-optimize
- ambuild

View File

@ -225,8 +225,19 @@ class AMXXConfig(object):
cxx.cxxflags += ['-Wno-delete-non-virtual-dtor']
if have_gcc and cxx.version >= '4.8':
cxx.cflags += ['-Wno-unused-result', '-Wno-error=sign-compare']
if have_gcc and cxx.version >= '8.0':
cxx.cflags += ['-Wno-stringop-truncation']
if have_gcc and cxx.version >= '9.0':
cxx.cflags += ['-Wno-address-of-packed-member']
if have_clang:
cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch']
if cxx.version >= '10.0':
cxx.cxxflags += ['-Wno-tautological-compare']
if cxx.version >= 'apple-clang-10.0':
cxx.cxxflags += [
'-Wno-inconsistent-missing-override',
'-Wno-varargs',
]
if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4':
cxx.cxxflags += ['-Wno-deprecated-register']
else:
@ -317,15 +328,18 @@ class AMXXConfig(object):
def configure_mac(self, cxx):
cxx.defines += ['OSX', '_OSX', 'POSIX']
cxx.cflags += ['-mmacosx-version-min=10.5']
cxx.cflags += [
'-mmacosx-version-min=10.7',
'-Wno-address-of-packed-member',
]
cxx.linkflags += [
'-mmacosx-version-min=10.5',
'-mmacosx-version-min=10.7',
'-arch', 'i386',
'-lstdc++',
'-stdlib=libstdc++',
'-stdlib=libc++',
'-framework', 'CoreServices',
]
cxx.cxxflags += ['-stdlib=libstdc++']
cxx.cxxflags += ['-stdlib=libc++']
def configure_windows(self, cxx):
cxx.defines += ['WIN32', '_WINDOWS']

View File

@ -27,6 +27,10 @@ elif builder.target_platform == 'windows':
'/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
'/SECTION:.data,RW',
]
elif builder.target_platform == 'linux':
binary.compiler.postlink += [
binary.Dep(AMXX.stdcxx_path),
]
binary.compiler.linkflags += [AMXX.zlib.binary, AMXX.hashing.binary, AMXX.utf8rewind.binary]

View File

@ -122,8 +122,8 @@ cell CForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
#if defined BINLOG_ENABLED
g_BinLog.WriteOp(BinLog_CallPubFunc, iter->pPlugin->getId(), iter->func);
#endif
int err = amx_Exec(amx, &retVal, iter->func);
int err = amx_ExecPerf(amx, &retVal, iter->func);
// log runtime error, if any
if (err != AMX_ERR_NONE)
{
@ -327,8 +327,7 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
#if defined BINLOG_ENABLED
g_BinLog.WriteOp(BinLog_CallPubFunc, pPlugin->getId(), m_Func);
#endif
int err = amx_Exec(m_Amx, &retVal, m_Func);
int err = amx_ExecPerf(m_Amx, &retVal, m_Func);
if (err != AMX_ERR_NONE)
{
//Did something else set an error?

View File

@ -83,18 +83,8 @@ public:
inline bool IsBot()
{
if ((pEdict->v.flags & FL_FAKECLIENT) == FL_FAKECLIENT)
{
return true;
}
const char *auth = GETPLAYERAUTHID(pEdict);
if (auth && (strcmp(auth, "BOT") == 0))
{
return true;
}
return false;
const char *auth = GETPLAYERAUTHID(pEdict);
return auth && !strcmp(auth, "BOT");
}
inline bool IsAlive()

View File

@ -296,16 +296,19 @@ void CoreConfig::OnMapConfigTimer()
return;
}
if (m_PendingForwardPush)
if (m_legacyMapConfigNextTime <= gpGlobals->time)
{
m_PendingForwardPush = false;
m_ConfigsExecuted = true;
if (m_PendingForwardPush)
{
m_PendingForwardPush = false;
m_ConfigsExecuted = true;
executeForwards(m_ConfigsExecutedForward);
}
else if (!m_LegacyMapConfigsExecuted && m_legacyMapConfigNextTime <= gpGlobals->time)
{
ExecuteMapConfig();
executeForwards(m_ConfigsExecutedForward);
}
else if (!m_LegacyMapConfigsExecuted)
{
ExecuteMapConfig();
}
}
}
@ -316,6 +319,7 @@ void CoreConfig::CheckLegacyBufferedCommand(char *command)
return;
}
if (!m_LegacyMainConfigExecuted && strstr(command, MainConfigFile))
{
m_LegacyMainConfigExecuted = true;
@ -324,6 +328,9 @@ void CoreConfig::CheckLegacyBufferedCommand(char *command)
if (!m_LegacyMapConfigsExecuted && strstr(command, MapConfigDir))
{
m_LegacyMapConfigsExecuted = true;
// Consider all configs be executed to m_legacyMapConfigNextTime time.
m_PendingForwardPush = true;
}
}

View File

@ -66,6 +66,9 @@
#include <windows.h>
#endif
#include <chrono>
#include <amxmodx.h>
#include <CPlugin.h>
/* When one or more of the AMX_funcname macris are defined, we want
* to compile only those functions. However, when none of these macros
@ -4173,3 +4176,37 @@ int AMXAPI amx_GetStringOld(char *dest,const cell *source,int use_wchar)
dest[len]='\0'; /* store terminator */
return AMX_ERR_NONE;
}
int AMXAPI amx_ExecPerf(AMX* amx, cell* retval, int index)
{
CPluginMngr::CPlugin* perf_Plug = g_plugins.findPluginFast(amx);
if (amxmodx_perflog->value > 0.0f && perf_Plug && (perf_Plug->isDebug() || (int)amxmodx_debug->value == 2))
{
char perf_funcname[sNAMEMAX + 1];
perf_funcname[0] = '\0';
amx_GetPublic(perf_Plug->getAMX(), index, perf_funcname);
if (perf_funcname[0] == '\0')
sprintf(perf_funcname, "Unknown_ID%d", index);
const char* perf_plugname = perf_Plug->getName();
if (!perf_plugname || perf_plugname[0] == '\0')
perf_plugname = "Unknown_plugin";
using std::chrono::steady_clock;
using std::chrono::duration_cast;
using std::chrono::duration;
using std::chrono::microseconds;
auto t1 = steady_clock::now();
int err = amx_Exec(amx, retval, index);
auto ms_int = duration_cast<microseconds>(steady_clock::now() - t1);
auto ms_float = (float)(ms_int.count() / 1000.0f);
if (ms_float >= amxmodx_perflog->value)
{
AMXXLOG_Log("[%s] performance issue. Function %s executed more than %.*fms.", perf_plugname, perf_funcname, 1, ms_float);
}
return err;
}
return amx_Exec(amx, retval, index);
}

View File

@ -382,6 +382,7 @@ int AMXAPI amx_Callback(AMX *amx, cell index, cell *result, cell *params);
int AMXAPI amx_CheckNatives(AMX *amx, AMX_NATIVE_FILTER nf);
int AMXAPI amx_Cleanup(AMX *amx);
int AMXAPI amx_Clone(AMX *amxClone, AMX *amxSource, void *data);
int AMXAPI amx_ExecPerf(AMX* amx, cell* retval, int index);
int AMXAPI amx_Exec(AMX *amx, cell *retval, int index);
int AMXAPI amx_FindNative(AMX *amx, const char *name, int *index);
int AMXAPI amx_FindPublic(AMX *amx, const char *funcname, int *index);

View File

@ -542,11 +542,27 @@ static cell AMX_NATIVE_CALL next_hudchannel(AMX *amx, cell *params)
static cell AMX_NATIVE_CALL set_hudmessage(AMX *amx, cell *params) /* 11 param */
{
g_hudset.a1 = 0;
g_hudset.a2 = 0;
g_hudset.r2 = 255;
g_hudset.g2 = 255;
g_hudset.b2 = 250;
cell num_params = params[0] / sizeof(cell);
if (num_params >= 13)
{
cell *color2 = get_amxaddr(amx, params[13]);
g_hudset.a1 = static_cast<byte>(params[12]);
g_hudset.a2 = static_cast<byte>(color2[3]);
g_hudset.r2 = static_cast<byte>(color2[0]);
g_hudset.g2 = static_cast<byte>(color2[1]);
g_hudset.b2 = static_cast<byte>(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]);
@ -1418,7 +1434,7 @@ static cell AMX_NATIVE_CALL show_menu(AMX *amx, cell *params) /* 3 param */
pPlayer->vgui = false;
if (time == -1)
pPlayer->menuexpire = INFINITE;
pPlayer->menuexpire = static_cast<float>(INFINITE);
else
pPlayer->menuexpire = gpGlobals->time + static_cast<float>(time);
@ -1436,7 +1452,7 @@ static cell AMX_NATIVE_CALL show_menu(AMX *amx, cell *params) /* 3 param */
pPlayer->vgui = false;
if (time == -1)
pPlayer->menuexpire = INFINITE;
pPlayer->menuexpire = static_cast<float>(INFINITE);
else
pPlayer->menuexpire = gpGlobals->time + static_cast<float>(time);
@ -3693,7 +3709,7 @@ static cell AMX_NATIVE_CALL callfunc_end(AMX *amx, cell *params)
amx_Push(pAmx, gparams[i]);
}
err = amx_Exec(pAmx, &retVal, func);
err = amx_ExecPerf(pAmx, &retVal, func);
if (err != AMX_ERR_NONE)
{

View File

@ -196,7 +196,9 @@ extern bool g_official_mod;
extern bool g_dontprecache;
extern int g_srvindex;
extern cvar_t* amxmodx_version;
extern cvar_t* amxmodx_debug;
extern cvar_t* amxmodx_language;
extern cvar_t* amxmodx_perflog;
extern cvar_t* hostname;
extern cvar_t* mp_timelimit;
extern fakecmd_t g_fakecmd;

View File

@ -289,7 +289,18 @@ size_t CAmxxReader::GetBufferSize()
m_pFile = NULL; \
return m_Status; \
}
#define DATAREAD_RELEASE(addr, itemsize, itemcount) \
if (fread(addr, itemsize, itemcount, m_pFile) != static_cast<size_t>(itemcount)) \
{ \
if (feof(m_pFile)) \
m_Status = Err_FileInvalid; \
else \
m_Status = Err_FileRead; \
fclose(m_pFile); \
m_pFile = NULL; \
delete[] tempBuffer;\
return m_Status; \
}
CAmxxReader::Error CAmxxReader::GetSection(void *buffer)
{
if (!m_pFile)
@ -311,7 +322,7 @@ CAmxxReader::Error CAmxxReader::GetSection(void *buffer)
PluginEntry *pe = &(m_Bh.plugins[m_Entry]);
char *tempBuffer = new char[m_SectionLength + 1];
fseek(m_pFile, pe->offs, SEEK_SET);
DATAREAD((void *)tempBuffer, 1, m_SectionLength);
DATAREAD_RELEASE((void *)tempBuffer, 1, m_SectionLength);
uLongf destLen = GetBufferSize();
int result = uncompress((Bytef *)buffer, &destLen, (Bytef *)tempBuffer, m_SectionLength);
delete [] tempBuffer;
@ -335,7 +346,7 @@ CAmxxReader::Error CAmxxReader::GetSection(void *buffer)
// read the data to a temporary buffer
char *tempBuffer = new char[m_SectionLength + 1];
//fread(tempBuffer, sizeof(char), m_SectionLength, m_pFile);
DATAREAD((void*)tempBuffer, 1, m_SectionLength);
DATAREAD_RELEASE((void*)tempBuffer, 1, m_SectionLength);
// decompress
int result = uncompress((Bytef *)buffer, &destLen, (Bytef *)tempBuffer, m_SectionLength);
delete [] tempBuffer;

View File

@ -728,7 +728,7 @@ int Handler::HandleModule(const char *module, bool isClass)
m_pAmx->flags |= AMX_FLAG_PRENIT;
amx_Push(m_pAmx, isClass ? 1 : 0);
amx_PushString(m_pAmx, &hea_addr, &phys_addr, module, 0, 0);
int err = amx_Exec(m_pAmx, &retval, m_iModFunc);
int err = amx_ExecPerf(m_pAmx, &retval, m_iModFunc);
amx_Release(m_pAmx, hea_addr);
m_pAmx->flags &= ~AMX_FLAG_PRENIT;
@ -768,7 +768,7 @@ int Handler::HandleNative(const char *native, int index, int trap)
amx_Push(m_pAmx, trap);
amx_Push(m_pAmx, index);
amx_PushString(m_pAmx, &hea_addr, &phys_addr, native, 0, 0);
int err = amx_Exec(m_pAmx, &retval, m_iNatFunc);
int err = amx_ExecPerf(m_pAmx, &retval, m_iNatFunc);
if (err != AMX_ERR_NONE)
{
//LogError() took care of something for us.
@ -841,7 +841,7 @@ int Handler::HandleError(const char *msg)
amx_PushString(m_pAmx, &hea_addr, &phys_addr, msg, 0, 0);
amx_Push(m_pAmx, pDebugger ? 1 : 0);
amx_Push(m_pAmx, error);
int err = amx_Exec(m_pAmx, &result, m_iErrFunc);
int err = amx_ExecPerf(m_pAmx, &result, m_iErrFunc);
if (err != AMX_ERR_NONE)
{
//handle this manually.

View File

@ -96,12 +96,14 @@ static cell AMX_NATIVE_CALL read_file(AMX *amx, cell *params)
{
length = strlen(buffer);
if (buffer[length - 1] == '\n')
if (length > 0)
{
if (buffer[length - 1] == '\n')
buffer[--length] = '\0';
if (buffer[length - 1] == '\r')
if (buffer[length - 1] == '\r')
buffer[--length] = '\0';
}
cell* textLen = get_amxaddr(amx, params[5]);
*textLen = set_amxstring_utf8(amx, params[3], buffer, length, params[4]);
@ -756,7 +758,7 @@ struct DirectoryHandle
bool valvefs;
};
// native open_dir(dir[], firstfile[], length, &FileType:type = FileType_Unknown, bool:use_valve_fs=false, const valve_path_id[] = "GAME");
// native open_dir(const dir[], firstfile[], length, &FileType:type = FileType_Unknown, bool:use_valve_fs=false, const valve_path_id[] = "GAME");
static cell AMX_NATIVE_CALL amx_open_dir(AMX *amx, cell *params)
{
int length;

View File

@ -135,9 +135,14 @@ cvar_t init_amxmodx_debug = {"amx_debug", "1", FCVAR_SPONLY};
cvar_t init_amxmodx_mldebug = {"amx_mldebug", "", FCVAR_SPONLY};
cvar_t init_amxmodx_language = {"amx_language", "en", FCVAR_SERVER};
cvar_t init_amxmodx_cl_langs = {"amx_client_languages", "1", FCVAR_SERVER};
cvar_t init_amxmodx_perflog = { "amx_perflog_ms", "1.0", FCVAR_SPONLY };
cvar_t* amxmodx_version = NULL;
cvar_t* amxmodx_modules = NULL;
cvar_t* amxmodx_debug = NULL;
cvar_t* amxmodx_language = NULL;
cvar_t* amxmodx_perflog = NULL;
cvar_t* hostname = NULL;
cvar_t* mp_timelimit = NULL;
@ -1021,7 +1026,7 @@ void C_ClientUserInfoChanged_Post(edict_t *pEntity, char *infobuffer)
if (pPlayer->ingame)
{
pPlayer->name =name; // Make sure player have name up to date
} else if (pEntity && pEntity->pvPrivateData && pPlayer->IsBot()) {
} else if (pPlayer->IsBot()) {
pPlayer->Connect(name, "127.0.0.1"/*CVAR_GET_STRING("net_address")*/);
executeForwards(FF_ClientConnect, static_cast<cell>(pPlayer->index));
@ -1627,9 +1632,12 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
CVAR_REGISTER(&init_amxmodx_mldebug);
CVAR_REGISTER(&init_amxmodx_language);
CVAR_REGISTER(&init_amxmodx_cl_langs);
CVAR_REGISTER(&init_amxmodx_perflog);
amxmodx_version = CVAR_GET_POINTER(init_amxmodx_version.name);
amxmodx_debug = CVAR_GET_POINTER(init_amxmodx_debug.name);
amxmodx_language = CVAR_GET_POINTER(init_amxmodx_language.name);
amxmodx_perflog = CVAR_GET_POINTER(init_amxmodx_perflog.name);
REG_SVR_COMMAND("amxx", amx_command);

View File

@ -187,7 +187,7 @@ int load_amxscript_internal(AMX *amx, void **program, const char *filename, char
bool will_be_debugged = false;
tagAMX_DBG *pDbg = NULL;
if ((int)CVAR_GET_FLOAT("amx_debug") >= 2 || debug)
if ((int)amxmodx_debug->value == 2 || debug)
{
if ((hdr->file_version < CUR_FILE_VERSION))
{
@ -544,7 +544,7 @@ int set_amxnatives(AMX* amx, char error[128])
if (amx_FindPublic(amx, "plugin_natives", &idx) == AMX_ERR_NONE)
{
if ((err = amx_Exec(amx, &retval, idx)) != AMX_ERR_NONE)
if ((err = amx_ExecPerf(amx, &retval, idx)) != AMX_ERR_NONE)
{
Debugger::GenericMessage(amx, err);
AMXXLOG_Log("An error occurred in plugin_natives. This is dangerous!");

View File

@ -112,8 +112,7 @@ int amxx_DynaCallback(int idx, AMX *amx, cell *params)
pDebugger->BeginExec();
}
err=amx_Exec(pNative->amx, &ret, pNative->func);
err = amx_ExecPerf(pNative->amx, &ret, pNative->func);
if (err != AMX_ERR_NONE)
{
if (pDebugger && pDebugger->ErrorExists())

View File

@ -930,7 +930,7 @@ static cell AMX_NATIVE_CALL menu_display(AMX *amx, cell *params)
time = params[4];
if (time < 0)
pPlayer->menuexpire = INFINITE;
pPlayer->menuexpire = static_cast<float>(INFINITE);
else
pPlayer->menuexpire = gpGlobals->time + static_cast<float>(time);

View File

@ -26,7 +26,7 @@ static cell AMX_NATIVE_CALL TrieClear(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
t->map.clear();
@ -40,7 +40,7 @@ static cell AMX_NATIVE_CALL TrieSetCell(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -76,7 +76,7 @@ static cell AMX_NATIVE_CALL TrieSetString(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -113,7 +113,7 @@ static cell AMX_NATIVE_CALL TrieSetArray(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -157,7 +157,7 @@ static cell AMX_NATIVE_CALL TrieGetCell(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -189,7 +189,7 @@ static cell AMX_NATIVE_CALL TrieGetString(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -236,7 +236,7 @@ static cell AMX_NATIVE_CALL TrieGetArray(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -297,7 +297,7 @@ static cell AMX_NATIVE_CALL TrieKeyExists(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -314,7 +314,7 @@ static cell AMX_NATIVE_CALL TrieDeleteKey(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -373,7 +373,7 @@ static cell AMX_NATIVE_CALL TrieGetSize(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -386,7 +386,7 @@ static cell AMX_NATIVE_CALL TrieSnapshotCreate(AMX *amx, cell *params)
if (!t)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[1]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[1]);
return 0;
}
@ -506,7 +506,7 @@ static cell AMX_NATIVE_CALL TrieIterCreate(AMX *amx, cell *params)
if (!handle)
{
LogError(amx, AMX_ERR_NATIVE, "Invalid map handle provided (%d)", params[arg_handle]);
LogError(amx, AMX_ERR_NATIVE, "Invalid trie handle provided (%d)", params[arg_handle]);
return 0;
}

View File

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

View File

@ -1,32 +1,126 @@
version: 1.0.{build}
clone_folder: c:\projects\amxmodx
install:
- git submodule update --init --recursive
- 'c:'
- mkdir c:\nasm
- set PATH=c:\nasm\nasm-2.13.03;%PATH%
- curl -L -o "c:\nasm\nasm.zip" https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip
- chdir c:\nasm
- 7z x nasm.zip
- chdir c:\projects
- git clone https://github.com/alliedmodders/ambuild
- git clone https://github.com/alliedmodders/metamod-hl1
- git clone https://github.com/alliedmodders/hlsdk
- ps: Start-FileDownload 'https://downloads.mysql.com/archives/get/p/19/file/mysql-connector-c-6.1.1-win32.zip'
- 7z x mysql-connector-c-6.1.1-win32.zip -o"mysql"
- cd mysql
- dir
- ren mysql-connector-c-6.1.1-win32 mysql-5.5
- move /Y mysql-5.5 ..\
- cd ..\ambuild
- c:\python27\python setup.py install
- cd ..\amxmodx
cache:
- c:\projects\*.zip -> appveyor.yml
- c:\projects\mysql-5.5 -> appveyor.yml
build_script:
- '"%VS140COMNTOOLS%\vsvars32.bat"'
- mkdir build
- cd build
- c:\python27\python ../configure.py --enable-optimize --nasm="C:\nasm\nasm-2.13.03\nasm.exe"
- ambuild
environment:
fast_finish: false
allow_failures: true
matrix:
- job_name: MacOS
appveyor_build_worker_image: macos-mojave
job_group: Build
- job_name: Windows
appveyor_build_worker_image: Visual Studio 2015
job_group: Build
for:
-
matrix:
only:
- job_name: Windows
clone_folder: c:\projects\amxmodx
install:
- cmd: >-
git submodule update --init --recursive
c:
mkdir c:\nasm
set PATH=c:\nasm\nasm-2.13.03;%PATH%
curl -L -o "c:\nasm\nasm.zip" https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip
chdir c:\nasm
7z x nasm.zip
chdir c:\projects
git clone https://github.com/alliedmodders/ambuild
git clone https://github.com/alliedmodders/metamod-hl1
git clone https://github.com/alliedmodders/hlsdk
curl -L -o "mysql-connector-c-6.1.1-win32.zip" https://downloads.mysql.com/archives/get/p/19/file/mysql-connector-c-6.1.1-win32.zip
7z x mysql-connector-c-6.1.1-win32.zip -o"mysql"
cd mysql
dir
ren mysql-connector-c-6.1.1-win32 mysql-5.5
move /Y mysql-5.5 ..\
cd ..\ambuild
c:\python38\python setup.py install
set PATH=C:\Python38;C:\Python38\Scripts;%PATH%
cd ..\amxmodx
# cache:
# - c:\projects\*.zip -> appveyor.yml
# - c:\projects\mysql-5.5 -> appveyor.yml
build_script:
- cmd: >-
"%VS140COMNTOOLS%\vsvars32.bat"
mkdir build
cd build
c:\python38\python ../configure.py --enable-optimize --nasm="C:\nasm\nasm-2.13.03\nasm.exe"
echo %PATH%
ambuild
-
matrix:
only:
- job_name: MacOS
install:
- >-
git submodule update --init --recursive
mkdir -p $APPVEYOR_BUILD_FOLDER/deps
ls -alh
cd $APPVEYOR_BUILD_FOLDER/deps
mkdir -p amxmodx
../support/checkout-deps.sh
brew install nasm
nasm -v
export CC=clang
export CXX=clang++
clang --version
clang++ --version
cd $APPVEYOR_BUILD_FOLDER
build_script:
- >-
echo $PATH
mkdir build
cd build
python3 ../configure.py --enable-optimize --metamod=$APPVEYOR_BUILD_FOLDER/deps/metamod-am --hlsdk=$APPVEYOR_BUILD_FOLDER/deps/hlsdk --mysql=$APPVEYOR_BUILD_FOLDER/deps/mysql-5.5
ambuild

View File

@ -70,7 +70,7 @@ static ucell hex2long(char *s,char **n)
s++;
} /* if */
assert((*s>='0' && *s<='9') || (*s>='a' && *s<='f') || (*s>='a' && *s<='f'));
assert((*s>='0' && *s<='9') || (*s>='a' && *s<='f') || (*s>='A' && *s<='F'));
for ( ;; ) {
if (*s>='0' && *s<='9')
digit=*s-'0';

View File

@ -46,7 +46,7 @@
#define _MAX_PATH 250
#endif
#if !defined DIRSEP_CHAR
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE___
#if defined LINUX || defined __FreeBSD__ || defined __OpenBSD__ || defined __APPLE__
#define DIRSEP_CHAR '/'
#elif defined macintosh
#define DIRSEP_CHAR ':'

View File

@ -37,18 +37,38 @@ amx_show_activity 2
// Default value: "Welcome to %hostname% -- This server is using AMX Mod X" 600
amx_scrollmsg "Welcome to %hostname% -- This server is using AMX Mod X" 600
// Center typed colored messages (last parameter is a color in RRRGGGBBB format)
// Center typed colored info messages (last parameter is a color in RRRGGGBBB format)
//
// Default values: "Welcome to %hostname%" "000255100"
// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255"
amx_imessage "Welcome to %hostname%" "000255100"
amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255"
// Frequency in seconds of colored messages
// Frequency in seconds of info messages
//
// Default value: 180
amx_freq_imessage 180
// X position on the screen for info messages
//
// Default value: -1.0
amx_imessage_x_pos -1.0
// Y position on the screen for info messages
//
// Default value: 0.2
amx_imessage_y_pos 0.2
// Hold time for info messages
//
// Default value: 12.0
amx_imessage_holdtime 12.0
// Set to 1 if you want to show info messages only to dead clients
//
// Default value: 0
amx_imessage_only_dead 0
// Ban times for the main ban menu (amx_banmenu)
// Use 0 for permanent ban.
// Default values: 0 5 10 15 30 45 60
@ -180,4 +200,4 @@ amx_debug 1
// "" means disabled
//
// Default value: ""
amx_mldebug ""
amx_mldebug ""

View File

@ -37,18 +37,38 @@ amx_show_activity 2
// Default value: "Welcome to %hostname% -- This server is using AMX Mod X" 600
amx_scrollmsg "Welcome to %hostname% -- This server is using AMX Mod X" 600
// Center typed colored messages (last parameter is a color in RRRGGGBBB format)
// Center typed colored info messages (last parameter is a color in RRRGGGBBB format)
//
// Default values: "Welcome to %hostname%" "000255100"
// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255"
amx_imessage "Welcome to %hostname%" "000255100"
amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255"
// Frequency in seconds of colored messages
// Frequency in seconds of info messages
//
// Default value: 180
amx_freq_imessage 180
// X position on the screen for info messages
//
// Default value: -1.0
amx_imessage_x_pos -1.0
// Y position on the screen for info messages
//
// Default value: 0.2
amx_imessage_y_pos 0.2
// Hold time for info messages
//
// Default value: 12.0
amx_imessage_holdtime 12.0
// Set to 1 if you want to show info messages only to dead clients
//
// Default value: 0
amx_imessage_only_dead 0
// Ban times for the main ban menu (amx_banmenu)
// Use 0 for permanent ban
// Default values: 0 5 10 15 30 45 60
@ -220,4 +240,3 @@ amx_statsx_freeze -2.0
// -
// Default value: 0
amx_restrmapsettings 0

View File

@ -37,18 +37,38 @@ amx_show_activity 2
// Default value: "Welcome to %hostname% -- This server is using AMX Mod X" 600
amx_scrollmsg "Welcome to %hostname% -- This server is using AMX Mod X" 600
// Center typed colored messages (last parameter is a color in RRRGGGBBB format)
// Center typed colored info messages (last parameter is a color in RRRGGGBBB format)
//
// Default values: "Welcome to %hostname%" "000255100"
// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255"
amx_imessage "Welcome to %hostname%" "000255100"
amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255"
// Frequency in seconds of colored messages
// Frequency in seconds of info messages
//
// Default value: 180
amx_freq_imessage 180
// X position on the screen for info messages
//
// Default value: -1.0
amx_imessage_x_pos -1.0
// Y position on the screen for info messages
//
// Default value: 0.2
amx_imessage_y_pos 0.2
// Hold time for info messages
//
// Default value: 12.0
amx_imessage_holdtime 12.0
// Set to 1 if you want to show info messages only to dead clients
//
// Default value: 0
amx_imessage_only_dead 0
// Ban times for the main ban menu (amx_banmenu)
// Use 0 for permanent ban.
// Default values: 0 5 10 15 30 45 60
@ -217,4 +237,4 @@ amx_idle_ignore_immunity 1
// say /stuck to free themselves.
//
// Default value: 4
amx_unstuck_frequency 4
amx_unstuck_frequency 4

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'csx')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../../public/sdk/amxxmodule.cpp',
'CRank.cpp',

View File

@ -127,10 +127,10 @@ void CPlayer::Connect(const char* address ){
void CPlayer::restartStats(bool all)
{
if ( all ) memset(weapons,0,sizeof(weapons));
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
if ( all ) memset(&weapons,0,sizeof(weapons));
memset(&weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(&attackers,0,sizeof(attackers));
memset(&victims,0,sizeof(victims));
life = {};
}

View File

@ -229,8 +229,8 @@ void ListboxItemSelected(HWND hDlg) {
// Retrieve complete stats record of this position. Position in listbox should be same as rank in our records!
RankSystem::RankStats* stats = g_rank.findEntryInRankByPos((int)nItem + 1);
if (stats == NULL) {
char msg[] = "Error: Couldn't find the record by position! (nItem = %d)";
sprintf(msg, msg, nItem);
char msg[512];
sprintf(msg, "Error: Couldn't find the record by position! (nItem = %d)", nItem);
MessageBox(hDlg, msg, "Oh fiddlesticks!", MB_OK);
ClearStatsfields(hDlg);
return;

View File

@ -307,10 +307,10 @@ static cell AMX_NATIVE_CALL custom_wpn_dmg(AMX *amx, cell *params){ // wid,att,v
CPlayer* pAtt = GET_PLAYER_POINTER_I(att);
CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
if ( !pAtt ) pAtt = pVic;
pVic->pEdict->v.dmg_inflictor = NULL;
pAtt->saveHit( pVic , weapon , dmg, aim );
if ( !pAtt ) pAtt = pVic;
int TA = 0;
if ( (pVic->teamId == pAtt->teamId) && ( pVic != pAtt) )
TA = 1;

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'dodfun')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../../public/sdk/amxxmodule.cpp',
'NBase.cpp',

View File

@ -506,7 +506,7 @@ static cell AMX_NATIVE_CALL objective_set_data(AMX *amx, cell *params){ // index
GET_CP_PD(pent).model_body_neutral = ivalue;
return 1;
case CP_model_body_allies :
GET_CP_PD(pent).model_body_axis = ivalue;
GET_CP_PD(pent).model_body_allies = ivalue;
return 1;
case CP_model_body_axis :
GET_CP_PD(pent).model_body_axis = ivalue;

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'dodx')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../../public/sdk/amxxmodule.cpp',
'CRank.cpp',

View File

@ -94,14 +94,14 @@ void CPlayer::restartStats(bool all)
{
if ( all )
{
memset(weapons,0,sizeof(weapons));
memset(&weapons,0,sizeof(weapons));
memset(static_cast<void *>(&round),0,sizeof(round));
memset(weaponsRnd,0,sizeof(weaponsRnd));
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(&weaponsLife,0,sizeof(weaponsLife)); //DEC-Weapon (Round) stats
memset(&attackers,0,sizeof(attackers));
memset(&victims,0,sizeof(victims));
life = {};
}
@ -434,7 +434,7 @@ void CPlayer::WeaponsCheck(int weapons)
int old;
int cur;
for(int i = 1; i < MAX_WEAPONS; ++i)
for(int i = 1; i < DODMAX_WEAPONS; ++i)
{
// Check to see we are not talking about a grenade and we have changed
if(i != 13 && i != 14 && i != 15 && i != 16 && i != 36)

View File

@ -263,7 +263,7 @@ static cell AMX_NATIVE_CALL dod_weapon_type(AMX *amx, cell *params) /* 2 params
{
int weaponsbit = pPlayer->pEdict->v.weapons & ~(1<<31); // don't count last element
for(int x = 1; x < MAX_WEAPONS; ++x)
for(int x = 1; x < DODMAX_WEAPONS; ++x)
{
if((weaponsbit&(1<<x)) > 0)
{
@ -387,12 +387,12 @@ static cell AMX_NATIVE_CALL cwpn_dmg(AMX *amx, cell *params)
pVic->pEdict->v.dmg_inflictor = NULL;
if(pAtt->index != pVic->index)
pAtt->saveHit(pVic , weapon , dmg, aim);
if(!pAtt)
pAtt = pVic;
if(pAtt->index != pVic->index)
pAtt->saveHit(pVic , weapon , dmg, aim);
int TA = 0;
if((pVic->pEdict->v.team == pAtt->pEdict->v.team) && (pVic != pAtt))

View File

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

View File

@ -222,7 +222,7 @@ void Client_AmmoX(void* mValue)
case 1:
if (!mPlayer )
break;
for(int i = 1; i < MAX_WEAPONS ; ++i)
for(int i = 1; i < DODMAX_WEAPONS ; ++i)
{
if (iAmmo == weaponData[i].ammoSlot)
mPlayer->weapons[i].ammo = *(int*)mValue;
@ -244,7 +244,7 @@ void Client_AmmoShort(void* mValue)
if(!mPlayer )
break;
for(int i = 1; i < MAX_WEAPONS ; ++i)
for(int i = 1; i < DODMAX_WEAPONS ; ++i)
{
if (iAmmo == weaponData[i].ammoSlot)
mPlayer->weapons[i].ammo = *(int*)mValue;

View File

@ -34,31 +34,26 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
{
gfm_tr->fAllSolid = *ptr;
return 1;
break;
}
case TR_StartSolid:
{
gfm_tr->fStartSolid = *ptr;
return 1;
break;
}
case TR_InOpen:
{
gfm_tr->fInOpen = *ptr;
return 1;
break;
}
case TR_InWater:
{
gfm_tr->fInWater = *ptr;
return 1;
break;
}
case TR_flFraction:
{
gfm_tr->flFraction = amx_ctof(*ptr);
return 1;
break;
}
case TR_vecEndPos:
{
@ -66,13 +61,11 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
gfm_tr->vecEndPos.y = amx_ctof(ptr[1]);
gfm_tr->vecEndPos.z = amx_ctof(ptr[2]);
return 1;
break;
}
case TR_flPlaneDist:
{
gfm_tr->flPlaneDist = amx_ctof(*ptr);
return 1;
break;
}
case TR_vecPlaneNormal:
{
@ -80,7 +73,6 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
gfm_tr->vecPlaneNormal.y = amx_ctof(ptr[1]);
gfm_tr->vecPlaneNormal.z = amx_ctof(ptr[2]);
return 1;
break;
}
case TR_pHit:
{
@ -96,14 +88,12 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
{
gfm_tr->iHitgroup = *ptr;
return 1;
break;
}
default:
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
}
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
@ -116,29 +106,24 @@ static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
case TR_AllSolid:
{
return gfm_tr->fAllSolid;
break;
}
case TR_StartSolid:
{
return gfm_tr->fStartSolid;
break;
}
case TR_InOpen:
{
return gfm_tr->fInOpen;
break;
}
case TR_InWater:
{
return gfm_tr->fInWater;
break;
}
case TR_flFraction:
{
ptr = MF_GetAmxAddr(amx, params[2]);
*ptr = amx_ftoc(gfm_tr->flFraction);
return 1;
break;
}
case TR_vecEndPos:
{
@ -147,14 +132,12 @@ static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
ptr[1] = amx_ftoc(gfm_tr->vecEndPos.y);
ptr[2] = amx_ftoc(gfm_tr->vecEndPos.z);
return 1;
break;
}
case TR_flPlaneDist:
{
ptr = MF_GetAmxAddr(amx, params[2]);
*ptr = amx_ftoc(gfm_tr->flPlaneDist);
return 1;
break;
}
case TR_vecPlaneNormal:
{
@ -163,26 +146,21 @@ static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params)
ptr[1] = amx_ftoc(gfm_tr->vecPlaneNormal.y);
ptr[2] = amx_ftoc(gfm_tr->vecPlaneNormal.z);
return 1;
break;
}
case TR_pHit:
{
if (FNullEnt(gfm_tr->pHit))
return -1;
return ENTINDEX(gfm_tr->pHit);
break;
}
case TR_iHitgroup:
{
return gfm_tr->iHitgroup;
break;
}
default:
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
}
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
AMX_NATIVE_INFO tr_Natives[] =

View File

@ -48,31 +48,26 @@ static cell AMX_NATIVE_CALL set_tr2(AMX *amx, cell *params)
{
tr->fAllSolid = *ptr;
return 1;
break;
}
case TR_InOpen:
{
tr->fInOpen = *ptr;
return 1;
break;
}
case TR_StartSolid:
{
tr->fStartSolid = *ptr;
return 1;
break;
}
case TR_InWater:
{
tr->fInWater = *ptr;
return 1;
break;
}
case TR_flFraction:
{
tr->flFraction = amx_ctof(*ptr);
return 1;
break;
}
case TR_vecEndPos:
{
@ -80,13 +75,11 @@ static cell AMX_NATIVE_CALL set_tr2(AMX *amx, cell *params)
tr->vecEndPos.y = amx_ctof(ptr[1]);
tr->vecEndPos.z = amx_ctof(ptr[2]);
return 1;
break;
}
case TR_flPlaneDist:
{
tr->flPlaneDist = amx_ctof(*ptr);
return 1;
break;
}
case TR_vecPlaneNormal:
{
@ -94,7 +87,6 @@ static cell AMX_NATIVE_CALL set_tr2(AMX *amx, cell *params)
tr->vecPlaneNormal.y = amx_ctof(ptr[1]);
tr->vecPlaneNormal.z = amx_ctof(ptr[2]);
return 1;
break;
}
case TR_pHit:
{
@ -110,15 +102,11 @@ static cell AMX_NATIVE_CALL set_tr2(AMX *amx, cell *params)
{
tr->iHitgroup = *ptr;
return 1;
break;
}
default:
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
}
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
@ -137,29 +125,24 @@ static cell AMX_NATIVE_CALL get_tr2(AMX *amx, cell *params)
case TR_AllSolid:
{
return tr->fAllSolid;
break;
}
case TR_InOpen:
{
return tr->fInOpen;
break;
}
case TR_StartSolid:
{
return tr->fStartSolid;
break;
}
case TR_InWater:
{
return tr->fInWater;
break;
}
case TR_flFraction:
{
ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(tr->flFraction);
return 1;
break;
}
case TR_vecEndPos:
{
@ -168,14 +151,12 @@ static cell AMX_NATIVE_CALL get_tr2(AMX *amx, cell *params)
ptr[1] = amx_ftoc(tr->vecEndPos.y);
ptr[2] = amx_ftoc(tr->vecEndPos.z);
return 1;
break;
}
case TR_flPlaneDist:
{
ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(tr->flPlaneDist);
return 1;
break;
}
case TR_vecPlaneNormal:
{
@ -184,27 +165,21 @@ static cell AMX_NATIVE_CALL get_tr2(AMX *amx, cell *params)
ptr[1] = amx_ftoc(tr->vecPlaneNormal.y);
ptr[2] = amx_ftoc(tr->vecPlaneNormal.z);
return 1;
break;
}
case TR_pHit:
{
if (FNullEnt(tr->pHit))
return -1;
return ENTINDEX(tr->pHit);
break;
}
case TR_iHitgroup:
{
return tr->iHitgroup;
break;
}
default:
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
}
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
@ -221,7 +196,6 @@ static cell AMX_NATIVE_CALL get_kvd(AMX *amx, cell *params)
case KV_fHandled:
{
return kvd->fHandled;
break;
}
case KV_ClassName:
{
@ -232,7 +206,6 @@ static cell AMX_NATIVE_CALL get_kvd(AMX *amx, cell *params)
}
cell *ptr = MF_GetAmxAddr(amx, params[4]);
return MF_SetAmxString(amx, params[3], kvd->szClassName, (int)*ptr);
break;
}
case KV_KeyName:
{
@ -243,7 +216,6 @@ static cell AMX_NATIVE_CALL get_kvd(AMX *amx, cell *params)
}
cell *ptr = MF_GetAmxAddr(amx, params[4]);
return MF_SetAmxString(amx, params[3], kvd->szKeyName, (int)*ptr);
break;
}
case KV_Value:
{
@ -254,12 +226,11 @@ static cell AMX_NATIVE_CALL get_kvd(AMX *amx, cell *params)
}
cell *ptr = MF_GetAmxAddr(amx, params[4]);
return MF_SetAmxString(amx, params[3], kvd->szValue, (int)*ptr);
break;
}
}
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid KeyValueData member: %d", params[2]);
return 0;
}
@ -301,28 +272,24 @@ static cell AMX_NATIVE_CALL set_kvd(AMX *amx, cell *params)
{
kvd->fHandled = (int)*ptr;
return 1;
break;
}
case KV_ClassName:
{
kvdw->cls = MF_GetAmxString(amx, params[3], 0, &len);
kvd->szClassName = const_cast<char *>(kvdw->cls.chars());
return 1;
break;
}
case KV_KeyName:
{
kvdw->key = MF_GetAmxString(amx, params[3], 0, &len);
kvd->szKeyName = const_cast<char *>(kvdw->key.chars());
return 1;
break;
}
case KV_Value:
{
kvdw->val = MF_GetAmxString(amx, params[3], 0, &len);
kvd->szValue = const_cast<char *>(kvdw->val.chars());
return 1;
break;
}
}
@ -1110,9 +1077,9 @@ static cell AMX_NATIVE_CALL set_es(AMX *amx, cell *params)
es->vuser3.z = amx_ctof(ptr[2]);
return 1;
case ES_vUser4:
es->vuser3.x = amx_ctof(ptr[0]);
es->vuser3.y = amx_ctof(ptr[1]);
es->vuser3.z = amx_ctof(ptr[2]);
es->vuser4.x = amx_ctof(ptr[0]);
es->vuser4.y = amx_ctof(ptr[1]);
es->vuser4.z = amx_ctof(ptr[2]);
return 1;
}

View File

@ -80,8 +80,7 @@ static cell AMX_NATIVE_CALL fm_return(AMX *amx, cell *params)
}
default:
{
return 0;
break;
return 0;
}
}

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'fun')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../public/sdk/amxxmodule.cpp',
'../../public/memtools/MemoryUtils.cpp',

View File

@ -232,6 +232,15 @@ namespace AMXX
*/
virtual const char *ValueToString(JS_Handle value) = 0;
/**
* @brief Gets a string data length.
*
* @param value JSON handle
*
* @return Length of string data
*/
virtual size_t ValueToStringLen(JS_Handle value) = 0;
/**
* @brief Gets a number.
*
@ -277,6 +286,16 @@ namespace AMXX
*/
virtual const char *ArrayGetString(JS_Handle array, size_t index) = 0;
/**
* @brief Gets string data length from the array.
*
* @param array JSON handle
* @param index Position in the array (starting from 0)
*
* @return Length of string data
*/
virtual size_t ArrayGetStringLen(JS_Handle array, size_t index) = 0;
/**
* @brief Gets a number from the array.
*
@ -468,6 +487,20 @@ namespace AMXX
*/
virtual const char *ObjectGetString(JS_Handle object, const char *name, bool dotfunc = false) = 0;
/**
* @brief Gets string data length from the object.
*
* @note If dot notation is used some values may be inaccessible
* because valid names in JSON can contain dots.
*
* @param object JSON handle
* @param name Key name
* @param dotfunc True to use dot notation, false to not
*
* @return Length of string data
*/
virtual size_t ObjectGetStringLen(JS_Handle object, const char *name, bool dotfunc = false) = 0;
/**
* @brief Gets a number from the object.
*
@ -696,6 +729,15 @@ namespace AMXX
*/
virtual char *SerialToString(JS_Handle value, bool pretty) = 0;
/**
* @brief Slashes should be escaped or not when serializing JSON.
*
* @note This function sets a global setting and is not thread safe.
*
* @param escape_slashes True to escape slashes, false to not
*/
virtual void EscapeSlashes(int escape_slashes) = 0;
/**
* @brief Frees serialized string.
*

View File

@ -465,3 +465,8 @@ char *JSONMngr::SerialToString(JS_Handle value, bool pretty)
return (result) ? result : nullptr;
}
void JSONMngr::EscapeSlashes(int escape_slashes)
{
json_set_escape_slashes(escape_slashes);
}

View File

@ -69,6 +69,10 @@ class JSONMngr : public IJSONMngr
// Convert functions
const char *ValueToString(JS_Handle value) override;
inline size_t ValueToStringLen(JS_Handle value) override
{
return json_value_get_string_len(m_Handles[value]->m_pValue);
}
inline double ValueToNum(JS_Handle value) override
{
return json_value_get_number(m_Handles[value]->m_pValue);
@ -81,6 +85,10 @@ class JSONMngr : public IJSONMngr
// Wrappers for Array API
bool ArrayGetValue(JS_Handle array, size_t index, JS_Handle *handle) override;
const char *ArrayGetString(JS_Handle array, size_t index) override;
inline size_t ArrayGetStringLen(JS_Handle array, size_t index) override
{
return json_array_get_string_len(m_Handles[array]->m_pArray, index);
}
inline bool ArrayGetBool(JS_Handle array, size_t index) override
{
return json_array_get_boolean(m_Handles[array]->m_pArray, index) == 1;
@ -142,6 +150,15 @@ class JSONMngr : public IJSONMngr
// Get functions
bool ObjectGetValue(JS_Handle object, const char *name, JS_Handle *handle, bool dotfunc) override;
const char *ObjectGetString(JS_Handle object, const char *name, bool dotfunc) override;
inline size_t ObjectGetStringLen(JS_Handle object, const char *name, bool dotfunc) override
{
if (!dotfunc)
{
return json_object_get_string_len(m_Handles[object]->m_pObject, name);
}
return json_object_dotget_string_len(m_Handles[object]->m_pObject, name);
}
double ObjectGetNum(JS_Handle object, const char *name, bool dotfunc) override;
bool ObjectGetBool(JS_Handle object, const char *name, bool dotfunc) override;
inline size_t ObjectGetCount(JS_Handle object) override
@ -171,6 +188,7 @@ class JSONMngr : public IJSONMngr
bool SerialToBuffer(JS_Handle value, char *buffer, size_t size, bool pretty) override;
bool SerialToFile(JS_Handle value, const char *filepath, bool pretty) override;
char *SerialToString(JS_Handle value, bool pretty) override;
void EscapeSlashes(int escape_slashes) override;
inline void FreeString(char *string) override
{
json_free_serialized_string(string);

View File

@ -231,6 +231,19 @@ static cell AMX_NATIVE_CALL amxx_json_get_number(AMX *amx, cell *params)
return static_cast<cell>(JsonMngr->ValueToNum(value));
}
//native json_get_string_len(const JSON:value);
static cell AMX_NATIVE_CALL amxx_json_get_string_len(AMX *amx, cell *params)
{
auto value = params[1];
if (!JsonMngr->IsValidHandle(value))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON value! %d", value);
return 0;
}
return JsonMngr->ValueToStringLen(value);
}
//native Float:json_get_real(const JSON:value);
static cell AMX_NATIVE_CALL amxx_json_get_real(AMX *amx, cell *params)
{
@ -290,6 +303,19 @@ static cell AMX_NATIVE_CALL amxx_json_array_get_string(AMX *amx, cell *params)
return MF_SetAmxStringUTF8Char(amx, params[3], string, strlen(string), params[4]);
}
//native json_array_get_string_len(const JSON:array, index);
static cell AMX_NATIVE_CALL amxx_json_array_get_string_len(AMX *amx, cell *params)
{
auto array = params[1];
if (!JsonMngr->IsValidHandle(array, Handle_Array))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON array! %d", array);
return 0;
}
return JsonMngr->ArrayGetStringLen(array, params[2]);
}
//native json_array_get_number(const JSON:array, index);
static cell AMX_NATIVE_CALL amxx_json_array_get_number(AMX *amx, cell *params)
{
@ -578,6 +604,22 @@ static cell AMX_NATIVE_CALL amxx_json_object_get_string(AMX *amx, cell *params)
return MF_SetAmxStringUTF8Char(amx, params[3], string, strlen(string), params[4]);
}
//native json_object_get_string_len(const JSON:object, const name[], bool:dotfunc = false);
static cell AMX_NATIVE_CALL amxx_json_object_get_string_len(AMX *amx, cell *params)
{
auto object = params[1];
if (!JsonMngr->IsValidHandle(object, Handle_Object))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON object! %d", object);
return 0;
}
int len;
auto name = MF_GetAmxString(amx, params[2], 0, &len);
return JsonMngr->ObjectGetStringLen(object, name, params[3] != 0);
}
//native json_object_get_number(const JSON:object, const name[], bool:dotfunc = false);
static cell AMX_NATIVE_CALL amxx_json_object_get_number(AMX *amx, cell *params)
{
@ -697,6 +739,12 @@ static cell AMX_NATIVE_CALL amxx_json_object_set_value(AMX *amx, cell *params)
return 0;
}
if (!JsonMngr->IsValidHandle(params[3]))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON value! %d", params[3]);
return 0;
}
int len;
auto name = MF_GetAmxString(amx, params[2], 0, &len);
@ -865,6 +913,13 @@ static cell AMX_NATIVE_CALL amxx_json_serial_to_file(AMX *amx, cell *params)
return JsonMngr->SerialToFile(value, path, params[3] != 0);
}
//native json_set_escape_slashes(bool:escape_slashes = true);
static cell AMX_NATIVE_CALL amxx_json_set_escape_slashes(AMX *amx, cell *params)
{
JsonMngr->EscapeSlashes(params[1] != 0);
return 1;
}
AMX_NATIVE_INFO JsonNatives[] =
{
{ "json_parse", amxx_json_parse },
@ -882,11 +937,13 @@ AMX_NATIVE_INFO JsonNatives[] =
{ "json_deep_copy", amxx_json_deep_copy },
{ "json_free", amxx_json_free },
{ "json_get_string", amxx_json_get_string },
{ "json_get_string_len", amxx_json_get_string_len },
{ "json_get_number", amxx_json_get_number },
{ "json_get_real", amxx_json_get_real },
{ "json_get_bool", amxx_json_get_bool },
{ "json_array_get_value", amxx_json_array_get_value },
{ "json_array_get_string", amxx_json_array_get_string },
{ "json_array_get_string_len", amxx_json_array_get_string_len },
{ "json_array_get_count", amxx_json_array_get_count },
{ "json_array_get_number", amxx_json_array_get_number },
{ "json_array_get_real", amxx_json_array_get_real },
@ -907,6 +964,7 @@ AMX_NATIVE_INFO JsonNatives[] =
{ "json_array_clear", amxx_json_array_clear },
{ "json_object_get_value", amxx_json_object_get_value },
{ "json_object_get_string", amxx_json_object_get_string },
{ "json_object_get_string_len", amxx_json_object_get_string_len },
{ "json_object_get_number", amxx_json_object_get_number },
{ "json_object_get_real", amxx_json_object_get_real },
{ "json_object_get_bool", amxx_json_object_get_bool },
@ -925,6 +983,7 @@ AMX_NATIVE_INFO JsonNatives[] =
{ "json_serial_size", amxx_json_serial_size },
{ "json_serial_to_string", amxx_json_serial_to_string },
{ "json_serial_to_file", amxx_json_serial_to_file },
{ "json_set_escape_slashes", amxx_json_set_escape_slashes },
{ nullptr, nullptr }
};

View File

@ -17,18 +17,18 @@ if AMXX.mysql_path:
binary.sources = []
if builder.target_platform is 'linux' or builder.target_platform is 'mac':
if builder.target_platform == 'linux' or builder.target_platform == 'mac':
binary.compiler.defines += ['stricmp=strcasecmp']
binary.compiler.linkflags += [
os.path.join(AMXX.mysql_path, 'lib', 'libmysqlclient_r.a'),
'-lpthread',
'-lm',
]
if builder.target_platform is 'linux':
if builder.target_platform == 'linux':
binary.compiler.linkflags += [
'-lrt'
]
elif builder.target_platform is 'windows':
elif builder.target_platform == 'windows':
binary.compiler.linkflags += [
os.path.join(AMXX.mysql_path, 'lib', 'mysqlclient.lib'),
'ws2_32.lib',

View File

@ -277,7 +277,6 @@ static cell AMX_NATIVE_CALL SQL_ReadResult(AMX *amx, cell *params)
{
int num = row->GetInt(col);
return num;
break;
}
default:
{

View File

@ -247,7 +247,6 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
case 2:
{
return atoi(data);
break;
}
case 3:
{
@ -255,12 +254,10 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata);
return 1;
break;
}
case 4:
{
return MF_SetAmxString(amx, params[3], data, params[4]);
break;
}
}
@ -315,7 +312,6 @@ static cell AMX_NATIVE_CALL dbi_result(AMX *amx, cell *params)
case 2:
{
return atoi(data);
break;
}
case 3:
{
@ -323,12 +319,10 @@ static cell AMX_NATIVE_CALL dbi_result(AMX *amx, cell *params)
REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata);
return 1;
break;
}
case 4:
{
return MF_SetAmxString(amx, params[3], data, params[4]);
break;
}
}

View File

@ -115,20 +115,17 @@ static cell nvault_get(AMX *amx, cell *params)
case 2:
{
return atoi(val);
break;
}
case 3:
{
cell *fAddr = MF_GetAmxAddr(amx, params[3]);
*fAddr = amx_ftoc((REAL)atof(val));
return 1;
break;
}
case 4:
{
len = *(MF_GetAmxAddr(amx, params[4]));
return MF_SetAmxString(amx, params[3], val, len);
break;
}
}

View File

@ -654,7 +654,7 @@ int RegEx::Replace(char *text, size_t textMaxLen, const char *replace, size_t re
* $nn or ${nn}
* ^ ^
*/
if (*walk && *walk >= '0' && *walk <= '9')
if (*walk >= '0' && *walk <= '9')
{
backref = backref * 10 + *walk - '0';
++walk;

View File

@ -12,7 +12,7 @@ binary.compiler.defines += [
'HAVE_STDINT_H',
]
if builder.target_platform is 'linux' or builder.target_platform is 'mac':
if builder.target_platform == 'linux' or builder.target_platform == 'mac':
binary.compiler.defines += ['stricmp=strcasecmp']
binary.compiler.postlink += ['-lpthread']

View File

@ -273,7 +273,6 @@ static cell AMX_NATIVE_CALL SQL_ReadResult(AMX *amx, cell *params)
{
int num = row->GetInt(col);
return num;
break;
}
default:
{

View File

@ -245,7 +245,6 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
case 2:
{
return atoi(data);
break;
}
case 3:
{
@ -253,12 +252,10 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata);
return 1;
break;
}
case 4:
{
return MF_SetAmxString(amx, params[3], data, params[4]);
break;
}
}
@ -309,7 +306,6 @@ static cell AMX_NATIVE_CALL dbi_result(AMX *amx, cell *params)
case 2:
{
return atoi(data);
break;
}
case 3:
{
@ -317,12 +313,10 @@ static cell AMX_NATIVE_CALL dbi_result(AMX *amx, cell *params)
REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata);
return 1;
break;
}
case 4:
{
return MF_SetAmxString(amx, params[3], data, params[4]);
break;
}
}

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'tfcx')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../public/sdk/amxxmodule.cpp',
'CRank.cpp',

View File

@ -126,10 +126,10 @@ void CPlayer::Connect(const char* address ){
void CPlayer::restartStats(bool all)
{
if ( all ) memset(weapons,0,sizeof(weapons));
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
if ( all ) memset(&weapons,0,sizeof(weapons));
memset(&weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(&attackers,0,sizeof(attackers));
memset(&victims,0,sizeof(victims));
life = {};
}

View File

@ -161,10 +161,10 @@ struct CPlayer {
int clip;
};
PlayerWeapon weapons[MAX_WEAPONS];
PlayerWeapon weapons[TFCMAX_WEAPONS];
PlayerWeapon attackers[33];
PlayerWeapon victims[33];
Stats weaponsRnd[MAX_WEAPONS]; // DEC-Weapon (Round) stats
Stats weaponsRnd[TFCMAX_WEAPONS]; // DEC-Weapon (Round) stats
Stats life;
int teamId;

View File

@ -262,10 +262,10 @@ static cell AMX_NATIVE_CALL cwpn_dmg(AMX *amx, cell *params){ // wid,att,vic,dmg
CPlayer* pAtt = GET_PLAYER_POINTER_I(att);
CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
if ( !pAtt ) pAtt = pVic;
pVic->pEdict->v.dmg_inflictor = NULL;
pAtt->saveHit( pVic , weapon , dmg, aim );
if ( !pAtt ) pAtt = pVic;
int TA = 0;
if ( (pVic->pEdict->v.team == pAtt->pEdict->v.team ) && ( pVic != pAtt) )
TA = 1;

View File

@ -47,7 +47,7 @@ bool isModuleActive(){
bool util_strncmp( const char *sz1, const char *sz2, int size){
int i = 0;
while( sz1[i] && i<=size){
while( i<=size && sz1[i] ){
if ( sz1[i] != sz2[i] )
return false;
i++;

View File

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

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'tsfun')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../../public/sdk/amxxmodule.cpp',
]

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'tsx')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [
'../../../public/sdk/amxxmodule.cpp',
'CMisc.cpp',

View File

@ -78,10 +78,10 @@ void CPlayer::Connect(const char* ippp)
void CPlayer::restartStats(bool all)
{
if ( all ) memset(weapons,0,sizeof(weapons));
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims));
if ( all ) memset(&weapons,0,sizeof(weapons));
memset(&weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(&attackers,0,sizeof(attackers));
memset(&victims,0,sizeof(victims));
life = {};
}

View File

@ -295,10 +295,10 @@ static cell AMX_NATIVE_CALL cwpn_dmg(AMX *amx, cell *params){ // wid,att,vic,dmg
CPlayer* pAtt = GET_PLAYER_POINTER_I(att);
CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
if ( !pAtt ) pAtt = pVic;
pVic->pEdict->v.dmg_inflictor = NULL;
pAtt->saveHit( pVic , weapon , dmg, aim );
if ( !pAtt ) pAtt = pVic;
int TA = 0;
if ( (pVic->pEdict->v.team == pAtt->pEdict->v.team ) && ( pVic != pAtt) )
TA = 1;

View File

@ -122,7 +122,8 @@ void Client_TSHealth_End(void* mValue){
weapon = 37; // throwing knife
aim = pAttacker ? pAttacker->aiming : 0;
pAttacker->saveHit( mPlayer , weapon , damage, aim );
if (pAttacker)
pAttacker->saveHit( mPlayer , weapon , damage, aim );
}
}
if ( !pAttacker ) pAttacker = mPlayer;

View File

@ -364,10 +364,8 @@ loadSettings(szFilename[])
new AuthData[44];
new Password[32];
while (!feof(File))
while (fgets(File, Text, charsmax(Text)))
{
fgets(File, Text, charsmax(Text));
trim(Text);
// comment

File diff suppressed because it is too large Load Diff

View File

@ -124,10 +124,8 @@ public plugin_precache( )
new fieldNums = 0;
new const voxIdent[] = "vox", fvoxIdent[] = "fvox", barneyIdent[] = "barney", hgruntIdent[] = "hgrunt";
while ( line < MAX_CMDS && ! feof( fp ) ) // Loop till MAX_CMDS or EOF
while ( line < MAX_CMDS && fgets( fp, szText, charsmax(szText) ) ) // Loop till MAX_CMDS or no more file data
{
fgets( fp, szText, charsmax(szText) ); // Store line content
/* Strips newline */
new len = strlen( szText );
if ( len != 0 && szText[len-1] == '^n' ) // len != 0 because if the last line of the file is empty, there's no newline
@ -175,15 +173,7 @@ public plugin_precache( )
}
if ( file_exists( szSound ) )
{
if ( sndExt[1] == 'm')
{
precache_generic( szSound ); // mp3
}
else
{
replace( szSound, charsmax(szSound), "sound/", "" ); // wav, strip the leading sound/ we added for our file_exists check
precache_sound( szSound );
}
precache_generic( szSound );
}
}
line++;

View File

@ -236,9 +236,8 @@ public plugin_precache()
if( fp )
{
new xvarname[32], xvarid
while( !feof(fp) )
while( fgets(fp, buffer, charsmax(buffer)) )
{
fgets(fp, buffer, charsmax(buffer))
trim(buffer)
if( buffer[0] != ';' )
{
@ -257,9 +256,8 @@ public plugin_precache()
if( fp )
{
new szSoundKey[32], szSoundFile[SOUNDFILE_PATH_MAXLEN]
while( !feof(fp) )
while( fgets(fp, buffer, charsmax(buffer)) )
{
fgets(fp, buffer, charsmax(buffer))
trim(buffer)
if( buffer[0] != ';' && parse(buffer, szSoundKey, charsmax(szSoundKey), szSoundFile, charsmax(szSoundFile)) == 2 )
{
@ -379,7 +377,7 @@ precache_sound_custom( const sound[] )
formatex(fullpathsound, charsmax(fullpathsound), "sound/%s.wav", sound)
if( file_exists(fullpathsound) )
{
precache_sound(fullpathsound[6])
precache_generic(fullpathsound)
}
else
{

View File

@ -495,8 +495,10 @@ findAdminsWithMenu(playersList[MAX_PLAYERS], &playersCount, const commandLevel =
get_players(playersList, playersCount, "ch");
for (new i = 0; i < playersCount, (player = playersList[i]); ++i)
for (new i = 0; i < playersCount; ++i)
{
player = playersList[i]
if (player_menu_info(player, menu, newmenu) && newmenu != -1 && newmenu == MenuHandle[player])
{
if (commandLevel == -1 || access(player, commandLevel)) // extra safety
@ -519,8 +521,10 @@ refreshMenus(const commandLevel = 0, const bool:displaySaveMessage = false)
return;
}
for (new i = 0, player; i < playersCount, (player = playersList[i]); ++i)
for (new i = 0, player; i < playersCount; ++i)
{
player = playersList[i]
MenuHandle[player] = displayMenu(player, MenuPosition[player]);
if (displaySaveMessage)
@ -590,9 +594,11 @@ bool:loadSettings(const filename[])
arrayset(RestrictedBotEquipAmmos, '0', charsmax(RestrictedBotEquipAmmos));
arrayset(RestrictedBotWeapons, '0', charsmax(RestrictedBotWeapons));
while (!feof(fp))
while (fgets(fp, lineRead, charsmax(lineRead)))
{
if (fgets(fp, lineRead, charsmax(lineRead)) - trim(lineRead) <= 0)
trim(lineRead)
if (!lineRead[0])
{
continue;
}

View File

@ -14,21 +14,21 @@
#include <amxmodx>
public plugin_precache(){
precache_sound( "misc/impressive.wav")
precache_sound( "misc/headshot.wav")
precache_sound( "misc/multikill.wav")
precache_sound( "misc/doublekill.wav")
precache_sound( "misc/godlike.wav")
precache_sound( "misc/ultrakill.wav")
precache_sound( "misc/killingspree.wav")
precache_sound( "misc/rampage.wav")
precache_sound( "misc/unstoppable.wav")
precache_sound( "misc/monsterkill.wav")
precache_sound( "misc/humiliation.wav")
precache_generic( "sound/misc/impressive.wav")
precache_generic( "sound/misc/headshot.wav")
precache_generic( "sound/misc/multikill.wav")
precache_generic( "sound/misc/doublekill.wav")
precache_generic( "sound/misc/godlike.wav")
precache_generic( "sound/misc/ultrakill.wav")
precache_generic( "sound/misc/killingspree.wav")
precache_generic( "sound/misc/rampage.wav")
precache_generic( "sound/misc/unstoppable.wav")
precache_generic( "sound/misc/monsterkill.wav")
precache_generic( "sound/misc/humiliation.wav")
precache_sound( "misc/takenlead.wav" )
precache_sound( "misc/tiedlead.wav" )
precache_sound( "misc/lostlead.wav" )
precache_generic( "sound/misc/takenlead.wav" )
precache_generic( "sound/misc/tiedlead.wav" )
precache_generic( "sound/misc/lostlead.wav" )
return PLUGIN_CONTINUE
}

View File

@ -14,110 +14,133 @@
#include <amxmodx>
#include <amxmisc>
#define X_POS -1.0
#define Y_POS 0.20
#define HOLD_TIME 12.0
const MAX_MSG_LEN = 384;
const TASK_MSG = 12345;
new Array:g_Values
new Array:g_Messages
new g_MessagesNum
new g_Current
enum _:MessageInfo
{
Message[MAX_MSG_LEN],
R,
G,
B
}
new amx_freq_imessage;
new Array:g_messages;
new g_messagesNum;
new g_hudObject;
new g_current;
new g_hostname[64];
new Float:g_amx_freq_imessage;
new Float:g_amx_imessage_x_pos;
new Float:g_amx_imessage_y_pos;
new Float:g_amx_imessage_holdtime;
new g_amx_imessage_only_dead;
public plugin_init()
{
g_Messages=ArrayCreate(384);
g_Values=ArrayCreate(3);
register_plugin("Info. Messages", AMXX_VERSION_STR, "AMXX Dev Team")
register_dictionary("imessage.txt")
register_dictionary("common.txt")
register_srvcmd("amx_imessage", "setMessage")
amx_freq_imessage=register_cvar("amx_freq_imessage", "10")
register_plugin("Info. Messages", AMXX_VERSION_STR, "AMXX Dev Team");
register_srvcmd("amx_imessage", "setMessage", _, "<message> <color in RRRGGGBBB format>");
register_dictionary("imessage.txt");
register_dictionary("common.txt");
g_messages = ArrayCreate(MessageInfo);
g_hudObject = CreateHudSyncObj();
bind_pcvar_num(create_cvar("amx_imessage_only_dead", "0", _, "Set to 1 to show info messages only to dead clients", true, 0.0, true, 1.0), g_amx_imessage_only_dead);
bind_pcvar_float(create_cvar("amx_freq_imessage", "180", _, "Frequency in seconds of info messages", true, 0.0), g_amx_freq_imessage);
bind_pcvar_float(create_cvar("amx_imessage_x_pos", "-1.0", _, "X position for info messages", true, -1.0, true, 1.0), g_amx_imessage_x_pos);
bind_pcvar_float(create_cvar("amx_imessage_y_pos", "0.2", _, "Y position for info messages", true, -1.0, true, 1.0), g_amx_imessage_y_pos);
bind_pcvar_float(create_cvar("amx_imessage_holdtime", "12.0", _, "Hold time for info messages", true, 0.0), g_amx_imessage_holdtime);
bind_pcvar_string(get_cvar_pointer("hostname"), g_hostname, charsmax(g_hostname));
new lastinfo[8]
get_localinfo("lastinfomsg", lastinfo, charsmax(lastinfo))
g_Current = str_to_num(lastinfo)
set_localinfo("lastinfomsg", "")
new lastinfo[8];
get_localinfo("lastinfomsg", lastinfo, charsmax(lastinfo));
g_current = str_to_num(lastinfo);
set_localinfo("lastinfomsg", "");
}
public infoMessage()
{
if (g_Current >= g_MessagesNum)
g_Current = 0
// No messages, just get out of here
if (g_MessagesNum==0)
if (!g_messagesNum)
{
return;
}
// If the last message is reached, go back to the first one
if (g_current >= g_messagesNum)
{
g_current = 0;
}
new values[3];
new Message[384];
static message[MessageInfo];
ArrayGetArray(g_messages, g_current, message);
replace_stringex(message[Message], charsmax(message[Message]), "%hostname%", g_hostname);
ArrayGetString(g_Messages, g_Current, Message, charsmax(Message));
ArrayGetArray(g_Values, g_Current, values);
set_hudmessage(message[R], message[G], message[B], g_amx_imessage_x_pos, g_amx_imessage_y_pos, 0, 0.5, g_amx_imessage_holdtime, 2.0, 2.0, -1);
if (g_amx_imessage_only_dead)
{
new players[MAX_PLAYERS], pnum;
get_players_ex(players, pnum, GetPlayers_ExcludeAlive);
for (new player, i; i < pnum; i++)
{
player = players[i];
ShowSyncHudMsg(player, g_hudObject, message[Message]);
console_print(player, message[Message]);
}
}
else
{
ShowSyncHudMsg(0, g_hudObject, message[Message]);
console_print(0, message[Message]);
}
new hostname[64];
g_current++;
get_cvar_string("hostname", hostname, charsmax(hostname));
replace(Message, charsmax(Message), "%hostname%", hostname);
set_hudmessage(values[0], values[1], values[2], X_POS, Y_POS, 0, 0.5, HOLD_TIME, 2.0, 2.0, -1);
show_hudmessage(0, "%s", Message);
client_print(0, print_console, "%s", Message);
++g_Current;
new Float:freq_im = get_pcvar_float(amx_freq_imessage);
if (freq_im > 0.0)
set_task(freq_im, "infoMessage", 12345);
if (g_amx_freq_imessage > 0.0)
{
set_task(g_amx_freq_imessage, "infoMessage", TASK_MSG);
}
}
public setMessage()
{
remove_task(TASK_MSG);
new Message[384];
static message[MessageInfo];
read_argv(1, message[Message], charsmax(message[Message]));
replace_string(message[Message], charsmax(message[Message]), "\n", "^n");
new fullcolor[10];
read_argv(2, fullcolor, charsmax(fullcolor));
message[B] = str_to_num(fullcolor[6]);
fullcolor[6] = 0;
message[G] = str_to_num(fullcolor[3]);
fullcolor[3] = 0;
message[R] = str_to_num(fullcolor[0]);
fullcolor[0] = 0;
g_messagesNum++;
ArrayPushArray(g_messages, message);
remove_task(12345)
read_argv(1, Message, charsmax(Message))
if (g_amx_freq_imessage > 0.0)
{
set_task(g_amx_freq_imessage, "infoMessage", TASK_MSG);
}
while (replace(Message, charsmax(Message), "\n", "^n")) {}
new mycol[12]
new vals[3];
read_argv(2, mycol, charsmax(mycol)) // RRRGGGBBB
vals[2] = str_to_num(mycol[6])
mycol[6] = 0
vals[1] = str_to_num(mycol[3])
mycol[3] = 0
vals[0] = str_to_num(mycol[0])
g_MessagesNum++
new Float:freq_im = get_pcvar_float(amx_freq_imessage)
ArrayPushString(g_Messages, Message);
ArrayPushArray(g_Values, vals);
if (freq_im > 0.0)
set_task(freq_im, "infoMessage", 12345)
return PLUGIN_HANDLED
return PLUGIN_HANDLED;
}
public plugin_end()
{
new lastinfo[8]
num_to_str(g_Current, lastinfo, charsmax(lastinfo))
set_localinfo("lastinfomsg", lastinfo)
ArrayDestroy(g_Messages)
ArrayDestroy(g_Values)
}
ArrayDestroy(g_messages);
set_localinfo("lastinfomsg", fmt("%i", g_current));
}

View File

@ -351,6 +351,7 @@ enum
kRenderFxExplode, /* Scale up really big! */
kRenderFxGlowShell, /* Glowing Shell */
kRenderFxClampMinScale, /* Keep this sprite from getting very small (SPRITES only!) */
kRenderFxLightMultiplier, /* CTM !!!CZERO added to tell the studiorender that the value in iuser2 is a lightmultiplier */
};
/**

View File

@ -809,6 +809,13 @@ stock reset_menu(index)
/**
* Calls a function after a specified time has elapsed.
*
* @note The function is called in the following manner if data is passed:
* data[] - Data passed
* id - Task index
*
* @note The function is called in the following manner if no data is passed:
* id - Task index
*
* @param time Time interval to assign
* @param function Function to execute
* @param id Task id to assign

View File

@ -681,10 +681,12 @@ native disable_logevent(handle);
* @param fadeintime Time it takes the message to fully appear (fade-in)
* @param fadeouttime Time it takes the message to fully disappear (fade-out)
* @param channel Channel to use on the client
*
* @param alpha1 Alpha component of hudmessage color
* @param color2[4] Color 2 array {r,g,b,a}
*
* @noreturn
*/
native set_hudmessage(red = 200, green = 100, blue = 0, Float:x = -1.0, Float:y = 0.35, effects = 0, Float:fxtime = 6.0, Float:holdtime = 12.0, Float:fadeintime = 0.1, Float:fadeouttime = 0.2, channel = -1);
native set_hudmessage(red = 200, green = 100, blue = 0, Float:x = -1.0, Float:y = 0.35, effects = 0, Float:fxtime = 6.0, Float:holdtime = 12.0, Float:fadeintime = 0.1, Float:fadeouttime = 0.2, channel = -1, alpha1 = 0, color2[4] = {255, 255, 250, 0});
/**
* Displays a message on the client HUD.
@ -1762,6 +1764,13 @@ native parse_time(const input[], const format[], time = -1);
* @note Please consider using set_task_ex() instead which allows you to
* use named constants for flags instead of letters.
*
* @note The function is called in the following manner if data is passed:
* data[] - Data passed
* id - Task index
*
* @note The function is called in the following manner if no data is passed:
* id - Task index
*
* @param time Time interval to assign
* @param function Function to execute
* @param id Task id to assign
@ -1842,7 +1851,7 @@ native set_user_flags(index, flags = -1, id = 0);
* 0 is actively used. You should not change the value of the second
* parameter from the default.
*
* @param index Client index, 0 to set flags of server
* @param index Client index, 0 to get flags of server
* @param id Flag set id, ranging from 0 to 31
*
* @return Bitflag sum of client's admin flags

View File

@ -519,7 +519,7 @@ native unlink(const filename[], bool:use_valve_fs = false, const valve_path_id[]
*
* @return Handle to the directory, 0 otherwise
*/
native open_dir(dir[], firstfile[], length, &FileType:type = FileType_Unknown, bool:use_valve_fs = false, const valve_path_id[] = "GAME");
native open_dir(const dir[], firstfile[], length, &FileType:type = FileType_Unknown, bool:use_valve_fs = false, const valve_path_id[] = "GAME");
/**
* Reads the next directory entry as a local filename.

View File

@ -228,6 +228,16 @@ native bool:json_free(&JSON:handle);
*/
native json_get_string(const JSON:value, buffer[], maxlen);
/**
* Gets string data length.
*
* @param value JSON handle
*
* @return Length of string data
* @error If passed value is not a valid handle
*/
native json_get_string_len(const JSON:value);
/**
* Gets a number.
*
@ -284,6 +294,17 @@ native JSON:json_array_get_value(const JSON:array, index);
*/
native json_array_get_string(const JSON:array, index, buffer[], maxlen);
/**
* Gets string data length from the array.
*
* @param array Array handle
* @param index Position in the array (starting from 0)
*
* @return Length of string data from the array
* @error If passed handle is not a valid array
*/
native json_array_get_string_len(const JSON:array, index);
/**
* Gets a number from the array.
*
@ -519,6 +540,21 @@ native JSON:json_object_get_value(const JSON:object, const name[], bool:dot_not
*/
native json_object_get_string(const JSON:object, const name[], buffer[], maxlen, bool:dot_not = false);
/**
* Gets string data length from the object.
*
* @note If dot notation is used some values may be inaccessible
* because valid names in JSON can contain dots.
*
* @param object Object handle
* @param name Key name
* @param dot_not True to use dot notation, false to not
*
* @return Length of string data from the object
* @error If passed handle is not a valid object
*/
native json_object_get_string_len(const JSON:object, const name[], bool:dot_not = false);
/**
* Gets a number from the object.
*
@ -775,3 +811,13 @@ native json_serial_to_string(const JSON:value, buffer[], maxlen, bool:pretty = f
* @error If passed handle is not a valid value
*/
native bool:json_serial_to_file(const JSON:value, const file[], bool:pretty = false);
/**
* Sets if slashes should be escaped or not when serializing JSON. By default slashes are escaped.
*
* @note This function sets a global setting and is not thread safe.
*
* @param escape_slashes True to escape slashes, false to not
*/
native json_set_escape_slashes(bool:escape_slashes = true);

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

@ -98,21 +98,21 @@
/** @endsection */
/**
* @brief Creates a new menu object.
* Creates a new menu object.
*
* The handler function should be prototyped as:
* @note The handler function should be prototyped as:
*
* public <function>(id, menu, item)
* id - Client the menu is being acted upon.
* menu - Menu resource identifier.
* item - Item the client selected. If less than 0, the menu was
* cancelled and the item is a status code. menu_display
* should never be called immediately if the item is a status
* code, for re-entrancy reasons.
* id - Client the menu is being acted upon.
* menu - Menu resource identifier.
* item - Item the client selected. If less than 0, the menu was
* cancelled and the item is a status code. menu_display
* should never be called immediately if the item is a status
* code, for re-entrancy reasons.
*
* The handler function should always return PLUGIN_HANDLED to block
* any old menu handlers from potentially feeding on the menu, unless
* that is the desired functionality.
* @note The handler function should always return PLUGIN_HANDLED to block
* any old menu handlers from potentially feeding on the menu, unless
* that is the desired functionality.
*
* @param title Title the menu should use.
* @param handler Name of the handler function. The function will be invoked
@ -127,16 +127,16 @@
native menu_create(const title[], const handler[], bool:ml = false);
/**
* Creates a menu item callback handler.
* Creates a menu item callback handler.
*
* The handler function should be prototyped as:
* @note The handler function should be prototyped as:
*
* public <function>(id, menu, item)
* id - Client index being displayed to.
* menu - Menu resource identifier.
* item - Item being drawn.
* <return> - ITEM_IGNORE to use the default functionality. ITEM_ENABLED to
* explicitly enable or ITEM_DISABLED to explicitly disable.
* id - Client index being displayed to.
* menu - Menu resource identifier.
* item - Item being drawn.
* <return> - ITEM_IGNORE to use the default functionality.
* ITEM_ENABLED to explicitly enable or ITEM_DISABLED to explicitly disable.
*
* @param function Function name.
* @return Menu callback ID.
@ -144,7 +144,7 @@ native menu_create(const title[], const handler[], bool:ml = false);
native menu_makecallback(const function[]);
/**
* Adds an menu to a menu.
* Adds an item to a menu.
*
* @param menu Menu resource identifier.
* @param name Item text to display.
@ -287,11 +287,11 @@ native menu_destroy(menu);
/**
* Returns information about a menu (if any) the client is currently viewing.
*
* If newmenu is valid, then the menu will refer to the menuid associated with
* the title. If newmenu is not valid, and the menu is valid, then the player
* is viewing a menu displayed with show_menu().
* @note If newmenu is valid, then the menu will refer to the menuid associated with
* the title. If newmenu is not valid, and the menu is valid, then the player
* is viewing a menu displayed with show_menu().
*
* Both may be invalid if the player is not viewing a menu.
* @note Both may be invalid if the player is not viewing a menu.
*
* @param id Client index.
* @param menu Variable to store old menu id. If none, then <1 will be
@ -307,8 +307,8 @@ native player_menu_info(id, &menu, &newmenu, &menupage=0);
/**
* Adds a blank line to a menu.
*
* When using slot=1 this might break your menu. To achieve this functionality
* menu_addblank2 should be used.
* @note When using slot=1 this might break your menu. To achieve this functionality
* menu_addblank2 should be used.
*
* @param menu Menu resource identifier.
* @param slot 1 (default) if the line should shift the numbering down.
@ -319,10 +319,10 @@ native player_menu_info(id, &menu, &newmenu, &menupage=0);
native menu_addblank(menu, slot=1);
/**
* Adds a text line to a menu. Only available in amxmodx 1.8.1 and above.
* Adds a text line to a menu.
*
* When using slot=1 this might break your menu. To achieve this functionality
* menu_addtext2 should be used.
* @note When using slot=1 this might break your menu. To achieve this functionality
* menu_addtext2 should be used.
*
* @param menu Menu resource identifier.
* @param text Text to add.
@ -336,11 +336,9 @@ native menu_addtext(menu, const text[], slot=1);
/**
* Adds a blank line to a menu, always shifting the numbering down.
*
* This will add a special item to create a blank line. It will affect the menu
* item count and pagination. These items can be modified later but will ignore
* access and item callback results.
*
* Only available in 1.8.3 and above.
* @note This will add a special item to create a blank line. It will affect the menu
* item count and pagination. These items can be modified later but will ignore
* access and item callback results.
*
* @param menu Menu resource identifier.
*
@ -353,11 +351,9 @@ native menu_addblank2( menu );
/**
* Adds a text line to a menu, always shifting the numbering down.
*
* This will add a special item to create a blank line. It will affect the menu
* item count and pagination. These items can be modified later but will ignore
* access and item callback results.
*
* Only available in 1.8.3 and above.
* @note This will add a special item to create a blank line. It will affect the menu
* item count and pagination. These items can be modified later but will ignore
* access and item callback results.
*
* @param menu Menu resource identifier.
* @param text Text to add.

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

@ -24,6 +24,8 @@ enum
timeunit_hours,
timeunit_days,
timeunit_weeks,
timeunit_months,
timeunit_years,
};
/* Seconds in each time unit */
@ -31,6 +33,8 @@ enum
#define SECONDS_IN_HOUR 3600
#define SECONDS_IN_DAY 86400
#define SECONDS_IN_WEEK 604800
#define SECONDS_IN_MONTH 2592000
#define SECONDS_IN_YEAR 31536000
/**
* Stock by Brad.
@ -39,7 +43,7 @@ enum
*
* @param id The player whose language the length should be translated to
* @param unitCnt The number of time units you want translated into verbose text
* @param type The type of unit (i.e. seconds, minutes, hours, days, weeks) that you are passing in
* @param type The type of unit (i.e. seconds, minutes, hours, days, weeks, months, years) that you are passing in
* @param output The variable you want the verbose text to be placed in
* @param outputLen The length of the output variable
*
@ -50,7 +54,7 @@ stock get_time_length(id, unitCnt, type, output[], outputLen)
if (unitCnt > 0)
{
// determine the number of each time unit there are
new weekCnt = 0, dayCnt = 0, hourCnt = 0, minuteCnt = 0, secondCnt = 0;
new yearCnt = 0, monthCnt = 0, weekCnt = 0, dayCnt = 0, hourCnt = 0, minuteCnt = 0, secondCnt = 0;
switch (type)
{
@ -59,8 +63,16 @@ stock get_time_length(id, unitCnt, type, output[], outputLen)
case timeunit_hours: secondCnt = unitCnt * SECONDS_IN_HOUR;
case timeunit_days: secondCnt = unitCnt * SECONDS_IN_DAY;
case timeunit_weeks: secondCnt = unitCnt * SECONDS_IN_WEEK;
case timeunit_months: secondCnt = unitCnt * SECONDS_IN_MONTH;
case timeunit_years: secondCnt = unitCnt * SECONDS_IN_YEAR;
}
yearCnt = secondCnt / SECONDS_IN_YEAR;
secondCnt -= (yearCnt * SECONDS_IN_YEAR);
monthCnt = secondCnt / SECONDS_IN_MONTH;
secondCnt -= (monthCnt * SECONDS_IN_MONTH);
weekCnt = secondCnt / SECONDS_IN_WEEK;
secondCnt -= (weekCnt * SECONDS_IN_WEEK);
@ -75,8 +87,12 @@ stock get_time_length(id, unitCnt, type, output[], outputLen)
// translate the unit counts into verbose text
new maxElementIdx = -1;
new timeElement[5][33];
new timeElement[7][33];
if (yearCnt > 0)
format(timeElement[++maxElementIdx], charsmax(timeElement[]), "%i %L", yearCnt, id, (yearCnt == 1) ? "TIME_ELEMENT_YEAR" : "TIME_ELEMENT_YEARS");
if (monthCnt > 0)
format(timeElement[++maxElementIdx], charsmax(timeElement[]), "%i %L", monthCnt, id, (monthCnt == 1) ? "TIME_ELEMENT_MONTH" : "TIME_ELEMENT_MONTHS");
if (weekCnt > 0)
format(timeElement[++maxElementIdx], charsmax(timeElement[]), "%i %L", weekCnt, id, (weekCnt == 1) ? "TIME_ELEMENT_WEEK" : "TIME_ELEMENT_WEEKS");
if (dayCnt > 0)
@ -95,6 +111,8 @@ stock get_time_length(id, unitCnt, type, output[], outputLen)
case 2: formatex(output, outputLen, "%s, %s %L %s", timeElement[0], timeElement[1], id, "TIME_ELEMENT_AND", timeElement[2]);
case 3: formatex(output, outputLen, "%s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], id, "TIME_ELEMENT_AND", timeElement[3]);
case 4: formatex(output, outputLen, "%s, %s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], timeElement[3], id, "TIME_ELEMENT_AND", timeElement[4]);
case 5: formatex(output, outputLen, "%s, %s, %s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], timeElement[3], timeElement[4], id, "TIME_ELEMENT_AND", timeElement[5]);
case 6: formatex(output, outputLen, "%s, %s, %s, %s, %s, %s %L %s", timeElement[0], timeElement[1], timeElement[2], timeElement[3], timeElement[4], timeElement[5], id, "TIME_ELEMENT_AND", timeElement[6]);
}
}
}

View File

@ -181,17 +181,17 @@ PRIV_SET = Priviligiite sa nastroeni
NO_ENTRY = Nqmate dostup do servera...
[ro]
LOADED_ADMIN = 1 administrator a fost incarcat din fisier
LOADED_ADMINS = %d administratori au fost incarcati din fisier
SQL_CANT_CON = Eroare SQL: conectare esuata: '%s'
SQL_CANT_LOAD_ADMINS = Eroare SQL: esuare incarcare administratori: '%s'
NO_ADMINS = Nu a fost gasit nici un administrator.
SQL_LOADED_ADMIN = 1 administrator a fost incarcat din baza de date
SQL_LOADED_ADMINS = %d administratori au fost incarcati din baza de date
INV_PAS = Parola invalida!
PAS_ACC = Parola acceptata
PRIV_SET = Privilegii acordate
NO_ENTRY = Acest nume este rezervat pe server.
LOADED_ADMIN = 1 admin a fost încărcat din fișier
LOADED_ADMINS = %d admini au fost încărcați din fișier
SQL_CANT_CON = Eroare SQL: conectare nereușită: '%s'
SQL_CANT_LOAD_ADMINS = Eroare SQL: eșuare încărcare admini: '%s'
NO_ADMINS = Nu a fost găsit niciun admin.
SQL_LOADED_ADMIN = 1 admin a fost încărcat din baza de date
SQL_LOADED_ADMINS = %d admini au fost încărcați din baza de date
INV_PAS = Parolă invalidă!
PAS_ACC = Parolă acceptată
PRIV_SET = Drepturi de acces acordate
NO_ENTRY = Nu aveți permisiunea de a intra pe server...
[hu]
LOADED_ADMIN = 1 admin betöltve a fájlból.
@ -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

@ -182,16 +182,16 @@ PRINT_ALL = (VSICHKI) %s : %s
[ro]
COL_WHITE = alb
COL_RED = rosu
COL_RED = roșu
COL_GREEN = verde
COL_BLUE = albastru
COL_YELLOW = galben
COL_MAGENTA = purpuriu
COL_CYAN = cian
COL_ORANGE = oranj
COL_OCEAN = ocean
COL_MAGENTA = violet
COL_CYAN = bleu
COL_ORANGE = portocaliu
COL_OCEAN = bleumarin
COL_MAROON = maro
PRINT_ALL = (TOTI) %s : %s
PRINT_ALL = (TOȚI) %s : %s
[hu]
COL_WHITE = fehér

View File

@ -9,15 +9,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banned
REASON = reason
FOR_MIN = for %s min
FOR_MIN = for %d min
PERM = permanently
CLIENT_BANNED = Client "%s" banned
ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: slay %s
CLIENT_SLAYED = Client "%s" slayed
CLIENT_SLAYED = Client "%n" slayed
ADMIN_SLAP_1 = ADMIN: slap %s with %d damage
ADMIN_SLAP_2 = ADMIN %s: slap %s with %d damage
CLIENT_SLAPED = Client "%s" slaped with %d damage
CLIENT_SLAPPED = Client "%n" slapped with %d damage
MAP_NOT_FOUND = Map with that name not found or map is invalid
ADMIN_MAP_1 = ADMIN: changelevel %s
ADMIN_MAP_2 = ADMIN %s: changelevel %s
@ -74,6 +74,38 @@ ADMIN_EXTEND_2 = ADMIN %s: extend map for %d minutes
MAP_EXTENDED = Map "%s" has been extended for %d minutes
ADMIN_MUST_TEMPBAN = You can only temporarily ban players, for up to %d minutes
ADMIN_MUST_TEMPUNBAN = You can only unban players that you have recently banned
AMX_KICK_SYNTAX = <name or #userid> [reason]
AMX_BAN_SYNTAX = <name or #userid> <minutes> [reason]
AMX_BANIP_SYNTAX = <name or #userid> <minutes> [reason]
AMX_ADDBAN_SYNTAX = <"authid" or ip> <minutes> [reason]
AMX_UNBAN_SYNTAX = <"authid" or ip>
AMX_SLAY_SYNTAX = <name or #userid>
AMX_SLAP_SYNTAX = <name or #userid> [power]
AMX_LEAVE_SYNTAX = <tag> [tag] [tag] [tag]
AMX_PAUSE_SYNTAX = - pause or unpause the game
AMX_WHO_SYNTAX = - displays who is on server
AMX_CVAR_SYNTAX = <cvar> [value]
AMX_XVAR_SYNTAX = <xvar> [value]
AMX_PLUGINS_SYNTAX = [starting entry]
AMX_MODULES_SYNTAX = - displays loaded modules
AMX_MAP_SYNTAX = <mapname>
AMX_EXTENDMAP_SYNTAX = <number of minutes> - extend map
AMX_CFG_SYNTAX = <filename>
AMX_NICK_SYNTAX = <name or #userid> <new nick>
AMX_LAST_SYNTAX = shows info about the last few disconnected clients
AMX_RCON_SYNTAX = <command line>
ADMIN_KICK_CON = Client "%n" kicked
ADMIN_CANNOT_BAN = Cannot ban %s
ADMIN_BAN_ONLY_RECENT = You may only ban recently disconnected clients. Use "amx_last" to view
ADMIN_IP_ADDED = IP %s added to ban list
ADMIN_AUTHID_ADDED = AuthID %s added to ban list
MODULE_RUNNING = running
MODULE_BAD_LOAD = bad load
MODULE_UNKNOWN = unknown
ADMIN_CFG_CON = Executing file %s
ADMIN_PAUSE_CON = Server PAUSED
ADMIN_UNPAUSE_CON = Server UNPAUSED
ADMIN_OLD_CONNS_SAVED = %d old connections saved
[de]
ADMIN_KICK_1 = ADMIN: kickt %s
@ -91,10 +123,10 @@ PERM = für immer
CLIENT_BANNED = Spieler "%s" gebannt
ADMIN_SLAY_1 = ADMIN: killt %s
ADMIN_SLAY_2 = ADMIN %s: killt %s
CLIENT_SLAYED = Spieler "%s" wurde gekillt
CLIENT_SLAYED = Spieler "%n" wurde gekillt
ADMIN_SLAP_1 = ADMIN: schlägt %s mit %d Schaden
ADMIN_SLAP_2 = ADMIN %s: schlägt %s mit %d Schaden
CLIENT_SLAPED = Spieler "%s" wurde mit %d Schaden geschlagen
CLIENT_SLAPPED = Spieler "%n" wurde mit %d Schaden geschlagen
MAP_NOT_FOUND = Diese Map ist nicht vorhanden oder unzulässig
ADMIN_MAP_1 = ADMIN: wechselt zur Map %s
ADMIN_MAP_2 = ADMIN %s: wechselt zur Map %s
@ -161,15 +193,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banovan
REASON = razlog
FOR_MIN = na %s min
FOR_MIN = na %d min
PERM = za stalno
CLIENT_BANNED = Klijent "%s" je banovan
ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: slay %s
CLIENT_SLAYED = Klijent "%s" slayed
CLIENT_SLAYED = Klijent "%n" slayed
ADMIN_SLAP_1 = ADMIN: samar %s with %d stete
ADMIN_SLAP_2 = ADMIN %s: samar %s with %d stete
CLIENT_SLAPED = Klijent "%s" je osamaren sa %d stete
CLIENT_SLAPPED = Klijent "%n" je osamaren sa %d stete
MAP_NOT_FOUND = Mapa sa tim imenom nije nadjena ili nije vazeca
ADMIN_MAP_1 = ADMIN: changelevel %s
ADMIN_MAP_2 = ADMIN %s: changelevel %s
@ -226,82 +258,79 @@ ADMIN_EXTEND_2 = ADMIN %s: produziti mapu za %d minuta
MAP_EXTENDED = Mapa "%s" je produzena za %d minuta
[tr]
ADMIN_KICK_1 = ADMIN, %s kisisini atti
ADMIN_KICK_2 = ADMIN %s, %s kisisini atti
IP_REMOVED = Ip "%s" ban listesinden kaldirildi
AUTHID_REMOVED = Authid "%s" ban listesinden kaldirildi
ADMIN_UNBAN_1 = ADMIN, %s kisisinin banini kaldirdi
ADMIN_UNBAN_2 = ADMIN %s, %s kisisinin banini kaldirdi
ADMIN_ADDBAN_1 = ADMIN, %s kisisini banladi
ADMIN_ADDBAN_2 = ADMIN %s, %s kisisini banladi
ADMIN_KICK_1 = ADMIN: at %s
ADMIN_KICK_2 = ADMIN %s: at %s
IP_REMOVED = Ip "%s" ban listesinden silindi
AUTHID_REMOVED = Authid "%s" ban listesinden silindi
ADMIN_UNBAN_1 = ADMIN: ban kalkdi %s
ADMIN_UNBAN_2 = ADMIN %s: ban kalkdi %s
ADMIN_ADDBAN_1 = ADMIN: banla %s
ADMIN_ADDBAN_2 = ADMIN %s: banla %s
BANNED = banlandi
REASON = neden
FOR_MIN = %s dakika
PERM = kalici olarak
CLIENT_BANNED = Kullanici "%s" banlandi
ADMIN_SLAY_1 = ADMIN, %s kisisini oldurdu
ADMIN_SLAY_2 = ADMIN %s, %s kisisini oldurdu
CLIENT_SLAYED = Kullanici "%s" olduruldu
ADMIN_SLAP_1 = ADMIN, %s kisisini %d hasarla tokatladi
ADMIN_SLAP_2 = ADMIN %s, %s kisini %d hasarla tokatladi
CLIENT_SLAPED = Kullanici "%s" %d zarar ile tokatlandi
MAP_NOT_FOUND = O isimde bir harita bulunamadi yada harita gecersizdir
ADMIN_MAP_1 = ADMIN, haritayi %s olarak degistirdi
ADMIN_MAP_2 = ADMIN %s, haritayi %s olarak degistirdi
NO_MORE_CVARS = Rcon erisimi icin daha fazla cvar eklenemiyor
REASON = Neden
FOR_MIN = %d dakika ban
PERM = suresiz
CLIENT_BANNED = Oyuncu "%s" banlandi
ADMIN_SLAY_1 = ADMIN: oldurdu %s
ADMIN_SLAY_2 = ADMIN %s: oldurdu %s
CLIENT_SLAYED = Oyuncu "%n" olduruldu
ADMIN_SLAP_1 = ADMIN: %s tokatla verilen zarar %d
ADMIN_SLAP_2 = ADMIN %s: %s tokatla verilen zarar %d
CLIENT_SLAPPED = Oyuncu "%n" tokatlandi %d zarar ile
MAP_NOT_FOUND = Map ismi bulunamadi yada mevcud degildir
ADMIN_MAP_1 = ADMIN: %s mapina degisdirdi
ADMIN_MAP_2 = ADMIN %s: %s mapina degisdirdi
NO_MORE_CVARS = Rcon'a daha cvar ekliyemiyorsunuz!
UNKNOWN_CVAR = Bilinmeyen cvar: %s
UNKNOWN_XVAR = Bilinmeyen xvar: %s
CVAR_NO_ACC = O cvara erisim hakkiniz yok
XVAR_NO_ACC = O xvara erisim hakkiniz yok
CVAR_NO_ACC = O cvar'a giris hakkiniz yok
XVAR_NO_ACC = O xvar'a giris hakkiniz yok
CVAR_IS = Cvar "%s" budur "%s"
XVAR_IS = Xvar "%s" budur "%s"
PROTECTED = KORUMALI
SET_CVAR_TO = %s %s cvarini "%s" olarak degistirdi
SET_XVAR_TO = %s %s xvarini "%s" olarak degistirdi
CVAR_CHANGED = Cvar "%s" "%s" olarak degistirildi
XVAR_CHANGED = Xvar "%s" "%s" olarak degistirildi
LOADED_PLUGINS = Suanda yuklenen eklentiler
PROTECTED = GUVENLI
SET_CVAR_TO = %s cvar ayari %s onaylandi "%s"
SET_XVAR_TO = %s xvar ayari %s onaylandi "%s"
CVAR_CHANGED = Cvar "%s" degisimi "%s" tamamlandi
XVAR_CHANGED = Xvar "%s" degisimi "%s" tamamlandi
LOADED_PLUGINS = Su anki yuklenen Plugin'ler
NAME = isim
VERSION = versiyon
AUTHOR = yaratici
AUTHOR = ureten
FILE = dosya
STATUS = statu
PLUGINS_RUN = %d eklenti, %d tanesi calisiyor
LOADED_MODULES = Suanda yuklenen moduller
NUM_MODULES = %d modul
FILE_NOT_FOUND = "%s" dosyasi bulunamadi
ADMIN_CONF_1 = ADMIN, %s configini gerceklestirdi
ADMIN_CONF_2 = ADMIN %s, %s configini gerceklestirdi
PAUSED = durduruldu
UNPAUSED = devam ettirildi
UNABLE_PAUSE = Server oyunu durdurmak icin musait degildi. Serverde gercek oyuncular gerekli.
STATUS = durum
PLUGINS_RUN = %d plugin, %d calisiyor
LOADED_MODULES = Su anki yuklenen module'ler
NUM_MODULES = %d module'ler
FILE_NOT_FOUND = "%s" Dosya bulunamadi
ADMIN_CONF_1 = ADMIN: %s Config dosyasi acildi
ADMIN_CONF_2 = ADMIN %s: %s Config dosyasi acildi
PAUSED = Gecici olarak durduruldu
UNPAUSED = Tekrar baslatildi
UNABLE_PAUSE = Server gecici olarak durdurulamadi. Serverde gercek oyuncu gerek.
SERVER_PROC = Server devami %s
PAUSING = durduruluyor
UNPAUSING = tekrar baslatiliyor
PAUSING = Gecici olarak durduruldu
UNPAUSING = Tekrar baslatildi
PAUSE = durdur
UNPAUSE = tekrar baslat
COM_SENT_SERVER = Komut satiri "%s" server konsoluna gonderildi
CLIENTS_ON_SERVER = Serverdeki kullanicilar
IMMU = dokunulmazlik
UNPAUSE = baslat
COM_SENT_SERVER = Emir "%s" server consoluna gonderildi
CLIENTS_ON_SERVER = Serverde olan oyuncular
IMMU = dokunulmaz
RESERV = reservasyon
ACCESS = erisim
TOTAL_NUM = Toplam %d
SKIP_MATCH = "%s" atlaniyor ("%s" eslesiyor)
SKIP_IMM = "%s" atlaniyor (dokunulmazlik)
KICK_PL = "%s" atiliyor
YOU_DROPPED = Adminin sadece belirli kullanici gruplarini birakmasindan dolayi dusuruldunuz
KICKED_CLIENTS = %d kullanici atildi
ADMIN_LEAVE_1 = ADMIN, %s %s %s %s kisilerini birakti
ADMIN_LEAVE_2 = ADMIN %s, %s %s %s %s kisilerini birakti
ADMIN_NICK_1 = ADMIN, %s kisinin ismini "%s" olarak degistirdi
ADMIN_NICK_2 = ADMIN %s, %s kisinin ismini "%s" olarak degistirdi
CHANGED_NICK = %s kisinin ismi, "%s" olarak degistirildi
ADMIN_EXTEND_1 = ADMIN, haritayi %d dakika uzatti
ADMIN_EXTEND_2 = ADMIN %s, haritayi %d dakika uzatti
ACCESS = giris
TOTAL_NUM = Tam %d
SKIP_MATCH = "%s" kullanilamiyor (benzeri ise "%s")
SKIP_IMM = "%s" kullanilamiyor (dokunulmazlik)
KICK_PL = "%s" atin
YOU_DROPPED = Sadece ozel gurupa mevcud oldugu icin atildiniz
KICKED_CLIENTS = %d oyuncular atildi
ADMIN_LEAVE_1 = ADMIN: %s %s %s %s gitdi
ADMIN_LEAVE_2 = ADMIN %s: %s %s %s %s gitdi
ADMIN_NICK_1 = ADMIN: %s kisinin ismini buna degisdirdi "%s"
ADMIN_NICK_2 = ADMIN %s: %s kisinin ismini buna degisdirdi "%s"
CHANGED_NICK = %s kisinin nickini buna degisdirdi "%s"
ADMIN_EXTEND_1 = ADMIN: haritayi %d dakika uzatti
ADMIN_EXTEND_2 = ADMIN %s: haritayi %d dakika uzatti
MAP_EXTENDED = Harita "%s" %d dakika uzatildi
ADMIN_MUST_TEMPBAN = Oyunculari sadece gecici olarak banlayabilirsin, %d dakikaya kadar
ADMIN_MUST_TEMPUNBAN = Sadece yakinlarda banladigin oyuncularin banini kaldirabilirsin
[fr]
ADMIN_KICK_1 = ADMIN: kick %s
@ -314,15 +343,15 @@ ADMIN_ADDBAN_1 = ADMIN: banni %s
ADMIN_ADDBAN_2 = ADMIN %s: banni %s
BANNED = a ete banni
REASON = raison
FOR_MIN = pour %s mn
FOR_MIN = pour %d mn
PERM = a vie (permanent)
CLIENT_BANNED = Client "%s" a ete banni
ADMIN_SLAY_1 = ADMIN: foudroie %s
ADMIN_SLAY_2 = ADMIN %s: foudroie %s
CLIENT_SLAYED = Client "%s" a ete foudroye
CLIENT_SLAYED = Client "%n" a ete foudroye
ADMIN_SLAP_1 = ADMIN: frappe %s avec %d points de degat
ADMIN_SLAP_2 = ADMIN %s: frappe %s avec %d points de degat
CLIENT_SLAPED = Client "%s" a ete frappe avec %d points de degat
CLIENT_SLAPPED = Client "%n" a ete frappe avec %d points de degat
MAP_NOT_FOUND = La carte avec ce nom n'a pas ete trouvee, ou le nom n'est pas valide
ADMIN_MAP_1 = ADMIN: a change la carte pour %s
ADMIN_MAP_2 = ADMIN %s: a change la carte pour %s
@ -389,15 +418,15 @@ ADMIN_ADDBAN_1 = ADMIN: bannlys %ss
ADMIN_ADDBAN_2 = ADMIN %s: bannlys %ss
BANNED = bannlyst
REASON = orsak
FOR_MIN = i %s minuter
FOR_MIN = i %d minuter
PERM = permanent
CLIENT_BANNED = Klient "%s" bannlyst
ADMIN_SLAY_1 = ADMIN: slakta %s
ADMIN_SLAY_2 = ADMIN %s: slakta %s
CLIENT_SLAYED = Klient "%s" slaktad
CLIENT_SLAYED = Klient "%n" slaktad
ADMIN_SLAP_1 = ADMIN: smiska %s med %d skada
ADMIN_SLAP_2 = ADMIN %s: smiska %s med %d skada
CLIENT_SLAPED = Klient "%s" smiskad med %d skada
CLIENT_SLAPPED = Klient "%n" smiskad med %d skada
MAP_NOT_FOUND = Kan inte hitta karta med det namnet eller felaktig karta
ADMIN_MAP_1 = ADMIN: byt karta %s
ADMIN_MAP_2 = ADMIN %s: byt karta %s
@ -464,15 +493,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banned
REASON = grund
FOR_MIN = for %s min
FOR_MIN = for %d min
PERM = permanent
CLIENT_BANNED = klient "%s" banned
ADMIN_SLAY_1 = ADMIN: draeb %s
ADMIN_SLAY_2 = ADMIN %s: draeb %s
CLIENT_SLAYED = Klient "%s" draebt
CLIENT_SLAYED = Klient "%n" draebt
ADMIN_SLAP_1 = ADMIN: klaps %s med %d skade
ADMIN_SLAP_2 = ADMIN %s: klaps %s med %d skade
CLIENT_SLAPED = Klient "%s" klapset med %d skade
CLIENT_SLAPPED = Klient "%n" klapset med %d skade
MAP_NOT_FOUND = Bane med det navn blev ikke fundet eller banen er ugyldig
ADMIN_MAP_1 = ADMIN: Skift bane %s
ADMIN_MAP_2 = ADMIN %s: Skift bane %s
@ -539,15 +568,15 @@ ADMIN_ADDBAN_1 = ADMIN: baniu %s
ADMIN_ADDBAN_2 = ADMIN %s: baniu %s
BANNED = banido
REASON = motivo
FOR_MIN = por %s minutos
FOR_MIN = por %d minutos
PERM = permanentemente
CLIENT_BANNED = Cliente "%s" banido
ADMIN_SLAY_1 = ADMIN: matou %s
ADMIN_SLAY_2 = ADMIN %s: matou %s
CLIENT_SLAYED = Cliente "%s" foi morto
CLIENT_SLAYED = Cliente "%n" foi morto
ADMIN_SLAP_1 = ADMIN: deu tapa em %s com dano de %d
ADMIN_SLAP_2 = ADMIN %s: deu tapa em %s com dano de %d
CLIENT_SLAPED = Cliente "%s" levou tapa com dano de %d
CLIENT_SLAPPED = Cliente "%n" levou tapa com dano de %d
MAP_NOT_FOUND = Mapa com nome nao encontrado ou mapa invalido
ADMIN_MAP_1 = ADMIN: mudou para %s
ADMIN_MAP_2 = ADMIN %s: mudou para %s
@ -614,15 +643,15 @@ ADMIN_ADDBAN_1 = Admin zbanowal %s
ADMIN_ADDBAN_2 = Admin %s zbanowal %s
BANNED = zbanowany
REASON = przyczyna
FOR_MIN = na %s min
FOR_MIN = na %d min
PERM = permanentnie
CLIENT_BANNED = Gracz "%s" zbanowany
ADMIN_SLAY_1 = Admin zgladzil %s
ADMIN_SLAY_2 = Admin %s zgladzil %s
CLIENT_SLAYED = Gracz "%s" zgladzony
CLIENT_SLAYED = Gracz "%n" zgladzony
ADMIN_SLAP_1 = Admin uderzyl %s zadajac %d obrazen
ADMIN_SLAP_2 = Admin %s uderzyl %s zadajac %d obrazen
CLIENT_SLAPED = Gracz "%s" zostal uderzony z sila %d obrazen
CLIENT_SLAPPED = Gracz "%n" zostal uderzony z sila %d obrazen
MAP_NOT_FOUND = Nie ma takiej mapy!
ADMIN_MAP_1 = Admin zmienia mape na %s
ADMIN_MAP_2 = Admin %s zmienia mape na %s
@ -689,15 +718,15 @@ ADMIN_ADDBAN_1 = ADMIN: verban %s
ADMIN_ADDBAN_2 = ADMIN %s: verban %s
BANNED = verbannen
REASON = reden
FOR_MIN = voor %s minuten
FOR_MIN = voor %d minuten
PERM = permanent
CLIENT_BANNED = Speler "%s" verbannen
ADMIN_SLAY_1 = ADMIN: slacht %s
ADMIN_SLAY_2 = ADMIN %s: slacht %s
CLIENT_SLAYED = Speler "%s" geslacht
CLIENT_SLAYED = Speler "%n" geslacht
ADMIN_SLAP_1 = ADMIN: slaat %s met %d schade
ADMIN_SLAP_2 = ADMIN %s: slaat %s met %d schade
CLIENT_SLAPED = Speler "%s" geslagen met %d schade
CLIENT_SLAPPED = Speler "%n" geslagen met %d schade
MAP_NOT_FOUND = Map met die naam niet gevonden of de map is ongeldig
ADMIN_MAP_1 = ADMIN: verander map naar %s
ADMIN_MAP_2 = ADMIN %s: verander map naar %s
@ -764,15 +793,15 @@ ADMIN_ADDBAN_1 = ADMIN: %s baneado
ADMIN_ADDBAN_2 = ADMIN %s: %s baneado
BANNED = baneado
REASON = motivo
FOR_MIN = por %s minutos
FOR_MIN = por %d minutos
PERM = permanentemente
CLIENT_BANNED = El cliente "%s" ha sido baneado
ADMIN_SLAY_1 = ADMIN: %s asesinado
ADMIN_SLAY_2 = ADMIN %s: %s asesinado
CLIENT_SLAYED = El cliente "%s" ha sido asesinado
CLIENT_SLAYED = El cliente "%n" ha sido asesinado
ADMIN_SLAP_1 = ADMIN: %s ha sido bofeteado con %d de danyo
ADMIN_SLAP_2 = ADMIN %s: %s ha sido bofeteado con %d de danyo
CLIENT_SLAPED = Has pegado al cliente "%s" con %d de danyo
CLIENT_SLAPPED = Has pegado al cliente "%n" con %d de danyo
MAP_NOT_FOUND = No se encontro ningun mapa con ese nombre o el mapa es invalido
ADMIN_MAP_1 = ADMIN: cambiando a %s
ADMIN_MAP_2 = ADMIN %s: cambiando a %s
@ -839,15 +868,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = zabanovan
REASON = duvod
FOR_MIN = na %s minut
FOR_MIN = na %d minut
PERM = permanentne
CLIENT_BANNED = Klient "%s" zabanovan
ADMIN_SLAY_1 = ADMIN: zabil %s
ADMIN_SLAY_2 = ADMIN %s: zabili %s
CLIENT_SLAYED = Klient "%s" byl zabit
CLIENT_SLAYED = Klient "%n" byl zabit
ADMIN_SLAP_1 = ADMIN: placnul %s za %d damage
ADMIN_SLAP_2 = ADMIN %s: placnul %s za %d damage
CLIENT_SLAPED = Klient "%s" dostal facku za %d damage
CLIENT_SLAPPED = Klient "%n" dostal facku za %d damage
MAP_NOT_FOUND = Mapa s takovym jmenem nenalezena
ADMIN_MAP_1 = ADMIN: zmenil level na %s
ADMIN_MAP_2 = ADMIN %s: zmenili level na %s
@ -914,15 +943,15 @@ ADMIN_ADDBAN_1 = ADMIN: bannasi %s
ADMIN_ADDBAN_2 = ADMIN %s: bannasi %s
BANNED = bannittu
REASON = syy
FOR_MIN = %s minuutiksi
FOR_MIN = %d minuutiksi
PERM = pysyvasti
CLIENT_BANNED = Clinu "%s" bannattiin
ADMIN_SLAY_1 = ADMIN: slayasi %s
ADMIN_SLAY_2 = ADMIN %s: slayasi %s
CLIENT_SLAYED = Client "%s" slayattiin
CLIENT_SLAYED = Client "%n" slayattiin
ADMIN_SLAP_1 = ADMIN: slappasi %s %d damagella
ADMIN_SLAP_2 = ADMIN %s: slappasi %s %d damagella
CLIENT_SLAPED = Client "%s" slapattiin %d damagella
CLIENT_SLAPPED = Client "%n" slapattiin %d damagella
MAP_NOT_FOUND = Mappia ei loytynyt tai nimi on vaarin
ADMIN_MAP_1 = ADMIN: vaihtoi mapin: %s
ADMIN_MAP_2 = ADMIN %s: vaihtoi mapin: %s
@ -988,15 +1017,15 @@ ADMIN_UNBAN_2 = ADMINISTRATOR %s: unbanna %s
ADMIN_ADDBAN_1 = ADMINISTRATOR: banna %s
ADMIN_ADDBAN_2 = ADMINISTRATOR %s: banna %s
BANNED = banna
FOR_MIN = za %s minuti
FOR_MIN = za %d minuti
PERM = zavinagi
CLIENT_BANNED = Igrachut "%s" e bannat
ADMIN_SLAY_1 = ADMINISTRATOR: slayna %s
ADMIN_SLAY_2 = ADMINISTRATOR %s: slayna %s
CLIENT_SLAYED = Igrachut "%s" e slaynat
CLIENT_SLAYED = Igrachut "%n" e slaynat
ADMIN_SLAP_1 = ADMINISTRATOR: slapna %s s %d shteta
ADMIN_SLAP_2 = ADMINISTRATOR %s: slapna %s s %d shteta
CLIENT_SLAPED = Igrachut "%s" e slapnat s %d shteta
CLIENT_SLAPPED = Igrachut "%n" e slapnat s %d shteta
MAP_NOT_FOUND = Karta s tova ime ne e namerena ili nevalidna
ADMIN_MAP_1 = ADMINISTRATOR: smeni kartata na %s
ADMIN_MAP_2 = ADMINISTRATOR %s: smeni kartata na %s
@ -1063,15 +1092,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banat
REASON = motiv
FOR_MIN = pentru %s min
FOR_MIN = pentru %d min
PERM = permanent
CLIENT_BANNED = Jucatorul "%s" a primit ban
ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: slay %s
CLIENT_SLAYED = Jucatorul "%s" a primit slay
CLIENT_SLAYED = Jucatorul "%n" a primit slay
ADMIN_SLAP_1 = ADMIN: slap %s cu %d dmg
ADMIN_SLAP_2 = ADMIN %s: slap %s cu %d dmg
CLIENT_SLAPED = Jucatorul "%s" a primit slap %d dmg
CLIENT_SLAPPED = Jucatorul "%n" a primit slap %d dmg
MAP_NOT_FOUND = Harta cu acel nume nu a fost gasita sau este invalida
ADMIN_MAP_1 = ADMIN: schimbare harta pe %s
ADMIN_MAP_2 = ADMIN %s: schimbare harta pe %s
@ -1126,42 +1155,76 @@ CHANGED_NICK = Numele %s a fost schimbat cu "%s"
ADMIN_EXTEND_1 = ADMIN: extinde harta pentru %d minute
ADMIN_EXTEND_2 = ADMIN %s: extinde harta pentru %d minute
MAP_EXTENDED = Harta "%s" a fost extinsa pentru %d minute
ADMIN_MUST_TEMPBAN = Poți interzice jucători doar temporar, cel mult %d minute
ADMIN_MUST_TEMPUNBAN = Doar jucătorii recent interziși de tine pot fi scoși din listă
AMX_KICK_SYNTAX = <nume sau #userid> [motiv]
AMX_BAN_SYNTAX = <nume sau #userid> <minute> [motiv]
AMX_BANIP_SYNTAX = <nume sau #userid> <minute> [motiv]
AMX_ADDBAN_SYNTAX = <"authid" sau ip> <minute> [motiv]
AMX_UNBAN_SYNTAX = <"authid" sau ip>
AMX_SLAY_SYNTAX = <nume sau #userid>
AMX_SLAP_SYNTAX = <nume sau #userid> [putere]
AMX_LEAVE_SYNTAX = <etichetă> [etichetă] [etichetă] [etichetă]
AMX_PAUSE_SYNTAX = — pune jocul pe pauză sau invers
AMX_WHO_SYNTAX = — afișează jucătorii conectați
AMX_CVAR_SYNTAX = <cvar> [valoare]
AMX_XVAR_SYNTAX = <xvar> [valoare]
AMX_PLUGINS_SYNTAX = [intrare]
AMX_MODULES_SYNTAX = — afișează extensiile atașate
AMX_MAP_SYNTAX = <numele hărții>
AMX_EXTENDMAP_SYNTAX = <minute> — extinde harta curentă
AMX_CFG_SYNTAX = <numele fișierului cfg>
AMX_NICK_SYNTAX = <nume sau #userid> <poreclă nouă>
AMX_LAST_SYNTAX = afișează detalii privind ultimii jucători deconectați
AMX_RCON_SYNTAX = <linie de comandă>
ADMIN_KICK_CON = Jucătorul "%n" a fost deconectat
ADMIN_CANNOT_BAN = %s nu poate fi interzis
ADMIN_BAN_ONLY_RECENT = Poți interzice doar jucători recent deconectați — amx_last
ADMIN_IP_ADDED = %s a fost interzis
ADMIN_AUTHID_ADDED = %s a fost interzis
MODULE_RUNNING = rulează
MODULE_BAD_LOAD = neatașat
MODULE_UNKNOWN = necunoscut
ADMIN_CFG_CON = %s a fost executat
ADMIN_PAUSE_CON = Pauza a început
ADMIN_UNPAUSE_CON = Pauza s-a terminat
ADMIN_OLD_CONNS_SAVED = %d conexiuni salvate
[hu]
ADMIN_KICK_1 = ADMIN: %s kirúgva
ADMIN_KICK_2 = ADMIN %s: %s kirúgva
IP_REMOVED = IP "%s" eltávolítva a banlistáról
AUTHID_REMOVED = Authid "%s" eltávolítva a banlistáról
IP_REMOVED = IP "%s" eltávolítva a ban-listárol
AUTHID_REMOVED = Authid "%s" eltávolítva a ban-listáról
ADMIN_UNBAN_1 = ADMIN: %s ban visszavonva
ADMIN_UNBAN_2 = ADMIN %s: %s ban visszavonva
ADMIN_ADDBAN_1 = ADMIN: bannolta %s játékost
ADMIN_ADDBAN_2 = ADMIN %s: bannolta %s játékost
ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = Bannolva
REASON = Indok
FOR_MIN = %s percre
FOR_MIN = %d percre
PERM = örökre
CLIENT_BANNED = felhasználó "%s" bannolva
ADMIN_SLAY_1 = ADMIN: %s megölve
ADMIN_SLAY_2 = ADMIN %s: %s megölve
CLIENT_SLAYED = "%s" játékos megölve
CLIENT_SLAYED = "%n" játékos megölve
ADMIN_SLAP_1 = ADMIN: %s megütve %d sebzéssel
ADMIN_SLAP_2 = ADMIN %s: %s megütve %d sebzéssel
CLIENT_SLAPED = "%s" játékos megütve %d sebzéssel
ADMIN_SLAP_2 = ADMIN %s: megütve %s %d sebzéssel
CLIENT_SLAPPED = "%n" 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
ADMIN_MAP_2 = ADMIN %s: pályaváltás %s
NO_MORE_CVARS = Nem lehet több cvart hozzáadni az rcon hozzáféréshez!
UNKNOWN_CVAR = Ismeretlen cvar: %s
UNKNOWN_XVAR = Ismeretlen xvar: %s
CVAR_NO_ACC = Nincs engedélyed a cvarhoz
XVAR_NO_ACC = Nincs engedélyed az xvarhoz
CVAR_NO_ACC = Nincs engedélyed a cvar-hoz
XVAR_NO_ACC = Nincs engedélyed a xvar-hoz
CVAR_IS = Cvar "%s" jelenleg "%s"
XVAR_IS = Xvar "%s" jelenleg "%s"
PROTECTED = Védett
SET_CVAR_TO = %s cvar átállítva: %s -> "%s"
SET_XVAR_TO = %s xvar átállítva: %s -> "%s"
CVAR_CHANGED = Cvar "%s" átállítva "%s" értékre.
XVAR_CHANGED = Xvar "%s" átállítva "%s" értékre.
SET_CVAR_TO = %s beállítva cvar %s -> "%s"
SET_XVAR_TO = %s beállítva xvar %s -> "%s"
CVAR_CHANGED = Cvar "%s" átállítva "%s"-ra.
XVAR_CHANGED = Xvar "%s" átállítva "%s"-ra.
LOADED_PLUGINS = Jelenleg betöltött pluginok
NAME = Név
VERSION = Verzió
@ -1194,11 +1257,11 @@ YOU_DROPPED = Le lettél csatlakoztatva, mert az admin csak bizonyos csapat tagj
KICKED_CLIENTS = kirúgva %d felhasználó
ADMIN_LEAVE_1 = ADMIN: ledobta %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: ledobta %s %s %s %s
ADMIN_NICK_1 = ADMIN: %s nevét átírta, mostantól a neve "%s"
ADMIN_NICK_2 = ADMIN %s: %s nevét átírta, mostantól a neve "%s"
CHANGED_NICK = %s neve mostantól: "%s"
ADMIN_EXTEND_1 = ADMIN: Pálya hosszabbítása %d perccel
ADMIN_EXTEND_2 = ADMIN %s: Pálya hosszabbítása %d perccel
ADMIN_NICK_1 = ADMIN: névváltás %s-ról "%s"-ra
ADMIN_NICK_2 = ADMIN %s: nevváltás %s-ról "%s"ra
CHANGED_NICK = Névváltás %s-ról "%s"ra
ADMIN_EXTEND_1 = ADMIN: Páya hosszabbítása %d perccel
ADMIN_EXTEND_2 = ADMIN %s: Páya hosszabbítása %d perccel
MAP_EXTENDED = %s pálya meghosszabbítva %d perccel
ADMIN_MUST_TEMPBAN = Csak időhöz kötött bant tudsz kiosztani, maximum %d percet
ADMIN_MUST_TEMPUNBAN = Csak a nemrég általad bannolt játékosokat oldhatod fel
@ -1213,15 +1276,15 @@ ADMIN_UNBAN_2 = ADMINAS %s: atbanino %s
ADMIN_ADDBAN_1 = ADMINAS: isbanino %s
ADMIN_ADDBAN_2 = ADMINAS %s: isbanino %s
BANNED = isbanintas
FOR_MIN = %s minutem
FOR_MIN = %d minutem
PERM = visam laikui
CLIENT_BANNED = Klientas "%s" isbanintas
ADMIN_SLAY_1 = ADMINAS: slayna %s
ADMIN_SLAY_2 = ADMINAS %s: slayna %s
CLIENT_SLAYED = Klientas "%s" nuzudytas
CLIENT_SLAYED = Klientas "%n" nuzudytas
ADMIN_SLAP_1 = ADMINAS: slapina %s su %d zala
ADMIN_SLAP_2 = ADMINAS %s: slapina %s su %d zala
CLIENT_SLAPED = Klientas "%s" nuslapintas su %d zala
CLIENT_SLAPPED = Klientas "%n" nuslapintas su %d zala
MAP_NOT_FOUND = Zemelapis siuo pavadinimu nerastas.
ADMIN_MAP_1 = ADMINAS: keicia mapa i %s
ADMIN_MAP_2 = ADMINAS %s: keicia mapa i %s
@ -1288,15 +1351,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = zabanovany
REASON = pricina
FOR_MIN = na %s minut
FOR_MIN = na %d minut
PERM = permanentne
CLIENT_BANNED = Hrac "%s" zabanovany
ADMIN_SLAY_1 = ADMIN: zabil %s
ADMIN_SLAY_2 = ADMIN %s: zabili %s
CLIENT_SLAYED = Hrac menom "%s" bol zabity
CLIENT_SLAYED = Hrac menom "%n" bol zabity
ADMIN_SLAP_1 = ADMIN: placnul %s o sile %d damage
ADMIN_SLAP_2 = ADMIN %s: placnul %s o sile %d damage
CLIENT_SLAPED = Hrac menom "%s" dostal facku o sile %d damage
CLIENT_SLAPPED = Hrac menom "%n" dostal facku o sile %d damage
MAP_NOT_FOUND = Mapa s t<>mto menom nenajdena
ADMIN_MAP_1 = ADMIN: zmenil mapu na %s
ADMIN_MAP_2 = ADMIN %s: zmenili mapu na %s
@ -1363,15 +1426,15 @@ ADMIN_ADDBAN_1 = ADMIN: banira %s
ADMIN_ADDBAN_2 = ADMIN %s: banira %s
BANNED = baniran
REASON = prichina
FOR_MIN = za %s min
FOR_MIN = za %d min
PERM = zasekogash
CLIENT_BANNED = Igrachot "%s" e baniran
ADMIN_SLAY_1 = ADMIN: slayna %s
ADMIN_SLAY_2 = ADMIN %s: slayna %s
CLIENT_SLAYED = Igrachot "%s" beshe slaynat
CLIENT_SLAYED = Igrachot "%n" beshe slaynat
ADMIN_SLAP_1 = ADMIN: mu udri shamar na %s so %d shteta
ADMIN_SLAP_2 = ADMIN %s: mu udri shamar na %s so %d shteta
CLIENT_SLAPED = Igrachot "%s" e nashamaran so %d shteta
CLIENT_SLAPPED = Igrachot "%n" e nashamaran so %d shteta
MAP_NOT_FOUND = Mapa so toa ime ne e pronajdena ili ne postoi
ADMIN_MAP_1 = ADMIN: ja smeni mapata na %s
ADMIN_MAP_2 = ADMIN %s: ja smeni mapata na %s
@ -1426,6 +1489,40 @@ CHANGED_NICK = Smeneto e imeto na %s na "%s"
ADMIN_EXTEND_1 = ADMIN: ja prodolzhi mapata za %d minuti
ADMIN_EXTEND_2 = ADMIN %s: ja prodolzhi mapata za %d minuti
MAP_EXTENDED = Mapata "%s" e prodolzhena za %d minuti
ADMIN_MUST_TEMPBAN = Mozhete samo privremeno da banirate igrachi do %d minuti
ADMIN_MUST_TEMPUNBAN = Mozhete da unbanirate samo igrachi koi skoro ste gi banirale
AMX_KICK_SYNTAX = <ime ili #userid> [prichina]
AMX_BAN_SYNTAX = <ime ili #userid> <minutes> [prichina]
AMX_BANIP_SYNTAX = <ime ili #userid> <minutes> [prichina]
AMX_ADDBAN_SYNTAX = <"authid" ili ip> <minutes> [prichina]
AMX_UNBAN_SYNTAX = <"authid" ili ip>
AMX_SLAY_SYNTAX = <ime ili #userid>
AMX_SLAP_SYNTAX = <ime ili #userid> [sila]
AMX_LEAVE_SYNTAX = <tag> [tag] [tag] [tag]
AMX_PAUSE_SYNTAX = - ja pauzira ili unpauzira igrata
AMX_WHO_SYNTAX = - spisok so igrachi vo serverot
AMX_CVAR_SYNTAX = <cvar> [vrednost]
AMX_XVAR_SYNTAX = <xvar> [vrednost]
AMX_PLUGINS_SYNTAX = [pocheten plugin]
AMX_MODULES_SYNTAX = - gi prikazhuva vchitanite moduli
AMX_MAP_SYNTAX = <ime na mapa>
AMX_EXTENDMAP_SYNTAX = <broj na minuti>
AMX_CFG_SYNTAX = <ime na fajl>
AMX_NICK_SYNTAX = <ime ili #userid> <novo ime>
AMX_LAST_SYNTAX = pokazhuva informacija za poslednite nekolku diskonektirani igrachi
AMX_RCON_SYNTAX = <komanda>
ADMIN_KICK_CON = Igrachot "%n" e kiknat
ADMIN_CANNOT_BAN = Ne mozhete da go banirate %s
ADMIN_BAN_ONLY_RECENT = Mozhete da banirate samo igrachi koi skoro go napushtile serverot. Napishete "amx_last" za da go vidite spisokot
ADMIN_IP_ADDED = IP %s e dodadeno vo ban listata
ADMIN_AUTHID_ADDED = AuthID %s e dodadeno vo ban listata
MODULE_RUNNING = vkluchen
MODULE_BAD_LOAD = greshka
MODULE_UNKNOWN = nepoznato
ADMIN_CFG_CON = Fajlot %s se izvrshuva
ADMIN_PAUSE_CON = Serverot e PAUZIRAN
ADMIN_UNPAUSE_CON = Serverot e UNPAUZIRAN
ADMIN_OLD_CONNS_SAVED = %d stari konekcii se zashtiteni
[hr]
ADMIN_KICK_1 = ADMIN: kickao %s
@ -1437,15 +1534,15 @@ ADMIN_UNBAN_2 = ADMIN %s: odban %s
ADMIN_ADDBAN_1 = ADMIN: banao %s
ADMIN_ADDBAN_2 = ADMIN %s: banao %s
BANNED = banan
FOR_MIN = na %s min
FOR_MIN = na %d min
PERM = za stalno
CLIENT_BANNED = Klijent "%s" je banan
ADMIN_SLAY_1 = ADMIN: slayao %s
ADMIN_SLAY_2 = ADMIN %s: slayao %s
CLIENT_SLAYED = Klijent "%s" slayan
CLIENT_SLAYED = Klijent "%n" slayan
ADMIN_SLAP_1 = ADMIN: samar %s sa %d stete
ADMIN_SLAP_2 = ADMIN %s: samar %s sa %d stete
CLIENT_SLAPED = Klijent "%s" je osamaren sa %d stete
CLIENT_SLAPPED = Klijent "%n" je osamaren sa %d stete
MAP_NOT_FOUND = Mapa sa tim imenom nije nadjena ili nije vazeca
ADMIN_MAP_1 = ADMIN: promjena mape na %s
ADMIN_MAP_2 = ADMIN %s: mjenja mapu na %s
@ -1511,15 +1608,15 @@ ADMIN_UNBAN_2 = ADMIN %s: unban %s
ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banovan
FOR_MIN = na %s min
FOR_MIN = na %d min
PERM = za stalno
CLIENT_BANNED = Klijent "%s" je banovan
ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: slay %s
CLIENT_SLAYED = Klijent "%s" slayed
CLIENT_SLAYED = Klijent "%n" slayed
ADMIN_SLAP_1 = ADMIN: samar %s with %d stete
ADMIN_SLAP_2 = ADMIN %s: samar %s with %d stete
CLIENT_SLAPED = Klijent "%s" je osamaren sa %d stete
CLIENT_SLAPPED = Klijent "%n" je osamaren sa %d stete
MAP_NOT_FOUND = Mapa sa tim imenom nije nadjena ili nije vazeca
ADMIN_MAP_1 = ADMIN: changelevel %s
ADMIN_MAP_2 = ADMIN %s: changelevel %s
@ -1586,15 +1683,15 @@ ADMIN_ADDBAN_1 = АДМИНИСТРАТОР: забанил %s
ADMIN_ADDBAN_2 = АДМИНИСТРАТОР %s: забанил %s
BANNED = забанен
REASON = причина
FOR_MIN = на %s минут
FOR_MIN = на %d минут
PERM = навсегда
CLIENT_BANNED = Игрок "%s" забанен
ADMIN_SLAY_1 = АДМИНИСТРАТОР: убил %s
ADMIN_SLAY_2 = АДМИНИСТРАТОР %s: убил %s
CLIENT_SLAYED = Игрок "%s" убит
CLIENT_SLAYED = Игрок "%n" убит
ADMIN_SLAP_1 = АДМИНИСТРАТОР: стукнул %s на %d HP
ADMIN_SLAP_2 = АДМИНИСТРАТОР %s: стукнул %s на %d HP
CLIENT_SLAPED = Игрок "%s" стукнут на %d HP
CLIENT_SLAPPED = Игрок "%n" стукнут на %d HP
MAP_NOT_FOUND = Карта не найдена или не существует
ADMIN_MAP_1 = АДМИНИСТРАТОР: сменил карту на %s
ADMIN_MAP_2 = АДМИНИСТРАТОР %s: сменил карту на %s
@ -1661,15 +1758,15 @@ ADMIN_ADDBAN_1 = 管理员: 封禁 %s
ADMIN_ADDBAN_2 = 管理员 %s: 封禁 %s
BANNED = 封禁
REASON = 原因
FOR_MIN = %s 分钟
FOR_MIN = %d 分钟
PERM = 永久
CLIENT_BANNED = 玩家 "%s" 被封禁
ADMIN_SLAY_1 = 管理员: 处死 %s
ADMIN_SLAY_2 = 管理员 %s: 处死 %s
CLIENT_SLAYED = 玩家 "%s" 被处死
CLIENT_SLAYED = 玩家 "%n" 被处死
ADMIN_SLAP_1 = 管理员: 给予玩家 %s %d 点伤害
ADMIN_SLAP_2 = 管理员 %s: 给予玩家 %s %d 点伤害
CLIENT_SLAPED = 玩家 "%s" 受到 %d 点伤害
CLIENT_SLAPPED = 玩家 "%n" 受到 %d 点伤害
MAP_NOT_FOUND = 无法找到该地图或者该地图无效
ADMIN_MAP_1 = 管理员: 更换地图为 %s
ADMIN_MAP_2 = 管理员 %s: 更换地图为 %s
@ -1723,158 +1820,4 @@ ADMIN_NICK_2 = 管理员 %s: 改变 %s 的昵称为 "%s"
CHANGED_NICK = 改变 %s 的昵称为 "%s"
ADMIN_EXTEND_1 = 管理员: 将地图时间延长 %d 分钟
ADMIN_EXTEND_2 = 管理员 %s: 将地图时间延长 %d 分钟
MAP_EXTENDED = "%s" 该地图已经被延长 %d 分钟
[al]
ADMIN_KICK_1 = ADMIN: largoi %s
ADMIN_KICK_2 = ADMIN %s: largoi %s
IP_REMOVED = IP "%s" u fshi nga lista dënimit
AUTHID_REMOVED = Authid "%s" u fshi nga lista ndalimit
ADMIN_UNBAN_1 = ADMIN: i fshiu dënimin %s
ADMIN_UNBAN_2 = ADMIN %s: fshiu dënimin %s
ADMIN_ADDBAN_1 = ADMIN: dënoj %s
ADMIN_ADDBAN_2 = ADMIN %s: dënoj %s
BANNED = dënoj
REASON = arsyeja
FOR_MIN = për %s min
PERM = përgjithëmon
CLIENT_BANNED = Lojtari "%s" morri dënim në server
ADMIN_SLAY_1 = ADMIN: vrau %s
ADMIN_SLAY_2 = ADMIN %s: vrau %s
CLIENT_SLAYED = Lojtari "%s" u vra
ADMIN_SLAP_1 = ADMIN: ndëshkoi %s me %d dëmtime
ADMIN_SLAP_2 = ADMIN %s: ndëshkoi %s me %d dëmtime
CLIENT_SLAPED = Lojtari "%s" mori ndëshkim me %d dëmtime
MAP_NOT_FOUND = Harta me atë emër nuk u gjetë ose është e pavlefshme
ADMIN_MAP_1 = ADMIN: ndryshoi hartën në %s
ADMIN_MAP_2 = ADMIN %s: ndryshoi hartën në %s
NO_MORE_CVARS = Nuk mund të shtoni cvars për rcon!
UNKNOWN_CVAR = Cvar Panjohur: %s
UNKNOWN_XVAR = Cvar Panjohur: %s
CVAR_NO_ACC = Ju nuk keni qasje në këtë cvar
XVAR_NO_ACC = Ju nuk keni qasje në këtë cvar
CVAR_IS = Cvar "%s" është "%s"
XVAR_IS = Xvar "%s" është "%s"
PROTECTED = MBROJTUR
SET_CVAR_TO = %s vendosi cvar %s në "%s"
SET_XVAR_TO = %s vendosi cvar %s në "%s"
CVAR_CHANGED = Cvar "%s" ndryshoi në "%s"
XVAR_CHANGED = Xvar "%s" ndryshoi në "%s"
LOADED_PLUGINS = Pluginat e ngarkuar aktualë
NAME = emri
VERSION = verzioni
AUTHOR = autori
FILE = skedari
STATUS = statusi
PLUGINS_RUN = %d plugins, %d duke punuar
LOADED_MODULES = Modulet e ngarkuar aktuale
NUM_MODULES = %d modules
FILE_NOT_FOUND = Skedari "%s" nuk u gjetë
ADMIN_CONF_1 = ADMIN: ekzekutoj konfigurimet %s
ADMIN_CONF_2 = ADMIN %s: ekzekutoj konfigurimet %s
PAUSED = pushim
UNPAUSED = rikthim
UNABLE_PAUSE = Serveri nuk ishte në gjendje të ndalte lojën. Lojtarët e vërtetë në server janë të nevojshëm.
SERVER_PROC = Serveri vazhdon %s
PAUSING = pushuar
UNPAUSING = rikthyer
PAUSE = pusho
UNPAUSE = rikthe
COM_SENT_SERVER = Komandat e rreshtit "%s" dërgoi në server në konsole
CLIENTS_ON_SERVER = Lojtarët në server
IMMU = imunitet
RESERV = res
ACCESS = qasje
TOTAL_NUM = Totali %d
SKIP_MATCH = Anashkaloi "%s" (koordinim "%s")
SKIP_IMM = Anashkaloi "%s" (imunitet)
KICK_PL = Largoi "%s"
YOU_DROPPED = Ju jeni larguar sepse administratori ka lënë vetëm grupin e caktuar të lojtarëve
KICKED_CLIENTS = Largoi %d lojtarët
ADMIN_LEAVE_1 = ADMIN: largoi %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: largoi %s %s %s %s
ADMIN_NICK_1 = ADMIN: i ndryshoi emrin prej %s në "%s"
ADMIN_NICK_2 = ADMIN %s: i ndryshoi emrin prej %s në "%s"
CHANGED_NICK = Ndryshoi emrin prej %s në "%s"
ADMIN_EXTEND_1 = ADMIN: vazhdojë hartën për %d minuta
ADMIN_EXTEND_2 = ADMIN %s: vazhdojë hartën për %d minuta
MAP_EXTENDED = Harta "%s" është vazhduar për %d minuta
ADMIN_MUST_TEMPBAN = Ju mund të ndaloni lojtarët përkohësisht, deri në %d minuta
ADMIN_MUST_TEMPUNBAN = Ju vetem mund të zhbllokoni lojtarët që keni ndaluar kohët e fundit
[pt]
ADMIN_KICK_1 = ADMIN: expulsou %s
ADMIN_KICK_2 = ADMIN %s: expulsou %s
IP_REMOVED = O IP "%s" foi removido da lista de bans
AUTHID_REMOVED = O authid "%s" foi removido da lista de bans
ADMIN_UNBAN_1 = ADMIN: desbaniu %s
ADMIN_UNBAN_2 = ADMIN %s: desbaniu %s
ADMIN_ADDBAN_1 = ADMIN: baniu %s
ADMIN_ADDBAN_2 = ADMIN %s: baniu %s
BANNED = banido
REASON = razão
FOR_MIN = por %s minutos
PERM = permanentemente
CLIENT_BANNED = O cliente "%s" foi banido
ADMIN_SLAY_1 = ADMIN: matou %s
ADMIN_SLAY_2 = ADMIN %s: matou %s
CLIENT_SLAYED = O cliente "%s" foi morto
ADMIN_SLAP_1 = ADMIN: esbofeteou %s com %d dano
ADMIN_SLAP_2 = ADMIN %s: esbofeteou %s com %d dano
CLIENT_SLAPED = O cliente "%s" foi esbofeteado com %d dano
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
NO_MORE_CVARS = Não é possível adicionar mais cvars para acesso rcon!
UNKNOWN_CVAR = Cvar desconhecida: %s
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"
PROTECTED = PROTEGIDO
SET_CVAR_TO = %s mudou a cvar %s para "%s"
SET_XVAR_TO = %s mudou a xvar %s para "%s"
CVAR_CHANGED = A cvar "%s" foi mudada para "%s"
XVAR_CHANGED = A xvar "%s" foi mudada para "%s"
LOADED_PLUGINS = Plugins atualmente carregados
NAME = nome
VERSION = versão
AUTHOR = autor
FILE = ficheiro
STATUS = estado
PLUGINS_RUN = %d plugins, %d ativos
LOADED_MODULES = Módulos atualmente carregados
NUM_MODULES = %d módulos
FILE_NOT_FOUND = O ficheiro "%s" não foi encontrado
ADMIN_CONF_1 = ADMIN: executou a config %s
ADMIN_CONF_2 = ADMIN %s: executou a config %s
PAUSED = pausado
UNPAUSED = despausado
UNABLE_PAUSE = O servidor não pôde pausar o jogo. É preciso jogadores reais no servidor.
SERVER_PROC = O servidor procedeu %s
PAUSING = a pausar
UNPAUSING = a despausar
PAUSE = pausar
UNPAUSE = despausar
COM_SENT_SERVER = A linha de comando "%s" foi enviada para a consola do servidor
CLIENTS_ON_SERVER = Clientes no servidor
IMMU = imunidade
RESERV = reservação
ACCESS = acesso
TOTAL_NUM = Total %d
SKIP_MATCH = A saltar "%s" (a coincidir com "%s")
SKIP_IMM = A saltar "%s" (imunidade)
KICK_PL = A expulsar "%s"
YOU_DROPPED = Tu foste desconectado pois o admin só deixa entrar um grupo de clientes específico
KICKED_CLIENTS = %d clientes expulsados
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"
ADMIN_NICK_2 = ADMIN %s: mudou o nome de %s para "%s"
CHANGED_NICK = Mudou o nome de %s para "%s"
ADMIN_EXTEND_1 = ADMIN: extendeu o mapa por %d minutos
ADMIN_EXTEND_2 = ADMIN %s: extendeu o mapa por %d minutos
MAP_EXTENDED = O mapa "%s" foi extendido por %d minutos
ADMIN_MUST_TEMPBAN = Tu só podes banir jogadores temporariamente temporariamente, até %d minutos
ADMIN_MUST_TEMPUNBAN = Tu só podes desbanir jogadores que tu baniste recentemente
MAP_EXTENDED = "%s" 该地图已经被延长 %d 分钟

View File

@ -134,12 +134,12 @@ TIME_INFO_2 = Nqma limit na vremeto. Sledvashta karta: %s
[ro]
HELP_COMS = Ajutor AMX Mod X: Comenzi
HELP_ENTRIES = Intrari %d - %d din %d
HELP_USE_MORE = Scrie '%s %d' pentru mai mult
HELP_USE_BEGIN = Scrie '%s 1' pentru inceput
TYPE_HELP = Scrie '%s' '%s' in consola pentru afisare lista comenzi
TIME_INFO_1 = Timp Ramas: %d:%02d. Urmatoarea Harta: %s
TIME_INFO_2 = Nici o Limita a Timpului. Urmatoarea Harta: %s
HELP_ENTRIES = Se afișează %d - %d din %d
HELP_USE_MORE = Scrie '%s %d' pentru mai multe comenzi
HELP_USE_BEGIN = Scrie '%s 1' pentru a începe
TYPE_HELP = Scrie '%s' '%s' în consolă pentru a afișa lista de comenzi disponibile
TIME_INFO_1 = Timp mas: %d:%02d. Următoarea hartă: %s
TIME_INFO_2 = Fără limită de timp. Următoarea hartă: %s
[hu]
HELP_COMS = AMX Mod X segítség: Parancsok

View File

@ -45,7 +45,9 @@ DROPPED_RES = Pudotettiin palvelimelta slotvarauksen takia (adminslot)
DROPPED_RES = Premahnat poradi rezervaciq na slot
[ro]
DROPPED_RES = Ai primit kick pentru rezervare slot
DROPPED_RES = Ai primit kick deoarece locul pe server este rezervat.
CVAR_RESERVATION = Numărul de locuri rezervate
CVAR_HIDESLOTS = Dacă setezi asta pe 1, poți ascunde locuri de pe server.^nDacă locurile publice și ascunse ale serverului sunt pline, trebuie să te conectezi manual în consolă cu comanda "connect".
[hu]
DROPPED_RES = Helyfenntartás miatt kidobva.
@ -76,3 +78,5 @@ DROPPED_RES = U largua për shkak të rezervimit të vendit që është plugini
[pt]
DROPPED_RES = Foste desconectado por causa da reservação de slots
CVAR_RESERVATION = Quantidade de slots para reservar
CVAR_HIDESLOTS = Se tu definires isto para 1, tu podes esconder slots no teu servidor.^nSe os slots públicos e escondidos do servidor estiverem cheios, tu deverás manualmente conectar com o comando de consola "connect".

View File

@ -45,10 +45,10 @@ VOTING_RES_2 = %s (erhielt "%d") (benötigt "%d")
VOTING_SUCCESS = Abstimmung erfolgreich
VOTING_RES_3 = %s (erhielt "%d") (benötigt "%d"). Ergebnis: %s
THE_RESULT = Das Ergebnis
WANT_CONTINUE = Forfahren?
VOTED_FOR = %s stimmten dafür
VOTED_AGAINST = %s stimmten dagegen
VOTED_FOR_OPT = %s stimmten für Option #%d
WANT_CONTINUE = Fortfahren?
VOTED_FOR = %s stimmte dafür
VOTED_AGAINST = %s stimmte dagegen
VOTED_FOR_OPT = %s stimmte für Option #%d
ALREADY_VOTING = Abstimmung läuft bereits...
VOTING_NOT_ALLOW = Abstimmung ist momentan nicht möglich!
GIVEN_NOT_VALID = %s ist unzulässig
@ -475,38 +475,38 @@ ADMIN_VOTE_FOR_1 = %s: glasuva %s za %s
ADMIN_VOTE_FOR_2 = %s %s: glasuva %s za %s
[ro]
ADMIN_CANC_VOTE_1 = %s: anuleaza vot
ADMIN_CANC_VOTE_2 = %s %s: anuleaza vot
VOTING_CANC = Votarea a fost anulata
NO_VOTE_CANC = Nu exista votari pentru anulare sau nu poate fi anulata cu aceea comanda
ADMIN_CANC_VOTE_1 = %s: anulează votarea
ADMIN_CANC_VOTE_2 = %s %s: anulează votarea
VOTING_CANC = Votarea a fost anulată
NO_VOTE_CANC = Nu există votări ce pot fi anulate, sau nu pot fi anulate cu această comandă.
RES_REF = Rezultat refuzat
RES_ACCEPTED = Rezultat acceptat
VOTING_FAILED = Votare esuata
VOTING_RES_1 = %s (da "%d" voturi, nu "%dvoturi", necesare "%d")
VOTING_RES_2 = %s (a obtinut "%d voturi", necesare "%d")
VOTING_FAILED = Votare eșuată
VOTING_RES_1 = %s (da "%d") (nu "%d") (necesare "%d")
VOTING_RES_2 = %s (a obținut "%d" voturi) (necesare "%d")
VOTING_SUCCESS = Votarea a avut loc cu succes
VOTING_RES_3 = %s (a obtinut "%d" voturi, necesare "%d"). Rezultatul este: %s
VOTING_RES_3 = %s (a obținut "%d" voturi) (necesare "%d"). Rezultatul este: %s
THE_RESULT = Rezultatul
WANT_CONTINUE = Accepti schimbarea hartii?
WANT_CONTINUE = Doriți să continuați?
VOTED_FOR = %s a votat pentru
VOTED_AGAINST = %s a votat impotriva
VOTED_AGAINST = %s a votat împotrivă
VOTED_FOR_OPT = %s a votat pentru #%d
ALREADY_VOTING = Deja se afla o votare in curs de desfasurare...
VOTING_NOT_ALLOW = Votarile nu sunt permise acum
GIVEN_NOT_VALID = %s nu este valida
ALREADY_VOTING = Se află deja o votare în curs de desfășurare...
VOTING_NOT_ALLOW = Votările nu sunt permise momentan
GIVEN_NOT_VALID = %s este invalidă
MAP_IS = harta este
MAPS_ARE = hartile sunt
MAPS_ARE = hărțile sunt
CHOOSE_MAP = Alege harta
ADMIN_VOTE_MAP_1 = %s: votare harta
ADMIN_VOTE_MAP_2 = %s %s: votare harta
VOTING_STARTED = Votarea a inceput...
VOTING_FORBIDDEN = Votarea pentru aceasta optiune nu este permisa
ADMIN_VOTE_CUS_1 = %s: votare customizata
ADMIN_VOTE_CUS_2 = %s %s: votare customizata
VOTE = Voteaza
ACTION_PERFORMED = Aceasta comanda nu poate fi executata pe bot-ul "%s"
ADMIN_VOTE_FOR_1 = %s: vot %s pentru %s
ADMIN_VOTE_FOR_2 = %s %s: vot %s pentru %s
ADMIN_VOTE_MAP_1 = %s: votare pentru harta/hărțile
ADMIN_VOTE_MAP_2 = %s %s: votare pentru harta/hărțile
VOTING_STARTED = Votarea a început...
VOTING_FORBIDDEN = Votarea pentru această opțiune este interzisă
ADMIN_VOTE_CUS_1 = %s: votare personalizată
ADMIN_VOTE_CUS_2 = %s %s: votare personalizată
VOTE = Votează
ACTION_PERFORMED = Această comandă nu poate fi executată pe BOT-ul "%s"
ADMIN_VOTE_FOR_1 = %s: a votat %s pentru %s
ADMIN_VOTE_FOR_2 = %s %s: a votat %s pentru %s
[hu]
ADMIN_CANC_VOTE_1 = %s: szavazás visszavonása

View File

@ -41,7 +41,7 @@ STOP_FLOOD = Lopeta floodiminen!
STOP_FLOOD = Ne fluudvai servera!
[ro]
STOP_FLOOD = Nu mai flooda server-ul!
STOP_FLOOD = Oprește-te din a flooda serverul!
[hu]
STOP_FLOOD = Ne floodolj és ne spamelj!

View File

@ -69,9 +69,9 @@ CONF_MENU = Konfiguracionno menu
SPE_MENU = Menu za govorene
[ro]
CMD_MENU = Menu Comenzi
CONF_MENU = Menu Configuratie
SPE_MENU = Menu Speech
CMD_MENU = Meniu comenzi
CONF_MENU = Meniu configuri
SPE_MENU = Meniu Speech
[hu]
CMD_MENU = Parancs Menü

View File

@ -307,24 +307,24 @@ ON = Vklucheno
OFF = Isklucheno
[ro]
BACK = Inapoi
EXIT = Iesire
BACK = Înapoi
EXIT = Ieși
MORE = Mai mult
NONE = Nici unul
NONE = Niciunul
ADMIN = ADMIN
PLAYER = JUCATOR
PLAYER = JUCĂTOR
ERROR = eroare
YES = Da
NO = Nu
BAN = ban
KICK = kick
NO_ACC_COM = Nu ai acces la aceasta comanda
NO_ACC_COM = Nu ai acces la această comandă
USAGE = Valoare
MORE_CL_MATCHT = Sunt mai multi jucatori ce va indeplinesc cautarea
CL_NOT_FOUND = Jucatorul cu acel nume sau id nu exista
CLIENT_IMM = Jucatorul "%s" are imunitate
CANT_PERF_DEAD = Aceasta comanda nu poate fi executata pe jucatorul decedat "%s"
CANT_PERF_BOT = Aceasta comanda nu poate fi executata pe bot-ul "%s"
MORE_CL_MATCHT = Există mai mulți jucători care îndeplinesc condițiile
CL_NOT_FOUND = Jucătorul cu acel nume sau userid nu a fost găsit
CLIENT_IMM = Jucătorul "%s" are imunitate
CANT_PERF_DEAD = Această comandă nu poate fi executată pe jucătorul mort "%s"
CANT_PERF_BOT = Această comandă nu poate fi executată pe BOT-ul "%s"
ON = Activat
OFF = Dezactivat
@ -538,9 +538,9 @@ YES = Sim
NO = Não
BAN = banir
KICK = expulsar
NO_ACC_COM = Tu nao tens acesso a esse comando
NO_ACC_COM = Tu não tens acesso a esse comando
USAGE = Uso
MORE_CL_MATCHT = Tem mais do que um cliente que corresponde ao teu argumento
MORE_CL_MATCHT = mais do que um cliente a corresponder o teu argumento
CL_NOT_FOUND = O cliente com esse nome ou userid não foi encontrado
CLIENT_IMM = O cliente "%s" tem imunidade
CANT_PERF_DEAD = Essa ação não pode ser executada no cliente morto "%s"

View File

@ -41,7 +41,7 @@ INF_REACH = Information Message -raja ylitetty!
INF_REACH = Dostignat e limitut za ingormacionni suobshteniq!
[ro]
INF_REACH = Limita mesajelor informative a fost atinsa!
INF_REACH = A fost atinsă limita maximă a mesajelor informative!
[hu]
INF_REACH = Információs üzenetek limitje elérve!

View File

@ -56,7 +56,7 @@ LANG_NAME_NATIVE = Bulgarski
[ro]
LANG_NAME = Romanian
LANG_NAME_NATIVE = Romana
LANG_NAME_NATIVE = Română
[hu]
LANG_NAME = Hungarian

View File

@ -125,13 +125,13 @@ EXTED_MAP = Udalji kartata %s
TIME_CHOOSE = Vreme e da se izbere sledvashtata karta...
[ro]
CHO_FIN_EXT = Votarea s-a incheiat. Harta actuala va fi prelungita %.0f minute
CHO_FIN_NEXT = Votarea s-a incheiat. Urmatoarea harta va fi %s
CHOSE_EXT = %s a votat pentru prelungirea hartii actuale
CHO_FIN_EXT = Votarea s-a terminat. Harta actuală va fi prelungită cu %.0f minute
CHO_FIN_NEXT = Votarea s-a terminat. Următoarea hartă va fi %s
CHOSE_EXT = %s a votat pentru prelungirea hărții actuale
X_CHOSE_X = %s a votat pentru %s
CHOOSE_NEXTM = AMX Alege harta urmatoare
EXTED_MAP = Prelungirea hartii actuale %s
TIME_CHOOSE = E timpul sa alegeti harta urmatoare...
CHOOSE_NEXTM = AMX Alege harta următoare
EXTED_MAP = Prelungirea hărții %s
TIME_CHOOSE = Este timpul să alegeți harta următoare...
[hu]
CHO_FIN_EXT = A választás véget ért. A mostani pálya még %.0f percig lesz.

View File

@ -30,7 +30,7 @@ VOTE_FAILED = Abstimmung gescheitert
THE_WINNER = Der Gewinner
WANT_CONT = Willst du fortfahren?
VOT_CANC = Abstimmung abgebrochen
X_VOTED_FOR = %s stimmten für Option #%d
X_VOTED_FOR = %s stimmte für Option #%d
VOTEMAP_MENU = Menü > Mapwahl
START_VOT = Starte Abstimmung
SEL_MAPS = Ausgewählte Maps
@ -337,26 +337,26 @@ CHANGLE_MENU = Smenqne na karta Menu
[ro]
RESULT_REF = Rezultat refuzat
RESULT_ACC = Rezultat acceptat
VOTE_SUCCESS = Votarea a avut loc cu succes. Harta va fi schimbata pe
VOTE_FAILED = Votare esuata
THE_WINNER = Castigatoare
WANT_CONT = Accepti schimbarea hartii?
VOT_CANC = Votarea a fost anulata
VOTE_SUCCESS = Votarea a avut loc cu succes. Harta va fi schimbată pe
VOTE_FAILED = Votare eșuată
THE_WINNER = Câștigătoare
WANT_CONT = Doriți să continuați?
VOT_CANC = Votarea a fost anulată
X_VOTED_FOR = %s a votat pentru #%d
VOTEMAP_MENU = Menu Votare Harta
START_VOT = Incepe Votarea
SEL_MAPS = Harti Alese
ALREADY_VOT = Se desfasoara o votare deja...
NO_MAPS_MENU = Nu exista harti in menu
VOT_NOW_ALLOW = Nu sunt permise votarile acum
WHICH_MAP = Ce harta doresti?
CHANGE_MAP_TO = Schimbare harta pe
CANC_VOTE = Anuleaza Vot
ADMIN_V_MAP_1 = ADMIN: votare harta
ADMIN_V_MAP_2 = ADMIN %s: votare harta
ADMIN_CHANGEL_1 = ADMIN: schimbare harta pe %s
ADMIN_CHANGEL_2 = ADMIN %s: schimbare harta pe %s
CHANGLE_MENU = Menu Schimbare Harta
VOTEMAP_MENU = Meniu votare hartă
START_VOT = Începe votarea
SEL_MAPS = Hărți alese
ALREADY_VOT = Se desfășoară o votare deja...
NO_MAPS_MENU = Nu există hărți în meniu
VOT_NOW_ALLOW = Nu sunt permise votările momentan
WHICH_MAP = Ce hartă dorești?
CHANGE_MAP_TO = Schimbare hartă pe
CANC_VOTE = Anulează vot
ADMIN_V_MAP_1 = ADMIN: votare hartă
ADMIN_V_MAP_2 = ADMIN %s: votare hartă
ADMIN_CHANGEL_1 = ADMIN: schimbare hartă pe %s
ADMIN_CHANGEL_2 = ADMIN %s: schimbare hartă pe %s
CHANGLE_MENU = Meniu schimbare hartă
[hu]
RESULT_REF = A szavazás eredménytelen.

View File

@ -17,10 +17,10 @@ RES_WEAP = Restrict Weapons
TELE_PLAYER = Teleport Player
[de]
KICK_PLAYER = Kick Spieler
BAN_PLAYER = Ban Spieler
SLAP_SLAY = Schlage/Kille Spieler
TEAM_PLAYER = Team Spieler ^n
KICK_PLAYER = Spieler kicken
BAN_PLAYER = Spieler bannen
SLAP_SLAY = Spieler schlagen/killen
TEAM_PLAYER = Team der Spieler ändern ^n
CHANGEL = Mapwechsel
VOTE_MAPS = Map Abstimmung ^n
SPECH_STUFF = Soundausgabe
@ -32,7 +32,7 @@ LANG_SET = Spracheinstellung
STATS_SET = Statistik-Einstellungen ^n
PAUSE_PLUG = Plugins pausieren
RES_WEAP = Waffen verbieten
TELE_PLAYER = Teleport Spieler
TELE_PLAYER = Spieler teleportieren
[sr]
KICK_PLAYER = Kick Igraca
@ -251,22 +251,22 @@ RES_WEAP = Zabrani orujiq
TELE_PLAYER = Teleportirai igrachi
[ro]
KICK_PLAYER = Kick Jucator
BAN_PLAYER = Ban Jucator
SLAP_SLAY = Plesneste/Ucide Jucator
TEAM_PLAYER = Jucator Echipa ^n
CHANGEL = Schimba harta
VOTE_MAPS = Voteaza pentru hartile ^n
SPECH_STUFF = Speech
CLIENT_COM = Comenzi Jucatori
SERVER_COM = Comenzi Server
CVARS_SET = Setari Cvar
CONFIG = Configuratie
LANG_SET = Setari Limbaj
STATS_SET = Setari Statistici ^n
PAUSE_PLUG = Opreste Plugin-uri
RES_WEAP = Restrictioneaza Arme
TELE_PLAYER = Teleporteaza Jucator
KICK_PLAYER = Kick jucător
BAN_PLAYER = Ban jucător
SLAP_SLAY = Slap/Slay jucător
TEAM_PLAYER = Schimbare echipă jucător ^n
CHANGEL = Schimbă harta
VOTE_MAPS = Vot pentru hărțile ^n
SPECH_STUFF = Meniu Speech
CLIENT_COM = Comenzi jucător
SERVER_COM = Comenzi server
CVARS_SET = Setări cvar
CONFIG = Configurații
LANG_SET = Setări limbă
STATS_SET = Setări statistici ^n
PAUSE_PLUG = Întrerupe pluginuri
RES_WEAP = Restricționează arme
TELE_PLAYER = Teleportează jucător
[hu]
KICK_PLAYER = Játékos kirúgása
@ -438,7 +438,7 @@ TEAM_PLAYER = Equipa do Jogador ^n
CHANGEL = Mudar de Mapa
VOTE_MAPS = Votação de Mapas ^n
SPECH_STUFF = Menu de Voz
CLIENT_COM = Comandos do Client
CLIENT_COM = Comandos do Cliente
SERVER_COM = Comandos do Servidor
CVARS_SET = Definições de Cvars
CONFIG = Configuração

View File

@ -56,7 +56,7 @@ KNIFE_MSG_4 = %s messerte und verstümmelte %s
LAST_MSG_1 = Nun hängt alles von dir ab!
LAST_MSG_2 = Hoffentlich hast du ein Medipack dabei.
LAST_MSG_3 = Deine Teamkameraden sind alle tot. Viel Glück!
LAST_MSG_4 = Nun bist du allein. Hab Spass dabei!
LAST_MSG_4 = Nun bist du allein. Hab Spaß dabei!
HE_MSG_1 = %s sendet ein kleines Geschenk an %s
HE_MSG_2 = %s wirft ein Knallbonbon zu %s
HE_MSG_3 = %s macht einen Präzisionswurf zu %s
@ -70,7 +70,7 @@ HS_MSG_2 = $kn entfernte den Kopf von $vn^nmit einem Präzisionsschuss.
HS_MSG_3 = $kn verwandelte den Kopf ^nvon $vn in Pudding.
HS_MSG_4 = $kn besiegte $vn durch einen Kopfschuss.
HS_MSG_5 = $vn's Kopf wurde in der Gegend verteilt
HS_MSG_6 = $kn hat einen super ^nTreffer gelandet,das weiss ^n$vn nun auch.
HS_MSG_6 = $kn hat einen super ^nTreffer gelandet,das weiß ^n$vn nun auch.
HS_MSG_7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn...
DOUBLE_KILL = Wow! %s machte einen Doppelkill!!!
PREPARE_FIGHT = Vorbereiten zum Kampf!^nRunde %d
@ -670,49 +670,51 @@ HS = hs
[ro]
WITH = cu
KNIFE_MSG_1 = %s l-a taiat si feliat pe %s
KNIFE_MSG_2 = %s a scos cutitul afara si l-a macelarit pe %s
KNIFE_MSG_3 = %s se furiseaza atent pe la spate si il taie pe %s
KNIFE_MSG_4 = %s l-a injunghiat pe %s
LAST_MSG_1 = Acum toti se bazeaza pe tine!
LAST_MSG_2 = Sper ca mai ai viata.
LAST_MSG_3 = Toti colegii tai de echipa au murit. Bafta!
LAST_MSG_4 = Acum esti singur. Distreaza-te!
HE_MSG_1 = %s ii trimite un mic cadou lui %s
HE_MSG_2 = %s ii arunca un dar micut lui %s
HE_MSG_3 = %s a facut o aruncare precisa catre %s
HE_MSG_4 = %s a avut o explozie mare pentru %s
SHE_MSG_1 = %s s-a detonat cu o grenada
SHE_MSG_2 = %s incearca efectul unei grenade
SHE_MSG_3 = %s inghite grenazi cu totul!
SHE_MSG_4 = %s explodeaza!
HS_MSG_1 = $kn l-a ucis pe $vn cu o impuscatura bine^nplasata pe cap!
HS_MSG_2 = $kn a inlaturat capul lui $vn^ncu $wn
HS_MSG_3 = $kn a transformat capul lui $vn ^nin budinca cu $wn
HS_MSG_4 = $vn a fost invins de $kn
HS_MSG_5 = Capul lui $vn a fost^ntransformat in gelatina rosie
HS_MSG_6 = $kn are o tinta superba cu $wn,^niar $vn stie bine.
HS_MSG_7 = Capul lui $vn a stat prea mult in tinta lui $kn...
DOUBLE_KILL = Wow! %s a facut o dubla ucidere!!!
PREPARE_FIGHT = Pregateste-te de LUPTA!^nRunda %d
KILLED_ROW = Ai ucis %d consecutiv pana acum
DIED_ROUNDS = Ai grija! Ai murit %d runde consecutiv...
KILLED_CHICKEN = Cineva a omorat o gaina!!!
BLEW_RADIO = Cineva a aruncat radioul in aer!!!
REACHED_TARGET = Omg! %s a ajuns la destinatie!
PLANT_BOMB = %s planteaza bomba!
DEFUSING_BOMB = %s dezamorseaza bomba...
KNIFE_MSG_1 = %s l-a tăiat cubulețe pe %s
KNIFE_MSG_2 = %s a scos cuțitul și l-a măcelărit pe %s
KNIFE_MSG_3 = %s s-a furișat pe la spate și l-a cuțitat pe %s
KNIFE_MSG_4 = %s l-a înjunghiat pe %s
LAST_MSG_1 = Acum toți depind de tine!
LAST_MSG_2 = Sper că mai ai putere!
LAST_MSG_3 = Toți coechipierii tăi au murit. Baftă!
LAST_MSG_4 = Acum ești pe barba ta. Distrează-te!
HE_MSG_1 = %s i-a trimis un cadou surpriză lui %s
HE_MSG_2 = %s a aruncat o mică petardă la picioarele lui %s
HE_MSG_3 = %s i-a livrat o grenadă lui %s
HE_MSG_4 = %s l-a aruncat în aer pe %s
SHE_MSG_1 = %s s-a sinucis cu o grenadă
SHE_MSG_2 = %s a înghițit o grenadă
SHE_MSG_3 = %s și-a aruncat o grenadă sub picioare
SHE_MSG_4 = %s a explodat!
HS_MSG_1 = $kn i-a trimis lui $vn un^nglonț fix în cap!
HS_MSG_2 = $kn i-a înlăturat lui $vn^ncapul de pe umeri cu $wn
HS_MSG_3 = $kn a făcut capul lui $vn^nbudincă cu $wn
HS_MSG_4 = $vn a fost umilit de $kn
HS_MSG_5 = Capul lui $vn s-a transformat în gelatină roșie
HS_MSG_6 = $kn are o acuratețe deosebită cu $wn,^niar $vn știe bine
HS_MSG_7 = Capul lui $vn a stat în ținta lui $kn^npentru prea mult timp...
DOUBLE_KILL = Wow! %s made a double kill!!!
PREPARE_FIGHT = Pregătește-te de LUPTĂ!^nRunda %d
KILLED_ROW = Ai ucis %d consecutiv până acum
DIED_ROUNDS = Ai grijă! Ai murit %d runde la rând...
KILLED_CHICKEN = Cineva a omorât o găină!!!
BLEW_RADIO = Cineva a aruncat radio-ul în aer!!!
REACHED_TARGET = Omg! %s a ajuns la destinație!
PLANT_BOMB = %s plantează bomba...
DEFUSING_BOMB = %s dezamorsează bomba...
SET_UP_BOMB = %s ne-a pus bomba!!!
DEFUSED_BOMB = %s a dezamorsat bomba!
FAILED_DEFU = %s nu a reusit sa dezamorseze bomba...
PICKED_BOMB = %s a luat bomba...
DROPPED_BOMB = %s a scapat bomba!!!
CT = CT
CTS = CTI
TERRORIST = TERORIST
TERRORISTS = TERORISTI
REMAINING = %d %s Ramasi in viata...
KILLS = Ucideri
FAILED_DEFU = %s nu a reușit să dezamorseze bomba...
PICKED_BOMB = %s a ridicat bomba...
DROPPED_BOMB = %s a scăpat bomba!!!
CT = Contra-Terorist
CTS = Contra-Teroriști
TERRORIST = Terorist
TERRORISTS = Teroriști
REMAINING = %d %s mași în viață...
REMAINING_ENEMY = Un inamic rămas...
REMAINING_ENEMIES = %d inamici rămași...
KILLS = kills
HS = hs
[hu]
@ -1172,7 +1174,7 @@ PREPARE_FIGHT = Preparem-se para LUTAR!^nRonda %d
KILLED_ROW = Tu mataste %d vezes de seguida
DIED_ROUNDS = Cuidado! Tu morreste %d vezes de seguida...
KILLED_CHICKEN = Alguém matou a galinha!!!
BLEW_RADIO = Alguém explodiu rádio!!!
BLEW_RADIO = Alguém explodiu o rádio!!!
REACHED_TARGET = Oh meu deus! %s alcançou o objetivo!
PLANT_BOMB = %s está a plantar a bomba!
DEFUSING_BOMB = %s está a desarmar a bomba...
@ -1185,7 +1187,7 @@ CT = CT
CTS = CTS
TERRORIST = TERRORISTA
TERRORISTS = TERRORISTAS
REMAINING = %d %s Restante...
REMAINING = %d %s Restante(s)...
REMAINING_ENEMY = Resta um inimigo...
REMAINING_ENEMIES = Restam %d inimigos...
KILLS = mortes

View File

@ -153,15 +153,15 @@ TYPE_LANGMENU = Napishi 'amx_langmenu' v konzolata za da vidish menuto kudeto mo
LANG_MENU_DISABLED = Ezikovoto menu e izkliucheno.
[ro]
LANG_NOT_EXISTS = Acest limbaj nu exista
PERSO_LANG = Limbaj Personal
LANG_MENU = Menu Limbaj
SERVER_LANG = Limbaj Server
SAVE_LANG = Salveaza Limbaj
SET_LANG_SERVER = Limbajul server-ului a fost setat pe "%s"
SET_LANG_USER = Limbajul tau a fost setat pe "%s"
TYPE_LANGMENU = Scrie 'amx_langmenu' in consola pentru afisarea unui menu cu limbaje
LANG_MENU_DISABLED = Menu limbaj dezactivat.
LANG_NOT_EXISTS = Această limbă nu există
PERSO_LANG = Limbă personală
LANG_MENU = Meniu limbi
SERVER_LANG = Limbă server
SAVE_LANG = Salvează limba
SET_LANG_SERVER = Limba serverului a fost setată pe "%s"
SET_LANG_USER = Limba ta a fost setată pe "%s"
TYPE_LANGMENU = Scrie 'amx_langmenu' în consolă pentru a-ți selecta limba preferată
LANG_MENU_DISABLED = Meniu limbă dezactivat.
[hu]
LANG_NOT_EXISTS = A nyelv nem létezik

View File

@ -5,7 +5,7 @@ FRIEND_FIRE = Friendly fire
[de]
NEXT_MAP = Nächste Map:
PLAYED_MAP = Gespielte Maps
PLAYED_MAP = Aktuelle Map
FRIEND_FIRE = Friendly fire
[sr]
@ -69,9 +69,9 @@ PLAYED_MAP = Igrana karta
FRIEND_FIRE = Priqtelski ogun
[ro]
NEXT_MAP = Urmatoarea Harta:
PLAYED_MAP = Harta Actuala
FRIEND_FIRE = Friendly-Fire
NEXT_MAP = Harta următoare:
PLAYED_MAP = Harta actuală
FRIEND_FIRE = Atac coechipieri
[hu]
NEXT_MAP = A következő pálya:

View File

@ -549,44 +549,44 @@ CANT_UNPAUSE_PLUGIN = Pluginut "%s" e sprqn i ne moje da bude slojen/premahnat n
CLEAR_PAUSED = Izchisti faila s plugini na pauza
[ro]
PAUSE_COULDNT_FIND = Nu a fost gasit un plugin ce rezulta cautarea "%s"
PAUSE_PLUGIN_MATCH = Plugin-ul "%s" rezulta cautarea
PAUSE_CONF_CLEARED = Fisier-ul de configuratie a fost golit. Reincarca harta daca este nevoie
PAUSE_ALR_CLEARED = Configuratia a fost golita deja!
PAUSE_CONF_SAVED = Configuratia a fost salvata cu succes
PAUSE_SAVE_FAILED = Salvarea configuratiei a esuat!!!
PAUSE_COULDNT_FIND = Nu a fost găsit niciun plugin după căutarea "%s"
PAUSE_PLUGIN_MATCH = Pluginul îndeplinește căutarea "%s"
PAUSE_CONF_CLEARED = Fișierul de configurație a fost golit. Reîncarcă harta dacă este nevoie
PAUSE_ALR_CLEARED = Configurația a fost golită deja!
PAUSE_CONF_SAVED = Configurația a fost salvată cu succes
PAUSE_SAVE_FAILED = Salvarea configurației a eșuat!
LOCKED = BLOCAT
PAUSE_UNPAUSE = Intrerupe/Reincarca Plugin-uri
CLEAR_STOPPED = Goleste fisier-ul cu cele intrerupte
SAVE_STOPPED = Salveaza fisier-ul cu cele intrerupte
PAUSED_PLUGIN = Plugin-ul %d a fost intrerupt
PAUSED_PLUGINS = Au fost intrerupte %d plugin-uri
UNPAUSED_PLUGIN = Plugin-ul %d a fost reincarcat
UNPAUSED_PLUGINS = Au fost reincarcate %d plugin-uri
CANT_MARK_MORE = Nu se pot marca mai multe plugin-uri ca intrerupte!
PAUSE_LOADED = Intrerupe plugin-uri: Plugin-uri incarcate
STOPPED = intrerupte
PAUSE_UNPAUSE = Întrerupe/Reactivează pluginuri
CLEAR_STOPPED = Golește fișierul cu pluginurile întrerupte
SAVE_STOPPED = Salvează fișierul cu pluginurile întrerupte
PAUSED_PLUGIN = Pluginul %d a fost întrerupt
PAUSED_PLUGINS = Au fost întrerupte %d pluginuri
UNPAUSED_PLUGIN = Pluginul %d a fost reactivat
UNPAUSED_PLUGINS = Au fost reactivate %d pluginuri
CANT_MARK_MORE = Nu poți reactiva mai multe pluginuri
PAUSE_LOADED = Întrerupe plugin-uri: Pluginuri încărcate
STOPPED = întrerupte
VERSION = versiune
FILE = fisier
PAUSE_ENTRIES = Intrari %d - %d din %d (%d functioneaza)
FILE = fișier
PAUSE_ENTRIES = Se afișează %d - %d din %d (%d funcționează)
PAUSE_USE_MORE = Scrie 'amx_pausecfg list %d' pentru mai mult
PAUSE_USE_BEGIN = Scrie 'amx_pausecfg list 1' pentru inceput
PAUSE_USAGE = Folosire: amx_pausecfg <comanda> [nume]
PAUSE_USE_BEGIN = Scrie 'amx_pausecfg list 1' pentru a începe
PAUSE_USAGE = Utilizare: amx_pausecfg <comandă> [nume]
PAUSE_COMMANDS = Comenzi
COM_PAUSE_OFF = ^toff - intrerupe toate plugin-urile ce nu sunt in lista
COM_PAUSE_ON = ^ton - reincarca toate plugin-urile ce nu sunt in lista
COM_PAUSE_STOP = ^tstop <fisier> - opreste un plugin
COM_PAUSE_PAUSE = ^tpause <fisier> - intrerupe un plugin
COM_PAUSE_ENABLE = ^tenable <file> - incarca un plugin
COM_PAUSE_SAVE = ^tsave - salveaza o lista a plugin-urilor oprite
COM_PAUSE_CLEAR = ^tclear - goleste o lista a plugin-urilor oprite
COM_PAUSE_LIST = ^tlist [id] - listeaza plugin-urile
COM_PAUSE_ADD = ^tadd <title> - marcheaza un plugin ca si reincarcat
SAVE_PAUSED = Salvarea oprita
COM_PAUSE_SAVE_PAUSED = ^tsave - salveaza o lista cu pluginurile oprite
COM_PAUSE_CLEAR_PAUSED = ^tclear - sterge lista cu pluginurile oprite
CANT_UNPAUSE_PLUGIN = Pluginul "%s" este oprit si nu poate fi pus pe pauza sau scos din pauza.
CLEAR_PAUSED = Goleste fisier-ul cu cele oprite
COM_PAUSE_OFF = ^toff - întrerupe toate pluginurile care nu se află în listă
COM_PAUSE_ON = ^ton - reactivează toate pluginurile
COM_PAUSE_STOP = ^tstop <fisier> - oprește un plugin
COM_PAUSE_PAUSE = ^tpause <fisier> - întrerupe un plugin
COM_PAUSE_ENABLE = ^tenable <file> - activează un plugin
COM_PAUSE_SAVE = ^tsave - salvează o listă a pluginurilor întrerupte
COM_PAUSE_CLEAR = ^tclear - golește o listă a pluginurilor întrerupte
COM_PAUSE_LIST = ^tlist [id] - listează pluginurile
COM_PAUSE_ADD = ^tadd <title> - marchează un plugin ca și reactivat
SAVE_PAUSED = Salvare oprită
COM_PAUSE_SAVE_PAUSED = ^tsave - salvează o listă cu pluginurile oprite
COM_PAUSE_CLEAR_PAUSED = ^tclear - șterge listă cu pluginurile oprite
CANT_UNPAUSE_PLUGIN = Pluginul "%s" este oprit și nu poate fi întrerupt sau reactivat.
CLEAR_PAUSED = Golește fișierul cu pluginurile oprite
[hu]
PAUSE_COULDNT_FIND = Nem található a plugin "%s"
@ -936,18 +936,18 @@ CLEAR_PAUSED = Pastro skedarin me pushime
[pt]
PAUSE_COULDNT_FIND = Não foi possível encontrar um plugin coincidindo "%s"
PAUSE_PLUGIN_MATCH = Plugin coincidindo "%s"
PAUSE_CONF_CLEARED = Ficheiro de Configuração limpo. Recarrega o map se for necessário
PAUSE_ALR_CLEARED = A Configuração já foi limpa!
PAUSE_CONF_CLEARED = Ficheiro de configuração limpo. Recarrega o mapa se for necessário
PAUSE_ALR_CLEARED = A configuração já foi limpa!
PAUSE_CONF_SAVED = Configuração guardada com sucesso
PAUSE_SAVE_FAILED = Falha ao guardar a Configuração!!!
PAUSE_SAVE_FAILED = Falha ao guardar a configuração!!!
LOCKED = BLOQUEADO
PAUSE_UNPAUSE = Pausar/Despausar Plugins
CLEAR_STOPPED = Limpar ficheiro de plugins parados
SAVE_STOPPED = Guardar plugins parados
PAUSED_PLUGIN = %d plugin pausado
PAUSED_PLUGINS = %d plugins pausados
UNPAUSED_PLUGIN = %d plugin despausado
UNPAUSED_PLUGINS = %d plugins despausados
PAUSED_PLUGIN = %d plugin foi pausado
PAUSED_PLUGINS = %d plugins foram pausados
UNPAUSED_PLUGIN = %d plugin foi despausado
UNPAUSED_PLUGINS = %d plugins foram despausados
CANT_MARK_MORE = Não é possível marcar mais plugins como não-pausáveis!
PAUSE_LOADED = Pausar Plugins: Plugins carregados
STOPPED = parado
@ -958,17 +958,17 @@ PAUSE_USE_MORE = Usa 'amx_pausecfg list %d' para mostrar mais
PAUSE_USE_BEGIN = Usa 'amx_pausecfg list 1' para voltar ao início
PAUSE_USAGE = Uso: amx_pausecfg <comando> [nome]
PAUSE_COMMANDS = Comandos
COM_PAUSE_OFF = ^toff - pausar todos os plugins que não estão na lista
COM_PAUSE_ON = ^ton - despausar todos os plugins
COM_PAUSE_STOP = ^tstop <ficheiro> - parar um plugin
COM_PAUSE_PAUSE = ^tpause <ficheiro> - pausar um plugin
COM_PAUSE_ENABLE = ^tenable <ficheiro> - ativar um plugin
COM_PAUSE_SAVE = ^tsave - guardar a lista de plugins parados
COM_PAUSE_CLEAR = ^tclear - limpar a lista de plugins parados
COM_PAUSE_LIST = ^tlist [id] - listar plugins
COM_PAUSE_ADD = ^tadd <título> - marcar um plugin como não-pausável
COM_PAUSE_OFF = ^toff - pausa todos os plugins que não estão na lista
COM_PAUSE_ON = ^ton - despausa todos os plugins
COM_PAUSE_STOP = ^tstop <ficheiro> - para um plugin
COM_PAUSE_PAUSE = ^tpause <ficheiro> - pausa um plugin
COM_PAUSE_ENABLE = ^tenable <ficheiro> - ativa um plugin
COM_PAUSE_SAVE = ^tsave - guarda a lista de plugins parados
COM_PAUSE_CLEAR = ^tclear - limpa a lista de plugins parados
COM_PAUSE_LIST = ^tlist [id] - lista plugins
COM_PAUSE_ADD = ^tadd <título> - marca um plugin como não-pausável
SAVE_PAUSED = Guardar plugins pausados
COM_PAUSE_SAVE_PAUSED = ^tsave - guarda a lista de plugins pausados
COM_PAUSE_CLEAR_PAUSED = ^tclear - limpa a lista de plugins pausados
CANT_UNPAUSE_PLUGIN = O Plugin "%s" está parado e não pode ser pausado nem despausado.
CANT_UNPAUSE_PLUGIN = O plugin "%s" está parado e não pode ser nem pausado nem despausado.
CLEAR_PAUSED = Limpar ficheiro de plugins pausados

Some files were not shown because too many files have changed in this diff Show More