initial commit

This commit is contained in:
Elkien3 2019-12-03 11:58:31 -06:00
parent 115ede968f
commit 678ea87f42
6 changed files with 138 additions and 0 deletions

1
depends.txt Normal file
View File

@ -0,0 +1 @@
farming, wool

135
init.lua Normal file
View 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
View File

@ -0,0 +1,2 @@
Sounds: Elkien3, CC0
Texture: AndrejIT, CC BY-SA 3.0

BIN
sounds/bandagefinish.ogg Normal file

Binary file not shown.

BIN
sounds/bandagestart.ogg Normal file

Binary file not shown.

BIN
textures/bandage.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 B