Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 4 ПерваяПервая ... 234
Показано с 31 по 39 из 39
  1. #31
    Аватар для VVWVV
    Проверенный

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    686
    Репутация:
    334 ±
    Хотел бы дополнить, что помимо основной защиты (т.е. fileguard), стоит добавить защиту от идентичных имен.

    Допустим, что есть файл с именем file1.inc, но помимо него есть какая-то папка, в которой содержится файл с идентичным названием.
    Из этих файлов загрузится тот, который подключён раньше.

    Пример:
    PHP код:
    #include <file1>          // Файл будет загружен
    #include "folder/file1"  // Увы, но файл не будет загружен. 
    Фикс данной ошибки:
    PHP код:
    #if defined _inc_file1
         #undef _inc_file1
    #endif 
    Вы, наверное, видели, что в некоторых файлах YSI используется данный код.

    Впрочем, это лишь для тех, кто до сих пор пользуется старым компилятором. В компиляторе от Zeex данная ошибка устранена: отключена автоматическая генерация _inc_* (однако, используя compatibility mode, можно включить).

  2. Пользователь сказал cпасибо:
    Nexius_Tailer (25.08.2016)
  3. #32
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,786
    Репутация:
    2277 ±
    Добавил правило №9 - поместил его в середину списка после других правил, связанных с константами.
    Константы, обозначающие неправильные значения, должны быть равны -1.
    Рассмотрим это правило на примере константы, означающей, что у игрока нет дома.
    Плохой пример:
    PHP код:
    const MAX_HOUSES 100// На сервере всего 100 домов.
    const INVALID_HOUSE_ID 255// Если в player_info[playerid][pHouseKey] число 255, то у игрока нет дома. Почему бы и нет? 
    Но что, если вы потом захотите создать больше 255 домов? Сделаете 255-й дом на координатах, куда не сможет пробраться обычный игрок (например, под землёй)? Это уже костыль. Решается же эта проблема очень просто.
    Хороший пример:
    PHP код:
    const MAX_HOUSES 300;
    const 
    INVALID_HOUSE_ID = -1// Число -1 не будет конфликтовать с макс. кол-вом домов, т.к. число домов не может быть отрицательным. 
    Похожая проблема была в моде GodFather (интересно, кто-нибудь из "нынешнего поколения" видел этот мод?): там числом 255 обозначался неправильный ID игрока. Потом вышел SA-MP 0.3a, в котором к серверу могли подключиться до 500 игроков - тогда 255 перестал быть неправильным ID, что приводило к багам и весьма неожиданным последствиям для тех, кому не повезло зайти под 255-м ID.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  4. #33
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    398
    Репутация:
    118 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Добавил правило №9 - поместил его в середину списка после других правил, связанных с константами.
    Можно также и 65535 использовать вполне, в отличие от 255 это число почти недостягаемо для обычных идов чего-либо
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  5. #34
    Аватар для VVWVV
    Проверенный

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    686
    Репутация:
    334 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Можно также и 65535 использовать вполне, в отличие от 255 это число почти недостягаемо для обычных идов чего-либо
    Если честно, то лучше использовать всё разумно, а не так, как это делают многие: изменяют размерность массива, забывая о данных числах.

  6. #35
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    398
    Репутация:
    118 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Если честно, то лучше использовать всё разумно, а не так, как это делают многие: изменяют размерность массива, забывая о данных числах.
    Суть большинства из пунктов темы в принципе опирается на разумное написание кода. Просто я к тому, что конкретные числа (именно -1 или именно какое-либо ещё) абсолютно непринципиальны, главное просто не делать откровенно тупых действий
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  7. #36
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,786
    Репутация:
    2277 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Можно также и 65535 использовать вполне, в отличие от 255 это число почти недостягаемо для обычных идов чего-либо
    Вот только оно всё равно остаётся досягаемым, "почти" не считается. Рано или скоро 70-100 тыс. игроков на сервере станут нормой - пусть даже и не в SA-MP, а в каком-нибудь другом мультиплеере, но рано или поздно этот момент наступит.

    Думать нужно не исходя из современных реалий, а с расчётом на будущее. И не столько для того, чтобы потом не переписывать свой код (SA-MP стабильно стагнирует, и я очень сомневаюсь, что появится ещё один мультиплеер с таким же плохо продуманным API), сколько чтобы не пришлось переучиваться со старых "вредных" привычек.
    Предусмотрительность - одно из качеств, выделяющих хорошего программиста. Это уже давно стало аксиомой.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  8. #37
    Аватар для Seregamil
    Проверенный

    Статус
    Оффлайн
    Регистрация
    21.11.2013
    Сообщений
    551
    Репутация:
    272 ±
    Цитата Сообщение от Seregamil
    кому как удобно пусть так и оформляют
    Да я внатуре отбитый даун был. Или есть.

  9. #38
    Аватар для Пельмень
    Пользователь

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    181
    Репутация:
    114 ±
    Как на счёт самого элементарного обнуления enum? Как тут щас в сампе принятно? Через цикл обнулять или через какой ни будь memcpy
    Почему бы просто не делать так?
    PHP код:
    new eInfo[MAX_PLAYERS][enumInfo],
    eResetData[enumInfo];
    eInfo[playerid] = eResetData

  10. Пользователь сказал cпасибо:
    Nurick (21.01.2018)
  11. #39
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,353
    Репутация:
    1633 ±
    Всем выйти из сумрака!

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
      Открыть/закрыть
    Ещё пример:
    PHP код:
    const SOME_ARRAY_SIZE 10;
    new 
    some_array[SOME_ARRAY_SIZE];

    public 
    OnGameModeInit()
    {
        for (new 
    0SOME_ARRAY_SIZEi++)
            
    some_array[i] = random(2);
    }

    CMD:printarr(playeridparams[])
    {
        for (new 
    0SOME_ARRAY_SIZEi++)
            
    printf("%d"some_array[i]);


    Здесь размер массива определяется константой, что тоже приемлемо в некоторых ситуациях. Например, во многих системах домов есть константа "MAX_HOUSES" и было бы удобнее использовать её вместо "sizeof(house_info)".
    Кстати, вот тут я бы "поспорил".
    Смоделируем простую ситуацию: Мы имеем массив и цикл, который "перебирает" массив, установив в качестве условия макрос "MAX_PLAYERS"
    PHP код:
    new gArray[MAX_PLAYERS];

    // .....
    for(new iMAX_PLAYERSi++)
    {
        
    printf("%i"gArray[i]);

    Если вдруг однажды нам понадобится изменить размер массива, установив значение какой-то другой константы, то придётся выискивать все случаи работы с массивом и так же изменять значения. А вот если бы мы использовали sizeof
    PHP код:
    new gArray[MAX_PICKUPS];

    // .....
    for(new isizeof(gArray); i++)
    {
        
    printf("%i"gArray[i]);

    То никаких проблем бы не было.

    Поэтому мне кажется, что стоит наоборот по максимуму использовать sizeof там, где код зависим от размерности конкретного массива, дабы впоследствии достаточно было изменить всего 1 строку, а не шарить по всему моду.
    Да и, как мне кажется, использование "sizeof" делает код более "говорящим", ибо сразу видно, что цикл зависим от размера конкретного массива, а значит основная работа будет происходить именно с этим массивом.

    Ну это моё ИМХО :)
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 4 из 4 ПерваяПервая ... 234

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •