рдпрджрд┐ рдЖрдк рдЯреЗрдХреНрд╕реНрдЯ рдЧреЗрдореНрд╕ рдФрд░ рджреГрд╢реНрдп рдЙрдкрдиреНрдпрд╛рд╕ INSTEAD рдХреЗ рдЗрдВрдЬрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдпрд╣ рд╕рд░рд▓ рдкрд╛рда рд░реЛрдорд╛рдВрдЪ (quests) рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдХреНрдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣ рди рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЦреЗрд▓ рд▓реБрдЖ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдкрд░ рдЧреЗрдо рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рднреА рдЙрдкрдХрд░рдг рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдкрд░рд┐рджреГрд╢реНрдп 1: рдЖрдЗрдЯрдо + рдЖрдЗрдЯрдо
рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдкрд╛рд╕ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╣реИ, рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдореЗрдВ рдХрдИ рдЖрдЗрдЯрдо рд╣реИрдВред INSTEAD рдХрд╛ рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╣реИ: рдЖрдк рдПрдХ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рджреВрд╕рд░реЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕рд▓рд┐рдП рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдХреЛ рджреВрд╕рд░реЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЖрдЗрдЯрдо рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдпрд╛ рджреВрд╕рд░реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рджреВрд╕рд░реЗ рдЖрдЗрдЯрдо рдХреЛ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХ рдирдИ рдШрдЯрдирд╛ рдХреЛ рд░реЛрдХрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдХреЗрд╡рд▓ рдСрд░реНрдбрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рд╣рдо рд╣реИрдХ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред
cobj = function(v)
v.use = function(this,that)
return call(this, 'fuse', that);
end;
v.used = v.use;
return obj(v);
end
рд╡рд╣рд╛рдВ рддреБрдо рдЬрд╛рдУред рдЕрдм рдпрд╣ рдХреЛрдмрдЬ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдп рдлреНрдпреВрдЬ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
rope = cobj{
nam = '',
inv = function()
local response = ' .';
return response;
end,
fuse = function(this, that)
if (that == lock) then
inv():del(lock);
inv():del(rope);
inv():add(rope_with_lock);
return ' .'
end;
end,
}
рдкрд░рд┐рджреГрд╢реНрдп 2: рдХрдорд░реЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдЬрд╛рд░реА рдХрд░рдирд╛
рдпрджрд┐ рд╣рдо рдХрдорд░реЗ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрд╕ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд▓реМрдЯрд╛рдПрдЧрд╛, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдпрд╣ рдПрдХ рд╣реА рдЪреАрдЬ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрднреА рднреА рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдкрд╛рда рдмрдлрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдкреА рдФрд░ рдкреАрдПрдирдЖрд░:
something = function()
ifsen = ' ';
response = {' .', ' .', ' .', ' -.'};
return ifsen..response[rnd(#response)];
end
dinner = room {
nam = ' ',
dsc = function()
p [[ ]];
p (something())
end
};
рдпрджрд┐ рдЖрдк рдХреБрдЫ рдХреЗ рдмрд╛рдж рдХреЛрд╖реНрдардХ рдирд╣реАрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рддреЛ рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдкрд░рд┐рджреГрд╢реНрдп 3: рдирдИ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдБ
рдУрд╣, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЛ рдХрдорд░реЛрдВ рдореЗрдВ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдк рдЖрд░рдкреАрдЬреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдЖрдк рдХрдо рд╕реЗ рдХрдо MMORPG рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрджрд┐ рдХреЗрд╡рд▓ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдкрд╛рд╕ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрдЖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдереЗ), рдФрд░ рдЖрдкрдХреЛ quests рдХреА рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдВрдЬрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЗрд╕рдХреЗ рд▓реБрдЖ рднрд╛рдЧреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреБрджрд╛рдИ рдХрд░реЗрдВ:
function quest(v) --constructor
if v.nam == nil then error (" .", 2) end
if v.short_dsc == nil then v.short_dsc = "" end
if v.scene == nil then v.scene = room_scene end
if v.completed == nil then v.completed = false end
if v.look == nil then v.look = room_look end
if v.save == nil then v.save = room_save end
v.location_type = true;
if v.way == nil then v.way = { } end
v.isQuest = true;
v.way = list(v.way);
v = obj(v);
return v;
end
function room_look(self)
local i,n,v,ph
for i,o in opairs(self.obj) do
if isObject(ref(o)) and not o.isQuest then
o = ref(o);
if v == nil then v = stead.par(' ',v, o:look());
else v = v .. stead.par(' ',v, o:look());
end
end
end
function room(v)
v.location_type = true;
if v.look == nil then v.look = room_look end
if v.scene == nil then v.scene = room_scene end
if v.quests == nil then v.quests = list {} end
if v.obj == nil then v.obj = v.quests
else for k,m in pairs(v.quests) do v.obj[k] = m end
end
if v.way == nil then v.way = {} end
v = room(v);
return v;
end
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - questsред рдпрд╣ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ obj рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдПрдХ рдХреЙрдкреА рдкреЗрд╕реНрдЯ рд╣реИред рдХреЗрд╡рд▓ quests рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП isQuest рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреВрд░реНрдг рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЦреЛрдЬ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
Room_look рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд┐рд╕реА рдХрдорд░реЗ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдХрдорд░реЗ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг (рдУрдмреНрдЬ рд╕рд░рдгреА рд╕реЗ) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдЯрдм рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ: рдХрдорд░реЗ рдореЗрдВ рд╕рднреА quests рдХреЗ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рди рдХрд░реЗрдВред
рдХрдорд░реЗ рдХреЛ рднреА рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЕрдм рдЗрд╕рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ quests рд╣реИрдВред рдУрдмреНрдЬ рдРрд░реЗ рдХреЛ quests рдРрд░реЗ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕реЗ рднрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ рддреЛ рдпрд╣ рдмрд░рд╛рдмрд░ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ; рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдХрдорд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБред рдФрд░ рдЕрдм рдЬрдм рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╢рд╛рдирджрд╛рд░ рдЗрдВрдЬрди рдореЗрдВ рдХреБрдЫ рдЪрддреБрд░ рдЪрд╛рд▓ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
рд╕рд╛рдорд╛рдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред