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

View File

@ -16,6 +16,9 @@ language: cpp
sudo: false sudo: false
compiler: compiler:
- clang - clang
install:
- pyenv install 3.6.3
- pyenv global 3.6.3
before_script: before_script:
- CHECKOUT_DIR=$PWD && cd .. - CHECKOUT_DIR=$PWD && cd ..
- chmod a+x $CHECKOUT_DIR/support/checkout-deps.sh - chmod a+x $CHECKOUT_DIR/support/checkout-deps.sh
@ -23,5 +26,5 @@ before_script:
script: script:
- mkdir build && cd build - mkdir build && cd build
- PATH="~/.local/bin:$PATH" - 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 - ambuild

View File

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

View File

@ -27,6 +27,10 @@ elif builder.target_platform == 'windows':
'/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1', '/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
'/SECTION:.data,RW', '/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] 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 #if defined BINLOG_ENABLED
g_BinLog.WriteOp(BinLog_CallPubFunc, iter->pPlugin->getId(), iter->func); g_BinLog.WriteOp(BinLog_CallPubFunc, iter->pPlugin->getId(), iter->func);
#endif #endif
int err = amx_Exec(amx, &retVal, iter->func);
int err = amx_ExecPerf(amx, &retVal, iter->func);
// log runtime error, if any // log runtime error, if any
if (err != AMX_ERR_NONE) if (err != AMX_ERR_NONE)
{ {
@ -327,8 +327,7 @@ cell CSPForward::execute(cell *params, ForwardPreparedArray *preparedArrays)
#if defined BINLOG_ENABLED #if defined BINLOG_ENABLED
g_BinLog.WriteOp(BinLog_CallPubFunc, pPlugin->getId(), m_Func); g_BinLog.WriteOp(BinLog_CallPubFunc, pPlugin->getId(), m_Func);
#endif #endif
int err = amx_Exec(m_Amx, &retVal, m_Func); int err = amx_ExecPerf(m_Amx, &retVal, m_Func);
if (err != AMX_ERR_NONE) if (err != AMX_ERR_NONE)
{ {
//Did something else set an error? //Did something else set an error?

View File

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

View File

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

View File

@ -66,6 +66,9 @@
#include <windows.h> #include <windows.h>
#endif #endif
#include <chrono>
#include <amxmodx.h>
#include <CPlugin.h>
/* When one or more of the AMX_funcname macris are defined, we want /* When one or more of the AMX_funcname macris are defined, we want
* to compile only those functions. However, when none of these macros * 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 */ dest[len]='\0'; /* store terminator */
return AMX_ERR_NONE; 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_CheckNatives(AMX *amx, AMX_NATIVE_FILTER nf);
int AMXAPI amx_Cleanup(AMX *amx); int AMXAPI amx_Cleanup(AMX *amx);
int AMXAPI amx_Clone(AMX *amxClone, AMX *amxSource, void *data); 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_Exec(AMX *amx, cell *retval, int index);
int AMXAPI amx_FindNative(AMX *amx, const char *name, int *index); int AMXAPI amx_FindNative(AMX *amx, const char *name, int *index);
int AMXAPI amx_FindPublic(AMX *amx, const char *funcname, 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 */ static cell AMX_NATIVE_CALL set_hudmessage(AMX *amx, cell *params) /* 11 param */
{ {
cell num_params = params[0] / sizeof(cell);
if (num_params >= 13)
{
cell *color2 = get_amxaddr(amx, params[13]);
g_hudset.a1 = 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.a1 = 0;
g_hudset.a2 = 0; g_hudset.a2 = 0;
g_hudset.r2 = 255; g_hudset.r2 = 255;
g_hudset.g2 = 255; g_hudset.g2 = 255;
g_hudset.b2 = 250; g_hudset.b2 = 250;
}
g_hudset.r1 = static_cast<byte>(params[1]); g_hudset.r1 = static_cast<byte>(params[1]);
g_hudset.g1 = static_cast<byte>(params[2]); g_hudset.g1 = static_cast<byte>(params[2]);
g_hudset.b1 = static_cast<byte>(params[3]); g_hudset.b1 = static_cast<byte>(params[3]);
@ -1418,7 +1434,7 @@ static cell AMX_NATIVE_CALL show_menu(AMX *amx, cell *params) /* 3 param */
pPlayer->vgui = false; pPlayer->vgui = false;
if (time == -1) if (time == -1)
pPlayer->menuexpire = INFINITE; pPlayer->menuexpire = static_cast<float>(INFINITE);
else else
pPlayer->menuexpire = gpGlobals->time + static_cast<float>(time); 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; pPlayer->vgui = false;
if (time == -1) if (time == -1)
pPlayer->menuexpire = INFINITE; pPlayer->menuexpire = static_cast<float>(INFINITE);
else else
pPlayer->menuexpire = gpGlobals->time + static_cast<float>(time); 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]); amx_Push(pAmx, gparams[i]);
} }
err = amx_Exec(pAmx, &retVal, func); err = amx_ExecPerf(pAmx, &retVal, func);
if (err != AMX_ERR_NONE) if (err != AMX_ERR_NONE)
{ {

View File

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

View File

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

View File

@ -728,7 +728,7 @@ int Handler::HandleModule(const char *module, bool isClass)
m_pAmx->flags |= AMX_FLAG_PRENIT; m_pAmx->flags |= AMX_FLAG_PRENIT;
amx_Push(m_pAmx, isClass ? 1 : 0); amx_Push(m_pAmx, isClass ? 1 : 0);
amx_PushString(m_pAmx, &hea_addr, &phys_addr, module, 0, 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); amx_Release(m_pAmx, hea_addr);
m_pAmx->flags &= ~AMX_FLAG_PRENIT; 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, trap);
amx_Push(m_pAmx, index); amx_Push(m_pAmx, index);
amx_PushString(m_pAmx, &hea_addr, &phys_addr, native, 0, 0); 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) if (err != AMX_ERR_NONE)
{ {
//LogError() took care of something for us. //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_PushString(m_pAmx, &hea_addr, &phys_addr, msg, 0, 0);
amx_Push(m_pAmx, pDebugger ? 1 : 0); amx_Push(m_pAmx, pDebugger ? 1 : 0);
amx_Push(m_pAmx, error); 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) if (err != AMX_ERR_NONE)
{ {
//handle this manually. //handle this manually.

View File

@ -96,12 +96,14 @@ static cell AMX_NATIVE_CALL read_file(AMX *amx, cell *params)
{ {
length = strlen(buffer); length = strlen(buffer);
if (length > 0)
{
if (buffer[length - 1] == '\n') if (buffer[length - 1] == '\n')
buffer[--length] = '\0'; buffer[--length] = '\0';
if (buffer[length - 1] == '\r') if (buffer[length - 1] == '\r')
buffer[--length] = '\0'; buffer[--length] = '\0';
}
cell* textLen = get_amxaddr(amx, params[5]); cell* textLen = get_amxaddr(amx, params[5]);
*textLen = set_amxstring_utf8(amx, params[3], buffer, length, params[4]); *textLen = set_amxstring_utf8(amx, params[3], buffer, length, params[4]);
@ -756,7 +758,7 @@ struct DirectoryHandle
bool valvefs; 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) static cell AMX_NATIVE_CALL amx_open_dir(AMX *amx, cell *params)
{ {
int length; 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_mldebug = {"amx_mldebug", "", FCVAR_SPONLY};
cvar_t init_amxmodx_language = {"amx_language", "en", FCVAR_SERVER}; 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_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_version = NULL;
cvar_t* amxmodx_modules = NULL; cvar_t* amxmodx_modules = NULL;
cvar_t* amxmodx_debug = NULL;
cvar_t* amxmodx_language = NULL; cvar_t* amxmodx_language = NULL;
cvar_t* amxmodx_perflog = NULL;
cvar_t* hostname = NULL; cvar_t* hostname = NULL;
cvar_t* mp_timelimit = NULL; cvar_t* mp_timelimit = NULL;
@ -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_mldebug);
CVAR_REGISTER(&init_amxmodx_language); CVAR_REGISTER(&init_amxmodx_language);
CVAR_REGISTER(&init_amxmodx_cl_langs); CVAR_REGISTER(&init_amxmodx_cl_langs);
CVAR_REGISTER(&init_amxmodx_perflog);
amxmodx_version = CVAR_GET_POINTER(init_amxmodx_version.name); 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_language = CVAR_GET_POINTER(init_amxmodx_language.name);
amxmodx_perflog = CVAR_GET_POINTER(init_amxmodx_perflog.name);
REG_SVR_COMMAND("amxx", amx_command); 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; bool will_be_debugged = false;
tagAMX_DBG *pDbg = NULL; 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)) 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 (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); Debugger::GenericMessage(amx, err);
AMXXLOG_Log("An error occurred in plugin_natives. This is dangerous!"); 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(); pDebugger->BeginExec();
} }
err=amx_Exec(pNative->amx, &ret, pNative->func); err = amx_ExecPerf(pNative->amx, &ret, pNative->func);
if (err != AMX_ERR_NONE) if (err != AMX_ERR_NONE)
{ {
if (pDebugger && pDebugger->ErrorExists()) if (pDebugger && pDebugger->ErrorExists())

View File

@ -930,7 +930,7 @@ static cell AMX_NATIVE_CALL menu_display(AMX *amx, cell *params)
time = params[4]; time = params[4];
if (time < 0) if (time < 0)
pPlayer->menuexpire = INFINITE; pPlayer->menuexpire = static_cast<float>(INFINITE);
else else
pPlayer->menuexpire = gpGlobals->time + static_cast<float>(time); 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) 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; return 0;
} }
t->map.clear(); t->map.clear();
@ -40,7 +40,7 @@ static cell AMX_NATIVE_CALL TrieSetCell(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -76,7 +76,7 @@ static cell AMX_NATIVE_CALL TrieSetString(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -113,7 +113,7 @@ static cell AMX_NATIVE_CALL TrieSetArray(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -157,7 +157,7 @@ static cell AMX_NATIVE_CALL TrieGetCell(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -189,7 +189,7 @@ static cell AMX_NATIVE_CALL TrieGetString(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -236,7 +236,7 @@ static cell AMX_NATIVE_CALL TrieGetArray(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -297,7 +297,7 @@ static cell AMX_NATIVE_CALL TrieKeyExists(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -314,7 +314,7 @@ static cell AMX_NATIVE_CALL TrieDeleteKey(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -373,7 +373,7 @@ static cell AMX_NATIVE_CALL TrieGetSize(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -386,7 +386,7 @@ static cell AMX_NATIVE_CALL TrieSnapshotCreate(AMX *amx, cell *params)
if (!t) 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; return 0;
} }
@ -506,7 +506,7 @@ static cell AMX_NATIVE_CALL TrieIterCreate(AMX *amx, cell *params)
if (!handle) 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; 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.r1);
WRITE_BYTE(textparms.g1); WRITE_BYTE(textparms.g1);
WRITE_BYTE(textparms.b1); WRITE_BYTE(textparms.b1);
WRITE_BYTE(0); WRITE_BYTE(textparms.a1);
WRITE_BYTE(255); WRITE_BYTE(textparms.r2);
WRITE_BYTE(255); WRITE_BYTE(textparms.g2);
WRITE_BYTE(250); WRITE_BYTE(textparms.b2);
WRITE_BYTE(0); WRITE_BYTE(textparms.a2);
WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8))); WRITE_SHORT(FixedUnsigned16(textparms.fadeinTime, (1<<8)));
WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8))); WRITE_SHORT(FixedUnsigned16(textparms.fadeoutTime, (1<<8)));
WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8))); WRITE_SHORT(FixedUnsigned16(textparms.holdTime, (1<<8)));

View File

@ -1,32 +1,126 @@
version: 1.0.{build} version: 1.0.{build}
clone_folder: c:\projects\amxmodx
install: environment:
- git submodule update --init --recursive fast_finish: false
- 'c:' allow_failures: true
- mkdir c:\nasm matrix:
- set PATH=c:\nasm\nasm-2.13.03;%PATH% - job_name: MacOS
- curl -L -o "c:\nasm\nasm.zip" https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip appveyor_build_worker_image: macos-mojave
- chdir c:\nasm job_group: Build
- 7z x nasm.zip
- chdir c:\projects - job_name: Windows
- git clone https://github.com/alliedmodders/ambuild appveyor_build_worker_image: Visual Studio 2015
- git clone https://github.com/alliedmodders/metamod-hl1 job_group: Build
- 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' for:
- 7z x mysql-connector-c-6.1.1-win32.zip -o"mysql" -
- cd mysql matrix:
- dir only:
- ren mysql-connector-c-6.1.1-win32 mysql-5.5 - job_name: Windows
- move /Y mysql-5.5 ..\
- cd ..\ambuild clone_folder: c:\projects\amxmodx
- c:\python27\python setup.py install install:
- cd ..\amxmodx - cmd: >-
cache: git submodule update --init --recursive
- c:\projects\*.zip -> appveyor.yml
- c:\projects\mysql-5.5 -> appveyor.yml c:
build_script:
- '"%VS140COMNTOOLS%\vsvars32.bat"' mkdir c:\nasm
- mkdir build
- cd build set PATH=c:\nasm\nasm-2.13.03;%PATH%
- c:\python27\python ../configure.py --enable-optimize --nasm="C:\nasm\nasm-2.13.03\nasm.exe"
- ambuild 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++; s++;
} /* if */ } /* 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 ( ;; ) { for ( ;; ) {
if (*s>='0' && *s<='9') if (*s>='0' && *s<='9')
digit=*s-'0'; digit=*s-'0';

View File

@ -46,7 +46,7 @@
#define _MAX_PATH 250 #define _MAX_PATH 250
#endif #endif
#if !defined DIRSEP_CHAR #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 '/' #define DIRSEP_CHAR '/'
#elif defined macintosh #elif defined macintosh
#define DIRSEP_CHAR ':' #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 // 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 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" // Default values: "Welcome to %hostname%" "000255100"
// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255" // "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255"
amx_imessage "Welcome to %hostname%" "000255100" amx_imessage "Welcome to %hostname%" "000255100"
amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255" 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 // Default value: 180
amx_freq_imessage 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) // Ban times for the main ban menu (amx_banmenu)
// Use 0 for permanent ban. // Use 0 for permanent ban.
// Default values: 0 5 10 15 30 45 60 // Default values: 0 5 10 15 30 45 60

View File

@ -37,18 +37,38 @@ amx_show_activity 2
// Default value: "Welcome to %hostname% -- This server is using AMX Mod X" 600 // 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 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" // Default values: "Welcome to %hostname%" "000255100"
// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255" // "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255"
amx_imessage "Welcome to %hostname%" "000255100" amx_imessage "Welcome to %hostname%" "000255100"
amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255" 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 // Default value: 180
amx_freq_imessage 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) // Ban times for the main ban menu (amx_banmenu)
// Use 0 for permanent ban // Use 0 for permanent ban
// Default values: 0 5 10 15 30 45 60 // Default values: 0 5 10 15 30 45 60
@ -220,4 +240,3 @@ amx_statsx_freeze -2.0
// - // -
// Default value: 0 // Default value: 0
amx_restrmapsettings 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 // 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 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" // Default values: "Welcome to %hostname%" "000255100"
// "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255" // "This server is using AMX ModX\nVisit http://www.amxmodx.org" "000100255"
amx_imessage "Welcome to %hostname%" "000255100" amx_imessage "Welcome to %hostname%" "000255100"
amx_imessage "This server is using AMX Mod X\nVisit http://www.amxmodx.org" "000100255" 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 // Default value: 180
amx_freq_imessage 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) // Ban times for the main ban menu (amx_banmenu)
// Use 0 for permanent ban. // Use 0 for permanent ban.
// Default values: 0 5 10 15 30 45 60 // Default values: 0 5 10 15 30 45 60

View File

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

View File

@ -127,10 +127,10 @@ void CPlayer::Connect(const char* address ){
void CPlayer::restartStats(bool all) void CPlayer::restartStats(bool all)
{ {
if ( all ) memset(weapons,0,sizeof(weapons)); if ( all ) memset(&weapons,0,sizeof(weapons));
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats memset(&weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(&attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(&victims,0,sizeof(victims));
life = {}; 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! // 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); RankSystem::RankStats* stats = g_rank.findEntryInRankByPos((int)nItem + 1);
if (stats == NULL) { if (stats == NULL) {
char msg[] = "Error: Couldn't find the record by position! (nItem = %d)"; char msg[512];
sprintf(msg, msg, nItem); sprintf(msg, "Error: Couldn't find the record by position! (nItem = %d)", nItem);
MessageBox(hDlg, msg, "Oh fiddlesticks!", MB_OK); MessageBox(hDlg, msg, "Oh fiddlesticks!", MB_OK);
ClearStatsfields(hDlg); ClearStatsfields(hDlg);
return; 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* pAtt = GET_PLAYER_POINTER_I(att);
CPlayer* pVic = GET_PLAYER_POINTER_I(vic); CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
if ( !pAtt ) pAtt = pVic;
pVic->pEdict->v.dmg_inflictor = NULL; pVic->pEdict->v.dmg_inflictor = NULL;
pAtt->saveHit( pVic , weapon , dmg, aim ); pAtt->saveHit( pVic , weapon , dmg, aim );
if ( !pAtt ) pAtt = pVic;
int TA = 0; int TA = 0;
if ( (pVic->teamId == pAtt->teamId) && ( pVic != pAtt) ) if ( (pVic->teamId == pAtt->teamId) && ( pVic != pAtt) )
TA = 1; TA = 1;

View File

@ -3,6 +3,10 @@ import os.path
binary = AMXX.MetaModule(builder, 'dodfun') binary = AMXX.MetaModule(builder, 'dodfun')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [ binary.sources = [
'../../../public/sdk/amxxmodule.cpp', '../../../public/sdk/amxxmodule.cpp',
'NBase.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; GET_CP_PD(pent).model_body_neutral = ivalue;
return 1; return 1;
case CP_model_body_allies : case CP_model_body_allies :
GET_CP_PD(pent).model_body_axis = ivalue; GET_CP_PD(pent).model_body_allies = ivalue;
return 1; return 1;
case CP_model_body_axis : case CP_model_body_axis :
GET_CP_PD(pent).model_body_axis = ivalue; GET_CP_PD(pent).model_body_axis = ivalue;

View File

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

View File

@ -94,14 +94,14 @@ void CPlayer::restartStats(bool all)
{ {
if ( all ) if ( all )
{ {
memset(weapons,0,sizeof(weapons)); memset(&weapons,0,sizeof(weapons));
memset(static_cast<void *>(&round),0,sizeof(round)); memset(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(&weaponsLife,0,sizeof(weaponsLife)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(&attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(&victims,0,sizeof(victims));
life = {}; life = {};
} }
@ -434,7 +434,7 @@ void CPlayer::WeaponsCheck(int weapons)
int old; int old;
int cur; 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 // 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) 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 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) 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; pVic->pEdict->v.dmg_inflictor = NULL;
if(pAtt->index != pVic->index)
pAtt->saveHit(pVic , weapon , dmg, aim);
if(!pAtt) if(!pAtt)
pAtt = pVic; pAtt = pVic;
if(pAtt->index != pVic->index)
pAtt->saveHit(pVic , weapon , dmg, aim);
int TA = 0; int TA = 0;
if((pVic->pEdict->v.team == pAtt->pEdict->v.team) && (pVic != pAtt)) 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; pPlayer->clearRound = 0.0f;
memset(static_cast<void *>(&pPlayer->round),0,sizeof(pPlayer->round)); 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) if (pPlayer->sendScore && pPlayer->sendScore < gpGlobals->time)

View File

@ -222,7 +222,7 @@ void Client_AmmoX(void* mValue)
case 1: case 1:
if (!mPlayer ) if (!mPlayer )
break; break;
for(int i = 1; i < MAX_WEAPONS ; ++i) for(int i = 1; i < DODMAX_WEAPONS ; ++i)
{ {
if (iAmmo == weaponData[i].ammoSlot) if (iAmmo == weaponData[i].ammoSlot)
mPlayer->weapons[i].ammo = *(int*)mValue; mPlayer->weapons[i].ammo = *(int*)mValue;
@ -244,7 +244,7 @@ void Client_AmmoShort(void* mValue)
if(!mPlayer ) if(!mPlayer )
break; break;
for(int i = 1; i < MAX_WEAPONS ; ++i) for(int i = 1; i < DODMAX_WEAPONS ; ++i)
{ {
if (iAmmo == weaponData[i].ammoSlot) if (iAmmo == weaponData[i].ammoSlot)
mPlayer->weapons[i].ammo = *(int*)mValue; 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; gfm_tr->fAllSolid = *ptr;
return 1; return 1;
break;
} }
case TR_StartSolid: case TR_StartSolid:
{ {
gfm_tr->fStartSolid = *ptr; gfm_tr->fStartSolid = *ptr;
return 1; return 1;
break;
} }
case TR_InOpen: case TR_InOpen:
{ {
gfm_tr->fInOpen = *ptr; gfm_tr->fInOpen = *ptr;
return 1; return 1;
break;
} }
case TR_InWater: case TR_InWater:
{ {
gfm_tr->fInWater = *ptr; gfm_tr->fInWater = *ptr;
return 1; return 1;
break;
} }
case TR_flFraction: case TR_flFraction:
{ {
gfm_tr->flFraction = amx_ctof(*ptr); gfm_tr->flFraction = amx_ctof(*ptr);
return 1; return 1;
break;
} }
case TR_vecEndPos: 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.y = amx_ctof(ptr[1]);
gfm_tr->vecEndPos.z = amx_ctof(ptr[2]); gfm_tr->vecEndPos.z = amx_ctof(ptr[2]);
return 1; return 1;
break;
} }
case TR_flPlaneDist: case TR_flPlaneDist:
{ {
gfm_tr->flPlaneDist = amx_ctof(*ptr); gfm_tr->flPlaneDist = amx_ctof(*ptr);
return 1; return 1;
break;
} }
case TR_vecPlaneNormal: 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.y = amx_ctof(ptr[1]);
gfm_tr->vecPlaneNormal.z = amx_ctof(ptr[2]); gfm_tr->vecPlaneNormal.z = amx_ctof(ptr[2]);
return 1; return 1;
break;
} }
case TR_pHit: case TR_pHit:
{ {
@ -96,14 +88,12 @@ static cell AMX_NATIVE_CALL set_tr(AMX *amx, cell *params)
{ {
gfm_tr->iHitgroup = *ptr; gfm_tr->iHitgroup = *ptr;
return 1; return 1;
break;
} }
default: }
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]); MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0; return 0;
}
}
} }
static cell AMX_NATIVE_CALL get_tr(AMX *amx, cell *params) 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: case TR_AllSolid:
{ {
return gfm_tr->fAllSolid; return gfm_tr->fAllSolid;
break;
} }
case TR_StartSolid: case TR_StartSolid:
{ {
return gfm_tr->fStartSolid; return gfm_tr->fStartSolid;
break;
} }
case TR_InOpen: case TR_InOpen:
{ {
return gfm_tr->fInOpen; return gfm_tr->fInOpen;
break;
} }
case TR_InWater: case TR_InWater:
{ {
return gfm_tr->fInWater; return gfm_tr->fInWater;
break;
} }
case TR_flFraction: case TR_flFraction:
{ {
ptr = MF_GetAmxAddr(amx, params[2]); ptr = MF_GetAmxAddr(amx, params[2]);
*ptr = amx_ftoc(gfm_tr->flFraction); *ptr = amx_ftoc(gfm_tr->flFraction);
return 1; return 1;
break;
} }
case TR_vecEndPos: 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[1] = amx_ftoc(gfm_tr->vecEndPos.y);
ptr[2] = amx_ftoc(gfm_tr->vecEndPos.z); ptr[2] = amx_ftoc(gfm_tr->vecEndPos.z);
return 1; return 1;
break;
} }
case TR_flPlaneDist: case TR_flPlaneDist:
{ {
ptr = MF_GetAmxAddr(amx, params[2]); ptr = MF_GetAmxAddr(amx, params[2]);
*ptr = amx_ftoc(gfm_tr->flPlaneDist); *ptr = amx_ftoc(gfm_tr->flPlaneDist);
return 1; return 1;
break;
} }
case TR_vecPlaneNormal: 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[1] = amx_ftoc(gfm_tr->vecPlaneNormal.y);
ptr[2] = amx_ftoc(gfm_tr->vecPlaneNormal.z); ptr[2] = amx_ftoc(gfm_tr->vecPlaneNormal.z);
return 1; return 1;
break;
} }
case TR_pHit: case TR_pHit:
{ {
if (FNullEnt(gfm_tr->pHit)) if (FNullEnt(gfm_tr->pHit))
return -1; return -1;
return ENTINDEX(gfm_tr->pHit); return ENTINDEX(gfm_tr->pHit);
break;
} }
case TR_iHitgroup: case TR_iHitgroup:
{ {
return gfm_tr->iHitgroup; return gfm_tr->iHitgroup;
break;
} }
default: }
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]); MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0; return 0;
}
}
} }
AMX_NATIVE_INFO tr_Natives[] = 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; tr->fAllSolid = *ptr;
return 1; return 1;
break;
} }
case TR_InOpen: case TR_InOpen:
{ {
tr->fInOpen = *ptr; tr->fInOpen = *ptr;
return 1; return 1;
break;
} }
case TR_StartSolid: case TR_StartSolid:
{ {
tr->fStartSolid = *ptr; tr->fStartSolid = *ptr;
return 1; return 1;
break;
} }
case TR_InWater: case TR_InWater:
{ {
tr->fInWater = *ptr; tr->fInWater = *ptr;
return 1; return 1;
break;
} }
case TR_flFraction: case TR_flFraction:
{ {
tr->flFraction = amx_ctof(*ptr); tr->flFraction = amx_ctof(*ptr);
return 1; return 1;
break;
} }
case TR_vecEndPos: 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.y = amx_ctof(ptr[1]);
tr->vecEndPos.z = amx_ctof(ptr[2]); tr->vecEndPos.z = amx_ctof(ptr[2]);
return 1; return 1;
break;
} }
case TR_flPlaneDist: case TR_flPlaneDist:
{ {
tr->flPlaneDist = amx_ctof(*ptr); tr->flPlaneDist = amx_ctof(*ptr);
return 1; return 1;
break;
} }
case TR_vecPlaneNormal: 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.y = amx_ctof(ptr[1]);
tr->vecPlaneNormal.z = amx_ctof(ptr[2]); tr->vecPlaneNormal.z = amx_ctof(ptr[2]);
return 1; return 1;
break;
} }
case TR_pHit: case TR_pHit:
{ {
@ -110,14 +102,10 @@ static cell AMX_NATIVE_CALL set_tr2(AMX *amx, cell *params)
{ {
tr->iHitgroup = *ptr; tr->iHitgroup = *ptr;
return 1; return 1;
break;
} }
default: }
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]); MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
}
return 0; return 0;
} }
@ -137,29 +125,24 @@ static cell AMX_NATIVE_CALL get_tr2(AMX *amx, cell *params)
case TR_AllSolid: case TR_AllSolid:
{ {
return tr->fAllSolid; return tr->fAllSolid;
break;
} }
case TR_InOpen: case TR_InOpen:
{ {
return tr->fInOpen; return tr->fInOpen;
break;
} }
case TR_StartSolid: case TR_StartSolid:
{ {
return tr->fStartSolid; return tr->fStartSolid;
break;
} }
case TR_InWater: case TR_InWater:
{ {
return tr->fInWater; return tr->fInWater;
break;
} }
case TR_flFraction: case TR_flFraction:
{ {
ptr = MF_GetAmxAddr(amx, params[3]); ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(tr->flFraction); *ptr = amx_ftoc(tr->flFraction);
return 1; return 1;
break;
} }
case TR_vecEndPos: 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[1] = amx_ftoc(tr->vecEndPos.y);
ptr[2] = amx_ftoc(tr->vecEndPos.z); ptr[2] = amx_ftoc(tr->vecEndPos.z);
return 1; return 1;
break;
} }
case TR_flPlaneDist: case TR_flPlaneDist:
{ {
ptr = MF_GetAmxAddr(amx, params[3]); ptr = MF_GetAmxAddr(amx, params[3]);
*ptr = amx_ftoc(tr->flPlaneDist); *ptr = amx_ftoc(tr->flPlaneDist);
return 1; return 1;
break;
} }
case TR_vecPlaneNormal: case TR_vecPlaneNormal:
{ {
@ -184,26 +165,20 @@ static cell AMX_NATIVE_CALL get_tr2(AMX *amx, cell *params)
ptr[1] = amx_ftoc(tr->vecPlaneNormal.y); ptr[1] = amx_ftoc(tr->vecPlaneNormal.y);
ptr[2] = amx_ftoc(tr->vecPlaneNormal.z); ptr[2] = amx_ftoc(tr->vecPlaneNormal.z);
return 1; return 1;
break;
} }
case TR_pHit: case TR_pHit:
{ {
if (FNullEnt(tr->pHit)) if (FNullEnt(tr->pHit))
return -1; return -1;
return ENTINDEX(tr->pHit); return ENTINDEX(tr->pHit);
break;
} }
case TR_iHitgroup: case TR_iHitgroup:
{ {
return tr->iHitgroup; return tr->iHitgroup;
break;
} }
default: }
{
MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]); MF_LogError(amx, AMX_ERR_NATIVE, "Unknown TraceResult member %d", params[2]);
return 0;
}
}
return 0; return 0;
} }
@ -221,7 +196,6 @@ static cell AMX_NATIVE_CALL get_kvd(AMX *amx, cell *params)
case KV_fHandled: case KV_fHandled:
{ {
return kvd->fHandled; return kvd->fHandled;
break;
} }
case KV_ClassName: 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]); cell *ptr = MF_GetAmxAddr(amx, params[4]);
return MF_SetAmxString(amx, params[3], kvd->szClassName, (int)*ptr); return MF_SetAmxString(amx, params[3], kvd->szClassName, (int)*ptr);
break;
} }
case KV_KeyName: 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]); cell *ptr = MF_GetAmxAddr(amx, params[4]);
return MF_SetAmxString(amx, params[3], kvd->szKeyName, (int)*ptr); return MF_SetAmxString(amx, params[3], kvd->szKeyName, (int)*ptr);
break;
} }
case KV_Value: case KV_Value:
{ {
@ -254,7 +226,6 @@ static cell AMX_NATIVE_CALL get_kvd(AMX *amx, cell *params)
} }
cell *ptr = MF_GetAmxAddr(amx, params[4]); cell *ptr = MF_GetAmxAddr(amx, params[4]);
return MF_SetAmxString(amx, params[3], kvd->szValue, (int)*ptr); return MF_SetAmxString(amx, params[3], kvd->szValue, (int)*ptr);
break;
} }
} }
@ -301,28 +272,24 @@ static cell AMX_NATIVE_CALL set_kvd(AMX *amx, cell *params)
{ {
kvd->fHandled = (int)*ptr; kvd->fHandled = (int)*ptr;
return 1; return 1;
break;
} }
case KV_ClassName: case KV_ClassName:
{ {
kvdw->cls = MF_GetAmxString(amx, params[3], 0, &len); kvdw->cls = MF_GetAmxString(amx, params[3], 0, &len);
kvd->szClassName = const_cast<char *>(kvdw->cls.chars()); kvd->szClassName = const_cast<char *>(kvdw->cls.chars());
return 1; return 1;
break;
} }
case KV_KeyName: case KV_KeyName:
{ {
kvdw->key = MF_GetAmxString(amx, params[3], 0, &len); kvdw->key = MF_GetAmxString(amx, params[3], 0, &len);
kvd->szKeyName = const_cast<char *>(kvdw->key.chars()); kvd->szKeyName = const_cast<char *>(kvdw->key.chars());
return 1; return 1;
break;
} }
case KV_Value: case KV_Value:
{ {
kvdw->val = MF_GetAmxString(amx, params[3], 0, &len); kvdw->val = MF_GetAmxString(amx, params[3], 0, &len);
kvd->szValue = const_cast<char *>(kvdw->val.chars()); kvd->szValue = const_cast<char *>(kvdw->val.chars());
return 1; 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]); es->vuser3.z = amx_ctof(ptr[2]);
return 1; return 1;
case ES_vUser4: case ES_vUser4:
es->vuser3.x = amx_ctof(ptr[0]); es->vuser4.x = amx_ctof(ptr[0]);
es->vuser3.y = amx_ctof(ptr[1]); es->vuser4.y = amx_ctof(ptr[1]);
es->vuser3.z = amx_ctof(ptr[2]); es->vuser4.z = amx_ctof(ptr[2]);
return 1; return 1;
} }

View File

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

View File

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

View File

@ -232,6 +232,15 @@ namespace AMXX
*/ */
virtual const char *ValueToString(JS_Handle value) = 0; 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. * @brief Gets a number.
* *
@ -277,6 +286,16 @@ namespace AMXX
*/ */
virtual const char *ArrayGetString(JS_Handle array, size_t index) = 0; 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. * @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; 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. * @brief Gets a number from the object.
* *
@ -696,6 +729,15 @@ namespace AMXX
*/ */
virtual char *SerialToString(JS_Handle value, bool pretty) = 0; 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. * @brief Frees serialized string.
* *

View File

@ -465,3 +465,8 @@ char *JSONMngr::SerialToString(JS_Handle value, bool pretty)
return (result) ? result : nullptr; 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 // Convert functions
const char *ValueToString(JS_Handle value) override; 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 inline double ValueToNum(JS_Handle value) override
{ {
return json_value_get_number(m_Handles[value]->m_pValue); return json_value_get_number(m_Handles[value]->m_pValue);
@ -81,6 +85,10 @@ class JSONMngr : public IJSONMngr
// Wrappers for Array API // Wrappers for Array API
bool ArrayGetValue(JS_Handle array, size_t index, JS_Handle *handle) override; bool ArrayGetValue(JS_Handle array, size_t index, JS_Handle *handle) override;
const char *ArrayGetString(JS_Handle array, size_t index) 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 inline bool ArrayGetBool(JS_Handle array, size_t index) override
{ {
return json_array_get_boolean(m_Handles[array]->m_pArray, index) == 1; return json_array_get_boolean(m_Handles[array]->m_pArray, index) == 1;
@ -142,6 +150,15 @@ class JSONMngr : public IJSONMngr
// Get functions // Get functions
bool ObjectGetValue(JS_Handle object, const char *name, JS_Handle *handle, bool dotfunc) override; 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; 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; double ObjectGetNum(JS_Handle object, const char *name, bool dotfunc) override;
bool ObjectGetBool(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 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 SerialToBuffer(JS_Handle value, char *buffer, size_t size, bool pretty) override;
bool SerialToFile(JS_Handle value, const char *filepath, bool pretty) override; bool SerialToFile(JS_Handle value, const char *filepath, bool pretty) override;
char *SerialToString(JS_Handle value, bool pretty) override; char *SerialToString(JS_Handle value, bool pretty) override;
void EscapeSlashes(int escape_slashes) override;
inline void FreeString(char *string) override inline void FreeString(char *string) override
{ {
json_free_serialized_string(string); 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)); 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); //native Float:json_get_real(const JSON:value);
static cell AMX_NATIVE_CALL amxx_json_get_real(AMX *amx, cell *params) 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]); 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); //native json_array_get_number(const JSON:array, index);
static cell AMX_NATIVE_CALL amxx_json_array_get_number(AMX *amx, cell *params) 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]); 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); //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) 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; return 0;
} }
if (!JsonMngr->IsValidHandle(params[3]))
{
MF_LogError(amx, AMX_ERR_NATIVE, "Invalid JSON value! %d", params[3]);
return 0;
}
int len; int len;
auto name = MF_GetAmxString(amx, params[2], 0, &len); auto name = MF_GetAmxString(amx, params[2], 0, &len);
@ -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); 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[] = AMX_NATIVE_INFO JsonNatives[] =
{ {
{ "json_parse", amxx_json_parse }, { "json_parse", amxx_json_parse },
@ -882,11 +937,13 @@ AMX_NATIVE_INFO JsonNatives[] =
{ "json_deep_copy", amxx_json_deep_copy }, { "json_deep_copy", amxx_json_deep_copy },
{ "json_free", amxx_json_free }, { "json_free", amxx_json_free },
{ "json_get_string", amxx_json_get_string }, { "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_number", amxx_json_get_number },
{ "json_get_real", amxx_json_get_real }, { "json_get_real", amxx_json_get_real },
{ "json_get_bool", amxx_json_get_bool }, { "json_get_bool", amxx_json_get_bool },
{ "json_array_get_value", amxx_json_array_get_value }, { "json_array_get_value", amxx_json_array_get_value },
{ "json_array_get_string", amxx_json_array_get_string }, { "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_count", amxx_json_array_get_count },
{ "json_array_get_number", amxx_json_array_get_number }, { "json_array_get_number", amxx_json_array_get_number },
{ "json_array_get_real", amxx_json_array_get_real }, { "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_array_clear", amxx_json_array_clear },
{ "json_object_get_value", amxx_json_object_get_value }, { "json_object_get_value", amxx_json_object_get_value },
{ "json_object_get_string", amxx_json_object_get_string }, { "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_number", amxx_json_object_get_number },
{ "json_object_get_real", amxx_json_object_get_real }, { "json_object_get_real", amxx_json_object_get_real },
{ "json_object_get_bool", amxx_json_object_get_bool }, { "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_size", amxx_json_serial_size },
{ "json_serial_to_string", amxx_json_serial_to_string }, { "json_serial_to_string", amxx_json_serial_to_string },
{ "json_serial_to_file", amxx_json_serial_to_file }, { "json_serial_to_file", amxx_json_serial_to_file },
{ "json_set_escape_slashes", amxx_json_set_escape_slashes },
{ nullptr, nullptr } { nullptr, nullptr }
}; };

View File

@ -17,18 +17,18 @@ if AMXX.mysql_path:
binary.sources = [] 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.defines += ['stricmp=strcasecmp']
binary.compiler.linkflags += [ binary.compiler.linkflags += [
os.path.join(AMXX.mysql_path, 'lib', 'libmysqlclient_r.a'), os.path.join(AMXX.mysql_path, 'lib', 'libmysqlclient_r.a'),
'-lpthread', '-lpthread',
'-lm', '-lm',
] ]
if builder.target_platform is 'linux': if builder.target_platform == 'linux':
binary.compiler.linkflags += [ binary.compiler.linkflags += [
'-lrt' '-lrt'
] ]
elif builder.target_platform is 'windows': elif builder.target_platform == 'windows':
binary.compiler.linkflags += [ binary.compiler.linkflags += [
os.path.join(AMXX.mysql_path, 'lib', 'mysqlclient.lib'), os.path.join(AMXX.mysql_path, 'lib', 'mysqlclient.lib'),
'ws2_32.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); int num = row->GetInt(col);
return num; return num;
break;
} }
default: default:
{ {

View File

@ -247,7 +247,6 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
case 2: case 2:
{ {
return atoi(data); return atoi(data);
break;
} }
case 3: case 3:
{ {
@ -255,12 +254,10 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
REAL fdata = atof(data); REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata); *destaddr = amx_ftoc(fdata);
return 1; return 1;
break;
} }
case 4: case 4:
{ {
return MF_SetAmxString(amx, params[3], data, params[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: case 2:
{ {
return atoi(data); return atoi(data);
break;
} }
case 3: case 3:
{ {
@ -323,12 +319,10 @@ static cell AMX_NATIVE_CALL dbi_result(AMX *amx, cell *params)
REAL fdata = atof(data); REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata); *destaddr = amx_ftoc(fdata);
return 1; return 1;
break;
} }
case 4: case 4:
{ {
return MF_SetAmxString(amx, params[3], data, params[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: case 2:
{ {
return atoi(val); return atoi(val);
break;
} }
case 3: case 3:
{ {
cell *fAddr = MF_GetAmxAddr(amx, params[3]); cell *fAddr = MF_GetAmxAddr(amx, params[3]);
*fAddr = amx_ftoc((REAL)atof(val)); *fAddr = amx_ftoc((REAL)atof(val));
return 1; return 1;
break;
} }
case 4: case 4:
{ {
len = *(MF_GetAmxAddr(amx, params[4])); len = *(MF_GetAmxAddr(amx, params[4]));
return MF_SetAmxString(amx, params[3], val, len); 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} * $nn or ${nn}
* ^ ^ * ^ ^
*/ */
if (*walk && *walk >= '0' && *walk <= '9') if (*walk >= '0' && *walk <= '9')
{ {
backref = backref * 10 + *walk - '0'; backref = backref * 10 + *walk - '0';
++walk; ++walk;

View File

@ -12,7 +12,7 @@ binary.compiler.defines += [
'HAVE_STDINT_H', '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.defines += ['stricmp=strcasecmp']
binary.compiler.postlink += ['-lpthread'] 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); int num = row->GetInt(col);
return num; return num;
break;
} }
default: default:
{ {

View File

@ -245,7 +245,6 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
case 2: case 2:
{ {
return atoi(data); return atoi(data);
break;
} }
case 3: case 3:
{ {
@ -253,12 +252,10 @@ static cell AMX_NATIVE_CALL dbi_field(AMX *amx, cell *params)
REAL fdata = atof(data); REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata); *destaddr = amx_ftoc(fdata);
return 1; return 1;
break;
} }
case 4: case 4:
{ {
return MF_SetAmxString(amx, params[3], data, params[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: case 2:
{ {
return atoi(data); return atoi(data);
break;
} }
case 3: case 3:
{ {
@ -317,12 +313,10 @@ static cell AMX_NATIVE_CALL dbi_result(AMX *amx, cell *params)
REAL fdata = atof(data); REAL fdata = atof(data);
*destaddr = amx_ftoc(fdata); *destaddr = amx_ftoc(fdata);
return 1; return 1;
break;
} }
case 4: case 4:
{ {
return MF_SetAmxString(amx, params[3], data, params[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 = AMXX.MetaModule(builder, 'tfcx')
binary.compiler.defines += [
'HAVE_STDINT_H',
]
binary.sources = [ binary.sources = [
'../../public/sdk/amxxmodule.cpp', '../../public/sdk/amxxmodule.cpp',
'CRank.cpp', 'CRank.cpp',

View File

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

View File

@ -161,10 +161,10 @@ struct CPlayer {
int clip; int clip;
}; };
PlayerWeapon weapons[MAX_WEAPONS]; PlayerWeapon weapons[TFCMAX_WEAPONS];
PlayerWeapon attackers[33]; PlayerWeapon attackers[33];
PlayerWeapon victims[33]; PlayerWeapon victims[33];
Stats weaponsRnd[MAX_WEAPONS]; // DEC-Weapon (Round) stats Stats weaponsRnd[TFCMAX_WEAPONS]; // DEC-Weapon (Round) stats
Stats life; Stats life;
int teamId; 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* pAtt = GET_PLAYER_POINTER_I(att);
CPlayer* pVic = GET_PLAYER_POINTER_I(vic); CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
if ( !pAtt ) pAtt = pVic;
pVic->pEdict->v.dmg_inflictor = NULL; pVic->pEdict->v.dmg_inflictor = NULL;
pAtt->saveHit( pVic , weapon , dmg, aim ); pAtt->saveHit( pVic , weapon , dmg, aim );
if ( !pAtt ) pAtt = pVic;
int TA = 0; int TA = 0;
if ( (pVic->pEdict->v.team == pAtt->pEdict->v.team ) && ( pVic != pAtt) ) if ( (pVic->pEdict->v.team == pAtt->pEdict->v.team ) && ( pVic != pAtt) )
TA = 1; TA = 1;

View File

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

View File

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

View File

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

View File

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

View File

@ -78,10 +78,10 @@ void CPlayer::Connect(const char* ippp)
void CPlayer::restartStats(bool all) void CPlayer::restartStats(bool all)
{ {
if ( all ) memset(weapons,0,sizeof(weapons)); if ( all ) memset(&weapons,0,sizeof(weapons));
memset(weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats memset(&weaponsRnd,0,sizeof(weaponsRnd)); //DEC-Weapon (Round) stats
memset(attackers,0,sizeof(attackers)); memset(&attackers,0,sizeof(attackers));
memset(victims,0,sizeof(victims)); memset(&victims,0,sizeof(victims));
life = {}; 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* pAtt = GET_PLAYER_POINTER_I(att);
CPlayer* pVic = GET_PLAYER_POINTER_I(vic); CPlayer* pVic = GET_PLAYER_POINTER_I(vic);
if ( !pAtt ) pAtt = pVic;
pVic->pEdict->v.dmg_inflictor = NULL; pVic->pEdict->v.dmg_inflictor = NULL;
pAtt->saveHit( pVic , weapon , dmg, aim ); pAtt->saveHit( pVic , weapon , dmg, aim );
if ( !pAtt ) pAtt = pVic;
int TA = 0; int TA = 0;
if ( (pVic->pEdict->v.team == pAtt->pEdict->v.team ) && ( pVic != pAtt) ) if ( (pVic->pEdict->v.team == pAtt->pEdict->v.team ) && ( pVic != pAtt) )
TA = 1; TA = 1;

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -124,10 +124,8 @@ public plugin_precache( )
new fieldNums = 0; new fieldNums = 0;
new const voxIdent[] = "vox", fvoxIdent[] = "fvox", barneyIdent[] = "barney", hgruntIdent[] = "hgrunt"; 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 */ /* Strips newline */
new len = strlen( szText ); 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 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 ( file_exists( szSound ) )
{ {
if ( sndExt[1] == 'm') precache_generic( szSound );
{
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 );
}
} }
} }
line++; line++;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -809,6 +809,13 @@ stock reset_menu(index)
/** /**
* Calls a function after a specified time has elapsed. * 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 time Time interval to assign
* @param function Function to execute * @param function Function to execute
* @param id Task id to assign * @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 fadeintime Time it takes the message to fully appear (fade-in)
* @param fadeouttime Time it takes the message to fully disappear (fade-out) * @param fadeouttime Time it takes the message to fully disappear (fade-out)
* @param channel Channel to use on the client * @param channel Channel to use on the client
* @param alpha1 Alpha component of hudmessage color
* @param color2[4] Color 2 array {r,g,b,a}
* *
* @noreturn * @noreturn
*/ */
native set_hudmessage(red = 200, green = 100, blue = 0, Float:x = -1.0, Float:y = 0.35, effects = 0, Float:fxtime = 6.0, Float:holdtime = 12.0, Float:fadeintime = 0.1, Float:fadeouttime = 0.2, channel = -1); native set_hudmessage(red = 200, green = 100, blue = 0, Float:x = -1.0, Float:y = 0.35, effects = 0, Float:fxtime = 6.0, Float:holdtime = 12.0, Float:fadeintime = 0.1, Float:fadeouttime = 0.2, channel = -1, alpha1 = 0, color2[4] = {255, 255, 250, 0});
/** /**
* Displays a message on the client HUD. * Displays a message on the client HUD.
@ -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 * @note Please consider using set_task_ex() instead which allows you to
* use named constants for flags instead of letters. * 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 time Time interval to assign
* @param function Function to execute * @param function Function to execute
* @param id Task id to assign * @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 * 0 is actively used. You should not change the value of the second
* parameter from the default. * 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 * @param id Flag set id, ranging from 0 to 31
* *
* @return Bitflag sum of client's admin flags * @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 * @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. * 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); 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. * 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); 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. * 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); 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. * 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 * @error If passed handle is not a valid value
*/ */
native bool:json_serial_to_file(const JSON:value, const file[], bool:pretty = false); 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_byte(TE_FIZZ)
* write_short(entity) * write_short(entity)
* write_short(sprite index) * write_short(sprite index)
* write_byte density) * write_byte(density)
*/ */
#define TE_FIZZ 105 #define TE_FIZZ 105

View File

@ -98,9 +98,9 @@
/** @endsection */ /** @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) * public <function>(id, menu, item)
* id - Client the menu is being acted upon. * id - Client the menu is being acted upon.
@ -110,7 +110,7 @@
* should never be called immediately if the item is a status * should never be called immediately if the item is a status
* code, for re-entrancy reasons. * code, for re-entrancy reasons.
* *
* The handler function should always return PLUGIN_HANDLED to block * @note The handler function should always return PLUGIN_HANDLED to block
* any old menu handlers from potentially feeding on the menu, unless * any old menu handlers from potentially feeding on the menu, unless
* that is the desired functionality. * that is the desired functionality.
* *
@ -129,14 +129,14 @@ 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) * public <function>(id, menu, item)
* id - Client index being displayed to. * id - Client index being displayed to.
* menu - Menu resource identifier. * menu - Menu resource identifier.
* item - Item being drawn. * item - Item being drawn.
* <return> - ITEM_IGNORE to use the default functionality. ITEM_ENABLED to * <return> - ITEM_IGNORE to use the default functionality.
* explicitly enable or ITEM_DISABLED to explicitly disable. * ITEM_ENABLED to explicitly enable or ITEM_DISABLED to explicitly disable.
* *
* @param function Function name. * @param function Function name.
* @return Menu callback ID. * @return Menu callback ID.
@ -144,7 +144,7 @@ native menu_create(const title[], const handler[], bool:ml = false);
native menu_makecallback(const function[]); native menu_makecallback(const function[]);
/** /**
* Adds an menu to a menu. * Adds an item to a menu.
* *
* @param menu Menu resource identifier. * @param menu Menu resource identifier.
* @param name Item text to display. * @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. * 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 * @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 * the title. If newmenu is not valid, and the menu is valid, then the player
* is viewing a menu displayed with show_menu(). * 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 id Client index.
* @param menu Variable to store old menu id. If none, then <1 will be * @param menu Variable to store old menu id. If none, then <1 will be
@ -307,7 +307,7 @@ native player_menu_info(id, &menu, &newmenu, &menupage=0);
/** /**
* Adds a blank line to a menu. * Adds a blank line to a menu.
* *
* When using slot=1 this might break your menu. To achieve this functionality * @note When using slot=1 this might break your menu. To achieve this functionality
* menu_addblank2 should be used. * menu_addblank2 should be used.
* *
* @param menu Menu resource identifier. * @param menu Menu resource identifier.
@ -319,9 +319,9 @@ native player_menu_info(id, &menu, &newmenu, &menupage=0);
native menu_addblank(menu, slot=1); 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 * @note When using slot=1 this might break your menu. To achieve this functionality
* menu_addtext2 should be used. * menu_addtext2 should be used.
* *
* @param menu Menu resource identifier. * @param menu Menu resource identifier.
@ -336,12 +336,10 @@ native menu_addtext(menu, const text[], slot=1);
/** /**
* Adds a blank line to a menu, always shifting the numbering down. * 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 * @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 * item count and pagination. These items can be modified later but will ignore
* access and item callback results. * access and item callback results.
* *
* Only available in 1.8.3 and above.
*
* @param menu Menu resource identifier. * @param menu Menu resource identifier.
* *
* @return 1 on success, 0 on failure. * @return 1 on success, 0 on failure.
@ -353,12 +351,10 @@ native menu_addblank2( menu );
/** /**
* Adds a text line to a menu, always shifting the numbering down. * 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 * @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 * item count and pagination. These items can be modified later but will ignore
* access and item callback results. * access and item callback results.
* *
* Only available in 1.8.3 and above.
*
* @param menu Menu resource identifier. * @param menu Menu resource identifier.
* @param text Text to add. * @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. * @param queryfmt The query string that can be formated with format specifiers.
* @pram ... Additional arguments for formating the query. * @pram ... Additional arguments for formating the query.
* *
* @return 1 on error. * @return -1 on error.
* >= 0 on success (with the number of affected rows). * >= 0 on success (with the number of affected rows).
*/ */
stock SQL_QueryAndIgnore(Handle:db, const queryfmt[], any:...) stock SQL_QueryAndIgnore(Handle:db, const queryfmt[], any:...)

View File

@ -24,6 +24,8 @@ enum
timeunit_hours, timeunit_hours,
timeunit_days, timeunit_days,
timeunit_weeks, timeunit_weeks,
timeunit_months,
timeunit_years,
}; };
/* Seconds in each time unit */ /* Seconds in each time unit */
@ -31,6 +33,8 @@ enum
#define SECONDS_IN_HOUR 3600 #define SECONDS_IN_HOUR 3600
#define SECONDS_IN_DAY 86400 #define SECONDS_IN_DAY 86400
#define SECONDS_IN_WEEK 604800 #define SECONDS_IN_WEEK 604800
#define SECONDS_IN_MONTH 2592000
#define SECONDS_IN_YEAR 31536000
/** /**
* Stock by Brad. * Stock by Brad.
@ -39,7 +43,7 @@ enum
* *
* @param id The player whose language the length should be translated to * @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 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 output The variable you want the verbose text to be placed in
* @param outputLen The length of the output variable * @param outputLen The length of the output variable
* *
@ -50,7 +54,7 @@ stock get_time_length(id, unitCnt, type, output[], outputLen)
if (unitCnt > 0) if (unitCnt > 0)
{ {
// determine the number of each time unit there are // 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) 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_hours: secondCnt = unitCnt * SECONDS_IN_HOUR;
case timeunit_days: secondCnt = unitCnt * SECONDS_IN_DAY; case timeunit_days: secondCnt = unitCnt * SECONDS_IN_DAY;
case timeunit_weeks: secondCnt = unitCnt * SECONDS_IN_WEEK; 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; weekCnt = secondCnt / SECONDS_IN_WEEK;
secondCnt -= (weekCnt * 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 // translate the unit counts into verbose text
new maxElementIdx = -1; 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) if (weekCnt > 0)
format(timeElement[++maxElementIdx], charsmax(timeElement[]), "%i %L", weekCnt, id, (weekCnt == 1) ? "TIME_ELEMENT_WEEK" : "TIME_ELEMENT_WEEKS"); format(timeElement[++maxElementIdx], charsmax(timeElement[]), "%i %L", weekCnt, id, (weekCnt == 1) ? "TIME_ELEMENT_WEEK" : "TIME_ELEMENT_WEEKS");
if (dayCnt > 0) 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 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 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 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... NO_ENTRY = Nqmate dostup do servera...
[ro] [ro]
LOADED_ADMIN = 1 administrator a fost incarcat din fisier LOADED_ADMIN = 1 admin a fost încărcat din fișier
LOADED_ADMINS = %d administratori au fost incarcati din fisier LOADED_ADMINS = %d admini au fost încărcați din fișier
SQL_CANT_CON = Eroare SQL: conectare esuata: '%s' SQL_CANT_CON = Eroare SQL: conectare nereușită: '%s'
SQL_CANT_LOAD_ADMINS = Eroare SQL: esuare incarcare administratori: '%s' SQL_CANT_LOAD_ADMINS = Eroare SQL: eșuare încărcare admini: '%s'
NO_ADMINS = Nu a fost gasit nici un administrator. NO_ADMINS = Nu a fost găsit niciun admin.
SQL_LOADED_ADMIN = 1 administrator a fost incarcat din baza de date SQL_LOADED_ADMIN = 1 admin a fost încărcat din baza de date
SQL_LOADED_ADMINS = %d administratori au fost incarcati din baza de date SQL_LOADED_ADMINS = %d admini au fost încărcați din baza de date
INV_PAS = Parola invalida! INV_PAS = Parolă invalidă!
PAS_ACC = Parola acceptata PAS_ACC = Parolă acceptată
PRIV_SET = Privilegii acordate PRIV_SET = Drepturi de acces acordate
NO_ENTRY = Acest nume este rezervat pe server. NO_ENTRY = Nu aveți permisiunea de a intra pe server...
[hu] [hu]
LOADED_ADMIN = 1 admin betöltve a fájlból. 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_ADMIN = 1 admin foi carregado do ficheiro
LOADED_ADMINS = %d admins foram carregados do ficheiro LOADED_ADMINS = %d admins foram carregados do ficheiro
SQL_CANT_CON = Erro de SQL: não foi possível conectar-se: '%s' SQL_CANT_CON = Erro de SQL: não foi possível conectar-se: '%s'
SQL_CANT_LOAD_ADMINS = Erro de SQl: não foi possível carregar admins: '%s' SQL_CANT_LOAD_ADMINS = Erro de SQL: não foi possível carregar admins: '%s'
NO_ADMINS = Não foram encontrados admins. NO_ADMINS = Não foram encontrados admins.
SQL_LOADED_ADMIN = 1 admin foi carregado da base de dados SQL_LOADED_ADMIN = 1 admin foi carregado da base de dados
SQL_LOADED_ADMINS = %d admins foram carregados da base de dados SQL_LOADED_ADMINS = %d admins foram carregados da base de dados

View File

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

View File

@ -9,15 +9,15 @@ ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banned BANNED = banned
REASON = reason REASON = reason
FOR_MIN = for %s min FOR_MIN = for %d min
PERM = permanently PERM = permanently
CLIENT_BANNED = Client "%s" banned CLIENT_BANNED = Client "%s" banned
ADMIN_SLAY_1 = ADMIN: slay %s ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: slap %s with %d damage
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Map with that name not found or map is invalid
ADMIN_MAP_1 = ADMIN: changelevel %s ADMIN_MAP_1 = ADMIN: changelevel %s
ADMIN_MAP_2 = ADMIN %s: 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 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_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 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] [de]
ADMIN_KICK_1 = ADMIN: kickt %s ADMIN_KICK_1 = ADMIN: kickt %s
@ -91,10 +123,10 @@ PERM = für immer
CLIENT_BANNED = Spieler "%s" gebannt CLIENT_BANNED = Spieler "%s" gebannt
ADMIN_SLAY_1 = ADMIN: killt %s ADMIN_SLAY_1 = ADMIN: killt %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: schlägt %s mit %d Schaden
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Diese Map ist nicht vorhanden oder unzulässig
ADMIN_MAP_1 = ADMIN: wechselt zur Map %s ADMIN_MAP_1 = ADMIN: wechselt zur Map %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banovan BANNED = banovan
REASON = razlog REASON = razlog
FOR_MIN = na %s min FOR_MIN = na %d min
PERM = za stalno PERM = za stalno
CLIENT_BANNED = Klijent "%s" je banovan CLIENT_BANNED = Klijent "%s" je banovan
ADMIN_SLAY_1 = ADMIN: slay %s ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: samar %s with %d stete
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mapa sa tim imenom nije nadjena ili nije vazeca
ADMIN_MAP_1 = ADMIN: changelevel %s ADMIN_MAP_1 = ADMIN: changelevel %s
ADMIN_MAP_2 = ADMIN %s: 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 MAP_EXTENDED = Mapa "%s" je produzena za %d minuta
[tr] [tr]
ADMIN_KICK_1 = ADMIN, %s kisisini atti ADMIN_KICK_1 = ADMIN: at %s
ADMIN_KICK_2 = ADMIN %s, %s kisisini atti ADMIN_KICK_2 = ADMIN %s: at %s
IP_REMOVED = Ip "%s" ban listesinden kaldirildi IP_REMOVED = Ip "%s" ban listesinden silindi
AUTHID_REMOVED = Authid "%s" ban listesinden kaldirildi AUTHID_REMOVED = Authid "%s" ban listesinden silindi
ADMIN_UNBAN_1 = ADMIN, %s kisisinin banini kaldirdi ADMIN_UNBAN_1 = ADMIN: ban kalkdi %s
ADMIN_UNBAN_2 = ADMIN %s, %s kisisinin banini kaldirdi ADMIN_UNBAN_2 = ADMIN %s: ban kalkdi %s
ADMIN_ADDBAN_1 = ADMIN, %s kisisini banladi ADMIN_ADDBAN_1 = ADMIN: banla %s
ADMIN_ADDBAN_2 = ADMIN %s, %s kisisini banladi ADMIN_ADDBAN_2 = ADMIN %s: banla %s
BANNED = banlandi BANNED = banlandi
REASON = neden REASON = Neden
FOR_MIN = %s dakika FOR_MIN = %d dakika ban
PERM = kalici olarak PERM = suresiz
CLIENT_BANNED = Kullanici "%s" banlandi CLIENT_BANNED = Oyuncu "%s" banlandi
ADMIN_SLAY_1 = ADMIN, %s kisisini oldurdu ADMIN_SLAY_1 = ADMIN: oldurdu %s
ADMIN_SLAY_2 = ADMIN %s, %s kisisini oldurdu ADMIN_SLAY_2 = ADMIN %s: oldurdu %s
CLIENT_SLAYED = Kullanici "%s" olduruldu CLIENT_SLAYED = Oyuncu "%n" olduruldu
ADMIN_SLAP_1 = ADMIN, %s kisisini %d hasarla tokatladi ADMIN_SLAP_1 = ADMIN: %s tokatla verilen zarar %d
ADMIN_SLAP_2 = ADMIN %s, %s kisini %d hasarla tokatladi ADMIN_SLAP_2 = ADMIN %s: %s tokatla verilen zarar %d
CLIENT_SLAPED = Kullanici "%s" %d zarar ile tokatlandi CLIENT_SLAPPED = Oyuncu "%n" tokatlandi %d zarar ile
MAP_NOT_FOUND = O isimde bir harita bulunamadi yada harita gecersizdir MAP_NOT_FOUND = Map ismi bulunamadi yada mevcud degildir
ADMIN_MAP_1 = ADMIN, haritayi %s olarak degistirdi ADMIN_MAP_1 = ADMIN: %s mapina degisdirdi
ADMIN_MAP_2 = ADMIN %s, haritayi %s olarak degistirdi ADMIN_MAP_2 = ADMIN %s: %s mapina degisdirdi
NO_MORE_CVARS = Rcon erisimi icin daha fazla cvar eklenemiyor NO_MORE_CVARS = Rcon'a daha cvar ekliyemiyorsunuz!
UNKNOWN_CVAR = Bilinmeyen cvar: %s UNKNOWN_CVAR = Bilinmeyen cvar: %s
UNKNOWN_XVAR = Bilinmeyen xvar: %s UNKNOWN_XVAR = Bilinmeyen xvar: %s
CVAR_NO_ACC = O cvara erisim hakkiniz yok CVAR_NO_ACC = O cvar'a giris hakkiniz yok
XVAR_NO_ACC = O xvara erisim hakkiniz yok XVAR_NO_ACC = O xvar'a giris hakkiniz yok
CVAR_IS = Cvar "%s" budur "%s" CVAR_IS = Cvar "%s" budur "%s"
XVAR_IS = Xvar "%s" budur "%s" XVAR_IS = Xvar "%s" budur "%s"
PROTECTED = KORUMALI PROTECTED = GUVENLI
SET_CVAR_TO = %s %s cvarini "%s" olarak degistirdi SET_CVAR_TO = %s cvar ayari %s onaylandi "%s"
SET_XVAR_TO = %s %s xvarini "%s" olarak degistirdi SET_XVAR_TO = %s xvar ayari %s onaylandi "%s"
CVAR_CHANGED = Cvar "%s" "%s" olarak degistirildi CVAR_CHANGED = Cvar "%s" degisimi "%s" tamamlandi
XVAR_CHANGED = Xvar "%s" "%s" olarak degistirildi XVAR_CHANGED = Xvar "%s" degisimi "%s" tamamlandi
LOADED_PLUGINS = Suanda yuklenen eklentiler LOADED_PLUGINS = Su anki yuklenen Plugin'ler
NAME = isim NAME = isim
VERSION = versiyon VERSION = versiyon
AUTHOR = yaratici AUTHOR = ureten
FILE = dosya FILE = dosya
STATUS = statu STATUS = durum
PLUGINS_RUN = %d eklenti, %d tanesi calisiyor PLUGINS_RUN = %d plugin, %d calisiyor
LOADED_MODULES = Suanda yuklenen moduller LOADED_MODULES = Su anki yuklenen module'ler
NUM_MODULES = %d modul NUM_MODULES = %d module'ler
FILE_NOT_FOUND = "%s" dosyasi bulunamadi FILE_NOT_FOUND = "%s" Dosya bulunamadi
ADMIN_CONF_1 = ADMIN, %s configini gerceklestirdi ADMIN_CONF_1 = ADMIN: %s Config dosyasi acildi
ADMIN_CONF_2 = ADMIN %s, %s configini gerceklestirdi ADMIN_CONF_2 = ADMIN %s: %s Config dosyasi acildi
PAUSED = durduruldu PAUSED = Gecici olarak durduruldu
UNPAUSED = devam ettirildi UNPAUSED = Tekrar baslatildi
UNABLE_PAUSE = Server oyunu durdurmak icin musait degildi. Serverde gercek oyuncular gerekli. UNABLE_PAUSE = Server gecici olarak durdurulamadi. Serverde gercek oyuncu gerek.
SERVER_PROC = Server devami %s SERVER_PROC = Server devami %s
PAUSING = durduruluyor PAUSING = Gecici olarak durduruldu
UNPAUSING = tekrar baslatiliyor UNPAUSING = Tekrar baslatildi
PAUSE = durdur PAUSE = durdur
UNPAUSE = tekrar baslat UNPAUSE = baslat
COM_SENT_SERVER = Komut satiri "%s" server konsoluna gonderildi COM_SENT_SERVER = Emir "%s" server consoluna gonderildi
CLIENTS_ON_SERVER = Serverdeki kullanicilar CLIENTS_ON_SERVER = Serverde olan oyuncular
IMMU = dokunulmazlik IMMU = dokunulmaz
RESERV = reservasyon RESERV = reservasyon
ACCESS = erisim ACCESS = giris
TOTAL_NUM = Toplam %d TOTAL_NUM = Tam %d
SKIP_MATCH = "%s" atlaniyor ("%s" eslesiyor) SKIP_MATCH = "%s" kullanilamiyor (benzeri ise "%s")
SKIP_IMM = "%s" atlaniyor (dokunulmazlik) SKIP_IMM = "%s" kullanilamiyor (dokunulmazlik)
KICK_PL = "%s" atiliyor KICK_PL = "%s" atin
YOU_DROPPED = Adminin sadece belirli kullanici gruplarini birakmasindan dolayi dusuruldunuz YOU_DROPPED = Sadece ozel gurupa mevcud oldugu icin atildiniz
KICKED_CLIENTS = %d kullanici atildi KICKED_CLIENTS = %d oyuncular atildi
ADMIN_LEAVE_1 = ADMIN, %s %s %s %s kisilerini birakti ADMIN_LEAVE_1 = ADMIN: %s %s %s %s gitdi
ADMIN_LEAVE_2 = ADMIN %s, %s %s %s %s kisilerini birakti ADMIN_LEAVE_2 = ADMIN %s: %s %s %s %s gitdi
ADMIN_NICK_1 = ADMIN, %s kisinin ismini "%s" olarak degistirdi ADMIN_NICK_1 = ADMIN: %s kisinin ismini buna degisdirdi "%s"
ADMIN_NICK_2 = ADMIN %s, %s kisinin ismini "%s" olarak degistirdi ADMIN_NICK_2 = ADMIN %s: %s kisinin ismini buna degisdirdi "%s"
CHANGED_NICK = %s kisinin ismi, "%s" olarak degistirildi CHANGED_NICK = %s kisinin nickini buna degisdirdi "%s"
ADMIN_EXTEND_1 = ADMIN, haritayi %d dakika uzatti ADMIN_EXTEND_1 = ADMIN: haritayi %d dakika uzatti
ADMIN_EXTEND_2 = ADMIN %s, haritayi %d dakika uzatti ADMIN_EXTEND_2 = ADMIN %s: haritayi %d dakika uzatti
MAP_EXTENDED = Harita "%s" %d dakika uzatildi 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] [fr]
ADMIN_KICK_1 = ADMIN: kick %s ADMIN_KICK_1 = ADMIN: kick %s
@ -314,15 +343,15 @@ ADMIN_ADDBAN_1 = ADMIN: banni %s
ADMIN_ADDBAN_2 = ADMIN %s: banni %s ADMIN_ADDBAN_2 = ADMIN %s: banni %s
BANNED = a ete banni BANNED = a ete banni
REASON = raison REASON = raison
FOR_MIN = pour %s mn FOR_MIN = pour %d mn
PERM = a vie (permanent) PERM = a vie (permanent)
CLIENT_BANNED = Client "%s" a ete banni CLIENT_BANNED = Client "%s" a ete banni
ADMIN_SLAY_1 = ADMIN: foudroie %s ADMIN_SLAY_1 = ADMIN: foudroie %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: frappe %s avec %d points de degat
ADMIN_SLAP_2 = ADMIN %s: 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 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_1 = ADMIN: a change la carte pour %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: bannlys %ss
BANNED = bannlyst BANNED = bannlyst
REASON = orsak REASON = orsak
FOR_MIN = i %s minuter FOR_MIN = i %d minuter
PERM = permanent PERM = permanent
CLIENT_BANNED = Klient "%s" bannlyst CLIENT_BANNED = Klient "%s" bannlyst
ADMIN_SLAY_1 = ADMIN: slakta %s ADMIN_SLAY_1 = ADMIN: slakta %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: smiska %s med %d skada
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Kan inte hitta karta med det namnet eller felaktig karta
ADMIN_MAP_1 = ADMIN: byt karta %s ADMIN_MAP_1 = ADMIN: byt karta %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banned BANNED = banned
REASON = grund REASON = grund
FOR_MIN = for %s min FOR_MIN = for %d min
PERM = permanent PERM = permanent
CLIENT_BANNED = klient "%s" banned CLIENT_BANNED = klient "%s" banned
ADMIN_SLAY_1 = ADMIN: draeb %s ADMIN_SLAY_1 = ADMIN: draeb %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: klaps %s med %d skade
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Bane med det navn blev ikke fundet eller banen er ugyldig
ADMIN_MAP_1 = ADMIN: Skift bane %s ADMIN_MAP_1 = ADMIN: Skift bane %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: baniu %s
BANNED = banido BANNED = banido
REASON = motivo REASON = motivo
FOR_MIN = por %s minutos FOR_MIN = por %d minutos
PERM = permanentemente PERM = permanentemente
CLIENT_BANNED = Cliente "%s" banido CLIENT_BANNED = Cliente "%s" banido
ADMIN_SLAY_1 = ADMIN: matou %s ADMIN_SLAY_1 = ADMIN: matou %s
ADMIN_SLAY_2 = ADMIN %s: matou %s ADMIN_SLAY_2 = ADMIN %s: matou %s
CLIENT_SLAYED = Cliente "%s" foi morto CLIENT_SLAYED = Cliente "%n" foi morto
ADMIN_SLAP_1 = ADMIN: deu tapa em %s com dano de %d 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 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 MAP_NOT_FOUND = Mapa com nome nao encontrado ou mapa invalido
ADMIN_MAP_1 = ADMIN: mudou para %s ADMIN_MAP_1 = ADMIN: mudou para %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = Admin %s zbanowal %s
BANNED = zbanowany BANNED = zbanowany
REASON = przyczyna REASON = przyczyna
FOR_MIN = na %s min FOR_MIN = na %d min
PERM = permanentnie PERM = permanentnie
CLIENT_BANNED = Gracz "%s" zbanowany CLIENT_BANNED = Gracz "%s" zbanowany
ADMIN_SLAY_1 = Admin zgladzil %s ADMIN_SLAY_1 = Admin zgladzil %s
ADMIN_SLAY_2 = Admin %s 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_1 = Admin uderzyl %s zadajac %d obrazen
ADMIN_SLAP_2 = Admin %s 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! MAP_NOT_FOUND = Nie ma takiej mapy!
ADMIN_MAP_1 = Admin zmienia mape na %s ADMIN_MAP_1 = Admin zmienia mape na %s
ADMIN_MAP_2 = Admin %s 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 ADMIN_ADDBAN_2 = ADMIN %s: verban %s
BANNED = verbannen BANNED = verbannen
REASON = reden REASON = reden
FOR_MIN = voor %s minuten FOR_MIN = voor %d minuten
PERM = permanent PERM = permanent
CLIENT_BANNED = Speler "%s" verbannen CLIENT_BANNED = Speler "%s" verbannen
ADMIN_SLAY_1 = ADMIN: slacht %s ADMIN_SLAY_1 = ADMIN: slacht %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: slaat %s met %d schade
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Map met die naam niet gevonden of de map is ongeldig
ADMIN_MAP_1 = ADMIN: verander map naar %s ADMIN_MAP_1 = ADMIN: verander map naar %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: %s baneado
BANNED = baneado BANNED = baneado
REASON = motivo REASON = motivo
FOR_MIN = por %s minutos FOR_MIN = por %d minutos
PERM = permanentemente PERM = permanentemente
CLIENT_BANNED = El cliente "%s" ha sido baneado CLIENT_BANNED = El cliente "%s" ha sido baneado
ADMIN_SLAY_1 = ADMIN: %s asesinado ADMIN_SLAY_1 = ADMIN: %s asesinado
ADMIN_SLAY_2 = ADMIN %s: %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_1 = ADMIN: %s ha sido bofeteado con %d de danyo
ADMIN_SLAP_2 = ADMIN %s: %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 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_1 = ADMIN: cambiando a %s
ADMIN_MAP_2 = ADMIN %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = zabanovan BANNED = zabanovan
REASON = duvod REASON = duvod
FOR_MIN = na %s minut FOR_MIN = na %d minut
PERM = permanentne PERM = permanentne
CLIENT_BANNED = Klient "%s" zabanovan CLIENT_BANNED = Klient "%s" zabanovan
ADMIN_SLAY_1 = ADMIN: zabil %s ADMIN_SLAY_1 = ADMIN: zabil %s
ADMIN_SLAY_2 = ADMIN %s: zabili %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_1 = ADMIN: placnul %s za %d damage
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mapa s takovym jmenem nenalezena
ADMIN_MAP_1 = ADMIN: zmenil level na %s ADMIN_MAP_1 = ADMIN: zmenil level na %s
ADMIN_MAP_2 = ADMIN %s: zmenili 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 ADMIN_ADDBAN_2 = ADMIN %s: bannasi %s
BANNED = bannittu BANNED = bannittu
REASON = syy REASON = syy
FOR_MIN = %s minuutiksi FOR_MIN = %d minuutiksi
PERM = pysyvasti PERM = pysyvasti
CLIENT_BANNED = Clinu "%s" bannattiin CLIENT_BANNED = Clinu "%s" bannattiin
ADMIN_SLAY_1 = ADMIN: slayasi %s ADMIN_SLAY_1 = ADMIN: slayasi %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: slappasi %s %d damagella
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mappia ei loytynyt tai nimi on vaarin
ADMIN_MAP_1 = ADMIN: vaihtoi mapin: %s ADMIN_MAP_1 = ADMIN: vaihtoi mapin: %s
ADMIN_MAP_2 = ADMIN %s: 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_1 = ADMINISTRATOR: banna %s
ADMIN_ADDBAN_2 = ADMINISTRATOR %s: banna %s ADMIN_ADDBAN_2 = ADMINISTRATOR %s: banna %s
BANNED = banna BANNED = banna
FOR_MIN = za %s minuti FOR_MIN = za %d minuti
PERM = zavinagi PERM = zavinagi
CLIENT_BANNED = Igrachut "%s" e bannat CLIENT_BANNED = Igrachut "%s" e bannat
ADMIN_SLAY_1 = ADMINISTRATOR: slayna %s ADMIN_SLAY_1 = ADMINISTRATOR: slayna %s
ADMIN_SLAY_2 = ADMINISTRATOR %s: 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_1 = ADMINISTRATOR: slapna %s s %d shteta
ADMIN_SLAP_2 = ADMINISTRATOR %s: 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 MAP_NOT_FOUND = Karta s tova ime ne e namerena ili nevalidna
ADMIN_MAP_1 = ADMINISTRATOR: smeni kartata na %s ADMIN_MAP_1 = ADMINISTRATOR: smeni kartata na %s
ADMIN_MAP_2 = ADMINISTRATOR %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banat BANNED = banat
REASON = motiv REASON = motiv
FOR_MIN = pentru %s min FOR_MIN = pentru %d min
PERM = permanent PERM = permanent
CLIENT_BANNED = Jucatorul "%s" a primit ban CLIENT_BANNED = Jucatorul "%s" a primit ban
ADMIN_SLAY_1 = ADMIN: slay %s ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: slap %s cu %d dmg
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Harta cu acel nume nu a fost gasita sau este invalida
ADMIN_MAP_1 = ADMIN: schimbare harta pe %s ADMIN_MAP_1 = ADMIN: schimbare harta pe %s
ADMIN_MAP_2 = ADMIN %s: 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_1 = ADMIN: extinde harta pentru %d minute
ADMIN_EXTEND_2 = ADMIN %s: 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 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] [hu]
ADMIN_KICK_1 = ADMIN: %s kirúgva ADMIN_KICK_1 = ADMIN: %s kirúgva
ADMIN_KICK_2 = ADMIN %s: %s kirúgva ADMIN_KICK_2 = ADMIN %s: %s kirúgva
IP_REMOVED = IP "%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 banlistáról AUTHID_REMOVED = Authid "%s" eltávolítva a ban-listáról
ADMIN_UNBAN_1 = ADMIN: %s ban visszavonva ADMIN_UNBAN_1 = ADMIN: %s ban visszavonva
ADMIN_UNBAN_2 = ADMIN %s: %s ban visszavonva ADMIN_UNBAN_2 = ADMIN %s: %s ban visszavonva
ADMIN_ADDBAN_1 = ADMIN: bannolta %s játékost ADMIN_ADDBAN_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: bannolta %s játékost ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = Bannolva BANNED = Bannolva
REASON = Indok REASON = Indok
FOR_MIN = %s percre FOR_MIN = %d percre
PERM = örökre PERM = örökre
CLIENT_BANNED = felhasználó "%s" bannolva CLIENT_BANNED = felhasználó "%s" bannolva
ADMIN_SLAY_1 = ADMIN: %s megölve ADMIN_SLAY_1 = ADMIN: %s megölve
ADMIN_SLAY_2 = ADMIN %s: %s megölve ADMIN_SLAY_2 = ADMIN %s: %s megölve
CLIENT_SLAYED = "%s" játékos megölve CLIENT_SLAYED = "%n" játékos megölve
ADMIN_SLAP_1 = ADMIN: %s megütve %d sebzéssel ADMIN_SLAP_1 = ADMIN: %s megütve %d sebzéssel
ADMIN_SLAP_2 = ADMIN %s: %s megütve %d sebzéssel ADMIN_SLAP_2 = ADMIN %s: megütve %s %d sebzéssel
CLIENT_SLAPED = "%s" játékos megütve %d sebzéssel CLIENT_SLAPPED = "%n" játékos megütve %d sebzéssel
MAP_NOT_FOUND = Nem található ilyen nevű pálya MAP_NOT_FOUND = Nem található ilyen nevű pálya
ADMIN_MAP_1 = ADMIN: pályaváltás %s ADMIN_MAP_1 = ADMIN: pályaváltás %s
ADMIN_MAP_2 = ADMIN %s: 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! NO_MORE_CVARS = Nem lehet több cvart hozzáadni az rcon hozzáféréshez!
UNKNOWN_CVAR = Ismeretlen cvar: %s UNKNOWN_CVAR = Ismeretlen cvar: %s
UNKNOWN_XVAR = Ismeretlen xvar: %s UNKNOWN_XVAR = Ismeretlen xvar: %s
CVAR_NO_ACC = Nincs engedélyed a cvarhoz CVAR_NO_ACC = Nincs engedélyed a cvar-hoz
XVAR_NO_ACC = Nincs engedélyed az xvarhoz XVAR_NO_ACC = Nincs engedélyed a xvar-hoz
CVAR_IS = Cvar "%s" jelenleg "%s" CVAR_IS = Cvar "%s" jelenleg "%s"
XVAR_IS = Xvar "%s" jelenleg "%s" XVAR_IS = Xvar "%s" jelenleg "%s"
PROTECTED = Védett PROTECTED = Védett
SET_CVAR_TO = %s cvar átállítva: %s -> "%s" SET_CVAR_TO = %s beállítva cvar %s -> "%s"
SET_XVAR_TO = %s xvar átállítva: %s -> "%s" SET_XVAR_TO = %s beállítva xvar %s -> "%s"
CVAR_CHANGED = Cvar "%s" átállítva "%s" értékre. CVAR_CHANGED = Cvar "%s" átállítva "%s"-ra.
XVAR_CHANGED = Xvar "%s" átállítva "%s" értékre. XVAR_CHANGED = Xvar "%s" átállítva "%s"-ra.
LOADED_PLUGINS = Jelenleg betöltött pluginok LOADED_PLUGINS = Jelenleg betöltött pluginok
NAME = Név NAME = Név
VERSION = Verzió VERSION = Verzió
@ -1194,11 +1257,11 @@ YOU_DROPPED = Le lettél csatlakoztatva, mert az admin csak bizonyos csapat tagj
KICKED_CLIENTS = kirúgva %d felhasználó KICKED_CLIENTS = kirúgva %d felhasználó
ADMIN_LEAVE_1 = ADMIN: ledobta %s %s %s %s ADMIN_LEAVE_1 = ADMIN: ledobta %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: ledobta %s %s %s %s ADMIN_LEAVE_2 = ADMIN %s: ledobta %s %s %s %s
ADMIN_NICK_1 = ADMIN: %s nevét átírta, mostantól a neve "%s" ADMIN_NICK_1 = ADMIN: névváltás %s-ról "%s"-ra
ADMIN_NICK_2 = ADMIN %s: %s nevét átírta, mostantól a neve "%s" ADMIN_NICK_2 = ADMIN %s: nevváltás %s-ról "%s"ra
CHANGED_NICK = %s neve mostantól: "%s" CHANGED_NICK = Névváltás %s-ról "%s"ra
ADMIN_EXTEND_1 = ADMIN: Pálya hosszabbítása %d perccel ADMIN_EXTEND_1 = ADMIN: Páya hosszabbítása %d perccel
ADMIN_EXTEND_2 = ADMIN %s: Pálya hosszabbítása %d perccel ADMIN_EXTEND_2 = ADMIN %s: Páya hosszabbítása %d perccel
MAP_EXTENDED = %s pálya meghosszabbítva %d perccel MAP_EXTENDED = %s pálya meghosszabbítva %d perccel
ADMIN_MUST_TEMPBAN = Csak időhöz kötött bant tudsz kiosztani, maximum %d percet ADMIN_MUST_TEMPBAN = Csak időhöz kötött bant tudsz kiosztani, maximum %d percet
ADMIN_MUST_TEMPUNBAN = Csak a nemrég általad bannolt játékosokat oldhatod fel ADMIN_MUST_TEMPUNBAN = Csak a nemrég általad bannolt játékosokat oldhatod fel
@ -1213,15 +1276,15 @@ ADMIN_UNBAN_2 = ADMINAS %s: atbanino %s
ADMIN_ADDBAN_1 = ADMINAS: isbanino %s ADMIN_ADDBAN_1 = ADMINAS: isbanino %s
ADMIN_ADDBAN_2 = ADMINAS %s: isbanino %s ADMIN_ADDBAN_2 = ADMINAS %s: isbanino %s
BANNED = isbanintas BANNED = isbanintas
FOR_MIN = %s minutem FOR_MIN = %d minutem
PERM = visam laikui PERM = visam laikui
CLIENT_BANNED = Klientas "%s" isbanintas CLIENT_BANNED = Klientas "%s" isbanintas
ADMIN_SLAY_1 = ADMINAS: slayna %s ADMIN_SLAY_1 = ADMINAS: slayna %s
ADMIN_SLAY_2 = ADMINAS %s: 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_1 = ADMINAS: slapina %s su %d zala
ADMIN_SLAP_2 = ADMINAS %s: 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. MAP_NOT_FOUND = Zemelapis siuo pavadinimu nerastas.
ADMIN_MAP_1 = ADMINAS: keicia mapa i %s ADMIN_MAP_1 = ADMINAS: keicia mapa i %s
ADMIN_MAP_2 = ADMINAS %s: 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 ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = zabanovany BANNED = zabanovany
REASON = pricina REASON = pricina
FOR_MIN = na %s minut FOR_MIN = na %d minut
PERM = permanentne PERM = permanentne
CLIENT_BANNED = Hrac "%s" zabanovany CLIENT_BANNED = Hrac "%s" zabanovany
ADMIN_SLAY_1 = ADMIN: zabil %s ADMIN_SLAY_1 = ADMIN: zabil %s
ADMIN_SLAY_2 = ADMIN %s: zabili %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_1 = ADMIN: placnul %s o sile %d damage
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mapa s t<>mto menom nenajdena
ADMIN_MAP_1 = ADMIN: zmenil mapu na %s ADMIN_MAP_1 = ADMIN: zmenil mapu na %s
ADMIN_MAP_2 = ADMIN %s: zmenili 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 ADMIN_ADDBAN_2 = ADMIN %s: banira %s
BANNED = baniran BANNED = baniran
REASON = prichina REASON = prichina
FOR_MIN = za %s min FOR_MIN = za %d min
PERM = zasekogash PERM = zasekogash
CLIENT_BANNED = Igrachot "%s" e baniran CLIENT_BANNED = Igrachot "%s" e baniran
ADMIN_SLAY_1 = ADMIN: slayna %s ADMIN_SLAY_1 = ADMIN: slayna %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: mu udri shamar na %s so %d shteta
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mapa so toa ime ne e pronajdena ili ne postoi
ADMIN_MAP_1 = ADMIN: ja smeni mapata na %s ADMIN_MAP_1 = ADMIN: ja smeni mapata na %s
ADMIN_MAP_2 = ADMIN %s: 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_1 = ADMIN: ja prodolzhi mapata za %d minuti
ADMIN_EXTEND_2 = ADMIN %s: 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 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] [hr]
ADMIN_KICK_1 = ADMIN: kickao %s 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_1 = ADMIN: banao %s
ADMIN_ADDBAN_2 = ADMIN %s: banao %s ADMIN_ADDBAN_2 = ADMIN %s: banao %s
BANNED = banan BANNED = banan
FOR_MIN = na %s min FOR_MIN = na %d min
PERM = za stalno PERM = za stalno
CLIENT_BANNED = Klijent "%s" je banan CLIENT_BANNED = Klijent "%s" je banan
ADMIN_SLAY_1 = ADMIN: slayao %s ADMIN_SLAY_1 = ADMIN: slayao %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: samar %s sa %d stete
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mapa sa tim imenom nije nadjena ili nije vazeca
ADMIN_MAP_1 = ADMIN: promjena mape na %s ADMIN_MAP_1 = ADMIN: promjena mape na %s
ADMIN_MAP_2 = ADMIN %s: mjenja mapu 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_1 = ADMIN: ban %s
ADMIN_ADDBAN_2 = ADMIN %s: ban %s ADMIN_ADDBAN_2 = ADMIN %s: ban %s
BANNED = banovan BANNED = banovan
FOR_MIN = na %s min FOR_MIN = na %d min
PERM = za stalno PERM = za stalno
CLIENT_BANNED = Klijent "%s" je banovan CLIENT_BANNED = Klijent "%s" je banovan
ADMIN_SLAY_1 = ADMIN: slay %s ADMIN_SLAY_1 = ADMIN: slay %s
ADMIN_SLAY_2 = ADMIN %s: 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_1 = ADMIN: samar %s with %d stete
ADMIN_SLAP_2 = ADMIN %s: 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 MAP_NOT_FOUND = Mapa sa tim imenom nije nadjena ili nije vazeca
ADMIN_MAP_1 = ADMIN: changelevel %s ADMIN_MAP_1 = ADMIN: changelevel %s
ADMIN_MAP_2 = ADMIN %s: changelevel %s ADMIN_MAP_2 = ADMIN %s: changelevel %s
@ -1586,15 +1683,15 @@ ADMIN_ADDBAN_1 = АДМИНИСТРАТОР: забанил %s
ADMIN_ADDBAN_2 = АДМИНИСТРАТОР %s: забанил %s ADMIN_ADDBAN_2 = АДМИНИСТРАТОР %s: забанил %s
BANNED = забанен BANNED = забанен
REASON = причина REASON = причина
FOR_MIN = на %s минут FOR_MIN = на %d минут
PERM = навсегда PERM = навсегда
CLIENT_BANNED = Игрок "%s" забанен CLIENT_BANNED = Игрок "%s" забанен
ADMIN_SLAY_1 = АДМИНИСТРАТОР: убил %s ADMIN_SLAY_1 = АДМИНИСТРАТОР: убил %s
ADMIN_SLAY_2 = АДМИНИСТРАТОР %s: убил %s ADMIN_SLAY_2 = АДМИНИСТРАТОР %s: убил %s
CLIENT_SLAYED = Игрок "%s" убит CLIENT_SLAYED = Игрок "%n" убит
ADMIN_SLAP_1 = АДМИНИСТРАТОР: стукнул %s на %d HP ADMIN_SLAP_1 = АДМИНИСТРАТОР: стукнул %s на %d HP
ADMIN_SLAP_2 = АДМИНИСТРАТОР %s: стукнул %s на %d HP ADMIN_SLAP_2 = АДМИНИСТРАТОР %s: стукнул %s на %d HP
CLIENT_SLAPED = Игрок "%s" стукнут на %d HP CLIENT_SLAPPED = Игрок "%n" стукнут на %d HP
MAP_NOT_FOUND = Карта не найдена или не существует MAP_NOT_FOUND = Карта не найдена или не существует
ADMIN_MAP_1 = АДМИНИСТРАТОР: сменил карту на %s ADMIN_MAP_1 = АДМИНИСТРАТОР: сменил карту на %s
ADMIN_MAP_2 = АДМИНИСТРАТОР %s: сменил карту на %s ADMIN_MAP_2 = АДМИНИСТРАТОР %s: сменил карту на %s
@ -1661,15 +1758,15 @@ ADMIN_ADDBAN_1 = 管理员: 封禁 %s
ADMIN_ADDBAN_2 = 管理员 %s: 封禁 %s ADMIN_ADDBAN_2 = 管理员 %s: 封禁 %s
BANNED = 封禁 BANNED = 封禁
REASON = 原因 REASON = 原因
FOR_MIN = %s 分钟 FOR_MIN = %d 分钟
PERM = 永久 PERM = 永久
CLIENT_BANNED = 玩家 "%s" 被封禁 CLIENT_BANNED = 玩家 "%s" 被封禁
ADMIN_SLAY_1 = 管理员: 处死 %s ADMIN_SLAY_1 = 管理员: 处死 %s
ADMIN_SLAY_2 = 管理员 %s: 处死 %s ADMIN_SLAY_2 = 管理员 %s: 处死 %s
CLIENT_SLAYED = 玩家 "%s" 被处死 CLIENT_SLAYED = 玩家 "%n" 被处死
ADMIN_SLAP_1 = 管理员: 给予玩家 %s %d 点伤害 ADMIN_SLAP_1 = 管理员: 给予玩家 %s %d 点伤害
ADMIN_SLAP_2 = 管理员 %s: 给予玩家 %s %d 点伤害 ADMIN_SLAP_2 = 管理员 %s: 给予玩家 %s %d 点伤害
CLIENT_SLAPED = 玩家 "%s" 受到 %d 点伤害 CLIENT_SLAPPED = 玩家 "%n" 受到 %d 点伤害
MAP_NOT_FOUND = 无法找到该地图或者该地图无效 MAP_NOT_FOUND = 无法找到该地图或者该地图无效
ADMIN_MAP_1 = 管理员: 更换地图为 %s ADMIN_MAP_1 = 管理员: 更换地图为 %s
ADMIN_MAP_2 = 管理员 %s: 更换地图为 %s ADMIN_MAP_2 = 管理员 %s: 更换地图为 %s
@ -1724,157 +1821,3 @@ CHANGED_NICK = 改变 %s 的昵称为 "%s"
ADMIN_EXTEND_1 = 管理员: 将地图时间延长 %d 分钟 ADMIN_EXTEND_1 = 管理员: 将地图时间延长 %d 分钟
ADMIN_EXTEND_2 = 管理员 %s: 将地图时间延长 %d 分钟 ADMIN_EXTEND_2 = 管理员 %s: 将地图时间延长 %d 分钟
MAP_EXTENDED = "%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

View File

@ -134,12 +134,12 @@ TIME_INFO_2 = Nqma limit na vremeto. Sledvashta karta: %s
[ro] [ro]
HELP_COMS = Ajutor AMX Mod X: Comenzi HELP_COMS = Ajutor AMX Mod X: Comenzi
HELP_ENTRIES = Intrari %d - %d din %d HELP_ENTRIES = Se afișează %d - %d din %d
HELP_USE_MORE = Scrie '%s %d' pentru mai mult HELP_USE_MORE = Scrie '%s %d' pentru mai multe comenzi
HELP_USE_BEGIN = Scrie '%s 1' pentru inceput HELP_USE_BEGIN = Scrie '%s 1' pentru a începe
TYPE_HELP = Scrie '%s' '%s' in consola pentru afisare lista comenzi TYPE_HELP = Scrie '%s' '%s' în consolă pentru a afișa lista de comenzi disponibile
TIME_INFO_1 = Timp Ramas: %d:%02d. Urmatoarea Harta: %s TIME_INFO_1 = Timp mas: %d:%02d. Următoarea hartă: %s
TIME_INFO_2 = Nici o Limita a Timpului. Urmatoarea Harta: %s TIME_INFO_2 = Fără limită de timp. Următoarea hartă: %s
[hu] [hu]
HELP_COMS = AMX Mod X segítség: Parancsok 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 DROPPED_RES = Premahnat poradi rezervaciq na slot
[ro] [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] [hu]
DROPPED_RES = Helyfenntartás miatt kidobva. 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] [pt]
DROPPED_RES = Foste desconectado por causa da reservação de slots DROPPED_RES = Foste desconectado por causa da reservação de slots
CVAR_RESERVATION = Quantidade de slots para reservar
CVAR_HIDESLOTS = Se tu definires isto para 1, tu podes esconder slots no teu servidor.^nSe os slots públicos e escondidos do servidor estiverem cheios, tu deverás manualmente conectar com o comando de consola "connect".

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -125,13 +125,13 @@ EXTED_MAP = Udalji kartata %s
TIME_CHOOSE = Vreme e da se izbere sledvashtata karta... TIME_CHOOSE = Vreme e da se izbere sledvashtata karta...
[ro] [ro]
CHO_FIN_EXT = Votarea s-a incheiat. Harta actuala va fi prelungita %.0f minute CHO_FIN_EXT = Votarea s-a terminat. Harta actuală va fi prelungită cu %.0f minute
CHO_FIN_NEXT = Votarea s-a incheiat. Urmatoarea harta va fi %s CHO_FIN_NEXT = Votarea s-a terminat. Următoarea hartă va fi %s
CHOSE_EXT = %s a votat pentru prelungirea hartii actuale CHOSE_EXT = %s a votat pentru prelungirea hărții actuale
X_CHOSE_X = %s a votat pentru %s X_CHOSE_X = %s a votat pentru %s
CHOOSE_NEXTM = AMX Alege harta urmatoare CHOOSE_NEXTM = AMX Alege harta următoare
EXTED_MAP = Prelungirea hartii actuale %s EXTED_MAP = Prelungirea hărții %s
TIME_CHOOSE = E timpul sa alegeti harta urmatoare... TIME_CHOOSE = Este timpul să alegeți harta următoare...
[hu] [hu]
CHO_FIN_EXT = A választás véget ért. A mostani pálya még %.0f percig lesz. 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 THE_WINNER = Der Gewinner
WANT_CONT = Willst du fortfahren? WANT_CONT = Willst du fortfahren?
VOT_CANC = Abstimmung abgebrochen VOT_CANC = Abstimmung abgebrochen
X_VOTED_FOR = %s stimmten für Option #%d X_VOTED_FOR = %s stimmte für Option #%d
VOTEMAP_MENU = Menü > Mapwahl VOTEMAP_MENU = Menü > Mapwahl
START_VOT = Starte Abstimmung START_VOT = Starte Abstimmung
SEL_MAPS = Ausgewählte Maps SEL_MAPS = Ausgewählte Maps
@ -337,26 +337,26 @@ CHANGLE_MENU = Smenqne na karta Menu
[ro] [ro]
RESULT_REF = Rezultat refuzat RESULT_REF = Rezultat refuzat
RESULT_ACC = Rezultat acceptat RESULT_ACC = Rezultat acceptat
VOTE_SUCCESS = Votarea a avut loc cu succes. Harta va fi schimbata pe VOTE_SUCCESS = Votarea a avut loc cu succes. Harta va fi schimbată pe
VOTE_FAILED = Votare esuata VOTE_FAILED = Votare eșuată
THE_WINNER = Castigatoare THE_WINNER = Câștigătoare
WANT_CONT = Accepti schimbarea hartii? WANT_CONT = Doriți să continuați?
VOT_CANC = Votarea a fost anulata VOT_CANC = Votarea a fost anulată
X_VOTED_FOR = %s a votat pentru #%d X_VOTED_FOR = %s a votat pentru #%d
VOTEMAP_MENU = Menu Votare Harta VOTEMAP_MENU = Meniu votare hartă
START_VOT = Incepe Votarea START_VOT = Începe votarea
SEL_MAPS = Harti Alese SEL_MAPS = Hărți alese
ALREADY_VOT = Se desfasoara o votare deja... ALREADY_VOT = Se desfășoară o votare deja...
NO_MAPS_MENU = Nu exista harti in menu NO_MAPS_MENU = Nu există hărți în meniu
VOT_NOW_ALLOW = Nu sunt permise votarile acum VOT_NOW_ALLOW = Nu sunt permise votările momentan
WHICH_MAP = Ce harta doresti? WHICH_MAP = Ce hartă dorești?
CHANGE_MAP_TO = Schimbare harta pe CHANGE_MAP_TO = Schimbare hartă pe
CANC_VOTE = Anuleaza Vot CANC_VOTE = Anulează vot
ADMIN_V_MAP_1 = ADMIN: votare harta ADMIN_V_MAP_1 = ADMIN: votare hartă
ADMIN_V_MAP_2 = ADMIN %s: votare harta ADMIN_V_MAP_2 = ADMIN %s: votare hartă
ADMIN_CHANGEL_1 = ADMIN: schimbare harta pe %s ADMIN_CHANGEL_1 = ADMIN: schimbare hartă pe %s
ADMIN_CHANGEL_2 = ADMIN %s: schimbare harta pe %s ADMIN_CHANGEL_2 = ADMIN %s: schimbare hartă pe %s
CHANGLE_MENU = Menu Schimbare Harta CHANGLE_MENU = Meniu schimbare hartă
[hu] [hu]
RESULT_REF = A szavazás eredménytelen. RESULT_REF = A szavazás eredménytelen.

View File

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

View File

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

View File

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

View File

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

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