HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-187/)
-   -   Combobox mit online players? (https://hx3.de/editing-scripting-187/combobox-online-players-24029/)

Keksi43 02.07.2014 22:04

Combobox mit online players?
 
Servus Leute,
ich binns mal wieder. :wave:

Ich habe folgendes vor:

Ich plane einen Dialog bei dem man in einer Combobox den Namen eines online anwesenden Spielers auswählt, einen Button zum bestätigen betätigt, und sich somit ein Bild das sich danenben befinet, nach dem ausgewählten namen richtet. Das Bild ist an dieser Stelle übrigens ein Rendertarget das die sicht des Spielers anzeigt.

Wie man ne cam scriptet weiß ich so halbwegs, nur leider habe ich keine Ahnung wie ich die Combobox mit den Namen hinbekomme.

Ich hoffe es findet sich jemand der mir da helfen kann.
Falls ihr irwo noch ne olle Example Mission rumliegen habt, nehme ich die auch gerne und ließ mich da selbst rein.

Danke im Vorraus
Keksi43

Drunken Officer 03.07.2014 03:49

Nimm doch das CamScript von Tedje (oder so ähnlich). Das hat hier in HX und bei BIS eingestellt.

Ansonsten ein Script ausführen lassen, welches ausliest, welcher Wert in der Box gerade angeklickt wurde. Aus diesem Script heraus läßt du einen Display starten.
Dieses Script benötigt eine While Schleife und eine WaitUntil Bedingung.

Zusätzlich mußt du das Cam Script anziehen. Als Ziel mußt du die GLOBALE Varibale von deinem Dialog an das Cam Script übergeben, damit dieses weiß, welcher Spieler angeklickt wurde.

Keksi43 03.07.2014 06:01

Servus,
danke erstmal.
Aber wie kriege ich es hin das in der combobox immer die Spielernamen der Spieler die gerade auf dem Server sind angezeigt werden?
Den Spieler könnte das script ja über Übergabeparameter bekommen oder?
Sorry für mein Nooby Nooby

Keksi43

Drunken Officer 03.07.2014 11:41

Mit einem Array
https://community.bistudio.com/wiki/onPlayerConnected

Keksi43 03.07.2014 13:45

Ok,
das ist echt ganzschön kompliziert.:nachdenklich:

Ich glaube ich mach erstmal n paar leichtere Sachen und wage mich später wieder da dran.

Trotzdem :danke:

mfG. Keksi43

Vienna 04.07.2014 07:52

So kannst du dir zum Testen (z.B. über einen Funk-Auslöser) die im Spiel befindlichen Spieler anzeigen lassen:

Code:

spielerListe = [];
{if (isPlayer _x) then {spielerListe=spielerListe+[_x]}} forEach playableUnits;
hint str spielerListe;

playableUnits wird nur im Mehrspielermodus bestückt. Im Editor zum Testen musst du allUnits nehmen.

Drunken Officer 04.07.2014 14:10

Ko Keksi, dass klinglt alles schlimmer als es ist.

Du definierst deinen Dialog und die ComboBox. Mit lbCurSel kannst du auslesen, welcher Wert angeklickt wurde. Praktischerweise ist der erste Wert im 0, so dass es beim Array keine Probleme gibt.
Entweder du läßt das Script welches den Wert ausliest syncron laufen zum Dialog oder aber du hast einen Knopf "Guggn" der dann das Script anzieht.

Merke: Erst auslesen, dann Dialog schliessen

Desweiteren definierst du ein Display. Das wird das Ziel für deine Rendertarget-Geschichte.
Und jetzt noch Array. Baue den Baustein von Vienna einfach mit ein.

Hier mal eine statische Varinate, wenn du z.B. einen Knopf im Dialog hast.
Ansonsten die syncrone Variante, mit der While und Waitunitl bedingung.

Angenommen das ComboFeld hat die IDC = 110;
Code:

waituntil {Dialog};
spielerListe = []; // das ist der erwähnt array
{if (isPlayer _x) then {spielerListe=spielerListe+[_x]}} forEach playableUnits;
abbildung = spielerListe  select (lbCurSel 110);
[abbildung] execVM "camscript.sqf"

Der Wert Abbildung entspricht jetzt dem gewählten Spieler und ist im Camscript select 0.
Du mußt den Wert nicht übergeben, da er Global ist, kannst du aber.

CamScript ist nicht einfach! Ist nicht nur ein AttachBefehl. Du mußt die Kopfbewegung auslesen. Deswegen greife auf das vorhandene zurück.
Dann mußt du natürlich die blau markierte Zeile ändern. Lies dir die Parameter durch, die er braucht.

Angenommen du gehst weiter deinen eigenen Weg.
Du mußt die Camera an die Figur (select 0) [was der Spieler ist] anheften.
So wie das Klang, willst du die Ego Perspektive des Spielers haben. Dann darfst du nicht den Spieler als CamTarget nehmen.
Wenn es eine Abbildung der Figur werden soll, dann mußt die Camera nicht anheften sonder einfach den Spieler als Ziel nehmen.
Dann richtetst du dein CamScript ein. Ist diese Einrichtung/Ausrichtung erfolgt läßt du das o.g. Display öffnen. Kannst du gleich mit einem Schwung durchdefinieren. Ist ja sowieo eine eigene Klasse.

Und auf dieses Display übeträgst du das CameraBild. Denn bei einem offenen Dialog, kannst du die Puppe nicht bewegen.

Das ganze kann so aussehen, da habe ich beide Elemente verbaut.
Schau mal bei 6 min rein. Bei 6:3x min siehst du das da ein Camscript läuft und die Einheiten filmt.
https://www.youtube.com/watch?v=uDTPg6kSBsI

Keksi43 05.07.2014 16:20

Ok,
danke Drunki und Vienna.
Ich werd mich die Tage nochmal dransetzen und schaun was ich so gesch***en krieg.
Ich hab mich jetzt dafür entschieden erstmal ne 3rd Person cam zu machen.
Der Display kram wird von mir zwar noch n bischen Recherche benötigen.
Dialogs sind einfach nochmal ne ganz andere Schublade als Scripts.
Danke und Gruß aus den Bergen,

Keksi43

*edit:
Bräuchte noch mal Hilfe mit lbCurSel.
Ich habe mal n kleinen Test gemacht, aber er sagt mir im Hint immer nur "meine Auswahl: [-1]".
hier mal die Desription.ext:
Code:

class Testbox
{
        idd = -1;
        movingEnable = true;
        onLoad = "_this ExecVM 'test.sqf'";
       
                class Controls
                {
                        class auswahlbox: RscCombo
                        {
                                idc = 2100;
                                x = 0;
                                y = 0.1;
                                w = 0.3;
                                h = 0.2;
                        };
                        class button_next: RscButton
                        {
                                idc = 1602;
                                x = 0.45338 * safezoneW + safezoneX;
                                y = 0.43203 * safezoneH + safezoneY;
                                w = 0.0114583 * safezoneW;
                                h = 0.0109957 * safezoneH;
                                action = "[lbCurSel 2100] execVM ""hint.sqf""; closeDialog 0;";
                        };

Die test.sqf:
Code:

{ _index = lbAdd [2100, _x];} forEach ["auswahl 1","auswahl 2","auswahl 3"];
Die hint.sqf:
Code:

_aus = _this select 0;

Hint Format ["meine Auswahl: %1", _aus];

Was hab ich verhaun?
Und wie würde n if command damit aussehen? So?
Code:

if (_aus == "auswahl 1") then {};

Drunken Officer 06.07.2014 11:47

Bau es doch anders auf.

In deine TEst SQF erstellst du einen Array
Ausi = ["aw1", "aw2", aw3"];
{lbadd [2100, _x] }forEach Ausi; //EDIT: Klammer eingefügt
bei deinem Knopf läßt du das hint script OHNE Array anlaufen also
action = "[] execVM ""hint.sqf""; closeDialog 0;";
Ausi ist eine globale Variable!


In deinem Hint.sqf schreibst du das:
hint format ["%1", ausi select (lbcursel 2100)];

(übersetzte heißt das: Schreibe Array mit Variable Ausi und wähle gewählten Datensatz im Vergleich mit dem angeklickten Feld welches die ID 2100 hat

Warum bekommst du -1 ?!
dein LB Add macht nichts anderes, als deine Combobox mit schriftzeichen zu versehen! Da ist noch kein Datencontainer erstellt wurden.
Und entweder du arbeitest mit einen Array oder du verarbeitest die Zeichen aus der Combobox
https://community.bistudio.com/wiki/lbData

Dieser liefert dir einen String aus.

Benötigst du aber später einen Wert, der kein String ist, dann... frag mal Vienna ob es da eine Möglichkeit gäbe diesen Wert von einem String zu Datensatz zu ändern.

Keksi43 06.07.2014 13:50

Servus,
wenn ich den Dialog lade sagt er mir immer:
nicht definierte Variable im Ausdruck _x
warum?

Ps:
Gibt es eine Möglickeit zu sagen, dass:
Wenn aw1 ausgewält starte Script für aw1.
Wenn aw2 ausgewält starte Script für aw2.
Wenn aw3 ausgewält starte Script für aw3.
(jedoch erst nachdem der GO Button gedrückt wurde)

Danke im Vorraus,
Keksi43

Drunken Officer 06.07.2014 17:17

sicherlich gibt es das. ich würde es mit switch-do probieren.


Ich hatte einen Fehler gepostet. forEach benötigt doch eine Klammer. Deswegen
{lbadd [2100, _x] } forEach Ausi;

Keksi43 06.07.2014 20:27

Servus,
wenn du jetzt vllt. noch n Beispiel für switch do hast, lass ich dich in Ruhe.:D

Mfg.
Keksi43

Buliwyf 06.07.2014 20:42

Lauter Beispiele... wie so oft: >> switch <<

Keksi43 06.07.2014 20:53

Das habe ich mir natürlich auch achon angeschaut,
aber ich kriege das ganze in Verbindung
mit der Combobox nicht zum laufen .

Ps:
In der hint.sqf ist Ausi klein geschrieben;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 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