Как сделать?
…
Lisichka:
переменные блеф и неблеф обозначают, блефует ли нпс, с которым игрок играет ил нет
Если это так, то достаточно одной переменной блеф.
!блеф может принимать всего два значения
!блеф = true или блеф = -1 или любому значению отличному от 0, но лучше придерживаться значения -1
!блеф = false или блеф = 0
if блеф:
!непись блефует
else
!непись говорит правду
end
if no блеф:
!непись говорит правду
else
!непись блефует
end
evp,
Спасибо, добавила dynamic, запомнила на будущее :)
Насчет переменных true и false - это действительно удобно, но если я сейчас их начну использовать, придется отследить и переписать и значения других переменных, например:
if ложь = блеф and ложь = 1:
*p '
Вы проиграли. Противник раскусил вас!'
dynamic $resetLyingDice
act 'Еще разок!':
gt 'стол'
end
end
придется переписывать значение переменной “ложь” и всех остальных, и не только в конкретном куске, а везде в мини-игре. Лучше я использую этот способ где-нибудь еще, он и правда удобен :)
еще убрала переменную “неблеф”, она не нужна.
Спасибо за помощь!
Lisichka, вот вам еще небольшой совет.
Замените код
лицо = rand (1,3)
if лицо = 1:
$лицо = 'Противник цепко следит за вами немигающим взглядом. Вы замечаете, как по лбу у него стекает капля пота.'
end
if лицо = 2:
$лицо = 'Противник утирает пот с верхней губы. Вы замечаете, что у него непроизвольно дернулся уголок рта.'
end
if лицо = 3:
$лицо = 'Противник чешет затылок. Вы замечаете, как он рефлкторно кусает губу.'
end
на
лицо = rand (1,3)
if лицо = 1:
$лицо = 'Противник цепко следит за вами немигающим взглядом. Вы замечаете, как по лбу у него стекает капля пота.'
elseif лицо = 2:
$лицо = 'Противник утирает пот с верхней губы. Вы замечаете, что у него непроизвольно дернулся уголок рта.'
else
$лицо = 'Противник чешет затылок. Вы замечаете, как он рефлкторно кусает губу.'
end
У вас нет ошибки, но второй вариант компактнее и легче читаем. Кроме того, хоть это и совсем несущественно для современных компьютеров, второй, в общем случае, быстрее. Поясню.
В первом варианте при любом значении “лицо” будет произведено три проверки. Даже если лицо=1, игра все-равно будет сравнивать его с двойкой, а потом с тройкой. Так написано в коде и машина не может игнорировать его инструкции.
Во втором варианте будет выполнено от одной до двух операций сравнения. Если лицо=1, то на первом сравнении все и закончится. Если лицо=2 или лицо=3, то узнав, что лицо<>1, игра сравнит его с двойкой и в зависимости от результата выполнит ту или иную инструкцию.
UPD: Убрал “:” после else.
https://qsp.org/forum/305-ogranicenia-qsp - в этой теме почему-то больше нельзя писать, потому спрошу здесь - а есть ли какая возможность узнать количество переменных в игре, чтоб не впучную искать и считать, может команда какая специальная?
evp,
Узнала много нового, спасибо, заменю!
Ааа.. это очень круто) как без этого вообще можно было работать! спасибо! Но сразу же возникают еще вопросы: что значит - “не инициированные переменные”, “не используемые переменные”, и “неверное удаление предметов”, - ведь вроде б как, приведенные там вполне себе инициируются и используются, а в чем может быть “неверность” удаления предмета, вообще не понимаю. Ну, и, собственно, вроде бы, на глазок, этих самых переменных оказалось еще не так уж много, - однако сам анализатор их не подсчитывает?
mkir:
Ну, и, собственно, вроде бы, на глазок, этих самых переменных оказалось еще не так уж много, - однако сам анализатор их не подсчитывает?
Внизу в окошке лога:
Анализатор кода QSP v 1.2.24.0:
Выполняем поиск переменных…
Добавлено переменных: 55
Найдено обращений к неинициализированным текстовым переменным: 1
Найдено обращений к неинициализированным числовым переменным: 11
Найдено неиспользуемых текстовых переменных: 1
Найдено неиспользуемых числовых переменных: 1
А вот еще странная вещь - пишет, например - (Ошибка, локация “newloc”, строка #3880 : Неизвестное действие в выражении) - однако в этой локации строк где-то на триста меньше. Или (Ошибка, локация “Пираты”, строка #15159 : ACT без “:” ), хотя вот здесь строк вообще меньше сотни. Так как же найти эти ошибки?
mkir:
что значит - “не инициированные переменные”,
Выше вы видели, что “Найдено обращений к неинициализированным текстовым переменным: 1”
В примере это переменная $main_bg, к которй было вот такое обращение:
$content_window = '<div class="content_window" style="background: url(<<$main_bg>>)">'
Но при этом этой переменной нигде в коде явно не присваивалось значения. Она пустая с точки зрения анализатора. Вот что значит “неинициализированная”.
Это не всегда может быть верно. Например, я могу инициализировать эту переменную с помощью dynamic:
$varName = '$main_bg'
dynamic '<<$varName>> = "img/bckgrnd1.jpg"'
Но если вы не имеете привычки извращаться подобным образом, то скорее всего, анализатор прав и вы обращаетесь к переменной, не задав ей перед этим значения. Также, возможно, вы просто опечатались в названии переменной.
mkir:
А вот еще странная вещь - пишет, например - (Ошибка, локация “newloc”, строка #3880 : Неизвестное действие в выражении) - однако в этой локации строк где-то на триста меньше.
mkir:
что значит - “не используемые переменные”
Кэп отвечает. Переменные, которые были инициализированы (им явно было присвоено значение) и к которым более не было обращений в коде, назовем неиспользуемыми.
Но опять с оговоркой:
someValue = 1125
$varName = 'someValue'
dynamic 'myBeautyVar = <<$varName>>'
В этом случае переменная someValue будет причислена к неиспользуемым.
UPD Исправил код в примере на верный
mkir:
что значит - … “неверное удаление предметов”,… в чем может быть “неверность” удаления предмета, вообще не понимаю
Nex:
попытка удалить предмет, который нигде не добавляется
Надо просто читать :)
Ладно, вы уж извиняйте за назойливость, я умнею, но постепенно, не сразу)
Не стоит извиняться. Вы ничего плохого не сказали.