PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Combobox mit online players?


Keksi43
02.07.2014, 23:04
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, 04: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, 07: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, 12:41
Mit einem Array
https://community.bistudio.com/wiki/onPlayerConnected

Keksi43
03.07.2014, 14: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, 08:52
So kannst du dir zum Testen (z.B. über einen Funk-Auslöser) die im Spiel befindlichen Spieler anzeigen lassen:


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, 15: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;

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, 17: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:

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:
{ _index = lbAdd [2100, _x];} forEach ["auswahl 1","auswahl 2","auswahl 3"];

Die hint.sqf:

_aus = _this select 0;

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

Was hab ich verhaun?
Und wie würde n if command damit aussehen? So?
if (_aus == "auswahl 1") then {};

Drunken Officer
06.07.2014, 12: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, 14: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, 18: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, 21: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, 21:42
Lauter Beispiele... wie so oft: >> switch << (https://community.bistudio.com/wiki/switch)

Keksi43
06.07.2014, 21: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;)