Как сделать?
…
dmvikar,
отключить локацию-счётчик можно так:
$counter=""
Можно назначать разные локации-счётчики в разные моменты игры. Многие об этом забывают, но это один из способов разгружать локацию-счётчик от огромного количества кода.
oleksandrigo,
у меня на плеере от Сидхарты msecscount вообще нули выдаёт. :/
Задался я вопросом, как в локацию menu передавать значения кроме args[0].
Сделал я это через промежуточные переменные. Там, где нужно меню пишем примерно
"<a href='exec:dynamic $act_code[""code""],<<i>>,1'><img src='pic\pic.png'></a>"
и где-то раньше должно быть
$act_code['сode']={
a=args[0]
b=args[1]
menu '$menu'
}
Так мы можем использовать значения переменных a и b в локации menu.
Aleks Versus,
Сорян, если я тут изобрел велосипед, но такой инфы я не нашел в видеоуроках и ЧаВо.
Здравствуйте!
- Спасибо @Aleks Versus, что перезалил видео по урокам на QSP очень дословно каждую функцию объяснил 2. Я хочу переписать некоторые игры, которые мне понравились. И вот у меня вопрос: Вот, скажем, на ферме разводят животных. Ну, или аквариум с рыбками. У них есть поколения. Я хочу отслеживать “глубину родства”, чтобы не пересекать братьев и сестер или чтобы дети не пересекались с родителями. Например, в игре Sims игра следит до 3 поколений, чтобы брат мог жениться на сестре. Достаточно ли будет в QSP метки=1, что животные являются “родственниками”?
Poganec37,
Тут нужно придумать алгоритм для начала.
С наскока на ум приходит следующее: каждого нпс записываешь как npc[id]. Каждому ребенку присваиваешь свойства мама, папа, значения которых будут равны id родителя, типа mama[id] (тут id ребенка) = id от нпс мамы.
Так же можно передавать значения на следующие поколения, например в третье поколение;
id+=1/это будет id нового ребенка,
mama1[id]=mama[id]/тут превращаем маму текущего родителя в бабушку текущего ребенка.
Соответственно, сколь угодно глубоко можешь прослеживать родословную, а при скрещивании делать проверку на совпадение значения переменных.
Надеюсь, что понятно).
Здравствуйте. Вот, разобрался я как сделать массивы и с ними работать. Правда, Алексей (Aleks Versus) очень отрицательно отзывался по поводу использования gosub.
Имею некоторые вопросы по разработке. Вот мы положили в рюкзак много разных предметов. Предположим, что у нас в рюкзаке более 10 книг. Как написать, чтобы в списке показывалось типа “книга х10”. В уроках не нашел, где объясняют свёртку.
Есть ещё 1 момент, который я не понимаю в qsp. Если взять разработку игры на несколько сезонов про одного персонажа, то как перенести характеристики или события из одной части в другую? Я понимаю, что типа надо сохранять переменные и потом перенести их в файл, или типа того. Объясните, пожалуйста, принцип такого переноса.
Спасибо
Poganec37:
Правда, Алексей (Aleks Versus) очень отрицательно отзывался по поводу использования gosub
нет, неправда. :D Я никогда не отзывался отрицательно по поводу использования gosub. Повсеместно их использую.
Считаемые предметы реализуются очень просто.
При добавлении предмета нужно проверять, сколько их у тебя уже есть. Для этого количество нужно хранить в переменной:
act "Поднять меч":
! проверяем есть ли мечи
if меч_количество = 0:
! если мечей нет, добавляем меч в инвентарь
addobj "Меч"
end
! увеличиваем количество мечей на 1
меч_количество = меч_количество+1
end
Чтобы в окне предметов отображалось число предметов, нужно вместо простого названия (”Меч”) добавлять название с количеством (”Меч х1” или “Меч х2” и т.д.), а старое название удалять. Тот же пример:
act "Поднять меч":
! удаляем старый предмет
delobj "Меч х<<меч_количество>>"
! увеличиваем количество мечей на 1
меч_количество = меч_количество+1
! добавляем новый предмет
addobj "Меч х<<меч_количество>>"
end
По второму вопросу. В обеих частях игры для одних и тех же характеристик используй одинаковые переменные. В самом начале обеих игр пропиши строку:
debug=1
Тогда сохранения из первой части (файл .sav) можно будет использовать во второй.
Кстати. Вот здесь https://yadi.sk/d/VSgApaEy3Jx9VC я сейчас навожу порядок, и тут есть очень много разных примеров, и они ещё будут добавляться и корректироваться.
За ответ спасибо. По поводу переноса из старых частей в новую, хорошо было бы показать ролик.
Мне не в лом, но не люблю лазить в чужих работах и исходниках. Никогда ничего не понятно.
Poganec37,
Ужешь отвечали на этот вопрос несколько страниц назад.
Poganec37,
я стараюсь весь код примеров подробно комментировать. Но по поводу переноса данных из одной игры в другую: примеров действительно нет.
Насчёт видео: помечу, но когда до этого дойду, не знаю. Пока ролики на пол года вперёд расписаны, не до всего задуманного руки доходят.
Привет! Какая максимальная длина текстовой переменной? В этой теме четыре-пять страниц назад был совет делать игровой заполняемыый дневник по типу $jour+=$stroke - но что если эта заполняемость потенциально может быть бесконечной? например если будет автоматически заполняться при прошествии каждого игрового дня $stroke = ‘День <<day>>’
mkir,
для каждого дня сделай массив $jour[день].
Из вики - Длина строки теоретически ограничена только объемом доступной оперативной памяти, либо размером типа “int”: 2 гигабайта текста. Не знаю о чем тут, о строке кода или о вместимости переменной.
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, остальное изучаю
mkir,
при использовании массивов ты и будешь видеть весь текст, если тебе это нужно. Более того. Если делить записи на два массива, скажем, можно сделать вывод текста от определённой даты до определённой даты, сортировать записи и прочее. Это конечно несколько сложнее сделать, но если использовать одну строку текста для всех записей, то подобные вещи провернуть будет ещё сложнее. А я бьюсь об заклад, они тебе понадобятся.