I want to simply pass some variables and triggers between scripts. Enter bindables. But - I notice that when an event is triggered, its a separate ‘thread’, it just keeps going, and the next does its own thing on top, and the next does the same, and the next. How do i make that not happen? Or whats an alternative?
It really seems like i need a primer on this because i cannot follow the logic.
Im using collectionservice to see if a ‘cat’ has caught the ‘mouse’. This check is wrapped up in a function that triggers everytime that a random mouse player has been selected in another script and the moment that playerchar enters the game. a tool is added (the instrument) to the backpack etc. but i now get multiple tools added in at a linear rate. and when i look at the prints in the output, i see it repeat twice, repeat three times, repeat four times. the touch events also go up enormously. because those threads are running on top of each other i guess.
How do i tell the thread to STOP when the mouse is caught?
mousecatch check script:
--get services
local CollectionService = game:GetService("CollectionService")
local mouseplayer
-- get mouseplayer
local mouseCharSelectedEVENT = game.ServerScriptService.SelectRandomMouse.MouseCharSelected
--variables
local connection
local mousecaught = false
-- FUNCTIONS
local function detectMouseCatch()
print(mousecaught)
for _, cat in CollectionService:GetTagged("cat") do -- everything tagged 'cat' runs this
for _, part in ipairs(cat:GetChildren()) do -- for every part in a cat
if mousecaught == true then -- IF the mouse has been caught
break --stop
else
if part:IsA("BasePart") then --for every verified child that is a part
if mousecaught == true then -- IF the mouse has been caught
break --stop
else -- otherwise go on:
connection = part.Touched:Connect(function(hit) --connect to the regularly checking 'touched' function
print(mousecaught)
if mousecaught == true then -- if the mouse has been caught
return -- stop
else -- otherwise:
if hit.Parent.Name == "Mouse" then -- then when the cat's part touched something see if parent is mouse
connection:Disconnect() -- if so, disconnect from touched event so this part is registered only once
local mouse = hit.Parent -- the parent then is the mouse
mousecaught = true -- the mouse has been caught!
print(hit)
script.MouseCaughtEvent:Fire() -- tell everybody mouse is caught
mouseplayer.Character.Humanoid.Health = 0 --set mouse player health to zero
for _, mousepart in ipairs(mouse:GetChildren()) do -- for every obj in the mouse
if mousepart.Name == "MiddlePart" then
-- was supposed to move mouse to mouth of cat but cannot set position on part of tool
end
if mousepart.ClassName == "Part" then -- if its a part
mousepart.Anchored = true -- anchor the parts
end
end
-- add CAUGHT gui (BY playername!!/YOU)
-- add CAUGHT sound (bite sound, TJING)
if cat.ClassName == "Player" then
-- get points
end
end
end
end)
end
end
end
end
end
end
--EVENTS
mouseCharSelectedEVENT.Event:Connect(function(sentmouseplayer)
print("mouseplayer sent event")
mouseplayer = sentmouseplayer -- receive who is the mouseplayer
if mouseplayer then
mouseplayer.CharacterAdded:Connect(function() -- when mouseplayer enters game
mousecaught = false -- the mouse is no longer 'caught'
detectMouseCatch() -- see what touches/catches it then
print("when character gets added in mousecaught")
end)
end
end)
select random player and equip instrument
--Services and Variables
local ServerScriptService = game:GetService("ServerScriptService")
local playerservice = game:GetService("Players")
playerservice.PlayerAdded:Wait() -- this makes the script wait until a player has been added!!!!!
local players = playerservice:GetPlayers()
local RandomPlayer
local mouseplayer
local newInstrument
-- Functions
local function getNewMousePlayer()
RandomPlayer = players[math.random(1, #players)] -- random number between 1 and amount of players
mouseplayer = RandomPlayer
script.MouseCharSelected:Fire(mouseplayer) -- this fires the bindable event and sends the mouseplayer
end
local function setInstrumentToMouseplayer ()
local mouseplayerchar = mouseplayer.Character or mouseplayer.CharacterAdded:Wait()
local instrument = game.ServerStorage["The Instrument"]
newInstrument = instrument:Clone()
newInstrument.Parent = mouseplayer.Backpack -- put tool in backpack
mouseplayerchar.Humanoid:EquipTool(newInstrument) -- equip tool to mouseplayer
end
-- Do above functions at start of game
getNewMousePlayer()
setInstrumentToMouseplayer()
-- Receive events
mouseCaughtEVENT = ServerScriptService.MouseCaught.MouseCaughtEvent
mouseCaughtEVENT.Event:Connect(function() -- connecting to when the mouse is caught
print("mousecaughtevent received")
newInstrument:Destroy()
mouseplayer.CharacterAdded:Connect(function()
getNewMousePlayer() -- set a new mouseplayer
setInstrumentToMouseplayer() -- set the instrument to a new mouseplayer
print("when character gets added in randomouse")
end)
end)
-- events are COROUTINES!!! if theyre fired multiple times
-- at the same time, they'll run concurrently
-- if event is fired multiple times, then on char add
-- the mouseplayer is randomly set multiple times
-- and the instrument is created and equipped multiple times
-- do check whether there's already an instrument?
additionally, the output:
false - Server - MouseCaught:15
23:37:35.178 when character gets added in mousecaught - Server - MouseCaught:75
23:37:35.996 false (x18) - Server - MouseCaught:26
23:37:38.159 Head - Server - MouseCaught:34
23:37:38.162 mousecaughtevent received - Server - SelectRandomMouse:41
23:37:38.175 true (x5) - Server - MouseCaught:26
23:37:43.611 when character gets added in randomouse - Server - SelectRandomMouse:46
23:37:43.611 false - Server - MouseCaught:15
23:37:43.612 when character gets added in mousecaught - Server - MouseCaught:75
23:37:43.612 mouseplayer sent event - Server - MouseCaught:69
23:37:43.615 false (x5) - Server - MouseCaught:26
23:37:43.702 Nose - Server - MouseCaught:34
23:37:43.706 true (x7) - Server - MouseCaught:26
23:37:43.708 mousecaughtevent received - Server - SelectRandomMouse:41
23:37:43.713 true (x4) - Server - MouseCaught:26
23:37:49.190 when character gets added in randomouse - Server - SelectRandomMouse:46
23:37:49.190 false - Server - MouseCaught:15
23:37:49.190 when character gets added in mousecaught - Server - MouseCaught:75
23:37:49.191 when character gets added in randomouse - Server - SelectRandomMouse:46
23:37:49.191 false - Server - MouseCaught:15
23:37:49.192 when character gets added in mousecaught - Server - MouseCaught:75
23:37:49.192 mouseplayer sent event (x2) - Server - MouseCaught:69
23:37:49.195 false (x21) - Server - MouseCaught:26
23:37:49.841 Tail - Server - MouseCaught:34
23:37:49.844 true (x7) - Server - MouseCaught:26
23:37:49.845 mousecaughtevent received - Server - SelectRandomMouse:41
23:37:50.058 true (x96) - Server - MouseCaught:26
23:37:55.289 when character gets added in randomouse - Server - SelectRandomMouse:46
23:37:55.289 false - Server - MouseCaught:15
23:37:55.289 when character gets added in mousecaught - Server - MouseCaught:75
23:37:55.289 false - Server - MouseCaught:15
23:37:55.290 when character gets added in mousecaught - Server - MouseCaught:75
23:37:55.291 when character gets added in randomouse - Server - SelectRandomMouse:46
23:37:55.291 false - Server - MouseCaught:15
23:37:55.291 when character gets added in mousecaught - Server - MouseCaught:75
23:37:55.293 when character gets added in randomouse - Server - SelectRandomMouse:46
23:37:55.293 false - Server - MouseCaught:15
23:37:55.293 when character gets added in mousecaught - Server - MouseCaught:75
23:37:55.293 mouseplayer sent event (x3) - Server - MouseCaught:69
23:37:56.024 false - Server - MouseCaught:26
23:37:56.024 Tail - Server - MouseCaught:34
23:37:56.030 true (x15) - Server - MouseCaught:26
23:37:56.035 mousecaughtevent received - Server - SelectRandomMouse:41
23:38:01.467 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:01.468 false - Server - MouseCaught:15
23:38:01.468 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.469 false - Server - MouseCaught:15
23:38:01.469 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.470 false - Server - MouseCaught:15
23:38:01.471 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.475 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:01.475 false - Server - MouseCaught:15
23:38:01.476 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.476 false - Server - MouseCaught:15
23:38:01.477 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.480 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:01.481 false - Server - MouseCaught:15
23:38:01.481 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.484 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:01.484 false - Server - MouseCaught:15
23:38:01.485 when character gets added in mousecaught - Server - MouseCaught:75
23:38:01.485 mouseplayer sent event (x4) - Server - MouseCaught:69
23:38:01.990 false - Server - MouseCaught:26
23:38:01.990 Nose - Server - MouseCaught:34
23:38:01.993 true (x29) - Server - MouseCaught:26
23:38:01.998 mousecaughtevent received - Server - SelectRandomMouse:41
23:38:07.423 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:07.423 false - Server - MouseCaught:15
23:38:07.423 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.423 false - Server - MouseCaught:15
23:38:07.423 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.424 false - Server - MouseCaught:15
23:38:07.424 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.424 false - Server - MouseCaught:15
23:38:07.424 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.425 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:07.425 false - Server - MouseCaught:15
23:38:07.426 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.426 false - Server - MouseCaught:15
23:38:07.426 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.426 false - Server - MouseCaught:15
23:38:07.427 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.428 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:07.428 false - Server - MouseCaught:15
23:38:07.428 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.428 false - Server - MouseCaught:15
23:38:07.428 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.429 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:07.430 false - Server - MouseCaught:15
23:38:07.430 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.431 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:07.431 false - Server - MouseCaught:15
23:38:07.431 when character gets added in mousecaught - Server - MouseCaught:75
23:38:07.432 mouseplayer sent event (x5) - Server - MouseCaught:69
23:38:08.606 false - Server - MouseCaught:26
23:38:08.607 Head - Server - MouseCaught:34
23:38:08.611 true (x103) - Server - MouseCaught:26
23:38:08.630 mousecaughtevent received - Server - SelectRandomMouse:41
23:38:14.056 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:14.056 false - Server - MouseCaught:15
23:38:14.056 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.056 false - Server - MouseCaught:15
23:38:14.057 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.057 false - Server - MouseCaught:15
23:38:14.057 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.057 false - Server - MouseCaught:15
23:38:14.058 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.058 false - Server - MouseCaught:15
23:38:14.058 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.060 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:14.060 false - Server - MouseCaught:15
23:38:14.061 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.061 false - Server - MouseCaught:15
23:38:14.061 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.062 false - Server - MouseCaught:15
23:38:14.062 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.062 false - Server - MouseCaught:15
23:38:14.063 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.064 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:14.064 false - Server - MouseCaught:15
23:38:14.065 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.065 false - Server - MouseCaught:15
23:38:14.065 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.065 false - Server - MouseCaught:15
23:38:14.066 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.067 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:14.067 false - Server - MouseCaught:15
23:38:14.067 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.068 false - Server - MouseCaught:15
23:38:14.068 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.070 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:14.070 false - Server - MouseCaught:15
23:38:14.070 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.072 when character gets added in randomouse - Server - SelectRandomMouse:46
23:38:14.072 false - Server - MouseCaught:15
23:38:14.072 when character gets added in mousecaught - Server - MouseCaught:75
23:38:14.073 mouseplayer sent event (x6) - Server - MouseCaught:69
23:38:14.454 false - Server - MouseCaught:26
23:38:14.455 Tail - Server - MouseCaught:34
23:38:14.464 true (x167) - Server - MouseCaught:26
23:38:14.515 mousecaughtevent received - Server - SelectRandomMouse:41