* @author Suunnittelu ja toteutus ildis / Doom @ s1.travian.fi * @author Kamalan koodin fiksailu pikkumyy / Sisu @ s2.travian.fi * @author K&R käyttöön fiksailu Bera / Kauniit @ s3.travian.fi * @author T&J käyttöön muokkaus Lehter / K&R-ghost @ s3.travian.fi * @author HL käyttöön muokkaus qjnrid / Hirttämättömät Lurjukset @ s1.travian.co.ee * @author com T3.3 käyttöön muokkaus qjnrid * **/ date_default_timezone_set('Europe/Helsinki'); setlocale(LC_ALL, "FI_fi"); ?> Market parser COM T3.3

Market parser

Copy-paste the complete market view here using Firefox:



Design and implementation by ildis / Doom @ s1.travian.fi
Fixing of terrible code by pikkumyy / Sisu @ s2.travian.fi
Fixing for K&R usage by Bera / Kauniit @ s3.travian.fi
Modification for T&J usage by Lehter / K&R-ghost @ s3.travian.fi
Modification for HL usage by qjnrid / Hirttämättömät Lurjukset @ s1.travian.co.ee
Modification for COM T3.3 by qjnrid

\r\n \r\n"; exit(); } $myymyy = ""; $myymyy2 = ""; $myymyyh = ""; $myymyyb = ""; $myymyyc = ""; $myymyyv = ""; $myymyy3 = ""; $myymyylb = ""; define('M_PLAYER', 1); define('M_VILLAGE', 2); define('M_ETA', 3); define('M_ARRIVAL', 4); define('M_WOOD', 5); define('M_CLAY', 6); define('M_IRON', 7); define('M_CROP', 8); define('M_COLOR', 9); define('M_SHORTED', 10); define('M_SHORT_TIME', 11); define('M_LVL_CROP', 12); define('M_HIT_DATE', 13); define('M_C_NOMORE', 53); define('M_C_SOME', 52); define('M_C_MORE', 51); define('M_C_MUCH_MORE', 50); //$weekdays = array("", "Maanantaina", "Tiistaina", "Keskiviikkona", "Torstaina", "Perjantaina", "Lauantaina", "Sunnuntaina"); $weekdays = array("", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"); function trim_array($a) { if (is_array($a)) { foreach($a as $key => $val) { if (is_array($val)) { $a[$key] = trim_array($val); } else { $a[$key] = trim($val); } } } return $a; } // Incoming shipments //$regex7 = '/[\s]*(.*)[\s]+Kuljetus kylästä[\s]+(.*)[\s\n]+Saapuminen[\s]+(.*)[\s]+kello[\s]+(.*)[\s\n]+Resurssit[\s]+Puu([0-9]*)[\s\|]+Savi([0-9]*)[\s\|]+Rauta([0-9]*)[\s\|]+Vilja([0-9]*)[\s\n]+/i'; //$regex7 = '/[\s]*(.*)[\s]+Transport külast[\s]+(.*)[\s\n]+Saabuvad[\s]+(.*)[\s]+kell[\s]+(.*)[\s\n]+Varud[\s]+([0-9]*)[\s\|]+([0-9]*)[\s\|]+([0-9]*)[\s\|]+([0-9]*)[\s\n]+/i'; //$regex7 = '/[\s]*(.*)[\s]+Transport külast[\s]+(.*)[\s\n]+Saabuvad[\s]+(.*) t.[\s]+kell[\s]+(.*)[\s\n]+Varud[\s]+Puit([0-9]*)[\s\|]+Savi([0-9]*)[\s\|]+Raud([0-9]*)[\s\|]+Vili([0-9]*)[\s\n]+/i'; // EE t3.1: //$regex7 = '/[\s]*(.*)[\s]+Transport külast[\s]+(.*)[\s\n]+Saabuvad[\s]+(.*) t.[\s]+kell[\s]+(.*)[\s\n]+Varud[\s]+Puit([0-9]*)[\s\|]+Savi([0-9]*)[\s\|]+Raud([0-9]*)[\s\|]+Vili([0-9]*)[\s\n]+/i'; // com T3.3: $regex7 = '/[\s]*(.*)[\s]+Transport from[\s]+(.*)[\s\n]+Arrival[\s]+(.*) h[\s]+at[\s]+(.*)[\s\n]+Resources[\s]+Lumber([0-9]*)[\s\|]+Clay([0-9]*)[\s\|]+Iron([0-9]*)[\s\|]+Crop([0-9]*)[\s\n]+/i'; preg_match_all($regex7, $_POST['market'], $match); $match = trim_array($match); // Consumption //$regex = '/Viljankulutus[\s]*([0-9]+)\/([0-9]+)/i'; //$regex = '/Vilja tarbimine[\s]*([0-9]+)\/([0-9]+)/i'; // EE t3.1: // com T3.3: $regex = '/Crop consumption[\s]*([0-9]+)\/([0-9]+)/i'; preg_match($regex, $_POST['market'], $consumption); $hour_consumption = $consumption[1] - $consumption[2]; $sec_consumption = $hour_consumption / 60 / 60; $day_consumption = $hour_consumption * 24; // WH levels //$regex = '/\[Puit\][\s]+([0-9]+)\/([0-9]+)[\s]+[Savi\][\s]+([0-9]+)\/([0-9]+)[\s]+[Raud\][\s]+([0-9]+)\/([0-9]+)[\s]+[Vili\][\s]+([\-0-9]+)\/([0-9]+)/i'; //$regex = '/Puit[\s]+([0-9]+)\/([0-9]+)[\s]+Savi[\s]+([0-9]+)\/([0-9]+)[\s]+Raud[\s]+([0-9]+)\/([0-9]+)[\s]+Vili[\s]+([\-0-9]+)\/([0-9]+)/i'; //$regex = '/Puu[\s]+([0-9]+)\/([0-9]+)[\s]+Savi[\s]+([0-9]+)\/([0-9]+)[\s]+Rauta[\s]+([0-9]+)\/([0-9]+)[\s]+Vilja[\s]+([\-0-9]+)\/([0-9]+)/i'; // EE t3.1: //$regex = '/Puit[\s]+([0-9]+)\/([0-9]+)[\s]+Savi[\s]+([0-9]+)\/([0-9]+)[\s]+Raud[\s]+([0-9]+)\/([0-9]+)[\s]+Vili[\s]+([\-0-9]+)\/([0-9]+)/i'; // com T3.3: $regex = '/Lumber[\s]+([0-9]+)\/([0-9]+)[\s]+Clay[\s]+([0-9]+)\/([0-9]+)[\s]+Iron[\s]+([0-9]+)\/([0-9]+)[\s]+Crop[\s]+([\-0-9]+)\/([0-9]+)/i'; preg_match($regex, $_POST['market'], $wh_levels); $lvl_wood = $wh_levels[1]; $lvl_clay = $wh_levels[3]; $lvl_iron = $wh_levels[5]; $lvl_crop = $wh_levels[7]; $lvl_wh = $wh_levels[2]; $lvl_gran = $wh_levels[8]; // Server time //$regex = '/Palvelimen aika: ([0-9:]+)/i'; // EE t3.1: //$regex = '/Serverikell: ([0-9:]+)/i'; // com T3.3: $regex = '/Server time: ([0-9:]+)/i'; preg_match($regex, $_POST['market'], $server_time); $server_time = strtotime(date("Y-m-d", time()) . $server_time[1]); //if ($server_time > time()) { // $server_time = $server_time - 24*60*60; //} $last_hit_time = $server_time; $myymyyh .= "\r\n\r\n"; if (is_array($match[M_PLAYER]) && count($match[M_PLAYER]) > 0 ) { $TOTAL_WOOD = 0; $TOTAL_CLAY = 0; $TOTAL_IRON = 0; $TOTAL_CROP = 0; $myymyylb .= ''; $myymyylb .= ''; $myymyylb .= ''; $myymyylb .= ''; $myymyylb .= '
Crop status is color coded:
Green >90%, >'.number_format($lvl_gran*0.9, 0, '.', ' ').'
White >80%, >'.number_format($lvl_gran*0.8, 0, '.', ' ').'
Yellow
Red <34%, <'.number_format($lvl_gran*0.34, 0, '.', ' ').'

'; $myymyy .= ''; $myymyy .= ''; $myymyy .= ' '; $myymyy .= ''; $myymyy .= ''; $myymyy .= ' '; $myymyy .= ' '; $myymyy .= ' '; $myymyy .= ' '; $myymyy .= ' '; $myymyy .= ' '; $myymyy .= ' '; $myymyy .= ''; $myymyy .= "\r\n\r\n"; $shorting = false; foreach($match[M_PLAYER] as $key => $player) { $TOTAL_WOOD += $match[M_WOOD][$key]; $TOTAL_CLAY += $match[M_CLAY][$key]; $TOTAL_IRON += $match[M_IRON][$key]; $TOTAL_CROP += $match[M_CROP][$key]; list($h, $m, $s) = explode(":", $match[M_ETA][$key]); $d = 0; //floor($h / 24.00); $hit_date = date("d.m.Y", $server_time + mktime($h, $m, $s, 0, 0, 0 ) - mktime(0,0,0,0,0,0)); $match[M_HIT_DATE][$key] = $hit_date; $hit_time = strtotime($match[M_ARRIVAL][$key] . " " . $hit_date); $crop_eaten = round(($hit_time - $last_hit_time) * $sec_consumption, 0); $last_hit_time = $hit_time; if ($lvl_crop - $crop_eaten < 0) { $short = $lvl_crop - $crop_eaten; $short_time = $short / $sec_consumption; $lvl_crop = ($match[M_CROP][$key] > $lvl_gran) ? $lvl_gran : $match[M_CROP][$key]; if (isset($first_short_time) == false) { $first_short_time = $hit_time + $short_time; } if (!$shorting) { $match[M_SHORTED][$key] = true; $match[M_SHORT_TIME][$key] = $hit_time + $short_time; if ($match[M_CROP][$key] > 0) $shorting = false; else $shorting = true; } else { if ($match[M_CROP][$key] > 0) $shorting = false; $match[M_SHORTED][$key] = false; } } else { $shorting = false; $match[M_SHORTED][$key] = false; $lvl_crop = ($lvl_crop + $match[M_CROP][$key] - $crop_eaten > $lvl_gran) ? $lvl_gran : $lvl_crop + $match[M_CROP][$key] - $crop_eaten; } $match[M_LVL_CROP][$key] = $lvl_crop; $fill = $lvl_crop / $lvl_gran; if ($fill > 0.9) { $match[M_COLOR][$key] = M_C_NOMORE; } else if ($fill > 0.8) { $match[M_COLOR][$key] = M_C_SOME; } else if ($fill < 0.34) { $match[M_COLOR][$key] = M_C_MUCH_MORE; } else { $match[M_COLOR][$key] = M_C_MORE; } } $i = count($match[M_PLAYER])-1; $current = $match[M_COLOR][$i]; $i--; while( $i >= 0 ) { if( $match[M_COLOR][$i] > $current ) { $current = $match[M_COLOR][$i]; } else { $match[M_COLOR][$i] = $current; } if($match[M_SHORTED][$i]) { $current = M_C_MUCH_MORE; } $i--; } foreach($match[M_PLAYER] as $key => $player) { if( $match[M_SHORTED][$key] ) { $myymyyb .= ''; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ''; } $print_wood = number_format($match[M_WOOD][$key], 0, '.', ' '); $print_clay = number_format($match[M_CLAY][$key], 0, '.', ' '); $print_iron = number_format($match[M_IRON][$key], 0, '.', ' '); $myymyyb .= ''; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $print_lvl_crop = number_format($match[M_LVL_CROP][$key], 0, '.', ' '); $print_lvl_gran = number_format($lvl_gran, 0, '.', ' '); if ($match[M_COLOR][$key] == M_C_MORE) { $myymyyb .= ' '; } else if ($match[M_COLOR][$key] == M_C_MUCH_MORE || $match[M_LVL_CROP][$key] == 0) { $myymyyb .= ' '; } else if ($match[M_COLOR][$key] == M_C_NOMORE ) { $myymyyb .= ' '; } else if ($match[M_COLOR][$key] == M_C_SOME ) { $myymyyb .= ' '; } else { $myymyyb .= ' '; } $myymyyb .= ''; } if ($lvl_crop > 0) { $crop_lasts = $last_hit_time + $lvl_crop/$sec_consumption; $myymyyb .= ''; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ''; } $myymyyb .= ''; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ' '; $myymyyb .= ''; if(!isset($first_short_time)) { $first_short_time = $last_hit_time + ($lvl_crop / $sec_consumption); } if ($sec_consumption < 0 ) { $myymyyc .= ''; $myymyyc .= ' '; } else { $myymyyc .= ''; $myymyyc .= ' '; $myymyyc .= ' '; $myymyyc .= ' '; $myymyyc .= ' '; $myymyyc .= ' '; $myymyyc .= ' '; $myymyyc .= ' '; $myymyyc .= ''; } $myymyyc .= '
Arriving merchants
PlayerVillage'; $myymyy .= ' ArrivesWoodClayIronCropCrop status
! Crop runs out !'.date("d.m.Y H:i", $match[M_SHORT_TIME][$key]).'! Crop runs out !! Crop needed !
'.$player.''.$match[M_VILLAGE][$key].''.$match[M_HIT_DATE][$key].' '.$match[M_ARRIVAL][$key].''.$print_wood.''.$print_clay.''.$print_iron.''.number_format($match[M_CROP][$key], 0, '.', ' ').' More crops needed
'.$print_lvl_crop.' / '.$print_lvl_gran.'
'.'
More crops needed!
'.$print_lvl_crop.' / '.$print_lvl_gran.'
'.'
No more crops
'.$print_lvl_crop.' / '.$print_lvl_gran.'
Crops only in small shipments
'.$print_lvl_crop.' / '.$print_lvl_gran.'
'.'
HOW THE HELL DID WE GET HERE?
'.$match[M_COLOR][$key].'
'.$print_lvl_crop.' / '.$print_lvl_gran.'
'.'
! Crop runs out !'.date("d.m.Y H:i", $crop_lasts).'! Crop runs out !! Crop needed !
Total'; $myymyyb .= ' '.number_format($TOTAL_WOOD, 0, '.', ' ').''.number_format($TOTAL_CLAY, 0, '.', ' ').''.number_format($TOTAL_IRON, 0, '.', ' ').''.number_format($TOTAL_CROP, 0, '.', ' ').' 
Crop never runs out; production greater than consumption'; $myymyyc .= '
Crop runs out the first time'.date("d.m.Y H:i", $first_short_time).'     
'; $myymyy2 .= "

"; if ($sec_consumption <= 0) { $myymyy2 .= "Crop never runs out"; } else { $h = floor(($first_short_time - time()) / 3600); $h_str = str_replace(',', '.', $h); $first_short_time_str = str_replace(',', '.', $first_short_time); $myymyy2 .= "Crop runs out the first time on "; $myymyy2 .= $weekdays[date("N", $first_short_time)].date(" d.m.Y \a\\t H:i", $first_short_time); $myymyy2 .= " (after " . date("{$h}\h i", $first_short_time - time()) . "min)" ; } $myymyy3 .= "

 

"; } $myymyyc .= ''; $myymyyv .= '

Crop consumption '.number_format($hour_consumption, 0, '.', ' ').'/h ('.number_format($day_consumption, 0, '.', ' ').'/day; '.number_format($sec_consumption, 2, '.', ' ').'/s)'; $myymyyfb = $myymyyh.$myymyy2.$myymyyv.$myymyy3.$myymyylb.$myymyy.$myymyyb.$myymyyc; echo $myymyyfb; ?>

Design and implementation by ildis / Doom @ s1.travian.fi
Fixing of terrible code by pikkumyy / Sisu @ s2.travian.fi
Fixing for K&R usage by Bera / Kauniit @ s3.travian.fi
Modification for T&J usage by Lehter / K&R-ghost @ s3.travian.fi
Modification for HL usage by qjnrid / Hirttämättömät Lurjukset @ s1.travian.co.ee
Modification for COM T3.3 by qjnrid