[2.0] WCS - A combat system framework

i installed this version using wally and synced with rojo and i’m getting this error

  12:40:39.880  Infinite yield possible on 'ReplicatedStorage.Packages._Index.cheetiedotpy_wcs@2.0.2.wcs.include.node_modules.@rbxts:WaitForChild("charm")'  -  Studio
  12:40:39.880  Stack Begin  -  Studio
  12:40:39.880  Script 'ReplicatedStorage.Packages._Index.cheetiedotpy_wcs@2.0.2.wcs.include.RuntimeLib', Line 53 - function import  -  Studio - RuntimeLib:53
  12:40:39.880  Script 'ReplicatedStorage.Packages._Index.cheetiedotpy_wcs@2.0.2.wcs.source.actions', Line 4  -  Studio - actions:4
  12:40:39.880  Stack End  -  Studio

going to be fixed next release, wally seems to be overriding default.project.json

:sparkles: WCS 2.1.0 :sparkles:

  • Fixed a lot of replication problems due to the migration from reflex.
  • Fixed holdable skills acting like normal in the previous version.

:books: Documentation

:ledger: Github Repository

1 Like

Thank you for the update!
Quick bug/question: the StatusEffect priority does not work as described in the tutorial.

The tutorial describes that the priority will override any changes, ‘Set’ AND ‘Increment’ here: Humanoid Data | WCS, but while I was testing, I realised that changes to the humanoid data using Increment will still go through even if the priority is lower.

A look through the code seems to confirm my suspicion. Why is priority only used for “Set” in the code below?

local _callback_1 = function(StatusEffect)
local humanoidData = StatusEffect:GetHumanoidData()
if not humanoidData then
	return nil
end
local priority = humanoidData.Priority
for PropertyName, PropertyData in pairs(humanoidData.Props) do
	if PropertyData[2] == "Increment" then
		propsToApply[PropertyName] = (PropertyData[1] + propsToApply[PropertyName])
	elseif priority > incPriorityList[PropertyName] then
		propsToApply[PropertyName] = PropertyData[1]
		incPriorityList[PropertyName] = priority
	end
end

Humanoid Data is working as intended.
Priority only affects properties with mode Set.

Fair enough, but then the explanation in the Tutorial is misleading.

Please define a consistent interaction depending upon priorities since it is currently inconsistent.

Simplest example: imagine we have two status effects: a) [Increment, -5] and b) [Set 0] both for WalkSpeed. If a) is called first then b), the WalkSpeed is 0, but if b) is called first, then the WalkSpeed becomes -5. Hopefully, you can imagine how this is a problem if you expected status effect b) to either have a higher priority or always override increments.

Please make the documentation more beginner friendly!!!

This is probably impossible to use for beginners, because of the complexion.

This did help me out a lot but it took me almost a month to figure it out and I’ve been developing for 3 months!

I’m having an issue with messages. Im testing out the framework and for some reason I cannot get a message to get noticed on the client. Here is the Skill I made:
image

the “serverSaidSomething” method is never fired but the Skill is started on both the server and client as shown here:
image

I re-read the documentation like 10 times but I am at a loss now. Am i doing something wrong?

Amazing framework, the system itself is pretty useful with a lot of handy functions, something like this is an incredible tool. My only complaint would be the Documentation, it’s not very explicative on some aspects (Status Effects and Messages), I have had to go and read the code of the modules to try and understand how to use a function as the Documentation has very little information on things like the parameters a function requires, or how even to intercept a message being sent from the server on the client.

This aside, I’m having issues understanding .GetAllStatusEffects(self.Character) and .GetAllActiveStatusEffects(self.Character). Whenever I try to print the return of the functions I get something unexpected

image

Is there any error in in the parameters I’m using, am I missing something and this is how it’s supposed to be, or perhaps those functions don’t work right?

I am having a breaking issue where creating a WCS_Character after the player resets does not replicate to the client and returns nil when using Character.GetCharacterFromInstance().

In the video the m1 skill is constructed on both the server and the client. I am using a while loop to continuously print out the value returned from Character.GetCharacterFromInstance() which is copied from the documentaion:
image

After I reset my character, the function starts returning nil even though in the output you can see the skill was constructed on the server, but not the client. I am not sure if this is a bug but its been super frustrating since I am literally using the code straight from the documentation.

This works as intended, it returns an array of StatusEffect objects.
Roblox doesn’t stringify the tables and show the internal contents of those objects, that’s why it looks a little weird in the console.

Are you sure you’re creating the character again when you reset?
A guaranteed way of getting WCS_Character from client would be
Character.GetCharacterFromInstance(this.instance) || Character.CharacterCreated.Wait()[0];

:hammer: WCS 2.1.2 :hammer:

  • Fixed server not sending payload when character gets destroyed.
  • Fixed client not applying server payload when one of the listeners mutates the thread.

:books: Documentation

:ledger: Github Repository

1 Like

This patch fixed my issue thanks!

i dont know if i did something wrong but when i try using messages from server to client it doesnt work even when i copy and paste the code from the documentation

image

Yea events from server to client dont work at all on the latest version.

Also I am not sure if I am doing something wrong but awaiting a promise from a request (client → server) just yields infinitely. And also I dont think promises are properly cleaned up because errors occur after the character resets. This is my code:

I have 2 messages, 1 for sending a event to the client to print something, and another one to get the current combo. The first message just straight up does not work at all. And the request does work but if I use .await() instead of .andThen(), the function seems to yield forever or just stop. Here is the video showing this:

1 Like