Как сделать?
…
Иван1901111:
Доброго времени суток! Подскажите, пожалуйста, как сделать что бы, когда ГГ взаимодействует с другими персонажами, то у них менялась статистика? При разговоре, например, повышалось доверие к ГГ? И когда доверие достигает определенного значение, то открывалась возможность новых действий? Заранее, благодарю!
Приветствую. Для начала советую просмотреть все уроки по QSP и написать хоть один квест прежде, чем браться за такой непростой момент как NPC.
Тогда, понимая структуру кода, вы поймете возможность использования базовых действий для смени флагов, провести исчисление реакции и рендерить их в текстовом формате.
С уважением,
HronoStranger
По поводу получения текстовых индексов, пример реализации:
Spoiler
#регистрация_индекса
! добавляем текстовые индексы в массив с названием оригинального массива + "_индексы"
! для текстовых массивов
if INSTR(0,$args[0],'$')>0:
dynamic "
<<$args[0]>>['<<$args[1]>>'] = '<<$args[2]>>'
<<$args[0]>>_индексы[ARRSIZE('<<$args[0]>>')-1] = '<<$args[1]>>'
"
! для числовых массивов
else
dynamic "
<<$args[0]>>['<<$args[1]>>'] = <<args[2]>>
$<<$args[0]>>_индексы[ARRSIZE('<<$args[0]>>')-1] = '<<$args[1]>>'
"
end if
#получить_текст_индекса
dynamic "$result = $<<$args[0]>>_индексы[<<args[1]>>]"
#удалить_элемент
dynamic '
killvar "<<$args[0]>>", ARRPOS(0,"$<<$args[0]>>_индексы","<<$args[1]>>")
killvar "<<$args[0]>>_индексы", ARRPOS(0,"$<<$args[0]>>_индексы","<<$args[1]>>")
'
#тест
! хотим добавить элемент в массив с сохранением расположения текстового индекса
gs 'регистрация_индекса', '$массив', 'индекс', 'значение'
gs 'регистрация_индекса', '$массив', 'индекс2', 'значение2'
! для числовых массивов
gs 'регистрация_индекса', 'массив2', 'индекс3', 8
! тест получения текста индекса:
msg $func('получить_текст_индекса','массив',0) &! по числовому индексу
msg $func('получить_текст_индекса','массив',ARRPOS(0,'$массив','значение2')) &! по значению
msg $func('получить_текст_индекса','массив2',ARRPOS(0,'массив2',8))
! тест удаления
gs 'удалить_элемент', 'массив', 'индекс'
msg $массив[0]
msg $массив_индексы[0]
Да я изучаю, параллельно практикуюсь в написании игры. Просто заинтересовал этот момент, хочется разобраться в этом, разобрать пример, почитать что где и за что отвечает.
Иван1901111,
Это по простому https://qsp.org/forum/comments/23965
Для продвинутого нужно использовать массивы и по индексу привязывать все параметры.
emmanuel,
очищать окно доп описания перед тем, как выводить время, с помощью команды clear.
Работает, спасибо
Вопрос такой заинтересовал
Вот есть DYNEVAL и FUNC
FUNC вызывает локацию для обработки с возвратом результата, а DYNEVAL вызывает переменную с возвратом результата
Но вот не могу понять, когда стоит вызывать ту или иную функцию?
Torgald,
если нет прямой необходимости использовать dyneval - используй func.
Torgald,
Может это не интересно, но поделюсь своим опытом.
FUNC
Spoiler
Есть довольно плохой (на мое мнение) метод с использованием локации в качестве шаблона. Удобно, тогда можно обработать два-три десятка строк, провести все сопоставления, скомпоновать переменные… в таком случае можно использовать FUNC.
Вообще, можно использовать и GOSUB, но если тебе нужно вернуть значение для дальнейших вычислений, то FUNC незаменим.
К примеру, если мы хотим сгенерировать 24 пингвинов через цикл.
Мы их генерируем и возвращаем счетчик циклов.
Далее, мы можем вернувшееся значение поделить на три.
И сгенерировать в три раза меньше северных медведей.
Удобство в том, что можно поручить игроку ввод количества пингвидей, а код уже сам всё высчитает.
Таким образом, FUNC хороша при дополнительном исчислении.
Ваш покорный слуга, правда, использует его вместо GS, это плохой тон, но в целом, можно использовать и так.
Про DYNEVAL не скажу. Он отлично принимает формулы в текстовом виде, но лично для себя не нашел применения, эта функция обходит меня стороной..
Вообще, советую перейти в дискорд. Там быстро и более оживленно отвечают на вопросы.
Если исполняемый код меняется от аргументов, используй DYNEVAL. Если исполняемый код статичный и всегда отрабатывает одинаково, проще использовать FUNC.
DYNEVAL необходим только для обработки динамического кода. Например, если нужно присвоить переменной результат динамического вычисления.
Пример задачи: функция должна получить название переменной, взять из нее значение и обработать, а саму переменную очистить.
В данном случае FUNC не поможет, так как название переменной динамическое, соответственно исполняемый код изменится. DYNAMIC также не поможет если записывать значение переменной в локальный аргумент ARGS, так как DYNAMIC использует свои личные аргументы ARGS. Необходим DYNEVAL.
переменная = 50
gs "тест", "переменная"
#тест
! получаем значение, args[1] становится =50
args[1] = dyneval("result = <<$args[0]>>")
! обрабатываем как угодно, это лишь пример
$какой-то_важный_массив[args[1]] = "значение обработано"
! чистим переменную
killvar $args[0]
! (dynamic "args[1] = <<$args[0]>>") в данном случае не отработает, потому что dynamic запишет СВОЙ аргумент args[1], а не аргумент локации, в которой он был вызван.
Спасибо за ответы)
Здравствуйте, прошелся по учебнику для новичков в разработке текстовых игр. Там был пример создания и запоминания имени(в том случае планеты). По такому же принципу можно ведь сделать ввод имени гг. Но как сделать так что бы после ввода действие ввода имени пропало?
Loner,
if $name='':
act "Как вас зовут?":
$tname=$input("Укажите имя:")
! тут можно встроить проверку, что ввёл игрок
$name=$tname
goto $curloc
end
end
Спасибо, всё работает.
