penumbra-sync / client Goto Github PK
View Code? Open in Web Editor NEWMare Synchronos Dalamud Plugin
License: MIT License
Mare Synchronos Dalamud Plugin
License: MIT License
I would like to be able to block syncronisation for specific items or body parts
I know initially on first glance people will see enshroud here and go "Oh its known to not work" right away. But allow me to explain.
After many months of the original report I have made, I have done a lot of research into enshroud and also things like the reaper avatar, and summoned weapons in general.
The commonality between all of them is they are all summoned models in some form or manner, with (mostly) bound animations.
A TMB or PAP file has an effect called "Enshroud" which when called upon summons the reaper enshroud outfit onto the player. If you modify the TMB to call enshroud on other actions besides the ability enshroud, mare will sucessfully call enshroud transformation when you call it via the tmb.
It will not, however, call upon the modded item attached to the enshroud outfit. (if modded).
Consqeuently, you can use a TMB or PAP to call upon summoned weapons, which will call a weapon to your arm and play an animation with it. Such techniques is how reapers avatar is summoned during battle with its oGCD's.
In recent months, other vfx replacement modders have begun getting more reports of parts of their vfx replacement mods not working across mare, and have also received reports of a modded NIN hellfrog summon (called via summon weapon) not displaying via mare as well. If you see the attachment below, you can see what is intended vs what is displayed.
It is clear in the video attached that the animation is being correctly transferred to the player over mare (hence the deformed neck on the frog). Which is leading us to believe that the issue is less exclusive to particuraily enshroud, and more in the scope of anything involving summoned states, failing to store their mesh in mare cache, and only storing the animation. Either this or the fail to store the binding between the two.
Its leading myself and a few others to conclude mare is not properly caching information being brought over on modified pap or tmb's summon weapon model animations / replacements along with enshroud status changes models spesifically.
This issue can be seen in any of the following:
In summary, If the animation is correctly transferring (hence the deformed hellfrog) yet the hellfrog is failing to transfer its modded model, it means that the information mare is failing to transfer is not the declaration of the summoned weapon /animation, but the model file attached to those animations. Which is nice to know considering before all we had to work off was what enshroud could or couldn't do, but this shows the commonality of the issue. The only question now is why this is happening and what needs to be modified to fix this issue.
I would like to see a feature to sync animations. Or have it so that a Penumbra collection for the player in question can not be overridden when it comes to animations,
I would like to suggest to consider making your own logging, separate from Dalamud's log file. It's really painful to work with people's logs who have Mare Synchronous installed... out of 6k lines, 4k belong to it and all go into informational or higher channels.
The link in the md
This dalamud Repo
is not working if you are not on the Server in the first place
A friend of mine downloaded Mare and Glamourer. Though every time it trys to synch me and him it crashes his game.
Edit: My friend is also from Chaos and I am from Light.
Another Edit: By testing around we found out that the game crashes when the mod of the other person is too big in size. Also it only crashes when I activate a mod that my friend doesn't have, but if he activates one that I don't have it downloads as normal.
The plugin seems to cause the game to almost always crash and immediately exit if your character is transformed in to a non-Human model. This only seems to occur on non-Windows platforms, for some reason. I believe it is due to invalid memory accesses.
I've experienced crashes in at least the following situations:
Some relevant lines are logged immediately before a crash:
[INF] [MareSynchronos] [Player...actory]{0} Checking File Replacement for Model chara/monster/m0216/obj/body/b0002/model/m0216b0002.mdl
[...]
[INF] [MareSynchronos] [Player...actory]{0} Checking skeleton chara/human/c49472/skeleton/base/b0001/skl_c49472b0001.sklb
^ Transformed in to a monster model. The race id 49472 is nonsense and something random each time.
[WRN] [MareSynchronos] [Player...actory]{3} Could not get Decal data:
[WRN] [MareSynchronos] [Player...actory]{3} Could not get Legacy Body Decal Data:
^ these indicate that there is an issue accessing the player's GameObject as a Human* when it is no longer a Human.
[INF] [MareSynchronos] [Player...actory]{0} Checking File Replacement for Texture H�l$�H�t$�H�|$ AVH�� H�D$XI��I��L��H�����u��AX�����D�`H�\$0=V�
^ Lines like this are occasionally logged as well
[INF] [MareSynchronos] [Player...actory]{1} Glamourer is now: [...]
[INF] [MareSynchronos] [Player...actory]{1} Customize is now: [...]
^ These are the final lines logged before the game closes. Palette+ is installed.
Adding this check to CreateCharacterData() seems to avoid the crash, but I don't know if its ideal (might affect someone using monster model mods?):
diff --git a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs
index d3a63fd..8dc2731 100644
--- a/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs
+++ b/MareSynchronos/PlayerData/Factories/PlayerDataFactory.cs
@@ -329,6 +329,24 @@ public class PlayerDataFactory
totalWaitTime -= 50;
}
+ if (objectKind == ObjectKind.Player)
+ {
+ bool inhuman = false;
+
+ unsafe
+ {
+ var drawObj = (DrawObject*)((Character*)charaPointer)->GameObject.GetDrawObject();
+ inhuman = (drawObj->Object.GetObjectType() == ObjectType.CharacterBase && ((CharacterBase*)drawObj)->GetModelType() != CharacterBase.ModelType.Human);
+ }
+
+ if (inhuman)
+ {
+ _logger.LogInformation("Skipping processing of character with non-Human model type");
+ return previousData;
+ }
+ }
+
+
Stopwatch st = Stopwatch.StartNew();
// gather static replacements from render model
When the character un-transforms it triggers another character check, so there's not any lasting effects here.
Also maybe interesting to know is Penumbra's "On-Screen" tab will fail with an AccessViolationException as well, while a player is transformed in to a monster:
Hey,
first of all thanks for the Project, thats awesome.
As I tested with friends installing it, only if you change the directory once after installing to another directory (Doesnt matter which) the sync is successfull.
Perhaps just on my end but trying to hit the link for the repo to add, fires up discord in a new tab and doesn't seem to actually load a server. Possibly 'cause it's a channel link to a server I'm not in, unsure, discord is .. discord.
Could we get a clarified or updated link to the discord server or Dalamud repo in question? Or if it really is just some problem on my end, we can shame my computer too. 😋
Sorry to bother, this is just a very exciting project! Thanks :)
Hi, I use Mare Synchronos to have my close friends sync to my client, everything works fine except that my connection is not great and when download mods from other players Mare end killing the overall connection of my other open applications, basically getting all the bandwidth available, this is a problem when we go to something like a party and ppl is changing mods all the time, and end not been able to do nothing, like watch a video on YouTube or view a stream in twitch.
It will be great if we can limit the bandwidth that downloads can use, I know that we can limit how many parallel downloads we can get, but that is not enough.
If I understand correctly Mare code we use HttpRequestMessage
to retrieve the files, maybe we can use something like a ThrottlingHandler
.
public class ThrottlingHandler : DelegatingHandler
{
private readonly int maxBytesPerSecond;
public ThrottlingHandler(int maxBytesPerSecond)
{
this.maxBytesPerSecond = maxBytesPerSecond;
}
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
using (var throttledStream = new ThrottledStream(request.Content.ReadAsStreamAsync().Result, maxBytesPerSecond))
{
request.Content = new StreamContent(throttledStream);
return await base.SendAsync(request, cancellationToken);
}
}
}
Or something like Polly
I currently don't have any .net environment/dev tools in my computer to do a PR, but if you guys think that is something that could be useful for the plugin, and you can not do this feature I may consider doing it.
Thoughts?
Thanks for your great work in any case!
I used to install mod with textool and wanna use this function.
All require plugin are installed and I tried to let it do the initial scan overnight but it stuck in Processing 0/1 files
(I have around 3.7GB of mod)
I reinstall the FFxiv base game already to avoid the textools corruption but the plugin still having runtime error
Tell me if you need more info
edit: its the root folder permission issue, Its fixed. Sorry for bothering
When a mod that changes the song of a shared mount is used the other person does not listen the modified song
example of such mod: https://www.xivmodarchive.com/modid/49685
My friend and I have various mods installed. Before 6.55, we were able to see each other's custom mounts, dances, etc. After the patch and after Dalamud and Penumbra were updated, our mods no longer seem to be showing up for each other.
We have attempted to remove and re-add each other to the sync to no avail.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.