Browse Source

KSG Script Editor wird jetzt verwendet und KERelease (wurde vorher fälschlicherweise Ignoriert) hinzugefügt

Kolja Strohm 6 years ago
parent
commit
147f21bafb

+ 2 - 2
KSGClient/KSGClient.vcxproj

@@ -212,7 +212,7 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClCompile Include="NachLogin\Editor\Karte\Dateien\WAVDatei.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\KartenEditor.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.cpp" />
-    <ClCompile Include="NachLogin\Editor\Karte\Release\KERelease.cpp" />
+    <ClCompile Include="NachLogin\Editor\Karte\KarteRelease\KERelease.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\ShopSeite\KEShopSeite.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\ShopSeite\KESSEditor.cpp" />
     <ClCompile Include="NachLogin\Editor\Karte\ShopSeite\KESSVorschau.cpp" />
@@ -295,7 +295,7 @@ copy "..\x64\Debug\KSGClient.exe" "..\..\Fertig\Debug\x64\data\client\bin\game c
     <ClInclude Include="NachLogin\Editor\Karte\Dateien\WAVDatei.h" />
     <ClInclude Include="NachLogin\Editor\Karte\KartenEditor.h" />
     <ClInclude Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.h" />
-    <ClInclude Include="NachLogin\Editor\Karte\Release\KERelease.h" />
+    <ClInclude Include="NachLogin\Editor\Karte\KarteRelease\KERelease.h" />
     <ClInclude Include="NachLogin\Editor\Karte\ShopSeite\KEShopSeite.h" />
     <ClInclude Include="NachLogin\Editor\Karte\ShopSeite\KESSEditor.h" />
     <ClInclude Include="NachLogin\Editor\Karte\ShopSeite\KESSVorschau.h" />

+ 6 - 6
KSGClient/KSGClient.vcxproj.filters

@@ -168,9 +168,6 @@
     <ClCompile Include="NachLogin\Editor\Karte\Dateien\WAVDatei.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
-    <ClCompile Include="NachLogin\Editor\Karte\Release\KERelease.cpp">
-      <Filter>Quelldateien</Filter>
-    </ClCompile>
     <ClCompile Include="NachLogin\Editor\Karte\ShopSeite\KEShopSeite.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
@@ -258,6 +255,9 @@
     <ClCompile Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.cpp">
       <Filter>Quelldateien</Filter>
     </ClCompile>
+    <ClCompile Include="NachLogin\Editor\Karte\KarteRelease\KERelease.cpp">
+      <Filter>Quelldateien</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="Global\Variablen.h">
@@ -380,9 +380,6 @@
     <ClInclude Include="NachLogin\Editor\Karte\Dateien\WAVDatei.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
-    <ClInclude Include="NachLogin\Editor\Karte\Release\KERelease.h">
-      <Filter>Headerdateien</Filter>
-    </ClInclude>
     <ClInclude Include="NachLogin\Editor\Karte\ShopSeite\KEShopSeite.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
@@ -467,5 +464,8 @@
     <ClInclude Include="NachLogin\Editor\Karte\KaufHistorie\KaufHistorie.h">
       <Filter>Headerdateien</Filter>
     </ClInclude>
+    <ClInclude Include="NachLogin\Editor\Karte\KarteRelease\KERelease.h">
+      <Filter>Headerdateien</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>

+ 40 - 4
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBEditor.cpp

@@ -34,7 +34,41 @@ KEBEditor::KEBEditor( Schrift *zSchrift, KEBeschreibung *zKeb )
     sd->leseDaten();
     Schrift *ksgsS = sd->ladeSchrift();
     sd->release();
-    text = initTextFeld( 120, 10, 750, 510, ksgsS ? ksgsS : zSchrift, ( TextFeld::Style::TextGebiet | TextFeld::Style::HScroll ) & ~TextFeld::Style::Sichtbar, "" );
+    ksgs = dllDateien->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
+    if( ksgs )
+    {
+        KSGSGetEditor getKSGScriptEditor = (KSGSGetEditor)GetProcAddress( ksgs, KSGS_EDITOR_FUNKTION );
+        if( getKSGScriptEditor )
+        {
+            text = getKSGScriptEditor();
+            text->setSchriftZ( ( ksgsS ? ksgsS : zSchrift )->getThis() );
+            text->setSize( 750, 510 );
+            text->setPosition( 120, 10 );
+            text->setStyle( ZeichnungHintergrund::Style::HScroll | ZeichnungHintergrund::Style::VScroll | ZeichnungHintergrund::Style::Erlaubt | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund );
+            text->setLinienRahmenBreite( 1 );
+            text->setLinienRahmenFarbe( 0xFF00FF00 );
+            text->setHorizontalScrollPos( 0 );
+            text->setVertikalScrollPos( 0 );
+            text->setMausEreignis( _ret1ME );
+            text->setTastaturEreignis( _ret1TE );
+            text->setText( new Text( "" ) );
+        }
+        else
+        {
+            text = 0;
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                new Text( "Der Einstiegspunkt '" KSGS_EDITOR_FUNKTION "' in der DLL-Datei "
+                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+    }
+    else
+    {
+        text = 0;
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+            new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
+            new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+    }
     if( ksgsS )
         ksgsS->release();
     speichern = initKnopf( 10, 500, 100, 20, zSchrift, 0, "Speichern" );
@@ -68,6 +102,8 @@ KEBEditor::~KEBEditor()
     speichern->release();
     importieren->release();
     vorschau->release();
+    if( ksgs )
+        dllDateien->releaseDLL( "KSGScript.dll" );
 }
 
 // nicht constant
@@ -78,9 +114,9 @@ void KEBEditor::setSichtbar( bool s )
 
 void KEBEditor::setText( Text *zText )
 {
-    text->setText( zText->getText() );
+    text->setText( new Text( zText->getText() ) );
     bild->removeStyle( BildZ::Style::Sichtbar );
-    text->addStyle( TextFeld::Style::Sichtbar );
+    text->addStyle( ZeichnungHintergrund::Style::Sichtbar );
     importieren->removeStyle( Knopf::Style::Sichtbar );
     speichern->addStyle( Knopf::Style::Sichtbar );
     vorschau->addStyle( Knopf::Style::Sichtbar );
@@ -89,7 +125,7 @@ void KEBEditor::setText( Text *zText )
 void KEBEditor::setBild( Bild *zBild )
 {
     bild->setBildZ( zBild->getThis() );
-    text->removeStyle( TextFeld::Style::Sichtbar );
+    text->removeStyle( ZeichnungHintergrund::Style::Sichtbar );
     bild->addStyle( BildZ::Style::Sichtbar );
     speichern->removeStyle( Knopf::Style::Sichtbar );
     importieren->addStyle( Knopf::Style::Sichtbar );

+ 3 - 1
KSGClient/NachLogin/Editor/Karte/Beschreibung/KEBEditor.h

@@ -2,6 +2,7 @@
 
 #include <Knopf.h>
 #include <Bild.h>
+#include <KSGScript.h>
 
 using namespace Framework;
 class KEBeschreibung;
@@ -14,7 +15,8 @@ private:
     Knopf *mapBild;
     Knopf *ladenBild;
     BildZ *bild;
-    TextFeld *text;
+    KSGScript::KSGScriptEditor *text;
+    HINSTANCE ksgs;
     Knopf *speichern;
     Knopf *importieren;
     Knopf *vorschau;

+ 498 - 0
KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.cpp

@@ -0,0 +1,498 @@
+#include "KERelease.h"
+#include "../../../../Global/Initialisierung.h"
+#include "../../../../Global/Variablen.h"
+#include <Text.h>
+
+bool kEReleaseHerstellenME( void *p, void *obj, MausEreignis me )
+{
+    if( p )
+        return ( (KERelease*)p )->herstellenME( (Knopf*)obj, me );
+    return 1;
+}
+
+bool kEReleaseLöschenME( void *p, void *obj, MausEreignis me )
+{
+    if( p )
+        return ( (KERelease*)p )->removeME( (Knopf*)obj, me );
+    return 1;
+}
+
+bool kEReleaseVeröffME( void *p, void *obj, MausEreignis me )
+{
+    if( p )
+        return ( (KERelease*)p )->veröffentlichenME( me );
+    return 1;
+}
+
+bool kEReleaseAbbildErstellenME( void *p, void *obj, MausEreignis me )
+{
+    if( p )
+        return ( (KERelease*)p )->abbildErstellenME( me );
+    return 1;
+}
+
+bool kEReleaseShopÜbernehmenME( void *p, void *obj, MausEreignis me )
+{
+    if( p )
+        return ( (KERelease*)p )->shopÜbernehmenME( me );
+    return 1;
+}
+
+// Inhalt der KERelease Klasse aus KERelease.h
+// Konstruktor
+KERelease::KERelease( int karte, Schrift *zSchrift )
+    : Thread()
+{
+    schrift = zSchrift->getThis();
+    Text *kName = infoKlient->getKarteName( karte );
+    Text titel = kName ? kName->getText() : "<Karte>";
+    titel += " - Release";
+    if( kName )
+        kName->release();
+    fenster = initFenster( 10, 40, 880, 550, zSchrift, Fenster::Style::Sichtbar | Fenster::Style::Titel | Fenster::Style::TitelBuffered | Fenster::Style::Erlaubt | Fenster::Style::Rahmen, titel );
+    abbilder = initObjTabelle( 10, 10, 700, 510, zSchrift, OTSTYLE, { { "Name", 270, 270, 270 },
+    { "Datum", 200, 200, 200 }, { "Herstellen", 100, 100, 100 }, { "Löschen", 100, 100, 100 } }, 20 );
+    veröff = initKnopf( 720, 10, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Veröffentlichen" );
+    veröff->setMausEreignisParameter( this );
+    veröff->setMausEreignis( kEReleaseVeröffME );
+    initToolTip( veröff, "Veröffentlicht die momentane Version der Karte.\nDieser Vorgang kann einiege Minuten dauern.\nWährend dieses Vorgangs können keine Änderungen\nan der Karte vorgenommen werden.", schrift->getThis(), hauptScreen );
+    abbildName = initTextFeld( 720, 40, 150, 20, zSchrift, TextFeld::Style::TextFeld, "Abbild Name" );
+    initToolTip( abbildName, "Name eines neu zu erstellenen Kartenabbilds.", schrift->getThis(), hauptScreen );
+    abbildErstellen = initKnopf( 720, 70, 150, 20, zSchrift, Knopf::Style::Sichtbar, "Abbild Erstellen" );
+    abbildErstellen->setMausEreignisParameter( this );
+    abbildErstellen->setMausEreignis( kEReleaseAbbildErstellenME );
+    initToolTip( abbildErstellen, "Erstellt ein Abbild von der aktuellen Kartenversion,\ndas zu einem späteren Zeitpunkt wiederhergestellt werden kann.", schrift->getThis(), hauptScreen );
+    shopT = initTextFeld( 720, 350, 150, 20, zSchrift, TextFeld::Style::Text, "Im Shop zu kaufen:" );
+    testVersionErwerbbar = initAuswahlBox( 720, 375, 150, 20, zSchrift, ABSTYLE, { "Testversion ja", "Testversion nein" } );
+    vollVersionErwerbbar = initAuswahlBox( 720, 400, 150, 20, zSchrift, ABSTYLE, { "Vollversion ja","Vollversion nein" } );
+    preisT = initTextFeld( 720, 425, 150, 20, zSchrift, TextFeld::Style::Text, "Preis in Kupfer:" );
+    testVersionPreisT = initTextFeld( 720, 450, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Testversion:" );
+    vollVersionPreisT = initTextFeld( 720, 475, 100, 20, zSchrift, TextFeld::Style::Text | TextFeld::Style::VCenter, "Vollversion:" );
+    testVersionPreis = initTextFeld( 820, 450, 50, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" );
+    testVersionPreis->setTastaturEreignis( _nurNummernTE );
+    vollVersionPreis = initTextFeld( 820, 475, 50, 20, zSchrift, TextFeld::Style::TextFeld | TextFeld::Style::VCenter, "" );
+    vollVersionPreis->setTastaturEreignis( _nurNummernTE );
+    shopÜbernehmen = initKnopf( 745, 500, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Übernehmen" );
+    shopÜbernehmen->setMausEreignis( kEReleaseShopÜbernehmenME );
+    shopÜbernehmen->setMausEreignisParameter( this );
+    laden = (Animation2D*)ladeAnimation->dublizieren();
+    laden->setPosition( 425, 275 );
+    laden->setSichtbar( 0 );
+    fenster->addMember( abbilder );
+    fenster->addMember( veröff );
+    fenster->addMember( abbildName );
+    fenster->addMember( abbildErstellen );
+    fenster->addMember( shopT );
+    fenster->addMember( preisT );
+    fenster->addMember( testVersionPreisT );
+    fenster->addMember( vollVersionPreisT );
+    fenster->addMember( testVersionPreis );
+    fenster->addMember( vollVersionPreis );
+    fenster->addMember( shopÜbernehmen );
+    fenster->addMember( vollVersionErwerbbar );
+    fenster->addMember( testVersionErwerbbar );
+    animation = 0;
+    tickVal = 0;
+    sichtbar = 0;
+    rechts = 0;
+    xStart = 0;
+    breite = 0;
+    aktion = 0;
+    zeile = 0;
+    this->karte = karte;
+    alpha = 255;
+    ref = 1;
+}
+
+// Destruktor
+KERelease::~KERelease()
+{
+    if( run )
+    {
+        warteAufThread( 5000 );
+        if( run )
+            ende();
+    }
+    int anz = abbilder->getZeilenAnzahl();
+    for( int i = 0; i < anz; i++ )
+    {
+        ( (TextFeld*)abbilder->zZeichnung( 0, 0 ) )->release();
+        ( (TextFeld*)abbilder->zZeichnung( 1, 0 ) )->release();
+        if( i != 0 )
+        {
+            ( (Knopf*)abbilder->zZeichnung( 2, 0 ) )->release();
+            ( (Knopf*)abbilder->zZeichnung( 3, 0 ) )->release();
+        }
+        else
+        {
+            ( (TextFeld*)abbilder->zZeichnung( 2, 0 ) )->release();
+            ( (TextFeld*)abbilder->zZeichnung( 3, 0 ) )->release();
+        }
+        abbilder->removeZeile( 0 );
+    }
+    fenster->release();
+    abbilder->release();
+    veröff->release();
+    abbildName->release();
+    abbildErstellen->release();
+    laden->release();
+    schrift->release();
+    shopT->release();
+    testVersionErwerbbar->release();
+    vollVersionErwerbbar->release();
+    preisT->release();
+    testVersionPreisT->release();
+    vollVersionPreisT->release();
+    testVersionPreis->release();
+    vollVersionPreis->release();
+    shopÜbernehmen->release();
+}
+
+// nicht constant
+bool KERelease::herstellenME( Knopf *obj, MausEreignis &me )
+{
+    if( me.id == ME_RLinks )
+    {
+        int anz = abbilder->getZeilenAnzahl();
+        for( int i = 1; i < anz; i++ )
+        {
+            if( obj == (Knopf*)abbilder->zZeichnung( 2, i ) )
+            {
+                if( !run )
+                {
+                    zeile = i;
+                    aktion = 1;
+                    start();
+                }
+                break;
+            }
+        }
+    }
+    return 1;
+}
+
+bool KERelease::removeME( Knopf *obj, MausEreignis &me )
+{
+    if( me.id == ME_RLinks )
+    {
+        int anz = abbilder->getZeilenAnzahl();
+        for( int i = 1; i < anz; i++ )
+        {
+            if( obj == (Knopf*)abbilder->zZeichnung( 3, i ) )
+            {
+                if( !run )
+                {
+                    zeile = i;
+                    aktion = 2;
+                    start();
+                }
+                break;
+            }
+        }
+    }
+    return 1;
+}
+
+bool KERelease::veröffentlichenME( MausEreignis &me )
+{
+    if( me.id == ME_RLinks )
+    {
+        if( !run )
+        {
+            aktion = 3;
+            start();
+        }
+    }
+    return 1;
+}
+
+bool KERelease::abbildErstellenME( MausEreignis &me )
+{
+    if( me.id == ME_RLinks )
+    {
+        if( !run )
+        {
+            aktion = 4;
+            start();
+        }
+    }
+    return 1;
+}
+
+bool KERelease::shopÜbernehmenME( MausEreignis &me )
+{
+    if( me.id == ME_RLinks )
+    {
+        if( !run )
+        {
+            aktion = 5;
+            start();
+        }
+    }
+    return 1;
+}
+
+void KERelease::setSichtbar( bool s, bool vr )
+{
+    animation = 1;
+    sichtbar = s;
+    rechts = vr;
+    if( sichtbar )
+    {
+        if( vr )
+        {
+            xStart = 900;
+            breite = 0;
+        }
+        else
+        {
+            xStart = 0;
+            breite = 0;
+        }
+        if( !run )
+        {
+            aktion = 0;
+            start();
+        }
+    }
+}
+
+void KERelease::thread()
+{
+    laden->setSichtbar( 1 );
+    if( aktion == 1 && zeile )
+    {
+        if( !editorKlient->abbildHerstellen( abbilder->zZeilenName( zeile )->getText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        zeile = 0;
+        run = 0;
+        laden->setSichtbar( 0 );
+        return;
+    }
+    if( aktion == 2 && zeile )
+    {
+        if( !editorKlient->abbildLöschen( abbilder->zZeilenName( zeile )->getText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        zeile = 0;
+    }
+    if( aktion == 3 )
+    {
+        if( !editorKlient->veröffentlichen() )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        run = 0;
+        laden->setSichtbar( 0 );
+        return;
+    }
+    if( aktion == 4 )
+    {
+        if( !editorKlient->abbildErstellen( abbildName->zText()->getText() ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+    }
+    if( aktion == 0 )
+    {
+        int es = 0, tp = 0, vp = 0;
+        if( editorKlient->getShopDaten( es, tp, vp ) )
+        {
+            if( ( es | 1 ) == es )
+                testVersionErwerbbar->setAuswahl( 0 );
+            else
+                testVersionErwerbbar->setAuswahl( 1 );
+            if( ( es | 2 ) == es )
+                vollVersionErwerbbar->setAuswahl( 0 );
+            else
+                vollVersionErwerbbar->setAuswahl( 1 );
+            testVersionPreis->setText( Text() += tp );
+            vollVersionPreis->setText( Text() += vp );
+        }
+        else
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+    }
+    if( aktion == 5 )
+    {
+        int es = 0;
+        if( !testVersionErwerbbar->getAuswahl() )
+            es |= 1;
+        if( !vollVersionErwerbbar->getAuswahl() )
+            es |= 2;
+        int tp = (int)*testVersionPreis->zText();
+        int vp = (int)*vollVersionPreis->zText();
+        if( !editorKlient->setShopDaten( es, tp, vp ) )
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ), new Text( editorKlient->getLetzterFehler() ), new Text( "Ok" ) );
+        run = 0;
+        laden->setSichtbar( 0 );
+        return;
+    }
+    int anz = abbilder->getZeilenAnzahl();
+    for( int i = 1; i < anz; i++ )
+    {
+        hauptScreen->lock();
+        ( (TextFeld*)abbilder->zZeichnung( 0, 1 ) )->release();
+        ( (TextFeld*)abbilder->zZeichnung( 1, 1 ) )->release();
+        ( (Knopf*)abbilder->zZeichnung( 2, 1 ) )->release();
+        ( (Knopf*)abbilder->zZeichnung( 3, 1 ) )->release();
+        abbilder->removeZeile( 1 );
+        hauptScreen->unlock();
+    }
+    RCArray< Text > *name = new RCArray< Text >();
+    RCArray< Zeit > *datum = new RCArray< Zeit >();
+    anz = editorKlient->getAbbildListe( name, datum );
+    for( int i = 0; i < anz; i++ )
+    {
+        hauptScreen->lock();
+        abbilder->addZeile( name->z( i )->getText() );
+        abbilder->setZeichnungZ( 0, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text, name->z( i )->getText() ) );
+        Text *d = datum->z( i )->getZeit( "h:i:s d.m.y" );
+        abbilder->setZeichnungZ( 1, i + 1, initTextFeld( 0, 0, 0, 0, schrift, TextFeld::Style::Text, d->getText() ) );
+        d->release();
+        Knopf *k = initKnopf( 0, 0, 100, 20, schrift, Knopf::Style::Sichtbar, "Herstellen" );
+        initToolTip( k, "Stellt die abgespeicherte Version der Karte wiederher.", schrift->getThis(), hauptScreen );
+        k->setMausEreignisParameter( this );
+        k->setMausEreignis( kEReleaseHerstellenME );
+        abbilder->setZeichnungZ( 2, i + 1, k );
+        k = initKnopf( 0, 0, 100, 20, schrift, Knopf::Style::Sichtbar, "Löschen" );
+        initToolTip( k, "Löscht die abgespeicherte Version der Karte.", schrift->getThis(), hauptScreen );
+        k->setMausEreignisParameter( this );
+        k->setMausEreignis( kEReleaseLöschenME );
+        abbilder->setZeichnungZ( 3, i + 1, k );
+        hauptScreen->unlock();
+    }
+    name->release();
+    datum->release();
+    run = 0;
+    laden->setSichtbar( 0 );
+}
+
+void KERelease::doMausEreignis( MausEreignis &me )
+{
+    if( !run )
+        fenster->doMausEreignis( me );
+}
+
+void KERelease::doTastaturEreignis( TastaturEreignis &te )
+{
+    if( !run )
+        fenster->doTastaturEreignis( te );
+}
+
+bool KERelease::tick( double z )
+{
+    bool ret = laden->tick( z );
+    tickVal += z * 150;
+    int val = (int)tickVal;
+    tickVal -= val;
+    if( val )
+    {
+        if( run && alpha != 100 )
+        {
+            if( alpha - val < 100 )
+                alpha = 100;
+            else
+                alpha -= val;
+            ret = 1;
+        }
+        if( !run && alpha != 255 )
+        {
+            if( alpha + val > 255 )
+                alpha = 255;
+            else
+                alpha += val;
+            ret = 1;
+        }
+        val *= 3;
+        if( sichtbar )
+        {
+            if( xStart != 0 || breite != 900 )
+            {
+                if( rechts )
+                {
+                    if( xStart - val <= 0 )
+                    {
+                        xStart = 0;
+                        breite = 900;
+                        animation = 0;
+                    }
+                    else
+                    {
+                        xStart -= val;
+                        breite += val;
+                    }
+                }
+                else
+                {
+                    if( breite + val >= 900 )
+                    {
+                        breite = 900;
+                        animation = 0;
+                    }
+                    else
+                        breite += val;
+                }
+                ret = 1;
+            }
+        }
+        else
+        {
+            if( breite != 0 )
+            {
+                if( rechts )
+                {
+                    if( breite - val <= 0 )
+                    {
+                        breite = 0;
+                        animation = 0;
+                    }
+                    else
+                        breite -= val;
+                }
+                else
+                {
+                    if( breite - val <= 0 )
+                    {
+                        breite = 0;
+                        xStart = 900;
+                        animation = 0;
+                    }
+                    else
+                    {
+                        breite -= val;
+                        xStart += val;
+                    }
+                }
+                ret = 1;
+            }
+        }
+    }
+    return ret || fenster->tick( z );
+}
+
+void KERelease::render( Bild &zRObj )
+{
+    if( !zRObj.setDrawOptions( xStart, 0, breite, 600 ) )
+        return;
+    zRObj.setAlpha( alpha );
+    fenster->render( zRObj );
+    zRObj.releaseAlpha();
+    laden->render( zRObj );
+    zRObj.releaseDrawOptions();
+}
+
+// constant
+bool KERelease::istSichtbar() const
+{
+    return sichtbar || animation;
+}
+
+// Reference Counting
+KERelease *KERelease::getThis()
+{
+    ref++;
+    return this;
+}
+
+KERelease *KERelease::release()
+{
+    ref--;
+    if( !ref )
+        delete this;
+    return 0;
+}

+ 68 - 0
KSGClient/NachLogin/Editor/Karte/KarteRelease/KERelease.h

@@ -0,0 +1,68 @@
+#ifndef KERelease_H
+#define KERelease_H
+
+#include <Fenster.h>
+#include <Tabelle.h>
+#include <Thread.h>
+#include <Knopf.h>
+#include <Animation.h>
+#include <AuswahlBox.h>
+
+using namespace Framework;
+
+class KERelease : private Thread
+{
+private:
+	Fenster *fenster;
+	ObjTabelle *abbilder;
+    Knopf *veröff;
+    Knopf *abbildErstellen;
+    TextFeld *abbildName;
+	Animation2D *laden;
+    Schrift *schrift;
+    TextFeld *shopT;
+    AuswahlBox *testVersionErwerbbar;
+    AuswahlBox *vollVersionErwerbbar;
+    TextFeld *preisT;
+    TextFeld *testVersionPreisT;
+    TextFeld *vollVersionPreisT;
+    TextFeld *testVersionPreis;
+    TextFeld *vollVersionPreis;
+    Knopf *shopÜbernehmen;
+    int aktion;
+    int zeile;
+	bool animation;
+	double tickVal;
+	bool sichtbar;
+	bool rechts;
+	int xStart;
+	int breite;
+	int karte;
+	unsigned char alpha;
+	int ref;
+
+public:
+	// Konstruktor
+	KERelease( int karte, Schrift *zSchrift );
+	// Destruktor
+	~KERelease();
+	// nicht constant
+    bool herstellenME( Knopf *obj, MausEreignis &me );
+    bool removeME( Knopf *obj, MausEreignis &me );
+    bool veröffentlichenME( MausEreignis &me );
+    bool abbildErstellenME( MausEreignis &me );
+    bool shopÜbernehmenME( MausEreignis &me );
+	void setSichtbar( bool s, bool vr );
+	void thread() override;
+	void doMausEreignis( MausEreignis &me );
+    void doTastaturEreignis( TastaturEreignis &te );
+	bool tick( double z );
+	void render( Bild &zRObj );
+	// constant
+	bool istSichtbar() const;
+	// Reference Counting
+	KERelease *getThis();
+	KERelease *release();
+};
+
+#endif

+ 1 - 1
KSGClient/NachLogin/Editor/Karte/KartenEditor.h

@@ -2,7 +2,7 @@
 #define KartenEditor_H
 
 #include <EditorV.h>
-#include "Release/KERelease.h"
+#include "KarteRelease/KERelease.h"
 #include "ShopSeite/KEShopSeite.h"
 #include "Beschreibung\KEBeschreibung.h"
 #include "Teams/KETeams.h"

+ 37 - 1
KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSEditor.cpp

@@ -15,7 +15,41 @@ KESSTextSeite::KESSTextSeite( Schrift *zSchrift, Knopf *zNeueDatei, Knopf *zDate
     sd->leseDaten();
     Schrift *ksgsS = sd->ladeSchrift();
     sd->release();
-    text = initTextFeld( 220, 10, 540, 510, ksgsS ? ksgsS : zSchrift, TextFeld::Style::TextGebiet | TextFeld::Style::HScroll, "" );
+    ksgs = dllDateien->ladeDLL( "KSGScript.dll", "data/bin/KSGScript.dll" );
+    if( ksgs )
+    {
+        KSGSGetEditor getKSGScriptEditor = (KSGSGetEditor)GetProcAddress( ksgs, KSGS_EDITOR_FUNKTION );
+        if( getKSGScriptEditor )
+        {
+            text = getKSGScriptEditor();
+            text->setSchriftZ( ( ksgsS ? ksgsS : zSchrift )->getThis() );
+            text->setSize( 540, 510 );
+            text->setPosition( 220, 10 );
+            text->setStyle( ZeichnungHintergrund::Style::HScroll | ZeichnungHintergrund::Style::VScroll | ZeichnungHintergrund::Style::Sichtbar | ZeichnungHintergrund::Style::Erlaubt | ZeichnungHintergrund::Style::Rahmen | ZeichnungHintergrund::Style::Hintergrund );
+            text->setLinienRahmenBreite( 1 );
+            text->setLinienRahmenFarbe( 0xFF00FF00 );
+            text->setHorizontalScrollPos( 0 );
+            text->setVertikalScrollPos( 0 );
+            text->setMausEreignis( _ret1ME );
+            text->setTastaturEreignis( _ret1TE );
+            text->setText( new Text( "" ) );
+        }
+        else
+        {
+            text = 0;
+            nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+                new Text( "Der Einstiegspunkt '" KSGS_EDITOR_FUNKTION "' in der DLL-Datei "
+                    "'data/bin/KSGScript.dll' konnte nicht gefunden werden." ),
+                new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+        }
+    }
+    else
+    {
+        text = 0;
+        nachLogin->zNachrichtenListe()->addNachricht( new Text( "Fehler" ),
+            new Text( "Die DLL-Datei 'data/bin/KSGScript.dll' konnte nicht geladen werden." ),
+            new Text( "Ok" ), 0, NachrichtType::nachricht, 0 );
+    }
     if( ksgsS )
         ksgsS->release();
     speichern = initKnopf( 770, 10, 100, 20, zSchrift, Knopf::Style::Sichtbar, "Speichern" );
@@ -35,6 +69,8 @@ KESSTextSeite::~KESSTextSeite()
     speichern->release();
     dateiLöschen->release();
     neueDatei->release();
+    if( ksgs )
+        dllDateien->releaseDLL( "KSGScript.dll" );
 }
 
 // nicht constant

+ 3 - 1
KSGClient/NachLogin/Editor/Karte/ShopSeite/KESSEditor.h

@@ -7,6 +7,7 @@
 #include <DateiDialog.h>
 #include <Fenster.h>
 #include <AuswahlBox.h>
+#include <KSGScript.h>
 
 using namespace Framework;
 
@@ -15,7 +16,8 @@ class KEShopSeite;
 class KESSTextSeite
 {
 private:
-    TextFeld *text;
+    KSGScript::KSGScriptEditor *text;
+    HINSTANCE ksgs;
     Knopf *speichern;
     Knopf *dateiLöschen;
     Knopf *neueDatei;