Как сделать?
…
Здравствуйте, извиняюсь, если вопрос уже был, но просмотреть всю ветку не реально =(
Подскажите, плиз, как сделать отсчет времени, чтобы определенное действие можно было совершить только раз в неделю, скажем. То есть нам надо как то запомнить день, когда оно было совершено и плюсовать к нему 7, а если перевалит за 30 обнулять? Только не пойму, как это в коде выразить =( Или как то хитрее можно сделать?
Morning Star,
Как сделать время
Пожалуйста, проконсультируйте по таким вопросам.
1. Локальные переменные. В локации у меня есть промежуточная переменная $s. Вызываю функцию, в которой используется промежуточная переменная с тем же именем. После выполнения функции в локации обращаюсь к $s, получаю значение, которое было в функции. Есть ли в qsp такая штука, как локальные переменные, которые существуют только на время выполнения функции? Если да, то где можно найти по ним информацию?
2. Многомерные массивы. Есть несколько персонажей с определенным набором параметров, привязанных к действию. Хотелось бы определить двумерный массив (персонаж-действие), чтобы по индексу (как вариант, по значению в одном из полей - первичному ключу) получать значения во всех остальных полях. Я где-то случайно натыкался на обсуждение этого вопроса, кажется здесь, на форуме, но тогда было не нужно, а теперь никак не могу найти…
Пожалуйста, подскажите.
Nex,
не, это я знаю, у меня есть счетчик времени, где то его нашла:
Spoiler
if minut >= 60:
:loopmin
set hour = hour + 1
set minut = minut - 60
if minut >= 60:
jump 'loopmin'
end
end
if hour >= 24:
:loop
set day = day + 1
set daystart = daystart + 1
set week = week + 1
set hour = hour - 24
if hour >= 24:
jump 'loop'
end
end
if day > 30:
set day = day - 30
set month = month + 1
end
if day = 0:set day = 1
if week > 7:
:loopweek
set week = week - 7
if week > 7:
jump 'loopweek'
end
end
if week = 1:Set $week = 'понедельник'
if week = 2:Set $week = 'вторник'
if week = 3:Set $week = 'среда'
if week = 4:Set $week = 'четверг'
if week = 5:Set $week = 'пятница'
if week = 6:Set $week = 'суббота'
if week = 7:Set $week = 'воскресенье'
if month = 0:Set month = 1
if month = 13:Set month = 1
If month = 1:set $month = 'Январь'
If month = 2:set $month = 'Февраль'
If month = 3:set $month = 'Март'
If month = 4:set $month = 'Апрель'
If month = 5:set $month = 'Май'
If month = 6:set $month = 'Июнь'
If month = 7:set $month = 'Июль'
If month = 8:set $month = 'Август'
If month = 9:set $month = 'Сентябрь'
If month = 10:set $month = 'Октябрь'
If month = 11:set $month = 'Ноябрь'
If month = 12:set $month = 'Декабрь'
if minut < 10:set $nilmin = '0'
if minut >= 10:set $nilmin = ''
я другим интересуюсь. Например, при таком счетчике герой купил в магазине, скажем, зелье восстановления. Как сделать так, чтобы в следующий раз он мог купить это зелье только через неделю? То есть купил он в среду - в четверг, пятницу и т.д. зелья нет в магазине, а в следующую среду оно вновь появится. Но с привязкой ко действию героя, а не к дню. То есть, если бы он купил его в субботу, оно появилось бы только в следующую субботу.
Morning Star,
Я бы попробовал сделать так:
Завести массив:
Первая колонка Товар, вторая Интервал (часы, можно дни), третья - время покупки (например, в часах с начала игры).
Зелье 100 -100
Ступка 200 -200
Одежда 10 -10
Когда товар покупается обновляется время покупки. Когда игрок заходит во второй раз, проверяется прошло ли достаточно времени со времени покупки, если нет, товар не появляется в списке.
Надеюсь, поможет. :)
GrayWolf,
аа.. я поняла ваш ход мысли. Да, это действительно хитрее и проще, чем моя первоначальная мысль, спасибо большое =)
Только с массивами я никак не привыкну работать, поэтому предпочитаю просто отдельные переменные задавать…но тут в общем без разницы ;)
GrayWolf:
- Локальные переменные.
На данный момент полностью локальной переменной является только args. Хотя в плане разработки возможность создавать другие локальные переменные вроде бы есть.
Сейчас могу только предложить использовать какой-нибудь временный массив (есть несколько способов). Или пользоваться “локальными” исключительно локально.
GrayWolf:
- Многомерные массивы.
Многомерные массивы организуются, как массив[’<<x>>,<<y>>’]. Я так понимаю задача стоит, чтобы придумать функцию массив[’<<x>>’], возвращающую массив_x[’<<y>>’].
Если индексы числовые, то можно хранить в y=0 количество элементов при заданном х, а потом делать выборку циклом.
newsash,
огромное спасибо за ответ. Сейчас попробую с массивами. Имитацию локальных я сделал, но смотрится, конечно, не слишком красиво. Будет здорово, если в следующей версии появится возможность создавать локальные переменные.
GrayWolf:
Будет здорово, если в следующей версии появится возможность создавать локальные переменные.
Насколько я знаю, Байт уже добавил код для локальных переменных в библиотеку. В Quest Navigator’e они уже могут даже работать. Остаётся только надеяться, что следующая версия и описание синтаксиса от Байта будут довольно скоро.
Будем ждать :)
Morning Star:
Nex,
не, это я знаю, у меня есть счетчик времени, где то его нашла:Spoiler
if minut >= 60: :loopmin set hour = hour + 1 set minut = minut - 60 if minut >= 60: jump 'loopmin' end end if hour >= 24: :loop set day = day + 1 set daystart = daystart + 1 set week = week + 1 set hour = hour - 24 if hour >= 24: jump 'loop' end end if day > 30: set day = day - 30 set month = month + 1 end if day = 0:set day = 1 if week > 7: :loopweek set week = week - 7 if week > 7: jump 'loopweek' end end if week = 1:Set $week = 'понедельник' if week = 2:Set $week = 'вторник' if week = 3:Set $week = 'среда' if week = 4:Set $week = 'четверг' if week = 5:Set $week = 'пятница' if week = 6:Set $week = 'суббота' if week = 7:Set $week = 'воскресенье' if month = 0:Set month = 1 if month = 13:Set month = 1 If month = 1:set $month = 'Январь' If month = 2:set $month = 'Февраль' If month = 3:set $month = 'Март' If month = 4:set $month = 'Апрель' If month = 5:set $month = 'Май' If month = 6:set $month = 'Июнь' If month = 7:set $month = 'Июль' If month = 8:set $month = 'Август' If month = 9:set $month = 'Сентябрь' If month = 10:set $month = 'Октябрь' If month = 11:set $month = 'Ноябрь' If month = 12:set $month = 'Декабрь' if minut < 10:set $nilmin = '0' if minut >= 10:set $nilmin = ''я другим интересуюсь. Например, при таком счетчике герой купил в магазине, скажем, зелье восстановления. Как сделать так, чтобы в следующий раз он мог купить это зелье только через неделю? То есть купил он в среду - в четверг, пятницу и т.д. зелья нет в магазине, а в следующую среду оно вновь появится. Но с привязкой ко действию героя, а не к дню. То есть, если бы он купил его в субботу, оно появилось бы только в следующую субботу.
daystart это переменная отслеживающая сколько прошло дней с момента начала игры. Что бы отсчитать неделю достаточно при покупке написать следующий код
ДеньПокупкиЗелья=daystart+7
И при покупке всегда проверять условие
if ДеньПокупкиЗелья<=daystart:
взяла для своей игры из чужой код времени
Spoiler
VIEW
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if minut >= 60:
:loopmin
set hour = hour + 1
set minut = minut - 60
set golod = golod - 1
set son = son - 1
if minut >= 60:
jump 'loopmin'
end
end
if hour >= 24:
:loop
set day = day + 1
set daystart = daystart + 1
set week = week + 1
set hour = hour - 24
if hour >= 24:
jump 'loop'
end
end
if day > 30:
set day = day - 30
set month = month + 1
!ПЛАТЕЖИ
end
if day = 0:set day = 1
if week > 7:
:loopweek
set week = week - 7
if week > 7:
jump 'loopweek'
end
end
if week = 1:Set $week = 'Понедельник'
if week = 2:Set $week = 'Вторник'
if week = 3:Set $week = 'Среда'
if week = 4:Set $week = 'Четверг'
if week = 5:Set $week = 'Пятница'
if week = 6:Set $week = 'Суббота'
if week = 7:Set $week = 'Воскресенье'
if month = 0:Set month = 1
if month = 13:Set month = 1&set year = year + 1
If month = 1:set $month = 'Январь'
If month = 2:set $month = 'Февраль'
If month = 3:set $month = 'Март'
If month = 4:set $month = 'Апрель'
If month = 5:set $month = 'Май'
If month = 6:set $month = 'Июнь'
If month = 7:set $month = 'Июль'
If month = 8:set $month = 'Август'
If month = 9:set $month = 'Сентябрь'
If month = 10:set $month = 'Октябрь'
If month = 11:set $month = 'Ноябрь'
If month = 12:set $month = 'Декабрь'
if minut < 10:set $nilmin = '0'
if minut >= 10:set $nilmin = ''
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!КОНЕЦ РАЧЕТА ВРЕМЕНИ
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!НАЧАЛО ОПИСАНИЯ
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if opisanie=0:'<center>Время <B><<hour>></B> часов <B><<$nilmin>><<minut>></B> минут. Сейчас <<day>> <<$month>> <<year>>года, <<$week>></center>'
В игре у меня есть счетчик жажды и голода, подскажите как присобачит к времени жажду и голод. Сама блондинка, мозгов не хватает:(
vais,
Не совсем понятно, как работает счётчик времени, похоже он оторван от реальности. Однако голод в нём уже есть, насколько я вижу. Должен падать на один пункт каждый час. Не вижу, как отсчитывается время. Может кинешь сюда свою игру в том виде, в каком она есть? Так будет легче разобраться. И ещё ссылку желательно на игру, из которой ты этот код взяла.
Aleks Versus:
Не совсем понятно, как работает счётчик времени, похоже он оторван от реальности.
Я видел где-то этот код. Там по act время прибавляется (minut+= …).
vais,
там уже есть голод и усталость (уменьшается на 1 каждый час):
set golod = golod - 1
set son = son - 1
Осталось только этим воспользоваться. Жажда делается аналогично.
И время в act нужно прибавлять только минутам, чтобы механизм срабатывал.
newsash:
Я видел где-то этот код. Там по act время прибавляется (minut+= …).
не удобно, конечно, но ладно.
vais,
можно и нужно убрать лишние циклы:
Spoiler
VIEW
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if minut > 59:
hour_plus = minut/60 & ! сколько полных часов прошло
else
hour_plus = 0 & ! если ни одного полного часа не прошло, значит hour_plus = 0
end
hour = hour + hour_plus & ! прибавляем к текущему времени, сколько полных часов прошло
minut = minut - hour_plus*60 & ! вычисляем текущее значение в минутах
! подсчитываем голод и усталость:
golod = golod - hour_plus
son = son - hour_plus
if hour > 23:
day_plus = hour/24 & ! сколько полных дней прошло
hour = hour - day_plus*24 & ! вычисляем количество текущих часов
else
day_plus=0
end
day = day + day_plus & ! увеличиваем количество текущих дней
daystart = daystart + day_plus & ! не знаю, что это
week = week + day_plus & ! выставляем день недели
if day > 29:
month_plus = day/30
else
month_plus = 0
end
month = month + month_plus
if day = 0: day = 1
if week > 6:
week = week mod 7
else
week = week
end
if week=0: week = 1
if week = 1:Set $week = 'Понедельник'
if week = 2:Set $week = 'Вторник'
if week = 3:Set $week = 'Среда'
if week = 4:Set $week = 'Четверг'
if week = 5:Set $week = 'Пятница'
if week = 6:Set $week = 'Суббота'
if week = 7:Set $week = 'Воскресенье'
if month = 0:Set month = 1
if month = 13:Set month = 1&set year = year + 1
If month = 1:set $month = 'Январь'
If month = 2:set $month = 'Февраль'
If month = 3:set $month = 'Март'
If month = 4:set $month = 'Апрель'
If month = 5:set $month = 'Май'
If month = 6:set $month = 'Июнь'
If month = 7:set $month = 'Июль'
If month = 8:set $month = 'Август'
If month = 9:set $month = 'Сентябрь'
If month = 10:set $month = 'Октябрь'
If month = 11:set $month = 'Ноябрь'
If month = 12:set $month = 'Декабрь'
if minut < 10:set $nilmin = '0'
if minut >= 10:set $nilmin = ''
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!КОНЕЦ РАЧЕТА ВРЕМЕНИ
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!НАЧАЛО ОПИСАНИЯ
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if opisanie=0:'<center>Время <B><<hour>></B> часов <B><<$nilmin>><<minut>></B> минут. Сейчас <<day>> <<$month>> <<year>>года, <<$week>></center>'