This Function Will Save You Hours

Поделиться
HTML-код
  • Опубликовано: 10 сен 2024
  • 50% OFF COUPON WITH "DOUBLEBYTE" (ends in 3 days):
    linktr.ee/Byte...
    To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/...
    You’ll also get 20% off an annual premium subscription!
    discord: / discord
    wondered how to make a main menu in roblox studio? or how to create a shop which has working GUI? ive made lots of 2024 roblox scripting tutorials about all the different bits of roblox to give you some up-to-date information about all of its properties and events.
    my goal is to simply give some insight on how to use the various features and instances roblox studio, and show you some fun stuff you can do with them. thanks for checking out this roblox scripting tutorial :)

Комментарии • 244

  • @byteblox100
    @byteblox100  8 месяцев назад +23

    Get all of my knowledge in one package:
linktr.ee/ByteBlox

    • @shreddy_fazchair
      @shreddy_fazchair 8 месяцев назад +1

      W

    • @theredman2261
      @theredman2261 8 месяцев назад

      Bigger

    • @ArtucoDev
      @ArtucoDev 8 месяцев назад +1

      is he going to mail me a pipebomb?

    • @Sasma_
      @Sasma_ 8 месяцев назад +2

      @@ArtucoDev no but i will

    • @3edr
      @3edr 8 месяцев назад +1

      Dear byteblox you probably aren’t seeing this message but I can’t send it in the discord since I was banned. I’d like to appeal my ban, I’m sorry for my beliefs causing others to fell uncomfortable I should of asked you if it was ok for me to state my beliefs. I assumed you could because other people in the server where and I stated mine. Although I do want to say I don’t appreciate people calling me stupid because of my personal opinions my beliefs may seem stupid to them but there’s also seems stupid to me. I also don’t like how my opinions that don’t have anything to do with the server can get me banned.

  • @boi875_RBLX
    @boi875_RBLX 7 месяцев назад +16

    task.synchronize and task.desynchronize are only to be used with multi threading under actors. If this is not done, then the function will still work, but will warn something along the lines of this: "task.synchronize/task.desynchronize should only be called from a script that is a descendant of an Actor"
    both task and coroutines are nearly the same thing, except with a few minor differences. *Note that task.spawn() is slightly slower than coroutine.create()*
    task.spawn() can resume "dead" threads, unlike coroutine.resume()
    task.spawn() has a debug trace back, unlike coroutines. This basically means that if the script gets an error, it will show where the error occurred inside of the actual function, rather than coroutines which say something about where the coroutine was actually ran.
    task.cancel() doesn't return the thread's state, until coroutine.close()
    task is better for everyday things, because it is very easy to use.
    coroutines are more complicated, and are better for multi tasking programs
    overall however, unless you need to get very technical, using either task.spawn() or coroutine.wrap() is fine.

  • @MajesticUC
    @MajesticUC 8 месяцев назад +65

    4:12. The reason why you dont use the brackets here is because you are not calling the function but are passing it as a parameter. If you use the brackets then you are not giving the task.spawn a function. Functions typically work as any other data type in lua. You could write a function like this:
    local add = function(num1,num2)
    return num1 + num2
    end
    If you use typeof() on a function it will return function. That is what task.spawn does to check if you're sending it a function. If you put the brackets then you will be running the function instead of passing it meaning that the typeof will not recognise the parameter as a function therefore giving you that error

    • @allstar4065
      @allstar4065 7 месяцев назад

      Right you’d be sending in whatever the function returns with the brackets, spawn(Func()) would be like running spawn(nil)

  • @ya7ioo
    @ya7ioo 8 месяцев назад +261

    you didn't use task.wait()... you better sleep with all holes closed tonight.

  • @makinnir
    @makinnir 8 месяцев назад +96

    dude you are literally exactly what i've been looking for thank you for existing

    • @mistasilly
      @mistasilly 8 месяцев назад +5

      check his woman tutorial it's even better

    • @customgunz00
      @customgunz00 8 месяцев назад

      @@mistasilly fr it helped tons i watched the whoel thing

    • @Xynterical
      @Xynterical 8 месяцев назад

      Mediocrity

    • @DemonPig666
      @DemonPig666 5 месяцев назад

      Fr

  • @Fodnex
    @Fodnex 8 месяцев назад +48

    I think you can make a variable and then run a task.spawn(), like
    local newThread = task.spawn(SomeFunction: function)
    which will return a thread, and then you can make it cancel (stop the thread)
    task.cancel(newThread)

    • @nolight_nosight
      @nolight_nosight 8 месяцев назад +1

      correct

    • @superbotnotabot
      @superbotnotabot 8 месяцев назад +2

      Think you could do the same with coroutines

    • @cosmic7140
      @cosmic7140 8 месяцев назад

      you can

    • @f-149
      @f-149 8 месяцев назад

      You can also do the same with events.
      local connection = BindableEvent.Fired:Connect(...)
      connection:Disconnect()

    • @hagglleer
      @hagglleer 8 месяцев назад +1

      This is exactly what I was thinking when he didn't know how to access threads

  • @X_INTENT
    @X_INTENT 8 месяцев назад +3

    That's CRAZY. Are you saying I never had the issue of needing to do something for all elements at the same time, but I always thought to myself it would happen someday and I wouldn't be able to fix it. This is just perfect!

  • @Tulinx
    @Tulinx 8 месяцев назад +3

    You’re literally the roblox version of khan academy thanks so much bro

  • @cypressment
    @cypressment 8 месяцев назад +1

    i am not joking, this actually saved me from making multiple scripts. thank you so much

  • @reminderIknows
    @reminderIknows 8 месяцев назад +5

    you really triggered me when you wrote wait(2) over task.wait(2)
    everything else is good though, nice tutorial
    I could teach you some of the task functions, I specialise in multi threaded luau
    i believe, not too sure but sure since I haven't used roblox studio in a while, task.spawn and task.delay returns a thread which you can use task.cancel on

    • @theofficialwoohoogamers
      @theofficialwoohoogamers 8 месяцев назад

      what's the difference?
      I prefer wait()

    • @reminderIknows
      @reminderIknows 8 месяцев назад +1

      @@theofficialwoohoogamers task.wait() is more updated and optimised, that's really the whole point of the task library.
      you could use spawn() which is deprecated in favour of task.spawn() as well as the other functions

    • @anto_fire8534
      @anto_fire8534 8 месяцев назад +2

      ​@@theofficialwoohoogamerswait() being deprecated, running at 30 hz, throttling and stuff

    • @theofficialwoohoogamers
      @theofficialwoohoogamers 8 месяцев назад

      @@anto_fire8534oh

    • @kirillfedorenko5325
      @kirillfedorenko5325 6 месяцев назад

      @@theofficialwoohoogamers task.wait() is simply more accurate and better version on wait()
      do not use wait() use task.wait()

  • @ZYTRXS
    @ZYTRXS 8 месяцев назад +16

    ceo of not knowing what hes talking about 🔥🔥🔥🔥

  • @Braylix
    @Braylix 8 месяцев назад +2

    Thats pretty sick, you should cover the other task. functions!

  • @couththememer
    @couththememer 7 месяцев назад +3

    It's funny how I started watching your tutorials occasionally for fun because of that one tutorial where you taught me how to love

  • @Novex-101
    @Novex-101 6 месяцев назад

    I have been making an earthbending game but because I didn't know this, you had to wait for every ability to completely finish before using another one. This has been a lifesaver.

  • @pomiw
    @pomiw 8 месяцев назад +2

    Me watching your videos as if I don't already know this information but your videos are always fun, engaging, and informative that I still watch through the whole thing ❤

  • @mangoferanous
    @mangoferanous 7 месяцев назад +1

    You're doing the world such a great service. Keep it up.

  • @bigtimeaorta
    @bigtimeaorta 5 месяцев назад

    i just got into scripting and this is so helpful. thanks!

  • @superblox1507
    @superblox1507 8 месяцев назад

    i used to watch you since one of your first video , keep it up , your videos are very interesting

  • @iplayminecraft2248
    @iplayminecraft2248 8 месяцев назад +1

    Task.delay is actually the only way to get a delay in JavaScript without a separate library (obviously it’s not called task.delay though)

  • @form767
    @form767 8 месяцев назад

    I learned about this recently and it is a new version of coroutines and is extremely useful

  • @xHitroverx
    @xHitroverx 8 месяцев назад +1

    The part where he has to check if the function, that spawns, has to use () is the equivalent of using a calculator to double check 10 + 10. Like you know but you never know if you don't know.

  • @notSkyhits
    @notSkyhits 2 месяца назад

    you have to assign a variable to task.cancel to cancel that thread:
    local newThread = task.spawn(functionName)
    task.cancel(newThread)

  • @fireremix8
    @fireremix8 8 месяцев назад

    Dude you're too good man, love your explanations. Will you ever make like a scripting series or are you more focused on tips and tricks?

  • @fiazer2181
    @fiazer2181 4 месяца назад

    i think task.cancel is used like that :
    local thread1 = task.spawn(function)
    task.cancel(thread1)

  • @FINDROBLOX
    @FINDROBLOX 7 месяцев назад

    its very useful for things like if idk you want to have multiple things going on for multiple players so like idk a sword system and you can do damage to objects but you want a cooldown if you add a cooldown on the server it will be for everyone instead of you can use this and have it only have a cooldown for the 1 player on the server

  • @everydaygoodday7289
    @everydaygoodday7289 8 месяцев назад

    It greatly reduces the writing of code, Thanks!

  • @olliegamebuilder
    @olliegamebuilder 8 месяцев назад +1

    Easy summary: play in background

  • @g5b479
    @g5b479 7 месяцев назад

    oh my god. i've been scripting for a while and i was unaware that you could cancel spawned tasks. i knew you could cancel delayed tasks before they begin, but i though that was all cancel was used for

  • @vuIent
    @vuIent 8 месяцев назад

    GOOD VIDEO KEEP IT UP and you'll be a very successful , I CAN SEE IT.

  • @GoatedDeveloper
    @GoatedDeveloper 7 месяцев назад

    lol already knew this exist really useful though I use it almost everytime I code something

  • @athing1003
    @athing1003 7 месяцев назад

    I really wanted to take your course, but unfortunately I don't know English, I can only read words in English and understand at best, but I can't understand spoken words

  • @Icyilc
    @Icyilc 7 месяцев назад

    I've been repeatedly using coroutines until this very video.

  • @claricenzuzi5204
    @claricenzuzi5204 8 месяцев назад +1

    I got coroutine wrap and task spawn confused apparently :/ also thanks for help

  • @DemonPig666
    @DemonPig666 5 месяцев назад

    Oh my god if I would've found this sooner

  • @AlreadyCode
    @AlreadyCode 5 месяцев назад +1

    is this the same as coroutines?

  • @bradleywhais7779
    @bradleywhais7779 8 месяцев назад

    I think there are 2 options for task.cancel()
    Inside of a task, you should be able to run task.cancel() by itself or task.cancel(self)
    Outside of a task you probably need to write the task to an object, so local task1 = task.spawn()

  • @zebradeveloper
    @zebradeveloper Месяц назад

    bro tried to teach us but ended up learning himself

  • @stilniysanya
    @stilniysanya 8 месяцев назад

    so this is basically like coroutines but much easier to understand

  • @loserssuite
    @loserssuite 7 месяцев назад

    it's like a less laggy coroutine.wrap

  • @cadenmartin2262
    @cadenmartin2262 7 месяцев назад

    So, it's literally just asynchronous code in a single script instance. Nice IG, but this is why Luau is somewhat underwhelming when compared to other languages. I've always made the argument that if Roblox utilized its engine's chief language, C++, for its OOP task, it would be much more efficient and effective. But, then again, with Luau being designed for novice programmers, I guess it finds a good balance between implementing new libraries and introducing new people to coding. Nonetheless, this is a seriously effective method! Thanks.

  • @DevDucksey
    @DevDucksey 8 месяцев назад

    This is actually so useful, thanks for the video. I was literally having a problem a few days ago where a thing wasn't running fast enough and the game was breaking, but I could see how task.spawn can be really useful in some situations. Will definitely be saving this for later!

  • @Ne-vc5pm
    @Ne-vc5pm 8 месяцев назад

    Roblox devs discover multithreadding

  • @Shinssei
    @Shinssei 7 месяцев назад

    sounds like coroutines but this is good thanks

  • @Isaacosaure
    @Isaacosaure 2 месяца назад

    Bro I have got 1 question how do you disconnect a spawned function ?

  • @GabrielGReal
    @GabrielGReal 7 месяцев назад

    this guy is just existing and give us life lessons

  • @lalaly2011
    @lalaly2011 8 месяцев назад +1

    i have read task.spawn had throttling, so i used corutines

    • @twomaddev
      @twomaddev 8 месяцев назад

      spawn() has throttling, task.spawn() does not.

  • @bruhblox_
    @bruhblox_ 8 месяцев назад

    You should make a video about DataStores

  • @masterofthelines22
    @masterofthelines22 8 месяцев назад

    What i used to do was make a function that coroutines a function... It kinda speed up everything. Imo coroutines are way better

  • @kontoarbuzowe6144
    @kontoarbuzowe6144 6 месяцев назад

    Thanks

  • @the-nm3xn
    @the-nm3xn 8 месяцев назад

    i was strugglin with this yesterday lol

  • @snaleizkool
    @snaleizkool 8 месяцев назад +4

    where is my next love tutorial byteblox

  • @tombStone-ek6cf
    @tombStone-ek6cf 8 месяцев назад

    another banger tutorial bbg

  • @sefacetin6970
    @sefacetin6970 6 месяцев назад

    me an my cousin trying to be roblox developer do you have/know any video series that can help me and my cousin ?

  • @ngspace9829
    @ngspace9829 8 месяцев назад

    Didn't know roblox was capable of multi threading!

    • @marchtimed
      @marchtimed 8 месяцев назад +1

      Actors are the only way to properly run things on multiple cpu cores, task.spawn and coroutines run things on virtualized threads which go on a single core's task scheduler (meaning it may be faster but its certainly not going to be 'multithreading')

  • @foralls5619
    @foralls5619 8 месяцев назад

    Can you make a tutorial on how to make a moving train like in jailbreak?

  • @nevajno-hto_ya
    @nevajno-hto_ya 9 дней назад

    i feel so dumb lol

  • @expraza9207
    @expraza9207 8 месяцев назад

    Bro I replaced all my script with something else, so what do I do! Ctrl Z doesn’t work!!!!😭🙏

    • @byteblox100
      @byteblox100  8 месяцев назад

      Script recovery probably, look it up

  • @CJBoxyeet
    @CJBoxyeet 8 месяцев назад

    I’m watching this as if I actually write code

  • @SlayTh3DraG0n
    @SlayTh3DraG0n 2 месяца назад

    What is the difference between task.wait(0.5) and wait(0.5)?

    • @JaymcJefty
      @JaymcJefty 2 месяца назад

      Wait is slower than task.wait

  • @toastystaken
    @toastystaken 8 месяцев назад +2

    oh so basically it ignores the task.wait()?

    • @Spelo1
      @Spelo1 8 месяцев назад +1

      No

    • @Dr_mafario
      @Dr_mafario 8 месяцев назад

      Its treating the task.wait() as if it wasnt part of the loop, so the loop will call the function a bunch of times super quickly but the function itself will wait 2 seconds before printing the message.
      Its kinda complicated and hard to explain, but its helpful when you want to add delay in functions without adding delay in loops.

    • @QUBIQUBED
      @QUBIQUBED 8 месяцев назад

      If you did this without the task.spawn() you would need 5 scripts for the same effect. Meaning, it'll print "message" 5 times every two seconds.

    • @aleksi789
      @aleksi789 3 месяца назад

      no it does multiple things at the same time

  • @HermesKitindi
    @HermesKitindi 8 месяцев назад

    To save a thread do
    Variable = task.delay(stuff here)
    Task.cancel(Variable)

  • @tanmanl7582
    @tanmanl7582 6 месяцев назад

    if im not wrong, in this case, does it start all 5 functions as soon as it can rather than doing each wait 1 by 1 and it having to wait each time

    • @byteblox100
      @byteblox100  6 месяцев назад

      Exactly. It creates a new “thread” for each function rather than running all 5 on one thread, one by one

    • @tanmanl7582
      @tanmanl7582 6 месяцев назад

      awesome sauce@@byteblox100

    • @tanmanl7582
      @tanmanl7582 6 месяцев назад

      awesome sauce@@byteblox100

  • @bijogami
    @bijogami 8 месяцев назад

    You can also use coroutines for this

    • @marchtimed
      @marchtimed 8 месяцев назад

      the idea of task.spawn/task.defer is that they're simplier and an alternative to corountines

  • @CYBERWIZARD
    @CYBERWIZARD 5 месяцев назад

    What is the difference between this and a Coroutine?

    • @aleksi789
      @aleksi789 3 месяца назад +1

      similar thing but coroutines have more features

  • @FluidEnjoyer
    @FluidEnjoyer 22 дня назад

    bro is stalling himself 💀

  • @IWyzAm
    @IWyzAm 8 месяцев назад

    Hey, is it different from coroutines?

    • @byteblox100
      @byteblox100  8 месяцев назад

      Nah it’s basically the same thing

  • @FlyinC4T
    @FlyinC4T 4 месяца назад

    local wait = task.wait
    :troll:

  • @a_username_lol
    @a_username_lol 8 месяцев назад

    bruh u dont use task.wait but u use task.spawn choose will u use task or not

  • @mrz3134
    @mrz3134 8 месяцев назад

    Oh so this is Roblox threading?

  • @vermamaerodriguez96
    @vermamaerodriguez96 8 месяцев назад

    yes

  • @muhtesemportakal7457
    @muhtesemportakal7457 Месяц назад

    i like your videos

  • @ItsIush
    @ItsIush 8 месяцев назад

    how would you use task.defer in a practical sense since i see that its not as used as the others

    • @byteblox100
      @byteblox100  8 месяцев назад

      Task.defer seems to hold something off until the VERY END of the frame. So if we start task.defer during frame 10, it will defer its function until everything else is done for that frame

    • @twomaddev
      @twomaddev 8 месяцев назад +1

      task.spawn() will spawn the task immediatly which is not good for the lua engine schedular. task.defer is always recommended as it runs the thread at the next resumption cycle which is optimal for the luau engine. Only use task.spawn when it is absolutly necessary for the thing to run at that exact moment.

  • @bradleywhais7779
    @bradleywhais7779 8 месяцев назад

    task.spawn() runs functions asyncronously.

  • @smilingpatienceL
    @smilingpatienceL 8 месяцев назад +1

    alr

  • @ninjacocovi
    @ninjacocovi 3 месяца назад +1

    Bro stop spamming the word “right”

  • @brickwall2900
    @brickwall2900 8 месяцев назад

    for running, you could do a "Run" instead of a "Play" if you only want to run the server only, not the client

  • @lua_programmer
    @lua_programmer 8 месяцев назад

    Man should've watched sleitnick's video before making this one 💀

  • @Pumpkilent
    @Pumpkilent 4 месяца назад

    wont this cause memory leaks

  • @Layththelion21
    @Layththelion21 8 месяцев назад

    Why am I watching this? I don't know how to script

  • @Euu_Arthur
    @Euu_Arthur 8 месяцев назад +1

    hey bro, you can make a tutorial of How to animate objects? Exemple: Doors, closets...

    • @byteblox100
      @byteblox100  8 месяцев назад +1

      Check out my tutorial on tweening

    • @Euu_Arthur
      @Euu_Arthur 8 месяцев назад

      but with "AnimationControler" not tween@@byteblox100

    • @SEclipse56
      @SEclipse56 8 месяцев назад +1

      If you don't want to tween, Create a rig with animationController. Note that your model needs a BasePart and all parts welded to it

  • @arisethee
    @arisethee 8 месяцев назад

    or just spawn, please at least explain to them what task does first bro ngl

    • @marchtimed
      @marchtimed 8 месяцев назад

      spawn is deprecated due to it being extremely old technology
      task is a library that recreates these older functions but improves them drastically with modern fixes
      they cant simply replace the old functions due to compatibility issues, but if you dont want to include the task, just do the following example at the beginning of your scripts
      local spawn = task.spawn

  • @ruslansmirnov9006
    @ruslansmirnov9006 8 месяцев назад

    why not call this video `tutorial on multithreading`?

  • @xxneweraxx7422
    @xxneweraxx7422 2 месяца назад

    nice video

  • @arvt_
    @arvt_ 5 месяцев назад

    literally ntts roblox tutorials

  • @europe_robloxGamin9878
    @europe_robloxGamin9878 5 месяцев назад

    no u

  • @HeroDevv
    @HeroDevv 8 месяцев назад

    Hey, I have a question, what's the difference between "spawn()" and "task.spawn()"?

    • @bruhiv747
      @bruhiv747 8 месяцев назад

      task is faster

    • @marchtimed
      @marchtimed 8 месяцев назад

      spawn is a older system that was outclassed later by coroutines, which has now been modernized into task.spawn and task.defer

  • @TheLazyEdition
    @TheLazyEdition 8 месяцев назад

    r u sure this will sav me time

  • @ben.wocker
    @ben.wocker 7 месяцев назад

    coroutine is better bro

  • @didymos03
    @didymos03 4 месяца назад

    bro took 4 minutes to get to the point

  • @Sysicks
    @Sysicks 8 месяцев назад

    hamburger

  • @AfonuOfficial
    @AfonuOfficial 8 месяцев назад

    you could also do:
    0 = time
    delay(0 ,function()
    print("idk")
    end)

    • @QUBIQUBED
      @QUBIQUBED 8 месяцев назад +1

      0 = time!?!?!?

    • @AfonuOfficial
      @AfonuOfficial 8 месяцев назад

      yep, 0 = how much time you want it to wait, in this case is 0@@QUBIQUBED

    • @lalaly2011
      @lalaly2011 8 месяцев назад +2

      bro what is this BAHAHA

    • @form767
      @form767 8 месяцев назад

      no bro, task.delay(delaytime, function()
      - -your multithreaded function here
      end)

    • @form767
      @form767 8 месяцев назад

      using delay, spawn, wait, without the task. causes throtelling idk how to write this

  • @x_gwb
    @x_gwb 8 месяцев назад

    E

  • @gsck5499
    @gsck5499 8 месяцев назад

    lmao everthing in this video is wrong and I just hope you know that

    • @byteblox100
      @byteblox100  8 месяцев назад

      Like half my videos are wrong lmao

  • @shreddy_fazchair
    @shreddy_fazchair 8 месяцев назад +2

    save me hours

  • @heckergamingXD
    @heckergamingXD 8 месяцев назад

    FIRST W

  • @heathershelton
    @heathershelton 8 месяцев назад

    SECOND

  • @Robloxer113
    @Robloxer113 5 месяцев назад

    So, maybe I'm lil dumb for my level, but what is the difference between coroutine.wrap and task.spawn() ? Please reply the ones who *understands* it.

    • @byteblox100
      @byteblox100  5 месяцев назад

      You can start and stop a coroutine, but not a task.spawn, which will keep running until the script finishes

  • @DiamondRoPlayz
    @DiamondRoPlayz 7 месяцев назад

    WHY ARE YOU NOT USING TASK.WAIT INSTEAD OF WAIT!?

    • @byteblox100
      @byteblox100  7 месяцев назад

      BECAUSE IM STRAIGHT 🔥🔥🔥

    • @DiamondRoPlayz
      @DiamondRoPlayz 7 месяцев назад

      @@byteblox100 who wouldn't be

  • @crazybolot
    @crazybolot 8 месяцев назад

    bite blozx

  • @chromatyp3
    @chromatyp3 8 месяцев назад +5

    why tf do you make these tutorials when you don't know the full topic
    anyways task.spawn returns a thread
    task.spawn: (function: () -> nil, ...: variant) -> thread
    task.cancel: (thread: thread) -> nil
    coroutines also return threads as well as task.delay and task.defer
    and for those who want a tl;dr on the task library here you go:
    * task.spawn: (function: () -> nil, ...: variant) -> thread
    calls/resumes the given function immediately
    * task.defer: (function: () -> nil, ...: variant) -> thread
    calls/resumes the given function on the end of the current invocation cycle (think of it like the function being put off until the end of the frame/heartbeat)
    * task.cancel: (thread: thread) -> nil
    cancels the given thread
    * task.wait: (seconds: number): number
    yields the given script for [seconds] seconds. note that it will return the real amount of time it yielded for
    * task.desynchronize: () -> nil
    this is for parallel luau which is its on can of worms
    * task.synchronize: () -> nil
    see task.desynchronize

    • @chromatyp3
      @chromatyp3 8 месяцев назад

      also stop trying to harvest emails please, its really sad

    • @toastystaken
      @toastystaken 8 месяцев назад

      im not reading allat 😭😭🙏

    • @simplicityd8703
      @simplicityd8703 8 месяцев назад +1

      Some people like pre scripted tutorials and others like a raw tutorial nothing wrong with that
      Its harder to explain something when you can't do something over and over
      Side note: sorry but how you wrote it didn't explain much

    • @orang6521
      @orang6521 8 месяцев назад

      @@chromatyp3 why would he harvest emails lol

    • @BunnlyGames
      @BunnlyGames 8 месяцев назад

      I used coroutines