RU 📌 Pinned

Как сделать?

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

Zores:

Хотелось бы уточнить один момент с оператором KILLVAR. В частности, удаления из массива значения с определённым индексом.

Если, для примера, у меня есть процедура для удаления некоторых значений из массива. Значения передаются через аргументы. Индексация массива сложная, т.е. индекс состоит как из самого аргумента, так и из статичной строки (например, ‘<<ARGS[0]>>_A’). Как тогда удалить нужный элемент, ведь в KILLVAR для значения аргумента строка не подходит?

Нужно создать локацию с именем “УдалитьИзМассиваПоКлючу” и следующим кодом:

! Параметры
        ! 1. 0 - Имя массива (тип: строка)
        ! 2. 1 - Строковый ключ удаляемого элемента (тип: строка)
    !----------
    dynamic "$<<$ARGS[0]>>[$ARGS[0]] = '!@#$%^del^%$#@!'", $ARGS[1]
    killvar $ARGS[0], arrpos('$' + $ARGS[0], '!@#$%^del^%$#@!')
    !----------

После чего можно удалить элемент со строковым индексом из массива с помощью команды

GS 'УдалитьИзМассиваПоКлючу', 'ИмяМассива', 'ЗначениеСтроковогоИндекса'

Несколько вопросов по сохранению/загрузке.
1)Как сделать сохранение прогресса игры по нажатию на действие ‘Сохранить игру’?
2)Как сделать загрузку прогресса игры по нажатию на действие ‘Загрузить игру’?
3)Как сделать что бы при запуске игры (если есть сохранение) возникало новое действие ‘Продолжить игру’?.

Я так понял это делается через OPENGAME и SAVEGAME при подключении служебных локаций $ONGLOAD и $ONGSAVE, но как это все собрать вместе? Например, что писать в этих служебных локациях?

Посмотрел пример кода в игреИгра с чекпойнтами. Но там нет комментариев, поэтому из примера ничего не понял. Например, я не понял зачем там используется два файла сохранений. Их обязательно должно быть два? Зачем в локации ONGLOAD есть KILALL? Почему нет локации ONGSAVE?

Герасим,
если используется один слот сохранения, как в примере с чекпойнтами, то “Загрузить игру” и “Продолжить игру” - это одно и то же.

С комментариями понятнее вряд ли станет, там используется довольно хитрый трюк, основанный на хорошем знании принципов работы интерпретатора.

Локация ONGSAVE просто не нужна для чекпойнтов, поэтому её и нет.

Два файла используются потому, что при запуске игры неизвестно, существует ли файл сохранения. Поэтому сама игра не может просто решить, есть ли чекпойнт, можно ли его загружать. Благодаря использованию двух файлов, эта проверка выполняется игрой автоматически при старте. Один файл используется для стартовой проверки, другой - для сохранения состояния игры в чекпойнте.

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

Здравствуйте! Помогите пожалуйста новичку) Разбираюсь с инвентарем. Когда выбираю один из предметов - он подсвечивается, перехожу на другую локацию - подсветка сохраняется. Он как бы уже нажат. Поэтому действие, которое должно появляться при его нажатии на другой локации не срабатывает( (если изначально был выбран другой предмет - с перекликом на нужный все работает((

unsel отменяет выбор предмета.

Mioirel,
СПАСИБО!! Все заработало)

Други! Помогите советом! Как в Aero сделать так, чтоб параметры координат view задались только на одно действие?

У меня параметры view заданы:

VIEW_X = 450
VIEW_Y = 300
VIEW_W = 300
VIEW_H = 300

Мне так и нужно на протяжении всей игры. Но также нужно, что б один раз (при выборе предмета) изображение растягивалось на:

VIEW_X = 250
VIEW_Y = 50
VIEW_W = 500
VIEW_H = 630

Соответственно предмет можно юзать в любой момент. Не устанавливать же мне параметры координат “по умолчанию” на каждой локации!

Podkovally:

Други! Помогите советом! Как в Aero сделать так, чтоб параметры координат view задались только на одно действие?

Нужно вынести задание параметров в отдельную локацию и вызывать её по gs там, где это нужно (onobjsel, onnewloc и все действия без переходов, которые должны менять параметры).

Я уже спрашивал, что надо сделать, чтобы задать в переменной вопрос “или”, но теперь мне нужен оператор “и”. Изъяснюсь, что за бред я сейчас сказал:

if переменнаях=х И переменнаяy=y:
что-то происходит
end

Надеюсь кто-то понял, что мне надо

Если я прально понял, тут используется оператор AND

Допустим:

If рукоять = 1 AND лезвие = 1:
'Вы сковали меч'
Else
'У вас не хватает деталей.'
end

Рекомендую почитать Справку по QSP

Но мне и нужно вызывать через onobjsel. Может я не так объяснил.. Надо, чтоб при нажатии на предмет, всплывало окошко VIEW c параметрами wiew_x = 500 wiew_y = 500, а после закрытия окошка, все возвращалось на круги своя wiew_x = 100 wiew_y = 100.

Podkovally:

Но мне и нужно вызывать через onobjsel. Может я не так объяснил.. Надо, чтоб при нажатии на предмет, всплывало окошко VIEW c параметрами wiew_x = 500 wiew_y = 500, а после закрытия окошка, все возвращалось на круги своя wiew_x = 100 wiew_y = 100.

Я вижу два варианта:
1) Попробовать вот такой код при нажатии на предмет (я сомневаюсь, что он будет работать, но попробовать стоит)

<Измененные параметры>
VIEW ...
<Основные параметры>

2) В onnewloc и во все действия без переходов прописать восстановление параметров.

Решила задействовать Гибкий плейлист (из примеров кода). Запустила ради проверки 2 мелодии - дефолтную, и сменила ее на другую в одной из локаций. Но.. в конце игры, если “начать сначала”, играют обе мелодии вместе. И последняя продолжает играть, и первая (включается при повторной попытке пройти игру). Посоветуйте что-нибудь, пожалуйста)

gleipnir,
в начале игры напиши

CLOSE ALL

Nex,
Благодарю! (и за учебник - Отдельное спасибо!)

Log in or Register to post comments.