Merge pull request #1 from alliedmodders/master

up
This commit is contained in:
Shorohov Sergey 2018-12-10 23:20:56 +03:00 committed by GitHub
commit 3efdad36b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 444 additions and 363 deletions

View File

@ -1272,7 +1272,6 @@ static cell AMX_NATIVE_CALL show_menu(AMX *amx, cell *params) /* 3 param */
// Fire newmenu callback so closing it can be handled by the plugin // Fire newmenu callback so closing it can be handled by the plugin
if (!CloseNewMenus(pPlayer)) if (!CloseNewMenus(pPlayer))
{ {
LogError(amx, AMX_ERR_NATIVE, "Plugin called menu_display when item=MENU_EXIT");
return 2; return 2;
} }
@ -1318,7 +1317,7 @@ static cell AMX_NATIVE_CALL show_menu(AMX *amx, cell *params) /* 3 param */
return 0; return 0;
} }
if (closeMenu(index)) if (closeMenu(index) == 2)
{ {
return 0; return 0;
} }

View File

@ -1,4 +1,4 @@
// vim: set ts=4 sw=4 tw=99 noet: // vim: set ts=4 sw=4 tw=99 noet:
// //
// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). // AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO").
// Copyright (C) The AMX Mod X Development Team. // Copyright (C) The AMX Mod X Development Team.
@ -210,6 +210,16 @@ void copy_amxmemory(cell* dest, cell* src, int len)
*dest++=*src++; *dest++=*src++;
} }
bool utf8isspace(const char* string)
{
return utf8iscategory(string, 1, UTF8_CATEGORY_ISSPACE) != 0;
}
size_t utf8getspaces(const char* string)
{
return utf8iscategory(string, SIZE_MAX, UTF8_CATEGORY_ISSPACE);
}
char* parse_arg(char** line, int& state) char* parse_arg(char** line, int& state)
{ {
static char arg[3072]; static char arg[3072];
@ -218,7 +228,7 @@ char* parse_arg(char** line, int& state)
while (**line) while (**line)
{ {
if (isspace(**line)) if (utf8isspace(*line))
{ {
if (state == 1) if (state == 1)
break; break;
@ -919,6 +929,7 @@ static cell AMX_NATIVE_CALL amx_strtok(AMX *amx, cell *params)
int right_pos = 0; int right_pos = 0;
unsigned int i = 0; unsigned int i = 0;
bool done_flag = false; bool done_flag = false;
size_t spaces;
int len = 0; int len = 0;
//string[] //string[]
@ -938,9 +949,9 @@ static cell AMX_NATIVE_CALL amx_strtok(AMX *amx, cell *params)
{ {
if (trim && !done_flag) if (trim && !done_flag)
{ {
if (isspace(string[i])) if ((spaces = utf8getspaces(string + i) > 0))
{ {
while (isspace(string[++i])); i += spaces;
done_flag = true; done_flag = true;
} }
} }
@ -974,6 +985,7 @@ static cell AMX_NATIVE_CALL amx_strtok2(AMX *amx, cell *params)
{ {
int left_pos = 0, right_pos = 0, len, pos = -1; int left_pos = 0, right_pos = 0, len, pos = -1;
unsigned int i = 0; unsigned int i = 0;
size_t spaces;
char *string = get_amxstring(amx, params[1], 0, len); char *string = get_amxstring(amx, params[1], 0, len);
char *left = new char[len + 1], *right = new char[len + 1]; char *left = new char[len + 1], *right = new char[len + 1];
@ -989,9 +1001,9 @@ static cell AMX_NATIVE_CALL amx_strtok2(AMX *amx, cell *params)
int trim = params[7]; int trim = params[7];
// ltrim left // ltrim left
if (trim & 1 && isspace(string[i])) if (trim & 1 && (spaces = utf8getspaces(string)) > 0)
{ {
while (isspace(string[++i])); i += spaces;
} }
for (; i < (unsigned int) len; ++i) for (; i < (unsigned int) len; ++i)
@ -1007,17 +1019,17 @@ static cell AMX_NATIVE_CALL amx_strtok2(AMX *amx, cell *params)
} }
// rtrim left // rtrim left
if (trim & 2 && left_pos && isspace(left[left_pos - 1])) if (trim & 2 && left_pos && utf8isspace(&left[left_pos - 1]))
{ {
while (--left_pos >= 0 && isspace(left[left_pos])); while (--left_pos >= 0 && utf8isspace(&left[left_pos]));
++left_pos; ++left_pos;
} }
// ltrim right // ltrim right
if (trim & 4 && isspace(string[i])) if (trim & 4 && (spaces = utf8getspaces(string + i)) > 0)
{ {
while (isspace(string[++i])); i += spaces;
} }
for (; i < (unsigned int) len; ++i) for (; i < (unsigned int) len; ++i)
@ -1026,9 +1038,9 @@ static cell AMX_NATIVE_CALL amx_strtok2(AMX *amx, cell *params)
} }
// rtrim right // rtrim right
if (trim & 8 && right_pos && isspace(right[right_pos - 1])) if (trim & 8 && right_pos && utf8isspace(&right[right_pos - 1]))
{ {
while (--right_pos >= 0 && isspace(right[right_pos])); while (--right_pos >= 0 && utf8isspace(&right[right_pos]));
++right_pos; ++right_pos;
} }
@ -1058,8 +1070,12 @@ static cell AMX_NATIVE_CALL argparse(AMX *amx, cell *params)
// Strip all left-hand whitespace. // Strip all left-hand whitespace.
size_t i = start_pos; size_t i = start_pos;
while (i < input_len && isspace(input[i])) size_t spaces;
i++;
if ((spaces = utf8getspaces(input + i)) > 0)
{
i += spaces;
}
if (i >= input_len) { if (i >= input_len) {
*buffer = '\0'; *buffer = '\0';
@ -1078,7 +1094,7 @@ static cell AMX_NATIVE_CALL argparse(AMX *amx, cell *params)
} }
// If not in quotes, and we see a space, stop. // If not in quotes, and we see a space, stop.
if (isspace(input[i]) && !in_quote) if (utf8isspace(input + i) && !in_quote)
break; break;
if (size_t(bufpos - buffer) < buflen) if (size_t(bufpos - buffer) < buflen)
@ -1106,9 +1122,13 @@ static cell AMX_NATIVE_CALL strbreak(AMX *amx, cell *params) /* 5 param */
int RightMax = params[5]; int RightMax = params[5];
size_t len = (size_t)_len; size_t len = (size_t)_len;
size_t spaces;
if ((spaces = utf8getspaces(string)) > 0)
{
i += spaces;
}
while (isspace(string[i]) && i<len)
i++;
beg = i; beg = i;
for (; i<len; i++) for (; i<len; i++)
{ {
@ -1120,12 +1140,12 @@ static cell AMX_NATIVE_CALL strbreak(AMX *amx, cell *params) /* 5 param */
if (i == len-1) if (i == len-1)
goto do_copy; goto do_copy;
} else { } else {
if (isspace(string[i]) && !in_quote) if (!in_quote && (spaces = utf8getspaces(string + i)) > 0)
{ {
do_copy: do_copy:
size_t pos = i; size_t pos = i;
while (isspace(string[i])) i += spaces;
i++;
const char *start = had_quotes ? &(string[beg+1]) : &(string[beg]); const char *start = had_quotes ? &(string[beg+1]) : &(string[beg]);
size_t _end = had_quotes ? (i==len-1 ? 1 : 2) : 0; size_t _end = had_quotes ? (i==len-1 ? 1 : 2) : 0;
size_t end = (pos - _end > (size_t)LeftMax) ? (size_t)LeftMax : pos - _end; size_t end = (pos - _end > (size_t)LeftMax) ? (size_t)LeftMax : pos - _end;
@ -1367,18 +1387,27 @@ static cell AMX_NATIVE_CALL amx_strlen(AMX *amx, cell *params)
static cell AMX_NATIVE_CALL amx_trim(AMX *amx, cell *params) static cell AMX_NATIVE_CALL amx_trim(AMX *amx, cell *params)
{ {
int len, newlen; int length;
char *str = get_amxstring(amx, params[1], 0, len); auto string = get_amxstring(amx, params[1], 0, length);
UTIL_TrimLeft(str); auto leftSpaces = utf8getspaces(string);
UTIL_TrimRight(str); auto rightSpaces = 0u;
newlen = strlen(str); auto originalLength = length;
len -= newlen;
set_amxstring(amx, params[1], str, newlen); if (leftSpaces < size_t(length))
{
while (--length >= 0 && utf8isspace(string + length))
{
++rightSpaces;
}
}
return len; auto totalSpaces = leftSpaces + rightSpaces;
set_amxstring(amx, params[1], string + leftSpaces, originalLength - totalSpaces);
return totalSpaces;
} }
static cell AMX_NATIVE_CALL n_strcat(AMX *amx, cell *params) static cell AMX_NATIVE_CALL n_strcat(AMX *amx, cell *params)

View File

@ -54,7 +54,7 @@
#define CTRL_CHAR '^' /* default control character */ #define CTRL_CHAR '^' /* default control character */
#define sCHARBITS 8 /* size of a packed character */ #define sCHARBITS 8 /* size of a packed character */
#define sDIMEN_MAX 3 /* maximum number of array dimensions */ #define sDIMEN_MAX 4 /* maximum number of array dimensions */
#define sLINEMAX 4095 /* input line length (in characters) */ #define sLINEMAX 4095 /* input line length (in characters) */
#define sCOMP_STACK 32 /* maximum nesting of #if .. #endif sections */ #define sCOMP_STACK 32 /* maximum nesting of #if .. #endif sections */
#define sDEF_LITMAX 500 /* initial size of the literal pool, in "cells" */ #define sDEF_LITMAX 500 /* initial size of the literal pool, in "cells" */
@ -280,6 +280,12 @@ typedef struct s_stringpair {
char *documentation; char *documentation;
} stringpair; } stringpair;
typedef struct s_valuepair {
struct s_valuepair *next;
long first;
long second;
} valuepair;
/* macros for code generation */ /* macros for code generation */
#define opcodes(n) ((n)*sizeof(cell)) /* opcode size */ #define opcodes(n) ((n)*sizeof(cell)) /* opcode size */
#define opargs(n) ((n)*sizeof(cell)) /* size of typical argument */ #define opargs(n) ((n)*sizeof(cell)) /* size of typical argument */
@ -700,6 +706,9 @@ SC_FUNC void delete_docstringtable(void);
SC_FUNC stringlist *insert_autolist(char *string); SC_FUNC stringlist *insert_autolist(char *string);
SC_FUNC char *get_autolist(int index); SC_FUNC char *get_autolist(int index);
SC_FUNC void delete_autolisttable(void); SC_FUNC void delete_autolisttable(void);
SC_FUNC valuepair *push_heaplist(long first, long second);
SC_FUNC int popfront_heaplist(long *first, long *second);
SC_FUNC void delete_heaplisttable(void);
SC_FUNC stringlist *insert_dbgfile(const char *filename); SC_FUNC stringlist *insert_dbgfile(const char *filename);
SC_FUNC stringlist *insert_dbgline(int linenr); SC_FUNC stringlist *insert_dbgline(int linenr);
SC_FUNC stringlist *insert_dbgsymbol(symbol *sym); SC_FUNC stringlist *insert_dbgsymbol(symbol *sym);

View File

@ -628,6 +628,7 @@ int pc_compile(int argc, char *argv[])
/* reset "defined" flag of all functions and global variables */ /* reset "defined" flag of all functions and global variables */
reduce_referrers(&glbtab); reduce_referrers(&glbtab);
delete_symbols(&glbtab,0,TRUE,FALSE); delete_symbols(&glbtab,0,TRUE,FALSE);
delete_heaplisttable();
#if !defined NO_DEFINE #if !defined NO_DEFINE
delete_substtable(); delete_substtable();
inst_datetime_defines(); inst_datetime_defines();
@ -805,6 +806,7 @@ cleanup:
free(sc_documentation); free(sc_documentation);
#endif #endif
delete_autolisttable(); delete_autolisttable();
delete_heaplisttable();
if (errnum!=0) { if (errnum!=0) {
if (strlen(errfname)==0) if (strlen(errfname)==0)
pc_printf("\n%d Error%s.\n",errnum,(errnum>1) ? "s" : ""); pc_printf("\n%d Error%s.\n",errnum,(errnum>1) ? "s" : "");
@ -2170,53 +2172,48 @@ static cell calc_arraysize(int dim[],int numdim,int cur)
return dim[cur]+(dim[cur]*calc_arraysize(dim,numdim,cur+1)); return dim[cur]+(dim[cur]*calc_arraysize(dim,numdim,cur+1));
} }
static cell adjust_indirectiontables(int dim[],int numdim,int cur,cell increment, static void adjust_indirectiontables(int dim[],int numdim,int startlit,
int startlit,constvalue *lastdim,int *skipdim) constvalue *lastdim,int *skipdim)
{ {
static int base; static int base;
int d; int cur;
int i,d;
cell accum; cell accum;
cell size;
assert(cur>=0 && cur<numdim); assert(startlit==-1 || startlit>=0 && startlit<=litidx);
assert(increment>=0); base=startlit;
assert(cur>0 && startlit==-1 || startlit>=0 && startlit<=litidx); size=1;
if (cur==0) for (cur=0; cur<numdim-1; cur++) {
base=startlit; /* 2 or more dimensions left, fill in an indirection vector */
if (cur==numdim-1) if (dim[cur+1]>0) {
return 0; for (i=0; i<size; i++)
/* 2 or more dimensions left, fill in an indirection vector */ for (d=0; d<dim[cur]; d++)
assert(dim[cur]>0); litq[base++]=(size*dim[cur]+(dim[cur+1]-1)*(dim[cur]*i+d)) * sizeof(cell);
if (dim[cur+1]>0) { } else {
for (d=0; d<dim[cur]; d++) /* final dimension is variable length */
litq[base++]=(dim[cur]+d*(dim[cur+1]-1)+increment) * sizeof(cell); constvalue *ld;
accum=dim[cur]*(dim[cur+1]-1); assert(dim[cur+1]==0);
} else { assert(lastdim!=NULL);
/* final dimension is variable length */ assert(skipdim!=NULL);
constvalue *ld; accum=0;
assert(dim[cur+1]==0); for (i=0; i<size; i++) {
assert(lastdim!=NULL); /* skip the final dimension sizes for all earlier major dimensions */
assert(skipdim!=NULL); for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) {
accum=0; assert(ld!=NULL);
/* skip the final dimension sizes for all earlier major dimensions */ } /* for */
for (d=0,ld=lastdim->next; d<*skipdim; d++,ld=ld->next) { for (d=0; d<dim[cur]; d++) {
assert(ld!=NULL); assert(ld!=NULL);
} /* for */ assert(strtol(ld->name,NULL,16)==d);
for (d=0; d<dim[cur]; d++) { litq[base++]=(size*dim[cur]+accum) * sizeof(cell);
assert(ld!=NULL); accum+=ld->value-1;
assert(strtol(ld->name,NULL,16)==d); *skipdim+=1;
litq[base++]=(dim[cur]+accum+increment) * sizeof(cell); ld=ld->next;
accum+=ld->value-1; } /* for */
*skipdim+=1; } /* for */
ld=ld->next; } /* if */
} /* for */ size*=dim[cur];
} /* if */ } /* for */
/* create the indirection tables for the lower level */
if (cur+2<numdim) { /* are there at least 2 dimensions below this one? */
increment+=(dim[cur]-1)*dim[cur+1]; /* this many indirection tables follow */
for (d=0; d<dim[cur]; d++)
increment+=adjust_indirectiontables(dim,numdim,cur+1,increment,-1,lastdim,skipdim);
} /* if */
return accum;
} }
/* initials /* initials
@ -2274,7 +2271,7 @@ static void initials2(int ident,int tag,cell *size,int dim[],int numdim,
for (tablesize=calc_arraysize(dim,numdim-1,0); tablesize>0; tablesize--) for (tablesize=calc_arraysize(dim,numdim-1,0); tablesize>0; tablesize--)
litadd(0); litadd(0);
if (dim[numdim-1]!=0) /* error 9 has already been given */ if (dim[numdim-1]!=0) /* error 9 has already been given */
adjust_indirectiontables(dim,numdim,0,0,curlit,NULL,NULL); adjust_indirectiontables(dim,numdim,curlit,NULL,NULL);
} /* if */ } /* if */
return; return;
} /* if */ } /* if */
@ -2340,7 +2337,7 @@ static void initials2(int ident,int tag,cell *size,int dim[],int numdim,
* of the array and we can properly adjust the indirection vectors * of the array and we can properly adjust the indirection vectors
*/ */
if (err==0) if (err==0)
adjust_indirectiontables(dim,numdim,0,0,curlit,&lastdim,&skipdim); adjust_indirectiontables(dim,numdim,curlit,&lastdim,&skipdim);
delete_consttable(&lastdim); /* clear list of minor dimension sizes */ delete_consttable(&lastdim); /* clear list of minor dimension sizes */
} /* if */ } /* if */
} /* if */ } /* if */
@ -5455,6 +5452,16 @@ static void doreturn(void)
/* nothing */; /* nothing */;
sub=addvariable(curfunc->name,(argcount+3)*sizeof(cell),iREFARRAY,sGLOBAL,curfunc->tag,dim,numdim,idxtag); sub=addvariable(curfunc->name,(argcount+3)*sizeof(cell),iREFARRAY,sGLOBAL,curfunc->tag,dim,numdim,idxtag);
sub->parent=curfunc; sub->parent=curfunc;
/* Function that returns array can be used before it is defined, so at
* the call point (if it is before definition) we may not know if this
* function returns array and what is its size (for example inside the
* conditional operator), so we don't know how many cells on the heap
* we need. Calculating heap consumption is required for the fix of
* incorrect heap deallocation on conditional operator. That's why we
* need an additional pass.
*/
if ((curfunc->usage & uREAD)!=0)
sc_reparse=TRUE;
} /* if */ } /* if */
/* get the hidden parameter, copy the array (the array is on the heap; /* get the hidden parameter, copy the array (the array is on the heap;
* it stays on the heap for the moment, and it is removed -usually- at * it stays on the heap for the moment, and it is removed -usually- at

View File

@ -600,13 +600,6 @@ static int htoi(cell *val,const unsigned char *curptr)
return (int)(ptr-curptr); return (int)(ptr-curptr);
} }
#if defined __APPLE__
static double pow10(double d)
{
return pow(10, d);
}
#endif
/* ftoi /* ftoi
* *
* Attempts to interpret a numeric symbol as a rational number, either as * Attempts to interpret a numeric symbol as a rational number, either as
@ -682,11 +675,7 @@ static int ftoi(cell *val,const unsigned char *curptr)
exp=(exp*10)+(*ptr-'0'); exp=(exp*10)+(*ptr-'0');
ptr++; ptr++;
} /* while */ } /* while */
#if defined __GNUC__ fmult=pow(10,exp*sign);
fmult=pow10(exp*sign);
#else
fmult=pow(10,exp*sign);
#endif
fnum *= fmult; fnum *= fmult;
dnum *= (unsigned long)(fmult+0.5); dnum *= (unsigned long)(fmult+0.5);
} /* if */ } /* if */

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

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

View File

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

View File

@ -13,6 +13,7 @@
#include <amxmodx> #include <amxmodx>
#include <amxmisc> #include <amxmisc>
#include <cstrike>
#include <csx> #include <csx>
public MultiKill public MultiKill
@ -81,9 +82,6 @@ new g_pcvar_mp_c4timer, g_c4timer_value
const TASK_BOMB_TIMER = 8038 const TASK_BOMB_TIMER = 8038
const TASK_DELAYED_NEW_ROUND = 98038 const TASK_DELAYED_NEW_ROUND = 98038
const TEAM_T = 1
const TEAM_CT = 2
new g_connected[MAX_PLAYERS + 1] new g_connected[MAX_PLAYERS + 1]
new g_msounds[MAX_PLAYERS + 1] new g_msounds[MAX_PLAYERS + 1]
new const _msound[] = "_msound" new const _msound[] = "_msound"
@ -178,13 +176,7 @@ new g_HeadShots[7][] =
"HS_MSG_7" "HS_MSG_7"
} }
new g_teamsNames[4][] = new const g_teamsNames[CsTeams][] = { "", "TERRORIST" , "CT", "" };
{
"TERRORIST",
"CT",
"TERRORISTS",
"CTS"
}
public plugin_init() public plugin_init()
{ {
@ -543,48 +535,26 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
} }
} }
new team = get_user_team(victim) new const CsTeams:team = cs_get_user_team(victim);
if (EnemyRemaining && is_user_connected(victim))
if (EnemyRemaining && CS_TEAM_T <= team <= CS_TEAM_CT && is_user_connected(victim))
{ {
if( TEAM_T <= team <= TEAM_CT ) new const victimTeammatesCount = get_playersnum_ex(GetPlayers_ExcludeDead | GetPlayers_MatchTeam, g_teamsNames[team]);
if (victimTeammatesCount)
{ {
new ppl[MAX_PLAYERS], pplnum, epplnum, a new killerTeammatesList[MAX_PLAYERS], killerTeammatesCount;
get_players(ppl, epplnum, "ae", team == TEAM_T ? "CT" : "TERRORIST") get_players_ex(killerTeammatesList, killerTeammatesCount, GetPlayers_ExcludeDead | GetPlayers_MatchTeam, g_teamsNames[CsTeams:(any:team % 2 + 1)]);
get_players(ppl, pplnum, "ae", team == TEAM_T ? "TERRORIST" : "CT")
if( victim_alive )
{
for(a=0; a<pplnum; a++)
{
if( ppl[a] == victim )
{
ppl[a] = ppl[--pplnum]
break
}
}
}
if (pplnum && epplnum)
{
new message[128], team_name[32]
set_hudmessage(255, 255, 255, 0.02, 0.85, 2, 0.05, 0.1, 0.02, 3.0, -1) if (killerTeammatesCount)
{
/* This is a pretty stupid thing to translate, but whatever */ set_hudmessage(255, 255, 255, 0.02, 0.85, 2, 0.05, 0.1, 0.02, 3.0, -1);
new _teamname[32]
if (team == TEAM_T)
{
formatex(_teamname, charsmax(_teamname), "TERRORIST%s", (epplnum == 1) ? "" : "S")
} else {
formatex(_teamname, charsmax(_teamname), "CT%s", (epplnum == 1) ? "" : "S")
}
new id for (new teammate; teammate < killerTeammatesCount; ++teammate)
for (a = 0; a < pplnum; ++a)
{ {
id = ppl[a] victimTeammatesCount > 1 ?
formatex(team_name, charsmax(team_name), "%L", id, _teamname) ShowSyncHudMsg(killerTeammatesList[teammate], g_bottom_sync, "%l", "REMAINING_ENEMIES", victimTeammatesCount) :
formatex(message, charsmax(message), "%L", id, "REMAINING", epplnum, team_name) ShowSyncHudMsg(killerTeammatesList[teammate], g_bottom_sync, "%l","REMAINING_ENEMY");
ShowSyncHudMsg(id, g_bottom_sync, "%s", message)
} }
} }
} }
@ -600,7 +570,7 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
{ {
switch( team ) switch( team )
{ {
case TEAM_T: case CS_TEAM_T:
{ {
for(b=0; b<tsnum; b++) for(b=0; b<tsnum; b++)
{ {
@ -611,7 +581,7 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
} }
} }
} }
case TEAM_CT: case CS_TEAM_CT:
{ {
for(b=0; b<ctsnum; b++) for(b=0; b<ctsnum; b++)
{ {
@ -653,19 +623,19 @@ public client_death(killer, victim, wpnindex, hitplace, TK)
} }
else if (!g_LastAnnounce) else if (!g_LastAnnounce)
{ {
new oposite = 0, _team = 0 new oposite = 0, CsTeams:_team
if (ctsnum == 1 && tsnum > 1) if (ctsnum == 1 && tsnum > 1)
{ {
g_LastAnnounce = cts[0] g_LastAnnounce = cts[0]
oposite = tsnum oposite = tsnum
_team = 0 _team = CS_TEAM_T
} }
else if (tsnum == 1 && ctsnum > 1) else if (tsnum == 1 && ctsnum > 1)
{ {
g_LastAnnounce = ts[0] g_LastAnnounce = ts[0]
oposite = ctsnum oposite = ctsnum
_team = 1 _team = CS_TEAM_CT
} }
if (g_LastAnnounce) if (g_LastAnnounce)
@ -818,7 +788,7 @@ public showStatus(id)
get_user_name(pid, name, charsmax(name)) get_user_name(pid, name, charsmax(name))
new color1 = 0, color2 = 0 new color1 = 0, color2 = 0
if (get_user_team(pid) == TEAM_T) if (cs_get_user_team(pid) == CS_TEAM_T)
color1 = 255 color1 = 255
else else
color2 = 255 color2 = 255

View File

@ -12,9 +12,9 @@ COL_MAROON = maroon
PRINT_ALL = (ALL) %s : %s PRINT_ALL = (ALL) %s : %s
[de] [de]
COL_WHITE = weiss COL_WHITE = weiß
COL_RED = rot COL_RED = rot
COL_GREEN = gruen COL_GREEN = grün
COL_BLUE = blau COL_BLUE = blau
COL_YELLOW = gelb COL_YELLOW = gelb
COL_MAGENTA = magenta-rot COL_MAGENTA = magenta-rot

View File

@ -85,31 +85,31 @@ ADMIN_UNBAN_2 = ADMIN %s: entbannt %s
ADMIN_ADDBAN_1 = ADMIN: bannt %s ADMIN_ADDBAN_1 = ADMIN: bannt %s
ADMIN_ADDBAN_2 = ADMIN %s: bannt %s ADMIN_ADDBAN_2 = ADMIN %s: bannt %s
BANNED = gebannt BANNED = gebannt
REASON = grund REASON = Grund
FOR_MIN = fuer %s Minuten FOR_MIN = für %s Minuten
PERM = fuer immer 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 "%s" wurde gekillt
ADMIN_SLAP_1 = ADMIN: schlaegt %s mit %d Schaden ADMIN_SLAP_1 = ADMIN: schlägt %s mit %d Schaden
ADMIN_SLAP_2 = ADMIN %s: schlaegt %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_SLAPED = Spieler "%s" wurde mit %d Schaden geschlagen
MAP_NOT_FOUND = Diese Map ist nicht vorhanden oder unzulaessig 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
NO_MORE_CVARS = Kann keine weiteren CVAR´s fuer rcon-Berechtigung hinzufuegen! NO_MORE_CVARS = Kann keine weiteren CVARs für rcon-Berechtigung hinzufügen!
UNKNOWN_CVAR = Unbekannte CVAR: %s UNKNOWN_CVAR = Unbekannte CVAR: %s
UNKNOWN_XVAR = Unbekannte XVAR: %s UNKNOWN_XVAR = Unbekannte XVAR: %s
CVAR_NO_ACC = Du hast keine Berechtigung fuer diese CVAR! CVAR_NO_ACC = Du hast keine Berechtigung für diese CVAR!
XVAR_NO_ACC = Du hast keine Berechtigung fuer diese XVAR! XVAR_NO_ACC = Du hast keine Berechtigung für diese XVAR!
CVAR_IS = CVAR "%s" ist "%s" CVAR_IS = CVAR "%s" ist "%s"
XVAR_IS = XVAR "%s" ist "%s" XVAR_IS = XVAR "%s" ist "%s"
PROTECTED = GESCHUETZT PROTECTED = GESCHÜTZT
SET_CVAR_TO = %s setzte CVAR %s auf "%s" SET_CVAR_TO = %s setzte CVAR %s auf "%s"
SET_XVAR_TO = %s setzte XVAR %s auf "%s" SET_XVAR_TO = %s setzte XVAR %s auf "%s"
CVAR_CHANGED = CVAR "%s" geaendert auf "%s" CVAR_CHANGED = CVAR "%s" geändert auf "%s"
XVAR_CHANGED = XVAR "%s" geaendert auf "%s" XVAR_CHANGED = XVAR "%s" geändert auf "%s"
LOADED_PLUGINS = Momentan geladene Plugins LOADED_PLUGINS = Momentan geladene Plugins
NAME = Name NAME = Name
VERSION = Version VERSION = Version
@ -120,35 +120,35 @@ PLUGINS_RUN = %d Plugins, %d Plugins laufen
LOADED_MODULES = Momentan geladene Module LOADED_MODULES = Momentan geladene Module
NUM_MODULES = %d Module NUM_MODULES = %d Module
FILE_NOT_FOUND = Datei "%s" nicht gefunden FILE_NOT_FOUND = Datei "%s" nicht gefunden
ADMIN_CONF_1 = ADMIN: fuehrt Config %s aus ADMIN_CONF_1 = ADMIN: führt Config %s aus
ADMIN_CONF_2 = ADMIN %s: fuehrt Config %s aus ADMIN_CONF_2 = ADMIN %s: führt Config %s aus
PAUSED = pausiert PAUSED = pausiert
UNPAUSED = Pause beendet UNPAUSED = fortgesetzt
UNABLE_PAUSE = Server konnte das Spiel nicht anhalten. Reale Spieler werden auf dem Server benoetigt. UNABLE_PAUSE = Server konnte das Spiel nicht anhalten. Reale Spieler werden auf dem Server benötigt.
SERVER_PROC = Server fuehrt %s aus SERVER_PROC = Server führt %s aus
PAUSING = Pausieren PAUSING = Pausiere
UNPAUSING = Pause beendet UNPAUSING = setze fort
PAUSE = Pause PAUSE = Pause
UNPAUSE = Pause beendet UNPAUSE = Fortsetzen
COM_SENT_SERVER = Befehlszeile "%s" zur Serverconsole gesendet COM_SENT_SERVER = Befehlszeile "%s" zur Serverconsole gesendet
CLIENTS_ON_SERVER = Spieler auf dem Server CLIENTS_ON_SERVER = Spieler auf dem Server
IMMU = Immunitaet IMMU = Immunität
RESERV = Reserviert RESERV = Reserviert
ACCESS = Berechtigung ACCESS = Berechtigung
TOTAL_NUM = Total %d TOTAL_NUM = Total %d
SKIP_MATCH = Ueberspringe "%s" (stimmt ueberein mit "%s") SKIP_MATCH = Überspringe "%s" (stimmt überein mit "%s")
SKIP_IMM = Ueberspringe "%s" (Immunitaet) SKIP_IMM = Überspringe "%s" (Immunität)
KICK_PL = Kickt "%s" KICK_PL = Kickt "%s"
YOU_DROPPED = Du wurdest gekickt, weil der Admin nur spezielle Spielergruppen auf dem Server zulaesst YOU_DROPPED = Du wurdest gekickt, weil der Admin nur spezielle Spielergruppen auf dem Server zulässt
KICKED_CLIENTS = Kickt %d clients KICKED_CLIENTS = Kickt %d clients
ADMIN_LEAVE_1 = ADMIN: erlaubt %s %s %s %s ADMIN_LEAVE_1 = ADMIN: erlaubt %s %s %s %s
ADMIN_LEAVE_2 = ADMIN %s: erlaubt %s %s %s %s ADMIN_LEAVE_2 = ADMIN %s: erlaubt %s %s %s %s
ADMIN_NICK_1 = ADMIN: aendert Name von %s zu "%s" ADMIN_NICK_1 = ADMIN: ändert Name von %s zu "%s"
ADMIN_NICK_2 = ADMIN %s: aendert Name von %s zu "%s" ADMIN_NICK_2 = ADMIN %s: ändert Name von %s zu "%s"
CHANGED_NICK = Name von %s zu "%s" geaendert CHANGED_NICK = Name von %s zu "%s" geändert
ADMIN_EXTEND_1 = ADMIN: Verlaengere Map fuer %d Minuten ADMIN_EXTEND_1 = ADMIN: Verlängere Map um %d Minuten
ADMIN_EXTEND_2 = ADMIN %s: Verlaengere Map fuer %d Minuten ADMIN_EXTEND_2 = ADMIN %s: Verlängere Map um %d Minuten
MAP_EXTENDED = Map "%s" wurde fuer %d Minuten verlaengert MAP_EXTENDED = Map "%s" wurde um %d Minuten verlängert
[sr] [sr]
ADMIN_KICK_1 = ADMIN: kick %s ADMIN_KICK_1 = ADMIN: kick %s

View File

@ -12,12 +12,12 @@ NO_MATCHING_RESULTS = ^nNo matching results found^n
[de] [de]
HELP_COMS = AMX Mod X Help: Befehle HELP_COMS = AMX Mod X Help: Befehle
HELP_ENTRIES = Eintraege %d - %d von %d HELP_ENTRIES = Einträge %d - %d von %d
HELP_USE_MORE = Nutze '%s %d' fuer die naechste Seite HELP_USE_MORE = Nutze '%s %d' für die nächste Seite
HELP_USE_BEGIN = Nutze '%s 1' um zum Anfang zu gelangen HELP_USE_BEGIN = Nutze '%s 1' um zum Anfang zu gelangen
TYPE_HELP = Schreibe '%s' '%s' in die Konsole um die verfuegbaren Befehle zu sehen. TYPE_HELP = Schreibe '%s' '%s' in die Konsole um die verfügbaren Befehle zu sehen.
TIME_INFO_1 = Verbleibende Zeit: %d:%02d Minuten, naechste Map: %s TIME_INFO_1 = Verbleibende Zeit: %d:%02d Minuten, nächste Map: %s
TIME_INFO_2 = Kein Zeitlimit. Naechste Map ist: %s TIME_INFO_2 = Kein Zeitlimit. Nächste Map ist: %s
[sr] [sr]
HELP_COMS = AMX Mod X Pomoc: Komande HELP_COMS = AMX Mod X Pomoc: Komande

View File

@ -36,35 +36,35 @@ ADMIN_VOTE_FOR_2 = %s %s: vote %s for %s
ADMIN_CANC_VOTE_1 = %s: Abstimmung abgebrochen ADMIN_CANC_VOTE_1 = %s: Abstimmung abgebrochen
ADMIN_CANC_VOTE_2 = %s %s: Abstimmung abgebrochen ADMIN_CANC_VOTE_2 = %s %s: Abstimmung abgebrochen
VOTING_CANC = Auswahl abgebrochen VOTING_CANC = Auswahl abgebrochen
NO_VOTE_CANC = Zur Zeit ist keine Abstimmung vorhanden oder das Abbrechen ist mit diesem Befehl nicht moeglich NO_VOTE_CANC = Zur Zeit ist keine Abstimmung vorhanden oder das Abbrechen ist mit diesem Befehl nicht möglich
RES_REF = Resultat abgelehnt RES_REF = Resultat abgelehnt
RES_ACCEPTED = Resultat angenommen RES_ACCEPTED = Resultat angenommen
VOTING_FAILED = Abstimmung gescheitert VOTING_FAILED = Abstimmung gescheitert
VOTING_RES_1 = %s (Ja "%d") (Nein "%d") (benoetigt "%d") VOTING_RES_1 = %s (Ja "%d") (Nein "%d") (benötigt "%d")
VOTING_RES_2 = %s (erhielt "%d") (benoetigt "%d") VOTING_RES_2 = %s (erhielt "%d") (benötigt "%d")
VOTING_SUCCESS = Abstimmung erfolgreich VOTING_SUCCESS = Abstimmung erfolgreich
VOTING_RES_3 = %s (erhielt "%d") (benoetigt "%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 = Forfahren?
VOTED_FOR = %s stimmten dafuer VOTED_FOR = %s stimmten dafür
VOTED_AGAINST = %s stimmten dagegen VOTED_AGAINST = %s stimmten dagegen
VOTED_FOR_OPT = %s stimmten fuer Option #%d VOTED_FOR_OPT = %s stimmten für Option #%d
ALREADY_VOTING = Abstimmung laeuft bereits... ALREADY_VOTING = Abstimmung läuft bereits...
VOTING_NOT_ALLOW = Abstimmung ist momentan nicht moeglich! VOTING_NOT_ALLOW = Abstimmung ist momentan nicht möglich!
GIVEN_NOT_VALID = %s ist unzulaessig GIVEN_NOT_VALID = %s ist unzulässig
MAP_IS = Map ist MAP_IS = Map ist
MAPS_ARE = Maps sind MAPS_ARE = Maps sind
CHOOSE_MAP = Waehle Map CHOOSE_MAP = Wähle Map
ADMIN_VOTE_MAP_1 = %s: Abstimmung fuer Map(s) gestartet ADMIN_VOTE_MAP_1 = %s: Abstimmung für Map(s) gestartet
ADMIN_VOTE_MAP_2 = %s %s: Abstimmung fuer Map(s) gestartet ADMIN_VOTE_MAP_2 = %s %s: Abstimmung für Map(s) gestartet
VOTING_STARTED = Abstimmung gestartet ... VOTING_STARTED = Abstimmung gestartet ...
VOTING_FORBIDDEN = Abstimmung dafuer ist verboten. VOTING_FORBIDDEN = Abstimmung dafür ist verboten.
ADMIN_VOTE_CUS_1 = %s: startet eigene Umfrage ADMIN_VOTE_CUS_1 = %s: startet eigene Umfrage
ADMIN_VOTE_CUS_2 = %s %s: startet eigene Umfrage ADMIN_VOTE_CUS_2 = %s %s: startet eigene Umfrage
VOTE = Abstimmung VOTE = Abstimmung
ACTION_PERFORMED = Durchfuehrung an BOT "%s" ist nicht moeglich ACTION_PERFORMED = Durchführung an BOT "%s" ist nicht möglich
ADMIN_VOTE_FOR_1 = %s: %s Stimmen fuer %s ADMIN_VOTE_FOR_1 = %s: %s Stimmen für %s
ADMIN_VOTE_FOR_2 = %s %s: %s Stimmen fuer %s ADMIN_VOTE_FOR_2 = %s %s: %s Stimmen für %s
[sr] [sr]
ADMIN_CANC_VOTE_1 = %s: otkazi glasanje ADMIN_CANC_VOTE_1 = %s: otkazi glasanje

View File

@ -4,9 +4,9 @@ CONF_MENU = Configs Menu
SPE_MENU = Speech Menu SPE_MENU = Speech Menu
[de] [de]
CMD_MENU = Menu > Befehle CMD_MENU = Menü > Befehle
CONF_MENU = Menu > Konfiguration CONF_MENU = Menü > Konfiguration
SPE_MENU = Menu > Sprechen SPE_MENU = Menü > Sprechen
[sr] [sr]
CMD_MENU = Komandne CMD_MENU = Komandne

View File

@ -21,7 +21,7 @@ ON = On
OFF = Off OFF = Off
[de] [de]
BACK = Zurueck BACK = Zurück
EXIT = Beenden EXIT = Beenden
MORE = Mehr MORE = Mehr
NONE = Keine NONE = Keine
@ -32,13 +32,13 @@ YES = Ja
NO = Nein NO = Nein
BAN = ban BAN = ban
KICK = kick KICK = kick
NO_ACC_COM = Du hast nicht genuegend Rechte, um diesen Befehl auszufuehren! NO_ACC_COM = Du hast nicht genügend Rechte, um diesen Befehl auszuführen!
USAGE = Anwendung USAGE = Anwendung
MORE_CL_MATCHT = Es gibt mehrere Spieler, auf die deine Angaben zutreffen MORE_CL_MATCHT = Es gibt mehrere Spieler, auf die deine Angaben zutreffen
CL_NOT_FOUND = Spieler mit diesem Namen oder dieser UserID nicht gefunden CL_NOT_FOUND = Spieler mit diesem Namen oder dieser UserID nicht gefunden
CLIENT_IMM = Spieler "%s" hat Immnuitaet CLIENT_IMM = Spieler "%s" hat Immunität
CANT_PERF_DEAD = Diese Aktion kann nicht am toten Spieler "%s" ausgefuehrt werden. CANT_PERF_DEAD = Diese Aktion kann nicht am toten Spieler "%s" ausgeführt werden.
CANT_PERF_BOT = Diese Aktion kann nicht am Bot "%s" ausgefuehrt werden. CANT_PERF_BOT = Diese Aktion kann nicht am Bot "%s" ausgeführt werden.
ON = An ON = An
OFF = Aus OFF = Aus

View File

@ -8,13 +8,13 @@ EXTED_MAP = Extend map %s
TIME_CHOOSE = It's time to choose the nextmap... TIME_CHOOSE = It's time to choose the nextmap...
[de] [de]
CHO_FIN_EXT = Auswahl beendet. Laufende Map wird um %.0f Minuten verlaengert. CHO_FIN_EXT = Auswahl beendet. Laufende Map wird um %.0f Minuten verlängert.
CHO_FIN_NEXT = Auswahl beendet. Naechste Map ist %s CHO_FIN_NEXT = Auswahl beendet. Nächste Map ist %s
CHOSE_EXT = %s waehlten Map-Verlaengerung CHOSE_EXT = %s wählte Map-Verlängerung
X_CHOSE_X = %s waehlten %s X_CHOSE_X = %s wählte %s
CHOOSE_NEXTM = AMXX waehlt naechste Map CHOOSE_NEXTM = [AMXX] Wählt die nächste Map
EXTED_MAP = Verlangere Map %s EXTED_MAP = Verlängere Map %s
TIME_CHOOSE = Es ist an der Zeit, die naechste Map zu waehlen... TIME_CHOOSE = Es ist an der Zeit, die nächste Map zu wählen...
[sr] [sr]
CHO_FIN_EXT = Biranje zavrseno. Sadasnja mapa ce biti produzena za %.0f minuta CHO_FIN_EXT = Biranje zavrseno. Sadasnja mapa ce biti produzena za %.0f minuta

View File

@ -30,21 +30,21 @@ 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 fuer Option #%d X_VOTED_FOR = %s stimmten für Option #%d
VOTEMAP_MENU = Menu > Mapwahl VOTEMAP_MENU = Menü > Mapwahl
START_VOT = Start Abstimmung START_VOT = Starte Abstimmung
SEL_MAPS = Ausgewaehlte Maps SEL_MAPS = Ausgewählte Maps
ALREADY_VOT = Es laeuft bereits eine Abstimmung... ALREADY_VOT = Es läuft bereits eine Abstimmung...
NO_MAPS_MENU = Es sind keine Maps im Menu vorhanden NO_MAPS_MENU = Es sind keine Maps im Menü vorhanden
VOT_NOW_ALLOW = Abstimmung zur Zeit nicht moeglich VOT_NOW_ALLOW = Abstimmung zur Zeit nicht möglich
WHICH_MAP = Welche Map moechtest du? WHICH_MAP = Welche Map möchtest du?
CHANGE_MAP_TO = Wechsle zu Map CHANGE_MAP_TO = Wechsle zu Map
CANC_VOTE = Abstimmung abgebrochen CANC_VOTE = Abstimmung abgebrochen
ADMIN_V_MAP_1 = ADMIN: waehlt Map(s) ADMIN_V_MAP_1 = ADMIN: wählt Map(s)
ADMIN_V_MAP_2 = ADMIN %s: waehlt Map(s) ADMIN_V_MAP_2 = ADMIN %s: wählt Map(s)
ADMIN_CHANGEL_1 = ADMIN: wechselt zur Map %s ADMIN_CHANGEL_1 = ADMIN: wechselt zur Map %s
ADMIN_CHANGEL_2 = ADMIN %s: wechselt zur Map %s ADMIN_CHANGEL_2 = ADMIN %s: wechselt zur Map %s
CHANGLE_MENU = Menu > Mapwechsel CHANGLE_MENU = Menü > Mapwechsel
[sr] [sr]
RESULT_REF = Rezultat odbijen RESULT_REF = Rezultat odbijen

View File

@ -19,7 +19,7 @@ TELE_PLAYER = Teleport Player
[de] [de]
KICK_PLAYER = Kick Spieler KICK_PLAYER = Kick Spieler
BAN_PLAYER = Ban Spieler BAN_PLAYER = Ban Spieler
SLAP_SLAY = Schlage/Toete Spieler SLAP_SLAY = Schlage/Kille Spieler
TEAM_PLAYER = Team Spieler ^n TEAM_PLAYER = Team Spieler ^n
CHANGEL = Mapwechsel CHANGEL = Mapwechsel
VOTE_MAPS = Map Abstimmung ^n VOTE_MAPS = Map Abstimmung ^n

View File

@ -42,53 +42,57 @@ CTS = CTS
TERRORIST = TERRORIST TERRORIST = TERRORIST
TERRORISTS = TERRORISTS TERRORISTS = TERRORISTS
REMAINING = %d %s Remaining... REMAINING = %d %s Remaining...
REMAINING_ENEMY = One enemy remaining...
REMAINING_ENEMIES = %d enemies remaining...
KILLS = kills KILLS = kills
HS = hs HS = hs
[de] [de]
WITH = mit WITH = mit
KNIFE_MSG_1 = %s hat %s geschnitten und gewuerfelt KNIFE_MSG_1 = %s hat %s geschnitten und gewürfelt
KNIFE_MSG_2 = %s hat sein Messer gezueckt und %s ausgeweidet KNIFE_MSG_2 = %s hat sein Messer gezückt und %s ausgeweidet
KNIFE_MSG_3 = %s hat sich angeschlichen und %s gemessert KNIFE_MSG_3 = %s hat sich angeschlichen und %s gemessert
KNIFE_MSG_4 = %s messerte und verstuemmelte %s KNIFE_MSG_4 = %s messerte und verstümmelte %s
LAST_MSG_1 = Nun haengt 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 Glueck! 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 Spass 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 Praezisionswurf zu %s HE_MSG_3 = %s macht einen Präzisionswurf zu %s
HE_MSG_4 = %s schickte eine dicke Explosion an %s HE_MSG_4 = %s schickte eine dicke Explosion an %s
SHE_MSG_1 = %s sprengte sich selbst mit einer Granate SHE_MSG_1 = %s sprengte sich selbst mit einer Granate
SHE_MSG_2 = %s untersuchte die Auswirkungen ^neiner Granate an sich selbst... SHE_MSG_2 = %s untersuchte die Auswirkungen einer Granate an sich selbst...
SHE_MSG_3 = %s schluckte eine Granate! SHE_MSG_3 = %s schluckte eine Granate!
SHE_MSG_4 = %s explodierte! SHE_MSG_4 = %s explodierte!
HS_MSG_1 = $kn killte $vn mit einem ^nplazierten Schuss in den Kopf! HS_MSG_1 = $kn killte $vn mit einem ^nplazierten Schuss in den Kopf!
HS_MSG_2 = $kn entfernte den Kopf von $vn^nmit einem Praezisionsschuss. 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 siegte ueber $vn durch eine 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 weiss ^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
KILLED_ROW = Du hast bis jetzt %d in einer Runde gekillt. KILLED_ROW = Du hast nun %d Gegner gekillt, ohne zu sterben!
DIED_ROUNDS = Du bist bis jetzt %d Runden hintereinander gestorben... DIED_ROUNDS = Achtung! Du bist schon %d Runden in Folge ohne Kill gestorben...
KILLED_CHICKEN = Irgendjemand killte ein Huhn!!! KILLED_CHICKEN = Irgendjemand killte ein Huhn!!!
BLEW_RADIO = Irgendjemand sprenge das Radio!!! BLEW_RADIO = Irgendjemand sprengte das Radio!!!
REACHED_TARGET = OMG! %s erreichte das Ziel! REACHED_TARGET = OMG! %s erreichte das Ziel!
PLANT_BOMB = %s legt die Bombe! PLANT_BOMB = %s legt die Bombe!
DEFUSING_BOMB = %s entschaerft die Bombe... DEFUSING_BOMB = %s entschärft die Bombe...
SET_UP_BOMB = %s legte die Bombe!!! SET_UP_BOMB = %s legte die Bombe!!!
DEFUSED_BOMB = %s entschaerfte die Bombe! DEFUSED_BOMB = %s entschärfte die Bombe!
FAILED_DEFU = %s konnte die Bombe nicht entschaerfen... FAILED_DEFU = %s konnte die Bombe nicht entschärfen...
PICKED_BOMB = %s hob die Bombe auf... PICKED_BOMB = %s hob die Bombe auf...
DROPPED_BOMB = %s warf die Bombe weg!!! DROPPED_BOMB = %s warf die Bombe weg!!!
CT = CT CT = CT
CTS = CTs CTS = CTs
TERRORIST = TERRORIST TERRORIST = TERRORIST
TERRORISTS = TERRORISTEN TERRORISTS = TERRORISTEN
REMAINING = %d %s uebrig... REMAINING = %d %s übrig...
REMAINING_ENEMY = Ein Gegner übrig...
REMAINING_ENEMIES = %d Gegner übrig...
KILLS = kills KILLS = kills
HS = hs HS = hs
@ -136,6 +140,8 @@ CTS = CTS
TERRORIST = TERORISTA TERRORIST = TERORISTA
TERRORISTS = TERORISTA TERRORISTS = TERORISTA
REMAINING = %d %s Preostalo... REMAINING = %d %s Preostalo...
REMAINING_ENEMY = Jedan preostali protivnika...
REMAINING_ENEMIES = %d preostalih protivnika...
KILLS = ubistava KILLS = ubistava
HS = hs HS = hs
@ -230,6 +236,8 @@ CTS = CTS
TERRORIST = TERRORISTE TERRORIST = TERRORISTE
TERRORISTS = TERRORISTES TERRORISTS = TERRORISTES
REMAINING = %d %s Restant... REMAINING = %d %s Restant...
REMAINING_ENEMY = Dernier ennemi restant...
REMAINING_ENEMIES = %d ennemis restants...
KILLS = frags KILLS = frags
HS = hs HS = hs

View File

@ -10,15 +10,15 @@ TYPE_LANGMENU = Type 'amx_langmenu' in the console to display a menu where you c
LANG_MENU_DISABLED = Language menu disabled. LANG_MENU_DISABLED = Language menu disabled.
[de] [de]
LANG_NOT_EXISTS = Diese Sprache exsistiert nicht. LANG_NOT_EXISTS = Diese Sprache existiert nicht.
PERSO_LANG = Eigene Sprache PERSO_LANG = Eigene Sprache
LANG_MENU = Sprach Menu LANG_MENU = Sprachmenü
SERVER_LANG = Server Sprache SERVER_LANG = Sprache des Servers
SAVE_LANG = Spracheinstellung speichern SAVE_LANG = Spracheinstellung speichern
SET_LANG_SERVER = Die Sprache des Servers wurde auf "%s" geaendert SET_LANG_SERVER = Die Sprache des Servers wurde auf "%s" geändert
SET_LANG_USER = Deine Sprache wurde auf "%s" geaendert SET_LANG_USER = Deine Sprache wurde auf "%s" geändert
TYPE_LANGMENU = Schreibe 'amx_langmenu' in die Konsole zum Anzeigen des Sprachauswahlmenus TYPE_LANGMENU = Schreibe 'amx_langmenu' in die Konsole zum Anzeigen des Sprachmenüs
LANG_MENU_DISABLED = Sprachen Menü deaktiviert. LANG_MENU_DISABLED = Sprachmenü deaktiviert.
[sr] [sr]
LANG_NOT_EXISTS = Jezik ne postoji LANG_NOT_EXISTS = Jezik ne postoji

View File

@ -4,7 +4,7 @@ PLAYED_MAP = Played map
FRIEND_FIRE = Friendly fire FRIEND_FIRE = Friendly fire
[de] [de]
NEXT_MAP = Naechste Map: NEXT_MAP = Nächste Map:
PLAYED_MAP = Gespielte Maps PLAYED_MAP = Gespielte Maps
FRIEND_FIRE = Friendly fire FRIEND_FIRE = Friendly fire

View File

@ -39,15 +39,15 @@ CANT_UNPAUSE_PLUGIN = Plugin "%s" is stopped and cannot be paused or unpaused.
CLEAR_PAUSED = Clear file with paused CLEAR_PAUSED = Clear file with paused
[de] [de]
PAUSE_COULDNT_FIND = Konnte kein Plugin finden, dass mit "%s" uebereinstimmt PAUSE_COULDNT_FIND = Konnte kein Plugin finden, dass mit "%s" übereinstimmt
PAUSE_PLUGIN_MATCH = Plugin stimmt mit "%s" ueberein PAUSE_PLUGIN_MATCH = Plugin stimmt mit "%s" überein
PAUSE_CONF_CLEARED = Konfigurationsdatei geloescht. Bei Bedarf Map neu starten. PAUSE_CONF_CLEARED = Konfigurationsdatei gelöscht. Bei Bedarf Map neu starten.
PAUSE_ALR_CLEARED = Konfiguration war bereits geloescht! PAUSE_ALR_CLEARED = Konfiguration war bereits gelöscht!
PAUSE_CONF_SAVED = Konfiguration erfolgreich gespeichert. PAUSE_CONF_SAVED = Konfiguration erfolgreich gespeichert.
PAUSE_SAVE_FAILED = Fehler beim Speichern der Konfiguration!!! PAUSE_SAVE_FAILED = Fehler beim Speichern der Konfiguration!!!
LOCKED = GESPERRT LOCKED = GESPERRT
PAUSE_UNPAUSE = Pausiere/Aktiviere Plugins PAUSE_UNPAUSE = Pausiere/Aktiviere Plugins
CLEAR_STOPPED = Loeschen der Datei gestoppt CLEAR_STOPPED = Löschen der Datei gestoppt
SAVE_STOPPED = Speichern abgebrochen SAVE_STOPPED = Speichern abgebrochen
PAUSED_PLUGIN = Pausiere %d Plugin PAUSED_PLUGIN = Pausiere %d Plugin
PAUSED_PLUGINS = Pausiere %d Plugins PAUSED_PLUGINS = Pausiere %d Plugins
@ -58,8 +58,8 @@ PAUSE_LOADED = Pausierte Plugins: Plugins geladen
STOPPED = gestoppt STOPPED = gestoppt
VERSION = Version VERSION = Version
FILE = Datei FILE = Datei
PAUSE_ENTRIES = Eintraege %d - %d von %d (%d laufen) PAUSE_ENTRIES = Einträge %d - %d von %d (%d laufen)
PAUSE_USE_MORE = Benutze 'amx_pausecfg list %d' fuer mehr PAUSE_USE_MORE = Benutze 'amx_pausecfg list %d' für mehr
PAUSE_USE_BEGIN = Benutze 'amx_pausecfg list 1' um zum Anfang zu gelangen PAUSE_USE_BEGIN = Benutze 'amx_pausecfg list 1' um zum Anfang zu gelangen
PAUSE_USAGE = Benutze: amx_pausecfg <Befehl> [Name] PAUSE_USAGE = Benutze: amx_pausecfg <Befehl> [Name]
PAUSE_COMMANDS = Befehle PAUSE_COMMANDS = Befehle
@ -69,14 +69,14 @@ COM_PAUSE_STOP = ^tstop <file> - stoppt ein Plugin
COM_PAUSE_PAUSE = ^tpause <file> - pausiert ein Plugin COM_PAUSE_PAUSE = ^tpause <file> - pausiert ein Plugin
COM_PAUSE_ENABLE = ^tenable <file> - aktiviert ein Plugin COM_PAUSE_ENABLE = ^tenable <file> - aktiviert ein Plugin
COM_PAUSE_SAVE = ^tsave - speichert die Liste der gestoppten Plugins COM_PAUSE_SAVE = ^tsave - speichert die Liste der gestoppten Plugins
COM_PAUSE_CLEAR = ^tclear - loescht die Liste der gestoppten Plugins COM_PAUSE_CLEAR = ^tclear - löscht die Liste der gestoppten Plugins
COM_PAUSE_LIST = ^tlist [id] - Plugins anzeigen COM_PAUSE_LIST = ^tlist [id] - Plugins anzeigen
COM_PAUSE_ADD = ^tadd <title> - markiert ein Plugin als nicht pausierbar COM_PAUSE_ADD = ^tadd <title> - markiert ein Plugin als nicht pausierbar
SAVE_PAUSED = Speichere pausierte Plugins SAVE_PAUSED = Speichere pausierte Plugins
COM_PAUSE_SAVE_PAUSED = ^tsave - speichert die Liste der pausierten Plugins COM_PAUSE_SAVE_PAUSED = ^tsave - speichert die Liste der pausierten Plugins
COM_PAUSE_CLEAR_PAUSED = ^tclear - leert die Liste der pausierten Plugins COM_PAUSE_CLEAR_PAUSED = ^tclear - leert die Liste der pausierten Plugins
CANT_UNPAUSE_PLUGIN = Das Plugin "%s" ist gestoppt und kann nicht pausiert oder unpausiert werden. CANT_UNPAUSE_PLUGIN = Das Plugin "%s" ist gestoppt und kann nicht pausiert oder aktiviert werden.
CLEAR_PAUSED = Loeschen der Datei pausierten CLEAR_PAUSED = Löscht die Liste der pausierten Plugins
[sr] [sr]
PAUSE_COULDNT_FIND = Nije moguce naci plugin koji se poklapa sa "%s" PAUSE_COULDNT_FIND = Nije moguce naci plugin koji se poklapa sa "%s"

View File

@ -20,21 +20,21 @@ CANT_PERF_PLAYER = That action can't be performed on player "%s"
[de] [de]
ADMIN_BAN_1 = ADMIN: bannt %s ADMIN_BAN_1 = ADMIN: bannt %s
ADMIN_BAN_2 = ADMIN %s: bannt %s ADMIN_BAN_2 = ADMIN %s: bannt %s
BAN_MENU = Menu > bannen BAN_MENU = Menü > bannen
BAN_FOR_MIN = Bann fuer %d Minuten BAN_FOR_MIN = für %d Minuten bannen
BAN_PERM = fuer immer bannen BAN_PERM = für immer bannen
SLAP_SLAY_MENU = Schlagen/Toeten-Menu SLAP_SLAY_MENU = Schlagen/Killen-Menü
SLAP_WITH_DMG = Schlaegt mit %d Schaden SLAP_WITH_DMG = mit %d Schaden schlagen
SLAY = toeten SLAY = killen
KICK_MENU = Menu >kicken KICK_MENU = Menü > kicken
ADMIN_TRANSF_1 = ADMIN: verschiebt %s zu den %s ADMIN_TRANSF_1 = ADMIN: verschiebt %s zu den %s
ADMIN_TRANSF_2 = ADMIN %s: verschiebt %s zu den %s ADMIN_TRANSF_2 = ADMIN %s: verschiebt %s zu den %s
TEAM_MENU = Menu > Team TEAM_MENU = Menü > Team
TRANSF_TO = zu den %s geschoben TRANSF_TO = zu den %s schieben
TRANSF_SILENT = Stiller Transfer TRANSF_SILENT = Stiller Transfer
CL_CMD_MENU = Menu > Spielerbefehle CL_CMD_MENU = Menü > Spielerbefehle
NO_CMDS = keine Befehle verfuegbar NO_CMDS = keine Befehle verfügbar
CANT_PERF_PLAYER = Diese Aktion kann nicht am spieler "%s" ausgefuehrt werden. CANT_PERF_PLAYER = Diese Aktion kann nicht am Spieler "%s" ausgeführt werden.
[sr] [sr]
ADMIN_BAN_1 = ADMIN: ban %s ADMIN_BAN_1 = ADMIN: ban %s

View File

@ -95,7 +95,7 @@ NO_EQ_WE = Konnte diese Ausrüstung oder Waffe nicht finden
WEAP_RES = Waffenverbot WEAP_RES = Waffenverbot
VALUE = Wert VALUE = Wert
REST_ENTRIES_OF = Eintrag %i - %i von %i REST_ENTRIES_OF = Eintrag %i - %i von %i
REST_USE_MORE = Benutze 'amx_restrict list %i' für mehr Info´s REST_USE_MORE = Benutze 'amx_restrict list %i' für mehr Infos
REST_USE_BEGIN = Benutze 'amx_restrict list 1' um zum Anfang zu gelangen REST_USE_BEGIN = Benutze 'amx_restrict list 1' um zum Anfang zu gelangen
REST_USE_HOW = Benutze 'amx_restrict list <value>' (1 -> 8) REST_USE_HOW = Benutze 'amx_restrict list <value>' (1 -> 8)
REST_CONF_SAVED = Konfiguration gesichert (Datei "%s") REST_CONF_SAVED = Konfiguration gesichert (Datei "%s")
@ -117,8 +117,8 @@ REST_WEAP = Waffen verbieten
SAVE_SET = Einstellungen speichern SAVE_SET = Einstellungen speichern
CONF_SAV_SUC = Konfiguration erfolgreich gespeichert CONF_SAV_SUC = Konfiguration erfolgreich gespeichert
CONF_SAV_FAIL = Speichern der Konfiguration fehlgeschlagen!!! CONF_SAV_FAIL = Speichern der Konfiguration fehlgeschlagen!!!
REG_CMD_MENU = - Zeigt Waffen-Verbots Menü REG_CMD_MENU = - Zeigt Waffen-Verbotsmenü
REG_CMD_REST = - Zeigt Hilfe für Waffen-Verbots Menü REG_CMD_REST = - Zeigt Hilfe für Waffen-Verbotsmenü
RESTRICTED_ITEM = * Dieser Gegenstand ist verboten * RESTRICTED_ITEM = * Dieser Gegenstand ist verboten *
MENU_TITLE_HANDGUNS = Handwaffen MENU_TITLE_HANDGUNS = Handwaffen
MENU_TITLE_SHOTGUNS = Schrotgewehre MENU_TITLE_SHOTGUNS = Schrotgewehre
@ -1276,4 +1276,4 @@ MENU_ITEM_NVGS = 夜视护目镜
MENU_ITEM_SHIELD = 战术盾牌 MENU_ITEM_SHIELD = 战术盾牌
MENU_ITEM_PRIAMMO = 主武器弹药 MENU_ITEM_PRIAMMO = 主武器弹药
MENU_ITEM_SECAMMO = 副武器弹药 MENU_ITEM_SECAMMO = 副武器弹药
CONFIG_FILE_HEADER = ; 由 %s 插件生成. 请勿修改!^n; 值名称^n CONFIG_FILE_HEADER = ; 由 %s 插件生成. 请勿修改!^n; 值名称^n

View File

@ -4,8 +4,8 @@ MSG_FREQ = Scrolling message displaying frequency: %d:%02d minutes
MSG_DISABLED = Scrolling message disabled MSG_DISABLED = Scrolling message disabled
[de] [de]
MIN_FREQ = Minimale Frequenz fuer diese Anzeige sind %d Sekunden MIN_FREQ = Die minimale Frequenz für diese Anzeige sind %d Sekunden
MSG_FREQ = Scrollnachricht Anzeigefrequenz: %d:%02d Minuten MSG_FREQ = Anzeigefrequenz der Scrollnachricht: %d:%02d Minuten
MSG_DISABLED = Scrollnachrichten abgeschaltet MSG_DISABLED = Scrollnachrichten abgeschaltet
[sr] [sr]

View File

@ -94,9 +94,9 @@ M_THEIR_RANK_IS = Their rank is
M_OF = of M_OF = of
[de] [de]
WHOLEBODY = Koerper WHOLEBODY = Körper
HEAD = Kopf HEAD = Kopf
CHEST = Oberkoerper CHEST = Oberkörper
STOMACH = Bauch STOMACH = Bauch
LEFTARM = linker Arm LEFTARM = linker Arm
RIGHTARM = rechter Arm RIGHTARM = rechter Arm
@ -116,31 +116,31 @@ RAMPAGE_SMALL = %s: RANDALIERER!!!
UNSTOPPABLE_SMALL = %s IST NICHT ZU STOPPEN!! UNSTOPPABLE_SMALL = %s IST NICHT ZU STOPPEN!!
MONSTER_SMALL = %s IST EIN MONSTER! MONSTER_SMALL = %s IST EIN MONSTER!
GODLIKE_SMALL = %s IST GODLIKE!!! GODLIKE_SMALL = %s IST GODLIKE!!!
KNIFE_MSG1 = %s hat %s geschnitten und gewuerfelt KNIFE_MSG1 = %s hat %s geschnitten und gewürfelt
KNIFE_MSG2 = %s hat sein Messer gezueckt und %s ausgeweidet KNIFE_MSG2 = %s hat sein Messer gezückt und %s ausgeweidet
KNIFE_MSG3 = %s hat sich angeschlichen und %s gemessert KNIFE_MSG3 = %s hat sich angeschlichen und %s gemessert
KNIFE_MSG4 = %s messerte und verstuemmelte %s KNIFE_MSG4 = %s messerte und verstümmelte %s
HE_MSG1 = %s sendet ein kleines Geschenk an %s HE_MSG1 = %s sendet ein kleines Geschenk an %s
HE_MSG2 = %s wirft ein Knallbonbon zu %s HE_MSG2 = %s wirft ein Knallbonbon zu %s
HE_MSG3 = %s macht einen Praezisionswurf zu %s HE_MSG3 = %s macht einen Präzisionswurf zu %s
HE_MSG4 = %s schickte eine dicke Explosion an %s HE_MSG4 = %s schickte eine dicke Explosion an %s
SHE_MSG1 = %s sprengte sich selbst mit einer Granate SHE_MSG1 = %s sprengte sich selbst mit einer Granate
SHE_MSG2 = %s untersuchte die Auswirkungen ^neiner Granate an sich selbst... SHE_MSG2 = %s untersuchte die Auswirkungen ^neiner Granate an sich selbst...
SHE_MSG3 = %s schluckte eine Granate! SHE_MSG3 = %s schluckte eine Granate!
SHE_MSG4 = %s explodierte! SHE_MSG4 = %s explodierte!
HEAD_MSG1 = $kn killte $vn mit einem ^nplazierten Schuss in den Kopf! HEAD_MSG1 = $kn killte $vn mit einem ^nplazierten Schuss in den Kopf!
HEAD_MSG2 = $kn entfernte den Kopf von $vn^nmit einem Praezisionsschuss. HEAD_MSG2 = $kn entfernte den Kopf von $vn^nmit einem Präzisionsschuss.
HEAD_MSG3 = $kn verwandelte den Kopf ^nvon $vn in Pudding. HEAD_MSG3 = $kn verwandelte den Kopf ^nvon $vn in Pudding.
HEAD_MSG4 = $vn siegte ueber $kn durch eine Kopfschuss. HEAD_MSG4 = $vn killte $kn durch einen Kopfschuss.
HEAD_MSG5 = $vn's Kopf wurde in der Gegend verteilt HEAD_MSG5 = $vn's Kopf wurde in der Gegend verteilt
HEAD_MSG6 = $kn hat einen super ^nTreffer gelandet,das weiss ^n$vn nun auch. HEAD_MSG6 = $kn hat einen super ^nTreffer gelandet,das weiss ^n$vn nun auch.
HEAD_MSG7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn... HEAD_MSG7 = $vn's Kopf war ein bisschen zu lange im Fadenkreuz von $kn...
DOUBLE_MSG1 = Wow! %s machte einen Doppelkill!!! DOUBLE_MSG1 = Wow! %s machte einen Doppelkill!!!
DOUBLE_MSG2 = Unglaublich! %s macht einen dreifachen Kill !!! DOUBLE_MSG2 = Unglaublich! %s macht einen dreifachen Kill !!!
DOUBLE_MSG3 = Ueberrascung! %s macht %d Kills auf einmal !!! DOUBLE_MSG3 = Überraschung! %s macht %d Kills auf einmal !!!
MORTAR_MSG1 = %s stellte den Moerser auf und schickte %s in den Himmel. MORTAR_MSG1 = %s stellte den Mörser auf und schickte %s in den Himmel.
MORTAR_MSG2 = %s killte %s ueber eine lange Distanz. MORTAR_MSG2 = %s killte %s über eine lange Distanz.
KILL_INFO1 = %s killte dich mit der %s^nueber eine Entfernung von %.2f Meter.^n KILL_INFO1 = %s killte dich mit der %s^nüber eine Entfernung von %.2f Meter.^n
KILL_INFO2 = Er machte %d Schaden bei dir mit %d Treffern ^nund hat noch %dHP.^n KILL_INFO2 = Er machte %d Schaden bei dir mit %d Treffern ^nund hat noch %dHP.^n
KILL_INFO3 = Du machtest %d Schaden bei ihm mit %d Treffern.^n KILL_INFO3 = Du machtest %d Schaden bei ihm mit %d Treffern.^n
KILL_INFO4 = Du hast ihn getroffen in den/das:^n%s^n KILL_INFO4 = Du hast ihn getroffen in den/das:^n%s^n
@ -149,7 +149,7 @@ NO_KILLER = Du hast keinen Killer...
TOPX = Top %d TOPX = Top %d
FFIRE_IS = Friendly fire: FFIRE_IS = Friendly fire:
ATTACKERS = Angreifer: ATTACKERS = Angreifer:
VICTIMS = Gewinner: VICTIMS = Opfer:
DMG = Schaden DMG = Schaden
HIT_S = Treffer HIT_S = Treffer
YOU_HIT = Du trafst %s in: YOU_HIT = Du trafst %s in:
@ -157,10 +157,10 @@ SERVER_STATS = Server Statistik
SHOW_STATS = Statistik anzeigen SHOW_STATS = Statistik anzeigen
SHOW_RANK = Rang anzeigen SHOW_RANK = Rang anzeigen
TA_MSG = %s schiesst auf einen Kameraden TA_MSG = %s schiesst auf einen Kameraden
TK_MSG = %s toetete einen Kameraden! TK_MSG = %s killte einen Kameraden!
NADE_CAUGHT = Wow! %s faengt eine gegnereische Granate! NADE_CAUGHT = Wow! %s fängt eine gegnerische Granate!
NADE_FAILEDTK = Oops.. %s killte dich bei dem Versuch, die Granate zurueckzuwerfen.. NADE_FAILEDTK = Oops.. %s killte dich bei dem Versuch, die Granate zurückzuwerfen..
NADE_FAILED = %s konnte feindliche Granate nicht zurück werfen. NADE_FAILED = %s konnte feindliche Granate nicht zurückwerfen.
NADE_MASTER = OMG! %s ist der Meister der Granaten !!! NADE_MASTER = OMG! %s ist der Meister der Granaten !!!
DISABLED_MSG = Server hat diese Option deaktiviert. DISABLED_MSG = Server hat diese Option deaktiviert.
MOST_KILLS = Meisten Kills MOST_KILLS = Meisten Kills
@ -179,7 +179,7 @@ M_DEATHS = Deaths:
M_SCORE = Note: M_SCORE = Note:
M_TKS = TKs: M_TKS = TKs:
M_HITS = Treffer: M_HITS = Treffer:
M_SHOTS = Schuesse: M_SHOTS = Schüsse:
M_HS = HS: M_HS = HS:
M_WEAPON = Waffe: M_WEAPON = Waffe:
M_DAMAGE = Schaden: M_DAMAGE = Schaden:

View File

@ -88,59 +88,59 @@ STATS_CONF_FAILED = Fehler beim Speichern der Statistik-Konfiguration!!!
STATS_CONF_LOADED = Statistik-Konfiguration erfolgreich geladen STATS_CONF_LOADED = Statistik-Konfiguration erfolgreich geladen
STATS_CONF_FAIL_LOAD = Fehler beim Laden der Statistik-Konfiguration!!! STATS_CONF_FAIL_LOAD = Fehler beim Laden der Statistik-Konfiguration!!!
STATS_CONF = Statistik-Konfiguration STATS_CONF = Statistik-Konfiguration
STATS_ENTRIES_OF = Eintraege %i - %i von %i STATS_ENTRIES_OF = Einträge %i - %i von %i
STATS_USE_MORE = Benutze 'amx_statscfg list %i' fuer mehr Info´s STATS_USE_MORE = Benutze 'amx_statscfg list %i' für mehr Info´s
STATS_USE_BEGIN = Benutze 'amx_statscfg list 1' um zum Anfang zu gelangen STATS_USE_BEGIN = Benutze 'amx_statscfg list 1' um zum Anfang zu gelangen
CANT_ADD_STATS = Kann keine Statistik mehr hinzufuegen, das Limit ist erreicht! CANT_ADD_STATS = Kann keine Statistik mehr hinzufügen, das Limit ist erreicht!
COM_STATS_USAGE = Benutze: amx_statscfg <Befehl> [Parameter] ... COM_STATS_USAGE = Benutze: amx_statscfg <Befehl> [Parameter] ...
COM_STATS_COM = Befehl: COM_STATS_COM = Befehl:
COM_STATS_ON = ^ton <variable> - gibt spezielle Option frei COM_STATS_ON = ^ton <variable> - gibt spezielle Option frei
COM_STATS_OFF = ^toff <variable> - sperrt spezielle Option COM_STATS_OFF = ^toff <variable> - sperrt spezielle Option
COM_STATS_SAVE = ^tsave - speichert Statistik-Konfiguration COM_STATS_SAVE = ^tsave - speichert Statistik-Konfiguration
COM_STATS_LOAD = ^tload - laedt Statistik-Konfiguration COM_STATS_LOAD = ^tload - lädt Statistik-Konfiguration
COM_STATS_LIST = ^tlist [id] - Statistik-Status anzeigen COM_STATS_LIST = ^tlist [id] - Statistik-Status anzeigen
COM_STATS_ADD = ^tadd <name> <variable> - fuegt eine Statistik zur Liste hinzu COM_STATS_ADD = ^tadd <name> <variable> - fügt eine Statistik zur Liste hinzu
NO_STATS = Statistik-Plugin ist nicht^nauf diesem Server installiert^n NO_STATS = Statistik-Plugin ist nicht^nauf diesem Server installiert^n
SAVE_CONF = Konfiguration speichern SAVE_CONF = Konfiguration speichern
STATS_ENABLED = Stats enabled STATS_ENABLED = Stats aktiviert
STATS_DISABLED = Stats disabled STATS_DISABLED = Stats deaktiviert
ST_MULTI_KILL = MultiKill ST_MULTI_KILL = Multikill
ST_MULTI_KILL_SOUND = MultiKill Sound ST_MULTI_KILL_SOUND = Multikill Sound
ST_BOMB_PLANTING = Bombe platzieren ST_BOMB_PLANTING = Bombe platzieren
ST_BOMB_DEFUSING = Bombe entschaerfen ST_BOMB_DEFUSING = Bombe entschärfen
ST_BOMB_PLANTED = Bombe platziert ST_BOMB_PLANTED = Bombe platziert
ST_BOMB_DEF_SUCC = Bombe entschaerfen erf. ST_BOMB_DEF_SUCC = Bombe entschärfen erf.
ST_BOMB_DEF_FAIL = Bombe entschaerfen fehl. ST_BOMB_DEF_FAIL = Bombe entschärfen fehl.
ST_BOMB_PICKUP = Bombe aufgenommen ST_BOMB_PICKUP = Bombe aufgenommen
ST_BOMB_DROP = Bombe verloren ST_BOMB_DROP = Bombe verloren
ST_BOMB_CD_VOICE = Bomben Countdown Stimme ST_BOMB_CD_VOICE = Bombencountdown Stimme
ST_BOMB_CD_DEF = Bomben Countdown (entschaerfer) ST_BOMB_CD_DEF = Bombencountdown (Entschärfer)
ST_BOMB_SITE = Bomben Platz erreicht ST_BOMB_SITE = Bombenplatz erreicht
ST_ITALY_BONUS = Italy extra Kill ST_ITALY_BONUS = Italy Bonuskill
ST_LAST_MAN = Letzter Mann ST_LAST_MAN = Letzter Mann
ST_KNIFE_KILL = Messer Kill ST_KNIFE_KILL = Messerkill
ST_KNIFE_KILL_SOUND = Messer Kill Sound ST_KNIFE_KILL_SOUND = Messerkill Sound
ST_HE_KILL = Granaten Kill ST_HE_KILL = Granatenkill
ST_HE_SUICIDE = Granaten Selbstmord ST_HE_SUICIDE = Granaten Selbstmord
ST_HS_KILL = Headshot Kill ST_HS_KILL = Headshotkill
ST_HS_KILL_SOUND = Headshot Kill Sound ST_HS_KILL_SOUND = Headshotkill Sound
ST_ROUND_CNT = Runden Zaehler ST_ROUND_CNT = Rundenhler
ST_ROUND_CNT_SOUND = Runden Zaehler Sound ST_ROUND_CNT_SOUND = Rundenhler Sound
ST_KILL_STR = Kill Serie ST_KILL_STR = Kill Serie
ST_KILL_STR_SOUND = Kill Serie Sound ST_KILL_STR_SOUND = Kill Serie Sound
ST_ENEMY_REM = Gegner verbleibend ST_ENEMY_REM = Gegner verbleibend
ST_DOUBLE_KILL = Doppel Kill ST_DOUBLE_KILL = Doppelkill
ST_DOUBLE_KILL_SOUND = Doppel Kill Sound ST_DOUBLE_KILL_SOUND = Doppelkill Sound
ST_PLAYER_NAME = Spieler Name ST_PLAYER_NAME = Spielername
ST_FIRST_BLOOD_SOUND = Erstes Blut Sound ST_FIRST_BLOOD_SOUND = Erstes Blut Sound
ST_SHOW_KILLER_CHAT = Zeige Killer HP&AP ST_SHOW_KILLER_CHAT = Zeige Killer HP&AP
ST_SHOW_ATTACKERS = Zeige Angreifer ST_SHOW_ATTACKERS = Zeige Angreifer
ST_SHOW_VICTIMS = Zeige Gegner ST_SHOW_VICTIMS = Zeige Opfer
ST_SHOW_KILLER = Zeige Killer ST_SHOW_KILLER = Zeige Killer
ST_SHOW_TEAM_SCORE = Zeige Team Score ST_SHOW_TEAM_SCORE = Zeige Team Score
ST_SHOW_TOTAL_STATS = Zeige totale Stats ST_SHOW_TOTAL_STATS = Zeige totale Stats
ST_SHOW_BEST_SCORE = Zeige besten Score ST_SHOW_BEST_SCORE = Zeige besten Score
ST_SHOW_MOST_DISRUPTIVE = Zeige meisten Durchschlaege ST_SHOW_MOST_DISRUPTIVE = Zeige meisten Durchschläge
ST_SHOW_HUD_STATS_DEF = Standard HUD-Stats ST_SHOW_HUD_STATS_DEF = Standard HUD-Stats
ST_SHOW_DIST_HS_HUD = Distanz&HS in HUD Liste ST_SHOW_DIST_HS_HUD = Distanz&HS in HUD Liste
ST_STATS_PLAYER_MAP_END = Stats am Ende der Map ST_STATS_PLAYER_MAP_END = Stats am Ende der Map
@ -156,12 +156,12 @@ ST_SAY_TOP15 = Say /top15
ST_SAY_STATS = Say /stats ST_SAY_STATS = Say /stats
ST_SPEC_RANK = Spec. Rang Info ST_SPEC_RANK = Spec. Rang Info
ST_BOMB_PLANTED_SOUND = Bombe platziert Sound ST_BOMB_PLANTED_SOUND = Bombe platziert Sound
ST_BOMB_DEF_SUCC_SOUND = Bombe entschaerfen erf. Sound ST_BOMB_DEF_SUCC_SOUND = Bombe entschärfen erf. Sound
ST_BOMB_DEF_FAIL_SOUND = Bombe entschaerfen fehl. Sound ST_BOMB_DEF_FAIL_SOUND = Bombe entschärfen fehl. Sound
ST_BOMB_CD_HUD = Bomben Countdown Hud ST_BOMB_CD_HUD = Bomben Countdown HUD
ST_LAST_MAN_SOUND = Letzter Mann Sound ST_LAST_MAN_SOUND = Letzter Mann Sound
ST_LAST_MAN_HEALTH = Last Man Health ST_LAST_MAN_HEALTH = Letzter Mann HP
ST_HE_KILL_SOUND = Granaten Kill Sound ST_HE_KILL_SOUND = Granatenkill Sound
ST_HE_SUICIDE_SOUND = Granaten Selbstmord Sound ST_HE_SUICIDE_SOUND = Granaten Selbstmord Sound
[sr] [sr]

View File

@ -50,9 +50,9 @@ X_RANK_IS = %s's rank is %d of %d
DISABLED_MSG = Server has disabled that option DISABLED_MSG = Server has disabled that option
[de] [de]
WHOLEBODY = Koerper WHOLEBODY = Körper
HEAD = Kopf HEAD = Kopf
CHEST = Oberkoerper CHEST = Oberkörper
STOMACH = Bauch STOMACH = Bauch
LEFTARM = linker Arm LEFTARM = linker Arm
RIGHTARM = rechter Arm RIGHTARM = rechter Arm
@ -63,26 +63,26 @@ ATTACKERS = Angreifer
ACC = Genauigkeit ACC = Genauigkeit
HIT_S = Treffer HIT_S = Treffer
DMG = Schaden DMG = Schaden
VICTIMS = Sieger VICTIMS = Opfer
MOST_DMG = Am meisten verursachter Schaden durch MOST_DMG = Am meisten verursachter Schaden durch
KILLED_YOU_DIST = %s hat dich getoetet ^naus einer Entfernung von %0.2f Metern. KILLED_YOU_DIST = %s hat dich mit einer %s ^naus %0.2f Metern Entfernung gekillt.
DID_DMG_HITS = Er verursachte %d Schaden bei dir mit %d Treffern^nund hat noch %dhp und %dap. DID_DMG_HITS = Er verursachte %d Schaden bei dir mit %d Treffern^nund hat noch %dhp und %dap.
YOU_DID_DMG = Du hast %d Schaden bei ihm angerichtet mit %d Treffern. YOU_DID_DMG = Du hast bei ihm %d Schaden mit %d Treffern angerichtet.
EFF = Effizienz EFF = Effizienz
BEST_SCORE = Die meisten Punkte BEST_SCORE = Die meisten Punkte
KILL_S = Kill(s) KILL_S = Kill(s)
TOTAL = Total TOTAL = Total
SHOT_S = Schuesse SHOT_S = Schüsse
HITS_YOU_IN = %s Treffer bei ihm HITS_YOU_IN = %s traf dich in:
KILLED_BY_WITH = Getoetet von %s mit %s @ %0.0fm KILLED_BY_WITH = Gekillt von %s mit %s @ %0.0fm
NO_HITS = keine Treffer NO_HITS = keine Treffer
YOU_NO_KILLER = Du hast niemanden getoetet... YOU_NO_KILLER = Du hast niemanden gekillt...
YOU_HIT = Deine Treffer: %s %d mal, %d Schaden YOU_HIT = Deine Treffer: %s %d mal, %d Schaden
LAST_RES = Letztes Ergebnis: %d Treffer, %d Schaden LAST_RES = Letztes Ergebnis: %d Treffer, %d Schaden
KILLS = Kills KILLS = Kills
DEATHS = Deaths DEATHS = Deaths
HITS = Treffer HITS = Treffer
SHOTS = Schuesse SHOTS = Schüsse
YOUR = Dein YOUR = Dein
PLAYERS = Spieler PLAYERS = Spieler
RANK_IS = Platzierung: %d von %d RANK_IS = Platzierung: %d von %d
@ -91,14 +91,14 @@ WEAPON = Waffe
YOUR_RANK_IS = Deine Platzierung: %d von %d mit %d Kill(s), %d Treffer, %0.2f%% eff. und %0.2f%% acc. YOUR_RANK_IS = Deine Platzierung: %d von %d mit %d Kill(s), %d Treffer, %0.2f%% eff. und %0.2f%% acc.
AMMO = Munition AMMO = Munition
HEALTH = Gesundheit HEALTH = Gesundheit
ARMOR = Ruestung ARMOR = Rüstung
GAME_SCORE = Punkte GAME_SCORE = Punkte
STATS_ANNOUNCE = Du hast %s Statistik-Meldungen STATS_ANNOUNCE = Du hast %s Statistik-Meldungen
ENABLED = eingeschaltet ENABLED = aktiviert
DISABLED = ausgeschaltet DISABLED = deaktiviert
SERVER_STATS = Serverstatistik SERVER_STATS = Serverstatistik
X_RANK_IS = %s's Platzierung: %d von %d X_RANK_IS = %s's Platzierung: %d von %d
DISABLED_MSG = Der Server hat diese Option ausgeschaltet. DISABLED_MSG = Der Server hat diese Option deaktiviert.
[sr] [sr]
WHOLEBODY = celo telo WHOLEBODY = celo telo

View File

@ -8,7 +8,7 @@ SAVE_LOC = Save Location
[de] [de]
ADMIN_TELEPORT_1 = ADMIN: teleportiert %s ADMIN_TELEPORT_1 = ADMIN: teleportiert %s
ADMIN_TELEPORT_2 = ADMIN %s: teleportiert %s ADMIN_TELEPORT_2 = ADMIN %s: teleportiert %s
TELE_MENU = Menu > Teleport TELE_MENU = Menü > Teleport
CUR_LOC = Momentane Position CUR_LOC = Momentane Position
SAVE_LOC = Position speichern SAVE_LOC = Position speichern

View File

@ -9,7 +9,7 @@ SECONDS = seconds
[de] [de]
THE_TIME = Es ist THE_TIME = Es ist
TIME_LEFT = Zeit uebrig TIME_LEFT = Zeit übrig
NO_T_LIMIT = Kein Zeitlimit NO_T_LIMIT = Kein Zeitlimit
MINUTE = Minute MINUTE = Minute
MINUTES = Minuten MINUTES = Minuten

View File

@ -468,7 +468,7 @@ public CvarMenuSelection(id, menu, item)
if (ExplicitPlugin[id]==-1) if (ExplicitPlugin[id]==-1)
{ {
DisplayPluginMenuDefault(id); DisplayPluginMenu(id,"Plugin Cvar Menu:", "PluginMenuSelection","DisplayCvarMenu","GetNumberOfCvarsForPlid");
} }
} }
else if (item==MENU_BACK) else if (item==MENU_BACK)
@ -790,7 +790,7 @@ public CommandMenuSelection(id, menu, item)
if (ExplicitPlugin[id]==-1) if (ExplicitPlugin[id]==-1)
{ {
client_cmd(id,"amx_plugincmdmenu"); DisplayPluginMenu(id,"Plugin Command Menu:", "PluginMenuSelection","DisplayCmdMenu","GetNumberOfCmdsForPlid");
} }
} }
else if (item==MENU_BACK) else if (item==MENU_BACK)
@ -914,7 +914,7 @@ public CommandMenuCommand(id, level, cid)
{ {
// We need to display a list of the plugins, instead of a specific plugin. // We need to display a list of the plugins, instead of a specific plugin.
ExplicitPlugin[id]=-1; ExplicitPlugin[id]=-1;
DisplayPluginMenuDefault(id); DisplayPluginMenu(id,"Plugin Command Menu:", "PluginMenuSelection","DisplayCmdMenu","GetNumberOfCmdsForPlid");
} }
else else
{ {
@ -925,8 +925,3 @@ public CommandMenuCommand(id, level, cid)
} }
return PLUGIN_HANDLED; return PLUGIN_HANDLED;
} }
DisplayPluginMenuDefault(id)
{
DisplayPluginMenu(id,"Plugin Command Menu:", "PluginMenuSelection","DisplayCmdMenu","GetNumberOfCmdsForPlid");
}