Lua - Reddit – Telegram
Lua - Reddit
31 subscribers
281 photos
31 videos
4.26K links
News and discussion for the Lua programming language.

Subreddit: https://www.reddit.com/r/lua

Powered by : @r_channels & @reddit2telegram
Download Telegram
Beginner programmer looking for a teacher or tips

I am new to lua and coding in general, though I do have a little experience in python. I am trying to make a Roblox game. I am looking for someone to help me and teach me the coding language lua

https://redd.it/1jfgnb9
@r_lua
Help! Roblox Studio Lua!

So, before I get into this, yes I used AI, no I can't code even a little, meaning no I do not have any idea what I'm doing, but brownie points for trying, I guess?
I don't currently want to get into learning code, (I have school and other stuff, but I really wanted to get into experimenting with Studio) but unfortunately, with trying to make a Roblox game, that's required for quality. Hoping someone can help me here.
By the way! This is all happening on a test world which has nothing but a part that I'm using as a baseplate, and a humanoid named DialogueNPC in the workspace (plus spawn). The dialogue in this code is random and only for testing purposes.

I'm trying to make a dialogue work, as you can tell by the NPC's name. I already have a noscript for tweening on-screen, and a noscript for tweening off-screen. By the grace of God, they work perfectly.Still, I'll provide you with everything I have, and everything these AI's have put me through lmao. I put an image of my hierarchy, assuming you'll need it. I'll sum up the noscripts, but pretty sure you guys could probably read these like books. I broke these into many noscripts because originally when there were just two big ones, it didn't work well and I couldn't try to use my very tiny coding brain to figure out what was the problem.

**Script #1: AnimScript. (Server Script) This noscript tweens the CinemaBar1 and 2 onto the screen for the player, no issues but I don't know if it conflicts with anything, so I'm giving it to you.**
\-- Script inside DialogueUI (AnimScript)



local Torso = workspace.DialogueNPC:WaitForChild("Torso")

local EPrompt = Torso:WaitForChild("EPrompt")



local dialogueUI = noscript.Parent -- Get DialogueUI from noscript.Parent



local CinemaBar1 = dialogueUI:WaitForChild("CinemaBar1")

local CinemaBar2 = dialogueUI:WaitForChild("CinemaBar2")



local startPosition1 = UDim2.new(0.5, 0, 1.851, 0)

local targetPosition1 = UDim2.new(0.5, 0, 0.851, 0)



local startPosition2 = UDim2.new(0.5, 0, -1, 0)

local targetPosition2 = UDim2.new(0.5, 0, 0.066, 0)



local tweenInfo = TweenInfo.new(

1,

Enum.EasingStyle.Quad,

Enum.EasingDirection.Out,

0,

false,

0

)



local function onPromptTriggered(player) -- Player is passed in

local tweenService = game:GetService("TweenService")

local tween1 = tweenService:Create(CinemaBar1, tweenInfo, {Position = targetPosition1})

local tween2 = tweenService:Create(CinemaBar2, tweenInfo, {Position = targetPosition2})



CinemaBar1.Position = startPosition1

CinemaBar2.Position = startPosition2



tween1:Play()

tween2:Play()



\-- Signal Dialogue Script

local dialogueEvent = game.ReplicatedStorage:WaitForChild("StartDialogueEvent")

dialogueEvent:FireClient(player) -- Fire the event to the client

end



EPrompt.Triggered:Connect(onPromptTriggered)

**Script #2: AnimScriptReverse. (Server Script) This does what the name says. Just the reverse of the AnimScript. Brings CinemaBar1 & 2 off screen, then turns the GUI to false.**
off-screen.
\-- Script inside DialogueUI (AnimScriptReverse)



local dialogueUI = noscript.Parent

local dialogueScript = dialogueUI:WaitForChild("DialogueButtonScript")

local dialogueModule = require(dialogueUI:WaitForChild("DialogueModule")) -- Require the module



local CinemaBar1 = dialogueUI:WaitForChild("CinemaBar1")

local CinemaBar2 = dialogueUI:WaitForChild("CinemaBar2")



local startPosition1 = UDim2.new(0.5, 0, 1.851, 0)

local targetPosition1 = UDim2.new(0.5, 0, 0.851, 0)



local startPosition2 = UDim2.new(0.5, 0, -1, 0)

local targetPosition2 = UDim2.new(0.5, 0, 0.066, 0)



local tweenInfo = TweenInfo.new(

1,

Enum.EasingStyle.Quad,

Enum.EasingDirection.Out,

0,

false,

0

)



local function resetDialogue()

dialogueUI.Enabled = true

dialogueModule.currentDialogueState = "Greeting" -- Use the module variable

dialogueScript.updateDialogue()

end



local function reverseAnimation()

local tweenService = game:GetService("TweenService")

local tween1 = tweenService:Create(CinemaBar1, tweenInfo, {Position =
startPosition1})

local tween2 = tweenService:Create(CinemaBar2, tweenInfo, {Position = startPosition2})



tween1:Play()

tween2:Play()



tween2.Completed:Connect(function()

dialogueUI.Enabled = false

resetDialogue()

end)

end



\-- Connect to a RemoteEvent (we'll fire this from the dialogue noscript)

local reverseEvent = game.ReplicatedStorage:WaitForChild("ReverseDialogueEvent")

reverseEvent.OnServerEvent:Connect(reverseAnimation)

**Script #3: DialogueModule. (Module Script) I'll be honest. I have no idea what this does, or why it's needed. It's just there because the AI told me to.**
\-- DialogueModule



local DialogueModule = {}



DialogueModule.currentDialogueState = "Greeting" -- Starting state



return DialogueModule

**Script #4: DialogueButtonScript. (Local noscript) This is where the issue is. It's not a big part, something small that prevents the whole thing from working, but essentially it holds the dialogue, creates buttons using a button template I made, and is supposed to carry out the sequence of dialogue when an option other than nextState = nil or Goodbye is pressed.**
**Issue? ::** line 76, updateDialogue()
**What is the output error? ::** it is a nil error.
Players.R1NYP00H.PlayerGui.DialogueUI.DialogueButtonScript:76: attempt to call a nil value - Client - DialogueButtonScript:76
Apparently this means its trying to call a value that's undefined? I've tried anything I know, and anything these computers can give me, and its either going way too complicated for my understanding, or doesn't work and creates more errors. This error happens when you click a text button/option that leads to more dialogue instead of closing the UI. Once again, dialogue was generated random, just for testing.


\-- LocalScript inside DialogueUI

local OptionsList = noscript.Parent:WaitForChild("CinemaBar1"):WaitForChild("OptionsList")

local DialogueOptionTemplate = OptionsList:WaitForChild("DialogueOptionTemplate")

local NPCSpeechText = noscript.Parent:WaitForChild("CinemaBar1"):WaitForChild("NPCDialogueBar"):WaitForChild("NPCSpeechText")

local UIListLayout = OptionsList:WaitForChild("UIListLayout")

local dialogueModule = require(noscript.Parent:WaitForChild("DialogueModule")) -- Require the module



\-- // Dialogue Data (your data)

local dialogueData = {

["Greeting"\] = {

npcSpeech = "Hello there, adventurer!",

options = {

{text = "Who are you?", nextState = "WhoAreYou"},

{text = "What's going on?", nextState = "WhatsGoingOn"},

{text = "Goodbye.", nextState = nil}

}

},

["WhoAreYou"\] = {

npcSpeech = "I am the friendly local guide.",

options = {

{text = "Where can you guide me?", nextState = "WhereToGuide"},

{text = "Okay, thanks.", nextState = nil}

}

},

["WhatsGoingOn"\] = {

npcSpeech = "There's a bit of trouble in town...",

options = {

{text = "Tell me more.", nextState = "TellMeMore"},

{text = "I see.", nextState = nil}

}

},

["TellMeMore"\] = {

npcSpeech = "The goblins have been stealing pies!",

options = {

{text = "I'll help!", nextState = "Help"},

{text = "That's... unfortunate.", nextState = nil}

}

},

["WhereToGuide"\] = {

npcSpeech = "I can show you the old ruins.",

options = {

{text = "Take me there!", nextState = "Goodbye"}, -- Or another state

{text = "Maybe later.", nextState = nil}

}

},

["Help"\] = {

npcSpeech = "Thank you! The bakery is just over there.",

options = {

{text = "I'm on it!", nextState = nil}

}

},

["Goodbye"\] = {

npcSpeech = "Farewell!",

options = {} -- No more options, dialogue ends

}

}



\-- Move updateDialogue() before the click event handler

local function createDialogueOptions(options)

\-- Create new options from the provided table

for _, optionData in ipairs(options) do

local newOption = DialogueOptionTemplate:Clone()

newOption.Text = optionData.text

newOption.Name = "DialogueOption_" .. _ -- Unique name



\-- Parent the button before making it
visible

newOption.Parent = OptionsList



newOption.Visible = true



\-- Connect the button click event (add your logic here)

newOption.MouseButton1Click:Connect(function()



if optionData.nextState then

dialogueModule.currentDialogueState = optionData.nextState -- Use the module variable

updateDialogue() -- THIS LINE HERE , other comments were ai, but this is me

else

\-- End dialogue and reverse animation

local reverseEvent = game.ReplicatedStorage:WaitForChild("ReverseDialogueEvent")

reverseEvent:FireServer()

end

end)

end

end



\-- Move updateDialogue() outside of createDialogueOptions()

local function updateDialogue()

local currentStateData = dialogueData[dialogueModule.currentDialogueState\] -- Use the module variable

if currentStateData then

NPCSpeechText.Text = currentStateData.npcSpeech

createDialogueOptions(currentStateData.options)

else

\-- Handle invalid state (e.g., end dialogue or show an error)

NPCSpeechText.Text = "Dialogue error."

createDialogueOptions({})

end

end



\-- Start the dialogue

updateDialogue()


pls help I beg you very very smart awesome programming people. I'm a teen with no job and no moneys I can't afford to pay for an actual noscripter for my currently nonexistent game. (under NPCDialogueBar is NPCSpeechText, its a text label and it holds the NPC's end of the dialogue. forgot that drop-down)

https://redd.it/1jfijs2
@r_lua
do you think i can optimise this code?

\--lua 5.4.2
print("write only numbers")
for i = 1,io.read() do

local file = io.open("words.txt", "r")
local word = ""
 
for i = 1,math.random(1,19999) do
word = file:read("*l")
end

local generated = {}

for i = 1, #word do
generated[i\] = word:sub(i, i)
end

local word_G = {}

for i = 1, #generated do
word_G[i\] = generated[math.random(#generated)\]
end

print(i..": "..word.." to "..table.concat(word_G))

end


https://redd.it/1jfw1ud
@r_lua
Lua is the GOAT of interpreted languages 🚀
https://redd.it/1jfyfgv
@r_lua
What is the return function?

I'm learning how to code, but I've reached a roadblock on what the return function is, as in I don't understand the explanation on what a return function does. I believe it's where you set a variable to the end of a sum? I'm pretty sure I'm wrong, so could you lovely people please help me?

https://redd.it/1jgntc2
@r_lua
Need help with URI-encoded link pattern

So I wanted to create a URI encode/decode library and I am stuck on my function "IsUri"

I can't figure out how to return true/false correctly, because:
A URI encoded link will have %HEX for special characters like " " (space)

A non URI-encoded link can also contain "%" which messes up my pattern.

I tried to do these 2 steps but failed:
find if there are any special characters without "%" in a string (return false early)
find if "%" has a valid syntax (return false/true)


I have also searched google and your subreddit for it. No answers....

https://redd.it/1jgsmxf
@r_lua
How do I create a website using HTML, CSS, & Lua?

I have tried EVERYTHING, Lapis, OpenResty, Luasocket, LuaJit, Luarocks, EVERYTHING, but NOTHING will work, I just want an index.lua file, with embedded HTML & CSS, & then I can use Lua as the back-end stuff such as button clicking.

I don't get it, why does it work for EVERYBODY but me.

I am on Windows-11, & I use Visual Studio Code.

https://redd.it/1jgtoye
@r_lua
Run other lua noscripts without knowing the name

Hi, so i’m making a lua noscript and it has a gui, and i want to make it so people can make addons for that gui, people keep saying it’s risky or they wouldn’t do it, they don’t even give a tip on how to do it, can anyone help?

https://redd.it/1jgvzl9
@r_lua
Should I learn Lua over Python as a non-dev ? (For macro / Scripting in Davinci Resolve)

Hello !

So I'm working with Davinci Resolve on a daily basis and I want to learn how to make my own noscript and macro. Resolve support both Lua and Python, but I don't know which language I should invest my time into. I don't really need to code outside this usecase, so I want to keep things simple and efficient.

I know that both are (relatively) easy to learn and from what I've heard the main advantage of Lua is its speed and simplicity while Python have a bigger community / ecosystem. I might be wrong or miss some elements tho, so I would like to know your opinion or advice !

https://redd.it/1jielaz
@r_lua
Fastest way to execute Lua?

Is there any method to execute Lua at it's highest speed?

Right now I'm using Zerobrane studio to execute Lua noscripts. It's very handy.

But it's probably not the fastest way to run it. I wonder if there are any faster methods for running Lua?

https://redd.it/1jif3h5
@r_lua
How do I learn Lua???

Hello I recently had the idea to learn how to code I heard that lua is better than python while still being as easy or easier than python the only problem is where do I start? What resources should I use to learn Lua? Can somebody help me. Thank You.

https://redd.it/1jibrgx
@r_lua
Error : <eof> expected near 'function'

Anyone know how to get this noscript good ?

ELEMENTS_TO_GATHER = { }
MAX_PODS = 90
MIN_MONSTERS = 1
MAX_MONSTERS = 8

-- Script OnlyBot pour Paysan 1-200 avec retour banque

local trajet = {}

function trajet:run()
    return {
        -- Récolte du blé (niveau 1-20)
        { map = "2,-25", action = "harvest" },
        { map = "3,-25", action = "harvest" },
        { map = "4,-25", action = "harvest" },

        -- Vérification de l'inventaire et retour banque
        { condition = "inventoryFull", map = "5,-18", action = "bankDeposit" },

        -- Récolte de l’orge (niveau 20-40)
        { map = "5,-25", action = "harvest" },
        { map = "6,-25", action = "harvest" },

        -- Retour banque si plein
        { condition = "inventoryFull", map = "5,-18", action = "bankDeposit" },

        -- Récolte de l’avoine (niveau 40-60)
        { map = "7,-25", action = "harvest" },
        { map = "8,-25", action = "harvest" },

        -- Retour banque
        { condition = "inventoryFull", map = "5,-18", action = "bankDeposit" },

        -- Récolte du houblon (niveau 60-100)
        { map = "9,-25", action = "harvest" },
        { map = "10,-25", action = "harvest" },

        -- Retour banque
        { condition = "inventoryFull", map = "5,-18", action = "bankDeposit" },

        -- Récolte du seigle (niveau 100-140)
        { map = "11,-25", action = "harvest" },
        { map = "12,-25", action = "harvest" },

        -- Retour banque
        { condition = "inventoryFull", map = "5,-18", action = "bankDeposit" },

        -- Récolte du malt et riz (niveau 140-200)
        { map = "13,-25", action = "harvest" },
        { map = "14,-25", action = "harvest" },

        -- Retour en banque final
        { condition = "inventoryFull", map = "5,-18", action = "bankDeposit" }
    }
end

return trajet


function bank()
    if map_CurrentMapId() ~= 162791424 and map_CurrentMapId() ~= 191105026 and map_CurrentMapId() ~= 191104002 and map_CurrentMapId() ~= 192415750 then
        return {{map = map_CurrentPos(), changeMap = "havenbag"},}
    end
    return {
        --HavreSac--
        {map = "162791424", changeMap = "usezaap:191105026"}, -- Astrub
        --Astrub--
        {map = "191105026", changeMap = "left"},
        {map = "191104002", changeMap = "cell:289"},
        {map = "192415750", custom = banquier},
    }
end

function banquier()
    global_Delay(1000)
    npc_Speak(-20000) -- [-20000] = id du npc banque Astrub
    global_Delay(1000)
    npc_Reply(64347) -- [64347] = id de la reponse
    global_Delay(1000)
    storage_DropAll() -- On vide TOUT les items
    global_Delay(1000)
    npc_Close() -- On ferme la banque
    global_Delay(1000)
    map_ChangeMap("cell:409") -- Sortir de la banque
    global_Delay(5000)
end

https://redd.it/1jj2hiy
@r_lua
lua feels high and low level at the same time

thinking about it for the past hour. no pointers to screw you up, yet nearly zero standard library as well. every time i need a very basic function (like checking if a table contains a value, iirc even C++ has that in the standard library!) i try and look it up, only to realise that i am on my own. it's nothing difficult most of the time, annoying at worst. yet... it feels like zen. the purity i've felt while writing stuff in 6502 assembly in an online emulator, except in lua... everything actually works. it all makes sense. every piece of code makes sense. there are frustrating points as well, like not having the continue keyword (what a shame!)... but it's a small price for such soulful feeling.


>!oh GODDAMMIT i have to write deepcopy again!<

https://redd.it/1jld1rx
@r_lua
Guidance on Improving Function Efficiency

Hi all, I'm working on a vehicle model in Lua/Aumlet, but have been running into performance issues. One function that gets called *a lot* is the function that returns an iterator to iterate over all the degrees of freedom (DoF) of the car (body x, y, z direction, etc.). The vehicle is modelled as a body, axles, and powertrain parts. The way I've done it feels pretty sloppy. Any pointers?

function car:iterateOverDoF()
local a = 0 -- Initialise body DoF counter to 0
local aMax = 3 -- Number of body DoF
local b = 0 -- Initialise axle DoF counter to 0
local bMax = self.body.numAxles*3 -- Number of axle DoF
local c = 0 -- Initialise powertrain DoF counter to 0
local cMax = #self.powertrain -- Number of powertrain DoF
local i=0 -- Overall counter
return function ()
i=i+1 -- Increment counter
if a<aMax then -- Check that we have not iterated over all body DoF
a=a+1 -- Increment body DoF counter
return i, self.body, self.body.dimensions[a] -- Return information about the DoF being inteorgated
elseif b<bMax then -- Repeat same process for axles and powertrain
b=b+1
return i, self.axles[math.ceil(b/3)], self.axles[math.ceil(b/3)].dimensions[(b-1)%3+1]
elseif c<cMax then
c=c+1
return i, self.powertrain[c], self.powertrain[c].dimensions[1]
else return nil end -- Return nil once all DoF have been iterated over
end
end

https://redd.it/1jmo0ti
@r_lua
Anyone help me?

Hello everyone! Im New in noscript lua, i using game guardian... i need help, what are the commands to copy the address of an item and place it over the saved values?

https://redd.it/1jmpmcy
@r_lua