Store: throw_style in player meta

master
Coder12a 2020-11-04 12:27:02 -06:00
parent eb21f1f8a1
commit 7a5c024119
9 changed files with 84 additions and 64 deletions

View File

@ -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/

View File

@ -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.

View File

@ -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.

View File

@ -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)

View File

@ -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

View File

@ -1,4 +1,4 @@
if not wieldview then
if not minetest.global_exists("wieldview") then
return
end

View File

@ -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

View File

@ -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,

View File

@ -1,4 +1,4 @@
if not sscsm then
if not minetest.global_exists("sscsm") then
return
end