So I've been f*****g about with RunUO

Moderators: Benn, Calix, senji

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

So I've been f*****g about with RunUO

Post by Calix »

None of the Legacy scripts work in new RunUO though. I'm not sure how much work it is to covert them.

It's relatively easy to do basic edits - change item properties, edit new char startup location & items. Managed a few more complicated things like removing the non-Fel locations from the moongate gump, but it's mostly just copying other people's script. Having the Legacy code to compare to helps as well.

Having an absolute mare trying to edit monster loot to include custom items, though. Here's the script for a Wraith with a working Power Scroll custom loot script inserted, and below it a non-working Ethereal Mount custom loot script. It's not causing compile errors, but no emounts are dropping as loot.

Code: Select all

using System;
using Server;
using Server.Items;

namespace Server.Mobiles
{
	[CorpseName( "a ghostly corpse" )]
	public class Wraith : BaseCreature
	{
		[Constructable]
		public Wraith() : base( AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4 )
		{
			Name = "a wraith";
			Body = 26;
			Hue = 0x4001;
			BaseSoundID = 0x482;

			SetStr( 76, 100 );
			SetDex( 76, 95 );
			SetInt( 36, 60 );

			SetHits( 46, 60 );

			SetDamage( 7, 11 );

			SetDamageType( ResistanceType.Physical, 50 );
			SetDamageType( ResistanceType.Cold, 50 );

			SetResistance( ResistanceType.Physical, 25, 30 );
			SetResistance( ResistanceType.Cold, 15, 25 );
			SetResistance( ResistanceType.Poison, 10, 20 );

			SetSkill( SkillName.EvalInt, 55.1, 70.0 );
			SetSkill( SkillName.Magery, 55.1, 70.0 );
			SetSkill( SkillName.MagicResist, 55.1, 70.0 );
			SetSkill( SkillName.Tactics, 45.1, 60.0 );
			SetSkill( SkillName.Wrestling, 45.1, 55.0 );

			Fame = 4000;
			Karma = -4000;

			VirtualArmor = 28;

			PackReg( 10 );	
		}
		
		public override bool OnBeforeDeath()
        {
              switch (Utility.Random(1))  
              {
                  case 0: PackItem(new EtherealHorse());
                      break;
              }
              return base.OnBeforeDeath();
			  
			  }

public override void GenerateLoot()
        {
        
			  
			  
 
            if ( Utility.Random( 100 ) < 98 )
            {

                int level;

                double random = Utility.RandomDouble();

                if ( 0.30 >= random )
                level = 120;

                else if ( 0.40 >= random )
                    level = 115;

                else
                level = 110;

                switch ( Utility.Random( 24 ))
                {
                    case 0: AddToBackpack( new PowerScroll( SkillName.Swords, level ) ); break;
                    case 1: AddToBackpack( new PowerScroll( SkillName.Fencing, level ) ); break;
                    case 2: AddToBackpack( new PowerScroll( SkillName.Archery, level ) ); break;
                    case 3: AddToBackpack( new PowerScroll( SkillName.Parry, level ) ); break;
                    case 4: AddToBackpack( new PowerScroll( SkillName.Tactics, level ) ); break;
                    case 5: AddToBackpack( new PowerScroll( SkillName.Anatomy, level ) ); break;
                    case 6: AddToBackpack( new PowerScroll( SkillName.Healing, level ) ); break;
                    case 7: AddToBackpack( new PowerScroll( SkillName.Magery, level ) ); break;
                    case 8: AddToBackpack( new PowerScroll( SkillName.Meditation, level ) ); break;
                    case 9: AddToBackpack( new PowerScroll( SkillName.EvalInt, level ) ); break;
                    case 10: AddToBackpack( new PowerScroll( SkillName.MagicResist, level ) ); break;
                    //case 11: AddToBackpack( new PowerScroll( SkillName.AnimalTaming, level ) ); break;
                    //case 12: AddToBackpack( new PowerScroll( SkillName.AnimalLore, level ) ); break;
                    //case 13: AddToBackpack( new PowerScroll( SkillName.Veterinary, level ) ); break;
                    case 11: AddToBackpack( new PowerScroll( SkillName.Musicianship, level ) ); break;
                    case 12: AddToBackpack( new PowerScroll( SkillName.Provocation, level ) ); break;
                    case 13: AddToBackpack( new PowerScroll( SkillName.Discordance, level ) ); break;
                    case 14: AddToBackpack( new PowerScroll( SkillName.Peacemaking, level ) ); break;
                    case 15: AddToBackpack( new PowerScroll( SkillName.Chivalry, level ) ); break;
                    case 16: AddToBackpack( new PowerScroll( SkillName.Focus, level ) ); break;
                    case 17: AddToBackpack( new PowerScroll( SkillName.Necromancy, level ) ); break;
                    case 18: AddToBackpack( new PowerScroll( SkillName.Stealing, level ) ); break;
                    case 19: AddToBackpack( new PowerScroll( SkillName.Stealth, level ) ); break;
                    case 20: AddToBackpack( new PowerScroll( SkillName.Macing, level ) ); break;
                    case 21: AddToBackpack( new PowerScroll( SkillName.Wrestling, level ) ); break;
                    //case 25: AddToBackpack( new PowerScroll( SkillName.Blacksmith, level ) ); break;
                    //case 26: AddToBackpack( new PowerScroll( SkillName.Tailoring, level ) ); break;
                    //case 27: AddToBackpack( new PowerScroll( SkillName.Tinkering, level ) ); break;
                    //case 28: AddToBackpack( new PowerScroll( SkillName.Mining, level ) ); break;
                    //case 29: AddToBackpack( new PowerScroll( SkillName.Carpentry, level ) ); break;
                    //case 30: AddToBackpack( new PowerScroll( SkillName.Alchemy, level ) ); break;
                    //case 31: AddToBackpack( new PowerScroll( SkillName.Fletching, level ) ); break;
                    //case 32: AddToBackpack( new PowerScroll( SkillName.Inscribe, level ) ); break;
                    //case 33: AddToBackpack( new PowerScroll( SkillName.Cooking, level ) ); break;
                    //case 34: AddToBackpack( new PowerScroll( SkillName.Cartography, level ) ); break;
                    //case 35: AddToBackpack( new PowerScroll( SkillName.Lumberjacking, level ) ); break;
                    case 22: AddToBackpack( new PowerScroll( SkillName.Lockpicking, level ) ); break;
                    case 23: AddToBackpack( new PowerScroll( SkillName.Fishing, level ) ); break;
                }
            }
 
        }
		
		
		
		public override bool BleedImmune{ get{ return true; } }

		public override OppositionGroup OppositionGroup
		{
			get{ return OppositionGroup.FeyAndUndead; }
		}

		public override Poison PoisonImmune{ get{ return Poison.Lethal; } }

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

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );
			writer.Write( (int) 0 );
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();
		}
	}
}
The non-working emount part of the script, which according to this: http://www.runuo.com/community/threads/ ... on.102858/ should work is this part:

Code: Select all

              switch (Utility.Random(1))  
              {
                  case 0: PackItem(new EtherealHorse());
                      break;
              }
              return base.OnBeforeDeath();
The item code for the emount is correct - I've added them in as a starting item for new chars succesfully. So I'm not sure exactly what I'm doing wrong.

The next part(someone else's code copy pasted) is concerned with putting in power scroll drops(more complicated script) works fine:

Code: Select all

          if ( Utility.Random( 100 ) < 98 )
            {

                int level;

                double random = Utility.RandomDouble();

                if ( 0.30 >= random )
                level = 120;

                else if ( 0.40 >= random )
                    level = 115;

                else
                level = 110;

                switch ( Utility.Random( 24 ))
                {
                    case 0: AddToBackpack( new PowerScroll( SkillName.Swords, level ) ); break;
                    case 1: AddToBackpack( new PowerScroll( SkillName.Fencing, level ) ); break;
                    case 2: AddToBackpack( new PowerScroll( SkillName.Archery, level ) ); break;
                    case 3: AddToBackpack( new PowerScroll( SkillName.Parry, level ) ); break;
                    case 4: AddToBackpack( new PowerScroll( SkillName.Tactics, level ) ); break;
                    case 5: AddToBackpack( new PowerScroll( SkillName.Anatomy, level ) ); break;
                    case 6: AddToBackpack( new PowerScroll( SkillName.Healing, level ) ); break;
                    case 7: AddToBackpack( new PowerScroll( SkillName.Magery, level ) ); break;
                    case 8: AddToBackpack( new PowerScroll( SkillName.Meditation, level ) ); break;
                    case 9: AddToBackpack( new PowerScroll( SkillName.EvalInt, level ) ); break;
                    case 10: AddToBackpack( new PowerScroll( SkillName.MagicResist, level ) ); break;
                    //case 11: AddToBackpack( new PowerScroll( SkillName.AnimalTaming, level ) ); break;
                    //case 12: AddToBackpack( new PowerScroll( SkillName.AnimalLore, level ) ); break;
                    //case 13: AddToBackpack( new PowerScroll( SkillName.Veterinary, level ) ); break;
                    case 11: AddToBackpack( new PowerScroll( SkillName.Musicianship, level ) ); break;
                    case 12: AddToBackpack( new PowerScroll( SkillName.Provocation, level ) ); break;
                    case 13: AddToBackpack( new PowerScroll( SkillName.Discordance, level ) ); break;
                    case 14: AddToBackpack( new PowerScroll( SkillName.Peacemaking, level ) ); break;
                    case 15: AddToBackpack( new PowerScroll( SkillName.Chivalry, level ) ); break;
                    case 16: AddToBackpack( new PowerScroll( SkillName.Focus, level ) ); break;
                    case 17: AddToBackpack( new PowerScroll( SkillName.Necromancy, level ) ); break;
                    case 18: AddToBackpack( new PowerScroll( SkillName.Stealing, level ) ); break;
                    case 19: AddToBackpack( new PowerScroll( SkillName.Stealth, level ) ); break;
                    case 20: AddToBackpack( new PowerScroll( SkillName.Macing, level ) ); break;
                    case 21: AddToBackpack( new PowerScroll( SkillName.Wrestling, level ) ); break;
                    //case 25: AddToBackpack( new PowerScroll( SkillName.Blacksmith, level ) ); break;
                    //case 26: AddToBackpack( new PowerScroll( SkillName.Tailoring, level ) ); break;
                    //case 27: AddToBackpack( new PowerScroll( SkillName.Tinkering, level ) ); break;
                    //case 28: AddToBackpack( new PowerScroll( SkillName.Mining, level ) ); break;
                    //case 29: AddToBackpack( new PowerScroll( SkillName.Carpentry, level ) ); break;
                    //case 30: AddToBackpack( new PowerScroll( SkillName.Alchemy, level ) ); break;
                    //case 31: AddToBackpack( new PowerScroll( SkillName.Fletching, level ) ); break;
                    //case 32: AddToBackpack( new PowerScroll( SkillName.Inscribe, level ) ); break;
                    //case 33: AddToBackpack( new PowerScroll( SkillName.Cooking, level ) ); break;
                    //case 34: AddToBackpack( new PowerScroll( SkillName.Cartography, level ) ); break;
                    //case 35: AddToBackpack( new PowerScroll( SkillName.Lumberjacking, level ) ); break;
                    case 22: AddToBackpack( new PowerScroll( SkillName.Lockpicking, level ) ); break;
                    case 23: AddToBackpack( new PowerScroll( SkillName.Fishing, level ) ); break;
                }
            }
 

Any ideas?

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

Re: So I've been fucking about with RunUO

Post by Calix »

Oh and the server is up if anyone wants to jump on for some duelzzzz. The PvP system seems pretty accurate with a few minor edits. Changed Ornament/Ring of the Elements to give 2/6 casting 40 LMC/15 SDI/100 LRC/65 all resists between them.

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

Re: So I've been fucking about with RunUO

Post by Calix »

Got Noxin's 'Shame Monsters' working with a small bit of fucking around. Will spread them around all dungeons and remove their normal loot - so they're 'special reward' (barbed kits etc) only - no gold or magic items. Upping gold/magic items on more traditional monters like Liches.

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

Re: So I've been fucking about with RunUO

Post by Ingo »

Will post more details later when i have a mouse but a couple of things to try.

Move the ethy lines so they are in the generateloot subroutine

Get rid of the switch statement surrounding the ethy lines. The "random" part is just for selecting a random case and you only actually have 1. If you want a random chance of the ethy dropping you need code more like the "if random(100)<98" that preceeds the powerscroll section.
No to Scottish existence.

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

Re: So I've been fucking about with RunUO

Post by Ingo »

Looking at that forum link it seems random in a switch statement can give you a random loot chance, ie there is a random chance of not selecting a case. Not sure if random(1) gives you a 100% or 50% ( case 0 and case 1). If moving the code into generate loot doesnt work try random(0).

Have you got the orignal wraith code before mods?
No to Scottish existence.

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

Re: So I've been fucking about with RunUO

Post by Calix »

Random 1 = 100% chance.

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

Re: So I've been fucking about with RunUO

Post by Ingo »

http://www.runuo.com/community/threads/ ... th.476145/

Post #4 implies that you can't add items to monster loot that are blessed. Explains why it worked for new characters too.

Just added an Orni nps.

Owned.
No to Scottish existence.

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

Re: So I've been fucking about with RunUO

Post by Calix »

Nice oneeeeeee. I didn't actually want to add an Ethy btw, was just the first thing I thought of to practice with! Cheers hero.
I can't remember if they were blessed or not on Legacy. They dropped on champ spawns I think. The code for them to drop on 'Shame' bosses is there as well but don't remember it ever happening.

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

Re: So I've been fucking about with RunUO

Post by Calix »

This works btw, and the Dye Tubs are blessed.

public override void GenerateLoot()
{

}

public override void OnDeath( Container c )
{
base.OnDeath ( c );
switch ( Utility.Random( 50 ) )
{
case 0: c.DropItem( new PowerScroll( SkillName.Tailoring, 120) ); break;
case 1: c.DropItem( new RunicSewingKit( CraftResource.BarbedLeather, 15) ); break;
case 2: c.DropItem( new RunicSewingKit( CraftResource.BarbedLeather, 10 ) ); break;
case 3: c.DropItem( new RunicSewingKit( CraftResource.BarbedLeather, 10 ) ); break;
case 4: c.DropItem( new RunicSewingKit( CraftResource.BarbedLeather, 15 ) ); break;
case 5: c.DropItem( new RunicHammer( CraftResource.Valorite, 10 ) ); break;
case 6: c.DropItem( new PowerScroll( SkillName.ArmsLore, 120) ); break;
case 7: c.DropItem( new RunicHammer( CraftResource.Valorite, 10 ) ); break;
}
//base.OnDeath( c );
if ( 1 > Utility.Random( 120 ) )
c.DropItem( new SpecialDyeTub() );
else if ( 1 > Utility.Random( 120 ) )
c.DropItem( new LeatherDyeTub() );
else if ( 1 > Utility.Random( 120 ) )
c.DropItem( new RewardBlackDyeTub() );
else if ( 1 > Utility.Random( 120 ) )
c.DropItem( new RunebookDyeTub() );

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

Re: So I've been fucking about with RunUO

Post by Ingo »

So OnBeforeDeath method works for any non blessed item

OnDeath lets you put whatever you like in the corpse as it waits until the corpse is there before basically manually adding an item. Seems a bit dodgy!

The bare bones of the above code without the chance to drop is:

public override void OnDeath( Container c )
{
base.OnDeath ( c );
c.DropItem( new EtherealHorse());

}
No to Scottish existence.

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

Re: So I've been fucking about with RunUO

Post by Calix »

http://www.runuo.com/community/threads/ ... cro.13483/

http://www.runuo.com/community/threads/ ... ost.62044/

Found this link. Wish I'd seen it before I went through and found them myself, but just an example of how easy most simple stuff is to change.

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

Re: So I've been fucking about with RunUO

Post by Calix »

At work, just putting links here for myself for later: http://www.runuo.com/community/threads/ ... 257/page-2




Post Reply