GTA Builder Форум

GTA Vice City => Скриптинг => Тема начата: Sektor от Апрель 19, 2014, 08:17:35 pm

Название: Скриптинг в стиле C++
Отправлено: Sektor от Апрель 19, 2014, 08:17:35 pm
Вопрос такой, кто бы хотел писать миссии, скрипты в стиле C++? Т.е получили набор функций и сидите в блокноте пишите, сколько угодно сценариев, это не ASI (и не программирование) а лишь скриптовый функционал.
Название: Re: Скриптинг в стиле C++
Отправлено: Shagg_E от Апрель 19, 2014, 10:09:53 pm
Я пробовал в Sannybuilder скриптить по такому принципу

while true
wait 0
      if and
      04C9:    player $PLAYER_CHAR driving_flying_vehicle
      80DE:   not player $PLAYER_CHAR driving_vehicle_type #SKIMMER
      then
        while 00E1:   key_pressed 0 6
        wait 0                         
        05DF: write_memory 10@ size 2 value 0x5F virtual_protect 0
        end
      end
end

Но в итоге получалась не то каша(ведь без "jump @DRUGOIPOTOK" в больших скриптах не обойтись) не то хз что. Поэтому лично мне удобнее писать скрипты по-старинке.

Так что  :-\

P.S. Но я говорю за себя, а таким парням, как ThirteenAG это наверное бы понравилось(у него все скрипты выглядят, как показал в примере я)
Название: Re: Скриптинг в стиле C++
Отправлено: Jak łaska za praca от Апрель 20, 2014, 07:46:18 am
Автор темы хочет сделать свой компилятор?(транскриптор)
Название: Re: Скриптинг в стиле C++
Отправлено: xanser от Апрель 20, 2014, 10:53:12 am
Думаю, было бы интересно. Меня как раз все эти jump всегда бесили, какой-то скачущий код, в программировании от них учат избавляться. Лучше строить удобные, читаемые по порядку конструкции. И раз уж тут пишут asi-плагины, то логично все делать в одном стиле, в том числе и скрипты. Еще один момент, было бы удобно именно интерпретировать скрипты, как им и полагается по своему назначению, прямо по текстовым командам из файла, а не компилировать в какой-то зашифрованный формат scm, cs, когда хранишь и оригинал и "исполняемый" файл. Открыл, исправил текст и готово без всяких компиляторов.
Название: Re: Скриптинг в стиле C++
Отправлено: Sektor от Апрель 20, 2014, 03:27:09 pm
Это все хорошо, есть готовые движки, но не все по производительности классные.

Смотрим:

(http://codeplea.com/wp-content/uploads/script_time.png)


Делаем результаты:
Язык Pawn очень шустр. Остальные нам тормоза не к чему, язык pawn он си подобный и легкий в освоении, если прикрутить туда множество функций в GTA Vice City, то этого будет достаточно для разработки любых игровых сценариев и любых модификаций.

Цитировать
а не компилировать в какой-то зашифрованный формат scm, cs,


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

Вообщем надо прикручивать Pawn и набивать его функционалом, затем все привести в людской вид и выкладывать вместе с примерами, статьями, доками и описать все возможности. Далее уже видно будет.

Что-бы разработать что-то свое, тут понадобиться много времени, это дело не очень простое. Возможно в будущем что-то полностью свое можно будет реализовать, свой интерпретатор, это классная вещь, но требует огромных усилий.  Вообщем делайте выводы.
Название: Re: Скриптинг в стиле C++
Отправлено: Shagg_E от Апрель 20, 2014, 08:50:14 pm
Pawn знаю по опыту работы над SAMP сервами, язык удобный для ГТА(не случайно его выбрали для SAMPа): плюс фишечки в виде includes и т.п.

Потенциал конечно хороший: в дальнейшем такой редактор можно было бы обучить формату скриптов GTA 4 и 5, что еще сблизило бы эти серии.

Если же ориентироваться строго на Вайс - то хз хз... :-\
Название: Re: Скриптинг в стиле C++
Отправлено: Sektor от Апрель 21, 2014, 02:45:15 pm
Да вот pawn мне удалось прикрутить в ВС, выполняются функции, но есть проблема. Не вижу, из[ b]API[/b] функций в source, таких которые могут поставить на паузу, поток и возобновить. Хотел реализовать всем известный wait. Без него реально, сриптинг становится безполезным.

Вот так было бы классно, проверять условия в Pawn:

Код: C++
  1. public Mission_1() {
  2.  
  3. LoadRequestModels();
  4.  
  5. //Пример ожидания
  6.  
  7. while (true) {
  8.  
  9.     if( IsPlayerDead(PLAYER_ACTOR) == true) {
  10.         MissionFailed();
  11.         break;
  12.      } else {
  13.        
  14.        //А тут дальше делаем что угодно...
  15.       }
  16.  
  17.    Wait(0);  //А вот и нужная штука!
  18.  }
  19.  
  20.  
  21.  
  22. }
  23.  
Название: Re: Скриптинг в стиле C++
Отправлено: Shagg_E от Апрель 21, 2014, 03:06:37 pm
А вот это то, за что мне pawn не нравился в своё время, пока не привык - там вместо wait-а идет таймер.
Т.е. там, где тебе нужен wait - ставишь таймер на public:

    SetTimer("PUBLICNAME", 1000, false); - это пример секундной задержки.
Отсюда следует, что такие wait-ы будут дробить потоки на тысячи public-ов черт знает как.
Название: Re: Скриптинг в стиле C++
Отправлено: Sektor от Апрель 21, 2014, 03:16:15 pm
Либо писать свою виртуальную машину, с компилятором. Но тут нужны более менее, глубокие знания особенно в парсингах, лексекаторе и прочими алгоритмами. Дело в том что, виртуальную машину я могу разработать, я всю суть понял, там и регистрация функций программистов делается не сложно, и многопоточность тоже. Но вот я при разработке уже самого компилятора, вставал в тупик.
Название: Re: Скриптинг в стиле C++
Отправлено: Saint от Апрель 21, 2014, 08:14:03 pm
категорически против.
Название: Re: Скриптинг в стиле C++
Отправлено: Sektor от Апрель 21, 2014, 09:21:40 pm
У кого, какой выбор, но на мой взгляд, скрипты такого синтаксиса как Си, были бы классные.
Название: Re: Скриптинг в стиле C++
Отправлено: DK от Апрель 26, 2014, 12:59:17 pm
Хрень полная.
Название: Re: Скриптинг в стиле C++
Отправлено: graveman от Май 12, 2014, 06:40:14 am
У кого, какой выбор, но на мой взгляд, скрипты такого синтаксиса как Си, были бы классные.
C-подобные скрипты - это здорово. Но лучше на C прямо писать как dll, наверное. Согласен с xanser насчет jump'ов.
Название: Re: Скриптинг в стиле C++
Отправлено: xanser от Май 12, 2014, 12:20:58 pm
Вспомнилось по случаю, что где-то я видел выложенные оригинальные скрипты некоторых миссий от рокстар в стиле main.sc, не помню ссылку, может кто найдет, тоже интересный вариант, похож на си, можно реализовать.
Название: Re: Скриптинг в стиле C++
Отправлено: Sektor от Июнь 11, 2014, 01:56:02 am
Цитировать
некоторых миссий от рокстар в стиле main.sc
Ну там же в папке data. Это часть сорцов...
Название: Re: Скриптинг в стиле C++
Отправлено: Jak łaska za praca от Июнь 11, 2014, 09:48:29 am
Да вот pawn мне удалось прикрутить в ВС, выполняются функции, но есть проблема. Не вижу, из[ b]API[/b] функций в source, таких которые могут поставить на паузу, поток и возобновить. Хотел реализовать всем известный wait. Без него реально, сриптинг становится безполезным.

Вот так было бы классно, проверять условия в Pawn:

Код: C++
  1. public Mission_1() {
  2.  
  3. LoadRequestModels();
  4.  
  5. //Пример ожидания
  6.  
  7.  
  8. while (true) {
  9.  
  10.     if( IsPlayerDead(PLAYER_ACTOR) == true) {
  11.         MissionFailed();
  12.         break;
  13.      } else {
  14.        
  15.        //А тут дальше делаем что угодно...
  16.       }
  17.  
  18.    Wait(0);  //А вот и нужная штука!
  19.  }
  20.  
  21.  
  22.  
  23. }
  24.  


Павн(SourcePawn)(SourceMod) классный язык. Ерунду на нём писал, аптечки, турели (из HL2)

SourcePawn2 //С дополнительными фичами.
http://hlmod.ru/forum/showpost.php?p=81995&postcount=4 (http://hlmod.ru/forum/showpost.php?p=81995&postcount=4)
А это вроде его репозитарийhttps://hg.alliedmods.net/sourcepawn2/shortlog (https://hg.alliedmods.net/sourcepawn2/shortlog)