Вопросы

Вопросы

Всем доброго времени суток.
У меня несколько вопросов на которые я надеюсь получить ответ.
Сразу уточню, я - новичек.
Итак. К примеру у меня написано х=1. И еще есть кнопка с командой х=х+1. Вот только я никак не могу увидеть/вывести на экран эту переменную. (Уже понял)
Второй вопрос. В документациях я столкнулся с понятием массив ARGS. Что это? Как пользоваться им?
Третий. Как сделать стакающиеся предметы. И лучше просто покажите простейший пример такого, чем кидать меня в документации ибо там я никак и не смог понять как оно должно работать. Был еще (http://qsp.su/index.php?option=com_cont … ;Itemid=76) этот но я тоже не совсем понял как он работает. Вроде он требует доп файл с библиотекой.
В общем пока все. Надеюсь на вашу помощь.

Изменено: oleksandrigo
07.Фев.18 11:05:41
oleksandrigo
ТвореЦ
useravatar
Онлайн
84 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

 Спойлер Show Spoiler Hide Spoiler
 Почему же никто не пользуется поиском?
Десять минут чтения выдачи расширенного поиска по запросу "ARGS" (по сообщениям):
 Спойлер Show Spoiler Hide Spoiler
 Форум: Обсуждение и разработка игр 03.Ноя.16 13:29:00 — тема "Как сделать?"

args[] - это переменные, которым можно передавать значения "на один раз". Делал ты это так:

Код:

gosub 'Скретч диалог',2 

Двойка после запятой, как раз и указывает, что когда плеер обратится к локации "Скретч диалог", значение args[0] - должно быть равно 2. Это называется передача аргументов. Можно передавать девять значений, т.е. задавать на начало локации значения переменным от args[0] до args[8]. В общем виде это выглядит так:

Код:

gosub 'имя_локации',args[0],args[1],args[2],args[3],args[4],args[5],args[6],args[7],args[8]

Форум: Обсуждение и разработка игр 28.Фев.16 23:34:46 — тема "Как сделать?"

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

Код:

!#гостинная

act 'Воспользоваться камнем телепортации': goto 'кухня', 7

Число семь будет передано в локацию кухня. Получить его в этой локации можно из нулевого элемента массива args[]

Код:

!#кухня

if args[0]=7: *pl "Вы воспользовались камнем телепортации и очутились в кухне."

Для каждой локации значения args[] своё. Т.е. если на локации "гостинная" у тебя args[0] равнялось 10, то это никак не скажется на значении args[0] в локации "кухня". Пример:

Код:

#начало

args[0] = 9
args[1] = 12
gosub 'конец',14,15
*pl args[0]
*pl args[1]
-

#конец
*pl args[0]
*pl args[1]
-

СправкаПользовательские функции и процедуры

Полезная тема: вложенные вызовы подпрограмм

Форум: Обсуждение и разработка игр 10.Апр.16 22:57:53 — тема "Как сделать?"

args - это локальные переменные. Они работают только на определённой локации и только во время так сказать сессии на этой локации. Так же они используются для получения каких-то данных во время обращения к локации. Например:

Код:

goto 'Лес','Заяц',23

, при выполнении этой команды будет осуществлён переход на локацию "Лес", при этом переменной $args[0] на локации "Лес" присвоится значение Заяц, а переменной args[1] - значение 23.

Если ты делаешь по этому примеру, можешь видеть, что переключение между ветками там задаётся как раз таки значением, которое получает args[0] при обращении к локации:

Код:

gs 'Диалог_А',1

....
if args[0]=1:
    act 'Как реализован твой диалог?':
        '<font color=blue>(Вы) — <<$selact>></font>'
        cla
        wait 500
        ........

Стакающиеся предметы — это считаемые, как я понимаю. Деньги, патроны, одинаковые мечи и прочее. Тема довольно интересная и сложная. Но новичкам обычно предлагают начать с этого:

убрал тут цитату сообщения, почему-то ведёт всё на библиотечку
В старой справке был такой вопрос "Как сделать в игре деньги?". Но сейчас я не могу его найти.

Всё на самом деле просто. Допустим, есть у нас предмет "меч".

Когда добавляем его в инвентарь, например, по действию, то ведём подсчёт числа мечей в отдельной переменной.

Код:

act "Поднять меч":

   ! проверяем есть ли мечи
   if меч_количество = 0:
      ! если мечей нет, добавляем меч в инвентарь
      addobj "Меч"
   end
   ! увеличиваем количество мечей на 1
   меч_количество = меч_количество+1
end

Чтобы проверять число мечей при щелчке в окне инвентаря, заводим локацию с названием onObjSel, а на самой первой локации в игре пишем:

Код:

$onobjsel="onObjSel"

Если воспользоваться поиском по форуму с запросом "onobjsel", можно узнать, что таким образом мы создали локацию-обработчик выбора предмета с именем onObjSel, а с помощью строчки кода в самой первой локации игры показали плееру, какую именно локацию он должен использовать в этом качестве.
Теперь на локации onObjSel для меча пишем такой код:

Код:

if $selobj = "Меч":

! если вы выбрали объект меч
   ! выводим информацию в окно доп.описаний
   pl "Обычный одноручный меч. В рюкзаке <<меч_количество>> шт."
end

в конце onObjSel обязательно ставим

Код:

unsel

Aleks Versus
воздвигатель башни
useravatar
Offline
1400 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Спасибо! Я то поиск по документации делал. Буду знать.

oleksandrigo
ТвореЦ
useravatar
Онлайн
84 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Не знаю почему, но я сел за написание игрушки в qsp.
Программист, как и писатель из меня никакой, но тем не менее.
При создании моего шедевра у меня возникла проблема:
          при тесте локации проигрыватель выдаёт мне ошибку и говорит, что не хватает
          [end] в "многострочной форме операторов" и указывает мне строку (84),
          которой в данной локации вообще нет (код заканчивается на 77).
Вопрос: что делать?
P.S. Код не могу сюда выложить, так как он достаточно длинный.
Если что пишите в ЛС.
Заранее спасибо.

Последний из Гаяр
Начинающий
useravatar
Offline
27 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Экспортируйте файл игры в текстовый документ. Смотрите через блокнот (с выключенными переносами) - вот в нем и найдете все точно по номеру строки. А так ошибки удобнее всего находить через анализатор - http://qsp.su/index.php?option=com_agor … amp;id=365
А код можно не бояться выкладывать, если что - если слишком длинный, то под спойлер)

mkir
useravatar
Offline
137 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Последний из Гаяр, желательно тогда сам код выложить от этой локации. Проблемы с некорректной расстановкой end достаточно часты.

Wol4ik
Сталкер
useravatar
Offline
133 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

mkir,
Я уже использовал анализатор, но так и не нашёл нужную строку.
Ладно. Сейчас скину сам файл.
qsp_fayl.qsp

 Спойлер Show Spoiler Hide Spoiler
 

Код:

if activity=22:

     act 'Искать Сигита':
         if pripasy=0:
             msg 'Тебе необходимо еще раздобыть провиант и снаряжение'
             gt $curloc         
         else         
             set uevent = rand(1,6)
             if uevent=2:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Да, он в трапезной репу кидает.'
                 *pl 'Спасибо.'
                 end
             end
             if uevent=1:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Да, посмотри у караульной.'
                 *pl 'Спасибо.'
                 end
             end
             if uevent=3:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Вроде бы был у внешней стены. Не знаю, посмотри сам.'
                 *pl 'Спасибо.'
                 end
             end
             if uevent=4:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Нет, но может Талек знает?'
                 *pl 'Талек! Тааааааалек!'
                 *pl 'Да. Чего!?'
                 *pl 'Сигита видел?'                 
                 dial=rand(1,3)
                 if dial=1 or dial=2:
                 *pl 'Да. Иди на стену. Он вроде на карауле. Спроси там дозорного.'
                 *pl 'Спасибо.'                     
                 if dial=3:
                 *pl 'Нет, не видел такого.'
                 msg 'Ну, парень, извини. Спроси у кого нибудь другого'
                 jump 'dialogy'
                  end
                 end
             end
             if uevent=5 or uevent=6:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй,ты видел Сигита?'
                 *pl 'Не, не видел.'
                 *pl 'Ладно.'
                 !jump 'dialogy'
                 end
             end
         end
     end
else
     act'Идти в караульную'
     gt 'Караульная'
     end
end

Последний из Гаяр
Начинающий
useravatar
Offline
27 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

В приведенном выше коде плеер не может закрыть первый if.
Что тут не так?

Последний из Гаяр
Начинающий
useravatar
Offline
27 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

 Спойлер Show Spoiler Hide Spoiler
 

Код:


if activity=22:
     act 'Искать Сигита':
         if pripasy=0:
             msg 'Тебе необходимо еще раздобыть провиант и снаряжение'
             gt $curloc         
         else         
             set uevent = rand(1,6)
             if uevent=2:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Да, он в трапезной репу кидает.'
                 *pl 'Спасибо.'
                 end
             end
             if uevent=1:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Да, посмотри у караульной.'
                 *pl 'Спасибо.'
                 end
             end
             if uevent=3:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                 *pl 'Вроде бы был у внешней стены. Не знаю, посмотри сам.'
                 *pl 'Спасибо.'
                 end
             end
             if uevent=4:
                 act 'Спросить легионера':
                   delact $selact
                   *pl 'Эй, служивый, погоди! Ты где-нупудь Сигита видел?'
                   *pl 'Нет, но может Талек знает?'
                   *pl 'Талек! Тааааааалек!'
                   *pl 'Да. Чего!?'
                   *pl 'Сигита видел?'                 
                   dial=rand(1,3)
                   if dial=1 or dial=2:
                     *pl 'Да. Иди на стену. Он вроде на карауле. Спроси там дозорного.'
                     *pl 'Спасибо.'                     
                     if dial=3:
                       *pl 'Нет, не видел такого.'
                       msg 'Ну, парень, извини. Спроси у кого нибудь другого'
                       jump 'dialogy'
                     end
                   end
                end
             end
             if uevent=5 or uevent=6:
                 act 'Спросить легионера':
                 delact $selact
                 *pl 'Эй,ты видел Сигита?'
                 *pl 'Не, не видел.'
                 *pl 'Ладно.'
                 !jump 'dialogy'
                 end
             end
         end
     end
else
     act'Идти в караульную':
       gt 'Караульная'
     end
end

Попробуй такой. Ты там еще и двоеточие пропустил.


Советую, чтобы проще было находить такие проблемы делать вот так.

 Спойлер Show Spoiler Hide Spoiler
 

Код:


act 'asdsa':
    'lalalala'
    if a > 1:
        'lailailai'
    end
end

Чтобы было видно, что ты открыл акт или иф. Так легче находить недостающие енды

Там можно просто ТАБ нажать и он сделает отступ. И будет линия которая будет показывать с чем связан этот иф/акт.

oleksandrigo
ТвореЦ
useravatar
Онлайн
84 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

oleksandrigo,
Спасибо, большое!
Увидел, что один из актов не закрыл.

Можно спросить один момент?
Вот эти линии чисто графически или реально означают границы между актами и ифами, как во вложенном диалоге?

Последний из Гаяр
Начинающий
useravatar
Offline
27 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Последний из Гаяр,
Ну если ты раз десять тыкнешь таб, то поймешь, что чисто графически.

oleksandrigo
ТвореЦ
useravatar
Онлайн
84 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Всем здравствуйте. У меня такая беда: есть два файла qsp одной игры. Один файл редактировал я, второй - мой знакомый. В итоге у нас получились два разных файла. У меня такой вопрос: можно ли как-то сравнить содержимое двух файлов qsp? А точнее, есть ли способ залить один файл qsp поверх другого, чтобы изменения этого файла влить в другой файл qsp?

Jinn
useravatar
Offline
3 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Jinn,
если вы редактировали разные локации, можно воспользоваться пунктом меню файл — присоединить игру в QGen.

Если же вы вносили изменения в одни и те же локации, нужно конвертировать qsp файлы в текстовые формата TXT2GAM, сравнить их с помощью текстового редактора, умеющего сравнивать текстовые файлы, и поправить нужные места руками. В MS word, если не ошибаюсь, есть такая штука как "объединение документов".

Потом объединённый документ конвертируем обратно из TXT2GAM в формат qsp.

Не забывайте сохранять резервные копии файлов.

Aleks Versus
воздвигатель башни
useravatar
Offline
1400 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Вопросы

Огромное спасибо за помощь. Мы редактировали одну и ту же игру только независимо друг от друга. Теперь же свои усилия решили объединить. А вот как объединить изменения не знали. Теперь знаем. Спасибо, ещё раз!

Jinn
useravatar
Offline
3 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
1015
Всего опросов:
14
Всего сообщений:
16790398
Сообщений на этой неделе:
29
Пользователи форума:
 
Всего пользователей:
2220
Последним зарегистрировался:
ASIT