forked from VoxeLibre/VoxeLibre
Merge pull request 'Workaround for bows, crossbow and spyglass on mobile' (#4104) from mobile_bow_workaround into master
Reviewed-on: MineClone2/MineClone2#4104
This commit is contained in:
commit
f866b56d06
|
@ -31,6 +31,7 @@ local known_controls = {
|
||||||
aux1 = true,
|
aux1 = true,
|
||||||
down = true,
|
down = true,
|
||||||
up = true,
|
up = true,
|
||||||
|
zoom = true,
|
||||||
}
|
}
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
|
|
@ -140,7 +140,7 @@ minetest.register_tool("mcl_bows:bow", {
|
||||||
_tt_help = S("Launches arrows"),
|
_tt_help = S("Launches arrows"),
|
||||||
_doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n"..
|
_doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n"..
|
||||||
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
|
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
|
||||||
_doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot."),
|
_doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button (or the zoom key) to charge, release to shoot."),
|
||||||
_doc_items_durability = BOW_DURABILITY,
|
_doc_items_durability = BOW_DURABILITY,
|
||||||
inventory_image = "mcl_bows_bow.png",
|
inventory_image = "mcl_bows_bow.png",
|
||||||
wield_scale = mcl_vars.tool_wield_scale,
|
wield_scale = mcl_vars.tool_wield_scale,
|
||||||
|
@ -239,7 +239,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
controls.register_on_release(function(player, key, time)
|
controls.register_on_release(function(player, key, time)
|
||||||
if key~="RMB" then return end
|
if key~="RMB" and key~="zoom" then return end
|
||||||
--local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
|
--local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
|
||||||
local wielditem = player:get_wielded_item()
|
local wielditem = player:get_wielded_item()
|
||||||
if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or
|
if (wielditem:get_name()=="mcl_bows:bow_0" or wielditem:get_name()=="mcl_bows:bow_1" or wielditem:get_name()=="mcl_bows:bow_2" or
|
||||||
|
@ -307,28 +307,30 @@ end)
|
||||||
controls.register_on_hold(function(player, key, time)
|
controls.register_on_hold(function(player, key, time)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local creative = minetest.is_creative_enabled(name)
|
local creative = minetest.is_creative_enabled(name)
|
||||||
if key ~= "RMB" or not (creative or get_arrow(player)) then
|
if (key ~= "RMB" and key ~= "zoom") or not (creative or get_arrow(player)) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
--local inv = minetest.get_inventory({type="player", name=name})
|
--local inv = minetest.get_inventory({type="player", name=name})
|
||||||
local wielditem = player:get_wielded_item()
|
local wielditem = player:get_wielded_item()
|
||||||
if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then
|
if bow_load[name] == nil
|
||||||
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
|
and (wielditem:get_name()=="mcl_bows:bow" or wielditem:get_name()=="mcl_bows:bow_enchanted")
|
||||||
if enchanted then
|
and (wielditem:get_meta():get("active") or key == "zoom") and (creative or get_arrow(player)) then
|
||||||
wielditem:set_name("mcl_bows:bow_0_enchanted")
|
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
|
||||||
else
|
if enchanted then
|
||||||
wielditem:set_name("mcl_bows:bow_0")
|
wielditem:set_name("mcl_bows:bow_0_enchanted")
|
||||||
end
|
else
|
||||||
player:set_wielded_item(wielditem)
|
wielditem:set_name("mcl_bows:bow_0")
|
||||||
if minetest.get_modpath("playerphysics") then
|
end
|
||||||
-- Slow player down when using bow
|
player:set_wielded_item(wielditem)
|
||||||
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED)
|
if minetest.get_modpath("playerphysics") then
|
||||||
end
|
-- Slow player down when using bow
|
||||||
bow_load[name] = minetest.get_us_time()
|
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_bow", PLAYER_USE_BOW_SPEED)
|
||||||
bow_index[name] = player:get_wield_index()
|
end
|
||||||
|
bow_load[name] = minetest.get_us_time()
|
||||||
|
bow_index[name] = player:get_wield_index()
|
||||||
|
|
||||||
-- begin Bow Zoom.
|
-- begin Bow Zoom.
|
||||||
mcl_fovapi.apply_modifier(player, "bowcomplete")
|
mcl_fovapi.apply_modifier(player, "bowcomplete")
|
||||||
else
|
else
|
||||||
if player:get_wield_index() == bow_index[name] then
|
if player:get_wield_index() == bow_index[name] then
|
||||||
if type(bow_load[name]) == "number" then
|
if type(bow_load[name]) == "number" then
|
||||||
|
|
|
@ -132,7 +132,7 @@ minetest.register_tool("mcl_bows:crossbow", {
|
||||||
_tt_help = S("Launches arrows"),
|
_tt_help = S("Launches arrows"),
|
||||||
_doc_items_longdesc = S("Crossbows are ranged weapons to shoot arrows at your foes.").."\n"..
|
_doc_items_longdesc = S("Crossbows are ranged weapons to shoot arrows at your foes.").."\n"..
|
||||||
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
|
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
|
||||||
_doc_items_usagehelp = S("To use the crossbow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to load an arrow into the chamber, then to shoot press left mouse."),
|
_doc_items_usagehelp = S("To use the crossbow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button (or zoom key) to charge, release to load an arrow into the chamber, then to shoot press left mouse."),
|
||||||
_doc_items_durability = BOW_DURABILITY,
|
_doc_items_durability = BOW_DURABILITY,
|
||||||
inventory_image = "mcl_bows_crossbow.png",
|
inventory_image = "mcl_bows_crossbow.png",
|
||||||
wield_scale = mcl_vars.tool_wield_scale,
|
wield_scale = mcl_vars.tool_wield_scale,
|
||||||
|
@ -263,7 +263,7 @@ end
|
||||||
|
|
||||||
|
|
||||||
controls.register_on_release(function(player, key, time)
|
controls.register_on_release(function(player, key, time)
|
||||||
if key~="RMB" then return end
|
if key~="RMB" and key~="zoom" then return end
|
||||||
--local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
|
--local inv = minetest.get_inventory({type="player", name=player:get_player_name()})
|
||||||
local wielditem = player:get_wielded_item()
|
local wielditem = player:get_wielded_item()
|
||||||
if wielditem:get_name()=="mcl_bows:crossbow_2" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2" and minetest.is_creative_enabled(player:get_player_name()) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and minetest.is_creative_enabled(player:get_player_name()) then
|
if wielditem:get_name()=="mcl_bows:crossbow_2" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2" and minetest.is_creative_enabled(player:get_player_name()) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and get_arrow(player) or wielditem:get_name()=="mcl_bows:crossbow_2_enchanted" and minetest.is_creative_enabled(player:get_player_name()) then
|
||||||
|
@ -359,7 +359,7 @@ end)
|
||||||
controls.register_on_hold(function(player, key, time)
|
controls.register_on_hold(function(player, key, time)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local creative = minetest.is_creative_enabled(name)
|
local creative = minetest.is_creative_enabled(name)
|
||||||
if key ~= "RMB" then
|
if key ~= "RMB" and key ~= "zoom" then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
--local inv = minetest.get_inventory({type="player", name=name})
|
--local inv = minetest.get_inventory({type="player", name=name})
|
||||||
|
@ -373,22 +373,24 @@ controls.register_on_hold(function(player, key, time)
|
||||||
BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL
|
BOW_CHARGE_TIME_FULL = _BOW_CHARGE_TIME_FULL
|
||||||
end
|
end
|
||||||
|
|
||||||
if bow_load[name] == nil and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted") and wielditem:get_meta():get("active") and (creative or get_arrow(player)) then
|
if bow_load[name] == nil
|
||||||
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
|
and (wielditem:get_name()=="mcl_bows:crossbow" or wielditem:get_name()=="mcl_bows:crossbow_enchanted")
|
||||||
if enchanted then
|
and (wielditem:get_meta():get("active") or key=="zoom") and (creative or get_arrow(player)) then
|
||||||
wielditem:set_name("mcl_bows:crossbow_0_enchanted")
|
local enchanted = mcl_enchanting.is_enchanted(wielditem:get_name())
|
||||||
play_load_sound(0, player:get_pos())
|
if enchanted then
|
||||||
else
|
wielditem:set_name("mcl_bows:crossbow_0_enchanted")
|
||||||
wielditem:set_name("mcl_bows:crossbow_0")
|
play_load_sound(0, player:get_pos())
|
||||||
play_load_sound(0, player:get_pos())
|
else
|
||||||
end
|
wielditem:set_name("mcl_bows:crossbow_0")
|
||||||
player:set_wielded_item(wielditem)
|
play_load_sound(0, player:get_pos())
|
||||||
if minetest.get_modpath("playerphysics") then
|
end
|
||||||
-- Slow player down when using bow
|
player:set_wielded_item(wielditem)
|
||||||
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED)
|
if minetest.get_modpath("playerphysics") then
|
||||||
end
|
-- Slow player down when using bow
|
||||||
bow_load[name] = minetest.get_us_time()
|
playerphysics.add_physics_factor(player, "speed", "mcl_bows:use_crossbow", PLAYER_USE_CROSSBOW_SPEED)
|
||||||
bow_index[name] = player:get_wield_index()
|
end
|
||||||
|
bow_load[name] = minetest.get_us_time()
|
||||||
|
bow_index[name] = player:get_wield_index()
|
||||||
else
|
else
|
||||||
if player:get_wield_index() == bow_index[name] then
|
if player:get_wield_index() == bow_index[name] then
|
||||||
if type(bow_load[name]) == "number" then
|
if type(bow_load[name]) == "number" then
|
||||||
|
|
|
@ -58,17 +58,21 @@ local function remove_scope(player)
|
||||||
end
|
end
|
||||||
|
|
||||||
controls.register_on_press(function(player, key)
|
controls.register_on_press(function(player, key)
|
||||||
if key ~= "RMB" then return end
|
if key ~= "RMB" and key ~= "zoom" then return end
|
||||||
add_scope(player)
|
if spyglass_scope[player] == nil then
|
||||||
|
add_scope(player)
|
||||||
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
controls.register_on_release(function(player, key, time)
|
controls.register_on_release(function(player, key, time)
|
||||||
if key ~= "RMB" then return end
|
if key ~= "RMB" and key ~= "zoom" then return end
|
||||||
|
local ctrl = player:get_player_control()
|
||||||
|
if key == "RMB" and ctrl.zoom or key == "zoom" and ctrl.place then return end
|
||||||
remove_scope(player)
|
remove_scope(player)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
controls.register_on_hold(function(player, key, time)
|
controls.register_on_hold(function(player, key, time)
|
||||||
if key ~= "RMB" then return end
|
if key ~= "RMB" and key ~= "zoom" then return end
|
||||||
local wielditem = player:get_wielded_item()
|
local wielditem = player:get_wielded_item()
|
||||||
if wielditem:get_name() == "mcl_spyglass:spyglass" then
|
if wielditem:get_name() == "mcl_spyglass:spyglass" then
|
||||||
mcl_fovapi.apply_modifier(player, "spyglass") -- apply the FOV effect.
|
mcl_fovapi.apply_modifier(player, "spyglass") -- apply the FOV effect.
|
||||||
|
|
Loading…
Reference in New Issue