Blüten Timer

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

Blüten Timer

#1 Beitrag von thehappy » 09 Apr 2007 19:07

hallöchen.

hab mal wieder ein kleines problem, diesmal gehts um einen timer.
udn zwar möchte ich, daß der wert "blueten" im folgenden script jede stunde auf "1" gesetzt wird.

Code: Alles auswählen

using System;
using Server;
using Server.Items;

namespace Server.Items
{
	public class DETHypoachiondrixes : Item
	{
		private int m_blueten;
		
		[Constructable]
		public DETHypoachiondrixes() : base ( 0x234D )
		{
			Name = "Hypoachiondrixes";
			Movable = false;
			Hue = 1177;
			blueten = 1;
		}
		
		[CommandProperty( AccessLevel.GameMaster ) ]
		public int blueten
		{
	    	get { return m_blueten; }
	    	set { m_blueten = value; InvalidateProperties(); }
		}

		public override void OnDoubleClick( Mobile from )
		{
			if( blueten == 1 )
			{
				from.AddToBackpack( new DETHypoachiondrixesBluete() );
				blueten -= 1;
			}
			else
			{
				from.SendMessage( "Diese Blume traegt zurzeit keine Blueten!" );
			}
		}
		
		public DETHypoachiondrixes( Serial serial ) : base( serial )
		{
		}
		
		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );
			writer.Write( (int) 0 );
			writer.Write( (int) blueten );
		}
		
		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();
			switch (version)
	    	{
				case 1:
				{
		    		blueten = reader.ReadInt();
		    		goto case 0;
				}
				case 0:
				{ break; }
	    	}
		}
	}
	
	public class DETHypoachiondrixesBluete : Item
	{
		[Constructable]
		public DETHypoachiondrixesBluete() : base ( 0x1021 )
		{
			Name = "Hypoachiondrixesbluete";
			Weight = 0.1;
			Hue = 1177;
		}
		
		public DETHypoachiondrixesBluete( 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();
		}
	}
}
meine bisherigen versuche bestanden in einer timerclass, jedoch lies sich dort der wert "blueten" nicht schreiben, warum auch immer. daher die frage: kann ich irgendwie in der ersten klasse einen timer einbauen?

anhang: der timer muss keinen serverrestart überleben ... falls das von belang ist ^^

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

#2 Beitrag von Naddel » 09 Apr 2007 21:08

im konstruktor nen delaytimer einbaun und einen public setter für m_blueten schreiben (oder m_blueten public machen)

Code: Alles auswählen

Timer.DelayCall( TimeSpan.FromHours(1.0), CallbackTimer );

Code: Alles auswählen

public void CallbackTimer()
{
   m_blueten = 1;
}
*edited*
Zuletzt geändert von Naddel am 09 Apr 2007 21:34, insgesamt 1-mal geändert.

thehappy

#3 Beitrag von thehappy » 09 Apr 2007 21:32

CallbackTimer existiert nicht in meiner klasse ^^ auch sogesehen versteh ich den aufruf CallbackTimer nicht. und was FallenTimer bezweckt verstehe ich auch nicht :)
leider ist mir runuo dabei nicht gerade hilfreich, beide stichworte sind im gesamten quelltext nicht zu finden, was die fehlersuche erheblich erschwert.

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

#4 Beitrag von Naddel » 09 Apr 2007 21:33

sorry, hab mich verschrieben
benenn FallenTimer einfach in den CallbackTimer um, dann is das gut ^^
diese funktion wird aufgerufen, wenn der DelayCall fertig is, also nach einer stunde

thehappy

#5 Beitrag von thehappy » 09 Apr 2007 21:42

- Error: Scripts\Custom\Items\Uncategorized\DETHypoachiondrixes.cs: CS0654: (line 42, column 51) Method 'Server.Items.DETHypoachiondrixes.CallbackTimer()' referenced without parentheses ...

daraus werd ich jetzt so garnicht schlau :)

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

#6 Beitrag von Naddel » 09 Apr 2007 22:05

ok, seine ruo version is 1.0
habens jetzt anders gelöst

Code: Alles auswählen

Timer.DelayCall( TimeSpan.FromMinutes( 1.0 ), new TimerStateCallback( TimerCallback ), this );

public virtual void TimerCallback ( object state )
{
     Blueteblabla bluete = (Blueteblabla )state;
     bluete.blueten = 1
}

Irian
Gold Mitglied
Beiträge: 620
Registriert: 08 Apr 2004 14:28
Wohnort: Regensburg
Kontaktdaten:

#7 Beitrag von Irian » 09 Apr 2007 22:38

Ich würde das ehrlich gesagt ned mit nem Timer machen, sondern einfach beim Worldsaven. Das passierte alle fünf Minuten, da checkt man noch kurz, ob ne Stunde vergangen ist und Bingo. Spart einem einen Timer :-)

Antworten