Armed-Assault.de Twitter


Editing The world is a Script - write it!

Antwort
 
Themen-Optionen Ansicht
Alt 28.04.2012, 11:23   #1 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard "case" und "random" hilfe

Hallo,

nachdem ich meine suchmachine nun für stunden (ohne erfolg) zum kochen gebracht hab dachte ich mir poste ich es mal hier und hoffe auf antwort...


ich hab mir ein kleines Script zusammengeschustert was auch soweit ganz gut funktioniert (nach Stunden an Arbeit ...).

PHP-Code:
// intel or bomb?

_suspect _this select 0;
_bomber = (_this select 3select 0;


while {
alive _suspect} do {

// Remove action ...
_action _suspect addAction["foo""foo.sqf"];
while {
_action >= 0} do  {
  
_suspect removeAction _action;
  
_action _action 1;
};


// guy got bomb or whatever (option false)
if (!_bomberexitwith {"Bo_GBU12_lgb" createVehicle (getPos _suspect)};


// guy got intel (option true)
_suspect switchMove "ActsPsitMstpSnonWunaDnon_sceneNikitinDisloyalty_Sykes";


while {
true} do {
  
_suspect switchMove "ActsPsitMstpSnonWunaDnon_sceneNikitinDisloyalty_Sykes";
  
waitUntil {!(animationState _suspect == "ActsPsitMstpSnonWunaDnon_sceneNikitinDisloyalty_Sykes")};
}}; 


Jedoch bin ich jetzt an einem
Punkt der meine Kenntnisse bei weitem übersteigt.

das
obige Script soll nun zufällig eines von 5 Scripten aufrufen. Und das jeweilig ausgewählte Script dann auch niemals wieder aufrufen.

ich habe natürlich gegoogelt was das
Zeug hält habe mir auch wieder was gebastelt was aber nicht funktioniert. Aber vielleicht gibts euch ne Idee auf was ich eigentlich aus bin.


PHP-Code:
if (isServerthen {};
_m = case select




switch (start) do {
   
  case 
1: {execVM "script1.sqf"};
  case 
2: {execVM "script2.sqf"};
  case 
2: {execVM "script3.sqf"};
  case 
3: {execVM "script4.sqf"};
   
  case = case - [
_m];

}; 
_suspect aus dem ersten script wird von mehreren AI über eine addAction aufgerufen.

Wenn ich hier voll auf dem Holzweg sein sollte sagt es mir. Ich bin ein blutiger anfänger was sqf angeht.

schonmal vielen dank!
logi ist offline   Mit Zitat antworten
Alt 28.04.2012, 19:07   #2 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 29.07.2008
Ort: Wien
Alter: 48
Beiträge: 189
Ghost_Aut eine Nachricht über MSN schicken
Standard

Beispiel:
Code:
_typeNr = round (random 3);
 
switch (_typeNr) do { 
                    case 0: {
                           //Script 1//
                           [] execVM "script_1.sqf";
                          };
 
                     case 1: {
                            //Script 2//
                            [] execVM "script_2.sqf"; 
                           };
 
                     case 2: {
                            //script 3//
                            [] execVM "script_3.sqf"; 
                           };

                      case 3: {
                             //script 4//
                             [] execVM "script_4.sqf";
                            };
};
__________________
Ghost_AUT

Geändert von Ghost_Aut (28.04.2012 um 19:11 Uhr).
Ghost_Aut ist offline   Mit Zitat antworten
Alt 28.04.2012, 22:47   #3 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard

Hallo Ghost!

Vielen Dank für deine schnelle Antwort. Funktioniert auch alles hervorragend bis auf eine kleine Sache...

Wie stelle ich sicher das das aufgerufene Script nicht noch mal aufgerufen wird?
logi ist offline   Mit Zitat antworten
Alt 29.04.2012, 00:14   #4 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

PHP-Code:

// pruefen ob array vorhanden falls nicht dann erstellen
if (isnil"c_array"then {c_array = [1,2,3,4]};

// pruefen ob array befuellt mit werten, midestens 1 wert
if (count c_array 0then {

// selektierung eines wertes aus dem array, anschließend entfernen des wertes aus array
_zaehler = ((count c_array)-1);
_auswahl c_array select (round (random _zaehler));
c_array c_array - [_auswahl];            

switch (
_auswahl) do
{
    case 
1: {execVM "script1.sqf"};
    case 
2: {execVM "script2.sqf"};
    case 
3: {execVM "script3.sqf"};
    case 
4: {execVM "script4.sqf"};
    default {};

};
}; 

gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 29.04.2012, 01:18   #5 (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

hoschi's script noch ein bisschen verbessert und formatiert!
Ordentlich Einrücken ist immer toll, Herr Hoschi

PHP-Code:
// pruefen ob array vorhanden falls nicht dann erstellen
if (isnil"c_array"then
c_array = ["script1.sqf","script2.sqf","script3.sqf"] };

// pruefen ob array befuellt mit werten, midestens 1 wert
if (count c_array 0then
{
    
// selektierung eines wertes aus dem array, anschließend entfernen des wertes aus array
    
_auswahl c_array select (round (random ((count c_array)-1)));
    
call format ["execVM %1",_auswahl];
    
c_array c_array - [_auswahl];
}; 
Sollte so funktionieren, aber ich bin auch schon länger aus der ArmAaaAaAaaAa-Geschichte raus. Also keine Garantie
__________________


Geändert von TeRp (29.04.2012 um 01:24 Uhr).
TeRp ist offline   Mit Zitat antworten
Alt 29.04.2012, 10:52   #6 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard



vielen dank jungs!
logi ist offline   Mit Zitat antworten
Alt 29.04.2012, 20:26   #7 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
Standard

Zitat von TeRp Beitrag anzeigen

Sollte so funktionieren, aber ich bin auch schon länger aus der ArmAaaAaAaaAa-Geschichte raus. Also keine Garantie

Du bist wirklich lange raus... so macht das kein Mensch mehr, lol

Ich hau noch ne dritte Version rein
Code:
if (isnil"c_array") then {c_array = [1,2,3,4]}; 

if (count c_array > 0) then {
    _auswahl = c_array select (floor (random (count c_array) - 1)); 
    c_array = c_array - [_auswahl];
    execVM format ["script%1.sqf", _auswahl];
};
Xeno
__________________
In arma everything is made of refined explodium, armored with wet paper towels.

Geändert von Xeno (29.04.2012 um 20:35 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 29.04.2012, 20:29   #8 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard

Nochmals danke für die schnellen und super antworten. Beide Scripts funktionieren super jedoch habe ich ein kleines Problem was mich an den rande des Wahnsinns treibt.


PHP-Code:
//init of the _suspect:
//this addAction ["Interrogate","scripts\arest.sqf",[true],1,false,true,"","(_target distance player) < 5"];
//
// intel or bomb?

_suspect _this select 0;
_bomber = (_this select 3select 0;

while {
alive _suspect} do {

// Remove all actions from the suspect
_action _suspect addAction["foo""foo.sqf"];
while {
_action >= 0} do    {    
    
_suspect removeAction _action;
    
_action _action 1;};

// option false
if (!_bomberexitwith {"grenade" createVehicle (getPos _suspect)};



// pruefen ob array vorhanden falls nicht dann erstellen
if (isnil"c_array"then {c_array = [1,2,3,4]};

// pruefen ob array befuellt mit werten, midestens 1 wert
if (count c_array 0then {

// selektierung eines wertes aus dem array, anschließend entfernen des wertes aus array
_zaehler = ((count c_array)-1);
_auswahl c_array select (round (random _zaehler));
c_array c_array - [_auswahl];            

switch (
_auswahl) do
{
    case 
1: {execVM "script1.sqf"};
    case 
2: {execVM "script2.sqf"};
    case 
3: {execVM "script3.sqf"};
    case 
4: {execVM "script4.sqf"};
    case 
5: {execVM "script5.sqf"};
    default {};

};
};  



// option false
if (!_bomberexitwith {"grenade" createVehicle (getPos _suspect)};


// guy got intel (option true)

while {true} do {
    
_suspect switchMove "ActsPsitMstpSnonWunaDnon_sceneNikitinDisloyalty_Sykes";
    
waitUntil {!(animationState _suspect == "ActsPsitMstpSnonWunaDnon_sceneNikitinDisloyalty_Sykes")};}


}}; 
Das Scripts funktioniert eigentlich einwandfrei ... Nur das es dinge macht die meiner Meinung nach keinen Sinn ergeben.

Wenn Player Bluefor ist und _suspect Opfor dann muss ich _suspect erst verwunden damit die AddAction erscheint.

Wenn Player Opfor ist und _suspect Opfor habe ich keine Problem. Genauso wenn Player Bluefor ist und _suspect Civi.

Macht das für einen für euch einen Sinn? Denn ich bin mit meinem Latein am Ende...
logi ist offline   Mit Zitat antworten
Alt 29.04.2012, 21:09   #9 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

Zitat von Xeno Beitrag anzeigen

Code:
_auswahl = c_array select (floor (random (count c_array) - 1));
floor wird keinesfalls benoetigt.

Angenommen der Array hat noch einen Wert, dann wird mit meiner methode

Code:
_zaehler = ((count c_array)-1); 
_auswahl = c_array select (round (random _zaehler));
der c_array gezaehlt dass ergibt 1, anschließen wird -1 durchgefuehrt was 0 ergibt und schlussendlich ergibt round random 0 immer 0. Meiner Ansicht nach also absolut keine notwendigkeit fuer ein floor.

Das Skript welches ich oben geschrieben habe, habe ich auch getestet und es funktionierte so wie gewollt auch ohne die werte mit floor abzurunden.

gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 29.04.2012, 21:53   #10 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard

Hoschi dein script funktioniert einwandfrei

glaube auch nicht das der fehler dort liegt. obwohl ich um ehrlich zu sein keine ahnung hab was da so probleme macht.

xeno hast du ne idee?
logi ist offline   Mit Zitat antworten
Alt 29.04.2012, 22:03   #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

Mal so ein kurzer Einwand nebenbei.
Wenn man nur round benutzt hast man unterschiedliche Wahrscheinlichkeiten für das Auftreten der Ereignisse.
Insbesondere das erste und letzte Element des Arrays haben eine niedrigere Wahrscheinlichkeit als die restlichen Elemente.

Beispiel der Array [0,1,2,3]:
Mit round (random (count array - 1)):
0 ergibt sich für random-Werte [0,0.5[
1 ergibt sich für random-Werte [0.5,1.5[
2 ergibt sich für Random-Werte [1.5,2.5[
3 ergibt sich für Random-Werte [2.5,3[

Mit floor (random (count array)):
0 ergibt für [0,1[
1 ergibt sich für [1,2[
2 ergibt sich für [2,3[
3 ergibt sich für [3,4[
Und im Falle, dass sich 4 ergeben sollte (sehr unwahrscheinlich), wird einfach wiederholt bis sich ein anderer Werte ergibt.

Das ist das Problem bei Xeno's Script, das letzte Element wird mit allerhöchster Wahrscheinlichkeit zu allerletzt ausgeführt, eben wegen dieses Umgangs mit floor

So, genug Offtopic von mir

Ontopic: Gut das der Xeno immer ncoh ArmAaaAaa scriptet und diese Kacksprache super beherrscht
__________________


Geändert von TeRp (29.04.2012 um 22:12 Uhr).
TeRp ist offline   Mit Zitat antworten
Alt 30.04.2012, 07:15   #12 (permalink)
His Awesomeness!
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von flickflack
 
Registriert seit: 25.07.2006
Ort: Regnum Borussiae
Beiträge: 9.282
Standard

Zitat von TeRp Beitrag anzeigen

[...]diese Kacksprache[...]

^this
flickflack ist offline   Mit Zitat antworten
Alt 30.04.2012, 17:49   #13 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard

keiner ne idee?
logi ist offline   Mit Zitat antworten
Alt 30.04.2012, 18:08   #14 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Lester
 
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
Standard

Zitat von TeRp Beitrag anzeigen

Und im Falle, dass sich 4 ergeben sollte (sehr unwahrscheinlich), wird einfach wiederholt bis sich ein anderer Werte ergibt.

lt. BIKI hat BIS inzwischen da Hand angelegt, so das nie der Maximalwert erreicht werden kann.
Ich kann mich nur zu gut daran erinnern das es mal anders war, aber mittlerweile heisst es:
Zitat:

Random real (floating point) value from 0 (inclusive) to x (not inclusive).

__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547
Lester ist offline   Mit Zitat antworten
Alt 30.04.2012, 18:45   #15 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

Zitat von logi Beitrag anzeigen

keiner ne idee?

Haeng deine Missi mal hier an einen post an und dann kann man mal schauen an was es liegt.

gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 01.05.2012, 15:17   #16 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard

hier und nochmal danke!
Angehängte Dateien
Dateityp: zip arest.Desert_E.zip (2,3 KB, 45x aufgerufen)
logi ist offline   Mit Zitat antworten
Alt 01.05.2012, 17:59   #17 (permalink)
Armed-Assault.de Team10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Moerderhoschi
 
Registriert seit: 02.07.2006
Ort: Kabul
Alter: 38
Beiträge: 2.666
Standard

Bei der von dir angehaengten Mission kann ich als Blufor Einheit ohne Probleme den actionmenue Eintrag vom Opfor Takistani auswaehlen auch ohne vorher auf ihn feuern zu muessen.

Bitte schildere nochmal genau den Ablauf wann wie das Problem bei dir auftritt.

gruß
hoschi
__________________


Moerderhoschi ist offline   Mit Zitat antworten
Alt 02.05.2012, 11:32   #18 (permalink)
Newbie
 
Registriert seit: 24.04.2012
Beiträge: 8
Standard

Ich hab mein Spiel gerade mal ohne Mods gestartet und hatte auch keinerlei Probleme. Jetzt blicke ich gar nicht mehr durch. Wenn einer eine Idee hat bzw. ein alternatives Script hätte was aufs gleiche hinausläuft wäre ich sehr dankbar.
logi ist offline   Mit Zitat antworten
Antwort

Stichworte
case, fall & zufall, möglichkeiten, random, zufall, zufällig


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
Hilfe bei SLI-Problem Bcook Technische Fragen & Probleme 13 20.02.2011 15:38
Neuling brauch Hilfe Joghurt Multiplayer Community 1 02.11.2010 23:42
Brauche Hilfe bei meiner Cornershot Don Schächter Mods & Addons 21 02.10.2010 15:57
Hilfe, Anfänger TH1984 Community 15 01.09.2010 19:21
Brauche Hilfe mit meinem ersten Addon Don Schächter Mods & Addons 11 08.07.2010 22:17


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 117 118 119