Esempio n. 1
0
        public bool UseMount()
        {
            var currChars = World.Characters.Where(ch => ch.Serial != World.Player.Serial && ch.Distance <= 6).ToArray();
            var newChars  = World.Characters.Where(ch => ch.Serial != World.Player.Serial && ch.Distance <= 6).ToArray();
            var diff      = newChars.Where(ch => currChars.Count(cch => cch.Serial == ch.Serial) == 0).ToArray();

            UOItem currentMount  = World.Player.Layers[Layer.Mount];
            Serial originalMount = _Mount;

            bool dismount = currentMount.ExistCust();

            _Mount = Serial.Invalid;

            if (dismount)
            {
                UOColor currentColor = currentMount.Color;
                World.Player.Use();
                Game.Wait(100);

                newChars = World.Characters.Where(ch => ch.Serial != World.Player.Serial && ch.Distance <= 6).ToArray();
                diff     = newChars.Where(ch => currChars.Count(cch => cch.Serial == ch.Serial) == 0).ToArray();
                diff     = diff.OrderBy(ch => ch.Distance).ThenBy(ch => (ch.Color == currentColor ? 0 : 1)).ToArray();

                if (diff.Count() > 0)
                {
                    _Mount = diff.ToArray()[0].Serial;
                }
            }
            else
            {
                UOCharacter curr = new UOCharacter(originalMount);

                if (!curr.ExistCust())
                {
                    UOItem shrink = new UOItem(Serial.Invalid);
                    foreach (UOItem itm in World.Player.Backpack.AllItems)
                    {
                        if (ItemLibrary.ShrinkMountTypes.Count(uot => uot.Graphic == itm.Graphic) > 0)
                        {
                            shrink = itm;
                            break;
                        }
                    }

                    List <UOCharacter> m = new List <UOCharacter>();

                    if (HasHumanBody)//nemam haluze
                    {
                        m.AddRange(currChars.
                                   Where(ch => !denyMounts.Contains(ch.GetUniqueKey()) && !skipMounts.Contains(ch.GetUniqueKey()) && ItemLibrary.MountTypes.Count(mt => mt.Graphic == ch.Model) > 0).
                                   OrderBy(ch => (ch.Renamable ? 0 : 1)).
                                   ThenBy(ch => ch.Distance).ToArray());
                    }
                    else
                    {
                        m.AddRange(currChars.
                                   Where(ch => !denyMounts.Contains(ch.GetUniqueKey()) && !skipMounts.Contains(ch.GetUniqueKey())).
                                   OrderBy(ch => (ch.Renamable ? 0 : 1)).
                                   ThenBy(ch => ItemLibrary.MountTypes.Count(mt => mt.Graphic == ch.Model) > 0 ? 0 : 1).
                                   ThenBy(ch => ch.Distance).ToArray());
                    }

                    if (m.Count > 0)
                    {
                        _Mount = m[0].Serial;
                    }
                    else
                    {
                        if (shrink.Exist)
                        {
                            Game.CurrentGame.CurrentPlayer.SwitchWarmode();
                            shrink.Use();
                            Game.Wait(150);

                            newChars = World.Characters.Where(ch => ch.Serial != World.Player.Serial && ch.Distance <= 6).ToArray();
                            diff     = newChars.Where(ch => currChars.Count(cch => cch.Serial == ch.Serial) == 0).ToArray();
                            diff     = diff.OrderBy(ch => ch.Distance).ToArray();

                            if (diff.Count() > 0)
                            {
                                _Mount = diff.ToArray()[0].Serial;
                            }
                        }
                        skipMounts.Clear();
                    }
                }
                else
                {
                    _Mount = originalMount;
                }

                curr = new UOCharacter(_Mount);
                Journal.Clear();

                if (curr.ExistCust())
                {
                    curr.Use();

                    if (Journal.WaitForText(true, 150, "You dont own that horse"))
                    {
                        curr.PrintMessage("[ deny add ]");
                        denyMounts.Add(curr.GetUniqueKey());
                        _Mount = Serial.Invalid;
                    }
                    else if (!World.Player.Layers[Layer.Mount].ExistCust())
                    {
                        if (curr.Serial == originalMount && new UOCharacter(originalMount).Exist)
                        {
                            curr.PrintMessage("[ mount ]");
                        }
                        else
                        {
                            curr.PrintMessage("[ skip add ]");
                            skipMounts.Add(curr.GetUniqueKey());
                            _Mount = Serial.Invalid;
                        }
                    }
                }
                else
                {
                    World.Player.PrintMessage("[ neni mount ]");
                }
            }

            return(_Mount.IsValidCust());
        }