Archiv verlassen und diese Seite im Standarddesign anzeigen : LUA Problem
don-banane
23.05.2008, 13:26
Hallo,
ich habe ein Problem bei meinem LUA Script, hier ist der Code:
local Text = vgui.Create( "DTextEntry", Frame)
Text:SetPos( 30, 120 )
Text:SetText( "text" )
local SText = Text:GetText()
Text.OnEnter = function( SText )
command( "say" .. SText )
end
Ich will das was ich in dem TextEntry eingegeben habe im Chat schreiben lassen, aber ich glaube ich muss die Variable anders in die Function reinbringen. Wenn ich Enter drücke kommt dann übrigens das:
autorun/client/don_chat_spammer1.lua:13: attempt to call method 'GetText' (a nil value)
(wäre in dem Fall Zeile 4)
Danke für eure Hilfe :)
Gibt es "GetText" überhaupt?
Wenn ja, welcher Test soll es sein?
don-banane
23.05.2008, 13:42
Auch mit diesem Code funzt es nicht:
local Text = vgui.Create( "DTextEntry", Frame)
Text:SetPos( 30, 120 )
Text:SetText("text")
Text.OnEnter = function() RunConsoleCommand( "say" .. Text:GetText() ) end
Gleiche Fehlermeldung :(
Gibt es "GetText" überhaupt?
Wenn ja, welcher Test soll es sein?
http://wiki.garrysmod.com/wiki/?title=DTextEntry
Versuche es mal mit Text:GetValue() anstelle von Text:GetText()
Desweiteren findest du hier einen Guide to Derma (http://wiki.garrysmod.com/wiki/?title=Guide_to_Derma) welchen ich nur empfehlen kann!
don-banane
23.05.2008, 14:22
Versuche es mal mit Text:GetValue() anstelle von Text:GetText()
Danke! ;)
Desweiteren findest du hier einen Guide to Derma (http://wiki.garrysmod.com/wiki/?title=Guide_to_Derma) welchen ich nur empfehlen kann!
Ich habe alle Derma Tutorials schon durchgelesen, nur das noch nicht :gmod:
Konntest du schon erste Erfolge erzielen?
don-banane
23.05.2008, 20:31
Konntest du schon erste Erfolge erzielen?
Ja, mit dem GetValue funktioniert alles super, ich dachte bei LUA erst WTF, das ist ja komplett anders als z.B. C++, aber im prinzip muss man nur ein bisschen umdenken und einen neuen Syntax lernen, dann ist alles ganz einfach.
Die GMod.com Wiki ist einfach genial, da steht alles drin was man so braucht.
Ich könnte jetzt zum Beispiel ein Afk Client Script schreiben :gmod:
Gibt es schon ;)
btw.:
Bei mir ist es andersherum, ich habe Lua gelernt ( bzw. lerne noch ) und fange jetzt inner Schule
mit C++ an.
Ich hab mich auch erst vom Syntax her umstellen müssen weil ich in der Schule Java gelernt hab, dann Privat noch php und dann noch Lua, das verwirrt einen ziemlich... aber ich habs doch irgendwie geschaft ^^.
Ich find die Dokumentation aber nicht so gut, besonders steh meistens nciht wie man Werte aus irgendwas ausliest. Ich hab zum Beispiel keine Ahnung wie ich den Wert aus einem DMultiChoice auslese. Es gibt zwar eine Funktion bei der ich einen Wert ausgeben lassen kann nur brauch ich dazu den Index des Elements, nur woher bekomm ich die?
don-banane
24.05.2008, 13:26
Gibt es schon ;)
Ja, ich kenne das ULX aafk plugin, hab es selber schonmal auf einen Server installiert :gmod:
Aber das was ich mache dient ja nur zur Übung, und ist vielleicht ein ganz kleines bisschen nützlich ;)
€dit: Hm, das mit den CheckBoxen ist in LUA auch anders...
if CheckBox:GetValue() == 1 then
geht nicht :(
€dit: Verdammt schon wieder die Klammern hinter GetValue vergessen, geht aber trotzdem nicht (obwohl ich keine Fehlermeldung habe)
don-banane
25.05.2008, 12:44
*Bump*
Weiß keiner wie ich das mit den CheckBoxen machen kann? Ich bekomm das einfach nicht hin :(
*Bump*
Weiß keiner wie ich das mit den CheckBoxen machen kann? Ich bekomm das einfach nicht hin :(
http://wiki.garrysmod.com/wiki/?title=ControlsPanel.AddControl
CheckBox string Label, string Description, string Command
don-banane
25.05.2008, 14:20
http://wiki.garrysmod.com/wiki/?title=ControlsPanel.AddControl
Vielleicht solltest du erstmal durchlesen was mein Problem ist, und ausserdem ist das was du meinst im Tool Menu und nicht Derma...
Haben bei mir zuerst auch nicht gefunkt, doch dann ging es auf einmal...
Hier ist mal mein Code:
/*------------------------------
Hauptebene wo der Rest drauf aufgebaut wird
------------------------------*/
local DermaPanel = vgui.Create( "DFrame" ) // Erstellt unsere Ebene
DermaPanel:SetPos( 50, 50 ) // Position auf dem Bildschirm des Spielers
DermaPanel:SetSize( ScrW()/2, ScrH()/2 )// Größe der Ebene
DermaPanel:SetTitle( "Test Ebene!" ) // Überschrift der Ebene
DermaPanel:SetVisible( true ) // Soll die Ebene ein- oder ausgeblendet werden?
DermaPanel:SetDraggable( true ) // Erlaubt es dem Spieler das Fenster zu verschieben
DermaPanel:ShowCloseButton( true ) // Soll der Spieler das "X" ( den Schließen-Knopf ) sehen?
DermaPanel:MakePopup() // Zeigt die Ebene auf dem Bildschirm an
/*------------------------------
Nun kommen wir zu einer sogenannten "Checkbox"!
------------------------------*/
local texts = { "GOD MODE!", "NOCLIP!" }
local convars = { "sbox_godmode", "sbox_noclip" }
for i=1, table.Count( texts ) do
local DermaCheckBox = vgui.Create( "DCheckBoxLabel" ) // Erstellt unsere Checkbox
DermaCheckBox:SetParent( DermaPanel ) // Hiermit haften wir die Checkbox an die Hauptebene ran, so dass sie sich mit ihr bewegt
DermaCheckBox:SetPos( 200, 50 + ( 50 * i/2 ) ) // Postition der Checkbox auf dem Bildschirm
DermaCheckBox:SetText( texts[i] ) // Was neben der Checkbox stehen soll
DermaCheckBox:SetConVar( convars[i] ) // Der Command der "getoggeld" werden soll ( der command muss durch 1 [an] und 0[ aus] geschaltet werden können )
DermaCheckBox:SetValue( 1 ) // Soll der Command zu Anfang an oder aus sein?
DermaCheckBox:SizeToContents() // Pass es dem Rest der Frames an ( so das SetText ausgeschrieben da steht )
end
ACHTUNG! Der Lua-Highlighter hier im Forum scheint bischen zu spinnen!
Zeile 27: DermaCheckBox:SetText( texts[i] )
Zeile 28: DermaCheckBox:SetConVar( convars[i] )
-----
Dieses "for i=1, table.Count( texts ) do" macht es so das du gleich
mehrere Checkboxes auf einmal erstellen kannst.
don-banane
25.05.2008, 15:22
Ähemchen... Wenn ich mal anmerken dürfte dass ich kein Problem mit dem Erstellen von Checkboxen habe, sondern die Abfrage der Werte
Also zum Beispiel
if CheckBox:GetValue() == 1 then
blablabla
end
funktioniert nicht. Wie soll ich es dann machen?
Das war meine Frage :gmod: (steht aber auch in meinem vorletzten Post drin)
€dit: Ach ja, mir ist klar dass man nicht GetValue verwenden kann, ich hab das schon ausprobiert.
Wieso willst du denn die Checkbox abfragen?
Du musst die ConVar abfragen die du mit der Checkbox änderst ;)
z.B. sbox_godmode oder sbox_plpdamage
don-banane
25.05.2008, 15:36
Wieso willst du denn die Checkbox abfragen?
Du musst die ConVar abfragen die du mit der Checkbox änderst ;)
z.B. sbox_godmode oder sbox_plpdamage
Ich möchte verschiedene Möglichkeiten zum Einstellen haben.
Kann man so eine ConVar auch irgentwie erstellen?
ConVar = Consolen Variable
-----
Was ist denn dein Vorhaben?
don-banane
25.05.2008, 15:46
Ich wenn man auf Afk drückt, wird man Afk gesetzt, es erscheint eine Chatnachricht, und man soll auswählen können ob noch ein Grund dastehen soll oder nicht (Grund kann man im Derma eingeben)
Wie gesagt, es dient nur zur Übung ;)
Also, erstmal erstellst du dir einen Consolencommand:
http://wiki.garrysmod.com/wiki/?title=Common_Code_Snippets#Adding_a_console_comma nd
Code könnte wie folgernder aussehen:
local afk = false
function afkcommand( ply, command, args )
if args[1] == 1 then
afk = true
elseif args[1] == 0 then
afk = false
else
Msg( "Only 1 or 0 is allowed!" )
end
end
concommand.Add( "Set_AFK", afkcommand )
args<komische Zeigenfolge> mit args[1] ersetzen...
Dann kannst deine Zeileneingabe mit Checkbox machen ( im gleiche Script ):
/*------------------------------
Hauptebene wo der Rest drauf aufgebaut wird
------------------------------*/
local DermaPanel = vgui.Create( "DFrame" ) // Erstellt unsere Ebene
DermaPanel:SetPos( 50, 50 ) // Position auf dem Bildschirm des Spielers
DermaPanel:SetSize( ScrW()/2, ScrH()/2 )// Größe der Ebene
DermaPanel:SetTitle( "Test Ebene!" ) // Überschrift der Ebene
DermaPanel:SetVisible( true ) // Soll die Ebene ein- oder ausgeblendet werden?
DermaPanel:SetDraggable( true ) // Erlaubt es dem Spieler das Fenster zu verschieben
DermaPanel:ShowCloseButton( true ) // Soll der Spieler das "X" ( den Schließen-Knopf ) sehen?
DermaPanel:MakePopup() // Zeigt die Ebene auf dem Bildschirm an
/*------------------------------
Nun kommen wir zu einer sogenannten "Checkbox"!
------------------------------*/
local DermaCheckBox = vgui.Create( "DCheckBoxLabel" ) // Erstellt unsere Checkbox
DermaCheckBox:SetParent( DermaPanel ) // Hiermit haften wir die Checkbox an die Hauptebene ran, so dass sie sich mit ihr bewegt
DermaCheckBox:SetPos( 200, 50 + ( 50 * i/2 ) ) // Postition der Checkbox auf dem Bildschirm
DermaCheckBox:SetText( "AFK" ) // Was neben der Checkbox stehen soll
DermaCheckBox:SetConVar( "Set_AFK" ) // Der Command der "getoggeld" werden soll ( der command muss durch 1 [an] und 0[ aus] geschaltet werden können )
DermaCheckBox:SetValue( 0 ) // Soll der Command zu Anfang an oder aus sein?
DermaCheckBox:SizeToContents() // Pass es dem Rest der Frames an ( so das SetText ausgeschrieben da steht )
/*------------------------------
Eine Eingabezeiel :D
------------------------------*/
local DermaText = vgui.Create( "DTextEntry" )
DermaText:SetParent( DermaPanel )
DermaText:SetPos( 200, 200 )
DermaText:SetTall( 20 )
DermaText:SetWide( 250 )
DermaText:SetEnterAllowed( false )
Jetzt bastelst du dir nur noch eine Think-Funktion welche den Valu aus DermaText abfragt und guckt ob "afk" = true ist.
Wenn es true ist dann kannst ja 'n Text alle 3min reingschreiben lassen...
don-banane
25.05.2008, 18:07
Danke ;)
Der Erste Code war echt nützlich, der Rest war mir ja schon bekannt :gmod:
Aber:
DermaPanel:SetTitle( "Test Ebene!" )
DermaPanel:SetDraggable( true )
DermaPanel:ShowCloseButton( true )
Funktioniert nicht, aber die Funktionen sind eh schon standartmäßig dabei. :?:
Doch die Funktionieren ;)
SetTitel ist der Titel des Fensters
SetDraggable erlaubt es dir das Verschieben des Fensters zu erlauben bzw. zu verbieten
ShowCloseButton erlaubt es dir, dieses X oben rechts an zu zeigen
Habs ja bei mir getestet.
----
Führst du das denn auch alles auf dem Client aus?
z.B.:
lua_openscript_cl autorun/client/mydermastuff.lua
don-banane
25.05.2008, 20:42
Bis jetzt alles im client/autorun
Und im SP getestet.
Bis jetzt alles im client/autorun
Und im SP getestet.
Das heißt autorun/client.
Der Script ist eher Sharded, darum sollte man ihn einfach nach Autorun packen.;)
Das ganze Derma Zeugs wir auf dem Client ausgeführt,
also gehört es in den autorun/client Ordner.
Und sollte auch nur mit
lua_openscript_cl
ausgeführt werden ;)
Wenn du etwas sharen willst, dann mach das über
Networked boolean, integer, etc...
Je nach dem was du abfragen willst.
Powered by vBulletin® Version 4.2.2 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.