1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
------------------------------------------------------------------------------
-- lm_toll.lua:
-- One-way toll-stair marker.
------------------------------------------------------------------------------
require("clua/lm_1way.lua")
TollStair = util.subclass(OneWayStair)
TollStair.CLASS = "TollStair"
function TollStair:new(props)
local toll = self.super.new(self, props)
if not props.amount or props.amount < 1 then
error("Bad toll amount: " .. props.amount)
end
return toll
end
function TollStair:activate(marker)
self.super.activate(self, marker)
dgn.register_listener(dgn.dgn_event_type("v_leave_level"),
marker, marker:pos())
end
function TollStair:check_veto(marker, pname)
-- Have we enough gold?
local gold = you.gold()
local needed = self.props.amount
if gold < needed then
crawl.mpr("This portal charges " .. needed .. " gold for entry; " ..
"you have only " .. gold .. " gold.")
return "veto"
end
if pname == "veto_stair" then
-- Ok, ask if the player wants to spend the $$$.
if not crawl.yesno("This portal charges " .. needed ..
" gold for entry. Pay?", true, "n") then
return "veto"
end
elseif pname == "veto_level_change" then
-- Gold gold gold! Forget that gold!
you.gold(you.gold() - needed)
local toll_desc
if self.props.toll_desc then
toll_desc = self.props.toll_desc
else
toll_desc = "at " .. crawl.article_a(self.props.desc)
end
crawl.take_note("You paid a toll of " .. needed .. " gold " ..
toll_desc .. ".")
return
end
end
function TollStair:property(marker, pname)
if pname == 'veto_stair' or pname == 'veto_level_change' then
return self:check_veto(marker, pname)
end
if pname == 'feature_description_long' then
return self:feature_description_long(marker)
end
return self.super.property(self, marker, pname)
end
function TollStair:feature_description_long(marker)
local desc = self:unmangle(self.props.desc_long)
if desc then
desc = desc .. "\n\n"
else
desc = ""
end
return desc .. "The portal charges " .. self.props.amount .. " for entry.\n"
end
function TollStair:read(marker, th)
TollStair.super.read(self, marker, th)
setmetatable(self, TollStair)
return self
end
function toll_stair(pars)
return TollStair:new(pars)
end
|