Fehler in unserem StaffTitle Script

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

Fehler in unserem StaffTitle Script

#1 Beitrag von Aleex » 15 Jul 2008 01:40

Halli Hallo Hallöle,

Ich habe einen Fehler in unserem StaffTitle Script.

Ich komme einfach nicht mehr weiter, ich bin bereits alles schon 10 mal durchgegangen.

Unsere Server Software ist RunUO 2.0 RC1.
Das Script:

Code: Alles auswählen

using System;
using System.Collections;
using Server;
using Server.Targeting;

namespace Server.Commands
{
   public class StaffTitle
   {
      public static void Initialize()
      {
	 CommandSystem.Register( "SetTitle", AccessLevel.GameMaster, new CommandEventHandler( SetTitle_OnCommand ) );
      }

      [Usage( "SetTitle <Title>" )]
      [Description( "Setze den Stafftitel eines Stafflers" )]
      
      public static void SetTitle_OnCommand( CommandEventArgs e )
      {
         public String Stt;
         public int Len=1;

         if(e.Length>=Len)
         {
	     Stt = e.GetString( 0 );
	     e.Mobile.Target = new SetTitleTarget(Stt);
	     e.Mobile.SendMessage("Waehle das Ziel!");
	 }
       }

       public class SetTitleTarget : Target
       {
          private String m_Stt;
          
          public SetTitleTarget(String Est) : base(-1, false, TargetFlags.None)
          {
             
             m_Stt=Est;
          }
          
          protected override void OnTarget(Mobile src, object targ)
          {
             if(targ is Mobile)
             {
                 Mobile targed = (Mobile)targ;
                 targed.StaffTitle=m_Stt;
                 src.SendMessage("Der StaffTitle wurde geaendert!");
             }
             else
             {
                 src.SendMessage("Das ist kein Spieler!");
             }
          }
       }
    }
  }
Der Fehler:

Bild

Ich habe die Klammern schon X mal überprüft.

Wäre nett, wenn mal jemand rüber schauen würde,

Danke im vorraus,

Aleex

Benutzeravatar
Torfo
Moderator (Sphere)
Beiträge: 828
Registriert: 13 Jan 2004 12:00
Kontaktdaten:

#2 Beitrag von Torfo » 15 Jul 2008 15:55

Was macht man denn mit lokalen public Variablen?
Bild

Aleex

#3 Beitrag von Aleex » 15 Jul 2008 16:59

Werte speichern.

Benutzeravatar
Torfo
Moderator (Sphere)
Beiträge: 828
Registriert: 13 Jan 2004 12:00
Kontaktdaten:

#4 Beitrag von Torfo » 15 Jul 2008 17:19

Und wer soll die Werte lesen dürfen?
Bild

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

#5 Beitrag von Naddel » 15 Jul 2008 18:28

Variablen in Methoden sind lokal, die kannst du nicht public o.ä. deklarieren. Wenn du das willst, musst du die in die Klasse schreiben.

Thanos
Senior Newbie
Beiträge: 27
Registriert: 16 Apr 2008 09:55

#6 Beitrag von Thanos » 15 Jul 2008 18:35

mhh weis denn keiner ne lösung das das script da funktioniert
ich frag mich auch warum der server die "IF" abfrage nicht kennt in dem script

Ich bin noch ein kleiner Noob in sachen Scripting doch will ich es lernen
wäre schön wenn mir das jemand erklären könnte mit dem script hier und vllt auch eine funktionierende version von dem Script postet

mit den Fehlern die behoben wurden hervorgehoben so lässt sich da sbesser lernen

Vielen Dank im vorraus für eure freundliche unterstützung

MfG Thanos

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

#7 Beitrag von Naddel » 15 Jul 2008 18:47

1) lass das "public" beim definieren von Variablen in Methoden weg
2) welches if? das: if(e.Length>=Len) ? du könntest auch gleich if (e.Length >= 1) schreiben, dann sparst du dir das "Len". Wahrscheinlich willst du nur prüfen, ob was mitgegeben wurde, da reicht auch ein if (e.Length > 0)

Aleex

#8 Beitrag von Aleex » 15 Jul 2008 19:22

Ich danke euch!

Thanos
Senior Newbie
Beiträge: 27
Registriert: 16 Apr 2008 09:55

#9 Beitrag von Thanos » 15 Jul 2008 20:09

Ok das Problem is gelöst nur brächten wir Jetzt WO wir die Variable definieren müssen damit das script funktioniert

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

#10 Beitrag von Naddel » 15 Jul 2008 21:02

1) habt ihr 2 das gleiche Problem? könnte bitte nur einer von euch fragen wenn dem so ist?
2) wenn das Problem gelöst ist (also das Script funktioniert), wo ist dann das Problem?
3) was passiert, wenn ihr nem NPC n Titel verpassen wollt? if(targ is Mobile) checkt auch ob es ein Mobile (= auch NPC) ist; wenn ihr eure StaffTitle-Variable in der PlayerMobile-Klasse habt, dann checkt auch, ob's ein PlayerMobile ist

Thanos
Senior Newbie
Beiträge: 27
Registriert: 16 Apr 2008 09:55

#11 Beitrag von Thanos » 15 Jul 2008 21:27

mhh Hallo Naddel ich bin der Admin dieses Shards und bin dem Scripten leider auch nicht so mächtig *sich schämt*

Also ich verstehe das nicht so ich denke wir müssen das in Der PlayerMobile.cs definieren aber wo genau und wie ?

tut mir leid wenn ich nerve und deine fachsprache nicht so deuten kann
mfg Thanos

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

#12 Beitrag von Naddel » 15 Jul 2008 22:23

naja, Mobile hat kein Attribut StaffTitle, das gibts nur bei PlayerMobile wenn ihr es in der PlayerMobile.cs definiert habt. Aber ich weiß ja nicht, ob ihr es nicht doch in der Mobile.cs definiert habt, deswegen war das nur eine Vermutung.
und was jetzt an dem Script nicht klappt weiß ich nicht, das musst du mir schon sagen, ich weiß ja nicht wie du es haben willst.

Thanos
Senior Newbie
Beiträge: 27
Registriert: 16 Apr 2008 09:55

#13 Beitrag von Thanos » 16 Jul 2008 00:09

Also als definition ich möchte das ich einen befehl ig habe wie das script oben
das ich .st TEXT mache und auf einen Spieler oder Staffler mache dann steht bei ihm ANDERSFARBIG wenn man über ihn geht unter dem namen der Text

wenn du jetzt weiter weist oder helfen könntest würde mich das riesig freuen

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

#14 Beitrag von Naddel » 16 Jul 2008 12:21

das ganze ohne Gewähr, da nicht getestet

PlayerMobile.cs:

Code: Alles auswählen

private String m_staffTitle = "";

[CommandProperty( AccessLevel.GameMaster )] /*Damit's n GM mit .props sehen kann*/
public String StaffTitle {
	get { return m_staffTitle; }
	set { m_staffTitle = value; }
}

public override void GetProperties( ObjectPropertyList list )
{
	base.GetProperties( list );
	if (!StaffTitle.equals(""))
		list.Add( "<basefont color=#FFFFFF>{0}", this.StaffTitle); //deine Farbe statt FFFFFF
}

// speichern abändern
public override void Serialize( GenericWriter writer )
{
	base.Serialize( writer );
	writer.Write( (int)// TODO: DEINE_NEUE_VERSION );
	writer.Write( m_staffTitle );
	//TODO: restlicher code der vorhin da war
}

// laden ändern
public override void Deserialize( GenericReader reader )
{
	base.Deserialize( reader );

	int version = reader.ReadInt();
	switch ( version )
	{
		case DEINE_VERSION: {
			m_staffTitle = reader.readString(); goto case DEINE_VERSION-1;}
		// TODO: restlicher code der vorhin da war
	}
}
StaffTitle.cs

Code: Alles auswählen

using System;
using Server.Targeting;
using Server.Mobiles;

namespace Server.Commands
{
	public class StaffTitle
	{
		public static void Initialize()
		{
			CommandSystem.Register( "SetTitle", AccessLevel.GameMaster, new CommandEventHandler( SetTitle_OnCommand ) );
			CommandSystem.Register( "st", AccessLevel.GameMaster, new CommandEventHandler( SetTitle_OnCommand ) );
		}

		[Usage( "SetTitle <Title>" )]
		[Usage( "st <Title>" )]
		[Description( "Setze den Stafftitel eines Stafflers" )]
		public static void SetTitle_OnCommand( CommandEventArgs e )
		{
			if ( e.Length > 0 )
			{
				e.Mobile.Target = new SetTitleTarget( e.GetString( 0 ) );
				e.Mobile.SendMessage( "Waehle das Ziel!" );
			}
		}

		public class SetTitleTarget : Target
		{
			private String m_Title;

			public SetTitleTarget( String title )
				: base( -1, false, TargetFlags.None )
			{
				m_Title = title;
			}

			protected override void OnTarget( Mobile src, object targ )
			{
				if ( targ is PlayerMobile )
				{
					PlayerMobile targed = (PlayerMobile)targ;
					if ( targed.AccessLevel < AccessLevel.GameMaster) ) // nur bei >=GM darf gesetzt werden
						return;
					targed.StaffTitle = m_Title;
					src.SendMessage( "Der StaffTitle wurde geaendert!" );
				}
				else
					src.SendMessage( "Das ist kein Spieler!" );
			}
		}
	}
}

Aleex

#15 Beitrag von Aleex » 16 Jul 2008 19:20

Danke!!!

Antworten