minetest.override_item("default:sword_mese", {
description = "Mese Sword",
inventory_image = "default_tool_mesesword.png",
tool_capabilities = {
full_punch_interval = 0.1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=7},
},
sound = {breaks = "default_tool_breaks"},
on_place = function(itemstack, placer, pointed_thing)
my_players[placer:get_player_name()] = true
end
minetest.register_globalstep(function(dtime)
for name, what in pairs(my_players) do
local player = minetest.get_player_by_name(name)
if player then
my_players[name] = false -- player left
else
if !player:get_player_control().RMB then
minetest.chat_send_all(math.random())
my_players[name] = false
end
end
end
end)
})
2019-05-30 15:08:34: ERROR[Main]: ModError: Failed to load and run script from D:\Joseph\Minetest\minetest-5.1.0-38b94f2-win64\bin\..\mods\pvpengine\sword_override\init.lua:
2019-05-30 15:08:34: ERROR[Main]: ...94f2-win64\bin\..\mods\pvpengine\sword_override\init.lua:38: '}' expected (to close '{' at line 23) near 'minetest'
I have tried to fix this error but I don't know lua that well and I'm probably missing something really simple. Can someone help?
The line numbers in the error code are off because I didn't paste the entire init.lua. The entire file can be found here: https://pastebin.com/1QFNACKh
ah... shouldn't !player:get_player_control().RMB be not player:get_player_control().RMB? It's been a while, but I don't think lua uses ! as an operator like many other languages do.
I've managed to get something working. I used the player api. Not sure where to go from here. Maybe you can work from here. (I've removed some of your code so don't replace your own with this one):
minetest.override_item("default:sword_mese", {
description = "Mese Sword",
inventory_image = "default_tool_mesesword.png",
tool_capabilities = {
full_punch_interval = 0.1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=7},
},
})
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
if player then
-- ???
else
if not player:get_player_control().RMB then
minetest.chat_send_all(math.random())
players[name] = false
end
end
end
end)
An0n3m0us wrote:I've managed to get something working. I used the player api. Not sure where to go from here. Maybe you can work from here. (I've removed some of your code so don't replace your own with this one):
minetest.override_item("default:sword_mese", {
description = "Mese Sword",
inventory_image = "default_tool_mesesword.png",
tool_capabilities = {
full_punch_interval = 0.1,
max_drop_level=1,
groupcaps={
snappy={times={[1]=2.0, [2]=1.00, [3]=0.35}, uses=30, maxlevel=3},
},
damage_groups = {fleshy=7},
},
})
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
if player then
-- ???
else
if not player:get_player_control().RMB then
minetest.chat_send_all(math.random())
players[name] = false
end
end
end
end)
Undeclared global variable "itemstack" accessed at ...94f2-win64\bin\..\mods\pvpengine\sword_override\init.lua:40
2019-05-30 19:04:15: ERROR[Main]: ServerError: AsyncErr: environment_Step: Runtime error from mod 'sword_override' in callback environment_Step(): ...94f2-win64\bin\..\mods\pvpengine\sword_override\init.lua:40: attempt to index global 'itemstack' (a nil value)
minetest.register_globalstep(function(itemstack, dtime)
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
if player then
itemstack:take_item(); return ("default:sword_diamond")
else
if not player:get_player_control().RMB then
minetest.chat_send_all(math.random())
players[name] = false
end
end
end
end)
function test(player)
local inv = player:get_inventory()
local stack = ItemStack("default:sword_mese")
inv:add_item("main", stack)
print(inv)
end
minetest.register_globalstep(function(itemstack, dtime)
x = minetest.register_on_joinplayer(test)
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local inv = player:get_inventory()
if player then
print('test')
else
if not player:get_player_control().RMB then
minetest.chat_send_all(math.random())
players[name] = false
end
end
end
end)
x = 0
function test(player)
local inv = player:get_inventory()
local stack = ItemStack("default:sword_diamond")
inv:add_item("main", stack)
x = x + 1
end
minetest.register_globalstep(function(itemstack, dtime)
for _, player in pairs(minetest.get_connected_players()) do
local name = player:get_player_name()
local inv = player:get_inventory()
local controls = player:get_player_control()
if player:get_player_control().RMB and x == 0 then
test(player)
end
end
end)
Here's the process:
1. Join the game
2. Press right click (diamond sword added)
3. Press right click again (nothing happens)