add heal and magic missle spells
parent
ca04344c28
commit
00b075fd42
|
@ -0,0 +1,29 @@
|
|||
local heal_spell = {
|
||||
id = "heal",
|
||||
desc = "Heal",
|
||||
type = "cast",
|
||||
level = 2,
|
||||
on_cast = function(spell,name,target)
|
||||
local t = nil
|
||||
local p = minetest.get_player_by_name(name)
|
||||
local sk = skills.get_skill(name,SKILL_MAGIC)
|
||||
local skb = skills.get_def(SKILL_MAGIC)
|
||||
local health = 5 + ( spell.max_health * ( sk.level / skb.max_level ) )
|
||||
local max_dist = 10 + (( sk.level / skb.max_level ) * 20 )
|
||||
if target ~= nil then
|
||||
t = minetest.get_player_by_name(target)
|
||||
else
|
||||
t = minetest.get_player_by_name(name)
|
||||
end
|
||||
|
||||
if get_distance(t:getpos(),p:getpos()) < max_dist then
|
||||
t:set_hp(t:get_hp() + health)
|
||||
else
|
||||
minetest.chat_send_player(name,tostring(target).." is too far away!")
|
||||
end
|
||||
end,
|
||||
max_mana = 15,
|
||||
max_health = 15,
|
||||
}
|
||||
|
||||
magic.register_spell(heal_spell)
|
|
@ -0,0 +1,117 @@
|
|||
local MAGICMISSLE_ENTITY={
|
||||
physical = false,
|
||||
timer=0,
|
||||
visual = "sprite",
|
||||
visual_size = {x=0.5, y=0.5},
|
||||
textures = {"magic_magicmissle.png"},
|
||||
lastpos={},
|
||||
collisionbox = {0,0,0,0,0,0},
|
||||
player = nil,
|
||||
max_damage=25,
|
||||
}
|
||||
|
||||
MAGICMISSLE_ENTITY.on_step = function(self, dtime)
|
||||
self.timer=self.timer+dtime
|
||||
local pos = self.object:getpos()
|
||||
local node = minetest.env:get_node(pos)
|
||||
|
||||
--if self.timer>0.2 then
|
||||
if self.player ~= nil then
|
||||
hitter = self.player
|
||||
else
|
||||
hitter = self.object
|
||||
end
|
||||
local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2)
|
||||
for k, obj in pairs(objs) do
|
||||
if obj:get_luaentity() ~= nil then
|
||||
if obj:get_luaentity().name ~= "magic:magicmissle" and obj:get_luaentity().name ~= "__builtin:item" then
|
||||
minetest.sound_play("magic_magicmissle_hit",{object=self.object})
|
||||
local skill = skills.get_skill(hitter:get_player_name(),SKILL_MAGIC)
|
||||
local damage = self.max_damage * ( (skill.level) / skills.get_def(SKILL_MAGIC)['max_level'] )
|
||||
obj:punch(hitter, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups={fleshy=damage},
|
||||
}, nil)
|
||||
self.object:remove()
|
||||
end
|
||||
else
|
||||
if obj ~= hitter then
|
||||
minetest.sound_play("magic_magicmissle_hit",{object=self.object})
|
||||
local skill = skills.get_skill(hitter:get_player_name(),SKILL_MAGIC)
|
||||
local damage = self.max_damage * ( (skill.level) / skills.get_def(SKILL_MAGIC)['max_level'] )
|
||||
obj:punch(hitter, 1.0, {
|
||||
full_punch_interval=1.0,
|
||||
damage_groups={fleshy=damage},
|
||||
}, nil)
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
--end
|
||||
|
||||
if self.lastpos.x~=nil then
|
||||
if ( minetest.registered_nodes[node.name].walkable == true or minetest.registered_nodes[node.name].walkable == nil ) and ( node.name ~= "air" and node.name ~= "default:water_source" and node.name ~= "default:water_flowing" ) then
|
||||
minetest.sound_play("magic_magicmissle_hit",{object=self.object})
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
self.lastpos={x=pos.x, y=pos.y, z=pos.z}
|
||||
|
||||
-- drop particle
|
||||
--[[
|
||||
minetest.add_particle({
|
||||
pos = pos,
|
||||
velocity = {x=0,y=0,z=0},
|
||||
acceleration = { x=0,y=0,z=0 },
|
||||
expirationtime=2,
|
||||
size = 0.25,
|
||||
collisiondetection = false,
|
||||
vertical = true,
|
||||
texture = "magic_magicmissle.png",
|
||||
})
|
||||
]]
|
||||
local rnd = math.random(0,1)*-1
|
||||
local rnd2 = math.random(1,2)
|
||||
minetest.add_particle(pos, {x=0.1*rnd, y=0, z=-0.1*rnd}, {x=0, y=-12, z=0}, 4,
|
||||
1.2, true, "magic_magicmissle_particle1.png")
|
||||
|
||||
if self.timer > 1.5 then
|
||||
minetest.sound_play("magic_magicmissle_hit",{object=self.object})
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_entity("magic:magicmissle", MAGICMISSLE_ENTITY)
|
||||
|
||||
local magicmissle_spell = {
|
||||
id="missle",
|
||||
desc = "Magic Missle",
|
||||
type = "wand",
|
||||
wand_texture = "magic_missle_wand.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
local name = user:get_player_name()
|
||||
|
||||
local sk = skills.get_skill(name,SKILL_MAGIC)
|
||||
local skb = skills.get_def(SKILL_MAGIC)
|
||||
local mana = 10 - ( ( (sk.level - 2) / skb.max_level ) * 10 )
|
||||
if magic.player_magic[name] >= mana then
|
||||
magic.player_magic[name] = magic.player_magic[name] - mana
|
||||
minetest.sound_play("magic_magicmissle_cast",{object=user})
|
||||
local playerpos = user:getpos()
|
||||
local obj = minetest.env:add_entity({x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z}, "magic:magicmissle")
|
||||
local dir = user:get_look_dir()
|
||||
obj:setvelocity({x=dir.x*19, y=dir.y*19, z=dir.z*19})
|
||||
obj:setacceleration({x=dir.x*-3, y=-1, z=dir.z*-3})
|
||||
obj:setyaw(user:get_look_yaw()+math.pi)
|
||||
obj:get_luaentity().player = user
|
||||
magic.update_magic(user,name)
|
||||
else
|
||||
minetest.chat_send_player(name,"You don't have enough magic")
|
||||
end
|
||||
end,
|
||||
max_mana = 10,
|
||||
level = 4,
|
||||
}
|
||||
|
||||
magic.register_spell(magicmissle_spell)
|
||||
|
Loading…
Reference in New Issue