PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : per Skript erstellte Einheiten Namen vergeben


Hannibal
29.07.2008, 16:19
Hallo,

Ich möchte Einheiten die im laufe der Map (genauer gesagt bei Warfare) gekauft werden einen Namen verpassen. Es soll so sein als würde man im Editor einem Fahrzeug im Feld Name dort
den Namen vergibt.
Was ich bis jetzt herausgefunden habe dass man Fahrzeugen etc Namen vergibt in dem man z.B.
_name = name f1 schreibt leider weiß ich nicht wo und genau wie ich dieses im betreffenden Skript hineinschreiben muss.

Hier das Skript wo die Hubschrauber bei der warfare erstellt werden

;Last modified 3/18/8
;************************************************* ****************************************
;Description: Aircraft factory configurations.
;_o = One man vehicle.
;************************************************* ****************************************

;WEST
_u = ["MH6"]
_d = [Localize "STR_DN_MH6"]
_c = [2500]
_m = [2500 + (westBarracksCosts Select WPILOTTYPE)]
_t = [35]
_p = [20]
_o = [true]
_i = ["\ca\air\data\ico\mh6_lb_CA.paa"]
_name = name WestSlot1

_u = _u + ["AH6"]
_d = _d + [Localize "STR_DN_AH6"]
_c = _c + [2800]
_m = _m + [2800 + (westBarracksCosts Select WPILOTTYPE)]
_t = _t + [40]
_p = _p + [30]
_o = _o + [true]
_i = _i + ["\ca\air\data\ico\ah6_lb_CA.paa"]

_u = _u + ["UH60MG"]
_d = _d + [Localize "STR_DN_UH60_MG"]
_c = _c + [1800]
_m = _m + [1800 + (westBarracksCosts Select WPILOTTYPE) * 3]
_t = _t + [40]
_p = _p + [25]
_o = _o + [false]
_i = _i + ["\ca\air\data\ico\uh_60mg_CA.paa"]

_u = _u + ["UH60"]
_d = _d + [Localize "STR_DN_UH60"]
_c = _c + [5000]
_m = _m + [5000 + (westBarracksCosts Select WPILOTTYPE)]
_t = _t + [45]
_p = _p + [40]
_o = _o + [true]
_i = _i + ["\ca\air\data\ico\uh_60_CA.paa"]

_u = _u + ["AH1W"]
_d = _d + [Localize "STR_DN_AH1Z"]
_c = _c + [8000]
_m = _m + [8000 + (westBarracksCosts Select WPILOTTYPE) * 2]
_t = _t + [55]
_p = _p + [50]
_o = _o + [false]
_i = _i + ["\ca\air\data\ico\ah1z_CA.paa"]

for [{_count = Count _u - 1},{_count >= 0},{_count = _count - 1}] do {Call Compile Format["%1TYPE = %2",_u Select _count,_count];}

;Used to calculate amount of units needed to buy vehicle.
westOneManAircraftVehicles = []
for [{_count = Count _u - 1},{_count >= 0},{_count = _count - 1}] do {if (_o Select _count) then {westOneManAircraftVehicles = westOneManAircraftVehicles + [_count]};}

westAircraftUnits = _u
westAircraftDescriptions = _d
westAircraftCosts = _c
westAircraftMannedCosts = _m
westAircraftTimes = _t
westAircraftPoints = _p
westAircraftImages = _i

;EAST
_u = ["MI17_MG"]
_d = [Localize "STR_DN_MI17_MG"]
_c = [2800]
_m = [2800 + (eastBarracksCosts Select EPILOTTYPE) * 2]
_t = [35]
_p = [20]
_o = [false]
_i = ["\ca\air\data\ico\mi17_hip_mg_CA.paa"]

_u = _u + ["MI17"]
_d = _d + [Localize "STR_DN_MI17"]
_c = _c + [5500]
_m = _m + [5500 + (eastBarracksCosts Select EPILOTTYPE)]
_t = _t + [45]
_p = _p + [40]
_o = _o + [true]
_i = _i + ["\ca\air\data\ico\mi17_HIP_CA.paa"]

_u = _u + ["KA50"]
_d = _d + [Localize "STR_DN_KA50"]
_c = _c + [9000]
_m = _m + [9000 + (eastBarracksCosts Select EPILOTTYPE)]
_t = _t + [55]
_p = _p + [50]
_o = _o + [true]
_i = _i + ["\ca\air\data\ico\ka50_CA.paa"]

for [{_count = Count _u - 1},{_count >= 0},{_count = _count - 1}] do {Call Compile Format["%1TYPE = %2",_u Select _count,_count];}

;Used to calculate amount of units needed to buy vehicle.
eastOneManAircraftVehicles = []
for [{_count = Count _u - 1},{_count >= 0},{_count = _count - 1}] do {if (_o Select _count) then {eastOneManAircraftVehicles = eastOneManAircraftVehicles + [_count]};}

eastAircraftUnits = _u
eastAircraftDescriptions = _d
eastAircraftCosts = _c
eastAircraftMannedCosts = _m
eastAircraftTimes = _t
eastAircraftPoints = _p
eastAircraftImages = _i

;RESISTANCE
resistanceAircraftUnits = []
resistanceAircraftDescriptions = []
resistanceAircraftCosts = []
resistanceAircraftMannedCosts = []
resistanceAircraftTimes = []
resistanceAircraftPoints = []
resistanceAircraftImages = []

aircraftUnits = westAircraftUnits + eastAircraftUnits + resistanceAircraftUnits
aircraftUnitCosts = westAircraftCosts + eastAircraftCosts + resistanceAircraftCosts
aircraftUnitDescriptions = westAircraftDescriptions + eastAircraftDescriptions + resistanceAircraftDescriptions

;Determine longest build time.
longestAircraftBuildTime = 0
_t = eastAircraftTimes + westAircraftTimes + resistanceAircraftTimes
for [{_count = Count _t - 1},{_count >= 0},{_count = _count - 1}] do {if (_t Select _count > longestAircraftBuildTime) then {longestAircraftBuildTime = _t Select _count};}

;************************************************* ****************************************
;6/13/7 MM - Created file.



Welche Frage sich mir dann auch stellen würde ist was passiert wenn mehr als einer das selber Fahrzeug kauft wird der name dann erweiter z.b. In f1_1 statt f1 oder stößt man hier auf ein Problem da man den Namen festgelegt hat und alle erstellten Fahrzeugen zwangsläufig den selben Namen tragen aber nur eines einen Namen haben kann und das 2. Fahrzeug sozusagen leerausgeht also keinen namen bekommt?

Mfg

i0n0s
29.07.2008, 19:36
So bekommst du nur den Namen der Einheit (wobei Name noch nichtmal der Variablenname ist).
Und du müsstest selbstständig den Namen erhöhen, ansonsten überschreibst du die alte Variable.
Wozu brauchst du das genau?

Hannibal
29.07.2008, 20:04
ich möchte das flare system von mando in die map hinzufügen da man in der init zeile den namen des vehicles angeben muss damit die raketen überhaupt auf die flares reagieren

init.sqf

// Mando Missile ArmA initialization
[]execVM"mando_missiles\mando_missileinit.sqf";

[names des AH6 Hubschraubers, 400, 1, 2, true]execVM"mando_missiles\units\mando_missileecm.sqf"; ///

[["AH6"], 0, "", [0,0], [0,0], 15, 15, "mando_missiles\units\mando_missilevehicle.sqf", false, false, false, false, [0,0,0], "mando_missiles\units\keysets\mando_air1_keys.sqf", 5, 20, 3, 0]execVm"mando_missiles\units\mando_assignvehicle_by_type.s qf";

wenn der aufruf mit dem namen des fahrzeuges nicht vorhanden ist funktionieren zwar die flares aber die raketen reagieren nicht drauf deshalb muessen die fahrzeuge namen haben

i0n0s
29.07.2008, 20:09
Dann poste mal das entsprechende Script was die Einheiten erstellt (Tipp: CreateUnit/CreateVehicle).

Hannibal
29.07.2008, 20:47
ein skript das so ähnlich heißt hab ich nicht gefunden aber im skript client_buyUnit gibt es ne kategorie createvehicle

;Last modified 4/24/8
;************************************************* ****************************************
;Description: Buys a unit.
;************************************************* ****************************************

_type = _this Select 0
_unitType = _this Select 1
_factory = _this Select 2
_empty = _this Select 3

_team = Group player
if (Count _this > 4) then {_team = _this Select 4}

if (IsNull _factory) then {Exit};
if (GetDammage _factory >= 1) then {Exit};

_factoryName = ""
if (Call Compile Format["_type == %1AIRPORTTYPE",sideJoinedText]) then {_factoryName = "WingedAircraft"};
if (Call Compile Format["_type == %1DEPOTTYPE",sideJoinedText]) then {_factoryName = "Depot"};

if (_factoryName == "") then {_factoryName = Call Compile Format["%1Structures Select _type",sideJoinedText]};

_unit = Call Compile Format["%1%2Units Select _unitType",sideJoinedText,_factoryName]

_cost = Call Compile Format["%1%2Costs Select _unitType",sideJoinedText,_factoryName]
if (!_empty) then {_cost = Call Compile Format["%1%2MannedCosts Select _unitType",sideJoinedText,_factoryName]};

_time = Call Compile Format["%1%2Times Select _unitType",sideJoinedText,_factoryName]
_oneMan = Call Compile Format["(_unitType In %1OneMan%2Vehicles)",sideJoinedText,_factoryName]

_totalUnits = Count (Units _team Call GetLiveUnits)

;Vehicles have 2 units instead of one, so increase by 1.
if (_type != EASTBARRACKSTYPE && _type != WESTBARRACKSTYPE && !_empty && !_oneMan) then {_totalUnits = _totalUnits + 1};

if (!_empty && _totalUnits + 1 > MAXPLAYERTEAMSIZE) then {Exit};
if (_cost > (Call GetPlayerFunds)) then {Exit};

(-_cost) Call ChangePlayerFunds

[CMDREQUESTUSESTRUCTURE,_factory,_time] Exec "Client\Client_CommandToServer.sqs"

~_time

if (IsNull _factory) then {Exit};
if (GetDammage _factory >= 1) then {Exit};

if (!Local Leader _team) then {Goto "CreateRemote"};

_position = [GetPos _factory,14,GetDir _factory + 180] Call GetPositionFrom

if (Call Compile Format["_type == %1AIRCRAFTTYPE",sideJoinedText]) then {_position = [GetPos _factory,21,GetDir _factory] Call GetPositionFrom};
if (Call Compile Format["_type == %1AIRPORTTYPE",sideJoinedText]) then {_position = [GetPos _factory,38,GetDir _factory + 180] Call GetPositionFrom};

if (_unit In soldierUnits) then {Goto "CreateUnit"};

#CreateVehicle

_vehicle = _unit CreateVehicle _position
if(_unit == "AH6") then {_vehicle addWeapon "TwinM134";};
if(_unit == "SU34B") then {_vehicle removeWeapon "Ch29Launcher"; _vehicle removeMagazine "4Rnd_Ch29"; _vehicle addWeapon "BombLauncher"; _vehicle addMagazine "6Rnd_GBU12_AV8B";};
if(_unit == "KA50") then {_vehicle removeWeapon "VikhrLauncher"; _vehicle removeMagazine "12Rnd_Vikhr_KA50"; _vehicle addWeapon "Ch29Launcher"; _vehicle addMagazine "4Rnd_Ch29"; _vehicle addMagazine "4Rnd_Ch29"; _vehicle addMagazine "4Rnd_Ch29"; _vehicle addMagazine "40Rnd_80mm";};
if(_unit == "A10") then {_vehicle removeWeapon "MaverickLauncher"; _vehicle removeMagazine "5Rnd_Maverick_A10"; _vehicle addWeapon "BombLauncher"; _vehicle addMagazine "6Rnd_GBU12_AV8B";};
if(_unit == "ZSU") then {_vehicle addMagazine "2000Rnd_23mm_AZP85"; _vehicle addWeapon "AZP85"; _vehicle addMagazine "2000Rnd_23mm_AZP85"; _vehicle addWeapon "AZP85"; _vehicle addMagazine "2000Rnd_23mm_AZP85"; _vehicle addWeapon "AZP85"; _vehicle addMagazine "2000Rnd_23mm_AZP85";};
if(_unit == "Vulcan") then {_vehicle addMagazine "2100Rnd_20mm_M168";};
_vehicle SetDir ((GetDir _factory + 270) % 360)
[_vehicle,sideJoined] Call InitUnit

if (_unit == Format["Warfare%1SupplyTruck",sideJoinedText]) then {[sideJoined,_vehicle] Spawn UpdateSupplyTruck};
if (_empty) then {Exit};

_soldierName = Call Compile Format["%1SOLDIER",sideJoinedShortText]

#CreateDriver

_driver = _team CreateUnit [_soldierName,GetPos _vehicle,[],0.2,"FORM"]
[_driver,sideJoined] Call InitUnit
[_driver] AllowGetIn true
_driver MoveInDriver _vehicle

#CreateGunner

if (_vehicle EmptyPositions "gunner" < 1) then {Exit};

_gunner = _team CreateUnit [_soldierName,GetPos _vehicle,[],0.2,"FORM"]
[_gunner,sideJoined] Call InitUnit
[_gunner] AllowGetIn true
_gunner MoveInGunner _vehicle

Exit

#CreateUnit

_soldier = _team CreateUnit [_unit,_position,[],0.2,"FORM"]
[_soldier,sideJoined] Call InitUnit

Exit

#CreateRemote

[CMDCREATEVEHICLE,_team,_vehicle,_factory] Exec "Client\Client_CommandToServer.sqs"

;************************************************* ****************************************
;3/28/7 MM - Created file.

i0n0s
29.07.2008, 21:23
In dem Skript ist "_vehicle" der von dir gesuchte Name

Hannibal
29.07.2008, 21:48
muesste es dann in etwa so aussehen?

if(_unit == "AH6") then {_name = name ah6_1};

und wie erstelle ich dann mehrrere namen für die selben fahrzeuge in etwa so?

if(_unit == "AH6") then {"_name = name ah6_1","_name = name ah6_2"};

wenn ja wird dann ein freier name automatisch rausgesucht?

i0n0s
29.07.2008, 21:52
Du hast keinen Schimmer von Programmierung?
Sobald du den Parameter dem Skript übergibst bekommt es eine Kopie und du kannst mit deiner Version machen was du willst.
Somit brauchst du keine mehreren Namen.

Vienna
29.07.2008, 22:08
Wenn du mit Skript ein Objekt (Soldat, Fahrzeug usw.) erstellst, dann wird dem Objekt vom Programm eine Bezeichnung zur Identifizierung zugeteilt. Diese Bezeichnung kannst du speichern.

z.B.: _unit = createVehicle ……

In der Variablen _unit ist nun die Bezeichnung des Objekt gespeichert. Allerdings ist die Variable _unit eine lokale Variable des Skripts.

Um die Variable außerhalb des Skripts zu verwenden, musst du eine globale Variable nehmen.

z.B.: Panzer1 = createVehicle ……

Diese globale Variable steht jetzt außerhalb des Skripts zur Verfügung und du kannst mit diesem Namen (Panzer1) das erstellte Objekt ansprechen. Allerdings nur auf dem PC wo diese Variable in dem Skript erstellt wurde. Um das Objekt in dieser Variablen den übrigen PCs bekannt zu machen, musst du die Variable und deren Inhalt zu diesen PCs übertragen.

Das geschieht so: publicVariable "Panzer1"

publicVariable - Bohemia Interactive Community (http://community.bistudio.com/wiki/publicVariable)


Hannibal
30.07.2008, 12:41
ich hab das bis jetzt mit

if(_unit == "AH6") then {_name = name ah};

was anscheinent nicht funktioniert hat wie muesste es richtig aussehen?

bei

publicVariable "Panzer1"

habe ich erstmal folgendes problem woher weiß ich dass der name panzer1 für welches fahrzeug gilt
(sprich ah6 ah1 harrier etc)
und wie und wo muss ich dann publicVariable "Panzer1" einfügen

Vienna
30.07.2008, 20:05
if(_unit == "AH6") then {Heli1 = _unit};
publicVariable "Heli1";

Dann hat der Heli den Namen Heli1

Variable mit Unterstrich beginnend (z.B. _unit) sind lokal und nur im Skript sichtbar. Variable ohne Unterstich am Anfang sind global auf dem PC in jedem Skript, Auslöser usw. sichtbar.

Durch publicVariable "Heli1" ist er auf allen PC sichtbar.

i0n0s
31.07.2008, 02:21
Er will den Heli doch gar keinen Namen geben sondern einfach das Mando-Missle starten:

if(_unit == "AH6") then {
[_unit, 400, 1, 2, true] execVM"mando_missiles\units\mando_missileecm.sqf";
};

Hannibal
31.07.2008, 13:38
leider funktioniert es nicht so sieht momentan meine client_buyunit.sqf aus

#CreateVehicle

_vehicle = _unit CreateVehicle _position
if(_unit == "SU34B") then {_vehicle removeWeapon "Ch29Launcher"; _vehicle removeMagazine "4Rnd_Ch29"; _vehicle addWeapon "BombLauncher"; _vehicle addMagazine "6Rnd_GBU12_AV8B";};
if(_unit == "KA50") then {_vehicle removeWeapon "VikhrLauncher"; _vehicle removeMagazine "12Rnd_Vikhr_KA50"; _vehicle addWeapon "Ch29Launcher"; _vehicle addMagazine "4Rnd_Ch29"; _vehicle addMagazine "4Rnd_Ch29"; _vehicle addMagazine "4Rnd_Ch29"; _vehicle addMagazine "40Rnd_80mm";};
if(_unit == "A10") then {_vehicle removeWeapon "MaverickLauncher"; _vehicle removeMagazine "5Rnd_Maverick_A10"; _vehicle addWeapon "BombLauncher"; _vehicle addMagazine "6Rnd_GBU12_AV8B";};
if(_unit == "ZSU") then {_vehicle addMagazine "2000Rnd_23mm_AZP85"; _vehicle addWeapon "AZP85"; _vehicle addMagazine "2000Rnd_23mm_AZP85"; _vehicle addWeapon "AZP85"; _vehicle addMagazine "2000Rnd_23mm_AZP85"; _vehicle addWeapon "AZP85"; _vehicle addMagazine "2000Rnd_23mm_AZP85";};
if(_unit == "Vulcan") then {_vehicle addMagazine "2100Rnd_20mm_M168";};
if(_unit == "AH6") then {[_unit, 400, 1, 2, true] execVM"mando_missiles\units\mando_missileecm.sqf";};
_vehicle SetDir ((GetDir _factory + 270) % 360)
[_vehicle,sideJoined] Call InitUnit

if (_unit == Format["Warfare%1SupplyTruck",sideJoinedText]) then {[sideJoined,_vehicle] Spawn UpdateSupplyTruck};
if (_empty) then {Exit};


was habe ich eventuell falschgemacht

Vienna
31.07.2008, 14:19
Was funktioniert nicht? Wo testest du, auf deinem PC oder auf einem Server? Bekommst du eine Fehlermeldung?

Hannibal
31.07.2008, 14:52
ich teste es auf einem dedicated
was nicht funktioniert is das mando flare system
ich habe es einmal sogemacht wie du mir es beschrieben hast sprich mit publicVariable "Heli1"; dieses habe ich in der client_buyunit.sqf eingefügt
und dann habe ich es so gemacht wie mir i0n0s zuletzt beschrieben hat die umsetzung davon kann man ja in meinem letzten post sehen
und nein ich bekomme keine fehlermeldung

Vienna
31.07.2008, 17:44
Keine Ahnung wie das "mando flare system" abläuft. Jedenfalls ist das Skript bei Warfare nur auf dem Erstellenden PC aktiv, weil das Objekt während des Spiels erstellt wurde. Wenn du den Skriptaufruf im Editor in die Initialisieurng des Objekts eingibst, dann wird es auf allen PCs gestartet.

Wäre der Skriptstart auf allen PCs erforderlich, so müßtest du das extra programmieren. Dabei ist zu bedenken, dass auch Neueinsteiger das Skript dann laden müßten.

Ohne fundierte Kenntnisse über die MP-Programmierung von Arma würde ich in Warfare solche Funktionen nicht hinzufügen.

Hannibal
31.07.2008, 20:37
also zur funktionweise zum flare system

in der init.sqf hat man einmal folgendes drin stehen

[]execVM"mando_missiles\mando_missileinit.sqf";

und

[["AH6"], 0, "", [0,0], [0,0], 15, 15, "mando_missiles\units\mando_missilevehicle.sqf", false, false, false, false, [0,0,0], "mando_missiles\units\keysets\mando_air1_keys.sqf", 5, 20, 3, 0]execVm"mando_missiles\units\mando_assignvehicle_by_type.s qf";

hier werden anzahl der flares etc bestimmt und für welches fahrzeug das gelten soll bzw fahrzeugklasse

nun stößt man folgendes problem die falres reagieren nur auf die mando missiles und nicht auf normalen arma raketen und deshalb fügt man noch diese zeile hinzu

[Heli1, 400, 1, 2, true]execVM"mando_missiles\units\mando_missileecm2.sqf";

somit funktionieren die flares auch bei den normalen arma raketen
problem das sich mir jetzt stellt ist dass man in dieser zeile den namen des fahrzeugs eingeben muss der hier Heli1 lautet und deshalb das ganze

wollte damit nur eventuelle unklarheiten beseitigen bzw das ganze verdeutlichen

Vienna
31.07.2008, 20:47
Erstelle einmal in Warfare im Editor einen Heli und gib das in die Initialisierung ein:

[this, 400, 1, 2, true]execVM"mando_missiles\units\mando_missileecm2.sqf" ;


Dann begib dich zum Heli und schau ob es bei dem funktioniert.

Hannibal
31.07.2008, 22:52
wennn ich das so in die init zeile schreibe bekomme ich nur die meldung

typ script, erwartet nichts

hab da auch ein wenig rumprobiert aber bekomme nur eine andere fehlermeldung

i0n0s
31.07.2008, 23:05
Nimm mal:
bla = [this, 400, 1, 2, true]execVM"mando_missiles\units\mando_missileecm2.sqf";
Und les dir mal den Editing Guide durch, das Kapitel mit den Scripts.

Hannibal
31.07.2008, 23:33
ok so funktierts bei dem heli

i0n0s
31.07.2008, 23:38
Dann sieht der Code so aus:
if(_unit == "AH6") then {
_unit setVehicleInit "[this, 400, 1, 2, true] execVM ""mando_missiles\units\mando_missileecm.sqf"";";
processInitCommands;
};

Hannibal
01.08.2008, 00:54
tut mir leid ich bekomme ne fehlermeldung

' |#|};'
Error Fehlende {

danach kam diese fehlermeldung

' if(_unit == "AH6") then |#| {_unit setvehicleinit "[this, 400, 1, 2,...'
Error Allgemeiner Fehler in Ausdruck

danach habe ich die absätze rausgenommen bzw die leerschritte daraufhin verschwand die 1. fehlermeldung die übrigends immer dann endstand wenn der heli in auftrag gegeben wurde aber die fehlermeldung trat in agewandelter form wieder auf die nur beim erscheinen des helis auftauchte

' if(_unit == "AH6") then {_unit |#| setvehicleinit "[this, 400, 1, 2, true] ...'
Error Allgemeiner Fehler in Ausdruck

so sieht die zeile bei mir aus

if(_unit == "AH6") then {_unit setVehicleInit "[this, 400, 1, 2, true] execVM ""mando_missiles\units\mando_missileecm.sqf"";"; processInitCommands;};

Vienna
01.08.2008, 08:32
Da ist vielleicht in vorherigen Zeilen ein Fehler vorhanden. Kopiere das original Skript in die Mission und füge deine Zeilen neu ein.

Wenn dann wieder die Fehlermeldung kommt, stell das Skript hier rein und markiere deine eingefügten Zeilen.

Mr-Murray
01.08.2008, 08:42
Meine Güte, der Vienna ist ja auch schon wieder echt früh unterwegs ;)

Hannibal
01.08.2008, 13:18
leider tritt der fehler auch hier wieder auf

Client_BuyUnit.sqs

;Last modified 4/24/8
;************************************************* ****************************************
;Description: Buys a unit.
;************************************************* ****************************************

_type = _this Select 0
_unitType = _this Select 1
_factory = _this Select 2
_empty = _this Select 3

_team = Group player
if (Count _this > 4) then {_team = _this Select 4}

if (IsNull _factory) then {Exit};
if (GetDammage _factory >= 1) then {Exit};

_factoryName = ""
if (Call Compile Format["_type == %1AIRPORTTYPE",sideJoinedText]) then {_factoryName = "WingedAircraft"};
if (Call Compile Format["_type == %1DEPOTTYPE",sideJoinedText]) then {_factoryName = "Depot"};

if (_factoryName == "") then {_factoryName = Call Compile Format["%1Structures Select _type",sideJoinedText]};

_unit = Call Compile Format["%1%2Units Select _unitType",sideJoinedText,_factoryName]

_cost = Call Compile Format["%1%2Costs Select _unitType",sideJoinedText,_factoryName]
if (!_empty) then {_cost = Call Compile Format["%1%2MannedCosts Select _unitType",sideJoinedText,_factoryName]};

_time = Call Compile Format["%1%2Times Select _unitType",sideJoinedText,_factoryName]
_oneMan = Call Compile Format["(_unitType In %1OneMan%2Vehicles)",sideJoinedText,_factoryName]

_totalUnits = Count (Units _team Call GetLiveUnits)

;Vehicles have 2 units instead of one, so increase by 1.
if (_type != EASTBARRACKSTYPE && _type != WESTBARRACKSTYPE && !_empty && !_oneMan) then {_totalUnits = _totalUnits + 1};

if (!_empty && _totalUnits + 1 > MAXPLAYERTEAMSIZE) then {Exit};
if (_cost > (Call GetPlayerFunds)) then {Exit};

(-_cost) Call ChangePlayerFunds

[CMDREQUESTUSESTRUCTURE,_factory,_time] Exec "Client\Client_CommandToServer.sqs"

~_time

if (IsNull _factory) then {Exit};
if (GetDammage _factory >= 1) then {Exit};

if (!Local Leader _team) then {Goto "CreateRemote"};

_position = [GetPos _factory,14,GetDir _factory + 180] Call GetPositionFrom

if (Call Compile Format["_type == %1AIRCRAFTTYPE",sideJoinedText]) then {_position = [GetPos _factory,21,GetDir _factory] Call GetPositionFrom};
if (Call Compile Format["_type == %1AIRPORTTYPE",sideJoinedText]) then {_position = [GetPos _factory,38,GetDir _factory + 180] Call GetPositionFrom};

if (_unit In soldierUnits) then {Goto "CreateUnit"};

#CreateVehicle

_vehicle = _unit CreateVehicle _position
if(_unit == "AH6") then {_unit setVehicleInit "[this, 400, 1, 2, true] execVM ""mando_missiles\units\mando_missileecm.sqf"";"; processInitCommands;};
_vehicle SetDir ((GetDir _factory + 270) % 360)
[_vehicle,sideJoined] Call InitUnit
if (_unit == Format["Warfare%1SupplyTruck",sideJoinedText]) then {[sideJoined,_vehicle] Spawn UpdateSupplyTruck};
if (_empty) then {Exit};

_soldierName = Call Compile Format["%1SOLDIER",sideJoinedShortText]

#CreateDriver

_driver = _team CreateUnit [_soldierName,GetPos _vehicle,[],0.2,"FORM"]
[_driver,sideJoined] Call InitUnit
[_driver] AllowGetIn true
_driver MoveInDriver _vehicle

#CreateGunner

if (_vehicle EmptyPositions "gunner" < 1) then {Exit};

_gunner = _team CreateUnit [_soldierName,GetPos _vehicle,[],0.2,"FORM"]
[_gunner,sideJoined] Call InitUnit
[_gunner] AllowGetIn true
_gunner MoveInGunner _vehicle

Exit

#CreateUnit

_soldier = _team CreateUnit [_unit,_position,[],0.2,"FORM"]
[_soldier,sideJoined] Call InitUnit

Exit

#CreateRemote

[CMDCREATEVEHICLE,_team,_vehicle,_factory] Exec "Client\Client_CommandToServer.sqs"

;************************************************* ****************************************
;3/28/7 MM - Created file.

Vienna
02.08.2008, 01:57
Das Skript ist im SQS-Dateiformat. Vielleicht verlangt der Befehl das SQF-Dateiformat.

Versuche einmal deine Zeile so einzugeben.

if(_unit == "AH6") then {_unit setVehicleInit "temp = [this, 400, 1, 2, true] execVM ""mando_missiles\units\mando_missileecm.sqf"""; processInitCommands}

Hannibal
02.08.2008, 02:21
leider bekomme ich auch hier eine fehlermeldung

auszug aus der arma rpt

Error in expression <if(_unit == "AH6") then {_unit setVehicleInit "temp = [this, 400, 1, 2,>
Error position: <setVehicleInit "temp = [this, 400, 1, 2,>
Error Allgemeiner Fehler in Ausdruck

fehlermeldung ingame

' if(_unit == "AH6") then {_unit |#| setvehicleinit "temp = [this, 400, 1, 2,...'
Error Allgemeiner Fehler in Ausdruck

Vienna
02.08.2008, 10:04
Wenn man sich nicht gleich alles genau ansieht!

_unit enthält nur einen String. Das Objekt ist _vehicle !

if(_unit == "AH6") then {_vehicle setVehicleInit ".....

1. Versuch mit

if(_unit == "AH6") then {_vehicle setVehicleInit "[this, 400, 1, 2, true] execVM ""mando_missiles\units\mando_missileecm.sqf"""; processInitCommands}


2. Versuch mit

if(_unit == "AH6") then {_vehicle setVehicleInit "temp = [this, 400, 1, 2, true] execVM ""mando_missiles\units\mando_missileecm.sqf"""; processInitCommands}

Hannibal
02.08.2008, 15:47
es funktioniert ;)
vielen vielen dank auch natürlich an i0n0s

mfg

Vienna
02.08.2008, 16:39
Das war eine schwere Geburt.

Übrigens für die "Namensgebung" gibt es einen eigenen Befehl:

Syntax: Object setVehicleVarName "name"

//Assign a variable to an object and be able to refer to that
//object using the variable, in both single and multi player.
_Object="M1A1" CreateVehicle (GetPos Player);
_VarName="MYTANK";
_Object SetVehicleVarName _VarName;
_Object Call Compile Format ["%1=_This ; PublicVariable ""%1""",_VarName];

Das selbe Ergebnis erzielt man -wie bereits erwähnt- mit:

MYTANK = _Object;
PublicVariable "MYTANK";