RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2427477 views

Привет народ.
Есть вопрос:
Если я вызываю подпрограммы, функции и тд (команды GS и FUNC) или обрабатываю служебные события обрабатываемые подпрограммами ($onobjsel, $ongload, $counter, ….)
а потом из них нагло выхожу командой GT.
То что происходит со стеком и переданными параметрами?
Они где-то зависают или подчищаются?

И если они зависают, то чем мне это грозит и как их подчистить в ручную?

нет, в том смысле что бы конкретно счетчик перематовал на 15 минут вперед. то есть допусти нажал с улицы идти домой и оно скакануло на + 15 минут и наоборот. вот в чем проблема. просто к локациям привязаны еще и другие локации и стандартное как я делаю minut = minut + 1 в каждой локации не подойдет.

*—–*поняв что лохонулся*—–*
то есть как бы gs ‘timecount’ вбивать как оператор к действию или это будет чисто привязано к локе?

IceMan:

то есть как бы gs ‘timecount’ вбивать как оператор к действию или это будет чисто привязано к локе?

или к локе, или к действию, или к переменной, или вообще к массиву….

act 'Пойти на кухню':
   gs 'TimeCount', 1
   gt 'Kitchen'
end
act 'Пойти на улицу':
   gs 'TimeCount', 15
   gt 'Street'
end
act 'Пойти позаниматься на беговой дорожке':
   gs 'TimeCount', str*vit/10
   gt 'Treadmill'
end

Как использовать предмет?
Создать меню предмета?
Типа есть ‘нож’ и при нажатии было меню ‘использовать’ .
Если можно напишите подробнее, а то я пень пнем)))

IceMan, ваша локация “location” (все как обычно и без ненужных усложнений):

act 'Пойти на кухню': 
   gt 'Kitchen'  
end 
act 'Пойти на улицу': 
   gt 'Street'
end 
act 'Пойти позаниматься на беговой дорожке': 
   gt 'Treadmill' 
end

Вся логика прячется в ONNEWLOC:

if $CURLOC ! $nextLoc: 
    $prevLoc = $nextLoc 
    $nextLoc = $CURLOC 
end

if ($CURLOC = 'Kitchen' and $prevLoc = 'location') or ($CURLOC = 'location' and $prevLoc = 'Kitchen'): time += 1
if ($CURLOC = 'Street' and $prevLoc = 'location') or ($CURLOC = 'location' and $prevLoc = 'Street'): time += 15
if ($CURLOC = 'Treadmill' and $prevLoc = 'location'):
    time += str*vit/10
elseif  ($CURLOC = 'location' and $prevLoc = 'Street'):
    time += 1
end

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

evp,
в принципе так можно с любой получается? просто вместо location заменить на название самой локации… интерестный выход. получается все временные рамки остаются в ONNEWLOC?

Axi.Lex,
ну то что ты пень пнем сразу видно)))) извини если что))) http://wiki.qsp.su/help:acts - все азы здесь… по разделам полазь… я всему оттуда учился.

Aleks Versus Moderator 18.08.2016 06:22 (9 years ago)

Axi.Lex,
есть у меня вот такая штука

#меню#

IceMan,
лучше всего изменять время в действии, из которого осуществляется переход. Потому что на одну и ту же локацию возможно придётся переходить с разных локаций, и время перехода для каждой будет отличаться.

act 'Идти в лес':
   minute = minute + 15
   goto 'лес'
end

Если есть локация для пересчёта часов, дней и пр, то её следует вызывать всякий раз при изменении времени.

act 'Идти во Дворец':
   minute = minute +30
   gosub 'пересчитать_время'
   goto 'дворец'
end

Если будешь изменять время в onNewLoc, учитывай, что код onNewLoc выполняется ПОСЛЕ того, как выполнится код локации.

IceMan, да, идея в том, чтобы: [] во-первых, все переходы обрабатывались в одном месте, где их можно легко редактировать, не выискивая по всей игре;
[
] во-вторых, это делалось автоматически (onnewloc), не давая возможности автору ошибиться;
[*] и, наконец, это было просто удобно для использования (простой оператор gt без заморочек).
Не обязательно засорять ONNEWLOC развернутым кодом обработки переходов - его можно хранить в специально отведенной локации, вызываемой из ONNEWLOC оператором gs.

Aleks Versus,
это конечно не плохо. но у меня почему то не работает такой код. сколько не пытался выдает ошибку. почему я и обратился сюда. это самый очевидный вариант кода и он шишь работает. я голову был сломал. и местами менял и писать через if пытался. мудрил как только в голову приходило. но никак не работало

Я азы уже наизусть знаю, а с инвентарём и с меню объектов еще туго.

Aleks Versus,
спасибо

Aleks Versus,
А как с двумя и более предметами создать подобное меню?
помоги плз

Aleks Versus Moderator 19.08.2016 18:41 (9 years ago)

IceMan,
если выдает ошибку, то какую? Прикрепи игру в сообщение, чтобы можно было посмотреть, в чём загвоздка.

Axi.Lex,
ну ты ведь видел как сделано меню камня? Создай меню для каждого предмета. В локации-обработчике выбора предмета добавь для каждого предмета:

if $selobj = 'Камень':
	menu '$массив_меню_камня'
end
if $selobj = 'Кукуруза':
	menu '$массив_меню_кукурузы'
end

Aleks Versus,
в том то и загвоздка что никакой просто из qspшки выкидывает…

Log in or Register to post comments.