Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Heal-Script funktioniert nicht/Hilfe und Erklärungen

  1. #1

    Standard Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Hallo Leute,

    ich möchte einmal vorweg sagen: Ich kann VB, PHP, MySQL, HTML, CSS und für Gmod ein bisschen E2. Jetzt würde ich noch gerne Lua lernen und mit einem kleinem Script anfangen. Folgendes habe ich zusammengeschrieben:
    Code:
    function healPlyer(ply, txt, args)
    
    	if string.find(txt, "!giveHP") == 1 then
    		ply:ChatPrint("Du hast jetzt 10000 HP")
    		ply:SetHealth(10000)
    			
    	end
    end
    hook.Add("PlayerSay", "healPlayerHook", healPlayer)
    Ich habe zu dem Script jetzt ein paar Fragen, wäre schön wenn ihr mir die beantworten könntet:

    1. Bei der function stehen in den Klammern Variablen, sind die festgelegt oder ist das immer so, 1. der Playername, 2. das was er schreibt und 3. alles was sonst noch irgendwie folgt?
    2. Gibt es eine Seite wo ich alle Klassen (z.B. SetHealth) finden kann? Die hier im Forum bei den angepinnten Themen geht nicht. Zwar habe ich was im deutschen Wiki gefunden, aber so eine Liste noch nicht.
    3. Muss der hook immer am Ende stehen? Wieso?
    4. Wo muss ich so ein Script jetzt reinlegen um es im Multiplayer (also über meinen PC als Server mit freunden) benutzen zu können? Den Addon-Ordner oder lua?

    Achja und 5. kann mir jemand sagen warum das ganze nicht funktioniert?

    Ich wäre euch super dankbar wenn ihr mir helfen könntet

    Grüße
    Spike

  2. #2

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Ja es ist ein Callback von dem PlayerSay hook (liest den chat aus)

    man kann die variablen ply txt und args austauschen, nur die reihenfolge bleibt gleich
    in dem fall wird die funktion aufgerufen sobalt einer was in den chat schreibt

    ply - ply ist ein entity, und zwar der Spieler der das geschrieben hat
    txt - txt ist der Komplette text! args sind nur die wörter (getrennt durch leerzeichen)
    -dafuq args irritierte mich, public ist true wenn hauptchat, false wenn teamchat
    Geändert von gamerpaddy (14.05.2012 um 20:28 Uhr)

  3. #3

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    zu 1: Die kannst du nennen wie du willst. Aber es stimmt, dass die erste Variable immer für den betreffenden Player und die zweite für den betroffenen Chattext steht. Die dritte Variable allerdings gibt, in Form eines Booleans, aus, ob der Text ein öffentlicher, oder Teaminterner Chattext ist. Siehe Gamemode.PlayerSay
    Übrigens: Wenn du z.B. nur die 1. oder 1. und 2. Variable benötigst, kannst du die 2. und 3. bzw. die 3. auch weglassen.

    zu 2: Da die offiziele Wiki im Moment "überarbeitet" wird, nutze folgende Ersatzlinks in der Zeit: GMod Wiki Overview, Lua Functions, Lua Hooks

    zu 3: Nein, muss er nicht. Es kann auch wie folgt aussehen:
    Lua Code:
    1. hook.Add( "PlayerSay", "healPlayerHook", function( ply, txt, public )
    2. 	if string.sub(txt, 1, 7) == "!giveHP" then
    3. 		ply:ChatPrint("Du hast jetzt 10000 HP")
    4. 		ply:SetHealth(10000)
    5. 	end
    6. end )
    (Habe in dem Code string.find, durch das entsprechende Equivalent der string.sub-Funktion ausgetauscht. Selbes Ergebnis, bloß mehr toll.)

    zu 4: Du kannst den Script entweder in den "lua/autorun/server" Ordner legen, oder in entsprechendem AddOn-Format, im AddOn-Ordner platzieren.

    Zu deinem Problem: Die Funktion, die im Hook aufgerufen werden soll, hat einen anderen Namen als die Funktion die oben tatsächlich steht. (healPlayer != healPlyer)


    @[FX]CJ[CSR]:
    In dem Hook gibt es aber keine Arguments-Table.
    Geändert von RP-01 (14.05.2012 um 20:24 Uhr)

  4. #4

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Okay, danke für die Antworten. Folgendermaßen habe ich das jetzt umfunktioniert:

    Code:
    function healPlayer(ply, txt)
    
    	commands = string.Explode(" ")
    	if string.lower(commands[1,string]) == "!givehp" then
    	
    		if ply:isAdmin then
    			
    			playerTarget = commands[2,string]
    			
    			if playerTarget:isConnected then
    				playerTarget:ChatPrint("Du hast jetzt 10.000 HP!")
    				playerTarget:SetHealth(10000)
    			
    			else
    				ply.ChatPrint("Spieler nicht gefunden!")
    				
    			end
    
    		else
    			ply:ChatPrint("Du bist kein Admin")
    			
    		end
    			
    	end
    end
    hook.Add("PlayerSay", "healPlayerHook", healPlayer)
    Ich werde jetzt testen ob er so funktioniert, habe aber noch eine Frage zum Debuggen: Kann ich das Script im Server reloaden? Sonst muss ich immer eine Map starten, wenn es nicht geht wieder dicht machen, dann wieder starten und das laden dauert immer so lange. Gibt es da eine Möglichkeit?

    Achso, nochwas: Wie kann ich verhindern das der Command im Chat für alle zum Lesen steht? Mit return ""?

    Vielen dank für die Links! Also gibt mir die 3. Variable nur boolisch zurück welcher Chat benutzt wurde?

  5. #5

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Zitat Zitat von spike Beitrag anzeigen
    Okay, danke für die Antworten. Folgendermaßen habe ich das jetzt umfunktioniert:
    <code>
    Der Code wird nicht funktionieren, sag ich dir jetzt schon.

    Ich werde jetzt testen ob er so funktioniert, habe aber noch eine Frage zum Debuggen: Kann ich das Script im Server reloaden? Sonst muss ich immer eine Map starten, wenn es nicht geht wieder dicht machen, dann wieder starten und das laden dauert immer so lange. Gibt es da eine Möglichkeit?
    Ja, man kann den script reloaden: lua_openscript <pfad zum script>/datei.lua

    Achso, nochwas: Wie kann ich verhindern das der Command im Chat für alle zum Lesen steht? Mit return ""?
    Indeed, einfach "return" oder "return nil" an's Ende.

    Vielen dank für die Links! Also gibt mir die 3. Variable nur boolisch zurück welcher Chat benutzt wurde?
    Genau. Der Bool gibt nur an, welcher Chat benutzt wurde.

  6. #6

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Okay, du hast recht, er funktioniert nicht. Ich habe nochmal am Code ein bisschen gebastelt, funktionieren tut er aber trozdem nicht. Vielleicht sieht ja jemand meinen Fehler und kann mich berichtigen.

    Code:
    function healPlayer(ply, txt) // Erstellt eine Funktion mit Spielernamen und Eingabe
    
    	split = string.Explode(" ", txt) // Legt für jedes getrennte Wort ein neues Feld an
    	command = split[1] // Der Inhalt vom 1. Feld
    	name = split[2] // Der Inhalt vom 2. Feld
    	
    	if string.upper(command) == "!GIVEHP" then // Wenn der String !GIVEHP lautet
    	
    		if ply:isAdmin then // Und der Spieler admin ist
    		
    			if name:isConnected then // Teste ob der andere Spieler online ist
    			
    				ply:ChatPrint("Du hast einem Spieler 10.000 HP gegeben!") // Dann geb dem Admin eine Nachricht aus
    				name:ChatPrint("Dir wurden 10.000 HP gegeben!") // Und dem betroffenen Spieler
    				name:SetHealth(10000) // Setze die HP des Zielspielers auf 10.000
    				
    			else // Ist das Ziel nicht online
    				
    				ply:ChatPrint("Spieler nicht gefunden!") // Sage das er nicht online ist
    			end
    		
    		else // Ist der Benutzer kein Admin
    		
    			ply:ChatPrint("Du bist kein Admin!") // Sage das er keiner ist
    		end
    	end
    end
    hook.Add("PlayerSay", "healPlayerHook", healPlayer) // Lege einen Auslöser für die Funktion fest
    Kannst du mir sonst nochmal sagen welchen Pfad ich angeben muss? Relativ zu? Oder den kompletten? Ich habe versucht:
    Code:
    lua_openscript lua/server/autorun/adminhp.lua
    lua_openscript garrysmod/lua/server/autorun/adminhp.lua
    Ich werde mich dann morgen durch die Basics arbeiten, die anscheind komplizierter sind als ich dachte. Ah, dazu noch eine Frage:
    Warum wird "string.find" klein- und "string.Explode" großgeschrieben?

    Grüße und gute Nacht
    Spike

  7. #7

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    name ist ein string, wie willst du nem string leben geben?

    probier folgendes
    der abschnitt if isConnnected weglassen

    alles darunter (bis chatprint...end)
    mit dem austauschen

    Code:
    for k,v in pairs(player.GetAll()) do
     if string.find(string.lower(v:Nick()), name) then
      v:ChatPrint("Dir wurden 10.000 HP gegeben!") // Und dem betroffenen Spieler
      v:SetHealth(10000) // Setze die HP des Zielspielers auf 10.000
     end
    end
    wenn jemand gamer532 und ein anderer gamer949 heisst, kannst du mit !givehp gamer beiden 10k geben

  8. #8

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Okay, werde ich probieren - sofern das Script funktioniert. Ich habe mir den Code mal angesehen auf der englischen Wiki, mich stört es da sehr das es immer heisst "Du musst nicht wissen wie das funktioniert, nur wie man es benutzt". Ich habe wohl verstanden das es Key und Value gibt, aber womit werden die beladen? Key der Player und Value die einzelnen Informationen?

    Ich habe jetzt das Problem, dass mein Gmod das Script nicht mehr startet. Wenn ich es mit "lua_run" versuche kommt das:
    Code:
    ] lua_run adminheal.lua
    > adminheal.lua...
    [lua_run:1] '=' expected near '<eof>'
    Und bei der richtigen Ausführung mit "lua_openscript" das:
    Code:
    ] lua_openscript adminheal.lua
    Running script adminheal.lua...
    Couldn't include file 'adminheal.lua' (File not found) (<nowhere>)
    Auch wenn ich statt "adminheal.lua" "autorun" lädt das Script nicht - jedenfalls gibt es keine Reaktionen auf meine Eingaben im Chat.
    Code:
    ] lua_openscript autorun
    Running script autorun...
    LuaGetfile: Not Loading autorun
    Couldn't include file 'autorun' (File not found) (<nowhere>)
    Jetzt habe ich gerade am Anfang der Funktion folgendes hinzugefügt:
    Code:
    Msg("Das Script läuft.")
    
    [...CODE...]
    
    hook.Add("PlayerSay", "healPlayerHook", healPlayer)
    Eigentlich sollte - sofern das Script läuft - in der Konsole die Nachricht "Das Script läuft." auftauchen wenn jemand was schreibt. Tut es aber nicht - sehe aber gerade das es ja keine Sonderzeichen geben darf, probiere es gleich nochmal. Was hab ich da jetzt verbockt?

    Achso, danke das ihr mir helft. Ich hab mir den Einstieg in Lua so einfach wie in E2 vorgestellt. Damit lag ich wohl daneben.

    Grüße
    Spike

  9. #9

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    wo liegt das script denn?
    im autorun dann:
    lua_openscript autorun/adminheal.lua
    immer vollen pfad ab lua ordner angeben, du kannst keine ordner ausführen nur dateien

    Lua ist eine klasse für sich. E2 ist so einfach, weil viele funktionen bekannt sind die in lua etwas verstecker sind
    wie zb. sin(x) heisst in Lua math.sin(x) - es macht den Script übersichtlicher mit funktionen aus librarys zu arbeiten
    aber nicht einfacher

    Andererseits kann man in E2 nicht soviel machen, wie in lua (da der Lua code, der E2 es ermöglicht sachen zu tun eigene begrenzungen hat (wie zb. kein setPos auf fremde sachen)


    Zumindest (finde ich) sind Lua und E2 die "übersichtlichsten" & einfachsten Scriptsprachen die ich kenne.. bin an vielen weiteren gescheitert
    (lag aber meisten daran, dass man die Funktionsnamen nicht kannte aber die Syntax beherrschte)
    E2 ist auch deswegen so einfach, weil die motivation da ist - mit anderen zu Scripten (was in np++ oder VC studio nicht geht
    Geändert von gamerpaddy (15.05.2012 um 13:54 Uhr)

  10. #10

    Standard AW: Heal-Script funktioniert nicht/Hilfe und Erklärungen

    Ich fand bisher PHP am einfachsten, bin aber trozdem daran Lua zu lernen. Es gibt ja so viele Möglichkeiten, bei denen man Lua anwenden kann.

    Ich habe was rausgefunden: Ich habe immer als Pfad den Dateinamen angegeben und dann rumexperimentiert. Als ich dann auf einer Seite auf den Hinweis gestoßen bin, dass "lua" der Ausgangsordner ist, konnte ich das Script starten. Warum es aber nicht von selbst laufen will weiss ich nicht. Folgendes kommt beim manuellen Start:

    Running script autorun/server/adminheal.lua...
    Hook 'healPlayerHook' Failed: [lua\autorun\server\adminheal.lua:8] attempt to call method 'isAdmin' (a nil value)
    Spike: !givehp Spike
    So sieht die Ecke des Codes aus:
    Code:
    if ply:isAdmin() then // Und der Spieler admin ist
    		
    			for k,v in pairs(player.GetAll()) do
    				if string.find(string.lower(v:Nick()), name) then
    					v:ChatPrint("Dir wurden 10.000 HP gegeben!") // Und dem betroffenen Spieler
    					v:SetHealth(10000) // Setze die HP des Zielspielers auf 10.000
    				else
    					ply:ChatPrint("Kein Spieler gefunden!")
    				
    				end
    			end
    		
    		else // Ist der Benutzer kein Admin
    		
    			ply:ChatPrint("Du bist kein Admin!") // Sage das er keiner ist
    		end
    Warum gibt mir "isAdmin" nichts zurück? Hab ich die Funktion falsch eingesetzt? Ahja, das Script liegt in "Pfad zum Steamaccount\garrysmod\garrysmod\lua\autorun\serve r\adminheal.lua"

    Ich find die Syntax von Lua bisher komisch, kann mich aber daran gewöhnen

    Grüße
    Spike

Ähnliche Themen

  1. Addon: Hilfe für Script
    Von InfinityNeo im Forum Lua
    Antworten: 2
    Letzter Beitrag: 13.08.2011, 16:13
  2. Antworten: 3
    Letzter Beitrag: 15.07.2011, 19:28
  3. Hilfe! bei meinem Script
    Von Flaver im Forum Lua
    Antworten: 6
    Letzter Beitrag: 22.02.2009, 18:25
  4. Zs Server (Suche Script) Pls hilfe
    Von Tom Tom im Forum Server
    Antworten: 3
    Letzter Beitrag: 16.10.2008, 15:31
  5. Hilfe! Mein Gmod funktioniert nicht mehr!
    Von TARDIS im Forum Archiv
    Antworten: 3
    Letzter Beitrag: 12.06.2008, 14:44

Berechtigungen

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