muby 0.6.6
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +339 -0
- data/bin/muby +37 -0
- data/contrib/aardmud.org_4000/README.txt +39 -0
- data/contrib/aardmud.org_4000/aard-config.rb +234 -0
- data/contrib/aardmud.org_4000/aard-helpers.rb +464 -0
- data/contrib/aardmud.org_4000/aliases/aard-aliases.rb +205 -0
- data/contrib/aardmud.org_4000/gags/aard-gags.rb +182 -0
- data/contrib/aardmud.org_4000/misc/aard-affects.rb +252 -0
- data/contrib/aardmud.org_4000/misc/aard-know.rb +147 -0
- data/contrib/aardmud.org_4000/misc/aard-poznai_sebia.rb +191 -0
- data/contrib/aardmud.org_4000/misc/aard-prompts.rb +65 -0
- data/contrib/aardmud.org_4000/misc/aard-status_toggling.rb +156 -0
- data/contrib/aardmud.org_4000/misc/aard_consider_substitutions.rb +319 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-areas-hero.rb +86 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-areas-newbie.rb +98 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-areas-noble.rb +170 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-areas-vidblain.rb +88 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-areas.rb +850 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-clans.rb +43 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw-guilds.rb +13 -0
- data/contrib/aardmud.org_4000/speedwalks/aard-sw.rb +45 -0
- data/contrib/aardmud.org_4000/triggers/aard-triggers-items.rb +254 -0
- data/contrib/aardmud.org_4000/triggers/aard-triggers.rb +227 -0
- data/contrib/sy/cce.rb +120 -0
- data/lib/muby.rb +15 -0
- data/lib/muby/application.rb +66 -0
- data/lib/muby/completer.rb +62 -0
- data/lib/muby/configuration.rb +379 -0
- data/lib/muby/connection.rb +332 -0
- data/lib/muby/displayer.rb +60 -0
- data/lib/muby/help.rb +88 -0
- data/lib/muby/helper_methods.rb +46 -0
- data/lib/muby/inputwindow.rb +173 -0
- data/lib/muby/logger.rb +28 -0
- data/lib/muby/outputwindow.rb +189 -0
- data/lib/muby/style.rb +142 -0
- data/lib/muby/user_methods.rb +463 -0
- metadata +90 -0
@@ -0,0 +1,464 @@
|
|
1
|
+
#
|
2
|
+
# Variable helpers
|
3
|
+
#
|
4
|
+
# This is so that you don't have to constantly put your terms in quotes. So instead of run "n" you do run n.
|
5
|
+
# They could technically be made really smart, to return x or write x .. but even I'm not crazy enough to code that.
|
6
|
+
|
7
|
+
def n ; return "n" end
|
8
|
+
def s ; return "s" end
|
9
|
+
def e ; return "e" end
|
10
|
+
def w ; return "w" end
|
11
|
+
def u ; return "u" end
|
12
|
+
def d ; return "d" end
|
13
|
+
def cast(string) ; write "cast #{string}" end
|
14
|
+
def casting(spell, target)
|
15
|
+
if target == "" then
|
16
|
+
# Strangely, I can't specify "self" because some spells won't allow that parameter.
|
17
|
+
write "cast '#{spell}'"
|
18
|
+
else
|
19
|
+
write "cast '#{spell}' #{target}"
|
20
|
+
end
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
#
|
26
|
+
# Procedure helpers
|
27
|
+
#
|
28
|
+
# These exist, so that your scripting can do things like a person at the keyboard, without you having to use 'write' every time. It's very handy for copying keyboard commands and pasting them into your scripting.
|
29
|
+
# examples: run n;open e;close s;write "echo The server echos this";echo "only you see this"
|
30
|
+
# It's not quite perfect, because you need double-quotes around your text.. but it's good enough.
|
31
|
+
|
32
|
+
# run is housed in speedwalks_common.rb
|
33
|
+
# Remember that you use these like: open "one", "two"
|
34
|
+
# and NOT like: open "one" "two"
|
35
|
+
#
|
36
|
+
# Yes, I am paranoid enough to ensure against everything, even when write does it again. =)
|
37
|
+
# Warning: 'open' is an internal Ruby command. If you want to open files, use: Kernel::open
|
38
|
+
def open(w) ; write "open #{ensure_w(w)}" end
|
39
|
+
def close(w) ; write "close #{ensure_c(w)}" end
|
40
|
+
def lock(w) ; write "lock #{ensure_c(w)}" end
|
41
|
+
def run(s) ; write "run #{ensure_s(s)}" end
|
42
|
+
# def get(s) ; write "get #{ensure_s(s)}" end
|
43
|
+
# I think something is strange with this one..
|
44
|
+
def put(s) ; write "put #{ensure_s(s)}" end
|
45
|
+
def get(s) ; write "get #{ensure_s(s)}" end
|
46
|
+
def take(s) ; write "take #{ensure_s(s)}" end
|
47
|
+
def buy(s) ; write "buy #{ensure_s(s)}" end
|
48
|
+
def say(s) ; write "say #{ensure_s(s)}" end
|
49
|
+
# Is this another magical Ruby keyword?
|
50
|
+
def scan(s) ; write "scan #{ensure_s(s)}" end
|
51
|
+
|
52
|
+
# Warning: 'enter' is reserved by Ruby. If you want to 'enter', use: Kernel::enter
|
53
|
+
# TODO: This needs testing.
|
54
|
+
def enter(*s)
|
55
|
+
s = ensure_s(s)
|
56
|
+
if s == "" then
|
57
|
+
write "enter"
|
58
|
+
else
|
59
|
+
write "enter '#{s}'"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Aardwolf requires single quotes around multiple-word objects.
|
64
|
+
def wear(s) ; write "wear '#{ensure_s(s)}'" end
|
65
|
+
# This might be bugged somehow:
|
66
|
+
def remove(s); write "remove '#{ensure_s(s)}'" end
|
67
|
+
def wield(s) ; write "wield '#{ensure_s(s)}'" end
|
68
|
+
def hold(s) ; write "hold '#{ensure_s(s)}'" end
|
69
|
+
def keep(s) ; write "keep '#{ensure_s(s)}'" end
|
70
|
+
def unkeep(s); write "unkeep '#{ensure_s(s)}'" end
|
71
|
+
def quaff(s) ; write "quaff '#{ensure_s(s)}'" end
|
72
|
+
def dual(s)
|
73
|
+
s = ensure_s(s)
|
74
|
+
if s == "remove" then
|
75
|
+
write "dual remove"
|
76
|
+
else
|
77
|
+
write "dual '#{s}'"
|
78
|
+
# should really only set dual on success
|
79
|
+
$dual = s
|
80
|
+
end
|
81
|
+
end
|
82
|
+
def wield(s)
|
83
|
+
s = ensure_s(s)
|
84
|
+
if s == "remove" then
|
85
|
+
write "wield remove"
|
86
|
+
else
|
87
|
+
write "wield '#{s}'"
|
88
|
+
# should really only set wield on success
|
89
|
+
$wield = s
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def getfrom(s, s2) ; get "'#{ensure_s(s)}' '#{ensure_s(s2)}'" end
|
94
|
+
def putin(s, s2) ; put "'#{ensure_s(s)}' '#{ensure_s(s2)}'" end
|
95
|
+
|
96
|
+
# with the bag:
|
97
|
+
def getbag(s); get "'#{ensure_s(s)}' '#{$bag}'" end
|
98
|
+
def putbag(s); put "'#{ensure_s(s)}' '#{$bag}'" end
|
99
|
+
def removebag(s); remove s ; putbag s end
|
100
|
+
def retire(s) ; removebag(s) end
|
101
|
+
def removebag_unkeep(s); remove s ; unkeep s ; putbag s end
|
102
|
+
def retire_unkeep(s) ; removebag_unkeep(s) end
|
103
|
+
def getwear(s) ; getbag s ; wear s end
|
104
|
+
def getwear_keep(s) ; getbag s ; keep s ; wear s end
|
105
|
+
def getdual(s) ; getbag s ; dual s end
|
106
|
+
def getdual_keep(s) ; getbag s ; keep s ; dual s end
|
107
|
+
def getquaff(s) ; getbag s ; quaff s end
|
108
|
+
def geteat(s) ; getbag s ; eat s end
|
109
|
+
|
110
|
+
# TODO: This has to be smarter..
|
111
|
+
# check for (item)
|
112
|
+
# Check for #, (item)
|
113
|
+
# check for #, (item name)
|
114
|
+
# def buyput(s, s2) ; write "buy #{s} '#{s2}' ; put all.#{s2} '#{$bag}'" end
|
115
|
+
# buy, then stuff things in the bag
|
116
|
+
# This can't deal with: pocket 10, "jade elixir"
|
117
|
+
conf.local_triggers[/^pocket (.*)$/] = Proc.new do |inwin, outwin, match| pocket match[1..-1].to_s.split("\"") ; false end
|
118
|
+
def pocket_alias(s)
|
119
|
+
# write s.inspect + "--"
|
120
|
+
# write s[0].inspect + "0"
|
121
|
+
# write s[1].inspect + "1"
|
122
|
+
write "buy #{s[0].strip} #{s[1]};put all.#{s[1]} '#{$bag}'"
|
123
|
+
end
|
124
|
+
def pocket(s, s2)
|
125
|
+
write "buy #{s} #{s2};put all.#{s2} '#{$bag}'"
|
126
|
+
end
|
127
|
+
|
128
|
+
# When writing out to the server, split separate commands with a semi-colon.
|
129
|
+
# This lets you do things like: write "run e;open d;d;cough"
|
130
|
+
# This has been fixed to work in all circumstances.. from methods, from methods called by triggers/aliases, from the commandline..
|
131
|
+
def write(string)
|
132
|
+
# Another method:
|
133
|
+
# def method_one
|
134
|
+
# string = ensure_s(string)
|
135
|
+
# # Split across any semi-colons.
|
136
|
+
# string = string.split(';')
|
137
|
+
# # Run through it, executing each command separately.
|
138
|
+
# string.each_index { |i|
|
139
|
+
# # Good for debugging. Then you don't have to connect to anything to try most stuff out.
|
140
|
+
# # Muby::InputWindow.get_instance.pprint string[i].lstrip + "\n"
|
141
|
+
# Muby::InputWindow.get_instance.send string[i].lstrip
|
142
|
+
# }
|
143
|
+
# false
|
144
|
+
# end
|
145
|
+
# Also, a generic search/replace of ; for \n would work.
|
146
|
+
|
147
|
+
# Leveraging muby's local substitution powers, I can do it this way:
|
148
|
+
string = ensure_s(string)
|
149
|
+
conf.local_substitutions[';'] = "\n"
|
150
|
+
Muby::InputWindow.get_instance.send string
|
151
|
+
conf.local_substitutions.delete ';'
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
#
|
156
|
+
# Internal helpers
|
157
|
+
#
|
158
|
+
|
159
|
+
# Ensure that a string is given.
|
160
|
+
def ensure_s(input)
|
161
|
+
# TODO: Technically, I should check the type of whatever I'm being sent, and ensure that it's possible to convert it to a string.
|
162
|
+
string = input.to_s.lstrip
|
163
|
+
# This does not detect or respect numbers. It returns them as type String.
|
164
|
+
return string
|
165
|
+
end
|
166
|
+
|
167
|
+
# Ensure that a word is given.
|
168
|
+
# These helpers can probably be done more intelligently.
|
169
|
+
def ensure_w(input)
|
170
|
+
string = ensure_s input
|
171
|
+
if string.split(' ')[1] != nil then
|
172
|
+
pprint "Warning: You should only send one word."
|
173
|
+
word = string.split(' ')[0]
|
174
|
+
else
|
175
|
+
word = string
|
176
|
+
end
|
177
|
+
return word
|
178
|
+
end
|
179
|
+
|
180
|
+
# Ensure that a character is given.
|
181
|
+
def ensure_c(input)
|
182
|
+
word = ensure_w(input)
|
183
|
+
if word.length > 1 then
|
184
|
+
pprint "Warning: You should only send one character."
|
185
|
+
end
|
186
|
+
character = word
|
187
|
+
# This does not detect or respect a number. It returns it as type String.
|
188
|
+
return character
|
189
|
+
end
|
190
|
+
|
191
|
+
# Ensure that a character is given.
|
192
|
+
def ensure_n(input)
|
193
|
+
if input.class != Fixnum then
|
194
|
+
pprint "Warning: You should only send a number."
|
195
|
+
# FIXME: This should rescue errors and react accordingly.
|
196
|
+
number = input.to_i
|
197
|
+
end
|
198
|
+
number = input
|
199
|
+
return number
|
200
|
+
end
|
201
|
+
|
202
|
+
# Ensure that a boolean value (true/false) is given.
|
203
|
+
def ensure_b(input)
|
204
|
+
if input.class != TrueClass && input.class != FalseClass then
|
205
|
+
pprint "Warning: You should only send a boolean value (true/false). Returning false."
|
206
|
+
return false
|
207
|
+
end
|
208
|
+
boolean = input
|
209
|
+
return boolean
|
210
|
+
end
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
# Generate a random number from a range of integers.
|
215
|
+
#example:
|
216
|
+
#random(6 .. 10)
|
217
|
+
#=> an integer from 6, 7, 8, 9, 10
|
218
|
+
def random(r)
|
219
|
+
# assume r is a range of integers first < last
|
220
|
+
r.first + rand(r.last - r.first + (r.exclude_end? ? 0 : 1))
|
221
|
+
end
|
222
|
+
|
223
|
+
# Random float:
|
224
|
+
# TODO one day I could detect additional decimal places and deal with them.. but not today.
|
225
|
+
# example:
|
226
|
+
# random_f(1.0..2.2)
|
227
|
+
# => a float: 1.0, 1.1, 1.2 .. 2.0, 2.1, 2.2
|
228
|
+
def random_f(r)
|
229
|
+
big = random((r.first * 10)..(r.last * 10))
|
230
|
+
big / 10.0
|
231
|
+
end
|
232
|
+
|
233
|
+
def prompt_routines
|
234
|
+
$afk = 0
|
235
|
+
ungag_blocks
|
236
|
+
ungag_prompts
|
237
|
+
undisable_gags_blocks
|
238
|
+
undisable_triggers_blocks
|
239
|
+
end
|
240
|
+
|
241
|
+
# This is wrapped into something reusable, so that I can easily re-enable it when I do trigger-disabling.
|
242
|
+
def prompt_triggers_setup
|
243
|
+
# Whenever you see the prompt, perform the appropriate routines:
|
244
|
+
conf.remote_triggers[$prompt1] = :prompt_routines
|
245
|
+
conf.remote_triggers[$bprompt1] = :prompt_routines
|
246
|
+
end
|
247
|
+
prompt_triggers_setup
|
248
|
+
|
249
|
+
|
250
|
+
# I like doing it this way.. it seems to work out fairly well.
|
251
|
+
def pprint(s)
|
252
|
+
Muby::InputWindow.get_instance.print(s.to_s + "\n").to_s
|
253
|
+
end
|
254
|
+
|
255
|
+
def _reload
|
256
|
+
afk 0
|
257
|
+
wake
|
258
|
+
# I don't do 'invis 0' because I sometimes hang out in an aggro room and do scripting-work.. and I don't want to become visible and get into fights.. especially when half the client might not work. =)
|
259
|
+
autotick 0
|
260
|
+
# Avoid disconnections:
|
261
|
+
Thread.new do
|
262
|
+
sleep 1
|
263
|
+
score
|
264
|
+
sleep 1
|
265
|
+
_affects_build_array("spellup")
|
266
|
+
end
|
267
|
+
end
|
268
|
+
|
269
|
+
def _startup
|
270
|
+
afk 0
|
271
|
+
wake
|
272
|
+
invis 0
|
273
|
+
autotick 0
|
274
|
+
p
|
275
|
+
end
|
276
|
+
|
277
|
+
|
278
|
+
def connection_triggers
|
279
|
+
conf.remote_triggers[/^Last on from|^Reconnecting\.\.\.\.$/] = Proc.new do
|
280
|
+
_startup
|
281
|
+
_reload
|
282
|
+
conf.remote_triggers.delete(/^Last on from|^Reconnecting\.\.\.\.$/)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
|
286
|
+
def login_triggers(type)
|
287
|
+
@name = eval('$' + 'character_name' + type)
|
288
|
+
@pass = eval('$' + 'character_password' + type)
|
289
|
+
if @name == nil || @pass == nil then return nil end
|
290
|
+
conf.remote_triggers[/#############################################################################/] = Proc.new do
|
291
|
+
write "#{@name};#{@pass};y"
|
292
|
+
conf.remote_triggers.delete(/#############################################################################/)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
def rc
|
297
|
+
# No compression:
|
298
|
+
# TODO: This will eventually change to aardwolf.com
|
299
|
+
# After playing for a bit, you should switch to port 4010
|
300
|
+
connection_triggers
|
301
|
+
login_triggers("")
|
302
|
+
connect "aardmud.org", 4000
|
303
|
+
end
|
304
|
+
def rcc
|
305
|
+
# Compression via MudProxy.
|
306
|
+
# connect "127.0.0.1", 9009
|
307
|
+
connection_triggers
|
308
|
+
login_triggers("")
|
309
|
+
connect "localhost", 9009
|
310
|
+
end
|
311
|
+
# Tester's Port.
|
312
|
+
# See also 'help tester', 'who tester'
|
313
|
+
def rct
|
314
|
+
connection_triggers
|
315
|
+
login_triggers("_tester")
|
316
|
+
connect "builder.aardmud.org", 6555
|
317
|
+
end
|
318
|
+
# Builder's Port
|
319
|
+
# See also 'help builder'
|
320
|
+
def rcb
|
321
|
+
connection_triggers
|
322
|
+
login_triggers("_builder")
|
323
|
+
connect "build.aardmud.org", 6000
|
324
|
+
end
|
325
|
+
|
326
|
+
# Repeat an action
|
327
|
+
# example:
|
328
|
+
# repeat("echo hi!", 3)
|
329
|
+
# TODO: Allow a method to be passed.
|
330
|
+
$repeat = {}
|
331
|
+
def repeat(action, times, echo)
|
332
|
+
@echo = ensure_b(echo)
|
333
|
+
# pprint action.inspect
|
334
|
+
@action = ensure_s(action)
|
335
|
+
# If sent nothing, do nothing.
|
336
|
+
if @action == "" then return nil end
|
337
|
+
times = ensure_n(times)
|
338
|
+
# Throw this data into a hash, so that multiple uses of repeat will accumulate.. and the counting will work well..
|
339
|
+
if $repeat[@action] == nil then
|
340
|
+
$repeat[@action] = times
|
341
|
+
else
|
342
|
+
$repeat[@action] = $repeat[@action] + times
|
343
|
+
end
|
344
|
+
# Wrap it in a thread so you can do other stuff.
|
345
|
+
Thread.new do
|
346
|
+
until $repeat[@action] < 1
|
347
|
+
# This is imperfect, since echo seems to bypass the action queue sometimes..
|
348
|
+
# Be more friendly, and don't spam and possibly get disconnected:
|
349
|
+
# TODO: Don't sleep on the very first action.. doesn't work.
|
350
|
+
# if $repeat[@action] != times then sleep random_f(0.6..1.8) end
|
351
|
+
sleep random_f(0.6..1.8)
|
352
|
+
if $repeat[action] > 0 then
|
353
|
+
if @echo == true then write "echo @w #{$repeat[@action]} - #{@action}" end
|
354
|
+
write @action
|
355
|
+
$repeat[@action] -= 1
|
356
|
+
end
|
357
|
+
end
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
def highlight(string)
|
362
|
+
string = ensure_s(string)
|
363
|
+
conf.gags << string
|
364
|
+
# This destroys the colour attributes of the entire line:
|
365
|
+
conf.remote_triggers[/(.*)#{string}(.*)/] = Proc.new do |inwin, outwin, match|
|
366
|
+
# Muby::Style.new(0, Ncurses.const_get("COLOR_RED"), :copy, true)
|
367
|
+
# /pprint RED, "red"
|
368
|
+
# /pprint Muby::Style.new(0, Ncurses.const_get("COLOR_RED"), :copy, true), "red"
|
369
|
+
# But I can't get it to work down here! :
|
370
|
+
# Ugly non-coloured "highlighting":
|
371
|
+
pprint " > #{match[1]} #{string} #{match[2]}"
|
372
|
+
end
|
373
|
+
end
|
374
|
+
def unhighlight(string)
|
375
|
+
string = ensure_s(string)
|
376
|
+
conf.gags.delete(string)
|
377
|
+
conf.remote_triggers.delete(/(.*)#{string}(.*)/)
|
378
|
+
end
|
379
|
+
|
380
|
+
# Use it like this:
|
381
|
+
# Singular:
|
382
|
+
# n = 1
|
383
|
+
# pprint "you have #{n} item#{plural(n)}."
|
384
|
+
# Plural:
|
385
|
+
# n = 0
|
386
|
+
# pprint "you have #{n} item#{plural(n)}."
|
387
|
+
# n = 10
|
388
|
+
# pprint "you have #{n} item#{plural(n)}."
|
389
|
+
# IDEA: This could be made much smarter, if I passed the appropriate word to use..
|
390
|
+
def plural(n)
|
391
|
+
if n > 1 || n == 0 then "s" end
|
392
|
+
end
|
393
|
+
|
394
|
+
|
395
|
+
# It just makes life easier..
|
396
|
+
def dagger ; "dagger" end
|
397
|
+
def axe ; "axe" end
|
398
|
+
def sword ; "sword" end
|
399
|
+
def whip ; "whip" end
|
400
|
+
def spear ; "spear" end
|
401
|
+
def halberd ; "halberd" end
|
402
|
+
def mace ; "mace" end
|
403
|
+
|
404
|
+
__END__
|
405
|
+
|
406
|
+
$cwd = ENV['HOME']
|
407
|
+
conf.local_triggers[/^!(.*)/] = Proc.new do |inwin, outwin, match| shell match[1..-1] ; false end
|
408
|
+
|
409
|
+
# TODO: Add globbing functionality.
|
410
|
+
def shell(*input)
|
411
|
+
input = input.to_s.split(' ')
|
412
|
+
input[0] = input[0]
|
413
|
+
# input[0] = input[0][1..-1]
|
414
|
+
command = input[0]
|
415
|
+
parameters = input[1..-1].join(' ')
|
416
|
+
|
417
|
+
case command
|
418
|
+
when "cd"
|
419
|
+
if input[1] != nil then
|
420
|
+
old_cwd = $cwd
|
421
|
+
$cwd = input[1]
|
422
|
+
begin
|
423
|
+
# Allows * in directory names.
|
424
|
+
Dir.chdir(Dir.glob($cwd).join(' '))
|
425
|
+
$cwd = Dir.getwd
|
426
|
+
# Example on my computer:
|
427
|
+
# Errno::ENOENT: No such file or directory - nothing
|
428
|
+
rescue SystemCallError
|
429
|
+
pprint "No such directory - " + input[1]
|
430
|
+
$cwd = old_cwd
|
431
|
+
Dir.chdir($cwd)
|
432
|
+
end
|
433
|
+
else
|
434
|
+
$cwd = ENV['HOME']
|
435
|
+
Dir.chdir($cwd)
|
436
|
+
$cwd = Dir.getwd
|
437
|
+
end
|
438
|
+
else
|
439
|
+
Dir.chdir($cwd)
|
440
|
+
# This looks good, but feels dangerous. =)
|
441
|
+
Thread.new do
|
442
|
+
pprint `#{input.join(' ')}`
|
443
|
+
end
|
444
|
+
end
|
445
|
+
pprint $cwd + " >"
|
446
|
+
end
|
447
|
+
|
448
|
+
|
449
|
+
# Why doesn't any of this work anymore?! =(
|
450
|
+
pprint (defined? $loaded).inspect
|
451
|
+
if (defined? $loaded) != "global-variable" then
|
452
|
+
# muby has just been started.
|
453
|
+
$loaded = true
|
454
|
+
pprint "Loaded user files."
|
455
|
+
$startup = true
|
456
|
+
_startup
|
457
|
+
_reload
|
458
|
+
else
|
459
|
+
# muby is already running, and this script is being summoned.
|
460
|
+
# Actions to perform after using /reload .. this ought to reset all self-awareness.
|
461
|
+
pprint "Re-loaded user files."
|
462
|
+
$startup = true
|
463
|
+
_startup
|
464
|
+
end
|