Klassen-Moongate + Klassenitem

Hier könnt ihr Unterstützung holen für euere Script Probleme, und Fragen rund um das Scripten.
Antworten
Nachricht
Autor
Nick_die_Nase

Klassen-Moongate + Klassenitem

#1 Beitrag von Nick_die_Nase » 14 Dez 2008 22:00

Ich würde gerne ein Moongate scripen das wenn man durch es hinduchgeht an einem Bestimmten Punkt ankommen, bestimmte Skillwerte bekommt und bestimmte Items ins Backpack.

Ich habe auch schon soweit gescriptet das es läuft nur wenn man hindurch geht stürzt der Server immer wieder ab.

Code: Alles auswählen

using System;
using Server.Gumps;

namespace Server.Items
{
	public class magegate : Item
	{
		[Constructable]
		public magegate() : base( 0xF6C )
		{
			Movable = false;
			Name = "Mages Gate";
		}

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

		public override bool OnMoveOver( Mobile m )
		{
			if (m.Map.CanFit( m.Location, 16, false, false ) )
			{
m.Skills[SkillName.Alchemy].Base = 10;
m.Skills[SkillName.Anatomy].Base = 10;
m.Skills[SkillName.AnimalLore].Base = 10;
m.Skills[SkillName.AnimalTaming].Base = 10;
m.Skills[SkillName.Archery].Base = 10;
m.Skills[SkillName.ArmsLore].Base = 10;
m.Skills[SkillName.Begging].Base = 10;
m.Skills[SkillName.Blacksmith].Base = 10;
m.Skills[SkillName.Bushido].Base = 10;
m.Skills[SkillName.Camping].Base = 10;
m.Skills[SkillName.Carpentry].Base = 10;
m.Skills[SkillName.Cartography].Base = 10;
m.Skills[SkillName.Chivalry].Base = 10;
m.Skills[SkillName.Cooking].Base = 10;
m.Skills[SkillName.DetectHidden].Base = 10;
m.Skills[SkillName.Discordance].Base = 10;
m.Skills[SkillName.EvalInt].Base = 20;
m.Skills[SkillName.Fencing].Base = 10;
m.Skills[SkillName.Fishing].Base = 10;
m.Skills[SkillName.Fletching].Base = 10;
m.Skills[SkillName.Focus].Base = 10;
m.Skills[SkillName.Forensics].Base = 10;
m.Skills[SkillName.Healing].Base = 10;
m.Skills[SkillName.Herding].Base = 10;
m.Skills[SkillName.Hiding].Base = 10;
m.Skills[SkillName.Inscribe].Base = 10;
m.Skills[SkillName.ItemID].Base = 10;
m.Skills[SkillName.Lockpicking].Base = 10;
m.Skills[SkillName.Lumberjacking].Base = 10;
m.Skills[SkillName.Macing].Base = 10;
m.Skills[SkillName.Magery].Base = 20;
m.Skills[SkillName.MagicResist].Base =10;
m.Skills[SkillName.Meditation].Base = 20;
m.Skills[SkillName.Mining].Base = 10;
m.Skills[SkillName.Musicianship].Base = 10;
m.Skills[SkillName.Necromancy].Base = 10;
m.Skills[SkillName.Ninjitsu].Base = 10;
m.Skills[SkillName.Parry].Base = 10;
m.Skills[SkillName.Peacemaking].Base = 10;
m.Skills[SkillName.Poisoning].Base = 10;
m.Skills[SkillName.Provocation].Base = 10;
m.Skills[SkillName.RemoveTrap].Base = 10;
m.Skills[SkillName.Snooping].Base = 10;
m.Skills[SkillName.SpiritSpeak].Base = 10;
m.Skills[SkillName.Stealing].Base = 10;
m.Skills[SkillName.Stealth].Base = 10;
m.Skills[SkillName.Swords].Base = 10;
m.Skills[SkillName.Tactics].Base = 10;
m.Skills[SkillName.Tailoring].Base = 10;
m.Skills[SkillName.TasteID].Base = 10;
m.Skills[SkillName.Tinkering].Base = 10;
m.Skills[SkillName.Tracking].Base = 10;
m.Skills[SkillName.Veterinary].Base = 10;
m.Skills[SkillName.Wrestling].Base = 10;
			
				Container pack = m.Backpack;

				pack = new Backpack();
				pack.Movable = false;

				AddItem( new MagicArrowScroll( ) );
				m.AddItem( new Spellbook( ) );
				
			
			m.Location = new Point3D(1360, 2055, 0);
				m.RawStr = 10;
                                m.RawDex = 10;
				m.RawInt = 20;
				return true;
			}
                        else
                        {
                        	return false;
                        }
		}

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

			writer.Write( (int) 0 ); // version
		}

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

			int version = reader.ReadInt();
		}

		private static void PackItem( Item item )
		{
			if ( !Core.AOS )
				item.LootType = LootType.Newbied;

			Container pack = m_Mobile.Backpack;

			if ( pack != null )
				pack.DropItem( item );
			else
				item.Delete();
		}

		private static Mobile m_Mobile;

		private static Item MakeNewbie( Item item )
		{
			if ( !Core.AOS )
				item.LootType = LootType.Newbied;

			return item;
		}

		private static void PlaceItemIn( Container parent, int x, int y, Item item )
		{
			parent.AddItem( item );
			item.Location = new Point3D( x, y, 0 );
		}
	}
}

Und Hier auch noch den Chashlog:

Code: Alles auswählen

Server Crash Report
===================

RunUO Version 2.0, Build 2959.20979
Operating System: Microsoft Windows NT 5.1.2600 Service Pack 3
.NET Framework: 2.0.50727.1433
Time: 12.12.2008 00:35:20
Mobiles: 3
Items: 73
Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
   at Server.Items.magegate.PackItem(Item item)
   at Server.Items.magegate.OnMoveOver(Mobile m)
   at Server.Mobile.Move(Direction d)
   at Server.Mobiles.PlayerMobile.Move(Direction d)
   at Server.Network.PacketHandlers.MovementReq(NetState state, PacketReader pvSrc)
   at Server.Network.MessagePump.HandleReceive(NetState ns)
   at Server.Network.MessagePump.Slice()
   at Server.Core.Main(String[] args)

Clients:
- Count: 1
+ 127.0.0.1: (account = Test) (mobile = 0x1 'Schatten')

Benutzeravatar
Naddel
Senior Mitglied
Beiträge: 190
Registriert: 13 Jan 2004 18:48
Wohnort: daheim
Kontaktdaten:

#2 Beitrag von Naddel » 17 Dez 2008 01:41

entweder ist das nicht der komplette Code oder du rufst PackItem(...) von wo anders auf. dort ist auf jeden fall der fehler.
entweder ist das Item das du in PackItem(...) übergibst null, oder (was ich vermute), dein Mobile m_Mobile ist null.

Nick_die_Nase

#3 Beitrag von Nick_die_Nase » 18 Dez 2008 14:36

Also ich hab den part jetzt so geändert:

Code: Alles auswählen

			Container pack = m.Backpack;
				if ( pack == null )
				{
					pack = new Backpack();
					pack.Movable = false;
					m.AddItem( pack );
		 		}
				pack.DropItem( new SulfurousAsh(20) );
				pack.DropItem( new MagicArrowScroll( ) );

				Item item = new Spellbook();
				item.Name = "altes Erbstück";
				m.AddItem( item );
Und es Funktioniert :)

Antworten