Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 19.10.2010, 17:59   #1 (permalink)
Newbie
 
Benutzerbild von Worgal
 
Registriert seit: 04.10.2009
Beiträge: 28
Standard 2 Fragen: bezügl. setObjectTexture u. einem AA-Script

Moin,
ich bastle zurzeit an einer Mission, an deren Anfang ein Briefing stattfinden soll, dazu habe ich eine Leinwand, auf welcher ich über den setObjectTexture-Befehl Grafiken anzeige. Dazu verwende ich außerdem den addAction-Befehl, damit ich die Bilder auswählen kann. Das Problem dabei ist, dass die Grafik dann nur bei mir auftaucht, aber nicht bei den anderen Clients, wodurch jeder selbst die Aktion ausführen müsste, was nicht so ganz das ist was ich wollte. Nun will ich also wissen, wie ich es hinbekomme, dass wenn ein Client die Aktion ausführt, die Grafik bei allen angezeigt wird.

Ich verwende 7 .sqf-Datein:
1.
Code:
_obj = _this select 0;

_diaMapID = _obj addAction ["Dia:Map","scripts\diashow\diamap.sqf",[_obj]];
_diaAAID = _obj addAction ["Dia:AA","scripts\diashow\diaAA.sqf",[_obj]];
_diaInfID = _obj addAction ["Dia:Inf","scripts\diashow\diainf.sqf",[_obj]];
_diaKonvoiID = _obj addAction ["Dia:Konvoi","scripts\diashow\diakonvoi.sqf",[_obj]];
_diaGuerID = _obj addAction ["Dia:Guer","scripts\diashow\diaguer.sqf",[_obj]];
2. [Dieses Script verwende ich 6mal für jedes Bild einmal (natürlich entsprechend angepasst)]
Code:
_obj = _this select 0;

_obj setObjectTexture [0,"pictures\lage_auf1_guer.paa"];
Mein zweites Problem besteht in einem weiteren Script für die Mission, dabei soll ein ZU-23-Geschütz in den Himmel feuern, wie eine Art Flak.
Dass funktioniert im Singleplayer auch ganz gut, nur im Multiplayer leider nicht. Ich wollte jetzt wissen wie ich das Multiplayer tauglich bekomme.

Hier das Script:
Code:
_gun = _this select 0;
_xPos = _this select 1;
_yPos = _this select 2;
_zPos = _this select 3;
_sleeptime = _this select 4;
_shots = 0;
_salvo = 0;

_gun doWatch [(getPos _gun select 0)+_xPos,(getPos _gun select 1)+_yPos,_zPos];

sleep _sleeptime;
while {alive _gun} do {
    while {_salvo<=4} do {
        while {_shots<50} do {
            _gun fire "2A14";
            sleep 0.01;
            _shots = _shots+1;
        };
        _gun addMagazine "1000Rnd_23mm_2A14_AP";
        reload _gun;
        sleep 5;
        _gun doWatch [(getPos _gun select 0)+_xPos,(getPos _gun select 1)+_yPos,_zPos];
        sleep 15;
        _shots = 0;
        _salvo = _salvo + 1;
    };
    _salvo = 0;
};
Gruß Worgal
Worgal ist offline   Mit Zitat antworten
Alt 19.10.2010, 18:51   #2 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

hallo,



zu deinem diaprojektor: ich empfehle dir folgendes...

erstelle dein actionmenü wie bisher, auch das mit den eigentlich recht umstäbndlichen 6 folgescripten. schreibe aber in das script welches über den actionbefehl ausgelöst wird nicht direkt den setObjectRexture befehl.
aktiviere stattdessen eine variable. z.b. so:

Code:
Action1 = true;
publicVariable "action1";
nun setzt du 6 auslöser auf die map. jeder auslöser darf nur einmal aktiviert werden. schreibe in die auslösebedingung
Code:
Action1
und als Aktivierung deinen zugehörigen setObjectTexture - Befehl.

...die lösung ist nicht besonders elegant, aber ich denke es ist wichtiger das du verstehst was da passiert. (und das wird dir auch wichtiger sein als ein ausgefeiltes komplett neues script)



...und denke daran vorher die 6 variablen in der init zu definieren, also so:
Code:
if (isServer) then {
Action1 = false;
Action2 = false;
//usw...
};




zu deinem 2. problem fehlt die auskunft wie du das script denn ausführst, bzw. es gestartet wird.




mfg
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 19.10.2010, 19:56   #3 (permalink)
Newbie
 
Benutzerbild von Worgal
 
Registriert seit: 04.10.2009
Beiträge: 28
Standard

Ok Danke für die Hilfe, ich werd das mal ausprobieren. Blöd ist nur,dass man die Textur dann leider nicht mehrmals laden kann, bedingt durch die "Einfach"-Trigger.
Worgal ist offline   Mit Zitat antworten
Alt 19.10.2010, 20:10   #4 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

...dann mach halt "Mehrfach"-Trigger?!
__________________
Buliwyf ist gerade online   Mit Zitat antworten
Alt 19.10.2010, 20:33   #5 (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

Datentransfer zu den Mitspielern oder Server erfolgt mit dem Befehl PublicVariable. Damit können auch Befehle Übertragen werden.

z.B. einen Skriptaufruf:

BefehlAnWest = {[2,"Hallo!"] execVM "TestSkript.sqf"}; publicVariable "BefehlAnWest"

Jetzt benötigt man auf den PCs noch einen "Empfänger", der den Befehl in der Variablen ausführt.
Das Ausführen geht so: call BefehlAnWest

Im Beispiel ist so eine Sende- und Empfangsanlage vorhanden.

Als "Sender" dienen Funk-Auslöser. Das Senden kann natürlich auch von einem Skript erfolgen.
"Empfangen" wird die Variable in einem Auslöser, der nach dem Ausführen der "Sendung" die Variable wieder zurückstellt, damit der "Empfänger" wieder empfangsbereit ist.

In deinem Fall könnte die "Sendung" so aussehen:

BefehlAnWest = {Objektname setObjectTexture [0,"pictures\lage_auf1_guer.paa"]}; publicVariable "BefehlAnWest"
Angehängte Dateien
Dateityp: zip Befehle_senden-utes.zip (1,9 KB, 49x aufgerufen)
Vienna ist offline   Mit Zitat antworten
Alt 17.11.2010, 16:03   #6 (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

Vienna, da wäre aber addPublicVariableEventHandler eine deutlich sinnvollere Möglichkeit zur Lösung des Problems.
__________________

TeRp ist offline   Mit Zitat antworten
Alt 17.11.2010, 16:33   #7 (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

Ist mit Auslöser einfacher, weil dadurch auch beim "Sendenden" der Befehl ausgeführt wird.
Vienna ist offline   Mit Zitat antworten
Alt 17.11.2010, 16:39   #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

Und was hindert dich daran, den Code einfach so auf dem "sendenden" Rechner auszuführen? So als einfache Scriptzeile.

Der Sinn von mehreren endlos laufenden Triggern erschließt sich mir auch nicht wirklich. Und man könnte auch statt mehrerer Triggern einfach die auszuführenden Clients bzw. den Server als Parameter mit übergeben.
__________________

TeRp ist offline   Mit Zitat antworten
Alt 17.11.2010, 22:31   #9 (permalink)
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 77
Beiträge: 6.547
Standard

*deleted*

Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels.

Geändert von Xeno (03.01.2014 um 09:13 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 17.11.2010, 22:37   #10 (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

Das ist mit den Auslösern für Anfänger einfach zu handhaben und verständlich, man braucht den Text nicht zweimal senden, und das "System" wird die Auslöser sicher leicht verkraften.

Viele Wege führen nach Rom!
Vienna ist offline   Mit Zitat antworten
Alt 18.11.2010, 17:18   #11 (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

Viele Wege führen nach Rom, ja.
Aber den Weg den man wählt kann man vorwärts- oder rückwärtsgehend beschreiten.

Wie auch immer, die Trigger-Lösung ist aus mehreren bereits aufgeführten Gründen nicht empfehlenswert.
Xeno hat da schon einen sehr guten Grund angesprochen, nämlich die Abstände, mit denen ein Trigger eine Bedingung überprüft. Hier kann es unheimlich leicht dazu kommen, dass Code-Befehle überschrieben werden bevor sie abgearbeitet wurden! Was das für Konsequenzen hat, sollte klar sein.

addPublicVariable ist die richtige Lösung, ob sie nun vllt etwas komplizierter umzusetzen ist oder nicht.
Ich sehe ehrlich gesagt kaum einen Unterschied zwischen
- mehrere Trigger bauen, Aktivierung und Deaktivierung eintragen
und
- in init.sqf schreiben: "varName" addPublicVariableEventHandler { call compile _this select 1 };
__________________

TeRp ist offline   Mit Zitat antworten
Alt 18.11.2010, 17:49   #12 (permalink)
Newbie
 
Benutzerbild von Worgal
 
Registriert seit: 04.10.2009
Beiträge: 28
Standard

Ist hier ja zu ner richtigen Diskussion ausgereif.

Also ich habe jetzt erstmal die lösung mit den Triggern übernommen, funktioniert auch, dauert halt nur kurz bis das bei den anderen Clients umgesetzt wird.

Aber wenn das mit addPublicVariable die bessere Lösung ist, wie müsste das dann aussehen?

Muss ich die Variablen, die ich nutze einfach nur wie von dir beschrieben in der init.sqf in den EventHandler einbinden und wäre dass dann immer der selbe befehl? Und wäre das die einzige Veränderung die vorgenommen werden muss?

Achso hat eigentl. jemand eine Idee warum das 2. Script (Flak-Script) nicht auf einem Server funktioniert?

Und könnte mir evt. wer veraten warum mein QRF-Script nicht funktioniert?
Code:
if (isServer) then {
    _veh = _this select 0;
    _BLU = _this select 1;
    if (_BLU!=tv) then {
        _grpleader = driver _veh;
        _grp = group _grpleader;
        [_grp,2] setWaypointPosition [position _BLU, 0];
    };
};
Und ja ich weiß das sind ne Menge Fragen.

Edit: Zu dem QRF-Script habe ich den Fehler vermutlich gefunden.

Geändert von Worgal (18.11.2010 um 17:53 Uhr).
Worgal 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
vergangene Zeit in einem Script Pfandgiraffe Editing & Scripting 2 10.10.2010 15:46
marker über script erzeugen hypercop Editing & Scripting 2 28.08.2010 22:40
Improved Bullet Cam Script miromanu Editing & Scripting 3 21.08.2010 01:01
Heal/Repair Script / Einheiten in einem Radius zufällig generieren lassen Noobfire Editing & Scripting 8 06.08.2010 15:22
Bomb-Cam Script IntelQ9550Reaktor Editing & Scripting 3 02.08.2010 13:49


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