Tower Placement - Tower Defense Tutorial #6
HTML-код
- Опубликовано: 14 июл 2024
- Building off the back of our raycasting video, we can finish the tower placement system. This one is a biggie!
DISCORD ► / discord
TWITTER ►@gnomecodeRBLX
TIMESTAMPS►
0:00 Intro
0:35 Creating GUI
3:34 Creating Placeholder Tower
7:45 Positioning Towers
11:55 Raycast Params
15:25 Fixing height offset
17:55 Fixing Collisions
20:17 Placing Towers
29:33 Removing Placeholders
31:29 Resricting Placement
36:50 Tower Rotation
39:30 Outro
Merry Christmas Gnomes! Hope you're all well. There will be a short break in the episodes during the holiday but we'll be back to work soon!
Merry Christmas Gnome! You deserve a break! Congratulations for a great year and have a great holiday!!
Merry Christmas Gnome! Have a nice time and enjoy!
That’s ok because it’s Christmas I was wondering if you can help me and my friend with a game we’re working on
merry chrysler
marry christmas ❤😍😘🥰
For anyone who’s code says depreciated it is because blacklist was removed from the game. Replace the word blacklist with exclude and it will work
Mine still don’t work
Nvm it work now
thanks for the help, i wondered why it didnt work
@@slobberyflame19 what did you do?
Yo bro your A w
For anyone making Towers R6 make it like this
local x = result.Position.X
local y = result.Position.Y + TowerToSpawn["Left Leg"].Size.Y + (TowerToSpawn.PrimaryPart.Size.Y/2)
local z = result.Position.Z
And set HipHeight to 0 if your tower floats in the air (for small towers)
TYSM
Thank you! You helped alot
THX SO MUCH IT WAS FLYING IN THE AIR
U HELPED ME I LIKE
thanks bro. you are a true guy fam.
This tutorial helped me a lot with my tower defense game! thanks gnomecode!
Absolutely brilliant tutorial. Youre very easy to understand what everything is and why we need it. Thank you.
These videos are really great. I'm building a similar game together with my 10 year old son and your way of explaining is so much better and beginner friendly than my way. I'm a developer myself and have been for the last 20 years, but I have close to zero teaching experience. This has been very helpful for my son which tries to watch these on his own. Thanks a ton for publishing these
damn u a good dad
yes goood dad frl no cap
Do you know why my tower doesnt place properly? I mean, it places but not where it should be
W dad
W dad
Thank you GnomeCode! Your tutorials are the best!
Guys, "Blacklist" is now deprecated. So, instead of "Blacklist", it's "Exclude" im pretty sure. Just read it from a devforum.
Yeah its good
If something is deprecated itll show it and then if you hover on it itll tell you what to do to make it up to date
I still did blacklist and it worked but it didn’t show anything in the update too, so I’ll still use blacklist.
@FrozenWater-ce8jn if you dont use exclude your game is going to break within a year
@@FrozenWater-realor later idek just dont use it
Thanks for teaching us and this improved my building skills, Thank you for the help and stuff.
Nice tutorial man! it sure took me a long time to fix the mistakes i wrote inside the script.
But the game is turning into a real tower defense game!
bro the update ruined the developing for my game
@@Frontline100Do u can place multiple Towers?
This was a big one, thank you gnome for a good tutorial!
Best series in the world, ty!
This is a very good tutorial! I learned many new things :D
your tutorials are great gnome, im on holiday but when i get back i'll continue on this series since ive only done the first 2 episodes :/
Your video was very helpful, I'm still learning and getting the hang of it still. I'm into House and EDM. I look forward to seeing more of your
Amazing tutorial! i love it!!
Hi gnomecode! this tutorial was amazing! Happy holidays and stay safe!
This is so good! Keep up the tower defense tutorials gnomecode!
*snoper*
snoop
merry christmas eve everyone!
thank you so much this series its really goodddddd
Honestly this series is made so well it deserves a subscribe. Lets get this guy to 100K!
For real man I just made my own td called zombie tower defense
@@yukys1 ok
@@yukys1 no advertisements
Nice
Hey Gnome! Definitely continue this series because it definitely is amazing, and you do a really good job on explaining the more complex things in coding, but I've been looking everywhere for a tutorial or even something to help me make a game like Phasmophobia or even a really good already made Roblox version called "Specter," so if you can help me make a game like this, I would greatly appreciate it. Keep making amazing vids!
make it yourself
@@danix_toe_alt rude.
Thank you!!! I’ve been looking for a good tutorial for a while now. One thing that you should do soon, is tower animations and a lobby with teleports to the maps for multiplayer..? Maybe a shop with currency too. Just suggestions!
he will do it just for later episodes
This rly helped me i was stuck for 1 hour but it's now ok Thanks man!
This vid actually took me two days to finish💀 nice tutorial!
Thank you for the video! I added some extra things to the script like when you press x it withdraws the tower and I also added a custom health bar can't wait for more videos!
Nice work!
VERY simple, but nice work yea.
How do I do that I would really love to where do I add it in
@@alexanderholmgaardlindholt4922 do you know how to do that I would like to
@@Scorpio894 Just learn scripting. Search up pea factory, how are you gonna add more to the game once he finishes the tutorial? Your game will just die.
thank you so so so much, i really needed this for my game
you did a good job, i learn so mutch from you thanks!!!
Thx
This is very good! I have some suggestions for future episodes: Modes, Animations, Tower Settings (set tower to first, strongest, closest, etc. ), Appearance changes in upgrades Edit: Maybe even make a shop of towers if you can
it isnt like he was most likely was gonna do this due to the fact that basically every tower defense game has this, not really and original idea but its normal in a tower defense game
@@RedLogged the first tower defense game on Roblox does not have Tower Settings
Edit: Many others don't too, even the first Tower Defense Game made. (out of roblox)
He already did a video about Animations its the part 3
@@Nachoegg tower animations
@@tinpothead6586 oh ok well he only did mob animations in part 3 but good idea
Pretty impressive tutorial. I personally would have done few things slightly different, but it was interesting to see what you did. I have tried making a few tower defense games before, but I'm never too sure how I should make the towers attack the enemy that is closest to the end.
Maybe try having attack teh unit that has existed the longest?
@@AkaThemeParkTycoon2Addictslower enemies completely invalidates this
@@AkaThemeParkTycoon2Addict Problem with that is, is slow enemies spawn and fast enemies spawn too, the fast enemies wont be targeted.
Thank you so much me and my friends were making a tower defense game and we gave up before we made waves but now were doing where i code and he models stuff
Good job, dude
Nice tutorial video, try doing a tower that spawns an ally (ex, military base spawns humvee)
I like the tutorial, i don't follow it but it looks very good, and not too hard for beginners :)
Good work GnomeCode!
That's great to hear, thank you!
As a beginner myself, this tutorial is so helpful and educational!
for those of you having the same issue i was having, if your character is still in the ground when you spawn it in, spawn a part at the bottom of the legs, so its colliding with the legs, move the legs to where the torso should be and move the torso, arms, and head up so it looks like it should normally, then get rid of the part. thats what i did and it works.
congrats to anyone who finished this big episode 👏
back again for another tip! heres how to make a tower that spawns units: 1: make a units folder in replicatedstorage, make a unit. 2: make a script in its humanoid and put this in it:
local map = workspace.Daycare -- replace daycare with your map
-- do it for how much waypoints you have
script.Parent:MoveTo(map.Waypoints["9"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["8"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["7"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["6"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["5"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["4"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["3"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["2"].Position)
script.Parent.MoveToFinished:Wait()
script.Parent:MoveTo(map.Waypoints["1"].Position)
script.Parent.MoveToFinished:Wait()
next, if there is a script in its humanoidrootpart, replace it with this: script.Parent.Touched:Connect(function(hit)
local plr = game.Players.LocalPlayer
if hit.Parent:FindFirstChild("Humanoid") and hit.Parent.Name ~= "Mini-Purple" then -- replace Mini-Purple with your units name
hit.Parent.Humanoid.Health -= 2
script.Parent.Parent:Destroy()
end
end)
Next, put this script in the tower that will spawn the units:
local tower = script.Parent.Parent
local mobs = workspace.Mobs
local function FindNearestTarget()
local maxDistance = 50
local nearestTarget = nil
for i, target in ipairs(mobs:GetChildren()) do
local distance = (target.HumanoidRootPart.Position - tower.HumanoidRootPart.Position).Magnitude
if distance < maxDistance then
nearestTarget = target
maxDistance = distance
end
end
return nearestTarget
end
local function SpawnUnit()
local unit = game.ReplicatedStorage.Units["Mini-Purple"]:Clone() -- replace Mini-Purple with your units name
unit.Parent = workspace.Towers
unit.HumanoidRootPart.CFrame = workspace.Daycare.Waypoints["9"].CFrame -- replace it with the last waypoint on your map
end
while true do
task.wait(2)
local target = FindNearestTarget()
if target then
target.Humanoid.Health -= 3
end
wait(1)
SpawnUnit()
end
Now your done!
Thank you
Sorry but it says "HumanoidRootPart is not part of workspace" how do I fix that?
Can you tell me how to do all of this? I might have messed something up
@@ownerthegamer1218 do you have discord
@@HurelyDev yes Owner_Pro1#0988
if you want to fix off hight of the tower just change hiphight of humanoid to -0.5 and in script change it too 1 for small towers like tds
😃
how? (Nvm i found out)
i was at the 8 minutes mark then i got engrossed in the potential masterpiece i could make and started dancing and bobbinb my head
i like these tutorials
This playlist is literally the equivalent to classes people pay to get about game development and such, this is straight up a blessing
Yes, the series is really great just finished it
And I see your comment is recent, if you are just starting out, good luck and have fun!
do you know if the tower placing works for mobile users too?
It does, later in the series gnome code goes into mobile support, but the ray cast works@@meg-michelle
@@dandinzin Hey can you help me, whenever I go to place a unit it shows its on the ground but then it spawns in the air about 1 to 2 studs up, pls help
"straight up blessing"💀💀💀💀💀
15:45 Warning flying gnomes have been spotted around the globe you can't run or hide they will find you
And they have slingshots
@@Panda-vm1vm true
I don't want to to to DIE!!!!!!!!
Ggggggggggggg
I dont wanna die!
TNice tutorials was excellent man, thank you so much! I'm a 40yr old noob that's always wanted to try making soft and never got around to it. I'm
Dam
Tip: If you want a grid, use local x = math.floor(result.Position.X)
local y = math.floor(result.Position.Y + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y / 2))
local z = math.floor(result.Position.Z)
math.round is more correct in this case and no need to do it on the y-axis.
@@Emil_Jansson yeah i dont know that math.round existed im sorry
this broke my script 😃
@@qwerty_qwerty Don't trust random code that doesn't tell you what to do with it
Yo this works so well thanks man
Amazing work! I have a question, will you make tower animations?
I think yes. Because he needs to work the towers more.
Yep, will be in episode 7
Pog
@@mijott it will be delayed maybe 1 day or 2,he sayed it in the comments
thank you homie appreciate it dawg,
40 minutes of fun
this help me alot! also I have a suggestion: a skin shop for towers, require money to spawn tower, a map teleporter [in lobby and then you select map in elevator/map select then teleported], gamemodes, gives buff tower.
Tds player?
@@mouseinglasses nope literally just the basics of a roblox td game
@@mouseinglasses tds doesnt let you select maps unless its in survival so it leans more towards critical tower defense
If you are having problems with the hipheight on your r6 character then go to the render stepped function and at the y position where it says local y = result.Position.Y + tower to spawn.Humanoid.Hipheight then in front of it add + 1 + (towerToSpawn.PrimaryPart.Size.Y /2) and set the hipheight for the humanoid to 0 in your character.
thx it fixed my hipheight bug!
@@anxerx4186 np.
for me * 2 worked as well
@@cobaltzero Ye, bc u used r15
Hey bro for me ita still in the ground to place how do i fix it
17:07 you can also just add 2 lol
but, thank you so much for the help I've been wanting to do this for a while and you let it happen, thank you!
Because he used those calculations, he can now use rigs of different sizes and heights and it will still work. It wouldn't work if he added 2, however.
This guy deserves 2 mil subs!
nah, too little. he deserves 10 mil
So for those who want to make hidden enemies *actually* work, this is how
First, you add a configuration folder into *every* single zombie you made, and rename it to "Attributes" or whatever you want.
Next, add a BoolValue and rename it to "Hidden".
After that, go to your tower and in the "if target then" script, add
if target.Attributes.Hidden.Value == false then
target.Humanoid:TakeDamage(1)
end
And for those whom want to make their towers an ACTUAL npc and make them work, here's the script i used (thanks to another guy for letting me know how to make towers face the enemy (PUT THE SCRIPT IN HUMANOIDROOTPART)
local tower = script.Parent.Parent
local mobs = workspace.Mob
local part = script.Parent
local function FindNearestTarget()
local maxDistance = 25
local nearestTarget = nil
for i, target in ipairs(mobs:GetChildren()) do
local distance = (target.HumanoidRootPart.Position - tower.HumanoidRootPart.Position).Magnitude
if distance < maxDistance then
nearestTarget = target
maxDistance = distance
end
end
return nearestTarget
end
while true do
local target = FindNearestTarget()
if target then
target.Humanoid:TakeDamage(1)
else
end
task.wait(0.1)
end
Hope it worked! :D
thx i didnt used but i think imma use it :D
I forgot the humanoid facing part but that's in the next episode, oh well!
i cant seem to make it so that specific towers CAN see hidden
Can you make that its LIKE with the updated tower script
now I want a tower that can attack hiddens
saving my spot! 31:40, the game is going well! i customized the animations, made my own troops, and learned a few things or more about scripting! this tutorial is efficient, and great to follow for starters! loved it!
I think i should give up
How did you not get error i got an error at 29:30
@@kiefsOnlinegames what was ur error?
@@eee6502 my tower isnt placing but i found out the problem
@kiefsOnlinegames i finally found out.. stupid me
at the line 52, here is the actual line:
local y = result.Position.Y + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y * 1.5)
THANKS SOOOOO MUSH
It goes a lil bit higher than normal, but it helped me fix a bug. Thanks!
Yes, and make sure that hipheight is 0 and not 2
Thank you
if your character doesn't have a hipheight, click the model and check it's size, and then make the hip height double the size of your model. it should work if you have a normal r6 rig.
That's so cool!
I recently encountered a problem where my gun wouldn't stick to my tower. I later figured out that I had to un-anchor it and I also made it a union to keep it more neat. I hope this helps you all!
The comment i needed to hear
I did that but for some reason now it just falls off
Edit: btw I have r6 model
Like it just falls to the ground instead of sticking to it
is it un-anchored and everything?@@cosmix2711
@@cosmix2711 (if you use the dfeault roblox animator) make the animation without the gun (i suggest duplicating it in case something rong happens) then after you finished the animation, rig the model with the weapon (because more motor parts causes error on roblox animator). [idk if i am right but..]
He didnt mention this but if you are using a model, not just a part use this in towertesting: local distance = (target.HumanoidRootPart.Position - tower.HumanoidRootPart.Position).Magnitude
at WHAT LINE
@@FrazdYT bruh if you see a local that means its a variable and local distance so replaces what local distance is with that
@@roboticgames2989 that was like 2 parts ago
you're god. Thank you Sooooooooooooooooooooooooooooooo much
thank you so much
R6 Models have a default HipHeight of 0, to fix this change it to 2 in the Humanoid settings in your Tower model. :)
THANKS!
there is a flaw to this, and thats that when the tower spawns, it will be floating.
i cant find a way to fix it
@@sraiaan same this has happened to me, so I just switched the tower to R15… I’m sure there is a way to fix it with R6 but I am not aware of it
@@sraiaan unanchor your primary part, it adjusts itself to the ground and on later levels anchor the humanoidrootpart so it stays still.
@@sraiaan Do this:
local y = result.Position.Y + towerToSpawn.Humanoid.HipHeight + 1.44 + (towerToSpawn.PrimaryPart.Size.Y / 2)
this spawns its at the right without making it float. (Replace 1.44 with your characters leg height
Collision Fix: If you still collide with your towers (can't walk through them) then, move your tower to workspace and unanchor it and anchor it again and put it back into the towers folder in replicatedstorage
I unanchored everything with an anchor enable/disable, still wont collide.
Ah me too
@@trafed898 you fixed it?
@@mrnoobyt3328 no
Hello guys ! can anyone help me pls ? my troup do not spawn where i click he spawn in its default workspace location ! (and I watched the video 5 times (at least) and I'm still blocked)(And (last time) there's no error so I can't correct it(yeah it's long sorry).)
Since my grandpa's birthday and my birthday are 1 week apart, this episode was published on my birthday and the very next episode was published on my grandpa's birthday 😁
thanks it helped so much!
Can you post your code in a comment I can't get mine to work
@@ZionSalcedo for what scripts
@@UTubeStudios Gamecontroller script
if you want the height offsett fixed with r6 use + towerToSpawn.Humanoid.HipHeight + 2 + (towerToSpawn.PrimaryPart.Size.Y / 2) instead of + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y / 2) make sure ur rigs hip height is 0 if you wish to do this.
BROO thank You so much!!!!!!
or you could just set the humanoid to have a hipheight of 2
@@terrencelin5133 no, this doesnt work for r6.
and if u have multiple sized r6 towers, you cant easily change that.
Let get Gnome to 50K by the end of the year as our Christmas Present! He deserves it!
#GnomeTo50K
#GnomeTo50K
#GnomeTo50K
#GnomeTo50K
#GnomeTo50K
#GnomeTo100K
thnx so much!
Thanks 😊
Im making a game with this tutorial but i have ran into a problem where i cant have accessories on my tower without anchoring the whole thing, is there a way to fix this or do i have to just not use animations?
have you tried simply unanchoring the accessories
weld it
For anyone who has an R6 model for your tower ("Select the humanoid to check") and when you place the tower it has a floating bug, change the RigType from R6 to R15 in the humanoid.
When i change the rig it just changes the arms legs and torso to brick what can i do to change that
@@wuwapit8293 maybe try using a different model that is R15 or maybe mess around with the hipheight.
@@nol12bloxYT setting hipheight to 0 works but when im placing the tower it clips into the floor
@@wuwapit8293 I had the same problem, but when I changed the rigtype to R15 and set hipheight to 2, it seems to work fine to me.
@@nol12bloxYT found a solution
add the height of one of the legs:
local y = result.Position.Y + towerToSpawn:FindFirstChild("Left Leg").Size.Y + (towerToSpawn.PrimaryPart.Size.Y / 2)
Absolutely!!
ik these are tutorials but like its still fun to watch even when your not using it, amazing videos
12:06 gnome jumpscare
I'm a gnome!
Dunno if im stupid or if its the code but im getting to about 19:00 in the video and after he does the forcefield effect and places it, it works for him, but not for me. I dont know what im doing wrong but I’ve double checked my code a stupid number of times with no fix. The tower doesn’t even appear anymore.
Help would be appreciated!!
(btw the tower doesnt even make it to the towers folder and the code stops around the part where its being cloned, i’ve tried printing but that aint working either)
hi! here is full script
local PhysService = game:GetService("PhysicsService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Runservice = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local events = ReplicatedStorage:WaitForChild("Events")
local towers = ReplicatedStorage:WaitForChild("Towers")
local SpawnTowerEvent = events:WaitForChild("SpawningTower")
local camera = workspace.CurrentCamera
local gui = script.Parent
local towerToSpawn = nil
local function MouseRaycast(exclude)
local mousePosition = UserInputService:GetMouseLocation()
local mouseRay = camera:ViewportPointToRay(mousePosition.X , mousePosition.Y)
local raycastParams = RaycastParams.new(exclude)
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.FilterDescendantsInstances = exclude
local raycastResult = workspace:Raycast(mouseRay.Origin, mouseRay.Direction * 1000, raycastParams)
return raycastResult
end
local function APTower(name)
local towerExists = towers:FindFirstChild(name)
if
towerExists then
towerToSpawn = towerExists:Clone()
towerToSpawn.Parent = workspace.Towers
for i, object in ipairs(towerToSpawn:GetDescendants()) do
if object:IsA("BasePart") then
object.CollisionGroup = ("Tower")
object.Material = Enum.Material.ForceField
end
end
end
end
gui.Spawn.Activated:Connect(function()
APTower("Baker")
end)
UserInputService.InputBegan:Connect(function(input, processed)
if processed then
return
end
if towerToSpawn then
if input.UserInputType == Enum.UserInputType.MouseButton1 then
SpawnTowerEvent:FireServer(towerToSpawn.Name, towerToSpawn.PrimaryPart.CFrame)
end
end
end)
Runservice.RenderStepped:Connect(function()
if towerToSpawn then
local result = MouseRaycast({towerToSpawn})
if result and result.Instance then
local x = result.Position.X
local y = result.Position.Y + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y / 2)
local z = result.Position.Z
local cFrame = CFrame.new(x, y, z)
towerToSpawn:SetPrimaryPartCFrame(cFrame)
end
end
end)
(its working)
Your the best
There was this funny thing after 15:18. You can actually fly!!!!
Can someone help me? My tower is working perfectly fine until I place it into the "Towers" folder. Once I do that and spawn the tower it stops printing everything it is being told to do and doesn't damage the enemy.
I'm having a similar probl3m but it's the tower just won't spawn
@@zek3was_here_ Yeah i am having the same problem
is the towers folder in workspace or replicatedstorage
@@plabulous replicatedstorage
@@plabulous replicatedstorage
i have a problem when i click where i want to place my tower it just go in the original spot that it was even the other tower go there so it stack in one place i dont konw if its because i dont use a humanoid
edit: i solved it it was because the primary part is inside the other part
how did u solve it?
@@TheOhioMonkey i changed the primary part to be the one with the other one in it
can i pls see your code i am really stuck on how to fix it
my tower would not stick to my cursor and it would be very hard for me to move it around as it keeps falling off, how do i make it so that it sticks to my mouse pointer?
There seems to be a bug in my GameController script.
When i try spawning a tower, it does not spawn. I saw a comment and it said that it was because i didn't specify what object the Humanoid was in when setting the Y position in the RenderStepped function.
I tried that and it still didn't work. Is there a reason why?
im having a very similar issue but instead it is saying argument 1 missing or nil and the tower doesn't spawn I've been trying for over 4 days and cant seem to find the issue
i actually have a problem that it is says that setprimaryPartCframe is not a valid member of workspace
Capitalize the f
Can you make a model with all the towers so we can take your towers?
he has already done this
this has been happening since episode 2 but every time the mobs spawn there is always one that is in workplace and cant be killed by my towers, how can i delete them as soon as i spawn in?
Humanoid is not a valid member of Model "Workspace.Towers.Cowboy". It keeps saying this for when I want the tower to stay on the ground and i cant fix it. Please help
the collision with mobs dosent work mobs cant walk past my slinger
If anyone is using R6 then replace your Y position script, with local y =result.Position.Y + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y + 1)
wdym at what
im using r6
oh damn, this is a good tip
thank you!
TYSM
Okay so I am having some trouble with my placement system. When I click on the tower it works fine and when I place it its fine. But lets say someone clicks a tower, then they decide they want to place a different tower then they would just click a different tower in the loadout. But in my game when you try to do that it spawns in a placeholder tower making it difficult to place other towers. Does anyone have a fix for this?
To get damage to work on a tower for now you need to change in the testing tower script (If your have your script in the tower) change workspace.TowerName.HumanoidRootPart to workspace.Tower.TowerName.HumanoidRootPart then damage should work!
"If u have ur script on ur tower" wait where i put it?
I don’t understand
I'm still having problems after 16:11 I have two problems. 1. My tower isn't dealing damage to the enemies 2. Even after the script was perfect my tower got stuck in the ground as placing it.
No.2 me too..
Edit: i actually rewrote the whole entire series and it worked u should try it and now im on episode 18 sofar sogood
no.2 im also stuck on that pls let me know if u find a solution
@@ratcraftplayzrblx6942 I figured out the issue. I think it's because I did not set the hipheight properly. If that's not the case, then I would rewatch the video a couple of times and check over your script as you're listening
@@JaxAttackRBX thank you but i kind of gave up on the idea bc it was a lot of work for me only but ty.
hopefully it worksrep you helped me
Your videos are great! i just have a teeny tiny problem. When i click add group in collision groups it gives me an error that has to do with built in studio scripts and i cant add any group even when i try to.
Can the next video have mobile support and/or console support? cause my friends cant access much - Fixed!
heres if you need mobile support (put in GameController)
function TouchLongPress(TouchPositions, state, gameProcessedEvent)
if canPlace then
spawnTowerEvent:FireServer(towerToSpawn.Name, towerToSpawn.PrimaryPart.CFrame)
RemovePlaceholderTower()
end
end
UserInput.TouchLongPress:Connect(TouchLongPress)
how would i do this?
@@sukiyaki4623Put the script part under the UserInputService.InputBegan function. this is to place towers on mobile
i need help: when i place another tower it just goes back to it's position when i put the tower in ReplicatedStorage
and there is a random block (or torso of my tower) in the left side, so GnomeCode help me with this problem when you see this. And also my tower’s lower body is stuck on floor when your preparing to place my tower. And how to make a tower and how to give your tower a weapon.
Same and I don't know how to fix either
Same for the 1st half
@@zgray3807 its anchored or smth
I have this problem too
00:03 Implement tower placement system.
02:10 Moving Tower Placement Code to Game GUI
06:48 Creating and testing tower placement in Tower Defense game
09:15 Setting tower position using coordinates
13:38 Setting up tower spawn parameters for proper placement
15:43 Adjusting character position with offset for proper alignment
19:30 Setting material type to force field for translucent effect
21:19 Using remote events to communicate between client and server
25:08 Checking tower existence and spawning it on the server
27:06 Completion of tower module script and connection to remote event
30:57 Limit tower placement to specific areas
32:49 Setting up tower placement and control in the script
36:25 Placement of towers is restricted to specific areas on the map.
38:14 Demonstrating tower rotation in Tower Defense game development.
ty
You can also make cancelling placing unit, by chicking if player pressed Q and towerToSpawn exists
38:43 SMALL DETAIL : For anyone that wants the rotation to "save" for placing the next unit just put rotation = rotiation not rotation = 0
You don't even need that code if you want the rotation to "save"
i need help, how do i make it look at the enemie, it wont damage it. Please respond with code, rthanks
did i do anything wrong, gnome code?
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local PhysicsService = game:GetService("PhysicsService")
local UserInputService = game:GetService("UserInputService")
local Events = ReplicatedStorage:WaitForChild("Events")
local Towers = ReplicatedStorage:WaitForChild("Towers")
local rotation = 0
local TowerToSpawn = nil
local CanPlace = false
local Camera = workspace.CurrentCamera
local gui = script.Parent
local function MouseRaycast(blacklist)
local mousePos = UserInputService:GetMouseLocation()
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
raycastParams.FilterDescendantsInstances = blacklist
local mouseRay = Camera:ViewportPointToRay(mousePos.X, mousePos.Y)
local raycastResult = workspace:Raycast(mouseRay.Origin, mouseRay.Direction * 1000, raycastParams)
return raycastResult
end
local function RemovePlaceholderTower()
if TowerToSpawn then
TowerToSpawn:Destroy()
TowerToSpawn = nil
rotation = rotation
end
end
local function AddPlaceholderTower(name)
local TowerExists = Towers:FindFirstChild(name)
if TowerExists then
TowerToSpawn = TowerExists:Clone()
TowerToSpawn.Parent = workspace.Towers
end
for i, object in ipairs(TowerToSpawn:GetDescendants()) do
if object:IsA("BasePart") then
PhysicsService:SetPartCollisionGroup(object, "Tower")
object.Material = Enum.Material.ForceField
object.Transparency = 0.301
object.Color = Color3.fromRGB(85, 255, 0)
end
end
end
UserInputService.InputBegan:Connect(function(input, processed)
if processed then
return
end
if TowerToSpawn then
if CanPlace then
if input.UserInputType == Enum.UserInputType.MouseButton1 then
Events.TowerSpawn:FireServer(TowerToSpawn.Name, TowerToSpawn.PrimaryPart.CFrame)
RemovePlaceholderTower()
end
elseif input.KeyCode == Enum.KeyCode.R then
rotation += 90
end
end
end)
local function ColorPlaceholderTower(color)
for i, object in ipairs(TowerToSpawn:GetDescendants()) do
if object:IsA("BasePart") then
object.Color = color
end
end
end
gui.MainFrame.button1.Activated:Connect(function()
AddPlaceholderTower("Patty")
end)
RunService.RenderStepped:Connect(function()
local result = MouseRaycast({TowerToSpawn})
if result and result.Instance then
if result.Instance.Parent.Name == "PlacementArea" then
CanPlace = true
ColorPlaceholderTower(Color3.new(0, 1, 0))
else
CanPlace = false
ColorPlaceholderTower(Color3.new(1, 0, 0))
end
local x = math.floor(result.Position.X)
local y = math.floor(result.Position.Y + TowerToSpawn.Humanoid.HipHeight + (TowerToSpawn.PrimaryPart.Size.Y / 2))
local z = math.floor(result.Position.Z)
local cframe = CFrame.new(x, y, z) *CFrame.Angles(0, math.rad(rotation), 0)
TowerToSpawn:SetPrimaryPartCFrame(cframe)
end
end)
cuz for some reason my character doesn't turn even though I did exactly what he said.
@@capistudio867 Open output in the view tab of roblox studio and hit play, it will show you what isn't working by showing a red text about the problem and you can click the red text and send you to a specific part of the script, you can then go into the video at that specific part of the script and see if you messed up anything, I always do that if it messes up, usually some grammar or punctuation error
if you want to make it so you can cancel the tower placement, go right under where you put the rotation part and put
elseif input.KeyCode == Enum.KeyCode.Q then
RemovePlaceholderTower()
end
you can replace the keycode with anything you want but I just put it as Q
on what line?
Thank you!
for anyone who is having trouble with this do this to make it work right.
RemovePlaceholderTower()
end
------------------------------------------------------------------------------------------------------------------ don't copt anything before this line this is just to show where to put it
elseif input.KeyCode == Enum.KeyCode.R then
rotation += 90
elseif input.KeyCode == Enum.KeyCode.Q then
RemovePlaceholderTower()
end
end
end)
Guys if you make the towers to be R6 and small make it like this (FIXED)
local x = result.Position.X
local y = result.Position.Y + towerToSpawn["Left Leg"].Size.Y + (towerToSpawn.PrimaryPart.Size.Y/0.4)
local z = result.Position.Z
if its still sinking make it 0.4 - 2 and find which is the perfect one :)
Also make it 0 HipHeight
hey can you give me the time stamp for this code
@@CRAPPYMANGOD thx
what to do if i did the collision correctly but when i put the tower i go through it but it moves the same with the mob what should i do with it please tell me
If you want enemies ignore timeout, then you can use this "fix"
timeout = when the humanoid dont reach the target in 8 seconds, it will go to the next point immediately.
function enemy.MoveNPC(point, mob)
local rootpart = mob:WaitForChild("HumanoidRootPart")
local humanoid = mob:WaitForChild("Humanoid")
repeat
wait()
humanoid:MoveTo(Point)
until (rootpart.Position - Vector3.new(Point.X, HRP.Position.Y, Point.Z) ).magnitude
ignore the #paths lmao
or just add more waypoints
HEY luki my script isnt working can u tell me whats wrong pleasee
local PhysicsService = game:GetService("PhysicsService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local events = ReplicatedStorage:WaitForChild("Events")
local towers = ReplicatedStorage:WaitForChild("Towers")
local spawnTowerEvent = events:WaitForChild("SpawnTower")
local camera = workspace.CurrentCamera
local gui = script.Parent
local towerToSpawn = nil
local canPlace = false
local function MouseRayCast(blacklist)
local mousePosition = UserInputService:GetMouseLocation()
local mouseRay = camera:ViewportPointToRay(mousePosition.X, mousePosition.Y)
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
raycastParams.FilterDescendantsInstances = blacklist
local raycastResult = workspace:Raycast(mouseRay.Origin, mouseRay.Direction * 1000, raycastParams)
return raycastResult
end
local function RemovePlaceholderTower()
if towerToSpawn then
towerToSpawn:Destroy()
towerToSpawn = nil
end
end
local function AddPlaceholderTower(name)
local towerExists = towers:FindFirstChild(name)
if towerExists then
RemovePlaceholderTower()
towerToSpawn = towerExists:Clone()
for i, object in ipairs(towerToSpawn:GetDescendants()) do
if object:IsA("BasePart") then
PhysicsService:SetPartCollisionGroup(object, "Tower")
object.Material = Enum.Material.ForceField
end
end
end
end
local function ColorPlaceholderTower(color)
for i, object in ipairs(towerToSpawn:GetDescendants()) do
if object:IsA("BasePart") then
object.Color = color
end
end
end
gui.Spawn.Activated:Connect(function()
AddPlaceholderTower("Slinger")
end)
UserInputService.InputBegan:Connect(function(input, processed)
if processed then
return
end
if towerToSpawn then
if input.UserInputType == Enum.UserInputType.MouseButton1 then
if canPlace then
spawnTowerEvent:FireServer(towerToSpawn.Name, towerToSpawn.PrimaryPart.CFrame)
RemovePlaceholderTower()
end
end
end
end)
RunService.RenderStepped:Connect(function()
if towerToSpawn then
local result = MouseRayCast({towerToSpawn})
if result and result.Instance then
if result.Instance.Parent.Name == "TowerArea" then
canPlace = true
ColorPlaceholderTower(Color3.new(0,1,0))
else
canPlace = false
ColorPlaceholderTower(Color3.new(1,0,0))
end
local x = result.Position.X
local y = result.Position.Y + towerToSpawn.Humanoid.HipHeight + (towerToSpawn.PrimaryPart.Size.Y / 2)
local z = result.Position.Z
local cframe = CFrame.new(x,y,z)
towerToSpawn:SetPrimaryPartCFrame(cframe)
end
end
end)
@@mazenez4222 does the script gives any error?
@@lukiValent yo Luki, i tried using the code, BUT it doesnt seem to work in the mob move part, is there a fix for that? (It gives an error that mobmove isnt a parent of "Basic" (custom) zombie)
(Solved, note for future me to remember this comment if it happens again)
When i press the spawn button my tower gets cloned in the place where i left it instead of following my mouse, any ideas why this isn't working?
I've tried using a mesh part as my tower and a humanoid NPC as a tower and they both act the same, they work exactly like this: 7:17
My code is the same as the video except everything past fixing height offset
Solution: I checked the video 3 times, and just now i realized what was wrong in the game controller script:
local function AddPlaceholderTower(name)
local towerExists = towers:FindFirstChild(name)
if towerExists then
local towerToSpawn = towerExists:Clone()
towerToSpawn.Parent = workspace.Towers
end
end
All you have to do it delete the "local" in the third towerToSpawn
TYSM!
You are an angel
Holy Bro I love you thank you you just saved my life and like 35 hours of trying to find out the bug
*I tried to fix 1 hour, THANKS*
It still spawns it in the placeholder position and not where i clicked