public static async Task <bool> AffixMateria(BagSlot bagSlot, List <BagSlot> materiaList) { Log($"MateriaList count {materiaList.Count}"); if (bagSlot != null && bagSlot.IsValid) { Log($"Want to affix Materia to {bagSlot}"); for (int i = 0; i < materiaList.Count; i++) { if (materiaList[i] == null) { continue; } Log($"Want to affix materia {i} {materiaList[i]}"); if (!materiaList[i].IsFilled) { continue; } int count = MateriaCount(bagSlot); while (materiaList[i].IsFilled && (count == MateriaCount(bagSlot))) { if (!MateriaAttach.Instance.IsOpen) { bagSlot.OpenMeldInterface(); await Coroutine.Wait(5000, () => MateriaAttach.Instance.IsOpen); if (!MateriaAttach.Instance.IsOpen) { Log($"Can't open meld window"); return(false); } MateriaAttach.Instance.ClickItem(0); await Coroutine.Sleep(1000); MateriaAttach.Instance.ClickMateria(0); await Coroutine.Sleep(1000); await Coroutine.Wait(5000, () => MateriaAttachDialog.Instance.IsOpen); } if (!MateriaAttachDialog.Instance.IsOpen) { MateriaAttach.Instance.ClickItem(0); await Coroutine.Sleep(1000); MateriaAttach.Instance.ClickMateria(0); await Coroutine.Sleep(1000); await Coroutine.Wait(5000, () => MateriaAttachDialog.Instance.IsOpen); if (!MateriaAttachDialog.Instance.IsOpen) { Log($"Can't open meld dialog"); return(false); } } //Log($"{Offsets.AffixMateriaFunc.ToInt64():X} {Offsets.AffixMateriaParam.ToInt64():X} {bagSlot.Pointer.ToInt64():X} {materiaList[i].Pointer.ToInt64():X}"); bagSlot.AffixMateria(materiaList[i]); await Coroutine.Sleep(7000); await Coroutine.Wait(7000, () => MateriaAttach.Instance.IsOpen || MateriaAttachDialog.Instance.IsOpen); } if (!materiaList[i].IsFilled) { return(false); } } } return(true); }