Форум » » Вопросы » Ответить

Вопросы

Seregatlt: Предлагаю тут задавать свои вопросы, и мой первый можно ли как то создать ехе файл чтоб играть без плеера?

Ответов - 440, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 All

Byte: Seregatlt, как вариант - самораспаковывающийся архив WinRAR.

Byte: Пример: http://slil.ru/26084003 (игра "Мировое сознание: 13й уровень")

Seregatlt: спасибо, а как так сделать? Просто создать sfx архив


Byte: Пошаговая инструкция (необходим установленный WinRAR, желательно 3.70 или выше): 1) Копируем файлы игры в папку с плеером. 2) Переименовываем запускаемый файл в "auto.gam" (в версии QSP 5.5 и выше - "auto.qsp"). 3) Выделяем все файлы + папки игры и плеера (лучше с файлом конфигурации "qspgui.cfg"), жмём правую кнопку и выбираем "Добавить в архив...". 4) В появившемся окошке выбираем формат архива - "RAR", метод сжатия - "Максимальный" и, указав имя архива, ставим галочку "Создать SFX-архив". 5) Переключаемся на вкладку "Дополнительно", жмём кнопку "Параметры SFX...". 6) На первой открывшейся вкладке в поле "Выполнить после распаковки" вводим строчку "qspgui.exe". 7) Переключаемся на вкладку "Режимы" и устанавливаем галочку "Распаковать во временную папку". В поле "Режим вывода информации" выбираем "Скрыть всё" и в поле "Режим перезаписи" - "Перезаписывать все файлы без запроса". 8) Переключаемся на вкладку "Текст и графика" и выбираем иконку для SFX-архива. 9) Жмём "OK" и создаём архив.

Korwin: В FAQ!!! Обязательно!!! Или/и в помощь!!!

qqq: на форуме http://urq.borda.ru/ в теме "живой игровой мир" Nex упомянул, что на qsp уже давно написаны генераторы лабиринтов. в связи с чем возникают два вопроса: 1. где их можно найти? 2. в архиве старых примеров нарыл некий labirint, в котором не работает команда cmd на что её исправить, что бы пример заработал c последним новым qsp-плеером? м-да, раскрутка и организация дела у qsp-шников на уровне! уважаю! спасибо за вклад в дело развития русскоязычной интерактивной литературы! надеюсь, urq-шники сумеют вас каким-нибудь чудом обогнать

noname: о! вспомнил свой пароль...

Byte: noname, когда-то примеры генерации лабиринтов выкладывались на сайте, но старый сайт был удалён вместе со всей информацией.. Где сейчас найти те файлы - не знаю. Может, у кого-то завалялись :) Все приличные примеры генерации лабиринтов оператор CMD не использовали. Можешь попробовать удалить все строчки с ним.

noname: Byte там можно было ввести фразу 'показать карту' что бы увидеть её целиком а не по одной локации cmd использовался как раз для получения ввода впрочем, не проблема переделать этот пример для просмотра карты сразу без всяких фраз. если у кого завалялись старые генераторы лабиринтов на QSP- буду рад увидеть их выложенными на здешнем сайте!

Nex: noname посмотри игру "Серафим".

Byte: noname, вышли мне этот labirint.gam? если это тот пример, что я думаю - обновлю и выложу его в каталоге..

noname: текущие результаты моего поиска: 1. в генерации лабиринтов в Серафиме толком не разобрался. по ходу там нечто примитивное типа вариации на тему рассстановки случайных объектов на поле. как делаются 'пятна' стен в подземелье пока не понял, но есть подозрение, что они заранее прописаны в тексте игры. авторам спасибо за открытый код и интересные находки программинга. к сожалению, за время своего отсутствия поотвык от QSP и теперь врубаться в язык приходится практически заново. буду рад любой помощи. 2. обнаружил, что на текущий момет на QSP нет хорошего генератора лабиринтов. к конкурсу наверняка кто-нибудь его напишет. буду ли писать его я- пока не знаю. 3. labirint.gam находится в qsp300demos.zip среди других примеров файлов на вашем сайте. в комментариях архив описан как куча старых демок для QSP (их там более 30-ти). генератора лабиринта в этом labirint.gam нет. заранее заданная карта. архив довольно 'лёгок'- 59кб Byte, твоего мыла я не знаю. 4. о вкусах не спорят, но ИМХО мой алгоритм генерации лабиринта достоин того, чтоб его воплотить на QSP. по поводу авторских прав: a) уверен, что алгоритм был придуман уже давно и не мной первым б) считаю абсолютно необходимым и оправданным самое бессовестное плагиатство друг у друга для пользы общего дела РИЛ. во всяком случае у меня можете плагиатить всё что найдёте. p.s. кроме алгоритма генератора выложил заготовку игрушки, которая могла бы его использовать. найти всё это богатство можно на http://urq.borda.ru/?1-0-0-00000231-000-100-0-1220070069

Nex: В "Серафиме" хороший генератор, потому что он во-первых работает, а во-вторых, приносит пользу.

noname: Nex, согласен. просто и практично- это всегда хорошо. авторам Серафима могу выразить лишь респект.

noname: QSP Demos [3.0.0] Архив старых примеров » Загрузил: Byte | Дата: 20.07.2007 » Размер 59.32 kB; время скачивания 7.59 секунд с ISDN » Скачиваний: 305 » Рейтинг: 3 (из 5) и 1 голос(ов) Byte, там (на этом сайте \ среди файлов примеров \ QSP Demos \ и лежит labirint.gam)

Byte: Да я понял :)

nkriff: Подскажите пожалуйста, как отсортировать массив? Желательно пузырьком...

ASBer: про пузырьки тоже есть

nkriff: Спасибо. Как это оформить применительно к QSP я сам разберусь.

nkriff: i=0 :loop i=i+1 if a>b: t=a a=b b=t end if b>c: t=b b=c c=t end if c>d: t=c c=d d=t end if e<d: t=d d=e e=t end if i<7:jump 'loop' end *p a *p b *p c *p d *p e я по-любому опошлил саму идею сортировки пузырьком... ;)

Korwin: Надо массив взять на 100 элементов хотя бы ;)

Byte: Модифицированная версия сортировки пузырьком: [pre2] ! Исходные значения a[0] = 10 a[1] = 5 a[2] = 9 a[3] = 1 a[4] = 6 a[5] = 5 items = 6 & ! Количество ! Сортировка по возрастанию if items > 1: n = 0 :loop_i z = n + 1 if z < items - 1: m = z + 1 :loop_j if a[m] < a[z]: z = m m = m + 1 if m < items: jump 'loop_j' end if a[z] < a[n]: temp = a[z] & a[z] = a[n] & a[n] = temp n = n + 1 if n < items - 1: jump 'loop_i' end ! Вывод значений if items > 0: n = 0 :loop_out *P '<<a[n]>> ' n = n + 1 if n < items: jump 'loop_out' end[/pre2]

HIman: Вот здесь можно посмотреть 2 алгоритма в действии.

nkriff: Всем огромное спасибо, пошел разбирать! :)

noname: новые версии пишущейся на QSP игры не понимают сохранённых игр старых версий, даже если эти версии отличаются ТОЛЬКО текстами комментариев! насколько это ограничение принципиально? можно ли попросить уважаемых разработчиков QSP дать возможность обойти это ограничение? мне это необходимо, поскольку некоторый заготовленный набор сэйвов планирую использовать для Продвитутого Тестирования Нелинейного Мира Игры Особым Noname-Методом. во как!

Nex: noname Справка QSP, раздел "Базовые системные переменные" DEBUG - если значение переменной не равно 0, то отключается проверка идентификатора игры при загрузке состояния. Полезно для отладки.

nkriff: Подскажите пожалуйста, какой максимальный размер файла, который выдержит плеер?..

Nex: nkriff насколько мне известно, программных ограничений нет.

nkriff: Хорошо, если так. :) Спасибо!

Neutral_Evil: Такой вот вопрос: можно ли сделать так, чтобы до те пор пока выполняется определенное условие, единожды записанное в некую служебную локацию, в текст КАЖДОЙ явной локации добавлялась дополнительная (заранее заданная или выбираемая из нескольких образцов при помощи рандома) строчка текста. Вопрос этот у меня созрел после прохождения игры Мировое сознание: Тринадцатый уровень... Был там такой момент: если взять из корзины с грязным бельем носок, то далее в каждой локации будет добавлена приписка говорящая, что носок то этот - смердит по страшному (точный текст не помню), и это будет продолжаться до тех пор пока игрок не вернет носок на место. Код там запаролен, так что посмотреть я не смог, но почти не сомневаюсь что из-за немногочисленности локаций там все сведено к тому, что в каждой из них есть условие, реагирующее на наличие этого треклятого предмета одежды в инвентаре. И в принципе такой расклад вполне подходит для компактной игры, но что если она содержит 100, 200 а то и больше локаций? Можно, конечно, прописать необходимую формулу в одной локации, откопировать ее нужным тиражом и менять прочии свойства полученных клонов как вздумается, но, на мой взгляд, это нескольки нерационально. Хотелось бы узнать наиболее оптимизированные способы решения этой проблемы. :)

Nex: Да, в 13м уровне сделано именно так: в трёх локциях есть условие [pre2]IF OBJ 'Носок':' Вы чувствуете, запах потных носков.'[/pre2] можно ли сделать так, чтобы до те пор пока выполняется определенное условие, единожды записанное в некую служебную локацию, в текст КАЖДОЙ явной локации добавлялась дополнительная строчка... Справка, раздел "Словарь терминов": Локация-обработчик перехода на новую локацию - служебная локация, название которой хранится в переменной "$ONNEWLOC". Выполнение операторов на этой локации происходит при переходе на новую локацию посредством операторов "GOTO / XGOTO" (при серии "GOTO / XGOTO" - переходов, событие возникает только один раз для последней локации переходов). Т.о. тебе нужно создать служебную локацию и записать её имя в $ONNEWLOC, после этого она будет выполняться при каждом переходе на новую локацию.

elmortem: А чо, моя игра запаролена? Хто пасмел? Руки оторву! ^_^

Nex: Neutral_Evil только что смотрел - нет в 13м уровне пароля.

Byte: Судя по всему, Neutral_Evil пробовал открыть игру в QGen 3.0, который не понимает нового формата...

Nex: Byte игра-то в старом формате, я проверял. Qgen3 открывает, пароля не спрашивает.

Byte: Nex, тогда действительно странно

Neutral_Evil: Оп. Прошу прощения, по всей видимости я что-то напутал и пытался открыть какую-то другую игру =) Попробовал еще раз, - на этот раз успешно, и подтвердил свою догадку. Спасибо за пояснение касательно локация перехода, буду экспериментировать :) Вот еще один вопрос, вернее "подвопрос": Добавления действия, которое при соблюдении некоторых условий, появляется на КАЖДОЙ локации, тоже производится подобным образом?

Nex: Да, в той же локации.

ShamanEdy: Играя в QSP игры, я часто натыкался на сообщения о том что игру собираются озвучить. Да и в теме текущие проекты кому то требовалось в этом помощь. У меня вопрос! Хоть один из этих проектов озвучили?

Byte: Озвучили, в смысле, голосом? Озвученные музыкой / звуками - есть :)

ShamanEdy: Byte пишет: Озвучили, в смысле, голосом? - Да, именно голосом!

Nex: Целиком озвученных нет, но в "Великой Пустоте" голос используется.

AlexFenix: Люди! Подскажите, как можно реализовать в QSP карту? То есть я имею изображение карты с помеченными локациями ( городами, деревнями и т. д) и могу путешесвовать по ним кликом. В URQ можно было делить изображение на области клика, а вот в QSP я токой возможности не нашел. Может быть это как то можно реализовать через HTML?

Nex: AlexFenix да, можно через html. Для примера гляньте "13 уровень"

werewolf: причем через html можно по сути 2 путями 1. если области будут прямоугольные, то можно разрезать картинку на отдельные области, с помощью таблицы собрать эти области в одну картинку, а потом нужные области делать ссылками 2. использовать теги map и area

AlexFenix: Спасибо! Как раз сейчас про map и area в сети нашёл! Просто может в QSP эти теги не работают? Там ведь вроде HTML не полностью поддерживается...

werewolf: в справке в списке поддерживаемых тегов они есть

ShamanEdy: Nex пишет: Целиком озвученных нет, но в "Великой Пустоте" голос используется. Где её можно скачать???

werewolf: ShamanEdy здесь

ShamanEdy: werewolf пишет: ShamanEdy здесь - Спасибо!

ShamanEdy: Nex пишет: Целиком озвученных нет, но в "Великой Пустоте" голос используется. Сыграл в игру "Великая Пустота 9" и у меня возник вопрос! Где же там озвучка? В версии которую я играл(1.00 beta) никакой озвучки не было, если не считать оною одну фразу вначале игры! Хотя графическое оформление мне понравилось, вопрос остался. Есть в ИЛ хоть один "нормально" озвученный проект? А то всё только собираются...

Nex: ShamanEdy я не сказал что там есть озвучка. Я сказал, что там голос используется. Имея в виду то самое сообщение.

ShamanEdy: А игр с озвучкой, нет чтоли???

ShamanEdy: Nex пишет: ShamanEdy я не сказал что там есть озвучка. Я сказал, что там голос используется. Имея в виду то самое сообщение. Значит я что-то перепутал!

[Ray]: ShamanEdy пишет: А игр с озвучкой, нет чтоли??? Если по мне, так ее и вовсе не надо. И если бы еще озвучивали профи типа Фаргуса или Буки - тогда бы неплохо, а самодеятельность мне не нужна)

ASBer: [Ray] пишет: И если бы еще озвучивали профи типа Фаргуса или Буки - тогда бы неплохо, а самодеятельность мне не нужна) Угу, полностью согласен. Сделать качественную голосовую озвучку своими силами невозможно. А вот привязка звуков к событиям - должно быть интересно. Звон монет, скрип двери, звуки ударов. Есть игры с подобной озвучкой действий?

Byte: В Серафиме используются звуки :)

rrock.ru: Ребят, вы чего?? Фаргус это ~ 90% пираты!! а для озвучки подойдут и знакомые примерно по 1 бутылки пива за голос.. а со звуками и то проще.. помнится я играл в группе, так там для эффектов мы использовали подручные предметы.. например для дождя - пакетик из под сигарет)) но по идее проблем с озвучкой не должно возникнуть.. есдинственное - это существенное увеличение размера архива игры..

Серый Волк: ShamanEdy, в мире русскоязычных текстовых игр существует только одна озвученная игра - "Моряк и конная милиция" на URQ. Скачать её можно было с http://urq.allquests.ru/, но нынче сайт в дауне и никто не сможет сказать когда он восстановится и произойдёт ли это вообще. Если интересно - оставь координаты, игру вышлю.

Синий Бъолк: Точнее "Моряк" есть тут: http://urq.plut.info/node/58 На урке озвучка была еще в игре Агента "Бриг Крик". И еще частично в ранних играх Терра и в игре про ужасы "Идии к наам", не помню названия :) Ну и стабильно два-три проекта, которые пишутся сейчас планируют сделать с озвучкой :) Это не так сильно просто, но очень весело :) Особенно, когда Гораф читает по ролям за девушек... Но, ребят, если вы хотите нормально сделать, по одной бутылке не пройдет :) Если только эти ваши друзья не профессиональные актеры.

HIman: Народ подскажите, а почему поменялось отображения беккартинки в $BACKIMAGE? Раньше картинка выводилась в самом верху над основным экраном. Сейчас буквы поверх картинки что есть не очень хорошо. Если это ошибка то давайте исправим , если это так и будет, то нужен оператор $BACKIMAGETOP например который выводит картинку как это было раньше.

Byte: А зачем старая функциональность $BACKIMAGE? Это же практически копия оператора VIEW - он тоже выводит картинку сверху.

rrock.ru: Да и, по моему мнению, $BACKIMAGE отображает свою суть именно как фоновый рисунок (подложка).

HIman: Ок, что-то я не доглядел, картинку можно прикрепить и все остальные картинки там же будут выводиться.

WladySpb: Переменная onnewloc всегда обрабатывается после кода страницы? или это это у меня что-что-то не так?))) Мне надо чтобы её содержимое обрабатывалось в самом начале, до основного кода, к примеру, вывод информационной строки. Можно ли это сделать не прописывая сие в каждой локации?

Byte: Можно :) На $ONNEWLOC пишем [pre2] $TXT=$MAINTXT & *CLR 'то, что нужно вывести в начале' $TXT 'то, что нужно вывести в конце'[/pre2] На локациях выводим текст как угодно :)

WladySpb: Это на локации обработчике вводить? ) То есть, забиваем содержимое локации в переменную, очищаем локацию, выводим инфу, выводим переменную с текстом, я правильно понял? Прикольное решение))) И сразу же - А если мне потребуется то же самое, но не с текстом, а с кодом, то есть чтобы сначала выполнялся код на onnewloc и только потом код на текущей локации? Для этого может найтись решение? Пока не надо, но вдруг приспичит что-то сделать с таким алгоритмом...

Byte: В этом случае тоже можно найти решение :)

WladySpb: Вот, ещё вопрос про массивы... Задача стоит забить в массив набор текстовой и цифровой информации, на данный момент это выглядит так: $weapon01[0,0]='Нож' $weapon01[0,1]='Простой кухонный нож из грубого железа' weapon01[0,0]=1 weapon01[0,1]=4 weapon01[0,2]=1 подозреваю, что возможно более гибкое и наглядное решение.. Где-то на форуме видел упоминание про аргументы массива, но мельком и непонятно как это использовать. По идее, предполагается большое количество предметов, и возможно, большее количество параметров... ЗЫ - проблему с информацией в верхней строке решил другим методом, просто в начале нужных локаций прописал gs 'menu' так оказалось проще, поскольку не на всех локациях нужно чтобы появлялось меню.

Byte: Я вообще плохо понял, что нужно сделать :) Многомерные массивы используются через строковые индексы: $weapon['0,1']='Нож'

WladySpb: Byte Сори, я там вообще по моему ошибок нагородил) Присваивание значения элементу массива возможно только по отдельности? Если да, то имеющийся вариант практически не упростить... Меня ужасает объём переменных которые придётся хранить в памяти программы) Умом вроде понимаю, что весь этот текст уместится в памяти несколько тысяч раз и не поперхнётся, а всё равно кажется нерациональным загонять такие объёмы) Я так понимаю, многомерный массив должен выглядеть примерно так: $weapon['нож']='Нож' weapon['нож_мин_урон']=1 А можно ли в такой ситуации обратится к конкретной группе элементов массива? или для этого проще прописать по массиву для каждого предмета: $knife['name']='Нож' knife['min_dam']=1 блиин.. Тут нужно ещё много думать..

[Ray]: Тебе нужна таблица (база данных, двумерный массив - как хотите) Именно ее используют создатели различных RPG и MMORPG Чтобы ее заполнять тебе придется использовать SET AA[Нож; Мин_Повр] = 1 SET AA[Нож; Макс_Повр] = 5 SET AA[Гранатомет; Мин_Повр] = 35 Идея понятна?

WladySpb: [Ray] SET вроде не обязательно для объявления переменной, или я что-то путаю? АА - это я так понимаю, сам массив\переменная\база данных. Дальше не совсем понятно, я пока не видел в qsp такого варианта.. Можно объявить AA=1 , AA[0]=1 , AA['dam']=1 ... Вроде есть ещё один вариант, не помню.. В чём отличие этого? Или как раз здесь и есть возможность обращения к группе элементов 'нож' ?

Byte: Я так понял, что [Ray] имел в виду записи AA['Нож; Мин_Повр'] = 1

Ajenta: Ууууууу, как всё сложно. А просто написать незя? $weapon[1]='Нож' weapon[1]=1 Или если многомерные, то $weapon[1][1]='Нож' weapon[1][2]=1 Или я тоже с синтаксисом что-то путаю?

Byte: Ajenta, 2й вариант как [pre2] $weapon['1,1']='Нож' weapon['1,2']=1[/pre2]

Ajenta: Byte пишет: Ajenta, 2й вариант как $weapon['1,1']='Нож' weapon['1,2']=1 О, да. Точно напутала. Ну вот собственно, так же проще. И в индексах не запутаешься. А если переменные надо, то насколько я понимаю. $weapon['<<a>>,<<b>>']='Нож' weapon['<<a>>,<<b>>']=1

werewolf: У меня тоже возникала такая дилема, только чтобы не запутаться с индексами я поступил немного иначе. Я создавал несколько массивов, а индексом у них служил уникальный идентификатор предмета. $weapon['нож']='Нож' weapon_min_dem['нож']=1 Тогда в функцию обрабатывающую предмет достаточно передать идентификатор. Хотя в даном случае это больше зависит от того, кому как удобней работать с массивами.

[Ray]: Это одно и тоже с тем про что мы тут говорим Только у тебя будет 10 переменных (по одной на каждую хар-ку), а у нас одна Хотя если тебе так удобнее - пожалуйста

WladySpb: Я думаю, нет особой разницы, десять переменных или одна, конечно если счёт не пойдёт на сотни..если в 10-ти массивах хранится по десять параметров, или в одном - сто , занимаемый объём памяти примерно равен. Самое важное - удобство и понятность)

luciofulci: Пожалуй, самый удобный и наглядный вариант - использовать уникальный идентификатор и несколько массивов. Причем идентификатор не обязательно строковой, главное, уникальный. Можно, например, написать так: knife = 1 $name[knife] = "нож" $desc[knife] = "Простой кухонный нож из грубого железа." damage[knife] = 1 и т.д., и т.п. Плюс еще и в том, что в любой момент можно добавлять свойства, можно передавать объект в функции через идентификатор и многое другое. Вообще, чем больше ты используешь возможности и особенности языка и чем меньше пытаешь эмулировать то, чего в нем нет (те же многомерные массивы через строковую индексацию), тем проще и удобнее.

[Ray]: Это дело вкуса. Я просто привык к датабазам - так что мне легче так будет.

WladySpb: Таак... Новый вопрос назрел) Со всеми этими вложенными кавычками чёрт ногу сломит.. Или я где-то ещё ошибку допустил. Короче, что неправильно? '<font size=10><div align=center><a href="exec:$sex=''Мужина'' & jump ''Раса''">Мужчина</a></font></div>' exit :Раса в таком варианте не выдаёт сообщения об ошибке, но и не переходит куда надо после нажатия на ссылку.

[Ray]: WladySpb, Понятия не имею что за jump '<font size=10><div align=center><a href="exec:$sex=''Мужина'' & goto''Раса''">Мужчина</a></font></div>' вот так все прёт

WladySpb: jump это переход к определёному месту текущей локации. Есть много способов реализовать то что мне нужно, но этот самый компактный, и я хочу понять почему код: $sex='Мужина' & jump 'Раса' работает, а такой же в теле html-ссылки не работает.....

[Ray]: Со дез ка... а это уже хз) Наверное, этот код кусп не принимает равно как и background-image или обтекание картинки текстом в теге exec:

WladySpb: [Ray] Куёво если так. Интересно, что байт скажет?

Byte: Код ссылок обрабатывается отдельно от кода локации.

WladySpb: Byte То есть туда его никак не вставить? или это надо делать как-то по хитрому?

[Ray]: WladySpb Чем хитрить лучше бы новую локу сделал Или знаешь как.... по-хитрому, как у меня в игрухе: WladySpb пишет: <a href="exec:$sex=''Мужина'' & goto''$CURLOC''">Мужчина</a> Намёк понял?)

WladySpb: [Ray] Не... Там прикол в том что сначала обрабатывается код выбора пола, потом, когда пользователь выбирает - обрабатывается кусок с выбором расы... так что переход на начало локации не сработает. Походу сэкономить с локациями не прокатит в этом месте. Или придётся сделать по другому, у меня уже появляется мысль как)))

[Ray]: WladySpb Уидай игруху в личку - я покажу что имею в виду

WladySpb: Там пока нет игры) Так, пытаюсь представить как должен выглядеть движок РПГ.. НЕРАБОТАЮЩИЙ кусок кода в данный момент выглядит так: MSG 'Пожалуйста, укажите свой пол (или тот пол который вы хотели бы получить)' '<font size=10><div align=center><a href="exec:$sex=''Мужина'' & jump ''Раса''">Мужчина</a>' '<a href="exec:$sex=''Женщина'' & jump ''Раса''">Женщина</a>' exit :Раса *clr MSG 'А теперь время определиться с расовой принадлежностью!' '<font size=10><div align=center><a href="exec:$race=''Человек'' & jump ''Класс''">Человек</a> <a href="exec:MSG ''Человек не имеет каких либо преимуществ или недостатков однако крайне быстро обучается''">?</a>' '<a href="exec:$race=''Эльф'' & jump ''Класс''">Эльф</a>' '<a href="exec:$race=''Гном'' & jump ''Класс''">Гном</a>' '<a href="exec:$race=''Полуорк'' & jump ''Класс''">Полуорк</a></font></div>' В принципе, я просто вместо выбора при нажатии, добавлю кнопку "далее", это самый простой вариант.

[Ray]: Моя идея лучше. Короче В меню выбора делаем сначала заголовок, где написано как зовут игрока, его пол, его расу, описание расы и тд. Потом под заголовком делаем таблу из 3 колонок (можно больше можно меньше) И в колонках пишем "<a href="exec:$sex=''Мужина'' & goto''$CURLOC''">Мужчина</a>" Интересно придумано? Тогда будет как в большинстве РПГх. Я ща немного выпил, так что может может бред несу

WladySpb: [Ray] Ну, в целом я понял) Я так уже один раз делал, в одной из экспериментальных недоделок.. Вариант, но при неизвестном количестве вариантов не очень подходит... Ладно, я заманаюсь щас обьяснять идею, лучше потом пришлю движок на посмотреть, если сделаю конечно) Общий смысл - возможность на основе движка в любой момент добавлять новые расы, классы, предметы...

WladySpb: Так, вроде сам додумался, но хочу получить подтверждение, а то у меня с математикой туго... Первая формула - мне нужно чтобы от начального значения отнималось десять, а после делилось на два. Base_param['md_str']=(Base_param['str']-10)/2 Правильно ли я записал? И второе - при условии что значение переменной может оказаться как плюсовым так и минусовым, как будет работать прибавление этой переменной? Мне нужно чтобы в случае если значение переменной минусовое, оно вычиталось. hp=hp+(10+Base_param['md_con'])

[Ray]: WladySpb 1. Ну да. Так оно и будет. 2. В случае если Base_param['md_con'] больше -10, тогда прибавится, если меньше - вычтется.

WladySpb: [Ray] -10 он не будет, там вариантность от -2 и выше по идее. мне нужно чтобы 10+(-2) давало 8, вот я о чём... Вроде так и должно быть.

[Ray]: WladySpb, Угу, так и есть) Математику учи :)

WladySpb: [Ray] Ну, я же сделал правильные выводы) Просто не был в них до конца уверен.

WladySpb: Вот любопытство замучило.. массив может содержать 7 лямов записей или около того.. При числовом индексировании всё ясно. А где и под каким номером хранятся элементы массива mas['index'] ? И не могу ли я случайно перезатереть этот элемент создав другой элемент этого же массива но с числовым индексом? mas[678] Это уже так, чисто академический интерес, просто других вопросов пока нету)

Byte: Строковые индексы создаются последовательно, т.е. при первом выполнении строчки [pre2] mas['index']=0 mas['text']=1[/pre2] будут эквивалентны [pre2] mas[0]=0 mas[1]=1[/pre2]

Ajenta: Byte О, хоть что-то прояснилось :)

Ntropy: То есть 'index' и 'text' это ключи в словаре, а есть ли возможность получить список ключей? Это может пригодиться при отладке.

Byte: Список ключей - нет :)

Nex: Ого! Обязательно в справке следует об этом написать.

WladySpb: Byte Nex В справке необходимо написать, в данный момент вроде ничто не мешает использовать параллельно один массив и для числового и для строкового индексирования... А потом ловить глюки) В общем, интерес я удовлетворил, надо запомнить что нельзя один и тот же массив по разному использовать...

WladySpb: Вопрос не по теме - делаю что-то вроде рпг в мире подобном славянскому. конкретно поднадоели все эти эльфы, гномы и прочие. Вопрос - кто помнит какие гуманоидные (хотябы с натяжкой) расы из славянского эпоса, сказок..? Пока список состоит, кроме обязательного человека, из лешего, русалки, баюна, домового и великана.

werewolf: WladySpb посмотри по этим ссылкам 1 2 3 4 5 6 это что смог вспомнить навскидку

WladySpb: werewolf Спасибо, сейчас гляну!

WladySpb: Насколько адекватна строка кода: if a-b=20 or a>c and a-b>1 если а минус б = 20 или а больше чем ц и ф минус б больше 1 Нужно чтобы выражение было верным если выполнено либо первое либо второе и выполнено третье.

[Ray]: if a-b=20 or (a>c and a-b>1)

WladySpb: [Ray] Нет, так получится что либо первое, либо второе и третье. Сделал щас локацию для проверки, нормально работает вообще без скобок, как ни странно...

[Ray]: Хмм, хз почему не работает Ну поставь 2 условия, жалко что ли?

WladySpb: [Ray] Нет, ты не понял, оно работает, я просто себе не доверяю, поскольку уравнение не совсем прозрачное, но QGen меня понял) там у меня уже 115 строк кода, и это ещё не всё... И это только одна локация) Поэтому стараюсь как-то компоновать всё это...

Byte: a-b=20 or a>c and a-b>1 по умолчанию будут распознано как a-b=20 or (a>c and a-b>1) Если нужно другое поведение, нужно написать (a-b=20 or a>c) and a-b>1

[Ray]: WladySpb пишет: там у меня уже 115 строк кода, и это ещё не всё... Ты там искусственный интелект что ли пишешь?)

WladySpb: [Ray] нет, это локация обработки боя.... Поскольку за основу я взял правила AD&D 3-ей редакции, там до фига параметров которые надо учесть. Хотя насчёт ИИ это идея неплохая) У меня есть мысль сделать автоматически генерируемые описания локаций, для разнообразия)

WladySpb: Добрался до тестирования боёвки - полезли ошибки... Самая неприятная - оператор jump работает, видимо, только в пределах того куска кода где находится. То есть, код: act 'атака': jump 'atack' exit :atack не работает, поскольку jump ищет метку atack в теле act'а... Если из примера непонятно, во время боя выдаётся список действий, и на этом выполнение останавливается. После выбора какого-либо действия выполняется кусок кода. Пока возникла только одна мысль, чем заменить/доработать неработающий jump: if a!0: jump '<<a>>' (код начала битвы) act'бой': a=1 xgt '<<$curloc>>' end exit :1 (код - ход игрока) act 'удар':a=2 & xgt '<<$curloc>>' exit :2 (Код - ход противника) a=1 xgt '<<$curloc>>' exit Может, есть решения поизящней?.... ЗЫ.. Пополз спать, завтра буду думать. ЗЗЫ: Кстати, в справке насчёт этого упоминаний нет. Нужно либо добавить в справку информацию как можно а как нельзя использовать jump либо доработать его так чтобы он искал метку по всей локации (или в указанной в качестве аргумента локации)

Byte: Разбить код на несколько локаций. Тогда вместо jump'ов будут gs / gt / xgt.

fireton: WladySpb Глянь сюда: http://www.peterlife.ru/funoffice/folk/index.htm Лучшее, на мой взгляд, собрание поверий и сказаний, а также описание магических существ славян.

[Ray]: Byte Че такое xgt?

Byte: Оператор. См. справку.

WladySpb: fireton Спасибо, дома буду - загляну) Byte Не очень охота плодить локации, их уже около 20-ти, это только создание персонажа и базы данных.. Решение уже нашёл, относительно изящное: if $args[0]!'': jump '<<$args[0]>>' :start (код) xgt 'Битва','enemy' exit :you act 'удар': (код) xgt 'Битва','enemy' end exit :enemy (код) xgt 'Битва','you' exit ...Примерно так.

Ntropy: Byte писал: Оператор. См. справку. Думается что стоит хелп выложить на сервер, что бы потом новичкам ссылками на разделы отвечать.

Nex: Ntropy в каком виде? Хтмл или, может быть, вики? Архивом-то она всегда доступна, и каждый новичок обязан её скачать, иначе потом просто замучается на сайт лазить по каждому вопросу. Но как альтернативу можно конечно в онлайн выложить, только после полного обновления движка сайта. А обновление будет когда я до него доберусь, а я только-только разделался со своим мега-проектом, и осталось QSP-Compo отжюрить.

Ntropy: Nex Текущий формат документации позволяет преобразовать её в набор html страниц, которые можно разместить на любом хостинге (нужен только html), хотя бы на народе. Вот актуальный архив доки QSP-5.5.6-Help.rar. Собственно нужно только ссылку с главной и распаковать куда-нибудь. P.S. обновил архив, добавил пропущенный логотип.

Nex: Ntropy я знаю прекрасно что можно её выложить в хтмл. Я просто спрашиваю, в каком виде, по-твоему, было бы оптимальнее? У вики есть свои преимущества и недостатки, как и у хтмл. Повторюсь, выкладывать онлайн-справку следует только после обновления сайта.

Ntropy: Nex Мне кажется что выкладывать help в вики смысла особого нету, мало кто будет серьезно дополнять и редактировать, только опечатки будут править. Документация должна быть авторская, что бы её цитировать и на неё ссылаться. А вот примеры использования, дополнения, комментарии и уроки стоит выкладывать в вики, на общее редактирование. Аналогично как есть wikisources и есть wikibooks.

Nex: Ntropy ну в том сайте, который задуман, будет редактирование авторских материалов и так, без всякой вики. И, разумеется, можно будет их комментировать. Т.е. автор пишет, например, учебник по QGen, и правит его самостоятельно. Все желающие комментируют.

WladySpb: Nex Ntropy Справка в том виде в котором она присутствует сейчас, не очень информативна. Постоянно приходится либо лезть на сайт за дополнительной информацией, либо перебирать код примеров и чужих игр пытаясь найти варианты использования. Хотелось бы иметь строчку другую примера по каждому оператору, функции... По моему, есть смысл выложить и на сайте, как оригинальный материал, и на вики, чтобы народ потихоньку дополнял в тех местах где не хватает подробностей. Мне и сейчас не все вещи понятны, но пока не использую - не спрашиваю. А справку перечитал целиком уже много раз. Взять хотя-бы этот проклятый jump , в справке не было информации о том где он действует. Или выражение & - в справке о нём написано "[$выражение 1] & [$выражение 2] - операция объединения строковых выражений.". То что его можно (и нужно) использовать при перечислении операторов и функций в одной строке (что очень актуально для html), выясняется в совершенно других примерах, по сути случайно. Таких недосказанностей хватает, понятно что нет возможности сделать справку всеобъемлющей, но дополнять её мог бы каждый в формате вики.

Byte: Из справки: 7) Операторы разделяются либо символом "&", либо символом переноса строки. Пример: Тем не менее, текущий хелп действительно нужно дорабатывать.

WladySpb: Что такое "несоответствие типов данных"? Выдаёт эту ошибку со ссылкой на вот эту строку: if chek_hidden>chek_unhidden & chek_hidden['enemy']<chek_senсe: раньше всё работало, что-то добавил, сам не помню что - работать перестало.. UPD: Всё, разобрался. Правильно: if chek_hidden>chek_unhidden and chek_hidden['enemy']<chek_senсe: Намудрил в коде)

Kirald: Люди, ссори, но недавно решил опробовать QSP, перешол с TGE (Редактор текств Квестов для Космических Рейнджеров). Вот только возник вопрос, как реализовать статы, то есть переменные которые будут всегда на виду у игрока. В ТГЕ это было легко решить, но вот , что делать с КуЭсПе. Положить предмет "Сила" в инвентарь и дать ему значение не вариант. Что делать не подскажите? Если задаю повторяющийся вопрос, то прошу извеняйте.

WladySpb: Kirald используй вывод значений переменных, скажем, в окне дополнительного описания. На самом минимальном уровне это выглядит примерно так: str=10 (задаём значение для переменной str) p 'Ваша сила:<<str>>' (выводим строку со значением переменной в поле доп. описания) Для большей красоты можно использовать таблицы html, но там всё отнюдь не столь наглядно. Если нужно - могу кинуть пример кода. Если нужно чтобы статы постоянно обновлялись - прописываешь в системную локацию onnewloc операцию вывода, и он тебе будет при заходе на новую локацию обновлять инфу (только очистить окно перед этим не забудь)

Kirald: Спасибо, очень признателен за идею. А вот от примера кодо таблицы, я бы не отказался. Кстати, хотел спросить, как там проек развиваеться? Просто стало интересно будет ли в будующем возможность создовать доп окна, например 2 окна предметов, доп окно по усмотрению автора квеста и т.п. Конечно я понимаю, что это серьёзные изменения в системном коде, но всё же. ЗЫ. Не подскажите функцию обновления окон в QSP? И кстати как перенести строчку в доп. описание.? И последний вопрос, можноли переименовывать окна Доп. Описание => Характеристики. Заранее Благодарен!

WladySpb: Kirald Ну, все системные вопросы к Байту, или озвучь их в топике "Разработка QGen 4" - там к интересным предложениям прислушиваются. Повнимательней почитай справку, там многое объяснено. Обновление окон - что ты имеешь в виду? Основное окно и список действий обновляются при переходе на новую локацию, или при выборе действия в коде которого это указано. окно предметов по идее обновляется при добавлении/удалении предметов, я с ним мало работал, точно не скажу. Дополнительное описание обновляется ТОЛЬКО тогда когда это указано в коде. Строчку в доп. описание перенести - Вывести? или что? уточни вопрос)

WladySpb: Вот пример как это выглядит у меня. Чтобы это работало, надо на первой локации объявить использование html (USEHTML=1) clr p '<font size=-2 face=Lucida Console><div align=center><table align=center border=1 width=75%>' p '<tr><td> Сила </td><td><<Base_param[''Cur_str'']>></td><td><<Base_param[''md_str'']>></td></tr>' p '<tr><td> Ловкость </td><td><<Base_param[''Cur_dex'']>></td><td><<Base_param[''md_dex'']>></td></tr>' p '<tr><td> Телосложение </td><td><<Base_param[''Cur_con'']>></td><td><<Base_param[''md_con'']>></td></tr>' p '<tr><td> Мудрость </td><td><<Base_param[''Cur_wis'']>></td><td><<Base_param[''md_wis'']>></td></tr>' p '<tr><td> Интеллект </td><td><<Base_param[''Cur_int'']>></td><td><<Base_param[''md_int'']>></td></tr>' p '<tr><td> Харизма </td><td><<Base_param[''Cur_chr'']>></td><td><<Base_param[''md_chr'']>></td></tr>' p '</table></div></font>'

Nex: Плодить лишние окна не нужно, можно выводить таблицей в любом из существующих. Также можно отключить неиспользуемые окна и настроить расположение окон "по своему вкусу" - положив config.cfg в папку с игрой.

WladySpb: Nex Кстати, а можно в коде игры отключить заголовки? Или проще сразу конфиг свой подключать?

Nex: WladySpb в коде игры не можно и не нужно. Сохраняется ли это в конфиге, не знаю.

WladySpb: Nex Насчёт не нужно не согласен. Если окна используются не по своему назначению - отключать заголовки логично. Зачем мне надпись "Дополнительное описание" в окне куда я вывожу характеристики? В конфиге это должно сохраняться, сейчас проверю, на будущее) UPD: В конфиге сохраняется)

Nex: WladySpb я говорил, что не нужно делать в коде поддержку таких "фич". В конфиге поддерживается - и ладно.

WladySpb: Nex Вообще, это "фича" примерно того же уровня что и возможность включать/выключать окна по желанию. Но поскольку теперь есть поддержка конфиг-файлов - реализовывать это в коде уже не нужно. В отличие от окон, сомнительно что возникнет необходимость включать и выключать эту опцию в процессе игры, так что вопрос закрыт)

Kirald: Спасибо за HTML в конечной версии присабачу в игру. В справке всё откопал, теперь у меня идет обновление доп. опис. каждые 2 секунды =). Заметил странность. В QSP возможностей больше, чем например в TGE. Но по сравнению с TGE в QSP я все делаю слишком долго, даже банальные вещи, не знаю с чем это связано, может счас проанализирую и скажу, может быть исправите в будующих версиях.

WladySpb: Kirald Это вполне может быть с непривычки. Я в начале тоже медленно писал, постоянно лез в справку и на форум. Потом после паузы - то же самое. А сейчас когда сажусь писать код - даже не запускаю для теста. всё как-то быстро строчится, хотя потом смотрю на некоторые уравнения - и плохо становится))

Nex: Kirald очень просто, в QSP ты ещё новичок и поэтому делаешь всё долго. Учебник по QGen читал? Там правда пока мало, всего три урока, но для быстрого старта думаю сгодится.

Kirald: Basiс мне по нраву, давно начал изучать его и быстро в QGen'е разобрался. Nex Кстати что это за учебник? Я качал справку по КуГену, но не видел там 3-х уроков, может чего не догоняю. Я вот в предложениях по 4-ке QGen написал несколько идей, как мне кажеться сильно облегчающих жизнь квесто-строителям. (Хотя там я чисто мелочи понаписал, половина идей укр...взята из TGE )

Nex: Kirald Учебник по QSP для редактора QGen

[Ray]: Nex, несогласен, я за свободу пользователя! (Всмысле, я считаю, что если дать возможность юзеру создовать новые окна, то можно очень много чего реализовать. Например, то же окно с хар-какми персонажа.)

[Ray]: И вопрос: можно ли на куспе сделать myfunc(argument1,argument2) ??

Nex: [Ray] пишет: можно ли на куспе сделать myfunc(argument1,argument2) ?? Можно.

[Ray]: Nex вау а как если не секрет

Ntropy: Nex Вот тут напрашивается ссылка на доку ;) [Ray] Есть два способа: через GS/GT и через FUNC. GOTO [$выражение],[параметр1],[параметр2], ... или GT [$выражение],[параметр1],[параметр2], ... - переход на локацию с названием [$выражение]. Поле основного описания локации, а также список текущих действий заменяются описанием и действиями новой локации. Переданные параметры хранятся в массиве ARGS. Примеры: GT 'локация' - переход на локацию "локация". Массив ARGS пуст. GT 'локация',1,'данные' - переход на локацию "локация" с передачей 2-х параметров. ARGS[0] равен 1, $ARGS[1] содержит строку "данные". FUNC([$выражение],[параметр1],[параметр2], ...) - обработка локации с названием [$выражение]. Указанные параметры передаются в массиве ARGS. Результат функции равен значению $RESULT при возврате строкового значения или RESULT при возврате числового значения. Если при обработке локации были установлены и RESULT, и $RESULT, то предпочтение отдаётся строковому значению. После обработки локации предыдущие значения ARGS и RESULT восстанавливаются. Примеры: PL 4 + FUNC('функция') - обработка локации "функция" как функции. Массив ARGS пуст. Результат передается через $RESULT или RESULT, в зависимости от кода обрабатываемой локации. PL FUNC($name, 1) * 78 - обработка локации с названием в $name как функции. ARGS[0] равен 1. MSG "text" + FUNC($name, "строка", 2) - обработка локации с названием в $name как функции. $ARGS[0] содержит строку "строка", ARGS[1] равен 2. P.S. А всякие дополнительные окна можно реализовать через html, делать это на уровне QSPGUI перебор (по крайней мере в текущей версии), причина проста: а как это будет работать на PSP/iPhone?

[Ray]: Ntropy, Греат Сенкс! Ntropy пишет: а как это будет работать на PSP/iPhone? Кусп понимает только самые простые хтмл операторы, скорее всего он откажется создавать новые окна. Даже на компе.

Nex: [Ray] хелп читал?

[Ray]: Nex Эмм... ну почти

WladySpb: Кстати, насчёт html. Это только у меня такая проблема? Выравнивание по центру работает ТОЛЬКО через div То есть картинка:'<img src="fil.jpg" align=center>' располагается слева, а картинка: '<div align=center><img src="fil.jpg"></div>' по центру. То же самое относительно таблиц и текста.

Ntropy: WladySpb А <center>Работает?</center> P.S. в хелпе тоже есть в разделе HTML теги (и тут напрашивается ссылка :)

WladySpb: Ntropy Я же не говорю что всё не работает) но в хелпе есть и такие строчки: IMG SRC=[ссылка] WIDTH=[пиксели] HEIGHT=[пиксели] ALIGN=TEXTTOP ALIGN=CENTER ALIGN=ABSCENTER ALIGN=BOTTOM USEMAP=[ссылка] И при этом align у меня не пашет. Может, я его применяю неправильно? Но в div я его прописываю точно так же, и он работает..

[Ray]: WladySpb У меня Align тоже не рабит, он походу глючный

Ntropy: WladySpb Хотелось бы код посмотреть на предмет ошибок.

WladySpb: Ntropy Я бросил пример строчки выше, она там единственная, просто вывод картинки по центру. Или лучше попробуй сам в голом проекте, повыравнивать по центру разные вещи разными опциями.

Byte: Почему же у меня работает всё?

[Ray]: Byte может, 1. Некоторые формулировки работают? 2. Разные версии плееров? 3. Ты читор?

Byte: Что именно не работает? '<center><img src=''key.png''></center>' работает '<p align=center><img src=''key.png''></p>' работает в таблицах align=center тоже работает.

Nex: Byte их интересовал align в самом теге IMG

Ntropy: WladySpb Что то мне говорит что align=center для img -- это выравнивание по вертикали, а по тому работает но результат не заметен.

Byte: align для img по спецификации HTML - это выравнивание относительно текста. то есть тип обтекания картинки текстом.

[Ray]: Byte Ну вот, он и не работает (у меня в "прологе" игры есть Align, но картинки не обтекаются) Ntropy Ага и как ты себе это представляешь?))

Byte: Ray, обтекаются, но не всеми возможными в HTML способами.

[Ray]: Byte Я прямо сейчас твой <p align=center><img src=''key.png''></p> попробовал, ничего не получилось. Обтекается только последняя строчка да еще и </p> почемуто нерабит

Byte: Блин. Внимательнее читаем. Обтекание текста - это для <img align>. <p align> - выравнивание содержимого по горизонтали.

Ntropy: [Ray] В документации 5.5.6 для тега img указаны 4 типа выравнивания: TEXTTOP, СENTER, ABSCENTER, BOTTOM. Попробуем простой пример c картинкой: [pre]#start USEHTML=1 '<img src=Acid2.png ALIGN=TEXTTOP>&lt;img src=Acid2.png ALIGN=TEXTTOP&gt; <img src=Acid2.png ALIGN=CENTER>&lt;img src=Acid2.png ALIGN=CENTER&gt; <img src=Acid2.png ALIGN=ABSCENTER>&lt;img src=Acid2.png ALIGN=ABSCENTER&gt; <img src=Acid2.png ALIGN=BOTTOM>&lt;img src=Acid2.png ALIGN=BOTTOM&gt;' ------ [/pre] И вот результат: Byte Для обтекания текста нужны left и right, в доке про них ничего нету и qspgui на них не реагирует. Update: минутку, сейчас проверю на 5.5.7 Update: всё подтвердилось, на 5.5.7 та же картина.

[Ray]: Ntropy О. Ага. Биг спасибо)

Byte: Ntropy поддерживается только то, что в документации.

WladySpb: Не удаётся настроить окна вот в таком порядке: ################## основное окно.......#.......# <-- предметы .............................#.......# .............................#.......# .............................##### .............................#.......# ##############.......#<-- описание действия................#.......# .............................#.......# ################## Окно действий всегда вытягивается на всю длину стенки к которой прикреплено. Можно с этим что-то сделать? или усилия того не стоят? Хотел так настроить конфиг в игре, не получилось..

Nex: 1. Удалить config.cfg 2. Открыть qspgui 3. Закрыть qspgui 4. В config.cfg найти name=acts;...бла-бла...dir=3;...бла-бла...|name=vars;...бла-бла...dir=3; заменить на name=acts;...бла-бла...dir=5;...бла-бла...|name=vars;...бла-бла...dir=2; 5. Сохранить config.cfg 6. Открыть qspgui 7. Выровнять верхнюю границу окна "дополнительное описание" 8. Закрыть qspgui Конфиг готов!

WladySpb: Nex Спасибо!!!

[Ray]: Нужно сделать функцию, которая устанавливает переменную, записанную в argument 1 (в моём случае variable) на 1 с вероятностью 25% и на 0 в остальных случаях. Использую команду GOSUB'randomize',4,'variable': random = rand(args[1]) if random = 1: <<$args[2]>>=1 else: <<$args[2]>>=0 end Не работает, помогите найти ошибку.

[Ray]: Мне кажется или я правда не умею обьяснять? В любом случае, вот что я хочу: Игрок кидает кости со стороной 4(argument1) Если выпадает 1 то переменная с именем, указанным в argument2 принимает значение 1 Иначе 0

werewolf: а такая конструкция <<$args[2]>>=1 работать и не будет нужно [pre2] random = rand(args[1]) if random = 1: DYNAMIC('<<$args[2]>>=1') else: DYNAMIC('<<$args[2]>>=0') end [/pre2]

[Ray]: werewolf Пасибо! werewolf пишет: а такая конструкция <<$args[2]>>=1 работать и не будет Ну вот я и спрашиваю то)

[Ray]: werewolf Неа, не рабит. Пишет "Знак [:] не найден"

Byte: [Ray] в какой строке то?

Nex: После ELSE не должно быть двоеточия.

[Ray]: Byte Омг, в первой! :) Nex Убрал, не рабит.

[Ray]: Вот так щас выглядит: random = rand($args[1]) if random = 0: dynamic('$args[2]=1') else dynamic('$args[2]=0') end

Nex: [Ray] сделай вывод перед IF, выведи [pre2]PL $args[2][/pre2] И напиши здесь что у тебя вывело

werewolf: [Ray] нужно не rand($args[1]), а rand(args[1]) и dynamic('$args[2]=1') просто заменит значение $args[2] на 1, а чтобы поменяло значение нужной переменной нужно dynamic('<<$args[2]>>=1')

[Ray]: werewolf Это я на форуме ошибся, в коде $ нет Nex Нихера не работает. За ся я с этим кодом.

Byte: [Ray] пишет: Byte Омг, в первой! :) random = rand(args[1]) - тут? if random = 1: DYNAMIC('<<$args[2]>>=1') else: DYNAMIC('<<$args[2]>>=0') end Если для IF, то почему у меня на if не ругается?

[Ray]: Byte Там глюк у меня был, я исправил. Тереь ошибки нет, однако ничего не работает и PL $args[2] не работает (то есть он переменные args[] вообще не признает и выводит их как 0)

werewolf: [Ray] у тебя нумерация параметров не правильная если ты вызываешь GOSUB'randomize',4,'variable' то args[0] = 4 и $args[1] = 'variable', а в примере ты обращаешься к args[1] и $args[2], которые соответственно пустые

[Ray]: werewolfу удаётся спасти меня от самоубийства в последний момент! Спасибо! Осталось мелось: dynamic('$args[1]=1') по одному только куспу понятной проблеме присваивает значение самому $args[1], а не строке, содержащейся в нем и обозначающей имя переменной.

werewolf: надо не dynamic('$args[1]=1') а dynamic('<<$args[1]>>=1')

[Ray]: werewolf Byte Nex СПАСИБО! (капсом!) Всё работает, всё зашибись

MasterSet: Вопрос по функции DYNAMIC В справке про нее ничего нет, на форуме часто всплывают упоминания, но без объясений. Может я пропускаю что-то важное? Можно рассказать, так чтоб для чайников: Что делает эта функция и какие у нее операторы? Для чего она нужна и где ее лучше всего применять? Будет отлично, если с примерами.

Hertz: Ха-ха! Сейчас тебе сказжут "внимательно читай српавку" и "зайди на irc-канал, там тебе подскажут"

MasterSet: Ничего у них не выйдет. В справке этого точно нет. А ирке точно нет меня. Будет ведь проще рассказать про DYNAMIC чем объяснять мне как настроить IRC =D

Byte: Это динамическое выполнение кода. Выполняет код, переданный строкой-аргументом: dynamic " e=4 & if e=4:'STRING' "

Byte: В справке про неё написано, с примерами. DYNAMIC [$строка кода],[параметр 1],[параметр 2], ... - выполнение кода. Данный оператор позволяет динамически генерировать код игры. Переданные параметры хранятся в массиве ARGS. После выполнения кода предыдущие значения ARGS восстанавливаются. Примеры: DYNAMIC '$a="string<<$b>>"' DYNAMIC '$a' DYNAMIC 'if $a="string":''text!''' DYNAMIC " $args[0] addobj $args[1] ",'Текст','Вилка'

werewolf: примеры из справки не совсем удачны, поскольку для них DYNAMIC не обязателен а вот если надо присвоить значение переменной имя которой генерируется динамически из частей, то без него не обойтись DYNAMIC " <<$args[0]>>_<<$args[1]>> = args[2] ",'выносливость','волк',10 но обычно нужды в таких извращениях не возникает, и игру можно спокойно сделать и без DYNAMIC

Nex: MasterSet лучше всего ее не применять, без крайней необходимости. Hertz , как тебе не стыдно.

MasterSet: Ладно, я ничего не понял, значит мне действительно ни к чему трогать эту функцию ) А вот насчет того что она есть в справке - странно. Может у меня старая версия? Поиск по слову DYNAMIC там ничего не дает и при чтении я ее не заметил (

werewolf: если у тебя в разделе Базовые операторы языка QSP в самом низу страницы DYNAMIC нет, то справку надо обновлять

Nex: MasterSet описание оператора DYNAMIC есть на странице справки "Базовые операторы языка QSP", легко найти через "указатель". Может у меня старая версия? На http://qsp.su всегда самые последние версии справки и редактора QGen.

MasterSet: Понял. Спасибо. Кстати, небольшой багрепорт. Хотя конечно вряд ли с этим многие столкнутся. Я сижу на Linux Ubunta, в рабочей среде Gnome. QGEN и QSPGUI использую стандартные, из под wine. Все в общем работает нормально, но не отражаются действия оператора menu. Если пускать на той же машине под виндой menu работает нормально в том же коде. Такие дела. Видать гном не умеет с этим работать.

Ntropy: MasterSet пишет: Я сижу на Linux Ubunta, в рабочей среде Gnome. QGEN и QSPGUI использую стандартные, из под wine. Все в общем работает нормально, но не отражаются действия оператора menu. Есть такое, у меня тоже самое, я использую QSP для Linux версии 5.5.9

Byte: Не отображаются пункты меню или иконки в меню? PS: У меня раньше работало всё. Скорее всего, что-то поломали в wx..

Ntropy: Byte пишет: Не отображаются пункты меню или иконки в меню? У меня меню появляется и махом исчезает. QSP под Wine

Byte: Окей, будем разбираться.

MasterSet: Еще вопрос. На этот раз конкретно и по существу. Есть вот такой кусок кода: IF jewels: CLA i = 1 :loop IF jewel[ i ]>0: ACT 'Продать <<$jewel[ i ]>> (<<jewel[ i ]>>) за <<price[ i ]>> золотых': jewel[ i ] = jewel[ i ] - 1 money = money + price[ i ] GT 'Town_jew' END END i = i+1 IF i < 51: jump 'loop' END END В теории этот кусок кода должен просматривать какие драгоценности есть у игрока и выдавать экшены на их продажу по одному. Экшены то он выдает и даже все совершенно так как задумано выглядит только... эти экшены ничего не делают. Как буд-то пустые. Что я пропустил? ЗЫ: тут немного криво код отображается, но думаю понятно.

WladySpb: MasterSet Хм.. Мне кажется, что он у тебя уходит в цикл... после вывода act'а он сразу выполняет i = i+1 IF i < 51: jump 'loop' END а поскольку переменные всё ещё хранят ту же информацию, новый act просто затирает старый..

MasterSet: Тэкс... Но акты то видны, они не исчезли. Ну допустим они становятся пустые. А делать-то что тогда? Я не понимаю как эту задачу решить (

WladySpb: MasterSet У тебя этот код выводит одно действие, или 50?

WladySpb: Выложи более крупный кусок кода, может, не здесь проблема?

MasterSet: В базе пока две драгоценности. Вот так: !ДРАГОЦЕННОСТИ И ЦЕНЫ НА НИХ price[1] = 50 $jewel[1] = 'Серебряный кубок' price[2] = 100 $jewel[2] = 'Золотой кубок' А зачем более крупный кусок кода? там из внешних переменных еще только jewels Он вводится в той же локе вот так: ACT 'Продать драгоценности': jewels = -1 GT 'Town_jew' END А потом обнуляется там же вот так: IF jewels: ACT 'Закончить': jewels = 0 GT 'Town_jew' END END И к этим кускам у меня нет претензий

Byte: В изначальном куске кода этот форум вырезал [ i ] где-то.. (Нужно поставить пробел рядом с буквами "i").

MasterSet: Точно. Он видимо решил что это форматирование. Поставил пробелы - теперь видно. Но [ i ] в коде были. Трабла не в этом (

WladySpb: ACT 'Продать <<$jewel>> (<<jewel>>) за <<price>> золотых': вот в этой строчке нет обращений к массиву, которому ты задал значения price[1] = 50 $jewel[1] = 'Серебряный кубок' price[2] = 100 $jewel[2] = 'Золотой кубок' точнее, он обращается к нему, но к нулевому элементу. интерпретатор видит это так: ACT 'Продать <<$jewel[0]>> (<<jewel>>) за <<price[0]>> золотых': в этой строчке money = money + price опять же, переменная price не является ни price[1] ни price[2], если ты конечно не приравниваешь её значение в другом куске кода. PS Понял, код неправильно отображался..

Byte: Посмотрел исходник.. В общем, проблема в том, что код действия содержит ACT 'Продать <<$jewel[ i ]>> (<<jewel[ i ]>>) за <<price[ i ]>> золотых': jewel[ i ] = jewel[ i ] - 1 money = money + price[ i ] GT 'Town_jew' END Привязку к переменной "i". После выбора действия i будет содержать неактуальное значение. Выход: [pre2] $name='Продать <<$jewel[ i ]>> (<<jewel[ i ]>>) за <<price[ i ]>> золотых' inds[$name]=i ACT $name: i = inds[$selact] jewel[ i ] = jewel[ i ] - 1 money = money + price[ i ] GT 'Town_jew' END[/pre2]

Byte: WladySpb, форум изменил код до неузнаваемости :)

Ntropy: MasterSet пишет: В теории этот кусок кода должен просматривать какие драгоценности есть у игрока и выдавать экшены на их продажу по одному. Экшены то он выдает и даже все совершенно так как задумано выглядит только... эти экшены ничего не делают. Как буд-то пустые. Что я пропустил? В версии 5.6.2 есть функция curacts для получения и сохранения списка действий в переменной, выведи на экран результат функции и там сразу будет видно какие создались действия и что они будут делать.

MasterSet: Шайтан! Заработало. Вроде даже понял как оно работает и в чем была проблема, но мозг с непривычки чуть не вывихнул. Байт - спасибо за подсказку.

Byte: Не за что. Это частый вопрос, надо бы добавить в FAQ :)

MasterSet: Потребовалось проверять числовое значение на четность. Понял что не знаю как это реализовать без извращений. Но почему-то уверен что это должно решаться элементарно... есть идеи?

Byte: if a mod 2 = 0:'Чётное'

hitecnologys: У меня вопрос: можно ли как то заставить квест считывать время с компьютера или считать его в реальном времени???

WladySpb: hitecnologys Время с компьютера считывать нельзя, есть свой таймер, MSECSCOUNT() - возвращает количество миллисекунд, прошедших с момента начала игры.

hitecnologys: WladySpb, а можно потом это таймер сбросить???? Ну типа он отсчитал минуту и сбросился???

WladySpb: hitecnologys Кажется, нет. Впрочем, ты можешь сделать свой таймер на основе этого.

Yashko: hitecnologys, хм... где-то в начале: timer = 0 settimer 1 в каунтере: if timer >0: timer = timer + 1 end там где надо стартануть таймер: timer = 1 и например если прошло 10 секунд, то что-то делало: if timer = 10000: !пишем все что надо end

Yashko: Незнаю что вы именно хотели, но вот что я подумал =)))

Byte: Не надо SETTIMER 1 делать. Надо просто запомнить текущую msecscount, потом считать разницу. К тому же, SETTIMER не гарантирует то, что таймер будет срабатывать точно по заданному интервалу.

Yashko: Можно и так

hitecnologys: я реализовал счётчик времени так, и обрашаюсь к нему когда надо узнать скоько часов минут прошло с начала игры. НО ОН НЕРАБОТАЕТ!!! Я вывел значения переменных, а они равны нулю. ПОЧЕМУ mseconds = msecscount ничего не присваивает??? В чём ошибка??? mseconds = msecscount if mseconds => 60*60*1000:minutes = minutes + 1 & mseconds = 0 if minutes => 60:hours = hours + 1 & minutes = 0 pl "Сейчас <<hours>>:<<minutes>>"

WladySpb: Потому что, mseconds => 60*60*1000 ------- это уже час. Ты подождал час чтобы проверить выводимые значения?) Во вторых, каждый час ты будешь обнулять mseconds = 0 а потом на новом цикле заново присваивать mseconds = msecscount поэтому спустя час минуты у тебя начнут щёлкать со скоростью 1000 в секунду

MasterSet: Можно ли на QSP сделать так, что бы текст двигался снизу вверх, как титры в конце фильма?

WladySpb: MasterSet Стандартными средствами нельзя, извращёнными - наверное можно... Вообще, это прерогатива других платформ, с консольным стилем вывода.

rrock.ru: эээм.. а разве в Komm, susser Tod. не было прокрутки?

MasterSet: Жаль. Ну фиг с ним. Это конечно не главное в игре )

WladySpb: По сути, если не очищать экран, новые строки появляющиеся снизу "выталкивают" текст наверх, при заполнении всей страницы появляется эффект прокрутки. Это самый простой способ, но на мой взгляд некрасивый... Можно попробовать помудрить с кодом и реализовать нормальную прокрутку, это будет код с извратом)

ZeroAnthraX: Здравствуйте! Во-первых, разрешите выразить ВСЕМ благодарность (теперь мой мозг занят) во-вторых... во-вторых у меня вопрос :[ (возможно это по сто раз описывалось... но где ж мне с мееееееедленным интернетом все перечитать?) Преамбула используя в качестве образца пример, описывающий бой (fight.qsp), добавляю действие act 'Еще раз': локация: бой '------------' 'Здоровье: <<здоровье>>' 'Здоровье врага: <<здоровье_врага>>' if здоровье<=0: 'Вас убил <<$имя_врага>>.' act 'Конец':gt 'смерть' else act 'Атаковать': атака_текущая = атака+rand(1,8) 'Вы нанесли <<$имя_врага>> урон <<атака_текущая>>.' здоровье_врага=здоровье_врага-атака_текущая if здоровье_врага<=0: 'Вы убили <<$имя_врага>>.' delact $selact act 'Далее':gt $next act 'Еще раз': exit end атака_врага_текущая = атака_врага+rand(0,10) '<<$имя_врага>> нанёс урон <<атака_врага_текущая>>.' здоровье=здоровье-атака_врага_текущая xgt $curloc end end присвоение акту оператора gt 'бой' приводит к началу боя с мертвым врагом (это понятно) Вопрос что, как, где прописать, чтобы при последующих боях показатель здоровья игрока сохранялся, врага - обновлялся мои предположения за всю ночь свелись к прописыванию здоровья врага в локации-счетчике (при увеличенном SETTIMER) но и тогда происходит убийство трупа... только после этого здоровье врага восстанавливается Бонус-вопрос как посчитать и вывести количество сражений за тот период, пока жив ))) Просто мозг уже не варит... меньше недели знаком с языком и алгоритмом программирования, много инфы в мозг поступило, даже ночью уже снится *may be i'm going nuts?* Благодарю за внимание ) Key words: обнуление параметра, сохранение параметра, счетчик, счетчик посещения локации

Серый Волк: Во-первых, вэлкам! Во-вторых, сейчас ответят :)

ZeroAnthraX: Все-таки мозг работает ))) еще раз огромное СПАСИБО ))) с первым вопросом разобрался для тех, кто будет заинтересован (новички всегда есть ) act 'Еще раз' : gt 'loc_1' В локации loc_1 Выполнить при посещении записываем if здоровье_врага<=0: здоровье_врага= здесь указываем количество НР врага & gt 'бой' end В локации "Начало" я так понял, прописывать здоровье_врага не надо Бонус-вопрос открыт )) Key words: обнуление параметра, сохранение параметра

Byte: ZeroAnthraX разбить "бой" на 2 локации: "подготовка_боя" и "бой". Из игры переходим на "подготовка_боя", вместо "бой". На "подготовка_боя" в "выполнить при посещении" пишем битв=битв+1 & gt 'бой' Когда герой умирает (если после смерти переходим в начало игры, то можно очистить переменные там), устанавливаем битв=0 В переменной "битв" будет общее число "сражений".

MasterSet: to Zero Точно. Эта тема мне сейчас очень близка из-за "Куртуазной баллады". Хиты и тип врага прописываются в той локации откуда идешь с ним на бой, бой обсчитывает отдельная локация, а потом выпихивает тебя обратно откуда начинал. У меня еще по пути прикручены локации с лутом и обнулением боевых переменных (важная штука, кстати!). В общем удачи в начинаниях. Только, если позволишь, совет. ИМХО совершенно ни к чему все эти надписи типа "Вы попали и нанесли 9 вреда". Это скучно. Лучше описывать степень ранения словами, а не цифрами. Так выходит куда красивее и вживаться легче. Бой в конце концов это не математика, а адреналин. Пусть цирфами комп оперирует. А теперь, внимание! Вопрос знатокам: Есть ли возможность как-то запаять файлы шрифтов в самозапускающийся архив с игрой, что бы они использовались в этой игре, в случае, если такие шрифты в системе пользователя не установлены? Ну или вообще хоть как-то их прикрутить, кроме ридми файла с текстом 'Прежде чем играть поставьте эти шрифтры' =) Было бы очень полезно.

ZeroAnthraX: Byte СПАСИБО )) разбираю, что к чему (еще один кусочек еды для мозга ) MasterSet Действительно ценный совет )) Надо будет посидеть, подумать над красивыми выражениями схватки про шрифты - актуальный вопрос.. у меня тоже возникал (но пока с ним не разбирался... потому как в самораспаковывающихся архивах не разбираюсь) PS разобрался!! аж крылья выросли ))

rrock.ru: MasterSet Если использовать самораспаковывающийся архив или даже bat-файл - то никак не получится установить шрифт. Тоесть в итоге остается 2 выхода: 1. Просить пользователя самого установить; 2. Использовать для игры какой-нибудь инсталятор (например NSIS - http://nsis.sourceforge.net/Advanced_Font_Installation) P.S. А если игра будет достойной попасть в Набор Игрока то тогда всё упростится - там как раз инсталлер используется.

Nex: Кстати, в Win7 шрифты проще устанавливаются. Нажимаешь правой кнопкой на файл, выбираешь "Установить".

rrock.ru: Nex в Win7 всё проще... только вот бета VS2010 не ставится вообще

MasterSet: Угу. Насчет инсталятора надо будет разобраться, спасибо. PS: to Zero Ну самый простой выход обозначать успех или провал атак, а степень ранения описывать суммарную уже на противнике. В самом примитиве: задет, ранент, тяжело ранен, при смерти. А вообще если подойти креативно, то можно и куда красивее сделать, конечно.

Ntropy: Для установки шрифта в любой винде нужно скопировать файл в папку Fonts (у кого где, можно определить по переменным окружения) и открыть эту же папку в Проводнике это можно сделать даже из батника.

MasterSet: Представь себе, что тебе надо объяснить это человеку который не умеет прописывать скрипты в .bat файлах...

Nex: Или делать установку/подгрузку шрифтов автоматической(инсталлятор?), или вообще отказаться от использования нестандартных шрифтов. Всяческие лишние предварительные манипуляции по установке игры только отпугнут игрока.

rrock.ru: Ntropy Простое копирование шрифтов в батнике ничего не даст. Когда ты делаешь через проводник скрыто запускается установщик, который прописывает их в реестре.

Ntropy: rrock.ru пишет: Ntropy Простое копирование шрифтов в батнике ничего не даст. Когда ты делаешь через реестр скрыто запускается установщик, который прописывает их в реестре. Ntropy пишет: и открыть эту же папку в Проводнике это можно сделать даже из батника. этот трюк работает, пользователю, нужно будет только закрыть дополнительное окошко

Yashko: хм... вот попробывал что то тип авто запуска игры... http://files.wyw.ru/wyw_file?id=4176189 Качаем, заходим, и запускаем Game Start =)

rrock.ru: Ntropy О__о не знал.. спс. только опять таки меня насторожит открывшееся окно проводника.. даже после того, что я сам запустил этот батник..

Ntropy: rrock.ru У нас это было прописано в инструкции: "После установки закройте окошко Fonts"

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

Nex: Да, авторам как всегда хочется красивостей, а игрокам - интересных игр :(

MasterSet: Я не только автор, но и игрок. Потому могу сказать - красивости не заменят хорошей игры, но сделать ее лучше могут. А потому они отнюдь не бесполезны. Представляете насколько ломовой вещью стал бы, Dwarf Fortress к примеру, если бы у него был красивый графический интерфейс? А с ASCII графикой я в него вообще не могу играть, спасает только графический мод который к нему можно прицепить. Но это все равно не то... ( А вообще это оффтоп.

rrock.ru: Но Ancient Domains of Mystery, или ADOM в народе были и остается прекрасной игрой даже с её ASCII графикой...

Nex: rrock.ru рогалики не всем по душе. Это нормально.

martalex: Друзья, наткнулся на непонимание со стороны интерпретатора. 'Запускается игра ' :старт wait 1500 'Выбираем машину ' wait 2000 'Выбираем гонку ' wait 1200 'Первый круг ' wait 3000 'Второй круг ' wait 3000 'Третий круг ' wait 3000 a=rand(1,3) if a = 1: 'Первое место! ' if a = 2: 'Черт! Второе место. ' if a = 3: 'Всего лишь третье =(' act 'Еще гоночку': jump 'старт' act 'Пожалуй, хватит': gt 'ноут' Ругается последними словами, что указанная метка не найдена. В чем загвоздка?

Nex: Судя по приведенному коду, ты уже имеешь навык программирования. Проблема заключается в этой строке : act 'Еще гоночку': jump 'старт' Из ACT нельзя сделать "прямой переход" к метке внутри кода локации. Переход на метку (JUMP) выполняется только в пределах области видимости, для любого ACT этой областью является код самого ACT. [pre2] *PL '1' *PL '2' *PL '3' ACT 'Действие однострочное': *PL 'выполняется однострочное действие' *PL '4' *PL '5' :метка1 *PL '6' ACT 'Действие однострочное с ошибкой':*PL 'выполняется однострочное действие' & JUMP 'метка1' *PL '7' *PL '8' ACT 'Действие многострочное': *PL 'выполняется многострочное действие' *PL 'вторая строка' *PL 'третья строка' END *PL '9' *PL '10' ACT 'Действие многострочное с внутренним переходом': a=0 *PL 'выполняется многострочное действие' :метка2 *PL 'вторая строка' *PL 'третья строка' IF a=0: a=1 & JUMP 'метка2' END *PL '11' :метка3 *PL '12' ACT 'Действие многострочное с ошибкой': *PL 'выполняется многострочное действие' *PL 'вторая строка' JUMP 'метка3' *PL 'третья строка' END *PL '13' *PL '14' [/pre2] Выхода два: 1. Разбить локацию на части и осуществлять переход по GOTO. 2. В ACT устанавливать особую переменную, делать переход по GOTO, на входе локации переменную проверять и далее переходить на метку при соответствующем значении переменной.

martalex: Мне лестно, но увы мой опыт заканчивается школьным паскалем и очень поверхностным знакомством с Си. Я еще в самом самом начале освоения QSP. В целом понял, сейчас попробую по-другому реализовать переигровку.

Nex: martalex поверь мне, некоторые и этого опыта не имеют. К счастью, школьного паскаля-бейсика вполне достаточно, чтобы без особых проблем разобраться с QSP. На вопросы всегда ответим.

hitecnologys: ПОМОГИТЕ! Непонимаю как использовать html теги!!! Пишу <hr>, а при переходе на лок. пишет что там ошибка синтаксиса!!! ХЕЛП! ЗЫ Переменная usehtml = 1

flir3: Подскажите, пожалуйста, можно ли в QSP использовать двумерные массивы? Или это надо реализовывать массивом в массиве? Заранее спасибо.

Byte: hitecnologys, используй вывод текста. flir3, Как организовать многомерный массив? 1) Самый удобный способ - использование массивов, индексируемых через строки. Например: $карта_вещь['<<x>>_<<y>>'] = 'палка' карта_нпс['<<x>>,<<y>>,<<z>>'] = 12 2) Отображение многомерного массива на одномерный. Например: $карта_вещь[x+y*ширина] = 'палка' карта_нпс[x+y*ширина+z*ширина*высота] = 12

Yashko: стоит = 1 if стоит = 0: act 'Встать': <imgsrc="/стоит.jpg"> end else act 'Сесть': <imgsrc="/сидит.jpg"> end end не пашит) надо чтобы на экран выводило картинку. на первой локе юзхтмл стоит.

Nex: Ты забыл апострофы добавить. И "img src" пишется через пробел, как правильно заметил fireton. У тебя [pre2]<imgsrc="/стоит.jpg">[/pre2] а надо так [pre2]'<img src="/стоит.jpg">'[/pre2]

fireton: Nex пишет: '<imgsrc="/стоит.jpg">' а не <img src=...>? а то новое слово в html, право слово

Nex: fireton действительно :) Я и не заметил пропущенный пробел, спасибо что поправил.

Byte: Символ "/" в начале пути тоже ни к чему :)

Yashko: Млин, забыл дописать 'чтобы выводило на экран'. =)

Yashko: Как сделать на каком-то слове меню? Например: 'Тут лежит: штука1, штука2' на штуке1 - "взять", "использовать" и т.д. на штуке2 тоже самое.

Byte: $m[0]='взять:take' $m[1]='использовать:use' '<a href="exec:menu ''m'' ">LINK</a>'

Yashko: а не: '<a href="exec:menu ''$m'' ">LINK</a>' ?

Byte: Для menu можно с $, можно без :)

Yashko: Byte пишет: $m[0]='взять:take' $m[1]='использовать:use' '<a href="exec:menu ''m'' ">LINK</a>' Не вышло. Вот линк

rrock.ru: Yashko кто-то фанант упячки....))))

Byte: Yashko, а где usehtml=1 ?

Yashko: Упс, забыл rrock.ru Угу ;)

Yashko: Как сделать цвет ссылок черный и без подчеркивания? <a href="exec:menu ''m'' "><font color =black>LINK</a> Черным вышло... Как сделать без подчеркивания - пока не понял.

Byte: Тег <font> надо закрыть: <a href="exec:menu ''m'' "><font color=black>LINK</font></a> Подчеркивание убирать не нужно.

Ajenta: Ну если хочет человек убрать подчёркивание, зачем ему отказывать? :)

Yashko: Byte пишет: Подчеркивание убирать не нужно. Нада =)

Ajenta: Yashko Стучись ко мне в аську, я тебе расскажу все интимные подробности языка кусп.

WladySpb: Ajenta О_о

Ajenta: WladySpb Ну, пытливому уму нужно идти на встречу. Вдруг он со временем начнёт писать хорошие игры.

stabilizator: У меня проблема,при запуске квестов вылетает ошибка : Код ошибки 104.Описание : Указаный файл недоступен или не найден .Версия для Windows Mobile ,Версия 0.7.1

Yashko: Ajenta пишет: Вдруг он со временем начнёт писать хорошие игры. Что в твоем понимании - "Хорошие"?

Ajenta: Yashko Применительно к тебе: более литературные и менее "кривые" в плане оформления интерфейса.

Byte: stabilizator, напиши в тему про QSP_CE :)

Yashko: Ajenta Хм...

Hertz: у меня вопрос к отважному админу. Byte, а можно у вас попросить убрать из каталога мою игру? Во-первых, она отвратительна. Во-вторых, я хочу сделать её с нуля с учётом изложенной критики. Давно я её писал, ничего тогда не понимал

Byte: Не так уж она и отвратительна :) Может, ты сделаешь новую версию и просто обновим, когда она будет готова? Не хочется убирать текущую - в каталоге есть игры и похуже..

Ntropy: И вот теперь все бросились искать и играть в вышеупомянутую игру, что бы проверить: "А так ли она плоха для каталога, и а так ли она хороша?" :) P.S. Накопитель qsp.su/files/comment.php?dlid=62

Hertz: Byte дело в том, что новая версия будет иметь с ней мало общего... т.е. по сути дела это будет новая игра. Ntropy а я не упоминал здесь названия игры, я просто спросил не нужно в неё играть, она скучная и делалась с целью попробовать свои силы и научится писать на куспе

Byte: Hertz, ну мне старая тоже нравилась, в общем-то :)

Hertz: У меня вопрос насчёт реализации. Допустим, у меня уже есть произведение с возможностью выбора развития сюжета. Сам сюжет очень не линейный и концовок много. И вдруг задумал я сделать продолжение. Возникает вопрос: как сделать так, чтобы события первой части учитывались в самом начале и по ходу второй части. у меня в голове возникли такие варианты: - добавить вторую часть к первой в том же файле. минус такой: придётся первую часть играть снова. - сделать в конце первой части сохранение всех переменных и подгружать их в начале второй части. минус тот же: если сохранение потерялось, то придётся первую часть играть снова. - сделать продолжение таким, чтобы нём учитывались только те события первой части, которые точно произошли. минус: так не интересно, вся нелинейность концовки пропадает. жду советов, как лучше всего это сделать.

Nex: Hertz Первый вариант - вообще непонятно что. Второй при любой реализации настолько тебя ограничит и все усложнит, что неминуемо приведет к провалу - игра не будет закончена. Третий вариант отлично был исполнен в Fallout 1 - Fallout 2. Тебе стоит взять с них пример. минус: так не интересно, вся нелинейность концовки пропадает. С точностью до наоборот. В нелинейном сюжете, главное - не нелинейность, как бы ни хотелось этого фишко-маньякам. В любом нелинейном сюжете, главное - сюжет.

Hertz: Nex Чем же непонятен первый вариант? Я не играл в Fallout, так что можно, в общих чертах? Понятно, что важен сюжет. Но если по ходу этого самого сюжета, например, существует выбор останется ли жив или умрёт какой-либо второстепенный персонаж, то ведь нужно как-то отобразить этот выбор в продолжении, где он будет просто упоминаться его судьба. Вариант начала второй части из серии "прошло сто лет, все кто был в первой части - умерли, как они умерли - никому не известно, речь пойдёт о правнуке главного героя той части"

Nex: если по ходу ... сюжета ... существует выбор останется ли жив или умрёт какой-либо второстепенный персонаж, то ведь нужно как-то отобразить этот выбор в продолжении, где он будет просто упоминаться его судьба. Не нужно. Зачем? Ради возгласов "ах, как нелинейно"? В Fallout 1, 2 - играть обязательно. Станешь лучше разбираться в нелинейных сюжетах и "продолжениях" таких сюжетов. В "общих чертах" не передать, играй, вникай. Ты всегда можешь сделать по-своему, наступить на исхоженные грабли и меня не слушать. Ты спросил, как сделать лучше - я ответил. Дело за тобой. Оправданий для твоих ошибок от меня не жди.

Ajenta: Hertz пишет: жду советов, как лучше всего это сделать. Если ты будешь учитывать во второй части всю нелинейность первой, ты с ума сдвинешься, особенно если вторая часть - такая же нелинейная. :) Я имею ввиду нелинейность с кучей концовок, конечно. Нелинейность может ведь быть и с одной концовкой, тогда всё проще. :)

MasterSet: Согласен с аджентой. Ориентируйся на опыт консольных файтингов - там концовка конкретной игры зависит от того кем ты прошел игру, но есть один сюжет который считается основным, канонинчым. И на него закладывается следующая версия игры. А остальные концовки считаются ответвлениями от основного сюжета. Но если ОЧЕНЬ-ОЧЕНЬ хочется все таки во второй игре использовать переменные первой... Тогда опять же пользуйся опытом консолей. Там не было опции сохранения, но на определенных этапах игра выдавала тебе код для продолжения с этого места. Пусть твоя игра в конце выдает код, задающий стартовые параметры второй части. Например, у тебя есть 8 элементов которые могли по разному сложиться в сюжете. Определи для каждого элемента позицию в кодовом слове и для каждого варианта сюжета букву. Например, если мистер Х жив, то в первой позции слова стоит А, а если умер то Б. В итоге получится что то вроде ББАВГААБ. И оно будет четко кодировать ключевые выборы в пройденной игре. А вторая часть должна иметь возможность это дело расшифровывать и подставлять нужные значения переменных. Но лучше послушай глас народа и забей ))))

Logger2: *PRIVAT*

MasterSet: Внимание - вопрос. Известно, что можно выбирать варианты цифрами. А можно ли сделать так, что бы вариант номер один выбирался нажатием Enter? И как?

Byte: Варианты еще можно выбирать на расширенной клавиатуре :) По Enter'у нельзя.

MasterSet: Ясно Прям режут крылья моей мечте

Hertz: Чем циферки не устраивают?

MasterSet: Человеку привычнее жать Enter когда это надо делать много раз подряд. Игрока надо любить и без нужды его в когнитивный диссонанс не повергать )

Hertz: Дело привычки. В Football Manager надо жать пробел - пока ещё никто не жаловался.

MasterSet: Пробел уже лучше. А как на него настроить?

Hertz: Нет, это не в куспе. Я просто пример привёл, что далеко не факт, что человеку привычнее enter жать много раз подряд. На самом деле утверждение "Человеку привычнее жать Enter когда это надо делать много раз подряд" -- вообще ложное.

MasterSet: С точки зрения формальной логики, воозможно, однако у нас тут простой форумный флейм а не зачет по логике, верно? Существует дополнительное, очевидное из контекста условие. Если это так сложно, могу переформулировать: Назовем все совокупное множество кнопок на клавиатуре Х, а все совокупное множество юзеров игравших до этого в различные компьютерные игры числом не менее 50-ти Y. В таком случае, для каждого члена множества Y существует такое отличное от нуля и не превышающее 6-ти подмножество кнопок, входящее в множество Х, которое он чаще других использовал для для прокрутки игры далее. Назовем это подмножество Z. Теперь, разделим подмножества Z каждого члена множества Y на четыре класса. Те, в подмножество Z которых входит клавиша "Enter" мы назовем Z1 Те, в подмножество Z которых входит клавиша "1" назовем Z2 Te, в подмножество Z которых входит клавиша "Пробел" назовем Z3 И наконец тех, в чьем подмножество Z не входит ни одна из вышеперечисленных клавиш мы назовем Z4 Я утверждаю: Z1 > Z2 При этом НЕ делается утверждения относительно соотношения Z1 и Z3 Множества Z1, Z2 и Z3 могут пересекаться. Устраивает? ЗЫ: И почему тут все упорно считают меня лжецом??? Это уже раздражает.

Ajenta: MasterSet пишет: ЗЫ: И почему тут все упорно считают меня лжецом??? Это уже раздражает. Наверное, потому что аватарка такая

Ntropy: Короче: вероятностная предопределённость, из 100 человек незнакомых с программой/игрой, большинство будет хотеть нажать кнопку пробел или enter и только потом 1. Почему, а потому что эти кнопки чаще всего встречаются.

MasterSet: ППКС

MasterSet: Вот и еще вопрос. Как изменить названия разных окошек? Например, что бы вместо поля "дополнительное описание" было просто "описание"? Тупо открыть конфиг и там поправить почему-то не работает: после запуска программа сбрасывает названия окошек к умолчаниям и переписывает конфиг (

Byte: Да, названия берутся из языковых файлов) Может, просто отключить эти заголовки?

MasterSet: А как?

Byte: Создать для игры конфиг, в нём отключить заголовки окошек (прямо из плеера) :)

MasterSet: ээээ.... нипонял. я не вижу таких опций в менюшках плеера Подробнее можно?

Byte: "Установки" / "Показать / скрыть" / "Заголовки"

MasterSet: Ага. Так лучше. Спасиб

Hertz: MasterSet пишет: И почему тут все упорно считают меня лжецом??? Это уже раздражает. Во-первых, никто не называл тебя лжецом. Во-вторых, не надо обобщать. А вообще забавно про частоту нажатия enterа или пробела. Уверяю вас, что юзеры чаще нажимаю не какую-то конкретную, а именну ту, которую в данный конкретный момент нужно. А нужной кнопкой очень часто является именно Ентер просто потому, что милые и дорогие разработчики боятся за то, что юзеры по развитию своему близки к мандарину и не догадаются нажать 1, +, y и т.п. Но это всё шутки прибаутки. А если серьезно, то раз предполагается, что нужно будет часто выбирать первый пункт меню нажатием ентера, то видимо будет иметь место локация с одним единственным действием, а для таких локаций я бы сделал возможность нажать на единственное возможное действие эникеем. Вот это было бы дело.

Byte: А если кто-то захочет, к примеру, скопировать текст описания? Или выбрать пункт меню горячими клавишами (ctrl+..., alt+, alt+enter, page up/page down, стрелки для скроллинга описаний).. Хотя, для одного действия возможно имеет смысл сделать обработку нажатия пробела :)

Ajenta: Ужжжас.

MasterSet: Byte пишет: имеет смысл сделать обработку нажатия пробела Имеет. Ajenta пишет: Ужжжас. ХДЕ??

Ajenta: Не надо никаких клавиш. И пусть всё остаётся как есть - оно итак удобное.

MasterSet: Кому не надо? Мне лично - надо. Ибо душно и тесно в рамках одной только формы делать совершенно разные по концепции игры )

Nex: MasterSet экшен что ли?

Byte: Пробел добавлю в следующей версии :)

MasterSet: Экшен на одном пробеле. А что - сильная мысль!

Ajenta: Ужжас. MasterSet пишет: Ибо душно и тесно в рамках одной только формы делать совершенно разные по концепции игры ) Ну ничего, я же делаю. :)

MasterSet: Ну, честь тебе и хвала. Делай наздоровье. Только прямо так скажем, ты тоже не слишком в рамках. Кто-то там помнится вообще предлагал HTML банить, что бы не увлекались красивостями. А у тебя даже анимация изо вех щелей )

Ajenta: Ну вот, и ломать рамки мне не мешает то, что в обычном плеере нет абсолютных размеров экрана :))

MasterSet: Мешает-мешает. Просто мы превозмогаем.

Hertz: В идеале было бы сделать возможность для каждого act прописывать кнопку/кнопки по нажатию которой/которых он будет нажиматься. Например act 'Да да да!!!' {y;д;enter}: gt 'yes, baby!'

Byte: Нужно подумать над подобным вариантом.

Hertz: Да внатуре, Герц говна не посоветует!

MasterSet: Поддерживаю

[Ray]: Hertz можно же будет экшн писать! Byte Очень сильно прошу сделать поддержку onMouseOver тега. Sumimasen!

Byte: [Ray] это в планах для Aero :)

Nex: Кстати, да. Зачем ломать стандартный текстово-ориентированный QSP, когда всякие оформительские ухищрения можно без всяких осложнений запихнуть в Аэро?

MasterSet: Угу. Только запихайте еще в Аэро что-нить такое что бы оно еще запускалось до кучи. А то обидно будет )

Nex: MasterSet это к Байту.

Byte: MasterSet, у тебя нет внешнего IP-адреса? я мог бы подключиться, к примеру, radmin'ом и попробовать настроить.

MasterSet: Неть

Ajenta: Бу MasterSet , можно через скайп видеть окно пользователя. И ещё есть парочка приложений, которые позволяют в запущенных у друга приложениях тыкать мышкой по сети. Так что всё-таки советую, не часто Байт предлагает самолично всё настроить

MasterSet: Ага. А потом будет еще ветка на десять страниц как мне настроить то приложение с помощью которого Байт поможет мне все настроить )

Ntropy: Есть еще вариант сделать готовый запускаемый файл с броузером, флашем и aeroQsp внутри, поставить всё это и запаковать тулзой Thinstall. Просто тыкаешь и запускается. Или как вариант заливаешь файлик на narod.ru и оттуда запускаешь через AeroQSP по http, и сваять для этого батник. Update: Кстати "народ.ру" не нужен, достаточно просто локального Web-сервера, что бы и игра и AeroQSP лежали в одной папке и открывались бы с одного сервера. MasterSet, когда скачаешь и поставишь www.denwer.ru тогда я помогу продолжить настройку что бы всё заработало.

Ajenta: ну об этом вы можете и в личке поговорить или в аське

MasterSet: А вот ты Аджента, мне в аське не отвечаешь и личные письма игнорируешь! Неужели я настолько недостоин твоего внимания?

Ntropy: Или на канале #qsp

MasterSet: Что-то оно все стремное какое-то

Ajenta: MasterSet пишет: А вот ты Аджента, мне в аське не отвечаешь и личные письма игнорируешь! Неужели я настолько недостоин твоего внимания? Сорри. На форуме прочитала и забыла, а аську я не включаю часто :( Если хочешь общаться - стучись в гуглток (ajenta.arrow@gmail.com), или на ирку - там я с утра до вечера. Уукс меня по письмам тоже никак достать не мог :)

MasterSet: Внимание вопрос: У меня есть код в котором при входе на любую новую локацию цвет фона и шрифта принимают определенный состоянием некоторой переменной цвет. И это работает нормально, но! Когда я встраиваю такой код: IF list = 13: BCOLOR = RGB (1,1,1) FCOLOR = RGB (250,250,250) $BACKIMAGE = 0 CLR PL ' ...' END При этом после обработки данного куска, автоматического перехода на новую локацию не подразумевается. Только по команде. Цвет тем не менее остается тем, который был определен при входе на локацию. Все остальное работает как задумано. Ничонипанимаю. Знатокам минута на размышление. Отвечает Byte

Byte: Из описания ничего не понял.

Ajenta: MasterSet Если цвета определяются в конце локации, а так по-видимому и есть, то ничего не меняется. :)

MasterSet: ыыы.... Короче, в локации обработчике перехода на новую локацию встроена смена цвета фона. И она почему-то подавляет цвет фона который я выставляю на целевой локации. Все равно не понятно?

Hertz: Наверное, на целевой локации цвет криво выставлен.

Byte: Локация-обработчик перехода на новую локацию обрабатывается _после_ целевой локации :) То есть, когда мы делаем gt 'new', сначала выполняется "new", а потом $onnewloc.

Byte: Вариант - на локации, где выставляется BCOLOR выставлять также какую-то переменную (например COLORCHANGED) в 1. Далее на $onnewloc проверяем if COLORCHANGED=0: .... (меняем цвет). При выходе из $onnewloc устанавливаем COLORCHANGED=0, чтобы следующая локация обрабатывалась как обычно, если на ней снова не установлено COLORCHANGED=1.

MasterSet: Ясно... абыдно. Ну ладно. Спасиб.

Byte: В описанном варианте нужно будет всего лишь сделать на локации COLORCHANGED=1, если там менялись цвета - всё остальное-то также :)

Сидан Рейдан: Граждане, не подскажете, как обращаться с функцией "...MAINTXT() - возвращает текст, находящийся в основном окне описаний..." - (с) справка. Что, допустим, необходимо писать в скобки? Метод науч. тыка не помог))

Nex: Сидан Рейдан ничего не пиши в скобки.

Сидан Рейдан: Угу, спасибо, я сперва вообще неправильно её предназначение понял. Думал, восстанавливает очищенные командой "*clear" тексты...

Ajenta: Сидан Рейдан пишет: Думал, восстанавливает очищенные командой "*clear" тексты... Ну для этого её тоже можно использовать вроде. Только добавить запись нужно :)

Byte: Нужно справку переделывать =( Кстати говоря, там вообще скобки не обязательно писать.

Hertz: а многомерные массивы не поддерживаются?

Byte: В справке есть пример для многомерных массивов - в FAQ.

Hertz: честно говоря для меня было не очевидно, что упоминание о такой важной вещи есть только в FAQ'e.

Byte: Да, надо ссылку поставить..

MasterSet: Вот задачка для мозгового штурма, мой мозг уже сломался. Нужен математический склад ума. Нужно реализовать расчет шанса пробития разным оружием разной брони. При этом болшая тяжесть брони может как увеличивать так и уменьшать этот шанс, в зависимости от того каким оружием бьют. Поясняю на примере: Кинжал хорошо пробивает самую легкую броню (скажем 80% шанс), но плохо берет латы (например шанс 20%) В свою очередь топор пробивает тяжелую броню с легкостью (80%), но шанс повредить человеку в легкой ниже - тот просто успевает отскочить (20%) При всем при этом оружия несколько типов, есть не только восходящие и нисходящие последовательности но и сходящиеся - меч к примеру лучше против средней тяжести брони, но пасует на легких и тяжелых. Вопрос, есть ли возможность реализовать это без поименного перечисления всех вариантов броня/оружие по парам. Ибо гемор страшный выходит. Я жертва комбинаторного взрыва?

Ntropy: По мне нужно броне и оружию добавить характеристик, типа скорости и вязкости и с ними уже формулу составлять.

Logger: По моему - можно не заморачиваться особо вообще (если не стоит задача построить мат. модель боя на холодном оружии). Потому как если "по уму", то надо еще считать 1) вероятность соскальзывания удара или удара "по касательной". Особенно важно для тяжелых доспехов класса чешуя/латы 2) вероятность нанесения повреждений не пробивая брони. Удар дубины по кольчуге не оставит на кольчуге никаких поврежений....надо будеть только вытряхнуть мешок ломаных костей из этой кольчуги. Аналогично для топора и т.п. 3) кинжал может пробивать и тяжелый доспех (латы/чешуя) при условии что кинжал предназначен именно для пробивания доспехов (по просту - острое граненое шило с закаленным концом) 4) положение противников во время боя. Двуручный меч/секира наносит страшный удар...но если противник с нинжалом подошел вплотную, то просто не получится нужный замах 5) собственно тип удара. Укол эстоком и рубящий удар эстоком будут иметь огромную разницу в последствиях. и много других тонкостей... А можно ничего не считать, а довольствоваться двумя параметрами...например: 1) коэффициент поражения оружия (КО) - эффективность оружия (перочинный нож - миниум, двуручная секира - максимум) 2) коээфициент защиты доспеха (КД) - эффективность доспеха (нет - нет и защиты, латы - маск. защита) При расчете боя к каждому парамету добавляется некий параметр Мастерство (того, кто держил оружие или одел доспех, показывающий общее умение вести себя в бою) и 1D6. Если КО+М+1D6 > КД+М+1D6 - удар прошел. Вычитаем из Хитов носителя доспеха разницу межды правой и левой частью. Если < - то удар не прошел (не пробил доспех или обладатель последнего увернулся) Система позволяет моделировать практически все ньюансы, от ловкого противника без доспеха до неповоротливого слабака в хороших латах. На потерю в скорости от тяжелого доспеха можно поправку не делать, в течении пары минут любой сможет быстро бегать в латах (если он их до этого регулярно носил), а дольше бой будет редко продолжаться, если это не битва 2х армий.

MasterSet: Logger пишет: "по уму", то надо еще считать Знаем плавали. Я лет пять назад озадачивался построением реалистичной системы для настольных RPG. Много говорил с истфехами, читал оружейные форумы и даже одного военного историка мучил неделю. Но когда в общих чертах составил систему сразу стало понятно что для настолки это не пойдет - совершенно муторно это считать, бой будет не интересным и очень долгим. В случае реализации на компьютере чуть легче, но всеравно безблагодатно, так что... Logger пишет: А можно ничего не считать Да хотелось сделать даже еще проще чем ты предполагаешь и обойтись одним параметром. Там система то на самом деле примитивная и с небольшим количеством оружия / брони. А мастерство боя ГГ вообще зависит исключительно от способностей самого игрока - оно параметрами не задается. Ладно, буду делать таблицу.

MasterSet: Вот, тупой вопрос, но что-то меня переклинило. Как сделать переход на текущую локацию (т.е. что бы локация обновилась) если это надо реализовать в общем случае. Т.е. нужен предмет в инвентаре, кликнув на который ты обновишь описание локации в которой находишься.

Ntropy: CURLOC() - возвращает название текущей локации. нужно сделать [pre2]gt curloc()[/pre2] P.S. взято из хелпа http://qsp.su/files/index.php?subcat=5

MasterSet: Я тоже так думал, но что-то не пашет. Наверное ошибся где-нибудь - щас перепроверю. Вот еще вопрос, можно ли стандартными средствами вывести окошко выбора "да/нет"?

Ntropy: MasterSet вроде нет, только окошко с одной кнопкой и текстом или окошко с полем ввода текста и одной кнопкой. Нужно делать отдельную локацию

Nex: Ntropy скобки не нужны.

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

MasterSet: Hertz пишет: к вопросу об оружии В том то и дело, что я морочился сначала с двумя (даже тремя) показателями, а потом подумал какого? Можно объединить. Сопственно все уже воплощено в коде и работает. Проблема только в том, что упростить удалось незначительно, хотелось большего.

WladySpb: По любой рпг системе, лучше разделять броню\шанс пробоя и меткость\уклонение. Но вообще не рекомендую заморачиваться на реализм. Поскольку максимальный реализм - это смерть от одного удара в сердце кинжалом, или от удара топором по голове, причём вне зависимости от уровня и статов) Я в своё время обдумывал реалистичный набор статов и параметров, получилось что реально скучно это будет, либо вообще не играбельно.

MasterSet: WladySpb пишет: По любой рпг системе, лучше Я бы был поосторожнее с утверждениями про любую систему. И выше про реализм уже писал кстати, прмерно то же что и ты ) То что я пишу, ни разу не попытка сделать сложно и/или реалистично. Очень даже наоборот. Просто надо развести несколько типов оружия.

WladySpb: MasterSet Введи классификацию с типами оружия, правда, тебе всё равно придётся создавать что-то типа БД по оружию, любое усложнение системы, даже самое маленькое, влечёт за собой огромные усложнения кода.

MasterSet: Угу. Я так и сделал уже.

MasterSet: Вот такой вопрос. У меня есть некоторая переменная, допустим first Ее в качестве значения использует другая переменная из некого массива, допустим $massive[1] = 'first' В нужном месте мы получаем ее примерно такой манипуляцией: index = 1 $number = $massive[index] Какую манипуляцию произвести, что бы переменная first увеличила свое значение на единицу, если на руках у нас только значение $number Т.е. нельзя просто написать first = first + 1, поскольку нам она дана только как значение $number. Уххх... надеюсь понятно.

Yashko: Ничччего не понял. Тебе надо добавить к first +1, используя только $number?

Byte: dynamic '<<$number>>+=1'

MasterSet: ага, вот зачем динамик нужен. Щас попробуем

MasterSet: Нет, Байт, это не то. Такой код выводит значение first + 1 на экран. А мне нужно чтобы реальное значение first как переменной увеличилось на 1, без демонстрации данного факта игроку.

Byte: Ты что-то не так делаешь :) Покажи код? dynamic выполняет переданный код, сам по себе он не показывает ничего.

MasterSet: $trophy = $trophy[enemy] dynamic '<<$trophy>> + 1'

Byte: MasterSet нужно не "+", а "+=". Ну или dynamic '<<$trophy>> = <<$trophy>> + 1'

MasterSet: Так, это работает, но мой мозг все еще вывихнут, так что следующий близкородственный вопрос. Предположим $trophy[1] = 'rat_tail' при этом $rat_tail = 'Крысиный хвост' Как нам из $trophy[enemy] получить вывод на экран значения 'Крысиный хвост'?

Byte: dynamic " $<<$trophy[enemy]>> "

Ntropy: MasterSet [pre2]dynamic "$<<$trophy[1]>>"[/pre2] при выполнении подставляется значение в угловых скобках [pre2]dynamic "$rat_tail"[/pre2] которая потом выполняется как будто бы ни dynamic ни кавычек нету [pre2]$rat_tail[/pre2] эта строчка просто выводит значение переменной $rat_tail в окно описания результат: [pre2]'Крысиный хвост'[/pre2] в основном описании

MasterSet: А посреди текста можно это как то тиснуть? У меня пока получается Добыча: Крысиный хвост Но не Добыча: Крысиный хвост

Byte: Например, вывести через *p :) *p 'Добыча: ' dynamic "$<<$trophy[1]>>" Или сразу указать текст: dynamic " 'Добыча: ' + $<<$trophy[1]>> "

MasterSet: Ага, там плюсик значит надо... А если после текст еще какой-то идет, то нормуль? Ну там например dynamic " 'Добыча: ' + $<<$trophy[1]>> адын штук " ааа... туплю. понял: " 'Добыча: ' + $<<$trophy[1]>>' + ' адын штук' "

Byte: Да.

Seguro: каким должен быть код чтобы локация появлялась при соблюдении определенного условия? как варианты примера если заплатить определенную сумму,нажать рычаг и т.д. и т.п. P.S. есть какой нибудь учебник на русском по генераторам(монстры,события,действия если параметр достиг N,и т.д. и т.п.)?

Byte: Есть справка - http://qsp.su/files/comment.php?dlid=7 и уроки по TXT2GAM: http://ifwiki.ru/QSP_%D0%A3%D1%80%D0%BE%D0%BA%D0%B8

MasterSet: ВНИМАНИЕ: ВОПРОС Есть некий массив переменных состоящий из нескольких десятков элементов. Надо проверить все ли значения переменных в массиве равны нулю или некоторые являются положительными. Как это проще всего сделать?

Byte: Массив переменных - в смысле, в массиве записаны имена переменных? Сделать можно через цикл и функцию DYNEVAL.

MasterSet: weapon[1] = 0 weapon[2] = 0 weapon[3] = 1 weapon[4] = 0 ... weapon[60] = 0 Можно на примере? А то когда я пытаюсь в справке прочитать про эту DYNEVAL у меня только глаза на лоб лезут.

Byte: [pre2] a=0 b=1 c=0 $массив[]='a' $массив[]='a' $массив[]='a' $массив[]='c' $массив[]='c' i=0 positive=0 :loop if i < arrsize('$массив'): if dyneval($массив[ i ])>0:positive=1 i=i+1 jump 'loop' end iif(positive,'Найдены положительные элементы','Все равны 0')[/pre2]

Byte: MasterSet пишет: weapon[1] = 0 weapon[2] = 0 weapon[3] = 1 weapon[4] = 0 ... weapon[60] = 0 Можно на примере? А то когда я пытаюсь в справке прочитать про эту DYNEVAL у меня только глаза на лоб лезут. Тогда тут проще, DYNEVAL не нужна: [pre2] i=0 positive=0 :loop if i < arrsize('массив'): if массив[ i ]>0:positive=1 i=i+1 jump 'loop' end iif(positive,'Найдены положительные элементы','Все равны 0')[/pre2] UPD: Исправил код, изначально забыл убрать $ из $массив.

Seguro: Как вставить в описание предмета/животного(сам предмет/животное в инвентаре) рисунок? Пробую например IF $selobj = "Пес: CLR PL <H2><center><<$Namedog>></center></H2></font><BR> <center><TABLE><TR><TD><img src = "content/dog/<<$dog>>.jpg"></TD> end PL "Этого пса вы поймали и приручили" unsel END так выдает ошибку синтаксиса Избражение собаки в данном примере генерируется случайно и должны сохраняться при взятии п в инвентарь. А при взятии нового должно ссылаться на изображение и характеристики телепорта и т.д. если это возможно. И еще можно сделать так чтобы если по сюжету ты ловишь несколько животных(например пес 1,пес 2,пес 3 ).то в инвентаре отображались их имена,а не название предмета т.е. если мы назовем пса 1 барбосом,пса 2 цезарем,пса 3 рексом то в инвентаре будет именно барбос,цезарь и рекс,а в описании характеристики сгенерированные(желательно чтобы характеристики генерировались прежней командой и только одной для всех животных) во время поимки каждой собаки. Пример используемой мной команды генерирования характеристик <BR><<$Сила>><<$Ум>> <<$Возраст>> заранее спасибо

werewolf: Seguro пишет: так выдает ошибку синтаксиса если этот кусок кода ты копировал один в один, то там 2 ошибки 1) нет азкрывающей кавычки в if условии - должно быть IF $selobj = "Пес": 2) кусок текста который выводится по pl не заключен в кавычки - должно быть 'PL <H2><center><<$Namedog>></center></H2></font><BR> <center><TABLE><TR><TD><img src = "content/dog/<<$dog>>.jpg"></TD> '

Byte: Иконка для предмета указывается вторым параметром: addobj 'Предмет','content/dog/<<$dog>>.jpg'

Seguro: Byte а можно задать через эту или аналогичную команду размер иконки,допустим 100*100?

Byte: Для этого нужно в названии предмета явно указывать <img src=".." width=100 /> Либо использовать Аэру - там такое можно.

Seguro: Спасибо за предыдущий ответ.Еще вопрос как задать,чтобы для прирученного животного сохранялись сгенерированные параметры? задал PL "<center>Вы осматриваете своего <<$Namedog>>" PL "<b>Сила <<$Сила>></b>" PL "<b>скорость <<$скорость>></b>" PL "<b>Челюсти:</b> <<$цвет>>" PL "<b>Зубы:</b> <<$ноги>>" PL "<b>Ловкость:</b> <<$ловкость>>" PL "<b>Ум:</b> <<$ум>>" PL "<b>возраст:</b> <<$возраст>>" параметры читает,но сохраняет для всех животных в т.ч и тех на которых еще охотимся.Мне же необходимо,чтобы параметры сохранялись только для прирученного экземпляра. та же проблема и с изображением. И еще если уже есть <<$Namedog1>> как можно задать чтобы следующий экземпляр движком автоматически распознавался <<$Namedog2>>,затем<<$Namedog3>> и т.д. без прописывания в лоакции с описаниями т.е. прописал 1 раз <<$Namedog>> а дальше распознается как уже указано

Yashko: Непонял. У тебя $Namedog - это имя бота? И можно их приручать? И при каждом бою, в начале выставляются параметры (PL "<b>Сила <<$Сила>></b>" PL "<b>скорость <<$скорость>></b>" PL "<b>Челюсти:</b> <<$цвет>>" PL "<b>Зубы:</b> <<$ноги>>" PL "<b>Ловкость:</b> <<$ловкость>>" PL "<b>Ум:</b> <<$ум>>" PL "<b>возраст:</b> <<$возраст>>") Если я правильно понял, то сделай локацию "приручение" *** $mydog=$namedog $mydogсила = $сила ... и так каждый параметр. *** И на бою, "приручить", при нажатии: gs 'приручение'

Yashko: Эм... Понятно? =)

Seguro: Да $Namedog имя бота,локацию ща попробую,вроде понятно

Yashko:

Seguro: Т.Е. если я правильно понял в случае такого действия IF OBJ "Сеть": ACT "Поймать сетью": energy = energy + 1 - starving def = RAND (1,10) + ловкость IF def > atk: msg "животное рвет сеть и убегает в лес" GT "домой" END IF def < atk: msg "Вы ловите хищника в прочную сеть" ADDOBJ "Добыча" GT "решить что делать с добычей" END END GS "приручение" прикрутить после GT "решить что делать с добычей".и можно авоматизировать чтобы при поимке $Namedog2(3,4...)автоматически прописиывалось для каждого нового бота или придется вручную писать? последнее ограничит число приручаемых ботов

Yashko: Хм... Мало что понял, но да. Вам надо сделать чтобы несколько животных можно было приручать?

Seguro: угу,но я так понимаю все придеться вручную (т.е. не автоматизируешь процесс чтобы во время прохождения игра автоматически создавала $mydog2=$namedog2, $mydog3=$namedog3 и сама прописывала характеристики ) и команды будут выглядеть примерно так $mydog2=$namedog2 $mydog2сила = $сила и т.д. для каждого нового бота

Yashko: Вообще, лучше сделать чтобы можно было приручить только 1 бота. Но можно его менять. Захотел нового - отпустил старого, и приручил нового. Но если таки хочешь чтобы можно было приручать несколько ботов, то в начале mydogs=1, и при каждом приручении mydogs+=1 Когда приручаешь, то $mydog+str(mydogs). И при каждом новом приручение, номер бота+1. И когда приручаешь, то дается последний номер. Я конечно не знаю, выйдет ли $mydog+str(mydogs), но попробуй

Yashko: Seguro пишет: $mydog2=$namedog2 $mydog2сила = $сила и т.д. для каждого нового бота А это зачем? (выделленно) Если у тебя бот namedog, то он один. Просто в начале каждого боя принимает новое значение.

Seguro: Несколько ботов это для пробы пера,в готовом варианте поживем-увидим. И можно задать команду чтобы изображение в описании задавалось именно командой генерации изображения бота?которая выглядит так <img src="content/bot/<<$dog>>.jpg"> (это без html кодов для центрирования,задавания цвета надписи и т.п.) $mydog2=$namedog2 это бот 2 ,как я предполагал должен выглядеть,правда не проверял

Yashko: Нет, так вроде нельзя.

Yashko: Можно сделать так: if $dog=1: '<img src="content/bot/1.jpg">' if $dog=2: '<img src="content/bot/2.jpg">' if $dog=3: '<img src="content/bot/3.jpg">' и т.д.

Byte: Seguro, почитай про массивы в справке. Они позволят избавиться от такого: $mydog2=$namedog2, $mydog3=$namedog3

Seguro: Yashko вобщем закончил с прописыванием (и тестиррованием тоже) в локации "Приручение добычи" IF OBJ "Добыча": ACT "приручить": GS "приручение" End $Namegirl = input ("Как вы назовете сущетво?") IF $Namedog= 0: $Namedog = "Пес-мутант" END ADDOBJ "<<$Namedog>>": end end и перестала вообще видеть параметры в локации описаний,там сейчас например PL "<b>Сила <<$Mydogсила>></b>" в локации приручение соответственно $Mydogсила=$Mydogсила(в варианте $Mydogсила=$Mydogсила то же самое),хотя параметр Сила видно в описании. В инвентаре это выглядит так Вы осматриваете своего пса сила: А должно быть например Вы осматриваете своего пса сила: очень слабый

Byte: Seguro IF $Namedog= 0: Здесь нужно сравнивать не с 0, а с пустой строкой: IF $Namedog='': Далее ADDOBJ "<<$Namedog>>": end Здесь ":" не нужно, соответственно end тоже.

Seguro: Не могу избавиться от этого бага при попытке посмотреть описание любого другого предмета срабатывают скрипты именно бота и соответственно вместо допустим охотничьей сети ты видешь описание уже упомянутого бота описание самого бота IF $selobj = "<<$Namedog>>": CLR PL "<b><<$Namegirl>>" PL "<b>Сила <<$Mydogсила>></b>" и т.д. прочие характеристики unsel end з.ы. а параметры которые должны прописываться в локации приручение все равно не виднопараметры прописаны как и посоветано выше $mydogсила = $сила и т.д. для каждого параметра

MasterSet: Seguro Срочно осваивай массивы. Тебе полюбому без них не обойтись. Там главная фишка следующая. Ты можешь для той же собаки, например, просто назначить номер. Например 1. И сделать такие массивы: $dogname[1] = 'Бобик' $dog_color[1] = 'Черный' dog_str[1] = 15 doc_speed[1] = 10 А для другой собаки, например, номер 2. И аналогичные куски массивов только од номером два. $dogname[2] = 'Шарик' $dog_color[2] = 'Белый' dog_str[2] = 12 doc_speed[2] = 18 И потом если тебе в локации нужно будет использовать, например, силу Шарика, то ты пишешь dog_str[2] Но это не самое клевое. Самое клевое что ты можешь задать условно. Т.е. в коде писать не точный номер собаки, а как переменную со значением этого номера. Например игрок выбирает Бобика и у тебя в коде это отражается как dog = 1 Потом ты можешь вызвать любой показатель бобика через [dog], например: $dog_color[dog] Такой код тебе соотвественно возвращает 'Бобик', если значение переменной dog = 1, или 'Шарик' если оно равно 2



полная версия страницы