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

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

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

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

Примеры оптимизации.

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

Mozago

Новичок
Думаю многим новичкам будет полезен данный топик.
Я сам учился когда-то по таким же урокам.
В данной тебе я хочу показать как стоит оптимизировать , а как нет.

1. Возвраты:

Во всех модах данные функции выглядят примерно так:

PHP:
for (new i = 0; i < MAX_PLAYERS; i++)
{
    if (IsPlayerConnected(i))
    {
           GivePlayerWeapon(i, 24, 1);
    }
}
Давайте посмотрим как же она будет выглядеть в оптимизированном варианте:

PHP:
for (new i = GetMaxPlayers()-1; i != -1; --i)
{
        if(!IsPlayerConnected(i)) continue; //Если игрок не подключен, то цикл пропустит итерацию
       GivePlayerWeapon(i, 24, 1);
}
Второй вариант работает намного быстрее первого.

Так же можно сделать и с другими функциями:

Что у нас было:
PHP:
if (IsPlayerInAnyVehicle(playerid))
{
    new vehicleid = GetPlayerVehicleID(playerid);
    SetVehiclePos(vehicleid, 0.0, 0.0, 10.0);
}
Что у нас стало:

PHP:
new vehicleid = GetPlayerVehicleID(playerid);
if (vehicleid) SetVehiclePos(vehicleid, 0.0, 0.0, 10.0);
3. Получение имени игрока.

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

PHP:
PlayerName(playerid)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
return PlayerName;
}
Данная функция бесполезна, она только убивает ваш сервер.
Как же нам быть?
Решение этой проблеме придумал OKStyle
Давайте посмотрим что он придумал:

В enum pInfo создаем переменную:

PHP:
pName[MAX_PLAYER_NAME]
В public OnPlayerConnect

PHP:
GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);// узнаем имя подключившегося игрока и записываем в нашу переменную.
Вот и все, пример использования:

PHP:
format(string, sizeof(string), "Меня зовут: %s", PlayerInfo[playerid][pName]);
			SendClientMessage(playerid,0xFFFFFFFF,string);
Так же для упрощения работы можно сделать макрос:

PHP:
#define PlayerName(%0) PlayerInfo[%0][pName]
Теперь хотел бы объяснить новичкам как не стоит делать:

Я видел много новых уроков об "оптимизации" от быдлокодеров.
не буду называть поименно, дабы не позорить их публично.

Они говорят нам что замена
PHP:
1/true 
0/false
является оптимизацией..
Это глупость, не расходуйте свое время зря, от этого вы ничего не получите.

Так же:

Многие говорят что данный макрос "оптимизирует" паблики:

PHP:
#define publics:%0(%1) 	forward %0(%1); public %0(%1)
Использование:

PHP:
publics: Test()
{
}
Так данное действие так же не оптимизирует ваш мод, создание макросов является лишь упрощением написания функций и не более.
Если у вас будут какие либо вопросы задавайте в тему и если собрались заняться оптимизацией своего мода, узнайте правильно ли вы делаете, действительно ли это оптимизирует мод или нет.
Надеюсь этот урок будет полезен хоть кому нибудь.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу