SA-MP Forums Archive
Оптимизация кода - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Оптимизация кода (/showthread.php?tid=153915)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13


Re: Оптимизация кода - grod - 03.10.2012

Как можно оптимизировать данныe public`i
Код:
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;
}



Re: Оптимизация кода - Stepashka - 03.10.2012

  1. Тут нечего оптимизировать.
  2. Не имеет смысла оптимизировать код который выполняется 1 раз при запуске сервера.



Re: Оптимизация кода - x_O - 07.10.2012

Помогите пожалуйста оптимизировать коллбэк!

PHP код:
public CheckCar() {
    new 
string[100], set;
    for(new 
iGetMaxPlayers(); i++) {
        if(!
IsPlayerConnected(i)) continue;
        if(
PlayerInfo[i][pCashs] != GetPlayerMoney(i)) {
            
ResetPlayerMoney(i);
            
GivePlayerMoney(iPlayerInfo[i][pCashs]);
        }
        if(
PlayerEx[i][ChekEx] == PlayerEx[i][TickEx]) if(PlayerEx[i][pSpawnEx] == truePlayerEx[i][AFKEx] = true;
        
PlayerEx[i][ChekEx] = PlayerEx[i][TickEx];
        if(
IDVEH[i] != -&& IsPlayerInAnyVehicle(i) && !UseEnter[i] && IDVEH[i] != GetPlayerVehicleID(i)) Punish(i);
    }
    for(new 
xsizeof(mehanik); x++) {
        
set 0;
        for(new 
iGetMaxPlayers(); i++) {
            if(!
IsPlayerConnected(i)) continue;
            if(
GetPVarInt(i,"MexKo") > -&& GetPlayerVehicleID(i) == mehanik[x] && GetPlayerVehicleID(i) == GetPVarInt(i,"arenda")) {
                
set++;
                
format(stringsizeof(string), "На работе: %s"SBizzInfo[GetPVarInt(i,"MexKo")][sbMessage]);
                
Update3DTextLabelText(Meh3d[x], 0x008080FFstring);
            }
        }
        if(
set == 0Update3DTextLabelText(Meh3d[x], 0x008080FF"Не работает!");
    }
    for(new 
j=0j<MAX_VEHICLESj++) {
        if(
zaved[j] == true) {
            if(
Fuell[j] >= 0) {
                
Fuell[j] -= 0.2;
                for(new 
i0GetMaxPlayers(); i++) {
                    if(!
IsPlayerConnected(i)) continue;
                    if(
== 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;

Больше всего напрягает цикл обновлением у машин 3д текста


Re: Оптимизация кода - DrSlett - 07.10.2012

Quote:
Originally Posted by x_O
Посмотреть сообщение
Помогите пожалуйста оптимизировать коллбэк!
PHP код:
if(== caridhouse[i]) { PlayerInfo[i][pFuelcar] = Fuell[j]; break; } // Работает по принципу: Нашли, Записали, Остановили. 
Ну еще можно GetVehicleModel записать в переменную, чтобы не обращаться к функции несколько раз.

PHP код:
new model GetVehicleModel(j);
if(
model != 462 && model != 510 && model != 509 && model != 481



Re: Оптимизация кода - x_O - 07.10.2012

Quote:
Originally Posted by DrSlett
Посмотреть сообщение
PHP код:
if(== caridhouse[i]) { PlayerInfo[i][pFuelcar] = Fuell[j]; break; } // Работает по принципу: Нашли, Записали, Остановили. 
Ну еще можно GetVehicleModel записать в переменную, чтобы не обращаться к функции несколько раз.

PHP код:
new model GetVehicleModel(j);
if(
model != 462 && model != 510 && model != 509 && model != 481
а в коде:
PHP код:
    for(new xsizeof(mehanik); x++) { 
        
set 0
        for(new 
iGetMaxPlayers(); i++) { 
            if(!
IsPlayerConnected(i)) continue; 
            if(
GetPVarInt(i,"MexKo") > -&& GetPlayerVehicleID(i) == mehanik[x] && GetPlayerVehicleID(i) == GetPVarInt(i,"arenda")) { 
                
set++; 
                
format(stringsizeof(string), "На работе: %s"SBizzInfo[GetPVarInt(i,"MexKo")][sbMessage]); 
                
Update3DTextLabelText(Meh3d[x], 0x008080FFstring); 
            } 
        } 
        if(
set == 0Update3DTextLabelText(Meh3d[x], 0x008080FF"Не работает!"); 
    } 
после

PHP код:
Update3DTextLabelText(Meh3d[x], 0x008080FFstring); 
будет ли уместно воткнуть break; ?

PHP код:
Update3DTextLabelText(Meh3d[x], 0x008080FFstring); 
break; 



Re: Оптимизация кода - DrSlett - 07.10.2012

Quote:
Originally Posted by x_O
Посмотреть сообщение
после

PHP код:
Update3DTextLabelText(Meh3d[x], 0x008080FFstring); 
будет ли уместно воткнуть break; ?

PHP код:
Update3DTextLabelText(Meh3d[x], 0x008080FFstring); 
break; 
Нет, цикл остановится и будет выведен 3D текст только на одну машину.


Re: Оптимизация кода - x_O - 07.10.2012

Quote:
Originally Posted by DrSlett
Посмотреть сообщение
Нет, цикл остановится и будет выведен 3D текст только на одну машину.
так цикла ведь два запускается?

PHP код:
    for(new xsizeof(mehanik); x++) {  
        
set 0;  
        for(new 
iGetMaxPlayers(); i++) { 



Re: Оптимизация кода - DrSlett - 07.10.2012

Quote:
Originally Posted by x_O
Посмотреть сообщение
так цикла ведь два запускается?

PHP код:
    for(new xsizeof(mehanik); x++) {  
        
set 0;  
        for(new 
iGetMaxPlayers(); i++) { 
Остановится второй цикл, первый будет продолжать работать, не особо понял значение mehanik, это ID'ы транспорта или что?


Re: Оптимизация кода - hub4 - 24.11.2012

hello
есть несколько простых логов, пишут в разные файлы в разные моменты работы мода
при каждой записи файл открывается, пишется строка, и файл закрывается.
вопрос - стоит ли переделать это на принцип: открыл все файлы при старте мода - в процессе работы туда только пишем - при рестарте-выходе(-креше) закрываем?

с точки зрения оптимизации - меньше лишних действий = лучше.
вижу только один минус. файлы будут блокированы во время работы мода, и их нельзя будет удалить. но это не мешает в моем случае, например.
или я чтото еще упускаю?


Re: Оптимизация кода - eakwarp - 24.11.2012

Quote:
Originally Posted by hub4
Посмотреть сообщение
hello
есть несколько простых логов, пишут в разные файлы в разные моменты работы мода
при каждой записи файл открывается, пишется строка, и файл закрывается.
вопрос - стоит ли переделать это на принцип: открыл все файлы при старте мода - в процессе работы туда только пишем - при рестарте-выходе(-креше) закрываем?

с точки зрения оптимизации - меньше лишних действий = лучше.
вижу только один минус. файлы будут блокированы во время работы мода, и их нельзя будет удалить. но это не мешает в моем случае, например.
или я чтото еще упускаю?
С точки зрения оптимизации, время открытия файла по сравнению с чтением или записью - ничтожно и им можно пренебречь.


Re: Оптимизация кода - safari - 25.11.2012

Здравия всем,и доброго времени суток!
Подскажите,если сделать так

PHP код:
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;

Тоесть,если постоянно переменные меняют свое значение,это как то повлияет на работу сервера?


Re: Оптимизация кода - eakwarp - 25.11.2012

Quote:
Originally Posted by safari
Посмотреть сообщение
Здравия всем,и доброго времени суток!
Подскажите,если сделать так

PHP код:
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;

Тоесть,если постоянно переменные меняют свое значение,это как то повлияет на работу сервера?
Да, повлияет, каждый раз когда сервер будет получать данные от любого игрока, он будет выполнять данные функции, а учитывая, что самп однопоточен, использование подобной конструкции при более менее высоком онлайне и малом значении рефреш райта - губительно.


Re: Оптимизация кода - hub4 - 25.11.2012

сервер и так при каждом апдейте запоминает позицию игрока и прочие параметры.
а это всего лишь перекладывание из его внутренних переменных в дополнительные
логичнее брать это только когда нужно. ну или по таймеру более гуманному в плане интервала
в любом случае, функции эти особо ничего не считают, нагрузка не должна быть большой


Re: Оптимизация кода - proSeryoga - 03.01.2013

Всех с прошедшим,
Объясните как оптимизировать на вот этом примере плиз
а то читал, но дошло без примера ....
pawn Код:
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;
}
п.с всё стеклось в одну большую кучу ......


Re: Оптимизация кода - emit - 03.01.2013

Quote:
Originally Posted by proSeryoga
Посмотреть сообщение
Всех с прошедшим,
Объясните как оптимизировать на вот этом примере плиз
а то читал, но дошло без примера ....

п.с всё стеклось в одну большую кучу ......
PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    switch(
dialogid)
    {
        case 
DIALOGID:
        {
            if(
response)
            {
                switch(
listitem)
                {
                    case 
0:
                    {
                        
ShowPlayerDialog(playeridDIALOGID+1DIALOG_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(playeridCOLOR_RED"У вас недостаточно денег!");
                        
GivePlayerMoney(playerid, -200);
                        
GivePlayerWeapon(playerid,22,30);
                        
SendClientMessage(playeridCOLOR_GREEN"Вы купили: Кольт-45! ($200)");
                        
ShowPlayerDialog(playeridDIALOGID+1DIALOG_STYLE_LIST"Пистолеты""Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)""Выбрать""Отмена");                    }
                    }
                    case 
1:
                    {
                        if(
GetPlayerMoney(playerid) <600) return SendClientMessage(playeridCOLOR_RED"У вас недостаточно денег!");
                        
GivePlayerMoney(playerid, -600);
                        
GivePlayerWeapon(playerid,23,30);
                        
SendClientMessage(playeridCOLOR_GREEN"Вы купили: Кольт-45 с глушителм! ($600)");
                        
ShowPlayerDialog(playeridDIALOGID+1DIALOG_STYLE_LIST"Пистолеты""Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)""Выбрать""Отмена");                    }
                    }
                    case 
2:
                    {
                        if(
GetPlayerMoney(playerid) <1200) return SendClientMessage(playeridCOLOR_RED"У вас недостаточно денег!");
                        
GivePlayerMoney(playerid, -1200);
                        
GivePlayerWeapon(playerid,24,30);
                        
SendClientMessage(playeridCOLOR_GREEN"Вы купили: Пустынный Орел! ($1200)");
                        
ShowPlayerDialog(playeridDIALOGID+1DIALOG_STYLE_LIST"Пистолеты""Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)""Выбрать""Отмена");
                    }
                }
            }
            return 
1;
        }
    }
    return 
1;




Re: Оптимизация кода - Sanbody - 04.01.2013

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == DIALOGID)
    {
        if(!
response) return 1;       
        if(
listitem == 0ShowGunDialog(playerid);
        return 
1;
    }
    if(
dialogid == DIALOGID+1)
    {
        if(!
response) return 1;     
        switch(
listitem)
        {
            case 
0:
            {
                if(
GetPlayerMoney(playerid) <200) return SendClientMessage(playeridCOLOR_RED"У вас недостаточно денег!");
                
GivePlayerMoney(playerid, -200);
                
GivePlayerWeapon(playerid,22,30);
                
SendClientMessage(playeridCOLOR_GREEN"Вы купили: Кольт-45! ($200)");
                
ShowGunDialog(playerid);
            }
            case 
1:
            {
                if(
GetPlayerMoney(playerid) <600) return SendClientMessage(playeridCOLOR_RED"У вас недостаточно денег!");
                
GivePlayerMoney(playerid, -600);
                
GivePlayerWeapon(playerid,23,30);
                
SendClientMessage(playeridCOLOR_GREEN"Вы купили: Кольт-45 с глушителм! ($600)");
                
ShowGunDialog(playerid);
            }
            case 
2:
            {
                if(
GetPlayerMoney(playerid) <1200) return SendClientMessage(playeridCOLOR_RED"У вас недостаточно денег!");
                
GivePlayerMoney(playerid, -1200);
                
GivePlayerWeapon(playerid,24,30);
                
SendClientMessage(playeridCOLOR_GREEN"Вы купили: Пустынный Орел! ($1200)");
                
ShowGunDialog(playerid);
            }
        }
        return 
1;
    }
    return 
1;
}
stock ShowGunDialog(playerid)
{
    
ShowPlayerDialog(playeridDIALOGID+1DIALOG_STYLE_LIST"Пистолеты""Кольт-45 (200$)\nКольт-45 с глушителм (600$)\nПустынный Орел (1200$)""Выбрать""Отмена");            

Но а вообще... использовать функцию GetPlayerMoney не безопасно, т.к. возвращаемое ею значение можно изменить любым банальным читом на деньги.


Re: Оптимизация кода - Sanbody - 04.01.2013

Quote:
Originally Posted by hub4
Посмотреть сообщение
сервер и так при каждом апдейте запоминает позицию игрока и прочие параметры.
а это всего лишь перекладывание из его внутренних переменных в дополнительные
логичнее брать это только когда нужно. ну или по таймеру более гуманному в плане интервала
в любом случае, функции эти особо ничего не считают, нагрузка не должна быть большой
Но нагрузка все таки есть:
PHP код:
new Float:gTest[3];
public 
OnFilterScriptInit()
{    
    new 
GetTickCount();
    for(new 
i;i<100000;i++) {}        
    
printf("Tick 1: %d",GetTickCount() - t);
    
GetTickCount();        
    for(new 
i;i<100000;i++) GetPlayerPos(0,gTest[0],gTest[1],gTest[2]);
    
printf("Tick 2: %d",GetTickCount() - t);
    return 
1;




Re: Оптимизация кода - Gameyer - 10.01.2013

PHP код:
for(new 1!= 13i++)
{
format(string,sizeof(string),"UPDATE Config SET A%d = %d WHERE Settings = Ammo'",i,Massive[i][1]);
db_query(DataBase,string);

Из-за такого запроса сервер подвисает на 1 - 1.5 сек.
Возможно ли как-нибудь оптимизировать?


Re: Оптимизация кода - Stepashka - 10.01.2013

Quote:
Originally Posted by Gameyer
Посмотреть сообщение
PHP код:
for(new 1!= 13i++)
{
format(string,sizeof(string),"UPDATE Config SET A%d = %d WHERE Settings = Ammo'",i,Massive[i][1]);
db_query(DataBase,string);

Из-за такого запроса сервер подвисает на 1 - 1.5 сек.
Возможно ли как-нибудь оптимизировать?
для начала можно сделать 1 запрос вместо 12
pawn Код:
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);



Re: Оптимизация кода - AirKite - 10.01.2013

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
Да, повлияет, каждый раз когда сервер будет получать данные от любого игрока, он будет выполнять данные функции, а учитывая, что самп однопоточен, использование подобной конструкции при более менее высоком онлайне и малом значении рефреш райта - губительно.
Omg... При большом онлайне и малом рейте, вообще губительно без любых операций в OnPlayerUpdate.
Что касается предоставленного кода, так там и нагрузки никакой нет. GetPlayerPos и GetPlayerFacingAngle работает быстрее например чем выдёргивание данных из Pos[playerid][0], Pos[playerid][1], Pos[playerid][2].

Quote:
Originally Posted by safari
Посмотреть сообщение
Здравия всем,и доброго времени суток!
Подскажите,если сделать так

PHP код:
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;

Тоесть,если постоянно переменные меняют свое значение,это как то повлияет на работу сервера?
Как то очень давно я сам думал так сделать, но в деле оказалось что из Pos[playerid][0], Pos[playerid][1], Pos[playerid][2] выдернуть данные дольше чем с GetPlayerPos. Так что не парься и юзай везде где нужно GetPlayerPos и GetPlayerFacingAngle и т.д. легкие функции