Ergebnis 1 bis 9 von 9

Thema: Table - attempt to index a nil value

  1. #1
    Avatar von DasNeo
    Registriert seit
    04.08.2013
    Ort
    Hessen

    Standard Table - attempt to index a nil value

    Hallöchen,

    kommen wir direkt zu meinem Problem:

    Definition:
    Code:
    player = {}
    Er printet nie "doing stuff". Wie bring ich ihn dazu, dass er alle durch geht, bis er ein leeres gefunden hat?
    Code:
    function GM:PlayerAuthed( ply, steamID, uniqueID )
    	i = 0
    	while not player[i] do
    		print("doing stuff")
    		player[i].steam = steamID
    		player[i].skin = 0
    		i = i+1
    		break
    	end
    end

    Woran liegt das? Was mache ich falsch?

    Danke im Voraus!
    Geändert von DasNeo (15.06.2014 um 09:02 Uhr)

  2. #2

    Standard AW: Table - attempt to index a nil value

    Ich habe ewig nix mehr in LUA gemacht, aber das sieht mir... falsch aus. o_O
    Les dir mal die Seite hier durch:
    http://maurits.tv/data/garrysmod/wik...index327b.html

    Besonders interessant dürfte folgender Part sein:
    PHP-Code:
    mytable = {"one""two""three"}
    for 
    iv in ipairs(mytable) do
        print(
    iv)
    end 
    Website: monky-town.de

    WildStar
    Server: Kazor
    Seite: Verbannte
    Char: Monkii (Arkanschütze)

  3. #3
    Avatar von DasNeo
    Registriert seit
    04.08.2013
    Ort
    Hessen

    Standard AW: Table - attempt to index a nil value

    Hallo,

    danke erstmal für deine Antwort. - Jetzt, nach etwa 2 Stunden rumschrauben, komme ich gar nicht mehr darauf klar.

    Code:
    function GM:PlayerAuthed( ply, steamID, uniqueID )
    	int = 0 
    	for i,v in ipairs(player) do
    		if player[int] == nil then break end
    		int = i+1
    	end
    	player[int].steam = steamID
    	player[int].skin = 0
    end
    Er bringt den Error attempt to index a nil value raus. bei dem player[int].steam...

    Muss ich, bevor ich das setzen kann, dort noch was machen, da die Definition davon ja einfach nur player = {} ist?

    Gruß,
    Neo. c:

  4. #4
    Avatar von DypoX
    Registriert seit
    26.03.2014
    Ort
    Köln

    Standard AW: Table - attempt to index a nil value

    Was genau hast du denn vor? Möchtest du wenn ein Spieler connected, dass dieser in die Tabelle geschrieben wird?

    Mit folgender Funktion bekommst du auch alle Spieler:
    http://wiki.garrysmod.com/page/player/GetAll

    Grüße
    DypoX
    Geändert von DypoX (16.06.2014 um 11:28 Uhr)

  5. #5

    Standard AW: Table - attempt to index a nil value

    Du hast auch die Funktion etwas missverstanden.
    Die ipairs-Funktion bricht die Tabelle automatisch in Key und Value (also den Wert) auf und durchläuft die Tabelle automatisch. In Verbindung mit der "GetAll"-Funktion müsste das ungefähr so aussehen:
    Lua Code:
    1. function GM:PlayerAuthed( ply, steamID, uniqueID )
    2. 	for key, value in ipairs(player.GetAll()) do
    3. 		// Hier kannst du nun etwas mit "value" machen. Value ist nun vom Typ "Player", also Spieler.
    4. 	end
    5. end

    Ich habe mir noch einmal dein initiales Problem angeschaut... Ich bin mir noch nicht ganz sicher was du versuchst. Willst du Spieler, die sich Authentifiziert haben, in eine Tabelle eintragen?
    Die Table, die du erstellst, ist ja erst einmal leer. Danach gibt es keine "Leeren Blöcke", denn die Table-Größe beträgt 0 (null).
    Also kannst du quasi "Blind" einfach neue Spieler in die Table packen. (http://wiki.garrysmod.com/page/table/Add)

    Ich denke einfacher wäre es, wenn du einmal schreibst was genau du eigentlich vorhast.
    Website: monky-town.de

    WildStar
    Server: Kazor
    Seite: Verbannte
    Char: Monkii (Arkanschütze)

  6. #6
    Avatar von Mentos
    Registriert seit
    08.09.2007
    Ort
    München

    Standard AW: Table - attempt to index a nil value

    Das meine ich auch... Wir müssen erstmal wissen was du machen möchtest...

    Im ersten Post sieht es so aus, alls würdest du den Spieler, der grade seinen Auth bekommen hat in das Player table speichern wollen.
    Vom Prinzip ist die Idee ok, solange du nicht versuchst spezielle Daten vom Spieler zu speichern. Dieser hat zum aktuellen Zeitpunkt (hook PlayerAuthed) wenn du pech hast, noch garkeine statischen Daten.
    Zudem fehlte deinem Code der hook.
    hook.add("PlayerAuthed", "MyBadSpelling", meinefunktionsolltenichtsoheißenwiederhook)

    Gruß
    Zitat Zitat von pacmcmax Beitrag anzeigen
    ich kann mich nicht in kurzen worten zusammen fassen

  7. #7
    Avatar von DasNeo
    Registriert seit
    04.08.2013
    Ort
    Hessen

    Standard AW: Table - attempt to index a nil value

    Hallo,

    danke für eure Antworten.

    Was ich versuche zu machen, ist, wie ihr schon richtig bemerkt habt, jeden Spieler, welcher auf den Server connected, in eine Tabelle zu schmeißen und ihm dort die SteamID und den Skin zu speichern, damit das am Ende im Prinzip so aussieht:

    player[0].steam = STEAMIDVONSPIELER0
    player[0].skin = 1

    player[1].steam = STEAMIDVONSPIELER1
    player[1].skin = 1

    Und so weiter..


    Diese GetAll Funktion bringt mich ja nicht viel weiter, da ich doch nur den Spieler in die Liste eintrage, der gerade drauf connected.
    Sprich, wenn er sich authed hat, dann will ich die ganze player[] Tabelle durch gehen, bis er was findet, das noch nicht belegt ist.


    "Dieser hat zum aktuellen Zeitpunkt (hook PlayerAuthed) wenn du pech hast, noch garkeine statischen Daten."
    Wieso das denn? - Bei PlayerAuthed kann ich doch die SteamID und die UniqueID benutzen, oder nicht?

    Das mit dem Add würde, wenn ich das richtig verstehe, auch nicht wirklich weiter helfen. Da ich dort ja nur Variablen hinzufügen kann, allerdings ja keine neue "Zeile" beginnen, oder?

    Hmm, wie sieht das aus, wenn player[0].steam etc. leer ist? Dann ist es doch nil, oder nicht? Müsste ich dann nicht einfach alle durchgehen, bis er bei irgendwas nil findet?

    Gruß,
    Neo. c:

  8. #8

    Standard AW: Table - attempt to index a nil value

    Jetzt versteh ich was du möchtest.
    Also zu aller erst musst du ein Verständnis einer "Table" in LUA etwas verbessern. Ein Table ist keine Excel-Tabelle mit 65536 Feldern und in einer Spalte steht dann irgendwann "nil". Die Table ist immer so groß wie Daten vorhanden sind.
    Das ganze müsste dann in etwa so aussehen:
    Lua Code:
    1. players = {}
    2.  
    3. function GM:PlayerAuthed( ply, steamID, uniqueID )
    4. 	// Alle Player in der Tabelle Players durchgehen
    5. 	for key, value in ipairs(players) do
    6. 		// Wenn ein Spieler mit entsprechender ID gefunden wurde...
    7. 		if (value.steamid == steamID) then
    8. 			// ...überprüfen ob ein Skin gesetzt ist und ggfs. setzen
    9. 			if (not value.skin) then
    10. 				value.skin = irgendeinstandardskin	
    11. 			end
    12.  
    13. 			// Vermerken das ein passender Spieler gefunden wurde
    14. 			player_gefunden = true;
    15. 			break;
    16. 		end
    17. 	end
    18.  
    19. 	// Wurde kein Spieler in der Table gefunden, den Spieler in die Table einfügen
    20. 	if (not player_gefunden) then
    21. 		ply.skin = irgendeinstandardskin
    22. 		table.add( players, { ply } )
    23. 	end
    24. end

    So in etwas sollte es dann wohl aussehen.
    Geändert von monky2k6 (16.06.2014 um 14:09 Uhr)
    Website: monky-town.de

    WildStar
    Server: Kazor
    Seite: Verbannte
    Char: Monkii (Arkanschütze)

  9. #9

    Standard AW: Table - attempt to index a nil value

    Hi,

    Wenn du den table der Spieler haben möchtest, dann benutz einfach player.GetAll() oder in deinem Fall bekommst du das Object "ply" übergeben mit dem du arbeiten kannst.
    Der hook "PlayerAuthed" wird für jeden einzeln aufgerufen, daher brauchst du dort nicht alle Spieler abzufragen

    Lua Code:
    1.  
    2. function GM:PlayerAuthed( ply, steamID, uniqueID )
    3.  
    4. --Beispiel
    5.    if( ply:GetName() == "Peter Lustig" ) then
    6.       --mach was
    7.    end
    8.  
    9.  
    10. end
    Geändert von ALL YOU CAN EAT (06.07.2014 um 22:07 Uhr)

Ähnliche Themen

  1. Attempt to index global 'self'
    Von DasNeo im Forum Lua
    Antworten: 7
    Letzter Beitrag: 13.08.2013, 10:48
  2. attempt to index a nil value ?
    Von Shizzo im Forum Hilfe & Support
    Antworten: 4
    Letzter Beitrag: 04.06.2009, 12:37
  3. Antworten: 4
    Letzter Beitrag: 29.05.2009, 22:17
  4. Antworten: 3
    Letzter Beitrag: 29.08.2008, 16:46
  5. Failed to lock index buffer ....
    Von PsY im Forum Hilfe & Support
    Antworten: 0
    Letzter Beitrag: 02.04.2006, 18:51

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •