Bewegung abfragen

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

Bewegung abfragen

#1 Beitrag von Xen » 23 Jun 2007 17:53

Hallo,

ich habe folgendes Problem:

Ich habe mir ein Item gescriptet mit dem man andere Player festhalten kan, sobald man sich aber bewegt soll sich der andere Player auch wieder bewegen können. Das problem ist ich bekomme die Abfrage, ob der Besitzer des Items sich bewegt, einfach nicht hin :( ich hoffe ihr könnt mir weiterhelfen.





Danke,
Xen

Sotho Tal Ker

#2 Beitrag von Sotho Tal Ker » 24 Jun 2007 10:06

Poste doch mal dein Script :)
Im Moment kann ich nur soviel sagen:
Eine Idee wäre es zu gucken ob das "RootParent" des Items ein Mobile ist und dann die OnMove Funktion benutzen. (Ich nehme an, dass der eine Spieler das Item nur halten kann wenn das Item angelegt odr im Rucksack ist)
dann ginge es pseudocode mäßig etwa so:

Code: Alles auswählen

 if (item.RootParent is Mobile)
{
  Mobile m = (Mobile)item.RootParent;
  if (m.OnMove)
   // hier dann irgendein Code der den Spieler loslässt
}

Xen

#3 Beitrag von Xen » 24 Jun 2007 13:06

Dan hier mal mein Code, soll ein Rassenitem werden also nicht über das Mobile "Shess" wundern das ist der Name der Rasse ;) (also immer der besitzer des Items).
Beim CallbackTimer, soll halt noch zusätzlich die abfrage hin ob der "Würgende" versucht sich zu bewegen, wen ja wird abgebrochen.
using System;
using Server.Targeting;
using Server.Network;
using Server.Items;

namespace Server.Items
{

public class WuergeGriff : Item
{

[Constructable]
public WuergeGriff()
: base(0xDF5)
{
Weight = 1.0;
Hue = 843;
Name = "Würgegriff";
this.LootType = LootType.Blessed;


}

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

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();


}




public override void OnDoubleClick(Mobile from)
{
if (from.Stam >= 10)
{
from.Target = new MyTarget(this);
}
else
{
from.SendMessage("Du bist viel zu erschöpft um jemanden zu würgen!");
}
}




private class MyTarget : Target
{
private WuergeGriff griff;
private Mobile shess;
private Mobile opfer;

public MyTarget(WuergeGriff m)
: base(1, false, TargetFlags.Harmful)
{
griff = m;
}

public void CallbackTimer()
{

if (.OnMove)//hier käme die abfrage hin
{
shess.Say("*" + shess.Name + " löst den Griff wieder*");
shess.Paralyzed = false;
opfer.Paralyzed = false;
opfer.CantWalk = false;
}
else
{

if (shess.Stam >= 10)
{
shess.Stam = shess.Stam - 5;
int damage = shess.Str / 5;
AOS.Damage(opfer, damage, damage + 5, 0, 0, 0, 0);

Timer.DelayCall(TimeSpan.FromSeconds(2.0), CallbackTimer);
}
else
{
shess.Say("*" + shess.Name + " löst den Griff wieder*");
shess.Paralyzed = false;
opfer.Paralyzed = false;
opfer.CantWalk = false;
}
}
}


protected override void OnTarget(Mobile from, object targeted)
{
if (griff.Deleted)
{
return;
}

else if (targeted is Mobile)
{
Mobile m = (Mobile)targeted;

if (m.Player)
{

int ver_shess = from.Str + from.Dex;
int ver_m = m.Str + m.Dex;

if (ver_shess <ver_m> ver_m)
{
from.SendMessage("Du hast " + m.Name + " umschlungen!");
m.SendMessage("Du wurdest von " + from.Name + " umschlungen!");
from.Say("*" + from.Name + " umschlingt " + m.Name + " und beginnt seinen Griff fester zu ziehen");

from.Paralyzed = true;
m.Paralyzed = true;

shess = from;
opfer = m;
Timer.DelayCall(TimeSpan.FromSeconds(2.0), CallbackTimer);



}
}
else
{

from.SendMessage("Du hast " + m.Name + " umschlungen!");
from.Say("*" + from.Name + " umschlingt " + m.Name + " und beginnt seinen Griff fester zu ziehen");



from.Paralyzed = true;
m.Paralyzed = true;
m.CantWalk = true;
shess = from;
opfer = m;
Timer.DelayCall(TimeSpan.FromSeconds(2.0), CallbackTimer);
}


}


if (targeted is Item)
{
from.SendMessage("Das würde dich nicht weiterbringen!");
}




}
}
}
}

Sotho Tal Ker

#4 Beitrag von Sotho Tal Ker » 24 Jun 2007 17:18

Wenn er den Würgegriff anwendet, wird er ja selbst paralysiert - da kann er sich ja garnicht bewegen. Von daher wäre eine Abfrage in dieser Hinsicht wenig sinnvoll :x

Xen

#5 Beitrag von Xen » 24 Jun 2007 17:24

Ja ich weis das wollte ich auch entfernen ;)

Damits aber nichts bringt muss es erstmal funktionieren^^.

Antworten