Перейти к содержанию
Авторизация  
EgorKa29

[FAQ] Оптимизация команд

Рекомендуемые сообщения

EgorKa29
Здравствуйте ув. пользователи сайта gs-games , сегодня я вам расскажу о оптимизации игровых модов.
 
Посмотрим как будет выгледеть обычная команда:
 
if(strcmp(cmd,"/tskill",true) == 0) { 
if(IsPlayerConnected(playerid)) 
{ 
if(PlayerInfo[playerid][pTskill] > 1000){ PlayerInfo[playerid][pTskill] = 1000; } 
if(PlayerInfo[playerid][pTskill] < 0){ PlayerInfo[playerid][pTskill] = 0; }
format(string,sizeof(string),"Ваш скилл : %d / 1000",PlayerInfo[playerid][pTskill]); 
SendClientMessage(playerid,COLOR_BLUE,string); 
return 1; 
} 
return 1; 
}

Теперь посмотрите команду более оптимизированую:

CMD:tskill(playerid, params[]) { 
if(!IsPlayerConnected(playerid)) return true; 
if(PlayerInfo[playerid][pTskill]>999) return PlayerInfo[playerid][pTskill]=1000; 
if(PlayerInfo[playerid][pTskill]<0) return PlayerInfo[playerid][pTskill]=0;
format(string,sizeof(string),"Ваш скилл : %d / 1000",PlayerInfo[playerid][pTskill]); 
SendClientMessage(playerid,COLOR_BLUE,string); 
return true; 
}

1) Комманды станут короче и более оптимизированы. 

 

Диалоги:

 

Диалог до оптимизации:

if(dialogid == 99) {
olololo=1; 
} 
if(dialogid == 88) 
{
olololo=2; 
}

После

switch(dialogid) 
{ 
case 99: olololo=1; 
case 88: olololo=2; 
return true; 
}

Чем же это оптимизирует? А тем, что при сравнении сервер тоже использует память, и в итоге если этих диалогов будет не 2 как в примере, а 20000. То при поиске диалога сервер просто-напросто повиснет, а в случае со свичем он просто ищет диалог. То-есть он не проверяет каждую возможность, а просто берет число и ищет кейс с ним. 

На этом наш урок закончен

 

Автор урока : [Ega29]

 

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

CMD:

А уточнить факт работы данной процедуры? (Зависимость от инклудов и плагина)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Max_Mister

Меня всегда интересовала эта строка. Допустим:

new bool: logged[MAX_PLAYERS];
if(IsPlayerConnected(playerid))
{
logged[playerid] = true;
}
else
{
logged[playerid] = false;
}

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Lancer

Меня всегда интересовала эта строка. Допустим:

new bool: logged[MAX_PLAYERS];
if(IsPlayerConnected(playerid))
{
logged[playerid] = true;
}
else
{
logged[playerid] = false;
}

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

Это от гф модов пошло на сколько я знаю,в какойто версии сампа был баг отключаешься от сервера но кмд мог как то юзать точно не знаю.Совершено ебанутая проверка кроме циклов,если у вас всё ок при отключение игрока вы всё сбрасываете то хватит и этого logged[playerid] = true; то ид полюбому на сервере.Школьники и половины не понимают зачем что нужно."В ЭТОМ МОДЕ ЕСТЬ ЗНАЧИТ И СЕБЕ ВЫРЕЖУ"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
John_Smith

Тема закрыта. Нет активности 5 суток.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.