RU

Зазеркалье: как сбросить все изменения переменных?

mkir #1281 22.09.2015 14:18 10 comments 9098 views

У меня очень странный вопрос, надеюсь, что хоть объяснить смогу)

В общем, например, игрок попадает в какое-нибудь зазеркалье, из которого очень сложно выбраться. И вот он наконец, потратив уйму времени, сил и нервов - выбирается. Дальше он играет в обычном мире по обычным правилам, зарабатывает игровые деньги, продвигается по сюжетным квестам и т.д., и вдруг - ложится в какой-нибудь гостинце спать - и бац! попадает обратно в зазеркалье, и его ставят перед фактом, что он так и не выбрался оттуда и вся его жизнь после была всего лишь иллюзией. И вот если он все-таки сможет выбраться во второй раз, по-настоящему, то все его достижения произошедшие после первого “выхода” - сбрасываются как будто их и не было. То есть по сути речь идет о том, как сбросить все изменения переменных, все добавления и удаления obj, которые происходили после первого выхода? Возможно, речь идет о “сохранении” данных игры и последующей загрузке, однако одно изменение должно быть - т.е. игровой персонаж должен сознавать что с ним это не в первый раз и отсюда кое-какие действия появляются и возможности, и запись в дневнике, например, т.е. какие-то переменные после подобной загрузки все-таки меняются.

PS. Если совсем непонятно, что я хотел объяснить, может быть, кто смотрел фильмец - “1408”, там похожая ситуация есть)

Edited at 22.09.2015 16:09 (10 years ago)
Aleks Versus Moderator 22.09.2015 14:18 (10 years ago)

mkir,
т.е. ты хочешь сделать нормальный мир, потом вбросить персонаж в зазеркалье, а потом снова вернуть в нормальный мир, где всё должно быть в точности так, как в первый раз?

Это одновременно и просто и трудоёмко. Тебе нужно написать локацию (назовём её локацией обнуления), в которой всем переменным-маркерам, описывающим мир, присваиваются значения в момент 0. Потом в процессе прохождения мира эти маркеры будут менять значения, пока герой вновь не попадёт в зазеркалье и не вернётся опять в нормальный мир. Тут, чтобы сбросить все значения всех-переменных маркеров, тебе достаточно будет обратиться к локации обнуления через gs. Естественно маркер, который отвечает за факт того, что герой уже побывал в этом мире, на этой локации не пишется.

Не, ну походу это надо будет тогда вместо обнуления заводить переменные-двойники - это слишком много для моей игры, вручную не сдюжу) В общем, ладно, я решил пойти другим путем - просто на самом деле создать иллюзию, что игрок вернулся в нормальный мир - написать пару локаций, его имитирующих, но с небольшим сводящим с ума изъяном)

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

mkir,
Я немножко опоздал, но всё-таки… Может сделать Зазеркалье отдельным модулем, со своими переменными. Что-то останется общим, что-то, например деньги, можно обозначить альтернативной переменной. Тогда не надо будет переживать, что что-то забыл переписать - вернувшись в Прямой мир стоит опять начать пользоваться старыми переменными, которые за время путешествия не изменились. Конечно, если часы и минуты стоят на счётчике, их придётся запоминать отдельно, как и предметы из рюкзака, но это уже не так много…

Вынес обсуждение в отдельную тему.

Aleks Versus Moderator 22.09.2015 15:44 (10 years ago)

svandrus,
нет, если писать как бы с нуля, то фиксировать переменные в отдельной локации не составит труда. Я полагал у mkir уже есть “мир” и он решает, как возвратить этот “мир” к началу.

ЗЫ: может тему обозвать “Откат состояний в игре”, или как-то так? Название “зазеркалье” не отражает сути темы и будет непонятно непосвящённым. Хотя, признаю, оно очень эффектное.

Переименовал тему.

К слову, весь требуемый функционал реализуется существующим модулем чекпойнтов.

1. На выходе из Зазеркалья в реальный мир, делаем: чекпойнт А.
2. Сразу после чекпойнта A, делаем проверку на существование чекпойнта B.
3. Если чекпойнт B не существует, создаём его и выходим из Зазеркалья.
4. Если чекпойнт B существует, то мы уже выходили из Зазеркалья. Вносим все нужные изменения - делаем запись в журнал и т.п.
5. В момент принудительного возврата в Зазеркалье, выполняется загрузка чекпойнта A.

Aleks Versus Moderator 22.09.2015 19:05 (10 years ago)

Nex,
вопрос не в том, чтобы откатить состояние всех переменных, а в том, чтобы откатить состояние части переменных. Если воспользоваться способом, описанным тобой, придётся восстанавливать как раз таки значения тех переменных, которые не должны были откатиться. Он подходит, если таких переменных немного.

вопрос не в том, чтобы откатить состояние всех переменных, а в том, чтобы откатить состояние части переменных

Aleks Versus,
нет.

Задача стоит так: откатить состояние всех переменных, но при этом знать, что такой откат произошёл и выполнить соответствующие изменения, действия.

Log in or Register to post comments.