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:
+86
-9
@@ -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
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user