Как сделать?
…
Байт делал версию классического плеера для консоли, пожалуй её легче всего было бы прикрутить к синтезатору речи. В общем репозитории я исходный код не нашёл, видимо за ним обращаться к Байту.
newsash:
Aleks Versus:
можно и нужно убрать лишние циклы:
Тогда уж и лишние условия убрать. И ошибки вылечить, которые появились от убирания циклов.
Spoiler
VIEW !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! hour_plus = minut / 60 &! сколько полных часов прошло minut = minut mod 60 &! приводим минуты в нормальный вид (от 0 до 59) hour = hour + hour_plus &! прибавляем к текущему времени, сколько полных часов прошло ! подсчитываем голод и усталость: golod = golod - hour_plus son = son - hour_plus day_plus = hour / 24 &! сколько полных дней прошло hour = hour mod 24 &! приводим часы в норму (от 0 до 23) daystart = daystart + day_plus &! количество дней от начала игры week = (week + day_plus) mod 7 &! выставляем день недели if week = 0:Set $week = 'Воскресенье' &! Счёт идёт от 0. 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 = 'Суббота' day = day - 1 &! Хак для нормальной работы в диапазоне от 1 до 30 day = day + day_plus &! увеличиваем количество текущих дней month_plus = day/30 day = day mod 30 month = month + month_plus day = day + 1 &! Хак для нормальной работы в диапазоне от 1 до 30 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, в коде что у тебя, еще не хватает некоторых элементов
Spoiler
if sec >= 60:
:loopsec
minut+= 1
sec-=60
!сюда можно втыкать действия происходящие раз в минуту
if sec >= 60:jump 'loopsec'
end
if minut >= 60:
:loopmin
hour+=1
minut-=60
!отслеживание сна и голода в этом блоке происходит раз в час
if Peremotka=0:
!действия в жизни, блокируется перемоткой, если например захочешь дату сдвинуть, например игрок провел в коме несколько недель, а лень высчитывать, какая дата должна быть.
son-=1
!вот тут проверяется потребление воды и еды. При входе в сон inSleep=1, при выходе из сна inSleep=0, для того что бы игрок не склеивал ласты во время сна.
if inSleep=0:energy-=1
if inSleep=0:water-=1
end
if minut >= 60:jump 'loopmin'
end
if hour >= 24:
:loop
day+=1
!daystart сколько дней прошло с начала игры
daystart+=1
!vidageday сколько дней прожил игрок, вынесено отдельно, потому что, некоторые игровые ситуации могут старить игрока быстрее, чем положено
vidageday+=1
week+=1
hour-=24
!сюда втыкаем действия которые должны произойти раз в сутки
if hour >= 24:jump 'loop'
end
!эта фигня считает месяцы 30 и 31 день, а не только 30
if month=1 or month=3 or month=5 or month=7 or month=8 or month10 or month=12:
!31
if day > 31:day-=31&month+=1
elseif month=2:
!28
if day > 28:day-=28&month+=1
elseif month=0:
month=1
if day > 31:day-=31&month+=1
elseif month=13:
month=1
if day > 31:day-=31&month+=1
else
!30
if day > 30:day-=30&month+=1
end
if month = 5 and day=12 and drmark=0:
!установка дня рождения
!и не забыть обнулить drmark на следующий день
drmark=1
age+=1
vidage+=1
end
if day = 0:day = 1
if week > 7:
:loopweek
week-=7
if week > 7:
jump 'loopweek'
end
end
if week=0 or week=8: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
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 = ''
Вообще, это я написал этот код времени для своей игры. Конечно ньюсаш и алекс версус написали в итоге рабочий код. Внешне он короче, нет циклов. Но дело в том, что циклы в этом коде редко срабатывают, и вообще никак не нагружают систему. Так же в моем расчете времени заранее предусмотрены места куда можно втыкать все, что угодно и не парится совмещением с временными величинами. Я внутри этой структуры даже авто бои рассчитывал с привязкой ко времени. Эта же фигня сделана не просто как счетчик времени, она служит для полного отслеживания всего происходящего в игре.
EL_RIO:
$loc=$curloc
Разве loc - не зарезервированное слово для функции?
Farfignugen:
И блоки с циклами нужны для того, что бы туда вставлять проверки действий.
мне не кажется удобным вставлять блоки проверки действий в календарь. Но хозяин - барин.
Farfignugen:
Не все может быть кратным часам или минутам.
Покажи в своём коде пример действия, которое будет происходить раз в 1 день 22 часа 59 минут.
Farfignugen:
Но дело в том, что циклы в этом коде редко срабатывают, и вообще никак не нагружают систему.
Пока автор не воткнёт твой календарь в аэру и не выставит переход в 10040 минут. :lol:
Разве loc - не зарезервированное слово для функции?
В нынешней версии классического плеера, будет работать. В следующей, а также в Андроид-плеере и Навигаторе, уже нет.
Nex:
В нынешней версии классического плеера, будет работать.
Будет работать, как функция проверки наличия локации, или как переменная?
Nex:
В нынешней версии классического плеера, будет работать. В следующей, а также в Андроид-плеере и Навигаторе, уже нет.
Функция добавлена в 5.7.0. Так что и в нынешней версии не будет работать.
Aleks Versus,
работает в качестве обычной переменной.
newsash,
ты ошибаешься.
Nex:
ты ошибаешься.
Пруф, см. пункт 2.
UPD: Выяснилось, что действительно есть такой баг, что $LOC работает как переменная.
$MOD, $OBJ, $LOC, $NO, $AND, $OR - работают, как переменные
MOD, OBJ, LOC, NO, AND, OR - работают как функции.
Является ли символ $ частью имени переменной, в таком случае?
killvar ‘loc’ убивает массив $loc.
Aleks Versus:
Является ли символ $ частью имени переменной, в таком случае?
Если закопаться в механизм хранения переменных интерпретатором, то каждая переменная - это массив структур из двух элементов, один из которых - число, а второй - строка. А на уровне языка QSP обращение к строке идёт через ‘$’, а к числу - без этого знака. Для переменных с названиями MOD, OBJ, LOC, NO, AND, OR доступно только строковое значение (с использованием ‘$’), а обращение к числовому перебивается вызовом функции.
Лично я считаю это недоработкой языка, нужно Байту передать.
P.S. Кому нечего делать, можно ещё поэкспериментировать с ‘$$$переменная’. :)
newsash,
Помоги разобраться:
if selobj = ‘плакат с девицей’:
*clear
‘<b>Плакат с девицей</b>’
‘Забавный такой и информативный плакат’
‘<a href=“EXEC:pl1=3 & delobj $selobj & *clear”>сорвать</a>’
end
end
Так вот “pl1” не присваивается значение “3” но все остальное работает то есть клеар и удаление выделенного объекта.
попробуй изменить переменную на pal1
Либо, если дело не в неправильном чтении pl, значит переменной где-то ещё присваивается другое значение.
P.S.: проверил. Всё прекрасно работает. pl1 присваивается значение 3. Проверяй остальной код.
Alex Versus. Спасибо за ответ но.. Еще сильнее запутался(( Может такое происходить из-за того что код выше обрабатывается в локации “счетчик предметов”?
Pasha,
“счетчик предметов” я так полагаю ты поместил в $onobjsel?
$onobjsel = "счетчик предметов"
Так?
Значение в pl1 передаётся, когда ты нажимаешь на гиперссылку. Это точно. Проверь, где ещё используется pl1. Скорее всего где-то дальше по коду. Т.е. после того, как ты срываешь плакат, происходят ещё какие-то действия. Тебе нужно отследить, где именно меняется pl1. Поскольку ссылка уничтожает предмет “плакат с девицей”, выделение снимается и обработка локации “счетчик предметов” не происходит.
Вот исходник##text##