# Перемещение через... dsc - в СТИД 2
kolobod(syscall,30) — All
2019-10-11 14:19:15


Ох, еще такой вопрос. Может знает кто? Заранее прошу прощения)
В общем, загнал я себя в ловушку. Забыл слова Петра о том, что dsc (в отличие от act) не предназначен для внесения каких-то глобальных изменений в игровой процесс, это только описательная часть. В итоге столкнулся с тем, что завязал часть игрового процесса на dsc все-таки. До какого-то момента все исправно работало. До тех пор, пока не понадобилось организовать "переход" в другую комнату нетрадиционным образом. Сделал так:
bunker = room {
...
dsc = function(s)
...
      if global_nnn == 10 and global_yyy == 20 then		   
         walk 'action_room_2'; 
         return true;
      end;	
...	
end;
}
Суть, если отбросить лишние детали: в комнате bunker можно переключать два параметра (условно nnn и yyy) и когда они доходят до значений "10" и "20" соответственно, игрок автоматически перемещается в другую комнату (происходят еще разные изменения в сюжете, в интерфейсе, но тут это не важно). В нынешнем виде, такая попытка перемещения не работает. Игрок, судя по всему остается в текущей комнате.

Вопрос: возможен ли в принципе walk из dsc (другие способы перехода именно в этом, конкретном случае не желательны) или про это можно сразу забыть?

# Re: Перемещение через... dsc - в СТИД 2
kolobod(syscall,30) — kolobod
2019-10-11 15:34:05


Вроде решил проблему перехода в другую комнату убрав это из dsc в
lifeon (check); 
check = obj {
    life = function(s)
           if global_nnn == 10 and global_yyy == 20 then		   
           walk 'action_room_2'; 
           return true;
    end;
end;
};
Но радовался недолго)) Ибо игрок перемещаться-то перемещается из bunker в action_room_2 - но тема при этом не меняется, как сделано у меня при переходах в другие комнаты. И все оформление рушится. Реально не могу понять в чем засада, поскольку смена тем для всех комнат сделана через тот же check, и для всех один и тот же код, заставляющий тему меняться. При входе в комнату она идентифицируется по номеру, а под каждый номер прописано как меняется тема, типа такого:
===
if location == 4 then
theme.gfx.bg('theme/5.jpg');
theme.win.geom(700, 300, 600, 500);
end;
Везде это работает, а вот при переходе конкретно в action_room_2 почему-то нет.  

# Re: Перемещение через... dsc - в СТИД 2
kolobod(syscall,30) — kolobod
2019-10-11 16:14:36


Все даже еще загадочнее. Сделал для эксперимента - что игрок переходит не напрямую из bunker в action_room_2, а сначала идет в другую комнату (и все при этом отлично работает, тема комнаты bunker меняется на тему выбранной комнаты, переход проходит нормально). Потом уже только переходим в action_room_2 - и снова все отлично: и переходим, и тема меняется правильно. Но вот стоит только вернуть переход обратно напрямую, из bunker в action_room_2 - как оформление крашится.
И тут моя логика начала сходить с ума.
Ибо если проблема в комнате bunker - то почему из нее отлично работают переходы в другие комнаты?
Если проблема в комнате action_room_2 - то почему в нее нормально переходим из любой другой комнаты, кроме bunker?
Буду дальше копать))) Прям самому интересно)

# Re: Перемещение через... dsc - в СТИД 2
kolobod(syscall,30) — kolobod
2019-10-11 17:11:34


В общем, я представляю как ржут программисты читая мой бред))
Потыкав свой "код" я уже понял, что корректно и красиво те переходы что я прописал - работают только если переход вызван:
-кликом по картинке в комнате (не подходит в моем случае),
-кликом по объекту в комнате, через act (опять же, не подходит в силу геймплея),
-кликом по предмету инвентаря (тоже не подходит, надо из комнаты),
-из диалога (аналогично)

Через life = function и dsc комнаты мой переход со сменой тем не пашет. Либо нельзя, либо неправильно прописываю.

# Re: Перемещение через... dsc - в СТИД 2
Peter(syscall,1) — kolobod
2019-10-11 17:24:23


Тут такое дело, я совсем уже не помню STEAD2 и не хочется в нем снова разбираться, так как STEAD2 больше не развивается.
Но дам такой совет:
- в dsc игровую логику не делать;
- игровкую логику сделать в enter;
- если есть вопрос по life - нужен рабочий пример, который я смогу запустить и отладить. Тогда смогу помочь.

# Re: Перемещение через... dsc - в СТИД 2
kolobod(syscall,30) — Peter
2019-10-11 18:15:43


Да, насчет dsc я уже осознал свой изначальный просчет)))
По enter пробовал - не получилось, насколько я понимаю он проверяет все при заходе в комнату, а там в ней дальше идут события. В общем перенос в enter
      if global_nnn == 10 and global_yyy == 20 then		   
         walk 'action_room_2'; 
         return true;
      end;
не срабатывает, потому что нужные условия достигаются игроком уже в ходе манипуляций в комнате, а не при заходе в нее.

Переход я все же сделал) Очень криворуким способом, но он работает)) Впрочем у меня все криворукое, и как благородный INSTEAD еще терпит мои дилетантские издевательства - я искренне не понимаю))))))

# Re: Перемещение через... dsc - в СТИД 2
Peter(syscall,1) — kolobod
2019-10-11 21:00:27


А, я понял! То-есть мы хотим после какого-то действия сделать walk. Чтобы была функция, которая следит за событиями.
Ну да, тогда life в теории -- рабочий вариант. Но там нюансы были, в документации по STEAD2 было что то о том, как надо делать переходы из life метода.
Я могу посмотреть, но нужен демо-пример небольшой.

# Re: Перемещение через... dsc - в СТИД 2
kolobod(syscall,30) — Peter
2019-10-11 21:49:43


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