Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Code-Schnipsel



Pac_187
25.07.2008, 17:23
http://pac.gmod.de/HIDDEN%20STUFF/Forum/Code_Schnipsel.png

Wie schon vielleicht vermuten lässt könnt ihr in diesem Thread Code-Schnipsel posten!


Aber beachtet doch folgendes:

Was hier reingehört:

Scripts die GameMode unabhängig sind!


Was hier NICHT reingehört:

Nichts geklautes aus GameModes, SWEPs, etc.
Diskussionen, Frage, etc. über Scripts!
Schadcode!
Copy 'n Paste aus der Engl./Deu. Wiki!



Missachtungen der oben aufgeführten "Regeln" enden mit einer Verwarnung/Ban, sowie das Löschen des Postes!


Desweiteren gilt:


Dokumentiert wichtige Teile eures Codes .
Gebt eine kleine Beschreibung zum Code ab ( also was er macht ).
Nutzt die Lua-Tags! ( CODE_HIER )
Wer Fragen zu einem Script hat wendet sich via PN an den User!


||||||||||||||||

Folgende Vorlage könnt ihr verwenden!:

Status: SERVER/CLIENT/SHARED
Nützliche Links: URL's
Beschreibung: BESCHREIBUNG

// CODE HIER REIN!


||||||||||||||||

Hier ein fertiges Beispiel:


Status: SERVER
Nützliche Links: os.date (http://wiki.garrysmod.com/wiki/?title=Os.date)
Beschreibung:
Dieses Script gibt die Zeit im Chat aus sobald ein bestimmter
"Chat-Befehl" eingegeben wird.


function timeprint( ply, text, toall )

// !time muss an erster stelle stehen damit die Funktion ausgeführt wird
if string.find( text, "!time" ) == 1 then

// Gibt die Zeit im Format Std.:Min:Sek: aus
ply:ChatPrint( "Current time is: "..os.date( "%H:%M:%S" ) )

// Verhindert das "!time" in den Chat geschrieben wird
return ""
end
end

hook.Add( "PlayerSay", "TimePrintFunction", timeprint )

monky2k6
25.07.2008, 18:18
So dann möchte ich auch mein 1. selbst nachempfundenen Code-Snippet mal hier bereitstellen.

Status: SERVER
Nützliche Links: hook.Add (http://wiki.garrysmod.com/wiki/?title=Hook.Add), player:ChatPrint() (http://wiki.garrysmod.com/wiki/?title=Player.ChatPrint), string.sub (http://wiki.garrysmod.com/wiki/?title=String.sub)
Beschreibung: Dieser Code gibt den Text in blauer, dicker Schrift aus wenn man ein "/me" davor schreibt.

Die LUA Datei sollte in lua/autorun liegen.

--Zuerst fügen wir den hook hinzu (siehe ende des Codes).
local function CommandSay( ply, text, public )
/* string.sub schneidet vom string "text" (der Chateingabe) die Chars zwischen Position 1 - 4 weg
( 1. / 2. m 3. e 4. <Leerzeichen> )*/
if(string.sub( text, 1, 4 ) == "/me " ) then
/* Er soll den Befehl "ChatPrint" einmal für alle ausführen (das jeder den "Emote" sieht) */
for k, v in pairs(player.GetAll()) do
/* ply:Nick() bezieht den Namen des Spielers den den Emote ausführt.
Anschließend wird der text ab dem 4 Zeichen (Leerzeichen) wiedergegeben. */
v:ChatPrint( ply:Nick()..string.sub( text, 4 ) );
end
/* return "" sorgt dafür, dass in dem Chat nicht noch die Chatzeile "/me ist cool" z.B. eingetragen wird. Der Text wird dann durch "nix" ersetzt
(zwischen den "" ist kein Leerzeichen, sonst würde eine Leerzeile im Chat angezeigt!) */
return "";
end
end
/* Der 1. Parameter gibt an, welches Callback wir "hook'en" möchten. (In diesem Fall soll der Hook beim Event "PlayerSay", also dem schreiben in den Chat aufgerufen werden.)
Der 2. Parameter ist nur ein frei wählbarer Name, über diesen man den hook über "hook.Remove" wieder löschen könnte.
Der 3. Parameter gibt an, welche funktion aufgerufen werden soll beim benutzen des Events. In diesem Fall habe ich die Funktion "CommandSay" gennant. */
hook.Add( "PlayerSay", "ChatHook", CommandSay )


Bei Fragen stehe ich gerne zur Verfügung.
Ich werde später noch das "Goto" Script hinzufügen. (Also finden und interagieren mit einem Spieler über Namens- oder Teilnamenseingabe.)

Alex22
22.07.2009, 19:10
Hier mal ein Goto Script von mir:

Status: http://www.garrysmod.de/w/images/7/78/Server.png
Nützliche Links: hook.Add (http://www.garrysmod.de/forum/redirector.php?url=http%3A%2F%2Fwiki.garrysmod.com %2Fwiki%2F%3Ftitle%3DHook.Add) ply:ChatPrint (http://www.garrysmod.de/forum/redirector.php?url=http%3A%2F%2Fwiki.garrysmod.com %2Fwiki%2F%3Ftitle%3DPlayer.ChatPrint) string.Explode (http://wiki.garrysmod.com/?title=String.Explode) string.find (http://wiki.garrysmod.com/?title=String.find) string.upper (http://wiki.garrysmod.com/?title=String.upper)
Beschreibung: Ein Script, dass einen Spieler mit dem Chat Command "!GOTO *Spielername*" zu einem Spieler teleportiert


function gotoTeleport(ply,text,all)//Hier begint die Teleport Funktion
if string.find(string.upper(text), "!GOTO") == 1 then //Wenn das geschriebene mit !GOTO beginnt (das string.upper ist dafür falls jemand nur !goto schreibt)
local str = string.Explode(" ", text) //Der Text den der Spieler geschrieben hat wird hier
local allPlys = player.GetAll() //Hier werden alle Spieler in einer Table gespeichert
for k, v in pairs(allPlys) do //Die Schleife geht nach und nach alle Spieler in der Table durch
if string.upper(v:GetName()) == string.upper(str[2]) then //Das If-Statement überprüft ob der Nickname von v der gleiche wie vom Spieler geschriebenem Namen ist
TargetVec = v:GetPos() //TargetVec wird die Position des Spielers gegeben zu dem man sich teleportieren will
TargetVec.z = TargetVec.z + 150 //Das hier ist dazu da damit sich der Spieler nicht direkt in den anderne Teleportier
TargetVec.x = TargetVec.x + 100 //sondern ein bisschen daneben
ply:SetPos(TargetVec) //Die eigentliche Teleport Anweisung
v:ChatPrint(ply:Nick().." has teleported to you!") //Zeigt in der Chatbox den Text an
ply:ChatPrint("You teleported yourself to "..str[2])
return
end
end
ply:ChatPrint("Player can't be found") //Wenn man einen Namen eingeben hat den es auf dem Server nicht gibt wird das angezeigt
end
end
hook.Add( "PlayerSay", "GotoTeleport", gotoTeleport); //Der PlayerSay Hook


Wenn ihr es benutzen wollt, erstellt einfach im Ordner lua/autorun/server/ eine neue .lua Datei und schiebt den Code da rein.

Edit: O: Hatte was vergessen, Script funktioniert jetzt.

Mentos
16.09.2014, 18:09
Irgendwie finde ich, dass wir viel zu wenige Schnipsel haben... Daher:

Eine Implementierung in die table Funktionen
Funktion: table = table.randomize( table )
Status: SHARED
Bescheibung: Nimmt den sortieren Inhalt eines Tables und gibt ein Table mit zufälliger Anordung zurück.
--Der Inhalt des übergebenen Tables wird nicht zerstört! (so wie es jetzt steht ;D)
function table.randomize( SortiertesTable )
if SortiertesTable && #SortiertesTable > 1 then --Dieses Script brauch erst zu laufen, wenn das zu mischende Table mehr als 1 Eintrag hat
local RandomTable = {} --Dieses Table wird später die zufällig zusammengepackten Inhalte aus dem sortieren Table beinhalten
local Index = 0

for #SortiertesTable > 0 do --Wiederhole so oft, bis das sortierte Table leer ist (alle einträge sind jetzt im RandomTable)
Index = math.random( 1, #SortiertesTable ) --Suche dir eine zufällige Zahl aus dem Bereich aus, der noch im Sortierten Table als Key enthalten ist
table.insert( RandomTable, nil, SortiertesTable[Index] ) --Copiere den Inhalt vom sortierten Table in das RandomTable (der Index aus dem gelesen wird ist zufällig)
table.remove( SortiertesTable, Index ) --Lösche den Inhalt aus dem SortiertesTable, damit wir es nicht nochmal erwischen können --table.remove löscht den Key(Index) und rückt nachfolgende Elemente im Table nach!
end

return RandomTable --Mix fertig gestellt... Zurückgeben an die aufrufende Funktion
else
return SortiertesTable --Hier muss nix gemischt werden... (1 Eintrag, weniger oder nil)
end
end
Nicht getestet aber falls was nicht funktionieren sollte, sollte das jeder Scripter fixen können.

Auf das hier bald viele Schnipsel rum fliegen ;D
Gruß