01.02.2010, 16:21 | #1 (permalink) |
Ausrüstung über Skript im MP zuweisen
Moin allerseits!
Ich würde gern die Waffen und Ausrüstung der Spieler nicht über die Initzeile sondern über ein Skript zuweisen, weil ich es so übersichtlicher finde. Leider funktioniert dies nicht auf einem Deti. Wenn ich den Inhalt des Skriptes aber in die „init.sqf“ schreibe funktioniert es insofern, dass die Spieler zwar die ihnen zugedachte Ausrüstung haben, aber es treten Fehlermeldungen in der RPT durch nicht besetzte Slots auf. Hat hierzu jemand eine Idee? |
|
01.02.2010, 19:09 | #3 (permalink) |
Ich habe schon einige if- Abfragen probiert.
if (Player == s1) then { removeallweapons s1; s1 addWeapon "G36_C_SD_eotech"; s1 addMagazine "30Rnd_556x45_G36SD"; s1………… }; Oder if (alive s1) then { removeallweapons s1; s1 addWeapon "G36_C_SD_eotech"; s1 addMagazine "30Rnd_556x45_G36SD"; s1………… }; Oder if (isPlayer s1) then { execVM "sqf\s1.sqf"; }; Bei letzterer Variante sieht die Fehlermeldung in der RPT wie folgt aus. Error in expression < { execVM "sqf\s1.sqf"; }; if (isPlayer s2) then { execVM "sqf\s2.sqf"; }; if (i> Error position: <s2) then { execVM "sqf\s2.sqf"; }; if (i> Error Nicht definierte Variable in Ausdruck: s2 File mpmissions\__CUR_MP.Chernarus\init.sqf, line 29 Client: Nonnetwork object 9fb0400. Client: Nonnetwork object a10d000. |
|
01.03.2010, 10:44 | #4 (permalink) |
Registriert seit: 04.06.2008
Beiträge: 197
|
Hallo,
gibt´s schon ne Lösung? ich habe das auch schon so ähnlich probiert und hatte das Problem, dass die Ausrüstung unvollständig / bzw. mit der standart Ausrüstung des Soldaten vermischt war. Ich vermute, das passiert, wenn das script losläuft obwohl der player nicht richtig syncronisiert ist. Im F2- framework ist folgender code zu finden: Code:
if (!isDedicated && (player != player)) then { waitUntil {player == player}; waitUntil {time > 10}; }; Grüße! |
06.03.2010, 12:46 | #5 (permalink) |
Registriert seit: 17.07.2008
Ort: Sachsen
Beiträge: 23
|
entweder du machst einen Auslöser auf die map mit
Axe: 0x0 act: brauchst keine wenns nur eine seite is bed: alive player ausl: guns=execVM "deinwaffenscript.sqf" bsp des waffenscripts: PHP-Code:
Oder mit ner schleife: PHP-Code:
hier hat er erst nach dem ersten respawn die ausgesuchten Waffen. Nachtrag: Was auch noch geht ist wenn du jeden spieler benennst zb w1, w2, w3 usw. und bei jedem in die init schreibst "gun=execVM "deinscript.sqf" das script: PHP-Code:
Geändert von [TcB]-H5N1- (06.03.2010 um 14:40 Uhr). |
06.03.2010, 15:28 | #6 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Kurze Frage, ich hab ein ähnliches Problem, ich will den Soldaten nach dem Tod dieselbe Ausrüstung geben die sie hatten bevor sie gestorben sind.
Das Script sieht so aus: Code:
if (!(local player)) exitWith {}; while {true} do { waitUntil {!alive player}; _weapons = weapons player; _magazines = magazines player; waitUntil {alive player}; _p = player; removeAllItems _p; removeAllWeapons _p; {_p addMagazine _x;} forEach _magazines; {_p addWeapon _x;} forEach _weapons; }; if (true) exitWith {}; LG |
07.03.2010, 19:59 | #10 (permalink) |
Weder die Variante von SmartGun noch die von [TcB]-H5N1- funktionieren fehlerfrei. Technisch funktionieren sie schon, aber durch die evtl. nicht besetzen Spieler werden immer Fehler in der RPT produziert…
z.B. if (alive s2) then { removeAllWeapons s2; s2 addWe> Error position: <s2) then { removeAllWeapons s2; s2 addWe> Error Nicht definierte Variable in Ausdruck: s2 File mpmissions\__CUR_MP.Chernarus\sqf\waffen.sqf, line 16 Creating debriefing |
|
09.03.2010, 21:31 | #13 (permalink) |
@Cyborg11
Auch bei deiner Variante gibt es ne Fehlermeldung aufgrund der nicht vorhandenen Mitspieler. if (isPlayer s2 && alive s2) then { removeAllWeapons > Error position: <s2 && alive s2) then { removeAllWeapons > Error Nicht definierte Variable in Ausdruck: s2 File mpmissions\__cur_mp.Chernarus\sqf\waffen.sqf, line 16 Warum sind eigentlich potentielle Spieler Variablen und warum kann man diese, wenn sie es sind, nicht vordefinieren? |
|
09.03.2010, 23:42 | #14 (permalink) |
Das hier ist ne DM wo die Waffen zufällig zugewiesen werden
Für eine bestimmte Waffe muss man nur die Zufallsauswahl durch ne feste Zahl austauschen,das kann man sogar über MP Setup dann vorgeben waffen.sqs PHP-Code:
PHP-Code:
__________________
--> -> Rechtschreibfehler sind Gratis <- <-- --> Wer welche findet kann sie behalten <-- German Nato Corps |
|
10.03.2010, 13:17 | #15 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Eine andere Möglichkeit wäre über die Editornamen zu arbeiten
Aufruf des Bewaffnungsskriptes über die Initzeile jeder Einheit: Code:
nul = [this] execVM "bewaffnung.sqf" Code:
_unit = _this select 0; If (!(isPlayer _unit)) exitWith{}; removeAllWeapons _unit; _varname = vehicleVarName _unit; // Editorname der Einheit: http://community.bistudio.com/wiki/vehicleVarName switch (_varname) do { case "S1" : { /* Bewaffnungscode */ }; case "S2" : { /* Bewaffnungscode */ }; case "S3" : { /* Bewaffnungscode */ }; case "S4" : { /* Bewaffnungscode */ }; default {hintSilent format ["Einheit %1 hat keinen Editornamen oder ist nicht im switch gelistet", _unit]}; };
__________________
|
10.03.2010, 19:12 | #16 (permalink) |
@Cyborg11
Nachdem ich deine Variante lokal getestet habe, hatte ich schon zu einen Freudensprung angesetzt, aber nach dem Test auf meinem Deti hat sich wieder Ernüchterung breit gemacht. Es sieht so aus als würde der Spieler die gewünschte Waffe eine Millisekunde haben, dann aber wieder auf die Standartwaffe der Einheit wechseln… Kann aber auch sein, dass hier… removeAllWeapons _unit; _varname = vehicleVarName _unit; // Editorname der Einheit …der Hund begraben liegt. Habe da nichts geändert, weil du in deinem Beispielt ja schon die Editornamen s1, s2, s3 usw. eingebaut hattest. |
|
10.03.2010, 19:56 | #18 (permalink) |
das es im mp nicht funktioniert liegt ganz einfach daran das die unit nach einem respawn eine leere init hat, also das script nicht mehr öffnet.
dem ist im script mit einem einem loop entgegen zu wirken und solchen sachen wie waitUntil {alive player} oder du lässt das script nicht über die unitinit starten sondern über einen trigger. diesen setzt du auf auslösebedingung alive player und in die init des triggers kommt die zeile von cyborg. jedoch nicht mit [this] sondern mit [player]. fertsch! edit:/ aso, und das mit dem variablennamen der unit funzt nach einem respawn auch nicht mehr. also lass das mal lieber weg.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
11.03.2010, 10:43 | #19 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Kurze andere Frage, wenn ich z.B. einer Einheit einen addAction Syntax in die Init schreibe, verschwindet der leider nach dem Tod.
Wenn ich mir jetzt ein Script schreibe, in dem ich mit waituntil eine Loop einfüge, die dann einen Action Eintrag erzeugt, mit dem ich dann den RTE oder so starten kann. Dann sollte dieses Script, wenn es funktioniert, mit einem Trigger laufen, der mit den Einheiten über F2 verbunden ist oder? LG Joe |
19.03.2010, 11:39 | #20 (permalink) |
Registriert seit: 04.06.2008
Beiträge: 197
|
Mahlzeit! (bald )
@toppic: Hab da was gebastelt. Nach kurzem test auf´m Dedi scheint das soweit zu funzen. ku_loadout_init.sqf: Code:
// aufruf aus init.sqf: _nul=[] execVM "ku_loadout_init.sqf"; if (! isserver) exitwith {}; If (alive p1) then{ p1 setvehicleinit "nul=[this] execVM 'loadout_TL.sqf';"; }; If (alive p2) then{ p2 setvehicleinit "nul=[this] execVM 'loadout_RO.sqf';"; }; If (alive p3) then{ p3 setvehicleinit "nul=[this] execVM 'loadout_SN.sqf';"; }; If (alive p4) then{ p4 setvehicleinit "nul=[this] execVM 'loadout_CM.sqf';"; }; If (alive p5) then{ p5 setvehicleinit "nul=[this] execVM 'loadout_OP.sqf';"; }; If (alive p6) then{ p6 setvehicleinit "nul=[this] execVM 'loadout_OPM.sqf';"; }; If (alive p7) then{ p7 setvehicleinit "nul=[this] execVM 'loadout_AT.sqf';"; }; If (alive p8) then{ p8 setvehicleinit "nul=[this] execVM 'loadout_ATS.sqf';"; }; processinitCommands; sleep 1; loadout_TL.sqf: Code:
// TeamLeader EAST _unit = _this select 0; removeallweapons _unit; removeallitems _unit; // add Items _unit addWeapon "ItemWatch"; _unit addWeapon "ItemMap"; _unit addWeapon "ItemCompass"; _unit addWeapon "ItemRadio"; _unit addWeapon "ItemGPS"; // add Gear _unit addWeapon "Laserdesignator"; _unit addWeapon "NVGoggles"; // add Magazines _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "HandGrenade_East"; _unit addMagazine "HandGrenade_East"; _unit addMagazine "Laserbatteries"; _unit addMagazine "SmokeShell"; _unit addMagazine "SmokeShellBlue"; _unit addMagazine "SmokeShellOrange"; _unit addMagazine "8Rnd_9x18_MakarovSD"; _unit addMagazine "8Rnd_9x18_MakarovSD"; _unit addMagazine "8Rnd_9x18_MakarovSD"; _unit addMagazine "8Rnd_9x18_MakarovSD"; _unit addMagazine "8Rnd_9x18_MakarovSD"; _unit addMagazine "8Rnd_9x18_MakarovSD"; // add Weapons _unit addWeapon "MakarovSD"; _unit addWeapon "bizon_silenced"; _primw = primaryWeapon _unit; if (_primw != "") then { _unit selectWeapon _primw; // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _primw >> "muzzles"); _unit selectWeapon (_muzzles select 0); }; Code:
// CombatMedic EAST _unit = _this select 0; removeallweapons _unit; removeallitems _unit; // add Items _unit addWeapon "ItemWatch"; _unit addWeapon "ItemMap"; _unit addWeapon "ItemCompass"; _unit addWeapon "ItemRadio"; _unit addWeapon "ItemGPS"; // add Gear //_unit addWeapon "Binocular"; _unit addWeapon "NVGoggles"; // add Magazines _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "64Rnd_9x19_SD_Bizon"; _unit addMagazine "SmokeShell"; _unit addMagazine "SmokeShell"; _unit addMagazine "SmokeShellOrange"; // add Weapons _unit addWeapon "bizon_silenced"; _primw = primaryWeapon _unit; if (_primw != "") then { _unit selectWeapon _primw; // Fix for weapons with grenade launcher _muzzles = getArray(configFile>>"cfgWeapons" >> _primw >> "muzzles"); _unit selectWeapon (_muzzles select 0); }; Letzterem kann man aber gut mit einem respawnscript entgegenwirken. @ Joe: das würde ich über einen eventhandler 'killed' lösen. Code:
if ( isNil {player getVariable "EH_KILLED"} ) then { player addEventHandler ["killed", { [] spawn { waitUntil { alive player }; player addAction ["Hello", "hello.sqs"]; }; }]; player setVariable ["EH_KILLED", true]; }; |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Skript läuft über Server nicht korrekt ab | Rettich | Editing | 3 | 20.05.2009 18:34 |
Facetexturen im Editor zuweisen? | gi.Zmol.ia | Mods & Addons | 5 | 20.11.2008 17:44 |
[ALLE] Eure Firefox Ausrüstung | Snevsied | Software & Hardware | 26 | 28.09.2008 16:22 |
Ausrüstung nach respawn | Bluebox | Editing | 8 | 04.04.2008 21:57 |