Пример #1
0
        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);
        }