HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Scripting in ArmA2 (https://hx3.de/editing-scripting-167/scripting-arma2-16949/)

Ephraim 17.06.2009 13:36

Scripting in ArmA2 - Resourcen
 
Ich beschäftige mich jetzt seit 2 Wochen mit "ArmAScript". Es ist die hässlichste Scriptsprache die mir jemals untergekommen ist (arbeite beruflich mit Ruby und JavaScript). Mit dem Analysieren von Xeno's Missionen und dem ArmA2 Comref erreicht man zwar eine recht steile Lernkurve - man hat aber ständig das Gefühl, sich jeden Scheiss mühsam zusammensuchen zu müssen - vorallem wenn es um MP-Missionen geht.

Anbei mal eine Liste der mir bekannten Resourcen für ArmA Scripting. Wäre schön wenn diese Liste noch wächst...

Mr-Murray's Guide
(Armed Assault Editing Guide - Deluxe Edition by Mr-Murray - Forum des German Gamers Club e.V.)

Mr-Murray's Guide bezieht sich erstens auf ArmA1 und zweitens ist er nicht für Programmierer geschrieben - sprich: Programmierer werden oft durch unglückliche Formulierungen verwirrt, an anderen Stellen vermisst man ganze Kapitel. Codezeilen werden präsentiert, deren Funktionsweise mit keinem Wort erläutert wird. Der Guide ist nicht aufs Scripten in ArmA ausgelegt sondern eher aufs Editing an sich. Trotzdem sollte man sich dieses Werk zu Gemüte führen.

Das ArmA2 Comref
(Arma II: Scripting Commands)

Das Comref lässt Programmiererherzen vorerst ein wenig höher schlagen. Nach spätestens 10 Minuten aber bemerkt man, dass es doch noch sehr unvollständig ist. Spätestens wenn eine Funktion Strings entgegennimmt - aber nirgendwo aufgelistet ist, welche String-Werte denn nun akzeptiert werden - macht sich Frust breit. Ansonsten: hey, toll dass es sowas überhaupt schon gibt.

Bohemia Interactive WIKI
(Category:Scripting Topics - Bohemia Interactive Community)

Sieht aus wie der Eingang zum Kaninchenbau. Man landet durch google immer mal wieder im offiziellen WIKI von BI. Die Artikel zu Befehlen sind wesentlich ausführlicher als im Comref. Scheint regelmäßig aktualisiert zu werden. Werde ich mich die nächsten Tage/Wochen noch mit beschäftigen. Hat jemand noch Anmerkungen hierzu?


Syntaxhighlighting für Notepad++
(ArmAScript - A plugin for Notepad++)

Ach ja, ganz doofes Thema: Syntaxhighlighting. Solange ihr nicht Notepad++ oder vim, oder irgendeine historische Version von jEdit oder UltraEdit (kommerziell) habt, müsst ihr auf Syntaxhighlighting verzichten. Der vim-User mag sich jetzt mal freuen, alle anderen sollten Notepad++ ausprobieren. Ist Notepad2 sehr ähnlich, wenn auch nicht ganz so schlicht. Fragt sich nur: wo bleibt das Textmate- oder Intype-Bundle? Hat nicht jemand Lust eine Eclipse-IDE für ArmA zu bauen??


Welche Resourcen könnt Ihr noch empfehlen? Gibt es vielleicht sogar Leitfäden zum Erstellen von MP-Maps?

Hath Kull 17.06.2009 14:50

"Abuu's Unofficial Editing Guide"

Ein recht anfängerorientierter Guide im Stil von Mr-Murrays großartigem Büchlein. Es erklärt Grundfragen und -prinzipien und gibt verschiedene Skriptbeispiele. Ist allerdings schon etwas älter.

.kju 17.06.2009 17:05

hallo Ephraim :)

6thSense.eu:EG
CMB:SimplifyTesting
CMA: DevelopmentSetup

Category:Scripting Topics
Category:Syntax

Schau dir ma DevHeaven an. :angel:
Wir haben einige Ruby lover bei DevHeaven. :D

Zum Thema IDE:
SimCentric Technologies: vbs2FastScript

Vielleicht gibts die auch für den Community.
Ansonsten bauen wir uns das selbst. :p

BIKI nur über google ordentlich durchsuchbar:
http://www.google.com/custom?hl=de&c...y.bistudio.com

See you soon!


best regards
.kju

Mr-Murray 17.06.2009 19:14

Hallo Ephraim
Liefere mir gerne Beispiele, damit ich sie im Guide II berücksichtigen kann. Die Basis
ist ja schon da. Jetzt ist mir daran gelegen diese entsprechend gut auszubauen.

Was für Kapitel vermisst du denn?


Vielen Dank vorab

Mr-Murray

Mr.NiceGuy 17.06.2009 19:55

Also da ich mich ja auch grade mit dem thema beschäftige,mir fehlen so die einfachen beispiele.z.b. Toll wären einfach eine Skript.sqs mit simplen Beispielen.
Ich frage mich z.B grade,wie kann ich einer Einheit sagen wann sie was und wielang asuführen soll und das eben in 1 oder 2 schönen Beispielskripts das man sieht was möglich ist und es dann begreifen kann:daumen:7
Leichteres Beispiel:Wie bringe ich einen Soldaten am Tor dazu mich nur dann und immer zu grüßen,wenn ich vorbeikomme.Was kann ich bei einer Geiselmission einsetzen.so in die richtung geht das bei mir grade^^

Mr-Murray 17.06.2009 20:23

Abstraktes Denken ;)

Versuche doch einfach mal die Dinge gemeinsam zu nutzen.

Dein Wachmannbeispiel

Dazu brauchst du nur den Wachmann und einen Mehrfachauslöser.
In die Bedingungszeile: Player distance Wachmann > 10
In die onActivation-Zeile: Wachmann playMove Grußanimation
Größe: 0/0
Mehrfach


That´s all!!!


Missionen gibts tausende. Da stellt sich mir dann die Frage wo fange ich bei so einem Guide an und wo
höre ich auf. Während ich meine Zeit in sowas investiere kann ich mich nicht oder kaum mit neuen
Dingen beschäftigen. Ich muss also versuchen die Essence rauszuziehen und vernünftig zu vermitteln.
Zudem ist es ja nicht gerade wenig. Ich denke gerade mal die einen kleinen Teil ab. Am Ende müsst ihr
ja nun auch ein bissl kreativ sein. Bittee gerne auch Input und Feedback an mich. Ich schreibe das
Ding ja nicht nur für mich.

Mr.NiceGuy 17.06.2009 20:53

Kreativ sein ist bei mir eigt nicht das problem,nur die genauen zusammenhänge zwischen dem skipt und initalzeile oder auslöser sind halt meist schwer,wenn man die befehle nich wirklich kennt.

Hab deins z.b grade probiert,klappt nicht.lol.
hab mir nen soldaten erstellt,ihn wachmann genannt.
nen auslöser erstellt(achsen 0/0,auf mehrfach,bedingungszeile im auslöser: Wachmann playMove Grußanimation
jetzt kommt "fehlendes ;"....?
was heisst das nu?^^dachte ";" am Anfang einer Zeile gibt mir selbst Infos die das Skipt ignoriert und ";" am Ende einer Zeile lässt mich nen weiteren Befehl in der Zeile geben oder?mit doppel s kann ich es komischweise eingeben,aber es klappt nicht:zahn:

Ephraim 17.06.2009 21:01

Vielen Dank für eure Beiträge!

Zitat:

Zitat von .kju (Beitrag 245652)
6thSense.eu:EG

Kju, schon dein erster Link hat mich aus den Socken gehaun. Genau sowas meinte ich mit "Leitfäden zum Erstellen von MP-Maps". Ich hatte nur nicht zu hoffen gewagt es in so konzentrierter Form zu finden. Geil!

Zitat:

Zitat von .kju (Beitrag 245652)
Schau dir ma DevHeaven an.
Wir haben einige Ruby lover bei DevHeaven.

Habe ich mich angemeldet. Das kommt einem schon ziemlich vertraut vor, mit den svn Repos, Bugtrackern und wikis - muss ich mal im Auge behalten.

Zitat:

Zitat von .kju (Beitrag 245652)
Zum Thema IDE:
SimCentric Technologies: vbs2FastScript

Vielleicht gibts die auch für den Community.
Ansonsten bauen wir uns das selbst.

Sieht gut aus und basiert auf Netbeans. Ich mag Netbeans, benutze es auch auf der Arbeit für Rails. Aber es steht kein Preis dran - können sich vielleicht nur Staatshaushalte leisten?

Selbstbauen hört sich gut an, fragt sich nur wer dafür Zeit hat und Bock auf Reguläre Ausdrücke. Und Notepad++ tuts ja erstmal.

Zitat:

Zitat von .kju (Beitrag 245652)
BIKI nur über google ordentlich durchsuchbar:
- Google-Suche

Hatte schon so eine Ahnung, danke für den Tipp!

Zitat:

Zitat von Mr-Murray (Beitrag 245708)
Was für Kapitel vermisst du denn?

Also meine ersten Unsicherheiten entstanden durch den Unterschied von Scripts und Funktionen und den Unterschied zwischen SQS- und SQF-Dateien. Ich dachte anfangs, das sei dasselbe. Deswegen habe ich mich auch gefragt, wieso sollte man keine SQS-Dateien mehr nutzen, dann funktioniert doch sleep() nicht mehr? Hat lange gedauert bis ich über den spawn()-Befehl in Xeno's Air Cav gestolpert bin. Dies sollte unbedingt in ein und dem selben Kapitel behandelt werden um Verwirrungen zu verhindern. Es ist für den Otto-Normal-Programmierer nämlich ziemlich unüblich 2 verschiedene Syntaxen zu lernen, die optisch so gleich aussehen, aber trotzdem doch sehr unterschiedlich funktionieren.

Die nächsten Ungereimtheiten kamen auf beim Join-In-Progress, was wohl mit das wichtigste einer MP-Mission ist. Ich weiss immer noch nicht, wie ich es robust hinbekomme, aber ich habe kju's Links auch noch nicht durchgearbeitet.

Immernoch frage ich mich oft, wo ich etwas ausführen muss, auf dem Server oder auf dem Client?

Das geilste war die "initJIPcompatible.sqf". Ich habe nie etwas von dieser Datei gelesen. Bis mich irgendwann ein Spieler auf dem Server gefragt hat, ob ich denn diese Datei hätte.

Wie verhält sich die init.sqf im Multiplayer? Als Scripting-noob und ArmA-dedi-noob hab ich nicht schlecht gestaunt, als ich gesehen habe wie sich die init.sqf im Multiplayer verhält im Gegensatz zum lokalen Testen.

Das wäre es so was mir im Moment einfällt.

Mr.NiceGuy 17.06.2009 21:24

Also wenn ich nochmal nerven darf:p

Ich bräuchte das Skript mal genau! erklärt und wie ich es nur auf EINEN Soldaten anwende,dann wäre ich schon um einiges weiter,wäre super!:oh:
Wann und wo man "Start" und "Exit" oder gotoNext braucht wäre auch hilfreich,bei mir klappt iwie 0 was ich selbst mache.....
_____________________________________________

; Animationsskript

_man = _this select 0

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 1

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 2

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 3

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

#Start

; Animationsskript

_man = _this select 0

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 1

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 2

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 3

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

goto "Start"

#Next

; Animationsskript

_man = _this select 0

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 1

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 2

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

_man = _this select 3

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

goto "Next"

.kju 17.06.2009 21:29

:)

initJIPcompatible.sqf ist nur für das MP Framework von BI.
Die Topskripter halten davon nur nicht viel. :zahn:

ca\modules\MP\data\*

Argh Ruby Prozess von Redmine schon wieder 99%...

Hier ma die init.sqf meiner Vehicle DM:
C++ pastebin - collaborative debugging tool

Sickboy und Spooner sind die MP Scripting Elite. :)

Achalesas]X[Sgt. 17.06.2009 21:38

Zitat:

; Animationsskript

_man = _this select 0

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";
Jetzt macht nur der Soldat Name1

den Tanz :)

Zitat:

; Animationsskript

_man = _this select 0

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

; Animationsskript

_man = _this select 1

_man playMove "ActsPercMstpSnonWnonDnon_DancingDuoIvan";

Jetzt Soldat Name1 und Soldat Name2

Mr.NiceGuy 17.06.2009 22:04

ja das klappt ja gut aber wenn ich mal was versuche....z.b.

; Animationsskript

_man = _this select 0

_man switchMove "ActsPercMstpSnonWnonDnon_InterrogationVictim" ;


Habs jetzt mit playmove und switchmove versucht,keiner davon funktioniert.
Was mich auch interessiert,warum Name 1 und wie ist denn der genaue Zusammenhang zu dem Script...
was genau macht _man = _thisselect 0???

argh immer mehr männer werden sterben.....meist 2 pro nicht funktionierendem script.^^warum klappt das nich...........

Ephraim 17.06.2009 22:05

Zitat:

Zitat von .kju (Beitrag 245780)
:)

initJIPcompatible.sqf ist nur für das MP Framework von BI.
Die Topskripter halten davon nur nicht viel. :zahn:

ca\modules\MP\data\*

Das heisst deine init.sqf benötigt keine?

Wenn ich in den Quellcode von BIS reinschau denk ich nur: "gott is das dreckig!" Wie könn die so arbeiten? Ich krieg nach einer Minute lesen Kopfschmerzen...

Die initJIPcompatible bindet das MP Framework ein?

Zitat:

Zitat von .kju (Beitrag 245780)
Argh Ruby Prozess von Redmine schon wieder 99%...

Ich hab wegen Passenger bis zu 6 Ruby Prozesse pro Maschine, je nachdem wieviele Apache worker wach sind - rennt! Das ein Ruby Prozess 99% schluckt ist nicht unnormal, und schnell war und wird Ruby nie werden. oh .. offtopic

Zitat:

Zitat von .kju (Beitrag 245780)
Hier ma die init.sqf meiner Vehicle DM:
C++ pastebin - collaborative debugging tool

Um Welten lesbarer als der BIS-kram, muss mir den Rest mal anschauen. :naughty:

Mr-Murray 17.06.2009 22:21

Ähm... Mr.NiceGuy

Lies mal im Guide 9.12 Der Array - Seite 271

Ich denke, dass sollte dir einiges Erleichtern. Aber auch lesen ;)
Mal eben zum Aufrufen einer kleinen Anim ist ein SQS schon ok.

Ephraim,
ich stimme dir da schon zu und im kommenden Guide werden diese Punkte noch
verständlicher dargestellt. Auch die Trennung zwischen SQS und SQF. Ich möchte
den Guide schon auf SQF münzen! Die Problematik bei Guide 1 war ganz klar der
Faktor Zeit für Erfahrungen sammeln im MP-Part.

Ephraim 18.06.2009 09:27

@Mr-Murray, eine Thematik die auch kurz angesprochen werden sollte, sind die Params für Multiplayermissionen.

Ich weiss jetzt nicht ob das schon in deinem ersten Guide erwähnt wird, aber ich bin in fremden Missionen doch immer wieder über dieses param1 gestolpert, und es hat eine wenig gedauert, bis ich verstanden hab, wofür diese Variablen überhaupt da sind.

Ansonsten bin ich immernoch begeistert von 6thSense.eu:EG - Bohemia Interactive Community. Schon bei den ersten Absätzen der Liste musste ich innerlich jubeln - die Seite hat mir in kürzester Zeit hunderte Fragen beantwortet. Vielleicht solltest du die Inhalte übernehmen, wenn möglich, oder zumindest darauf verweisen.

.kju 18.06.2009 10:29

Das MP Framework wird per Gamelogic eingebunden.
Das MPF übernimmt das "global vs local execution and effect" Handling,
soweit ich es verstanden habe.

Die guten Leute haben ihr eigene Systeme gebaut.

Spooner
SPON Core - Armaholic.com

Sickboy
6thSense Network Services "Lite"
6thSense.eu Battle Center

CoC
COC Network Services
COC Command Engine X


Zu Ruby und Passenger / Auslastung wäre Sickboy über dein Wissen
sehr sehr dankbar. :)



Das Repository is jetzt wieder erreichbar:
http://dev-heaven.net/repositories/b...ehicle_dm.utes

:)

Xeno 18.06.2009 10:31

Zitat:

Zitat von Ephraim (Beitrag 245571)
man hat aber ständig das Gefühl, sich jeden Scheiss mühsam zusammensuchen zu müssen - vorallem wenn es um MP-Missionen geht.

*deleted*

Xeno

Mr-Murray 18.06.2009 10:47

@Xeno
Geht ja auch ohne ;) Und AirCAV ist schon ziemlich cool!!!


@Ephraim
Zitat:

@Mr-Murray, eine Thematik die auch kurz angesprochen werden sollte, sind die Params für Multiplayermissionen.
Schau mal im Kapitel 7.9 und 7.10. Ich glaube ab Seite 231. Dort ist es zwar an der Zeit und dem Wetter festgemacht, aber ich kann es ja auch gerne nochmal allgemein erläutern.

Ist in die Tasklist aufgenommen worden. Das Briefing habe ich gestern auf bis jetzt noch 4
Seiten niedergeschrieben. Sehr ausfühlich erklärt und natürlich übersichtlich gestaltet.
Probelesen auf Anfrage ok für mich. Ich muss nur noch klären, wie sich das Briefing und die
Aufgaben im MP verhalten. Ich habe gehört, dass es da manchmal zu Problemen kommt.
Entweder ein BUG oder allgemeines Problem.


Viele Grüße

Mr-Murray

Hath Kull 18.06.2009 10:52

@Mr.NiceGuy:

die Sache mit dem <_variable = _this select 0> ist eigentlich sehr praktisch, aber ich hab ne Weile gebraucht, um durchzusteigen.
Wenn so eine Zeile in einem Script steht, bewirkt sie dass der Auslöser des Scripts im Script den Namen "_variable" zugewiesen bekommt (zusätzlich zu seinem normalen Namen, meinetwegen "wache01") - Wenn du also in die init-Zeile von "wache01" reinschreibst <this exec "anim.sqs"> oder <wache01 exec anim.sqs> dann wird im Script der Auslöser des Scripts als "wache01" erkannt und diesem wrd der lokale Name "_variable" zugewiesen.

Das ganze hat den Sinn, dass du im Script mit einem festgelegten Namen arbeiten kannst, und trotzdem das Script immer wieder von verschiedenen Leuten ausführen lassen kannst, die dann jeweils tun was das Script vorschreibt, weil jeder von ihnen in dem Moment der Ausführung zusätzlich zu seinem eigentlichen Namen den Namen "_variable" trägt.

Was Mr-Murray meint mit "lies mal was über Arrays" ist: du kannst auch mehrere Leute das Script gleichzeitig ausführen lassen (z.B. am Tor links und rechts je ein Wächte die gleichzeitig grüßen), wenn du als init-Zeile nicht nur <wache01 exec...> schreibst, sondern ein Array benutzt. <[wache01, wache02, wache03] exec "anim.sqs"> - hier lösen alle drei im Array [] angegebenen Leute das Scrpt aus, und im Script bekommen sie dann folgendermaßen Namen zugewiesen:
Soll der Erste im Array angesprochen werden, passiert das mit <_scriptguyA = _this select 0>, der Zweite <_scriptguyB = _this select 1>, der Dritte mit <_scriptguyC_this select 2>
Jetzt kannst du das Script immer wieder gleichzeitig von bis zu 3 verschiedenen Leuten ausführen lassen.

Sorry, ich schreib irgendwie alles doppelt und dann noch voll im Erklärbär-Stil. Aber lieber so als wenn du noch tausendmal nachfragen musst, weil ich mich unverständlich ausdrücke...
Ich kann dir auch gern nochmal ein tatsächliches Beispiel basteln (dann aber am besten über PN, weil das hier irgendwie OffTopic wäre...

Ephraim 18.06.2009 11:11

Zitat:

Zitat von Xeno (Beitrag 245966)
*deleted*

Genau hier entstanden bei mir sehr viele Fragezeichen. Das Thema Lokalität (schönes Wort) sollte wohl für MP-Missionen recht frühzeitig behandelt werden, das es wohl zu den Grundlagen gehört.

Zitat:

Zitat von .kju (Beitrag 245964)
Das MP Framework wird per Gamelogic eingebunden.
Das MPF übernimmt das "global vs local execution and effect" Handling,
soweit ich es verstanden habe.

Die guten Leute haben ihr eigene Systeme gebaut.

Hört sich interessant an, ich als Anfänger sollte aber wohl erstmal beim MP Framework bleiben, denke ich. Ich nehme mal an, deren Frameworks sind noch nicht 100prozentig mit ArmA2 kompatibel?

Zitat:

Zitat von .kju (Beitrag 245964)
Zu Ruby und Passenger / Auslastung wäre Sickboy über dein Wissen
sehr sehr dankbar. :)

Er kann mich gern bei DevHeaven kontaktieren, ich administriere auf der Arbeit 2 Maschinen mit Ruby On Rails über Passenger. Und so langsam scheints stabil zu laufen, uptime bis dato 102 Tage (nach einem guten Jahr rumgefummel).


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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