Willkommen Anonymous, es sind 44 User online. [ Anzeigen ]


[RPG]Board Neverwinter Nights NWN Scripting


[ Login ] [ Registrieren ] [ Abo ] [ Suche ] [ Profil ] [ Hilfe ]


Operatoren: zauriel, Avantenor
Moderatoren: NWN Moderat, Camael, IRQ
[ ANTWORTEN ]
[ FAQ ]
Autor Druckansicht   Thema: Abfrage der TP eines SC durch NSC
Seite: 1
Meruba2

Profil anschauen ]

erstellt am 20.10.2013 um 06:06 Uhr eMail schreiben      Zitatantwort        #1867628

Derzeit versuche ich mich an einem neuen Werk und hoffe ihr könnt mir weiterhelfen.
Hab wirklich das Forum hier durchforstet, aber nichts gefunden, dass mir weiterhelfen könnte.

Es handelt sich um einen NSC mit zwei Gesprächen im Gesprächsbaum.

1. Text ist ein normales Gespräch der nur durch anklicken auf den NSC erscheinen soll.

2. Text soll erscheinen, wenn ein Spieler die Map betritt und verwundet ist.

Bisher habe ich unter OnPerception ein Skript dafür eingefügt, damit der NSC auf den Spieler zugeht und ihn anspricht, denn genau das will ich ja für den 2. Text.

Skript:
void main()
{
object oNPC = GetObjectByTag("RederPimpinelle");
object oPC = GetLastPerceived();
if (
(GetIsPC(oPC)) &&
(IsInConversation(oNPC) == FALSE) &&
(GetObjectSeen(oPC,oNPC)) &&
(GetLocalInt(OBJECT_SELF, "igesprochen_21") != 1))
{
AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionMoveToObject(oPC));
AssignCommand(oNPC, ActionStartConversation(oPC));
SetLocalInt(OBJECT_SELF, "igesprochen_21", 1);
}
}

Das funktioniert, nur spult der NSC eben den 1. Text ab.
Ich hab mich durch diese ganzen Befehle geforstet und finde nicht wirklich etwas passendes um die TP eines Spielers abzufragen.
Hatte versucht über den Assistenten im Gesprächeditor etwas zu finden, aber dort kann man vom Volk, Geschlecht, Attribute usw. alles abfragen bis auf das was ich möchte grmpf.

Also dachte ich mir probier herum und benenn das was da ist einfach um.
Beim 2. Text habe ich unter Text erscheint wenn nun ein Skript reingesetzt und da häng ich schon fest. Beim Compilieren heißt es Variable ohne Typ definiert.

Skript
int StartingConditional()
{
if(!(GetAbilityScore(GetPCSpeaker(), ABILITY_HEALTHY) < 20))
return FALSE;

return TRUE;
}

Bin mir nicht mal sicher ob GetAbilityScore richtig ist.
Hatte das Skript über den Assistenen erstellt und dafür als Vorlage eine Attributsabfrage hergenommen. Ob das so klug war bezweifle ich allmählich. Umbenannt habe ich das zuvorige ABILITY_STRENGTH in ABILITY_HEALTHY
Evtl. hat jemand von euch so etwas schon einmal geskriptet oder sieht den Fehler?

Freue mich über eure Hilfe und im Voraus vielen Dank das ihr euch die Zeit nehmt

--
Isladora - Eine Insel im Schwertmeer
[Externer Link - Bitte einloggen oder registrieren]

Masqurin

Profil anschauen ]

Gilde/Clan:
Pessimist™

erstellt am 20.10.2013 um 10:58 Uhr       Zitatantwort        #1867634

GetAbilityScore ist nur für die Attribute des Charakters und hat nichts mit den Lebenspunkten zu tun. Woher du ABILITY_HEALTHY hast weiß ich auch nicht. Versuch es stattdessen mit GetCurrentHitPoints.
Meruba2

Profil anschauen ]

erstellt am 20.10.2013 um 11:43 Uhr eMail schreiben      Zitatantwort        #1867635

Danke für die schnelle Antwort
Hab mich wieder drangesetzt und nun heißt es unbekannter Compilierfehler.

Abilithy_healthy war eine Spontanidee von mir und weil es nicht in der Liste war, ahnte ich schon, das es nichts bringt. Nur irgendetwas musste ich ja versuchen.

Der neue Versuch bringt mich auch nicht weiter.
Denn das Skript damit das NSC auf den SC zuläuft hab ich ja schon unter OnPerception.

Hab nun trotzdem einen Teil davon genommen und mit GetCurrentHitPoints zusammengefügt.
Dachte mir, wenn schon gesucht werden soll nach den TP muss das Skript doch wissen wer soll suchen und bei wem, dann hinlaufen und Text sprechen.
Das sieht im Moment so aus...

int StartingConditional()
{
if(!(GetCurrentHitPoints(object oPC = GetLastPerceived)< 20))
//die Zeile wird als Fehler angezeigt object oNPC = GetObjectByTag("RederPimpinelle");
object oPC = GetLastPerceived();
if (
(GetIsPC(oPC)) &&
(IsInConversation(oNPC) == FALSE) &&
(GetObjectSeen(oPC,oNPC)) &&
(GetLocalInt(OBJECT_SELF, "igesprochen_21") != 1))

}




--
Isladora - Eine Insel im Schwertmeer
[Externer Link - Bitte einloggen oder registrieren]

MonsieurPomme@ZW

Profil anschauen ]

erstellt am 20.10.2013 um 18:41 Uhr   Homepage besuchen    Zitatantwort        #1867656

ich würde den text, der kommen soll, wenn oPC verwundet ist, an erster Stelle im Gesprächsmenü setzen. Die werden imho top down durchgearbeitet. ist oPC nicht verwundet, kommt text 2 für die nicht verwundeten.

dazu dann einfach ein Skript für die erste Dialogoption und dann sollte das eig klappen

int StartingConditional() 
{ 
if((GetCurrentHitPoints(GetPCSpeaker())< 20))return TRUE; 
 
else return FALSE; 
 
}


is jetzt n schuss ins blaue, aber ich hätts vermutl. als erstes so versucht, vll hilfts
Meruba2

Profil anschauen ]

erstellt am 20.10.2013 um 19:17 Uhr eMail schreiben      Zitatantwort        #1867658

Vielen Dank das funktioniert *freut sich doll*
Wer verletzt die Map betritt bekommt den passenden Text zugewiesen.
Wer unverletzt die Map betritt bekommt den zweiten Text.

Auch wenn Nwn1 kaum noch bespielt wird (leider!) bin ich heilfroh das es Leute wie euch gibt die uns kleinen Überrest unterstützt mit Rat. Vielen vielen Dank dafür!!!

--
Isladora - Eine Insel im Schwertmeer
[Externer Link - Bitte einloggen oder registrieren]

Meruba2

Profil anschauen ]

erstellt am 20.10.2013 um 20:43 Uhr eMail schreiben      Zitatantwort        #1867661

Der zweite Teil dazu ist das nun ein weiterer NSC ins Spiel kommt.

NSC 1 funktioniert nun und schickt den verwundeten SC an den richtigen Platz.
Nun kommt NSC 2 an und soll den verwundeten SC heilen, aber nicht einfach mal eben mit Vollheilung, das finde ich langweilig.

Der SC soll sich auf den Operationstisch setzen. Dazu habe ich den Tisch versenkt und mit einem unsichtbaren Stuhl versehen.
Sobald der SC nun auf dem Tisch sitzt, soll NSC 2 auf ihn zukommen und ein Gespräch mit ihm beginnen.

Dafür habe ich verschiedene Texte vorgesehen.
1. Text für jene die leicht verletzt sind
2. Text für jene die ab schwer verletzt sind
3. Text für jene die ab dem Tode nahe sind
4. Text für jene Scherzkekse die sich unverletzt auf den OP-Tisch setzen.

Das Skript für die Abfrage ob der SC sitzt hab ich noch nicht. Da bin ich noch etwas planlos. Vermute das muss ich unter OnPerception mitreinpacken, wo der NSC auch begreifen soll, dass da ein SC ist und er mit ihm sprechen soll.

Für die Heilung das Skript würde ich unter Text erscheint wenn.... reinpacken. Dabei habe ich jetzt noch nicht darauf geachtet, für welche Textzeile es sein soll. Erst mal muss das Gerüst funktionieren und genau da klebe ich mal wieder auf der Stelle.

Bisher habe ich....

//::///////////////////////////////////////////////
//:: FileName heil_andorn01
//:://////////////////////////////////////////////
int StartingConditional()
{
effect eRegenerate;
effect eRegenerateVis = EffectVisualEffect(VFX_IMP_HEALING_S);
int nCurrentHitPoints, nMaxHitPoints, nVisualEffectId;
oUser = GetLastUsedBy()(1); //hier fehlt ein Semikolon und ich hab rumprobiert, find es aber nicht
nMaxHitPoints = GetMaxHitPoints(oUser); // max. HP
nCurrentHitPoints = GetCurrentHitPoints(oUser); // akt. HP
if ( nCurrentHitPoints < nMaxHitPoints )
{
eHeal = EffectHeal(nMaxHitPoints - nCurrentHitPoints);
ApplyEffectToObject( DURATION_TYPE_INSTANT, eRegenerate, oUser );
ApplyEffectToObject( DURATION_TYPE_INSTANT, eRegenerateVis, oUser );
}
}

Ich fand ein eHeal aber kein eRegenerate, war mal wieder mutig und hab das einfach so geschrieben ^^ Frei nach dem Motto probieren geht über studieren.

Womit ich auch noch nicht konform bin ist, wie ermittle ich denn den Wert für die verschiedenen Veretzungsgrade?
Jeder SC hat andere TP durch Klassebedingungen und Lvl.
Da bin ich absolut planlos



--
Isladora - Eine Insel im Schwertmeer
[Externer Link - Bitte einloggen oder registrieren]

Masqurin

Profil anschauen ]

Gilde/Clan:
Pessimist™

erstellt am 21.10.2013 um 00:31 Uhr       Zitatantwort        #1867680

Du hast im Prinzip keine Ahnung was du da tust, habe ich recht? Ist nicht böse gemeint, aber du schmeißt aus Zufall irgendwelche Variablen zusammen in der Hoffnung das es funktioniert wie es scheint.


int StartingConditional() 
{ 
effect eRegenerate; 
effect eRegenerateVis = EffectVisualEffect(VFX_IMP_HEALING_S); 
int nCurrentHitPoints, nMaxHitPoints, nVisualEffectId; 
oUser = GetLastUsedBy()(1); //hier fehlt ein Semikolon und ich hab rumprobiert, find es aber nicht 
nMaxHitPoints = GetMaxHitPoints(oUser); // max. HP 
nCurrentHitPoints = GetCurrentHitPoints(oUser); // akt. HP 
if ( nCurrentHitPoints < nMaxHitPoints ) 
{ 
eHeal = EffectHeal(nMaxHitPoints - nCurrentHitPoints); 
ApplyEffectToObject( DURATION_TYPE_INSTANT, eRegenerate, oUser ); 
ApplyEffectToObject( DURATION_TYPE_INSTANT, eRegenerateVis, oUser ); 
} 
}


Das ist dein Code. Zeile 3 hat eine Variable ohne Wert, was im Prinzip nur Sinn macht wenn man sie später in einer Schleife verwendet. Zeile 5 ist exakt das selbe, inklusive einer Variable die du innerhalb des Skripts überhaupt nicht benutzt. Zeile 6 kann nicht funktionieren weil du aus irgendeinem Grund ein (1) hinten dran hast (woher kommt das überhaupt?), einmal davon abgesehen das die genutzte Funktion innerhalb eines Dialogs gar keinen Sinn ergibt und ohne Variablentyp ist.
Zeile 11 dann ist die Heilung, ohne aber den Variablentyp festzulegen. Was durchaus funktionieren würde, hättest du die Variable von Zeile 3 benutzt die bisher leer ist. Und weil diese leer ist tut sie in Zeile 12, wo sie benutzt wird, auch nichts.


// Wir benutzen void main weil wir keinen Rueckgabewert brauchen. Das Skript soll ja etwas machen 
// und nicht irgendwas fuer den Dialog ueberpruefen 
void main() 
{ 
    // object         - Das ist der Typ der Variable der benutzt wird, in diesem Fall ein Objekt 
    // oPlayer        - Das ist der Name der Variable, die kannst man benennen wie man lustig ist 
    //                  aber sinnvollerweise mit einem Namen der Sinn macht 
    // GetPCSpeaker() - Dies ist eine Funktion des Spiels und gibt ein Objekt aus, in diesem Fall 
    //                  der aktuell im Dialog befindliche Spieler 
    object oPlayer = GetPCSpeaker(); 
 
    // int                      - Wieder ein Typ einer Variable, diesmal eine Zahl ohne Kommastelle 
    // iMaxHP                   - Wieder der Name der Variable, benannt das wir wissen was sie beinhaltet 
    // GetMaxHitPoints(oPlayer) - Wie GetPCSpeaker eine Funktion des Spiels, welches einen Zahlwert (int) 
    //                            ausgibt. Die Funktion braucht ein Objekt welches es ausliest, was in 
    //                            diesem Fall der Spieler ist wie zuvor in Zeile 8 festgelegt. 
    int iMaxHP = GetMaxHitPoints(oPlayer); 
 
    // int                          - Das selbe wie zuvor, weil wir wieder eine Zahlenvariable benutzen 
    // iCurrentHP                   - Wir benutzen einen anderen Namen, passend fuer diese Variable 
    // GetCurrentHitPoints(oPlayer) - Eine Funktion wie in Zeile 15, nur mit anderer Ausgabe. 
    int iCurrentHP = GetCurrentHitPoints(oPlayer); 
 
    // effect             - Ein neuer Variablentyp speziell fuer alle Arten von Effekten (Visuell, magische Effekte, etc) 
    // eVisual            - Benennen wir es Sinnvoll damit wir wissen was es tut 
    // EffectVisualEffect - Die Funktion welche den Effekt 'erschafft', in diesem Fall einen visuellen. 
    // VFX_IMP_HEALING_S  - Eine feste Variable die das Spiel mitliefert und im Prinzip nur eine Nummer (int) darstellt. 
    //                      Grund fr die Verwendung dieser festen Variablen gegenueber einer Zahl ist das man es 
    //                      besser lesen kann was das Skript tut. Es ist mehr Text und das Skript wirkt groesser, aber 
    //                      das hat keinerlei Einfluss auf die Performance oder so. 
    effect eVisual = EffectVisualEffect(VFX_IMP_HEALING_S); 
 
    // if - Ueberprueft einen Zustand. Bedeutet es wird ein Vergleich angestellt. boolean lass ich mal weg, aber in 
    //      diesem Fall ist es iCurrentHP < iMaxHP. Der Pfeil dazwischen ist ein kleiner als. Der linke Wert muss 
    //      kleiner sein als der rechte, dann wird das innerhalb Klammern ({) ausgefuert. Und nur dann! 
    //      Ausserdem verwenden wir natuerlich die Variaben die wir zuvor in Zeile 15 und 20 festgelegt hatten, diese 
    //      sind nun kein Name mehr sondern schlichtweg Zahlen. 
    if(iCurrentHP < iMaxHP) 
 
    // Klammer auf, notwendig bei mehr als einer Zeile innerhalb eines if 
    { 
 
        // effect     - Einmal mehr der Variablentyp, Heilung ist ein magischer Effekt, wie oben angemerkt. 
        // eHeal      - Benennung unserer Variable 
        // EffectHeal - Wieder eine Funktion des Spiels welche einen neuen Effekt erschafft. Der darin festgelegte 
        //              Zahlenwert bestimmt die Anzahl an Heilung. Sinnvollerweise, wie auch benutzt, wird das einfach 
        //              ausgerechnet indem wir die die aktuellen Trefferpunkte vom Maximalwert abziehen. 
        effect eHeal = EffectHeal(iMaxHP - iCurrentHP); 
 
        // Nun die Funktion welche die zwei Effekte die wir erschaffen haben auf ein Objekt uebertraegt. Da es keinen 
        // Rueckgabewert gibt braucht man auch nichts definieren sondern kann es so in einer Zeile benutzen. Die 
        // Funktion will drei Werte (und kann einen vierten haben, die aber Standardmaessig ein Dezimalwert von 0.0f ist) 
        // DURATION_TYPE_INSTANT ist wieder eine feste Variable vom Spiel, stellt einen Zahlenwert da damit die Funktion 
        // weiss was es tun soll. Daher kannst du eben auch nie irgendwo dir irgendwelche festen Variablen ausdenken, da 
        // denen keinerlei Werte zugewiesen sind. Computer sind dumm und tun nur genau das was sie sollen. 
        // eHeal und eVisual sind unsere vorher festgelegten Effekte und oPlayer das vorher festgelegte Objekte. 
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPlayer); 
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer); 
 
    // Klammer zu, damit das Skript weitergehen kann nach der Ueberpruefung des if 
    } 
 
// Und noch mal zu, damit das Skript beendet ist 
}


Möglich das es nicht in deinem direkten Kontekt geht, weiß ich ja nicht wie es bei dir genau ausschaut. Aber das Skript gehört nun nicht mehr unter 'Text erscheint, wenn...' sondern unter 'Erfolgte Aktion'. Aber ich hoffe das hilft dir beim Verständnis was da überhaupt passiert und es wäre sinnvoll sich die Grundlagen anzueignen. Nur mal als vergleich, das folgende ist das exakt gleiche wie oben, nur ohne Variablen:

void main() { if(GetCurrentHitPoints(GetPCSpeaker()) < GetMaxHitPoints(GetPCSpeaker())) { ApplyEffectToObject(0, EffectHeal(GetMaxHitPoints(GetPCSpeaker()) - GetCurrentHitPoints(GetPCSpeaker())), GetPCSpeaker()); ApplyEffectToObject(0, EffectVisualEffect(69), GetPCSpeaker()); } }


Das kann dann nur niemand mehr richtig lesen. Wer erinnert sich schon daran das VFX_IMP_HEALING_S eigentlich 69 bedeutet? Merke also: Funktionen funktionieren nur wenn sie auch tatsächlich existieren (ob vom Spiel geliefert oder selber eine erstellt). Das selbe bei Variablen und allem anderen.
MonsieurPomme@ZW

Profil anschauen ]

erstellt am 21.10.2013 um 00:56 Uhr   Homepage besuchen    Zitatantwort        #1867681

das is mal n service. und um die uhrzeit^^
Masqurin

Profil anschauen ]

Gilde/Clan:
Pessimist™

erstellt am 21.10.2013 um 08:18 Uhr       Zitatantwort        #1867687

Musste um die Uhrzeit eh gerade auf etwas warten.
Meruba2

Profil anschauen ]

erstellt am 21.10.2013 um 10:10 Uhr eMail schreiben      Zitatantwort        #1867689

Stimmt ich habe keine Ahung und dazu stehe ich auch. Trotzdem versuch ich es. Suche nach einem ähnlichen Skript quer durchs Netz und pflück mich da durch.

Gestehe auch das ich mich seit Jahren um das Thema Skript selbst schreiben gedrückt habe, nur ohne Hilfe komme ich in so vielem nicht weiter. Ideen habe ich viele, nur Umsetzen kann ich IG dann nur mit tricksen.

Ich wünschte mir wirklich jemanden der von Skripten Ahnung hat und auf den man sich verlassen kann. Schnell ist jemand da und sagt Skripts sind kein Problem für ihn, doch wenn man etwas braucht wartet man entweder Monate und ja das ist so, oder man bekommt es nur durch hartnäckiges Betteln.

Trotz allem danke für deine Mühe und ich werd mir das heute Abend richtig ansehen. Beim ersten Lesen hab ich zwar verstanden was du erklärst, nur denk ich an die Umsetzung krieg ich leichte Panik. Skripte und ich sind keine großen Freunde.

--
Isladora - Eine Insel im Schwertmeer
[Externer Link - Bitte einloggen oder registrieren]

Masqurin

Profil anschauen ]

Gilde/Clan:
Pessimist™

erstellt am 21.10.2013 um 11:25 Uhr       Zitatantwort        #1867699

Hängt vielleicht damit zusammen was du an Skripts möchtest. Generell wäre ich auch kaum bereit die einfachsten Sachen immer wieder in anderer Abwandlung für jemand anderen zu schreiben. Insbesondere wenn man einfach nur das Skript will und sonst nichts. Das ist halt vielleicht das Problem, auch früher, schon gewesen: Da kommen die Leute ins Forum und fragen nach irgendwas komplett fix und fertig ohne aber es selber lernen zu wollen.

Würden die Leute nur nach dem Lösungsweg fragen (weil man einfach auf dem Schlauch steht) gäb es garantiert mehr Antworten von unterschiedlichen Leuten die trotz all der Jahre bei einer Sonne im Forum hier reinschauen. Zumal das Skripten gar nicht so schwer ist, man muss nur die Logik dahinter verstehen. Ist natürlich leichter gesagt als getan, insbesondere da all das übrige beim Modulbauen visuell schneller Erfolg mit sich bringt. Da es Camael's Tutorial nicht mehr gibt weiß ich allerdings gerade auch nicht wo es sonst noch ein brauchbares Tutorial gäbe. Falls du aber generell nur kleinigkeiten nutzen willst... ich glaube es gab doch mal irgendwo so ein kleines Werkzeug um kleine Skripts zu erstellen? Hab aber keine Ahnung wie es hieß, eventuell kennt wer anders den Namen davon.
Falls es mehr werden soll, gar Cutszenen, neue Zauber etc. wäre aber wirklich anzuraten die Grundlagen zu lernen und zu verstehen. Es hat sogar einen Synergieeffekt mit praktisch jeder anderen Skript- und Programmiersprache. Es muss also nicht einmal verschwendetes Wissen sein das man sich aneignet und später richtig programmieren will. Aber wie gesagt, aller Anfang ist bekanntlich schwer. Daher auch meine Erklärungen im letzten Beitrag, einfach weil du bemüht wirktest (was mehr ist als von vielen anderen hier im Forum erlebt die mit ihren Anfragen ankamen).
MonsieurPomme@ZW

Profil anschauen ]

erstellt am 21.10.2013 um 18:09 Uhr   Homepage besuchen    Zitatantwort        #1867764

schätze du meinst Lilac Souls Script Generator. damit hab ich damals angefangen, um kleine Sachen zu machen und hab mir das ergebnis angeschaut. Durch viel Trial&Error, nwnlexicon und rpg board gings dann irgendwann von allein. zumindest so halbwegs^^

Link dazu: [Externer Link - Bitte einloggen oder registrieren]
Uranochos

Profil anschauen ]

erstellt am 21.10.2013 um 22:42 Uhr eMail schreiben  Homepage besuchen    Zitatantwort        #1867793

@MonsieurPomme:

so halbwegs


na, na,...

@Meruba2:

Glaub mir, wenn ich Dir aus eigener Erfahrung sage: Es hilft alles nichts, Du musst selbst scripten lernen.

Warum?

Nur, wenn Du weisst, was NWN von Haus aus kann und was Du mit Scripten erreichen kannst, um das gewünschte Ergebnis zu bekommen, kannst Du Deine Ideen umsetzen.

Es gibt mehrere Wege, das Scripten zu lernen.
Der Script-Editor zB gibt Dir auch immer wieder Hinweise zur Syntax.
Schau Dir Scripte anderer Modulbauer an und versuche, sie zu verstehen.
Für die Grundlagen sehr hilfreich ist Celowins Tutorium (englisch). Ich finde jetzt irgendwie dorthin keine Links mehr, aber wenn Du willst, schicke ich es Dir per Mail.

[Edit:] Ah, hier: [Externer Link - Bitte einloggen oder registrieren]

Gruß,
Uranochos


--
"Geschichten von der Alten Erde"
Deutschsprachiges Rollenspielprojekt.
-Work-in-progress-
[Externer Link - Bitte einloggen oder registrieren]
alte-erde.spdns.org

Meruba2

Profil anschauen ]

erstellt am 22.10.2013 um 17:58 Uhr eMail schreiben      Zitatantwort        #1867864

Vielen Dank für all eure Mühe und Hilfe.
Englisch *blinzel* gut das ich noch ein Wörterbuch besitze ^^. Ich werd es mir zu Herzen nehmen und mich daran machen.


--
Isladora - Eine Insel im Schwertmeer
[Externer Link - Bitte einloggen oder registrieren]

Seite: 1
Druckansicht   Thema: Abfrage der TP eines SC durch NSC  
[ ANTWORTEN ]

[RPG]Board Neverwinter Nights NWN Scripting

  


[RPG]Board 1.94.01 wird betrieben von Sebastian "Pandur" Olle.
Programmiert von Andreas "Monti" Bytzek.
Nutzungsbedingungen / Impressum / Haftungsausschluss / Datenschutz
Scriptlaufzeit: 0.23 sec