LINUXTALKS.CO

Помогите выбрать язык для пользовательских сценариев или надёжный метод изоляции двоичного кода.

 , , , ,

L


0

1

Обдумываю идею одной игры и хочу сразу в начале разработки предусмотреть хороший интерфейс для пользовательских модификаций. Разрабатываю на gambas. Нюанс в том, что модификациям понадобится работать на разделяемых серверах. Сначала я думал использовать тот же gambas, но перед трансляцией и подключением модуля, проверять его на наличие вызовов определённых функций и объектов. Типа что бы не мог произвольно открывать сокеты и писать файлы за пределами специльного каталога, а так же не пытался делать системные вызовы и дергать что либо. Но понял что можно всякими хитростями обмануть простой парсер или в процессе выполнения сгенерировать нужный скрипт и спровоцировать его запуск. На docker и fakechroot надежды мало, подозреваю что в них дыр много. Читал про lua, но не понял как его подключить к gambas, да и кажется это всё извращением.

В идеале нужна надёжная песочница, внутрь которой передаётся файл используемый через функцию mmap, с игровой картой и стандартный ввод-вывод, для передачи отдельных сообщений и синхронизации «тиков». Нужно что бы из песочницы нельзя было выбраться и даже постучать в сеть, а все процессы в ней имеют пониженный приоритет. Слышал про виртуальные машины, но и слышал про падение производительности.

Сойдёт и какой нибудь скриптовый язык с функциями типа JIT (производительность важна). Но как такому языку передать общую память, не имею представлений.

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

Была ещё мысль разработать собственный ЯП, но не хочу этим заниматься. Да и мододелы не оценят.

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

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

★★★★★★

Читал про lua, но не понял как его подключить к gambas, да и кажется это всё извращением.

Gambas не умеет в FFI? Если есть возможность дёргать сишные интерфейсы, то луа подключается на ура.

В идеале нужна надёжная песочница, внутрь которой передаётся файл используемый через функцию mmap, с игровой картой и стандартный ввод-вывод, для передачи отдельных сообщений и синхронизации «тиков».

Определяешь интерфейсы для API модов, всё остальное запрещаешь. В скрипте будет доступно только то, что ты туда прокинешь.

cocucka    
★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от cocucka

Gambas не умеет в FFI? Если есть возможность дёргать сишные интерфейсы, то луа подключается на ура.

Вроде умеет, через функции https://gambaswiki.org/wiki/cat/externfunc но я в C не разбираюсь. А как внутрь что то пробрасывать, так это вообще тёмный лес для меня.

rezedent12    
★★★★★★
Windows / Firefox

В идеале нужна надёжная песочница, внутрь которой передаётся файл

Тут у меня есть вот какое соображение, а что если тебе распределить игру по нескольким компам?
Эта мысль у меня происходит от того, что современные игры зашли в тупик и как мне видится из-за того, что у любого отдельного компьютера будет недостаточно ресурсов для реализации по настоящему новых сюжетных идей.

Что если добавить неписям интелекта и сделать по настоящему живой мир, в котором вместо заскриптованного сюжета будут самостоятельные действия неписей?

torvn77    
★★★
Android / Chrome
Ответ на: комментарий от rezedent12

Ну я бы не стал пердолиться с биндингами к lua напрямую с обмазыванием EXTERNами. Вместо этого я б сделал обёртку на C с простым интерфейсом и вызывал бы скриптовый движок через неё. С mmap пришлось бы повозиться.

cocucka    
★★★★★★★★★★★
Linux / Firefox
Ответ на: комментарий от torvn77

Если мыслить концептуально, то главной проблемой сюжетных игр я вижу «статичный сеттинг», в нём просто придумывать истории и предыстории, но у него есть ограничения на выражение модернисткой парадигмы мировосприятия.

У меня есть идеи для сюжета. Заканчивается галактическая гражданская война, однако спящий космический корабль запущенный незадолго до её начала, по причине поломки застревает на орбите планеты, колонизация которой была прервана из за начала галактической гражданской войны. Поэтому местное население не будучи обеспеченным поставками, за исключением одного города перешло в примитивный образ жизни. Дикари в полной мере не являются именно дикарями, поскольку владеют такими технологиями как кипячение воды и производство стали, но являются скорее анархо-примитивистами. Городом же управляет корпорация которая для удержания населения в подчинении, враждует с дикарями, а точнее провоцирует вражду дикарей против «городских», заодно рассказывая «городским» какие там все нехорошие в том числе каннибалы. При этом через сеть факторий и партнёров, «город» торгует с племенами своей продукцией получая всякие товары. С прилётом космического корабля правлению города попадает известие о завершении гражданской войны и прибытию флота нового правительства для установления нового порядка, что означает ликвидацию корпорации и завершение процедуры полноценной колонизации. А так же предложение от некого «брокера» продать всё что есть ценного на планете и войти в его флот. «Продать всё что есть ценного» - подразумевает в том числе автоматическую добычу и переработку всего органического с планеты включая население. Траектория брокера пролегает близко. Правление корпорации принимает решение продать планету пока они могут её как то контролировать.

Персонажей игрока аварийно высаживают на планету, но они продолжают поддерживать связь с находящимся на её орбите кораблём. Тем временем из за почты доставленной кораблём, на планете просыпаются секретные бункеры и схроны с оружием, оборудованием и прочим. Персонаж игрока имеет некоторую фору в получении информации о открытии бункеров, но другие к ним прибывают тоже быстро. Поэтому есть выбор, разграбить и уничтожить остатки, оборонять и получить всё полностью, взять под контроль, договорится с союзниками что бы они взяли под контроль, игнорировать. От того чьи силы раньше прибывают к бункерам и что успевают делать, зависит изменение технологического уровня фракций и баланс в гонке. Так называемый «брокер» готов начинать процесс покупки планеты, только после того как на ней будет построена соответствующая инфраструктура (башни). На базе бункеров их строить дёшево, строить с нуля дорого.

Таким образом задачей игрока становится спасение планеты, спасение себя отдельно или же продажа планеты, самостоятельно или в присоединении к корпорации. Технически игрок может даже сам не сражаться, а выбирать союзников которым передавать информацию. Поселения фракций в каждую игру расположены по разным координатам, как и бункеры. Поэтому невозможно будет всегда успеть самому или успевать предупреждать только тех кто тебе нравится. После того как критическая часть бункеров вскрыта и освоена, последует стадия масштабной войны. Которая при явном дисбалансе почти сразу закончится капитуляцией слабых сторон, либо станет затяжной. Технически, персонажи игрока могут за условные игровые 80 лет дождаться экспедиционного флота нового порядка.

Это наброски идеи сюжета. Хотелось бы избавится от банального шаблона «злой корпорации».

rezedent12    
★★★★★★
Windows / Firefox
Ответ на: комментарий от rezedent12

Так называемый «брокер» готов начинать процесс покупки планеты, только после того как на ней будет построена соответствующая инфраструктура (башни).

Обычная стратегия с кучей видеовставок отвлекающих от собственно стратегической игры.

Тебе бы вот всю эту хрень выкинуть и просто сделать мир сконцентрировав свои силы не на создании хренотени, а на развитии стоящей за каждым npc математическим концептом.
А идеале форум игры должен быть заполнен обсуждением тех или иных алгоритмов оптимизации, кластеризации, классификации, атракторов и пр. тяжеловесной математики с реализацией её в том или ином коде.

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

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 1)

Android / Chrome
Ответ на: комментарий от torvn77

Что если добавить неписям интелекта и сделать по настоящему живой мир, в котором вместо заскриптованного сюжета будут самостоятельные действия неписей?

То получится Stalker. А уж в его неофициальных модах это реально развили. Там неписи сами перемещаются по миру, закупаются, тратятся и так далее.

JamesHolden    
★★★★★★★
Linux / Chrome
Ответ на: комментарий от JamesHolden

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

torvn77    
★★★
Linux / Chrome
Ответ на: комментарий от rezedent12

У меня всё равно сейчас сил и денег ни на что толком не хватает.

Может тебе стоит реализовать только серверную часть игры и командную часть клиента, а контент, включая модели, озвучку и квесты пусть делают себе игроки сами?

Ну а чтобы было удобнее делиться научить клиент взаимо действовать через rtorrent или иной p2p консольный клиент?

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 2)

Android / Chrome