Как вы наверное помните, в январе этого года, я создал небольшой опрос - что вам удобнее - виртуальная машина из кваки (пускай и сильно доработанная) или же обычные дллки как в half-life.
Тогда большинство проголосовало за обычные дллки, и я их прикрутил.
Но виртуальную машину не стал выбрасывать (на ней меню работало),
на данный момент я перенес меню в движок и надобность в виртуальной машине отпала окончательно. Однакож выбрасывать её совершенно, как-то жалко что ли. У меня есть мысль как-то прикрутить её к серверу, и дать возможность писать на ней простенькие энтити.
С другой стороны - это только лишнее усложнение системы, на мой взгляд.
Вообщем я долго размышлял над этим вопросом и так и не пришел к какому-либо решению.
Поэтому снова обращаюсь к вам за советом: если VM нужна - предложите механизмы её имплементации.
Сразу предупреждаю - херню в стиле "прикрути её к серверу" писать не надо. Механизм интеракции распишите в деталях и в нескольких словах
о вазимодействии entvars игровой библиотеки с entvars виртуальной машины. Уже хотя бы потому что, что виртуальная машина не понимает указатели в прямом их написании, следовательно там юнионов надо будет понасажать, хитрых конверторов указателя в номер энтити и прочего.
Поэтому, повторюсь, писать строго по делу.
BUzer да дело-то не в мощности. Мне бы пример какой-нибудь - как оно в совокупности пригодится. Ну вот есть у нас hl.dll, который может исполнять скрипты виртуальной машины - где такое счастье может понадобится?
Если, скажем, просто вводные настройки монстров\оружия поменять, так для этого виртуальной машины не надо.
Может эвенты, как в халфе? там помнится был код с условиями.
Дядя Миша свою xash weapon system перетащи на эту виртуальную машину. Или использовать скрипты, к примеру, для построения сложных скриптовых сцен, с ветвистыми диалогами и неоднозначным развитием событий ?
__________________
кто к нам с чем зачем, тот от того и того...
SanYa я думал об этом.
Но опять же - народ толком не может простенькие скрипты освоить, из старой версии.
Мысль такая, что машину следует использовать для выполнения множества маленьких интерпретируемых скриптов (точнее говоря их компиляция будет производится на этапе запуска движка).
Кстати хотелось бы послушать Ксерокса, как у него в волатиле уживаются дллка с Lua. Про общую идеолгию тасказать.
Точно, ведь SanYa дельную вещь сказал - скриптовый язык можно использовать для маппинга. Например, встроить редактор скриптов прямо в редактор уровней. В варкрафте-3 примерно так и сделано - начинающие мапмейкеры могут собирать триггеры из заготовок, а продвинутые могут изучить скриптовый язык и творить всякие мощные штуки.
Подумалось: было бы неплохо иметь возможность писать свои ентити на qc и докидывать их вместе с картой. Допустим, захотелось маперу сделать паровоз - колесо-то соберет, а вот рычаг от поршня до обода уже нет, надо свой код писать. Ну создал porshen.qc, накодил там func_porshen, скомпилил в porshen.dat и пользует его, держа в папочке scripts, а дивг эту папочку смотрит на предмет лежащих там минипрогсов - это могло бы решить проблемы модеров с закрытостью кода некоторых модов.
ДЛЯ ТУПЫХ: Так можно было бы сделать партикли в контре.
Scrama ну так для этих целей и можно взять луа. Зачем заставлять людей мучиться с куси? Даже я в нем ни бум-бум, а что говорить про новое поколение, которое выросло на хл2 и ждалкере?
Да хватит уже - ни бум бум он. В ксаше куси НИЧЕМ по внешнему виду не отличается от языка Си. Ну разве что ограниченной поддержкой настоящих указателей. (ненастоящие указатели это энтити).
Дядя Миша так я ничего не пробовал делать на куси.
Я помню только, что там аргументы идут до имени функции, меня это в такой шок повергло, что я даже не стал в этом куси ковыряться.
XaeroX точка указывает на принадлежность к entvars_t Scrama сделать можно, но исключительно как некий энтмод для конкретной карты. Т.е. основные энтити один фиг останутся в дллке, а если что-то не будет найдено, то возъмется из progs.dat.
Правда при такой системе не вполне ясно как использовать все плюшки. предоставляемые server.dll - ну тот же Movewith к примеру.
Можно конечно movewith вынести в движок, но тогда народ будет страдать, что вся физика в движке закрыта.