works?
This commit is contained in:
commit
1fd42583dd
10
init.lua
Normal file
10
init.lua
Normal file
@ -0,0 +1,10 @@
|
||||
-- luacheck: globals live
|
||||
local MODNAME = core.get_current_modname()
|
||||
--local MODPATH = core.get_modpath(MODNAME)
|
||||
|
||||
local mod = {
|
||||
MODNAME = MODNAME,
|
||||
}
|
||||
_G[MODNAME] = mod
|
||||
|
||||
live.load_module(MODNAME, "module")
|
136
module.lua
Normal file
136
module.lua
Normal file
@ -0,0 +1,136 @@
|
||||
---/eval live.load_module("player_dummy", "module")
|
||||
|
||||
local mod = ... or {}
|
||||
local MODNAME = mod.MODNAME or "NONE"
|
||||
local live = _G.live
|
||||
|
||||
if not live then
|
||||
live = {
|
||||
register_entity = core.register_entity,
|
||||
register_on_leaveplayer = function(_, func)
|
||||
core.register_on_leaveplayer(func)
|
||||
end,
|
||||
register_on_joinplayer = function(_, func)
|
||||
core.register_on_joinplayer(func)
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
local function tell(...)
|
||||
core.chat_send_all(string.format(...))
|
||||
end
|
||||
|
||||
local known_dummies = mod.known_dummies
|
||||
if not mod.known_dummies then
|
||||
known_dummies = {}
|
||||
mod.known_dummies = known_dummies
|
||||
end
|
||||
|
||||
live.register_entity(
|
||||
":" .. MODNAME .. ":dummy",
|
||||
{
|
||||
initial_properties = {
|
||||
visual = "mesh",
|
||||
mesh = "mobs_mime_plantlike.obj",
|
||||
textures = { "meh.png" },
|
||||
use_texture_alpha = true,
|
||||
hp_max = 1,
|
||||
physical = true,
|
||||
static_save = true,
|
||||
},
|
||||
on_activate = function(self, staticdata, dtime)
|
||||
local data = minetest.deserialize(staticdata)
|
||||
--tell("activate %s", dump(data))
|
||||
if data then
|
||||
if data.props then
|
||||
self.object:set_properties(data.props)
|
||||
end
|
||||
-- self.nametag = data.nametag or ""
|
||||
-- self.object:set_nametag_attributes({
|
||||
-- text = self.nametag,
|
||||
-- color = "#FFFFFF",
|
||||
-- bgcolor = false,
|
||||
-- })
|
||||
end
|
||||
end,
|
||||
get_staticdata = function(self)
|
||||
local props = self.object:get_properties()
|
||||
local data = {
|
||||
props = props,
|
||||
}
|
||||
return minetest.serialize(data)
|
||||
end,
|
||||
on_step = function(self, dtime)
|
||||
--self.object:set_yaw(self.object:get_yaw() + 0.1)
|
||||
-- local rot = self.object:get_rotation()
|
||||
-- rot.y = rot.y + 0.01
|
||||
-- self.object:set_rotation(rot)
|
||||
self.time = (self.time or 0) + dtime
|
||||
|
||||
local override = self.object:get_bone_override('Head')
|
||||
if not override.rotation then
|
||||
override.rotation = {}
|
||||
end
|
||||
override.rotation.interpolation = dtime*2
|
||||
override.rotation.vec = vector.new(0,0,(math.pi/5)*math.sin(math.pi*self.time*(123/60)))
|
||||
self.object:set_bone_override('Head', override)
|
||||
--error('aaa')
|
||||
end,
|
||||
on_death = function(self, killer)
|
||||
tell("killed")
|
||||
end,
|
||||
}
|
||||
)
|
||||
|
||||
function mod.make_clone(player)
|
||||
local pos = player:get_pos()
|
||||
if pos then
|
||||
local o = core.add_entity(pos, MODNAME .. ":dummy")
|
||||
local props = table.copy(player:get_properties())
|
||||
if (not props.nametag) or props.nametag == "" then
|
||||
props.nametag = player:get_player_name()
|
||||
end
|
||||
o:set_properties(props)
|
||||
|
||||
-- nametag
|
||||
local attrs = table.copy(player:get_nametag_attributes())
|
||||
if (not attrs.text) or attrs.text == "" then
|
||||
attrs.text = player:get_player_name()
|
||||
end
|
||||
o:set_nametag_attributes(attrs)
|
||||
|
||||
-- animation
|
||||
local range, speed, blend, loop = player:get_animation()
|
||||
o:set_animation(range, speed, blend, loop)
|
||||
|
||||
-- yaw
|
||||
o:set_yaw(player:get_look_horizontal())
|
||||
return o
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
live.register_on_leaveplayer(
|
||||
MODNAME .. ":leave",
|
||||
function(player, _timed_out)
|
||||
local o = mod.make_clone(player)
|
||||
local player_name = player:get_player_name()
|
||||
known_dummies[player_name] = o
|
||||
end
|
||||
)
|
||||
|
||||
|
||||
live.register_on_joinplayer(
|
||||
MODNAME .. ":join",
|
||||
function(player, last_login)
|
||||
local player_name = player:get_player_name()
|
||||
local dummy = known_dummies[player_name]
|
||||
if dummy and dummy:is_valid() then
|
||||
local pos = dummy:get_pos()
|
||||
if pos then
|
||||
player:set_pos(pos)
|
||||
end
|
||||
dummy:remove()
|
||||
end
|
||||
end
|
||||
)
|
Loading…
Reference in New Issue
Block a user