public LoadProperty()
{
new arrCoords[47][64];
new strFromFile2[256];
new File: file = fopen("house/property.cfg", io_read);
if (file)
{
new idx;
while (idx < sizeof(HouseInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, ',');
HouseInfo[idx][hEntrancex] = floatstr(arrCoords[0]);
HouseInfo[idx][hEntrancey] = floatstr(arrCoords[1]);
HouseInfo[idx][hEntrancez] = floatstr(arrCoords[2]);
HouseInfo[idx][hExitx] = floatstr(arrCoords[3]);
HouseInfo[idx][hExity] = floatstr(arrCoords[4]);
HouseInfo[idx][hExitz] = floatstr(arrCoords[5]);
HouseInfo[idx][hHealthx] = strval(arrCoords[6]);
HouseInfo[idx][hHealthy] = strval(arrCoords[7]);
HouseInfo[idx][hHealthz] = strval(arrCoords[8]);
HouseInfo[idx][hArmourx] = strval(arrCoords[9]);
HouseInfo[idx][hArmoury] = strval(arrCoords[10]);
HouseInfo[idx][hArmourz] = strval(arrCoords[11]);
//printf("HouseInfo hEntrancez %f",HouseInfo[idx][hEntrancez]);
strmid(HouseInfo[idx][hOwner], arrCoords[12], 0, strlen(arrCoords[12]), 255);
strmid(HouseInfo[idx][hDiscription], arrCoords[13], 0, strlen(arrCoords[13]), 255);
HouseInfo[idx][hValue] = strval(arrCoords[14]);
HouseInfo[idx][hHel] = strval(arrCoords[15]);
HouseInfo[idx][hArm] = strval(arrCoords[16]);
HouseInfo[idx][hInt] = strval(arrCoords[17]);
HouseInfo[idx][hLock] = strval(arrCoords[18]);
HouseInfo[idx][hOwned] = strval(arrCoords[19]);
HouseInfo[idx][hRooms] = strval(arrCoords[20]);
HouseInfo[idx][hRent] = strval(arrCoords[21]);
HouseInfo[idx][hRentabil] = strval(arrCoords[22]);
HouseInfo[idx][hTakings] = strval(arrCoords[23]);
HouseInfo[idx][hVec] = strval(arrCoords[24]);
if(HouseInfo[idx][hVec] == 457)
{
HouseInfo[idx][hVec] = 411;
}
HouseInfo[idx][hVcol1] = strval(arrCoords[25]);
HouseInfo[idx][hVcol2] = strval(arrCoords[26]);
HouseInfo[idx][hDate] = strval(arrCoords[27]);
HouseInfo[idx][hLevel] = strval(arrCoords[28]);
HouseInfo[idx][hWorld] = strval(arrCoords[29]);
HouseInfo[idx][hPjob] = strval(arrCoords[30]);
HouseInfo[idx][hWheel] = strval(arrCoords[31]);
HouseInfo[idx][hSpoiler] = strval(arrCoords[32]);
HouseInfo[idx][hHood] = strval(arrCoords[33]);
HouseInfo[idx][hRoof] = strval(arrCoords[34]);
HouseInfo[idx][hSideskirt] = strval(arrCoords[35]);
HouseInfo[idx][hLamps] = strval(arrCoords[36]);
HouseInfo[idx][hNitro] = strval(arrCoords[37]);
HouseInfo[idx][hExhaust] = strval(arrCoords[38]);
HouseInfo[idx][hStereo] = strval(arrCoords[39]);
HouseInfo[idx][hHydraulics] = strval(arrCoords[40]);
HouseInfo[idx][hFrontbumper] = strval(arrCoords[41]);
HouseInfo[idx][hRearbumper] = strval(arrCoords[42]);
HouseInfo[idx][hVentright] = strval(arrCoords[43]);
HouseInfo[idx][hVentleft] = strval(arrCoords[44]);
HouseInfo[idx][hNeonleft] = strval(arrCoords[45]);
HouseInfo[idx][hNeonright] = strval(arrCoords[46]);
printf("Информация о доме:%d Владелец:%s",idx,HouseInfo[idx][hOwner]);
idx++;
}
fclose(file);
}
return true;
}
public LoadFlats()
{
new arrCoords[17][64];
new strFromFile2[256];
new File: file = fopen("house/flats.cfg", io_read);
if (file)
{
new idx;
while (idx < sizeof(FlatsInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, ',');
FlatsInfo[idx][fOwned] = strval(arrCoords[0]);
strmid(FlatsInfo[idx][fOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255);
FlatsInfo[idx][fEntrancex] = floatstr(arrCoords[2]);
FlatsInfo[idx][fEntrancey] = floatstr(arrCoords[3]);
FlatsInfo[idx][fEntrancez] = floatstr(arrCoords[4]);
FlatsInfo[idx][fExitx] = floatstr(arrCoords[5]);
FlatsInfo[idx][fExity] = floatstr(arrCoords[6]);
FlatsInfo[idx][fExitz] = floatstr(arrCoords[7]);
FlatsInfo[idx][fInt] = strval(arrCoords[8]);
FlatsInfo[idx][fVirtWorld] = strval(arrCoords[9]);
FlatsInfo[idx][fValue] = strval(arrCoords[10]);
FlatsInfo[idx][fLock] = strval(arrCoords[11]);
FlatsInfo[idx][fRent] = strval(arrCoords[12]);
FlatsInfo[idx][fRentabil] = strval(arrCoords[13]);
FlatsInfo[idx][fTakings] = strval(arrCoords[14]);
FlatsInfo[idx][fDate] = strval(arrCoords[15]);
FlatsInfo[idx][fLevel] = strval(arrCoords[16]);
printf("Квартира: [%d] | Владелец: [%s]",idx,FlatsInfo[idx][fOwner]);
idx++;
}
fclose(file);
}
return true;
}
public LoadBizz()
{
new arrCoords[24][64];
new strFromFile2[256];
new File: file = fopen("logs/bizz.cfg", io_read);
if (file)
{
new idx;
while (idx < sizeof(BizzInfo))
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, '|');
BizzInfo[idx][bOwned] = strval(arrCoords[0]);
strmid(BizzInfo[idx][bOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255);
strmid(BizzInfo[idx][bMessage], arrCoords[2], 0, strlen(arrCoords[2]), 255);
strmid(BizzInfo[idx][bExtortion], arrCoords[3], 0, strlen(arrCoords[3]), 255);
BizzInfo[idx][bEntranceX] = floatstr(arrCoords[4]);
BizzInfo[idx][bEntranceY] = floatstr(arrCoords[5]);
BizzInfo[idx][bEntranceZ] = floatstr(arrCoords[6]);
BizzInfo[idx][bExitX] = floatstr(arrCoords[7]);
BizzInfo[idx][bExitY] = floatstr(arrCoords[8]);
BizzInfo[idx][bExitZ] = floatstr(arrCoords[9]);
BizzInfo[idx][bBuyPrice] = strval(arrCoords[10]);
BizzInfo[idx][bEntranceCost] = strval(arrCoords[11]);
BizzInfo[idx][b2Till] = strval(arrCoords[12]);
BizzInfo[idx][bLocked] = strval(arrCoords[13]);
BizzInfo[idx][bInterior] = strval(arrCoords[14]);
BizzInfo[idx][bProducts] = strval(arrCoords[15]);
BizzInfo[idx][bMaxProducts] = strval(arrCoords[16]);
BizzInfo[idx][bPriceProd] = strval(arrCoords[17]);
BizzInfo[idx][b2Till] = strval(arrCoords[18]);
BizzInfo[idx][bCena] = strval(arrCoords[19]);
BizzInfo[idx][bBarX] = floatstr(arrCoords[20]);
BizzInfo[idx][bBarY] = floatstr(arrCoords[21]);
BizzInfo[idx][bBarZ] = floatstr(arrCoords[22]);
BizzInfo[idx][bMafia] = strval(arrCoords[23]);
//BizzInfo[idx][bWorld] = strval(arrCoords[19]);
idx++;
}
fclose(file);
}
return true;
}
public CheckCar() {
new string[100], set;
for(new i; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(PlayerInfo[i][pCashs] != GetPlayerMoney(i)) {
ResetPlayerMoney(i);
GivePlayerMoney(i, PlayerInfo[i][pCashs]);
}
if(PlayerEx[i][ChekEx] == PlayerEx[i][TickEx]) if(PlayerEx[i][pSpawnEx] == true) PlayerEx[i][AFKEx] = true;
PlayerEx[i][ChekEx] = PlayerEx[i][TickEx];
if(IDVEH[i] != -1 && IsPlayerInAnyVehicle(i) && !UseEnter[i] && IDVEH[i] != GetPlayerVehicleID(i)) Punish(i);
}
for(new x; x < sizeof(mehanik); x++) {
set = 0;
for(new i; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i,"MexKo") > -1 && GetPlayerVehicleID(i) == mehanik[x] && GetPlayerVehicleID(i) == GetPVarInt(i,"arenda")) {
set++;
format(string, sizeof(string), "На работе: %s", SBizzInfo[GetPVarInt(i,"MexKo")][sbMessage]);
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
}
}
if(set == 0) Update3DTextLabelText(Meh3d[x], 0x008080FF, "Не работает!");
}
for(new j=0; j<MAX_VEHICLES; j++) {
if(zaved[j] == true) {
if(Fuell[j] >= 0) {
Fuell[j] -= 0.2;
for(new i= 0; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(j == caridhouse[i]) PlayerInfo[i][pFuelcar] = Fuell[j];
}
}
else {
if(GetVehicleModel(j) != 462 && GetVehicleModel(j) != 510 && GetVehicleModel(j) != 509 && GetVehicleModel(j) != 481) {
GetVehicleParamsEx(j,engine,lights,alarm,doors,bonnet,boot,objective);
SetVehicleParamsEx(j,VEHICLE_PARAMS_OFF,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
zaved[j] = false;
}
}
}
}
return true;
}
if(j == caridhouse[i]) { PlayerInfo[i][pFuelcar] = Fuell[j]; break; } // Работает по принципу: Нашли, Записали, Остановили.
new model = GetVehicleModel(j);
if(model != 462 && model != 510 && model != 509 && model != 481)
|
PHP код:
PHP код:
|
for(new x; x < sizeof(mehanik); x++) {
set = 0;
for(new i; i < GetMaxPlayers(); i++) {
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i,"MexKo") > -1 && GetPlayerVehicleID(i) == mehanik[x] && GetPlayerVehicleID(i) == GetPVarInt(i,"arenda")) {
set++;
format(string, sizeof(string), "На работе: %s", SBizzInfo[GetPVarInt(i,"MexKo")][sbMessage]);
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
}
}
if(set == 0) Update3DTextLabelText(Meh3d[x], 0x008080FF, "Не работает!");
}
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
Update3DTextLabelText(Meh3d[x], 0x008080FF, string);
break;
|
после
PHP код:
PHP код:
|
|
Нет, цикл остановится и будет выведен 3D текст только на одну машину.
|
for(new x; x < sizeof(mehanik); x++) {
set = 0;
for(new i; i < GetMaxPlayers(); i++) {
|
так цикла ведь два запускается?
PHP код:
|
|
hello
есть несколько простых логов, пишут в разные файлы в разные моменты работы мода при каждой записи файл открывается, пишется строка, и файл закрывается. вопрос - стоит ли переделать это на принцип: открыл все файлы при старте мода - в процессе работы туда только пишем - при рестарте-выходе(-креше) закрываем? с точки зрения оптимизации - меньше лишних действий = лучше. вижу только один минус. файлы будут блокированы во время работы мода, и их нельзя будет удалить. но это не мешает в моем случае, например. или я чтото еще упускаю? |
new Pos[MAX_PLAYERS][4];
public OnPlayerUpdate(playerid)
{
GetPlayerPos(playerid,Pos[playerid][0],Pos[playerid][1],Pos[playerid][2]);
GetPlayerFacingAngle(playerid,Pos[playerid][3]);
return 1;
}
|
Здравия всем,и доброго времени суток!
Подскажите,если сделать так PHP код:
|
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOGID)
{
if(response)
{
if(listitem == 0)
{
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
return 1;
}
if(dialogid == DIALOGID+1)
{
if(response)
{
if(listitem == 0)
{
if(GetPlayerMoney(playerid) <200)
return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -200);
GivePlayerWeapon(playerid,22,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45! ($200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
if(listitem == 1)
{
if(GetPlayerMoney(playerid) <600)
return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -600);
GivePlayerWeapon(playerid,23,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45 с глушителм! ($600)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
if(listitem == 2)
{
if(GetPlayerMoney(playerid) <1200)
return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -1200);
GivePlayerWeapon(playerid,24,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Пустынный Орел! ($1200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
}
return 1;
}
return 1;
}
|
Всех с прошедшим,
Объясните как оптимизировать на вот этом примере плиз а то читал, но дошло без примера .... п.с всё стеклось в одну большую кучу ...... ![]() |
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOGID:
{
if(response)
{
switch(listitem)
{
case 0:
{
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
}
}
return 1;
}
case DIALOGID+1:
{
if(response)
{
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) <200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -200);
GivePlayerWeapon(playerid,22,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45! ($200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена"); }
}
case 1:
{
if(GetPlayerMoney(playerid) <600) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -600);
GivePlayerWeapon(playerid,23,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45 с глушителм! ($600)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена"); }
}
case 2:
{
if(GetPlayerMoney(playerid) <1200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -1200);
GivePlayerWeapon(playerid,24,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Пустынный Орел! ($1200)");
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
}
}
return 1;
}
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOGID)
{
if(!response) return 1;
if(listitem == 0) ShowGunDialog(playerid);
return 1;
}
if(dialogid == DIALOGID+1)
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
if(GetPlayerMoney(playerid) <200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -200);
GivePlayerWeapon(playerid,22,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45! ($200)");
ShowGunDialog(playerid);
}
case 1:
{
if(GetPlayerMoney(playerid) <600) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -600);
GivePlayerWeapon(playerid,23,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Кольт-45 с глушителм! ($600)");
ShowGunDialog(playerid);
}
case 2:
{
if(GetPlayerMoney(playerid) <1200) return SendClientMessage(playerid, COLOR_RED, "У вас недостаточно денег!");
GivePlayerMoney(playerid, -1200);
GivePlayerWeapon(playerid,24,30);
SendClientMessage(playerid, COLOR_GREEN, "Вы купили: Пустынный Орел! ($1200)");
ShowGunDialog(playerid);
}
}
return 1;
}
return 1;
}
stock ShowGunDialog(playerid)
{
ShowPlayerDialog(playerid, DIALOGID+1, DIALOG_STYLE_LIST, "Пистолеты", "Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)", "Выбрать", "Отмена");
}
|
сервер и так при каждом апдейте запоминает позицию игрока и прочие параметры.
а это всего лишь перекладывание из его внутренних переменных в дополнительные логичнее брать это только когда нужно. ну или по таймеру более гуманному в плане интервала в любом случае, функции эти особо ничего не считают, нагрузка не должна быть большой |
new Float:gTest[3];
public OnFilterScriptInit()
{
new t = GetTickCount();
for(new i;i<100000;i++) {}
printf("Tick 1: %d",GetTickCount() - t);
t = GetTickCount();
for(new i;i<100000;i++) GetPlayerPos(0,gTest[0],gTest[1],gTest[2]);
printf("Tick 2: %d",GetTickCount() - t);
return 1;
}
for(new i = 1; i != 13; i++)
{
format(string,sizeof(string),"UPDATE Config SET A%d = %d WHERE Settings = Ammo'",i,Massive[i][1]);
db_query(DataBase,string);
}
|
PHP код:
Возможно ли как-нибудь оптимизировать? |
format(string,
sizeof(string),
"UPDATE Config SET A1 = %d, A2 = %d, A3 = %d, A4 = %d, A5 = %d, A6 = %d, A7 = %d, A8 = %d, A9 = %d, A10 = %d, A11 = %d, A12 = %d WHERE Settings = Ammo",
Massive[1][1],
Massive[2][1],
Massive[3][1],
Massive[4][1],
Massive[5][1],
Massive[6][1],
Massive[7][1],
Massive[8][1],
Massive[9][1],
Massive[10][1],
Massive[11][1],
Massive[12][1]
);
db_query(DataBase,string);
|
Да, повлияет, каждый раз когда сервер будет получать данные от любого игрока, он будет выполнять данные функции, а учитывая, что самп однопоточен, использование подобной конструкции при более менее высоком онлайне и малом значении рефреш райта - губительно.
|
|
Здравия всем,и доброго времени суток!
Подскажите,если сделать так PHP код:
|