Beitrag
von Malle » Donnerstag 6. November 2008, 11:24
So kompliziert ist es nicht worüber wir uns Gedanken machen, man muss nur trennen, was man im Moment braucht. Über was MTB, Orco und ich uns Gedanken gemacht haben sind Sonderfälle, die sowieso erst programmiert werden müssten, z.B. ein gemeinsames Flottenmanöver (Senat? so ungefähr wie in Patrizier, wo gemeinsame Flotten gebildet wurden zu Piratenjagd, hier halt eben für gemeinsamen Erfahrungsgewinn) und Rückzug im Kampf (gibts im Moment ja noch nicht, kann daher weggelassen werden). Die direkte schiffsbezogene EP-Berechnung pro Treffer würde den Rückzugsfall natürlich elegant lösen, sie ist sowieso am elegantesten von allen, erfordert aber Arbeit am Code, die man auch noch später beim Implementieren der Rückzugsmöglichkeit und Interaktionen im Kampf einbauen kann. Sogar die Flottenmanövergeschichte könnte man damit lösen indem man jedem Schiff eine ganzzahlige Variable zuordnet, in der einfach die Runden, in denen das Schiff auf Flottenmanöverbefehl steht, gezählt werden. Diese Variable beeinflusst dann direkt den EP-Gewinn. Das Schiff, das also schon vielen Manövern beigewohnt hat, bekommt nur noch ganz wenig Erfahrung dadurch. Man kann hier entweder einfach jeden regulär gemachten EP-Gewinn bei einem Treffer im Schaukampf durch n teilen oder noch ein wenig komplizierter diesen Dämpfungsfaktor reinbringen. Man soll eben durch Manöver sich nicht beliebig große Scheinschlachten mit großen EP-Gewinnen pro Runde gegenseitig zuschustern können. Eine globale Formel würde hier scheitern, weil man die Schiffe einer Flotte ja beliebig austauschen kann.
Sprich die globale Formel würde erstmal genügen, unten hab ich allerdings eine neue komplette Direktformel. Flotten werden ja auch immer mal wieder gemischt und auseinandergeworfen, so dass nicht jedes Schiff in einer Flotte identische Crewerfahrung immer hat zu den anderen.
Ob es bei Minorracekämpfen zu Problemen kommt ist da auch erstmal zweitrangig. Wichtig ist nur, dass die Formel von master oder mtb keinen Absturz verursacht.
Worauf wir uns bei der Direktformel einigen konnten/mussten war, dass Trefferzählen alleine nichts bringt, weil die Waffengattungen verschiedene Treffer/Schaden - Werte besitzen. D.h. der Schaden muss mit rein in jede Direktformel, die Treffer bleiben außen vor. Für das Ausweichen von Treffern des Gegners kann man entweder eine reine Zeitformel anwenden (eben die Zeit in der man den Beschüssen der Gegner ausgewichen und damit überlebt hat) oder man zählt eigenen Schaden plus verfehlte Gegnerschüsse mit dem virtuellen Schaden, den sie gemacht hätten, hätten sie getroffen.
Formel MTB/Malle: l/k * n/m * x/y * o und dann optional noch nach dem Kampf einmal ein Drüberlaufen über jedes Schiff und Addition jedes EP-Wertes mit z
mit
k = eigene Erfahrung zum Zeitpunkt des Treffers
l = Erfahrung des Gegners zum Zeitpunkt des Treffers
n = Gegnerische Gesamtflottenkampfkraft zu Beginn
m = Eigene Gesamtflottenkampfkraft zu Beginn
o = Array an Kampfmodifikatoren wie: Flagship, Schiffsklassen (Tonnage) Unterschied (MTB: würd ich rausnehmen, das ist im Schaden implizit mit drin), Kill (o.kill:={2 falls Gegnerhülle<=0, 1 sonst}, Spezialwaffeneinschlag (sobald ein Treffer eben wirklich die Schilde kollabieren lässt, da gibts es ja auch eine gewisse Wahrscheinlichkeit dafür, nicht jeder collapseshields-Torpedotreffer verursacht auch wirklich ein Schildkollabieren)
x = Schaden[Schild+Hülle oder nur Hülle, an gegnerischem Schiff]
y = Offensivkampfkraft[eigenes Schiff, nicht die gesamte Flotte!]
z = (((Momentaner Erfahrungswert)-(Erfahrungswert zu Beginn))*((Anzahl zerstörter nicht-gegnerischer Schiffe)+1)/(Gesamtzahl eigener Schiffe zu Beginn))
Gleiche Formel (aber nicht gleiches Ergebnis, da n und m vertauscht sind!) wird bei Treffern am eigenen Schiff angewandt und auch bei Fehltreffern, die virtuell berechnet werden, sofern dies möglich ist. Also jeder Fehlschuss und jeder Treffer am eigenen Schiff triggert diese Formel und schreibt Werte gut am Schiff.
Ob diese Formel sinnvolle Werte liefert müssen Beispielkämpfe zeigen. Ich hab jetzt nicht gecheckt, in welchem Größenbereich sich das ganze bewegt. Ein durch oder mal 100 ist evtl. noch nötig, aber es ist alles drin was gebraucht wird, globale Kräfteverhältnis und Def- und Offensivwerte der jeweiligen gerade im Zweikampf befindlichen Schiffe. z ist der Aftermath-Faktor, d.h. der ergibt sich durch Post-Battle-Analyse und ist höher, je weniger Schiffe noch am Leben sind. Im Prinzip kann dadurch der EP-Gewinn nochmal maximal verdoppelt werden. z ist allerdings nicht so wichtig, nur wenn man noch die eigenen Verluste=Anti-Kills mit drin haben will. Z.B. wenn ein einziges Schiff eine Riesenschlacht überlebt und dadurch natürlich zur Legende aufsteigen soll. Der Aufwand dafür mit dem Drübergehen zum Schluss und dem Erstellen eines temporären Arrays zu Beginn des Kampfes, indem die EP-Werte zu Beginn einmal abgespeichert werden, ist da denk ich ziemlich hoch verglichen mit dem, was es bringt.
Auf einen Dämpfungsfaktor, der mit der Höhe an erzielten EP-Gewinn im Verlaufe der Schlacht diese dämpft, hab ich verzichtet. Evtl. könnte sowas noch interessant sein, um die EP-Gewinne nicht nur durch die Hüllenschäden nach oben zu begrenzen, sondern pro Schiff jeweils EP-Gewinne niedriger ausfallen zu lassen, je mehr Erfahrung dieses Schiff in diesem Kampf bereits schon gewonnen hat. Das wär dann im Prinzip geteilt durch die Differenz von Anfangs-EP zu momentaner EP, das ganze mal 1000 und Min(1,Rest) drumherum. Damit würden EP-Gewinne über 1000 in einer Schlacht dazu führen, dass dieses Schiff für seine Treffer dann kaum noch was bekommt. Ob das so sinnvoll ist weiß ich nicht. Vll. sollte man mal 2500 machen, damit ein Schiff nicht in einer großen Schlacht schon alleine dadurch zur Superlegende wird, obwohl das ja auch gewollt sein kann wie im Falle oben, wenn eins als einziges überlebt. Dann würde es allerdings auch 5000 bekommen, da z dann 1 ist und der EP-Gewinn von maximal 2500 und ein paar Gequetschte verdoppelt wird.