initial commit
This commit is contained in:
parent
115ede968f
commit
678ea87f42
1
depends.txt
Normal file
1
depends.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
farming, wool
|
135
init.lua
Normal file
135
init.lua
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
local bandagers = {}
|
||||||
|
local HEAL_TIME = 6
|
||||||
|
local HEAL_AMOUNT = 4
|
||||||
|
local HEAL_MAX = 10
|
||||||
|
|
||||||
|
function bandage(bandager, player)
|
||||||
|
if not bandager or not player then return end
|
||||||
|
local bandagerName = bandager:get_player_name()
|
||||||
|
local playerName = player:get_player_name()
|
||||||
|
if not bandagerName or not playerName then return end
|
||||||
|
if bandagers[bandagerName] then
|
||||||
|
--cancel bandaging if either of them move, or the bandager changes slot, drops bandage, or stops holding down LMB
|
||||||
|
if vector.distance(bandagers[bandagerName].bandagerpos, bandager:get_pos()) > .1 then
|
||||||
|
minetest.chat_send_player(bandagerName, "You moved, bandaging canceled.")
|
||||||
|
if bandagerName ~= playerName then
|
||||||
|
minetest.chat_send_player(playerName, bandagerName.." moved, bandaging canceled.")
|
||||||
|
end
|
||||||
|
bandagers[bandagerName] = nil
|
||||||
|
return
|
||||||
|
elseif vector.distance(bandagers[bandagerName].playerpos, player:get_pos()) > .1 then
|
||||||
|
minetest.chat_send_player(bandagerName, playerName.." moved, bandaging canceled.")
|
||||||
|
minetest.chat_send_player(playerName, "You moved, bandaging canceled.")
|
||||||
|
bandagers[bandagerName] = nil
|
||||||
|
return
|
||||||
|
elseif not minetest.check_player_privs(bandager, {interact=true}) or not bandager:get_player_control().LMB or bandagers[bandagerName].index ~= bandager:get_wield_index() or bandager:get_wielded_item():get_name() ~= "bandage:bandage" then
|
||||||
|
minetest.chat_send_player(bandagerName, "You stopped bandaging.")
|
||||||
|
if bandagerName ~= playerName then
|
||||||
|
minetest.chat_send_player(playerName, bandagerName.." stopped bandaging.")
|
||||||
|
end
|
||||||
|
bandagers[bandagerName] = nil
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if player:get_hp() > HEAL_MAX and not (knockout and knockout.downedplayers and knockout.downedplayers[playerName] == true) then
|
||||||
|
if bandagerName == playerName then
|
||||||
|
minetest.chat_send_player(bandagerName, "You are above max bandaging health.")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(bandagerName, playerName.." is above max bandaging health.")
|
||||||
|
end
|
||||||
|
bandagers[bandagerName] = nil
|
||||||
|
return
|
||||||
|
end
|
||||||
|
--finish bandaging
|
||||||
|
if (os.time() - bandagers[bandagerName].time) > HEAL_TIME then
|
||||||
|
local inv = bandager:get_inventory()
|
||||||
|
local list = bandager:get_wield_list()
|
||||||
|
local stack = inv:get_stack(list, bandagers[bandagerName].index)
|
||||||
|
stack:take_item()
|
||||||
|
inv:set_stack(list, bandagers[bandagerName].index, stack)
|
||||||
|
minetest.sound_play("bandagefinish", {
|
||||||
|
pos = bandagers[bandagerName].bandagerpos,
|
||||||
|
max_hear_distance = 10,
|
||||||
|
gain = 1.0,
|
||||||
|
object = bandager
|
||||||
|
})
|
||||||
|
local hp = player:get_hp()
|
||||||
|
--knockout revive support
|
||||||
|
if knockout and knockout.downedplayers and knockout.downedplayers[playerName] == true then
|
||||||
|
player:set_hp(HEAL_AMOUNT)
|
||||||
|
knockout.downedplayers[playerName] = nil
|
||||||
|
knockout.savedownedplayers()
|
||||||
|
knockout.wake_up(playerName)
|
||||||
|
else
|
||||||
|
if (hp + HEAL_AMOUNT) >= HEAL_MAX then
|
||||||
|
player:set_hp(HEAL_MAX)
|
||||||
|
else
|
||||||
|
player:set_hp(hp + HEAL_AMOUNT)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if bandagerName == playerName then
|
||||||
|
minetest.chat_send_player(bandagerName, "You bandaged yourself.")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(bandagerName, "You bandaged "..playerName..".")
|
||||||
|
minetest.chat_send_player(playerName, bandagerName.." bandaged you.")
|
||||||
|
end
|
||||||
|
bandagers[bandagerName] = nil
|
||||||
|
return
|
||||||
|
else
|
||||||
|
minetest.after(1, bandage, bandager, player)
|
||||||
|
end
|
||||||
|
else --start bandaging
|
||||||
|
if player:get_hp() > HEAL_MAX and not (knockout and knockout.downedplayers and knockout.downedplayers[playerName] == true) then
|
||||||
|
if bandagerName == playerName then
|
||||||
|
minetest.chat_send_player(bandagerName, "You are above max bandaging health.")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(bandagerName, playerName.." is above max bandaging health.")
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
bandagers[bandagerName] = {}
|
||||||
|
bandagers[bandagerName].bandagerpos = bandager:get_pos()
|
||||||
|
bandagers[bandagerName].playerpos = player:get_pos()
|
||||||
|
bandagers[bandagerName].time = os.time()
|
||||||
|
bandagers[bandagerName].index = bandager:get_wield_index()
|
||||||
|
minetest.sound_play("bandagestart", {
|
||||||
|
pos = bandagers[bandagerName].bandagerpos,
|
||||||
|
max_hear_distance = 10,
|
||||||
|
gain = 1.0,
|
||||||
|
object = bandager
|
||||||
|
})
|
||||||
|
if bandagerName == playerName then
|
||||||
|
minetest.chat_send_player(bandagerName, "You have started bandaging yourself, move to cancel.")
|
||||||
|
else
|
||||||
|
minetest.chat_send_player(bandagerName, "You have started bandaging "..playerName..", move to cancel.")
|
||||||
|
minetest.chat_send_player(playerName, bandagerName.." has started bandaging you, move to cancel.")
|
||||||
|
end
|
||||||
|
minetest.after(1, bandage, bandager, player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_craftitem('bandage:bandage', {
|
||||||
|
description = ('Bandage'),
|
||||||
|
inventory_image = 'bandage.png',
|
||||||
|
range = 3,
|
||||||
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
|
local obj = pointed_thing.ref
|
||||||
|
if obj and pointed_thing.type == "object" then
|
||||||
|
if obj:get_luaentity() and obj:get_luaentity().name == "knockout:entity" then
|
||||||
|
obj = minetest.get_player_by_name(obj:get_luaentity().grabbed_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not obj or not obj:is_player() then
|
||||||
|
obj = user
|
||||||
|
end
|
||||||
|
bandage(user, obj)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = 'bandage:bandage',
|
||||||
|
recipe = {
|
||||||
|
{'', '', ''},
|
||||||
|
{'wool:white', 'farming:hemp_fibre', 'wool:white'},
|
||||||
|
{'', '', ''},
|
||||||
|
}
|
||||||
|
})
|
2
license.txt
Normal file
2
license.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Sounds: Elkien3, CC0
|
||||||
|
Texture: AndrejIT, CC BY-SA 3.0
|
BIN
sounds/bandagefinish.ogg
Normal file
BIN
sounds/bandagefinish.ogg
Normal file
Binary file not shown.
BIN
sounds/bandagestart.ogg
Normal file
BIN
sounds/bandagestart.ogg
Normal file
Binary file not shown.
BIN
textures/bandage.png
Normal file
BIN
textures/bandage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 146 B |
Loading…
x
Reference in New Issue
Block a user