Ejemplo n.º 1
0
/*
==================
G_WriteSessionData

==================
 */
void G_WriteSessionData(void) {
  char map[ MAX_STRING_CHARS ];
  int i;
  //int record = 0;
  int gameid = 0;
  
  char data[ 255 ];

  trap_Cvar_VariableStringBuffer("mapname", map, sizeof ( map));
  //TA: ?
  trap_Cvar_Set("session", va("%i", 0));
  
  
  if(g_survival.integer && level.survivalRecordsBroke[0] > 0 && level.survivalRecordTime > 0 && !level.mysqlupdated)
  {
    if(trap_mysql_runquery(va("INSERT HIGH_PRIORITY INTO games (map,time) VALUES (\"%s\",\"%d\")",
      map, level.survivalRecordTime)) == qtrue)
      {
        trap_mysql_finishquery();
        if(trap_mysql_runquery("SELECT id FROM games ORDER BY id desc LIMIT 1") == qtrue)
        {
          if(trap_mysql_fetchrow() == qtrue)
          {
            trap_mysql_fetchfieldbyName("id", data, sizeof(data));
            gameid = atoi(data);
          }
        }
      }
      trap_mysql_finishquery();
  }
  
  //trap_SendServerCommand( -1, va("print \"^5Game id: %d\n\"",gameid) );

  for (i = 0; i < level.maxclients; i++) {
    if (level.clients[ i ].pers.connected == CON_CONNECTED)
      G_WriteClientSessionData(&level.clients[ i ]);
      if(!g_survival.integer) continue;
      if(level.clients[i].pers.mysqlid > 0 && gameid > 0 && !level.mysqlupdated)
      {
        if(trap_mysql_runquery(va("UPDATE players set lasttime=NOW() WHERE id = \"%d\" LIMIT 1",
          level.clients[i].pers.mysqlid)) == qtrue)
        {
         // trap_SendServerCommand( -1, va("print \"^5Update player date %d\n\"",gameid) );
          trap_mysql_finishquery();
        }
        if(trap_mysql_runquery(va("INSERT HIGH_PRIORITY INTO players_game (idgame,idplayer,timealive) VALUES (%d,%d,%d)",
        gameid, level.clients[i].pers.mysqlid, level.clients[i].pers.lastdeadtime)) == qtrue)
        {
          //trap_SendServerCommand( -1, va("print \"^5Insert players_game relation %d\n\"",gameid) );
          trap_mysql_finishquery();
        }
      }
  }
  
  if(g_survival.integer && level.survivalRecordTime > 0 && !level.mysqlupdated)
  {
    trap_SendServerCommand( -1, "print \"^5Records stored on the server.\n\"" );
  }
  level.mysqlupdated = 1;
}
//WHITELIST FUNCTIONS
void G_globalAddToWhitelist(gentity_t *ent, gentity_t *victim, char *who, char *reason, char *ip, char *guid)
{
	whitelist_t *temp = G_Alloc(sizeof(whitelist_t));
	char data[255];

	G_Printf("Add whitelist called\n");
	Q_strncpyz(temp->adminName, (G_isPlayerConnected(ent))
			? ent->client->pers.netname
			: "console", sizeof(temp->adminName));
	Q_strncpyz(temp->playerName, (G_isPlayerConnected(victim))
			? victim->client->pers.netname
			: "UnnamedPlayer", sizeof(temp->playerName));
	Q_strncpyz(temp->guid, (guid) ? guid : "", sizeof(temp->guid));
	Q_strncpyz(temp->ip, (ip) ? ip : "", sizeof(temp->ip));
	Q_strncpyz(temp->reason, (reason) ? reason : "", sizeof(temp->reason));

	if (trap_mysql_runquery(va("INSERT HIGH_PRIORITY INTO whitelist"
		" (ip,guid,playerid,playername,adminid,adminname,reason) "
		" VALUES (\"%s\",\"%s\",\"%d\",\"%s\",\"%d\",\"%s\",\"%s\") ",
		temp->ip,
		temp->guid,
		(G_isPlayerConnected(victim) ? victim->client->pers.mysqlid : -1),
		(G_isPlayerConnected(victim) ? victim->client->pers.netname : "UnnamedPlayer"),
		(G_isPlayerConnected(ent) ? ent->client->pers.mysqlid : -1),
		(G_isPlayerConnected(ent) ? ent->client->pers.netname : "console"),
		temp->reason))
			== qtrue)
	{
		trap_mysql_finishquery();

		AP( va( "print \"^3%s:^7 have been added to white list by %s reason: %s \n\"",
			(G_isPlayerConnected(victim) ? victim->client->pers.netname : ip),
			(G_isPlayerConnected(ent)) ? ent->client->pers.netname : "console",
			reason));
		G_LogPrintf("^3%s:^7 have been added to white list by %s reason: %s \n",
			(G_isPlayerConnected(victim) ? victim->client->pers.netname : ip),
			(G_isPlayerConnected(ent)) ? ent->client->pers.netname : "console",
			reason);
		if (trap_mysql_runquery(va("SELECT HIGH_PRIORITY id FROM whitelist ORDER BY id DESC LIMIT 1"))
				== qtrue)
		{
			if (trap_mysql_fetchrow() == qtrue)
			{
				trap_mysql_fetchfieldbyName("id", data, sizeof(data));
				trap_mysql_finishquery();
				temp->id = atoi(data);
			}
			else
			{
				G_LogPrintf("WARNING: Couldnt insert whitelist to database\n");
				if (level.whitelist)
				{
					temp->id = level.globals->id + 1;
				}
				else
				{
					temp->id = 1;
				}
			}
		}
	}
	temp->next = level.whitelist;
	level.whitelist = temp;

}
void G_globalInit()
{
	char data[255];
	global_t *temp = NULL;
	whitelist_t *whitelisttemp = NULL;

	level.globals = NULL;
	level.whitelist = NULL;

	if (trap_mysql_runquery(va("SELECT HIGH_PRIORITY * FROM globals ORDER BY id ASC")) == qtrue)
	{
		while (trap_mysql_fetchrow() == qtrue)
		{
			temp = G_Alloc(sizeof(global_t));

			trap_mysql_fetchfieldbyName("id", data, sizeof(data));
			temp->id = atoi(data);
			trap_mysql_fetchfieldbyName("adminname", temp->adminName, sizeof(temp->adminName));
			trap_mysql_fetchfieldbyName("ip", temp->ip, sizeof(temp->ip));
			trap_mysql_fetchfieldbyName("guid", temp->guid, sizeof(temp->guid));
			trap_mysql_fetchfieldbyName("name", temp->playerName, sizeof(temp->playerName));
			trap_mysql_fetchfieldbyName("reason", temp->reason, sizeof(temp->reason));
			trap_mysql_fetchfieldbyName("server", temp->server, sizeof(temp->server));
			trap_mysql_fetchfieldbyName("subnet", data, sizeof(data));
			temp->subnet = atoi(data);
			trap_mysql_fetchfieldbyName("type", data, sizeof(data));
			temp->type = atoi(data);

			temp->next = level.globals;
			level.globals = temp;
		}
		trap_mysql_finishquery();
	}
	else
	{
		G_LogPrintf("Query Failed on GlobalInit, data base is probably disconnected, try !reconnectdb\n");
	}

	if (trap_mysql_runquery(va("SELECT HIGH_PRIORITY * FROM whitelist ORDER BY id ASC")) == qtrue)
	{
		while (trap_mysql_fetchrow() == qtrue)
		{
			whitelisttemp = G_Alloc(sizeof(whitelist_t));

			trap_mysql_fetchfieldbyName("id", data, sizeof(data));
			whitelisttemp->id = atoi(data);
			trap_mysql_fetchfieldbyName("adminname", whitelisttemp->adminName, sizeof(whitelisttemp->adminName));
			trap_mysql_fetchfieldbyName("ip", whitelisttemp->ip, sizeof(whitelisttemp->ip));
			trap_mysql_fetchfieldbyName("guid", whitelisttemp->guid, sizeof(whitelisttemp->guid));
			trap_mysql_fetchfieldbyName("playername", whitelisttemp->playerName, sizeof(whitelisttemp->playerName));
			trap_mysql_fetchfieldbyName("reason", whitelisttemp->reason, sizeof(whitelisttemp->reason));

			whitelisttemp->next = level.whitelist;
			level.whitelist = whitelisttemp;
		}
		trap_mysql_finishquery();
	}

}
int G_globalAdd(gentity_t *adminEnt, gentity_t *victimEnt, char *guid, char *ip, char *playerName, char *reason, int subnet, char *date, globalType_t type)
{
	global_t *temp = G_Alloc(sizeof(global_t));
	char newDate[11];
	char newPlayerName[MAX_NAME_LENGTH];
	char newGuid[33];
	char data[255];

	//DATE
	if (date == NULL)
	{
		qtime_t qt;
		int t;
		t = trap_RealTime(&qt);

		Q_strncpyz(newDate, va("%04i-%02i-%02i", qt.tm_year + 1900, qt.tm_mon
				+ 1, qt.tm_mday), 11);
	}
	else
	{
		Q_strncpyz(newDate, date, 11);
	}

	//PLAYERNAME
	if (playerName == NULL)
	{
		Q_strncpyz(newPlayerName, va("%s", "UnnamedPlayer"), MAX_NAME_LENGTH);
	}
	else
	{
		Q_strncpyz(newPlayerName, playerName, MAX_NAME_LENGTH);
	}

	//GUID
	if (guid == NULL)
	{
		Q_strncpyz(newGuid, va("%s", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"), 33);
	}
	else
	{
		Q_strncpyz(newGuid, guid, 33);
	}

	//Setting
	Q_strncpyz(temp->guid, newGuid, 33);
	Q_strncpyz(temp->ip, ip, 16);
	Q_strncpyz(temp->playerName, newPlayerName, MAX_NAME_LENGTH);
	Q_strncpyz(temp->server, va("%s","z"), 2);
	Q_strncpyz(temp->adminName, (G_isPlayerConnected(adminEnt))
			? adminEnt->client->pers.netname
			: "console", MAX_NAME_LENGTH);
	Q_strncpyz(temp->reason, reason, MAX_STRING_CHARS);

	temp->subnet = subnet;
	temp->type = type;

	if (trap_mysql_runquery(va("INSERT HIGH_PRIORITY INTO globals"
		" (playerid,adminid,adminname,ip,guid,name,reason,subnet,type,server) "
		" VALUES (\"%d\",\"%d\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%d\",\"%d\",\"x\") ", (G_isPlayerConnected(victimEnt)
			? victimEnt->client->pers.mysqlid
			: -1), (G_isPlayerConnected(adminEnt)
			? adminEnt->client->pers.mysqlid
			: -1), (G_isPlayerConnected(adminEnt)
			? adminEnt->client->pers.netname
			: "console"), temp->ip, temp->guid, temp->playerName, temp->reason, temp->subnet, temp->type))
			== qtrue)
	{
		trap_mysql_finishquery();
		if (trap_mysql_runquery(va("SELECT HIGH_PRIORITY id FROM globals ORDER BY id DESC LIMIT 1"))
				== qtrue)
		{
			if (trap_mysql_fetchrow() == qtrue)
			{
				trap_mysql_fetchfieldbyName("id", data, sizeof(data));
				trap_mysql_finishquery();
				temp->id = atoi(data);
			}
			else
			{
				G_LogPrintf("Couldnt insert global to database\n");//va("Hacked client tried to connect guid: %s ip: %s\n", guid, ip) );
				if (level.globals)
				{
					temp->id = level.globals->id + 1;
				}
				else
				{
					temp->id = 1;
				}
			}
		}
	}


	temp->next = level.globals;
	level.globals = temp;

	return temp->id;
}
Ejemplo n.º 5
0
/*
==================
G_WriteSessionData

==================
 */
void G_WriteSessionData(void) {
  char map[ MAX_STRING_CHARS ];
  int i;
  //int record = 0;
  int gameid = 0;
	int j;
	
  char data[ 255 ];

  trap_Cvar_VariableStringBuffer("mapname", map, sizeof ( map));
  //TA: ?
  trap_Cvar_Set("session", va("%i", 0));
  
	trap_SendServerCommand( -1, "print \"^2Syncing with database\n\"" );
	for( i = 0 ; i < level.maxclients ; i++ )
	{
		if( level.clients[ i ].pers.connected == CON_CONNECTED )
		{
			G_WriteClientSessionData( &level.clients[ i ] );
			//Update mysql stuff here to.
			if(level.clients[ i ].pers.mysqlid > 1)
			{
				//level.clients[ i ].pers.playerlevel = G_EvalPlayerLevel( (level.clients[ i ].pers.statscounters.kills + level.clients[ i ].pers.totalkills), (level.clients[ i ].pers.statscounters.deaths + level.clients[ i ].pers.totaldeaths));
				if (!level.clients[ i ].pers.playerlevel)
					level.clients[ i ].pers.playerlevel= 0;
				level.clients[ i ].pers.timeplayed += (level.time - level.clients[ i ].pers.enterTime) / 60000; //Minutes played
				level.clients[ i ].pers.structsbuilt += level.clients[ i ].pers.statscounters.structsbuilt;
				//level.clients[ i ].pers.structskilled += level.clients[ i ].pers.statscounters.structskilled; don't count anything but nodes
				if(level.clients[ i ].pers.teamSelection == PTE_HUMANS)
				{
					level.clients[ i ].pers.credits+=level.clients[ i ].ps.persistant[ PERS_CREDIT ];
				}
				if(level.clients[ i ].pers.teamSelection == PTE_ALIENS)
				{
					level.clients[ i ].pers.evos = 0;
				}
				
				/* Badge related stuff */
				if(level.clients[ i ].pers.teamSelection == level.lastWin)
				{
					level.clients[ i ].pers.gameswin += 1;
				}
				/************************IF MAZE for BADGES************************************/
				//16 Zombie Bait		Die 200 times
				if ( (level.clients[ i ].pers.badges[ 16 ] != 1) && ((level.clients[ i ].pers.totaldeaths + level.clients[ i ].pers.statscounters.deaths) >= 200) )
				{
					level.clients[ i ].pers.badgeupdate[16] = 1;
					level.clients[ i ].pers.badges[16] = 1;
				}
				//17 Champion			Win 500 games	
				if ( (level.clients[ i ].pers.badges[ 17 ] != 1) && (level.clients[ i ].pers.gameswin >= 500) )
				{
					level.clients[ i ].pers.badgeupdate[17] = 1;
					level.clients[ i ].pers.badges[17] = 1;
				}
				//19 Axe Me a Question			Only get axe kills for an entire round	
				if ( (level.clients[ i ].pers.badges[ 19 ] != 1) && (level.clients[ i ].pers.statscounters.kills > 0) && (level.clients[ i ].pers.statscounters.kills == level.clients[ i ].pers.axekills) )
				{
					level.clients[ i ].pers.badgeupdate[19] = 1;
					level.clients[ i ].pers.badges[19] = 1;
				}
				//26 Eradication			Kill 200 zombie nodes	
				if ( (level.clients[ i ].pers.badges[ 26 ] != 1) && (level.clients[ i ].pers.structskilled >= 200) )
				{
					level.clients[ i ].pers.badgeupdate[26] = 1;
					level.clients[ i ].pers.badges[26] = 1;
				}
				//30 Wingman			Get 200 assists in one round	
				if ( (level.clients[ i ].pers.badges[ 30 ] != 1) && (level.clients[ i ].pers.statscounters.assists >= 200) )
				{
					level.clients[ i ].pers.badgeupdate[30] = 1;
					level.clients[ i ].pers.badges[30] = 1;
				}
				//31 Humanitarian		Make it the first 10 minutes in a survival round without killing a single zombie	
				if ( (level.clients[ i ].pers.badges[ 31 ] != 1) && (level.time >= 600000) && (level.clients[ i ].pers.statscounters.kills = 0))
				{
					level.clients[ i ].pers.badgeupdate[31] = 1;
					level.clients[ i ].pers.badges[31] = 1;
				}
				//38 Flawless			Make it an entire round without being hurt, and get at least 20 kills (so we know you aren't just hanging around base. =])
				if ((level.clients[ i ].pers.badges[ 38 ] != 1) && (level.clients[ i ].pers.statscounters.kills >= 20) && !level.clients[ i ].pers.lastDamaged) {
					level.clients[ i ].pers.badgeupdate[38] = 1;
					level.clients[ i ].pers.badges[38] = 1;
				}
				/*************************************************************/
				//Would be better if i runquery just one time instead of one per client.
				if( trap_mysql_runquery( va("UPDATE zplayers SET kills=\"%d\",deaths=\"%d\",pistolkills=\"%d\",timeplayed=\"%d\",adminlevel=\"%d\",playerlevel=\"%d\",lasttime=NOW(),gameswin=\"%d\",structsbuilt=\"%d\",structskilled=\"%d\" WHERE id=\"%d\" LIMIT 1",(level.clients[ i ].pers.statscounters.kills + level.clients[ i ].pers.totalkills), (level.clients[ i ].pers.statscounters.deaths + level.clients[ i ].pers.totaldeaths), level.clients[ i ].pers.pistolkills, level.clients[ i ].pers.timeplayed, level.clients[ i ].pers.adminlevel, level.clients[ i ].pers.playerlevel, level.clients[ i ].pers.gameswin, level.clients[ i ].pers.structsbuilt, level.clients[ i ].pers.structskilled, level.clients[ i ].pers.mysqlid ) ) == qtrue )
				{
					trap_mysql_finishquery();
					//Lets update the badges. //FIX ME: WTF LOL DOUBLE LOOPED UNECESARY
					for(j=1;j<49;j++)
					{
						if(level.clients[ i ].pers.badgeupdate[j] == 1)
						{
							if(trap_mysql_runquery( va("INSERT HIGH_PRIORITY INTO zbadges_player (idplayer,idbadge) VALUES (\"%d\",\"%d\")", level.clients[ i ].pers.mysqlid, j ) ) == qtrue)
							{
								trap_mysql_finishquery();
							}
							else
							{
								trap_mysql_finishquery();
							}
						}
					}
				}
				else
				{
					trap_mysql_finishquery();
				}
			}
		}
	}
	trap_SendServerCommand( -1, "print \"^5Data updated\n\"" );
	
  
  if(g_survival.integer && level.survivalRecordsBroke[0] > 0 && level.survivalRecordTime > 0 && !level.mysqlupdated)
  {
    if(trap_mysql_runquery(va("INSERT HIGH_PRIORITY INTO zgames (map,time) VALUES (\"%s\",\"%d\")",
      map, level.survivalRecordTime)) == qtrue)
      {
        trap_mysql_finishquery();
        if(trap_mysql_runquery("SELECT id FROM zgames ORDER BY id desc LIMIT 1") == qtrue)
        {
          if(trap_mysql_fetchrow() == qtrue)
          {
            trap_mysql_fetchfieldbyName("id", data, sizeof(data));
            gameid = atoi(data);
          }
        }
      }
      trap_mysql_finishquery();
  }
  
  //trap_SendServerCommand( -1, va("print \"^5Game id: %d\n\"",gameid) );

  for (i = 0; i < level.maxclients; i++) {
    if (level.clients[ i ].pers.connected == CON_CONNECTED)
      G_WriteClientSessionData(&level.clients[ i ]);
      if(!g_survival.integer) continue;
      if(level.clients[i].pers.mysqlid > 0 && gameid > 0 && !level.mysqlupdated)
      {
        if(trap_mysql_runquery(va("UPDATE zplayers set lasttime=NOW() WHERE id = \"%d\" LIMIT 1",
          level.clients[i].pers.mysqlid)) == qtrue)
        {
         // trap_SendServerCommand( -1, va("print \"^5Update player date %d\n\"",gameid) );
          trap_mysql_finishquery();
        }
        if(trap_mysql_runquery(va("INSERT HIGH_PRIORITY INTO zplayers_game (idgame,idplayer,timealive) VALUES (%d,%d,%d)",
        gameid, level.clients[i].pers.mysqlid, level.clients[i].pers.lastdeadtime)) == qtrue)
        {
          //trap_SendServerCommand( -1, va("print \"^5Insert players_game relation %d\n\"",gameid) );
          trap_mysql_finishquery();
        }
      }
  }
  
  if(g_survival.integer && level.survivalRecordTime > 0 && !level.mysqlupdated)
  {
    trap_SendServerCommand( -1, "print \"^5Records stored on the server.\n\"" );
  }
  level.mysqlupdated = 1;
}