Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 4 из 5 ПерваяПервая ... 2 3 4 5 ПоследняяПоследняя
Показано с 31 по 40 из 42
  1. #31
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Хотел бы дополнить, что помимо основной защиты (т.е. 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
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Добавил правило №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.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

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

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

  5. #34
    Аватар для VVWVV
    ?

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

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

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

  7. #36
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

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

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

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

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

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

    Статус
    Оффлайн
    Регистрация
    05.12.2013
    Сообщений
    188
    Репутация:
    116 ±
    Как на счёт самого элементарного обнуления 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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Всем выйти из сумрака!

    Цитата Сообщение от 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" делает код более "говорящим", ибо сразу видно, что цикл зависим от размера конкретного массива, а значит основная работа будет происходить именно с этим массивом.

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

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

    Steve Pavlina

  12. #40
    Аватар для Danny Marcelo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.05.2020
    Адрес
    г. Стерлитамак
    Сообщений
    14
    Репутация:
    0 ±
    PHP код:
    SetObjectMaterialText(
        
    objectid"Sample text"0OBJECT_MATERIAL_SIZE_512x512,
        
    "Arial"1210x000000000xFFFFFFFFOBJECT_MATERIAL_TEXT_ALIGN_CENTER //77 симв.
    ); 
    и

    PHP код:
    CreateObject(
        
    404,
        
    1138.000146.00000.0000//31 символ
        
    0.00000.0000128.0000,
        
    500.0000
    ); 
    Не спорю, что бегунок вечно нужно использовать, чтобы посмотреть что там в коде, но для меня лично это выглядит некрасиво, как то всё налеплено, в некоторых случаях как по мне в одну строку лучше написать, просто разделив пробелом для отделения каждой функции, ну каждый видит так, как ему удобнее, но это не значит что нужно всё подряд лепить, как с примером п.6)) А вот за диалоги отдельное спасибо, я слышал ранее про эту функцию, но не вникал, думал сложная она, оказывается ничего сложного, буду теперь ею пользоваться, вместо номерных ид. Только один вопрос, а 0 id диалога таким же образом использовать? Ну допустим мне нужно просто сделать в некоторых командах диалоги с пояснениями, которые никаких функций не несут, кроме как для игрока. Ранее допустим я такие писал так:

    PHP код:
    ShowPlayerDialog(playerid0DIALOG_STYLE_MSGBOX"Название""Вы прочитали полезную информацию""Ок"""); 
    То есть в enum нужно добавить DIALOG_ID_NULL и в дальнейшем в таких диалогах делать так, я правильно понял?

    PHP код:
    ShowPlayerDialog(playeridDIALOG_ID_NULL DIALOG_STYLE_MSGBOX"Название""Вы прочитали полезную информацию""Ок"""); 

 

 
Страница 4 из 5 ПерваяПервая ... 2 3 4 5 ПоследняяПоследняя

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

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

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

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

Ваши права

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