Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 19 из 19
  1. #11
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,885
    Репутация:
    1782 ±
    Насчёт мода не в gamemode - хз (Ziggi, вроде, отвечал на это, и, кажется, даже в такой же теме с вопросом об архитектуре, но уже не помню чем он это обосновывал).

    Насчёт разбивки скрипта на файлы: имхо, но разбивать на файлы и использовать, при этом, перехваты - не очень хорошая. В написании это, конечно, проще, но вот редактировать такой код довольно сложно, так как будет трудно изменить порядок вызова какой-то одной из перехваченных функций (особенно если ты не автор кода). Уж лучше просто обрамлять код в функции, а функции уже вызывать в pwn, тем самым позволяя легко увидеть то, какие инклуды вызываются в том или ином коллбэке и легко поменять порядок вызова.

    Я в своём моде придерживаюсь простых правил:
    1) Одна система = один инклуд (и инклуды раскиданы по папкам, по типу "admin", "player", "core" и т.п.)
    2) Одна функция выполняет только одну конкретную задачу
    3) Все "перехваты" коллбэков реализуются через вызов функций внутри pwn

    - - - Добавлено - - -

    Для паблик-мода, имхо, не лучшая структура. Античиты и фиксы стоит вынести как отдельные корневые папки, а не распихивать по другим папкам. У паблик-мода должно быть минимум вложенных папок, как мне кажется, ибо это усложнит запоминание структуры проекта при работе с ним.

    И вспомнил один из спорных моментов в Open-GTO. Команды админов там реализованы как "1 команда = 1 файл", а команды игроков все в одном файле находятся. Это сбивает с толку при первом знакомстве с модом.
    Так же там есть некоторые довольно спорные разделения на файлы. Например, такая простая система, как личные сообщения, разбита на 2 файла (отдельно команда и отдельно не очень большая функция где-то строк на 30). Это лишь усложняет поиск нужного файла, как по мне (ну чем больше файлов, тем длиннее список и дольше нужно по нему глазами пробегать, чтоб найти нужный файл). Не очень оправдано с учётом того, что там в файле всего 1 функция.

    Ну и разбивать команды на отдельные файлы - в целом, сомнительная идея, ибо вместо того, чтоб открыть один файл и просто воспользоваться поиском, тебе приходится либо вручную выискивать нужный файл, либо пользоваться поиском по файлам, что не так быстро, как просто поиск по файлу (в том плане, что поиск по файлу - нажатие "Ctrl+F", в отличии от поиска по папке, где нужно папку выбирать и т.п.)
    Последний раз редактировалось DeimoS; 13.02.2019 в 13:02.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  2. Пользователь сказал cпасибо:
    Seviel (14.02.2019)
  3. #12
    Аватар для x86
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.01.2019
    Сообщений
    35
    Репутация:
    5 ±
    Не хватает плагина, который мог бы взять на себя работу над модулями.

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    479
    Репутация:
    70 ±
    На скрине архитектура мода не для паблика. В паблик-моде будет: players, vehicles, admins. Сейчас ломаю голову, как удобней поставить мускул. Или делать в файле мода, или сделать папку database и там разложить файлам регистрацию, загрузку и сохранение.
    Последний раз редактировалось m1n1vv; 13.02.2019 в 23:53.

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

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,178
    Репутация:
    778 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Open-GTO не так идеален, как хотелось бы, на самом деле.
    Правда, уже и не вспомню что именно было, но когда работать с ним приходилось, была парочка не очень логично разбитых на файлы систем. И идея разбивать одну и ту же систему на pwn и inc - тоже такое себе, как по мне. Приходится много лишних телодвижений делать, чтоб проследить те или иные зависимости.
    История Open-GTO идёт с 2006 года, с мода GTO, это один из самых старейших модов. Большую часть кода в Open-GTO я переписал, но много чего осталось из того времени.

    .pwn и .inc - это аналог .c и .h из C, такое разделение необходимо, когда два файла зависят друг от друга. Заголовочные файлы мы подключаем выше, файлы с реализацией ниже.

    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Так почему файл мода не в папке gamemode?
    В проектах, как правило, все исходники хранятся в папке src/ (или sources/ и т.п.). И, с логической точки зрения, будет довольно странно отделять исходники друг от друга.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Насчёт разбивки скрипта на файлы: имхо, но разбивать на файлы и использовать, при этом, перехваты - не очень хорошая. В написании это, конечно, проще, но вот редактировать такой код довольно сложно, так как будет трудно изменить порядок вызова какой-то одной из перехваченных функций (особенно если ты не автор кода). Уж лучше просто обрамлять код в функции, а функции уже вызывать в pwn, тем самым позволяя легко увидеть то, какие инклуды вызываются в том или ином коллбэке и легко поменять порядок вызова.
    Согласен, перехваты нужно использовать только в библиотеках.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    И вспомнил один из спорных моментов в Open-GTO. Команды админов там реализованы как "1 команда = 1 файл", а команды игроков все в одном файле находятся. Это сбивает с толку при первом знакомстве с модом.
    Проблема в том, что команд админов сильно больше. Вызов wc -l *.pwn показывает, что всего строк в админских командах - 3306, тогда как в командах игроков всего 181.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Так же там есть некоторые довольно спорные разделения на файлы. Например, такая простая система, как личные сообщения, разбита на 2 файла (отдельно команда и отдельно не очень большая функция где-то строк на 30). Это лишь усложняет поиск нужного файла, как по мне (ну чем больше файлов, тем длиннее список и дольше нужно по нему глазами пробегать, чтоб найти нужный файл). Не очень оправдано с учётом того, что там в файле всего 1 функция.
    Согласен, я подозреваю, что принял такое решение о разделении во времена моего вдохновения схемой MVC. Это когда логика отделяется от представления. Сейчас бы я много чего реализовал иначе, более гибко.
    Последние системы, архитектурой которых я доволен сейчас:
    - Система соревнований (дм, гонки и т.п.), сама система реализована, но соревнования - нет: https://github.com/Open-GTO/Open-GTO...es/competition
    - Античит, архитекрута и базовые защиты есть, но для реального использования не годится: https://github.com/Open-GTO/protection

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Ну и разбивать команды на отдельные файлы - в целом, сомнительная идея, ибо вместо того, чтоб открыть один файл и просто воспользоваться поиском, тебе приходится либо вручную выискивать нужный файл, либо пользоваться поиском по файлам, что не так быстро, как просто поиск по файлу (в том плане, что поиск по файлу - нажатие "Ctrl+F", в отличии от поиска по папке, где нужно папку выбирать и т.п.)
    В большинстве популярных редакторов есть поиск по всем файлам проекта, как правило - это Ctrl+Shift+F, работает очень быстро.

    ---
    Сидеть и думать как реализовать то или то, спрашивать об этом - смысла не имеет. Бери и делай, делай и переделывай, со временем ты сам поймёшь как следует всё распределять, и на своей шкуре ощутишь минусы и плюсы той или иной реализации.
    Последний раз редактировалось ziggi; 15.02.2019 в 02:44.

  6. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,885
    Репутация:
    1782 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    .pwn и .inc - это аналог .c и .h из C, такое разделение необходимо, когда два файла зависят друг от друга. Заголовочные файлы мы подключаем выше, файлы с реализацией ниже.
    Я догадывался, что корни всего этого идут из С, но это всё равно считаю не самым удобным решением для паблик-проекта. Лично мне не очень удобно постоянно переключаться между двумя файлами, чтоб найти нужную информацию или что-то изменить. Сильно внимание расфокусируется при переключении. Но это чисто субъективщина.

    Цитата Сообщение от ziggi Посмотреть сообщение
    Проблема в том, что команд админов сильно больше. Вызов wc -l *.pwn показывает, что всего строк в админских командах - 3306, тогда как в командах игроков всего 181.
    Команды игроков в любом случае, обычно, проще искать через поиск по файлу, а не вручную. Поэтому не думаю, что большой объём админских команд был бы проблемой.
    При этом, если ты, например, захочешь изменить уровень доступа к ряду админких команд или просто удостовериться, что команды распределены по уровням правильно, тебе придётся либо с поиском по файлам возиться, либо вообще открывать каждый файл отдельно и переключаться между ними.

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

    Цитата Сообщение от ziggi Посмотреть сообщение
    В большинстве популярных редакторов есть поиск по всем файлам проекта, как правило - это Ctrl+Shift+F, работает очень быстро.
    Речь о том, что всё равно придётся тратить время на то, чтоб указать путь до нужной папки. Ну или выискивать нужный файл среди результатов, когда поиск выдаст несколько совпадений. Поиск по файлу в этом плане лучше, как мне кажется.

    - - - Добавлено - - -

    Цитата Сообщение от m1n1vv Посмотреть сообщение
    На скрине архитектура мода не для паблика. В паблик-моде будет: players, vehicles, admins. Сейчас ломаю голову, как удобней поставить мускул. Или делать в файле мода, или сделать папку database и там разложить файлам регистрацию, загрузку и сохранение.
    Регистрация, загрузка и сохранение должны лежать в папке игроков же. Сам инклуд поместить в папку "lib", в которой будут лежать все сторонние инклуды.

    Некоторые вещи можешь почерпнуть для себя из статьи Ziggi. Ну и на хабре можно много полезных статей найти с правильными мыслями.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

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

    Статус
    Онлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,978
    Репутация:
    2403 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я догадывался, что корни всего этого идут из С, но это всё равно считаю не самым удобным решением для паблик-проекта. Лично мне не очень удобно постоянно переключаться между двумя файлами, чтоб найти нужную информацию или что-то изменить.
    ИМХО, не такая уж это и проблема. Когда модуль реализован, становится достаточно только его заголовочного файла для быстрой справки по функциям и константам модуля. Переключаться же между заголовком и реализацией обычно приходится, когда проектируешь или дорабатываешь сам модуль. Вполне возможно, что это неудобство с переключением (в контексте именно языка Pawn) скоро научатся устранять (а может и уже научились?) через редакторы кода - к примеру, так как это сделано в Visual Studio для C/C++: можно в файле *.h/*.hpp написать заголовок функции, а затем, не переключаясь, через меню "Быстрые действия и рефакторинг -> Создать объявление или определение" написать реализацию функции, которая сохранится в файл *.c/*.cpp.

    Мало того, разбиение на файлы заголовков и реализаций может быть незаменимо при наличии взаимных зависимостей между модулями (т.е. когда модуль A зависит от констант и/или функций из модуля B и наоборот).
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  8. #17
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,885
    Репутация:
    1782 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    ИМХО, не такая уж это и проблема. Когда модуль реализован, становится достаточно только его заголовочного файла для быстрой справки по функциям и константам модуля. Переключаться же между заголовком и реализацией обычно приходится, когда проектируешь или дорабатываешь сам модуль. Вполне возможно, что это неудобство с переключением (в контексте именно языка Pawn) скоро научатся устранять (а может и уже научились?) через редакторы кода - к примеру, так как это сделано в Visual Studio для C/C++: можно в файле *.h/*.hpp написать заголовок функции, а затем, не переключаясь, через меню "Быстрые действия и рефакторинг -> Создать объявление или определение" написать реализацию функции, которая сохранится в файл *.c/*.cpp.

    Мало того, разбиение на файлы заголовков и реализаций может быть незаменимо при наличии взаимных зависимостей между модулями (т.е. когда модуль A зависит от констант и/или функций из модуля B и наоборот).
    Так о том и речь, что сложности появлялись именно тогда, когда модуль нужно было изменить на свой лад. Паблик-моды обычно и качают для того, чтоб взять за основу и переписать на свой лад, постаравшись выдать получившийся мод за уникальный или же просто исправить то, что не нравится. Так что в данном случае, имхо, это больше неудобств создаст конечному пользователю, хоть и будет удобно автору при написании.

    UPD: А вот с полезностью при зависимости между модулями всё же соглашусь.
    Последний раз редактировалось DeimoS; 02.03.2019 в 07:27.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

  9. #18
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    479
    Репутация:
    70 ±
    А если сделать библиотеку функций? Каждая в отдельном файле.

  10. #19
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,885
    Репутация:
    1782 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    А если сделать библиотеку функций? Каждая в отдельном файле.
    Если я правильно понял вопрос, всё зависит от конкретной ситуации. Если это какие-то общие функции, которые никак конкретно не относятся ни к одной системе (например, просто вычисление каких-то входящих значений), то да, имеет смысл их поместить в отдельный файл. А если это функции, которые используются в конкретной системе, то и хранить их стоит в одном файле с системой (и изменять проще будет код, и если отключить нужно будет модуль, не нужно будет выискивать побочные файлы).

    Вообще как Ziggi уже заметил ранее, лучше просто экспериментируй и всё. Тебе никто не сможет сказать как сделать удачную архитектуру для твоего проекта. Максимум - ты можешь просто погуглить статьи на эту тему и почитать мысли других людей, к которым они пришли путём экспериментов, а после уже перенять что-то для себя.
    Связаться со мной можно в личных сообщениях этой группы

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

    Steve Pavlina

 

 
Страница 2 из 2 ПерваяПервая 12

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

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

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

Ваши права

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