Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 11.01.2011, 23:42   #1 (permalink)
50 Beiträge
 
Benutzerbild von Spiderman
 
Registriert seit: 06.03.2008
Alter: 41
Beiträge: 92
Standard Missionsparameter Auswahl - paramsarray

Ich möchte einen Parameter definieren, der mir es ermöglicht bei Start der Mission auszuwählen ob der Introfilm abläuft oder nicht.
Trotz Suche
Sichtweite im Multiplayer
parameter tag- nacht

bin ich noch nicht auf das gestoßen was ich brauche:

Meine description.ext
Code:
class Params
{
        class DayTime
        {
                //paramsArray[0]
                title = "Time:";
                values[] = {6, 14, 17};
                texts[] = {"Sunrise","Day","Sunset"};
                default = 6;
        };
    class Intro
        {
                //paramsArray[1]
                title = "Intro:";
                values[] = {0,1};
                texts[] = {"Yes please!","No thanks!"};
                default = 0;
        };    
    class Revive
        {
                //paramsArray[2]
                title = "Revive:";
                values[] = {0,1,2,5};
                texts[] = {"No Revive","1","2","5"};
                default = 1;
        };      
};
meine Init.sqf
Code:
//non-JIP player, someone who's went through role selection and briefing
if (!(isNull player)) then 
{
    //Missionparameters
        skiptime (((paramsarray select 0) - daytime + 24) % 24);

    //Mission parameters - IntroMovie
    if ((paramsArray select 1) == 0) then 
           {
              // Play Intro
                 [] exec "intro\film.sqs"
           };
               else {if ((paramsArray select 1) == 1) then 
                              {[] exec "scripts\faststart.sqs"; 
                                introdone = true;                  
                                publicVariable "introdone"
                               }
                      };
};
//JIP player, role selection then right into mission
if (!isServer && isNull player) then 
{
    waitUntil {!isNull player};
...
};

//server
if (isServer) then 
{
...
};
Problem: Es scheint als ob der paramsArray Status 0 oder 1 nicht in der Init übernommen und geändert wird. Warum?
Vielen Dank für eure Hilfe!
__________________________________________________ ________________________________
So, nach weiterer Suche bin ich darauf gestossen:
Zusätzliche Parameter funktionieren nicht

Psychobastard´s Hinweis verhalf zum Durchbruch:
Code:
playtime = paramsArray select 0;
if (isNil "playtime") then {playtime = 5400;};
Meine init.sqf sieht nun so aus:
Code:
//Mission parameters
		skiptime (((paramsarray select 0) - daytime + 24) % 24);

	//Mission parameters - Intro Movie
	film = paramsArray select 0;
	if (isNil "film") then {[] exec "intro\film.sqs";};
Ergebnis: Es funkt. Warum verstehe ich zwar immer noch nicht.
In die globale Variable film wird der Inhalt des paramsArray 0 übergeben. Was genau fragt denn
"isNil" ab? Laut BI Wiki:
Zitat:

Tests whether the variable defined by the String argument is undefined, or whether an expression result passed as Code is undefined. The function returns true if the variable is undefined or the expression result undefined (i.e. the expression result is Void), and false in all other cases.

Hä?
__________________
- Silent enim leges inter ArmA -


Geändert von Spiderman (12.01.2011 um 01:42 Uhr).
Spiderman ist offline   Mit Zitat antworten
Alt 12.01.2011, 03:15   #2 (permalink)
50 Beiträge
 
Benutzerbild von Spiderman
 
Registriert seit: 06.03.2008
Alter: 41
Beiträge: 92
Standard

Das Intro Skript wird zwar abgespielt doch der 2. Parameter wird nicht übergeben. Wenn in der description.ext der Wert auf 1 gesetzt wird so passiert nix.
Auch das funkt nicht:

Code:
if (isNil "film") then {[] exec "intro\film.sqs";} else {[] exec "scripts\faststart.sqs";};
Hier wird das Intro wiedergegeben und zugleich (wie im faststart Skript definiert) die Einheiten gelöscht?

Alles s****e!

Wenn irgendjemand ne Lösung hat: BITTTÖÖÖ!
Lasst mich nicht dumm sterben
__________________
- Silent enim leges inter ArmA -

Spiderman ist offline   Mit Zitat antworten
Alt 12.01.2011, 12:50   #3 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von SmartGun
 
Registriert seit: 04.06.2008
Beiträge: 197
Standard

Hi Spider!

beim drüberschauen hab ich jetzt keinen Fehler gefunden.
Sollte eigentlich funktionieren.

ein Versuch währe die if-then-else Abfrage zu umgehen, ich check nie wie das genau zunzt...

Code:
//Mission parameters - IntroMovie
if ((paramsArray select 1) == 0) then {
    // Play Intro
    [] exec "intro\film.sqs";
};
       
if ((paramsArray select 1) == 1) then {
    [] exec "scripts\faststart.sqs"; 
    introdone = true;                  
    publicVariable "introdone";
};
€:

Ich glaube auch, du hast .SQF mit SQS vermischt.

Du hast eine Init.sqf also musst du alle code-Zeilen mit einem ; abschliessen

Code:
//Mission parameters - IntroMovie
    if ((paramsArray select 1) == 0) then 
           {
              // Play Intro
                 [] exec "intro\film.sqs";
           };
               else {if ((paramsArray select 1) == 1) then 
                              {[] exec "scripts\faststart.sqs"; 
                                introdone = true;                  
                                publicVariable "introdone";
                               }
                      };
ob die if-then-else so funzt kann ich dir leider net sagen

isNil wird verwendet und zu überprüfen ob eine Variable bereits gesetzt wurde, und einen gültigen Wert hat.

z.B.

schreib in ein script:
Code:
if (isNil "film") then {hintc "film ist nil";};
wenn film vor der Abfrage nicht gesetzt wurde, dann kommt der hint

schreibst du:

Code:
film = true;
sleep 1;
if (isNil "film") then {hint "film ist nil";}; 

if (film) then {hint "film lauft";};
Der hint sollte dann "film lauft" lauten weil film ja schon vor der isNil Abfrage einen Wert hat

so hab ich das zumindest verstanden...

mann kann auch nicht mehr benöltigte Variablen zustören:

Code:
variableToDestroy = nil;
dann hat "variableToDestroy" keinen gültigen Wert mehr.


Bitte korrigiert mich wenn ich falsch liege!

Geändert von SmartGun (12.01.2011 um 13:19 Uhr).
SmartGun ist offline   Mit Zitat antworten
Alt 13.01.2011, 18:58   #4 (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:12 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 13.01.2011, 21:45   #5 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rettich
 
Registriert seit: 06.04.2008
Ort: bei Kiel
Alter: 44
Beiträge: 313
Rettich eine Nachricht über Skype™ schicken
Standard

@Xeno
Wenn du nur einen Bruchteil deines Wissens so an den Mann bringen könntest, daß es der durchschnittliche Missionsersteller verstehen kann…
Ich wäre darüber jedenfalls überglücklich, da ich das leidige „global – Thema“ noch nie komplett verstanden habe, um es universell einzusetzen.
Rettich ist offline   Mit Zitat antworten
Alt 13.01.2011, 23:55   #6 (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:12 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 14.01.2011, 09:17   #7 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 05.01.2008
Beiträge: 105
Standard

Dazu noch eine Frage:

Zitat von Xeno Beitrag anzeigen

*deleted*

Man soll ja laut BI-Wiki private Variablen zusätzlich per private["_myvar"] "super-lokal" machen (geiles Konzept: "Convention AND Code" statt "Convention over Code").

Zitat:

In functions you should additionally mark variables as local using the command private. Otherwise you may modify local variables of the calling script that are visible in the function.

Bedeutet das, dass es so eine Art Scope des Callstacks gibt? In der Konsequenz müßte dann noch jede Funktion alle privaten Variablen ihres Aufrufers sehen können!?

Geändert von Xeno (03.01.2014 um 09:12 Uhr).
svenson ist offline   Mit Zitat antworten
Alt 14.01.2011, 11:08   #8 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von SmartGun
 
Registriert seit: 04.06.2008
Beiträge: 197
Standard

@ Xeno

Danke für die guten Erklärungen!

jetzt hab ich beim Versuch Spiderman zu helfen selbst ne Menge gelernt

Der letzte Codeschnipsel ist ja mal genial, da muss ich meine Missionen nicht ganz so oft als MPmission exportieren um zu testen.
SmartGun ist offline   Mit Zitat antworten
Alt 14.01.2011, 18:46   #9 (permalink)
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 77
Beiträge: 6.547
Standard

Zitat von svenson Beitrag anzeigen

Man soll ja laut BI-Wiki private Variablen zusätzlich per private["_myvar"] "super-lokal" machen (geiles Konzept: "Convention AND Code" statt "Convention over Code").

*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 16.01.2011, 12:20   #10 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 05.01.2008
Beiträge: 105
Standard

Zitat von Xeno Beitrag anzeigen

Habe ich oben schon beschrieben.

Zitat:

*deleted*

Xeno
Ah, sorry, das hatte ich überlesen, dann ist das klar.

Geändert von Xeno (03.01.2014 um 09:13 Uhr).
svenson ist offline   Mit Zitat antworten
Alt 16.01.2011, 12:56   #11 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Saint
 
Registriert seit: 04.01.2008
Alter: 43
Beiträge: 306
Standard

Zitat von Xeno Beitrag anzeigen


Wenn es mal 10.000.000 OA User gibt schreib ich mal ein Buch über ArmA Scripting und ArmA MP

Xeno

, mal ernsthaft, ein "Scripting Guide" würde nach meiner Meinung der sinnvollste DLC für ArmA 2 und OA sein

Da wäre ich gerne bereit Geld für auszugeben.
__________________
"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   Mit Zitat antworten
Alt 17.01.2011, 17:33   #12 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rettich
 
Registriert seit: 06.04.2008
Ort: bei Kiel
Alter: 44
Beiträge: 313
Rettich eine Nachricht über Skype™ schicken
Standard

Den "Scripting Guide" auf Deutsch würde ich mir auch einiges kosten lassen….

Ich würde gern einen zusätzlichen Parameter in ein fertiges Parametersystem (von Bon_Inf) einbauen, diese klappt aber leider nicht, egal was ich auch versuche.

Dieser Parameter soll darüber entscheiden, ob ein Respawn an einem bestimmten Ort sofort ausgeführt werden soll oder ob man warten muß bis andere Teammitglieder gestorben sind, um dann mit diesen zusammen wieder zur Hauptgruppe zu stoßen, welches wiederum das Teamplay fördern könnte.

Die Description:

class Params {
//paramsArray[0]
class tfor_daytime {
title="Tageszeit";
values[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,1 9,20,21,22,23};
default=10;
texts[]={"0000","0100","0200","0300","0400","0500","0600" ,"0700","0800","0900","1000","1100","1200","1300", "1400","1500","1600","1700","1800","1900","2000"," 2100","2200","2300"};
};
//paramsArray[1]
class tfor_max_death_per_mission {
title="max. Tode / Mission";
values[]={999999,20,10,3};
default=10;
texts[]={"unbegrenzt","20 - Einfach","10 - Normal","3 - Schwer"};
};
//paramsArray[2]
class tfor_injury_system {
title="Verletzungen nach Wiederbeleben";
values[]={0,2,3,5,7};
default=3;
texts[]={"keine","geringe","Normal","schwere","sehr schwere"};
};
//paramsArray[3]
class tfor_injury_system_agony {
title="Chance zum Wiederbeleben";
values[]={1,5,10,100};
default=5;
texts[]={"keine","Normal","hohe","garantiert"};
};
/////////////////////////////////////////////////////////////////////////////////////////////
// um diesen Parameter geht es
//paramsArray[4]
class tfor_warteplatz {
title="Wieviel Spieler werden fuer Respawn benoetigt";
values[]={0,1,2};
default=1;
texts[]={"einer","zwei","gesamte Gruppe"};
};
/////////////////////////////////////////////////////////////////////////////////////////////////


Die Init:

if(isNil "tfor_deathcount") then {tfor_deathcount = 0};

// Wieviel Spieler tot sein müssen, damit diese wieder gerespawnt werden können
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// um diesen Parameter geht es
tfor_warteplatz = paramsArray select 0;

if (tfor_warteplatz == 0) then {hint "so ein Scheiss, wieso wird hier nichts ausgefuehrt?"};
if (tfor_warteplatz == 1) then {execVM "sqf\Param2Spieler.sqf"};
if (tfor_warteplatz == 2) then {nul = [] execVM "sqf\ParamalleSpieler.sqf"};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if(isNil "paramsArray") then{
paramsArray = [
11, // Time of Day
16, // max death per mission
3, // Injury System
5 // Injury System Agony

];

};
tfor_daytime = paramsArray select 0; //Server setVariable ["tfor_daytime",tfor_daytime,false];
tfor_max_death_per_mission = paramsArray select 1; //Server setVariable ["tfor_max_death_per_mission",tfor_max_death_per_mi ssion,false];
tfor_injurysystem = paramsArray select 2; //Server setVariable ["tfor_injurysystem",tfor_injurysystem,false];
tfor_injurysystem_agony = paramsArray select 3; //Server setVariable ["tfor_injurysystem_agony",tfor_injurysystem_agony, false];



Könnte sich bitte jemand dieses Beispiel angucken?

Schon mal Danke im Voraus!


Gruß Rettich
Angehängte Dateien
Dateityp: rar Revieve_TFOR_Parameter.Zargabad.rar (16,3 KB, 35x aufgerufen)
Rettich ist offline   Mit Zitat antworten
Alt 17.01.2011, 18:08   #13 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 32
Beiträge: 2.662
Standard

tfor_warteplatz ist in deiner description.ext paramsarray select 4 aber in der Init.sqf tust du es als Paramysarray select 0 deklarieren. belass es doch bei 4 und es geht.

tfor_warteplatz = paramsArray select 4;

if (paramsarray select 4 == 0) then {hint "jetzt gehdor!"};
if (paramsarray select 4 == 1) then {execVM "sqf\Param2Spieler.sqf"};
if (paramsarray select 4 == 2) then {nul = [] execVM "sqf\ParamalleSpieler.sqf"};
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 17.01.2011, 19:29   #14 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Rettich
 
Registriert seit: 06.04.2008
Ort: bei Kiel
Alter: 44
Beiträge: 313
Rettich eine Nachricht über Skype™ schicken
Standard

Danke Moerderhoschi!


Jetzt hab ich das endlich mal kapiert.


Da die Nummerierung in der Description immer durch die // unwirksam gemacht wird, dachte ich bisher, dass diese nur der Übersicht dient.
Rettich ist offline   Mit Zitat antworten
Alt 19.01.2011, 13:10   #15 (permalink)
50 Beiträge
 
Benutzerbild von Spiderman
 
Registriert seit: 06.03.2008
Alter: 41
Beiträge: 92
Standard

Vielen Dank für die Hilfe Xeno und SmartGun!

Thema paramsarray! Ihr kennt das?! Die Spielzeit wurde im paramsarray auf morgens gesetzt, mit Nachsichtgerät seit ihr durch die Wälder gestapft. Nun, nach einer Stunde Spielzeit ist die Sonne hoch am Himmel und ihr strakt bereits mit den ersten paar Bier im Bauch vor einer Kneipe in Chernogorsk.

Da kommt ein JIP Spieler um die Ecke und behauptet steif und fest: Nein, bei ihm sei es nacht und dunkel wie im A**** von der Merkel, deswegen habe er immer noch das Nachtsichtgerät auf.

Da hat doch der Server wieder mal nicht die Zeit mit den Clients synchronisiert, verdammt!

Lösung:

1. description.ext

Code:
class Params
{
        class DayTime
        {
                //paramsArray[0]
                title = "Time:";
                values[] = {6, 14, 17};
                texts[] = {"Sunrise","Day","Sunset"};
                default = 14;
        };
};
2. init.sqf
Code:
//non-JIP player, someone who's went through role selection and briefing
if (!(isNull player)) then 
{
     //set initial time
     setdate [(date select 0), (date select 1), (date select 2), (paramsArray select 0), (date select 4)];
};

//JIP player, role selection then right into mission
if (!isServer && isNull player) then 
{
    waitUntil {!isNull player};
        //set initial time
        setdate [(date select 0), (date select 1), (date select 2), (paramsArray select 0), (date select 4)];

        //launch script to sync time with server 
        server_date = [];
        sync_time_script = execVM "scripts\jip_sync_time.sqf";        
};

//server
if (isServer) then     
{
       // set initial time
       setdate [(date select 0), (date select 1), (date select 2), (paramsArray select 0), (date select 4)];

      //launch server side script to broadcast server side time every 10 seconds
     broadcast_server_time_script = execVM "scripts\server_time_boardcast.sqf";
};
3. Zwei Scripte in den Ordner "scripts" des Missionsfolder kopieren:
a) server_time_boardcast.sqf
Code:
while {isserver} do 
    {
    server_date = date;
    publicvariable "server_date";
    sleep 10;
    };
b) jip_sync_time.sqf
Code:
waituntil {player == player};

waituntil {count server_date > 0}; 

// set initial time 
setdate = [server_date select 0, server_date select 1, server_date select 2, server_date select 3, server_date select 4];
Wichtig ist natürlich das auch das richtige paramsarray (hier ist es das paramsarray 0) in den Scripten aufgeführt wird. So lassen sich verschiedene Startzeiten der Mission definieren und die Mission ist JIP freundlich. Die Uhr des später hinzugekommenen Spielers sollte nur 10 sec nachgehen.
__________________
- Silent enim leges inter ArmA -


Geändert von Spiderman (19.01.2011 um 13:41 Uhr).
Spiderman 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


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