Script:Loot.cs

Z AmonWiki

Přejít na: navigace, hledání

Jazyk: CSharp

Shard: Dark Paradise

Loot a řezání



Tohle je starý script, nevim jak bude fungovat při stávajících podmínkách. Lidi ho (možná různě upravený) používají, kdyžtak ho tu někdo poupravte. Přidávání odebíraní itemů z něj snad zvládne každý.. Případně pište do diskuze, co vám nefunguje.
Lootí a řeže pouze červené mrtvoly.

loot se spouští "exec loot" a vybere všechny mrtvoly v okolí.
řezání se spouští "exec cutall" a rozřeže všechno v okolí.

Vyžaduje script Script:CorpsesNotoriety.cs ze základního balíku pro DP.

using System;
using System.Collections.Generic;
using Phoenix;
using Phoenix.WorldData;
 
namespace Scripts.DarkParadise
{
    public class Loot
    {
        public const ushort SpidersSilk = 0x0F8D;
        public const ushort Bag = 0x0E76;
        public const ushort Corpse = 0x2006;
 
        public Loot()
        {
            lootTypes = new List<ItemType>();
 
            /*
            AddType(0x0F8D, UOColor.Invariant); // SS
            AddType(0x0EED, UOColor.Invariant); // Gold Coins
            AddType(0x0F7B, UOColor.Invariant); // BM
            AddType(0x0F7A, UOColor.Invariant); // BP
            AddType(0x0F84, UOColor.Invariant); // GA
            AddType(0x0F85, UOColor.Invariant); // GI
            AddType(0x0F86, UOColor.Invariant); // MR
            AddType(0x0F88, UOColor.Invariant); // NS
            AddType(0x0F8C, UOColor.Invariant); // SA
            AddType(0x0F79, UOColor.Invariant); // Blackmoor
            AddType(0x1bd1, UOColor.Invariant); // Peri
            AddType(0x0F78, UOColor.Invariant); // Batwings
            AddType(0x0F87, UOColor.Invariant); // Eyes of Newt
            AddType(0x14EB, UOColor.Invariant); // Treassure Map
             * */
            AddType(0x0E80, UOColor.Invariant); // Poklad
            AddType(0x0F3F, UOColor.Invariant); // Arrow
            AddType(0x1BFB, UOColor.Invariant); // Bolt
            // AddType(0x0E76, UOColor.Invariant); // Pytlik
            AddType(0x097A, UOColor.Invariant); // Alligator Hide
            AddType(0x097B, UOColor.Invariant); // Snake skin
            // AddType(0x097C, UOColor.Invariant); // nevim, treba dalsi trofej
            // AddType(0x097D, UOColor.Invariant); // nevim, treba dalsi trofej
            AddType(0x097E, 0x0037); // a Wolf Pelt
            AddType(0x1bd1, UOColor.Invariant); // Peri
            //AddType(0x1078, UOColor.Invariant); // Kuze
            /*
            AddType(0x0E34, UOColor.Invariant); // Blank Scroll
            AddType(0x0F20, UOColor.Invariant); // Tourmaline
            AddType(0x0F8E, UOColor.Invariant); // Serpent Scales
            AddType(0x0F79, UOColor.Invariant); // Blackmoor
            AddType(0x0F91, UOColor.Invariant); // Wyrms Heart
            AddType(0x0F83, UOColor.Invariant); // Executioner's Cap
            AddType(0x108A, UOColor.Invariant); // Ring
            AddType(0x1086, UOColor.Invariant); // Bracelet
            AddType(0x1088, UOColor.Invariant); // Neclase
            AddType(0x1848, UOColor.Invariant); // Elixir
            AddType(0x0F7E, UOColor.Invariant); // 
            AddType(0x139A, UOColor.Invariant); // Statue
            AddType(0x0F82, UOColor.Invariant); // 
            AddType(0x0F7D, UOColor.Invariant); // 
            AddType(0x0E9C, UOColor.Invariant); // Drums
            AddType(0x0EB2, UOColor.Invariant); // Harp
            AddType(0x0EB2, UOColor.Invariant); // Lute
            AddType(0x14ED, UOColor.Invariant); // Deed 1
            AddType(0x14EE, UOColor.Invariant); // Deed 2
            AddType(0x0F7F, UOColor.Invariant); // 
            AddType(0x0F7C, UOColor.Invariant); // 
            AddType(0x0F79, UOColor.Invariant); // 
            AddType(0x0F89, UOColor.Invariant); // 
            AddType(0x0F81, UOColor.Invariant); // 
            AddType(0x0FF4, UOColor.Invariant); // knihy
            AddType(0x136C, UOColor.Invariant); // HoDF, Myst. Stone
            // AddType(0x1F13, UOColor.Invariant); // skillpointy
            AddType(0x0F8F, UOColor.Invariant); // 
            AddType(0x0F8B, UOColor.Invariant); //
 
            AddType(0x1406, 0x031E); // a Stunning Warmace
            AddType(0x0D16, 0x00A3); // a Mystical Mushroom
            AddType(0x0DBD, 0x0B9F); // a Mystical Leaf
            AddType(0x1A9D, 0x0481); // a Mystical Stick
            AddType(0x0F5A, 0x0044); // a Mystic Crystal
            AddType(0x0E73, 0x0B9F); // a Mystical Ball
            AddType(0x0E26, 0x049D); // a Spirit of the Rain
            AddType(0x0F91, 0x014D); // Heart of Rainbow Dragon
            AddType(0x1420, 0x0152); // Cobwebby string
            AddType(0x097E, 0x0037); // a Wolf Pelt
            AddType(0x0CB0, 0x0899); // a Mystical Plant
            AddType(0x0DC3, 0x005B); // a Mystical Flower
            AddType(0x1F03, 0x0771); // Mage's robe
            AddType(0x1F03, 0x0455); // Death's robe, pozor, bere to i obyc roby
            AddType(0x13B9, 0x0480); // Ice Viking Sword
            AddType(0x09D0, 0x09B4); // God's Apple
            AddType(0x13FC, 0x0237); // Elven Heavy Crossbow
            AddType(0x379F, 0x0055); // Elfi tetiva
            AddType(0x108B, 0x0BB5); // a Mystical Beeds
            AddType(0x0DC3, 0x005B); // a Mystical Flower
             * */
        }
 
        [Executable]
        [BlockMultipleExecutions("loot")]
        public void CutAll()
        {
            UOItem lHand = World.Player.Layers[Layer.LeftHand];
            UOItem rHand = World.Player.Layers[Layer.RightHand];
 
            UOItem cutter = World.Player.Backpack.AllItems.FindType(0x0F51);
 
            if (!cutter.Exist) {
                ScriptErrorException.Throw("Cannot find anything to cut with.");
                return;
            }
 
            foreach (UOItem item in World.Ground) {
                if (item.Graphic == Corpse) {
                    Notoriety notoriety = CorpsesNotoriety.Get(item, 5000);
 
                    switch (notoriety) {
                        case Notoriety.Unknown:
                            UO.PrintWarning("Unknown notoriety of {0}. Corpse skipped.", item);
                            break;
 
                        case Notoriety.Criminal:
                        case Notoriety.Murderer:
                        case Notoriety.Neutral:
                            item.WaitTarget();
                            cutter.Use();
                            UO.Wait(1000); // TODO
                            break;
 
                        default:
                            break;
                    }
                }
            }
 
            lHand.Equip();
            rHand.Equip();
        }
 
        private struct ItemType
        {
            public ItemType(Graphic graphic, UOColor color)
            {
                Graphic = graphic;
                Color = color;
            }
 
            public Graphic Graphic;
            public UOColor Color;
        }
 
        private List<ItemType> lootTypes;
 
        public void AddType(Graphic graphic, UOColor color)
        {
            lootTypes.Add(new ItemType(graphic, color));
        }
 
        [Executable("loot")]
        [BlockMultipleExecutions("loot")]
        public void Run()
        {
            if (!Aliases.RecevingContainer.IsValid) {
                ScriptErrorException.Throw("RecevingContainer not set.");
            }
 
            ScriptErrorException.ExceptionEnabled = false;
            World.FindDistance = 6;
 
            UO.PrintInformation("Loot started");
 
            UIManager.Reset();
            LootCollection(World.Ground, true);
 
            UO.PrintInformation("Loot finished");
        }
 
        private bool CheckCorpse(UOItem item)
        {
            //                                         male    female  imp     garga
            //ushort[] forbiddenCorpses = new ushort[] { 0x0190, 0x0191, 0x0027, 0x0004 };
            // return Array.IndexOf<ushort>(forbiddenCorpses, item.Amount) < 0;
 
            Notoriety n = CorpsesNotoriety.Get(item, 2000);
            return n != Notoriety.Innocent && n != Notoriety.Guild && n != Notoriety.Unknown;
        }
 
        private void LootCollection(ItemsCollection collection, bool ignoreSingleSS)
        {
            foreach (UOItem item in collection) {
                /*
                if (item.Graphic == Bag) {
                    using (ItemOpenedEventWaiter ew = new ItemOpenedEventWaiter(item)) {
                        if (!item.Opened) {
                            item.Use();
                            if (ew.Wait(2000))
                                UO.Wait(500);
                        }
                    }
 
                    UO.EmptyContainer(1000, item);
                }
                else */
                if (item.Graphic == Corpse) {
                    if (CheckCorpse(item)) {
                        if (!item.Opened) {
                            item.Use();
                            UO.Wait(1000);
                        }
 
                        LootCollection(item.Items, false);
                    }
                }
                else if (ignoreSingleSS && item.Graphic == SpidersSilk && item.Color == 0 && item.Amount < 2) {
                    continue;
                }
                else if (lootTypes.Contains(new ItemType(item.Graphic, item.Color))) {
                    // bool ground = item.Container == 0;
                    int pause = 450;
 
                    using (ItemUpdateEventWaiter ew = new ItemUpdateEventWaiter(item)) {
                        // Journal.Clear();
                        if (item.Grab() && ew.Wait(3000)) {
                            UO.Wait(pause);
                            /*
                            if (!ground) {
                                Journal.WaitForText(true, 2000, "akce skoncila");
                            }
                            */
                        }
                    }
 
                    UO.Wait(50);
                }
            }
        }
    }
}
Osobní nástroje