Treasure chest loot

Moderators: Benn, Calix, senji

Post Reply
Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Treasure chest loot

Post by Calix »

Anyone reckon they can work this out?

Want to make Dungeon Chest weapon/armour drops of higher quality than anything that can be gained from monsters, ie higher chance of more & better mods

This is the loot text in treasurechestmod.cs for a level 4 chest:

Code: Select all

// ---------- [Level 4] ----------
// Wooden, Metal and Metal Golden Chest
	[FlipableAttribute( 0xe41, 0xe40 )] 
	public class TreasureLevel4 : BaseTreasureChestMod 
	{ 
		[Constructable] 
		public TreasureLevel4() : base( Utility.RandomList( 0xe40, 0xe42, 0x9ab ) )
		{ 
			RequiredSkill = 92;
			LockLevel = this.RequiredSkill - Utility.Random( 1, 10 );
			MaxLockLevel = this.RequiredSkill;
			TrapType = TrapType.MagicTrap;
			TrapPower = 4 * Utility.Random( 1, 25 );

			DropItem( new Gold( 200, 400 ) );
			DropItem( new BlankScroll( Utility.Random( 1, 4 ) ) );
			
			for( int i = Utility.Random( 1, 4 ); i > 1; i-- )
			{
				Item ReagentLoot = Loot.RandomReagent();
				ReagentLoot.Amount = Utility.Random( 6, 12 );
				DropItem( ReagentLoot );
			}
	
			for ( int i = Utility.Random( 1, 4 ); i > 1; i-- )
				DropItem( Loot.RandomPotion() );
			
			if ( 0.75 > Utility.RandomDouble() ) //75% chance = 3/4
				for (int i = Utility.RandomMinMax(8,16); i > 0; i--)
					DropItem(Loot.RandomScroll(0, 47, SpellbookType.Regular));

			if ( 0.75 > Utility.RandomDouble() ) //75% chance = 3/4
				for (int i = Utility.RandomMinMax(6,12) + 1; i > 0; i--)
					DropItem( Loot.RandomGem() );

			for( int i = Utility.Random( 1, 4 ); i > 1; i-- )
				DropItem( Loot.RandomWand() );

			// Magical ArmorOrWeapon
			for( int i = Utility.Random( 1, 4 ); i > 1; i-- )
			{
				Item item = Loot.RandomArmorOrShieldOrWeapon();

				if( item is BaseWeapon )
				{
					BaseWeapon weapon = (BaseWeapon)item;
					weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 4 );
					weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( 4 );
					weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( 4 );
					weapon.Quality = WeaponQuality.Regular;
				}
				else if( item is BaseArmor )
				{
					BaseArmor armor = (BaseArmor)item;
					armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( 4 );
					armor.Durability = (ArmorDurabilityLevel)Utility.Random( 4 );
					armor.Quality = ArmorQuality.Regular;
				}

				DropItem( item );
			}
I'm assuming there's something in lootpack.cs, baseweapon.cs basearmor.cs or basetreasurechest.cs that can affect it, but haven't worked it out yet.

Belgarion
FISSURE OF WOE
Posts: 325
Joined: Fri Sep 30, 2005 7:54 am

Re: Treasure chest loot

Post by Belgarion »

Yeah, i like the idea. Just dont overdo it so t-chests end up being where its ALL at. (You probably thought about that alreadyz)


While on the subject of item properties and suchlike, what is the score with crafting kits and suchlike?
I remember on retail it was a bit of a bugger to spend effort/cash on a barbed kit and have it churn out pieces that might aswell have come off a spined kit.
Are you changing this, or will the barbed kits and suchlike be plentiful enough to make it not be a big deal?
Image
I-Cers about my joining I-C:
Clx: "risk", "what? dont", "I`ll object"
Future: "fucked up"
Villa: "dirty and unclean"
senj: "guildhopper"

Superfast Oz
Cardinal Chunder
Posts: 1031
Joined: Fri Nov 19, 2004 11:23 pm
Contact:

Re: Treasure chest loot

Post by Superfast Oz »

weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 4 );

These lines for armor level and weapon damage use the random function which is returning 1-4. If you look up at the regs section where it uses Utility.Random (6,12), I'm guessing that means random between 6-12. Using that then you could make say:

weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 3, 4 );

Like I said I'm guessing, but I think this would rule out the damage levels 1/2. Don't know the code so it might even use level 1 as the best. Alternatively you could remove the formula and just hard set the levels to whatever standard you want.

Ingo
Author of "Stripper Assassin"
Posts: 767
Joined: Wed Jan 07, 2004 10:40 pm

Re: Treasure chest loot

Post by Ingo »

What Oz said.

Didn't AOS weps have more properties than that or was that only after enhancing?
No to Scottish existence.

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Treasure chest loot

Post by Calix »

Damage levels though? wtf is that.

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Treasure chest loot

Post by Calix »

If anyone wants to have a crack at making dye tubs work on blessed items, reward robes especially, please do.

Also, stealableartifactspawner.cs - If anyone wants to get these spawning in Felucca, go for it. I've amended the co-ords etc and it compiles with no errors, but I've not seen them actually spawn where I want them to yet..

Superfast Oz
Cardinal Chunder
Posts: 1031
Joined: Fri Nov 19, 2004 11:23 pm
Contact:

Re: Treasure chest loot

Post by Superfast Oz »

Ok so robes use a base class of outer torso it seems, which contains an override for the dye function, effectively blocking it. So in OuterTorso.cs, in the section for RewardRobe:

Code: Select all

//public override bool Dye( Mobile from, DyeTub sender )
		//{
		//	from.SendLocalizedMessage( sender.FailMessage );
		//	return false;
		//}
Comment it out.

Mercury
[Trial, I-C]
Posts: 1063
Joined: Sat Nov 13, 2004 3:34 pm

Re: Treasure chest loot

Post by Mercury »

btw 10k and 600 regs, seems overkill...i know we both acroed like bitchs on ipy, and lv4s were shit. but if you also remember, you could do the route with the 4s about once an hour, thats like 50k an hour?? (hard cash plus regs)

id say something like.

Lv 1 - 100
Lv 2 - 250
Lv 3 - 1k + 50-100
Lv 4 - 2.5k + 100-200 reg
Ancient 10k + 1/50 arti chance

plus junk, like gems etc.

(otherwise id never do anything other than pick, as PVM seems pointless if you can farm that much gold and 1/4 on artis (even on a 1 per day spawner)

Mercury
[Trial, I-C]
Posts: 1063
Joined: Sat Nov 13, 2004 3:34 pm

Re: Treasure chest loot

Post by Mercury »

Treasure Maps & Dungeon Treasure chests have improved loot and a chance of dropping rares that are unobtainable elsewhere. Invisibility and Teleport jewelry. - Dungeon Chests are done - ideas for Tmap stuff?
kkkkkkkk i did millions of tmaps on osi. i really enjoyed it.

i reccommend having in level 5s something you cannot obtain from other sources, like you said. Id like to see something like "tattered map fragments" that when you get like 5(?) you place together and do a level 6 tmap. In a L6 tmap is based on same map coords etc, and what spawns is 1 per spawn (like at level 5 you could get upto 3 mobs at a time, limit this too 1 doom mob) and spawns maybe 5 of these.

In the chest is a guarenteed arti? And maybe a Special hued tmap item such as a shovel? (tagged "treachous map dug up by xxx")

Just brainstorming ways to make pvm interesting. (on that note did noxin scale down doom mobs to make them soloable in shame? i cant remember!)

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Treasure chest loot

Post by Calix »

Right then - tmap chest loot - if anyone wants to look at how to add other items in, feel free. I've not looked at this yet, doing world spawns etc atm:

Code: Select all

using System;
using System.Collections.Generic;
using Server;
using Server.ContextMenus;
using Server.Engines.PartySystem;
using Server.Gumps;
using Server.Multis;
using Server.Network;

namespace Server.Items
{
	public class TreasureMapChest : LockableContainer
	{
		public override int LabelNumber{ get{ return 3000541; } }

		public static Type[] Artifacts { get { return m_Artifacts; } }

		private static Type[] m_Artifacts = new Type[]
		{
			typeof( CandelabraOfSouls ), typeof( GoldBricks ), typeof( PhillipsWoodenSteed ),
			typeof( ArcticDeathDealer ), typeof( BlazeOfDeath ), typeof( BurglarsBandana ),
			typeof( CavortingClub ), typeof( DreadPirateHat ),
			typeof( EnchantedTitanLegBone ), typeof( GwennosHarp ), typeof( IolosLute ),
			typeof( LunaLance ), typeof( NightsKiss ), typeof( NoxRangersHeavyCrossbow ),
			typeof( PolarBearMask ), typeof( VioletCourage ), typeof( HeartOfTheLion ),
			typeof( ColdBlood ), typeof( AlchemistsBauble )
		};

		private int m_Level;
		private DateTime m_DeleteTime;
		private Timer m_Timer;
		private Mobile m_Owner;
		private bool m_Temporary;

		private List<Mobile> m_Guardians;

		[CommandProperty( AccessLevel.GameMaster )]
		public int Level{ get{ return m_Level; } set{ m_Level = value; } }

		[CommandProperty( AccessLevel.GameMaster )]
		public Mobile Owner{ get{ return m_Owner; } set{ m_Owner = value; } }

		[CommandProperty( AccessLevel.GameMaster )]
		public DateTime DeleteTime{ get{ return m_DeleteTime; } }

		[CommandProperty( AccessLevel.GameMaster )]
		public bool Temporary{ get{ return m_Temporary; } set{ m_Temporary = value; } }

		public List<Mobile> Guardians { get { return m_Guardians; } }

		[Constructable]
		public TreasureMapChest( int level ) : this( null, level, false )
		{
		}

		public TreasureMapChest( Mobile owner, int level, bool temporary ) : base( 0xE40 )
		{
			m_Owner = owner;
			m_Level = level;
			m_DeleteTime = DateTime.Now + TimeSpan.FromHours( 3.0 );

			m_Temporary = temporary;
			m_Guardians = new List<Mobile>();

			m_Timer = new DeleteTimer( this, m_DeleteTime );
			m_Timer.Start();

			Fill( this, level );
		}

		private static void GetRandomAOSStats( out int attributeCount, out int min, out int max )
		{
			int rnd = Utility.Random( 15 );

			if ( rnd < 1 )
			{
				attributeCount = Utility.RandomMinMax( 2, 6 );
				min = 20; max = 70;
			}
			else if ( rnd < 3 )
			{
				attributeCount = Utility.RandomMinMax( 2, 4 );
				min = 20; max = 50;
			}
			else if ( rnd < 6 )
			{
				attributeCount = Utility.RandomMinMax( 2, 3 );
				min = 20; max = 40;
			}
			else if ( rnd < 10 )
			{
				attributeCount = Utility.RandomMinMax( 1, 2 );
				min = 10; max = 30;
			}
			else
			{
				attributeCount = 1;
				min = 10; max = 20;
			}
		}

		public static void Fill( LockableContainer cont, int level )
		{
			cont.Movable = false;
			cont.Locked = true;

			if ( level == 0 )
			{
				cont.LockLevel = 0; // Can't be unlocked

				cont.DropItem( new Gold( Utility.RandomMinMax( 50, 100 ) ) );

				if ( Utility.RandomDouble() < 0.75 )
					cont.DropItem( new TreasureMap( 0, Map.Trammel ) );
			}
			else
			{
				cont.TrapType = TrapType.ExplosionTrap;
				cont.TrapPower = level * 25;
				cont.TrapLevel = level;

				switch ( level )
				{
					case 1: cont.RequiredSkill = 36; break;
					case 2: cont.RequiredSkill = 76; break;
					case 3: cont.RequiredSkill = 84; break;
					case 4: cont.RequiredSkill = 92; break;
					case 5: cont.RequiredSkill = 100; break;
					case 6: cont.RequiredSkill = 100; break;
				}

				cont.LockLevel = cont.RequiredSkill - 10;
				cont.MaxLockLevel = cont.RequiredSkill + 40;

				cont.DropItem( new Gold( level * 1000 ) );

				for ( int i = 0; i < level * 5; ++i )
					cont.DropItem( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );

				for ( int i = 0; i < level * 6; ++i )
				{
					Item item;

					if ( Core.AOS )
						item = Loot.RandomArmorOrShieldOrWeaponOrJewelry();
					else
						item = Loot.RandomArmorOrShieldOrWeapon();

					if ( item is BaseWeapon )
					{
						BaseWeapon weapon = (BaseWeapon)item;

						if ( Core.AOS )
						{
							int attributeCount;
							int min, max;

							GetRandomAOSStats( out attributeCount, out min, out max );

							BaseRunicTool.ApplyAttributesTo( weapon, attributeCount, min, max );
						}
						else
						{
							weapon.DamageLevel = (WeaponDamageLevel)Utility.Random( 6 );
							weapon.AccuracyLevel = (WeaponAccuracyLevel)Utility.Random( 6 );
							weapon.DurabilityLevel = (WeaponDurabilityLevel)Utility.Random( 6 );
						}

						cont.DropItem( item );
					}
					else if ( item is BaseArmor )
					{
						BaseArmor armor = (BaseArmor)item;

						if ( Core.AOS )
						{
							int attributeCount;
							int min, max;

							GetRandomAOSStats( out attributeCount, out min, out max );

							BaseRunicTool.ApplyAttributesTo( armor, attributeCount, min, max );
						}
						else
						{
							armor.ProtectionLevel = (ArmorProtectionLevel)Utility.Random( 6 );
							armor.Durability = (ArmorDurabilityLevel)Utility.Random( 6 );
						}

						cont.DropItem( item );
					}
					else if( item is BaseHat )
					{
						BaseHat hat = (BaseHat)item;

						if( Core.AOS )
						{
							int attributeCount;
							int min, max;

							GetRandomAOSStats( out attributeCount, out min, out  max );

							BaseRunicTool.ApplyAttributesTo( hat, attributeCount, min, max );
						}

						cont.DropItem( item );
					}
					else if( item is BaseJewel )
					{
						int attributeCount;
						int min, max;

						GetRandomAOSStats( out attributeCount, out min, out max );

						BaseRunicTool.ApplyAttributesTo( (BaseJewel)item, attributeCount, min, max );

						cont.DropItem( item );
					}
				}
			}

			int reagents;
			if ( level == 0 )
				reagents = 12;
			else
				reagents = level * 3;

			for ( int i = 0; i < reagents; i++ )
			{
				Item item = Loot.RandomPossibleReagent();
				item.Amount = Utility.RandomMinMax( 40, 60 );
				cont.DropItem( item );
			}

			int gems;
			if ( level == 0 )
				gems = 2;
			else
				gems = level * 3;

			for ( int i = 0; i < gems; i++ )
			{
				Item item = Loot.RandomGem();
				cont.DropItem( item );
			}

			if ( level == 6 && Core.AOS )
				cont.DropItem( (Item)Activator.CreateInstance( m_Artifacts[Utility.Random(m_Artifacts.Length)] ) );
		}

		public override bool CheckLocked( Mobile from )
		{
			if ( !this.Locked )
				return false;

			if ( this.Level == 0 && from.AccessLevel < AccessLevel.GameMaster )
			{
				foreach ( Mobile m in this.Guardians )
				{
					if ( m.Alive )
					{
						from.SendLocalizedMessage( 1046448 ); // You must first kill the guardians before you may open this chest.
						return true;
					}
				}

				LockPick( from );
				return false;
			}
			else
			{
				return base.CheckLocked( from );
			}
		}

		private List<Item> m_Lifted = new List<Item>();

		private bool CheckLoot( Mobile m, bool criminalAction )
		{
			if ( m_Temporary )
				return false;

			if ( m.AccessLevel >= AccessLevel.GameMaster || m_Owner == null || m == m_Owner )
				return true;

			Party p = Party.Get( m_Owner );

			if ( p != null && p.Contains( m ) )
				return true;

			Map map = this.Map;

			if ( map != null && (map.Rules & MapRules.HarmfulRestrictions) == 0 )
			{
				if ( criminalAction )
					m.CriminalAction( true );
				else
					m.SendLocalizedMessage( 1010630 ); // Taking someone else's treasure is a criminal offense!

				return true;
			}

			m.SendLocalizedMessage( 1010631 ); // You did not discover this chest!
			return false;
		}

		public override bool IsDecoContainer
		{
			get{ return false; }
		}

		public override bool CheckItemUse( Mobile from, Item item )
		{
			return CheckLoot( from, item != this ) && base.CheckItemUse( from, item );
		}

		public override bool CheckLift( Mobile from, Item item, ref LRReason reject )
		{
			return CheckLoot( from, true ) && base.CheckLift( from, item, ref reject );
		}

		public override void OnItemLifted( Mobile from, Item item )
		{
			bool notYetLifted = !m_Lifted.Contains( item );

			from.RevealingAction();

			if ( notYetLifted )
			{
				m_Lifted.Add( item );

				if ( 0.1 >= Utility.RandomDouble() ) // 10% chance to spawn a new monster
					TreasureMap.Spawn( m_Level, GetWorldLocation(), Map, from, false );
			}

			base.OnItemLifted( from, item );
		}

		public override bool CheckHold( Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight )
		{
			if ( m.AccessLevel < AccessLevel.GameMaster )
			{
				m.SendLocalizedMessage( 1048122, "", 0x8A5 ); // The chest refuses to be filled with treasure again.
				return false;
			}

			return base.CheckHold( m, item, message, checkItems, plusItems, plusWeight );
		}

		public TreasureMapChest( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 2 ); // version

			writer.Write( m_Guardians, true );
			writer.Write( (bool) m_Temporary );

			writer.Write( m_Owner );

			writer.Write( (int) m_Level );
			writer.WriteDeltaTime( m_DeleteTime );
			writer.Write( m_Lifted, true );
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			switch ( version )
			{
				case 2:
				{
					m_Guardians = reader.ReadStrongMobileList();
					m_Temporary = reader.ReadBool();

					goto case 1;
				}
				case 1:
				{
					m_Owner = reader.ReadMobile();

					goto case 0;
				}
				case 0:
				{
					m_Level = reader.ReadInt();
					m_DeleteTime = reader.ReadDeltaTime();
					m_Lifted = reader.ReadStrongItemList();

					if ( version < 2 )
						m_Guardians = new List<Mobile>();

					break;
				}
			}

			if ( !m_Temporary )
			{
				m_Timer = new DeleteTimer( this, m_DeleteTime );
				m_Timer.Start();
			}
			else
			{
				Delete();
			}
		}

		public override void OnAfterDelete()
		{
			if ( m_Timer != null )
				m_Timer.Stop();

			m_Timer = null;

			base.OnAfterDelete();
		}

		public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
		{
			base.GetContextMenuEntries( from, list );

			if ( from.Alive )
				list.Add( new RemoveEntry( from, this ) );
		}

		public void BeginRemove( Mobile from )
		{
			if ( !from.Alive )
				return;

			from.CloseGump( typeof( RemoveGump ) );
			from.SendGump( new RemoveGump( from, this ) );
		}

		public void EndRemove( Mobile from )
		{
			if ( Deleted || from != m_Owner || !from.InRange( GetWorldLocation(), 3 ) )
				return;

			from.SendLocalizedMessage( 1048124, "", 0x8A5 ); // The old, rusted chest crumbles when you hit it.
			this.Delete();
		}

		private class RemoveGump : Gump
		{
			private Mobile m_From;
			private TreasureMapChest m_Chest;

			public RemoveGump( Mobile from, TreasureMapChest chest ) : base( 15, 15 )
			{
				m_From = from;
				m_Chest = chest;

				Closable = false;
				Disposable = false;

				AddPage( 0 );

				AddBackground( 30, 0, 240, 240, 2620 );

				AddHtmlLocalized( 45, 15, 200, 80, 1048125, 0xFFFFFF, false, false ); // When this treasure chest is removed, any items still inside of it will be lost.
				AddHtmlLocalized( 45, 95, 200, 60, 1048126, 0xFFFFFF, false, false ); // Are you certain you're ready to remove this chest?

				AddButton( 40, 153, 4005, 4007, 1, GumpButtonType.Reply, 0 );
				AddHtmlLocalized( 75, 155, 180, 40, 1048127, 0xFFFFFF, false, false ); // Remove the Treasure Chest

				AddButton( 40, 195, 4005, 4007, 2, GumpButtonType.Reply, 0 );
				AddHtmlLocalized( 75, 197, 180, 35, 1006045, 0xFFFFFF, false, false ); // Cancel
			}

			public override void OnResponse( NetState sender, RelayInfo info )
			{
				if ( info.ButtonID == 1 )
					m_Chest.EndRemove( m_From );
			}
		}

		private class RemoveEntry : ContextMenuEntry
		{
			private Mobile m_From;
			private TreasureMapChest m_Chest;

			public RemoveEntry( Mobile from, TreasureMapChest chest ) : base( 6149, 3 )
			{
				m_From = from;
				m_Chest = chest;

				Enabled = ( from == chest.Owner );
			}

			public override void OnClick()
			{
				if ( m_Chest.Deleted || m_From != m_Chest.Owner || !m_From.CheckAlive() )
					return;

				m_Chest.BeginRemove( m_From );
			}
		}

		private class DeleteTimer : Timer
		{
			private Item m_Item;

			public DeleteTimer( Item item, DateTime time ) : base( time - DateTime.Now )
			{
				m_Item = item;
				Priority = TimerPriority.OneMinute;
			}

			protected override void OnTick()
			{
				m_Item.Delete();
			}
		}
	}
}

Ingo
Author of "Stripper Assassin"
Posts: 767
Joined: Wed Jan 07, 2004 10:40 pm

Re: Treasure chest loot

Post by Ingo »

What is the name of that script?
No to Scottish existence.

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Treasure chest loot

Post by Calix »

Mercury wrote:btw 10k and 600 regs, seems overkill...i know we both acroed like bitchs on ipy, and lv4s were shit. but if you also remember, you could do the route with the 4s about once an hour, thats like 50k an hour?? (hard cash plus regs)

id say something like.

Lv 1 - 100
Lv 2 - 250
Lv 3 - 1k + 50-100
Lv 4 - 2.5k + 100-200 reg
Ancient 10k + 1/50 arti chance

plus junk, like gems etc.

(otherwise id never do anything other than pick, as PVM seems pointless if you can farm that much gold and 1/4 on artis (even on a 1 per day spawner)
Do you really think so? You've only got 2 char picks per player, making a THunter is quite a big commitment..

Mercury
[Trial, I-C]
Posts: 1063
Joined: Sat Nov 13, 2004 3:34 pm

Re: Treasure chest loot

Post by Mercury »

yeh at 10k a pop, id have a thunter in a flash.

Say a 5 man guild (I-C heros)

5 pvpers
1 trader
1 tamer
1 thunter
2 other

And id just farm the hell out of tmaps/chests @ 10k a pop for lv 4s. 10k is like 30 mins grinding mobs (tough mobs at that)?

Just my perspective. Maybe we'd need to test out earning potential per hour before settling on figures (ie/ time it with a full setup, runebooks etc)

Nixon
AFRIKA KORPS
Posts: 3850
Joined: Wed Dec 24, 2003 3:58 pm
Location: Aberdeen
Contact:

Re: Treasure chest loot

Post by Nixon »

Mercury wrote:yeh at 10k a pop, id have a thunter in a flash.

Say a 5 man guild (I-C heros)

5 pvpers
1 trader
1 tamer
1 thunter
2 other

And id just farm the hell out of tmaps/chests @ 10k a pop for lv 4s. 10k is like 30 mins grinding mobs (tough mobs at that)?

Just my perspective. Maybe we'd need to test out earning potential per hour before settling on figures (ie/ time it with a full setup, runebooks etc)
Yes, you would need to scale tmaps with the rest of loot. It was 1k/level on OSI, which was fine as remember - each mob on a lvl 5 dropped 500-1k~

600 regs is also too much, especially in the days of LRC.

I personally would rather see gold scaled down across the board so we see less of the 100million+ items later on in the shard life but thats maybe asking too much.
No to U

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Treasure chest loot

Post by Calix »

@Ingo. treasuremapchest.cs

Post Reply