Cleanup settings, disable examples by default
[minetest_playereffects.git] / examples.lua
blob0a510d8d3867a5922de67a30904e94a2c3c4184e
1 ----- EXAMPLE EFFECT TYPES -----
2 --[[ This is just a helper function to inform the user of the chat command
3 of the result and, if successful, shows the effect ID. ]]
4 local function notify(name, retcode)
5 if(retcode == false) then
6 minetest.chat_send_player(name, "Effect application failed. Effect was NOT applied.")
7 else
8 minetest.chat_send_player(name, "Effect applied. Effect ID: "..tostring(retcode))
9 end
10 end
12 --[[ Null effect. The apply function always returns false, which means applying the
13 effect will never succeed ]]
14 playereffects.register_effect_type("null", "No effect", nil, {},
15 function()
16 return false
17 end
21 -- Makes the player screen black for 5 seconds (very experimental!)
22 playereffects.register_effect_type("blind", "Blind", nil, {},
23 function(player)
24 local hudid = player:hud_add({
25 hud_elem_type = "image",
26 position = { x=0.5, y=0.5 },
27 scale = { x=-100, y=-100 },
28 text = "playereffects_example_black.png",
30 if(hudid ~= nil) then
31 return { hudid = hudid }
32 else
33 minetest.log("error", "[playereffects] [examples] The effect \"Blind\" could not be applied. The call to hud_add(...) failed.")
34 return false
35 end
36 end,
37 function(effect, player)
38 player:hud_remove(effect.metadata.hudid)
39 end
42 -- Makes the user faster
43 playereffects.register_effect_type("high_speed", "High speed", nil, {"speed"},
44 function(player)
45 player:set_physics_override(4,nil,nil)
46 end,
48 function(effect, player)
49 player:set_physics_override(1,nil,nil)
50 end
53 -- Makes the user faster (hidden effect)
54 playereffects.register_effect_type("high_speed_hidden", "High speed", nil, {"speed"},
55 function(player)
56 player:set_physics_override(4,nil,nil)
57 end,
59 function(effect, player)
60 player:set_physics_override(1,nil,nil)
61 end,
62 true
67 -- Slows the user down
68 playereffects.register_effect_type("low_speed", "Low speed", nil, {"speed"},
69 function(player)
70 player:set_physics_override(0.25,nil,nil)
71 end,
73 function(effect, player)
74 player:set_physics_override(1,nil,nil)
75 end
78 -- Increases the jump height
79 playereffects.register_effect_type("highjump", "Greater jump height", "playereffects_example_highjump.png", {"jump"},
80 function(player)
81 player:set_physics_override(nil,2,nil)
82 end,
83 function(effect, player)
84 player:set_physics_override(nil,1,nil)
85 end
88 -- Adds the “fly” privilege. Keep the privilege even if the player dies
89 playereffects.register_effect_type("fly", "Fly mode available", "playereffects_example_fly.png", {"fly"},
90 function(player)
91 local playername = player:get_player_name()
92 local privs = minetest.get_player_privs(playername)
93 privs.fly = true
94 minetest.set_player_privs(playername, privs)
95 end,
96 function(effect, player)
97 local privs = minetest.get_player_privs(effect.playername)
98 privs.fly = nil
99 minetest.set_player_privs(effect.playername, privs)
100 end,
101 false, -- not hidden
102 false -- do NOT cancel the effect on death
105 -- Dummy effect for the stree test
106 playereffects.register_effect_type("stress", "Stress Test Effect", nil, {},
107 function(player)
108 end,
109 function(effect, player)
114 ------ Chat commands for the example effects ------
115 -- Null effect (never succeeds)
116 minetest.register_chatcommand("null", {
117 params = "",
118 description = "Does nothing.",
119 privs = {},
120 func = function(name, param)
121 local ret = playereffects.apply_effect_type("null", 5, minetest.get_player_by_name(name))
122 notify(name, ret)
123 end,
126 minetest.register_chatcommand("blind", {
127 params = "",
128 description = "Makes your screen black for a short time.",
129 privs = {},
130 func = function(name, param)
131 local ret = playereffects.apply_effect_type("blind", 5, minetest.get_player_by_name(name))
132 notify(name, ret)
133 end,
135 minetest.register_chatcommand("fast", {
136 params = "",
137 description = "Makes you fast for a short time.",
138 privs = {},
139 func = function(name, param)
140 local ret = playereffects.apply_effect_type("high_speed", 10, minetest.get_player_by_name(name))
141 notify(name, ret)
142 end,
144 minetest.register_chatcommand("hfast", {
145 params = "",
146 description = "Makes you fast for a short time (hidden effect).",
147 privs = {},
148 func = function(name, param)
149 local ret = playereffects.apply_effect_type("high_speed_hidden", 10, minetest.get_player_by_name(name))
150 notify(name, ret)
151 end,
153 minetest.register_chatcommand("slow", {
154 params = "",
155 description = "Makes you slow for a long time.",
156 privs = {},
157 func = function(name, param)
158 local ret = playereffects.apply_effect_type("low_speed", 120, minetest.get_player_by_name(name))
159 notify(name, ret)
160 end,
162 minetest.register_chatcommand("highjump", {
163 params = "",
164 description = "Makes you jump higher for a short time.",
165 privs = {},
166 func = function(name, param)
167 local ret = playereffects.apply_effect_type("highjump", 20, minetest.get_player_by_name(name))
168 notify(name, ret)
169 end,
172 minetest.register_chatcommand("fly", {
173 params = "",
174 description = "Grants you the fly privilege for a minute. You keep the effect when you die.",
175 privs = {},
176 func = function(name, param)
177 local ret = playereffects.apply_effect_type("fly", 60, minetest.get_player_by_name(name))
178 notify(name, ret)
179 end,
182 --[[
183 Cancel all active effects
185 minetest.register_chatcommand("cancelall", {
186 params = "",
187 description = "Cancels all your effects.",
188 privs = {},
189 func = function(name, param)
190 local effects = playereffects.get_player_effects(name)
191 for e=1, #effects do
192 playereffects.cancel_effect(effects[e].effect_id)
194 minetest.chat_send_player(name, "All effects cancelled.")
195 end,
198 --[[ The stress test applies a shitload of effects at once.
199 This is used to test the performance of this mod at very large effect numbers. ]]
200 minetest.register_chatcommand("stresstest", {
201 params = "[<effects>]",
202 descriptions = "Start the stress test for Player Effects with <effects> effects.",
203 privs = {server=true},
204 func = function(name, param)
205 local player = minetest.get_player_by_name(name)
206 local max = 100
207 if(type(param)=="string") then
208 if(type(tonumber(param)) == "number") then
209 max = tonumber(param)
212 minetest.debug("[playereffects] Stress test started for "..name.." with "..max.." effects.")
213 for i=1,max do
214 playereffects.apply_effect_type("stress", math.random(6,60), player)
215 if(i%100==0) then
216 minetest.debug("[playereffects] Effect "..i.." of "..max.." applied.")
217 minetest.chat_send_player(name, "[playereffects] Effect "..i.." of "..max.." applied.")