だから私は自分のアプリケーションをデバッグしました、そしてこれはデバッガーが私に言ったことです:
行で:
if(p_IS_TRUE(playerid,CHECK_INACTIVITY))
次のように定義されています。
#define p_IS_TRUE(playerid,check) (p_CheckForStuff[playerid] & check)
したがって、これは重要なコードです。
//global
#define CHECK_SPAWNKILL (128) // 0000 0000 0000 0000 0000 0000 1000 0000
#define CHECK_INACTIVITY (256) // 0000 0000 0000 0000 0000 0001 0000 0000
#define CHECK_TELEPORT (512) // 0000 0000 0000 0000 0000 0010 0000 0000
#define CHECK_AIRBREAK (1024) // 0000 0000 0000 0000 0000 0100 0000 0000
unsigned long p_CheckForStuff[MAX_PLAYERS];
#define p_IS_TRUE(playerid,check) (p_CheckForStuff[playerid] & check)
list<int> PlayerLoopList;
//When a player connects
PlayerLoopList.push_back(playerid);
p_CheckForStuff[playerid] =-1;//enable all checks
//When a player disconnects
PlayerLoopList.remove(playerid);
//ProcessTick
int playerid = 0;
int ProcessTicksize = 0;
int ProcessTickindex = 0;
for (list <int>::iterator i = PlayerLoopList.begin(); i != PlayerLoopList.end(); ++i)
{
playerid = *i;
int playerstate = GetPlayerState(playerid);
int vid = GetPlayerVehicleID(playerid);
if(g_IS_TRUE(CHECK_INACTIVITY))
{
if(p_IS_TRUE(playerid,CHECK_INACTIVITY))
{
if(p_AcivityInfo[playerid].Reported == false)
{
次のように再現できます。
1) サーバーに参加する 2) 終了/キックされる? 3) 再参加 4) クラッシュ
なぜこれが起こっているのか誰にも分かりますか?コードは私には完璧に見えます..