Page 1 of 1

Items umbennen

PostPosted: Tue Dec 25, 2018 20:24
by niwla23
Hallo,
ich würde gerne Items umbennen können, wie geht das mit lua, also mit lua programmieren und In game neue Items erstellen.
Ich weiß das es irgendwie geht vom laptops Mod, dort kann man usb sticks umbennen und beschreiben, allerdings ist der Code sehr kompliziert (zu kompliziert für mich :-) ). Weiß jemand wie das geht?
Viele Grüße, Niwla23

Re: Items umbennen

PostPosted: Tue Dec 25, 2018 20:32
by Lejo
Du kannst in der Meta (itemstack:get_meta())
Die description ändern meta:set_string(“description”, “Der neue item Name”)
https://dev.minetest.net/MetaDataRef

Re: Items umbennen

PostPosted: Tue Dec 25, 2018 21:58
by niwla23
Ok, ich kenne mich noch nicht so gut aus mit Lua, das Beispiel aus dem Developer Wiki funktioniert bei mir nicht: "attempt to index local meta (a nil value)" außerdem verstehe ich auch nicht was das Skript macht. Aus dem Minetest Modding Book werde ich auch nicht schlauer. Kann mir jemand ein funktionierendes Beispiel gebe?

Re: Items umbennen

PostPosted: Wed Dec 26, 2018 10:32
by Lejo
Das Beispiel funktioniert deshalb nicht weil du für pos keine Varriable deklariert hast.
Du kannst vor das Beispiel das hier schreiben:
local pos = {x=0, y=0, z=0}
Wenn du jetzt an dieser Position eine Kiste hast funktioniert es.

Re: Items umbennen

PostPosted: Wed Dec 26, 2018 12:07
by DS-minetest
lua_api.txt ist eine besser Quelle: https://github.com/minetest/minetest/blob/a5197eaebc61ac6b555a640f36c0b427faef381d/doc/lua_api.txt#L1767L1787
Zu lua: http://www.lua.org/manual/5.1/
Vergiss nicht, das Umbenennen in einem callback zu machen.
Schlechtes, ungetestetes Beispiel:
Code: Select all
minetest.register_on_punchnode(function(pos, node, puncher, pointed_thing)
   local itemstack = puncher:get_wielded_item()
   local meta = itemstack:get_meta()
   meta:set_string("description", node.name .. " bei " .. minetest.pos_to_string(pos))
   puncher:set_wielded_item(itemstack)
end)

Re: Items umbennen

PostPosted: Wed Dec 26, 2018 22:10
by niwla23
Danke für die Antworten, jetzt hat es funktioniert, ich erstelle gerade ein rename mod, hier eine kleine Vorschau:
Code: Select all
minetest.register_craftitem("rename:seal", {
   description = "A seal",
   inventory_image = "seal.png",
})


minetest.register_privilege("rename", {
   description = "Can rename Items and Nodes",
   give_to_singleplayer = false
})





minetest.register_chatcommand("rename", {
    func = function(name, param)
        minetest.show_formspec(name, "renamer:renameform",
                "size[4,3]" ..
                "label[0,0;Renamer]" ..
                "field[1,1.5;3,1;name;New Node/Item name;]" ..
                "button_exit[1,2;2,1;exit;Rename Now!]")
    end
})


minetest.register_on_player_receive_fields(function(player,
        formname, fields)
    if formname ~= "renamer:renameform" then

        return false
    end


    ----------------------------------------------
    local has, missing = minetest.check_player_privs(player:get_player_name(), {
            rename = true})

    if has then
      local itemstack = player:get_wielded_item()
      local meta = itemstack:get_meta()
      meta:set_string("description", fields.name)
      player:set_wielded_item(itemstack)

      return true
    else
        minetest.chat_send_player(player:get_player_name(), "You have no privilige to rename things :( ")
    end


end)

Viele Grüße, Niwla23