HUD get connected players länge

German
User avatar
niwla23
Member
 
Posts: 98
Joined: Sat Nov 17, 2018 17:40
In-game: Niwla

HUD get connected players länge

by niwla23 » Sat Dec 01, 2018 20:15

Hallo,
ich bin gerade dabei einen Kasten zu schreiben (in Lua), der Infos über den Server anzeigt. Ich möchte gerne anzeigen wie viele Spieler online sind. dazu habe ich local b = minetest.get_connected_players oben eingefügt und weiter unten in der HUD definition text = #b, geschrieben um die Länge der Liste und damit die Anzahl der Spieler zu bekommen.
Hier der Code:
Code: Select all
local players_hud_id = {}
local b = minetest.get_connected_players


minetest.register_on_joinplayer(function(player)

   local player_name = player:get_player_name()

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "image",
     position  = {x = 0.97, y = 0.5},
     offset    = {x = -220, y = 0},
     text      = "anzeige.png",
     scale     = { x = 1, y = 1},
     alignment = { x = 1, y = 0 },
   })

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.35},
     offset    = {x = -220, y = 0},
     text      = "MT Citybuild",
     scale     = { x = 100, y = 100},
     alignment = { x = 3, y = 3 },
     number    = 0xFFFFFF,
   })

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.4},
     offset    = {x = -220, y = 0},
     text      = #b,
     scale     = { x = 100, y = 100},
     alignment = { x = 1, y = 1 },
     number    = 0xFFFFFF,
   })
end)

Aber das will nicht funktionieren:
minetestausgabe.PNG
(39.53 KiB) Not downloaded yet

Ich verstehe das nicht, ist es doch keine Liste? Ich hoffe jemand weiß, was das Problem ist.
 

User avatar
Krock
Developer
 
Posts: 4347
Joined: Thu Oct 03, 2013 07:48
Location: Switzerland
GitHub: SmallJoker

Re: HUD get connected players länge

by Krock » Sun Dec 02, 2018 15:02

Du verweist mit "b" zur Funktion "minetest.get_connected_players". Um die Rückgabewerte der Funktion zu erhalten (Spielerliste), musst du folglich die Funktion aufrufen.
Code: Select all
-- Entweder so:
     text      = #b(),
-- Oder mit dem ursprünglichen Funktionsnamen direkt:
     text      = #minetest.get_connected_players(),


PS: Versuch' nicht, "minetest.get_connected_players()" im Hauptcode aufzurufen -> Verweis zu Erklärung viewtopic.php?p=336701#p336701
>> Mod Search Engine << - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>
 

User avatar
niwla23
Member
 
Posts: 98
Joined: Sat Nov 17, 2018 17:40
In-game: Niwla

Re: HUD get connected players länge

by niwla23 » Sun Dec 02, 2018 16:38

Danke!
Ich kriege das mit dem automatischem Update aber nicht hin. Im Minetest Modding book steht da dieser Befehl. Aber ich weiß nicht was bei places,text und places_text ersetzt ewerden muss.(Was ist die ID?)
Code: Select all
local players_hud_id = {}
local b = minetest.get_connected_players


minetest.register_on_joinplayer(function(player)

   local player_name = player:get_player_name()

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "image",
     position  = {x = 0.97, y = 0.5},
     offset    = {x = -220, y = 0},
     text      = "anzeige.png",
     scale     = { x = 1, y = 1},
     alignment = { x = 1, y = 0 },
   })

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.35},
     offset    = {x = -220, y = 0},
     text      = "MT Citybuild",
     scale     = { x = 100, y = 100},
     alignment = { x = 3, y = 3 },
     number    = 0xFFFFFF,
   })

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.4},
     offset    = {x = -220, y = 0},
     text      = #b(),
     scale     = { x = 100, y = 100},
     alignment = { x = 1, y = 1 },
     number    = 0xFFFFFF,
   })


   minetest.register_on_joinplayer(
   player:hud_change(ids["places"], "text", places_text)
 )

 
end)
 

User avatar
niwla23
Member
 
Posts: 98
Joined: Sat Nov 17, 2018 17:40
In-game: Niwla

Re: HUD get connected players länge

by niwla23 » Mon Dec 10, 2018 18:12

Also hier jetzt nochmal eine neue Version die immer noch nicht funktioniert:
Code: Select all
local players_hud_id = {}
local b = minetest.get_connected_players


minetest.register_on_joinplayer(function(player)

   local player_name = player:get_player_name()

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "image",
     position  = {x = 0.97, y = 0.5},
     offset    = {x = -220, y = 0},
     text      = "anzeige.png",
     scale     = { x = 1, y = 1},
     alignment = { x = 1, y = 0 },
   })

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.35},
     offset    = {x = -220, y = 0},
     text      = "MT Citybuild",
     scale     = { x = 100, y = 100},
     alignment = { x = 3, y = 3 },
     number    = 0xFFFFFF,
   })

   local online = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.4},
     offset    = {x = -220, y = 0},
     text      = #b(),
     scale     = { x = 100, y = 100},
     alignment = { x = 1, y = 1 },
     number    = 0xFFFFFF,
   })


   minetest.register_on_joinplayer(
   player:hud_change(online, "text", #b())

)
end)

Hier die Fehlermeldung:
minetestfehlerhudboolean.PNG
(27.47 KiB) Not downloaded yet

PS: Die fehlermeldung taucht erst auf wenn ein Client joint.
Ich hoffe jemand versteht den fehler.
 

User avatar
Krock
Developer
 
Posts: 4347
Joined: Thu Oct 03, 2013 07:48
Location: Switzerland
GitHub: SmallJoker

Re: HUD get connected players länge

by Krock » Mon Dec 10, 2018 19:11

Protip: In deiner `debug.txt` Datei (ganz unten) werden die Fehler detailliert aufgezeichnet. Es wird dir in der Zukunft sehr helfen, das eigentliche Problem zu finden.

Fehler in Zeile 39-42.
1) Du versuchst ein Callback in einem Callback zu registrieren. NOT LIKE THIS. Einfach "minetest.register_on_joinplayer(" und die dazugehörige Klammer unterhalb entfernen
2) Zeile 39: "minetest.register_on_joinplayer" erwartet eine Funktion als erstes Argument. Vergleich' es mal mit Zeile 5 bzw. 43.

Ich glaube, du wolltest stattdessen "minetest.after" verwenden, um das HUD nach einigen Sekunden aktualisieren zu lassen.
>> Mod Search Engine << - Mods by Krock - DuckDuckGo mod search bang: !mtmod <keyword here>
 

User avatar
niwla23
Member
 
Posts: 98
Joined: Sat Nov 17, 2018 17:40
In-game: Niwla

Re: HUD get connected players länge

by niwla23 » Tue Dec 11, 2018 15:38

Danke, auf minetest.after war ich nicht gekommen, aber ist irgendwie logisch sonst wird es ja nur bei einem Spieler angezeigt.
Ich habe den Code nun nochmal geändert:
Code: Select all

local players_hud_id = {}
local b = minetest.get_connected_players


minetest.register_on_joinplayer(function(player)

  player_name = player:get_player_name()

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "image",
     position  = {x = 0.97, y = 0.5},
     offset    = {x = -220, y = 0},
     text      = "anzeige.png",
     scale     = { x = 1, y = 1},
     alignment = { x = 1, y = 0 },
   })

   players_hud_id[player_name] = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.35},
     offset    = {x = -220, y = 0},
     text      = "MT Citybuild",
     scale     = { x = 100, y = 100},
     alignment = { x = 3, y = 3 },
     number    = 0xFFFFFF,
   })

   local online = player:hud_add({
     hud_elem_type = "text",
     position  = {x = 0.97, y = 0.4},
     offset    = {x = -220, y = 0},
     text      = #b(),
     scale     = { x = 100, y = 100},
     alignment = { x = 1, y = 1 },
     number    = 0xFFFFFF,
   })
end)


local player = player_name
minetest.after(10, function(player)

    player:hud_change(online, "text", #b())
end)


So kommt aber diese Meldung:
.__ __ __
_____ |__| ____ _____/ |_ ____ _______/ |_
/ \| |/ \_/ __ \ __\/ __ \ / ___/\ __\
| Y Y \ | | \ ___/| | \ ___/ \___ \ | |
|__|_| /__|___| /\___ >__| \___ >____ > |__|
\/ \/ \/ \/ \/
2018-12-11 16:34:24: ACTION[Main]: World at [C:\Program Files\Minetest\minetest-0.4.17.1-win64\bin\..\worlds\virusbanwelt]
2018-12-11 16:34:24: ACTION[Main]: Server for gameid="minetest" listening on 0.0.0.0:30000.
2018-12-11 16:34:27: ACTION[Server]: Niwla [127.0.0.1] joins game.
2018-12-11 16:34:27: ACTION[Server]: Niwla joins game. List of players: Niwla
2018-12-11 16:34:27: WARNING[Server]: Assignment to undeclared global "player_name" inside a function at ...inetest\minetest-0.4.17.1-win64\bin\..\mods\hud\init.lua:8.
2018-12-11 16:34:33: ACTION[Server]: Niwla places node default:cobble at (41,9,-103)
2018-12-11 16:34:33: ACTION[Server]: Niwla places node default:cobble at (50,9,-114)
2018-12-11 16:34:34: ERROR[Main]: ServerError: AsyncErr: environment_Step: Runtime error from mod 'hud' in callback environment_Step(): ...inetest\minetest-0.4.17.1-win64\bin\..\mods\hud\init.lua:44: attempt to index local 'player' (a nil value)
2018-12-11 16:34:34: ERROR[Main]: stack traceback:
2018-12-11 16:34:34: ERROR[Main]: ...inetest\minetest-0.4.17.1-win64\bin\..\mods\hud\init.lua:44: in function 'func'
2018-12-11 16:34:34: ERROR[Main]: ...\minetest-0.4.17.1-win64\bin\..\builtin\common\after.lua:18: in function <...\minetest-0.4.17.1-win64\bin\..\builtin\common\after.lua:4>
2018-12-11 16:34:34: ERROR[Main]: ...minetest-0.4.17.1-win64\bin\..\builtin\game\register.lua:420: in function <...minetest-0.4.17.1-win64\bin\..\builtin\game\register.lua:400>
2018-12-11 16:34:34: ERROR[Main]: stack traceback:
2018-12-11 16:34:34: ACTION[Server]: Niwla leaves game. List of players:
 


Return to Deutsch



Who is online

Users browsing this forum: No registered users and 0 guests