<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.stne.net/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.stne.net/index.php?action=history&amp;feed=atom&amp;title=Scripting%3ALadeStation</id>
		<title>Scripting:LadeStation - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.stne.net/index.php?action=history&amp;feed=atom&amp;title=Scripting%3ALadeStation"/>
		<link rel="alternate" type="text/html" href="https://wiki.stne.net/index.php?title=Scripting:LadeStation&amp;action=history"/>
		<updated>2026-04-07T13:35:43Z</updated>
		<subtitle>Versionsgeschichte für diese Seite in STNE-Wiki</subtitle>
		<generator>MediaWiki 1.16.0</generator>

	<entry>
		<id>https://wiki.stne.net/index.php?title=Scripting:LadeStation&amp;diff=15158&amp;oldid=prev</id>
		<title>Faldrian am 7. Februar 2010 um 10:49 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.stne.net/index.php?title=Scripting:LadeStation&amp;diff=15158&amp;oldid=prev"/>
				<updated>2010-02-07T10:49:05Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;? Nächstältere Version&lt;/td&gt;
		&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Version vom 7. Februar 2010, 10:49 Uhr&lt;/td&gt;
		&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Faldrian&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Faldrian&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PS&lt;/del&gt;: Zum Schreiben von Code ist das Wiki total bescheuert, daher hier noch ersatzweise ein Link auf eine vernünftig formatierte Version: http://www.pastebin.org/85331&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PS1: &amp;lt;a rel=&amp;quot;license&amp;quot; href=&amp;quot;http://creativecommons.org/licenses/by-nc-sa/3.0/de/&amp;quot;&amp;gt;Den Code stelle ich unter der BY-NC-SA CC-Lizenz zur Verfügung.&amp;lt;/a&amp;gt; Details stehen im Link.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PS2&lt;/ins&gt;: Zum Schreiben von Code ist das Wiki total bescheuert, daher hier noch ersatzweise ein Link auf eine vernünftig formatierte Version: http://www.pastebin.org/85331&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;nbsp; #UseInterface Web, ShipPortal;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;nbsp; #UseInterface Web, ShipPortal;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Faldrian</name></author>	</entry>

	<entry>
		<id>https://wiki.stne.net/index.php?title=Scripting:LadeStation&amp;diff=15151&amp;oldid=prev</id>
		<title>Faldrian: LadeStation Script.</title>
		<link rel="alternate" type="text/html" href="https://wiki.stne.net/index.php?title=Scripting:LadeStation&amp;diff=15151&amp;oldid=prev"/>
				<updated>2010-02-02T09:27:37Z</updated>
		
		<summary type="html">&lt;p&gt;LadeStation Script.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ihr kennt vielleicht die LadeStationen, die es überall im Quandranten gibt / mal gab.&lt;br /&gt;
Hier veröffentliche ich nun den Code dafür, auf dass jeder sich Code-Praxis hieran abgucken kann und den sinnvollen Einsatz der PrettyPrint-Library nachvollziehen kann.&lt;br /&gt;
Außerdem könnt ihr hiermit den Service-Level massiv heben, wenn ihr als Spieler selber solche Dienste anbietet. :)&lt;br /&gt;
&lt;br /&gt;
Damit es funktioniert, müssen zwei Daten-Dateien angelegt werden, was konkret benötigt wird, steht im Code.&lt;br /&gt;
Falls jemand mehr Zeit hat als ich, darf hier gerne Dokumentation hinzugefügt werden, um die Installation und das Verständnis einfacher zu machen.&lt;br /&gt;
&lt;br /&gt;
Viele Grüße,&lt;br /&gt;
Faldrian&lt;br /&gt;
&lt;br /&gt;
PS: Zum Schreiben von Code ist das Wiki total bescheuert, daher hier noch ersatzweise ein Link auf eine vernünftig formatierte Version: http://www.pastebin.org/85331&lt;br /&gt;
&lt;br /&gt;
 #UseInterface Web, ShipPortal;&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * prettyPrint&lt;br /&gt;
  * Formatiert einen Text gemäß der in IGMs möglichen Funktionen&lt;br /&gt;
  * Gibt ein Objekt zurück, dass an das Response-Objekt gehangen werden kann.&lt;br /&gt;
  * Wichtig: hier wird nur valides XML-artiges zeug geparst!&lt;br /&gt;
  *          HTML-durcheinander-Verdreckungen werden mit Fehlermeldung beantwortet.&lt;br /&gt;
  */&lt;br /&gt;
 Function prettyPrint(text As String) As CHtmlControl {&lt;br /&gt;
   Var stack As New CObjectList(); // Stack für die Verschachtelung&lt;br /&gt;
   Var tmpObj As CObject; // Damit diese blöde Engine damit klar kommt.&lt;br /&gt;
   Var element As New Stackelement(); // Oberste Ebene definieren, macht die Schleife einfacher&lt;br /&gt;
   Var textStart As Integer = 0;&lt;br /&gt;
   Var nextTagAuf As Integer = text.IndexOf(&amp;quot;&amp;lt;&amp;quot;); // Such den ersten HTML-Tag&lt;br /&gt;
   Var nextTagZu As Integer = text.IndexOf(&amp;quot;&amp;gt;&amp;quot;); // Auch gleich die Position, wo es zu geht&lt;br /&gt;
   nextTagAuf = Math.Min(nextTagAuf, nextTagZu); // Das Minimum der beiden ist -1, wenn etwas nicht gefunden wurde, sonst nextTagAuf&lt;br /&gt;
   Var tag As String;&lt;br /&gt;
   &lt;br /&gt;
   While(nextTagAuf &amp;gt; 0) {&lt;br /&gt;
     If(textStart &amp;lt; nextTagAuf) {&lt;br /&gt;
       // Erstmal ist da Text, hinzufügen&lt;br /&gt;
       element.e.Add(text.Substring(textStart, nextTagAuf - textStart));&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Den Tag isolieren&lt;br /&gt;
     tag = text.Substring(nextTagAuf + 1, nextTagZu - nextTagAuf - 1); // &amp;lt;dies hier&amp;gt;&lt;br /&gt;
     If(String.Compare(tag, 0, &amp;quot;/&amp;quot;, 0, 1) = 0) { // Wenn das erste Zeichen innerhalb des Tags &amp;quot;/&amp;quot; ist --&amp;gt; Endtag&lt;br /&gt;
       // Wenn der Tag ein schließender Tag ist&lt;br /&gt;
       If(tag = element.tag) { // element.tag sieht schon gleich so aus: &amp;quot;/tag&amp;quot;&lt;br /&gt;
         tmpObj = stack.Item(stack.Count - 1);&lt;br /&gt;
         element = tmpObj;&lt;br /&gt;
         stack.RemoveAt(stack.Count - 1); // Letzten vom Stack poppen&lt;br /&gt;
       } Else {&lt;br /&gt;
         // Hier ist was kaputt im Quellcode&lt;br /&gt;
         element.e.Add(&amp;quot;[Fehler: schließender Tag &amp;quot; + element.tag + &amp;quot; erwartet, &amp;quot; + tag + &amp;quot;gefunden. Abbruch.]&amp;quot;);&lt;br /&gt;
         Exit While; // While verlassen&lt;br /&gt;
       }&lt;br /&gt;
     } Elseif(is_singleTag(tag)) {&lt;br /&gt;
       // Wenns ein BR oder dergl ist, ersetzen&lt;br /&gt;
       element.e.Add(replaceSingleTag(tag));&lt;br /&gt;
     } Else {&lt;br /&gt;
       // Ist scheinbar ein umschließender Tag, also verarbeiten&lt;br /&gt;
       tmpObj = element;&lt;br /&gt;
       stack.Add(tmpObj); // Alten aktuellsten Tag auf den Stack schieben&lt;br /&gt;
       element = replaceTag(tag, element); // Baut ein neues Stackelement mit element und endtag&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Lege die neuen Limits fest&lt;br /&gt;
     textStart = nextTagZu + 1;&lt;br /&gt;
     nextTagAuf = text.IndexOf(&amp;quot;&amp;lt;&amp;quot;, textStart);&lt;br /&gt;
     nextTagZu = text.IndexOf(&amp;quot;&amp;gt;&amp;quot;, textStart);&lt;br /&gt;
     nextTagAuf = Math.Min(nextTagAuf, nextTagZu); // Das Minimum der beiden ist -1, wenn etwas nicht gefunden wurde, sonst nextTagAuf&lt;br /&gt;
     &lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Letzten Text hinzufügen&lt;br /&gt;
   If(textStart &amp;lt; text.Length) { // Wenn da noch Text ist&lt;br /&gt;
     element.e.Add(text.Substring(textStart, text.Length - textStart));&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Return element.e; // oberste Ebene zurückgeben&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * replaceTag&lt;br /&gt;
  * Bekommt einen Tag und entscheidet dann, was für Formatierungen usw. es daraus macht.&lt;br /&gt;
  * Gibt ein HTML-Objekt zurück, in das der Inhalt reingeschoben werden kann&lt;br /&gt;
  */&lt;br /&gt;
 Function replaceTag(text As String, element As Stackelement) As Stackelement {&lt;br /&gt;
   text = text.ToLower();&lt;br /&gt;
   Var tagType As String = text;&lt;br /&gt;
   Var retHtmlPart As New CHtmlSpan();&lt;br /&gt;
   Var newHtmlPart As New CHtmlSpan(); // Neues Element, in dem weiterer Inhalt reinkommt.- Wird manchmal gebraucht&lt;br /&gt;
   element.e.Add(retHtmlPart);&lt;br /&gt;
   &lt;br /&gt;
   If(text.IndexOf(&amp;quot; &amp;quot;) &amp;gt; 0) { // Checken, ob der Tag Parameter hat&lt;br /&gt;
     tagType = text.Substring(0, text.IndexOf(&amp;quot; &amp;quot;));&lt;br /&gt;
     If(tagType = &amp;quot;font&amp;quot;) {&lt;br /&gt;
       Var firstquote_index As Integer = text.IndexOf(&amp;quot;color='&amp;quot;);&lt;br /&gt;
       Var secondquote_index As Integer = text.IndexOf(&amp;quot;'&amp;quot;, firstquote_index + 7);&lt;br /&gt;
       If(firstquote_index &amp;gt; 0 AND secondquote_index &amp;gt; 0) {&lt;br /&gt;
         retHtmlPart.Style.Add('color', text.Substring(firstquote_index + 7, secondquote_index - firstquote_index - 7));&lt;br /&gt;
       } Else {&lt;br /&gt;
         retHtmlPart.Add(&amp;quot;[Fehler: Konnte das Font-Tag nicht korrekt Parsen. Quotes checken?]&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
     } Else {&lt;br /&gt;
       // Unbekannter Tag, gib Fehlermeldung aber nerv nicht weiter.&lt;br /&gt;
       retHtmlPart.Add(&amp;quot;[Fehler: unbekannter Tag - &amp;quot; + tagType + &amp;quot; - ignoriert.]&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
   } Else { // Keine Parameter, erstmal diese Tags implementieren&lt;br /&gt;
     If(tagType = &amp;quot;b&amp;quot;) {&lt;br /&gt;
       retHtmlPart.Style.Add('font-weight', 'bold');&lt;br /&gt;
     } Elseif(tagType = &amp;quot;u&amp;quot;) {&lt;br /&gt;
       retHtmlPart.Style.Add('font-decoration', 'underline');&lt;br /&gt;
     } Elseif(tagType = &amp;quot;i&amp;quot;) {&lt;br /&gt;
       retHtmlPart.Style.Add('font-style', 'italic');&lt;br /&gt;
     } Elseif(tagType = &amp;quot;small&amp;quot;) {&lt;br /&gt;
       retHtmlPart.Style.Add('font-size', 'smaller');&lt;br /&gt;
     } Elseif(tagType = &amp;quot;ul&amp;quot;) { // Einen UL-Tag simulieren, indem das SPAN drumherum manipuliert wird.&lt;br /&gt;
       retHtmlPart.Style.Add('display', 'block');&lt;br /&gt;
       retHtmlPart.Style.Add('margin', '13px 39px');&lt;br /&gt;
       retHtmlPart.Add(newHtmlPart);&lt;br /&gt;
       retHtmlPart = newHtmlPart; // Hier überschreiben, damit das neue Inhaltselement auch zurückgegeben wird.+&lt;br /&gt;
     } Elseif(tagType = &amp;quot;li&amp;quot;) { // Einen LI-Tag simulieren, indem das SPAN drumherum manipuliert wird.&lt;br /&gt;
       retHtmlPart.Style.Add('display', 'list-item');&lt;br /&gt;
       retHtmlPart.Style.Add('list-style-image', 'url(http://game.stne.net/t/1/s/li.gif)');&lt;br /&gt;
     } Else {&lt;br /&gt;
       // Unbekannter Tag, gib Fehlermeldung aber nerv nicht weiter.&lt;br /&gt;
       retHtmlPart.Add(&amp;quot;[Fehler: unbekannter Tag - &amp;quot; + tagType + &amp;quot; - ignoriert.]&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Jetzt sollten auf dem retHtmlPart alle passenden Formatierungen usw. drauf sein. Gib mal zurück.&lt;br /&gt;
   Return New Stackelement(retHtmlPart, &amp;quot;/&amp;quot; + tagType);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * replaceSingleTag&lt;br /&gt;
  * Ersetzt Tags, die man nicht schließen muss direkt und gibt ein CHtmlControl zurück.&lt;br /&gt;
  */&lt;br /&gt;
 Function replaceSingleTag(text As String) As CHtmlControl {&lt;br /&gt;
   text = text.ToLower();&lt;br /&gt;
   text = text.Replace(&amp;quot;&amp;quot;&amp;quot;&amp;quot;, &amp;quot;'&amp;quot;); // Damit ich nur nach einer Sorte suchen muss&lt;br /&gt;
   Var retHtmlPart As New CHtmlSpan();&lt;br /&gt;
   &lt;br /&gt;
   If(text.StartsWith(&amp;quot;img&amp;quot;)) {&lt;br /&gt;
     Var firstquote_index As Integer = text.IndexOf(&amp;quot;src='&amp;quot;);&lt;br /&gt;
     Var secondquote_index As Integer = text.IndexOf(&amp;quot;'&amp;quot;, firstquote_index + 5);&lt;br /&gt;
     If(firstquote_index &amp;gt; 0 AND secondquote_index &amp;gt; 0) {&lt;br /&gt;
       Return New CHtmlImage(text.Substring(firstquote_index + 5, secondquote_index - firstquote_index - 5));&lt;br /&gt;
     } Else {&lt;br /&gt;
       retHtmlPart.Add(&amp;quot;[Fehler: Konnte das IMG-Tag nicht korrekt Parsen. Quotes checken?]&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
   } Elseif(text = &amp;quot;br&amp;quot;) {&lt;br /&gt;
     Return New CHtmlBreak();&lt;br /&gt;
   } Else {&lt;br /&gt;
     retHtmlPart.Add(&amp;quot;[Fehler: Unbekanntes Tag - &amp;quot; + text + &amp;quot; ]&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Return retHtmlPart;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * is_singleTag&lt;br /&gt;
  * Checkt, ob ein Tag mit einem als single-Tag bekannten Tag anfängt.&lt;br /&gt;
  */&lt;br /&gt;
 Var singleTags[] As String = {&amp;quot;br&amp;quot;, &amp;quot;img&amp;quot;}; // Enthält alle einfachen Tags, die keine Ebenen aufspannen&lt;br /&gt;
 Function is_singleTag(text As String) As Boolean {&lt;br /&gt;
   Var walkstring As String;&lt;br /&gt;
   For(Each walkstring In singleTags) {&lt;br /&gt;
     If(String.Compare(walkstring, 0, text, 0, walkstring.Length) = 0) {&lt;br /&gt;
       Return true;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   Return false;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* Ist eine komplexe Datenstruktur, damit mehr als ein Ding aufm Stack liegen kann */&lt;br /&gt;
 Class Stackelement {&lt;br /&gt;
   Var e As CHtmlControl;&lt;br /&gt;
   Var tag As String;&lt;br /&gt;
   &lt;br /&gt;
   Function New() {&lt;br /&gt;
     This.e = New CHtmlControl();&lt;br /&gt;
     This.tag = &amp;quot;/none&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Function New(e As CHtmlControl, tag As String) {&lt;br /&gt;
     This.e = e;&lt;br /&gt;
     This.tag = tag;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 /** Ende PrettyPrint **/&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Function println(text As String) {&lt;br /&gt;
   Response.Add(text);&lt;br /&gt;
   Response.Add(New CHtmlBreak());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // Checkt, ob ein String nur aus 0-9 besteht.&lt;br /&gt;
 Function is_integer(text As String) As Boolean {&lt;br /&gt;
   Var stringindex As Integer = 0;&lt;br /&gt;
   For(stringindex = 0 To text.Length - 1) {&lt;br /&gt;
     If( not Char.IsNumber(text, stringindex)) {&lt;br /&gt;
       Return False;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   Return True;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // -- Konstanten&lt;br /&gt;
 Var kostenProEnergie As Integer = 5;&lt;br /&gt;
 Var maxGutscheinMenge As Integer = 1000;&lt;br /&gt;
 &lt;br /&gt;
 // -- Initialisierung des DataNodes&lt;br /&gt;
 // Var gutscheinspeicher As New CDataNodeStorage(&amp;quot;ServicePortalReserve_Gutschein&amp;quot;, true); &amp;lt;-- das braucht man nur um einen neuen Knoten zu erstellen.&lt;br /&gt;
 Var speicher As CDataNodeStorage = CDataNodeStorage.LoadFromUser(&amp;quot;ServicePortalReserve&amp;quot;, 36705);&lt;br /&gt;
 If( not speicher.Items.ContainsKey(&amp;quot;logs&amp;quot;)) { // Erster Aufruf?&lt;br /&gt;
   speicher.Items.Add(&amp;quot;logs&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 Var gutscheinspeicher As CDataNodeStorage = CDataNodeStorage.LoadFromUser(&amp;quot;ServicePortalReserve_Gutschein&amp;quot;, 36705);&lt;br /&gt;
 If( not gutscheinspeicher.Items.ContainsKey(&amp;quot;gutscheine&amp;quot;)) { // Erster Aufruf?&lt;br /&gt;
   gutscheinspeicher.Items.Add(&amp;quot;gutscheine&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /************************************&lt;br /&gt;
  ** DISPATCHER - Wohin gehts grad  **&lt;br /&gt;
  ************************************/&lt;br /&gt;
 Var options As CStringHashTable = Request.Form;&lt;br /&gt;
 If(options.ContainsKey(&amp;quot;event&amp;quot;)) {&lt;br /&gt;
   Var gotoevent As String = options.Item(&amp;quot;event&amp;quot;);&lt;br /&gt;
   If(gotoevent = &amp;quot;show_hauptseite&amp;quot;) {&lt;br /&gt;
     event_show_hauptseite();&lt;br /&gt;
   } Elseif(gotoevent = &amp;quot;transfer_energy&amp;quot;) {&lt;br /&gt;
     event_transfer_energy();&lt;br /&gt;
   } Elseif(gotoevent = &amp;quot;kaufe_gutschein&amp;quot;) {&lt;br /&gt;
     event_kaufe_gutschein();&lt;br /&gt;
   } Elseif(gotoevent = &amp;quot;show_gutschein&amp;quot;) {&lt;br /&gt;
     event_show_gutschein();&lt;br /&gt;
   } Elseif(gotoevent = &amp;quot;transfer_gutschein&amp;quot;) {&lt;br /&gt;
     event_transfer_gutschein();&lt;br /&gt;
   } Elseif(gotoevent = &amp;quot;show_logs&amp;quot;) {&lt;br /&gt;
     event_show_logs();&lt;br /&gt;
   } Else {&lt;br /&gt;
     // Wir programmieren gleich sauber mit Fehlermeldungen :)&lt;br /&gt;
     println(&amp;quot;Hier muss ein Fehler vorliegen. Bitte Faldrian(36705) melden und das hier angeben:&amp;quot;);&lt;br /&gt;
     println(&amp;quot;Dispatcher - unbekanntes Ziel - view: '&amp;quot; &amp;amp; gotoevent &amp;amp; &amp;quot;'&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
 } Else {&lt;br /&gt;
   // Einstiegsseite anzeigen&lt;br /&gt;
   event_show_hauptseite();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /***********************************************&lt;br /&gt;
  ** Controls - die Eventverarbeitenden Dinger **&lt;br /&gt;
  ***********************************************/&lt;br /&gt;
 &lt;br /&gt;
 // Ergebnisklasse, die von Check-Funktionen zurückgegeben wird.&lt;br /&gt;
 Class Checkresult {&lt;br /&gt;
   Var meldungen As CHtmlSpan;&lt;br /&gt;
   Var erfolg As Boolean;&lt;br /&gt;
   &lt;br /&gt;
   Function New() { // Konstruktor&lt;br /&gt;
     meldungen = New CHtmlSpan();&lt;br /&gt;
     erfolg = True;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Function Add(text As String) { // Fügt eine neue Bemerkung hinzu&lt;br /&gt;
     If(not erfolg) {&lt;br /&gt;
       meldungen.Add(New CHtmlBreak());&lt;br /&gt;
     }&lt;br /&gt;
     meldungen.Add(text);&lt;br /&gt;
     erfolg = False;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function event_transfer_energy() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Event: Ein Aufladevorgang soll gestartet werden&lt;br /&gt;
    */&lt;br /&gt;
   Var menge As Integer = 0;&lt;br /&gt;
   &lt;br /&gt;
   // Basischeck erstmal machen, ob man waren Beamen kann&lt;br /&gt;
   Var checkergebnisse As Checkresult = check_before_transaction();&lt;br /&gt;
   &lt;br /&gt;
   // Sicherstellen, dass nur Zahlen im Eingabefeld sind&lt;br /&gt;
   If(not is_integer(options.Item(&amp;quot;menge&amp;quot;))) {&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Bitte geben sie in das Feld 'Menge' eine natürliche Zahl ein.&amp;quot;);&lt;br /&gt;
   } Else {&lt;br /&gt;
     menge = Integer.Parse(options.Item(&amp;quot;menge&amp;quot;));&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Sicherstellen, dass genug Energie für die Eingabe vorhanden ist - Es gibt keine Beamkosten wegen &amp;quot;angedockt&amp;quot;.&lt;br /&gt;
   If(MyShip.Energie &amp;lt; menge) {&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Es steht nicht genügend Energie zur Verfügung. Es ist nur &amp;quot; &amp;amp; MyShip.Energie &amp;amp; &amp;quot; Energie vorhanden.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Bunten Kasten erzeugen.&lt;br /&gt;
   Var meldungsbox As CHtmlSpan = generate_messagebox(checkergebnisse.erfolg);&lt;br /&gt;
   &lt;br /&gt;
   If(checkergebnisse.erfolg) {&lt;br /&gt;
     // Beamvorgang der Larne&lt;br /&gt;
     // Hierbei erstmal versuchen, die gewünschte menge herunterzubeamen, wenns nicht genug war, abrunden und den rest zurückbeamen.&lt;br /&gt;
     // dann soviel aufladen, wie bezahlt wurde.&lt;br /&gt;
     Var larneVorher As Double = MyShip.Larne;&lt;br /&gt;
     Var echte_menge As Integer = menge;&lt;br /&gt;
     MyShip.Aktion.TransferiereVonSchiff(GuestShip.ShipID, menge * kostenProEnergie, EBeamRessource.Larne);&lt;br /&gt;
     &lt;br /&gt;
     // Sicherstellen, dass genug Larne rübergekommen ist&lt;br /&gt;
     If(MyShip.Larne &amp;lt; larneVorher + menge * kostenProEnergie) {&lt;br /&gt;
       echte_menge = Math.Floor((MyShip.Larne - larneVorher) / kostenProEnergie); // angenommen 49 von 50 wurden gebeamt, gibt das 9 Ladungen Rest 4.&lt;br /&gt;
       &lt;br /&gt;
       // Rest zurückgeben&lt;br /&gt;
       MyShip.Aktion.TransferiereZuSchiff(GuestShip.ShipID, (MyShip.Larne - larneVorher) - echte_menge * kostenProEnergie, EBeamRessource.Larne);&lt;br /&gt;
       checkergebnisse.Add(&amp;quot;Es wurde nur &amp;quot; &amp;amp; CStr(echte_menge * kostenProEnergie) &amp;amp; &amp;quot; Larne gefunden. Menge auf &amp;quot; &amp;amp; CStr(echte_menge) &amp;amp; &amp;quot; korrigiert.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Reservebatterie-Aufladung&lt;br /&gt;
     MyShip.Aktion.StationsReserveBatterieAufladen(GuestShip.ShipID, echte_menge);&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Es wurde versucht die Reservebatterie Ihres Schiffs um &amp;quot; &amp;amp; CStr(echte_menge) &amp;amp; &amp;quot; aufzuladen.&amp;quot;);&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Die Aufladung hat Sie  &amp;quot; &amp;amp; CStr(echte_menge * kostenProEnergie) &amp;amp; &amp;quot; Larne gekostet.&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
     // -- Absetzen des Logs im DataNode&lt;br /&gt;
     save_log(echte_menge, &amp;quot;&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Fenster wieder anzeigen.&lt;br /&gt;
   meldungsbox.Add(checkergebnisse.meldungen); // hier erst den Inhalt rein, damit der restliche Kram schon drumherum ist.&lt;br /&gt;
   view_hauptseite(meldungsbox);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function event_show_hauptseite() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Event: Hauptseite soll angezeigt werden.&lt;br /&gt;
    */&lt;br /&gt;
   view_hauptseite(New CHtmlControl());&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function event_show_logs() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Event: Die Logansicht soll angezeigt werden.&lt;br /&gt;
    */&lt;br /&gt;
   view_logs();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function event_kaufe_gutschein() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Event: Kaufe mit Larne einen Gutschein&lt;br /&gt;
    */&lt;br /&gt;
   Var menge As Integer = 0;&lt;br /&gt;
   &lt;br /&gt;
   // Basischeck erstmal machen, ob man waren Beamen kann&lt;br /&gt;
   Var checkergebnisse As Checkresult = check_before_transaction();&lt;br /&gt;
   &lt;br /&gt;
   // Sicherstellen, dass nur Zahlen im Eingabefeld sind&lt;br /&gt;
   If(not is_integer(options.Item(&amp;quot;menge&amp;quot;))) {&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Bitte geben sie in das Feld 'Menge' eine natürliche Zahl ein.&amp;quot;);&lt;br /&gt;
   } Else {&lt;br /&gt;
     menge = Integer.Parse(options.Item(&amp;quot;menge&amp;quot;));&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Bunten Kasten erzeugen.&lt;br /&gt;
   Var meldungsbox As CHtmlSpan = generate_messagebox(checkergebnisse.erfolg);&lt;br /&gt;
   &lt;br /&gt;
   If(checkergebnisse.erfolg) {&lt;br /&gt;
     // Begrenze die Gutscheinmenge - damit Leute nicht jetzt unbegrenzt für einen Preis kaufen und später einlösen, wenns teurer ist.&lt;br /&gt;
     If(menge &amp;gt; maxGutscheinMenge) {&lt;br /&gt;
       menge = maxGutscheinMenge;&lt;br /&gt;
       checkergebnisse.Add(&amp;quot;Es können nur  &amp;quot; &amp;amp; CStr(maxGutscheinMenge) &amp;amp; &amp;quot; pro Gutschein gutgeschrieben werden. Menge angepasst.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Beamvorgang der Larne&lt;br /&gt;
     // Hierbei erstmal versuchen, die gewünschte menge herunterzubeamen, wenns nicht genug war, abrunden und den rest zurückbeamen.&lt;br /&gt;
     // dann soviel aufladen, wie bezahlt wurde.&lt;br /&gt;
     Var larneVorher As Double = MyShip.Larne;&lt;br /&gt;
     Var echte_menge As Integer = menge;&lt;br /&gt;
     MyShip.Aktion.TransferiereVonSchiff(GuestShip.ShipID, menge * kostenProEnergie, EBeamRessource.Larne);&lt;br /&gt;
     &lt;br /&gt;
     // Sicherstellen, dass genug Larne rübergekommen ist&lt;br /&gt;
     If(MyShip.Larne &amp;lt; larneVorher + menge * kostenProEnergie) {&lt;br /&gt;
       echte_menge = Math.Floor((MyShip.Larne - larneVorher) / kostenProEnergie); // angenommen 49 von 50 wurden gebeamt, gibt das 9 Ladungen Rest 4.&lt;br /&gt;
       &lt;br /&gt;
       // Rest zurückgeben&lt;br /&gt;
       MyShip.Aktion.TransferiereZuSchiff(GuestShip.ShipID, (MyShip.Larne - larneVorher) - echte_menge * kostenProEnergie, EBeamRessource.Larne);&lt;br /&gt;
       checkergebnisse.Add(&amp;quot;Es wurde nur &amp;quot; &amp;amp; CStr(echte_menge * kostenProEnergie) &amp;amp; &amp;quot; Larne gefunden. Menge auf &amp;quot; &amp;amp; CStr(echte_menge) &amp;amp; &amp;quot; korrigiert.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Gutschein-Erstellung&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Es wurden &amp;quot; &amp;amp; CStr(echte_menge * kostenProEnergie) &amp;amp; &amp;quot; Larne eingezogen.&amp;quot;);&lt;br /&gt;
     Var uuid As String = erzeuge_Gutschein(echte_menge);&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Ein Gutschein über &amp;quot; &amp;amp; Cstr(echte_menge) &amp;amp; &amp;quot; Reserveenergie ausgestellt:&amp;quot;);&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Code: &amp;quot; &amp;amp; uuid);&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Speichern Sie den Code gut ab!&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
     // -- Absetzen des Logs im DataNode&lt;br /&gt;
     save_log(echte_menge, &amp;quot;Gutschein erstellt: &amp;quot; &amp;amp; uuid);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Fenster wieder anzeigen.&lt;br /&gt;
   meldungsbox.Add(checkergebnisse.meldungen); // hier erst den Inhalt rein, damit der restliche Kram schon drumherum ist.&lt;br /&gt;
   view_hauptseite(meldungsbox);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function event_show_gutschein() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Event: Ein Gutschein soll eingelöst werden und das verbleibende Guthaben wird angezeigt.&lt;br /&gt;
    * Falls der Gutschein nicht verfügbar ist oder kein Guthaben mehr aufweist, wird eine Fehlermeldung angezeigt und auf die Hauptseite weitergeleitet.&lt;br /&gt;
    */&lt;br /&gt;
   Var checkergebnisse As New Checkresult();&lt;br /&gt;
   Var meldungsbox As CHtmlSpan;&lt;br /&gt;
   If(gutscheinspeicher.Items.Item(&amp;quot;gutscheine&amp;quot;).Items.ContainsKey(options.Item(&amp;quot;code&amp;quot;))) { // Checken, ob der Code überhaupt existiert.&lt;br /&gt;
     Var menge As Integer = Integer.Parse(gutscheinspeicher.Items.Item(&amp;quot;gutscheine&amp;quot;).Items.Item(options.Item(&amp;quot;code&amp;quot;)).Value);&lt;br /&gt;
     If(menge &amp;gt; 0) { // Ist noch Aufladung auf dem Gutschein vorhanden?&lt;br /&gt;
       view_gutschein(menge, options.Item(&amp;quot;code&amp;quot;), New CHtmlControl());&lt;br /&gt;
     } Else {&lt;br /&gt;
       // Fehlermeldung erzeugen und Hauptseite anzeigen&lt;br /&gt;
       checkergebnisse.Add(&amp;quot;Der Gutscheincode &amp;quot; &amp;amp; options.Item(&amp;quot;code&amp;quot;) &amp;amp; &amp;quot; hat kein Guthaben mehr.&amp;quot;);&lt;br /&gt;
       meldungsbox = generate_messagebox(checkergebnisse.erfolg);&lt;br /&gt;
       meldungsbox.Add(checkergebnisse.meldungen); // hier erst den Inhalt rein, damit der restliche Kram schon drumherum ist.&lt;br /&gt;
       view_hauptseite(meldungsbox);&lt;br /&gt;
     }&lt;br /&gt;
   } Else {&lt;br /&gt;
     // Fehlermeldung erzeugen und Hauptseite anzeigen&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Der Gutscheincode &amp;quot; &amp;amp; options.Item(&amp;quot;code&amp;quot;) &amp;amp; &amp;quot; existiert nicht.&amp;quot;);&lt;br /&gt;
     meldungsbox = generate_messagebox(checkergebnisse.erfolg);&lt;br /&gt;
     meldungsbox.Add(checkergebnisse.meldungen); // hier erst den Inhalt rein, damit der restliche Kram schon drumherum ist.&lt;br /&gt;
     view_hauptseite(meldungsbox);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function event_transfer_gutschein() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Löst einen Gutschein auch wirklich ein!&lt;br /&gt;
    */&lt;br /&gt;
   Var guthaben As Integer = Integer.Parse(gutscheinspeicher.Items.Item(&amp;quot;gutscheine&amp;quot;).Items.Item(options.Item(&amp;quot;code&amp;quot;)).Value);&lt;br /&gt;
   Var menge As Integer = 0;&lt;br /&gt;
   &lt;br /&gt;
   // Basischeck erstmal machen, ob man waren Beamen kann&lt;br /&gt;
   Var checkergebnisse As Checkresult = check_before_transaction();&lt;br /&gt;
   &lt;br /&gt;
   // Sicherstellen, dass nur Zahlen im Eingabefeld sind&lt;br /&gt;
   If(not is_integer(options.Item(&amp;quot;menge&amp;quot;))) {&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Bitte geben sie in das Feld 'Menge' eine natürliche Zahl ein.&amp;quot;);&lt;br /&gt;
   } Else {&lt;br /&gt;
     menge = Integer.Parse(options.Item(&amp;quot;menge&amp;quot;));&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Sicherstellen, dass genug Energie für die Eingabe vorhanden ist&lt;br /&gt;
   If(MyShip.Energie &amp;lt; menge) {&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Es steht nicht genügend Energie zur Verfügung. Es ist nur &amp;quot; &amp;amp; MyShip.Energie &amp;amp; &amp;quot; Energie vorhanden.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Bunten Kasten erzeugen.&lt;br /&gt;
   Var meldungsbox As CHtmlSpan = generate_messagebox(checkergebnisse.erfolg);&lt;br /&gt;
   &lt;br /&gt;
   If(checkergebnisse.erfolg) {&lt;br /&gt;
     Var echte_menge As Integer = menge;&lt;br /&gt;
     If(menge &amp;gt; guthaben) {&lt;br /&gt;
       echte_menge = guthaben;&lt;br /&gt;
       checkergebnisse.Add(&amp;quot;Es waren nur noch &amp;quot; &amp;amp; CStr(guthaben) &amp;amp; &amp;quot; Energieeinheiten gutgeschrieben. Lademenge auf &amp;quot; &amp;amp; CStr(guthaben) &amp;amp; &amp;quot; korrigiert.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Auflademenge abziehen&lt;br /&gt;
     guthaben = guthaben - echte_menge;&lt;br /&gt;
     gutscheinspeicher.Items.Item(&amp;quot;gutscheine&amp;quot;).Items.Item(options.Item(&amp;quot;code&amp;quot;)).Value = Cstr(guthaben);&lt;br /&gt;
     &lt;br /&gt;
     MyShip.Aktion.StationsReserveBatterieAufladen(GuestShip.ShipID, echte_menge);&lt;br /&gt;
     save_log(echte_menge, &amp;quot;Gutschein benutzt: &amp;quot; &amp;amp; options.Item(&amp;quot;code&amp;quot;)); // auch im Log abspeichern&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Es wurde versucht die Reservebatterie Ihres Schiffs um &amp;quot; &amp;amp; CStr(echte_menge) &amp;amp; &amp;quot; aufzuladen.&amp;quot;);&lt;br /&gt;
     checkergebnisse.Add(&amp;quot;Es verbleibt eine Gutschrift von &amp;quot; &amp;amp; CStr(guthaben) &amp;amp; &amp;quot; auf ihrem Gutschein mit Code &amp;quot; &amp;amp; options.Item(&amp;quot;code&amp;quot;) &amp;amp; &amp;quot;.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   meldungsbox.Add(checkergebnisse.meldungen); // hier erst den Inhalt rein, damit der restliche Kram schon drumherum ist.&lt;br /&gt;
   view_gutschein(guthaben, options.Item(&amp;quot;code&amp;quot;), meldungsbox);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function check_before_transaction() As Checkresult {&lt;br /&gt;
   /**&lt;br /&gt;
    * Check: Stellt sicher, dass wir in der Lage sind, vom Zielschiff Larne zu beamen.&lt;br /&gt;
    */&lt;br /&gt;
   &lt;br /&gt;
   Var ergebnis As New Checkresult();&lt;br /&gt;
   &lt;br /&gt;
   // -- Sicherstellen, dass der Kunde angedockt ist&lt;br /&gt;
   If(GuestShip.AngedocktAnID &amp;lt;&amp;gt; MyShip.AngedocktAnID) {&lt;br /&gt;
     ergebnis.Add(&amp;quot;Ihr Schiff muss an den VP angedockt sein.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // -- Sicherstellen, man selbst angedockt ist&lt;br /&gt;
   If(MyShip.Angedockt = False) {&lt;br /&gt;
     // Versuchen, das Schiff anzudocken&lt;br /&gt;
     Var schiff As CShip;&lt;br /&gt;
     For(Each schiff In MyShip.SRS) {&lt;br /&gt;
       If(schiff.Definition.IstRaumstation) {&lt;br /&gt;
         MyShip.Aktion.AndockenAn(schiff.ShipID);&lt;br /&gt;
         Exit For;&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
     &lt;br /&gt;
     // Sind wir jetzt angedockt?&lt;br /&gt;
     If(MyShip.Angedockt = False) {&lt;br /&gt;
       ergebnis.Add(&amp;quot;Das ServiceSchiff ist nicht angedockt - es tut uns leid. Bitte kontaktieren Sie den Besitzer.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // -- Sicherstellen, dass der Kunde auf Alarmstufe Grün ist&lt;br /&gt;
   If(GuestShip.Alarmstufe &amp;lt;&amp;gt; EAlarmStufe.Grün) {&lt;br /&gt;
     ergebnis.Add(&amp;quot;Ihr Schiff muss auf Alarmstufe Grün sein - sonst kann nicht gebeamt werden.&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Return ergebnis;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function erzeuge_Gutschein(menge As Integer) As String {&lt;br /&gt;
   /**&lt;br /&gt;
    * Erzeugt einen Gutschein und gibt den Code zurück.&lt;br /&gt;
    */&lt;br /&gt;
   Var zufall As New Random(Date.Now.DayOfYear * 86400 + Date.Now.Hour * 3600 + Date.Now.Minute * 60 + Date.Now.Second);&lt;br /&gt;
   Var chartabelle As String = &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;quot;;&lt;br /&gt;
   Var i As Integer;&lt;br /&gt;
   Var ergebnis As String = &amp;quot;&amp;quot;;&lt;br /&gt;
   For(i = 0 To 16) { // Jedes Zeichen &lt;br /&gt;
     ergebnis = ergebnis &amp;amp; chartabelle.Substring(zufall.Next(26), 1);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   // Abspeichern in einen DataNode&lt;br /&gt;
   gutscheinspeicher.Items.Item(&amp;quot;gutscheine&amp;quot;).Items.Add(ergebnis, menge);&lt;br /&gt;
   Return ergebnis;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function save_log(menge As Integer, anmerkung As String) {&lt;br /&gt;
   /**&lt;br /&gt;
    * Speichert einen Vorgang in dem Datanode ab&lt;br /&gt;
    */&lt;br /&gt;
   If( not speicher.Items.ContainsKey('autoid')) { // Erster Aufruf?&lt;br /&gt;
     speicher.Items.AddInteger('autoid', 0);&lt;br /&gt;
   }&lt;br /&gt;
   Var autoid As Integer = speicher.Items.Item('autoid').asInteger;&lt;br /&gt;
   speicher.Items.Item('logs').Items.Add(Cstr(autoid));&lt;br /&gt;
   speicher.Items.Item('logs').Items.Item(Cstr(autoid)).Items.Add(&amp;quot;position&amp;quot;, MyShip.MapPosition.X &amp;amp; &amp;quot;|&amp;quot; &amp;amp; MyShip.MapPosition.Y);&lt;br /&gt;
   speicher.Items.Item('logs').Items.Item(Cstr(autoid)).Items.Add(&amp;quot;spieler&amp;quot;, GuestUser.UserID);&lt;br /&gt;
   speicher.Items.Item('logs').Items.Item(Cstr(autoid)).Items.Add(&amp;quot;datum&amp;quot;, Date.Now);&lt;br /&gt;
   speicher.Items.Item('logs').Items.Item(Cstr(autoid)).Items.Add(&amp;quot;menge&amp;quot;, menge);&lt;br /&gt;
   If(anmerkung.Length &amp;gt; 0) { // Nur, wenns auch gebraucht wird, wegen Platzsparen.&lt;br /&gt;
     speicher.Items.Item('logs').Items.Item(Cstr(autoid)).Items.Add(&amp;quot;anmerkung&amp;quot;, anmerkung);&lt;br /&gt;
   }&lt;br /&gt;
   speicher.Items.Item('autoid').asInteger = autoid + 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /************************************&lt;br /&gt;
  ** Views - die Seitengenerierung  **&lt;br /&gt;
  ************************************/&lt;br /&gt;
 Function view_hauptseite(meldungen As CHtmlControl) {&lt;br /&gt;
   /**&lt;br /&gt;
    * Hauptseite, auf der die Benutzer ihre Aktionen durchführen können.&lt;br /&gt;
    * meldungen - Hier können Fehler oder Bestätigungen eingefügt werden.&lt;br /&gt;
    */&lt;br /&gt;
   Var table As New CTable();&lt;br /&gt;
   Response.Add(table);&lt;br /&gt;
   &lt;br /&gt;
   Var row As CTableRow;&lt;br /&gt;
   &lt;br /&gt;
   // -- 1. Block - Logo&lt;br /&gt;
   table.Add(part_header());&lt;br /&gt;
   &lt;br /&gt;
   // -- 2. Block - Aufladen - Gutschein&lt;br /&gt;
   row = table.AddRow(1);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;padding&amp;quot;, &amp;quot;3px&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Add(meldungen); // &amp;lt;-- Fehlermeldungen reinhauen&lt;br /&gt;
   &lt;br /&gt;
   // Reserveenergie laden&lt;br /&gt;
   row.Cells.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;img src='http://a.imagehost.org/0475/reserve_aufladen.png'&amp;gt;&amp;lt;br&amp;gt;Hier können Sie die &amp;lt;font color='#5fe75b'&amp;gt;&amp;lt;b&amp;gt;Reservebatterie&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; Ihres Schiffes gegen &amp;lt;font color='#99b8d6'&amp;gt;&amp;lt;b&amp;gt;Larne&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; aufladen lassen.&amp;lt;br&amp;gt;Es stehen derzeit &amp;lt;b&amp;gt;&amp;lt;font color='#5fe75b'&amp;gt;&amp;quot; &amp;amp; MyShip.Energie &amp;amp; &amp;quot; Energie&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt; zur Verfügung.&amp;lt;br&amp;gt;&amp;lt;font color='#5fe75b'&amp;gt;&amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; Einheit &amp;lt;font color='#5fe75b'&amp;gt;&amp;lt;b&amp;gt;Reserveenergie&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; kostet derzeit &amp;lt;font color='#99b8d6'&amp;gt;&amp;lt;b&amp;gt;&amp;quot; &amp;amp; CStr(kostenProEnergie) &amp;amp; &amp;quot; Larne&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;.&amp;lt;br&amp;gt; &amp;quot;));&lt;br /&gt;
   Var form As New CHtmlForm(New CScriptUrl());&lt;br /&gt;
   form.Add(New CHtmlInput(&amp;quot;transfer_energy&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   row.Cells.Item(0).Add(form);&lt;br /&gt;
   &lt;br /&gt;
   Var inputtabelle As New CTable();&lt;br /&gt;
   form.Add(inputtabelle);&lt;br /&gt;
   Var inputtabelle_row As CTableRow = inputtabelle.AddRow(3);&lt;br /&gt;
   &lt;br /&gt;
   inputtabelle_row.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;b&amp;gt;Menge wählen:&amp;lt;/b&amp;gt; &amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(0).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   Var mengeFeld As New CHtmlTextBox(&amp;quot;&amp;quot;, &amp;quot;menge&amp;quot;);&lt;br /&gt;
   mengeFeld.Size = 5;&lt;br /&gt;
   inputtabelle_row.Item(1).Add(mengeFeld);&lt;br /&gt;
   inputtabelle_row.Item(1).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   inputtabelle_row.Item(2).Add(New CHtmlSubmitButton(&amp;quot;Reserve aufladen!&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(2).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   // Gutscheine kaufen&lt;br /&gt;
   row.Cells.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;br&amp;gt;&amp;lt;img src='http://a.imagehost.org/0052/gutscheine_kaufen_einloesen.png'&amp;gt;&amp;lt;br&amp;gt;Hier können Sie Gutscheine über bis zu &amp;lt;font color='#5fe75b'&amp;gt;&amp;lt;b&amp;gt;&amp;quot; &amp;amp; CStr(maxGutscheinMenge) &amp;amp; &amp;quot; Reserveenergie&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; kaufen oder vorhandene Gutscheine einlösen.&amp;lt;br&amp;gt;Beim Kauf werden die &amp;lt;font color='#99b8d6'&amp;gt;&amp;lt;b&amp;gt;Larne&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; direkt von Ihrem Schiff abgebucht und ein Gutscheincode erstellt,&amp;lt;br&amp;gt;den Sie speichern sollten.&amp;lt;br&amp;gt;&amp;quot;));&lt;br /&gt;
   form = New CHtmlForm(New CScriptUrl());&lt;br /&gt;
   form.Add(New CHtmlInput(&amp;quot;kaufe_gutschein&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   row.Cells.Item(0).Add(form);&lt;br /&gt;
   &lt;br /&gt;
   inputtabelle = New CTable();&lt;br /&gt;
   form.Add(inputtabelle);&lt;br /&gt;
   inputtabelle_row = inputtabelle.AddRow(3);&lt;br /&gt;
   &lt;br /&gt;
   inputtabelle_row.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;b&amp;gt;Menge wählen:&amp;lt;/b&amp;gt; &amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(0).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   mengeFeld = New CHtmlTextBox(&amp;quot;&amp;quot;, &amp;quot;menge&amp;quot;);&lt;br /&gt;
   mengeFeld.Size = 5;&lt;br /&gt;
   inputtabelle_row.Item(1).Add(mengeFeld);&lt;br /&gt;
   inputtabelle_row.Item(1).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   inputtabelle_row.Item(2).Add(New CHtmlSubmitButton(&amp;quot;Gutschein kaufen!&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(2).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   // Gutscheine einlösen&lt;br /&gt;
   row.Cells.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;br&amp;gt;Um einen Gutschein einzulösen, einfach den Gutscheincode in das Feld eingeben,&amp;lt;br&amp;gt; dann wird das Guthaben angezeigt und der Gutschein kann benutzt werden.&amp;quot;));&lt;br /&gt;
   form = New CHtmlForm(New CScriptUrl());&lt;br /&gt;
   form.Add(New CHtmlInput(&amp;quot;show_gutschein&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   row.Cells.Item(0).Add(form);&lt;br /&gt;
   &lt;br /&gt;
   inputtabelle = New CTable();&lt;br /&gt;
   form.Add(inputtabelle);&lt;br /&gt;
   inputtabelle_row = inputtabelle.AddRow(3);&lt;br /&gt;
   &lt;br /&gt;
   inputtabelle_row.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;b&amp;gt;Gutscheincode:&amp;lt;/b&amp;gt; &amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(0).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   mengeFeld = New CHtmlTextBox(&amp;quot;&amp;quot;, &amp;quot;code&amp;quot;);&lt;br /&gt;
   mengeFeld.Size = 16;&lt;br /&gt;
   inputtabelle_row.Item(1).Add(mengeFeld);&lt;br /&gt;
   inputtabelle_row.Item(1).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   inputtabelle_row.Item(2).Add(New CHtmlSubmitButton(&amp;quot;Gutschein einlösen!&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(2).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   // -- 3. Block - Hinweise&lt;br /&gt;
   table.Add(part_footer());&lt;br /&gt;
   &lt;br /&gt;
   // Zeige den Link zu den aufgezeichneten Transfers, wenn ich es bin.&lt;br /&gt;
   If(GuestUser.UserID = MyShip.UserID) {&lt;br /&gt;
     Response.Add(New CHtmlBreak());&lt;br /&gt;
     Var logform As New CHtmlForm(New CScriptUrl());&lt;br /&gt;
     logform.Add(New CHtmlInput(&amp;quot;show_logs&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
     logform.Add(New CHtmlSubmitButton(&amp;quot;Logs anzeigen&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
     Response.Add(logform);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function view_gutschein(menge As Integer, code As String, meldungen As CHtmlControl) { // HIER WEITERMACHEN&lt;br /&gt;
   /**&lt;br /&gt;
    * Gutscheinmenge anzeigen, Auswahl der Menge erlauben und so...&lt;br /&gt;
    */&lt;br /&gt;
   Var table As New CTable();&lt;br /&gt;
   Response.Add(table);&lt;br /&gt;
   Var row As CTableRow;&lt;br /&gt;
   &lt;br /&gt;
   // -- 1. Block - Logo&lt;br /&gt;
   table.Add(part_header());&lt;br /&gt;
   &lt;br /&gt;
   // -- 2. Block - Gutschein-Informationen&lt;br /&gt;
   row = table.AddRow(1);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;padding&amp;quot;, &amp;quot;3px&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Add(meldungen); // &amp;lt;-- Fehlermeldungen reinhauen&lt;br /&gt;
   &lt;br /&gt;
   // Reserveenergie laden&lt;br /&gt;
   row.Cells.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;img src='http://a.imagehost.org/0097/gutschein_einloesen.png'&amp;gt;&amp;lt;br&amp;gt;Auf dem Gutschein mit dem Code &amp;lt;b&amp;gt;&amp;quot; &amp;amp; code &amp;amp; &amp;quot;&amp;lt;/b&amp;gt; sind noch &amp;lt;font color='#5fe75b'&amp;gt;&amp;lt;b&amp;gt;&amp;quot; &amp;amp; menge &amp;amp; &amp;quot; Energieeinheiten&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt; gutgeschrieben.&amp;lt;br&amp;gt;Geben Sie hier die Menge ein, die Sie von dem Gutschein einlösen möchten.&amp;quot;));&lt;br /&gt;
   Var form As New CHtmlForm(New CScriptUrl());&lt;br /&gt;
   form.Add(New CHtmlInput(&amp;quot;transfer_gutschein&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   form.Add(New CHtmlInput(code, &amp;quot;code&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   row.Cells.Item(0).Add(form);&lt;br /&gt;
   &lt;br /&gt;
   Var inputtabelle As New CTable();&lt;br /&gt;
   form.Add(inputtabelle);&lt;br /&gt;
   Var inputtabelle_row As CTableRow = inputtabelle.AddRow(3);&lt;br /&gt;
   &lt;br /&gt;
   inputtabelle_row.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;b&amp;gt;Menge wählen:&amp;lt;/b&amp;gt; &amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(0).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   Var mengeFeld As New CHtmlTextBox(&amp;quot;&amp;quot;, &amp;quot;menge&amp;quot;);&lt;br /&gt;
   mengeFeld.Size = 5;&lt;br /&gt;
   inputtabelle_row.Item(1).Add(mengeFeld);&lt;br /&gt;
   inputtabelle_row.Item(1).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   inputtabelle_row.Item(2).Add(New CHtmlSubmitButton(&amp;quot;Reserve aufladen!&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
   inputtabelle_row.Item(2).Style.Add(&amp;quot;border&amp;quot;, &amp;quot;0px&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   // Zurückknopf&lt;br /&gt;
   Response.Add(New CHtmlBreak());&lt;br /&gt;
   Var form2 As New CHtmlForm(New CScriptUrl());&lt;br /&gt;
   form2.Add(New CHtmlInput(&amp;quot;show_hauptseite&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   form2.Add(New CHtmlSubmitButton(&amp;quot;Zurück zur Hauptseite&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
   Response.Add(form2);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function view_logs() {&lt;br /&gt;
   /**&lt;br /&gt;
    * Zeigt eine Tabelle mit allen bisherigen Aufladungen&lt;br /&gt;
    */&lt;br /&gt;
   Var logs As CDataNodeList = speicher.Items.Item('logs').Items;&lt;br /&gt;
   &lt;br /&gt;
   Var table As New CTable();&lt;br /&gt;
   Var row As CTableRow;&lt;br /&gt;
   &lt;br /&gt;
   row = table.AddRow(5);&lt;br /&gt;
   row.Cells.Item(0).Add(&amp;quot;Ort&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).CssClass = &amp;quot;bb&amp;quot;;&lt;br /&gt;
   row.Cells.Item(1).Add(&amp;quot;Spieler&amp;quot;);&lt;br /&gt;
   row.Cells.Item(1).CssClass = &amp;quot;bb&amp;quot;;&lt;br /&gt;
   row.Cells.Item(2).Add(&amp;quot;Menge&amp;quot;);&lt;br /&gt;
   row.Cells.Item(2).CssClass = &amp;quot;bb&amp;quot;;&lt;br /&gt;
   row.Cells.Item(3).Add(&amp;quot;Zeitpunkt&amp;quot;);&lt;br /&gt;
   row.Cells.Item(3).CssClass = &amp;quot;bb&amp;quot;;&lt;br /&gt;
   row.Cells.Item(4).Add(&amp;quot;Anmerkung&amp;quot;);&lt;br /&gt;
   row.Cells.Item(4).CssClass = &amp;quot;bb&amp;quot;;&lt;br /&gt;
   &lt;br /&gt;
   Var i As Integer;&lt;br /&gt;
   Var log As CDataNode;&lt;br /&gt;
   Var benutzer As CUser;&lt;br /&gt;
   Var datum As Date;&lt;br /&gt;
   For(i = logs.Count - 1 To 0 Step - 1) {&lt;br /&gt;
     log = logs.Item(CStr(i));&lt;br /&gt;
     benutzer = New CUser(log.Item(&amp;quot;spieler&amp;quot;).Value);&lt;br /&gt;
     datum = log.Item(&amp;quot;datum&amp;quot;).Value;&lt;br /&gt;
     &lt;br /&gt;
     row = table.AddRow(5);&lt;br /&gt;
     row.Cells.Item(0).Add(log.Item(&amp;quot;position&amp;quot;).Value);&lt;br /&gt;
     row.Cells.Item(1).Add(benutzer.GetHtmlNameAndID());&lt;br /&gt;
     row.Cells.Item(2).Add(log.Item(&amp;quot;menge&amp;quot;).Value);&lt;br /&gt;
     row.Cells.Item(3).Add(datum.ToShortDateString() &amp;amp; &amp;quot; - &amp;quot; &amp;amp; datum.ToShortTimeString());&lt;br /&gt;
     If(log.Items.ContainsKey(&amp;quot;anmerkung&amp;quot;)) {&lt;br /&gt;
       row.Cells.Item(4).Add(log.Item(&amp;quot;anmerkung&amp;quot;).Value);&lt;br /&gt;
     } Else {&lt;br /&gt;
       row.Cells.Item(4).Add(&amp;quot;-&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Response.Add(table);&lt;br /&gt;
   Response.Add(New CHtmlBreak());&lt;br /&gt;
   Var form As New CHtmlForm(New CScriptUrl());&lt;br /&gt;
   form.Add(New CHtmlInput(&amp;quot;show_hauptseite&amp;quot;, &amp;quot;event&amp;quot;, EHtmlInputType.Hidden));&lt;br /&gt;
   form.Add(New CHtmlSubmitButton(&amp;quot;Zurück zur Hauptseite&amp;quot;, &amp;quot;submit&amp;quot;));&lt;br /&gt;
   Response.Add(form);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function part_header() As CTableRow {&lt;br /&gt;
   /**&lt;br /&gt;
    * Generiert die oberste Tabellenzeile&lt;br /&gt;
    */&lt;br /&gt;
   Var row As New CTableRow(1);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;padding&amp;quot;, &amp;quot;3px&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;);&lt;br /&gt;
   Var centeredLogo As New CHtmlSpan();&lt;br /&gt;
   centeredLogo.Style.Add(&amp;quot;display&amp;quot;, &amp;quot;block&amp;quot;);&lt;br /&gt;
   centeredLogo.Style.Add(&amp;quot;text-align&amp;quot;, &amp;quot;center&amp;quot;);&lt;br /&gt;
   centeredLogo.Add(New CHtmlImage(&amp;quot;http://user.mailtrek.net/de1-36705/home/battery_logo_0.png&amp;quot;));&lt;br /&gt;
   row.Cells.Item(0).Add(centeredLogo);&lt;br /&gt;
   &lt;br /&gt;
   Return row;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function part_footer() As CTableRow {&lt;br /&gt;
   /**&lt;br /&gt;
    * Generiert die Hinweise und Tipps.&lt;br /&gt;
    */&lt;br /&gt;
   Var row As New CTableRow(1);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;padding&amp;quot;, &amp;quot;3px&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Style.Add(&amp;quot;text-align&amp;quot;, &amp;quot;left&amp;quot;);&lt;br /&gt;
   row.Cells.Item(0).Add(prettyPrint(&amp;quot; &amp;lt;b&amp;gt;Hinweise:&amp;lt;/b&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Es wird nicht überprüft, ob die Menge, die gewünscht wird, auch wirklich auf das Zielschiff passen wird.&amp;lt;br&amp;gt;Dadurch kann es sein, dass zuviel Energie versucht wird aufzuladen.&amp;lt;br&amp;gt;Es wird empfohlen, die Menge daher sorgfältig zu wählen, da sonst unnötige Kosten entstehen können.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;Wenn die auf Ihrem Schiff vorhandenen Larne nicht für die gewünschte Aufladung ausreichen,&amp;lt;br&amp;gt;wird die Reserve nur teilweise aufgeladen.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;Es wird keinerlei Haftung für irgendwas, wodurch auch immer verursacht, übernommen.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;Weiterhin besteht keinerlei Anspruch auf die Verfügbarkeit dieses Dienstes.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;&amp;lt;font color='#ffaaaa'&amp;gt;Sollte durch die Nutzung des Dienstes das Serviceschiff beschossen werden,&amp;lt;br&amp;gt;hat der auslösende Kunde die Reparatur zu zahlen (4 Dura pro Hüllenpunkt).&amp;lt;/font&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&amp;lt;b&amp;gt;Tipp:&amp;lt;/b&amp;gt;&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Sollte nicht genug Energie bereitstehen, so können Sie selbst Energie zu diesem Schiff senden.&amp;lt;br&amp;gt;Diese steht dann auch zur Aufladung bereit.&amp;lt;br&amp;gt;Hauptenergie können Sie bei der &amp;lt;b&amp;gt;Föderation&amp;lt;/b&amp;gt; gegen internes Ansehen bekommen.&amp;lt;/li&amp;gt;&amp;lt;li&amp;gt;Larne zum Bezahlen können am VP gegen Waren erworben werden.&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt; &amp;quot;));&lt;br /&gt;
   &lt;br /&gt;
   Return row;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 Function generate_messagebox(erfolg As Boolean) As CHtmlControl {&lt;br /&gt;
   /**&lt;br /&gt;
    * Generiert eine Notifikationsbox, wenn irgendeine Aktion stattgefunden hat.&lt;br /&gt;
    */&lt;br /&gt;
   Var meldungsbox As New CHtmlSpan();&lt;br /&gt;
   Var icon As CHtmlImage();&lt;br /&gt;
   meldungsbox.Style.Add(&amp;quot;min-height&amp;quot;, &amp;quot;29px&amp;quot;);&lt;br /&gt;
   meldungsbox.Style.Add(&amp;quot;font-weight&amp;quot;, &amp;quot;bold&amp;quot;);&lt;br /&gt;
   meldungsbox.Style.Add(&amp;quot;padding&amp;quot;, &amp;quot;6px&amp;quot;);&lt;br /&gt;
   meldungsbox.Style.Add(&amp;quot;margin&amp;quot;, &amp;quot;7px&amp;quot;);&lt;br /&gt;
   meldungsbox.Style.Add(&amp;quot;background-color&amp;quot;, &amp;quot;#000000&amp;quot;);&lt;br /&gt;
   meldungsbox.Style.Add(&amp;quot;display&amp;quot;, &amp;quot;block&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   If(erfolg) {&lt;br /&gt;
     meldungsbox.Style.Add(&amp;quot;color&amp;quot;, &amp;quot;#00ff00&amp;quot;);&lt;br /&gt;
     meldungsbox.Style.Add(&amp;quot;border&amp;quot;, &amp;quot;1px solid #1f5e1f&amp;quot;);&lt;br /&gt;
     icon = New CHtmlImage(&amp;quot;http://user.mailtrek.net/de1-36705/home/checkmark.png&amp;quot;);&lt;br /&gt;
     icon.Style.Add(&amp;quot;float&amp;quot;, &amp;quot;right&amp;quot;);&lt;br /&gt;
     meldungsbox.Add(icon);&lt;br /&gt;
   } Else {&lt;br /&gt;
     meldungsbox.Style.Add(&amp;quot;color&amp;quot;, &amp;quot;#ff0000&amp;quot;);&lt;br /&gt;
     meldungsbox.Style.Add(&amp;quot;border&amp;quot;, &amp;quot;1px solid #903737&amp;quot;);&lt;br /&gt;
     icon = New CHtmlImage(&amp;quot;http://user.mailtrek.net/de1-36705/home/achtung.png&amp;quot;);&lt;br /&gt;
     icon.Style.Add(&amp;quot;float&amp;quot;, &amp;quot;right&amp;quot;);&lt;br /&gt;
     meldungsbox.Add(icon);&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   Return meldungsbox;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Faldrian</name></author>	</entry>

	</feed>