Store: throw_style in player meta
parent
eb21f1f8a1
commit
7a5c024119
4
LICENSE
4
LICENSE
|
@ -30,5 +30,7 @@ Licenses of media (textures)
|
|||
----------------------------
|
||||
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
https://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
||||
Copyright (c) 2020 Coder12
|
||||
|
||||
https://creativecommons.org/licenses/by-sa/3.0/
|
||||
|
|
|
@ -8,23 +8,26 @@ minetest.register_chatcommand("throw_style", {
|
|||
params = "[<style>]: Change how you throw an item.",
|
||||
description = "Change how you throw an item. Accepted values are [none|spin|dip]",
|
||||
privs = {
|
||||
interact = true,
|
||||
interact = true
|
||||
},
|
||||
func = function(name, param)
|
||||
-- Check the given param.
|
||||
if param == "none" then
|
||||
-- Set the style to none.
|
||||
player_persistent_data[name].throw_style = nil
|
||||
get_player_by_name(name):get_meta():set_int("pvp_revamped.throw_style", 0)
|
||||
|
||||
return true, "Throw style set to none."
|
||||
elseif param == "spin" then
|
||||
-- Give the item a little spin.
|
||||
player_persistent_data[name].throw_style = projectile_throw_style_spinning
|
||||
get_player_by_name(name):get_meta():set_int("pvp_revamped.throw_style", projectile_throw_style_spinning)
|
||||
|
||||
return true, "Throw style set to spin."
|
||||
elseif param == "dip" then
|
||||
-- Bullet drop.
|
||||
player_persistent_data[name].throw_style = projectile_throw_style_dip
|
||||
get_player_by_name(name):get_meta():set_int("pvp_revamped.throw_style", projectile_throw_style_dip)
|
||||
|
||||
return true, "Throw style set to dip."
|
||||
end
|
||||
|
@ -40,7 +43,7 @@ minetest.register_chatcommand("move_item", {
|
|||
description = "Gives you a movement item. Accepted values are [dodge|dash_left|dash_up|dash_right|dash_down|dash_all|roll_left"
|
||||
.. "|roll_up|roll_right|roll_down|roll_all|all]",
|
||||
privs = {
|
||||
interact = true,
|
||||
interact = true
|
||||
},
|
||||
func = function(name, param)
|
||||
local inv = get_player_by_name(name):get_inventory()
|
||||
|
@ -125,7 +128,7 @@ minetest.register_chatcommand("use_shield", {
|
|||
params = "[<boolean>]: Change how you block incoming damage.",
|
||||
description = "If set to true, the shield plate placed in the armor inventory will be used to block all incoming damage when block key is pressed.",
|
||||
privs = {
|
||||
interact = true,
|
||||
interact = true
|
||||
},
|
||||
func = function(name, param)
|
||||
-- Check the given param.
|
||||
|
|
|
@ -138,45 +138,49 @@ minetest.register_globalstep(function(dtime)
|
|||
floor(control_bits / 256) % 2 ~= 1 and
|
||||
floor(control_bits / 512) % 2 ~= 1 and
|
||||
floor(control_bits / 32) % 2 ~= 1) or
|
||||
pp_data.active_dodges or pp_data.active_barrel_rolls then
|
||||
pp_data.active_dodges or
|
||||
pp_data.active_barrel_rolls then
|
||||
|
||||
local pos = player:get_pos()
|
||||
|
||||
pos.y = pos.y + player:get_properties().eye_height
|
||||
|
||||
local obj = add_entity(pos, "pvp_revamped:projectile")
|
||||
local ent = obj:get_luaentity()
|
||||
|
||||
if ent then
|
||||
local throw_style = pp_data.throw_style
|
||||
local throw_speed = tool_capabilities.throw_speed
|
||||
local damage = tool_capabilities.damage_groups.fleshy
|
||||
local projectile_gravity = tool_capabilities.projectile_gravity or projectile_gravity
|
||||
local gravity = projectile_gravity
|
||||
local projectile_dmg_mul = tool_capabilities.projectile_dmg_mul or projectile_dmg_mul
|
||||
local projectile_spinning_gravity_mul = tool_capabilities.projectile_spinning_gravity_mul or projectile_spinning_gravity_mul
|
||||
local projectile_dip_gravity_mul = tool_capabilities.projectile_dip_gravity_mul or projectile_dip_gravity_mul
|
||||
local spin
|
||||
if obj then
|
||||
local ent = obj:get_luaentity()
|
||||
|
||||
if not throw_data.ready then
|
||||
local projectile_half_throw_mul = tool_capabilities.projectile_half_throw_mul or projectile_half_throw_mul
|
||||
local re = (full_throw - time) * projectile_half_throw_mul
|
||||
if ent then
|
||||
local throw_style = pp_data.throw_style
|
||||
local throw_speed = tool_capabilities.throw_speed
|
||||
local damage = tool_capabilities.damage_groups.fleshy
|
||||
local projectile_gravity = tool_capabilities.projectile_gravity or projectile_gravity
|
||||
local gravity = projectile_gravity
|
||||
local projectile_dmg_mul = tool_capabilities.projectile_dmg_mul or projectile_dmg_mul
|
||||
local projectile_spinning_gravity_mul = tool_capabilities.projectile_spinning_gravity_mul or projectile_spinning_gravity_mul
|
||||
local projectile_dip_gravity_mul = tool_capabilities.projectile_dip_gravity_mul or projectile_dip_gravity_mul
|
||||
local spin
|
||||
|
||||
if re > 0.5 then
|
||||
damage = tool_capabilities.damage_groups.fleshy - re
|
||||
throw_speed = throw_speed - re
|
||||
if not throw_data.ready then
|
||||
local projectile_half_throw_mul = tool_capabilities.projectile_half_throw_mul or projectile_half_throw_mul
|
||||
local re = (full_throw - time) * projectile_half_throw_mul
|
||||
|
||||
if re > 0.5 then
|
||||
damage = tool_capabilities.damage_groups.fleshy - re
|
||||
throw_speed = throw_speed - re
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if throw_style == projectile_throw_style_spinning then
|
||||
spin = throw_speed
|
||||
gravity = gravity * projectile_spinning_gravity_mul
|
||||
elseif throw_style == projectile_throw_style_dip then
|
||||
gravity = gravity * projectile_dip_gravity_mul
|
||||
end
|
||||
if throw_style == projectile_throw_style_spinning then
|
||||
spin = throw_speed
|
||||
gravity = gravity * projectile_spinning_gravity_mul
|
||||
elseif throw_style == projectile_throw_style_dip then
|
||||
gravity = gravity * projectile_dip_gravity_mul
|
||||
end
|
||||
|
||||
ent:set_item(k, throw_data.item)
|
||||
ent:throw(player, throw_speed, {x = 0, y = gravity, z = 0}, max(damage * projectile_dmg_mul, 0.1), throw_style, spin)
|
||||
ent:set_item(k, throw_data.item)
|
||||
ent:throw(player, throw_speed, {x = 0, y = gravity, z = 0}, max(damage * projectile_dmg_mul, 0.1), throw_style, spin)
|
||||
end
|
||||
end
|
||||
|
||||
-- Remove throwing hud.
|
||||
|
|
56
helper.lua
56
helper.lua
|
@ -1,5 +1,6 @@
|
|||
local add_item = minetest.add_item
|
||||
local get_us_time = minetest.get_us_time
|
||||
local add_entity = minetest.add_entity
|
||||
local player_data = pvp_revamped.player_data
|
||||
local shield_entity_pos = pvp_revamped.config.shield_entity_pos
|
||||
local shield_entity_rotate = pvp_revamped.config.shield_entity_rotate
|
||||
|
@ -38,34 +39,37 @@ end
|
|||
local get_player_data = pvp_revamped.get_player_data
|
||||
|
||||
function pvp_revamped.create_wield_shield(player, name, bone, itemname, groups)
|
||||
local data = get_player_data(name)
|
||||
local object = minetest.add_entity(player:get_pos(), "pvp_revamped:shield", name)
|
||||
local object = add_entity(player:get_pos(), "pvp_revamped:shield", name)
|
||||
|
||||
if object then
|
||||
object:set_attach(player, bone, groups.shield_entity_pos or shield_entity_pos, groups.shield_entity_rotate or shield_entity_rotate)
|
||||
object:set_properties({
|
||||
textures = {itemname},
|
||||
visual_size = groups.shield_entity_scale or shield_entity_scale
|
||||
})
|
||||
|
||||
local entity = data.entity
|
||||
|
||||
if entity and entity.object then
|
||||
player:set_bone_position(entity.bone, entity.position, new(-180, 0, 0))
|
||||
|
||||
entity.object:remove()
|
||||
end
|
||||
|
||||
entity = {object = object, bone = bone, rotation = new(-90, 0, 0)}
|
||||
|
||||
if bone == "Arm_Left" then
|
||||
entity.position = new(3, 5.7, 0)
|
||||
elseif bone == "Arm_Right" then
|
||||
entity.position = new(-3, 5.7, 0)
|
||||
end
|
||||
|
||||
data.entity = entity
|
||||
if not object or not object:get_luaentity() then
|
||||
return
|
||||
end
|
||||
|
||||
local data = get_player_data(name)
|
||||
|
||||
object:set_attach(player, bone, groups.shield_entity_pos or shield_entity_pos, groups.shield_entity_rotate or shield_entity_rotate)
|
||||
object:set_properties({
|
||||
textures = {itemname},
|
||||
visual_size = groups.shield_entity_scale or shield_entity_scale
|
||||
})
|
||||
|
||||
local entity = data.entity
|
||||
|
||||
if entity and entity.object then
|
||||
player:set_bone_position(entity.bone, entity.position, new(-180, 0, 0))
|
||||
|
||||
entity.object:remove()
|
||||
end
|
||||
|
||||
entity = {object = object, bone = bone, rotation = new(-90, 0, 0)}
|
||||
|
||||
if bone == "Arm_Left" then
|
||||
entity.position = new(3, 5.7, 0)
|
||||
elseif bone == "Arm_Right" then
|
||||
entity.position = new(-3, 5.7, 0)
|
||||
end
|
||||
|
||||
data.entity = entity
|
||||
end
|
||||
|
||||
function pvp_revamped.remove_text_center(player, hud_name)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
-- See if the mod armor_3d is a thing here.
|
||||
if not armor then
|
||||
if not minetest.global_exists("armor") then
|
||||
return
|
||||
end
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
if not wieldview then
|
||||
if not minetest.global_exists("wieldview") then
|
||||
return
|
||||
end
|
||||
|
||||
|
|
|
@ -6,7 +6,10 @@ local get_player_by_name = minetest.get_player_by_name
|
|||
|
||||
-- Create an empty data sheet for the player.
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
player_persistent_data[player:get_player_name()] = {damage_texture_modifier = player:get_properties().damage_texture_modifier}
|
||||
player_persistent_data[player:get_player_name()] = {
|
||||
damage_texture_modifier = player:get_properties().damage_texture_modifier,
|
||||
throw_style = player:get_meta():get_int("pvp_revamped.throw_style")
|
||||
}
|
||||
end)
|
||||
|
||||
-- Clear up memory if the player leaves.
|
||||
|
@ -42,8 +45,12 @@ end)
|
|||
minetest.register_on_dieplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
local pdata = player_data[name]
|
||||
local old_ppd = player_persistent_data[name]
|
||||
|
||||
player_persistent_data[name] = {damage_texture_modifier = player_persistent_data[name].damage_texture_modifier}
|
||||
player_persistent_data[name] = {
|
||||
damage_texture_modifier = old_ppd.damage_texture_modifier,
|
||||
throw_style = old_ppd.throw_style
|
||||
}
|
||||
|
||||
if not pdata then
|
||||
return
|
||||
|
|
|
@ -27,8 +27,8 @@ local rad90 = pi * 0.5
|
|||
-- Entity for thrown items.
|
||||
minetest.register_entity("pvp_revamped:projectile", {
|
||||
initial_properties = {
|
||||
collisionbox = {-0.3, -0.3, -0.3, 0.3, 0.3, 0.3},
|
||||
visual_size = {x = 0.4, y = 0.4, z = 0.4},
|
||||
collisionbox = {0, 0, 0, 0, 0, 0},
|
||||
visual_size = {x = 0, y = 0, z = 0},
|
||||
visual = "wielditem",
|
||||
textures = {""},
|
||||
physical = true,
|
||||
|
|
Loading…
Reference in New Issue