Zeige Ergebnis 1 bis 4 von 4

Thema: Deffrechner

  1. #1
    Travianer Benutzerbild von D0nK3tsch3
    Registriert seit
    21.05.2012
    Beiträge
    381

    Frage Deffrechner

    Moin,

    Jahre lang war ich nur als Offer unterwegs, oftmals sind diese aktiver und werden so ausgefeilt, dass man auf viele kleinigkeiten achtet, wichtig dabei ist zB auch der Offrechner von Kiri...

    Jedoch spiele ich erstmals einen Deffer und mich würde interessieren ob jemand ein ähnöiches Tool hat, was kosten / bauzeit schnell und einfach darstellt ?

    wäre eine große Hilfe

    mfg Kretsche


    aktive Welten:
    w4 zzlapped

  2. #2
    Travianer Benutzerbild von Be2-e4
    Registriert seit
    25.02.2012
    Beiträge
    485

    Standard

    Guten Abend,

    ich habe gerade ein Programm zum Berechnen geschrieben (PHP), jedoch mit sehr zweckmäßigem User-Interface:
    http://binary92.lima-city.de/tt/deffrechner.php
    Falls jemand der Programmiersprache PHP mächtig ist und Spaß daran hat, User-Interfaces zu programmieren, stelle ich ihm im Folgendem den Code zum Programm zur Verfügung.

    Die DeffRechner-Klasse ist einfach zu benutzen:
    Erst definieren und dann die entsprechenden Variablen ändern, die Rechne-Methode aufrufen und anschließend die gewünschten Werte auslesen (Bereich grün markiert im Code).
    Datei 'deffrechner.php':
    Code:
    <?php
    	include("funkt.php");
    	
    	class DeffRechner
    	{
    		// Input
    		public $Volk = 1; # 1 = Römer, 2 = Germane = 
    		public $PferdeTraenke = 0;
    		
    		public $Kaserne = 0;
    		public $GrKaserne = 0;
    		public $KaserneRel = 0; # 0 = Nur Option 1 | 1 = Nur Option 2
    		
    		public $Stall = 0;
    		public $GrStall = 0;
    		public $StallRel = 0; # 0 = Nur Option 1 | 1 = Nur Option 2
    		
    		public $Speed = 1;
    		public $Time = 0; # In Sekunden
    		public $Artefakt = 1; # Artefaktfaktor
    		public $ArtefaktTime = 0; # Anteil der Zeit mit Artefakt (Wert zwischen 0 und 1)
    		
    		// Output
    		public $Unit = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
    		public $Def_Inf = 0;
    		public $Def_Kav = 0;
    		public $Ressources = array(0, 0, 0, 0);
    		
    		// Interne Variablen
    		private $Def_Inf_Rom = array("Legionär", "Prätorianer");
    		private $Def_Kav_Rom = array("Equites Caesaris");
    		
    		private $Def_Inf_Ger = array("Speerkämpfer");
    		private $Def_Kav_Ger = array("Paladin");
    		
    		private $Def_Inf_Gal = array("Phalanx");
    		private $Def_Kav_Gal = array("Druidenreiter", "Haeduaner");
    		
    		public function Rechne()
    		{
    			$data = new data;
    			
    			switch($this -> Volk)
    			{
    				case 1:
    				default:
    					$intVolk = "Rom";
    					break;
    				
    				case 2:
    					$intVolk = "Ger";
    					$this -> PferdeTraenke = 0;
    					break;
    				
    				case 3:
    					$intVolk = "Gal";
    					$this -> PferdeTraenke = 0;
    					break;
    			}
    			
    			$intInf = $this -> {"Def_Inf_" . ($intVolk)};
    			$intKav = $this -> {"Def_Kav_" . ($intVolk)};
    			
    			if($this -> Artefakt <= 0)
    				$this -> Artefakt = 1;
    			
    			$TimeWithArte = $this -> ArtefaktTime * $this -> Time;
    			$EffTimeWithArte = $TimeWithArte / $this -> Artefakt;
    			// Add Differenz
    			$this -> Time += $EffTimeWithArte - $TimeWithArte;
    			
    			$this -> Time *= $this -> Speed;
    			
    			$time_bk = pow(0.9, $this -> Kaserne - 1);
    			$time_bg = pow(0.9, $this -> GrKaserne - 1);
    			$time_sk = pow(0.9, $this -> Stall - 1);
    			$time_sg = pow(0.9, $this -> GrStall - 1);
    			
    			$timefor_b1 = (1 - $this -> KaserneRel) * $this -> Time;
    			$timefor_b2 = $this -> Time - $timefor_b1;
    			
    			$timefor_s1 = (1 - $this -> StallRel) * $this -> Time;
    			$timefor_s2 = $this -> Time - $timefor_s1;
    			
    			$b1_temp = $data -> getUnit($intInf[0]);
    			$timeeach_b1 = $b1_temp[17];
    			
    			$b2_temp = $data -> getUnit($intInf[1]);
    			$timeeach_b2 = $b2_temp[17];
    			
    			$s1_temp = $data -> getUnit($intKav[0]);
    			$timeeach_s1 = $s1_temp[17];
    			
    			$s2_temp = $data -> getUnit($intKav[1]);
    			$timeeach_s2 = $s2_temp[17];
    			
    			for($f = 0; $f <= 1; $f++)
    			{
    				$sLet = ($f == 0 ? "b" : "s");
    				$gLet = ($f == 0 ? "B" : "S");
    				$bName = ($f == 0 ? "Kaserne" : "Stall");
    				for($g = 0; $g <= 1; $g++)
    				{
    					$add = ($g == 0 ? "" : "Gr");
    					if($this -> {$add . $bName} > 0)
    					{
    						for($h = 1; $h <= 2; $h++)
    						{
    							${"temp" . $gLet . $h} = ${"timeeach_" . $sLet . $h} * pow(0.9, $this -> {$add . $bName} - 1);
    							
    							if(${"temp" . $gLet . $h} == 0)
    								continue;
    							
    							if($sLet == "s" && $this -> Volk == 1)
    								$effSpeed = 1 - ($this -> PferdeTraenke * 0.01);
    							else
    								$effSpeed = 1;
    							
    							if($effSpeed == 0)
    								$effSpeed = 1;
    							
    							$tempCnt = floor(1 / $effSpeed * ${"timefor_" . $sLet . $h} / ${"temp" . $gLet . $h});
    							$this -> Unit[(${$sLet . $h . "_temp"}[0] - 1) % 10] += $tempCnt;
    						
    							for($i = 0; $i <= 3; $i++)
    								$this -> Ressources[$i] += $tempCnt * ${$sLet . $h . "_temp"}[$i + 13];
    							
    							$this -> Def_Inf += $tempCnt * ${$sLet . $h . "_temp"}[3];
    							$this -> Def_Kav += $tempCnt * ${$sLet . $h . "_temp"}[4];
    						}
    					}
    				}
    			}
    		}
    	}
    	
    	// Bearbeite per Formular erhaltene Informationen ...
    	$DR = new DeffRechner;
    	$DR -> Time = $_POST["time"] * $_POST["timefaktor"];
    	$DR -> Volk = $_POST["volk"];
    	$DR -> Kaserne = $_POST["kaserne"];
    	$DR -> Stall = $_POST["stall"];
    	$DR -> GrKaserne = $_POST["grkaserne"];
    	$DR -> GrStall = $_POST["grstall"];
    	$DR -> KaserneRel = $_POST["kasernerel"];
    	$DR -> StallRel = $_POST["stallrel"];
    	$DR -> Artefakt = $_POST["artefakt"];
    	$DR -> ArtefaktTime = $_POST["artefakttime"] / 100;
    	$DR -> PferdeTraenke = $_POST["pferdetraenke"];
    	$DR -> Speed = $_POST["speed"];
    	$DR -> Rechne();
    	
    	$ausgabe .= "Einheiten: ";
    	for($i = 0; $i <= 9; $i++)
    		$ausgabe .= "<br />Einheitentyp $i: " . $DR -> Unit[$i];
    	$ausgabe .= "<br /><br />Kosten: ";
    	for($i = 0; $i <= 3; $i++)
    		$ausgabe .= "<br />Rohstofftyp $i: " . $DR -> Ressources[$i];
    	$ausgabe .= "<br /><br />KK gegen Inf: " . $DR -> Def_Inf;
    	$ausgabe .= "<br />KK gegen Kav: " . $DR -> Def_Kav;
    ?>
    <html>
    	<body>
    		<?php if(count($_POST) > 0) echo $ausgabe . "<hr>"; ?>
    		<form action="deffrechner.php" method="post">
    			<table>
    				<tr>
    					<td width="300px">
    						Volk:
    					</td>
    					<td>
    						<select name="volk" style="width: 100%;">
    							<option value="1" onclick="javascript: document.getElementById('info_inf').innerHTML = 'Verh&auml;ltnis von Legion&auml;r / Pr&auml;torianer'; document.getElementById('info_kav').innerHTML = '';">R&ouml;mer</option>
    							<option value="2" onclick="javascript: document.getElementById('info_inf').innerHTML = '';document.getElementById('info_kav').innerHTML = '';" selected>Germane</option>
    							<option value="3" onclick="javascript: document.getElementById('info_inf').innerHTML = '';document.getElementById('info_kav').innerHTML = 'Verh&auml;ltnis von Druidenreiter / Haeduaner';">Gallier</option>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Kaserne
    					</td>
    					<td>
    						<select name="kaserne" style="width: 100%;">
    							<? for($i = 0; $i <= 20; $i++) echo '<option value="' . $i . '">Stufe ' . $i . '</option>'; ?>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Gr. Kaserne
    					</td>
    					<td>
    						<select name="grkaserne" style="width: 100%;">
    							<? for($i = 0; $i <= 20; $i++) echo '<option value="' . $i . '">Stufe ' . $i . '</option>'; ?>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td id="info_inf">
    						
    					</td>
    					<td>
    						<input type="text" name="kasernerel" style="width: 100%;">
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Stall
    					</td>
    					<td>
    						<select name="stall" style="width: 100%;">
    							<? for($i = 0; $i <= 20; $i++) echo '<option value="' . $i . '">Stufe ' . $i . '</option>'; ?>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Gr. Stall
    					</td>
    					<td>
    						<select name="grstall" style="width: 100%;">
    							<? for($i = 0; $i <= 20; $i++) echo '<option value="' . $i . '">Stufe ' . $i . '</option>'; ?>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td id="info_kav">
    						
    					</td>
    					<td>
    						<input type="text" name="stallrel" style="width: 100%;">
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Pferdetr&auml;nke (nur R&ouml;mer)
    					</td>
    					<td>
    						<select name="pferdetraenke" style="width: 100%;">
    							<? for($i = 0; $i <= 20; $i++) echo '<option value="' . $i . '">Stufe ' . $i . '</option>'; ?>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Weltspeed
    					</td>
    					<td>
    						<select name="speed" style="width: 100%;">
    							<option value="1">1x Speed</option>
    							<option value="2">2x Speed</option>
    							<option value="3">3x Speed</option>
    							<option value="5">5x Speed</option>
    							<option value="8">8x Speed</option>
    							<option value="10">10x Speed</option>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Ausbildungsdauer
    					</td>
    					<td>
    						<input type="text" name="time">
    						<select name="timefaktor">
    							<option value="1">Sekunden</option>
    							<option value="60">Minuten</option>
    							<option value="3600">Stunden</option>
    							<option value="86400">Tage</option>
    							<option value="604800">Wochen</option>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Artefakt
    					</td>
    					<td>
    						<select name="artefakt" style="width: 100%;">
    							<option value="1">keins</option>
    							<option value="0.75">75%</option>
    							<option value="0.50">50%</option>
    						</select>
    					</td>
    				</tr>
    				<tr>
    					<td>
    						Artefaktzeit
    					</td>
    					<td>
    						<input type="text" name="artefakttime">%
    					</td>
    				</tr>
    			</table>
    			Verh&auml;tnis 0.00 bedeutet, die links stehende Einheit wird ausschlie&szlig;lich produziert; 1.00 bedeutet nur die rechts stehende; 0.25 w&uuml;rde bedeuten 75% der Zeit f&uuml;r links und 25% der Zeit f&uuml;r rechts, etc. <b>nur relevant wenn links neben dem Eingabefeld etwas steht</b>
    			<br />
    			<input value="Berechnen" type="submit">
    		</form>
    	</body>
    </html>
    Datei 'funkt.php':
    Code:
    <?php
    	class data
    	{
    		private $cache = array();
    		
    		public function getUnit($name)
    		{
    			if($this -> cache["file_tdata"])
    				$tdata = $this -> cache["file_tdata"];
    			else
    				$tdata = file("csv/troopdata_t4.csv");
    			
    			$this -> cache["file_tdata"] = $tdata;
    			
    			foreach($tdata as $line)
    			{
    				$ldata = explode(",", $line);
    				if(strtolower(str_replace("\"", "", $ldata[1])) == strtolower($name))
    					return explode(",", str_replace("\"", "", $line));
    			}
    		}
    	}
    ?>
    Datei 'csv/troopdata_t4.csv' kann ich wegen der 12.000 Zeichenbegrenzung nicht hier einfügen, allerdings kann man sie hier runterladen:
    http://binary92.lima-city.de/tt/csv/troopdata_t4.csv

    mfg,
    Be2-e4

  3. #3
    Travianer Benutzerbild von Figl
    Registriert seit
    24.06.2006
    Beiträge
    1.240

    Standard

    Also ich will nicht meckern..aber kann es sein, dass da ein paar Zeitangaben fehlerhaft sind? Zumindestens die für die 3fach Speed scheinen nicht richtig zu sein. Bei den Römern haut er mir zb. 30526 Präts in 84 Tagen bei Kaserne Stufe 20 raus. Das kommt aber nicht hin.
    Once a Luckmushroom, always a Luckmushroom.



  4. #4
    Travianer Benutzerbild von Be2-e4
    Registriert seit
    25.02.2012
    Beiträge
    485

    Standard

    Guten Abend,

    ich habe schlicht und ergreifend vergessen, den gesendeten Wert für die Weltgeschwindigkeit auch zu verarbeiten. Kann ja mal vorkommen, ich hatte vorhin auch nicht die Zeit, das ausgiebig zu testen.
    Ist jetzt behoben (Quellcode im Beitrag entsprechend angepasst) und sollte funktionieren.

    mfg,
    Be2-e4

Lesezeichen

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
  •