kolobod: > @peter написал: > Я так понял, вызов должен осуществляться по enter? А потом - выводиться сохраненное ранее состояние? Короче, если четко напишешь алгоритм, то можно наверное что то налепить.... Я выше схему постил, где пытался передать смысл: -есть куча переменных, в которых прописывается все в игре. Наличие/отсутствие конкретного предмета, реакция персонажа на что-то/или ее отсутствие, рост/уменьшение статистики-навыков, был или еще не состоялся такой-то диалог или такой-то квест, какие решения приняты/не приняты. Все переменные забиты как global в отдельном файле: global {pers_kristina_health = 60;}; и тд. -часть изменений в переменных регулируется через lifeon. Типа: "если переменная отвечающая за оформление темы поменялась с "== 1" на "== 2" параметры темы меняются вот так-то". Или: если "переменная отвечающая за еду стала равна "столько-то", то надо показывать что в лагере "столько-то" порций еды". Игровой процесс условно делится на 2 основные части. Стратегическую (возня в лагере) и сюжетную (диалоги/квесты). Проблема сейчас с частью в лагере. Геймплей такой: есть группа сопартийцев, они действуют в лагере по своему усмотрению. Лидер (игрок) наблюдает, делает выводы и постоянно вмешивается в ключевые моменты. Может разрешить спор тем или иным образом, отдать конкретный приказ (а вот выполнят его или нет, и как – уже другое дело). То есть игрок - влияет на группу и лагерь, но опосредованно. Принятые решения имеют последствия. Есть особые вещи, например, квестовые предметы - их пока по задумке напрямую использовать нельзя, но в конкретной ситуации - наличие нужной вещи сильно скажется. Технически реализовано так. В составной pic комнаты есть картинка-иконка "часы". Клик на нее, через функцию click мотает игровое время на "полчаса" (переменная global_halfhour увеличивается на "+1"; return true;). В dsc комнаты это срабатывание переменной ловится – и меняется описание, попутно запуская другие переменные, которые в свою очередь влияют на что-то другое. Пример: игрок кликнул на часы, когда в игре 4 часа утра (global_day == 1; global_halfhour == 1) и все спят. Это отловлено через click, то есть при клике на картинку-часы срабатывает if global_day == 1 and global_halfhour == 1 then global_halfhour = 2; Для игрока это означает, что время поменялось с 4:00 на 4:30. При этом в dsc комнаты-лагеря сработало следующее: if global_day == 1 and global_halfhour == 2 then p (s2:txt ("4:30 Пока все спали, крысы стащили пакет чипсов из фургона", '#333333', 0)); p (s3:txt ("Еда: -1^", '#999999', 0)); global_eat = global_eat - (1); end; То есть - текущее описание лагеря в dsc меняется, там же срабатывает переменная отвечающая за еду, возникает мини-уведомление, что еды стало меньше. Одновременно - изменение переменной global_eat в dsc комнаты-лагеря ловит еще и lifeon – и меняет статистику уже в статусе, теперь там тоже число порций еды будет указано на 1 меньше. Созданная мной проблема возникает, когда игрок не делая следующий ход (то есть не кликая дальше на часы) заходит в другие комнаты – например решит посмотреть на личные данные и перки члена команды, или проверить какие есть предметы в лагере. В этом случае при заходе обратно в комнату-лагерь, текстовое описание комнаты остается прежним, соответствующим игровому времени 4:30 - и это правильно. Но в dsc комнаты еще раз сработает global_eat = global_eat - (1); ведь условие if global_day == 1 and global_halfhour == 2 не поменялось! И число еды снова сократится. И так до бесконечности и со всеми переменными, что "работают" из dsc комнаты-лагеря.
Ссылка:
http://instead-games.ru/forum/index.php?p=/discussion/comment/13397/#Comment_13397