OnMovement probleme

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

OnMovement probleme

#1 Beitrag von thehappy » 06 Mai 2007 18:42

hallöchen ...

ich hab mal wieder ein kleines problem. ich habe einen ganz normalen vendor gebaut und lasse ihn per waypoints eine gewissen route ablaufen. an einer stelle sol er jedoch für einige zeit stehenbleiben um sachen zu verkaufen. daher hab ich folgende methode eingefügt:
public override void OnMovement( Mobile m, Point3D oldLocation )
{
counter = 0;
if( this.Location == new Point3D( 1007, 1031, 2 ) )
{
this.Say( "Waren aus aller Welt! Kauft fleissig, kauft viel!" );
this.CantWalk = true;
counter += 1;
if( counter == 20 )
this.CantWalk = false;
}
}
lustigerweise funktioniert da scheinbar garnix! wenn ich statt "this" "m" verwende, dann fängt er an zu brabbeln sobald ICH mich bewege. nunja, bei "this" tut er aber leider garnichts! er läuft einfach weiter!

jemand ne idee wie ich das ganze lösen könnte?

Arahil
Moderator (RunUO)
Beiträge: 437
Registriert: 15 Jan 2004 09:32
Wohnort: Wien

#2 Beitrag von Arahil » 07 Mai 2007 13:52

ein workaround... leg dir einfach ne bodenplatte an die bestimmte stelle und mach die aktionen über bodenplatte.OnMoveOver

(is auch etwas performanter, weil du nicht bei jedem step checken musst)

Sotho Tal Ker

#3 Beitrag von Sotho Tal Ker » 07 Mai 2007 19:13

OnMovement wird benutzt wenn ein Mobile ein anderes Mobile sieht was sich bewegt - klappt ja auch hervorragend in deinem Beispiel. :D

Für das andere gibt es "OnMove" - das wird ausgeführt, bevor sich ein Mobile bewegt. Die Methode liefert dann true oder false, je nachdem ob sich das Mobile bewegen kann oder nicht.

thehappy

#4 Beitrag von thehappy » 07 Mai 2007 19:17

das mit der bodenplatte ist ne geile idee, danke für den tip.
hab's schlussendlich aber mit "OnThink" realisieren können. hier der code, falls sich jemand dafür interessiert :)
public override void OnThink()
{
place1 = new Point3D( 1266, 596, 2 );
place2 = new Point3D( 972, 850, 0 );
place3 = new Point3D( 1007, 1031, 2 );
place4 = new Point3D( 1092, 1247, 0 );

if( this.Location == place1 && wait == false )
{
this.Say( "Waren aus aller Welt! Kauft fleissig, kauft viel!" );
this.CantWalk = true;
this.Direction = Direction.South;
this.Frozen = true;
wait = true;
Timer.DelayCall( TimeSpan.FromMinutes( 5.0 ), new TimerStateCallback( TimerCallback ), this );
}

if( this.Location == place2 && wait == false )
{
this.Say( "Waren aus aller Welt! Kauft fleissig, kauft viel!" );
this.CantWalk = true;
this.Direction = Direction.East;
this.Frozen = true;
wait = true;
Timer.DelayCall( TimeSpan.FromMinutes( 5.0 ), new TimerStateCallback( TimerCallback ), this );
}

if( this.Location == place3 && wait == false )
{
this.Say( "Waren aus aller Welt! Kauft fleissig, kauft viel!" );
this.CantWalk = true;
this.Direction = Direction.South;
this.Frozen = true;
wait = true;
Timer.DelayCall( TimeSpan.FromMinutes( 5.0 ), new TimerStateCallback( TimerCallback ), this );
}

if( this.Location == place4 && wait == false )
{
this.Say( "Waren aus aller Welt! Kauft fleissig, kauft viel!" );
this.CantWalk = true;
this.Direction = Direction.East;
this.Frozen = true;
wait = true;
Timer.DelayCall( TimeSpan.FromMinutes( 5.0 ), new TimerStateCallback( TimerCallback ), this );
}

if( go == true )
{
wait = false;
go = false;
this.CantWalk = false;
this.Frozen = false;
}
}

public virtual void TimerCallback ( object state )
{
go = true;
}

Antworten