Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Position XYZ



Bier_Baron
21.04.2012, 13:12
Ich wollte mal fragen ob es die Möglichkeit gibt das die XYZ Position nach einen Zufallsprinz geändert werden kann?

Ich möchte es für ein Raumschiff, wo man mit denn Warpdrive dann irgend wo auf der Map landet.

Geht sowas?

1mannlan
21.04.2012, 14:26
Wire Randomchip, wo ist das Problem?

Bier_Baron
21.04.2012, 22:52
Es funktioniert irgend wie nicht?

Ich hab mich an das Tutorial gehalten nur mit einen Warpdrive anstatt ein Holo.

http://www.youtube.com/watch?v=iyk3cBl9T6U

Der Warpdrive Landet immer wieder an der Selben stelle.

Habe die Zahl der Constante Value auf verschiedenen Zahlen Probiert, aber immer das selbe Ergebnis.

Kann man einen Chip erstellen der eine Zufällige Position beziehungsweise eine zufällige Zahl nimmt.

1mannlan
22.04.2012, 00:47
Multiplizier die Random Chips mal mit sagen wir 1000, denn diese geben nur Werte zwischen 0 und 1 aus, der Unterschied dürfte zu gering sein.

Bier_Baron
22.04.2012, 16:10
Meinste ohne CValue direkt am RChip?

1mannlan
22.04.2012, 16:38
Den Random Chip an einen Multiply anschließen, B an eine Constant Value.
Mal ehrlich, hast du wiremod überhaupt verstanden?

Bier_Baron
22.04.2012, 19:59
Doch schon aber ich hab das Spiel fast 4 Monate nicht gespielt.

Es funktioniert jetzt, aber verhindern das das Objekt außerhalb der Map landet kann man nicht oder?

Hidden Evil
22.04.2012, 22:39
Theoretisch kann man einen E2-Chip programmieren, den man auf einen bestimmten Bereich der Map programmiert, in dem die zufällig ausgewählten Koordinaten akzeptiert werden. Aber ich bin da auch zu lange raus, als dass ich da einen brauchbaren Tipp gegen könnte.

Ansonsten: Nein, das Ding beamt skrupellos ins Nirvana, wenn es die Koordinaten dazu bekommt.

Bier_Baron
23.04.2012, 09:42
Hab mal einen einfachen Chip gemacht der eine Random position vorgibt.



@name Random Warpjump
@outputs X Y Z

interval(10)

X = (random(1,10000))
Y = (random(1,10000))
Z = (random(1,10000))


Gibt es ein Befehl mit denn sich der Chip der Map anpasst oder müsste man das für jede Map extra anpassen?

1mannlan
23.04.2012, 11:03
Könntest dir etwas mit Rangern bauen, die die Map vermesöen, scheint aber wohl keinen Befehl zu geben.
Denn woher soll die e2 wissen was du als Map definierst? (Tunnel, Höhlen...)
Das einzige wäre die größe der eigentlichen Fläche in der eine Map sein kann, die ist aber durch Hammer meines Wissens begrenzt und wäre dann auch konstant.
Trotzdem bringt das nicht viel, es sei den die Map ist eine Box mit diesen Maßen.

monky2k6
23.04.2012, 11:07
Da mir nicht bekannt ist das man in LUA irgendwelche Werte der Map auslesen kann:
Nein, der kann sich nicht automatisch anpassen. Du müsstest das tatsächlich für jede einzelne Map händisch angeben.

Andere Möglichkeit:
Du fügst dem E2-Chip Inputs hinzu mit 2 Eckpunkten (Diagonal gegenüberliegen in einem Quader) innerhalb diesem nur eine Position ausgegeben werden darf.
Somit musst du nur für jede Map in der du bist 2 Vectoren angeben.

Hidden Evil
25.04.2012, 20:07
Andere Möglichkeit:
Du fügst dem E2-Chip Inputs hinzu mit 2 Eckpunkten (Diagonal gegenüberliegen in einem Quader) innerhalb diesem nur eine Position ausgegeben werden darf.
Somit musst du nur für jede Map in der du bist 2 Vectoren angeben.

Genau das meinte ich, danke :)

@Bier_Baron:
Der Befehl dazu lautet inrange(V,Vmin,Vmax)

Du legst den zu prüfenden Bereich mit den Vektoren Vmin und Vmax fest. V selbst ist der zu prüfende Vektor, ob sich dieser im angegebenen Bereich befindet. Da der Befehl eine 0 oder 1 ausgibt, kannst Du den Käse also einfach mit if (inrange(...)) abfragen.

Apropos Warpdrive:
Sorry für die OT-Frage, aber welche(s) Addon(s) brauchte ich nochmal, um den nutzen zu können?

Bier_Baron
25.04.2012, 22:53
Apropos Warpdrive:
Sorry für die OT-Frage, aber welche(s) Addon(s) brauchte ich nochmal, um den nutzen zu können?

Der Warp Drive ist bestanteil von SB.
Aber der Hoverdrive Controller von Wire, ist genau das selbe nur halt kleiner.


---------- Beitrag hinzugefügt um 23:53 ---------- Vorheriger Beitrag war um 22:31 ----------

Hab mal versucht denn Befehl einzufügen, aber es klappt leider nicht so wie ich es mir vorgestellt habe.



@name Random Warpjump
@inputs Vector:vector Vector2:vector Vector3:vector
@outputs X Y Z
@trigger V Vmin Vmax

interval(10)

X = (random(0,10000))
if (inrange(Vector,Vmin,Vmax))
Y = (random(0,10000))
if (inrange((Vector2,Vmin,Vmax))
Z = (random(0,10000))
if (inrange(Vector3,Vmin,Vmax))


Hab keine ahnung wie ich das Problem beheben soll?

muss ich bei min und max eine Zahl einfügen oder ist der Befehl falsch?

Hidden Evil
26.04.2012, 00:40
Du musst die Vektoren Vmin und Vmax natürlich auch noch definieren, und zwar mit den Koordinaten der beiden "Ecken" des Raumes, die den entsprechenden Bereich abstecken sollen. Und das nicht nur mit einer Zahl, sondern jeweils 3, denn es sind halt 2 3-dimensionale Vektoren.

Du brauchst auch nicht 3 verschiedene Vektoren, es reicht ein einziger, der zu überprüfen ist. Du lässt halt X, Y und Z jeweils über die Ramdom-Funktion erzeugen und fügst sie zum zu überprüfenden Vektor zusammen. Dieser wird dann mit der o.g. Funktion überprüft, ob er sich in dem abgesteckten Bereich befindet.

RP-01
26.04.2012, 16:38
Ich habe zwar keine Ahnung von Wire, aber ich würde das theoretisch (oder etwa in LUA) nach folgendem Schema machen:
Definiere die Bounds des zu teleportierenden Objektes
Bestimme den random Vektor; kleinstmöglicher Wert = Vector( 0, 0, 0 ), größtmöglicher Wert = Mapboundaries
Verrechne random Vektor mit Min- bzw. Maxbounds des Objektes
Überprüfe ob sich in dem Raum zwischen den beiden Vektoren störende Objekte befinden
Wenn ja ➔ neuen random Vektor bestimmen, Vorgänge wiederholen
Wenn nein ➔ Objekt-Position zu davor bestimmter Position setzen

Ich denke mal dieser Simple-Shit sollte in Wire machbar sein.

Hidden Evil
26.04.2012, 19:32
Es ist ja auch machbar, aber da ich (wieso auch immer) das Dingens nicht mehr in der Entity-Liste habe, kann ich es nicht für ihn zusammentippseln sondern nur bruchstückhaft Tipps geben.

@Bier_Baron:
Nochmal ein Paar konkrete Tipps zu meiner Umschreibung oben:

Den Beam-Vektor erstellt Du mit


Beamvector=vec(random(0,10000),random(0,10000),ran dom(0,10000))

Nachdem Du die Koordinaten der Raum-Vektoren Vmin und Vmax definiert hast, kannst Du dann so abfragen, ob sich der Beam-Vektor in diesem Raum befindet:


if (inrange(Beamvector,Vmin,Vmax)){
# hier kommt der Befehl zum Beamen rein
}

Aber das ist völlig ungetestet und nur die halbe Miete. Anwenden musst Du das dann noch selbst :)

Bier_Baron
26.04.2012, 21:09
Wo soll ich das einbauen oder ist es an der Stelle Richtig?
"Beamvector=vec(random(0,10000),random(0,10000),ran dom(0,10000))"
und Benötige ich das auch noch:
if (inrange(Vector,Vmin,Vmax))



@name Random Warpjump
@outputs X Y Z

interval(10)

Beamvector=vec(random(0,10000),random(0,10000),ran dom(0,10000))

X = (random(1,10000))
if (inrange(Beamvector,Vmin 0,Vmax 10000))
Y = (random(1,10000))
if (inrange(Beamvector,Vmin 0,Vmax 10000))
Z = (random(1,10000))
if (inrange(Beamvector,Vmin 0,Vmax 10000))


Ich weis leider auch nicht was verkehrt ist?
Habe ich die Zahlen falsch eingefügt?

RP-01
27.04.2012, 15:08
Hast du überhaupt eine Ahnung, was "du" da eigentlich tust? Kommt mir nämlich so vor, als würdest du einfach das was hier so im Thread an Codesnippets geposted wird, ohne Sinn und Verstand Copy'n'Pasten.

Bier_Baron
30.04.2012, 13:47
Ich Teste die Codes ob sie funktioniere.

Hab mal bei Google mal gesucht und bin da auf ein altes Theard hier in Forum gestoßen.



der befehl ist
V:isInWorld()
zählst du ihn hoch bis das erste mal 0 kommt dann haste eine Seite der Map^^
hoffentlich ist das thema noch net zu alt

Ich werd es mal bei Gelegenheit Testen.

Hab mal einen Code geschrieben:



@name Random Warpjump
@outputs X Y Z
@trigger Vector1 Vector2 Vector3

interval(10)

X = Vector1
X = (random(1,10000000))
if (inrange(Vector1:isInWorld()))
Y = Vector2
Y = (random(1,10000000))
if (inrange(Vector2:isInWorld()))
Z = Vector3
Z = (random(0,10000000))
if (inrange(Vector3:isInWorld()))


Noch nicht getestet!