Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Оптимизация в целом. [Часть 1]

Статус
В этой теме нельзя размещать новые ответы.

Caypеn

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

Допустим купил игрок дом и вы его тут же сохраняйте, да это правильно, а вот дом сохранять не обязательно, т.к. при нормальном функционирование сервера при авто рестарте можно поставить это сохранение.
Пример:
Везде в моде замените GameModeExit(); на GameModeExitFunc();
Далее ищем:
PHP:
public OnGameModeExit()
и заменяем весь паблик на что-то подобное:
PHP:
OnGameModeExitFunc()
{
	СОХРАНИТЬЗОНА();
	СОХРАНИТЬБИЗЫ();
	СОХРАНИТЬЗАПРАВКИ();
	СОХРАНИТЬАВТОМАСТЕРСКИЕ();
	СОХРАНИТЬДОМА();
	СОХРАНИТЬКВАРТИРЫ();
	СОХРАНИТЬАККАУНТЫ();
	СОХРАНИТЬМАТЫ();
	СОХРАНИТЬБАНМАФИЙ();
	СОХРАНИТЬБАНКФРАК();
    GameModeExit();// Я бы посоветовал поставить таймер на рестарт сервера,если вы используете mysql сохранение или другое которое может не успеть выполниться до завершения работы мода(GameModeExit).
	return true;
}
public OnGameModeExit(){return true;}
Помните 2 важные вещи!
- 1. это НЕ касается сохранения игроков.
- 2. Всё что я написал в коде Русскими буквами это стоки/паблики вашего сохранения.
Так и теперь, повсюду из мода удаляем сохранение всего этого кроме этого паблика.
Подведем итоги, да лагов станет меньше, но есть и минус при краше сервера(Что бывает очень редко) данные за сегодняшний день у этих вещей будут утеряны.

2. Таймеры

Очень сильно нагружают мод, один человек нашел способ сделать их более точнее и более не нагружаемыми в несколько раз, имя человека Xemyl.

Более новая версия таймеров(одобрена OKstyle-ом и другими профессионалами):

Итоги в первой ссылке: Работает куда быстрее и точнее.
Ну вот основное вроде бы готово, теперь мелочи

3. Переменные
Ну что-же в РЛС видел я такую странность.
Значит там что-бы привязать машину ко фракции вот так:
у всех переменных
PHP:
new lsacar[22];
Потом внизу проверка на фракцию:
PHP:
if(newcar >= lsacar[0] && newcar <= lsacar[21])
Ну а там уже сами машины
PHP:
lsacar[0] == машина1
lsacar[1] == машина2
lsacar[2] == машина3
lsacar[3] == машина4
lsacar[4] == машина5
и так далее...
Что на мой взгляд бред...
Вот зачем использовать столько ячеек для того что бы привязать авто?
Не проще ли сделать так:
Ко всем new
PHP:
new lsacar[2];
В проверку на фракцию:
PHP:
else if(newcar >= lsacar[0] && newcar <= lsacar[1])
Теперь сами машины:
PHP:
lsacar[0] = машина1
машина2
машина3
машина4
машина5
lsacar[1] = машина6
Экономнее вроде бы.

П.с. машина1,машина2 и т.д. это CreateVehicle(тут характеристики вашей машины);

4. Оптимизация сохранения игрока.

Так вот, значит после каждого изменения игрока почти в каждом моде идет его сохранение, чаще всего в таком виде:

PHP:
OnPlayerUpdateRL
Так вот, раз уж OnPlayerDisconnect все-равно вызывается даже при краше, то зачем его сохранять по всюду, можно всего лишь при его выходе из игры.
То есть по всюду из мода удаляем сохранение игрока.
и в
PHP:
public OnPlayerDisconnect
Вставляем свое сохранение.

Готово.
5. Switch и If

Постараюсь описать по подробнее.
В общем так, когда применять if а когда switch и что это вообще такое?

if - Проверка на заданные значения, пример использования:
PHP:
if(igraetvderbi[playerid] == 1)
{
     return сделатьтото;// возврат (return) что-бы завершить выполнение этого процесса.
}
switch - перебирает цифры, пример использования:
PHP:
switch(igraetvderbi[playerid])
{
case 0:
	{
		return сделатьтото;// возврат (return) потому-что смысла дальше перебирать нет
	}
case 1:
	{
		return сделатьтото;// возврат (return) потому-что смысла дальше перебирать нет
	}
deafult: return true; 
}
switch можно использовать только для цифр, ну а теперь что из них будет работать быстрее в каких ситуациях:
if работает быстрее с большими промежутками а то есть: 1,100,200,300
switch с маленькими а то есть: 1,2,3,4,5 (так же возможно 255,256,257)
Если switch вдруг столкнется с case которого нет в switch,то вернет default

Часть 2​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу