Proximity Service( Feito por mim)

Olá pessoal, bem, eu queria apresentar a vocês meu sistema de prompt custom, feito do 0 com OOP. Bem, não é nada muito complexo, mas na pratica ele serve como um sistema de prompt igual o do roblox. Quando ele termina de executar ele retorna uma função.

Como podem ver no video, toda vez que a ação é completa o cubo diminui de tamanho.
Para ele funcionar é muito simples.


local function call()
	game.TweenService:Create(
		workspace.Part,
		TweenInfo.new(.25,Enum.EasingStyle.Sine),
		{
			Size = workspace.Part.Size/1.2
		}
	):Play()
end

local Proximity = require(game.ReplicatedStorage.ProximityService)
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
repeat wait() until character.PrimaryPart

local new = Proximity:newButton(workspace.Part, character.PrimaryPart, call)
new:Initialize(Enum.KeyCode.F)

Bem, oque isso significa? Seria como um método de criação, toda vez que você quiser adicionar uma part a esse sistema você usa a função Proximity:newButton(workspace.Part, character.PrimaryPart, call)
Dessa forma criando um novo botão dentro da part(Primeira variável)
A segunda variável é onde ele é relativa, caso você passe nil, ao invés dele retornar um erro, a parte onde se calcula a posição se torna a Câmera do player.

Oque o “new:Initialize(Enum.KeyCode.F)” faz? Simples, ele inicia o processo de cálculos de posição. O único parâmetro que ele pede é Tecla que você quer usar no botão, caso você não queira passar nenhuma, por padrão é definida como E.

Essas não são as únicas funções, tem mais:

Função Disable():

Código

Ele desativa todo o sistema por padrão desconectando todas as funções fazendo com que tudo pare de gastar memoria. Exemplo de Código:

new:Disable() – Muito simples kkkkk.

Função ChangeConfig():

Código

Ela exige duas variaveis, o nome do que você quer mudar(var1), e o novo valor(var2);
Todas as configurações são estas:

Configurations = {
			OneClick = false; -- One click seria uma opção caso queira que ele seja ativo somente uma vez e nada mais.
			TerminalWarns = true; -- Avisos serão criados no output caso seja true.
			ActiveDistance = 10; -- Distancia minima para ser ativo
			HoldDuration = .5; -- Duração em segundos de quanto tempo é a função
			Button = Enum.KeyCode.E -- tecla padrão caso não definida.
}

Update 1:
Adicionado Eventos ao module, para melhor controle. Segue a lista:

IsOnArea: Ativo toda vez que o player está dentro da área(retorna distancia em studs);

Exemplo em código

local new = Proximity:newButton(workspace.Part, character.PrimaryPart, call)
new:Initialize(Enum.KeyCode.F)

new.IsOnArea(function(Distancia)
	warn('Player está na área', Distancia)
end)

ActionCompleted: Ativo toda vez que o player tenha terminado a ação(sem retorno);

Exemplo em código

local new = Proximity:newButton(workspace.Part, character.PrimaryPart, call)
new:Initialize(Enum.KeyCode.F)

new.ActionCompleted:Connect(function()
	warn('Ação completa')
end)

Activated: Ativo toda vez que o player está proximo e segura a tecla de atalho(sem retorno)

Exemplo em código

local new = Proximity:newButton(workspace.Part, character.PrimaryPart, call)
new:Initialize(Enum.KeyCode.F)

new.Activated:Connect(function()
	warn('Ação em andamento.')
end)

Bem, é isto, espero que gostem de usar, o link para ele é este: https://www.roblox.com/library/6998495750/ProximityService

4 curtidas

Muito interessante!!

1 curtida

Gostei muito! (o script não está a venda :slight_smile:)

3 curtidas

KKKKKK, vish mil desculpas, eu não tinha percebido.

3 curtidas