diff --git a/coachman.lua b/coachman.lua --- a/coachman.lua +++ b/coachman.lua @@ -1,70 +1,97 @@ --[[ Кучер, который будет за деньги возить вас по локациям первой части ]] +--TODO случайный ответ кучера из нескольких вариантов char_coachman = obj { nam = "coachman"; disp = "экипаж"; dsc = [[Вы видите небольшую двухколесную повозку, с впряженными в нее двумя лошадьми. Его {владелец} стоит рядом и, судя по всему, ждет пассажиров^ ]]; - act = function() - walkin "coachman_dlg"; + act = function(s) + return "Оплатите проезд"; + end; + used = function(s, o) + if (o == item_coin) then + coachman_dlg.onecoin = true; + walkin "coachman_dlg"; + elseif (o == item_money) then + coachman_dlg.onecoin = false; + walkin "coachman_dlg"; + end; end; }; coachman_dlg = dlg { nam = "coachman_dlg"; - disp = "Кучер"; + disp = "Извозчик"; dsc = "Куда едем?"; hideinv = true; - enter = function(s) - pon(1, 2, 3, 4, 5, 6); - if (where(char_coachman) == hotel) then - poff(1); - end; - if (where(char_coachman) == michael_house) then - poff(2); - end; - if (where(char_coachman) == warehouse_18) then - poff(3); - end; - if (where(char_coachman) == warehouse_32) then - poff(4); - end; - if (where(char_coachman) == shipyard_2) then - poff(5); - end; - if (where(char_coachman) == port) then - poff(6); + entered = function(s) + poff(1, 2, 3, 4, 5, 6, 7); + if (s.onecoin) then + pon(7); + else + if (where(char_coachman) ~= port) then + pon(6); + end; + if (where(char_coachman) ~= hotel) then + pon(1); + end; + if (where(char_coachman) ~= wright_house) then + pon(2); + end; + if (where(char_coachman) ~= dock_2 and global.dock_found) then + pon(5); + end; + if (where(char_coachman) ~= warehouse_18 and global.warehouse_found) then + pon(3); + end; + if (where(char_coachman) ~= warehouse_32 and global.warehouse_found) then + pon(4); + end; end; end; phr = { - {1, always = true, "В гостиницу (0 монет)", "Садитесь! Здесь совсем близко. Гостиница называется \"У старого Фрэнки\"", + {1, always = true, "В гостиницу", function (s) walk 'hotel'; + return "Садитесь! Здесь совсем близко. Гостиница называется \"У старого Фрэнки\""; end }, - {2, always = true, "[Майкл Райт] (0 монет)", "Садитесь!", + {2, always = true, "К Райту", function (s) - walk 'michael_house'; + walk 'wright_house'; + return "Садитесь!"; end }, - {3, always = true, "[Склад 18] (0 монет)", "Садитесь!", + {3, always = true, "На склад 18", function (s) walk 'warehouse_18'; - end - }, - {4, always = true, "[Склад 32] (0 монет)", "Садитесь!", - function (s) - walk 'warehouse_32'; + return "Садитесь!"; end }, - {5, always = true, "[Верфь 2] (0 монет)", "Садитесь!", + {4, always = true, "На склад 32", function (s) - walk 'shipyard_2'; + walk 'warehouse_32'; + return "Садитесь!"; + end + + }, + {5, always = true, "К доку 2", + function (s) + walk 'dock_2'; + return "Садитесь!"; end }, - {6, always = true, "В порт (0 монет)", "Садитесь!", + {6, always = true, "В порт", function (s) walk 'port'; + return "Садитесь!"; + end + }, + {7, always = true, "В банк", "Садитесь!", + function (s) + remove(item_coin, pl); + walk 'bank_street'; end }, {255, always = true, "Я передумал", function(s) diff --git a/items.lua b/items.lua --- a/items.lua +++ b/items.lua @@ -1,18 +1,37 @@ +item_bankbook = obj { + nam = "Банковская книжка"; + inv = [[ + Ваша банковская книжка. + ]]; +}; + +item_coin = obj { + nam = "coin"; + disp = "1 шиллинг"; + inv = [[Монета достоинством в 1 шиллинг]]; +}; + +item_money = obj { + nam = "money"; + disp = "Деньги"; + inv = [[Кошелек с монетами различного достоинства]]; +}; + item_note_1 = obj { nam = "note1"; disp = "Записка"; inv = [[Клочок бумаги с адресом: [Адрес Майкла Райта], Майкл Райт]]; }; -item_documents = obj { - nam = "documents"; +item_charts = obj { + nam = "charts"; disp = "Документы отца"; dsc = [[ На столе лежат {схемы складов и верфей} Вест-Хэйвен Транс-Оушен ]]; inv = [[ Схемы нескольких строений, принадлежавших компании отца. На некоторых схемах есть места отмечены жирными крестиками. - Схемы с крестиками обозначены как склад 18, верфь 2, склад 32 + Схемы с крестиками обозначены как склад 18, док 2, склад 32 ]]; use = function(s, o) if (o == char_michael) then @@ -36,6 +55,9 @@ item_toolbox = obj { dsc = [[ Вы видите {ящик} со всевозможными полезными и не очень инструментами - отвертками, ключами, молотками и т.д.^ ]]; + tak = [[ + Вы оглядываетесь, но не видите никого, кому мог бы принадлежать этот ящик. Пожав плечами, вы забираете его. + ]]; }; item_pickaxe = obj { diff --git a/london.lua b/london.lua --- a/london.lua +++ b/london.lua @@ -0,0 +1,100 @@ +--[[ + Порт +]] +port = room { + nam = "port"; + disp = "Порт"; + entered = function(s) + move(char_coachman, here()); + end; + dsc = [[ + Вы находитесь в порту. Небо покрыто тяжелыми тучами - вот-вот начнется дождь. + Вокруг кипит жизнь: снуют толпы народу, то и дело раздаются гудки пароходов, слышно ржание лошадей, запряженных в многочисленные экипажи, привозящие и увозящие людей. + ]]; + obj = {'item_toolbox'}; +}; + +--[[ + Банк +]] +bank_street = room { + nam = "bank_street"; + disp = "У входа в банк"; + entered = function(s) + move(char_coachman, here()); + -- lifeon(s); + end; + dsc = [[ + Вы находитесь на улице у входа в банк - двухэтажное здание с большой украшенной вывеской "Банк Джонсона" над входом. + ]]; + way = { + vroom("В банк", "bank_inside"); + }; + --left = function(s) + -- lifeoff(s); + --end; +}; + +bank_inside = room { + nam = "bank_inside"; + disp = "В банке"; + dsc = [[ + Вы находитесь в банке. Высокие окна закрыты плотными занавесками, однако в зале светло благодаря многочисленным газовым лампам, укрепленным на стенах и колоннах по всему залу. Мраморный пол идеально чист, несмотря на снующих посетителей. + ]]; + way = { + vroom("На улицу", "bank_street"); + }; + obj = { + 'clerk' + }; +}; + +clerk = obj { + nam = "clerk"; + dsc = [[ + За мраморной стойкой вы видите скучающего {клерка}. + ]]; + act = [[ Без банковской книжки вам здесь денег не выдадут. ]]; + used = function(s, o) + if (o == item_bankbook) then + remove(item_bankbook, pl); + take(item_money); + return "Вы протягиваете клерку вашу банковскую книжку и снимаете некоторое количество денег со счета"; + end; + end; +}; + +--[[ + Гостиница +]] + +hotel_street = room { + nam = "hotel_street"; + disp = "У входа в гостиницу"; + entered = function(s) + move(char_coachman, here()); + end; + dsc = [[ + Вы стоите на улице у входа в гостиницу. Гостиница представляет собой трехэтажное кирпичное здание. + ]]; +}; + +hotel_hall = room { + nam = "hotel_hall"; + disp = "Гостиница"; + dsc = [[ + Вы находитесь в холле гостиницы. Просторный зал, по высоте составляющий два этажа. В задней части вы видите широкую лестницу, застеленную красной дорожкой. Занавески на окнах аккуратно собраны в стороны, позволяя свету проникнуть в помещение. Несмотря на это, под потолком горит огромная люстра, украшенная золотом и серебром. + ]]; + way = { + vroom("На улицу", "hotel_street"); + vroom("В номер", "hotel_room"); + }; +}; + + + +hotel_room = room { + nam = "hotel_room"; + disp = "Ваш номер"; + +}; \ No newline at end of file diff --git a/main.lua b/main.lua --- a/main.lua +++ b/main.lua @@ -34,41 +34,28 @@ dofile "first_city_inner_rim.lua" dofile "first_city_middle_rim.lua" dofile "first_city_outer_rim.lua" +--TODO описания локаций должны изменяться в зависимости от посещения их днем или ночью + +DAYTIME_DAY = "day"; +DAYTIME_NIGHT = "night"; + +global = { + warehouse_found = false, + dock_found = false, + daytime = "day" +}; + pl = player { nam = "player"; disp = "Дэвид Дрейк"; where = 'port'; hitpoints = 10; - obj = {'item_umbrella', "item_documents", "item_note_1", "item_first_city_key", "item_colt"}; + obj = {'item_bankbook', 'item_umbrella', "item_charts", "item_note_1", "item_first_city_key", "item_colt", "item_coin"}; -- party array. Should be empty on start party = {--[["learr", "radcliffe", "phaetlarr", "wright"]]}; companion = nil; }; -hotel = room { - nam = "hotel"; - disp = "Гостиница"; - enter = function(s) - move(char_coachman, here()); - end; - dsc = [[ - Вы находитесь в холле гостиницы - ]]; -}; - -port = room { - nam = "port"; - disp = "Порт"; - enter = function(s) - move(char_coachman, here()); - end; - dsc = [[ - Вы находитесь в порту. Небо покрыто тяжелыми тучами - вот-вот начнется дождь. - Вокруг кипит жизнь: снуют толпы народу, то и дело раздаются гудки пароходов, слышно ржание лошадей, запряженных в многочисленные экипажи, привозящие и увозящие людей. - ]]; - obj = {'item_toolbox'}; -}; - intro = room { nam = "intro"; hideinv = true; @@ -101,13 +88,13 @@ function init() put(submarine_leviathan, shipyard_inside); ---debug --pl.where = submarine_leviathan; - move(submarine_leviathan, first_city_entrance); + --move(submarine_leviathan, first_city_entrance); --move(submarine_leviathan, first_city_outer_east); --walk(final_scene); --walk(leviathan_wardroom); - walk(leviathan_wardroom); - put("char_learr", "leviathan_wardroom"); + --walk(leviathan_wardroom); + --put("char_learr", "leviathan_wardroom"); --put("char_phaetlarr", "leviathan_engines"); - put("char_radcliffe", "leviathan_engines"); - put("char_wright", "leviathan_wardroom"); + --put("char_radcliffe", "leviathan_engines"); + --put("char_wright", "leviathan_wardroom"); end \ No newline at end of file