idk, probably some crashfixes or so
This commit is contained in:
@@ -171,9 +171,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task CustomizePlusRevert(IntPtr character)
|
||||
{
|
||||
if (!CheckCustomizePlusApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
Logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X"));
|
||||
@@ -185,9 +185,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task CustomizePlusSetBodyScale(IntPtr character, string scale)
|
||||
{
|
||||
if (!CheckCustomizePlusApi() || string.IsNullOrEmpty(scale)) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
string decodedScale = Encoding.UTF8.GetString(Convert.FromBase64String(scale));
|
||||
@@ -217,7 +217,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
try
|
||||
{
|
||||
await _glamourerApplicationSemaphore.WaitAsync().ConfigureAwait(true);
|
||||
var gameObj = _dalamudUtil.CreateGameObject(handler.Address);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(handler.Address).ConfigureAwait(false);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
await PenumbraRedrawAsync(logger, handler, applicationId, () => _glamourerApplyAll!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false);
|
||||
@@ -235,10 +235,10 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
try
|
||||
{
|
||||
await _glamourerApplicationSemaphore.WaitAsync().ConfigureAwait(false);
|
||||
var gameObj = _dalamudUtil.CreateGameObject(handler.Address);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(handler.Address).ConfigureAwait(false);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyEquipment!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false);
|
||||
await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyCustomization!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false);
|
||||
await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyEquipment!.InvokeAction(equipment, c), fireAndForget, token).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
@@ -253,7 +253,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
if (!CheckGlamourerApi()) return string.Empty;
|
||||
try
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(false);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
var glamourerString = await _dalamudUtil.RunOnFrameworkThread(() => _glamourerGetAllCustomization!.InvokeFunc(c)).ConfigureAwait(false);
|
||||
@@ -274,9 +274,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task HeelsRestoreOffsetForPlayer(IntPtr character)
|
||||
{
|
||||
if (!CheckHeelsApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj != null)
|
||||
{
|
||||
Logger.LogTrace("Restoring Heels data to {chara}", character.ToString("X"));
|
||||
@@ -288,9 +288,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task HeelsSetOffsetForPlayer(IntPtr character, float offset)
|
||||
{
|
||||
if (!CheckHeelsApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj != null)
|
||||
{
|
||||
Logger.LogTrace("Applying Heels data to {chara}", character.ToString("X"));
|
||||
@@ -302,9 +302,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task HonorificClearTitle(nint character)
|
||||
{
|
||||
if (!CheckHonorificApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj is PlayerCharacter c)
|
||||
{
|
||||
Logger.LogTrace("Honorific removing for {addr}", c.Address.ToString("X"));
|
||||
@@ -323,10 +323,10 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task HonorificSetTitle(IntPtr character, string honorificData)
|
||||
{
|
||||
if (!CheckHonorificApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
Logger.LogTrace("Applying Honorific data to {chara}", character.ToString("X"));
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj is PlayerCharacter pc)
|
||||
{
|
||||
if (string.IsNullOrEmpty(honorificData))
|
||||
@@ -352,9 +352,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task PalettePlusRemovePalette(IntPtr character)
|
||||
{
|
||||
if (!CheckPalettePlusApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
Logger.LogTrace("PalettePlus removing for {addr}", c.Address.ToString("X"));
|
||||
@@ -366,9 +366,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
public async Task PalettePlusSetPalette(IntPtr character, string palette)
|
||||
{
|
||||
if (!CheckPalettePlusApi()) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(() =>
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(character);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
string decodedPalette = Encoding.UTF8.GetString(Convert.FromBase64String(palette));
|
||||
@@ -398,7 +398,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
if (!CheckPenumbraApi() || _dalamudUtil.IsZoning) return;
|
||||
await _dalamudUtil.RunOnFrameworkThread(async () =>
|
||||
{
|
||||
var gameObj = _dalamudUtil.CreateGameObject(handler.Address);
|
||||
var gameObj = await _dalamudUtil.CreateGameObject(handler.Address).ConfigureAwait(true);
|
||||
if (gameObj is Character c)
|
||||
{
|
||||
await PenumbraRedrawAsync(logger, handler, applicationId, () => _penumbraRedrawObject!.Invoke(c, RedrawType.Redraw), fireAndForget, token).ConfigureAwait(false);
|
||||
@@ -626,7 +626,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase
|
||||
|
||||
private void OnHonorificLocalCharacterTitleChanged(string title, bool isPrefix)
|
||||
{
|
||||
Mediator.Publish(new HonorificMessage((isPrefix ? 0 : 1) + title));
|
||||
Mediator.Publish(new HonorificMessage((isPrefix ? 1 : 0) + title));
|
||||
}
|
||||
|
||||
private void OnPalettePlusPaletteChange(Character character, string palette)
|
||||
|
||||
@@ -316,7 +316,7 @@ public class PlayerDataFactory
|
||||
// wait until chara is not drawing and present so nothing spontaneously explodes
|
||||
await _dalamudUtil.WaitWhileCharacterIsDrawing(_logger, playerRelatedObject, Guid.NewGuid(), 30000, ct: token).ConfigureAwait(false);
|
||||
int totalWaitTime = 10000;
|
||||
while (!DalamudUtilService.IsObjectPresent(_dalamudUtil.CreateGameObject(charaPointer)) && totalWaitTime > 0)
|
||||
while (!DalamudUtilService.IsObjectPresent(await _dalamudUtil.RunOnFrameworkThread(() => _dalamudUtil.CreateGameObject(charaPointer).GetAwaiter().GetResult()).ConfigureAwait(false)) && totalWaitTime > 0)
|
||||
{
|
||||
_logger.LogTrace("Character is null but it shouldn't be, waiting");
|
||||
await Task.Delay(50, token).ConfigureAwait(false);
|
||||
|
||||
@@ -164,7 +164,7 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase
|
||||
Address = curPtr;
|
||||
if (addrDiff)
|
||||
{
|
||||
GameObjectLazy = new(() => _dalamudUtil.CreateGameObject(curPtr));
|
||||
GameObjectLazy = new(() => _dalamudUtil.CreateGameObject(curPtr).GetAwaiter().GetResult());
|
||||
}
|
||||
var chara = (Character*)curPtr;
|
||||
var name = new ByteString(chara->GameObject.Name).ToString();
|
||||
|
||||
@@ -204,8 +204,8 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase
|
||||
{
|
||||
await _ipcManager.PenumbraRemoveTemporaryCollection(Logger, applicationId, PlayerName!).ConfigureAwait(false);
|
||||
token.ThrowIfCancellationRequested();
|
||||
await _ipcManager.PenumbraSetTemporaryMods(Logger, applicationId, PlayerName!,
|
||||
_charaHandler?.GameObjectLazy?.Value.ObjectTableIndex(), moddedPaths, manipulationData).ConfigureAwait(false);
|
||||
var objTableIndex = await _dalamudUtil.RunOnFrameworkThread(() => _charaHandler!.GameObjectLazy!.Value.ObjectTableIndex()).ConfigureAwait(false);
|
||||
await _ipcManager.PenumbraSetTemporaryMods(Logger, applicationId, PlayerName!, objTableIndex, moddedPaths, manipulationData).ConfigureAwait(false);
|
||||
token.ThrowIfCancellationRequested();
|
||||
}
|
||||
|
||||
@@ -485,7 +485,7 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase
|
||||
if (string.IsNullOrEmpty(PlayerName))
|
||||
{
|
||||
var pc = _dalamudUtil.FindPlayerByNameHash(OnlineUser.Ident);
|
||||
if (pc == null) return;
|
||||
if (pc == default((string, nint))) return;
|
||||
Logger.LogDebug("One-Time Initializing {this}", this);
|
||||
Initialize(pc.Name.ToString());
|
||||
Logger.LogDebug("One-Time Initialized {this}", this);
|
||||
|
||||
@@ -92,6 +92,8 @@ public class Pair
|
||||
{
|
||||
try
|
||||
{
|
||||
if (CachedPlayer != null) return;
|
||||
|
||||
_creationSemaphore.Wait();
|
||||
|
||||
if (dto == null && _onlineUserIdentDto == null)
|
||||
|
||||
@@ -30,7 +30,7 @@ public class DalamudUtilService : IHostedService
|
||||
private readonly List<uint> ClassJobIdsIgnoredForPets = new() { 30 };
|
||||
private uint? _classJobId = 0;
|
||||
private DateTime _delayedFrameworkUpdateCheck = DateTime.Now;
|
||||
private Dictionary<string, PlayerCharacter> _playerCharas = new(StringComparer.Ordinal);
|
||||
private Dictionary<string, (string Name, nint Address)> _playerCharas = new(StringComparer.Ordinal);
|
||||
private bool _sentBetweenAreas = false;
|
||||
|
||||
public DalamudUtilService(ILogger<DalamudUtilService> logger, ClientState clientState, ObjectTable objectTable, Framework framework,
|
||||
@@ -77,9 +77,9 @@ public class DalamudUtilService : IHostedService
|
||||
return obj != null && obj.IsValid();
|
||||
}
|
||||
|
||||
public Dalamud.Game.ClientState.Objects.Types.GameObject? CreateGameObject(IntPtr reference)
|
||||
public async Task<Dalamud.Game.ClientState.Objects.Types.GameObject?> CreateGameObject(IntPtr reference)
|
||||
{
|
||||
return _objectTable.CreateObjectReference(reference);
|
||||
return await RunOnFrameworkThread(() => _objectTable.CreateObjectReference(reference)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public Dalamud.Game.ClientState.Objects.Types.Character? GetCharacterFromObjectTableByIndex(int index)
|
||||
@@ -94,12 +94,6 @@ public class DalamudUtilService : IHostedService
|
||||
return await RunOnFrameworkThread(() => GetCompanionInternal(playerPointer)).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public unsafe IntPtr GetMinion(IntPtr? playerPointer = null)
|
||||
{
|
||||
playerPointer ??= PlayerPointer;
|
||||
return (IntPtr)((Character*)playerPointer)->CompanionObject;
|
||||
}
|
||||
|
||||
public unsafe IntPtr GetMinionOrMount(IntPtr? playerPointer = null)
|
||||
{
|
||||
playerPointer ??= PlayerPointer;
|
||||
@@ -230,7 +224,7 @@ public class DalamudUtilService : IHostedService
|
||||
return _gameGui.WorldToScreen(obj.Position, out var screenPos) ? screenPos : Vector2.Zero;
|
||||
}
|
||||
|
||||
internal PlayerCharacter? FindPlayerByNameHash(string ident)
|
||||
internal (string Name, nint Address) FindPlayerByNameHash(string ident)
|
||||
{
|
||||
_playerCharas.TryGetValue(ident, out var result);
|
||||
return result;
|
||||
@@ -245,7 +239,7 @@ public class DalamudUtilService : IHostedService
|
||||
{
|
||||
if (_clientState.LocalPlayer?.IsDead ?? false) return;
|
||||
|
||||
_playerCharas = _performanceCollector.LogPerformance(this, "ObjTableToCharas", () => _objectTable.OfType<PlayerCharacter>().ToDictionary(p => p.GetHash256(), p => p, StringComparer.Ordinal));
|
||||
_playerCharas = _performanceCollector.LogPerformance(this, "ObjTableToCharas", () => _objectTable.OfType<PlayerCharacter>().ToDictionary(p => p.GetHash256(), p => (p.Name.ToString(), p.Address), StringComparer.Ordinal));
|
||||
|
||||
if (GposeTarget != null && !IsInGpose)
|
||||
{
|
||||
|
||||
@@ -146,9 +146,6 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase
|
||||
{
|
||||
Logger.LogDebug("Downloading files for {id}", gameObjectHandler.Name);
|
||||
|
||||
// force create lazy
|
||||
_ = gameObjectHandler.GameObjectLazy.Value;
|
||||
|
||||
List<DownloadFileDto> downloadFileInfoFromService = new();
|
||||
downloadFileInfoFromService.AddRange(await FilesGetSizes(fileReplacement.Select(f => f.Hash).ToList(), ct).ConfigureAwait(false));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user