Как сделать?
…
Экспортируйте файл игры в текстовый документ. Смотрите через блокнот (с выключенными переносами) - вот в нем и найдете все точно по номеру строки. А так ошибки удобнее всего находить через анализатор - https://qsp.org/forum/281-analizator-koda-qsp
А код можно не бояться выкладывать, если что - если слишком длинный, то под спойлер)
Последний из Гаяр, желательно тогда сам код выложить от этой локации. Проблемы с некорректной расстановкой end достаточно часты.
mkir,
Я уже использовал анализатор, но так и не нашёл нужную строку.
Ладно. Сейчас скину сам файл.
qsp_fayl.qsp
Spoiler
if activity=22:
act 'Искать Сигита':
if pripasy=0:
msg 'Тебе необходимо еще раздобыть провиант и снаряжение'
gt $curloc
else
set uevent = rand(1,6)
if uevent=2:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Да, он в трапезной репу кидает.'
*pl 'Спасибо.'
end
end
if uevent=1:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Да, посмотри у караульной.'
*pl 'Спасибо.'
end
end
if uevent=3:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Вроде бы был у внешней стены. Не знаю, посмотри сам.'
*pl 'Спасибо.'
end
end
if uevent=4:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Нет, но может Талек знает?'
*pl 'Талек! Тааааааалек!'
*pl 'Да. Чего!?'
*pl 'Сигита видел?'
dial=rand(1,3)
if dial=1 or dial=2:
*pl 'Да. Иди на стену. Он вроде на карауле. Спроси там дозорного.'
*pl 'Спасибо.'
if dial=3:
*pl 'Нет, не видел такого.'
msg 'Ну, парень, извини. Спроси у кого нибудь другого'
jump 'dialogy'
end
end
end
if uevent=5 or uevent=6:
act 'Спросить легионера':
delact $selact
*pl 'Эй,ты видел Сигита?'
*pl 'Не, не видел.'
*pl 'Ладно.'
!jump 'dialogy'
end
end
end
end
else
act'Идти в караульную'
gt 'Караульная'
end
end
В приведенном выше коде плеер не может закрыть первый if.
Что тут не так?
Spoiler
if activity=22:
act 'Искать Сигита':
if pripasy=0:
msg 'Тебе необходимо еще раздобыть провиант и снаряжение'
gt $curloc
else
set uevent = rand(1,6)
if uevent=2:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Да, он в трапезной репу кидает.'
*pl 'Спасибо.'
end
end
if uevent=1:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Да, посмотри у караульной.'
*pl 'Спасибо.'
end
end
if uevent=3:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Вроде бы был у внешней стены. Не знаю, посмотри сам.'
*pl 'Спасибо.'
end
end
if uevent=4:
act 'Спросить легионера':
delact $selact
*pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
*pl 'Нет, но может Талек знает?'
*pl 'Талек! Тааааааалек!'
*pl 'Да. Чего!?'
*pl 'Сигита видел?'
dial=rand(1,3)
if dial=1 or dial=2:
*pl 'Да. Иди на стену. Он вроде на карауле. Спроси там дозорного.'
*pl 'Спасибо.'
if dial=3:
*pl 'Нет, не видел такого.'
msg 'Ну, парень, извини. Спроси у кого нибудь другого'
jump 'dialogy'
end
end
end
end
if uevent=5 or uevent=6:
act 'Спросить легионера':
delact $selact
*pl 'Эй,ты видел Сигита?'
*pl 'Не, не видел.'
*pl 'Ладно.'
!jump 'dialogy'
end
end
end
end
else
act'Идти в караульную':
gt 'Караульная'
end
end
Попробуй такой. Ты там еще и двоеточие пропустил.
Советую, чтобы проще было находить такие проблемы делать вот так.
Spoiler
act 'asdsa':
'lalalala'
if a > 1:
'lailailai'
end
end
Чтобы было видно, что ты открыл акт или иф. Так легче находить недостающие енды
Там можно просто ТАБ нажать и он сделает отступ. И будет линия которая будет показывать с чем связан этот иф/акт.
oleksandrigo,
Спасибо, большое!
Увидел, что один из актов не закрыл.
Можно спросить один момент?
Вот эти линии чисто графически или реально означают границы между актами и ифами, как во вложенном диалоге?
Последний из Гаяр,
Ну если ты раз десять тыкнешь таб, то поймешь, что чисто графически.
Всем здравствуйте. У меня такая беда: есть два файла qsp одной игры. Один файл редактировал я, второй - мой знакомый. В итоге у нас получились два разных файла. У меня такой вопрос: можно ли как-то сравнить содержимое двух файлов qsp? А точнее, есть ли способ залить один файл qsp поверх другого, чтобы изменения этого файла влить в другой файл qsp?
Jinn,
если вы редактировали разные локации, можно воспользоваться пунктом меню файл — присоединить игру в QGen.
Если же вы вносили изменения в одни и те же локации, нужно конвертировать qsp файлы в текстовые формата TXT2GAM, сравнить их с помощью текстового редактора, умеющего сравнивать текстовые файлы, и поправить нужные места руками. В MS word, если не ошибаюсь, есть такая штука как “объединение документов”.
Потом объединённый документ конвертируем обратно из TXT2GAM в формат qsp.
Не забывайте сохранять резервные копии файлов.
Огромное спасибо за помощь. Мы редактировали одну и ту же игру только независимо друг от друга. Теперь же свои усилия решили объединить. А вот как объединить изменения не знали. Теперь знаем. Спасибо, ещё раз!
Столкнулся с такой ситуацией:
Вводятся действия в зависимости от случайно добавленного врага в бой. действия разные и зависят от стихий врага, которые, кстати, тоже случайны(и каждая с своим приоритетом). чтобы узнать, что игрок выберет, использую
IF INSTR(1, $SELACT, 'Пойти')
Однако, поскольку это команда вывода того акта, что выберет игрок, мне нужно сделать так, чтобы заранее считало из добавленных актов приоритет(для более понятности назовем его повреждением) и был верный тот, который максимальный. Добавление актов сделано так: генерируется персонаж и к нему случайно добавляется случайное количество стихий разных. основной персонаж так же с разными стихиями на разных этапах игры. Поэтому проверяются те стихии, которые есть у игрока и из проверки добавляется акт пустой. Когда всё обработано, количество жизней с учетом способностей поставлены, тогда и ставлю команду, что выше писал.
Как мне сделать так, чтобы добавляемые акты до выбора были посчитаны уже заранее и игроку только нужно было выбрать правильный ответ?
Очень всё запутано. :D
Есть прекрасная локация — обработчик выбора действия. Туда можно внести код, который надо выполнять при всяком выборе действия.
Не понятно, что значит “акты посчитаны” :) , аткы — это всего лишь кусочки кода, выполняемые в момент нажатия игроком на кнопку. Что именно ты считаешь? Параметры? Которые используются внутри действий? И в каждом действии используется свой набор параметров? Есть замечательный оператор dynamic:
! считаем подставляемые параметры
огонь = макс_огонь/штраф_огонь + бонус_огонь
удар = 15
! генерируем действие с посчитанными параметрами
dynamic "
act 'Ударить':
огненный_ущерб=<<огонь>>
дробящий_ущерб=<<удар>>
ущерб = (огненный_ущерб + дробящий_ущерб)/<<защита>>
здоровье = здоровье-ущерб
end
"
вовововово! спасиб добрый человек! при беглом изучении справки как раз таки и искал подобное dynamic, но, видимо, плохо смотрел. Оч помогло и спасло)))))
В последнее время на меня навалилась огромная куча проблем, одна из которых вот:
Хочу сделать вот такую последовательность (здесь пока псевдокод):
если $user_text = 'help':
написать то-то и то-то
конец
если $user_text = 'file':
сделать вот это и вот это
конец
если $user_text не равно 'help' и не равно 'file':
написать "Ошибка ввода"
конец
Сделать так, как хочется на псевдокоде не получается. Я попробовал так:
Вариант первый. Поставить no после знака “равно”
Код, который написан от строки “if $user_text = no ‘help’” и до “end” просто не воспринимается. Его не видно.
Варианты 2 и 3. Написать просто no или написать no перед знаком “равно”
2 вариант: ошибка синтаксиса, 3 вариант: несоответсвие типов данных
Возможно, искать нужно вообще не здесь, а пытаться выполнить желаемое другим подходом… Мозги кипят.
Надеюсь на вашу помощь и совет.
С уважением,
Д_М
if $user_text!’help’ and не равно $user_text!’file’ не работает?
или
if $user_text<>’help’ and не равно $user_text<>’file’
Давно не прогала на куспе, забыла уже ))