added inventory search

master
aegroto 2018-08-29 20:48:54 +02:00
parent 0d52908723
commit 0571f20afd
3 changed files with 89 additions and 1 deletions

View File

@ -1,4 +1,7 @@
--general options
--inventory search options
drug_wars.INV_SEARCH_MAX_DISTANCE = 5
--addiction options
drug_wars.ADDICTION_TICK = 30
drug_wars.ADDICTION_REDUCTION = 0.1
drug_wars.ADDICTION_REDUCTION_THRESHOLD = 0.05

View File

@ -10,6 +10,7 @@ drug_wars.addictions = {}
dofile(drug_wars.path.."/config.lua")
dofile(drug_wars.path.."/helpers.lua")
dofile(drug_wars.path.."/globalupdates.lua")
dofile(drug_wars.path.."/invsearch.lua")
dofile(drug_wars.path.."/melee.lua")
dofile(drug_wars.path.."/pipes.lua")
dofile(drug_wars.path.."/cannabis.lua")

84
invsearch.lua Normal file
View File

@ -0,0 +1,84 @@
drug_wars.current_searchers = {}
minetest.create_detached_inventory("searchinv_main", {
allow_move = function() return 0 end,
allow_put = function() return 0 end,
allow_take = function() return 0 end
})
minetest.create_detached_inventory("searchinv_craft", {
allow_move = function() return 0 end,
allow_put = function() return 0 end,
allow_take = function() return 0 end
})
function drug_wars.is_searchable(player, searcher)
local player_pos = player:get_pos()
local searcher_pos = searcher:get_pos()
local x_diff = (player_pos.x - searcher_pos.x)
local y_diff = (player_pos.y - searcher_pos.y)
local z_diff = (player_pos.z - searcher_pos.z)
return (x_diff * x_diff) + (y_diff * y_diff) + (z_diff * z_diff) < drug_wars.INV_SEARCH_MAX_DISTANCE
end
minetest.register_chatcommand("inv_search", {
params = "<playername>",
description = "Request <playername> to show all items in its inventory",
func = function(searchername, playername)
local searcher = minetest.get_player_by_name(searchername)
local player = minetest.get_player_by_name(playername)
if searcher ~= nil then
if player ~= nil then
if drug_wars.is_searchable(player, searcher) then
minetest.chat_send_player(playername, searchername .. " asked you to search your inventory (accept with /inv_search_accept)")
drug_wars.current_searchers[playername] = searchername
else
minetest.chat_send_player(searchername, "inv_search: Player is too far")
end
else
minetest.chat_send_player(searchername, "inv_search: Invalid player name")
end
end
end
})
minetest.register_chatcommand("inv_search_accept", {
description = "Shows your inventory to your current searcher",
func = function(playername)
local player = minetest.get_player_by_name(playername)
local searchername = drug_wars.current_searchers[playername]
if searchername ~= nil then
local searcher = minetest.get_player_by_name(searchername)
if player ~= nil then
if searcher ~= nil then
if drug_wars.is_searchable(player, searcher) then
local player_maininv = minetest.get_inventory({type="detached", name="searchinv_main"})
player_maininv:set_list(playername, player:get_inventory():get_list("main"))
local player_craftinv = minetest.get_inventory({type="detached", name="searchinv_craft"})
player_craftinv:set_list(playername, player:get_inventory():get_list("craft"))
local search_formspec =
"size[8, 9]" ..
"list[detached:searchinv_craft;"..playername..";2.5,0.5;3,3;]" ..
"list[detached:searchinv_main;"..playername..";0,5;8,4;]"
minetest.show_formspec(searchername, "drug_wars:inv_search", search_formspec)
--minetest.show_formspec(playername, "drug_wars:inv_search", search_formspec)
drug_wars.current_searchers[playername] = nil
else
minetest.chat_send_player(playername, "inv_show: Searcher is too far")
end
else
minetest.chat_send_player(playername, "inv_show: Invalid searcher")
end
end
else
minetest.chat_send_player(playername, "inv_show: Nobody asked to search your inventory")
end
end
})