Re: Star Trek MOD V2.1 by lordgeorge1
Verfasst: Dienstag 9. August 2011, 01:07
Ja das mit der Crew-Erfahrung...
Darüber habe ich mir auch ziemlich den Kopf zerbrochen. Verursachter Schaden? Verursachter Schild- oder/und Hüllenschaden? Erfolgreicher Treffer? Überlebende Hüllenpunkte? Aufteilen auf alle überlebenden Schiffe? Jedes Schiff für sich? Usw...
Ich hatte damit zu kämpfen, daß die Programmierung der Raumschlachten auf mehrere Skriptdateien aufgeteilt ist (wahrscheinlich durch Fortschreiten der Programmierung in den verschiedenen Versionen bedingt). Und nicht in jeder konnte ich alle Daten, die ich gerne gehabt hätte, aufrufen. Torpedotreffer(wahrscheinlichkeit) z. B. in der torpedo.cpp bezieht sich auf Torpedo und Zielschiff - das feuernde Schiff wird hier nicht benötigt und die Crew-Erfahrung von selbigem konnte ich nicht ohne Errormeldung aufrufen.
Die meisten Daten waren in der CombatShip.cpp verfügbar (nicht aber z. B. ob ein Torpedo getroffen hat - die PerhapsImpact-Funktion ließ sich partout nicht fehlerfrei aufrufen).
Die ursprüngliche Idee Schaden = Exp. habe ich wieder verworfen, da sonst die Schlachtschiffe sehr schnell und die Aufklärer sehr langsam Erfahrung gewinnen - und zwar bei den Torpedoschäden sehr deutlich (Verhältnis teilweise über 1:10, mit Micro-Versionen sogar bis zu 1:100). Und erfolgreiche Treffer? Geht auch nicht, da z. B. die Anzahl der Beams zwischen 2 und über 40 (Sternenbasis) liegen.
Letztlich kam mir aber doch eine Idee: Eine Mischung aus beiden Ansätzen geht - mit den verfügbaren Funktionen in der ComabtShip.cpp.
Die Torpedos machen Schaden, und jedesmal wenn dies passiert gibt es einen festen Erfahrungsgewinn, nämlich 20 Punkte ("damage += FireTorpedo(pCT, i, targetKO, boni);" und dann "m_pShip->SetCrewExperiance(20);").
Bei den Beams sind die Schäden nicht so unterschiedlich, wie bei den Torpedos (max. 1:2,8), aber die mit höherem Schaden sind wesentlich seltener verbaut (vor allem die beiden Ausreißer mit 1:17-fachem Schaden, aber auch sehr langer Recharge time) und die mit niedrigem Schaden wesentlich häufiger auf einem Schiff. Hier konnte ich also mit modifiziertem Schaden arbeiten ("AddExp = 1 + int (beamDamage/5);" und dann "m_pShip->SetCrewExperiance(AddExp);").
Ergibt im ganzen bei (getesteten) Kämpfen Ein-Schiff-gegen-Ein-Schiff je nach Länge (und Zähigkeit) der Kämpfe zwischen 300 und 700 Punkten Erfahrungsgewinn (auch bei großen, starken Schiffen nur geringfügig mehr als bei kleinen Schiffen). Also habe ich die Erfahrungsstufen noch angepaßt und den "freien" Erfahrungsgewinn (Runde für Runde) etwas abgesenkt.
Ein erstes Spiel (ca. 200 Runden als Romulaner) sieht ganz gut aus - bei epischen Schlachten mit wenigen Überlebenden gibts dann schon mal 2 Stufen dazu (in Ausnahmefällen auch mal 3), ansonsten kleinere Erfahrungsgewinne.
Die Formeln sind einfach, aber erstsaunlicherweise tatsächlich brauchbar. Und sie funktionieren auch bei drei oder mehr am Kampf beteiligten Parteien einwandfrei! Schiffe, die bei großen Flotten in einem Kampf nicht zum Zuge kommen, weil der Gegner schon sehr früh besiegt wurde, bekommen natürlich auch kein Erfahrung. Und Außenposten/Sternenbasen, die - kaum gebaut - schon von der KI mit ordentlichen Flotten wieder zerstört werden, haben ein höhere Überlebenschance, da sie schneller an Erfahrung gewinnen (eine Basis gegen viele Schiffe...), wenn sie denn mal überleben...
Darüber habe ich mir auch ziemlich den Kopf zerbrochen. Verursachter Schaden? Verursachter Schild- oder/und Hüllenschaden? Erfolgreicher Treffer? Überlebende Hüllenpunkte? Aufteilen auf alle überlebenden Schiffe? Jedes Schiff für sich? Usw...
Ich hatte damit zu kämpfen, daß die Programmierung der Raumschlachten auf mehrere Skriptdateien aufgeteilt ist (wahrscheinlich durch Fortschreiten der Programmierung in den verschiedenen Versionen bedingt). Und nicht in jeder konnte ich alle Daten, die ich gerne gehabt hätte, aufrufen. Torpedotreffer(wahrscheinlichkeit) z. B. in der torpedo.cpp bezieht sich auf Torpedo und Zielschiff - das feuernde Schiff wird hier nicht benötigt und die Crew-Erfahrung von selbigem konnte ich nicht ohne Errormeldung aufrufen.
Die meisten Daten waren in der CombatShip.cpp verfügbar (nicht aber z. B. ob ein Torpedo getroffen hat - die PerhapsImpact-Funktion ließ sich partout nicht fehlerfrei aufrufen).
Die ursprüngliche Idee Schaden = Exp. habe ich wieder verworfen, da sonst die Schlachtschiffe sehr schnell und die Aufklärer sehr langsam Erfahrung gewinnen - und zwar bei den Torpedoschäden sehr deutlich (Verhältnis teilweise über 1:10, mit Micro-Versionen sogar bis zu 1:100). Und erfolgreiche Treffer? Geht auch nicht, da z. B. die Anzahl der Beams zwischen 2 und über 40 (Sternenbasis) liegen.
Letztlich kam mir aber doch eine Idee: Eine Mischung aus beiden Ansätzen geht - mit den verfügbaren Funktionen in der ComabtShip.cpp.
Die Torpedos machen Schaden, und jedesmal wenn dies passiert gibt es einen festen Erfahrungsgewinn, nämlich 20 Punkte ("damage += FireTorpedo(pCT, i, targetKO, boni);" und dann "m_pShip->SetCrewExperiance(20);").
Bei den Beams sind die Schäden nicht so unterschiedlich, wie bei den Torpedos (max. 1:2,8), aber die mit höherem Schaden sind wesentlich seltener verbaut (vor allem die beiden Ausreißer mit 1:17-fachem Schaden, aber auch sehr langer Recharge time) und die mit niedrigem Schaden wesentlich häufiger auf einem Schiff. Hier konnte ich also mit modifiziertem Schaden arbeiten ("AddExp = 1 + int (beamDamage/5);" und dann "m_pShip->SetCrewExperiance(AddExp);").
Ergibt im ganzen bei (getesteten) Kämpfen Ein-Schiff-gegen-Ein-Schiff je nach Länge (und Zähigkeit) der Kämpfe zwischen 300 und 700 Punkten Erfahrungsgewinn (auch bei großen, starken Schiffen nur geringfügig mehr als bei kleinen Schiffen). Also habe ich die Erfahrungsstufen noch angepaßt und den "freien" Erfahrungsgewinn (Runde für Runde) etwas abgesenkt.
Ein erstes Spiel (ca. 200 Runden als Romulaner) sieht ganz gut aus - bei epischen Schlachten mit wenigen Überlebenden gibts dann schon mal 2 Stufen dazu (in Ausnahmefällen auch mal 3), ansonsten kleinere Erfahrungsgewinne.
Die Formeln sind einfach, aber erstsaunlicherweise tatsächlich brauchbar. Und sie funktionieren auch bei drei oder mehr am Kampf beteiligten Parteien einwandfrei! Schiffe, die bei großen Flotten in einem Kampf nicht zum Zuge kommen, weil der Gegner schon sehr früh besiegt wurde, bekommen natürlich auch kein Erfahrung. Und Außenposten/Sternenbasen, die - kaum gebaut - schon von der KI mit ordentlichen Flotten wieder zerstört werden, haben ein höhere Überlebenschance, da sie schneller an Erfahrung gewinnen (eine Basis gegen viele Schiffe...), wenn sie denn mal überleben...