RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2426498 views

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

Poganec37,
Ужешь отвечали на этот вопрос несколько страниц назад.

Aleks Versus Moderator 07.07.2020 15:18 (5 years ago)

Poganec37,
я стараюсь весь код примеров подробно комментировать. Но по поводу переноса данных из одной игры в другую: примеров действительно нет.

Насчёт видео: помечу, но когда до этого дойду, не знаю. Пока ролики на пол года вперёд расписаны, не до всего задуманного руки доходят.

Привет! Какая максимальная длина текстовой переменной? В этой теме четыре-пять страниц назад был совет делать игровой заполняемыый дневник по типу $jour+=$stroke - но что если эта заполняемость потенциально может быть бесконечной? например если будет автоматически заполняться при прошествии каждого игрового дня $stroke = ‘День <<day>>’

mkir,
для каждого дня сделай массив $jour[день].
Из вики - Длина строки теоретически ограничена только объемом доступной оперативной памяти, либо размером типа “int”: 2 гигабайта текста. Не знаю о чем тут, о строке кода или о вместимости переменной.

Aleks Versus Moderator 25.08.2020 07:01 (5 years ago)

mkir,
2 Гигабайта максимальная вместимость. Однако, совет от Alma Wade и от меня: лучше помещать каждую отдельную запись в массив. Так и выводить удобнее и удалять записи, в случае чего. Привожу пример из F.A.Q., как можно реализовать блокнот:

Spoiler

В: Как сделать записную книжку в игре?
То есть чтобы игрок мог делать записи, а когда нужно, мог их просматривать.

О:
Хранить записи для записной книжки можно в массиве, саму же записную книжку можно сделать в виде предмета:

addobj "Записная книжка"

Работу с предметом “Записная книжка” удобнее всего организовать через всплывающее меню. Для всплывающего меню создаём две локации. Назовём их, например, “note.add” и “note.read”. Первая будет служить для добавления записи в записную книжку, вторая — для воспроизведения записей из записной книжки.
Код локации “note.add” достаточно прост:

! предлагаем пользователю добавить запись
  new_note=input('Введите текст записи.')
  ! если введён какой-либо текст, добавляем его в очередную ячейку массива note[]
  if new_note<>'':
   note[]=new_note
  end
  ! для верности удаляем пременную
  killvar 'new_note'

Код локации “note.read”:

! очищаем окно доп описания
  clr
  ! счётчик
  i=0
  :for 
  ! пока счётчик не достиг размера массива note
  if i<arrsize('$note'):
   ! выводим запись
   pl $note[i]
   ! повторяем
   i+=1
   jump 'for'
  end

Непосредственно при добавлении предмета, либо где-то ранее, прописываем пункты меню для записной книжки в массив:

$меню_записная_книжка[0]="Добавить запись:note.add"
  $меню_записная_книжка[1]="Прочитать записи:note.read"

На локации-обработчике выделения предмета добавляем такой код:

! если выделен предмет "Записная книжка"
  if $selobj='Записная книжка':
   ! вызываем меню
   menu '$меню_записная_книжка'
  end
  ! не забываем снять выделение в конце локации
  unselect

Вот и всё. Теперь у нас есть предмет “Записная книжка”, щелчок по которому вызовет всплывающее меню с двумя пунктами “Добавить запись” и “Прочитать записи”.

думаю, не сложно превратить в дневник.
Вместимость массива более 2,5 миллиардов записей (ячеек). На очень много лет игры хватит такого массива.

Не, получится что-то другое. Теоретически хотелось бы при активации дневника видеть весь текст: clr&pl’@jour’ со скроллингом в самый конец если текста будет слишком много. Обозначение дня автоматическое, а другие записи ставятся вручную. Тем самым видно в какой день и что произошло. По поводу лимитов - да, я тоже видел этот перечень ограничений, но вроде как здесь именно про строку говорится а не про длину переменной(

Upd. Это ответ Dmvikar, остальное изучаю

Aleks Versus Moderator 25.08.2020 07:26 (5 years ago)

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

Dark[Ol(U23)leneri] #34 26.08.2020 06:14 (5 years ago)

Если кому-то проще писать текст и оставлять, чтобы за него кодили - пишите, с радостью помогу.

Возможно ли каким то образом получить обратную связь от файлов контента?
например открыть файл вида “действие_1_1.jpg” если такой файл отсутствует открыть файл “действие_1.jpg” если и его нет то “действие.jpg”
может какой-то внешний скрипт есть для этого… или еще что-то

lom,
Ты хочешь вывести картинку или вообще любой файл?

.jpg .png .webm все будет, смысл именно в том как запустить проверку на наличие файла и возвратить её результат (да/нет)

Так, давай уточним, что именно ты хочешь:
1. Чтобы проверялось наличие файла во время выполнения, т.е. игра доходит до такой-то точки, дальше смотрит, есть ли оно по указанному пути и что-то с этим делает;
2. Полный анализ кода внешней утилитой
И непременно напиши, зачем тебе это нужно. Это важно, и поможет нам улучшить QSP.

Да я думал унифицировать код игры и отвязать его от конкретных графический файлов.
к примеру в любом месте кода при выводе картинки/видео я бы вставлял некоторую подпрограмму вывода через $func
которая бы проверяла файлы и возвращала путь к найденному файлу по заданным приоритетам.

например все файлы контента имеют специфическую запись имен файлов (действие_парам1_парам2_парам3_…_.jpg(.webm))
dialog_black_dl.webm - !ГГ разговаривает с девушкой с длинными черными волосами
если такого файла нет проверяем есть ли файл dialog_black_dl.jpg потом dialog_black.webm и так далее вплоть до dialog.jpg
фрагменты имени файла планується подавать из массивов к примеру
$args[0]=$cont[npc+’deistv’]
$args[0]+=$cont[npc+’_color’]
….
и так далее

например if files’$args[0]’ = -1: jamp ‘start’ else $result = $args[0]
где files новая команда которая возвращает -1 при отсутствии файла а $args[0] содержит путь к файлу

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

Что же это даст.
1. Это позволит создавать игры с рандомным заселением НПС уникальным при каждом запуске игры, разная внешность у каждой роли.
Такой подход может сделать игры с большим количеством контента более интересными для повторного прохождения.
2. это позволит в процессе разработки увеличивать разнообразие контента без необходимости изменения кода. Так для полноценной работы программы достаточно будет сделать набор файлов по умолчанию вида dialog.jpg который будет выводится при общений с любым НПС, и уже потом добавлять контент.

и может дать еще какие-то возможности о которых я пока не додумался, так как я спрашивал у другого программиста он тоже сказал что в самом qsp такой команды нет, и он тоже от этого немного страдает )))

сейчас начал новый проект под quest navigator, но и в классике функция могла бы быть полезным, если бы кто то смог добавить подобную функцию в интерпретаторы (плееры) с необходимыми dll было-бы очень круто

Log in or Register to post comments.