%count% причин не писать скрипты в SA:MP
Предисловие: На одном известном, школьном форуме у модератора жутко сгорело с этой темы и он её удалил. Надеюсь тут народ будет адекватнее.
Название %count% указывает на множество, которое может быть изменено в зависимости от выпущенных багов фиксов в самом клиенте SA-MP.
Фактически, в данной теме мы будем сравнивать несколько мультиплееров:
San Andreas Multi Player: http://sa-mp.com/
Multi Theft Auto: http://mtasa.com/
Just Cause 2 Multi Player: http://jc-mp.com/
Mafia 2 Multi Player: http://m2-multiplayer.com/
IV-Network: https://github.com/IV-Network/IV-Network
Каждый из вышеперечисленных мультиплееров обладает своими уникальными фитчами, но мы займемся мультиплеером SA-MP.
Как извесно у SA-MP много проблем как на уровне самого клиента, так и на уровне скриптинга.
Основные проблемы
Проблема №1: Как по мне, главная проблема это наличие Античита. В SA-MP античит на уровне мультиплеера отсутствует наглухо. Когда в Mult Theft Auto свой самописный античит, а в JC2MP используется VAC. Данная проблема присутствует и у остальных мультиплееров из нашего списка.
Проблема №2: Полное отсутствие клиентской части в SA-MP. Клиентская часть в SA-MP отсутствует, поэтому все графические работы идут через сервер, а не загружается на клиент. Во всех остальных мультиплеерах клиентская часть присутствует. Поэтому в SAMP подгрузить картинку клиенту или облегчить работу серверу практически невозможно.
Проблема №3: Проблема доступа к исходному коду. Возможно, в SA-MP было бы меньше проблем, если бы SAMP Team открыли некоторые модули исходного кода, что бы сообщество помогало в исправлении ошибок. Но открытый код присутствует только у двух мультиплееров MTA SA (кроме net-модуля) и IV-Network (полностью).
Проблема №4: Front-end. В SAMP на весь дизайн, который будет виден игроку отведены всего лишь пара диалоговых окон и функции для рисования TextDraw. Во всех остальных мультиплеерах для диалоговых окон присутствует библиотека CEGUI. Да и еще поддержка некоторых графических функций dx (В МТА, например, присутствует поддержка шейдеров).
Проблема №5: Бан. В SA-MP игрока можно забанить только по ip-адресу или же по самописной системе аккаунтов, бан по айпишнику может привести к плохим последствиям у некоторых провайдеров в РФ. JC2MP же использует VAC, а MTA бан по серийному номеру (возможно, его можно сменить, будучи программистом-айтишником, покопавшись пару дней в дизасме, но будучи обычным игроком это практически невозможно).
Проблемы написания скриптов
Проблема №1: Скриптинговый язык программирования. В SAMP используется подозрительный язык pawn (В Source/Gold Source используется SourcePawn, который немного отличается). Данный язык является зажатым и не гибким плюс ко всему в нем отсутствует поддержка классов и структур. Да и цель языка Pawn была совсем другая.
Остальные мультиплееры используют более специализированные ЯП. Такие как Lua или Squirrel.
Проблема №2: Модульность. У сервера SAMP плохая модульность. Нельзя разбить 1 гейммод на несколько ресурсов, чтоб было удобнее работать в большой команде. Да и видимость переменных в фильтрскриптах хромает.
Проблема №3: Малое количество библиотек. Например, было бы удобнее в координатах, rgba цветах, позициях камер использовать вектора, а не отдельно взятые числа, подход к векторам используется в JC2MP.
Проблема №4: Как я повторялся выше, отсутствие классов и структур. Процедурное программирование не всегда приводит к чему то полезному, тут я воспользуюсь цитатой известного программиста:
«Если не выходить за границу «объектно-ориентированных» методов, чтобы остаться в рамках «хорошего программирования и проектирования», то в итоге обязательно получается нечто, по большей части не имеющее смысла.»
ООП используется в MTA, JC2MP, IV-Network.
На данный момент это все, что я знаю или помню. Если вы хотите что-то дополнить, пишите это в комментариях.
В заключении хочу сказать, что я перечислил только самые глобальные проблемы, мелкие утечки памяти, странно-консервативное сообщество и прочее я не брал в этот список.
С наилучшими пожеланиями, Disinterpreter.
http://i.creativecommons.org/l/by/3.0/88x31.png