Ergebnis 1 bis 7 von 7

Thema: Türe die nur Admins betreten können

  1. #1
    Avatar von Jack_Miller
    Registriert seit
    20.05.2011
    Ort
    Thüringen

    Standard Türe die nur Admins betreten können

    Servus, ich bin ein blutiger Lua Anfänger und wollte zum Test mal ein erstes Lua Script basteln. Da ich auch sehr gern mappe dachte ich mir für einen eventuell späteren Gamemode mal einen kleinen Adminroom zu bauen dessen Tür nur Admins öffnen können.
    Ich baute also eine Tür in eine kleine Testmap und gab ihr einen Namen. Nun denke ich mir es eventuell so das man erst alle Türen der Map anfragen muss und sie in einem Table anordnet und dann erst auf sie zugreifen kann. Ich bin Ratlos. Hat jemand einen Vorschlag?

    //edit: oder wäre es eine möglichkeit die türe per script in die map zu basteln?

    Ich hab leider keine Ahnung wo ich anfangen soll
    Geändert von Jack_Miller (19.05.2013 um 21:54 Uhr)

  2. #2

    Standard AW: Türe die nur Admins betreten können

    Lua Code:
    1. local admin_ents = {
    2. 						"adminroom1_door1",
    3. 						"adminroom1_door2",
    4. 						"adminroom2"
    5. 					}
    6. --Table mit allen Admin Entities, kann auch nur ein einziger Wert sein. Alle Werte müssen durch ein Komma getrennt sein, d.h. nach dem letzten Wert kommt keines hin.
    7.  
    8. hook.Add( "PlayerUse", "AdminOnlyUse", 
    9. 	function( ply, ent )
    10. 		if table.HasValue( admin_ents, ent:GetName() ) then --Die beste Methode, wenn man mehr als nur ein Admin-Ent hat
    11. 			if ply:IsAdmin() then --Ist der Spieler ein Admin/Super Admin, oder gehört er einer anderen Gruppe an?
    12. 				return true --Er darf die Tür öffnen/benutzen
    13. 			else
    14. 				return false --Er darf die Tür nicht öffnen/benutzen
    15. 			end
    16. 		end
    17. 	end
    18. )
    19.  
    20. --[[An die Leute die sich möglicherweise fragen, warum ich nicht beide Checks in eine if-Clause mache, also etwa so:
    21. 		if table.HasValue( admin_ents, ent:GetName() ) and ply:IsAdmin() then
    22. 			return true
    23. 		else
    24. 			return false
    25. 		end
    26. 	Würde man das machen, dann könnten normale Spieler gar keine Entities mehr nutzen, und Admins nur noch solche, die einen Namen haben, welcher in der "admin_ents"-Table enthalten ist. Hat also alles einen Sinn.]]

    Hab's zwar nicht getestet, sollte aber funktionieren. Mit dem Skript könntest du übrigens auch hundsgewöhnliche GMod-Buttons in die Liste aufnehmenm, sofern du ihnen 'nen Namen gibst und diesen auch in der Table ergänzt.
    Geändert von RP-01 (20.05.2013 um 16:25 Uhr)

  3. #3
    Avatar von Jack_Miller
    Registriert seit
    20.05.2011
    Ort
    Thüringen

    Standard AW: Türe die nur Admins betreten können

    Danke dir. Es geht
    Also kann man das auch beliebig an anderen Objekten anwenden, aber man braucht eben diesen Table. Ist das richtig?

  4. #4

    Standard AW: Türe die nur Admins betreten können

    Ja. Kann man mit beliebig anderen Objekten machen, sofern du denen eben einen Namen gibst, und diesen dann auch in die Table einträgst.

    Habe den Code oben mal dementsprechend angepasst.

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

    Standard AW: Türe die nur Admins betreten können

    @RP-01
    hy ich habe mir mal erlaubt dein scriptbeispiel zu nutzen um eine player.GetByUserID() function zu machen...
    nur leider übergibt sie immer false, obwohl laut debuginfos die ply:UserID und UserID die übergeben wird übereinstimmen.
    ich hatte schon alle variablen umbenannt... daran liegt es also nicht aber eventuell unterscheidet gmod lua zwischen string und int - zahlen,
    denn ich weiß nicht in welchem format sie wo ausgegeben werden.

    die function in der root/init.lua
    Lua Code:
    1. function player.GetByUserID( UserID )
    2. 	allPlayers = player.GetAll()
    3. 	for k, ply in pairs ( allPlayers ) do
    4. 		if ply:IsValid() then
    5. 			print( ply:Nick() )
    6. 			print( ply:UserID() )
    7. 			pUID = ply:UserID()
    8. 			if ( pUID == UserID ) then return ply end
    9. 		end
    10. 	end
    11. 	return false
    12. end

    die aufruffunktion in einer anderen init.lua
    Lua Code:
    1. function GibPlayerGeld( ply, command, args) // addMoney 2 100
    2. 	if args then
    3. 		iPlayer = player.GetByUserID(args[1])
    4. 		if iPlayer then
    5. 			print("Plyername = "..iPlayer:Nick())
    6. 			print("PlayerSteamID = "..iPlayer:SteamID())
    7. 			print("PlayerUniqueID = "..iPlayer:UniqueID())
    8. 			print("PlayerUserID = "..iPlayer:UserID())
    9.  
    10. 			if iPlayer:IsValid() then
    11. 				iPlayer:SetNWInt( "Guthaben", iPlayer:GetNWInt("Guthaben") + args[2] )
    12. 			end
    13. 		else
    14. 			print("Spieler existiert nicht.")
    15. 		end
    16. 	else
    17. 		print("Falsche Benutzung")
    18. 	end
    19. end
    20. concommand.Add( "addPlayerMoney", GibPlayerGeld )

    ich würde mich wirklich freuen wenn ihr mir sagen könnt was ich da immer verhaue
    Zitat Zitat von pacmcmax Beitrag anzeigen
    ich kann mich nicht in kurzen worten zusammen fassen

  6. #6

    Standard AW: Türe die nur Admins betreten können

    Also bei mir geht die Funktion, sofern ich die richtige UserID eingebe. Komischerweise ist die bei mir stets 2, man beachte die unterstrichenen Zeilen in diesem Bild:

    Abgesehen davon, warum nutzt du nicht einfach player.GetByID(<ID>) (Eintrag in der alten Wiki)?

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

    Standard AW: Türe die nur Admins betreten können

    Anhang 4192

    ich konnte das problem lösen...
    die args werden doch als string von der console eingelesen... daher entspricht eine ply:UserID() nicht dem übermittelten string mit einer zahl...

    daher musste ich nur die args[1] mit tonumber konvertieren und schon hat alles geklapt .D

    zu deinem vorstalg...
    die methode mit player.GetByUniqueID benötigt eine zahl die so aussieht: 22231 irgendwas... das ist zu lang und müsste extra per script ausgegeben werden.
    die getByID ist dynamisch und damit kann man sie nur schlecht verwenden...
    damit waren diese methoden für mich aus dem spiel

    Danke für deine Hilfe
    Geändert von Mentos (28.05.2013 um 15:46 Uhr)
    Zitat Zitat von pacmcmax Beitrag anzeigen
    ich kann mich nicht in kurzen worten zusammen fassen

Ähnliche Themen

  1. Betreten eines Bereichs als Auslöser
    Von Eddman im Forum Lua
    Antworten: 32
    Letzter Beitrag: 04.05.2013, 14:50
  2. Nicht-Admins können Leute mit der Physgun nehmen
    Von Raiden im Forum Hilfe & Support
    Antworten: 15
    Letzter Beitrag: 29.04.2009, 22:02
  3. Regeln Akzeptieren beim Server betreten.
    Von computer22 im Forum Wünsche
    Antworten: 19
    Letzter Beitrag: 01.07.2008, 13:34
  4. Antworten: 3
    Letzter Beitrag: 31.05.2006, 20:07
  5. Trick um wieder Mappen zu können!
    Von €r!k im Forum Mapping
    Antworten: 1
    Letzter Beitrag: 02.01.2006, 21:37

Berechtigungen

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