-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathphysics.lua
More file actions
218 lines (209 loc) · 6.55 KB
/
Copy pathphysics.lua
File metadata and controls
218 lines (209 loc) · 6.55 KB
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
minetest.register_privilege('physics', {
description = 'Can set any players physics values.',
})
----------------------------------
-- General physics manipulators --
----------------------------------
minetest.register_chatcommand('speed', {
params = '<number> [player]',
description = 'Sets player\'s speed multiplier.',
privs = {physics = true},
func = function(name, params)
local value, p_name = params:match('^(%S+)%s+(.+)')
if not p_name then
value = params:match('^(%S+)')
p_name = name
end
value = tonumber(value)
if not value then
return false, 'Invalid parameters (see /help speed).'
elseif value < 0 then
return false, 'Cannot set speed below zero. Just turn around.'
elseif value > 4 then
return false, 'Cannot set speed greater than 4.'
end
local player = minetest.env:get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({speed = value})
if name ~= p_name then
minetest.chat_send_player(p_name,
'Your speed multiplier has been set to '..tostring(value)..'.')
end
return true, p_name..'\'s speed multiplier set to '..tostring(value)
end,
})
minetest.register_chatcommand('gravity', {
params = '<number> [player]',
description = 'Sets player\'s gravity multiplier.',
privs = {physics = true},
func = function(name, params)
local value, p_name = params:match('^(%S+)%s+(.+)')
if not p_name then
value = params:match('^(%S+)')
p_name = name
end
value = tonumber(value)
if not value then
return false, 'Invalid parameters (see /help gravity).'
elseif value < 0 then
return false, 'Anti-gravity does not exist.'
elseif value < 0.01 then
return false, 'micro-gravity is dangerous. You might jump off the planet.'
elseif value > 10 then
return false, 'Setting gravity greater than 10 will crush you.'
end
local player = minetest.env:get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({gravity = value})
if name ~= p_name then
minetest.chat_send_player(p_name,
'Your gravity multiplier has been set to '..tostring(value)..'.')
end
return true, p_name..'\'s gravity multiplier set to '..tostring(value)
end,
})
minetest.register_chatcommand('jump', {
params = '<number> [player]',
description = 'Sets player\'s jump height multiplier.',
privs = {physics = true},
func = function(name, params)
local value, p_name = params:match('^(%S+)%s+(.+)')
if not p_name then
value = params:match('^(%S+)')
p_name = name
end
value = tonumber(value)
if not value then
return false, 'Invalid parameters (see /help jump).'
elseif value < 0 then
return false, 'That is not called jumping.'
elseif value > 10 then
return false, 'Cannot set jump greater than 10.'
end
local player = minetest.env:get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({jump = value})
if name ~= p_name then
minetest.chat_send_player(p_name,
'Your jump multiplier has been set to '..tostring(value)..'.')
end
return true, p_name..'\'s jump multiplier set to '..tostring(value)
end,
})
minetest.register_chatcommand('normal', {
params = '[player]',
description = 'Sets a players physics overrides to normal values.',
privs = {interact = true},
func = function(name, p_name)
if p_name == '' or p_name == nil then
p_name = name
elseif not minetest.check_player_privs(name, {physics=true}) then
return false, 'You need the physics privilege to do this.'
end
local player = minetest.get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({speed = 1, gravity = 1, jump = 1})
if name ~= p_name then
minetest.chat_send_player(p_name, 'Your physics are back to normal.')
end
return true, p_name..'\'s physics set to normal.'
end,
})
---------------------------------------
-- Special Case Physics Manipulators --
---------------------------------------
--[[ Temporarily disabled
-- Freeze
local freeze = {
hp_max = 1,
groups = {immortal = 1},
physical = true,
collide_with_objects = true,
weight = 5,
collisionbox = {-0.5, -0.5, -0.5, 0.5, 1.5, 0.5},
visual = 'mesh',
mesh = 'boats_boat.obj',
textures = {'default_diamond_block.png'},
is_visible = true,
automatic_rotate = false,
automatic_face_movement_dir = false
}
minetest.register_entity('fozland:freeze', freeze)
minetest.register_chatcommand('freeze', {
params = '[player]',
description = 'Freezes player in place.',
privs = {physics = true},
func = function(name, p_name)
if p_name == '' or p_name == nil then
p_name = name
end
local player = minetest.get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({speed = 0})
local pos = player:getpos()
local freeze = minetest.add_entity(pos, 'fozland:freeze')
player:set_attach(freeze, '',
{x = 0, y = 11, z = -3}, {x = 0, y = 0, z = 0})
minetest.after(2, function()
player:set_detach()
end)
if name ~= p_name then
minetest.chat_send_player(p_name, 'You have been frozen.')
end
return true, p_name..' has been frozen.'
end,
})
--]]
-- Moonboots
minetest.register_chatcommand('mb', {
params = '[player]',
description = 'Set a players gravity to a moon like value.',
privs = {interact = true},
func = function(name, p_name)
if p_name == '' or p_name == nil then
p_name = name
elseif not minetest.check_player_privs(name, {physics=true}) then
return false, 'You need the physics privilege to give a player moon boots.'
end
local player = minetest.get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({gravity = 0.165})
if name ~= p_name then
minetest.chat_send_player(p_name,
'You have been given Moon Boots. Use them Wisely')
end
return true, p_name..' now has Moon Boots.'
end,
})
-- Mario
minetest.register_chatcommand('mario', {
params = '[player]',
description = 'Increase a players jump ability.',
privs = {physics = true},
func = function(name, p_name)
if p_name == '' or p_name == nil then
p_name = name
end
local player = minetest.get_player_by_name(p_name)
if not player then
return false, 'Player '..p_name..' is not online!'
end
player:set_physics_override({jump = 1.7})
if name ~= p_name then
minetest.chat_send_player(p_name, 'You can now jump like Mario.')
end
return true, p_name..' has been marioed.'
end,
})