Hallo!
Ich hätte eine Frage zur Modding Api von Minetest.
Und zwar müsste ich für ein Subgame eine Mod programmieren, dass zufällig ein Spieler ausgewählt wird, der dann einen bestimmten Text angezeigt bekommt. Ist das irgendwie möglich in Minetest oder wie könnte ich das Problem anders Lösen?
Spieler zufällig auswählen
- Schrotthandy
- New member
- Posts: 6
- Joined: Tue Feb 28, 2017 15:43
- In-game: Schrotthandy
- Linuxdirk
- Member
- Posts: 3218
- Joined: Wed Sep 17, 2014 11:21
- In-game: Linuxdirk
- Location: Germany
- Contact:
Re: Spieler zufällig auswählen
Du musst alle Spieler in einem Table (z.B. all_players) haben, dann kannst du mit all_players[math.random(#all_players)] aus diesem Table einen zufälligen Spieler auswählen.
Soweit ich das auf die Schnelle sehen kann, gibt es kein minetest.get_all_players() oder so. Du könntest daher beim joinen das Player-Objekt in mit dem namen als ID einen Table packen (nicht vergessen, beim Verlassen den Eintrag anhand der ID wieder löschen)
Soweit ich das auf die Schnelle sehen kann, gibt es kein minetest.get_all_players() oder so. Du könntest daher beim joinen das Player-Objekt in mit dem namen als ID einen Table packen (nicht vergessen, beim Verlassen den Eintrag anhand der ID wieder löschen)
- Schrotthandy
- New member
- Posts: 6
- Joined: Tue Feb 28, 2017 15:43
- In-game: Schrotthandy
Re: Spieler zufällig auswählen
@LinuxDirk Soll ich dann einfach ne globale Table erstellen und dann in der minetest.register_on_joinplayer Funktion minetest.get_player_by_name ausführen, und das Ergebnis als Tabellenspalte" abspeichern? Sorry, ich hab mich noch nicht so lange mit der Minetest Api beschäftigt und Lua beherrsche ich auch nicht im Schlaf :)
- Linuxdirk
- Member
- Posts: 3218
- Joined: Wed Sep 17, 2014 11:21
- In-game: Linuxdirk
- Location: Germany
- Contact:
Re: Spieler zufällig auswählen
Ich hab so was mal selbst in einer Mod benötigt.
Zum Einlesen:
Dann hast du einen Table mit den ganzen Daten zu einem Spieler unter der ID die dem Namen des Spielers entspricht. Und daraus kannst du dann eben mit mymod_playertable[math.random(#mymod_playertable)] einen zufällige Eintrag auswählen, und bekommst die Daten als Table, die du beim eintragen angegeben hast.
Wenn du statt des weiteren Tables einfach nur mymod_playertable[playerName] = player machst, bekommst du als mymod_playertable[NAMEDESSPIELERS] das player-Objekt des angegebenen Spielers zurück (oder beiden fällen nil, wenn der Eintrag nicht existiert).
Zum Löschen:
Lässt sich aber sicher alles noch optimieren.
Zum Einlesen:
Code: Select all
mymod_playertable = {}
minetest.register_on_joinplayer(function(player) -- wenn jemand joint
minetest.after(1, function(player) -- kurz verzögern, wegen eventueller Lags
local playerName = player:get_player_name()
mymod_playertable[playerName] = {
object = player,
foo = 'bar'
-- und so weiter
}
end, player)
end)
Wenn du statt des weiteren Tables einfach nur mymod_playertable[playerName] = player machst, bekommst du als mymod_playertable[NAMEDESSPIELERS] das player-Objekt des angegebenen Spielers zurück (oder beiden fällen nil, wenn der Eintrag nicht existiert).
Zum Löschen:
Code: Select all
minetest.register_on_leaveplayer(function(player)
local playerName = player:get_player_name()
mymod_playertable[playerName] = nil
end)
Re: Spieler zufällig auswählen
Es muss keine extra-Player-Tabelle geführt werden, da Core bereits eine führt. Einen zufälligen Player würde ich wie folgt ermitteln:
Code: Select all
local playerlist = minetest.get_connected_players()
local randomplayer = playerlist[math.random(#playerlist)]
- Linuxdirk
- Member
- Posts: 3218
- Joined: Wed Sep 17, 2014 11:21
- In-game: Linuxdirk
- Location: Germany
- Contact:
Re: Spieler zufällig auswählen
Für diesen Fall reicht das definitiv aus, meine Mod macht noch viel mehr Mist damit, da reichts nicht. Aber gut zu wissen, dass das geht.
- Schrotthandy
- New member
- Posts: 6
- Joined: Tue Feb 28, 2017 15:43
- In-game: Schrotthandy
Re: Spieler zufällig auswählen
Okay Dankeschön :)
ich machs mit connected players :)
ich machs mit connected players :)
Who is online
Users browsing this forum: No registered users and 3 guests