Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 28.10.2011, 14:58   #1 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard Ampelschaltung

Hallo.

Ich habe ein 3D Model. In diesem befindet sich ein großes Tor und daneben eine Ampel.
Diese Ampel soll rot leuchten solange das Tor geschlossen ist oder es im Begriff ist, sich zu öffnen oder zu schliessen.
Die Ampel darf nur grün leuchten wenn das Tor offen ist. (animation = 1)

Die hiddenSelections funktionieren alle. Irgendetwas stimmt mit meinen Script nicht, da ich immer nur eine Farbe angezeigt bekomme. Je nach dem wie ich das script schreibe, wird immer die zuletzt definierte Farbe angezeigt.

der EventHandler in der configg.cpp
Code:
class EventHandlers
          {
               init = "_this exec ""\polizei\data\garagenlicht.sqs""; ";
			   };
Ich starte es, weil ich von Anfang an die Farbe benötige. Würde ich den settexture-befehl erst im Statement aufrufen, würde ich auch erst dann eine Farbe bekommen.
Hier ist mein script:

Code:
hint "los gehts";
_blah = _this select 0;
_anim = _this animationPhase ""door_pb_aussenhof"";
{
while {_anim != 1 and _anim !=0} do
{
if(_anim < 1) then {
_blah setobjecttexture [0, "\polizei\grafik\lichtrot.paa"]
}else{
_blah setobjecttexture [0, "\polizei\grafik\lichtgruen.paa"]
};
};
};
Kann mir jemand helfen?

Geändert von AHTNTEPPOP (28.10.2011 um 20:32 Uhr).
Drunken Officer ist offline  
Alt 28.10.2011, 15:22   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Grundsätzlich versuchst du hier erstmal ein .sqs zu öffnen in welchem aber .sqf scriptsprache enthalten ist. Ich hab eigentlich keine ahnung von object scripting an selbst erstellten objekten ... habe ich noch nie gemacht. aber nach meinem verständniss sollte das so aussehen:

Aufruf:
Code:
class EventHandlers {
    init = "[_this] execVM '\polizei\data\garagenlicht.sqf';";
};

Script:
Code:
private ["_blah","_anim","_str"];
hint "los gehts";
_blah = _this select 0;
_anim = _blah animationPhase 'door_pb_aussenhof';

waitUntil {_anim == 1 || _anim == 0};
_str = switch (true) do {
    case (_anim == 1) : {'\polizei\grafik\lichtrot.paa'};
    case (_anim == 0) : {'\polizei\grafik\lichtgruen.paa'};
};
_blah setobjecttexture [0, _str];


wie wurden denn deine anim phasen definiert? wo ist die ausgangslage des tores? (oofen/geschlossen) animation speed? ich bin mir mit dem WaitUntil nicht sicher... das ist bestimmt nicht richtig die sache zeitabhängig zu machen.



edit: noch ein stichwort: hiddenSelection?
__________________
Niemand hat die Absicht eine Tüte zu bauen!
​​​​​​​
___<<<A3 Wounding System>>>___

Geändert von Pfandgiraffe (28.10.2011 um 15:25 Uhr).
Pfandgiraffe ist offline  
Alt 28.10.2011, 15:55   #3 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Die hiddenSelection funktioniert. es liegt halt am script. Ich werde deine Variante jetzt gleich einmal probieren. Sieht schon mal recht interessant aus.

initPhase=0 (ausgangslage, Tor geschlossen)
initPhase=1 (endlage, Tor offen)
animPeriod=7
Drunken Officer ist offline  
Alt 28.10.2011, 19:45   #4 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Du nimmst einfache, dann aber doppelte Anführungszeichen.

Versuche einmal dir anzeigen zu lassen was die Variable _anim enthält (fette Zeilen einfügen, falls das so erlaubt ist).

Zuerst einmal nur die erste fette Zeile. Wenn dort ein brauchbarer Wert rauskommt, dann die zweite Zeile einfügen.

Code:
hint "los gehts";
_blah = _this select 0;
_anim = _this animationPhase ""door_pb_aussenhof"";
player groupChat format['_anim = %1',_anim];
{
 while {_anim != 1 and _anim !=0} do
  {
   player groupChat format['_anim = %1',_anim];
   if(_anim < 1) then
    {
     _blah setobjecttexture [0, "\polizei\grafik\lichtrot.paa"]
    }
   else
    {
     _blah setobjecttexture [0, "\polizei\grafik\lichtgruen.paa"]
    };
  };
};
Vienna ist offline  
Alt 28.10.2011, 20:33   #5 (permalink)
User gesperrt
5000 Beiträge
 
Registriert seit: 20.10.2009
Ort: Jetzt auch im BIF
Alter: 39
Beiträge: 9.163
Standard

Ich hab mal eben aus Ameplschaltung Ampelschaltung gemacht.
AHTNTEPPOP ist offline  
Alt 29.10.2011, 00:07   #6 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Da es mein erstes script ist und es immer noch nicht klappt.
Ich arbeite mit Nodpad ++

Muss eine *.SQF eine bestimmte codierung haben?

Die config.cpp ist in UTF-8. Meine *-sqf ist in ANSI. Nicht das da irgendwo der Fehler steckt.
Drunken Officer ist offline  
Alt 29.10.2011, 00:27   #7 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

Zitat von Drunken Officer Beitrag anzeigen

Da es mein erstes script ist und es immer noch nicht klappt.
Ich arbeite mit Nodpad ++

Muss eine *.SQF eine bestimmte codierung haben?

Die config.cpp ist in UTF-8. Meine *-sqf ist in ANSI. Nicht das da irgendwo der Fehler steckt.

Nein, keine Sorge, das ist egal. Du kannst übrigens die Kodierung in Notepad++ problemlos im gleichnamigen Menü nach belieben umstellen und unter Einstellungen auch vorgeben dass alle neuen Dateien die Du damit erstellst automatisch eine bestimmte Kodierung erhalten.

Ein Vorteil der UTF-8- Kodierung ist es, dass damit bei Verwendung von Umlauten bei Ausgaben in ArmA2 (hint, sidechat, cutText, Actionsmenüs, usw.) diese im Game auch so ausgegeben werden. Bei ANSI- Kodierung werden die Umlaute bei Ausgaben im Game nicht angezeigt.
Abgesehen davon funktionieren .sqf / .cpp Files in beiden Kodierungen (ANSI / UTF-8) problemlos.
Asso-Loki ist offline  
Alt 29.10.2011, 10:09   #8 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

Die while-Bedingung ist Murks...
__________________

TeRp ist offline  
Alt 29.10.2011, 10:25   #9 (permalink)
10 Jahre hx3
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Saint
 
Registriert seit: 04.01.2008
Alter: 50
Beiträge: 314
Standard

Zitat von TeRp Beitrag anzeigen

Die while-Bedingung ist Murks...

Lieber TeRp,

dann laß uns doch an Deiner unendlichen Weisheit und Güte teilhaben, und erhelle den Horizont für uns Geschmeiß...
__________________
"Um nirgends eine gähnende Leere zu lassen, wollen wir uns vorstellen, daß aller Orten und zu jeder Zeit etwas Wahrnehmbares vorhanden ist. Um nicht Materie oder Elektrizität zu sagen, will ich für dieses Etwas das Wort Substanz brauchen."

Hermann Minkowski
Saint ist offline  
Alt 29.10.2011, 12:27   #10 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

Mimimi. Na gut, noch ein heißer Tipp.

Sobald die While-Bedingung nicht erfüllt => While-Schleife wird beendet.

Den Rest müsst ihr schon selber rausfinden.
__________________

TeRp ist offline  
Alt 29.10.2011, 18:43   #11 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Zitat von TeRp Beitrag anzeigen

Mimimi. Na gut, noch ein heißer Tipp.
Sobald die While-Bedingung nicht erfüllt => While-Schleife wird beendet.
Den Rest müsst ihr schon selber rausfinden.

Könntest du mir einen Tipp mehr geben. Ich bin blutiger Anfänger, was das scripten angeht.
Ich hatte an eine IF THEN ELSE Schleife gedacht. ICh glaube das muss mittels loop wiederholt werden. Wenn ich den Befehl richtig verstanden habe.
Drunken Officer ist offline  
Alt 30.10.2011, 00:52   #12 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

Bei Deinem Eventhandler in der config.cpp müsste vermutlich ein "this" und nicht ein "_this" verwendet werden. Check das mal ab, indem Du zu Beginn des Scripts folgende Zeile setzt (Viennas Tipp)
Code:
player groupChat format ["%1", (typeOf _this)];
. Wird tatsächlich das benötigte Objekt übergeben? (typeOf liefert den Class- Namen des Objekts zurück. Da Du die Classe ja selbst erstellt hast in der config.cpp, wirst Du sofort wissen, ob dass übergebene Objekt tatsächlich Jenes ist welches Du brauchst).
Nachdem Du sicher bist dass das klappt, kannst Du dieses Zeile wieder aus dem Script löschen.

Verwende sqf statt sqs, sonst klappt es mit den im Script verwendeten Befehlen nicht (siehe Psychobastards Hinweis).
Code:
class Eventhandlers
    {
    init = "this execVM '\polizei\data\garagenlicht.sqf';";
    };
garagenlicht.sqf
Code:
hint "los gehts";
//das Tor ist zu Beginn ja geschlossen, daher ist die Ampel zu beginn auch auf rot
_this setobjecttexture [0, "\polizei\grafik\lichtrot.paa"];
//für Dauerbetrieb wird eine while- Schlaufe gestartet.
// "true" ist eine sehr heikle Bedingung für eine Schlaufe, aber hier sollte es klappen und was anders kommt mir gerade jetzt nicht in den Sinn...es ist schon spät
while {true} do
    {
    // warten bis das Tor ganz offen ist, erst dann wird auf grün geschalten
    waitUntil {(_this animationPhase "door_pb_aussenhof") == 1};
    _this setobjecttexture [0, "\polizei\grafik\lichtgruen.paa"];
    // warten bis sich das Tor beginnt zu schliessen um auf rot zu schalten
    waitUntil {(_this animationPhase "door_pb_aussenhof") < 1};
    _this setobjecttexture [0, "\polizei\grafik\lichtrot.paa"];
    //nun springt das Script wieder an den Beginn der while- Schlaufe und wartet wieder darauf dass das Tor ganz offen ist.
    };
Asso-Loki ist offline  
Alt 30.10.2011, 00:54   #13 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Hast du nicht ausprobiert was ich dir in Post #4 vorgeschlagen habe?

Du musst einmal prüfen was in der Variablen steht, die du als Bedingung für die while Schleife verwendest.

Dann wirst du vielleicht auch draufkommen, dass du diese Variable in der Schleife aktualisieren musst. Sonst kommst du aus der Schleife nicht mehr raus.
Vienna ist offline  
Alt 30.10.2011, 02:04   #14 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Vienna, ich habe dein Vorschlag ausprobiert. ich habe die es ausprobiert. Leider blieb das script "hängen". Ich habe zum testen ein zählscript (hint, sleep) eingefügt, dies wurde schon nicht mehr ausgeführt.

Ich werde heute den Vorschlag von "Asso-Loki" prübieren.
Drunken Officer ist offline  
Alt 30.10.2011, 10:08   #15 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Wenn in dieser Routine nur Befehle wie in einer "echten Funktion" zulässig sind, dann wird auch die while-Schleife auf 10000 Durchläufe begrenzt sein.

In einer "echten Funktion" sind Befehle, welche die Funktion stoppen (wie z.B. sleep, waitUntil) und Befehle die die Funktion "verlassen", nicht erlaubt. While-Schleifen sind auf 10000 Durchläufe begrenzt. Das alles um die Game-Engine stabil zu halten, da solche Funktionen den Programmlauf sonst "blockieren". Da sind auch Kommentare mit // nicht erlaubt.

Das würde bedeuten, es ist nicht möglich ein solches "Skript" an dieser Stelle einzubinden.

Ist aber nur eine Vermutung. Wie das in einem 3D Model zu programmieren ist, da kenne ich mich nicht aus.
Vienna ist offline  
Alt 30.10.2011, 10:30   #16 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 01.06.2009
Beiträge: 103
Standard

@ Drunken Officer

Es ist Morgen, ich bin ausgeschlafen und entsprechend kann ich auf meinen vollen IQ von 2 (aufgerundet) zurückgreifen.

Ich würde die ganze Sache ganz anders anpacken. Die Zuweisung der Ampellichttextur würde ich ganz normal in der config.cpp des Modells unter class Useractions - class OpenDoor / CloseDoor (oder wie immer Du dieses Classes benannt hast) - statement erledigen.

Bei der class Eventhandlers würde ich dann den init nur dazu verwenden, die Ampellichtextur auf rot zu stellen, damit von Anfang an das passende Licht angeht.

Ich denke das ist die sauberste Lösung.

Edit:
Beispiel
Code:
class Eventhandlers
    {
    init = "this setobjecttexture [0, '\polizei\grafik\lichtrot.paa'];";
    };
Unter class Useractions - class zum öffnen des Tores
Code:
statement = "this animate ['door_pb_aussenhof', 1]; this setobjecttexture [0, '\polizei\grafik\lichtgruen.paa'];";
class zum schliessen des Tores
Code:
statement = "this animate ['door_pb_aussenhof', 0]; this setobjecttexture [0, '\polizei\grafik\lichtrot.paa'];";
Edit:
@ Vienna
Deine Sorgen sind unbegründet. Wohl verwendet das Script den gleichen Syntax wie eine Funktion (sqf), aber es wird eben als Script (execVM) und nicht als Funktion (call / spawn) benutzt. Deshalb sind sleep / waituntil kein Problem, ebenso wenig wie dabei die Kommentare (//) stören, welche er ja hoffentlich eh daraus gelöscht hätte, da sie ja nur quasi als einmalige Erklärung gedacht sind.
Der Status eines Script bleibt unberührt von seinem Aufruf- Ort. Es ist also egal, ob ein Script von einem Auslöser, einer Objektinitzeile, einem anderen Script oder eben einer Modell- config aus gestartet wird.
Die while- Schlaufe würde auch gemäss meines Info- Standes "bloss" 10000 mal durchlaufen, was aber im Kontext dieser Problemstellung nahezu irrelevant ist, da es extremst unwahrscheinlich ist, dass das Tor innerhalb eines Szenariums 10000 mal geöffnet / geschlossen wird.

Abgesehen davon finde ich aber - wie oben schon dargelegt - die bisher hier verfolgten Lösungsansätze - natürlich meinen inklusive - Blödsinn. Selbst wenn eine der bisher vorgeschlagenen Script- Lösungen zum funktionieren kommen würde, fände ich es einen Murks, unsauber, unbefriedigend.

Geändert von Asso-Loki (30.10.2011 um 11:14 Uhr).
Asso-Loki ist offline  
Alt 30.10.2011, 11:24   #17 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

Wenn ich es im Statement aufrufe, dann wird die Farbe sofort gewechselt. Also würde es schon grün sein, wenn es im Begriff ist zu öffnen. Diesen Versuch habe ich schon hinter mir.

Ich schraube mal noch bissel dran rum. Versuch macht klug.
Drunken Officer ist offline  
Alt 30.10.2011, 11:36   #18 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Zitat von Asso-Loki Beitrag anzeigen

..., aber es wird eben als Script (execVM) und nicht als Funktion (call / spawn) benutzt. ...

Wenn es als "normales Skript" behandelt wird, dann ist schon seltsam warum keine Textausgaben möglich sind.
Vienna ist offline  
Alt 30.10.2011, 12:04   #19 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.109
Standard

kann man diesen "waituntil" befehl auch ins Statement einarbeiten? Dann sollte die Varinate von Asso-loki funktionieren
Drunken Officer ist offline  
Alt 30.10.2011, 12:30   #20 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Eher nicht, aber probier es aus. Speichere aber zuvor alles ab! Zumindest Arma wird einfrieren (oder schließen), wenn es nicht erlaubt ist.
Vienna ist offline  
 


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


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 117 118 119