Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 04.11.2013, 19:49   #1 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard Speed

Hey!

Probiere grade mich in das scripting von Arma reinzufuchsen, weil es einiges leichter macht.
Jetzt probiere ich grade ein bestimmten Sound abzuspielen, wenn der Spieler in einem bestimmten Fahrzeug eine gewisse Geschwindigkeit erreicht hat.
Auf der BIS WIKI habe ich diesen Eintrag dazu gefunden:

http://community.bistudio.com/wiki/speed

Jedoch weiß ich nicht, was dass mit dem Fragezeichen aufsich hat.

"? (speed _truck1) >= 100 : hint "You're going too fast!""

Frage mich sowieso, wieso die ein Fragezeichen in einem Beispiel setzen. Ist ja gar nicht verwirrend für Anfänger!


Wozu das Fragezeichen ist weiß ich jedenfalls nicht. Habe den Script jetzt mal in eine Testmission integriert und die Aussage "You're going to fast" kommt andauernd. Egal wie schnell ich bin.

Da ich den Script Command von einer offiziellen BIS WIKI Seite habe, frage ich mich wa sich als Anfänger falsch mache.

Habe auch schon ein wenig rumprobiert. Also das > verändert usw..

Geändert von JSR (04.11.2013 um 20:17 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 20:38   #2 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 47
Beiträge: 1.930
Standard

? bedeutet if
: bedeutet then

__________________
Buliwyf ist gerade online   Mit Zitat antworten
Alt 04.11.2013, 20:39   #3 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Das ist offensichtlich noch ein "altes" sqs Script.
Das "?" stand für das "wenn", ist also das Gleiche wie das "if" in einem sqf Script.

Sieh mal hier ...
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 20:43   #4 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Erstmal danke für die schnellen Antworten und danke für den Link!

Okay verstehe! Also muss die Config so aussehen?

Zitat:

_vehicle=vehicle (_this select 0);

if (speed _vehicle) >= 100 then {hint "You're going too fast!"};


PS: Funktionieren tut es mit dieser Eingabe in die Script.sqf nämlich nicht.

Mir gehen die TrynError Versuche langsam aus, weil mir nichts mehr einfällt.

Geändert von JSR (04.11.2013 um 20:53 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 20:54   #5 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Völlig korrekt ...

Du kannst aber auch die Abfrage etwa in einem Auslöser direkt durch Eingabe des Fahrzeugnahmes abfragen.
Also wenn dein Fahrzeug den Namen Truck1 hat dann einfach:

als Bedingung: (speed Truck1) >= 100
bei Akt: hint "You're going too fast!"

oder in einem Script, etwa einer Film-Zwischensequenz, Intro, Outro oder was auch immer:
if (speed Truck1) >= 100 then {hint "You're going too fast!"};

Geändert von JanIs (04.11.2013 um 21:01 Uhr).
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:01   #6 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Mh, wieso funktioniert es nicht?

Vielleicht weil _Vehicle=Vehicle (ich probiere es im Little Bird aus) nicht präzise genug definiert ist für den Script?
Muss ich noch woanders irgendwas zuweisen?

PS: @JanIs,

Ich will es eigentlich weiter über SQF machen, weil ich später wenn ich mehr Erfahrung habe, den Script über eine Config aktivieren will.
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:08   #7 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Erstmals siehe meine Antwort über deiner Frage.

Zweitens kommt es drauf an wie du das Script aufrufst.
Wenn du es aufrufst, dein Littlebird aber langsamer ist, dann kann sich ja auch nichts tun, da die Bedingung (schneller oder gleich 100 km/h) zu fliegen noch nicht zutrifft.
So gesehen müsstest du es entweder in eine Auslöser packen oder die Bedingung oder Abfrage im Script in einer Schleife laufen lassen damit die hint-Meldung ausgegeben kann, wenn dann tatsächlich die Geschwindigkeit erreicht oder überschritten wurde.

Ich hoffe das war verständlich genug.

Greetz
Jan
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:12   #8 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Ja aber ich erreiche ja die Geschwindigkeit über 100. Habe sie jetzt auf 50 verändert. Habe halt eine Testmission mit einem LittleBird erstellt.

Dein Post habe ich übrigens gesehen aber ich möchte das lieber doch gerne in einer SQF machen, weil ich dadrauf später angewiesen bin. Möchte nämlich über die Configs Scripte aktivieren. Wie in einem Addon.

Und "If (speed _vehicle) >100 then {hint "Test"}; ist doch die Script Schleife, die du meinst, oder?
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:22   #9 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Pass mal auf:

1. Erstelle das Script mit folgendem Inhalt:
Code:
_vehicle = vehicle (_this select 0);
while {speed _vehicle < 50} do {
    sleep 1;
};
hint "You're going too fast!";
Dieses rufst du per Eingabe in die Initzeile des Littlebirds folgendermaßen auf:
gogo=[this] execVM "name_deines_scriptes.sqf"

Jetzt prüft er in einer Schleife von einer Sekunde ob die Geschwindigkeit von 50 km/h erreicht ist. Wenn ja springt das Script aus der Schleife und gibt die Hint-Meldung aus.

Alternativ ginge auch statt der Sekundenschleife ein
Code:
waitUntil {speed _vehicle > 50};
Dabei wird eigentlich statt der Abfrage alle Sekunden in einem Millisekundenabstand geprüft ob die Bedingung erfüllt ist.
In beiden Fällen pausiert das Script bis die Geschwindigkeit überschritten wurde ...


So wie in deiner Zeile KANN es nicht funktionieren, da in dem Moment, indem das Script die Abfrage erstellt, die Geschwindigkeit ja nicht erreicht sein kann und dementsprechend die Meldung wegen der nicht zutreffenden Abfrage nicht ausgegeben wird.
Außer du rufst das Script erst auf wenn du über 100 fliegst. Dazu benötigst du aber wiederum einen Auslöser ;-)

Geändert von JanIs (04.11.2013 um 21:25 Uhr).
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:30   #10 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Okay cool, der erste Test hat funktioniert. War über 50 und dann hats funktioniert! Werde jetzt erstmal ein wenig rumprobieren damit, danke für die Bereitschaft zu helfen! Super.

Muss mich da erstmal richtig reinfuchsen und die Logik und die Befehle verstehen. Das dauert natürlich ein wenig.

Was bedeutet denn eig. "(_this select 0)"?
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:38   #11 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Ich hoffe ich verzapfe jetzt keinen Schmarrn, aber _this select 0 steht für das erste Argument, welches das Script ausführt.
Im vorliegenden Fall das [this] oder [Littlebird].
Begonnen wird nicht mit 1 sondern immer mit 0. Beeinhaltet das Script ein weiteres Argument, beispielsweise die Geschwindigkeit, wäre das dann _this select 1

Code:
_vehicle = vehicle (_this select 0);
_maxtempo = _this select 1;

while {speed _vehicle < _maxtempo} do {
	sleep 1;
};
hint "You're going too fast!";
aufgerufen dann als gogo = [this,100] execVM "dein_script.sqf";


Das Ganze macht aber nur Sinn, wenn das Script für mehrere Fahrzeuge verwendet wird. Bei einmaliger Verwendung in einer Filmsequenz oder dergleichen genügt eigentlich wie oben schon angeführt die direkte Ansprache per
Code:
while {speed littlebird1 < 100} do {     
    sleep 1; 
}; 
hint "You're going too fast!";

Ich denke aber, du hast jetzt das Prinzip der while-Schleife verstanden und auch, warum dein Script die Hint-Meldung nicht ausgegeben hatte.

Geändert von JanIs (04.11.2013 um 22:00 Uhr).
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:42   #12 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Okay, also eine Art Inhaltsverzeichnes für Variabeln?


Ja, so zum Teil schon. Mir ist zwar klar was du meinst aber das If und Then Prinzip ist seitdem etwas unverständlich für mich.
Für mich hieß es

Falls _vehicle eine Geschwindigkeit über 50 KmH erreicht, so hint "Text";

Aber While und Do sind also allgemein für Schleifen verantwortlich, oder?
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:51   #13 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Ja genau.

Du musst dir einfach folgende Situation vorstellen:

1. Du rufst dein Script am Beginn der Mission oder mittels Auslöser auf
2. Dein Script fragt nach ob eine Bedingung zutrifft
3. Wenn ja --> Hint, wenn nein passiert logischerweise gar nichts.

Da du keine Schlaufe hattest, die Geschwindigkeit beim Start des Scripts jedoch niedriger war, konnte auch keine Meldung kommen.
Aus dem Grunde die Schlaufe damit das Script so lange läuft und warten kann, bis das Argument eintritt.

Praktisch wie ein Auslöser der die Hint-Meldung ja auch erst ausgeben wird, wenn die Geschwindigkeit tatsächlich erreicht wurde. Die Prüfung der Bedingung im Auslöser läuft ja auch ständig im Hintergrund ...
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:55   #14 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Okay ich verstehe!
Nochmal Danke für deine Mühe.

Mein Ziel ist eigentlich über einen Script einen bestimmten Sound im Cockpit des LBs abzuspielen, sobald eine bestimmte Geschwindigkeit in einer gewissen Höhe erreicht ist. Bin seit über einem Jahr beschäftigt eine Sound Mod herzustellen und alleine und ohne Scripterfahrung ist das ganz schön mühsam, wenn man sich so manche Ziele gesetzt hat.
Deswegen finde ich es immer gut wenn mir hier geholfen wird.
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 21:58   #15 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 02.11.2010
Beiträge: 113
Standard

Na Bumm, da hast du dir ja was vorgenommen ...
Gleich einen Mod zu basteln finde ich schon als recht hochgestecktes Ziel.

Wünsche dir viel Glück und gutes Gelingen.
Viel Zeit und Geduld hast du ja offensichtlich, nachdem du schon so lange daran herumwerkelst.

Greetz
Jan
JanIs ist offline   Mit Zitat antworten
Alt 04.11.2013, 22:01   #16 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Ja und leider nie was rausgebracht.
Hab bestimmte Ziele und bin aufgrund der fehlenden Kenntnisse manchmal demotiviert oder weiß einfach nicht weiter.
Habe halt manchmal die Nase voll gehabt und dann aber doch immer wieder angefangen. Deswegen ist es mir manchmal schon peinlich hier nach Hilfe zu fragen.

PS: Danke!

Geändert von JSR (04.11.2013 um 22:04 Uhr).
JSR ist offline   Mit Zitat antworten
Alt 04.11.2013, 23:21   #17 (permalink)
50 Beiträge
 
Benutzerbild von JeeperCreeper
 
Registriert seit: 18.10.2013
Alter: 36
Beiträge: 64
Standard

Zitat von JSR Beitrag anzeigen

Erstmal danke für die schnellen Antworten und danke für den Link!

Okay verstehe! Also muss die Config so aussehen?

Zitat:

_vehicle=vehicle (_this select 0);

if (speed _vehicle) >= 100 then {hint "You're going too fast!"};


PS: Funktionieren tut es mit dieser Eingabe in die Script.sqf nämlich nicht.

Mir gehen die TrynError Versuche langsam aus, weil mir nichts mehr einfällt.
Hallo erstmal, da ich auch erst ungefähr vor einem Monat angefangen habe mit dem Scripten, würde ich Dir gerne einen Tipp geben der das Scripten um einiges leichter macht, falls Du ihn nicht schon kennst.
Wenn du deine Arma.exe mit dem angehängten Parameter "-showScriptErrors" startest, dann werden Dir sofort alle deine Scriptfehler die du im Script hast mit Angabe der Line angezeigt. Somit weisst du sofort wo der Fehler steckt und manchmal steht dort sogar was falsch ist.

Nun zu der if-Bedingung. Eine if-Bedingung erwartet zwingend ein Boolean Wert in den runden Klammern. Das heißt, entweder ein "true" oder ein "false".
Du hast jetzt hingeschrieben, wenn (geschwindigkeit _auto) >= 100 dann.....
Wie gesagt braucht die if-Bedingung einen Wahrheitswert in den Klammern. Und bei (geschwindigkeit _auto) kann ja kein Wahrheitswert rauskommen. Also müsstest du auch noch die Zahl mit rein nehmen in die Klammer und richtig wäre dann.
Wenn (geschwindigkeit _auto >= 100) dann....
So kriegst du ja ein "true" oder "false" raus.

Am besten du guckst mal hier rein. Da steht alles super genau beschrieben. Damit hab ich schon jede Menge gelernt, obwohl ich nix mit Programmieren am Hut hatte vorher. Da wird auch erklärt wie man sich auf der Wiki-Seite zurecht findet, wo die ganzen Befehle erklärt sind.
Ja dann mal Viel Erfolg noch
JeeperCreeper ist offline   Mit Zitat antworten
Alt 04.11.2013, 23:28   #18 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Danke für die Tipps und sehr vielen Dank für das Tutorial! Werde ein wenig rumprobieren und dann wieder Feedback hier geben! Thx!
JSR ist offline   Mit Zitat antworten
Alt 05.11.2013, 21:11   #19 (permalink)
JSR
500 Beiträge1000 Beiträge
 
Registriert seit: 29.10.2008
Beiträge: 1.189
Standard

Okay, soweit so gut!

Wenn ich das ganze wiederholen will... Sprich, der Spieler erreicht im LB die Geschwindigkeit 50, der Ton wird abgespielt, er geht mit der Geschwindigkeit runter auf 40 und dann wieder auf 50 und der Ton wird wieder abgespielt, muss ich dann die _i commands verwenden?

Mit while und do klappt zwar alles, der script bleibt aber einmalig. Bei nochmaligen überschreiten des Tempos passiert nichts mehr.
JSR ist offline   Mit Zitat antworten
Alt 05.11.2013, 23:41   #20 (permalink)
50 Beiträge
 
Benutzerbild von JeeperCreeper
 
Registriert seit: 18.10.2013
Alter: 36
Beiträge: 64
Standard

Ich weiss jetzt nicht wie du das mit dem Ton machst, aber hier mal ein Beispiel wie es ohne geht, gerade getestet klappt wunderbar mehrmals.

In die Init des Vehicles kommt das rein:
Code:
temp = [this] execVM "tempo.sqf";
Das Script heißt "tempo.sqf" und da rein kommt folgendes:
Code:
if (!isServer) exitWith {};
 
private ["_veh"];
 
_veh = _this select 0;
 
while {true} do
{
  if (speed _veh >= 50) then {hint "Du fährst zu schnell!"; sleep 5; hint ""}
};
Sobalt man jetzt mit dem Vehicle über 50 km/h kommt, kriegst du die Meldung für 5 Sek. eingeblendet. Über sleep kannst du die Meldung natürlich auch länger einblenden lassen.
Wenn du jetzt wieder unter die 50km kommst und nochmal drüber, kriegst du die Meldung wieder angezeigt.
JeeperCreeper ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
World of Tanks Snevsied Sonstige Genres & Themen 2402 10.03.2017 14:05
Arma 3 Beta Xeno Community 1083 11.09.2013 15:42
F-22 Raptor Tunen 8-) Clawhammer Mods & Addons 5 26.02.2013 14:59
RPM und Speed Faktor JSR Editing & Scripting 4 19.12.2012 22:33


Kontakt - HX3.de - Archiv - Nach oben

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