Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 11.10.2012, 13:16   #1 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard ALICE und SILVIE

Kriege einige Sachen bezüglich ALICE und SILVIE auf Clafghan nicht hin:

Erstmal zu ALICE:
Habe ein Citycentre mit dem Namen "myCity" erstellt und im Modul (ALICE Erweiterung) im Init-Feld folgendes eingetragen:
Code:
this setvariable ["townlist",[myCity]];
Das klappt! Sie Zivilisten Spawnen sobald man in der Nähe ist. Allerdings spawnen sie in den Häusern und nur wenige kommen auch raus. Nun möchte ich aber, dass sie in dieser Stadt spawnen, auch wenn kein Spieler anwesend ist und eine gewisse Anzahl außerhalb der Häuser. Dazu gibt es lt. BIS folgende Möglichkeit:

ALICE_forcePopulation = <boolean>; - set to true if you want to populate town even without players' presence.
Example: BIS_loc_acityc_kozlovka setvariable ["ALICE_forcePopulation",true];

ALICE_populationCoef = <number>; - coeficient to tell system what amount of civilians will be outside doing some action. 0.5 means 50% of civilians will be outside.
Example: BIS_loc_acityc_kozlovka setvariable ["ALICE_populationCoef",1];

Somit sieht meine Init-Zeile im Modul so aus:
Code:
this setvariable ["townlist",[myCity]]; myCity setvariable ["ALICE_forcePopulation",true]; myCity setvariable ["ALICE_populationCoef",0.5];
Aber es passiert nichts dergleichen! Was mache ich da falsch?

Und nun zu SILVIE:
Fahrzeuge spawnen wie geplant, allerdings möchte ich, dass eine 50%ige Chance besteht, dass das Fahrzeug mit einer Autobombe versehen ist. Dazu habe ich folgendes in die Init-Zeile des SILVIE-Moduls eingetragen:

Code:

BIS_silvie_mainscope setvariable ["vehicleInit",{[_this] execVM "carbomb.sqf";}];
und das dazugehörige Script (carbomb.sqf):
Code:
_chance = 50; // chance of carbomb in percent
_chanceFactor = 100 / _chance;
_car = _this select 0;
_random = floor(random _chanceFactor);
if(_random == 0) then {
    hint format["Bombe in %1", _car];
    waitUntil {isEngineOn _car};
    sleep 0.5;
    "HelicopterExploSmall" createVehicle getPos _car;
};
Nun passiert aber, dass es eine 50:50 Chance gibt, dass ALLE gespawnten Fahrzeuge mit einer Bombe versehen sind. So wie ich das verstanden habe, soll mit BIS_silvie_mainscope setvariable ["vehicleInit",{[_this] execVM "carbomb.sqf";}]; für jedes Fahrzeug das Script einzeln aufgerufen werden. Das würde bedeuten, dass _random jedes Mal neu die Chance hat 0 zu sein. Passiert aber nicht...

Irgendwo habe ich auch gelesen, dass die Zivilisten auch die Fahrzeuge benutzen. Das machen sie bei mir nicht. Dazu sei angemerkt, dass ich auch ASR_AI laufen habe. Liegt es vielleicht daran, oder muss man da noch irgendwas extra festlegen?
Troublemaker ist offline   Mit Zitat antworten
Alt 11.10.2012, 13:50   #2 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Nur zum Skript. Mit deinem ist die Wahrscheinlichkeit 2% für eine Bombe.

Das sollte so reichen:

Code:
if((random 100) < 50) then 
 {
   _car = _this select 0;
   hint format["Bombe in %1", _car];
   waitUntil {isEngineOn _car};
   sleep 0.5;
   "HelicopterExploSmall" createVehicle position _car;
};
Vienna ist offline   Mit Zitat antworten
Alt 11.10.2012, 14:32   #3 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard

Jo, so geht's auch, ist auch einfacher. Aber wieso sollte meine Version eine Chance von 2% ergeben?

100 / 50 = 2
floor(random 2) ergibt 0 oder 1;

also 50% Chance auf 0

oder hab ich da irgendwo einen Gedankenfehler?
Troublemaker ist offline   Mit Zitat antworten
Alt 11.10.2012, 15:11   #4 (permalink)
Beta Tester 10 Jahre hx3
20.000 Beiträge
 
Registriert seit: 13.04.2003
Beiträge: 29.761
Standard

Kommt darauf an, ob random bei 0 anfängt, wenn nicht, dann ist die Chance eigentlich bei 100% mit Bombe und 0% bei ohne Bombe.
Snevsied ist offline   Mit Zitat antworten
Alt 11.10.2012, 15:12   #5 (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: 51
Beiträge: 3.011
Standard

Zitat von Troublemaker Beitrag anzeigen

oder hab ich da irgendwo einen Gedankenfehler?

Ich sehe da keinen, obgleich ich nicht extra eine ExtraVariable für die _chancefactor aufmachen würde.
also eher direkt so:
_random = floor(random (100/_chance));
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547
Lester ist offline   Mit Zitat antworten
Alt 11.10.2012, 15:56   #6 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard

Zitat von Snevsied Beitrag anzeigen

Kommt darauf an, ob random bei 0 anfängt, wenn nicht, dann ist die Chance eigentlich bei 100% mit Bombe und 0% bei ohne Bombe.

Laut BIS Wiki sollte es so sein!
x=round(random 5) will return 0,1,2,3,4 or 5.
x=floor(random 5) will return 0,1,2,3 or 4.
x=ceil(random 5) will return 0, 1,2,3,4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0)

http://community.bistudio.com/wiki/random
Troublemaker ist offline   Mit Zitat antworten
Alt 11.10.2012, 16:01   #7 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard

Zitat von Lester Beitrag anzeigen

...obgleich ich nicht extra eine ExtraVariable für die _chancefactor aufmachen würde

Jaja, ist schon richtig. Die Lösung von Vienna ist ja auch wesentlich schöner. Nutzt allerdings nicht viel, weil's nicht so funzt, wie es soll. Über die Form kann man sich ja noch später Gedanken machen, aber offensichtlich ist es so, dass ich bei jedem Vehicle den gleichen _random Wert bekomme, was schon etwas merkwürdig ist...
Troublemaker ist offline   Mit Zitat antworten
Alt 11.10.2012, 16:29   #8 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.725
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Zitat:

vehicleInit = <code>; - custom init which is executed on every car.

On every car - heißt nicht für jedes Vehicle einzeln, sondern einmal für alle. Daher dein alles oder nichts. Mach das also anders:

Lasse in dem Code ein kleines Script ausführen, welches jedes erzeugte Fahrzeug in ein Array aufnimmt. Anschließend kümmert sich ein weiteres Script darum aus diesem Array ein paar zufällig gewählte Fahrzeuge mit Bomben zu versehen.
(Dazu kommen dann natürlich noch so Sachen wie "ist das Fahrzeug noch da/alive? - wenn nein, entferne es aus dem Array" oder "Sind neue Fahrzeuge gespawnt? - füge sie dem Array hinzu". Das stinkt nach einer mittelschweren .fsm und die ganze Geschichte ist ganz sicher nichts für Anfänger. Ich rate dir also davon ab wenn du nicht jemanden findest der es dir schreibt.)


Ich habe sowas ähnliches schonmal mit dem ALICE Modul gemacht. Dort hat jeder gespawnte Civ eine 5%ige Chance ein radikaler, suizidgefährdeter Moslem zu werden.
__________________
Niemand hat die Absicht eine Tüte zu bauen!

Geändert von Pfandgiraffe (11.10.2012 um 16:31 Uhr).
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 11.10.2012, 21:01   #9 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Zitat von Troublemaker Beitrag anzeigen

Jo, so geht's auch, ist auch einfacher. Aber wieso sollte meine Version eine Chance von 2% ergeben?

100 / 50 = 2
floor(random 2) ergibt 0 oder 1;

also 50% Chance auf 0

oder hab ich da irgendwo einen Gedankenfehler?

Deine Berechnung stimmt natürlich. Ich habe mich "verschaut" und _chanceFactor = 100 - _chance gelesen.
Vienna ist offline   Mit Zitat antworten
Alt 11.10.2012, 22:23   #10 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard

Zitat von Psychobastard Beitrag anzeigen

On every car - heißt nicht für jedes Vehicle einzeln, sondern einmal für alle.

Ah, das erklärt natürlich einiges. Die Bezeichnung "VehicleInit" hat mich zu der Überzeugung gebracht, dass es so ist, als würde der Code in eine Art Init-Feld, wie beim Editor, eingetragen werden.

Zitat von Psychobastard Beitrag anzeigen

Das stinkt nach einer mittelschweren .fsm und die ganze Geschichte ist ganz sicher nichts für Anfänger. Ich rate dir also davon ab wenn du nicht jemanden findest der es dir schreibt.)

Ja also wirklich Anfänger bin ich keiner. Ich bin Programmierer und habe grad Zeit, somit nehme ich die Herausforderung an. Das Scripten in Arma ist halt eine eigene Sache. Mit vielen Sachen hatte ich da nich nix zu tun.

Zitat von Psychobastard Beitrag anzeigen

Dort hat jeder gespawnte Civ eine 5%ige Chance ein radikaler, suizidgefährdeter Moslem zu werden.

Ja, geil. Sowas ähnliches hab ich auch halbfertig rumliegen, allerdings nicht mit ALICE, sondern eigene Civs. Da gibt es sogar ein geringe Chance, dass der Selbstmordattentäter in die Luft fliegt, wenn man ihn trifft - Das macht echt Laune!
Troublemaker ist offline   Mit Zitat antworten
Alt 12.10.2012, 09:40   #11 (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: 51
Beiträge: 3.011
Standard

Zitat von Troublemaker Beitrag anzeigen

Laut BIS Wiki sollte es so sein!
x=round(random 5) will return 0,1,2,3,4 or 5.
x=floor(random 5) will return 0,1,2,3 or 4.
x=ceil(random 5) will return 0, 1,2,3,4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0)

http://community.bistudio.com/wiki/random

Anmerkung dazu:
Früher (ArmA1) war es wirklich mal so das ein random 5 durchaus auch 5 erzeugen konnte, so das ein simpler floor durchaus in die Hose gehen konnte.

Das hat BIS aber glücklicherweise bereinigt.
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547
Lester ist offline   Mit Zitat antworten
Alt 12.10.2012, 15:07   #12 (permalink)
Newbie
 
Registriert seit: 24.11.2011
Ort: Wien
Alter: 45
Beiträge: 30
Standard

ERKENNTNIS!!!

Code:
BIS_silvie_mainscope setvariable ["vehicleInit",{[_this] execVM "carbomb.sqf";}];
spawnt das script doch für jedes Fzg. einzeln!!!
Es trat nur der unglaubliche Fall ein, dass bei 5 Versuchen für fast alle Fahrzeuge bei einer 50:50 Chance eine Bombe plaziert wurde!!!

Ich sollte diese Woche Lotto spielen - unbedingt!

Das Script funzt und klappt!
Troublemaker ist offline   Mit Zitat antworten
Alt 12.10.2012, 17:06   #13 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

100.000 Mal random 4 mit floor, ceil und round ergibt folgende Verteilung:

Gesamt (random 4): 100000

floor:
0: 24971
1: 24903
2: 25055
3: 25071
4: 0

ceil:
0: 0
1: 24971
2: 24903
3: 25055
4: 25071

round:
0: 12601
1: 24794
2: 24917
3: 25212
4: 12476

Rechenzeit: 26 Sekunden


Zu beachten die Werte von round bei 0 und 4!

Somit ist floor ideal für den Index von Arrays.

Wer sich spielen will, hier das Test-Skript:

Random_Test.sqf
Code:
// Test von random mit floor, ceil und round

_Ges = 0;
_ZaF = 0;
_ZbF = 0;
_ZcF = 0;
_ZdF = 0;
_ZeF = 0;

_ZaC = 0;
_ZbC = 0;
_ZcC = 0;
_ZdC = 0;
_ZeC = 0;

_ZaR = 0;
_ZbR = 0;
_ZcR = 0;
_ZdR = 0;
_ZeR = 0;

_time = time;

while {_Ges < 100000} do
 {
  _Ges = _Ges+1;
  _Zahl = random 4;
  
  switch (floor _Zahl) do 
   {
    case 0:{_ZaF=_ZaF+1};
    case 1:{_ZbF=_ZbF+1};
    case 2:{_ZcF=_ZcF+1};
    case 3:{_ZdF=_ZdF+1};
    case 4:{_ZeF=_ZeF+1};
   };
   
  switch (ceil _Zahl) do 
   {
    case 0:{_ZaC=_ZaC+1};
    case 1:{_ZbC=_ZbC+1};
    case 2:{_ZcC=_ZcC+1};
    case 3:{_ZdC=_ZdC+1};
    case 4:{_ZeC=_ZeC+1};
   };
   
  switch (round _Zahl) do 
   {
    case 0:{_ZaR=_ZaR+1};
    case 1:{_ZbR=_ZbR+1};
    case 2:{_ZcR=_ZcR+1};
    case 3:{_ZdR=_ZdR+1};
    case 4:{_ZeR=_ZeR+1};
   };
 };

_ergebnis = format["Gesamt (random 4): %1\n\nfloor:\n0: %2\n1: %3\n2: %4\n3: %5\n4: %6\n\nceil:\n0: %7\n1: %8\n2: %9\n3: %10\n4: %11\n\nround:\n0: %12\n1: %13\n2: %14\n3: %15\n4: %16\n\nRechenzeit: %17 Sekunden",
            _Ges,_ZaF,_ZbF,_ZcF,_ZdF,_ZeF,_ZaC,_ZbC,_ZcC,_ZdC,_ZeC,_ZaR,_ZbR,_ZcR,_ZdR,_ZeR,floor(time-_time)];
hint _ergebnis;
copyToClipboard _ergebnis;
Player groupChat "Ergebnis ins Clipboard kopiert!"
Vienna ist offline   Mit Zitat antworten
Antwort

Stichworte
alice ♥, silvie ♥


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
SILVIE - ALICE Fahrzeuge Anemia Editing & Scripting 7 25.12.2010 11:20
Zivilleben Alice A.L.I.C.E hypercop Editing & Scripting 7 14.09.2010 22:10


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