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
|
-- various stuff to make scripters life easier
-- Beware of the scary undefined globals
function safe_getglobal(x)
local v = rawget(globals(), x)
if v then
return v
else
error("undefined global variable '"..x.."'")
end
end
function set_safe_globals()
settagmethod(tag(nil), "getglobal", safe_getglobal)
end
function unset_safe_globals()
settagmethod(tag(nil), "getglobal", nil)
end
set_safe_globals()
-- Patch modules
__patch_modules = {}
function patch_version(name, version)
assert(not __patch_modules[name], "Patch " .. name .. " already loaded!!!")
__patch_modules[name] = version
end
function patchs_list()
local k, e, first
first = FALSE
for k, e in __patch_modules do
if first == FALSE then print_hook("\n\n [Patch modules]\n") first = TRUE end
print_hook("\n "..k.." version "..e)
end
if first == TRUE then print_hook("\n") end
end
function patchs_display()
local k, e
for k, e in __patch_modules do
msg_print("Patch: "..k.." version "..e)
end
end
-- Better hook interface
__hooks_list_callback = {}
__hooks_list_callback_max = 0
function add_hooks(h_table, name_prefix)
local k, e
if not name_prefix then name_prefix = "" end
for k, e in h_table do
add_hook_script(k, "__"..name_prefix.."__hooks_list_callback"..__hooks_list_callback_max, "__"..name_prefix.."__hooks_list_callback"..__hooks_list_callback_max)
setglobal("__"..name_prefix.."__hooks_list_callback"..__hooks_list_callback_max, e)
__hooks_list_callback_max = __hooks_list_callback_max + 1
end
end
-- Wrapper for the real msg_print and cmsg_print
-- it understands if we want color or not
function msg_print(c, m)
if type(c) == "number" then
cmsg_print(c, m)
else
call(%msg_print, { c })
end
end
-- displays a scrolling list
function display_list(y, x, h, w, title, list, begin, sel, sel_color)
local l = create_list(getn(list))
for i = 1, getn(list) do
add_to_list(l, i - 1, list[i])
end
%display_list(y, x, h, w, title, l, getn(list), begin - 1, sel - 1, sel_color)
delete_list(l, getn(list))
end
-- Easier access to special gene stuff
function set_monster_generation(monster, state)
if type(monster) == "string" then
m_allow_special[test_monster_name(monster) + 1] = state
else
m_allow_special[monster + 1] = state
end
end
function set_object_generation(obj, state)
if type(obj) == "string" then
m_allow_special[test_item_name(obj) + 1] = state
else
m_allow_special[obj + 1] = state
end
end
function set_artifact_generation(obj, state)
m_allow_special[obj + 1] = state
end
-- Strings
function strcap(str)
if strlen(str) > 1 then
return strupper(strsub(str, 1, 1))..strsub(str, 2)
elseif strlen(str) == 1 then
return strupper(str)
else
return str
end
end
function msg_format(...)
msg_print(call(format, arg))
end
|