Remarque : ce didacticiel explique comment créer un équipement personnalisé. Il y a beaucoup de scripts et de construction, donc si vous êtes débutant, restez à l'écart.
Quoi qu'il en soit, voici le tutoriel de Relorelo84 (Dronian) sur la façon de créer votre propre équipement personnalisé. Tout d'abord, je vais vous montrer comment faire un jetpack avec n'importe quoi (même une tête de noob, parce que pourquoi pas ?). Il existe un classement de la difficulté du didacticiel, sur une échelle de 5.
- Très facile
- Facile
- Medium
- Dur
- Très dur
Cela inclut également les didacticiels de ColorfulBrendon (ColorfulBrendonROBLOX) et A84hg, alors j'espère que vous apprécierez la collaboration et que vous passerez un bon moment à fabriquer des équipements tels que des jetpacks, des épées et bien plus encore !
Contenu
- 1 Tutoriel 1 : Jetpack
- 2 Tutoriel 2 : Bloxy Cola
- 3 Tutoriel 3: Noob Boy Partie 1
- 3.1 Etape 1 : Réalisation de la console
- 3.2 Étape 2 : Ajout des quatre sons
- 3.3 Étape 3 : Le scénario
- 3.4 Étape 4 : GameGui et ScoreFrame.
- 4 Tutoriel 4 : Fabriquer une épée
- 5 Comment créer des boutons de génération de messages personnalisés
- 6 Tutoriel 5 : Truelle
- 6.1 Le début
- 6.2 Nettoyage des briques
- 6.3 WallMaker
- 6.4 Interface graphique locale
- 6.5 Poignée, sons et maillage
- 7 Tutoriel 6 : Bombe à retardement
Tutoriel 1 : Jetpack
Avez-vous déjà vu le Jetpack expérimental ultra-secret militaire américain sur des modèles gratuits ? Si oui, avez-vous voulu avoir un jetpack à votre place similaire à celui-ci, mais vous êtes très tristement célèbre pour avoir volé des modèles gratuits ? Eh bien, voici comment en faire un. Ce tutoriel note 4 (difficile).
Partie 1 : Fabrication du jetpack réel
Tout d'abord, allez dans Insérer, puis sélectionnez Objet. Une fenêtre contextuelle apparaîtra, avec beaucoup de choses à mettre. Faites défiler vers la droite jusqu'à ce que vous voyiez l'option d'insérer un outil. Cliquez dessus. Il devrait apparaître dans le StarterPack. Si ce n'est pas le cas, faites-le glisser dans le StarterPack. Sélectionnez-le et renommez-le tout ce qui est approprié. Ensuite, placez une brique dans l'outil et renommez-la "Handle" sans guillemets. Les possibilités pour votre Jetpack fabriqué à la main sont franchement infinies ; La tête d'un noob ou d'un invité, un objet maillé ou même un chapeau. Assurez-vous qu'il n'est pas ancré, ou vous serez coincé dans le sol lorsque vous le testerez. Maintenant, cliquez sur le nom de votre jetpack. Retournez à nouveau à la fenêtre Objets. Ajoutez quatre sons à l'intérieur de la poignée (ne les ajoutez pas dans l'outil, ou vous le gâcherez). Renommez-les EngineFail, InitialThrust, LowFuelWarning et Thrusting.
PARTIE 2 : Les sons du jetpack
Ajoutez un autre objet à l'outil cette fois ; un NumberValue. Faites le nom CurrFuel. Dans la barre indiquant la valeur, mettez n'importe quel type de carburant que vous aimez. Par exemple, je mettrai 20000 carburant (ne mettez pas de virgules !). Maintenant, il est temps d'ajouter les sons à votre jetpack. Mettez ces codes pour les Sound ID des quatre sons :
- EngineFail : http://www.roblox.com/asset/?id=30624305
- InitialThrust : http://www.roblox.com/asset/?id=30624262
- LowFuelWarning : http://www.roblox.com/asset/?id=30624357
- Poussée : http://www.roblox.com/asset/?id=30624426
Le tester prouvera qu'il est TRÈS inachevé. Eh bien, nous devons ajouter deux autres choses à notre jetpack sur mesure ; l'interface graphique pour le carburant et le script qui rassemble tout.
PARTIE 3 : heure de l'interface graphique
Il y a deux objets GUI dans le jetpack que vous devez ajouter ; arrêt et FuelGui. Dans votre outil Jetpack, ajoutez une animation. Nommez-le "arrêt" sans les guillemets. Dans l'AnimationId, mettez "f5c060f01391b53f42d43c28d722cfab" sans les guillemets. Une interface graphique vers le bas, une pour aller.
Ajoutez un ScreenGui et renommez-le FuelGui. Ceci est crucial, car il vous indique combien de carburant vous avez. Dans FuelGui, mettez un Frame et un ImageLabel. NE LES RENOMMEZ PAS. Mettez ces statistiques dans Frame :
- Couleur d'arrière-plan3 : 255 ; 255 ; 255
- BorderColor3 : 0 ; 0 ; 0
- TailleBordurePixel : 0
- Poste : {0.900000036, 0}, {0.200000003, 0}
- Taille : {0, 40}, {0, 300}
Vous avez terminé le premier, maintenant pour le second.
- Couleur d'arrière-plan3 : 255 ; 255 ; 255
- Transparence de l'arrière-plan : 1
- BorderColor3 : 0 ; 0 ; 0
- TailleBordurePixel : 0
- Image : http://www.roblox.com/asset/?id=30559074
- Poste : {0.900000036, 0}, {0.200000003, 0}
- Taille : {0, 40}, {0, 300}
En le testant à nouveau, il est toujours cassé ! Eh bien, c'est parce que nous avons une dernière chose à faire. Nous devons mettre dans le code qui tient tout ensemble.
PARTIE 4 : Le scénario
Bon, voici beaucoup de code. N'oubliez pas que le maxFuel local doit être le même que CurrFuel. Créez un LocalScript et mettez-le dedans.
local Tool = script.Parent local mass = 0 local player = nil local equalizingForce = 236 / 1.2 -- amount of force required to levitate a mass local gravity = .75—things float at > 1 local moving = false local maxFuel = 20000 local fuel = Tool.CurrFuel.Value local gui = nil local anim = nil local jetPack = nil local regen = false local force = Instance.new("BodyVelocity") force.velocity = Vector3.new(0,0,0) local bodyGyro = Instance.new("BodyGyro") bodyGyro.P = 20000 bodyGyro.D = 8000 bodyGyro.maxTorque = Vector3.new(bodyGyro.P,bodyGyro.P,bodyGyro.P) local cam = nil local Flame = nil function onEquippedLocal(mouse) player = Tool.Parent mass = recursiveGetLift(player) force.P = mass * 10 force.maxForce = Vector3.new(0,force.P,0) mouse.Button1Down:connect(thrust) mouse.Button1Up:connect(cutEngine) cam = game.Workspace.CurrentCamera anim = player.Humanoid:LoadAnimation(Tool.standstill) anim:Play() gui = Tool.FuelGui:clone() updateGUI() gui.Parent = game.Players:GetPlayerFromCharacter(player).PlayerGui equipPack() regen = true regenFuel() end function equipPack() jetPack = Tool.Handle:clone() jetPack.CanCollide = false jetPack.Name = "JetPack" jetPack.Parent = game.Workspace Tool.Handle.Transparency = 1 local welder = Instance.new("Weld") welder.Part0 = jetPack welder.Part1 = player.Torso welder.C0 = CFrame.new(Vector3.new(0,0,-1)) welder.Parent = jetPack Flame = Instance.new("Part") Flame.Name = "Flame" Flame.Transparency =1 Flame.CanCollide = false Flame.Locked = true Flame.formFactor = 2 Flame.Size = Vector3.new(1,0.4,1) Flame.Parent = jetPack local Fire = Instance.new("Fire") Fire.Heat = -20 Fire.Size = 6 Fire.Enabled = false Fire.Parent = Flame local firer = Instance.new("Weld") firer.Part0 = jetPack.Flame firer.Part1 = jetPack firer.C0 = CFrame.new(Vector3.new(0,2,0)) firer.Parent = jetPack.Flame end function updateGUI() gui.Frame.Size = UDim2.new(0,40,0,300 * (Tool.CurrFuel.Value/maxFuel)) gui.Frame.Position = UDim2.new(0.9,0,0.2 + (0.2 * ((maxFuel - Tool.CurrFuel.Value)/maxFuel)),0) end function onUnequippedLocal() regen = false force:remove() bodyGyro:remove() anim:Stop() anim:remove() gui:remove() if jetPack ~= nil then jetPack:remove() jetPack = nil end Tool.Handle.Transparency = 0 end function thrust() if fuel > 0 then thrusting = true force.Parent = player.Torso jetPack.Flame.Fire.Enabled = true Tool.Handle.InitialThrust:Play() bodyGyro.Parent = player.Torso while thrusting do bodyGyro.cframe = cam.CoordinateFrame force.velocity = Vector3.new(0,cam.CoordinateFrame.lookVector.unit.y,0) * 50 fuel = fuel - 1 Tool.CurrFuel.Value = fuel if fuel <= 0 then Tool.Handle.EngineFail:Play() cutEngine() end updateGUI() wait() Tool.Handle.Thrusting:Play() if fuel <= 1 then Tool.Handle.LowFuelWarning:Play() end end Tool.Handle.Thrusting:Stop() Tool.Handle.LowFuelWarning:Stop() end end function cutEngine() thrusting = false jetPack.Flame.Fire.Enabled = false force.velocity = Vector3.new(0,0,0) force.Parent = nil anim:Stop() bodyGyro.Parent = nil end Tool.Equipped:connect(onEquippedLocal) Tool.Unequipped:connect(onUnequippedLocal) local head = nil function recursiveGetLift(node) local m = 0 local c = node:GetChildren() if (node:FindFirstChild("Head") ~= nil) then head = node:FindFirstChild("Head") end—nasty hack to detect when your parts get blown off for i=1,#c do if c[i].className == "Part" then if (head ~= nil and (c[i].Position - head.Position).magnitude < 10) then—GROSS if c[i].Name == "Handle" then m = m + (c[i]:GetMass() * equalizingForce * 1) -- hack that makes hats weightless, so different hats don't change your jump height else m = m + (c[i]:GetMass() * equalizingForce * gravity) end end end m = m + recursiveGetLift(c[i]) end return m end function regenFuel() while regen do if fuel < maxFuel then fuel = fuel + 1 Tool.CurrFuel.Value = fuel updateGUI() end wait(0.2) end end
Testez-le, et cela fonctionne parfaitement ! Enregistrez-vous pour mon deuxième tutoriel, où je vais vous montrer comment faire votre propre Bloxy Cola.
Tutoriel 2 : Bloxy Cola
Ce tutoriel est classé 2 (Facile).
Étape 1 : Faire le Bloxy Cola
Allez dans Insérer, sélectionnez Objet et cliquez sur Outil. Un outil devrait apparaître. Faites-le glisser dans votre StarterPack et nommez-le comme vous le souhaitez. Par exemple, je nommerai le mien le Shedletsky Cola. Ajoutez une brique/tête/maille 1x1 dans l'outil et nommez-le Poignée. Assurez-vous qu'il n'est pas ancré.
Étape 2 : Sons
Maintenant que vous avez terminé le manche, il est maintenant temps d'ajouter les sons. Allez dans Insérer, sélectionnez Objet et créez deux sons. Nommez un DrinkSound et nommez l'autre OpenSound, mais placez-les dans le manche du Bloxy Cola. Dans les SoundID, mettez-les pour les sons ;
- DrinkSound : http://www.roblox.com/asset/?id=10722059
- OpenSound : http://www.roblox.com/asset/?id=10721950
Maintenant, voici la dernière partie ; le script.
Étape 3 : Le scénario
Insérez un script dans l'outil et nommez-le BloxyColaScript. Mettez ceci dans le script ;
outil local = script.Parent; enabled = true fonction onActivated() si non activé, alors return end enabled = false Tool.GripForward = Vector3.new(0,-.759,-.651) Tool.GripPos = Vector3.new(1.5,-.5,.3 ) Tool.GripRight = Vector3.new(1,0,0) Tool.GripUp = Vector3.new(0,.651,-.759) Tool.Handle.DrinkSound:Play() wait(3) local h = Tool. Parent:FindFirstChild("Humanoid") if (h ~= nil) then if (h.MaxHealth > h.Health + 5) then h.Health = h.Health + 5 else h.Health = h.MaxHealth end end Outil. GripForward = Vector3.new(-.976,0,-0.217) Tool.GripPos = Vector3.new(0.03,0,0) Tool.GripRight = Vector3.new(.217,0,-.976) Tool.GripUp = Vector3.new(0,1,0) enabled = true end function onEquipped() Tool.Handle.OpenSound:play() end script.Parent.Activated:connect(onActivated) script.Parent.Equipped:connect(onEquipped)
Testez-le et vous venez de créer votre propre Bloxy Cola personnalisé ! Dans le prochain didacticiel, vous apprendrez à fabriquer l'un des engrenages les plus avancés de tous les temps ; Les Aventures de Noob Boy : Partie 1.
Tutoriel 3: Noob Boy Partie 1
Ce tutoriel note un 5 (Très Difficile).
Étape 1 : fabrication de la console
Insérez un outil et appelez-le comme vous voulez. Maintenant, ajoutez une brique 1x1 appelée Handle dans l'outil, mais assurez-vous qu'elle n'est pas ancrée. Maintenant, il est temps d'ajouter quatre sons.
Étape 2 : Ajout des quatre sons
Dans le manche, ajoutez quatre Sounds ; Échec, saut, prix et chanson. Pour les SoundIds, mettez-les ;
- Échec : http://www.roblox.com/asset/?id=32202382
- Aller : http://www.roblox.com/asset/?id=32201677
- Prix : http://www.roblox.com/asset/?id=32201701
- Chanson : http://www.roblox.com/asset/?id=32200781
Nous avons ajouté les sons, mais le tutoriel est loin d'être terminé.
Étape 3 : Le scénario
Vous vous demandez peut-être ; Pourquoi ajouter le script maintenant ? Eh bien, il est préférable de le faire en premier car le script est en fait plus facile que d'ajouter les interfaces graphiques ! Faites un LocalScript et mettez-le dedans ;
local Tool = script.Parent local gui = nil local mapParts = {} local player = nil local keyDownCon = nil local keyUpCon = nil local clickCon = nil local platforming = false local time = 0 local gaming = true local head = nil local left = false local right = false local jump = false local prize = nil local prizeRegenTimer = 0 local walkCounter = 0 local playerWalkForward = {"32171523","32171543","32171566","32171582","32171594"} local playerWalkBackward = {"32168430","32168450","32168470","32168483","32168492"} local playerVelocity = Vector2.new(0,0) function onEquipped(mouse) Tool.Handle.Song:Stop() Tool.Handle.Jump:Stop() Tool.Handle.Prize:Stop() Tool.Handle.Fail:Stop() enabled = false gui = Tool.GameGui:clone() player = gui.Cabinet.Screen.Player mapParts = gui.Cabinet.Screen.Map:GetChildren() keyDownCon = mouse.KeyDown:connect(onKeyDown) keyUpCon = mouse.KeyUp:connect(onKeyUp) clickCon = gui.Cabinet.SoundOnOff.MouseButton1Click:connect(soundChanger) if Tool.Handle.Song.Volume == 0 then gui.Cabinet.SoundOnOff.Image = "http://www.roblox.com/asset/?id=32203595" else gui.Cabinet.SoundOnOff.Image = "http://www.roblox.com/asset/?id=32203454" end head = Tool.Parent:FindFirstChild("Head") end Tool.Equipped:connect(onEquipped) function onUnequipped() gaming = false head.Anchored = false Tool.Handle.Song:Stop() Tool.Handle.Jump:Stop() Tool.Handle.Prize:Stop() Tool.Handle.Fail:Stop() game.Workspace.CurrentCamera.CameraType = 5 gui:remove() keyDownCon:disconnect() keyUpCon:disconnect() clickCon:disconnect() clickCon = nil keyDownCon = nil keyUpCon = nil end Tool.Unequipped:connect(onUnequipped) local enabled = false function onActivated() if enabled then return end enabled = true game.Workspace.CurrentCamera.CameraType = 1 head.Anchored = true prize = nil prizeRegenTimer = 0 time = 0 gui.Parent = game.Players:GetPlayerFromCharacter(Tool.Parent).PlayerGui Tool.Handle.Song:Play() gameLoop() Tool.Handle.Song:Stop() gui:remove() gui = Tool.GameGui:clone() clickCon = gui.Cabinet.SoundOnOff.MouseButton1Click:connect(soundChanger) if Tool.Handle.Song.Volume == 0 then gui.Cabinet.SoundOnOff.Image = "http://www.roblox.com/asset/?id=32203595" else gui.Cabinet.SoundOnOff.Image = "http://www.roblox.com/asset/?id=32203454" end player = gui.Cabinet.Screen.Player mapParts = gui.Cabinet.Screen.Map:GetChildren() game.Workspace.CurrentCamera.CameraType = 5 head.Anchored = false enabled = false end Tool.Activated:connect(onActivated) function soundChanger() if gui.Cabinet.SoundOnOff.Image == "http://www.roblox.com/asset/?id=32203454" then gui.Cabinet.SoundOnOff.Image = "http://www.roblox.com/asset/?id=32203595" Tool.Handle.Song.Volume = 0 Tool.Handle.Jump.Volume = 0 Tool.Handle.Prize.Volume = 0 Tool.Handle.Fail.Volume = 0 else gui.Cabinet.SoundOnOff.Image = "http://www.roblox.com/asset/?id=32203454" Tool.Handle.Song.Volume = 0.5 Tool.Handle.Jump.Volume = 0.5 Tool.Handle.Prize.Volume = 0.5 Tool.Handle.Fail.Volume = 0.5 end end function onKeyDown(key) key:lower() if key == "a" then left = true right = false elseif key == "d" then left = false right = true elseif key == "w" then jump = true end end function onKeyUp(key) key:lower() if key == "a" then left = false elseif key == "d" then right = false elseif key == "w" then jump = false end end function Physics() if playerVelocity.y < 8 then playerVelocity = Vector2.new(playerVelocity.x,playerVelocity.y + 1) end if playerVelocity.y > 1 then platforming = false end local enemies = gui.Cabinet.Screen.Enemies:GetChildren() for i = 1, #enemies do enemies[i].Position = UDim2.new(0,enemies[i].Position.X.Offset,0,enemies[i].Position.Y.Offset + 5) end end function Touching(a,b) local ap = Vector2.new(a.Position.X.Offset, a.Position.Y.Offset) local as = Vector2.new(a.Size.X.Offset, a.Size.Y.Offset) local bp = Vector2.new(b.Position.X.Offset, b.Position.Y.Offset) local bs = Vector2.new(b.Size.X.Offset, b.Size.Y.Offset) local c = (ap.x + as.x > bp.x) and (bp.x + bs.x > ap.x) and (ap.y + as.y > bp.y) and (bp.y + bs.y > ap.y) if c then return true else return false end end function Collision() -- check player against map for i = 1, #mapParts do if Touching(mapParts[i],player) then if player.Position.X.Offset < mapParts[i].Position.X.Offset and not platforming then player.Position = UDim2.new(0, mapParts[i].Position.X.Offset - player.Size.X.Offset,0,player.Position.Y.Offset) playerVelocity = Vector2.new(0,playerVelocity.y) elseif player.Position.X.Offset + player.Size.X.Offset > mapParts[i].Position.X.Offset + mapParts[i].Size.X.Offset and not platforming then player.Position = UDim2.new(0, mapParts[i].Position.X.Offset + mapParts[i].Size.X.Offset,0,player.Position.Y.Offset) playerVelocity = Vector2.new(0,playerVelocity.y) else if player.Position.Y.Offset > mapParts[i].Position.Y.Offset then playerVelocity = Vector2.new(playerVelocity.x,10) platforming = false elseif player.Position.Y.Offset + player.Size.Y.Offset > mapParts[i].Position.Y.Offset then platforming = true playerVelocity = Vector2.new(playerVelocity.x,0) end end end end—check enemies against map, player local enemies = gui.Cabinet.Screen.Enemies:GetChildren() for i = 1, #enemies do for j = 1, #mapParts do if Touching(mapParts[j],enemies[i]) then enemies[i].Position = UDim2.new(0,enemies[i].Position.X.Offset,0,mapParts[j].Position.Y.Offset - enemies[i].Size.Y.Offset) end end if enemies[i].Position.X.Offset > 384 or enemies[i].Position.X.Offset < 0 then if enemies[i].Position.Y.Offset > 230 then enemies[i]:remove() else enemies[i].Left.Value = not enemies[i].Left.Value end end if Touching(enemies[i],player) then gaming = false end end—check game bounds if player.Position.X.Offset < 0 then playerVelocity = Vector2.new(0,playerVelocity.y) player.Position = UDim2.new(0,0,0,player.Position.Y.Offset) elseif player.Position.X.Offset > 384 then playerVelocity = Vector2.new(0,playerVelocity.y) player.Position = UDim2.new(0,384,0,player.Position.Y.Offset) end if player.Position.Y.Offset < 0 then playerVelocity = Vector2.new(playerVelocity.x,0) player.Position = UDim2.new(0,player.Position.X.Offset,0,0) end—check player against prize if prize ~= nil and Touching(player,prize) then time = time + 100 Tool.Handle.Prize:Play() prize:remove() prize = nil prizeRegenTimer = math.random(180,360) end end function updatePlayerPos() if math.abs(playerVelocity.x) > 4 then if playerVelocity.x < 0 then playerVelocity = Vector2.new(-4,playerVelocity.y) else playerVelocity = Vector2.new(4,playerVelocity.y) end end player.Position = UDim2.new(0,player.Position.X.Offset + playerVelocity.x,0,player.Position.Y.Offset + playerVelocity.y) playerVelocity = Vector2.new(playerVelocity.x * 0.5,playerVelocity.y * 0.9) end function Controls() if left then playerVelocity = Vector2.new(playerVelocity.x - 3,playerVelocity.y) elseif right then playerVelocity = Vector2.new(playerVelocity.x + 3,playerVelocity.y) end if jump and platforming then jump = false platforming = false Tool.Handle.Jump:Play() playerVelocity = Vector2.new(playerVelocity.x,playerVelocity.y - 20) end end function walkAnimation(forward) walkCounter = walkCounter + 1 if walkCounter > 8 then walkCounter = 1 end local playIndex = walkCounter if walkCounter == 4 then playIndex = 2 elseif walkCounter == 5 then playIndex = 1 elseif walkCounter == 6 then playIndex = 4 elseif walkCounter == 7 then playIndex = 5 elseif walkCounter == 8 then playIndex = 4 end if forward then player.Image = "http://www.roblox.com/asset/?id=" .. playerWalkForward[playIndex] else player.Image = "http://www.roblox.com/asset/?id=" .. playerWalkBackward[playIndex] end end local forward = true function animation() if playerVelocity.x > 1 then forward = true walkAnimation(forward) elseif playerVelocity.x < -1 then forward = false walkAnimation(forward) elseif forward then player.Image = "http://www.roblox.com/asset/?id=" .. playerWalkForward[1] walkCounter = 1 else player.Image = "http://www.roblox.com/asset/?id=" ..
Vous pensiez que c'était dur ? Oh mon Dieu, attendez de voir les interfaces graphiques !
Étape 4 : GameGui et ScoreFrame.
Ajoutez un ScreenGui et nommez-le GameGui. Ensuite, ajoutez un Frame et appelez-le ScoreFrame. Dans ScoreFrame, ajoutez un ImageLabel (ne changez pas le nom) et un TextLabel. Remplacez le TextLabel par Score. Pour ScoreFrame, voici les statistiques modifiées.
- Couleur d'arrière-plan3 : 51, 102, 255
- Transparence de l'arrière-plan : 1
- Poste : {0.5, -100}, {0.5, 150}
- Taille : {0, 200}, {0, 50}
- Index Z : 2
Pour ImageLabel :
- Couleur d'arrière-plan3 : 51 ; 102 ; 255
- Transparence de l'arrière-plan : 1
- Image : http://www.roblox.com/asset/?id=31736392
- Poste : {0, 6}, {0, 0}
- Taille : {0, 130}, {0, 50}
- Index Z : 2
Et pour Score :
- Couleur d'arrière-plan3 : 0 ; 255 ; 255
- Transparence de l'arrière-plan : 1
- TailleBordurePixel : 0
- Poste : {0, 130}, {0, 0}
- Taille : {0, 70}, {0, 50}
- Index Z : 3
Vous pensiez que c'était dur ? Attendez d'avoir ajouté Cabinet et tous ses enfants.
(AJOUTER LE RESTE PLUS TARD)
Tutoriel 4 : Fabriquer une épée
Ceci est le tutoriel de ColorfulBrendon(: ColorfulBrendonROBLOX) sur la façon de fabriquer votre propre épée. Peut-être qu'un jour il sera publié en tant qu'équipement de catalogue !
Commencez par générer une brique ordinaire. Nommez-le "Handle" et redimensionnez-le comme vous le souhaitez. Ensuite, allez dans "Workspace" dans la fenêtre avec Explorer et Properties, car ces deux fenêtres seront nécessaires pour accomplir votre tâche, et une fois Workspace sélectionné, allez dans "Insérer" et sélectionnez Objet. Ensuite, vous devez sélectionner Outil. Nommez-le Épée avec Propriétés et sur Explorer, faites glisser votre élément maintenant nommé Poignée dans votre élément maintenant nommé Épée. Vous pouvez renommer l'épée comme vous le souhaitez, mais la poignée est importante. Maintenant, les concepteurs de jeux de ROBLOX essaient de supprimer tous les créateurs TouchInterest possibles. Alors, allez dans Modèles gratuits et obtenez un outil de construction de base de la création des administrateurs. L'outil de glissement est basique. Ouvrez le "+" dans l'outil Drag, sélectionnez "TouchInterest", cliquez sur "Copier" puis "Coller" dans la "Poignée" de votre épée. Dans Handle, insérez un SpecialMesh. Voici comment faire des apparitions de tête, ou comment le faire pour que vous puissiez créer un maillage librement. Copiez et collez ceci dans votre maillage
rbxasset://fonts/sword.mesh
Il ne vous reste plus qu'à la texturer ! Le maillage de l'épée BASIC est cet ID
rbxasset://textures/SwordTexture.png
Je vais vous montrer à quoi cela ressemble dans une photo.
Enregistrez-le sur votre ordinateur et modifiez-le avec un programme d'édition d'images. Vous pouvez voir l'éditeur je vais rendre toute l'image blanche pour faire un "Lightheart"
l'avant et l'arrière du manche, la lame de l'épée, le manche supérieur, tous les détails et dessins du manche, etc.
Le "Darkheart" est célèbre. Tout ce qu'il est, serait noir. Donc, à mon image, je rends tout blanc pour, un "Lightheart". Vous ne pouvez pas voir l'image parce que ça, c'est blanc. Maintenant, pour terminer cette section du processus de fabrication de l'épée, je dois vous montrer comment faire exister votre nouvelle texture.
Téléchargez-le sur vos décalcomanies en procédant comme suit
- Allez sur Mon ROBLOX
- Consulter le profil
- Aller aux trucs
- Aller à Décalcomanies
- Cliquez sur Créer
- Cliquez sur Choisir un fichier
- Sélectionnez votre photo désirée
- Cliquez sur Créer un autocollant
- Attendez qu'il soit approuvé. (Temps d'attente : 1 à 45 minutes selon l'autocollant)
- S'il n'est pas terminé dans les 45 minutes, votre décalque n'a pas été approuvé.
Maintenant, générez une brique
Sur cette brique, collez votre décalcomanie. Maintenant, dans l'explorateur, il y a maintenant un décalque en dessous où il est écrit Pièce.
Dans Propriétés, vous pouvez voir qu'il a un ID. Copiez et collez l'ID dans le TextureID de votre épée. D'accord, nous avons donc un objet ressemblant à une épée que vous pouvez ramasser, mais qu'en est-il des scripts ?
Insérez un "Script" et un "LocalScript" dans votre épée (pas la poignée)
Commençons par celui-ci :
Script (Renommer "Script d'épée")
game:service("RunService") local damage = 5 --Modifiez ceci pour déterminer les dégâts de votre épée lorsque vous vous approchez d'une personne qui en est équipée. ~Color local slash_damage = 10—Modifiez ceci pour déterminer les dégâts de votre épée lorsque vous cliquez dessus sur une personne. ~Colorlocal lunge_damage = 30—Modifiez ceci pour déterminer les dégâts de votre épée lorsque vous cliquez dessus suffisamment de fois pour la poignarder dans les airs.
Félicitations, vous venez de fabriquer une épée !
Comment créer des boutons de génération de messages personnalisés
À présent, vous devriez avoir beaucoup de bons engrenages dans votre espace de travail. Vous voulez créer un bouton cliquable pour que vous ayez l'air professionnel pour l'accompagner ? Pour vous faire paraître encore plus impressionnant ? Eh bien, si vous le faites, lisez simplement ceci!
Je suis sûr qu'à un moment ou à un autre, vous avez utilisé ou vu quelqu'un utiliser l'administration en jeu, n'est-ce pas ? h/ ou m/? Désolé, il n'y a pas de l/ qui fait un texte Low. H n'est pas haut et M n'est pas moyen.
Ils signifient en fait Message et Indice. Comme ReloRelo vous l'avait prévenu au début, vous savez probablement qu'il s'agit de 5/5 sur l'échelle de dureté, ce qui signifie que vous saurez probablement comment créer l'un de ces modèles avec un indice en haut disant "Le créateur de cette carte merci (nom d'utilisateur) pour..." ou "Bienvenue à (lieu) par (nom d'utilisateur)" ou quelque chose comme ça.
Ceux-ci sont faciles à faire et je ne veux pas perdre votre temps avec 1/5 sur l'échelle de dureté.
Étape:
- Faire apparaître une brique
- Ajouter un détecteur de clic
- Préparez-vous pour les scripts qui vont dans le bouton !
debounce = false fonction onClicked()if debounce == false thendebounce = truelocal m = Instance.new("Message")m.Parent = game.Workspacem.Text = "Mon texte ici"—Votre texte va dans les ""s. wait(5) --En cinq secondes, votre texte vanishesm.Text = "Mon texte ici aussi."—Après 5 secondes, il est passé à ce texte.wait(180) --En trois minutes, votre texte vanishesm.Text = "J'espère maintenant vous..."wait(5)m.Text = "...obtenez le modèle?" --J'espère que vous le comprenez. Pas trop difficile à apprendre une fois que vous avez le script.wait (5) --Enjoy ! ~Color m:Remove()debounce = false endend script.Parent.ClickDetector.MouseClick:connect(onClicked)
Tutoriel 5 : Truelle
A84hg ici, et voici mon premier tutoriel sur la fabrication d'une truelle personnalisée. C'est sur 3. (Moyen).
le début
Tout d'abord, insérez un outil et faites-le glisser dans le StarterPack. Nommez-le comme vous voulez. (Truelle de qualité A84hg) par exemple.
Ensuite, ajoutez deux scripts dans l'outil. Nommez un "BrickCleanup" et nommez l'autre "WallMaker".
Nettoyage de briques
Pour le script BrickCleanup, ajoutez ceci :
attendre(24)
script.Parent.Parent = nil
WallMaker
Pour le script WallMaker, ajoutez ceci :
mur localHauteur = 4
brique localeVitesse = 0.04
emplacement wallWidth = 12
outil local = script.Parent
-- place une brique en position et renvoie la position du coin opposé de la brique
fonction placeBrick(cf, pos, couleur)
brique locale = Instance.new("Part")
brick.BrickColor = couleur
brick.CFrame = cf * CFrame.new(pos + brick.Size / 2)
script.Parent.BrickCleanup:Clone().Parent = brique — attacher le script de nettoyage à cette brique
brick.BrickCleanup.Disabled = false
brick.Parent = game.Workspace
brique:MakeJoints()
retour brique, pos + brique.Taille
fin
fonction buildWall(cf)
couleur locale = BrickColor.random()
briques locales = {}
assert(wallWidth>0)
local y = 0
tandis que y < wallHeight do
local p
local x = -wallWidth/2
tandis que x < wallWidth/2 fait
brique locale
brique, p = placeBrick (cf, Vector3.new (x, y, 0), couleur)
x = px
table.insert(briques, brique)
attendre (brickSpeed)
fin
y = py
fin
retourner les briques
fin
fonction snap(v)
si math.abs(vx)>math.abs(vz) alors
si vx>0 alors
retourner Vector3.new(1,0,0)
d'autre
retourner Vector3.new(-1,0,0)
fin
d'autre
si vz>0 alors
retourner Vector3.new(0,0,1)
d'autre
retourner Vector3.new(0,0,-1)
fin
fin
fin
Tool.Enabled = vrai
fonction onActivated()
sinon Tool.Enabled alors
retourner
fin
Tool.Enabled = false
caractère local = Tool.Parent;
humanoïde local = personnage.Humanoïde
si humanoïde == nil alors
print("Humanoïde introuvable")
retourner
fin
cible localePos = humanoïde.TargetPoint
local lookAt = snap( (targetPos - character.Head.Position).unit )
local cf = CFrame.new (targetPos, targetPos + lookAt)
Tool.Handle.BuildSound:play()
buildWall(cf)
attendre(5)
Tool.Enabled = vrai
fin
script.Parent.Activé:connect(onActivé)
Vous pensiez que c'était ça ? Eh bien, vous vous trompez ! Ensuite, ajoutez un LocalScript, insérez-le dans l'outil et nommez-le Local Gui.
Emplacement Gui
Ajoutez ceci dans le LS :
outil local = script.Parent;
enabled = vrai
fonction onButton1Down (souris)
si non activé alors
retourner
fin
activé = faux
mouse.Icon = "rbxasset://texturesArrowFarCursor.png"
attendre(5)
mouse.Icon = "rbxasset://texturesArrowCursor.png"
enabled = vrai
fin
fonction onEquipedLocal (souris)
si souris == nil alors
print("Souris introuvable")
retourner
fin
mouse.Icon = "rbxasset://texturesArrowCursor.png"
mouse.Button1Down:connect(function() onButton1Down(mouse) end)
fin
Outil.Équipé : connecter (onEquipéLocal)
Poignée, sons et maillage
Ensuite, insérez une brique et nommez-la Handle.
Insérez un son dans la poignée et nommez-le BuildSound. Vous pouvez lui donner n'importe quel ID de son, mais bass.wav est recommandé. Ensuite, donnez-lui un maillage. Donnez-lui l'ID de maillage rbxasset://fonts/trowel.mesh et l'ID de texture rbxasset://textures/TrowelTexture.png
Testez-le et vous avez terminé de fabriquer votre propre truelle !
C'est A84hg, je me déconnecte.
Tutoriel 6 : Bombe à retardement
Salut tout le monde. Je suis A84hg, de retour avec un autre tutoriel pour l'équipement personnalisé. Cette fois, nous vous apportons la TIMEBOMB ! KABOOM ! Difficulté : 3 (Moyenne)
Insérez un outil et faites-le glisser dans le StarterPack. Nommez-le comme vous voulez, comme UNE BOMBE !
Insérez ensuite deux scripts. Nommez une bombe et nommez l'autre PlantBomb.
Bombe
Mettez ça dans la bombe.
Intervalle de mise à jour locale = .4
Couleur actuelle locale = 1
couleurs locales = {26, 21}
ticksound local = Instance.new("Son")
ticksound.SoundId = "rbxasset://soundsclickfast.wav"
ticksound.Parent = script.Parent
fonction mise à jour()
updateInterval = updateInterval * .9
script.Parent.BrickColor = BrickColor.new (couleurs [couleur actuelle])
CouleurCourante =CouleurCourante + 1
if (currentColor > 2) then currentColor = 1 end
fin
fonction blowUp()
son local = Instance.new("Son")
sound.SoundId = "rbxasset://soundsRocket shot.wav"
son.Parent = script.Parent
son.Volume = 1
son : jouer ()
explosion = Instance.new("Explosion")
explosion.BlastRadius = 12
explosion.BlastPressure = 1000000
créateur local = script.Parent:findFirstChild("créateur")
si créateur ~= nil alors
explosion.Hit:connect (fonction (partie, distance) onPlayerBlownUp (partie, distance, créateur) fin)
fin
explosion.Position = script.Parent.Position
explosion.Parent = game.Workspace
script.Parent.Transparence = 1
fin
fonction onPlayerBlownUp(partie, distance, créateur)
si part.Name == "Tête" alors
humanoïde local = part.Parent.Humanoïde
tagHumanoïde(humanoïde, créateur)
fin
fin
balise de fonctionHumanoïde(humanoïde, créateur)
si créateur ~= nil alors
local new_tag = créateur:clone()
new_tag.Parent = humanoïde
fin
fin
fonction untagHumanoïde(humanoïde)
si humanoïde ~= nil alors
balise locale = humanoïde:findFirstChild("créateur")
si la balise ~= nil alors
tag.Parent = nil
fin
fin
fin
tandis que updateInterval> .1 faire
attendre(updateInterval)
mettre à jour ()
ticksound:play()
fin
exploser()
attendre(2)
script.Parent:supprimer()
PlantBomb
Mettez ceci dans PlantBomb :
bombScript local = script.Parent.Bomb
outil local = script.Parent
Bombe locale = Tool.Handle
fonction plante()
local bomb2 = Instance.new("Part")
local vCharacter = Tool.Parent
local vPlayer = game.Players:playerFromCharacter(vCharacter)
spawnPos local = Bomb.Position
bomb2.Position = Vector3.new(spawnPos.x, spawnPos.y+3, spawnPos.z)
bombe2.Taille = Vector3.new(2,2,2)
bombe2.BrickColor = BrickColor.new(21)
bombe2.Forme = 0
bombe2.BottomSurface = 0
bombe2.TopSurface = 0
bombe2.Réflectance = 1
bomb2.Name = "TimeBomb"
bomb2.Locked = vrai
tag_créateur local = Instance.new("ObjectValue")
Creator_tag.Value = vPlayer
Creator_tag.Name = "créateur"
Creator_tag.Parent = bomb2
bomb2.Parent = game.Workspace
local new_script = bombScript:clone()
new_script.Disabled = false
nouveau_script.Parent = bombe2
fin
Tool.Enabled = vrai
fonction onActivated()
sinon Tool.Enabled alors
retourner
fin
Tool.Enabled = false
caractère local = Tool.Parent;
humanoïde local = personnage.Humanoïde
si humanoïde == nil alors
print("Humanoïde introuvable")
retourner
fin
cible localePos = humanoïde.TargetPoint
Bombe.Transparence = 1.0
plante()
attendre(6)
Bombe.Transparence = 0.0
Tool.Enabled = vrai
fin
fonction onNon équipé()
fin
Tool.Activated:connect(onActivated)
Outil.Non équipé : connecter (surNon équipé)
Ensuite, comme dans le didacticiel Trowel, ajoutez un LocalScript et nommez-le Local Gui.
Mettez ceci dans Local Gui :
outil local = script.Parent;
local activé = vrai
fonction onButton1Down (souris)
si non activé alors
retourner
fin
activé = faux
mouse.Icon = "rbxasset://texturesArrowFarCursor.png"
attendre(6)
mouse.Icon = "rbxasset://texturesArrowCursor.png"
enabled = vrai
fin
fonction onEquipedLocal (souris)
si souris == nil alors
print("Souris introuvable")
retourner
fin
mouse.Icon = "rbxasset://texturesArrowCursor.png"
mouse.Button1Down:connect(function() onButton1Down(mouse) end)
fin
Outil.Équipé : connecter (onEquipéLocal)
Ensuite, insérez une brique 2x2x2 et nommez-la Handle.
Donnez-lui le maillage rbxasset://fonts/timebomb.mesh avec la texture rbxasset://textures/bombtex.png
Donnez également au handle un TouchTransmitter et nommez-le TouchInterest.
Testez-le, et vous avez terminé!
C'est A84hg, je me déconnecte.