Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 23.05.2012, 22:38   #1 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard Kalter Atem Script

Also ich hab heute mal versucht ein 3rd party script zum laufen zu bringen.

Quelle:
Simple Breath Fog Script - Page 3

Ich hab das non ACRE ding genommen und in der init.sqf gestartet. Es läuft auch los (kontrolliert mit hint am ende des scripts) aber Atem ist nicht zu sehen bei meinen Zivilisten auf der Karte. Wo könnte der Fehler liegen?

Gibt es einen Debugger wo man durch den Code steppen kann? Das wäre sehr hilfreich um solchen Problemen auf die Schliche zu kommen. Im Moment kann ich nur raten aber es ist nicht leicht, da die Erfahrung mit Arma2 gering ist.
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 00:16   #2 (permalink)
Armed-Assault.de Team
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von MrCharles
 
Registriert seit: 22.12.2008
Beiträge: 3.641
Standard

Xeno hatte sowas mal für unseren Tacsat in ein paar Missionen eingebaut. Sollte in dem Pack sein, was irgendwo rumgeistert.
MrCharles ist offline   Mit Zitat antworten
Alt 24.05.2012, 08:11   #3 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

Zitat von MrCharles Beitrag anzeigen

Xeno hatte sowas mal für unseren Tacsat in ein paar Missionen eingebaut. Sollte in dem Pack sein, was irgendwo rumgeistert.

Das hilft mir wohl nicht weiter
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 08:15   #4 (permalink)
Armed-Assault.de Team
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von MrCharles
 
Registriert seit: 22.12.2008
Beiträge: 3.641
Standard

Zitat von xezon Beitrag anzeigen

Das hilft mir wohl nicht weiter

Könnte es aber

Muss heut nachmittag mal nachschauen
MrCharles ist offline   Mit Zitat antworten
Alt 24.05.2012, 09:07   #5 (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 xezon Beitrag anzeigen


... aber Atem ist nicht zu sehen bei meinen Zivilisten auf der Karte. Wo könnte der Fehler liegen?

Jetzt im Mai ist es nicht mehr kalt genug!
Vienna ist offline   Mit Zitat antworten
Alt 24.05.2012, 09:34   #6 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

Zitat von Vienna Beitrag anzeigen

Jetzt im Mai ist es nicht mehr kalt genug!

Schenkelklopfer.
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 12:55   #7 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Code:
_units = if (!isMultiplayer) then {switchableUnits} else {playableUnits};
{[_x, 0.03] execVM "foggy_breath.sqf"} foreach _units;

foggy_breath.sqf:
Code:
// Foggy breath 20110122
// modified by Xeno

private ["_unit", "_int"];
_unit = _this select 0;
_int = _this select 1; //intensity of fog (0 to 1)

while {alive _unit} do {
    sleep (2 + random 2); // random time between breaths

    _source = "logic" createVehicleLocal (getpos _unit);
    _fog = "#particlesource" createVehicleLocal getpos _source;
    _fog setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13,0],
    "", 
    "Billboard", 
    0.5, 
    0.5, 
    [0,0,0],
    [0, 0.2, -0.2], 
    1, 1.275,    1, 0.2, 
    [0, 0.2,0], 
    [[1,1,1, _int], [1,1,1, 0.01], [1,1,1, 0]], 
    [1000], 
    1, 
    0.04, 
    "", 
    "", 
    _source];
    _fog setParticleRandom [2, [0, 0, 0], [0.25, 0.25, 0.25], 0, 0.5, [0, 0, 0, 0.1], 0, 0, 10];
    _fog setDropInterval 0.001;

    _source attachto [_unit,[0,0.15,0], "neck"]; // get fog to come out of player mouth

    sleep 0.5; // 1/2 second exhalation
    deletevehicle _source;
    deleteVehicle _fog;
};
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 24.05.2012, 13:08   #8 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

switchableUnits ist natürlich schlecht weil es sollen ja auch auf AI's sein. Und es sieht nicht so dynamisch aus. Wenn neue AI's dazukommen würden hätten die kein breathing.
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 14:34   #9 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

ich werd das mal mit
Code:
{[_x, 0.03] execVM "foggy_breath.sqf"} forEach allUnits;
probieren

Und gibt es eigentlich noch nen equivalent zum C++ continue für arma schleifen?
Ein distance check wäre da noch ganz nett denke ich für die performance...

Code:
while {alive _unit} do {
    sleep (2 + random 2); // random time between breaths
    if(_unit distance player > 500) { continue; }
    ...
}

Geändert von xezon (24.05.2012 um 14:52 Uhr).
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 14:46   #10 (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

Ich glaub's nicht, ...und müsste nicht nach dem If-Block mit continue eh noch was stehen? War sicher nur ein Beispiel wa
flickflack ist offline   Mit Zitat antworten
Alt 24.05.2012, 14:53   #11 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

Zitat von flickflack Beitrag anzeigen

Ich glaub's nicht, ...und müsste nicht nach dem If-Block mit continue eh noch was stehen? War sicher nur ein Beispiel wa

Ja, hab mir die wurst dadrunter gespart. Habs nochmal editiert mit ein paar pünktchen dann ist es klarer. Schade, continue is ne feine Sache. Aber geht ja auch ohne.
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 15:17   #12 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

In cinematics sollte es aber Spieler unabhängig gehen. Was wäre die geschickteste Möglichkeit?

Code:
if(_unit distance player<500 || positionCameraToWorld distance player>5)
{ ...breath code... }
So vielleicht?
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 16:42   #13 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Das sollte natürlich lokal auf jedem Client laufen. Und die particleSource wird nur soweit gerendert wie deine Sichtweite ist. sch***egal die Distanca Abfrage... x-fach bewährtes Konzept auch mit vielen Spielern.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 24.05.2012, 16:59   #14 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

Zitat von Psychobastard Beitrag anzeigen

Das sollte natürlich lokal auf jedem Client laufen. Und die particleSource wird nur soweit gerendert wie deine Sichtweite ist. sch***egal die Distanca Abfrage... x-fach bewährtes Konzept auch mit vielen Spielern.

Im Singleplayer gibt es nur einen Client plus AI.

Wahrscheinlich ist es so, dass die particles nicht gerendert werden, aber Rendering ist nicht das einzige was Rechenleistung benötigt. Wenn ein Script unnötigerweise objekte erstellt und löscht dann benötigt das auch Rechenleistung.

Gerade bei Videospielen sollte man sparen wo man nur kann.
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 17:02   #15 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

du bist der boss. dann erfinde das rad neu.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 24.05.2012, 17:28   #16 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

Rad neu erfinden ist ja nicht nötig. Aber optimieren sollte doch drin sein. Oder meinst du das ist nicht okay?
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 17:57   #17 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Klar ist das okay. Aber wenn du da schon was ändern möchtest dann musst da viel weiter ausholen indem du fragst wer in deiner Reichweite ist, diesen dann das Script starten lassen und wenn er wieder raus ist auch das komplette Script (loop) verlassen.
Einfach in die Schleife noch eine Abfrage mehr reinpacken und nur den Effekt an sich wegkürzen bewirkt wohl eher das Gegenteil.
__________________
Niemand hat die Absicht eine Tüte zu bauen!
Pfandgiraffe ist offline   Mit Zitat antworten
Alt 24.05.2012, 20:04   #18 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

Zitat von Psychobastard Beitrag anzeigen

Klar ist das okay. Aber wenn du da schon was ändern möchtest dann musst da viel weiter ausholen indem du fragst wer in deiner Reichweite ist, diesen dann das Script starten lassen und wenn er wieder raus ist auch das komplette Script (loop) verlassen.
Einfach in die Schleife noch eine Abfrage mehr reinpacken und nur den Effekt an sich wegkürzen bewirkt wohl eher das Gegenteil.

Stimmt. Mal gucken ob ich das hinkriege. Hab das skript jetzt erstmal mit der Abfrage oben erweitert und unten noch ne head model recognition reingeflastert damit der Atem auch da rauskommt wo die AI hinguckt. Die gucken nämlich gerne in die Gegend...

Code:
private ["_unit", "_int"];
_unit = _this select 0;
_int = _this select 1; // intensity of fog (0 to 1)

while {alive _unit} do
{
	sleep (2 + random 2); // random time between breaths

	if(_unit distance player < 500 || screenToWorld[0.5, 0.5] distance player > 5) then
	{
		_source = "logic" createVehicleLocal (getpos _unit);
		_fog = "#particlesource" createVehicleLocal getpos _source;
		_fog setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13,0],
		"", 
		"Billboard", 
		0.5, 
		0.5, 
		[0,0,0],
		[0, 0.2, -0.2], 
		1, 1.275,    1, 0.2, 
		[0, 0.2,0], 
		[[1,1,1, _int], [1,1,1, 0.01], [1,1,1, 0]], 
		[1000], 
		1, 
		0.04, 
		"", 
		"", 
		_source];
		_fog setParticleRandom [2, [0, 0, 0], [0.25, 0.25, 0.25], 0, 0.5, [0, 0, 0, 0.1], 0, 0, 10];
		_fog setDropInterval 0.001;

		_headDir = _unit call CBA_fnc_modelHeadDir;
		_radius = 0.1;
		_headX = sin(_headDir select 1)*_radius;
		_headY = 0.15-sin(abs(_headDir select 1))*_radius;
		_headZ = (_headDir select 2)/360-0.03;
		_source attachto [_unit, [_headX, _headY, _headZ], "neck"]; // get fog to come out of player mouth

		sleep 0.5; // 1/2 second exhalation
		deletevehicle _source;
		deleteVehicle _fog;
	};
};
xezon ist offline   Mit Zitat antworten
Alt 24.05.2012, 23:11   #19 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von xezon
 
Registriert seit: 31.03.2003
Beiträge: 2.533
Standard

So hab jetzt mal versucht nen manager zwischenzulegen aber die particles sind nun weg. Habs erstmal nur aufm player laufen. Ne idee wo es stockt? Execution kommt bei breathlogic.sqf an und läuft auch durch.

breathmanager.sqf
Code:
func_breathCond = compile preprocessFile "scripts\breathcond.sqf";
_func_breathLogic = compile preprocessFile "scripts\breathlogic.sqf";

while {true} do
{
	_near = [player];//nearestObjects[player, ["Man"], 500];
	{
		_hasBreath = _x getVariable["hasBreath", 0]==1;
		_canBreath = _x call func_breathCond;		
		if(!_hasBreath && _canBreath) then { [_x, 0.03] spawn _func_breathLogic; }
	}
	forEach _near;
	sleep 10;
}
breathcond.sqf
Code:
_isAlive = alive _this;
_isOnFoot = vehicle _this == _this;
_isCloseToPlayer = _this distance player<500;
_isCinematic = screenToWorld[0.5, 0.5] distance player>5;

/*return*/ _isAlive && _isOnFoot && (_isCloseToPlayer || _isCinematic)
breathlogic.sqf
Code:
private ["_unit", "_int"];
_unit = _this select 0;
_int = _this select 1; // intensity of fog (0 to 1)

_unit setVariable ["hasBreath", 1];

while {_unit call func_breathCond} do
{
	sleep (2 + random 2);

	_source = "logic" createVehicle (getpos _unit);
	_fog = "#particlesource" createVehicle getpos _source;
	_fog setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13,0],
	"", 
	"Billboard", 
	0.5, 
	0.5, 
	[0,0,0],
	[0, 0.2, -0.2], 
	1, 1.275,    1, 0.2, 
	[0, 0.2,0], 
	[[1,1,1, _int], [1,1,1, 0.01], [1,1,1, 0]], 
	[1000], 
	1, 
	0.04, 
	"", 
	"", 
	_source];
	_fog setParticleRandom [2, [0, 0, 0], [0.25, 0.25, 0.25], 0, 0.5, [0, 0, 0, 0.1], 0, 0, 10];
	_fog setDropInterval 0.001;

	_headDir = _unit call CBA_fnc_modelHeadDir;
	_radius = 0.1;
	_headX = sin(_headDir select 1)*_radius;
	_headY = 0.15-sin(abs(_headDir select 1))*_radius;
	_headZ = (_headDir select 2)/360-0.03;
	_source attachto [_unit, [_headX, _headY, _headZ], "neck"];

	sleep 0.5;
	deleteVehicle _source;
	deleteVehicle _fog;
};

_unit setVariable ["hasBreath", nil];
xezon ist offline   Mit Zitat antworten
Alt 25.05.2012, 06:51   #20 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 31
Beiträge: 1.724
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

Zitat:

_hasBreath = _x getVariable["hasBreath", 0]==1;


Zitat:

_source = "logic" createVehicle (getpos _unit);


...usw.

Ich hab mal alles in ein Script gepackt und das preCompile der Funktion welche keine ist weggelassen. Da sind eine ganze Menge Tippfehler und andere ungereimtheiten drinnen gewesen. Ob das jetzt funzt kann ich nicht sagen da ungetestet...

Code:
private ["_breath"];

breath_cond = {
    private  ["_bool"];
    _bool = if (alive _this && (vehicle _this == _this) && ((_this distance player <= 500) || (screenToWorld [0.5, 0.5] distance player >= 5))) then {true} else {false};
    _bool
};

_breath = {
    private  ["_unit", "_int"];
    _unit = _this select 0;
    _int = _this select 1; // intensity of fog (0 to 1)
    _unit setVariable ["hasBreath", 1];

    while {_unit call breath_cond} do {
        sleep (2 + random 2); // random time between breaths

        _source = "logic" createVehicleLocal (getpos _unit);
        _fog = "#particlesource" createVehicleLocal getpos _source;
        _fog setParticleParams [["\Ca\Data\ParticleEffects\Universal\Universal", 16, 12, 13,0],
        "", 
        "Billboard", 
        0.5, 
        0.5, 
        [0,0,0],
        [0, 0.2, -0.2], 
        1, 1.275,    1, 0.2, 
        [0, 0.2,0], 
        [[1,1,1, _int], [1,1,1, 0.01], [1,1,1, 0]], 
        [1000], 
        1, 
        0.04, 
        "", 
        "", 
        _source];
        _fog setParticleRandom [2, [0, 0, 0], [0.25, 0.25, 0.25], 0, 0.5, [0, 0, 0, 0.1], 0, 0, 10];
        _fog setDropInterval 0.001;

        _source attachto [_unit,[0,0.15,0], "neck"]; // get fog to come out of player mouth

        sleep 0.5; // 1/2 second exhalation
        deletevehicle _source;
        deleteVehicle _fog;
    };
    _unit setVariable ["hasBreath", nil];
};


while {true} do {
    _near = [player];//nearestObjects[player, ["Man"], 500];
    {
        if (_x call breath_cond && (format ["%1", (_x getVariable "hasBreath")] == "<null>")) then {
            [_x, 0.03] spawn _breath;
        };
    } forEach _near;
    sleep 10;
};

btw: Wesentlich besser ist es jetzt trotzdem nicht. Ich behaupte es macht keinen Unterschied (wenn da nicht grad 1000 KI's sind) ob du da jetzt noch einen loop vorlegst oder alles direkt ausführst.
Ich dachte eher an eine .fsm die das checkt und ein array füllt oder eben auch leert. Dieses array enthält dann die Units die Atmen sollen.
__________________
Niemand hat die Absicht eine Tüte zu bauen!

Geändert von Pfandgiraffe (25.05.2012 um 08:15 Uhr).
Pfandgiraffe 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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Beta-Patch für OpA erschienen det99 Community 1429 18.07.2014 16:51
Day & Weather Script Moerderhoschi Editing & Scripting 13 02.12.2012 10:29
Ammobox Script problem G36Firestorm Editing & Scripting 11 18.07.2011 15:04
marker über script erzeugen hypercop Editing & Scripting 2 28.08.2010 22:40
Improved Bullet Cam Script miromanu Editing & Scripting 3 21.08.2010 01:01


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