akimbo bug fixed; some new bugs added

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4598 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
ac_stef
2009-08-05 21:21:57 +00:00
parent bb791457ef
commit f1e879e7fd
46 changed files with 2794 additions and 763 deletions
+86 -9
View File
@@ -92,6 +92,82 @@ void getstring(char *text, ucharbuf &p, int len)
DEBUGVAR(text);
}
#define follower(x) (((x) & 0xc0) == 0x80)
int getutf8char(const unsigned char *&s)
{
int res = *s++;
if(res < 0x80) return res;
if((res & 0xe0) == 0xc0)
{ // 2-Byte
if(follower(s[0]))
{
res &= 0x1f;
res <<= 6;
res |= *s++ & 0x3f;
return res;
}
return -1;
}
if((res & 0xf0) == 0xe0)
{ // 3-Byte
if(follower(s[0]) && follower(s[1]))
{
res &= 0x0f;
loopi(2)
{
res <<= 6;
res |= *s++ & 0x3f;
}
return res;
}
return -1;
}
if((res & 0xf8) == 0xf0)
{ // 4-Byte
if(follower(s[0]) && follower(s[1]) && follower(s[2]))
{
res &= 0x07;
loopi(3)
{
res <<= 6;
res |= *s++ & 0x3f;
}
return res;
}
return -1;
}
return -1;
}
int pututf8char(unsigned char *&d, int s)
{
if(s < 0 || s > 0x1fffff) return 0;
if(s < 0x80)
{
*d++ = s;
return 1;
}
if(s < 0x800)
{
*d++ = ((s >> 6) & 0x1f) | 0xc0;
*d++ = (s & 0x3f) | 0x80;
return 2;
}
if(s < 0x10000)
{
*d++ = ((s >> 12) & 0x0f) | 0xe0;
*d++ = ((s >> 6) & 0x3f) | 0x80;
*d++ = (s & 0x3f) | 0x80;
return 3;
}
*d++ = ((s >> 18) & 0x07) | 0xf0;
*d++ = ((s >> 12) & 0x3f) | 0x80;
*d++ = ((s >> 6) & 0x3f) | 0x80;
*d++ = (s & 0x3f) | 0x80;
return 4;
}
void filtertext(char *dst, const char *src, int whitespace, int len)
{ // whitespace: no whitespace at all (0), blanks only (1), blanks & newline (2)
for(int c = *src; c; c = *++src)
@@ -99,7 +175,7 @@ void filtertext(char *dst, const char *src, int whitespace, int len)
c &= 0x7F; // 7-bit ascii
switch(c)
{
case '\f': ++src; continue;
case '\f': ++src; continue;
}
if(isspace(c) ? whitespace && (whitespace>1 || c == ' ') : isprint(c))
{
@@ -197,7 +273,7 @@ const char *modeacronymnames[] =
};
const char *voteerrors[] = { "voting is currently disabled", "there is already a vote pending", "already voted", "can't vote that often", "this vote is not allowed in the current environment (singleplayer/multiplayer)", "no permission", "invalid vote" };
const char *mmfullnames[] = { "open", "private" };
const char *mmfullnames[] = { "open", "private", "match" };
const char *fullmodestr(int n) { return (n>=-1 && size_t(n+1) < sizeof(modefullnames)/sizeof(modefullnames[0])) ? modefullnames[n+1] : "unknown"; }
const char *acronymmodestr(int n) { return (n>=-1 && size_t(n+1) < sizeof(modeacronymnames)/sizeof(modeacronymnames[0])) ? modeacronymnames[n+1] : "n/a"; }
@@ -207,27 +283,28 @@ const char *mmfullname(int n) { return (n>=0 && n < MM_NUM) ? mmfullnames[n] : "
char msgsizesl[] = // size inclusive message token, 0 for variable or not-checked sizes
{
SV_INITS2C, 5, SV_WELCOME, 2, SV_INITC2S, 0, SV_POS, 0, SV_TEXT, 0, SV_TEAMTEXT, 0, SV_SOUND, 2, SV_VOICECOM, 2, SV_VOICECOMTEAM, 2, SV_CDIS, 2,
SV_INITS2C, 5, SV_WELCOME, 2, SV_INITC2S, 0, SV_POS, 0, SV_TEXT, 0, SV_TEAMTEXT, 0, SV_TEXTME, 0, SV_TEAMTEXTME, 0,
SV_SOUND, 2, SV_VOICECOM, 2, SV_VOICECOMTEAM, 2, SV_CDIS, 2,
SV_SHOOT, 0, SV_EXPLODE, 0, SV_SUICIDE, 1, SV_AKIMBO, 2, SV_RELOAD, 3, SV_SCOPE, 3,
SV_GIBDIED, 4, SV_DIED, 4, SV_GIBDAMAGE, 6, SV_DAMAGE, 6, SV_HITPUSH, 6, SV_SHOTFX, 9, SV_THROWNADE, 8,
SV_TRYSPAWN, 1, SV_SPAWNSTATE, 23, SV_SPAWN, 3, SV_FORCEDEATH, 2, SV_RESUME, 0,
SV_TIMEUP, 2, SV_EDITENT, 10, SV_ITEMACC, 2,
SV_TRYSPAWN, 1, SV_SPAWNSTATE, 23, SV_SPAWN, 3, SV_SPAWNDENY, 2, SV_FORCEDEATH, 2, SV_RESUME, 0,
SV_DISCSCORES, 0, SV_TIMEUP, 2, SV_EDITENT, 10, SV_ITEMACC, 2,
SV_MAPCHANGE, 0, SV_ITEMSPAWN, 2, SV_ITEMPICKUP, 2,
SV_PING, 2, SV_PONG, 2, SV_CLIENTPING, 2, SV_GAMEMODE, 2,
SV_EDITMODE, 2, SV_EDITH, 7, SV_EDITT, 7, SV_EDITS, 6, SV_EDITD, 6, SV_EDITE, 6, SV_NEWMAP, 2,
SV_SENDMAP, 0, SV_RECVMAP, 1, SV_REMOVEMAP, 0,
SV_SERVMSG, 0, SV_ITEMLIST, 0, SV_WEAPCHANGE, 2, SV_PRIMARYWEAP, 2,
SV_FLAGACTION, 3, SV_FLAGINFO, 0, SV_FLAGMSG, 0, SV_FLAGCNT, 3,
SV_ARENAWIN, 2,
SV_ARENAWIN, 2, SV_LMSITEM, 3,
SV_SETADMIN, 0, SV_SERVOPINFO, 3,
SV_CALLVOTE, 0, SV_CALLVOTESUC, 1, SV_CALLVOTEERR, 2, SV_VOTE, 2, SV_VOTERESULT, 2,
SV_FORCETEAM, 3, SV_AUTOTEAM, 2, SV_CHANGETEAM, 1,
SV_TRYTEAM, 2, SV_SETTEAM, 3, SV_TEAMDENY, 2, SV_SERVERMODE, 2,
SV_WHOIS, 2, SV_WHOISINFO, 3,
SV_LISTDEMOS, 1, SV_SENDDEMOLIST, 0, SV_GETDEMO, 2, SV_SENDDEMO, 0, SV_DEMOPLAYBACK, 3,
SV_CONNECT, 0,
SV_CONNECT, 0, SV_SPECTCN, 2,
SV_CLIENT, 0,
SV_EXTENSION, 0,
SV_MAPIDENT, 3, SV_FORCENOTIFY, 3,
SV_MAPIDENT, 3,
-1
};