ExtraFunction Plugin is back with a the new Pro version!

Extra Functions plugin is back with a new updated and improved version
Extra Functions Plugin Pro !
Download

what is “Extra Functions Plugin” ?
if you did not hear of “Extra Functions Plugin” then basically “Extra Functions Plugin” inserts a “Module Script” to your experience and that “Module Script” contains many different function to help you in your work

“Extra Function Plugin Pro” is a much improved version from the “Lite” version

what the new version offers ?
the new version “Extra Functions Plugin Pro” provides :-
50 Useful and time saving function
New improved debugging system
Improved UI
New event system
And much more !

what is the functions that the new version provides ?

GetGrandParent
GetObjectsFromType
GetObjectsWithName
GetPlayerMains
SetValuesToValue
Tag
RemoveTag
AddAttribute
RemoveAttribute
SetName
SetParent
SetColor
SetCFrame
BulkDestroy
CreateAndComputePath
CreatePathAndGetWayPoints
CreateAgentTable
GetCharacterByUserId
StartRagdollToRig
StopRagdollToRig
BulkTween
BulkCreateTweens
BulkPlayTweens
GetAngleBetweenVectors
PerlinNoise
GetUserThumbnailByCharacter
GetObjectsInRadius
BulkGetObjectsInRadius
GetPlayersInRadius
BulkGetPlayersInRadius
GetNearestObjectToOthers
BulkDisconnect
SaveData
GetData
UpdateData
RemoveData
GetAllData
BreakModelJoints
BreakModelJointsForever
RestoreModelJoints
BanPlayer
UnBanPlayer
BulkBanPlayers
BulkUnBanPlayers
GenerateCode
IsCodeStrong
GetCharactersInString

Is there is any improvements to the old functions ?

yes there is some improvements to old functions including :-

GetObjectsWithName now requires a new argument “Descendants”
GetObjectsFromType now requires a new argument “Descendants”
SetValuesToValue now supports all value types

and much more !

What is the new events system ?

the new events system make you able to connect to events from the “Module Script” with “Bindable Events” you can connect different “Bindable Event” to every event or just connect them to one “Bindable Event” these event will fire the “Bindable Event” that is connected to the event

How i can manage events ?

you can connect or disconnect to events usind “ConnectToEvent” and “DisconnectFromEvent” methods also you can connect to event is bulk by using “BulkConnectToEvents” and “BulkDisconnectFromEvents” methods

how i can use this function ?

simply install the plugin then open it on roblox studio click install in the plugins UI and finally click agree after that you should find the “Module Script” in the “Replicated Storage”

Why i should use this plugin ?

“Extra Functions Plugins” provides powerful and time saving function that can help you to speed up your work or to do work easier i read your feed back on the “Extra Function Plugin Lite” version and i saw how the most of you think that the plugin is useless or a waste of time because it does not provide something new but the main idea of the plugin is not to provide complicated function the idea of the plugin is to help you do work faster and easier

Why i should use this version of the plugin ?

this version is a much improved version it provides new functions and improvements to the “Lite” version

How i can switch from the “Lite” version to the “Pro” version ?
simply after installing the “Pro” version of the plugin open the plugin and then click on “Update” it will ask you to select the “Module Script” that you want to update simply select the “Module Script” and then click on update and here you have it the “Pro” version already built for that so it should not break your previous work

thanks for reading i will update this version after gathering your feedback i hope you liked the “Pro” version and i hope that it is more useful now also i originally planed to make the “Pro” version paid but i faced some issue so for now it is gonna be free

Install the Pro version Here

Install the Lite version Here

Join my group for all the new about the plugin and more Here

Krant19worlddv

2 Likes

here is the module if you don’t want to download the plugin
Source Code
(i had to upload it to pastebin cus theres 87k+ characters wtf)

6 Likes

Why did you recreate this post?

2 Likes

because of vParkuu sharing the source code

What about it? You can access the source code but just using the module can you not?

2 Likes

you have to agree on the license first before inserting the module script

Licenses are only legally binding if they are very clearly written and discoverable. Hiding this information deep in some UI hierarchy may be considered undiscoverable.

image

Personally, I would link the license here. It doesn’t necessarily have to be something you have written yourself, and you can find professional ones online that meet your conditions.

3 Likes

I dont think thats good reason to make a new post, try reaching out to support to get them to remove their message, also, what @bluebxrrybot said

2 Likes

Will bro delete roblox because it has his source code publicly available

3 Likes
Lite version
local ExtraFunctions = {}
local CollectionService = game:GetService("CollectionService")
function ExtraFunctions.GetGrandParent(Object:Instance)
	if Object == nil or not Object:IsA("Instance") or Object == game then
		warn("Error , Function :- GetGrandParent , Reason :- Object is not an Inastance or is nil , nil returned.")
		return nil
	end
	if Object.Parent and Object.Parent.Parent then
		return Object.Parent.Parent
	else
		return nil
	end
end
function ExtraFunctions.GetObjectsWithName(Name:string , Parent:Instance)
	if Name == nil or Parent == nil or type(Name) ~= "string" or not Parent:IsA("Instance") then
		warn("Error , Function :- GetObjectsWithName , Reason :- Name is not string or is nil or Parent is not an Inastance or is nil , nil returned.")
		return nil
	end
	if #Parent:GetChildren() > 0 then
		local Table = {}
		for i , Object in pairs(Parent:GetChildren()) do
			if Object.Name == Name then
				table.insert(Table , Object)
			end
		end
		if #Table > 0 then
			return Table
		else
			return nil
		end
	else
		return nil
	end
end
function ExtraFunctions.GetObjectsFromType(Type:string , Parent:Instance)
	if Type == nil or Parent == nil or type(Type) ~= "string" or not Parent:IsA("Instance") then
		warn("Error , Function :- GetObjectsFromType , Reason :- Type is not string or is nil or Parent is not an Inastance or is nil , nil returned.")
		return nil
	end
	if #Parent:GetChildren() > 0 then
		local Table = {}
		for i , Object in pairs(Parent:GetChildren()) do
			if Object:IsA(Type) then
				table.insert(Table , Object)
			end
		end
		if #Table > 0 then
			return Table
		else
			return nil
		end
	else
		return nil
	end
end
function ExtraFunctions.GetPlayerMains(Player:Player)
	if Player == nil or not Player:IsA("Player") then
		warn("Error , Function :- GetPlayerMains , Reason :- Player is nil or Player is not a player , nil returned.")
		return nil
	end
	local Character = Player.Character or Player.CharacterAdded:Wait()
	if Character then
		local Humanoid = Character:FindFirstChild("Humanoid")
		local HumanoidRootPart = Character:FindFirstChild("HumanoidRootPart")
		if Humanoid and Humanoid:IsA("Humanoid") and Humanoid.Health > 0 and HumanoidRootPart and HumanoidRootPart:IsA("BasePart") then
			local Table = {
				["Character"] = Character,
				["Humanoid"] = Humanoid,
				["HumanoidRootPart"] = HumanoidRootPart,
				["UserId"] = Player.UserId,
			}
			return Table
		else
			return nil
		end
	else
		return nil
	end
end
function ExtraFunctions.SetValuesToValue(Values:{} , Value)
	if Values == nil or type(Values) ~= "table" or #Values < 1 or (type(Value) ~= "number" and type(Value) ~= "string" and type(Value) ~= "boolean") then
		warn("Error , Function :- SetValuesToValue , Reason :- the Values table is empty , note only (Int , Float , Boolean , String is supported) , nil returned.")
		return nil
	end
	for i , value in pairs(Values) do
		if value:IsA("IntValue") and type(Value) == "number" and Value % 1 == 0 then
			value.Value = Value
		elseif value:IsA("BoolValue") and type(Value) == "boolean" then
			value.Value = Value
		elseif value:IsA("NumberValue") and type(Value) == "number" then
			value.Value = Value
		elseif value:IsA("StringValue") and type(Value) == "string" then
			value.Value = Value
		end
	end
end
function ExtraFunctions.AddAttribute(Objects:{} , Name:string , Value:any)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or type(Name) ~= "string" or Value == nil or typeof(Value) == "Instance" then
		warn("Error , Function :- AddAttribute , Reason :- the Objects table is empty or Name is not a string or Value is nil , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("Instance") and Object ~= game then
			Object:SetAttribute(Name , Value)
		end
	end
end
function ExtraFunctions.RemoveAttribute(Objects:{} , Name:string)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or type(Name) ~= "string" then
		warn("Error , Function :- AddAttribute , Reason :- the Objects table is empty or Name is not a string , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("Instance") and Object ~= game then
			Object:SetAttribute(Name , nil)
		end
	end
end
function ExtraFunctions.Tag(Objects:{} , Name:string)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or type(Name) ~= "string" then
		warn("Error , Function :- Tag , Reason :- the Objects table is empty or Name is not string , nil returned")
		return nil
	end
	for i , Object in pairs(Objects) do
		if Object:IsA("Instance") and Object ~= game then
			CollectionService:AddTag(Object , Name)
		end
	end
end
function ExtraFunctions.RemoveTag(Objects:{} , Name:string)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or type(Name) ~= "string" then
		warn("Error , Function :- Tag , Reason :- the Objects table is empty or Name is not string , nil returned")
		return nil
	end
	for i , Object in pairs(Objects) do
		if Object:IsA("Instance") and Object ~= game and Object:HasTag(Name) then
			CollectionService:RemoveTag(Object , Name)
		end
	end
end
function ExtraFunctions.SetName(Objects:{} , Name:string)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or type(Name) ~= "string" then
		warn("Error , Function :- SetName , Reason :- the Objects table is empty or Name is not string , nil returned.")
		return nil
	end
	for i , Object in pairs(Objects) do
		if Object:IsA("Instance") and Object ~= game then
			Object.Name = Name
		end
	end
end
function ExtraFunctions.SetParent(Objects:{} , Parent:Instance)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or Parent == nil or not Parent:IsA("Instance") or Parent == game then
		warn("Error , Function :- SetParent , Reason :- the Objects table is empty or Parent is nil , nil returned.")
		return nil
	end
	for i , Object in pairs(Objects) do
		if Object:IsA("Instance") and Object ~= game then
			Object.Parent = Parent
		end
	end
end
function ExtraFunctions.SetColor(Objects:{} , Color:Color3)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or typeof(Color) ~= "Color3" then
		warn("Error , Function :- SetColor , Reason :- Objects table is empty or Color is nil , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("BasePart") then
			Object.Color = Color
		end
	end
end
function ExtraFunctions.SetCFrame(Objects:{} , Cframe:CFrame)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or typeof(Cframe) ~= "CFrame" then
		warn("Error , Function :- SetCFrame , Reason :- Objects table is empty or CFrame is nil , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("BasePart") then
			Object.CFrame = Cframe
		end
	end
end
function ExtraFunctions.SetRotation(Objects:{} , Rotation:Vector3)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or typeof(Rotation) ~= "Vector3" then
		warn("Error , Function :- SetRotation , Reason :- Objects table is empty or Rotation is nil , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("BasePart") then
			Object.Rotation = Rotation
		end
	end
end
function ExtraFunctions.SetPosition(Objects:{} , Position:Vector3)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or typeof(Position) ~= "Vector3" then
		warn("Error , Function :- SetPosition , Reason :- Objects table is empty or Position is nil , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("BasePart") then
			Object.Position = Position
		end
	end
end
function ExtraFunctions.SetAnchored(Objects:{} , Value:boolean)
	if Objects == nil or type(Objects) ~= "table" or #Objects < 1 or type(Value) ~= "boolean" then
		warn("Error , Function :- SetAnchored , Reason :- Objects table is empty or Value is nil , nil returned")
		return nil
	end
	for i , Object:Instance in pairs(Objects) do
		if Object:IsA("BasePart") then
			Object.Anchored = Value
		end
	end
end
return ExtraFunctions
2 Likes

i lov extra steps while being scared of properties!!!

4 Likes

I have to say, this is amazing you are still going with this plugin, but like I have said before, who would use this?

You have to require a seperate module, then remember what attributes there are. It’s terrible.

Here’s some polls because OP didn’t do them :point_down:

Will this affect your workflow/development?
  • Yes
  • No
  • Maybe
  • Future Use

0 voters

Was this worth the time and effort to make?
  • Yes
  • No
  • No, but it’s always good practice

0 voters

1 Like

i do not do polls because i do not see any point of create polls , everyone here is thinking that this plugin is a joke but it is not it is just my first plugin , i thought it would be cool to have functions do things in bulk easily or do somethings that takes a lot of lines to do so i created this plugin then i tried to make a better version of it , it is this version and it looks like that no one likes this one too :frowning:

so if you wanna to help me to make my next plugin better you can vote on these pulls

What makes a plugin useful ?
  • it can do something that is hard to make
  • it save you time
  • it makes a certain thing easier

0 voters

what is the most plugin type you use ?
  • Scripting plugins
  • Building plugins
  • UI plugins
  • Audio plugins
  • Animation plugin
  • Something else (reply with it)

0 voters

what is the most important part in plugins IUO ?
  • It is UI
  • It is security
  • It is features
  • Easy to use

0 voters

What makes a plugin bad
  • Lack of features
  • Lack of security
  • Hard to use
  • Not updating
  • Full of bugs

0 voters

You should add to the last question “What makes a plugin bad” the option of “Being useless”, I believe you might get some votes on that

1 Like

The reason noone likes your plugin is because it just lacks use. Making stuff like this is good practice into making better plugins!

1 Like

Let’s gooooooooooooooooooooooo

1 Like

What’s even going on here

4 Likes

Here’s my suggestions when you make a plugin, and for when you create an OSS library
You should only make a plugin if:

  1. It is something to specifically help in studio, such as with animations, building maps, or interacting with the DataModel within studio, this plugin is just straight up dumb as all it does is insert a library into the game, which is extra steps to use your library that is supposed to be used at RUNTIME, not at studio. There are some exceptions although.
  2. The plugin is NOT about coding, coding plugins are not a thing that should exist, as coding doesn’t interact with the DataModel (besides for the source of the code) live on studio, if you’re looking to make coding easier, you should instead make a tool for externally managed workflows, such as a VSCode extension, a package manager, a syncer, a linter, whatever you feel like doing.

And for OSS libraries, your library should:

  1. Accomplish a difficult to-do task that many developers do wrong or it requires too much effort to. Meaning, you shouldn’t just make mere wrappers, or a bunch of snippets inside a module like this
  2. Either not be licensed at all, or have a permissive license, such as one of the OSI approved licenses. I don’t get why you worried so much about “people stealing your work” last time when your plugin really wasn’t super-complex code that needed to be secured.
2 Likes

thank you for sharing and distributing the source code once again.


ty for reposting this topic again. i much prefer this than using performant built-in functions that luau already has for these.
:+1: