throwing items -> new config
parent
07faafa4d4
commit
79a91f79f9
|
@ -0,0 +1,21 @@
|
|||
name,bow_wield_scale,tier,bow_velocity,bow_acceleration,arrow_damage,is_bowarrow,distance
|
||||
copper,0.9,2,15,-10,2,1,
|
||||
tin,0.9,2,15,-10,2,1,
|
||||
bronze,0.95,2,16,-9.75,2.5,1,
|
||||
steel,1,2,17,-9.5,3,1,
|
||||
stainlesssteel,1,2,19,-9,3,1,
|
||||
nickel,1.05,2,18,-9.25,3.5,1,
|
||||
silver,1.1,3,19,-9,4,1,
|
||||
gold,1.1,4,20,-8.75,4.5,1,
|
||||
mese,1.1,3,20,-8.75,4.5,1,
|
||||
diamond,1.15,3,21,-8.5,5,1,
|
||||
aluminum,1.3,4,20,-8.75,6,1,
|
||||
lead,1.1,3,22,-8.5,5,1,
|
||||
platinum,1.3,4,24,-8,6,1,
|
||||
cobalt,1.4,5,27,-7.5,7,1,
|
||||
ruthenium,1.4,5,28,-7.25,7,1,
|
||||
tantalum,1.55,6,32.5,-6.5,9,1,
|
||||
rhodium,1.55,6,33,-6.5,9,1,
|
||||
shuriken,,2,20,-8,4,,8
|
||||
throwing_knife,,4,25,-6,6,,8
|
||||
dark shuriken,,6,50,-5,8,,8
|
1
init.lua
1
init.lua
|
@ -16,6 +16,7 @@ dofile(minerdream.path .. "/blocks.lua")
|
|||
dofile(minerdream.path .. "/generation.lua")
|
||||
dofile(minerdream.path .. "/crafting.lua")
|
||||
dofile(minerdream.path .. "/weapons.lua")
|
||||
dofile(minerdream.path .. "/read_weapon_config.lua")
|
||||
dofile(minerdream.path .. "/armor.lua")
|
||||
dofile(minerdream.path .. "/treasure.lua")
|
||||
dofile(minerdream.path .. "/experiments.lua")
|
||||
|
|
|
@ -10,7 +10,6 @@ local tool_cols={
|
|||
local tool_definition = minerdream.import_csv(minerdream.path.."/armor.txt",tool_cols)
|
||||
--print(dump2(tool_definition))
|
||||
|
||||
|
||||
for i,tdef in pairs(tool_definition) do
|
||||
if (i ~= "default") then
|
||||
local tooldef={}
|
||||
|
|
|
@ -0,0 +1,197 @@
|
|||
|
||||
local has_value = minerdream.has_value
|
||||
local tier_cols={
|
||||
col_num={"name"},}
|
||||
local tier_definition = minerdream.import_csv(minerdream.path.."/tiers.txt",tier_cols)
|
||||
local tool_cols={
|
||||
col_num={"bow_wield_scale","tier","bow_velocity","bow_acceleration","arrow_damage"},
|
||||
groups_num={"is_bowarrow"},
|
||||
-- as_numeric=1,
|
||||
}
|
||||
local tool_definition = minerdream.import_csv(minerdream.path.."/arrows.txt",tool_cols)
|
||||
--print(dump2(tool_definition))
|
||||
|
||||
local minerdream_arrow = {
|
||||
physical = false,
|
||||
timer = 0,
|
||||
visual = "wielditem",
|
||||
visual_size = {x=0.5, y=0.5,},
|
||||
textures = {'minerdream:shotarrow'},
|
||||
lastpos= {},
|
||||
collisionbox = {0, 0, 0, 0, 0, 0},
|
||||
}
|
||||
|
||||
for i,tdef in pairs(tool_definition) do
|
||||
if (i ~= "default") then
|
||||
if tdef.groups.is_bowarrow then
|
||||
-- register bow
|
||||
minetest.register_tool("minerdream:bow_"..i, {
|
||||
description = "".. core.colorize("#BFFFFF", i.." bow\n")..core.colorize("#A0A0A0", "projectile speed: "..tdef.bow_velocity.."\n")..core.colorize("#A0A0A0", "projectile gravity: "..tdef.bow_acceleration.."\n")..core.colorize("#A0A0A0", "ranged damage: "..tdef.arrow_damage.."\n")..core.colorize("#A0A0A0", "ammo: arrows"),
|
||||
inventory_image = "minerdream_bow_"..i..".png",
|
||||
wield_scale = {x=tdef.bow_wield_scale,y=tdef.bow_wield_scale,z=tdef.bow_wield_scale},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
local inv = user:get_inventory()
|
||||
if not inv:contains_item("main", "minerdream:arrow 1") then
|
||||
minetest.sound_play("", {object=user})
|
||||
return itemstack
|
||||
end
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
inv:remove_item("main", "minerdream:arrow")
|
||||
end
|
||||
local pos = user:getpos()
|
||||
local dir = user:get_look_dir()
|
||||
local yaw = user:get_look_yaw()
|
||||
if pos and dir and yaw then
|
||||
pos.y = pos.y + 1.6
|
||||
local obj = minetest.add_entity(pos, "minerdream:copperarrow")
|
||||
if obj then
|
||||
minetest.sound_play("", {object=obj})
|
||||
obj:setvelocity({x=dir.x * tdef.bow_velocity, y=dir.y * tdef.bow_velocity, z=dir.z * tdef.bow_velocity})
|
||||
obj:setacceleration({x=dir.x * tdef.bow_acceleration, y=tdef.bow_acceleration, z=dir.z * tdef.bow_acceleration})
|
||||
obj:setyaw(yaw + math.pi)
|
||||
local ent = obj:get_luaentity()
|
||||
if ent then
|
||||
ent.player = ent.player or user
|
||||
end
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
-- end register bow
|
||||
|
||||
local tarrow=table.copy(minerdream_arrow)
|
||||
tarrow.on_step = function(self, dtime)
|
||||
self.timer = self.timer + dtime
|
||||
local pos = self.object:getpos()
|
||||
local node = minetest.get_node(pos)
|
||||
|
||||
if self.timer > (3.5/tdef.bow_velocity) then
|
||||
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
if obj:get_luaentity() ~= nil then
|
||||
if obj:get_luaentity().name ~= "minerdream:"..i.."arrow" and obj:get_luaentity().name ~= "__builtin:item" then
|
||||
obj:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups= {fleshy = tdef.arrow_damage},
|
||||
}, nil)
|
||||
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
||||
self.object:remove()
|
||||
|
||||
end
|
||||
else
|
||||
obj:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups= {fleshy = tdef.arrow_damage},
|
||||
}, nil)
|
||||
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if self.lastpos.x ~= nil then
|
||||
if minetest.registered_nodes[node.name].walkable then
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
minetest.add_item(self.lastpos, "minerdream:arrow")
|
||||
end
|
||||
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
|
||||
end
|
||||
minetest.register_entity("minerdream:"..i.."arrow", tarrow )
|
||||
else
|
||||
minetest.register_craftitem("minerdream:"..i:gsub(" ","_"), {
|
||||
description = "".. core.colorize("#BFFFFF", i.."\n")..core.colorize("#A0A0A0", "throwable speed: "..tdef.bow_velocity.."\n")..core.colorize("#A0A0A0", "throwable gravity: "..tdef.bow_acceleration.."\n")..core.colorize("#A0A0A0", "throwing damage: "..tdef.arrow_damage),
|
||||
range = 0,
|
||||
stack_max= 500,
|
||||
inventory_image = "minerdream_"..i:gsub(" ","_")..".png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
if not minetest.setting_getbool("creative_mode") then itemstack:take_item()
|
||||
end
|
||||
if pointed_thing.type ~= "nothing" then
|
||||
local pointed = minetest.get_pointed_thing_position(pointed_thing)
|
||||
if vector.distance(user:getpos(), pointed) < tdef.distance then
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
local pos = user:getpos()
|
||||
local dir = user:get_look_dir()
|
||||
local yaw = user:get_look_yaw()
|
||||
if pos and dir then
|
||||
pos.y = pos.y + 1.5
|
||||
local obj = minetest.add_entity(pos, "minerdream:shuriken")
|
||||
if obj then
|
||||
obj:setvelocity({x=dir.x * tdef.bow_velocity, y=dir.y * tdef.bow_velocity, z=dir.z * tdef.bow_velocity})
|
||||
obj:setacceleration({x=dir.x * tdef.bow_acceleration, y=tdef.bow_acceleration, z=dir.z * tdef.bow_acceleration})
|
||||
obj:setyaw(yaw + math.pi)
|
||||
local ent = obj:get_luaentity()
|
||||
if ent then
|
||||
ent.player = ent.player or user
|
||||
end
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
local tthrow=table.copy(minerdream_arrow)
|
||||
tthrow.visual="cube"
|
||||
tthrow.visual_size={x=0.5,y=0.0,}
|
||||
tthrow.textures = {'minerdream_'..i:gsub(" ","_")..'.png','minerdream_'..i:gsub(" ","_")..'.png','minerdream_'..i:gsub(" ","_")..'.png','minerdream_'..i:gsub(" ","_")..'.png','minerdream_'..i:gsub(" ","_")..'.png','minerdream_'..i:gsub(" ","_")..'.png'}
|
||||
tthrow.on_step = function(self, dtime)
|
||||
self.timer = self.timer + dtime
|
||||
local pos = self.object:getpos()
|
||||
local node = minetest.get_node(pos)
|
||||
|
||||
if self.timer > (3.5/tdef.bow_velocity) then
|
||||
local objs = minetest.get_objects_inside_radius({x = pos.x, y = pos.y, z = pos.z}, 1)
|
||||
for k, obj in pairs(objs) do
|
||||
if obj:get_luaentity() ~= nil then
|
||||
if obj:get_luaentity().name ~= "minerdream:"..i:gsub(" ","_") and obj:get_luaentity().name ~= "__builtin:item" then
|
||||
obj:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups= {fleshy = tdef.arrow_damage},
|
||||
}, nil)
|
||||
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
||||
self.object:remove()
|
||||
end
|
||||
else
|
||||
obj:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups= {fleshy = tdef.arrow_damage},
|
||||
}, nil)
|
||||
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if self.lastpos.x ~= nil then
|
||||
if minetest.registered_nodes[node.name].walkable then
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
minetest.add_item(self.lastpos, "minerdream:"..i:gsub(" ","_"))
|
||||
end
|
||||
minetest.sound_play("default_dig_cracky", {pos = self.lastpos, gain = 0.8})
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
self.lastpos= {x = pos.x, y = pos.y, z = pos.z}
|
||||
end
|
||||
print(i)
|
||||
print(dump2(tthrow))
|
||||
minetest.register_entity("minerdream:"..i:gsub(" ","_"), tthrow)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_craftitem("minerdream:arrow", {
|
||||
description = "".. core.colorize("#FFFFFF", "arrow\n")..core.colorize("#A0A0A0", "ammunition for bows"),
|
||||
stack_max= 1000,
|
||||
inventory_image = "minerdream_arrow_inv.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("minerdream:shotarrow", {
|
||||
inventory_image = "minerdream_arrow.png",
|
||||
})
|
1998
weapons.lua
1998
weapons.lua
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue