-
Notifications
You must be signed in to change notification settings - Fork 15
/
Experience_Bar_Telnet.xml
167 lines (129 loc) · 3.81 KB
/
Experience_Bar_Telnet.xml
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE muclient>
<muclient>
<plugin
name="Experience_Bar_Telnet"
author="Nick Gammon"
id="81ea2275b48f841799d27e87"
language="Lua"
purpose="Shows XP to level"
date_written="2010-02-17"
requires="4.40"
version="2.0"
>
<description trim="y">
<![CDATA[
Install this plugin to show an how close you are to levelling.
]]>
</description>
</plugin>
<!-- Script -->
<script>
<![CDATA[
win = GetPluginID () -- get a unique name
-- configuration
GAUGE_HEIGHT = 11
NUMBER_OF_TICKS = 19 -- (ie. 20 bars)
BACKGROUND_COLOUR = 0x808080
BOX_COLOUR = ColourNameToRGB "dodgerblue"
require "gauge"
-- draw the bar here, on getting the status info, or window resize
function draw_bar ()
if not pct_xp then
-- check numbers for validity
if not cur_xp or
not max_xp or
cur_xp < 0 or
max_xp <= 0 then
return
end -- if
-- cannot have more than max xp
if cur_xp > max_xp then
cur_xp = max_xp
end -- if
end -- not percentage
-- width is window width minus 2
local gauge_width = GetInfo (281) - 2 -- GetInfo (281) = Output window client width
-- make room for the bar
local bottom_margin = GetInfo (275) -- = Text rectangle - bottom
-- adjust text rectangle, keeping existing settings where possible
if bottom_margin == 0 or
(bottom_margin < 0 and math.abs (bottom_margin) < (GAUGE_HEIGHT + 2)) then
TextRectangle(GetInfo (272), GetInfo (273), -- left, top
GetInfo (274), -- right
- (GAUGE_HEIGHT + 2), -- bottom (gauge height plus 2 more)
GetInfo (276), GetInfo (282) or 0, GetInfo (277), -- BorderOffset, BorderColour, BorderWidth
GetInfo (278), GetInfo (279)) -- OutsideFillColour, OutsideFillStyle
end -- if
-- make the miniwindow
WindowCreate (win,
0, 0, -- left, top (auto-positions)
gauge_width, -- width
GAUGE_HEIGHT, -- height
10, -- auto-position: bottom left
0, -- flags
BACKGROUND_COLOUR)
local cur, max = cur_xp, max_xp
if pct_xp then
cur = pct_xp
max = nil
end -- if percentage given
gauge (win, "XP", cur, max,
0, 0, gauge_width, GAUGE_HEIGHT,
BOX_COLOUR, BACKGROUND_COLOUR,
NUMBER_OF_TICKS)
-- ensure window visible
WindowShow (win, true)
end -- draw_bar
function OnPluginTelnetOption (option)
local t = {} -- incoming server variables will go into table t
setfenv (assert (loadstring (option)), t) () -- compile and load into t
if not t.group then
return
end -- nothing about groups here
local me
for k, v in ipairs (t.group) do
if v.me then
me = v
table.remove (t.group, k)
break
end -- if found myself
end -- for
-- hopefully found myself
if not me then
return
end -- if
-- update the bar if we received updated xp
if me.xp then
-- if current or max changes, save it
cur_xp = me.xp.cur or cur_xp
max_xp = me.xp.max or max_xp
pct_xp = me.xp.pct or pct_xp
draw_bar ()
end -- if
end -- function OnPluginTelnetOption
function OnPluginTelnetRequest (type, data)
if type == 102 and data == "WILL" then
return true
end -- if
end -- function OnPluginTelnetRequest
function OnPluginWorldOutputResized ()
draw_bar ()
end -- function
-- hide window on removal
function OnPluginClose ()
WindowShow (win, false) -- hide it
end -- OnPluginClose
-- hide window on disable
function OnPluginDisable ()
WindowShow (win, false) -- hide it
end -- OnPluginDisable
-- show window on enable
function OnPluginEnable ()
if (cur_xp and max_xp) or pct_xp then
WindowShow (win, true) -- show it
end -- if
end -- OnPluginEnable
]]>
</script>
</muclient>