addons
parent
9d106b8fb0
commit
9af6b01752
|
@ -0,0 +1,3 @@
|
||||||
|
#License
|
||||||
|
|
||||||
|
- Code: GPLv3
|
74
init.lua
74
init.lua
|
@ -21,9 +21,10 @@ local function deepCopy(original)
|
||||||
return copy
|
return copy
|
||||||
end
|
end
|
||||||
|
|
||||||
local function enable_steal(clicker, clicked, rob_table)
|
local function enable_steal(clicker, clicked, rob_table, angle_2d)
|
||||||
local steal_table = {}
|
local steal_table = {}
|
||||||
steal_table["clicked"] = clicked:get_player_name()
|
steal_table["clicked"] = clicked:get_player_name()
|
||||||
|
steal_table["angle_2d"] = angle_2d
|
||||||
steal_table["items"] = deepCopy(rob_table)
|
steal_table["items"] = deepCopy(rob_table)
|
||||||
_contexts[clicker:get_player_name()] = steal_table
|
_contexts[clicker:get_player_name()] = steal_table
|
||||||
end
|
end
|
||||||
|
@ -112,7 +113,7 @@ local function get_rob_list(clicked)
|
||||||
.. item_name .. ";item_name;"..tostring(i).."]"
|
.. item_name .. ";item_name;"..tostring(i).."]"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
minetest.chat_send_all("rob_list="..rob_list)
|
--minetest.chat_send_all("rob_list="..rob_list)
|
||||||
return rob_list, list_hotbar
|
return rob_list, list_hotbar
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -123,6 +124,27 @@ local function get_formspec(clicker, clicked, rob_list)
|
||||||
return formspec
|
return formspec
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function get_angle(clicker, clicked)
|
||||||
|
local clicker_look_view = clicker:get_look_dir()
|
||||||
|
local x1 = clicker_look_view.x
|
||||||
|
local z1 = clicker_look_view.z
|
||||||
|
local clicked_look_view = clicked:get_look_dir()
|
||||||
|
local x2 = clicked_look_view.x
|
||||||
|
local z2 = clicked_look_view.z
|
||||||
|
return math.deg(math.acos((x1 * x2 + z1 * z2) / (math.sqrt(x1^2 + z1^2) * math.sqrt(x2^2 + z2^2))))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_stealth_ratio(angle_2d)
|
||||||
|
if angle_2d <= pickp.settings["zone_1_2_limit"] then
|
||||||
|
stealth_ratio = pickp.settings["zone1_stealth_ratio"]
|
||||||
|
elseif angle_2d > pickp.settings["zone_1_2_limit"] and angle_2d < pickp.settings["zone_2_3_limit"] then
|
||||||
|
stealth_ratio = pickp.settings["zone2_stealth_ratio"]
|
||||||
|
else
|
||||||
|
stealth_ratio = pickp.settings["zone3_stealth_ratio"]
|
||||||
|
end
|
||||||
|
return stealth_ratio
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if formname ~= "pickp:form" then
|
if formname ~= "pickp:form" then
|
||||||
return
|
return
|
||||||
|
@ -146,9 +168,35 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
inv_clicked:remove_item("main", final_steal_itemstack)
|
inv_clicked:remove_item("main", final_steal_itemstack)
|
||||||
inv_clicker:add_item("main", final_steal_itemstack)
|
inv_clicker:add_item("main", final_steal_itemstack)
|
||||||
disable_stealth(player, true, false)
|
disable_stealth(player, true, false)
|
||||||
|
--DETECTION WARNING
|
||||||
|
--Check the angle/ratio
|
||||||
|
local angle_2d = get_angle(player, clicked)
|
||||||
|
local stealth_ratio = get_stealth_ratio(angle_2d)
|
||||||
|
local type_item_reduction_factor
|
||||||
|
if steal_itemstack.type == "main" then
|
||||||
|
type_item_reduction_factor = pickp.settings["warning_main_item"]
|
||||||
|
else
|
||||||
|
type_item_reduction_factor = pickp.settings["warning_hotbar_item"]
|
||||||
|
end
|
||||||
|
stealth_ratio = stealth_ratio - type_item_reduction_factor
|
||||||
else
|
else
|
||||||
disable_stealth(player, true, "The player has moved his items!")
|
disable_stealth(player, true, "The player has moved his items!")
|
||||||
end
|
end
|
||||||
|
if math.random(0,1) >= stealth_ratio then --NOT detected
|
||||||
|
minetest.chat_send_player(player:get_player_name(), S("Successful robbery!"))
|
||||||
|
else
|
||||||
|
--DETECTION WARNING
|
||||||
|
local msg = ""
|
||||||
|
local clicked_name = clicked:get_player_name()
|
||||||
|
if math.random(0,1) <= pickp.settings["warning_failed_thief_ratio"] then
|
||||||
|
msg = S("Someone has stolen from you!")
|
||||||
|
else
|
||||||
|
msg = clicked_name.." "..S("has stolen from you")
|
||||||
|
end
|
||||||
|
if not (msg == "") then
|
||||||
|
minetest.chat_send_player(clicked_name, msg)
|
||||||
|
end
|
||||||
|
end
|
||||||
return true
|
return true
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -175,23 +223,10 @@ local function stealth(clicker, clicked)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
--2) CHECK THE ANGLE
|
--2) CHECK THE ANGLE
|
||||||
local clicker_look_view = clicker:get_look_dir()
|
local angle_2d = get_angle(clicker, clicked)
|
||||||
local x1 = clicker_look_view.x
|
|
||||||
local z1 = clicker_look_view.z
|
|
||||||
local clicked_look_view = clicked:get_look_dir()
|
|
||||||
local x2 = clicked_look_view.x
|
|
||||||
local z2 = clicked_look_view.z
|
|
||||||
local angle_2d = math.deg(math.acos((x1 * x2 + z1 * z2) / (math.sqrt(x1^2 + z1^2) * math.sqrt(x2^2 + z2^2))))
|
|
||||||
--minetest.chat_send_all(tostring(angle_2d))
|
--minetest.chat_send_all(tostring(angle_2d))
|
||||||
local stealth_ratio
|
local stealth_ratio = get_stealth_ratio(angle_2d)
|
||||||
--Detect the zone -->
|
--Detect the zone & get the ratio accordingly-->
|
||||||
if angle_2d <= pickp.settings["zone_1_2_limit"] then
|
|
||||||
stealth_ratio = pickp.settings["zone1_stealth_ratio"]
|
|
||||||
elseif angle_2d > pickp.settings["zone_1_2_limit"] and angle_2d < pickp.settings["zone_2_3_limit"] then
|
|
||||||
stealth_ratio = pickp.settings["zone2_stealth_ratio"]
|
|
||||||
else
|
|
||||||
stealth_ratio = pickp.settings["zone3_stealth_ratio"]
|
|
||||||
end
|
|
||||||
if math.random(0,1) >= stealth_ratio then --NOT detected
|
if math.random(0,1) >= stealth_ratio then --NOT detected
|
||||||
minetest.after(pickp.settings["stealth_timing"], stealth, clicker, clicked)
|
minetest.after(pickp.settings["stealth_timing"], stealth, clicker, clicked)
|
||||||
return
|
return
|
||||||
|
@ -216,7 +251,8 @@ local function pickpocketing(clicker, clicked)
|
||||||
if not(rob_list == "") then
|
if not(rob_list == "") then
|
||||||
minetest.show_formspec(clicker_name,
|
minetest.show_formspec(clicker_name,
|
||||||
"pickp:form", get_formspec(clicker, clicked, rob_list))
|
"pickp:form", get_formspec(clicker, clicked, rob_list))
|
||||||
enable_steal(clicker, clicked, rob_table) --mark as stealing
|
local angle_2d = get_angle(clicker, clicked)
|
||||||
|
enable_steal(clicker, clicked, rob_table, angle_2d) --mark as stealing
|
||||||
minetest.after(pickp.settings["stealth_timing"], stealth, clicker, clicked)
|
minetest.after(pickp.settings["stealth_timing"], stealth, clicker, clicked)
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(clicker_name, S("Failed robbery!"))
|
minetest.chat_send_player(clicker_name, S("Failed robbery!"))
|
||||||
|
|
|
@ -6,3 +6,5 @@ The player has moved his items!=El jugador a cambiado sus objetos de sitio
|
||||||
Someone has tried to steal from you!=¡Alguien ha intentado robarte!
|
Someone has tried to steal from you!=¡Alguien ha intentado robarte!
|
||||||
tried to steal from you!=intentó robarte!
|
tried to steal from you!=intentó robarte!
|
||||||
The victim has walked away!=¡La victima se ha alejado!
|
The victim has walked away!=¡La victima se ha alejado!
|
||||||
|
Successful robbery!=¡Robo exitoso!
|
||||||
|
Someone has stolen from you!=¡Alguien te ha robado!
|
||||||
|
|
|
@ -34,5 +34,9 @@ zone2_stealth_ratio = 0.4
|
||||||
zone3_stealth_ratio = 0.9
|
zone3_stealth_ratio = 0.9
|
||||||
|
|
||||||
#Detection Warning (0-1)
|
#Detection Warning (0-1)
|
||||||
##Chance to info the victim of the thief's name
|
##Chance to info the victim of the thief's name if the theft failed (form closes)
|
||||||
warning_failed_thief_ratio = 0.5
|
warning_failed_thief_ratio = 0.5
|
||||||
|
##once the theft is perpetrated, chance to inform the victim
|
||||||
|
##it depends on the item type [main|hotbar]
|
||||||
|
warning_hotbar_item = 0.6
|
||||||
|
warning_main_item = 0.2
|
||||||
|
|
|
@ -15,4 +15,6 @@ pickp.settings.zone1_stealth_ratio = tonumber(settings:get("zone1_stealth_ratio"
|
||||||
pickp.settings.zone2_stealth_ratio = tonumber(settings:get("zone2_stealth_ratio"))
|
pickp.settings.zone2_stealth_ratio = tonumber(settings:get("zone2_stealth_ratio"))
|
||||||
pickp.settings.zone3_stealth_ratio = tonumber(settings:get("zone3_stealth_ratio"))
|
pickp.settings.zone3_stealth_ratio = tonumber(settings:get("zone3_stealth_ratio"))
|
||||||
pickp.settings.warning_failed_thief_ratio = tonumber(settings:get("warning_failed_thief_ratio"))
|
pickp.settings.warning_failed_thief_ratio = tonumber(settings:get("warning_failed_thief_ratio"))
|
||||||
|
pickp.settings.warning_hotbar_item = tonumber(settings:get("warning_hotbar_item"))
|
||||||
|
pickp.settings.warning_main_item = tonumber(settings:get("warning_main_item"))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue