fix minions/mounts for 6.2, todo: remove penumbra redraw once glamourer is available

This commit is contained in:
Stanley Dimant
2022-08-24 22:02:56 +02:00
parent 0d3fbc245b
commit 5cdb9e6dfa
8 changed files with 72 additions and 69 deletions

View File

@@ -31,14 +31,14 @@ public class CharacterDataFactory
_ipcManager = ipcManager;
}
public CharacterData BuildCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr playerPointer, CancellationToken token)
public unsafe CharacterData BuildCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr playerPointer, CancellationToken token)
{
if (!_ipcManager.Initialized)
{
throw new ArgumentException("Penumbra is not connected");
}
if (playerPointer == IntPtr.Zero)
if (playerPointer == IntPtr.Zero || ((Character*)playerPointer)->GameObject.GetDrawObject() == null)
{
Logger.Verbose("Pointer was zero for " + objectKind);
previousData.FileReplacements.Remove(objectKind);
@@ -198,6 +198,11 @@ public class CharacterDataFactory
private unsafe CharacterData CreateCharacterData(CharacterData previousData, ObjectKind objectKind, IntPtr charaPointer, CancellationToken token)
{
if (previousData.FileReplacements.ContainsKey(objectKind))
{
previousData.FileReplacements[objectKind].Clear();
}
Stopwatch st = Stopwatch.StartNew();
var chara = _dalamudUtil.CreateGameObject(charaPointer)!;
while (!_dalamudUtil.IsObjectPresent(chara))
@@ -207,17 +212,9 @@ public class CharacterDataFactory
}
_dalamudUtil.WaitWhileCharacterIsDrawing(charaPointer);
if (previousData.FileReplacements.ContainsKey(objectKind))
{
previousData.FileReplacements[objectKind].Clear();
}
previousData.ManipulationString = _ipcManager.PenumbraGetMetaManipulations();
if (objectKind is not ObjectKind.Mount)
{
previousData.GlamourerString[objectKind] = _ipcManager.GlamourerGetCharacterCustomization(chara);
}
previousData.GlamourerString[objectKind] = _ipcManager.GlamourerGetCharacterCustomization(chara);
var human = (Human*)((Character*)charaPointer)->GameObject.GetDrawObject();
for (var mdlIdx = 0; mdlIdx < human->CharacterBase.SlotCount; ++mdlIdx)