PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Moral


JSR
13.04.2014, 19:09
Moin.
Bin zur Zeit viel am scripten was Arma angeht. Von Selbstmordattentätern zur einzelnen Moral der Zivilisten. Lasse mich eigentlich von VBS inspirieren und um zugleich weiter in der Materie "Programmiersprache" einzudringen.

Ich habe ein GUI erstellt, welches auch gut funktioniert, dabei gibt es also keine Probleme. In dem GUI, welches via Actionmenü aufrufbar ist, kann man den Zivilisten vor einem gewisse Fragen stellen. Ich probiere als erstes ein einfaches "How are you?" zu lösen.

Ich habe es zwar hinbekommen, dass er eine Antwort gibt, kann den Wert aber nicht speichern.

Um es ersteinmal zu zeigen:


Habe es hinbekommen!



War einfacher als erwartet muss ich zugeben. Habe entdeckt, dass es einen Moral Wert gibt. Für alle, die zufällig mal hier vorbei stoßen:

Main.sqf

while {true} do {

CIV_Object = nearestObject [player, "Civilian"];
_dist = CIV_Object distance player;


if (_dist < 2 && cursorTarget == CIV_Object) then {CIV_Menu = player addAction ["Interaction", "Int.sqf"]; WaitUntil {CIV_Object distance Player > 3};
}
else {
player removeAction CIV_Menu;
player removeAction CIV_Menu;
};
};




Moral.sqf


_a = morale Civ_object;

switch (true) do {





if (_a > 0.2) then {confusedT = True;};
if (_a >= 0.4) then {ConfusedT = false; OkayT =true;};
if (_a >= 0.6) then {OkayT = false; FineT =true;};
if (_a > 0.8) then {FineT = false; happyT = true};




case (_a <= 0.2): {
HintSilent "I'm mad.";};

case (_a > 0.2 && confusedT ): {
HintSilent "I'm confused";};

case (_a >= 0.4 && okayT): {
HintSilent "I'm okay";};

case (_a >= 0.6 && FineT): {
HintSilent "I'm fine";};

case (_a >= 0.8 && happyT): {
HintSilent "I'm happy";};

};

Vienna
13.04.2014, 22:00
Das Skript zum Ein- und Ausschalten der Aktion. Der Skriptname der Aktion ist noch anzupassen.


while {true} do
{
CIV_Object = nearestObject [player, "Civilian"];
if (not isNull CIV_Object) then
{
_dist = CIV_Object distance player;

if (_dist < 3 && cursorTarget == CIV_Object) then
{
CIV_Menu = player addAction ["Interaction", "Int.sqf",[],5,true,true];
WaitUntil {sleep 0.5; CIV_Object distance Player > 3.1 or not alive CIV_Object};
player removeAction CIV_Menu
}
};
sleep 0.5
};

JSR
14.04.2014, 13:48
Ich hatte vorher das Problem, dass wenn ich zwei Zivilisten nah nebeneinander gestellt habe, das Menü manchmal doppelt in der Actionbar war. Jetzt ist es, mit deinem script den du hier als letztes gepostet hast weg.

Glaube ich zumindest. Dann wurde es auch nur einmal removed und ich hatte das Menü manchmal doppelt und es wurde immer nur eins von beiden removed.

Was genau ist der Grund dafür, dass es jetzt weg ist?


Ebenfalls habe ich eine Abfrage, ob der Zivilist feindliche Soldaten gesehen hat. Diese funktioniert mal ja, mal nicht. Komplett willkürlich.


while {true} do {
_enemy = east;
_enemyM = nearestObjects [Civ_Object, ["Man"], 500];
if (true) exitWith {
{if (side _x == _enemy) then { if (Civ_Object knowsabout _x > 0.5) then {HintSilent "Yes, I have seen something suspicious.";};};} forEach _enemym;
{if (side _x == _enemy) then { if (Civ_Object knowsabout _x < 0.5) then {HintSilent "No, I did not see something suspicious.";};};} forEach _enemyM;
};
};

Vienna
14.04.2014, 18:29
...

Was genau ist der Grund dafür, dass es jetzt weg ist?

Ebenfalls habe ich eine Abfrage, ob der Zivilist feindliche Soldaten gesehen hat. Diese funktioniert mal ja, mal nicht. Komplett willkürlich.
In meinem Skript wird das Skript so lange gestoppt, bis der angesprochene Zivilist weiter als 3,1m weg ist.


Es ist zu hinterfragen, wann ein Zivilist wen als Feind ansieht.