Esempio n. 1
0
        public void Enter(Machine machine)
        {
            machine.Utility.EquipmentSettings = machine.Utility.LoadEquipmentSettings();

            if (BuffingEquipment.Count.Equals(0) && machine.Core.CharacterFilter.Name.Equals(machine.BuffingCharacter))
            {
                foreach (Equipment item in machine.Utility.EquipmentSettings.BuffingEquipment)
                {
                    BuffingEquipment.Add(item, false);
                }
            }

            if (IdleEquipment.Count.Equals(0) && machine.Core.CharacterFilter.Name.Equals(machine.BuffingCharacter))
            {
                foreach (Equipment item in machine.Utility.EquipmentSettings.IdleEquipment)
                {
                    IdleEquipment.Add(item, true);
                }
            }

            using (WorldObjectCollection wands = machine.Core.WorldFilter.GetInventory())
            {
                wands.SetFilter(new ByObjectClassFilter(ObjectClass.WandStaffOrb));
                foreach (WorldObject wand in wands)
                {
                    machine.Core.Actions.RequestId(wand.Id);
                }
            }
        }
Esempio n. 2
0
 public void Exit(Machine machine)
 {
     if (machine.NextState == Idle.GetInstance)
     {
         BuffingEquipment.Clear();
         IdleEquipment.Clear();
         RingEquipped     = false;
         BraceletEquipped = false;
     }
 }
Esempio n. 3
0
        public void Process(Machine machine)
        {
            if (machine.Enabled)
            {
                if (machine.SpellsToCast.Count > 0 || !machine.IsBuffed)
                {
                    if (FullyEquipped)
                    {
                        if (!machine.IsBuffed && machine.Core.CharacterFilter.Name.Equals(machine.BuffingCharacter))
                        {
                            machine.NextState = SelfBuffing.GetInstance;
                        }
                        else
                        {
                            machine.NextState = Casting.GetInstance;
                        }
                    }
                    else if (BuffingEquipment.Count.Equals(0) || !machine.CurrentRequest.RequestType.Equals(RequestType.Buff))
                    {
                        using (WorldObjectCollection wands = machine.Core.WorldFilter.GetInventory())
                        {
                            wands.SetFilter(new ByObjectClassFilter(ObjectClass.WandStaffOrb));

                            if (wands.Count.Equals(0))
                            {
                                machine.ChatManager.Broadcast("Oops, my owner didn't give me a wand I can equip. I'm cancelling this request.");
                                machine.SpellsToCast.Clear();
                                machine.NextState = Idle.GetInstance;
                            }

                            foreach (WorldObject wand in wands)
                            {
                                if (wand.Values(LongValueKey.EquippedSlots) > 0)
                                {
                                    FullyEquipped = true;
                                    IdleEquipped  = true;
                                    break;
                                }
                            }

                            if (!FullyEquipped)
                            {
                                foreach (WorldObject wand in wands)
                                {
                                    if (CanWield(machine, wand) && machine.Core.Actions.BusyState.Equals(0))
                                    {
                                        machine.Core.Actions.AutoWield(wand.Id);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else // equip the entire suit
                    {
                        foreach (KeyValuePair <Equipment, bool> item in IdleEquipment)
                        {
                            if (machine.Core.Actions.BusyState.Equals(0))
                            {
                                if (IdleEquipment[item.Key].Equals(true))
                                {
                                    if (!BuffingEquipment.ContainsKey(item.Key))
                                    {
                                        machine.Core.Actions.MoveItem(item.Key.Id, machine.Core.CharacterFilter.Id);
                                    }
                                    else
                                    {
                                        if (item.Key.ObjectClass.Equals(ObjectClass.Clothing.ToString()))
                                        {
                                            BuffingEquipment[item.Key] = true;
                                        }
                                    }
                                    IdleEquipment[item.Key] = false;
                                }
                            }
                        }

                        foreach (KeyValuePair <Equipment, bool> item in BuffingEquipment)
                        {
                            if (machine.Core.Actions.BusyState.Equals(0) && !item.Value)
                            {
                                if ((item.Key.EquipMask & (int)Ring) == (int)Ring)
                                {
                                    if (!RingEquipped)
                                    {
                                        RingEquipped = true;
                                        machine.Core.Actions.AutoWield(item.Key.Id, (int)EquipMask.RightRing, 0, 1, 1, 1);
                                    }
                                    else
                                    {
                                        machine.Core.Actions.AutoWield(item.Key.Id, (int)EquipMask.LeftRing, 0, 1, 1, 1);
                                    }
                                }
                                else if ((item.Key.EquipMask & (int)Bracelet) == (int)Bracelet)
                                {
                                    if (!BraceletEquipped)
                                    {
                                        BraceletEquipped = true;
                                        machine.Core.Actions.AutoWield(item.Key.Id, (int)EquipMask.RightBracelet, 0, 1, 1, 1);
                                    }
                                    else
                                    {
                                        machine.Core.Actions.AutoWield(item.Key.Id, (int)EquipMask.LeftBracelet, 0, 1, 1, 1);
                                    }
                                }
                                else if (item.Key.ObjectClass.Equals(ObjectClass.Clothing.ToString()))
                                {
                                    machine.Core.Actions.UseItem(item.Key.Id, 0);
                                }
                                else
                                {
                                    machine.Core.Actions.AutoWield(item.Key.Id, item.Key.EquipMask, 0, 1, 1, 1);
                                }

                                BuffingEquipment[item.Key] = true;
                            }
                        }

                        FullyEquipped = true;

                        foreach (KeyValuePair <Equipment, bool> item in BuffingEquipment)
                        {
                            if (item.Value == false)
                            {
                                FullyEquipped = false;
                                break;
                            }
                        }

                        if (FullyEquipped)
                        {
                            IdleEquipped = false;
                        }
                    }
                }
                else // done casting/buffing - remove suit
                {
                    if (FullyEquipped)
                    {
                        if (BuffingEquipment.Count > 0 && machine.CurrentRequest.RequestType.Equals(RequestType.Buff))
                        {
                            foreach (KeyValuePair <Equipment, bool> item in BuffingEquipment)
                            {
                                if (machine.Core.Actions.BusyState.Equals(0))
                                {
                                    if (BuffingEquipment[item.Key].Equals(true))
                                    {
                                        if (!IdleEquipment.ContainsKey(item.Key))
                                        {
                                            machine.Core.Actions.MoveItem(item.Key.Id, machine.Core.CharacterFilter.Id);
                                        }
                                        else
                                        {
                                            if (item.Key.ObjectClass.Equals(ObjectClass.Clothing.ToString()))
                                            {
                                                IdleEquipment[item.Key] = true;
                                            }
                                        }
                                        BuffingEquipment[item.Key] = false;
                                    }
                                }
                            }

                            FullyEquipped = false;

                            foreach (KeyValuePair <Equipment, bool> item in BuffingEquipment)
                            {
                                if (item.Value == true)
                                {
                                    FullyEquipped = true;
                                    break;
                                }
                            }
                        }
                        else // no suit equipped - remove the wand
                        {
                            using (WorldObjectCollection wands = machine.Core.WorldFilter.GetInventory())
                            {
                                wands.SetFilter(new ByObjectClassFilter(ObjectClass.WandStaffOrb));
                                foreach (WorldObject wand in wands)
                                {
                                    if (wand.Values(LongValueKey.EquippedSlots) > 0)
                                    {
                                        if (machine.Core.Actions.BusyState.Equals(0))
                                        {
                                            machine.Core.Actions.MoveItem(wand.Id, machine.Core.CharacterFilter.Id);
                                            FullyEquipped = false;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    else if (!IdleEquipped) // suit is unequipped
                    {
                        if (IdleEquipment.Count.Equals(0))
                        {
                            IdleEquipped = true;
                        }
                        else
                        {
                            foreach (KeyValuePair <Equipment, bool> item in IdleEquipment)
                            {
                                if (machine.Core.Actions.BusyState.Equals(0) && !item.Value)
                                {
                                    if (item.Key.ObjectClass.Equals(ObjectClass.Clothing.ToString()))
                                    {
                                        machine.Core.Actions.UseItem(item.Key.Id, 0);
                                    }
                                    else
                                    {
                                        machine.Core.Actions.AutoWield(item.Key.Id, item.Key.EquipMask, 0, 1, 1, 1);
                                    }
                                    IdleEquipment[item.Key] = true;
                                }
                            }

                            IdleEquipped = true;

                            foreach (KeyValuePair <Equipment, bool> item in IdleEquipment)
                            {
                                if (item.Value == false)
                                {
                                    IdleEquipped = false;
                                    break;
                                }
                            }
                        }
                    }
                    else
                    {
                        if (machine.Core.Actions.BusyState.Equals(0))
                        {
                            machine.NextState = Idle.GetInstance;
                        }
                    }
                }
            }
            else
            {
                machine.NextState = Idle.GetInstance;
            }
        }