Как сделать?
…
Aleks Versus, werewolf,
Спасибо. Я же учусь и мне нужен работающий пример. Карты игральные и карты топографические, на мой непросвещенный взгляд, самое то, для понимания многомерных массивов.
Сразу же возник вопрос по записи массива. В одном случае написано:
$карта[’<<$X>>_<<$Y>>’]
В другом:
$пространство[’<<X>>,<<Y>>’]
Это одно и то же?
svandrus,
индекс элемента ТЕКСТОВЫЙ. То есть это просто строка, в которой ты указываешь цифры. Ты можешь выбрать любую форму записи, какая тебе будет удобна и наглядна:
$пространство['<<X>>,<<Y>>']
$пространство['<<X>>_<<Y>>']
$пространство['<<X>>:<<Y>>']
$пространство['x=<<X>>;y=<<Y>>']
главное, чтобы числа стояли правильные, и чтобы на протяжении всей игры в индексе соблюдалась одна форма записи. Понятно объясняю? А то мне кажется, что не понятно.)
Посмотри модуль карты. Там вроде тоже есть двумерный массив.
Aleks Versus,
Понятно-понятно. Я уже как бы и сам дошёл, но просто хочется быть уверенным - вижу две разных формы записи, значит, ага, это ж-ж-ж неспроста. Не станут же умные программисты делать лишние способы записи одного и того же.. Хотя есть let и set, как наследие чего-то там мудрёного…
Добрый день!
Не могли бы Вы подсказать, в чём тут заключается ошибка, я только учусь и всю голову уже себе сломал переделывая этот код.
Spoiler
if $args[0] = ‘Бутылка эля’:
‘<center><img src=“images/produkt/ale.jpg” ></center>’
‘<center>Бутылка эля (+ 10 к опьянению)</center>’
act ‘Выпить’:
alc += 10
ale -= 1
gs ‘stat’
gt $prevloc
end
!….
act ‘Не пить пока’: gt $prevloc
end
Бутылка эля лежит в сумке, нужно этот эль либо ‘выпить’, либо ‘Не пить пока’ и после любого действия вернуться обратно, в итоге получаю вот что:
Буду очень благодарен, если поможете! :)
Что в строке 12 то?
Судя по всему gt $prevloc. Уверен что в $prevloc сидит имя существующей локации?
Если не уверен, выведи ее значение на экран и проверь.
Хм, ну персонаж переходит с этой локации чтобы выпить эль, значит она существует. Вот только локация, это сумка в которой лежит эль.
Допустим персонаж стоит на улице, открывает сумку (она открывается в “Дополнительное описание”), там лежит ‘Бутылка эля’, он должен выпить её и вернуться обратно.
Получается я пытаюсь вернуть персонажа в сумку? :D Всё, что мне нужно, это выпить эль и вернуться на ту локацию, где был при открытии сумки и выпивки эля.
Я не совсем понял, что значит вывести её значение на экран и проверить. :|
Напиши сверху кода:
‘<<$prevLoc>>’
Где записывается вот это?
$prevLoc = $curloc
Добавил сверху кода, вот что вышло:
Spoiler
1 - ‘<<$prevLoc>>’
2 - if $args[0] = ‘Бутылка эля’:
3 - ‘<center><img src=“images/produkt/ale.jpg” ></center>’
4 - ‘<center>Бутылка эля (+ 10 к опьянению)</center>’
5 - act ‘Выпить’:
6 - alc += 10
7 - ale -= 1
8 - gs ‘stat’
9 - gt $prevloc
10 - end
11 - !….
12 - act ‘Не пить пока’: gt $prevloc
13 - end
Но ничего не изменилось.
А что касается:
$prevLoc = $curloc
Такого у меня нету, есть вот, что:
Spoiler
1 - if $CURLOC ! $nextLoc:
2 - $prevLoc = $nextLoc
3 - $nextLoc = $CURLOC
4 - end
А располагается это в локации ONNEWLOC
flipslam,
Теперь и мне стало интересно. А почему у тебя не показывает ‘<<$prevLoc>>’? Должно показывать, я проверял. Запусти игру и посмотри, что написано сверху, только кнопки не нажимай..
Эта штука на ONNEWLOC запоминает предыдущую локацию…Если сумка отдельной локацией, значит в сумку и вернёшься…
Сообщение о несуществующей локации может появляться если $prevloc забрано в кавычки…
По идее здесь в самом верху должна быть надпись ‘<<$prevloc>>’, как я понимаю?
Но как видите её тут нет, в сумку он возвращаться не хочет, как сделать по другому не знаю )
В общем переделал всё и сделал без лишних локаций, по простенькому, возможно когда допрёт как сделать так, как задумывал, верну всё обратно :)
Теперь это выглядит так:
Spoiler
if ale > 0:pl’У вас есть бутылка эля. <a href=“exec:ale -= 1 & alc += 10 & gs’’stat’’”><b>Выпить</b></a>’
end
flipslam,
Сделай заход в сумку через gs. Тогда с улицы не уйдешь и к действиям добавится то, что есть на локации “Сумка”.
На локации улица:
act 'Посмотреть содержимое сумки':
gs 'Сумка'
end
На локации Сумка
act 'Выпить эль':
alco += 10
ale -= 1
gt $curloc
end
P.S. Что-то меня заносить начало… Советы раздавать стал…
P.P.S. Но вот почему не выводится название предыдущей запомненной локации я не понял.
UPD. Ещё может не выводиться, поскольку её действительно нет и эта локация самая первая.. Может взрослые что подскажут?
Если немного подумать, то станет понятно, что в
1 - '<<$prevLoc>>'
для целей отладки смысла нет, от слова “совсем”.
Ибо, локация $ONNEWLOC обрабатывается после выполнения кода текущей локации, но до передачи управления игроку. Таким образом, в переменной $prevLoc на момент выполнения кода
'<<$prevLoc>>'
будет записана не предыдущая локация, а локация перед предыдущей.
Итак, если вы хотите отладку, то делайте, примерно так:
Локация ‘history’:
if $CURLOC ! $nextLoc:
$prevLoc = $nextLoc
$nextLoc = $CURLOC
end
Локация ‘Сумка’:
gs 'history'
*nl $prevLoc
if $args[0] = 'Бутылка эля':
'<center><img src="images/produkt/ale.jpg" ></center>'
'<center>Бутылка эля (+ 10 к опьянению)</center>'
act 'Выпить':
alc += 10
ale -= 1
gs 'stat'
gt $prevloc
end
!....
act 'Не пить пока': gt $prevloc
end
Либо просто в локации “Сумка”:
if $args[0] = 'Бутылка эля':
'<center><img src="images/produkt/ale.jpg" ></center>'
'<center>Бутылка эля (+ 10 к опьянению)</center>'
act 'Выпить':
alc += 10
ale -= 1
gs 'stat'
gt $prevloc
end
!....
act 'Не пить пока': gt $prevloc
act 'PrevLoc???': *nl $prevLoc
end
Второй способ проще в данный момент, но первый поможет вам получать правильные значения $prevLoc именно в тот момент, когда вам это нужно.
Теперь, собственно, по коду. То, что нам тут показали должно работать. Поэтому надо видеть как вызывается эта сумка.
evp:
Ибо, локация $ONNEWLOC обрабатывается после выполнения кода текущей локации, но до передачи управления игроку. Таким образом, в переменной $prevLoc на момент выполнения кода будет записана не предыдущая локация, а локация перед предыдущей
Тонкий момент. Получается должно показывать про “позавчера”, а не про “вчера”. Но ведь вообще ни про что не показывает.
Для начала, нужно проверить, назначен ли вообще обработчик на $ONNEWLOC.
В начале игры написано
$ONNEWLOC = 'ONNEWLOC'
?
Spoiler
evp:
Если немного подумать, то станет понятно, что в
1 - '<<$prevLoc>>'для целей отладки смысла нет, от слова “совсем”.
Ибо, локация $ONNEWLOC обрабатывается после выполнения кода текущей локации, но до передачи управления игроку. Таким образом, в переменной $prevLoc на момент выполнения кода
'<<$prevLoc>>'будет записана не предыдущая локация, а локация перед предыдущей.
Итак, если вы хотите отладку, то делайте, примерно так:
Локация ‘history’:if $CURLOC ! $nextLoc: $prevLoc = $nextLoc $nextLoc = $CURLOC endЛокация ‘Сумка’:
gs 'history' *nl $prevLoc if $args[0] = 'Бутылка эля': '<center><img src="/images/produkt/ale.jpg" ></center>' '<center>Бутылка эля (+ 10 к опьянению)</center>' act 'Выпить': alc += 10 ale -= 1 gs 'stat' gt $prevloc end !.... act 'Не пить пока': gt $prevloc endЛибо просто в локации “Сумка”:
if $args[0] = 'Бутылка эля': '<center><img src="/images/produkt/ale.jpg" ></center>' '<center>Бутылка эля (+ 10 к опьянению)</center>' act 'Выпить': alc += 10 ale -= 1 gs 'stat' gt $prevloc end !.... act 'Не пить пока': gt $prevloc act 'PrevLoc???': *nl $prevLoc endВторой способ проще в данный момент, но первый поможет вам получать правильные значения $prevLoc именно в тот момент, когда вам это нужно.
Теперь, собственно, по коду. То, что нам тут показали должно работать. Поэтому надо видеть как вызывается эта сумка.
Огромное спасибо!
Использовал первый способ и всё заработало как надо, эль выпивается, никаких ошибок нет )
А сумка открывается таким образом.
Это в стартовой локации
Spoiler
!Рюкзак
addobj ‘Инвентарь’
$menu_bag[0] = ‘Посмотреть сумку:menu_sumka’
А это в локации onobjsel
Spoiler
if $selobj = ‘Инвентарь’:
menu ‘$menu_bag’
end
unsel
+ всё же присутствует ошибка с моей стороны, забыл прописать в стартовой локации это:
$ONNEWLOC = ‘ONNEWLOC’
Если б не увидал тут, даже и не подумал бы об этом )

