Ich weiß gar nicht genau, was hier deine Frage oder dein Problem ist. Ohne genaue Frage keine genaue Antwort...
Aber ein paar generelle Tipps:
- Ins Vorlage-Verzeichnis gehört die Sitanleta-Datei "gav62mod.cfg". Dort stehen z.B. die Daten der Rassen drin und die Kapazität von Wagen... und schon erkennt Vorlage die und rechnet selber korrekt Kapazitäten und Gewichte mit. Wenn du also nur den Stand des Reports verwenden willst, genügt der Zugriff auf die bereits von Vorlage berechneten Werte. Dann kannst du dir also diese ganze Arbeit sparen.
- Die Pferde-Regel muss man ggf. in der Tat selber einbauen, die ist in Sitanleta einfacher als in diversen anderen Atlantis-Clones.
- Wagenzug bei Zyklopen sollte dagegen schon irgendwo im sitanleta.cfg eingebaut sein, hab die aber selber noch nie gespielt.
- Wagen ohne Pferde sind Lasten...
- $Silber*0.01 klappt nicht, da jeweils der linke Operand einer Rechnung den Typen definiert. Hier ist $Silber integer, dadurch wird also gerechnet $Silber*0 und Ergebnis ist immer 0. Richtig herum ist: 0.01*$Silber
- Lieber möglichst allgemein programmieren, sonst bleibt irgendwann der Kutscher wegen z.B. ein paar zusätzlichen Ölflaschen stehen.
- Das Maximalzuladegewicht hängt auch davon ab, ob der Kutscher zu Fuß reist (dann trägt er auch was) oder auf dem Wagen/Pferd sitzt (dann wiegt er was). Wobei aber nicht unbedingt jede Rasse auch reiten kann.
Hier mal eine Routine von mir, die ist zum Teil allerdings schon mehrere Jahre alt (aus meiner Eressea-Zeit, vor der Geburt von Sitanleta) und mit den damals verfügbaren Mitteln geschrieben. Ich glaub das war damals Vorlage 1.2 bis 1.4, als noch keine Kapazität von Vorlage ausgerechnet wurde. Kann sein, dass die heute so nicht mehr 100% funzt. Und sie greift auf Hilfsfunktionen zu, die aktuelle Zwischen-Werte aus meiner internen Datenstruktur liefern (z.B. "AnzahlURegDinge()"), weil ich mit diesen Routinen einen aktuellen Zwischenstand meines Zuges mitrechne. Das sollte aber im Prinzip lesbar und übertragbar sein.
Achja, anbei auch die beiden MaxPferde-Routinen.
;=======================================
; Berechnet die freie Kapazität beim zu Fuss reisen.
; Vorsicht: ggf. müssen Pferde abgegeben werden, falls das Reitentalent nicht ausreicht.
; Diese Routine geht davon aus, dass alle überschüssigen Pferde abgegeben werden, und alle
; anderen Pferde bleiben. Negatives Ergebnis => überladen.
;ToDo: Wagenzug/Zyklopen vernünftig einbauen, allgemeiner machen
#func MS_WievielKapazitaetFussFrei $Einheit
{
$Leute=$URegAnzahl[$Einheit]
$Typ=URasse($Einheit)
$MaxPferde=min($Leute*MaxPferdGehenStufe(unit[$Einheit].reiten.stufe),AnzahlURegDinge($Einheit,'Pferd'))
$Wagen=min(AnzahlURegDinge($Einheit,'Wagen'),$MaxPferde/2)
; ZusatzWagen für Trolle?
#if equals($Typ,'Trolle') {
$TrollWagen=min(AnzahlURegDinge($Einheit,'Wagen')-$Wagen,($Leute-$Wagen)/4)
$Wagen=$Wagen+$TrollWagen
}
; zunächst die übrigen Wagen als Last:
$RestWagen=AnzahlURegDinge($Einheit,'Wagen')-$Wagen
$RETURN=flt(-MS_WievielGewicht('Wagen'))*$RestWagen+MS_WievielKapazitaetFuss($Einheit)
; jetzt noch die normalen (tragbaren) Gegenstände:
$ii=1
$Sache=MS_WasPlatzDinge($ii)
#while $Sache!=0 {
#if $Sache!='Pferd'&$Sache!='Wagen' {
$RETURN=$RETURN-MS_WievielGewicht($Sache)*AnzahlURegDinge($Einheit,$Sache)
}
$ii=$ii+1
$Sache=MS_WasPlatzDinge($ii)
}
}
;=======================================
; Berechnet die Kapazität beim zu Fuss reisen.
; Vorsicht: ggf. müssen Pferde abgegeben werden, falls das Reitentalent nicht ausreicht.
; Diese Routine geht davon aus, dass alle überschüssigen Pferde abgegeben werden, und alle
; anderen Pferde bleiben.
;ToDo: Wagenzug/Zyklopen vernünftig einbauen, allgemeiner machen
#func MS_WievielKapazitaetFuss $Einheit
{
$Leute=$URegAnzahl[$Einheit]
$MaxPferde=min($Leute*MaxPferdGehenStufe(unit[$Einheit].reiten.stufe),AnzahlURegDinge($Einheit,'Pferd'))
$Wagen=min(AnzahlURegDinge($Einheit,'Wagen'),$MaxPferde/2)
$FuehrPferde=$MaxPferde-$Wagen*2
; ZusatzWagen für Trolle?
#if equals(unit[$Einheit].typ,'Trolle') {
$TrollWagen=min(AnzahlURegDinge($Einheit,'Wagen')-$Wagen,($Leute-$Wagen)/4)
$Wagen=$Wagen+$TrollWagen
$RETURN=MS_WievielKapazitaet(unit[$Einheit].typ)*($Leute-4*TrollWagen)+$FuehrPferde*(MS_WievielKapazitaet(Pferd))+$Wagen*(MS_WievielKapazitaet(Wagen))
} else {
$RETURN=MS_WievielKapazitaet(unit[$Einheit].typ)*unit[$Einheit].anzahl+$FuehrPferde*(MS_WievielKapazitaet(Pferd))+$Wagen*(MS_WievielKapazitaet(Wagen))
}
}
;=======================================
; Rückgabe: tragbares Gewicht GE
;Todo: Schiffe besser per .cfg
#func MS_WievielKapazitaet $Sache
{
#if equals($Sache,'Boot') { #return 50 }
#if equals($Sache,'Langboot') { #return 500 }
#if equals($Sache,'Karavelle') { #return 3000 }
#if equals($Sache,'Drachenschiff') { #return 1000 }
#if equals($Sache,'Trireme') { #return 2000 }
;Altlast 'person'->'Zwerge' etc., gelegentlich rauswerfen.
#if equals($Sache,'person') {
#debug 'fehleranfälliges MS_WievielKapazitaet - person'
#return RACES[$ReportRassePlural].kapazitaet
}
;Altlast 'troll'->'trolle', gelegentlich rauswerfen.
#if equals($Sache,'troll') {
#debug 'fehleranfälliges MS_WievielKapazitaet - troll'
#return RACES['Trolle'].kapazitaet
}
$RETURN=max(THINGS[$Sache].kapazitaet,RACES[$Sache].kapazitaet)
#if $RETURN<=0 { #debug 'unbekannte kapazität von '+$Sache }
}
#array $ListeMSWasPlatzDinge
$ListeMSWasPlatzDinge=['Silber','Juwel','Weihrauch','Balsam','Gewuerz','Myrrhe','Seide','Oel','Eisen','Holz','Stein','Pferd','Wagen','Katapult','Schwert','Speer','Armbrust','Bogen','Kettenhemd','Plattenpanzer','Runenschwert']
;=======================================
; Rückgabe: Gegenstandsbezeichnung zu Nummer. Für Schleifen.
; In dieser Liste nur "tragbare" Gegenstände mit Gewicht>0
; Fehler ist 0
;Todo: Liste vervollständigen
#func MS_WasPlatzDinge $Platz
{
#if $Platz<=$ListeMSWasPlatzDinge.size { #return $ListeMSWasPlatzDinge[$Platz-1] }
#return 0
}
;=======================================
; Rückgabe: Gewicht GE, bei Doppelung worst case.
#func MS_WievielGewicht $Sache
{
$RETURN=max(THINGS[$Sache].gewicht,RACES[$Sache].gewicht)
}
;=======================================
; Wieviele Pferde darf man mit der Reiten-Stufe zu Fuss mitführen?
#func MaxPferdGehenStufe $Stufe
{
#return max(1,2*$Stufe)
}
;=======================================
; Wieviele Pferde darf man mit der Reiten-Stufe reiten?
#func MaxPferdReitenStufe $Stufe
{
#return 2*$Stufe
}
|