HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Uniform ändern (https://hx3.de/editing-scripting-167/uniform-aendern-18441/)

Cyborg11 08.01.2010 13:49

Uniform ändern
 
Der Titel sagt denk ich alles :zahn:

Hier das Skript:
Code:

/*
================================================================
by Cyborg11
Version: 1.00 @ 07.01.2010
Parameters: nul = [unit, [newunit,side]] execVM "uniformchange.sqf";
        _unit = Unitname that change the uniform
        _newunit = The new unit
        _side = Side of the new unit
Example:  nul = [player, ["GUE_Soldier_1",guerr]] execVM "uniformchange.sqf";
Example2: nul = [test, ["FR_GL",west]] execVM "uniformchange.sqf";

The new unit has the same weapons and magazines as the old unit
=================================================================
*/

// Variables
_unit = _this select 0;                // old unit
_posunit = getPos _unit;        //position of the old unit
_array = _this select 1;        // the new soldier array => ["FR_GL",west]
_side = _array select 1;        // side of the new unit
_newunit = _array select 0;        // classname of the new unit
_weapons = ((weapons _unit) - (items _unit));        // weapons of the old unit
_primweap = primaryWeapon _unit;        // primaryWeapon of the old unit
_magazines = magazines _unit;        // magazines of the old unit
_unit setPos [0,0,0];        // teleport the old unit to [0,0,0]

titleText ["Changing uniform ...", "BLACK FADED"];        // Black Screen

// Create the new unit
_uniform = group _unit createUnit [_newunit, _posunit, [], 0, "NONE"];
setPlayable _uniform;
sleep 0.5;
If (!isnil ("_uniform")) then {selectPlayer _uniform};

// New Unit gets the sames weapons as the old unit
removeAllWeapons _uniform;
{_uniform addMagazine _x} forEach _magazines;
{_uniform addWeapon _x} forEach _weapons;

// Select the primaryWeapon       
_uniform selectWeapon _primweap;
// Fix for weapons with grenade launcher
_muzzles = getArray(configFile>>"cfgWeapons" >> _primweap >> "muzzles");
_uniform selectWeapon (_muzzles select 0);

sleep 0.2;
deleteVehicle _unit;                        // delete old unit
sleep 1;
titleText [" ", "BLACK IN"];        // delete Black Screen

Müsste mal einer im MP testen, im SP funzt es 100% :)

Fogu 08.01.2010 13:56

cool werd ich mal testen :daumen:

Cyborg11 08.01.2010 16:47

Hab mal eine neue Version gemacht :)

Aufruf ist jetzt ein bisschen anders (addAction), aber man kann jetzt auch wieder die Uniform zurückwechseln. :zahn:

Code:

/*
======================================================================================
by Cyborg11
Version: 1.01 @ 08.01.2010
Parameters: unit addAction ["Change Uniform", "uniformchange.sqf", [newunit,side]];
        _unit = unit which gets the action to change the uniform
        _newunit = classname of the new unit
        _side = side of the new unit
Example: this addAction ["Change uniform", "uniformchange.sqf", ["GUE_Soldier_1",guerr]];
Example 2: player addAction ["Change uniform", "uniformchange.sqf", ["FR_GL",west,true]];

The new unit has the same weapons, magazines and the same name as the old unit
=======================================================================================
*/

// Variables
_unit = _this select 1;                // old unit
_action = _this select 2;        // action id
_sideold = side _unit;                // side of old unit
_type = typeOf _unit;                // classname of old unit
_posunit = getPos _unit;        // position of the old unit
_VarName = (vehicleVarName _unit);        // Editorname of the old unit
_array = _this select 3;        // the new soldier array => ["FR_GL",west]
_newunit = _array select 0;        // classname of the new unit
_side = _array select 1;        // side of the new unit
_weapons = ((weapons _unit) - (items _unit));        // weapons of the old unit
_primweap = primaryWeapon _unit;        // primaryWeapon of the old unit
_magazines = magazines _unit;        // magazines of the old unit

_unit setPos [0,0,0];        // teleport the old unit to [0,0,0]
titleText ["Changing uniform ...", "BLACK FADED"];        // Black Screen
_unit removeAction _action;

// Create the new unit
_uniform = group _unit createUnit [_newunit, _posunit, [], 0, "NONE"];
setPlayable _uniform;
sleep 0.5;
If (!isnil ("_uniform")) then {selectPlayer _uniform};

// New Unit gets the sames weapons as the old unit
removeAllWeapons _uniform;
{_uniform addMagazine _x} forEach _magazines;
{_uniform addWeapon _x} forEach _weapons;

// Select the primaryWeapon       
_uniform selectWeapon _primweap;
// Fix for weapons with grenade launcher
_muzzles = getArray(configFile>>"cfgWeapons" >> _primweap >> "muzzles");
_uniform selectWeapon (_muzzles select 0);

sleep 0.2;
deleteVehicle _unit;                        // delete old unit
sleep 1;
titleText [" ", "BLACK IN"];        // delete Black Screen
_uniform SetVehicleVarName _VarName;
_uniform call Compile Format ["%1=_This ; PublicVariable ""%1""",_VarName];
_uniform addAction ["Change uniform", "uniformchange.sqf", [_type,_side], 0, false, false, ""];

//hint format ["Unit: %1\nType: %2\nPosUnit: %3\nArray: %4\nNewUnit: %5\nSide: %6\nVarNameOld: %7\nVarNameNew: %8",_unit,_type,_posunit,_array,_newunit,_side,_VarName,(vehicleVarName _uniform)];

Im Moment kann man jeder Zeit seine Uniform wechseln. Soll ich die Action entfernen, wenn man einmal zurück gewechselt hat?

malibu.stacey 08.01.2010 17:10

Na, do sog I mercä ^^

Werd ich gleich mal verbasteln.

Zitat:

Im Moment kann man jeder Zeit seine Uniform wechseln. Soll ich die Action entfernen, wenn man einmal zurück gewechselt hat?
Hm, ich würds so lassen. Man kann es ja je nach Missionskontext entweder dem Spieler oder einem NPC (der wie bei mir auch ein Waffenwechselscript hat) geben.

=U.R.R= Martin 08.01.2010 20:36

nur nochmal zum verständniss..das ganze sieht dann wie aus? xD
im spieler options-menü kann dann die uniform gewählt werden von blufor/opfor usw?..oder läuft das per kiste o.o?

Worgal 08.01.2010 21:18

Das funktioniert als Aktion, das heißt du rollst mit dem Mausrad, dann kannst du Change Uniform auswählen und dann hast du die neue Uniform bzw. eine andere Klasse.
So würde ich das verstehen, denn das was dann abläuft ist eigentlich, dass löschen deiner derzeitigen Spielfigur und danach wird eine neue Einheit an der Position platziert wo du die Aktion ausgeführt hast, die bekommt die selbe Ausrüstung die du vorher hattest und die übernimmst du dann, und damit man diesen Vorgang nicht sieht, wird der Bildschirm kurz schwarz.
Korrigiert mich wenn ich falsch liege.:D

Cyborg11 09.01.2010 00:39

Zitat:

Zitat von Worgal (Beitrag 289420)
Das funktioniert als Aktion, das heißt du rollst mit dem Mausrad, dann kannst du Change Uniform auswählen und dann hast du die neue Uniform bzw. eine andere Klasse.
So würde ich das verstehen, denn das was dann abläuft ist eigentlich, dass löschen deiner derzeitigen Spielfigur und danach wird eine neue Einheit an der Position platziert wo du die Aktion ausgeführt hast, die bekommt die selbe Ausrüstung die du vorher hattest und die übernimmst du dann, und damit man diesen Vorgang nicht sieht, wird der Bildschirm kurz schwarz.
Korrigiert mich wenn ich falsch liege.:D

Ist genau richtig so! :)

Eine Einschränkung gibt es aber beim Benutzen des Skriptes. Alle Skripte/Variablen/Eventhandler, die auf die alte Einheit liefen, werden nach dem Uniformwechsel nicht mehr funktionieren. Ganz einfach, weil die alte Einheit gelöscht wird und man zu einer neuen Einheit wechselt.
Es gibt aber auch gar keine andere Möglichkeit die Uniform auf irgendeine andere Art und Weise zu ändern :[

burns 09.01.2010 14:33

Zitat:

Zitat von Cyborg11 (Beitrag 289442)
Es gibt aber auch gar keine andere Möglichkeit die Uniform auf irgendeine andere Art und Weise zu ändern :[

Code:

this setobjecttexture [0, ""blubb.paa""]

Bei den Civi´s klappt es zumindest,
die anderen habsch noch nciht probiert.

Cyborg11 09.01.2010 15:47

Zitat:

Zitat von burns (Beitrag 289598)
Code:

this setobjecttexture [0, ""blubb.paa""]

Bei den Civi´s klappt es zumindest,
die anderen habsch noch nciht probiert.

Damit änderst du nur Texturen, kein ganzes Modell ^^
Außerdem funzt der Befehl nur bei den Fahrzeugen, Flugzeugen, Helikoptern, Zivilisten und der LHD Crew.

burns 09.01.2010 16:32

Aso, Modell .... bin verpeilt :D

Cyborg11 17.02.2010 21:34

Soooo ... hab da mal mein Skript auf 1.3 gebracht.
Funktioniert jetzt mit ACE. Also Rucksack + Inhalt, sowie die Waffe auf dem Rücken werden auf die neue Spielereinheit übertragen.
Falls die alte Spielereinheit ein Leader von einer Gruppe war, dann wird die neue Einheit auch automatisch zum Leader.

Wie aber schon oben im Kommentar zu lesen ist ... ihr müsst alle Skripte, die auf die alte Einheit liefen, nochmal erneut auf die neue Einheit anwenden.

Code:

/*
==============================================================================================
by Cyborg11
Version: 1.03 @ 17.02.2010
Parameters: unit addAction ["Change Uniform", "uniformchange.sqf", [newunit,side,exit,debug]];
        _unit = unit which gets the action to change the uniform        (Object)
        _newunit = classname of the new unit                                (Object)
        _side = side of the new unit                                                (side)
        _exit = if the unit can only change his uniform once, then
                    set the variable to true (old -> new -> old)                (Boolean)
                    default: false
        _debug =        optional - default: false                (Boolean)
Example: this addAction ["Change uniform", "uniformchange.sqf", ["GUE_Soldier_1",guerr]];
Example 2: player addAction ["Change uniform", "uniformchange.sqf", ["FR_GL",west,true]];

The new unit has the same weapons, magazines and the same name as the old unit
BUT: Because the script deletes the old unit and create a new one you must edit this script and execute all
        scripts on the new unit again!
==============================================================================================
*/

private [
                "_ace","_unit","_action","_sideold","_type","_posunit","_varname","_array",
                "_newunit","_side","_exit","_weapons","_items","_primweap","_magazines",
                "_hasruck","_ruck","_ruckMags","_ruckWeaps","_debug","_weaponback"
                ];

// Variables
_ace = isClass (configFile >> "CfgPatches" >> "ace_version");        // Check if ACE is installed
_unit = _this select 1;                // old unit
_action = _this select 2;        // action id
_sideold = side _unit;                // side of old unit
_type = typeOf _unit;                // classname of old unit
_posunit = getPos _unit;        // position of the old unit
_varname = vehicleVarName _unit;        // Editorname of the old unit
_array = _this select 3;        // the new soldier array => ["FR_GL",west]
_newunit = _array select 0;        // classname of the new unit
_side = _array select 1;        // side of the new unit
If (count _array > 2) then {_exit = _array select 2} else {_exit = false};        // if set to true the script will exit
If (count _array > 3) then {_debug = _array select 3} else {_debug = false};
_weapons = (weapons _unit) - (items _unit);        // weapons of the old unit
_items = items _unit;                // items of old unit
_primweap = primaryWeapon _unit;        // primaryWeapon of the old unit
_magazines = magazines _unit;        // magazines of the old unit
If (_exit) then {
        If (isNil "CYBP_changecounter") then {
                CYBP_changecounter = 0;
        };
        CYBP_changecounter = CYBP_changecounter + 1;
};

If (_ace) then {
        _hasruck = player call ACE_Sys_Ruck_fnc_hasRuck;
        If (_hasruck) then {
                //_ruck = _unit call ACE_Sys_Ruck_fnc_FindRuck;
                _ruckMags = _unit getVariable "ACE_RuckMagContents";
                _ruckWeaps = _unit getVariable "ACE_RuckWepContents";
        };
        _weaponback = _unit getvariable "ACE_weapononback";
        If (_debug) then {player globalchat format ["%1",_weaponback]};
};

titleText ["Changing uniform ...", "BLACK FADED"];        // Black Screen
_unit setPos [0,0,0];                // teleport the old unit to [0,0,0]
_unit removeAction _action;

// Create the new unit
_uniform = (group _unit) createUnit [_newunit, _posunit, [], 0, "NONE"];
setPlayable _uniform;
sleep 0.5;
If (!isnil ("_uniform")) then {selectPlayer _uniform};
If (leader group _unit == leader _unit) then {                        // Check if old unit is leader
        (group _unit) selectLeader _uniform;
};

// New Unit gets the sames weapons as the old unit
removeAllWeapons _uniform;
{_uniform addMagazine _x} forEach _magazines;
{_uniform addWeapon _x} forEach _weapons;
{_uniform addWeapon _x} forEach _items;
If (_ace) then {
        If (_hasruck) then {
                _uniform setVariable ["ACE_RuckMagContents", _ruckMags, true];
                _uniform setVariable ["ACE_RuckWepContents", _ruckWeaps, true];
        };
        If (_weaponback != "") then {
                _uniform addWeapon _weaponback;
                [_uniform, _weaponback] call ACE_fnc_PutWeaponOnBack;
        };
};       

// Select the primaryWeapon       
_uniform selectWeapon _primweap;
// Fix for weapons with grenade launcher
_muzzles = getArray(configFile>>"cfgWeapons" >> _primweap >> "muzzles");
_uniform selectWeapon (_muzzles select 0);

sleep 0.2;
deleteVehicle _unit;                        // delete old unit
sleep 1;
titleText [" ", "BLACK IN"];        // delete Black Screen
_uniform SetVehicleVarName _varname;
_uniform call Compile Format ["%1=_This ; PublicVariable ""%1""",_varname];
If (!isNil ("_exit") && _exit && CYBP_changecounter >= 2) exitWith{};
_uniform addAction ["Change uniform", "uniformchange.sqf", [_type,_side,_exit,_debug], 0, false, false, ""];

If (_debug) then {
        hint format ["Counter: %9\nUnit: %1\nType: %2\nPosUnit: %3\nArray: %4\nNewUnit: %5\nSide: %6\nVarNameOld: %7\nVarNameNew: %8\nExit: %10",_unit,_type,_posunit,_array,_newunit,_side,_varname,(vehicleVarName _uniform),CYBP_changecounter,_exit]
};

Bei der nächsten Version bau ich vllt. noch ein, dass man das Skript auch auf tote Feindsoldaten verwenden kann :)

Rettich 17.03.2010 17:49

Liste der Anhänge anzeigen (Anzahl: 1)
Gibt es eigentlich ne Möglichkeit dein Skript MP- fähig zu machen? Ich war echt begeistert davon, nur leider werden die alten Spieler im MP nicht gelöscht….

Cyborg11 17.03.2010 18:04

Wird wohl daran liegen, dass die Unit dann aufm Server lokal ist.
Dedi oder selbst gehostet?

Rettich 17.03.2010 18:31

beides gleich...

Cyborg11 18.03.2010 15:25

Ok ich werde mal schauen, was sich da machen lässt :) Eigentlich könnte man das mit einem WaitUntil Skript auf dem Server machen.

Steht dazu irgendetwas in der ArmA2.rpt?

Rettich 18.03.2010 20:44

Duplicate weapon ItemMap detected for USMC_SoldierS_Sniper
Duplicate weapon ItemCompass detected for USMC_SoldierS_Sniper
Duplicate weapon ItemWatch detected for USMC_SoldierS_Sniper
Duplicate weapon ItemRadio detected for USMC_SoldierS_Sniper


Das sind die einzigen Einträge in der RPT

Gruß Rettich

..und schon mal Danke im Voraus!

SmartGun 19.03.2010 08:22

Moin!

erstmal: sehr coole Idee mit uniformwechsel. :daumen:
hatte das in AmrA schonmal probiert aber dann gesteckt mangels wissen und nerven...

Hab v1.3 deines scripts auch schon in einer Mission verbaut, bin aber noch nicht dazugekommen es aufm Dedi zu testen.

@ 'Duplicate weapon' meldung

Da könnte man noch 'removeallItems' mit rein nehmen, das entfernt kompass, map, gps usw.
Die Items laufen als 'weapon' und werden per 'addWeapon' hinzugefügt

Code:

_unit addWeapon "ItemWatch";
_unit addWeapon "ItemMap";
_unit addWeapon "ItemCompass";
_unit addWeapon "ItemRadio";
_unit addWeapon "ItemGPS";

Fänds echt cool, wenn du dein script MP-fähig bekommst und helfe auch gern beim testen.

Grüße!

Wiggum 19.03.2010 18:33

Super Script !

Wird es eine MP Version geben ?

Cyborg11 19.03.2010 19:07

Zitat:

Zitat von Wiggum (Beitrag 302123)
Super Script !

Wird es eine MP Version geben ?

Wenn ichs hinbekomme. :zahn: :naughty:

zzMAKOh 12.09.2010 10:48

Uniform wechseln
 
Hab mir nen Script gebastelt mit dem man die Uniform mit toten Einheiten wechseln kann, im Prinzip auch nen fake Script.
Type kopieren , BLACK OUT, Type neu erstellen/spawnen, Spieler in neue Einheit zwingen, alte Spieler Einheit sterben lassen und Original der "kopierten" Uniform löschen.

Hintergrundgedanke dabei war nur die Möglichkeit sich mit der Feind Uniform unter den Gegner zu mischen, im prinzip Undercover.

Also mit anderen Worten die eigene Seite soll nicht auf mich schießen und der Feind nur solange bis ich auffliege.

Problem für mich ist dabei nur die Seiten Zuweißung. Mit setCaptive müßte man erst wieder ne permanente Abfrage laufen lassen welche die Captivity wieder umkehrt wenn bestimmte Aktionen ausgeführt werden. Zudem wäre es ganz schön, wenn ich keiner Gruppe zugehöre (Einzelkämpfer), und längerer Zeit keinen meiner eigenen Leute über den Weg laufe das diese dann erstmal mistrauisch werden wenn sie nen Feind "meinen" zu sehen.

meine Idee wäre eine Abfrage auf die Faction der Uniform und von da eine Rückführung zur Seitenzugehörigkeit die sich dann ändert wenn man sich von seinen eigenen Leuten entfernt, aber wieder aufs Original zurück geht wenn ich mich ihnen wieder nähere.

Eine ähnliche Idee wäre auch für Fahrzeuge interessant.
(BWSoldat steigt in T72 (ungesehen) und solange er drinn bleibt und oder keine feindliche Aktion durchführt gilt er von außen zB. als EAST angehörig).

???

Grüße an alle, .......to be stoned:confused::D


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.

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