PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Loadouts nur für bestimmte Class zeigen (RespawnInventory)


Cakestory
19.10.2015, 21:34
Hallo,
ich habe mich in eurem Forum angemeldet, da ich ein echtes Problem beim Scripten habe und es einfach nicht gelöst bekomme.

Ich habe 5 Soldaten (Medic, Sniper, Squad Leader, ...) im Editor platziert, die spielbar sind.
Nun nutze ich das CfgRespawnInventory in der description.ext um für jede dieser Klassen Loadouts auszugeben.
Mein Problem ist:
Ich habe z.B. 3 mögliche Loadouts für jeden Class type. Soll heißen man kann wenn man den Slot des Sniper wählt zwischen 3 Loadouts mit unterschiedlichen Sniper-Gewehren wählen. Als Medic sähe man nur 3 Assault Rifle Loadouts etc.

Wie sorge ich nun dafür, dass jede Klasse nur ihre Loadouts sieht? Ich will nicht, dass jemand der den Sani Slot nutzt z.B. ein Sniper Loadout nimmt und dann kein Medkit hat.

Wie sage ich Arma 3, dass es dem Spieler nur seine erlaubten Loadouts zeigt?

Ich habe folgenden Code in der CfgRespawnInventory class unter "show" versucht:
show = '_this isKindOf "B_medic_F"'; Aber leider funktioniert dieser Code an der Stelle nicht (was er aber in einem normalen Script schon tut).

Ich hoffe ihr könnt mir helfen. Das Loadout Problem macht meine ganze Mission unbrauchbar. Falls was nicht verstanden wurde einfach nachfragen. ;)

Drunken Officer
20.10.2015, 22:19
initlocalplayer.sqf

if (player iskindof "B_Medic_F") then
{
......
.....
}

Cakestory
20.10.2015, 22:36
Danke für die Antwort. :)
Ich habe zufällig heute Nachmittag herausgefunden, dass der Code, den du da geschrieben hast doch funktioniert.
Ich hatte es bereits damit versucht (in der init.sqf) aber ich habe nicht gewusst, dass man für JIP noch den player auf null checken muss und der Code nur auf dem Client ausgeführt werden soll.
Wusste auch gar nicht, dass es noch andere initIrgendwas.sqf gibt. :daumen:

Das Problem habe ich so gelöst. Und für alle, die vielleicht mal dasselbe Problem haben, hier die benötigten Zeilen in der init.sqf:
if (!isDedicated) then { // Der Code sollte nur auf dem Client laufen

waitUntil {!isNull player}; // Die entscheidende Zeile. Sonst klappt der Code nicht für JIP Spieler!

// Gib dem Spieler Loadout "WEST1" falls er den Medic Slot nutzt
if (player isKindOf "B_medic_F") then {
[player, "WEST1"] call BIS_fnc_addRespawnInventory;
};

// Gib dem Spieler Loadout "WEST2" falls er den Marksman Slot nutzt
if (player isKindOf "B_soldier_M_F") then {
[player, "WEST2"] call BIS_fnc_addRespawnInventory;
};

};P.S. Ich hatte es vergeblich mit der show = "..."; Zeile in der CfgRespawnInventory Klasse in der description.ext versucht. Offenbar nimmt diese Zeile überhaupt keine Einfluss auf das Anzeigen des Loadouts. Ein Bug oder vielleicht veraltete/falsche Information aus einem anderen Forum?!

Cartman
21.10.2015, 10:29
Du könntest statt der Init.sqf auch die InitPlayerLocal.sqf verwenden ;)

Die greift beim Start und beim JIP.

https://community.bistudio.com/wiki/Event_Scripts

Edith: Da hab ich gepennt, hat Drunken ja schon geschrieben, aber InitLocalPlayer ist doch falsch, oder?

Drunken Officer
21.10.2015, 11:40
InitPlayerlocal ist richtig. Ich hatte nen Dreher drin. (nach ner 12 Stunden Schicht darf man das :D )

Cakestory
21.10.2015, 12:20
Macht doch nichts. Hatte es eh vorher nochmal nachgeschlagen. :D

Danke für die Hilfe, Leute. Jetzt weiß ich beim nächsten JIP Problem wo es eigentlich hinkommt.