public override void OnDeath( Container c ) { if (Utility.Random(200) < 1) { UncutCloth cloth = new UncutCloth(); cloth.Hue = 1156; c.DropItem(cloth); } base.OnDeath( c ); }
public Item MakeCloth( int hue1, int hue2, int hue3, int hue4 ) { int hue; switch ( Utility.Random( 4 ) ) { default: case 0: hue = hue1+0; break; case 1: hue = hue2+0; break; case 2: hue = hue3+0; break; case 3: hue = hue4+0; break; } UncutCloth v = new UncutCloth( 1 ); v.Hue = hue; return v; }
private static Item CreateCloth( int type ) { if ( type >= 0 && type < m_ClothHues.Length ) { UncutCloth cloth = new UncutCloth( 100 ); cloth.Hue = m_ClothHues[type][Utility.Random( m_ClothHues[type].Length )]; return cloth; } throw new InvalidOperationException(); }
public bool ReceivePrize(Mobile from, int seed) { Item i = null; string text = ""; /* Rewards * Sandals ~ Hued [2651, 2662] :::: 0.5% * Spellbook ~ Hued [2651, 2662] :::: 0.5% * UncutCloth ~ Hued [2651, 2662] :::: 1% * Stuffed Easter Bunny Statue Hued [1150] :::: 1.5% * Dragon Coin ~ Amount [10-25] :::: 3% * Magic Weapon (Might + random others) 5% * RabbitBomb ~ 5% * Random Skill Manual ~ 5% * Another Easter Egg 10% * * Explosion ~ (5-15 damage) :::: 25.5% * Gold ~ Amount [50-199] :::: 43% * */ if (seed <= 25) { text = "You receive Easter Sandals!"; i = new Sandals(); i.Hue = Utility.RandomList(2651, 2662); i.Name = "Easter Sandals"; } else if (seed <= 75) { text = "You receive an Easter Spellbook!"; i = new Spellbook(); i.Hue = Utility.RandomList(2651, 2662); i.Name = "Easter Spellbook"; } else if (seed <= 125) { text = "You receive some Easter Cloth!"; i = new UncutCloth(); i.Hue = Utility.RandomList(2651, 2662); i.Amount = 8; } else if (seed <= 225) { text = "You receive a stuffed Easter Bunny!"; i = new StuffedEasterBunny(); } else if (seed <= 600) { text = "You receive some Dragon Coins!"; i = new DragonCoin(); i.Amount = Utility.Random(25, 50); } else if (seed <= 850) { } else if (seed <= 3150) { text = "You receive more easter eggs!"; i = new EasterEgg(); } else if (seed <= 5750) { Point3D loc = this.GetWorldLocation(); Map facet = this.Map; text = "You receive remorse!"; if (from.CanBeDamaged()) { Effects.SendLocationEffect(loc, facet, 0x36BD, 15, 10); Effects.PlaySound(from.Location, from.Map, 0x246); from.PublicOverheadMessage(MessageType.Regular, 0, false, "*Looks remorseful*"); AOS.Damage(from, Utility.Random(10, 20), 0, 100, 0, 0, 0); Blood blood = new Blood(); blood.MoveToWorld(from.Location, from.Map); } } else if (seed <= 6000) { text = "You receive a large amount of gold."; i = new Gold(); i.Amount = Utility.RandomMinMax(750, 1250); from.SendSound(0x2e6); } else if (seed <= 6500) { text = "You receive a moderate amount of gold."; i = new Gold(); i.Amount = Utility.RandomMinMax(400, 600); from.SendSound(0x2e5); } else { text = "You receive a small amount of gold."; i = new Gold(); i.Amount = Utility.RandomMinMax(200, 300); from.SendSound(0x2e4); } if (text.Length > 0) { from.SendMessage(text); } if (i != null) { if (!from.AddToBackpack(i)) { i.Delete(); from.SendMessage("You don't have enough room in your backpack. Please make room and try again."); return(false); } } return(true); }
private void GiveMagicItems() { ArrayList toGive = new ArrayList(); LogHelper Logger = new LogHelper("HarrowerLoot.log", false); ArrayList allNonExpiredPMDamageEntries = new ArrayList(); //New Looting method (Pix: 4/8/06) for (int i = 0; i < DamageEntries.Count; i++) { DamageEntry de = DamageEntries[i] as DamageEntry; if (de != null) { Logger.Log(LogType.Text, string.Format("DE[{0}]: {1} ({2})", i, de.Damager, de.Damager != null ? de.Damager.Name : "")); if (de.HasExpired) { Logger.Log(LogType.Text, string.Format("DE[{0}]: Expired", i)); } else { if (de.Damager != null && !de.Damager.Deleted) { if (de.Damager is BaseCreature) { Logger.Log(LogType.Text, string.Format("DE[{0}]: BaseCreature", i)); BaseCreature bc = (BaseCreature)de.Damager; if (bc.ControlMaster != null && !bc.ControlMaster.Deleted) { //de.Damager = bc.ControlMaster; DamageEntry cmde = new DamageEntry(bc.ControlMaster); cmde.DamageGiven = de.DamageGiven; de = cmde; Logger.Log(LogType.Text, string.Format("DE[{0}]: New Damager: {1}", i, de.Damager.Name)); } } if (de.Damager is PlayerMobile) { Logger.Log(LogType.Text, string.Format("DE[{0}]: PlayerMobile", i)); if (de.Damager.Alive) { Logger.Log(LogType.Text, string.Format("DE[{0}]: PM Alive", i)); bool bFound = false; for (int j = 0; j < allNonExpiredPMDamageEntries.Count; j++) { DamageEntry de2 = (DamageEntry)allNonExpiredPMDamageEntries[j]; if (de2.Damager == de.Damager) { Logger.Log(LogType.Text, string.Format("DE[{0}]: PM Found, adding damage", i)); de2.DamageGiven += de.DamageGiven; bFound = true; break; } } if (!bFound) { Logger.Log(LogType.Text, string.Format("DE[{0}]: PM not found, adding", i)); allNonExpiredPMDamageEntries.Add(de); } } } } } } } //Remove any PMs that are over 100 tiles away ArrayList toRemove = new ArrayList(); for (int i = 0; i < allNonExpiredPMDamageEntries.Count; i++) { DamageEntry de = (DamageEntry)allNonExpiredPMDamageEntries[i]; if (de.Damager.GetDistanceToSqrt(this.Location) > 100) { Logger.Log(LogType.Text, string.Format("Removing {0} for being too far away at death", de.Damager.Name)); toRemove.Add(allNonExpiredPMDamageEntries[i]); } } for (int i = 0; i < toRemove.Count; i++) { allNonExpiredPMDamageEntries.Remove(toRemove[i]); } int topDamage = 0; int minDamage = 0; for (int i = 0; i < allNonExpiredPMDamageEntries.Count; i++) { DamageEntry de = (DamageEntry)allNonExpiredPMDamageEntries[i]; if (de.DamageGiven > topDamage) topDamage = de.DamageGiven; Logger.Log(LogType.Text, string.Format("Non-Expired[{0}]: {1} (damage: {2})", i, de.Damager.Name, de.DamageGiven)); } //Now filter on 'enough' damage if (HitsMax >= 3000) minDamage = topDamage / 16; else if (HitsMax >= 1000) minDamage = topDamage / 8; else if (HitsMax >= 200) minDamage = topDamage / 4; else minDamage = topDamage / 2; Logger.Log(LogType.Text, string.Format("HitsMax: {0}, TopDamage: {1}, MinDamage: {2}", HitsMax, topDamage, minDamage)); for (int i = 0; i < allNonExpiredPMDamageEntries.Count; i++) { DamageEntry de = (DamageEntry)allNonExpiredPMDamageEntries[i]; if (de.DamageGiven >= minDamage) { toGive.Add(de.Damager); } } if (toGive.Count == 0) return; // Randomize for (int i = 0; i < toGive.Count; ++i) { int rand = Utility.Random(toGive.Count); object hold = toGive[i]; toGive[i] = toGive[rand]; toGive[rand] = hold; } Logger.Log(LogType.Text, ""); // new line Logger.Log(LogType.Text, "Randomized list of players:"); for (int i = 0; i < toGive.Count; ++i) { Mobile mob = toGive[i] as Mobile; Logger.Log(LogType.Mobile, mob, "alive:" + mob.Alive.ToString()); } Logger.Log(LogType.Text, ""); // new line Logger.Log(LogType.Text, "Begin loot distribution: Who/What:"); // Loop goes until we've generated MaxGifts items. for (int i = 0; i < MaxGifts; ++i) { Item reward = null; Mobile m = (Mobile)toGive[i % toGive.Count]; switch (Utility.Random(10)) { case 0: // Power/Vanq Weapon case 1: case 2: // 3 in 10 chance { // 33% chance at best reward = CreateWeapon((0.32 >= Utility.RandomDouble()) ? 5 : 4); break; } case 3: // Fort/Invul Armor case 4: case 5: // 3 in 10 chance { // 33% chance at best reward = CreateArmor((0.32 >= Utility.RandomDouble()) ? 5 : 4); break; } case 6: // hair/beard dye { // 1 in 10 chance if (Utility.RandomBool()) reward = new SpecialHairDye(); else reward = new SpecialBeardDye(); break; } case 7: // special cloth { // 1 in 10 chance reward = new UncutCloth(50); if (Utility.RandomBool()) // best ore hues (vet rewards) + really dark 'evil cloth' reward.Hue = Utility.RandomList(2213, 2219, 2207, 2425, 1109); else reward.Hue = 0x01; // black cloth break; } case 8: // potted plant { // 1 in 10 chance switch (Utility.Random(11)) { default: // should never happen case 0: reward = new PottedCactus(); break; case 1: reward = new PottedCactus1(); break; case 2: reward = new PottedCactus2(); break; case 3: reward = new PottedCactus3(); break; case 4: reward = new PottedCactus4(); break; case 5: reward = new PottedCactus5(); break; case 6: reward = new PottedPlant(); break; case 7: reward = new PottedPlant1(); break; case 8: reward = new PottedPlant2(); break; case 9: reward = new PottedTree(); break; case 10: reward = new PottedTree1(); break; } break; } default: // Should never happen /* fall through*/ case 9: // Magic Item Drop { // 1 in 10 chance reward = Loot.RandomClothingOrJewelry(); if (reward != null) { int minLevel = 3; int maxLevel = 3; if (reward is BaseClothing) ((BaseClothing)reward).SetRandomMagicEffect(minLevel, maxLevel); else if (reward is BaseJewel) ((BaseJewel)reward).SetRandomMagicEffect(minLevel, maxLevel); } break; } } if (reward != null) { // Drop the new weapon into their backpack and send them a message. m.SendMessage("You have received a special item!"); m.AddToBackpack(reward); Logger.Log(LogType.Mobile, m, "alive:" + m.Alive.ToString()); Logger.Log(LogType.Item, reward, string.Format("Hue:{0}:Rare:{1}", reward.Hue, (reward is BaseWeapon || reward is BaseArmor || reward is BaseClothing || reward is BaseJewel) ? "False" : "True")); } } // done logging Logger.Finish(); }
private static Item CreateCloth(int type) { if (type < 0 || type >= m_ClothHues.Length) { throw new InvalidOperationException(); } var cloth = new UncutCloth(5) { Hue = m_ClothHues[type][Utility.Random(m_ClothHues[type].Length)] }; return cloth; }
private static Item CreateCloth( int type ) { if ( type >= 0 && type < m_ClothHues.Length ) { UncutCloth cloth = new UncutCloth( 100 ); // Scriptiz : les pigments seront trouvés via un autre système //cloth.Hue = m_ClothHues[type][Utility.Random( m_ClothHues[type].Length )]; return cloth; } throw new InvalidOperationException(); }