HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Koordinaten anzeigen lassen (https://hx3.de/editing-scripting-167/koordinaten-anzeigen-lassen-19618/)

hypercop 28.08.2010 20:50

Koordinaten anzeigen lassen
 
Ich möchte mir die Position einer Einheit in einer Funkmitteilung anzeigen lassen.

z.B. soldat1 sidechat "Sodat2 ist bei Position 036008"

Wie kann ich mir die Katenkoordinaten einer Einheit auslesen? Ich möchte lediglich die Koordinaten des Gitternetzes der Landschaftskarte .

Buliwyf 28.08.2010 21:40

Code:

player sideChat format["%1",mapGridPosition player]
:rolleyes:

hypercop 28.08.2010 22:13

Das war ja wieder super einfach. Ich kannst leider gerade nicht mehr ausprobieren, da ich nicht mehr an meinem Spielerechner bin, aber laut dem hier: mapGridPosition - Bohemia Interactive Community ist es genau das was ich suchte. Danke.

Buliwyf 28.08.2010 22:43

Ja klar... sonst hätt' ich`s kaum gepostet... ;)

hypercop 12.09.2010 20:56

Kann man sich denn auch die Stadt ausgeben lassen, in der sich eine Einheit befindet?

Vienna 12.09.2010 23:45

Leg über die Städte einen "Jeder"-Auslöser. Aus denen kannst du auslesen, wer im Bereich einer Stadt ist.

Wie man "Auslesen" kann, findest du hier: http://hx3.de/editing-scripting-167/...senheit-19540/

hypercop 13.09.2010 11:45

Mir kommt es gar nicht so drauf an, welche Einheit in der Stadt ist. Ich möchte wissen ob es möglich ist sich einen Städtenamen auslesen zu lassen.

Wenn ich mich richtig erinnere wurden mir von der Ki, in Arma2, Funkmeldungen gesagt. z.B. "Feinde in Zelengorsk". Wenn die Ki dies kann, dann muss es doch auch einen Scriptbefehl geben, welcher die Städtenamen so ausliest, wie der Befehl mapGridPosition die Koordinaten der Karte ausgibt.

Buliwyf 13.09.2010 12:21

Die KI liest nicht die Städtenamen aus, sondern über Auslöser wird ein Text ausgegeben, in dem halt der Stadtname eingeben ist... :zahn:

hypercop 13.09.2010 16:50

Ok, schade. Also kein townnamePosition-Befehl. hehe

Vienna 13.09.2010 18:02

Ich sehe hier keinen Nachteil. Du brauchst ja den Auslöser über der Stadt um festzustellen ob Feinde in der Stadt sind. Den Text der Meldung musst du so oder so schreiben. Darin führst du dann den Namen der Stadt an, für die der Auslöser ist.

Das muss alles programmiert werden. Das kann dir kein Befehl abnehmen.

Vocoder 13.09.2010 19:52

Es gibt doch aber das die KI statt der Positionsangabe den Namen der Stadt "sagt" ... also irgendwie wird das schon gehen was er meint ... :)

Pfandgiraffe 13.09.2010 20:02

ja schon. über recht aufwändiges scripting.

er könnte eine spiellogik über die stadt setzen um anschließend die entfernung der unit die etwas funken soll zu der logik abzufragen um daraufhin einen passend vorkenfektionierten text abspulen zu lassen, jenachdem welche stadt eben am nähesten liegt.

is aber im endeffekt das gleiche, denn der text muss trotzdem manuell eingegeben werden. ob sich der aufwand da lohnt is fraglich...

Vienna 13.09.2010 22:00

Das geht mit dem Koordinatensystem allein. Man braucht nur die Positionen der Städte in einem Array speichern und eine (gar nicht so schwierige) Abfrage mit forEach erstellen, welche mit dem Befehl distance die Positionen aus dem Array zu einer beliebigen Position vergleicht.

Asso-Loki 16.09.2010 10:15

Zitat:

Zitat von hypercop (Beitrag 333901)
Ich möchte wissen ob es möglich ist sich einen Städtenamen auslesen zu lassen.

Natürlich ist das möglich. Auf den Originalkarten sind eigentlich alle Siedlungen auch als Locations definiert. Locations haben eine ganze Reihe von Eigenschaften (Position, Name, Typ, Radius, Ausrichtung, Text, Seitenzugehörigkeit, usw.) welche sich entsprechend Abfragen lassen.

Kopiere mal folgenden Code in einen Funk-Auslöser:
Code:

hint format["%1", (text (nearestLocation [(getpos player),"NameVillage"]))]
Damit wird Dir der Name des Dorfes angezeigt welches am nähesten an der Position des Spielers liegt.

Siedlungen sind in drei unterschiedlichen class- typen definiert "NameVillage" für Dörfer, "NameCity" für Städte und "NameCityCapital" für Grossstädte, welche sich leider nicht über eine gemeinsame Oberklasse abfragen lassen. Der Befehl "nearestLocation" akzeptiert aber nur eine einzige class nach der gesucht wird und liefert auch nur die nächste der gesuchten class entsprechende Location zurück.

Anders der Befehl "nearestLocations". Ihm kann ich eine Array mit classen angeben nach welchen ich suchen möchte, muss ihm aber auch noch zusätzlich einen Suchradius angeben. Dieser Befehl liefert alle Locations, welche sich im Suchradius befinden und den gesuchten classen entsprechen sortiert nach ihrer Distanz zur Ausgangssuchposition (naheste Location zuerst) in Form eines Arrays.

Obiges Beispiel mit diesem Befehl:
Code:

hint format["%1", (text (nearestLocations [(getpos player),["NameVillage","NameCity","NameCityCapital"],1000]select 0))]
Beide Beispiele sollen nur zeigen, dass es eigentlich recht einfach mit einer Code-Zeile geht. Es fehlt dabei aber z.B. die Überprüfung ob den überhaupt ein erwünschtes Suchergebnis vorliegt.

Übrigens kann man natürlich auch Abfragen, ob sich eine bestimmte Position (z.B die des Spielers) innerhalb einer bestimmten Siedlung befindet:
Code:

(getpos Player) in (nearestLocation [(getpos player), "NameVillage"])
. Liefert "true" zurück wenn der Spieler sich innerhalb des von ihm aus gesehen nächsten Dorf befindet.

Einige "Makel" hat die ganze Locations- Geschichte jedoch. So z.B. deckt der Radius einer Dorflocation nicht immer auch wirklich das ganze Dorfgebiet ab oder liegt die Position der Dorflocation nicht auch zwingend in der Mitte des Dorfes.

Es gibt übrigens auch im Funktionsmanager-Modul mindest eine Funktion die einem Infos zu Locations anzeigt.

hypercop 16.09.2010 13:27

Genau das ist es was ich suchte. So wie es Vocoder beschrieb, kann die Ki die Städtenamen auslesen. Mir fehlte nur der Befehl hierzu.

Danke für die präzisen Ausführungen. Diese Zeile,

Zitat:

hint format["%1", (text (nearestLocations [(getpos player),["NameVillage","NameCity","NameCityCapital"],1000]select 0))]
war fast exakt der Befehl den ich benötigte.

Vielen Dank Asso-Loki. Mich würde noch interessieren, wie du die Befehle gefunden hast. Ich habe im Wiki die Suchbegriffe town und village verwendet und bin nicht schlau geworden.

Vienna 16.09.2010 13:55

Kaum zu glauben, was bei Arma bereits alles "natürlich möglich ist". Schade, dass das Spiel, durch die enorm fehlerhaften Verkaufsversionen, einen so vernichtenden Fehlstart hatte.

Zitat:

Zitat von Asso-Loki (Beitrag 334313)
...

Übrigens kann man natürlich auch Abfragen, ob sich eine bestimmte Position (z.B die des Spielers) innerhalb einer bestimmten Siedlung befindet:
Code:

(getpos Player) in (nearestLocation [(getpos player), "NameVillage"])
. Liefert "true" zurück wenn der Spieler sich innerhalb des von ihm aus gesehen nächsten Dorf befindet.

...

Innerhalb einer bestimmten Stadt erfordert allerdings die Eingabe des Stadtnamens und eine etwas umfangreichere Abfrage.

Wie Asso-Loki bereits sagte, ist das Stadtgebiet dabei leider nicht zur gänze abgedeckt, ja geradezu unbefriedigend!

z.B. bei "NameVillage" misst der Bereich nur einen 100m Radius vom ersten Buchstaben des Stadtnamens aus.

Wer auf der sicheren Seite sein will, muss einen eigenen Auslöserbereich anlegen.

Vienna 16.09.2010 14:13

Zitat:

Zitat von hypercop (Beitrag 334361)
Mich würde noch interessieren, wie du die Befehle gefunden hast. Ich habe im Wiki die Suchbegriffe town und village verwendet und bin nicht schlau geworden.

Das hat was mit "Location" zu tun: createLocation - Bohemia Interactive Community

Location = createLocation [className, position, sizeX, sizeY]

Den genauen Umgang damit habe ich noch nicht ganz durchschaut.

Asso-Loki 16.09.2010 14:17

Zitat:

Zitat von Vienna (Beitrag 334366)
Innerhalb einer bestimmten Stadt erfordert allerdings die Eingabe des Stadtnamens und eine etwas umfangreichere Abfrage.

Richtig. :)

Zitat:

Zitat von Vienna (Beitrag 334366)
Wie Asso-Loki bereits sagte, ist das Stadtgebiet dabei leider nicht zur gänze abgedeckt, ja geradezu unbefriedigend!

z.B. bei "NameVillage" misst der Bereich nur einen 100m Radius vom ersten Buchstaben des Stadtnamens aus.

Ja, teilweise sehr unbefriedigend! Locations könnten - wenn sie den von den Map- Entwicklern mit Sinn, Verstand und Sorgfalt gesetzt worden wären / würden - ein mächtiges Hilfsmittel sein.

Zitat:

Zitat von Vienna (Beitrag 334366)
Wer auf der sicheren Seite sein will, muss einen eigenen Auslöserbereich anlegen.

Jupp oder man legt eigene, besser platzierte Locations mit besserer Ausnützung der möglichen Infos und Einstellmöglichkeiten über die bereits gesetzten. Eine Location braucht normalerweise weniger Rechenzeit als ein Auslöser der ja meist - wie eine Scriptschlaufe - in einem hohen Intervall auf die Erfüllung seiner Bedingungen abgefragt wird. Locations bieten auch einiges an Einstellmöglichkeiten, welche man über Befehle und Anweisungen manipulieren kann.

Vienna 16.09.2010 15:30

Liste der Anhänge anzeigen (Anzahl: 1)
Ein Beispiel wie man eine eigene "Location" anlegt. Man sieht darin auch den Nachteil der fixen Stadt-Location.

Skywalker077 18.01.2011 12:59

So, da mir befohlen wurde, hier meine Frage weiter zu stellen werde ich das mal tun.

Zitat:

Wo steht denn da etwas von Chat?
Nur weil das Beispiel vom Buliwyf nicht auf exakt deinen Begehr gemünzt ist, heisst es ja nicht das der zugrundeliegende Befehl falsch ist.
Wollen wir uns doch mal zusammen den Befehl anschauen

Code:

_gridPos = mapGridPosition player
Der Return Wert der in _gridPos gespeichert wird ist ein String.
Jetzt kommt die Master Frage, die ich auch schon im anderen thread gestellt habe.
Wie bekomm ich den Wert OHNE "hint","hint silence" oder einen Sidechat zu benutzen ausgegeben?
Die Methode die dieser befehl für mich eröffnet ist das Selbe wie in dem anderen Thread schon vorgeschlagen.
Eintippen->Spiel starten-> Wert ablesen der eingeblendet wird-> Aufschreiben.
Wie dumm ist das?:stupid:
In dem anderen Thread war die Frage, ob es nicht einfacher geht. Weil dieser Thread extrem ausgeschweift ist im Thema und eben NICHT das behandelt was ich will.

Wenn es doch anders geht mit diesem Befehl, dann Bitte ich um aufklärung und entschuldigung.:daumen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119