///////////////////////////////////////////////////////////////////////// // // www.ultima.smoce.net // Name: Ada Kladivo // ///////////////////////////////////////////////////////////////////////// using System; using System.Collections.Generic; using System.Text; using Phoenix; using Phoenix.WorldData; using Phoenix.Communication; namespace Scripts.DarkParadise { public class AdaKladivko { UOItem adaKladivko; private const ushort kladivkoGraphic = 0x1438; private const ushort kladivkoColor = 0x044C; private const ushort ingotGraphic = 0x1BEF; private const ushort bloodIngotColor = 0x04C2; private const ushort blackIngotColor = 0x0455; private const ushort mythIngotColor = 0x052D; [Executable("adamantium")] public void Premena(string ingot) { switch (ingot) { case "blood": PremenaDustu(bloodIngotColor, ingot); break; case "black": PremenaDustu(blackIngotColor, ingot); break; case "myth": PremenaDustu(mythIngotColor, ingot); break; default: UO.PrintWarning("Zadal si uplne naprd parameter"); break; } } private void PremenaDustu(ushort ingotColor, string ingotName) { //kontrola ci vobec mam pri sebe kladivko. najprv v batohu a potom v ruke adaKladivko = World.Player.Backpack.AllItems.FindType(kladivkoGraphic, kladivkoColor); if (!adaKladivko.Exist) { adaKladivko = World.Player.Layers[Layer.LeftHand]; //pri obojruckach sa bere v uvahu lava ruka, pri jednoruckach je v pravej zbran a v lavej stit if (adaKladivko.Graphic != kladivkoGraphic || adaKladivko.Color != kladivkoColor) { UO.PrintWarning("Kde doprdele si nechal Adamantiove kladivo?"); return; } } vyhod: //kontrola ci vobec mam u seba potrebne ingoty UOItem ingoty = World.Player.Backpack.AllItems.FindType(ingotGraphic, ingotColor); if (!ingoty.Exist) { UO.PrintWarning("Bez ingotov to nepojde, nie som Copperfield!"); return; } //hodim ingot pod seba a pouzijem na to kladivko UO.MoveItem(ingoty, 1, World.Player.X, World.Player.Y, World.Player.Z); UO.Wait(500); UOItem ingotNaZemi = FindIngot(ingotGraphic, ingotColor); if (!ingotNaZemi.Exist) { UO.PrintWarning("Ingot sa mi zahadne stratil, skusim vyhodit dalsi"); goto vyhod; } UO.DeleteJournal(); UO.WaitTargetObject(ingotNaZemi.Serial); adaKladivko.Use(); UO.Wait(100); UO.PrintInformation("{0} ingot premeneny!", ingotName.ToUpper()); } private static UOItem FindIngot(ushort graphic, ushort color) { UOItem output = new UOItem(Serial.Invalid); foreach (UOItem ch in World.Ground) if (ch.Graphic == graphic & ch.Color == color) if (ch.Distance < 4 && ch.Distance < output.Distance) output = ch; return output; } } public class LootDust { private const ushort dustGraphic = 0x103D; private const ushort bloodDustColor = 0x0280; private const ushort blackDustColor = 0x0455; private const ushort mythDustColor = 0x052D; private const ushort lootPytlikGraphic = 0x0E76; private const ushort lootPytlikColor = 0x049A; public const ushort bag = 0x0E76; public const ushort corpse = 0x2006; [Executable("dust")] public void Loot(string dust) { switch (dust) { case "blood": LootDustem(bloodDustColor, dust); break; case "black": LootDustem(blackDustColor, dust); break; case "myth": LootDustem(mythDustColor, dust); break; default: UO.PrintWarning("Zadal si uplne naprd parameter"); break; } } private void LootDustem(ushort dustColor, string dustName) { //kontrola ci vobec mam pri sebe premeneny dust, ktory chcem pouzit UOItem dust = World.Player.Backpack.AllItems.FindType(dustGraphic, dustColor); if (!dust.Exist) { UO.PrintWarning("Na mamon potrebujes dust predsa!!"); return; } /* * Najdem otvorenu mrtvolu na pouzitie * POZOR!! ak je otvorenych viac tiel bere v uvahu vzdy to posledne, ktore najde */ UOItem openedCorpse = FindOpenedCorpse(); if (openedCorpse.Serial == Serial.Invalid) { UO.PrintWarning("Ziadna otvorena mrtvolka v dosahu nie je!"); return; } //vyhladam si loot pytlik a pouzijem na neho dust UOItem lootPytlik = new UOItem(Serial.Invalid); foreach (UOItem item in openedCorpse.Items) { if (item.Graphic == lootPytlikGraphic && item.Color == lootPytlikColor) { lootPytlik = item; //return; } } if (lootPytlik.Serial != Serial.Invalid) { UO.DeleteJournal(); UO.WaitTargetObject(lootPytlik.Serial); dust.Use(); UO.Wait(100); UO.PrintInformation("{0} dust bol pouzity na pytlik {1}!", dustName.ToUpper(), lootPytlik.Serial); } //nakoniec pytlicek lootnem LootniPytlik(lootPytlik); } private static void LootniPytlik(UOItem pytlik) { bool ground = pytlik.Container == 0; int pause = ground ? 250 : 2000; using (ItemUpdateEventWaiter ew = new ItemUpdateEventWaiter(pytlik)) { Journal.Clear(); if (pytlik.Grab() && ew.Wait(3000)) { UO.Wait(pause); if (!ground) { Journal.WaitForText(true, 2000, "akce skoncila"); } } } UO.Wait(50); } private static UOItem FindOpenedCorpse() { UOItem output = new UOItem(Serial.Invalid); foreach (UOItem ch in World.Ground) if (ch.Graphic == corpse & ch.Opened) { Notoriety notoriety = CorpsesNotoriety.Get(ch, 5000); switch (notoriety) { case Notoriety.Unknown: UO.PrintWarning("Unknown notoriety of {0}. Corpse skipped.", ch); break; case Notoriety.Neutral: if (ch.Distance < 4 && ch.Distance < output.Distance) output = ch; break; default: break; } } return output; } } }