29.03.2008, 01:38 | #1 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Mal wieder ein Skriptproblem
Ich wollte mir ein kleines Skript basteln mit dem ich verschiedenen Waffen den SD an und abrüsten kann. Das aufsetzen des SD funktioniert problemlos, aber wenn ich den dann absetzen möchte, dann kommt mal wieder ein Skriptfehler >.<
Hier ist mal der Screen (Die Fehlermeldung erscheint erst, nachdem ich meinen SD absetzen möchte): Aufgeruft wird das Skript durch einen Initeintrag im Spieler: Code:
sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"] Code:
; **************************************************************** ; Script file for Armed Assault ; Created by: Cyborg11 ; **************************************************************** player removeaction sdas If (player hasweapon "M4AIM") then {player removeweapon "M4AIM"; player addweapon "M4A1SD"; player selectweapon "M4A1SD"} If (player hasweapon "M4A1SD") then {player removeaction sdas; sdab = player addaction ["Schalldaempfer abnehmen", "sd2.sqs"]} If (player hasweapon "MP5A5") then {player removeweapon "MP5A5"; player addweapon "MP5SD"; player selectweapon "MP5SD"} If (player hasweapon "MP5SD") then {player removeaction sdas; sdab = player addaction ["Schalldaempfer abnehmen", "sd2.sqs"]} If (player hasweapon "M9") then {player removeweapon "M9"; player addweapon "M9SD"; player selectweapon "M9SD"} If (player hasweapon "M9SD") then {player removeaction sdas; sdab = player addaction ["Schalldaempfer abnehmen", "sd2.sqs"]} If (player hasweapon "Makarov") then {player removeweapon "Makarov"; player addweapon "MakarovSD"; player selectweapon "MakarovSD"} If (player hasweapon "MakarovSD") then {player removeaction sdas; sdab = player addaction ["Schalldaempfer abnehmen", "sd2.sqs"]} If (player hasweapon "AKS74U") then {player removeweapon "AKS74U"; player addweapon "AKS74UN"; player selectweapon "AKS74UN"} If (player hasweapon "AKS74UN") then {player removeaction sdas; sdab = player addaction ["Schalldaempfer abnehmen", "sd2.sqs"]} Code:
; **************************************************************** ; Script file for Armed Assault ; Created by: Cyborg11 ; **************************************************************** If (player hasweapon "M4A1SD") then {player removeweapon "M4A1SD"; player addweapon "M4AIM"; player selectweapon "M4AIM"; player removeaction sdab; sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} If (player hasweapon "MP5SD") then {player removeweapon "MP5SD"; player addweapon "MP5A5"; player selectweapon "MP5A5"; player removeaction sdab; sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} If (player hasweapon "M9SD") then {player removeweapon "M9SD"; player addweapon "M9"; player selectweapon "M9"; player removeaction sdab; sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} If (player hasweapon "MakarovSD") then {player removeweapon "MakarovSD"; player addweapon "Makarov"; player selectweapon "Makarov"; player removeaction sdba; sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} If (player hasweapon "AKS74UN") then {player removeweapon "AKS74UN"; player addweapon "AKS74U"; player selectweapon "AKS74U"; player removeaction sdab; sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} Code:
If (player hasweapon "AKS74UN") then {player removeweapon "AKS74UN"; player addweapon "AKS74U"; player selectweapon "AKS74U"; player removeaction sdab; sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} PS: Weiß einer wie ich abfrage, was ich für eine Waffe in der Hand halte? Weil wenn ich die M9 mit nem SD ausrüsten möchte, aber ich hab auch noch eine M4AIM aufm Rücken, dann bekommen beide Waffen nen SD und ich den Menüeintrag doppelt Oo |
29.03.2008, 05:38 | #2 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 53
Beiträge: 1.930
|
Moin...
Der Fehler könnte eine Zeile höher entstehen. Ich zitiere: Code:
...player selectweapon "Makarov"; player removeaction sdba Zur Pistolenfrage wirst Du keine direkte Abfrage machen können. Hier müsstest Du mit einem kleinen Trick arbeiten - der Animationsabfrage. Wenn Dein Soldat eine Pistole in der Hand hält, die einen SD bekommen soll, dann könntest Du folgendes machen: Code:
If (player hasweapon "M9" AND animationState player == "AMOVPERCMSTPSRASWPSTDNON") then ... So wie Deine Scripte gestaltet hast ist es klar, das alle Waffen, sofern sie in Deinem Script aufgelistet sind und der Soldat sie bei sich hat, mit einem SD ausgerüstet werden. hasWeapon prüft ja nur, ob er die Waffe hat und nicht ob er sie in der Hand hält. So dürfte ja bspw. auch eine M9 einen SD bekommen, wenn der Soldat eine M4AIM umrüsten möchte. Letztlich solltest Du, um das zu vervollständigen, auch die Animation bei den Gewehren anfragen, damit die Pistolen nicht mit umgerüstet werden... Geändert von Buliwyf (29.03.2008 um 05:40 Uhr). |
29.03.2008, 11:45 | #3 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Moin ...
Ich hab den Fehler ausgebessert und es geht wieder, danke Gut, das mit den Animationen werde ich machen, aber wo finde ich die? Hab wie blöd gesucht, finde aber keine Animationsliste. Kannst du mir mal bitte einen Link geben und mir evtl. sagen, welche Animationen relevant dafür sind? Geändert von Cyborg11 (29.03.2008 um 11:49 Uhr). |
29.03.2008, 12:31 | #4 (permalink) |
His Awesomeness!
Registriert seit: 25.07.2006
Ort: Regnum Borussiae
Beiträge: 9.282
|
Ne Liste... sowas hier vllt? ArmA: Moves - Bohemia Interactive Community
|
29.03.2008, 12:55 | #5 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Ah ok danke Hab auch die Animationen für die Pistole gefunden: Code:
AmovPercMstpSrasWpstDnon AmovPercMstpSrasWpstDnon_AinvPknlMstpSnonWnonDnon AmovPercMstpSrasWpstDnon_AinvPknlMstpSnonWnonDnon_end AmovPercMstpSrasWpstDnon_AmovPercMstpSnonWnonDnon AmovPercMstpSrasWpstDnon_AmovPercMstpSnonWnonDnon_end AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWrflDnon AmovPercMstpSrasWpstDnon_AmovPercMstpSrasWrflDnon_end AmovPercMstpSrasWpstDnon_AmovPknlMstpSrasWpstDnon AmovPercMstpSrasWpstDnon_AmovPpneMstpSrasWpstDnon AmovPercMstpSrasWpstDnon_AwopPercMstpSoptWbinDnon AmovPercMstpSrasWpstDnon_AwopPercMstpSoptWbinDnon_end AmovPercMstpSrasWpstDnon_AwopPercMstpSoptWbinDnon_mid AmovPercMstpSrasWpstDnon_Salute AmovPercMstpSrasWpstDnon_SaluteIn AmovPercMstpSrasWpstDnon_SaluteIn_end AmovPercMstpSrasWpstDnon_SaluteOut AmovPercMstpSrasWpstDnon_SaluteOut_end AmovPercMstpSrasWpstDnon_turnL AmovPercMstpSrasWpstDnon_turnR |
29.03.2008, 14:31 | #6 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 53
Beiträge: 1.930
|
Am besten machst Du es, indem Du eine simple Map mit einem Soldaten und einem Funkauslöser machst, der Dir den Status im Chat ausgibt. So hab ich das jedenfalls gemacht... Mehrfachauslöser, Ausgelöst durch ALPHA und BEI AKTIVIERUNG schreibst Du player sideChat format["%1",animationState player] rein. So kannst Du jederzeit live und in Farbe sehen wie die Animation heißt, die Du gerade machst.
|
29.03.2008, 15:09 | #7 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Ok danke Jetzt kann ich die Pistolen und die Gewehre getrennt machen und auch in jeder Position modifizieren Ich werde dann noch einbauen, dass man die Zielfernrohre und die Granatwerfer auch mit auf- und absetzen kann. Jeztt aber noch ne kurze Frage. Wenn ich auf meiner Waffe den SD drauflasse und die Waffe wechsel, dann bleiben die Menüeinträge trotzdem noch bei der anderen Waffe und ich kann da den SD wieder abnehmen. Wie muss ich das machen, dass der Spieler dann wieder auf die andere Waffe wechselt und die modifizieren kann? Sonst muss man ja immer erst die alte Waffe in den Anfangszustand zurücksetzen :/ |
29.03.2008, 15:19 | #8 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 53
Beiträge: 1.930
|
Damit dürfte der Punkt erreicht sein, an dem ich zu faul bin Dir zu folgen...
Die Problemstellung überlasse ich gerne Dir, weil das ganz klar ein logischer Ablauf Deines Projektes ist, den Du austüfftelst. Ansonsten können wir Dir das ja für Dich zusammenstricken und Du legst Dich solange hin... Aber um nicht ganz herzlos zu wirken... ich würde es vermutlich mit while{xyz}do{diesunddas}... aber das ist mir jetzt zu tiefgründig.. |
29.03.2008, 15:49 | #9 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Ok, dann werde ich es ausprobieren, aber ich hoffe doch du berichtigst mich später, wenn ich dir mal mein vermurkstes Skript zeige xD Aber noch was: Wie mache ich das skript MPfähig? Also Respawnfähig? Da müssen ja die Namen der Soldaten alle immer wieder gleich bleiben. Aber wie mache ich das, dass die ihre Namen nicht nach dem Respawn verlieren? Irgendwie war das doch mit setvar oder? |
29.03.2008, 16:16 | #11 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Also wenn der 2. Soldat dann p2 (für player2) heißt und er respawnt, dann behält er immer noch den gleichen Namen? |
29.03.2008, 17:47 | #13 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Ah ok danke, dann musste man das wohl nur bei den Fahrzeugen machen, wenn sie respawnen. So nun neues Problem: Ich will, dass der Spieler den Menüeintrag verliert, wenn er rennt oder läuft. Wenn er geht soll der Menüeintrag noch da sein. Ich schaffe es, dass der Menüeintrag verschwindet, aber er taucht nicht mehr auf, wenn ich gehe oder stehe. Ich hab das so gemacht: Beim Spieler hab ich in die Initzeile geschrieben: Code:
this exec "test.sqs" Code:
; **************************************************************** ; Script file for Armed Assault ; Created by: Cyborg11 ; **************************************************************** If (animationState player == "AmovPercMstpSrasWrflDnon" OR animationState player == "AMOVPKNLMSTPSRASWRFLDNON" OR animationState player == "AMOVPPNEMSTPSRASWRFLDNON" OR animationState player == "AMOVPERCMWLKSRASWRFLDF" OR animationState player == "AMOVPKNLMSTPSRASWPSTDNON" OR animationState player == "AMOVPPNEMSTPSRASWPSTDNON" OR animationState player == "AMOVPERCMWLKSRASWPSTDF") then {sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} Code:
animationState player == "AMOVPERCMRUNSRASWRFLDF" OR animationState player == "AMOVPERCMEVASLOWWRFLDF" OR animationState player == "AMOVPERCMRUNSLOWWPSTDF" OR animationState player == "AMOVPERCMEVASLOWWPSTDF" Code:
this exec "ksd.sqs" Code:
; **************************************************************** ; Script file for Armed Assault ; Created by: Cyborg11 ; **************************************************************** player removeaction sdas ~5 If (animationState player == "AmovPercMstpSrasWrflDnon" OR animationState player == "AMOVPKNLMSTPSRASWRFLDNON" OR animationState player == "AMOVPPNEMSTPSRASWRFLDNON" OR animationState player == "AMOVPERCMWLKSRASWRFLDF" OR animationState player == "AMOVPKNLMSTPSRASWPSTDNON" OR animationState player == "AMOVPPNEMSTPSRASWPSTDNON" OR animationState player == "AMOVPERCMWLKSRASWPSTDF") then {sdas = player addaction ["Schalldaempfer aufsetzen", "sd.sqs"]} |
29.03.2008, 19:57 | #15 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 53
Beiträge: 1.930
|
Nun.. ich würde die ganze Sache grundsätzlich schon anders angehen, deswegen fällt es mir schwer mich in Deine Lage/Dein Vorhaben reinzuversetzen. Aber wie sagt man so schön? Viele Wege führen nach Rom...
Eine Scriptlösung wird wohl kaum jemand haben, da das dann doch schon etwas ausgefallenes ist, was Du da vorhast. Außerdem möchtest Du ja auch lernen... Also mein Vorschlag zur Güte.. zumindest so wie ich die Sache angehen würde. Grundsätzlich würde ich das schonmal nach Pistolen und Gewehren trennen. Das macht die Sache irgendwie übersichtlicher und man kann ja auch mal mit Pistole und Gewehr gleichzeitig bewaffnet sein und die Schalldämpfer gesondert aufsetzen können. Folgendes Beispiel nur für die Pistole. Ich mache einen Eintrag in der Init.sqf: Code:
pistolFunction = compile preprocessFile "pistolCheck.sqf"; Code:
expCond: local player AND call pistolFunction expActiv: sdas = player addaction ["Pistolen SD aufsetzen", "sd.sqs"]; player removeAction sdab; expDesactiv: player removeAction sdas; sdab = player addaction ["Pistolen SD abnehmen", "sd2.sqs"]; Code:
if ((vehicle player) == player AND speed player <= 1 AND (animationState player == "AMOVPKNLMSTPSRASWPSTDNON" OR animationState player == "AMOVPPNEMSTPSRASWPSTDNON" OR animationState player == "AMOVPERCMSTPSRASWPSTDNON")) then {if (player hasWeapon "M9") then {true} else {if (player hasWeapon "M9SD") then {false};};}; Das jetzt natürlich nur theoretisch und nicht getestet... aber so würde ich das machen. Und da Du das für mehrere Waffen machst, solltest Du pro Waffe einen Auslöser machen. Geht sicherlich auch eleganter, aber das liegt außerhalb meines Könnens... PS: Wie kommst Du drauf das über eine Spiellogik laufen zu lassen? Die Sache ist doch lokal, also beim Spieler... Du kommst auf Sachen... Geändert von Buliwyf (29.03.2008 um 20:03 Uhr). |
30.03.2008, 14:48 | #16 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Gut danke, ich werde das dann mal probieren. Die anderen Pistolen müsesn doch dann mit in die Pistolcheck.sqf oder? Achja zu der Spiellogik, ka, ich hab das einfach mal ausprobiert ob das klappt. Weiß eigentlich gar net so richtig wofür man eine Spiellogik braucht ^^ Und die Gewehre muss ich dann genauso behandeln stimmts? Also Animationen austauschen, in die Init.sqf
Code:
RifleFunction = compile preprocessFile "rifleCheck.sqf"; Code:
pistolFunction = compile preprocessFile "pistolCheck.sqf"; Und wenn ich jetzt den GL noch hinzufügen möchte, bräuchte ich doch ein neues Skript und eine neue Funktion sowie einen neuen Auslöser oder kann ich das alles in mein vorhandenes Skript sowie in meine vorhandene Funktion miteinbauen? |
30.03.2008, 15:32 | #17 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 53
Beiträge: 1.930
|
Nun ja.. das ist Scripting Grundwissen, das Du Dir anscheind noch aneignen musst...
Wiki und MrMurray`s Editing Guide sind ein MUSS!!! Ich habe ja kein Problem damit bei Problemen zu helfen, aber wenn man erst noch erklären muss was wofür ist, dann ist das eher ein Problem des Selbststudiums... Und die restlichen Fragen sind für die grauen Zellen... |
30.03.2008, 16:23 | #18 (permalink) |
Registriert seit: 26.03.2008
Beiträge: 2.822
|
Naja, ich hab mich ja auch noch nie mit Funktionen beschäftigt, deswegen wusste ich nicht was das heißt Geändert von Cyborg11 (30.03.2008 um 17:01 Uhr). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Mal wieder probs mit ofp | Stocki | Hilfe | 4 | 12.01.2006 20:06 |
Ich bin wieder da! | der mit den minen tanzt | Offtopic | 5 | 11.04.2005 14:51 |
Batman der 70' er wieder ins TV! :D | Lantis | Entertainment | 14 | 28.10.2004 16:42 |