http://forum2.egosoft.com/viewtopic.php ... 38#1301438
Der zweite Teil wird demnächst von mega|Doc geliefert.
------------------- schnipp ----------------------------------------
Ich werde mal eine kurze Erklärung versuchen, wie man mit Hilfe der newsengine zufällige Nachrichten erstellt. Ich werde ca. eine Stunde lang schreiben und dann aufhören. Tut mir leid, dass ich das nicht in einem Stück schaffe. Ich hoffe, ihr werdet trotzdem den roten Faden nicht verlieren bei dem harten Stoff, den ich euch zu präsentieren habe.
Ich werde meine Skripte für zufällige Wirtschaftsereignisse als Beispiel benutzen.
Grundsätzlich macht die newsengine folgendes: sie stellt aus einer Reihe von Textsegmenten, die zusammen passen (gehören), einen Artikel für das "Schwarze Brett" (BBS) zusammen und zeigt ihn an.
Das ist der Teil des Skripts, der den Artikel zur Anzeige im BBS aufruft:
(keine Sorge, ich werde das alles noch ein wenig erklären)
Code: Select all
177 * define variables for news article
178 $news.array = array alloc: size=2
179 $news.array[0] = $ware
180 $news.array[1] = $sector
181 $occurences = random value from 3 to 6 - 1
182
183 * add bbs news articles to relevant stations
184 $key = display news article: page=$text.page.id newsid=$news.id occurences=$occurences maxoffertime=null maxtime=null placeholder:race1=$race race2=null customarray=$news.array
185
186 if $key
187 change event news availability: $key race=$race sector=null jumps=null
Ihr könnt eurem BBS - Artikel Argumente übergeben, die als Teil des Textes angezeigt werden. Ihr übergebt die Variablen als ein Array beliebiger Größe. Sie werden dann im t - File referenziert. Ich benötigte zwei Variablen für meine News Ereignisse; die Ware, um die es geht und den Sektor, in dem das Ereignis auftritt. Also habe ich ein Array - genannt das news.array - mit zwei Elementen definiert und diese Variablen geladen. Beachtet, dass $ware und $sector vorher schon an anderer Stelle im Skript definiert wurden.
Occurences beschreibt, wie oft der Artikel maximal im BBS gelesen werden kann. Um ehrlich zu sein, ich bin mir da nicht ganz sicher.
Also, es gibt zwei Hauptschritte, um einen Artikel zu erstellen und ihn in den Raumstationen zu plazieren. Der erste Befehl, den ihr seht und der mit $key beginnt, kümmert sich um die Erstellung. Was diese Zeile grundsätzlich tut, ist das t - File aufzurufen und den Text zu inspizieren aus dem die Textteile ausgesucht werden. Dann stellt die newsengine den Text anhand eurer definierten Regeln zusammen, und erstellt den Artikel. Wir reden hier nicht von statischen Artikeln - die sind total einfach - ich zeige euch ein voll gepacktes Beispiel, wie man dynamische Artikel erstellt.
Ihr werdet bemerken, dass das erste Argument nach page.id (die nur die richtige Seite im t - File angibt) news.id ist. Ich werde mich weiterhin in diesem Tutorial darauf beziehen als news.id oder Ereignisnummer oder Ereignis. Es bedeutet einfach, dass wenn ihr verschiedene Typen von Artikeln im BBS definiert (Spieler gewinnt im Lotto, Spieler zerstört Raumstation, Spieler gewinnt Ansehen bei einer Rasse oder was immer ihr wollt), dann werden diese durch verschiedene Ereignisnummern repräsentiert, so dass ihr der newsengine sagen könnt, welche ihr aufrufen wollt, indem ihr die entsprechende Nummer angebt. Lasst uns erst das t- File definieren, bevor wir dazu kommen, was die anderen einzelnen Argumente in dieser Codezeile tun, ok?
Die nächste Zeile, die da lautet change event news, ist der Teil der das Spiel anweist den neu erstellten Artikel in das BBS der Raumstationen einzustellen.
Lasst uns jetzt einen Blick auf auf einen kleinen Teil des t - Files werfen.
(Ich habe den größten Teil ähnlicher Eintragstypen entfernt; ihr könnt das gesamte Teil irgendwo im t - File des Spiels bewundern.)
Code: Select all
- <page id="2200" title="good econ event news page" descr="Text für gute Neuigkeiten aus dem Bereich Wirtschaft">
<t id="101">Argonen</t>
<t id="102">Boronen</t>
<t id="103">Split</t>
<t id="104">Paraniden</t>
<t id="105">Teladi</t>
<t id="108">Piraten</t>
<t id="151">Argonen</t>
<t id="152">Boronen</t>
<t id="153">Split</t>
<t id="154">Paraniden</t>
<t id="155">Teladi</t>
<t id="158">Piraten</t>
<t id="10000">[author]Galaxy Network - GalNet[/author]</t>
<t id="10100">$AUTHOR$, Editor in Chief, GalNet Economic News</t>
<t id="10101">$AUTHOR$, Assoc. Editor, GalNet Economic News</t>
<t id="10200">Prüfen Sie regelmäßig die neuesten Wirtschaftsnachrichten im Sektor $SECTOR$ und den umliegenden Gebieten.</t>
<t id="10300">Die umliegenden Sektoren berichteten einen deutlichen Verkehrsanstieg durch Schiffe, die zum Sektor $SECTOR$ durchkämpfen, um von den tollen Preisen zu profitieren.</t>
<t id="10301">Die Ereignisse geben für viele Anlass zu glauben, das dies eine neue Ära des Handels zwischen $SECTOR$ und seinen Nachbarn ankündigt. Die, die etwas anderes annahmen, scheinen jetzt in einer verschwindenden Minderheit zu sein.</t>
<t id="10302">Frachter kommen in einer ständig zunehmenden Anzahl in diesem Sektor an, laden
alles, was sie tragen können und entschwinden mit noch unbekanntem Ziel. Die Preise der Nachbarsektoren scheinen wie eine Beleidigung angesichts der derzeitigen Preise in $SECTOR$.</t>
<t id="10400">Das Glück dieses Sektors scheint kein Ende zu nehmen. Und während viele glauben mögen, dass die Gewinne de r Händler in diesem Sektor wohl kaum legal sein können, ist bisher nichts erwiesen als harte Arbeit und das Verbringen vieler Stazuras im Cockpit und in den Hangars.</t>
<t id="10401">Wir haben zahllose Händler überall im Sektor gesehen, die geradezu entzückt sind von den Ereignissen, die da über sie hereinbrechen. Obwohl uns viele zustimmen, dass diese Zeiten auch wieder enden werden, würde niemand darauf wetten, wann dieser Zeitpunkt eintritt.</t>
<t id="10402">Die Sprungtore sind in ständiger Benutzung während der Sektor hart daran arbeitet, die Händler ab zu fertigen, die einen besseren Schnitt machen wollen mit den Geschäften, die jetzt sogar in immer mehr abseits liegenden Regionen bekannt werden..</t>
<t id="10500">"Es ist unglaublich! Mir ist nicht bekannt, dass so etwas schon ein mal vorgekommen ist. Sicherlich können sich auch meine Schiffskameraden nicht an solch ein Ereignis in der jüngsten Vergangenheit erinnern," bestätigte $PERSON1$, der gerade die Station aufsuchte, während wir für diesen Bericht recherchierten.</t>
<t id="10501">"Ich habe nicht gedacht, dass ich so etwas mal erleben werde. Ich erinnere mich, dass meine Eltern von solchen Zeiten sprachen, als ich noch sehr jung war. Es überrascht mich, dass wir jetzt mitten drin stecken," sagte $PERSON1$, ein Stationsmanager, der immer noch schockiert zu seien scheint über die Geschehnisse.</t>
<t id="10502">"Wir haben so viele Arbeiter gesehen, die viel zu wenig geschlafen haben und dringen ausspannen müssten, dass wir aufgehört haben zu zählen. Der Stress dieser Situation beginnt sich gerade erst zu zeigen aber eins ist sicher: Der Gewinn war noch nie so gut. Wir verkaufen wie die kaputten!" sagte $PERSON1$, ein Stationsmanager, der sichtlich außer sich ist, angesichts solch unglaublicher Geschäfte.</t>
<t id="200000">[Author][Byline][Report][Melodrama A][Melodrama B][Quote]</t>
<t id="200001">[Event Comment]</t>
<t id="200002">[Headline][Intro]</t>
<t id="210000">$WARE$</t>
<t id="210001">$SECTOR$</t>
<t
id="1000000">[Author][title][Headline][/title][justify][Intro][br/][br/][Melodra
ma A][Quote][br/][br/][Report][/justify][br/][br/][Byline]</t>
<t id="1000001">[Author][title][Headline][/title][justify][Intro][Melodrama
A][br/][br/][Quote][Melodrama
B][br/][br/][Report][/justify][br/][br/][Byline]</t>
<t id="1000002">[Author][title][Headline][/title][justify][Intro][Melodrama
B][Quote][br/][br/][Report][/justify][br/][br/][Byline]</t>
<t id="2010000">Beispiel für Ereignis-spezifischen Text 1</t>
<t id="3010000">Sonnenaktivitäten entzünden Energieboom in $SECTOR$</t>
<t id="3020000">Entdeckung in $SECTOR$</t>
<t id="3010100">Ein plötzlicher Anstieg der Sonnenaktivität ermöglicht es den Sonnenkraftwerken, ihre Produktionsrate deutlich zu steigern. Die Stationsmanager des gesamten Sektors berichten von einer Rekordausbeute mit Preisen auf dem Tiefststand. Dies hat wiederum Auswirkungen auf andere Stationen im Sektor, der einen Produktionsschub verzeichnen kann.</t>
<t id="3020100">Wissenschaftler entdeckten kürzlich einen Standort, der möglicherweise die erste neue, wertvolle Quelle in einigen Jazuras werden könnte. Seit die Neuigkeiten das erste mal veröffentlicht wurden, wird $SECTOR$ mit unzähligen Aufragen nach weiteren Informationen überflutet. Obwohl noch unbekannt, wird vermutet, dass die Weiterverarbeitung der Ressourcen eine Fülle an Energiezellen einbringen wird. Im Zuge dessen hat sich ein Produktionsanstieg in allen Fabriken entfacht angesichts des Überflusses an Energie, die nun in $SECTOR$ zur Verfügung steht.</t>
</page>
Also, dann lasst uns das mal Zeile für Zeile durchgehen und darüber reden, was jede einzelne Zeile tut und ich werde ebenso Bezug auf die Argumente im Skriptcode nehmen (wenn erforderlich). Das erste, woran wir uns erinnern sollten, ist, das wir einen einzelnen Artikel aus einer Menge von Möglichkeiten in einem gegebenen Template zusammenstellen. Also müsst ihr erst mal dieses Template mit all seinen Varianten definieren und dann der newsengine mitteilen, wie diese Teile zusammen zufügen sind. Dann erledigt sie die ganze Arbeit. Ich weiß, das ergibt jetzt noch keinen Sinn. Aber lest weiter.
Es gibt eine bestimmte Anzahl Variablen, die in jedem Artikel immer zur Verfügung stehen und die nicht als Argumente in dem o.g. Array übergeben werden müssen. Dies sind im Einzelnen:
- $THISSTATION$ - die Raumstation, an der der Spieler angedockt ist
$THISPEOPLE$ - die Rasse (Volk) der Raumstation, an der der Spieler angedockt ist
$THISRACEGOVERNMENT$ - die Rasse (Regierung) der Raumstation, an der der Spieler angedockt ist
$THISPERSON$ - zufälliger Name einer Person, die zu der Rasse der Raumstation gehört, an der der Spieler angedockt ist
$AUTHOR$ - ein weiterer zufälliger Name wie oben
$PEOPLE1$ - die Rasse (Volk), die im Code in Slot 1 definiert ist
$PERSON1$ - zufälliger Name einer Person, die zu der Rasse gehört, die im Code in Slot 1 definiert ist
$GOVERNMENT1$ - die Rasse (Regierung), die im Code in Slot 1 definiert ist
$PEOPLE2$ - das selbe wie oben für Slot 2 (Ich benutze den Slot 2 im Wirtschaftscode nicht)
$PERSON2$ - das selbe wie oben für Slot 2 (Ich benutze den Slot 2 im Wirtschaftscode nicht)
$GOVERNMENT2$ - das selbe wie oben für Slot 2 (Ich benutze den Slot 2 im Wirtschaftscode nicht)
Code: Select all
183 * add bbs news articles to relevant stations
184 $key = display news article: page=$text.page.id newsid=$news.id occurences=$occurences maxoffertime=null maxtime=null placeholder:race1=$race race2=null customarray=$news.array
Also, Zeile für Zeile. Die ersten paar Zeilen des t - Files sollten dies enthalten
Code: Select all
<t id="101">Argonen</t>
<t id="102">Boronen</t>
<t id="103">Split</t>
<t id="104">Paraniden</t>
<t id="105">Teladi</t>
<t id="108">Piraten</t>
<t id="151">Argonen</t>
<t id="152">Boronen</t>
<t id="153">Split</t>
<t id="154">Paraniden</t>
<t id="155">Teladi</t>
<t id="158">Piraten</t>
<t id="101">argonische Einwohner</t>
dann wird folgendes passieren. Wenn der Skriptcode das Argument race1 ausliest und die Nummer 1 auf das t - File anwendet, wird er nach dem Eintrag 101 suchen (wegen der 1 für Argonen) und den obigen Text in die Variable $PEOPLE1$ einsetzen.
Also, 101-105,108 bestimmen, was für $PEOPLE1$ eingesetzt wird entsprechend der 6 Rassen (Das wird sicher für weitere Rassen genau so sein, seht euch Zahlen an).
151-155,158 bestimmen, was für $GOUVERMENT1$ eingesetzt wird.
Alles klar, soweit?
Springen wir weiter zu den folgenden Zeilen:
Code: Select all
<t id="200000">[Author][Byline][Report][Melodrama A][Melodrama B][Quote]</t>
<t id="200001">[Event Comment]</t>
<t id="200002">[Headline][Intro]</t>
Und das bedeuten die Zeilen im einzelnen:
- 200000 - Diese Text-ID wird benutzt, um den allgemeinen Text eures Artikels zu definieren. Das bedeutet, dass diese Segmente für jeden Artikel zur Verfügung stehen.
200001 - Diese Text-ID wird benutzt, um den ereignisspezifischen Text eures Artikels zu definieren (welcher Text zu welchem Ereignis gehört, wir weiter unten bestimmt).
200001 - Diese Text-ID wird benutzt, um alle ereignisspezifisch verknüpften Segmente zu definieren. Ich weiß, dass das noch nicht viel Sinn ergibt, aber habt Geduld. Hier werden alle Segmente bestimmt, die zu bestimmten Ereignissen gehören und zusammen passen müssen. Seht euch mein Beispiel für [Headline] und [Intro] an. Das bedeutet, dass jedes Ereignis eine eindeutige Headline besitzt, die angezeigt werden muß und der verknüpfte Intro-Teil zu der Headline passen muß.
Das erste, was hier definiert wird, sind allgemeine Segmente (das sind die mit der t id 200000)
<t id="10000">[author]Galaxy Network - GalNet[/author]</t>
Hier habe ich meinen einzigen Eintrag für den Segmenttyp [Author] definiert.
Die t ids für die Definition allgemeiner Segmenttypen sind immer 5-stellig und beginnen mit der Zahl 1.
10000 - Diese zwei Zahlen bestimmen den Segmenttyp. 00 ist das erste Segment und stimmt daher mit dem ersten Eintrag in der Zeile der Segmentdefinition '[Author]' überein (Keine Sorge. Das ergibt mehr Sinn, wenn wir uns noch weitere Beispiele ansehen).
10000 - Diese beiden Zahlen ergeben die eindeutige ID. 00 ist der erste Eintrag für den Segmenttyp [Author].
Also bedeutet 10000 der erste Eintrag des ersten Segmenttyps.
10304 bedeutet der fünfte Eintrag des vierten Segmenttyps (Nicht vergessen, bei 0 anfangen zu zählen ) usw.
Nun zu den nächsten beiden Zeilen:
Code: Select all
<t id="10100">$AUTHOR$, Editor in Chief, GalNet Economic News</t>
<t id="10101">$AUTHOR$, Assoc. Editor, GalNet Economic News</t>
Weiter geht´s:
Code: Select all
<t id="10200">Check back regularly for all the latest business news concerning $SECTOR$ and surrounding areas.</t>
Code: Select all
<t id="10300">Surrounding sectors have reported a frenzied increase in traffic as ships struggle to reach $SECTOR$ to take advantage of the great prices.</t>
<t id="10301">These events have given cause for many to believe that this may herald a new era for trade relations between $SECTOR$ and its neighbours. Those who believed otherwise appear to be in a now silent minority.</t>
<t id="10302">Freighters are arriving at steadily increasing rates in the sector, loading up with as much stock as they can hold, with destinations as of yet unknown. Prices in neighbouring sectors remain steady despite the incredible offers currently available in $SECTOR$.</t>
Ihr solltet jetzt die Einträge für [Melodram B] und
darunter erkennen können.
Ok, also jetzt kennt die newsengine alle allgemeinen Segmenttypen, die es gibt und auch alle Möglichkeiten, aus denen ausgewählt werden kann, wenn ein bestimmtes Segment benutzt werden soll.
Ich werde im nächsten post weitermachen.
----------------- schnapp ----------------------------------------
Viel Spass Han Polo.