11.01.2011, 23:42 | #1 (permalink) |
Registriert seit: 06.03.2008
Alter: 47
Beiträge: 93
|
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; }; }; 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 { ... }; 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;}; 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";}; In die globale Variable film wird der Inhalt des paramsArray 0 übergeben. Was genau fragt denn "isNil" ab? Laut BI Wiki: Hä?
__________________
- Silent enim leges inter ArmA - Geändert von Spiderman (12.01.2011 um 01:42 Uhr). |
12.01.2011, 03:15 | #2 (permalink) |
Registriert seit: 06.03.2008
Alter: 47
Beiträge: 93
|
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";}; Alles s****e! Wenn irgendjemand ne Lösung hat: BITTTÖÖÖ! Lasst mich nicht dumm sterben
__________________
- Silent enim leges inter ArmA - |
12.01.2011, 12:50 | #3 (permalink) |
Registriert seit: 04.06.2008
Beiträge: 197
|
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"; } }; 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";}; schreibst du: Code:
film = true; sleep 1; if (isNil "film") then {hint "film ist nil";}; if (film) then {hint "film lauft";}; so hab ich das zumindest verstanden... mann kann auch nicht mehr benöltigte Variablen zustören: Code:
variableToDestroy = nil; Bitte korrigiert mich wenn ich falsch liege! Geändert von SmartGun (12.01.2011 um 13:19 Uhr). |
13.01.2011, 21:45 | #5 (permalink) |
@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. |
|
14.01.2011, 09:17 | #7 (permalink) |
Registriert seit: 05.01.2008
Beiträge: 105
|
Dazu noch eine Frage:
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"). 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). |
14.01.2011, 11:08 | #8 (permalink) |
Registriert seit: 04.06.2008
Beiträge: 197
|
@ 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. |
14.01.2011, 18:46 | #9 (permalink) |
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
|
*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). |
16.01.2011, 12:56 | #11 (permalink) |
Registriert seit: 04.01.2008
Alter: 50
Beiträge: 314
|
, 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
|
17.01.2011, 17:33 | #12 (permalink) |
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 |
|
17.01.2011, 18:08 | #13 (permalink) |
Registriert seit: 01.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
|
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"}; |
19.01.2011, 13:10 | #15 (permalink) |
Registriert seit: 06.03.2008
Alter: 47
Beiträge: 93
|
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; }; }; 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"; }; a) server_time_boardcast.sqf Code:
while {isserver} do { server_date = date; publicvariable "server_date"; sleep 10; }; 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];
__________________
- Silent enim leges inter ArmA - Geändert von Spiderman (19.01.2011 um 13:41 Uhr). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|