UPDATED VERSION OF THE PLUGIN HERE
This plugin is a framework that is used inorder to create skills for roblox games and allow you to use these skills without running the place.
CREATING SKILLS
This image above should be what you see inside your replicated storage when you first run the module.
You will only really need to use Server and Client to create skills
This is the server script for skill “Example 1” and as we can see here an exampe of the replication is provided aswell as the self:Destroy() showing how skills are cleaned up.
The data within self is as shown below: to be able to create a function for when a skill gets cancelled you simple must do
self.Cancelled = function()
end)
HOW TO PLAY ANIMATIONS
I have provided an animation module inside the framework as they are run differently compared to your normal loading aniamtion to the aniamtor and playing it and this can be referenced by using the following
self.Animation:PlayAnimation(Character, TrackInstance)
self.Animation:StopAnimation(Character, TrackInstance)
these are the predefault seld variables.
self.Character : CharacterModel
self._maid : Maid Class
ADD YOUR OWN SKILL
This is as simple as copy and pasting the “Example 1” folder and renaming it (MAKE SURE THAT THE SKILL FOLDERS DO NOT HAVE THE SAME NAME AS EACH OTHER)
HOW TO REPLICATE EFFECTS
the way this replication works is using the same skill folder it will create a replication class for the skill at hand or if you call it multiple times it will reuse the same class allowing for passing of variables between functions via self inorder to make sure that a replication class can no longer be used after a skill is complete you must also run self:Destroy() on the client to clean up the class and any connections or instances within the _maid.
HOW TO ADD CUSTOM MODULES
To add custom modules its as simple as putting the module under the Attack classes Services module instance inside of the replicated storage. I have provided you with an animation service and the replication service. to reference these modules within your attack its as simple as self.[Module Name] and you can then index the methods you would like to use within it. this applies the same within the replication class which is for the client side of things,.
HOW TO PLAY SKILLS ON RIG / DUMMY
As shown above to load a skill onto a dummy you must press on the dummy and select the skill you want to load. loading the skill does not play it it assigns the dummy to play whatever skill is loaded into it, if i was to load example 1 onto this dummy and example 1 onto the next dummy and click “Play All” it would play the skill for both dummies at the same time, this will also be the case if i swapped the skill on one of them.
To play skills individually you must simply have the dummy selected and click “Play”…
Stop will cancel the skill and revert the dummy.
EXAMPLE SKILLS
Server Script
return {
['Began'] = function(self)
local CharacterModel: Model = self.Character;
local HumanoidRootPart: BasePart, Humanoid: Humanoid = CharacterModel:WaitForChild('HumanoidRootPart'), CharacterModel:WaitForChild('Humanoid');
local StartPoint: CFrame = HumanoidRootPart.CFrame;
self.Replication:Replicate({
Attack = self,
Action = 'Test_FireBall',
Data = {StartPoint = StartPoint, Distance = 50, Speed = 75}
})
self:Destroy()
end;
}
Client Script
return {
['Test_FireBall'] = function(self, Data)
local CharacterModel: Model = self.Character;
local HumanoidRootPart: BasePart, Humanoid: Humanoid = CharacterModel:WaitForChild('HumanoidRootPart'), CharacterModel:WaitForChild('Humanoid');
local Assets: Folder = script:WaitForChild('Assets');
local Effects: Folder = workspace:WaitForChild('Effects');
local StartPoint: CFrame = Data.StartPoint;
local ContactPoint: CFrame = StartPoint * CFrame.new(0, 0, -Data.Distance)
local Projectile: BasePart = Assets.Projectile:Clone();
Projectile.Anchored, Projectile.CanCollide, Projectile.Transparency, Projectile.Parent = true, false, 1, Effects;
self.Utilities.Toggle(true, Projectile);
local Tween: Tween = game:GetService('TweenService'):Create(Projectile, TweenInfo.new(Data.Distance/Data.Speed, Enum.EasingStyle.Linear), {CFrame = ContactPoint});
Tween:Play();
Tween.Completed:Connect(function()
self.Utilities.Toggle(false, Projectile, {Classes = {Beam=true}});
for i: number, Beam: Beam in pairs(Projectile:GetDescendants()) do
if Beam and Beam:IsA('Beam') then
local FadedSequence: NumberSequence = NumberSequence.new({
NumberSequenceKeypoint.new(0,1),
NumberSequenceKeypoint.new(.5,1),
NumberSequenceKeypoint.new(1,1);
});
task.spawn(self.Utilities.TweenNumberSequence, Beam.Transparency, FadedSequence, 50, .25, Beam, 'Transparency', Enum.EasingStyle.Sine, Enum.EasingDirection.Out);
game:GetService('TweenService'):Create(Beam, TweenInfo.new(0.35, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Width0 = 0, Width1 = 0}):Play();
end;
end;
self.Debris:AddItem(Projectile, 1);
--//Explosion Effect
local ExplosionEffect: BasePart = Assets.Impact:Clone();
ExplosionEffect:PivotTo(ContactPoint);
ExplosionEffect.Parent = Effects;
self.Debris:AddItem(ExplosionEffect, 2.031);
--//Distortion
local Sphere: MeshPart = ExplosionEffect.Sphere;
Sphere.Transparency = 15; --//Max Distortion
local Highlight: Highlight = Instance.new('Highlight', Sphere);
Highlight.FillColor, Highlight.OutlineColor, Highlight.FillTransparency, Highlight.OutlineTransparency = Color3.fromRGB(255, 255, 255), Color3.fromRGB(255, 255, 255), 1, 1;
Highlight.Enabled = false;
local DistortionTween: Tween = game:GetService('TweenService'):Create(Sphere, TweenInfo.new(0.25, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Size = Vector3.zero});
DistortionTween:Play();
self.Utilities.Emit(ExplosionEffect);
end)
end;
}
Result
MORE EXAMPLES
to ask questions dm me on discord @ ._apexsage