Aprenda a: Criar o seu Próprio Jogo de Sword Fight com os Desenvolvedores Bellzko e HauntedMansionStudio

Nesse tutorial você aprenderá a criar seu próprio jogo de Sword Fight!

Esse model consiste em:

  • Uma Intro
  • Um data store
  • Um health e uma stamina bar
  • Um sistema de kill
  • Um Shop de espadas e de classes
  • Um sistema de walk effect
  • Uma árvore
  • Um terreno
  • Duas casas
  • Três espadas
  • Um Sistema de Double Jump
  • Um Sistema de Dash
  • Uma Safe Zone
  • Um sistema de equipar e desequipar as armas
  • Um Sistema de primeira pessoa

Introdução

1. Para começar você deve acessar o link e obter o modelo, apertando no obter ou no Get

https://www.roblox.com/library/5068581225/Sword-Fight-Model

2. Depois de obter o modelo você deve criar um jogo, para isso é preciso clicar no Create, que se encontra no topo da aba da Roblox.

3. Após clicar no Create, você deve criar um jogo, clicando no Create a New Game, e novamente no Create a New Game

4. Em seguida, vocês apertam no Edit

5. Ao entrar no Roblox Studio, vocês iram abrir a Toolbox, já que o modelo se encontra lá

6. Ao clicar na Toolbox, vocês irão apertar no segundo ícone e o modelo estará lá. Agora basta clicar nele que ele aparecerá

7. Agora só falta vocês colocarem cada pasta no seu respectivo service

8. Para finalizar, basta você ligar o API, que tem a função de usar a Data Store do próprio jogo. Para fazer isso, você deve apertar o Configure e ativar o acesso ao API. Importante: sem o API o jogo não funciona

9. Agora você tem o seu próprio Sword Fight Game e é só dar play e se divertir, não se esqueça de publicar o jogo antes, e também de passar todos os itens que a pasta possui, para que funcione o script

Customização

Agora sobre Customização:

  • Nessa parte ensinaremos a como adicionar novas espadas. Para isso, vocês devem acessar a pasta tools que se encontram na replicatedstorage, nela fica as espadas que estarão no shop

1. Após acessar, coloque uma nova tool (com as mesmas características que as outras tools), ou copia e coloca uma das espadas existentes, e em seguida nomeie da forma que preferir

  • Dentro dela você encontra algumas propriedade como: o valor da espada no shop, se ela está habilitada e também a quantidade de estrelas que essa espada possui. (Nota: não deixe as estrelas no zero, senão não funcionará)
  • Dentro do Module Script ou Settings, você encontra o dano que ela vai causar, o tempo de ataque e a velocidade que ela te dá. Vocês podem customizar da forma que preferirem (recomendo que vocês usem suas próprias animações).

2. Agora só falta colocar a venda (essa parte pode ser um pouco complicada, se não entender muito bem, pode nos perguntar)

  • Para fazer isso você deve entrar no ItemFrame, que se encontra dentro do ShopFrame, localizado no MainGui. Depois, crie um novo Text Button (dentro dele você irá nomear o nome do textbutton e o textlabel com o nome dado a sua espada, você também pode customizar a posição e o tamanho do button). Se quiser colocar o fundo, você pode duplicar na image label, pegar a posição do text button, e colocar para que tenha um fundo para comprar a sua espada.
  • Depois de criar o button falta colocar o viewframe. Para realizar essa tarefa, vocês devem entrar no GunViewport que está no ShopFrame, aonde vocês pegarão os modelos do WeaponModel1 e colocarão no workspace junto com o handle da sua espada, e assim, colocar ela do lado das outras. Logo após fazer isso, vocês irão duplicar uma das partes que estão na weaponsCam e colocarão elas no workspace. Após ter os modelos das espadas e a Cam, basta você colocar a Cam da sua espada criada na frente da Cam Duplicada (Lembrando que para que o script funcione, você deve colocar o nome da espada+Cam na part, o handle pode ter o mesmo nome).

Ficará assim:

Nota: A cam com o nome da espada deverá ficar na frente do handle. Recomendamos configurar para 10 de distância para que as outras espadas fiquem mais bonitas.

3. Agora basta devolver os handles para o Weapon Models1 e as Cams para o WeaponsCam.

Para ter certeza que funcionou você pode testar

  • Agora sobre ranks: para adicionar Ranks é bem simples. Basta fazer o mesmo processo que você fez com as espadas, porém, não possui o view frame

1. Acesse o Titles

  • Nele você irá criar uma nova classe. Para fazer isso você deve duplicar uma das existentes, mudar o nome dela e o text label para o nome da classe que você acabou de criar. Você pode escolher a fonte, a cor, e na propriedade kills, você escolhe quantas kills é necessário para obtê-la.

2. Agora colocamos a classe a venda:

Para fazer isso você irá no TitlesFrame, dentro dele você criará um novo text button igual ao que você fez na parte da espada, mas agora irá mudar o nome e o textlabel para o nome da classe

3. Agora só falta você testar e se divertir.

Explicação

  • Nessa parte iremos explicar como funciona os services e os scripts:

Os services são meio que seu lugar de trabalho, ele te ajuda com vários serviços/ferramentas em vários setores diferentes.

  1. O Workspace funciona como uma área onde os seus modelos, construções meshes ficam, para que os outros jogadores possam interagir ou visualizar;
  2. O ReplicatedStorage tem a função de guardar as coisas que vão ser replicadas ou referenciadas como as tools, scripts de armas, titles, remoteevents, walkeffects, values nos leaderstats, etc;
  3. O ServerScriptService guarda os scripts, mas os scripts também podem funcionar no workspace;
  4. O StarterCharacterScript tem a função de guardar o que você quer que todos os jogadores tenham;
  5. O StarterPlayerScript serve para colocar tudo que você quiser no jogador;
  • Os scripts possuem a função de fazer algo funcionar

Os scripts são uma série de instruções que você coloca para que algo ocorra

O SwordMainV1.1 que está na pasta de tools tem a função de fazer com que a animação de atacar e as propriedades das espadas funcionem

--//Settings//--local damagenum = Settings.damage
local cooldownnum = Settings.cooldown
local idleid = Settings.idleid
local speed = Settings.speed
local slashid = Settings.slashid
--//Anims//--local slash = Instance.new("Animation", handle)
local idle = Instance.new("Animation", handle)
idle.AnimationId = idleid
slash.AnimationId = slashid
local slashanim
local idleanim
  • O Settings pega o script model da espada e faz com que ele funcione, sem ele não tem como a espada causar dano ou atacar.

O Events/MainScript que se encontra no ServerScriptService tem o cargo de dar uma função dedicada a cada remote event

--//Events//--local DamageEvent = Events:FindFirstChild("whry239hf47fhwefuywh")
local SoundEvent = Events:FindFirstChild("fwdnu9dwhfwjdibcsd")
local EnabledEvent = Events:FindFirstChild("djiednjcdbcdicbsc")
local BuyEvent = Events:FindFirstChild("vdvbjsduhsdbcush")
local KillFeedEvent = Events:FindFirstChild("refffffffffffffffffffffff")
local TrailEvent = Events:FindFirstChild("hfwbfjfuifhdudioeji")
local ValueEvent = Events:FindFirstChild("chcshuqscvjiwevnjio")
local TiltEvent = Events:FindFirstChild("rgbgtnhymjjuuujuj")
local ChangeColorEvent = Events:FindFirstChild("brrwdlogherdcvff")
local TitleEvent = Events:FindFirstChild("wefhuyefrujiefrjiofdefjiefrjji")
local SwordBPEvent = Events:FindFirstChild("rnwefnjhudfnjdcenjdenjjde")
local ValuesEvent = Events:FindFirstChild("dnwnjdcenhuch idvfjnhnj")
  • Colocamos um código para o nome, para que não ocorra um caso de exploit

Depois, caso necessário, altere o nome para que funcione, lembre-se que é necessário ter o mesmo nome do que está nos events.

O Inventory Save que está no ServersciptService tem o encargo de salvar o inventário do jogador.

--//Safety Functions//--game:BindToClose(function()wait(5)end)
  • O BindToClose tem a função de salvar o inventário do jogador quando ocorre um erro e todos os jogadores saem, fazendo com que o script detect tenha tempo para salvar.

O StatsSaver, que está no ServerScriptService, salva o leaderstats do jogador, neste caso: o cash, kills, espadas e título. Vale notar que ele salva uma string da table de todos os valores.

local success, err = pcall(function()
DataStoreInventory:SetAsync(player.UserId .. "-Inventory", dataToSave)
end)

if success then
print("Success!")
end
end)
  • Se o script funcionar, ele irá printar no Output “Sucess!”, indicando que o leaderstats do jogador foi salvo.

Para finalizar o Movement(Dash/DJ) que se encontra no StarterPlayerScript faz com que o double jump e o dash funcionem e deixa os braços visíveis em primeira pessoa.

--//Run Service//--game:GetService("RunService").RenderStepped:Connect(function()
TiltEvent:FireServer(math.asin(camera.CFrame.LookVector.y))
if player.Character ~= nil then
materialchange()
tool = character:FindFirstChildOfClass("Tool")
local torso = player.Character:FindFirstChild("UpperTorso")
local Left = player.Character:FindFirstChild("LeftUpperArm")
local Right = player.Character:FindFirstChild("RightUpperArm")
if Right ~= nil and Left ~= nil and torso ~= nil then
Right.LocalTransparencyModifier = Right.Transparency
Left.LocalTransparencyModifier = Left.Transparency
character["LeftLowerArm"].LocalTransparencyModifier = character["LeftLowerArm"].Transparency
character["RightLowerArm"].LocalTransparencyModifier = character["RightLowerArm"].Transparency
character["LeftHand"].LocalTransparencyModifier = character["LeftHand"].Transparency
character["RightHand"].LocalTransparencyModifier = character["RightHand"].Transparency
local rightShoulder = Right:FindFirstChild("RightShoulder")
local leftShoulder = Left:FindFirstChild("LeftShoulder")
if rightShoulder ~= nil and leftShoulder ~= nil then
if player.Character:FindFirstChild("Humanoid") ~= nil then
if player.Character:FindFirstChild("HumanoidRootPart") ~= nil then
if (player.Character.HumanoidRootPart.Position - camera.CoordinateFrame.p).magnitude < 2.2 and player.Character.Humanoid.Health > 0 then
rightShoulder.C0 = rightShoulder.C0:lerp((camera.CoordinateFrame * CFrame.new(0.9, 0, 0)):toObjectSpace(torso.CFrame):inverse() * CFrame.Angles(0, math.pi/180, 0), updateSpeed)
leftShoulder.C0 = leftShoulder.C0:lerp((camera.CoordinateFrame * CFrame.new(-0.9, 0, 0)):toObjectSpace(torso.CFrame):inverse() * CFrame.Angles(0, -math.pi/180, 0), updateSpeed)
elseif player.Character.Humanoid.Health > 0 then
rightShoulder.C0 = CFrame.new(0.95, 0.6, 0) * CFrame.Angles(0, math.pi/180, 0)
leftShoulder.C0 = CFrame.new(-.85, 0.6, 0) * CFrame.Angles(0, -math.pi/180, 0)
end
end
end
end
end
end
end)
  • Essa parte faz com que os braços do avatar apareçam quando o jogador estiver em primeira pessoa e que eles movam junto com a câmera.

Você pode ler também a versão original desse tutorial no Fórum de Desenvolvedores.

Este é um dos tutoriais vencedores do Desafio Mestre do Conhecimento, o qual diversos desenvolvedores da comunidade da Roblox em Português competiram pelo melhor tutorial criado no Fórum dos Desenvolvedores.

O tutorial destacado nesse artigo foi criado por Bellzko e HauntedMansionStudio. Tivemos uma breve entrevista com eles para entendermos um pouquinho mais sobre suas experiências no desafio.

Bellzko é um desenvolvedor da nossa comunidade que se interessa principalmente por Construção, Modelagem 3D e Interface do Usuário. Seu interesse pela a plataforma Roblox começou quando um amigo a apresentou, além de ter se inspirado em Asimo3089, Quenty e ScriptOn, em mostraram que seria possível fazer jogos divertidos. Tempo depois, ele se dedicou a criar um jogo no estilo Murder Mystery, e colocou um objetivo para si mesmo: fazer um jogo em que as pessoas pudessem se divertir, e também provar que a comunidade é boa em desenvolvimento na Roblox.

Também perguntamos como foi sua experiência no nosso desafio:

Bellzko

“A experiência de participar do desafio do Mestre do Conhecimento foi incrível, eu conheci pessoas incríveis como o HauntedMansionStudio, os Community Leaders e a Equipe de Relacionamento com Desenvolvedores da Roblox e também conheci melhor a comunidade PT/BR de Desenvolvedores da Roblox, que é maravilhosa. Eu só tenho que agradecer por ter passado por essa experiência.”

HauntedMansionStudio, despertou seu interesse pela plataforma através da comunidade de jogadores do Assassin!, e assim começou a aprender sobre programação e APIs. Além de conhecer outros desenvolvedores que lhe ajudaram nessa jornada, como Gabr3br. Atualmente, HauntedMansionStudio trabalha com Programação e Construção na Roblox.

Sobre a sua experiência no desafio:

HauntedMansionStudio

“Foi uma experiência muito legal. Tive a oportunidade de conhecer Bellzko como um companheiro de trabalho e não como alguém que falava de vez em quando no Servidor do SlEGHART para pedir opiniões em meus trabalhos. Planejamos continuar trabalhando juntos em futuros projetos.”

Caso queira saber mais sobre os desenvolvedores, você pode segui-los no Twitter: @Bellzko_RBLX e @MansionStudio. Também não esqueça de nos seguir! @robloxdevrelptb.

--

--

Roblox Developer Relations
Roblox Developer Português

Empowering Roblox developers and creators to bring their imagination to life.