PHP код:
public SavePlayer()
{
for(new i, a = GetPlayerPoolSize() + 1; i < a; i++)
SavePlayer_1(i);
SetTimer("SavePlayer", 30000, 0);
}
stock SavePlayer_1(playerid)
{
format(gstring, sizeof(gstring),"UPDATE `players` SET `Name` = '%s', `Sex` = '%d', `Skin` = '%d', `Money` = '%d' WHERE `ID`='%d'",
pInfo[playerid][pName], pInfo[playerid][pSex], pInfo[playerid][pSkin], pInfo[playerid][pMoney], pInfo[playerid][pID]);
mysql_function_query(mysqlconnect, gstring, false, "", "");
}
public SaveHome()
{
for(new i; i < MAX_HOME; i++)
{
format(gstring, sizeof(gstring),"UPDATE `home` SET `NamePlayer` = '%s', `IDInterior` = '%d', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `NumHome` = '%d', `IDStreets` = '%d', `Сity` = '%d', `X` = '%f', `Y` = '%f', `Z` = '%f' WHERE `ID` = '%d'",
iHome[i][hNamePlayer], iHome[i][hIDInterior], iHome[i][hBought], iHome[i][hStatus], iHome[i][hMoney], iHome[i][hBank], iHome[i][hNumHome], iHome[i][hIDStreets], iHome[i][hCity], iHome[i][hX], iHome[i][hY], iHome[i][hZ], iHome[i][hID]);
mysql_function_query(mysqlconnect, gstring, false, "", "");
}
SetTimer("SaveHome", 25000, 0);
}
public SaveApartment()
{
for(new i; i < MAX_APARTMENT_PLAYER; i++) // Зачем тут два цикла? Ну в первом обращение к 0 ячейке во втором к 1
{
format(gstring, sizeof(gstring),"UPDATE `apartment` SET `NamePlayer` = '%s', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `IDInterior` = '%d' WHERE `ID`='%d'",
iApartment[0][i][aNamePlayer], iApartment[0][i][aBought], iApartment[0][i][aStatus], iApartment[0][i][aMoney], iApartment[0][i][aBank], iApartment[0][i][aIDInterior], iApartment[0][i][aID]);
mysql_function_query(mysqlconnect, gstring, false, "", "");
}
for(new i; i < MAX_APARTMENT_PLAYER; i++)
{
format(gstring, sizeof(gstring),"UPDATE `apartment` SET `NamePlayer` = '%s', `Bought` = '%d', `Status` = '%d', `Money` = '%d', `Bank` = '%d', `IDInterior` = '%d' WHERE `ID`='%d'",
iApartment[1][i][aNamePlayer], iApartment[1][i][aBought], iApartment[1][i][aStatus], iApartment[1][i][aMoney], iApartment[1][i][aBank], iApartment[1][i][aIDInterior], iApartment[1][i][aID]);
mysql_function_query(mysqlconnect, gstring, false, "", "");
}
SetTimer("SaveApartment", 20000, 0);
}
public SaveVehicle()
{
for(new i; i < MAX_VEHICLES; i++)
{
if(!iVehicle[i][vMoney]) continue;
SaveVehicle_1(i);
}
SetTimer("SaveVehicle", 40000, 0);
}
stock SaveVehicle_1(vehicleid)
{
format(gstring, sizeof(gstring),"UPDATE `vehicle` SET `NamePlayer` = '%s', `Money` = '%d', `Status` = '%d', `HP` = '%f', `VehicleID` = '%d', `Color1` = '%d', `Color2` = '%d', `Paintjob` = '%d', `Tyres` = '%d', `Spoiler` = '%d', `FrontBumper` = '%d', `RearBumper` = '%d', `Nitro` = '%d', `Hydraulics` = '%d', `Engine` = '%d' WHERE `ID`='%d'",
iVehicle[vehicleid][vNamePlayer], iVehicle[vehicleid][vMoney], iVehicle[vehicleid][vStatus], iVehicle[vehicleid][vHP], iVehicle[vehicleid][vVehicleID], iVehicle[vehicleid][vColor1], iVehicle[vehicleid][vColor2], iVehicle[vehicleid][vPaintjob], iVehicle[vehicleid][vTyres], iVehicle[vehicleid][vSpoiler], iVehicle[vehicleid][vFrontBumper], iVehicle[vehicleid][vRearBumper], iVehicle[vehicleid][vNitro], iVehicle[vehicleid][vHydraulics], iVehicle[vehicleid][vEngine], iVehicle[vehicleid][vID]);
mysql_function_query(mysqlconnect, gstring, false, "", "");
}
В чем собственно лаги базы: когда заходишь на сервер у тебя в течении 10 секунд появляется только окно авторизации, после того как авторизировался самп просто зависает на секунд 15 (это идет загрузка содержимого аккаунта), при этом всём ЖД компа загружен на 83% (все эти проценты жрет процесс mysqlbd.exe). Если же я отключаю сохранения, то все становится нормально, ЖД нагружен на 1%, окно авторизации появляется за наносекунды и т.д.