diff --git a/Class/JSON.php b/Class/JSON.php new file mode 100644 index 0000000..0cddbdd --- /dev/null +++ b/Class/JSON.php @@ -0,0 +1,806 @@ + + * @author Matt Knapp + * @author Brett Stimmerman + * @copyright 2005 Michal Migurski + * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $ + * @license http://www.opensource.org/licenses/bsd-license.php + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_SLICE', 1); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_STR', 2); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_ARR', 3); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_OBJ', 4); + +/** + * Marker constant for Services_JSON::decode(), used to flag stack state + */ +define('SERVICES_JSON_IN_CMT', 5); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_LOOSE_TYPE', 16); + +/** + * Behavior switch for Services_JSON::decode() + */ +define('SERVICES_JSON_SUPPRESS_ERRORS', 32); + +/** + * Converts to and from JSON format. + * + * Brief example of use: + * + * + * // create a new instance of Services_JSON + * $json = new Services_JSON(); + * + * // convert a complexe value to JSON notation, and send it to the browser + * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4))); + * $output = $json->encode($value); + * + * print($output); + * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]] + * + * // accept incoming POST data, assumed to be in JSON notation + * $input = file_get_contents('php://input', 1000000); + * $value = $json->decode($input); + * + */ +class Services_JSON +{ + /** + * constructs a new JSON instance + * + * @param int $use object behavior flags; combine with boolean-OR + * + * possible values: + * - SERVICES_JSON_LOOSE_TYPE: loose typing. + * "{...}" syntax creates associative arrays + * instead of objects in decode(). + * - SERVICES_JSON_SUPPRESS_ERRORS: error suppression. + * Values which can't be encoded (e.g. resources) + * appear as NULL instead of throwing errors. + * By default, a deeply-nested resource will + * bubble up with an error, so all return values + * from encode() should be checked with isError() + */ + function Services_JSON($use = 0) + { + $this->use = $use; + } + + /** + * convert a string from one UTF-16 char to one UTF-8 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf16 UTF-16 character + * @return string UTF-8 character + * @access private + */ + function utf162utf8($utf16) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); + } + + $bytes = (ord($utf16{0}) << 8) | ord($utf16{1}); + + switch(true) { + case ((0x7F & $bytes) == $bytes): + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x7F & $bytes); + + case (0x07FF & $bytes) == $bytes: + // return a 2-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xC0 | (($bytes >> 6) & 0x1F)) + . chr(0x80 | ($bytes & 0x3F)); + + case (0xFFFF & $bytes) == $bytes: + // return a 3-byte UTF-8 character + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0xE0 | (($bytes >> 12) & 0x0F)) + . chr(0x80 | (($bytes >> 6) & 0x3F)) + . chr(0x80 | ($bytes & 0x3F)); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * convert a string from one UTF-8 char to one UTF-16 char + * + * Normally should be handled by mb_convert_encoding, but + * provides a slower PHP-only method for installations + * that lack the multibye string extension. + * + * @param string $utf8 UTF-8 character + * @return string UTF-16 character + * @access private + */ + function utf82utf16($utf8) + { + // oh please oh please oh please oh please oh please + if(function_exists('mb_convert_encoding')) { + return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8'); + } + + switch(strlen($utf8)) { + case 1: + // this case should never be reached, because we are in ASCII range + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return $utf8; + + case 2: + // return a UTF-16 character from a 2-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr(0x07 & (ord($utf8{0}) >> 2)) + . chr((0xC0 & (ord($utf8{0}) << 6)) + | (0x3F & ord($utf8{1}))); + + case 3: + // return a UTF-16 character from a 3-byte UTF-8 char + // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + return chr((0xF0 & (ord($utf8{0}) << 4)) + | (0x0F & (ord($utf8{1}) >> 2))) + . chr((0xC0 & (ord($utf8{1}) << 6)) + | (0x7F & ord($utf8{2}))); + } + + // ignoring UTF-32 for now, sorry + return ''; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to Services_JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return mixed JSON string representation of input var or an error if a problem occurs + * @access public + */ + function encode($var) + { + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return (int) $var; + + case 'double': + case 'float': + return (float) $var; + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch (true) { + case $ord_var_c == 0x08: + $ascii .= '\b'; + break; + case $ord_var_c == 0x09: + $ascii .= '\t'; + break; + case $ord_var_c == 0x0A: + $ascii .= '\n'; + break; + case $ord_var_c == 0x0C: + $ascii .= '\f'; + break; + case $ord_var_c == 0x0D: + $ascii .= '\r'; + break; + + case $ord_var_c == 0x22: + case $ord_var_c == 0x2F: + case $ord_var_c == 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c + 1})); + $c += 1; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2})); + $c += 2; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3})); + $c += 3; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4})); + $c += 4; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c + 1}), + ord($var{$c + 2}), + ord($var{$c + 3}), + ord($var{$c + 4}), + ord($var{$c + 5})); + $c += 5; + $utf16 = $this->utf82utf16($char); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + $properties = array_map(array($this, 'name_value'), + array_keys($var), + array_values($var)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + } + + // treat it like a regular array + $elements = array_map(array($this, 'encode'), $var); + + foreach($elements as $element) { + if(Services_JSON::isError($element)) { + return $element; + } + } + + return '[' . join(',', $elements) . ']'; + + case 'object': + $vars = get_object_vars($var); + + $properties = array_map(array($this, 'name_value'), + array_keys($vars), + array_values($vars)); + + foreach($properties as $property) { + if(Services_JSON::isError($property)) { + return $property; + } + } + + return '{' . join(',', $properties) . '}'; + + default: + return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS) + ? 'null' + : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string"); + } + } + + /** + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function name_value($name, $value) + { + $encoded_value = $this->encode($value); + + if(Services_JSON::isError($encoded_value)) { + return $encoded_value; + } + + return $this->encode(strval($name)) . ':' . $encoded_value; + } + + /** + * reduce a string by removing leading and trailing comments and whitespace + * + * @param $str string string value to strip of comments and whitespace + * + * @return string string value stripped of comments and whitespace + * @access private + */ + function reduce_string($str) + { + $str = preg_replace(array( + + // eliminate single line comments in '// ...' form + '#^\s*//(.+)$#m', + + // eliminate multi-line comments in '/* ... */' form, at start of string + '#^\s*/\*(.+)\*/#Us', + + // eliminate multi-line comments in '/* ... */' form, at end of string + '#/\*(.+)\*/\s*$#Us' + + ), '', $str); + + // eliminate extraneous space + return trim($str); + } + + /** + * decodes a JSON string into appropriate variable + * + * @param string $str JSON-formatted string + * + * @return mixed number, boolean, string, array, or object + * corresponding to given JSON input string. + * See argument 1 to Services_JSON() above for object-output behavior. + * Note that decode() always returns strings + * in ASCII or UTF-8 format! + * @access public + */ + function decode($str) + { + $str = $this->reduce_string($str); + + switch (strtolower($str)) { + case 'true': + return true; + + case 'false': + return false; + + case 'null': + return null; + + default: + $m = array(); + + if (is_numeric($str)) { + // Lookie-loo, it's a number + + // This would work on its own, but I'm trying to be + // good about returning integers where appropriate: + // return (float)$str; + + // Return float or int, as appropriate + return ((float)$str == (integer)$str) + ? (integer)$str + : (float)$str; + + } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) { + // STRINGS RETURNED IN UTF-8 FORMAT + $delim = substr($str, 0, 1); + $chrs = substr($str, 1, -1); + $utf8 = ''; + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c < $strlen_chrs; ++$c) { + + $substr_chrs_c_2 = substr($chrs, $c, 2); + $ord_chrs_c = ord($chrs{$c}); + + switch (true) { + case $substr_chrs_c_2 == '\b': + $utf8 .= chr(0x08); + ++$c; + break; + case $substr_chrs_c_2 == '\t': + $utf8 .= chr(0x09); + ++$c; + break; + case $substr_chrs_c_2 == '\n': + $utf8 .= chr(0x0A); + ++$c; + break; + case $substr_chrs_c_2 == '\f': + $utf8 .= chr(0x0C); + ++$c; + break; + case $substr_chrs_c_2 == '\r': + $utf8 .= chr(0x0D); + ++$c; + break; + + case $substr_chrs_c_2 == '\\"': + case $substr_chrs_c_2 == '\\\'': + case $substr_chrs_c_2 == '\\\\': + case $substr_chrs_c_2 == '\\/': + if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || + ($delim == "'" && $substr_chrs_c_2 != '\\"')) { + $utf8 .= $chrs{++$c}; + } + break; + + case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)): + // single, escaped unicode character + $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2))) + . chr(hexdec(substr($chrs, ($c + 4), 2))); + $utf8 .= $this->utf162utf8($utf16); + $c += 5; + break; + + case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F): + $utf8 .= $chrs{$c}; + break; + + case ($ord_chrs_c & 0xE0) == 0xC0: + // characters U-00000080 - U-000007FF, mask 110XXXXX + //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 2); + ++$c; + break; + + case ($ord_chrs_c & 0xF0) == 0xE0: + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 3); + $c += 2; + break; + + case ($ord_chrs_c & 0xF8) == 0xF0: + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 4); + $c += 3; + break; + + case ($ord_chrs_c & 0xFC) == 0xF8: + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 5); + $c += 4; + break; + + case ($ord_chrs_c & 0xFE) == 0xFC: + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 6); + $c += 5; + break; + + } + + } + + return $utf8; + + } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { + // array, or object notation + + if ($str{0} == '[') { + $stk = array(SERVICES_JSON_IN_ARR); + $arr = array(); + } else { + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = array(); + } else { + $stk = array(SERVICES_JSON_IN_OBJ); + $obj = new stdClass(); + } + } + + array_push($stk, array('what' => SERVICES_JSON_SLICE, + 'where' => 0, + 'delim' => false)); + + $chrs = substr($str, 1, -1); + $chrs = $this->reduce_string($chrs); + + if ($chrs == '') { + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } else { + return $obj; + + } + } + + //print("\nparsing {$chrs}\n"); + + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c <= $strlen_chrs; ++$c) { + + $top = end($stk); + $substr_chrs_c_2 = substr($chrs, $c, 2); + + if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) { + // found a comma that is not inside a string, array, etc., + // OR we've reached the end of the character list + $slice = substr($chrs, $top['where'], ($c - $top['where'])); + array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); + //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + // we are in an array, so just push an element onto the stack + array_push($arr, $this->decode($slice)); + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + // we are in an object, so figure + // out the property name and set an + // element in an associative array, + // for now + $parts = array(); + + if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // "name":value pair + $key = $this->decode($parts[1]); + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // name:value pair, where name is unquoted + $key = $parts[1]; + $val = $this->decode($parts[2]); + + if ($this->use & SERVICES_JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } + + } + + } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) { + // found a quote, and we are not inside a string + array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); + //print("Found start of string at {$c}\n"); + + } elseif (($chrs{$c} == $top['delim']) && + ($top['what'] == SERVICES_JSON_IN_STR) && + ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) { + // found a quote, we're in a string, and it's not escaped + // we know that it's not escaped becase there is _not_ an + // odd number of backslashes at the end of the string so far + array_pop($stk); + //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '[') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-bracket, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false)); + //print("Found start of array at {$c}\n"); + + } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) { + // found a right-bracket, and we're in an array + array_pop($stk); + //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '{') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a left-brace, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false)); + //print("Found start of object at {$c}\n"); + + } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) { + // found a right-brace, and we're in an object + array_pop($stk); + //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($substr_chrs_c_2 == '/*') && + in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) { + // found a comment start, and we are in an array, object, or slice + array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false)); + $c++; + //print("Found start of comment at {$c}\n"); + + } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) { + // found a comment end, and we're in one now + array_pop($stk); + $c++; + + for ($i = $top['where']; $i <= $c; ++$i) + $chrs = substr_replace($chrs, ' ', $i, 1); + + //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } + + } + + if (reset($stk) == SERVICES_JSON_IN_ARR) { + return $arr; + + } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) { + return $obj; + + } + + } + } + } + + /** + * @todo Ultimately, this should just call PEAR::isError() + */ + function isError($data, $code = null) + { + if (class_exists('pear')) { + return PEAR::isError($data, $code); + } elseif (is_object($data) && (get_class($data) == 'services_json_error' || + is_subclass_of($data, 'services_json_error'))) { + return true; + } + + return false; + } +} + +if (class_exists('PEAR_Error')) { + + class Services_JSON_Error extends PEAR_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + parent::PEAR_Error($message, $code, $mode, $options, $userinfo); + } + } + +} else { + + /** + * @todo Ultimately, this class shall be descended from PEAR_Error + */ + class Services_JSON_Error + { + function Services_JSON_Error($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + + } + } + +} + +?> diff --git a/Class/flotte.php b/Class/flotte.php new file mode 100644 index 0000000..73ba1cc --- /dev/null +++ b/Class/flotte.php @@ -0,0 +1,246 @@ +vaisseaux[0] = $vaisseau_1; $this->vaisseaux[1] = $vaisseau_2; $this->vaisseaux[2] = $vaisseau_3; $this->vaisseaux[3] = $vaisseau_4; $this->vaisseaux[4] = $vaisseau_5; $this->vaisseaux[5] = $vaisseau_6; $this->vaisseaux[6] = $vaisseau_7; $this->vaisseaux[7] = $vaisseau_8; $this->vaisseaux[8] = $vaisseau_9; $this->vaisseaux[9] = $vaisseau_10; $this->vaisseaux[10] = $vaisseau_11; $this->vaisseaux[11] = $vaisseau_12; + $this->ressources_max = $Tressources_max; + $this->vitesses_cd = $Tvitesses_cd; + $this->vitesses_ld = $Tvitesses_ld; + $this->preparation_cd = $Tpreparation_cd; + $this->preparation_ld = $Tpreparation_ld; + $this->chauffe_ld = $Tchauffe_ld; + $this->calcFret(); + } + + /** + * Ajouter $nombre vaisseaux de type $type + * + */ + function addVaisseaux($type, $nombre) { + $type--; + $this->vaisseaux[$type] += $nombre; + + $this->calcFret(); + } + + /** + * Supprime $nombre vaisseaux de type $type + * + */ + function delVaisseaux($type, $nombre) { + $type--; + $this->vaisseaux[$type] -= $nombre; + if ($this->vaisseaux[$type] < 0) $this->vaisseaux[$type] = 0; + + $this->calcFret(); + } + + /** + * Vérifie qu'il reste assez de place dans les vaisseaux pour transporter $nombre de ressources du type $type + * + */ + function verifRessources($type, $nombre) { + $type--; + if ($type == 0) { + if ($this->vaisseaux_fret[$type]+$nombre+$this->vaisseaux_fret[$type+1]+$this->vaisseaux_fret[$type+2] > $this->fret_max) return false; // Retourne false si la quantité à ajouter est trop importante + else return true; + } + elseif ($type == 1) { + if ($this->vaisseaux_fret[$type]+$nombre+$this->vaisseaux_fret[$type+1]+$this->vaisseaux_fret[$type-1] > $this->fret_max) return false; // Retourne false si la quantité à ajouter est trop importante + else return true; + } + elseif ($type == 2) { + if ($this->vaisseaux_fret[$type]+$nombre+$this->vaisseaux_fret[$type-1]+$this->vaisseaux_fret[$type-2] > $this->fret_max) return false; // Retourne false si la quantité à ajouter est trop importante + else return true; + } + else return false; + } + + /** + * Ajouter $nombre ressources de type $type + * + */ + function addRessources($type, $nombre) { + if ($this->verifRessources($type, $nombre) == true) { + $type--; + $this->vaisseaux_fret[$type] += $nombre; + return true; + } + else return false; + } + + /** + * Enlève $nombre ressources de type $type + * + */ + function delRessources($type, $nombre) { + $type--; + $this->vaisseaux_fret[$type] -= $nombre; + if ($this->vaisseaux_fret[$type] < 0) $this->vaisseaux_fret[$type] = 0; + } + + /** + * Enlève toutes les ressources de type $type + * Si $type = 0, enlève toutes les ressources + * + */ + function razRessources($type = 0) { + $type--; + if ($type == -1) $this->vaisseaux_fret = array(0,0,0); + else $this->vaisseaux_fret[$type] = 0; + } + + /** + * Recalcul le nombre maximum de ressource que peuvent transporter tous les vaisseaux + * + */ + function calcFret() { + $cnt = count($this->vaisseaux); + for ($i=0 ; $i<$cnt ; $i++) { + $this->fret_max += $this->vaisseaux[$i] * $this->ressources_max[$i]; + } + } + + /** + * Fixer position de départ + * + */ + function fixePosition($galaxie, $systeme, $planete, $time = 0) { + if ($time == 0) $time = time(); + + $this->position_galaxie = $galaxie; + $this->position_systeme = $systeme; + $this->position_planete = $planete; + $this->position_temps = $time; + } + + /** + * Déplacer la flotte vers une destination et calcul du temps de déplacement + * + */ + function deplacerFlotte($galaxie, $systeme, $planete, $coefficient = 1) { + $this->destination_galaxie = $galaxie; + $this->destination_systeme = $systeme; + $this->destination_planete = $planete; + $this->vitesse_coefficient = $coefficient; + + $this->calcTemps(); + } + + /** + * Recalcul le temps de déplacement + * + */ + function calcTemps() { + $start_galaxie = $this->position_galaxie; + $start_ss = $this->position_systeme; + $start_position = $this->position_planete; + $end_galaxie = $this->destination_galaxie; + $end_ss = $this->destination_systeme; + $end_position = $this->destination_planete; + + $AvaisType = ''; $AvaisVitesseC = ''; $AvaisVitesseL = ''; $AvaisPrepC = ''; $AvaisChauffe = ''; $AvaisContenu = 0; + for ($i=0 ; $i<=12 ; $i++) { + for ($j = 1; $j <= $this->vaisseaux[$i]; $j++) { + $AvaisType .= ($i).' '; + $AvaisVitesseC .= $this->vitesses_cd[$i].' '; + $AvaisVitesseL .= $this->vitesses_ld[$i].' '; + $AvaisPrepC .= $this->preparation_cd[$i].' '; + $AvaisPrepL .= $this->preparation_ld[$i].' '; + $AvaisChauffe .= $this->chauffe_ld[$i].' '; + } + } + $AvaisType = split(' ', trim($AvaisType)); $AvaisVitesseC = split(' ', trim($AvaisVitesseC)); $AvaisVitesseL = split(' ', trim($AvaisVitesseL)); $AvaisContenu = split(' ', trim($AvaisContenu)); $AvaisPrepC = split(' ', trim($AvaisPrepC)); $AvaisPrepL = split(' ', trim($AvaisPrepL)); $AvaisChauffe = split(' ', trim($AvaisChauffe)); + + if(min($AvaisVitesseL) != 0) { + $vitesse = min($AvaisVitesseL); + $preparation = max($AvaisPrepL); + $chauffe = max($AvaisChauffe); + } + else { + $vitesse = min($AvaisVitesseC); + $preparation = max($AvaisPrepC); + $chauffe = 0; + } + + $this->vaisseaux_nombre = count($AvaisType); + $coefvitesse = $this->vitesse_coefficient; + + if ($end_galaxie-$start_galaxie == 0 && $end_ss-$start_ss == 0 && $end_position-$start_position == 0) $temps = 0; + elseif ($end_galaxie-$start_galaxie == 0 && $end_ss-$start_ss == 0 && $chauffe == 0) $temps = $preparation+abs($end_position-$start_position)*$vitesse/12; + elseif ($end_galaxie-$start_galaxie == 0 && $chauffe == 0) $temps = $preparation+abs($end_ss-$start_ss)*$vitesse; + elseif ($chauffe == 0) $temps = $preparation+abs($end_galaxie-$start_galaxie)*$vitesse*300; + elseif ($end_galaxie-$start_galaxie == 0 && $end_ss-$start_ss == 0) $temps = $preparation+abs($end_position-$start_position)*($vitesse*2)/12+$preparation; + /*elseif ($end_galaxie-$start_galaxie == 0 && $end_ss-$start_ss <= $chauffe) $temps = abs($end_ss-$start_ss)*(($vitesse/$chauffe)*($chauffe-abs($end_ss-$start_ss))+$vitesse)+$preparation; + elseif ($end_galaxie-$start_galaxie == 0) $temps = $vitesse*abs($end_ss-$start_ss)+$vitesse*10+$preparation;*/ + elseif ($end_galaxie-$start_galaxie == 0) $temps = (abs($end_ss-$start_ss)*(($vitesse/$chauffe)*((abs($chauffe-abs($end_ss-$start_ss))+($chauffe-abs($end_ss-$start_ss)))/2)+$vitesse))+(20-(abs($chauffe-abs($end_ss-$start_ss))+($chauffe-abs($end_ss-$start_ss)))/2)*54+$preparation; + else $temps = (($vitesse/$chauffe)*($chauffe-abs($end_galaxie-$start_galaxie))+$vitesse)*300+108+$preparation; + + $this->destination_temps = $temps/$coefvitesse; + return $temps/$coefvitesse; + } + + /** + * Calcul la consomation de la flotte + * + */ + function calcConso() { + return intval($this->destination_temps*$this->vaisseaux_nombre/20); + } +} + +$race = 'humain'; +$auth_level = 7; +include('../languages/fr_FR/noms.php'); + +$flotte = new flotte($nomvais_rs,$nomvais_dc,$nomvais_lc,$nomvais_pdc,$nomvais_pdl,$nomvais_cdl,0,0,0,4); +$flotte->addRessources(1,11); +$flotte->deplacerFlotte(1,1,1); +$flotte->calcTemps(); +print_r ($flotte->calcConso()); +?> \ No newline at end of file diff --git a/Class/gererFile.php b/Class/gererFile.php new file mode 100644 index 0000000..fd5b215 --- /dev/null +++ b/Class/gererFile.php @@ -0,0 +1,67 @@ +fileArray = $fileArray; + $this->fileTexte = implode(' ',$fileArray); + $this->tempsArray = $tempsArray; + $this->tempsTexte = implode(' ',$tempsArray); + } + + /** + * Ajouter une action à la file + * + */ + function add($file, $temps) { + $file = trim($file); + $temps = trim($temps); + $this->fileTexte .= ' '.$file; + $this->fileArray = explode(' ',$fileTexte); + $this->tempsTexte .= ' '.$temps; + $this->tempsArray = explode(' ',$tempsTexte); + } + + /** + * Supprime une action de la file + * + */ + function delId($id) { + $pos = strpos(implode(',', $fileTec).',', $_GET['tec'].','); + $this->fileTexte .= ' '.$file; + $this->fileArray = explode(' ',$fileTexte); + $this->tempsTexte .= ' '.$temps; + $this->tempsArray = explode(' ',$tempsTexte); + } +} + +$gestion = new gererFile(explode(' ','1 2 3 4 5'), explode(' ', '123 456 789 101112 131415 161718')); +$gestion->add('6', '192021'); +print $gestion->fileTexte; +?> \ No newline at end of file diff --git a/b_index.php b/b_index.php index 337fcc2..6f00589 100644 --- a/b_index.php +++ b/b_index.php @@ -1,25 +1,33 @@ '; elseif(!isset($_GET['v'])){ + if (isset($_SESSION['cdsconnect'])) { + $_SESSION['cdsconnect'] = null; + header('Location: index.php?erreur=6'); + exit; + } $_SESSION['cdsconnect'] = rand(1234567890,9876543210)*rand(1234567890,98765432100)/rand(123567890,9876543210); $url=@eregi_replace($_SERVER['DOCUMENT_ROOT'],'http://'.$_SERVER['HTTP_HOST'],$_SERVER['SCRIPT_FILENAME']); echo ''; - echo ''; + echo ''; } -if(($_GET['v'] == sha1(time() + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 1 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 2 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 3 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 4 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 5 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 6 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 7 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 8 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 9 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 10 + $_SESSION['cdsconnect'])) && isset($_SESSION['charg']) && $_SESSION['charg'] == 1) echo ' +if(($_GET['v'] == sha1(time() + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 1 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 2 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 3 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 4 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 5 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 6 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 7 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 8 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 9 + $_SESSION['cdsconnect']) || $_GET['v'] == sha1(time() - 10 + $_SESSION['cdsconnect'])) && isset($_SESSION['charg']) && $_SESSION['charg'] == 1) { +$_SESSION['cdsconnect'] = null; +echo ' - +

'; +} elseif(!isset($_SESSION['charg']) || $_SESSION['charg'] != 1) echo ''; else echo ''; ?> \ No newline at end of file diff --git a/fermerServeur.php b/fermerServeur.php index a1b0d59..8399e15 100644 --- a/fermerServeur.php +++ b/fermerServeur.php @@ -2,8 +2,8 @@ // Définition des paramètres de fermeture du serveur $fermerServeur_auth = 9; $fermerServeur_causeR = 1; -$fermerServeur_timeS = 1195553038; -$duree = 25*60; +$fermerServeur_timeS = 1195643200; +$duree = 20*60; $fermerServeur_timeE = $fermerServeur_timeS + $duree; $fermerServeur_ouverture = ''; // ... jusqu'à environ %c heure de Paris. DEFINIR PLUTÔT LES TIMEE ET TIMES $fermerServeur_lien = ''; diff --git a/fonctions.php b/fonctions.php index 5feacb8..68fbfda 100644 --- a/fonctions.php +++ b/fonctions.php @@ -55,6 +55,11 @@ function trouvNom($id_user){ } function separerNombres($nombre) { + if ($nombre != abs($nombre)) { + $nombre = abs($nombre); + $neg = true; + } + else $neg = false; $j=0; $lgr=strlen($nombre); $chaine = ''; @@ -73,7 +78,8 @@ function separerNombres($nombre) { $nombre .= substr($chaine,$j,1); $j -=1; } - return $nombre; + if ($neg == true) return ($nombre*-1); + else return $nombre; } function bbcode($text) { diff --git a/images/Thumbs.db b/images/Thumbs.db new file mode 100644 index 0000000..4099c59 Binary files /dev/null and b/images/Thumbs.db differ diff --git a/images/covenant.jpg b/images/covenant.jpg new file mode 100644 index 0000000..31606b5 Binary files /dev/null and b/images/covenant.jpg differ diff --git a/images/humain.jpg b/images/humain.jpg new file mode 100644 index 0000000..3cc7118 Binary files /dev/null and b/images/humain.jpg differ diff --git a/index.php b/index.php index b5452a5..2ce0ea5 100644 --- a/index.php +++ b/index.php @@ -4,11 +4,15 @@ include('template.php'); require('fermerServeur.php'); // Système de vérification de nombre de login via la base de données -/* require('connectBDD.php'); - $req = mysql_query("SELECT essai FROM securite_identification WHERE `ip` = '$ip'"); - $data = mysql_fetch_assoc($req); - if (isset($_SESSION['essaimdp']) && $_SESSION['essaimdp'] != $data['essai']) $_SESSION['essaimdp'] = $data['essai']; - mysql_close();*/ + require('connectBDD.php'); + $ip = $_SERVER["REMOTE_ADDR"]; + $req = mysql_query("SELECT * FROM securite_identification WHERE `ip` = '$ip' AND `essai` > ".(time()-43200)) or die('Erreur SQL :
'.$sql); + $nbC = mysql_num_rows($req); + if (!isset($_SESSION['essaimdp']) || $_SESSION['essaimdp'] != $nbC) $_SESSION['essaimdp'] = $nbC; + mysql_close(); +$_SESSION['champLogin'] = 'login'.rand(123456789,9876543210); +$_SESSION['champMdp'] = 'mdp'.rand(98765432,123456789).$_SESSION['essaimdp']; +$_SESSION['champMemo'] = 'memo'.rand(123456789,1234567890); $template = new Template('./'); $template->set_filenames(array('index' => 'templates/index.tpl')); @@ -27,7 +31,7 @@ if (isset($_GET['erreur']) && $_GET['erreur'] != '8') { elseif ($_GET['erreur'] == '5') $texte = 'Votre session a expiré. Veuillez vous reconnecter.'; elseif ($_GET['erreur'] == '6') $texte = 'Le JavaScript n\'est pas activé dans votre navigateur.

Veuillez activer le JavaScript pour que votre connexion soit possible.
Cliquez ici pour savoir comment activer le JavaScript
'; elseif ($_GET['erreur'] == 'aidejs') $texte = 'Section en cours de réalisation. Si vous n\'arrivez pas à activer le JavaScript, contactez le staff'; - elseif ($_GET['erreur'] == '7') $texte = 'Erreur lors de l\'identification

Veuillez vous identifier à nouveau.
Si le problème perciste, contactez le staff
'; + elseif ($_GET['erreur'] == '7') $texte = 'Erreur lors de l\'identification

Veuillez vous identifier à nouveau.
Si le problème persiste, contactez le staff
'; elseif (strtolower($_GET['erreur']) == 'b') $texte = 'Vous êtes banni du jeu. Vous ne pouvez pas vous identifier'; else $texte = 'Erreur !'; } @@ -35,11 +39,17 @@ elseif ($fermerServeur_auth > 0 && ($fermerServeur_timeE > time() || empty($ferm elseif ($_GET['erreur'] == '8') $texte = 'Serveur indisponible

Le serveur est actuellement indisponible. Vous pouvez essayer de vous reconnecter.

Pou plus d\'informations, lisez les annonces officielles sur le forum du jeu.

Merci de votre compréhension
'; else require('textlog.php'); -$login = '
+$login = '
- -'; + +'; + +// Affichage de l'enregistrement des paramètres d'identifications dans les cookies. Désactivé si l'on se trouve dans un réseau d'entreprise (realIP différente de l'IP +if ($ip == realip()) { + if (!isset($_COOKIE['HB_log_mdp'])) $login .= ''; + else $login .= ''; +} if (isset($_SESSION['essaimdp']) && $_SESSION['essaimdp'] >= 3 && strtolower($_GET['erreur']) != 'b') $login .= ''; $login .= ''; +$textep = ''; $template = new Template('./'); $template->set_filenames(array('index' => 'templates/index.tpl')); @@ -26,6 +26,7 @@ if (isset($_POST['code']) && isset($_POST['pseudo']) && isset($_POST['mail']) && else $textep = ''; } if ($affichage == false) { + $style='height:384px; padding-top: 1%;'; $texte = '
:: Pseudo :: 
:: Mot de Passe :: 
:: Pseudo :: 
:: Mot de Passe :: 

Veuillez recopier le texte de cette image

Captcha

@@ -48,4 +58,4 @@ $login .= '

$template->assign_vars(array('TITRE' => 'Login','TEXTE' => $texte,'LOGIN' => $login)); $template->pparse('index'); -?> \ No newline at end of file + ?> \ No newline at end of file diff --git a/info.php b/info.php index 968c8df..0f281a1 100644 --- a/info.php +++ b/info.php @@ -1,3 +1,13 @@ \ No newline at end of file diff --git a/inscription.php b/inscription.php index 52c1118..7dfa771 100644 --- a/inscription.php +++ b/inscription.php @@ -3,7 +3,7 @@ session_start(); include('template.php'); require('connectBDD.php'); $affichage = false; -$textep = '

Code d\'activation incorrect

'.$textep.'
@@ -36,8 +37,11 @@ if ($affichage == false) { Mot de passe : Confirmer le mot de passe : Adresse mail : - Race :
- +
Race :  
+ + + +
@@ -46,8 +50,8 @@ if ($affichage == false) { '; - $login = '


Code d\'activation

Entrez ici le code d\'activation qui vous a été fournis par un administrateur.
Ce code est indispensable pour vérifier que vous êtes autorisé à tester la béta.

Si vous avez perdu votre code d\'activation ou s\'il ne vous a pas été communiqué, contactez un administrateur via le forum du jeu.
'; + $login = '


Code d\'activation

Entrez ici le code d\'activation qui vous a été fournis par un administrateur.
Ce code est indispensable pour vérifier que vous êtes autorisé à tester la béta.

Si vous avez perdu votre code d\'activation ou s\'il ne vous a pas été communiqué, contactez un administrateur via le forum du jeu.
'; } - $template->assign_vars(array('TITRE' => 'Inscription','TEXTE' => $texte,'LOGIN' => $login)); + $template->assign_vars(array('TITRE' => 'Inscription','TEXTE' => $texte,'LOGIN' => $login, 'STYLE' => $style)); $template->pparse('index'); ?> \ No newline at end of file diff --git a/js/prototype.js b/js/prototype.js new file mode 100644 index 0000000..5c73462 --- /dev/null +++ b/js/prototype.js @@ -0,0 +1,4184 @@ +/* Prototype JavaScript framework, version 1.6.0 + * (c) 2005-2007 Sam Stephenson + * + * Prototype is freely distributable under the terms of an MIT-style license. + * For details, see the Prototype web site: http://www.prototypejs.org/ + * + *--------------------------------------------------------------------------*/ + +var Prototype = { + Version: '1.6.0', + + Browser: { + IE: !!(window.attachEvent && !window.opera), + Opera: !!window.opera, + WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, + Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, + MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) + }, + + BrowserFeatures: { + XPath: !!document.evaluate, + ElementExtensions: !!window.HTMLElement, + SpecificElementExtensions: + document.createElement('div').__proto__ && + document.createElement('div').__proto__ !== + document.createElement('form').__proto__ + }, + + ScriptFragment: ']*>([\\S\\s]*?)<\/script>', + JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, + + emptyFunction: function() { }, + K: function(x) { return x } +}; + +if (Prototype.Browser.MobileSafari) + Prototype.BrowserFeatures.SpecificElementExtensions = false; + +if (Prototype.Browser.WebKit) + Prototype.BrowserFeatures.XPath = false; + +/* Based on Alex Arnell's inheritance implementation. */ +var Class = { + create: function() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + var subclass = function() { }; + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0; i < properties.length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + + return klass; + } +}; + +Class.Methods = { + addMethods: function(source) { + var ancestor = this.superclass && this.superclass.prototype; + var properties = Object.keys(source); + + if (!Object.keys({ toString: true }).length) + properties.push("toString", "valueOf"); + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames().first() == "$super") { + var method = value, value = Object.extend((function(m) { + return function() { return ancestor[m].apply(this, arguments) }; + })(property).wrap(method), { + valueOf: function() { return method }, + toString: function() { return method.toString() } + }); + } + this.prototype[property] = value; + } + + return this; + } +}; + +var Abstract = { }; + +Object.extend = function(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; +}; + +Object.extend(Object, { + inspect: function(object) { + try { + if (object === undefined) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : object.toString(); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + }, + + toJSON: function(object) { + var type = typeof object; + switch (type) { + case 'undefined': + case 'function': + case 'unknown': return; + case 'boolean': return object.toString(); + } + + if (object === null) return 'null'; + if (object.toJSON) return object.toJSON(); + if (Object.isElement(object)) return; + + var results = []; + for (var property in object) { + var value = Object.toJSON(object[property]); + if (value !== undefined) + results.push(property.toJSON() + ': ' + value); + } + + return '{' + results.join(', ') + '}'; + }, + + toQueryString: function(object) { + return $H(object).toQueryString(); + }, + + toHTML: function(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + }, + + keys: function(object) { + var keys = []; + for (var property in object) + keys.push(property); + return keys; + }, + + values: function(object) { + var values = []; + for (var property in object) + values.push(object[property]); + return values; + }, + + clone: function(object) { + return Object.extend({ }, object); + }, + + isElement: function(object) { + return object && object.nodeType == 1; + }, + + isArray: function(object) { + return object && object.constructor === Array; + }, + + isHash: function(object) { + return object instanceof Hash; + }, + + isFunction: function(object) { + return typeof object == "function"; + }, + + isString: function(object) { + return typeof object == "string"; + }, + + isNumber: function(object) { + return typeof object == "number"; + }, + + isUndefined: function(object) { + return typeof object == "undefined"; + } +}); + +Object.extend(Function.prototype, { + argumentNames: function() { + var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); + return names.length == 1 && !names[0] ? [] : names; + }, + + bind: function() { + if (arguments.length < 2 && arguments[0] === undefined) return this; + var __method = this, args = $A(arguments), object = args.shift(); + return function() { + return __method.apply(object, args.concat($A(arguments))); + } + }, + + bindAsEventListener: function() { + var __method = this, args = $A(arguments), object = args.shift(); + return function(event) { + return __method.apply(object, [event || window.event].concat(args)); + } + }, + + curry: function() { + if (!arguments.length) return this; + var __method = this, args = $A(arguments); + return function() { + return __method.apply(this, args.concat($A(arguments))); + } + }, + + delay: function() { + var __method = this, args = $A(arguments), timeout = args.shift() * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + }, + + wrap: function(wrapper) { + var __method = this; + return function() { + return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); + } + }, + + methodize: function() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + return __method.apply(null, [this].concat($A(arguments))); + }; + } +}); + +Function.prototype.defer = Function.prototype.delay.curry(0.01); + +Date.prototype.toJSON = function() { + return '"' + this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z"'; +}; + +var Try = { + these: function() { + var returnValue; + + for (var i = 0, length = arguments.length; i < length; i++) { + var lambda = arguments[i]; + try { + returnValue = lambda(); + break; + } catch (e) { } + } + + return returnValue; + } +}; + +RegExp.prototype.match = RegExp.prototype.test; + +RegExp.escape = function(str) { + return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); +}; + +/*--------------------------------------------------------------------------*/ + +var PeriodicalExecuter = Class.create({ + initialize: function(callback, frequency) { + this.callback = callback; + this.frequency = frequency; + this.currentlyExecuting = false; + + this.registerCallback(); + }, + + registerCallback: function() { + this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); + }, + + execute: function() { + this.callback(this); + }, + + stop: function() { + if (!this.timer) return; + clearInterval(this.timer); + this.timer = null; + }, + + onTimerEvent: function() { + if (!this.currentlyExecuting) { + try { + this.currentlyExecuting = true; + this.execute(); + } finally { + this.currentlyExecuting = false; + } + } + } +}); +Object.extend(String, { + interpret: function(value) { + return value == null ? '' : String(value); + }, + specialChar: { + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '\\': '\\\\' + } +}); + +Object.extend(String.prototype, { + gsub: function(pattern, replacement) { + var result = '', source = this, match; + replacement = arguments.callee.prepareReplacement(replacement); + + while (source.length > 0) { + if (match = source.match(pattern)) { + result += source.slice(0, match.index); + result += String.interpret(replacement(match)); + source = source.slice(match.index + match[0].length); + } else { + result += source, source = ''; + } + } + return result; + }, + + sub: function(pattern, replacement, count) { + replacement = this.gsub.prepareReplacement(replacement); + count = count === undefined ? 1 : count; + + return this.gsub(pattern, function(match) { + if (--count < 0) return match[0]; + return replacement(match); + }); + }, + + scan: function(pattern, iterator) { + this.gsub(pattern, iterator); + return String(this); + }, + + truncate: function(length, truncation) { + length = length || 30; + truncation = truncation === undefined ? '...' : truncation; + return this.length > length ? + this.slice(0, length - truncation.length) + truncation : String(this); + }, + + strip: function() { + return this.replace(/^\s+/, '').replace(/\s+$/, ''); + }, + + stripTags: function() { + return this.replace(/<\/?[^>]+>/gi, ''); + }, + + stripScripts: function() { + return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); + }, + + extractScripts: function() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); + var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + return (this.match(matchAll) || []).map(function(scriptTag) { + return (scriptTag.match(matchOne) || ['', ''])[1]; + }); + }, + + evalScripts: function() { + return this.extractScripts().map(function(script) { return eval(script) }); + }, + + escapeHTML: function() { + var self = arguments.callee; + self.text.data = this; + return self.div.innerHTML; + }, + + unescapeHTML: function() { + var div = new Element('div'); + div.innerHTML = this.stripTags(); + return div.childNodes[0] ? (div.childNodes.length > 1 ? + $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : + div.childNodes[0].nodeValue) : ''; + }, + + toQueryParams: function(separator) { + var match = this.strip().match(/([^?#]*)(#.*)?$/); + if (!match) return { }; + + return match[1].split(separator || '&').inject({ }, function(hash, pair) { + if ((pair = pair.split('='))[0]) { + var key = decodeURIComponent(pair.shift()); + var value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); + + if (key in hash) { + if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; + hash[key].push(value); + } + else hash[key] = value; + } + return hash; + }); + }, + + toArray: function() { + return this.split(''); + }, + + succ: function() { + return this.slice(0, this.length - 1) + + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); + }, + + times: function(count) { + return count < 1 ? '' : new Array(count + 1).join(this); + }, + + camelize: function() { + var parts = this.split('-'), len = parts.length; + if (len == 1) return parts[0]; + + var camelized = this.charAt(0) == '-' + ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) + : parts[0]; + + for (var i = 1; i < len; i++) + camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); + + return camelized; + }, + + capitalize: function() { + return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); + }, + + underscore: function() { + return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); + }, + + dasherize: function() { + return this.gsub(/_/,'-'); + }, + + inspect: function(useDoubleQuotes) { + var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { + var character = String.specialChar[match[0]]; + return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + }); + if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; + return "'" + escapedString.replace(/'/g, '\\\'') + "'"; + }, + + toJSON: function() { + return this.inspect(true); + }, + + unfilterJSON: function(filter) { + return this.sub(filter || Prototype.JSONFilter, '#{1}'); + }, + + isJSON: function() { + var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); + return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); + }, + + evalJSON: function(sanitize) { + var json = this.unfilterJSON(); + try { + if (!sanitize || json.isJSON()) return eval('(' + json + ')'); + } catch (e) { } + throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); + }, + + include: function(pattern) { + return this.indexOf(pattern) > -1; + }, + + startsWith: function(pattern) { + return this.indexOf(pattern) === 0; + }, + + endsWith: function(pattern) { + var d = this.length - pattern.length; + return d >= 0 && this.lastIndexOf(pattern) === d; + }, + + empty: function() { + return this == ''; + }, + + blank: function() { + return /^\s*$/.test(this); + }, + + interpolate: function(object, pattern) { + return new Template(this, pattern).evaluate(object); + } +}); + +if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { + escapeHTML: function() { + return this.replace(/&/g,'&').replace(//g,'>'); + }, + unescapeHTML: function() { + return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); + } +}); + +String.prototype.gsub.prepareReplacement = function(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; +}; + +String.prototype.parseQuery = String.prototype.toQueryParams; + +Object.extend(String.prototype.escapeHTML, { + div: document.createElement('div'), + text: document.createTextNode('') +}); + +with (String.prototype.escapeHTML) div.appendChild(text); + +var Template = Class.create({ + initialize: function(template, pattern) { + this.template = template.toString(); + this.pattern = pattern || Template.Pattern; + }, + + evaluate: function(object) { + if (Object.isFunction(object.toTemplateReplacements)) + object = object.toTemplateReplacements(); + + return this.template.gsub(this.pattern, function(match) { + if (object == null) return ''; + + var before = match[1] || ''; + if (before == '\\') return match[2]; + + var ctx = object, expr = match[3]; + var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/, match = pattern.exec(expr); + if (match == null) return before; + + while (match != null) { + var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + ctx = ctx[comp]; + if (null == ctx || '' == match[3]) break; + expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); + match = pattern.exec(expr); + } + + return before + String.interpret(ctx); + }.bind(this)); + } +}); +Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; + +var $break = { }; + +var Enumerable = { + each: function(iterator, context) { + var index = 0; + iterator = iterator.bind(context); + try { + this._each(function(value) { + iterator(value, index++); + }); + } catch (e) { + if (e != $break) throw e; + } + return this; + }, + + eachSlice: function(number, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var index = -number, slices = [], array = this.toArray(); + while ((index += number) < array.length) + slices.push(array.slice(index, index+number)); + return slices.collect(iterator, context); + }, + + all: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = true; + this.each(function(value, index) { + result = result && !!iterator(value, index); + if (!result) throw $break; + }); + return result; + }, + + any: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result = false; + this.each(function(value, index) { + if (result = !!iterator(value, index)) + throw $break; + }); + return result; + }, + + collect: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + this.each(function(value, index) { + results.push(iterator(value, index)); + }); + return results; + }, + + detect: function(iterator, context) { + iterator = iterator.bind(context); + var result; + this.each(function(value, index) { + if (iterator(value, index)) { + result = value; + throw $break; + } + }); + return result; + }, + + findAll: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (iterator(value, index)) + results.push(value); + }); + return results; + }, + + grep: function(filter, iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var results = []; + + if (Object.isString(filter)) + filter = new RegExp(filter); + + this.each(function(value, index) { + if (filter.match(value)) + results.push(iterator(value, index)); + }); + return results; + }, + + include: function(object) { + if (Object.isFunction(this.indexOf)) + if (this.indexOf(object) != -1) return true; + + var found = false; + this.each(function(value) { + if (value == object) { + found = true; + throw $break; + } + }); + return found; + }, + + inGroupsOf: function(number, fillWith) { + fillWith = fillWith === undefined ? null : fillWith; + return this.eachSlice(number, function(slice) { + while(slice.length < number) slice.push(fillWith); + return slice; + }); + }, + + inject: function(memo, iterator, context) { + iterator = iterator.bind(context); + this.each(function(value, index) { + memo = iterator(memo, value, index); + }); + return memo; + }, + + invoke: function(method) { + var args = $A(arguments).slice(1); + return this.map(function(value) { + return value[method].apply(value, args); + }); + }, + + max: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == undefined || value >= result) + result = value; + }); + return result; + }, + + min: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var result; + this.each(function(value, index) { + value = iterator(value, index); + if (result == undefined || value < result) + result = value; + }); + return result; + }, + + partition: function(iterator, context) { + iterator = iterator ? iterator.bind(context) : Prototype.K; + var trues = [], falses = []; + this.each(function(value, index) { + (iterator(value, index) ? + trues : falses).push(value); + }); + return [trues, falses]; + }, + + pluck: function(property) { + var results = []; + this.each(function(value) { + results.push(value[property]); + }); + return results; + }, + + reject: function(iterator, context) { + iterator = iterator.bind(context); + var results = []; + this.each(function(value, index) { + if (!iterator(value, index)) + results.push(value); + }); + return results; + }, + + sortBy: function(iterator, context) { + iterator = iterator.bind(context); + return this.map(function(value, index) { + return {value: value, criteria: iterator(value, index)}; + }).sort(function(left, right) { + var a = left.criteria, b = right.criteria; + return a < b ? -1 : a > b ? 1 : 0; + }).pluck('value'); + }, + + toArray: function() { + return this.map(); + }, + + zip: function() { + var iterator = Prototype.K, args = $A(arguments); + if (Object.isFunction(args.last())) + iterator = args.pop(); + + var collections = [this].concat(args).map($A); + return this.map(function(value, index) { + return iterator(collections.pluck(index)); + }); + }, + + size: function() { + return this.toArray().length; + }, + + inspect: function() { + return '#'; + } +}; + +Object.extend(Enumerable, { + map: Enumerable.collect, + find: Enumerable.detect, + select: Enumerable.findAll, + filter: Enumerable.findAll, + member: Enumerable.include, + entries: Enumerable.toArray, + every: Enumerable.all, + some: Enumerable.any +}); +function $A(iterable) { + if (!iterable) return []; + if (iterable.toArray) return iterable.toArray(); + var length = iterable.length, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; +} + +if (Prototype.Browser.WebKit) { + function $A(iterable) { + if (!iterable) return []; + if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && + iterable.toArray) return iterable.toArray(); + var length = iterable.length, results = new Array(length); + while (length--) results[length] = iterable[length]; + return results; + } +} + +Array.from = $A; + +Object.extend(Array.prototype, Enumerable); + +if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; + +Object.extend(Array.prototype, { + _each: function(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + }, + + clear: function() { + this.length = 0; + return this; + }, + + first: function() { + return this[0]; + }, + + last: function() { + return this[this.length - 1]; + }, + + compact: function() { + return this.select(function(value) { + return value != null; + }); + }, + + flatten: function() { + return this.inject([], function(array, value) { + return array.concat(Object.isArray(value) ? + value.flatten() : [value]); + }); + }, + + without: function() { + var values = $A(arguments); + return this.select(function(value) { + return !values.include(value); + }); + }, + + reverse: function(inline) { + return (inline !== false ? this : this.toArray())._reverse(); + }, + + reduce: function() { + return this.length > 1 ? this : this[0]; + }, + + uniq: function(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + }, + + intersect: function(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + }, + + clone: function() { + return [].concat(this); + }, + + size: function() { + return this.length; + }, + + inspect: function() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + }, + + toJSON: function() { + var results = []; + this.each(function(object) { + var value = Object.toJSON(object); + if (value !== undefined) results.push(value); + }); + return '[' + results.join(', ') + ']'; + } +}); + +// use native browser JS 1.6 implementation if available +if (Object.isFunction(Array.prototype.forEach)) + Array.prototype._each = Array.prototype.forEach; + +if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; +}; + +if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; +}; + +Array.prototype.toArray = Array.prototype.clone; + +function $w(string) { + if (!Object.isString(string)) return []; + string = string.strip(); + return string ? string.split(/\s+/) : []; +} + +if (Prototype.Browser.Opera){ + Array.prototype.concat = function() { + var array = []; + for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); + for (var i = 0, length = arguments.length; i < length; i++) { + if (Object.isArray(arguments[i])) { + for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) + array.push(arguments[i][j]); + } else { + array.push(arguments[i]); + } + } + return array; + }; +} +Object.extend(Number.prototype, { + toColorPart: function() { + return this.toPaddedString(2, 16); + }, + + succ: function() { + return this + 1; + }, + + times: function(iterator) { + $R(0, this, true).each(iterator); + return this; + }, + + toPaddedString: function(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + }, + + toJSON: function() { + return isFinite(this) ? this.toString() : 'null'; + } +}); + +$w('abs round ceil floor').each(function(method){ + Number.prototype[method] = Math[method].methodize(); +}); +function $H(object) { + return new Hash(object); +}; + +var Hash = Class.create(Enumerable, (function() { + if (function() { + var i = 0, Test = function(value) { this.key = value }; + Test.prototype.key = 'foo'; + for (var property in new Test('bar')) i++; + return i > 1; + }()) { + function each(iterator) { + var cache = []; + for (var key in this._object) { + var value = this._object[key]; + if (cache.include(key)) continue; + cache.push(key); + var pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + } else { + function each(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + } + + function toQueryPair(key, value) { + if (Object.isUndefined(value)) return key; + return key + '=' + encodeURIComponent(String.interpret(value)); + } + + return { + initialize: function(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + }, + + _each: each, + + set: function(key, value) { + return this._object[key] = value; + }, + + get: function(key) { + return this._object[key]; + }, + + unset: function(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + }, + + toObject: function() { + return Object.clone(this._object); + }, + + keys: function() { + return this.pluck('key'); + }, + + values: function() { + return this.pluck('value'); + }, + + index: function(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + }, + + merge: function(object) { + return this.clone().update(object); + }, + + update: function(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + }, + + toQueryString: function() { + return this.map(function(pair) { + var key = encodeURIComponent(pair.key), values = pair.value; + + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return values.map(toQueryPair.curry(key)).join('&'); + } + return toQueryPair(key, values); + }).join('&'); + }, + + inspect: function() { + return '#'; + }, + + toJSON: function() { + return Object.toJSON(this.toObject()); + }, + + clone: function() { + return new Hash(this); + } + } +})()); + +Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; +Hash.from = $H; +var ObjectRange = Class.create(Enumerable, { + initialize: function(start, end, exclusive) { + this.start = start; + this.end = end; + this.exclusive = exclusive; + }, + + _each: function(iterator) { + var value = this.start; + while (this.include(value)) { + iterator(value); + value = value.succ(); + } + }, + + include: function(value) { + if (value < this.start) + return false; + if (this.exclusive) + return value < this.end; + return value <= this.end; + } +}); + +var $R = function(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +}; + +var Ajax = { + getTransport: function() { + return Try.these( + function() {return new XMLHttpRequest()}, + function() {return new ActiveXObject('Msxml2.XMLHTTP')}, + function() {return new ActiveXObject('Microsoft.XMLHTTP')} + ) || false; + }, + + activeRequestCount: 0 +}; + +Ajax.Responders = { + responders: [], + + _each: function(iterator) { + this.responders._each(iterator); + }, + + register: function(responder) { + if (!this.include(responder)) + this.responders.push(responder); + }, + + unregister: function(responder) { + this.responders = this.responders.without(responder); + }, + + dispatch: function(callback, request, transport, json) { + this.each(function(responder) { + if (Object.isFunction(responder[callback])) { + try { + responder[callback].apply(responder, [request, transport, json]); + } catch (e) { } + } + }); + } +}; + +Object.extend(Ajax.Responders, Enumerable); + +Ajax.Responders.register({ + onCreate: function() { Ajax.activeRequestCount++ }, + onComplete: function() { Ajax.activeRequestCount-- } +}); + +Ajax.Base = Class.create({ + initialize: function(options) { + this.options = { + method: 'post', + asynchronous: true, + contentType: 'application/x-www-form-urlencoded', + encoding: 'UTF-8', + parameters: '', + evalJSON: true, + evalJS: true + }; + Object.extend(this.options, options || { }); + + this.options.method = this.options.method.toLowerCase(); + if (Object.isString(this.options.parameters)) + this.options.parameters = this.options.parameters.toQueryParams(); + } +}); + +Ajax.Request = Class.create(Ajax.Base, { + _complete: false, + + initialize: function($super, url, options) { + $super(options); + this.transport = Ajax.getTransport(); + this.request(url); + }, + + request: function(url) { + this.url = url; + this.method = this.options.method; + var params = Object.clone(this.options.parameters); + + if (!['get', 'post'].include(this.method)) { + // simulate other verbs over post + params['_method'] = this.method; + this.method = 'post'; + } + + this.parameters = params; + + if (params = Object.toQueryString(params)) { + // when GET, append parameters to URL + if (this.method == 'get') + this.url += (this.url.include('?') ? '&' : '?') + params; + else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) + params += '&_='; + } + + try { + var response = new Ajax.Response(this); + if (this.options.onCreate) this.options.onCreate(response); + Ajax.Responders.dispatch('onCreate', this, response); + + this.transport.open(this.method.toUpperCase(), this.url, + this.options.asynchronous); + + if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); + + this.transport.onreadystatechange = this.onStateChange.bind(this); + this.setRequestHeaders(); + + this.body = this.method == 'post' ? (this.options.postBody || params) : null; + this.transport.send(this.body); + + /* Force Firefox to handle ready state 4 for synchronous requests */ + if (!this.options.asynchronous && this.transport.overrideMimeType) + this.onStateChange(); + + } + catch (e) { + this.dispatchException(e); + } + }, + + onStateChange: function() { + var readyState = this.transport.readyState; + if (readyState > 1 && !((readyState == 4) && this._complete)) + this.respondToReadyState(this.transport.readyState); + }, + + setRequestHeaders: function() { + var headers = { + 'X-Requested-With': 'XMLHttpRequest', + 'X-Prototype-Version': Prototype.Version, + 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' + }; + + if (this.method == 'post') { + headers['Content-type'] = this.options.contentType + + (this.options.encoding ? '; charset=' + this.options.encoding : ''); + + /* Force "Connection: close" for older Mozilla browsers to work + * around a bug where XMLHttpRequest sends an incorrect + * Content-length header. See Mozilla Bugzilla #246651. + */ + if (this.transport.overrideMimeType && + (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) + headers['Connection'] = 'close'; + } + + // user-defined headers + if (typeof this.options.requestHeaders == 'object') { + var extras = this.options.requestHeaders; + + if (Object.isFunction(extras.push)) + for (var i = 0, length = extras.length; i < length; i += 2) + headers[extras[i]] = extras[i+1]; + else + $H(extras).each(function(pair) { headers[pair.key] = pair.value }); + } + + for (var name in headers) + this.transport.setRequestHeader(name, headers[name]); + }, + + success: function() { + var status = this.getStatus(); + return !status || (status >= 200 && status < 300); + }, + + getStatus: function() { + try { + return this.transport.status || 0; + } catch (e) { return 0 } + }, + + respondToReadyState: function(readyState) { + var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); + + if (state == 'Complete') { + try { + this._complete = true; + (this.options['on' + response.status] + || this.options['on' + (this.success() ? 'Success' : 'Failure')] + || Prototype.emptyFunction)(response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + var contentType = response.getHeader('Content-type'); + if (this.options.evalJS == 'force' + || (this.options.evalJS && contentType + && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) + this.evalResponse(); + } + + try { + (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); + Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); + } catch (e) { + this.dispatchException(e); + } + + if (state == 'Complete') { + // avoid memory leak in MSIE: clean up + this.transport.onreadystatechange = Prototype.emptyFunction; + } + }, + + getHeader: function(name) { + try { + return this.transport.getResponseHeader(name); + } catch (e) { return null } + }, + + evalResponse: function() { + try { + return eval((this.transport.responseText || '').unfilterJSON()); + } catch (e) { + this.dispatchException(e); + } + }, + + dispatchException: function(exception) { + (this.options.onException || Prototype.emptyFunction)(this, exception); + Ajax.Responders.dispatch('onException', this, exception); + } +}); + +Ajax.Request.Events = + ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + +Ajax.Response = Class.create({ + initialize: function(request){ + this.request = request; + var transport = this.transport = request.transport, + readyState = this.readyState = transport.readyState; + + if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + this.status = this.getStatus(); + this.statusText = this.getStatusText(); + this.responseText = String.interpret(transport.responseText); + this.headerJSON = this._getHeaderJSON(); + } + + if(readyState == 4) { + var xml = transport.responseXML; + this.responseXML = xml === undefined ? null : xml; + this.responseJSON = this._getResponseJSON(); + } + }, + + status: 0, + statusText: '', + + getStatus: Ajax.Request.prototype.getStatus, + + getStatusText: function() { + try { + return this.transport.statusText || ''; + } catch (e) { return '' } + }, + + getHeader: Ajax.Request.prototype.getHeader, + + getAllHeaders: function() { + try { + return this.getAllResponseHeaders(); + } catch (e) { return null } + }, + + getResponseHeader: function(name) { + return this.transport.getResponseHeader(name); + }, + + getAllResponseHeaders: function() { + return this.transport.getAllResponseHeaders(); + }, + + _getHeaderJSON: function() { + var json = this.getHeader('X-JSON'); + if (!json) return null; + json = decodeURIComponent(escape(json)); + try { + return json.evalJSON(this.request.options.sanitizeJSON); + } catch (e) { + this.request.dispatchException(e); + } + }, + + _getResponseJSON: function() { + var options = this.request.options; + if (!options.evalJSON || (options.evalJSON != 'force' && + !(this.getHeader('Content-type') || '').include('application/json'))) + return null; + try { + return this.transport.responseText.evalJSON(options.sanitizeJSON); + } catch (e) { + this.request.dispatchException(e); + } + } +}); + +Ajax.Updater = Class.create(Ajax.Request, { + initialize: function($super, container, url, options) { + this.container = { + success: (container.success || container), + failure: (container.failure || (container.success ? null : container)) + }; + + options = options || { }; + var onComplete = options.onComplete; + options.onComplete = (function(response, param) { + this.updateContent(response.responseText); + if (Object.isFunction(onComplete)) onComplete(response, param); + }).bind(this); + + $super(url, options); + }, + + updateContent: function(responseText) { + var receiver = this.container[this.success() ? 'success' : 'failure'], + options = this.options; + + if (!options.evalScripts) responseText = responseText.stripScripts(); + + if (receiver = $(receiver)) { + if (options.insertion) { + if (Object.isString(options.insertion)) { + var insertion = { }; insertion[options.insertion] = responseText; + receiver.insert(insertion); + } + else options.insertion(receiver, responseText); + } + else receiver.update(responseText); + } + + if (this.success()) { + if (this.onComplete) this.onComplete.bind(this).defer(); + } + } +}); + +Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { + initialize: function($super, container, url, options) { + $super(options); + this.onComplete = this.options.onComplete; + + this.frequency = (this.options.frequency || 2); + this.decay = (this.options.decay || 1); + + this.updater = { }; + this.container = container; + this.url = url; + + this.start(); + }, + + start: function() { + this.options.onComplete = this.updateComplete.bind(this); + this.onTimerEvent(); + }, + + stop: function() { + this.updater.options.onComplete = undefined; + clearTimeout(this.timer); + (this.onComplete || Prototype.emptyFunction).apply(this, arguments); + }, + + updateComplete: function(response) { + if (this.options.decay) { + this.decay = (response.responseText == this.lastText ? + this.decay * this.options.decay : 1); + + this.lastText = response.responseText; + } + this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); + }, + + onTimerEvent: function() { + this.updater = new Ajax.Updater(this.container, this.url, this.options); + } +}); +function $(element) { + if (arguments.length > 1) { + for (var i = 0, elements = [], length = arguments.length; i < length; i++) + elements.push($(arguments[i])); + return elements; + } + if (Object.isString(element)) + element = document.getElementById(element); + return Element.extend(element); +} + +if (Prototype.BrowserFeatures.XPath) { + document._getElementsByXPath = function(expression, parentElement) { + var results = []; + var query = document.evaluate(expression, $(parentElement) || document, + null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); + for (var i = 0, length = query.snapshotLength; i < length; i++) + results.push(Element.extend(query.snapshotItem(i))); + return results; + }; +} + +/*--------------------------------------------------------------------------*/ + +if (!window.Node) var Node = { }; + +if (!Node.ELEMENT_NODE) { + // DOM level 2 ECMAScript Language Binding + Object.extend(Node, { + ELEMENT_NODE: 1, + ATTRIBUTE_NODE: 2, + TEXT_NODE: 3, + CDATA_SECTION_NODE: 4, + ENTITY_REFERENCE_NODE: 5, + ENTITY_NODE: 6, + PROCESSING_INSTRUCTION_NODE: 7, + COMMENT_NODE: 8, + DOCUMENT_NODE: 9, + DOCUMENT_TYPE_NODE: 10, + DOCUMENT_FRAGMENT_NODE: 11, + NOTATION_NODE: 12 + }); +} + +(function() { + var element = this.Element; + this.Element = function(tagName, attributes) { + attributes = attributes || { }; + tagName = tagName.toLowerCase(); + var cache = Element.cache; + if (Prototype.Browser.IE && attributes.name) { + tagName = '<' + tagName + ' name="' + attributes.name + '">'; + delete attributes.name; + return Element.writeAttribute(document.createElement(tagName), attributes); + } + if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); + return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); + }; + Object.extend(this.Element, element || { }); +}).call(window); + +Element.cache = { }; + +Element.Methods = { + visible: function(element) { + return $(element).style.display != 'none'; + }, + + toggle: function(element) { + element = $(element); + Element[Element.visible(element) ? 'hide' : 'show'](element); + return element; + }, + + hide: function(element) { + $(element).style.display = 'none'; + return element; + }, + + show: function(element) { + $(element).style.display = ''; + return element; + }, + + remove: function(element) { + element = $(element); + element.parentNode.removeChild(element); + return element; + }, + + update: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + content = Object.toHTML(content); + element.innerHTML = content.stripScripts(); + content.evalScripts.bind(content).defer(); + return element; + }, + + replace: function(element, content) { + element = $(element); + if (content && content.toElement) content = content.toElement(); + else if (!Object.isElement(content)) { + content = Object.toHTML(content); + var range = element.ownerDocument.createRange(); + range.selectNode(element); + content.evalScripts.bind(content).defer(); + content = range.createContextualFragment(content.stripScripts()); + } + element.parentNode.replaceChild(content, element); + return element; + }, + + insert: function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = {bottom:insertions}; + + var content, t, range; + + for (position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + t = Element._insertionTranslations[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + t.insert(element, content); + continue; + } + + content = Object.toHTML(content); + + range = element.ownerDocument.createRange(); + t.initializeRange(element, range); + t.insert(element, range.createContextualFragment(content.stripScripts())); + + content.evalScripts.bind(content).defer(); + } + + return element; + }, + + wrap: function(element, wrapper, attributes) { + element = $(element); + if (Object.isElement(wrapper)) + $(wrapper).writeAttribute(attributes || { }); + else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); + else wrapper = new Element('div', wrapper); + if (element.parentNode) + element.parentNode.replaceChild(wrapper, element); + wrapper.appendChild(element); + return wrapper; + }, + + inspect: function(element) { + element = $(element); + var result = '<' + element.tagName.toLowerCase(); + $H({'id': 'id', 'className': 'class'}).each(function(pair) { + var property = pair.first(), attribute = pair.last(); + var value = (element[property] || '').toString(); + if (value) result += ' ' + attribute + '=' + value.inspect(true); + }); + return result + '>'; + }, + + recursivelyCollect: function(element, property) { + element = $(element); + var elements = []; + while (element = element[property]) + if (element.nodeType == 1) + elements.push(Element.extend(element)); + return elements; + }, + + ancestors: function(element) { + return $(element).recursivelyCollect('parentNode'); + }, + + descendants: function(element) { + return $A($(element).getElementsByTagName('*')).each(Element.extend); + }, + + firstDescendant: function(element) { + element = $(element).firstChild; + while (element && element.nodeType != 1) element = element.nextSibling; + return $(element); + }, + + immediateDescendants: function(element) { + if (!(element = $(element).firstChild)) return []; + while (element && element.nodeType != 1) element = element.nextSibling; + if (element) return [element].concat($(element).nextSiblings()); + return []; + }, + + previousSiblings: function(element) { + return $(element).recursivelyCollect('previousSibling'); + }, + + nextSiblings: function(element) { + return $(element).recursivelyCollect('nextSibling'); + }, + + siblings: function(element) { + element = $(element); + return element.previousSiblings().reverse().concat(element.nextSiblings()); + }, + + match: function(element, selector) { + if (Object.isString(selector)) + selector = new Selector(selector); + return selector.match($(element)); + }, + + up: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(element.parentNode); + var ancestors = element.ancestors(); + return expression ? Selector.findElement(ancestors, expression, index) : + ancestors[index || 0]; + }, + + down: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + var descendants = element.descendants(); + return expression ? Selector.findElement(descendants, expression, index) : + descendants[index || 0]; + }, + + previous: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); + var previousSiblings = element.previousSiblings(); + return expression ? Selector.findElement(previousSiblings, expression, index) : + previousSiblings[index || 0]; + }, + + next: function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); + var nextSiblings = element.nextSiblings(); + return expression ? Selector.findElement(nextSiblings, expression, index) : + nextSiblings[index || 0]; + }, + + select: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element, args); + }, + + adjacent: function() { + var args = $A(arguments), element = $(args.shift()); + return Selector.findChildElements(element.parentNode, args).without(element); + }, + + identify: function(element) { + element = $(element); + var id = element.readAttribute('id'), self = arguments.callee; + if (id) return id; + do { id = 'anonymous_element_' + self.counter++ } while ($(id)); + element.writeAttribute('id', id); + return id; + }, + + readAttribute: function(element, name) { + element = $(element); + if (Prototype.Browser.IE) { + var t = Element._attributeTranslations.read; + if (t.values[name]) return t.values[name](element, name); + if (t.names[name]) name = t.names[name]; + if (name.include(':')) { + return (!element.attributes || !element.attributes[name]) ? null : + element.attributes[name].value; + } + } + return element.getAttribute(name); + }, + + writeAttribute: function(element, name, value) { + element = $(element); + var attributes = { }, t = Element._attributeTranslations.write; + + if (typeof name == 'object') attributes = name; + else attributes[name] = value === undefined ? true : value; + + for (var attr in attributes) { + var name = t.names[attr] || attr, value = attributes[attr]; + if (t.values[attr]) name = t.values[attr](element, value); + if (value === false || value === null) + element.removeAttribute(name); + else if (value === true) + element.setAttribute(name, name); + else element.setAttribute(name, value); + } + return element; + }, + + getHeight: function(element) { + return $(element).getDimensions().height; + }, + + getWidth: function(element) { + return $(element).getDimensions().width; + }, + + classNames: function(element) { + return new Element.ClassNames(element); + }, + + hasClassName: function(element, className) { + if (!(element = $(element))) return; + var elementClassName = element.className; + return (elementClassName.length > 0 && (elementClassName == className || + new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); + }, + + addClassName: function(element, className) { + if (!(element = $(element))) return; + if (!element.hasClassName(className)) + element.className += (element.className ? ' ' : '') + className; + return element; + }, + + removeClassName: function(element, className) { + if (!(element = $(element))) return; + element.className = element.className.replace( + new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); + return element; + }, + + toggleClassName: function(element, className) { + if (!(element = $(element))) return; + return element[element.hasClassName(className) ? + 'removeClassName' : 'addClassName'](className); + }, + + // removes whitespace-only text node children + cleanWhitespace: function(element) { + element = $(element); + var node = element.firstChild; + while (node) { + var nextNode = node.nextSibling; + if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) + element.removeChild(node); + node = nextNode; + } + return element; + }, + + empty: function(element) { + return $(element).innerHTML.blank(); + }, + + descendantOf: function(element, ancestor) { + element = $(element), ancestor = $(ancestor); + + if (element.compareDocumentPosition) + return (element.compareDocumentPosition(ancestor) & 8) === 8; + + if (element.sourceIndex && !Prototype.Browser.Opera) { + var e = element.sourceIndex, a = ancestor.sourceIndex, + nextAncestor = ancestor.nextSibling; + if (!nextAncestor) { + do { ancestor = ancestor.parentNode; } + while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); + } + if (nextAncestor) return (e > a && e < nextAncestor.sourceIndex); + } + + while (element = element.parentNode) + if (element == ancestor) return true; + return false; + }, + + scrollTo: function(element) { + element = $(element); + var pos = element.cumulativeOffset(); + window.scrollTo(pos[0], pos[1]); + return element; + }, + + getStyle: function(element, style) { + element = $(element); + style = style == 'float' ? 'cssFloat' : style.camelize(); + var value = element.style[style]; + if (!value) { + var css = document.defaultView.getComputedStyle(element, null); + value = css ? css[style] : null; + } + if (style == 'opacity') return value ? parseFloat(value) : 1.0; + return value == 'auto' ? null : value; + }, + + getOpacity: function(element) { + return $(element).getStyle('opacity'); + }, + + setStyle: function(element, styles) { + element = $(element); + var elementStyle = element.style, match; + if (Object.isString(styles)) { + element.style.cssText += ';' + styles; + return styles.include('opacity') ? + element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; + } + for (var property in styles) + if (property == 'opacity') element.setOpacity(styles[property]); + else + elementStyle[(property == 'float' || property == 'cssFloat') ? + (elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') : + property] = styles[property]; + + return element; + }, + + setOpacity: function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + return element; + }, + + getDimensions: function(element) { + element = $(element); + var display = $(element).getStyle('display'); + if (display != 'none' && display != null) // Safari bug + return {width: element.offsetWidth, height: element.offsetHeight}; + + // All *Width and *Height properties give 0 on elements with display none, + // so enable the element temporarily + var els = element.style; + var originalVisibility = els.visibility; + var originalPosition = els.position; + var originalDisplay = els.display; + els.visibility = 'hidden'; + els.position = 'absolute'; + els.display = 'block'; + var originalWidth = element.clientWidth; + var originalHeight = element.clientHeight; + els.display = originalDisplay; + els.position = originalPosition; + els.visibility = originalVisibility; + return {width: originalWidth, height: originalHeight}; + }, + + makePositioned: function(element) { + element = $(element); + var pos = Element.getStyle(element, 'position'); + if (pos == 'static' || !pos) { + element._madePositioned = true; + element.style.position = 'relative'; + // Opera returns the offset relative to the positioning context, when an + // element is position relative but top and left have not been defined + if (window.opera) { + element.style.top = 0; + element.style.left = 0; + } + } + return element; + }, + + undoPositioned: function(element) { + element = $(element); + if (element._madePositioned) { + element._madePositioned = undefined; + element.style.position = + element.style.top = + element.style.left = + element.style.bottom = + element.style.right = ''; + } + return element; + }, + + makeClipping: function(element) { + element = $(element); + if (element._overflow) return element; + element._overflow = Element.getStyle(element, 'overflow') || 'auto'; + if (element._overflow !== 'hidden') + element.style.overflow = 'hidden'; + return element; + }, + + undoClipping: function(element) { + element = $(element); + if (!element._overflow) return element; + element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; + element._overflow = null; + return element; + }, + + cumulativeOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + positionedOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (element.tagName == 'BODY') break; + var p = Element.getStyle(element, 'position'); + if (p == 'relative' || p == 'absolute') break; + } + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + absolutize: function(element) { + element = $(element); + if (element.getStyle('position') == 'absolute') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + var offsets = element.positionedOffset(); + var top = offsets[1]; + var left = offsets[0]; + var width = element.clientWidth; + var height = element.clientHeight; + + element._originalLeft = left - parseFloat(element.style.left || 0); + element._originalTop = top - parseFloat(element.style.top || 0); + element._originalWidth = element.style.width; + element._originalHeight = element.style.height; + + element.style.position = 'absolute'; + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.width = width + 'px'; + element.style.height = height + 'px'; + return element; + }, + + relativize: function(element) { + element = $(element); + if (element.getStyle('position') == 'relative') return; + // Position.prepare(); // To be done manually by Scripty when it needs it. + + element.style.position = 'relative'; + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); + var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + element.style.height = element._originalHeight; + element.style.width = element._originalWidth; + return element; + }, + + cumulativeScrollOffset: function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return Element._returnOffset(valueL, valueT); + }, + + getOffsetParent: function(element) { + if (element.offsetParent) return $(element.offsetParent); + if (element == document.body) return $(element); + + while ((element = element.parentNode) && element != document.body) + if (Element.getStyle(element, 'position') != 'static') + return $(element); + + return $(document.body); + }, + + viewportOffset: function(forElement) { + var valueT = 0, valueL = 0; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + + // Safari fix + if (element.offsetParent == document.body && + Element.getStyle(element, 'position') == 'absolute') break; + + } while (element = element.offsetParent); + + element = forElement; + do { + if (!Prototype.Browser.Opera || element.tagName == 'BODY') { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + + return Element._returnOffset(valueL, valueT); + }, + + clonePosition: function(element, source) { + var options = Object.extend({ + setLeft: true, + setTop: true, + setWidth: true, + setHeight: true, + offsetTop: 0, + offsetLeft: 0 + }, arguments[2] || { }); + + // find page position of source + source = $(source); + var p = source.viewportOffset(); + + // find coordinate system to use + element = $(element); + var delta = [0, 0]; + var parent = null; + // delta [0,0] will do fine with position: fixed elements, + // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { + parent = element.getOffsetParent(); + delta = parent.viewportOffset(); + } + + // correct by body offsets (fixes Safari) + if (parent == document.body) { + delta[0] -= document.body.offsetLeft; + delta[1] -= document.body.offsetTop; + } + + // set position + if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; + if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; + if (options.setWidth) element.style.width = source.offsetWidth + 'px'; + if (options.setHeight) element.style.height = source.offsetHeight + 'px'; + return element; + } +}; + +Element.Methods.identify.counter = 1; + +Object.extend(Element.Methods, { + getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants +}); + +Element._attributeTranslations = { + write: { + names: { + className: 'class', + htmlFor: 'for' + }, + values: { } + } +}; + + +if (!document.createRange || Prototype.Browser.Opera) { + Element.Methods.insert = function(element, insertions) { + element = $(element); + + if (Object.isString(insertions) || Object.isNumber(insertions) || + Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) + insertions = { bottom: insertions }; + + var t = Element._insertionTranslations, content, position, pos, tagName; + + for (position in insertions) { + content = insertions[position]; + position = position.toLowerCase(); + pos = t[position]; + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + pos.insert(element, content); + continue; + } + + content = Object.toHTML(content); + tagName = ((position == 'before' || position == 'after') + ? element.parentNode : element).tagName.toUpperCase(); + + if (t.tags[tagName]) { + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + if (position == 'top' || position == 'after') fragments.reverse(); + fragments.each(pos.insert.curry(element)); + } + else element.insertAdjacentHTML(pos.adjacency, content.stripScripts()); + + content.evalScripts.bind(content).defer(); + } + + return element; + }; +} + +if (Prototype.Browser.Opera) { + Element.Methods._getStyle = Element.Methods.getStyle; + Element.Methods.getStyle = function(element, style) { + switch(style) { + case 'left': + case 'top': + case 'right': + case 'bottom': + if (Element._getStyle(element, 'position') == 'static') return null; + default: return Element._getStyle(element, style); + } + }; + Element.Methods._readAttribute = Element.Methods.readAttribute; + Element.Methods.readAttribute = function(element, attribute) { + if (attribute == 'title') return element.title; + return Element._readAttribute(element, attribute); + }; +} + +else if (Prototype.Browser.IE) { + $w('positionedOffset getOffsetParent viewportOffset').each(function(method) { + Element.Methods[method] = Element.Methods[method].wrap( + function(proceed, element) { + element = $(element); + var position = element.getStyle('position'); + if (position != 'static') return proceed(element); + element.setStyle({ position: 'relative' }); + var value = proceed(element); + element.setStyle({ position: position }); + return value; + } + ); + }); + + Element.Methods.getStyle = function(element, style) { + element = $(element); + style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); + var value = element.style[style]; + if (!value && element.currentStyle) value = element.currentStyle[style]; + + if (style == 'opacity') { + if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) + if (value[1]) return parseFloat(value[1]) / 100; + return 1.0; + } + + if (value == 'auto') { + if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) + return element['offset' + style.capitalize()] + 'px'; + return null; + } + return value; + }; + + Element.Methods.setOpacity = function(element, value) { + function stripAlpha(filter){ + return filter.replace(/alpha\([^\)]*\)/gi,''); + } + element = $(element); + var currentStyle = element.currentStyle; + if ((currentStyle && !currentStyle.hasLayout) || + (!currentStyle && element.style.zoom == 'normal')) + element.style.zoom = 1; + + var filter = element.getStyle('filter'), style = element.style; + if (value == 1 || value === '') { + (filter = stripAlpha(filter)) ? + style.filter = filter : style.removeAttribute('filter'); + return element; + } else if (value < 0.00001) value = 0; + style.filter = stripAlpha(filter) + + 'alpha(opacity=' + (value * 100) + ')'; + return element; + }; + + Element._attributeTranslations = { + read: { + names: { + 'class': 'className', + 'for': 'htmlFor' + }, + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: function(element, attribute) { + var attribute = element.getAttribute(attribute); + return attribute ? attribute.toString().slice(23, -2) : null; + }, + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } + } + } + }; + + Element._attributeTranslations.write = { + names: Object.clone(Element._attributeTranslations.read.names), + values: { + checked: function(element, value) { + element.checked = !!value; + }, + + style: function(element, value) { + element.style.cssText = value ? value : ''; + } + } + }; + + Element._attributeTranslations.has = {}; + + $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + + 'encType maxLength readOnly longDesc').each(function(attr) { + Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; + Element._attributeTranslations.has[attr.toLowerCase()] = attr; + }); + + (function(v) { + Object.extend(v, { + href: v._getAttr, + src: v._getAttr, + type: v._getAttr, + action: v._getAttrNode, + disabled: v._flag, + checked: v._flag, + readonly: v._flag, + multiple: v._flag, + onload: v._getEv, + onunload: v._getEv, + onclick: v._getEv, + ondblclick: v._getEv, + onmousedown: v._getEv, + onmouseup: v._getEv, + onmouseover: v._getEv, + onmousemove: v._getEv, + onmouseout: v._getEv, + onfocus: v._getEv, + onblur: v._getEv, + onkeypress: v._getEv, + onkeydown: v._getEv, + onkeyup: v._getEv, + onsubmit: v._getEv, + onreset: v._getEv, + onselect: v._getEv, + onchange: v._getEv + }); + })(Element._attributeTranslations.read.values); +} + +else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1) ? 0.999999 : + (value === '') ? '' : (value < 0.00001) ? 0 : value; + return element; + }; +} + +else if (Prototype.Browser.WebKit) { + Element.Methods.setOpacity = function(element, value) { + element = $(element); + element.style.opacity = (value == 1 || value === '') ? '' : + (value < 0.00001) ? 0 : value; + + if (value == 1) + if(element.tagName == 'IMG' && element.width) { + element.width++; element.width--; + } else try { + var n = document.createTextNode(' '); + element.appendChild(n); + element.removeChild(n); + } catch (e) { } + + return element; + }; + + // Safari returns margins on body which is incorrect if the child is absolutely + // positioned. For performance reasons, redefine Position.cumulativeOffset for + // KHTML/WebKit only. + Element.Methods.cumulativeOffset = function(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == document.body) + if (Element.getStyle(element, 'position') == 'absolute') break; + + element = element.offsetParent; + } while (element); + + return Element._returnOffset(valueL, valueT); + }; +} + +if (Prototype.Browser.IE || Prototype.Browser.Opera) { + // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements + Element.Methods.update = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) return element.update().insert(content); + + content = Object.toHTML(content); + var tagName = element.tagName.toUpperCase(); + + if (tagName in Element._insertionTranslations.tags) { + $A(element.childNodes).each(function(node) { element.removeChild(node) }); + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { element.appendChild(node) }); + } + else element.innerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +if (document.createElement('div').outerHTML) { + Element.Methods.replace = function(element, content) { + element = $(element); + + if (content && content.toElement) content = content.toElement(); + if (Object.isElement(content)) { + element.parentNode.replaceChild(content, element); + return element; + } + + content = Object.toHTML(content); + var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); + + if (Element._insertionTranslations.tags[tagName]) { + var nextSibling = element.next(); + var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + parent.removeChild(element); + if (nextSibling) + fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); + else + fragments.each(function(node) { parent.appendChild(node) }); + } + else element.outerHTML = content.stripScripts(); + + content.evalScripts.bind(content).defer(); + return element; + }; +} + +Element._returnOffset = function(l, t) { + var result = [l, t]; + result.left = l; + result.top = t; + return result; +}; + +Element._getContentFromAnonymousElement = function(tagName, html) { + var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + div.innerHTML = t[0] + html + t[1]; + t[2].times(function() { div = div.firstChild }); + return $A(div.childNodes); +}; + +Element._insertionTranslations = { + before: { + adjacency: 'beforeBegin', + insert: function(element, node) { + element.parentNode.insertBefore(node, element); + }, + initializeRange: function(element, range) { + range.setStartBefore(element); + } + }, + top: { + adjacency: 'afterBegin', + insert: function(element, node) { + element.insertBefore(node, element.firstChild); + }, + initializeRange: function(element, range) { + range.selectNodeContents(element); + range.collapse(true); + } + }, + bottom: { + adjacency: 'beforeEnd', + insert: function(element, node) { + element.appendChild(node); + } + }, + after: { + adjacency: 'afterEnd', + insert: function(element, node) { + element.parentNode.insertBefore(node, element.nextSibling); + }, + initializeRange: function(element, range) { + range.setStartAfter(element); + } + }, + tags: { + TABLE: ['', '
', 1], + TBODY: ['', '
', 2], + TR: ['', '
', 3], + TD: ['
', '
', 4], + SELECT: ['', 1] + } +}; + +(function() { + this.bottom.initializeRange = this.top.initializeRange; + Object.extend(this.tags, { + THEAD: this.tags.TBODY, + TFOOT: this.tags.TBODY, + TH: this.tags.TD + }); +}).call(Element._insertionTranslations); + +Element.Methods.Simulated = { + hasAttribute: function(element, attribute) { + attribute = Element._attributeTranslations.has[attribute] || attribute; + var node = $(element).getAttributeNode(attribute); + return node && node.specified; + } +}; + +Element.Methods.ByTag = { }; + +Object.extend(Element, Element.Methods); + +if (!Prototype.BrowserFeatures.ElementExtensions && + document.createElement('div').__proto__) { + window.HTMLElement = { }; + window.HTMLElement.prototype = document.createElement('div').__proto__; + Prototype.BrowserFeatures.ElementExtensions = true; +} + +Element.extend = (function() { + if (Prototype.BrowserFeatures.SpecificElementExtensions) + return Prototype.K; + + var Methods = { }, ByTag = Element.Methods.ByTag; + + var extend = Object.extend(function(element) { + if (!element || element._extendedByPrototype || + element.nodeType != 1 || element == window) return element; + + var methods = Object.clone(Methods), + tagName = element.tagName, property, value; + + // extend methods for specific tags + if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); + + for (property in methods) { + value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + + element._extendedByPrototype = Prototype.emptyFunction; + return element; + + }, { + refresh: function() { + // extend methods for all tags (Safari doesn't need this) + if (!Prototype.BrowserFeatures.ElementExtensions) { + Object.extend(Methods, Element.Methods); + Object.extend(Methods, Element.Methods.Simulated); + } + } + }); + + extend.refresh(); + return extend; +})(); + +Element.hasAttribute = function(element, attribute) { + if (element.hasAttribute) return element.hasAttribute(attribute); + return Element.Methods.Simulated.hasAttribute(element, attribute); +}; + +Element.addMethods = function(methods) { + var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; + + if (!methods) { + Object.extend(Form, Form.Methods); + Object.extend(Form.Element, Form.Element.Methods); + Object.extend(Element.Methods.ByTag, { + "FORM": Object.clone(Form.Methods), + "INPUT": Object.clone(Form.Element.Methods), + "SELECT": Object.clone(Form.Element.Methods), + "TEXTAREA": Object.clone(Form.Element.Methods) + }); + } + + if (arguments.length == 2) { + var tagName = methods; + methods = arguments[1]; + } + + if (!tagName) Object.extend(Element.Methods, methods || { }); + else { + if (Object.isArray(tagName)) tagName.each(extend); + else extend(tagName); + } + + function extend(tagName) { + tagName = tagName.toUpperCase(); + if (!Element.Methods.ByTag[tagName]) + Element.Methods.ByTag[tagName] = { }; + Object.extend(Element.Methods.ByTag[tagName], methods); + } + + function copy(methods, destination, onlyIfAbsent) { + onlyIfAbsent = onlyIfAbsent || false; + for (var property in methods) { + var value = methods[property]; + if (!Object.isFunction(value)) continue; + if (!onlyIfAbsent || !(property in destination)) + destination[property] = value.methodize(); + } + } + + function findDOMClass(tagName) { + var klass; + var trans = { + "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", + "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", + "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", + "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", + "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": + "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": + "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": + "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": + "FrameSet", "IFRAME": "IFrame" + }; + if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName + 'Element'; + if (window[klass]) return window[klass]; + klass = 'HTML' + tagName.capitalize() + 'Element'; + if (window[klass]) return window[klass]; + + window[klass] = { }; + window[klass].prototype = document.createElement(tagName).__proto__; + return window[klass]; + } + + if (F.ElementExtensions) { + copy(Element.Methods, HTMLElement.prototype); + copy(Element.Methods.Simulated, HTMLElement.prototype, true); + } + + if (F.SpecificElementExtensions) { + for (var tag in Element.Methods.ByTag) { + var klass = findDOMClass(tag); + if (Object.isUndefined(klass)) continue; + copy(T[tag], klass.prototype); + } + } + + Object.extend(Element, Element.Methods); + delete Element.ByTag; + + if (Element.extend.refresh) Element.extend.refresh(); + Element.cache = { }; +}; + +document.viewport = { + getDimensions: function() { + var dimensions = { }; + $w('width height').each(function(d) { + var D = d.capitalize(); + dimensions[d] = self['inner' + D] || + (document.documentElement['client' + D] || document.body['client' + D]); + }); + return dimensions; + }, + + getWidth: function() { + return this.getDimensions().width; + }, + + getHeight: function() { + return this.getDimensions().height; + }, + + getScrollOffsets: function() { + return Element._returnOffset( + window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + } +}; +/* Portions of the Selector class are derived from Jack Slocum’s DomQuery, + * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style + * license. Please see http://www.yui-ext.com/ for more information. */ + +var Selector = Class.create({ + initialize: function(expression) { + this.expression = expression.strip(); + this.compileMatcher(); + }, + + compileMatcher: function() { + // Selectors with namespaced attributes can't use the XPath version + if (Prototype.BrowserFeatures.XPath && !(/(\[[\w-]*?:|:checked)/).test(this.expression)) + return this.compileXPathMatcher(); + + var e = this.expression, ps = Selector.patterns, h = Selector.handlers, + c = Selector.criteria, le, p, m; + + if (Selector._cache[e]) { + this.matcher = Selector._cache[e]; + return; + } + + this.matcher = ["this.matcher = function(root) {", + "var r = root, h = Selector.handlers, c = false, n;"]; + + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : + new Template(c[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.matcher.push("return h.unique(n);\n}"); + eval(this.matcher.join('\n')); + Selector._cache[this.expression] = this.matcher; + }, + + compileXPathMatcher: function() { + var e = this.expression, ps = Selector.patterns, + x = Selector.xpath, le, m; + + if (Selector._cache[e]) { + this.xpath = Selector._cache[e]; return; + } + + this.matcher = ['.//*']; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + if (m = e.match(ps[i])) { + this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : + new Template(x[i]).evaluate(m)); + e = e.replace(m[0], ''); + break; + } + } + } + + this.xpath = this.matcher.join(''); + Selector._cache[this.expression] = this.xpath; + }, + + findElements: function(root) { + root = root || document; + if (this.xpath) return document._getElementsByXPath(this.xpath, root); + return this.matcher(root); + }, + + match: function(element) { + this.tokens = []; + + var e = this.expression, ps = Selector.patterns, as = Selector.assertions; + var le, p, m; + + while (e && le !== e && (/\S/).test(e)) { + le = e; + for (var i in ps) { + p = ps[i]; + if (m = e.match(p)) { + // use the Selector.assertions methods unless the selector + // is too complex. + if (as[i]) { + this.tokens.push([i, Object.clone(m)]); + e = e.replace(m[0], ''); + } else { + // reluctantly do a document-wide search + // and look for a match in the array + return this.findElements(document).include(element); + } + } + } + } + + var match = true, name, matches; + for (var i = 0, token; token = this.tokens[i]; i++) { + name = token[0], matches = token[1]; + if (!Selector.assertions[name](element, matches)) { + match = false; break; + } + } + + return match; + }, + + toString: function() { + return this.expression; + }, + + inspect: function() { + return "#"; + } +}); + +Object.extend(Selector, { + _cache: { }, + + xpath: { + descendant: "//*", + child: "/*", + adjacent: "/following-sibling::*[1]", + laterSibling: '/following-sibling::*', + tagName: function(m) { + if (m[1] == '*') return ''; + return "[local-name()='" + m[1].toLowerCase() + + "' or local-name()='" + m[1].toUpperCase() + "']"; + }, + className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", + id: "[@id='#{1}']", + attrPresence: "[@#{1}]", + attr: function(m) { + m[3] = m[5] || m[6]; + return new Template(Selector.xpath.operators[m[2]]).evaluate(m); + }, + pseudo: function(m) { + var h = Selector.xpath.pseudos[m[1]]; + if (!h) return ''; + if (Object.isFunction(h)) return h(m); + return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); + }, + operators: { + '=': "[@#{1}='#{3}']", + '!=': "[@#{1}!='#{3}']", + '^=': "[starts-with(@#{1}, '#{3}')]", + '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", + '*=': "[contains(@#{1}, '#{3}')]", + '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", + '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" + }, + pseudos: { + 'first-child': '[not(preceding-sibling::*)]', + 'last-child': '[not(following-sibling::*)]', + 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', + 'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", + 'checked': "[@checked]", + 'disabled': "[@disabled]", + 'enabled': "[not(@disabled)]", + 'not': function(m) { + var e = m[6], p = Selector.patterns, + x = Selector.xpath, le, m, v; + + var exclusion = []; + while (e && le != e && (/\S/).test(e)) { + le = e; + for (var i in p) { + if (m = e.match(p[i])) { + v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); + exclusion.push("(" + v.substring(1, v.length - 1) + ")"); + e = e.replace(m[0], ''); + break; + } + } + } + return "[not(" + exclusion.join(" and ") + ")]"; + }, + 'nth-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); + }, + 'nth-last-child': function(m) { + return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); + }, + 'nth-of-type': function(m) { + return Selector.xpath.pseudos.nth("position() ", m); + }, + 'nth-last-of-type': function(m) { + return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); + }, + 'first-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); + }, + 'last-of-type': function(m) { + m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); + }, + 'only-of-type': function(m) { + var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); + }, + nth: function(fragment, m) { + var mm, formula = m[6], predicate; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + if (mm = formula.match(/^(\d+)$/)) // digit only + return '[' + fragment + "= " + mm[1] + ']'; + if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (mm[1] == "-") mm[1] = -1; + var a = mm[1] ? Number(mm[1]) : 1; + var b = mm[2] ? Number(mm[2]) : 0; + predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + + "((#{fragment} - #{b}) div #{a} >= 0)]"; + return new Template(predicate).evaluate({ + fragment: fragment, a: a, b: b }); + } + } + } + }, + + criteria: { + tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', + className: 'n = h.className(n, r, "#{1}", c); c = false;', + id: 'n = h.id(n, r, "#{1}", c); c = false;', + attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;', + attr: function(m) { + m[3] = (m[5] || m[6]); + return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m); + }, + pseudo: function(m) { + if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); + return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); + }, + descendant: 'c = "descendant";', + child: 'c = "child";', + adjacent: 'c = "adjacent";', + laterSibling: 'c = "laterSibling";' + }, + + patterns: { + // combinators must be listed first + // (and descendant needs to be last combinator) + laterSibling: /^\s*~\s*/, + child: /^\s*>\s*/, + adjacent: /^\s*\+\s*/, + descendant: /^\s/, + + // selectors follow + tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, + id: /^#([\w\-\*]+)(\b|$)/, + className: /^\.([\w\-\*]+)(\b|$)/, + pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s)|(?=:))/, + attrPresence: /^\[([\w]+)\]/, + attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ + }, + + // for Selector.match and Element#match + assertions: { + tagName: function(element, matches) { + return matches[1].toUpperCase() == element.tagName.toUpperCase(); + }, + + className: function(element, matches) { + return Element.hasClassName(element, matches[1]); + }, + + id: function(element, matches) { + return element.id === matches[1]; + }, + + attrPresence: function(element, matches) { + return Element.hasAttribute(element, matches[1]); + }, + + attr: function(element, matches) { + var nodeValue = Element.readAttribute(element, matches[1]); + return Selector.operators[matches[2]](nodeValue, matches[3]); + } + }, + + handlers: { + // UTILITY FUNCTIONS + // joins two collections + concat: function(a, b) { + for (var i = 0, node; node = b[i]; i++) + a.push(node); + return a; + }, + + // marks an array of nodes for counting + mark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._counted = true; + return nodes; + }, + + unmark: function(nodes) { + for (var i = 0, node; node = nodes[i]; i++) + node._counted = undefined; + return nodes; + }, + + // mark each child node with its position (for nth calls) + // "ofType" flag indicates whether we're indexing for nth-of-type + // rather than nth-child + index: function(parentNode, reverse, ofType) { + parentNode._counted = true; + if (reverse) { + for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { + var node = nodes[i]; + if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; + } + } else { + for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) + if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++; + } + }, + + // filters out duplicates and extends all nodes + unique: function(nodes) { + if (nodes.length == 0) return nodes; + var results = [], n; + for (var i = 0, l = nodes.length; i < l; i++) + if (!(n = nodes[i])._counted) { + n._counted = true; + results.push(Element.extend(n)); + } + return Selector.handlers.unmark(results); + }, + + // COMBINATOR FUNCTIONS + descendant: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName('*')); + return results; + }, + + child: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) { + for (var j = 0, children = [], child; child = node.childNodes[j]; j++) + if (child.nodeType == 1 && child.tagName != '!') results.push(child); + } + return results; + }, + + adjacent: function(nodes) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + var next = this.nextElementSibling(node); + if (next) results.push(next); + } + return results; + }, + + laterSibling: function(nodes) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + h.concat(results, Element.nextSiblings(node)); + return results; + }, + + nextElementSibling: function(node) { + while (node = node.nextSibling) + if (node.nodeType == 1) return node; + return null; + }, + + previousElementSibling: function(node) { + while (node = node.previousSibling) + if (node.nodeType == 1) return node; + return null; + }, + + // TOKEN FUNCTIONS + tagName: function(nodes, root, tagName, combinator) { + tagName = tagName.toUpperCase(); + var results = [], h = Selector.handlers; + if (nodes) { + if (combinator) { + // fastlane for ordinary descendant combinators + if (combinator == "descendant") { + for (var i = 0, node; node = nodes[i]; i++) + h.concat(results, node.getElementsByTagName(tagName)); + return results; + } else nodes = this[combinator](nodes); + if (tagName == "*") return nodes; + } + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName.toUpperCase() == tagName) results.push(node); + return results; + } else return root.getElementsByTagName(tagName); + }, + + id: function(nodes, root, id, combinator) { + var targetNode = $(id), h = Selector.handlers; + if (!targetNode) return []; + if (!nodes && root == document) return [targetNode]; + if (nodes) { + if (combinator) { + if (combinator == 'child') { + for (var i = 0, node; node = nodes[i]; i++) + if (targetNode.parentNode == node) return [targetNode]; + } else if (combinator == 'descendant') { + for (var i = 0, node; node = nodes[i]; i++) + if (Element.descendantOf(targetNode, node)) return [targetNode]; + } else if (combinator == 'adjacent') { + for (var i = 0, node; node = nodes[i]; i++) + if (Selector.handlers.previousElementSibling(targetNode) == node) + return [targetNode]; + } else nodes = h[combinator](nodes); + } + for (var i = 0, node; node = nodes[i]; i++) + if (node == targetNode) return [targetNode]; + return []; + } + return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; + }, + + className: function(nodes, root, className, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + return Selector.handlers.byClassName(nodes, root, className); + }, + + byClassName: function(nodes, root, className) { + if (!nodes) nodes = Selector.handlers.descendant([root]); + var needle = ' ' + className + ' '; + for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { + nodeClassName = node.className; + if (nodeClassName.length == 0) continue; + if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) + results.push(node); + } + return results; + }, + + attrPresence: function(nodes, root, attr) { + if (!nodes) nodes = root.getElementsByTagName("*"); + var results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (Element.hasAttribute(node, attr)) results.push(node); + return results; + }, + + attr: function(nodes, root, attr, value, operator) { + if (!nodes) nodes = root.getElementsByTagName("*"); + var handler = Selector.operators[operator], results = []; + for (var i = 0, node; node = nodes[i]; i++) { + var nodeValue = Element.readAttribute(node, attr); + if (nodeValue === null) continue; + if (handler(nodeValue, value)) results.push(node); + } + return results; + }, + + pseudo: function(nodes, name, value, root, combinator) { + if (nodes && combinator) nodes = this[combinator](nodes); + if (!nodes) nodes = root.getElementsByTagName("*"); + return Selector.pseudos[name](nodes, value, root); + } + }, + + pseudos: { + 'first-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.previousElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'last-child': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + if (Selector.handlers.nextElementSibling(node)) continue; + results.push(node); + } + return results; + }, + 'only-child': function(nodes, value, root) { + var h = Selector.handlers; + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) + results.push(node); + return results; + }, + 'nth-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root); + }, + 'nth-last-child': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true); + }, + 'nth-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, false, true); + }, + 'nth-last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, formula, root, true, true); + }, + 'first-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, false, true); + }, + 'last-of-type': function(nodes, formula, root) { + return Selector.pseudos.nth(nodes, "1", root, true, true); + }, + 'only-of-type': function(nodes, formula, root) { + var p = Selector.pseudos; + return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); + }, + + // handles the an+b logic + getIndices: function(a, b, total) { + if (a == 0) return b > 0 ? [b] : []; + return $R(1, total).inject([], function(memo, i) { + if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); + return memo; + }); + }, + + // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type + nth: function(nodes, formula, root, reverse, ofType) { + if (nodes.length == 0) return []; + if (formula == 'even') formula = '2n+0'; + if (formula == 'odd') formula = '2n+1'; + var h = Selector.handlers, results = [], indexed = [], m; + h.mark(nodes); + for (var i = 0, node; node = nodes[i]; i++) { + if (!node.parentNode._counted) { + h.index(node.parentNode, reverse, ofType); + indexed.push(node.parentNode); + } + } + if (formula.match(/^\d+$/)) { // just a number + formula = Number(formula); + for (var i = 0, node; node = nodes[i]; i++) + if (node.nodeIndex == formula) results.push(node); + } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b + if (m[1] == "-") m[1] = -1; + var a = m[1] ? Number(m[1]) : 1; + var b = m[2] ? Number(m[2]) : 0; + var indices = Selector.pseudos.getIndices(a, b, nodes.length); + for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { + for (var j = 0; j < l; j++) + if (node.nodeIndex == indices[j]) results.push(node); + } + } + h.unmark(nodes); + h.unmark(indexed); + return results; + }, + + 'empty': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) { + // IE treats comments as element nodes + if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue; + results.push(node); + } + return results; + }, + + 'not': function(nodes, selector, root) { + var h = Selector.handlers, selectorType, m; + var exclusions = new Selector(selector).findElements(root); + h.mark(exclusions); + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node._counted) results.push(node); + h.unmark(exclusions); + return results; + }, + + 'enabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (!node.disabled) results.push(node); + return results; + }, + + 'disabled': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.disabled) results.push(node); + return results; + }, + + 'checked': function(nodes, value, root) { + for (var i = 0, results = [], node; node = nodes[i]; i++) + if (node.checked) results.push(node); + return results; + } + }, + + operators: { + '=': function(nv, v) { return nv == v; }, + '!=': function(nv, v) { return nv != v; }, + '^=': function(nv, v) { return nv.startsWith(v); }, + '$=': function(nv, v) { return nv.endsWith(v); }, + '*=': function(nv, v) { return nv.include(v); }, + '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, + '|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } + }, + + matchElements: function(elements, expression) { + var matches = new Selector(expression).findElements(), h = Selector.handlers; + h.mark(matches); + for (var i = 0, results = [], element; element = elements[i]; i++) + if (element._counted) results.push(element); + h.unmark(matches); + return results; + }, + + findElement: function(elements, expression, index) { + if (Object.isNumber(expression)) { + index = expression; expression = false; + } + return Selector.matchElements(elements, expression || '*')[index || 0]; + }, + + findChildElements: function(element, expressions) { + var exprs = expressions.join(','), expressions = []; + exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { + expressions.push(m[1].strip()); + }); + var results = [], h = Selector.handlers; + for (var i = 0, l = expressions.length, selector; i < l; i++) { + selector = new Selector(expressions[i].strip()); + h.concat(results, selector.findElements(element)); + } + return (l > 1) ? h.unique(results) : results; + } +}); + +function $$() { + return Selector.findChildElements(document, $A(arguments)); +} +var Form = { + reset: function(form) { + $(form).reset(); + return form; + }, + + serializeElements: function(elements, options) { + if (typeof options != 'object') options = { hash: !!options }; + else if (options.hash === undefined) options.hash = true; + var key, value, submitted = false, submit = options.submit; + + var data = elements.inject({ }, function(result, element) { + if (!element.disabled && element.name) { + key = element.name; value = $(element).getValue(); + if (value != null && (element.type != 'submit' || (!submitted && + submit !== false && (!submit || key == submit) && (submitted = true)))) { + if (key in result) { + // a key is already present; construct an array of values + if (!Object.isArray(result[key])) result[key] = [result[key]]; + result[key].push(value); + } + else result[key] = value; + } + } + return result; + }); + + return options.hash ? data : Object.toQueryString(data); + } +}; + +Form.Methods = { + serialize: function(form, options) { + return Form.serializeElements(Form.getElements(form), options); + }, + + getElements: function(form) { + return $A($(form).getElementsByTagName('*')).inject([], + function(elements, child) { + if (Form.Element.Serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + } + ); + }, + + getInputs: function(form, typeName, name) { + form = $(form); + var inputs = form.getElementsByTagName('input'); + + if (!typeName && !name) return $A(inputs).map(Element.extend); + + for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { + var input = inputs[i]; + if ((typeName && input.type != typeName) || (name && input.name != name)) + continue; + matchingInputs.push(Element.extend(input)); + } + + return matchingInputs; + }, + + disable: function(form) { + form = $(form); + Form.getElements(form).invoke('disable'); + return form; + }, + + enable: function(form) { + form = $(form); + Form.getElements(form).invoke('enable'); + return form; + }, + + findFirstElement: function(form) { + var elements = $(form).getElements().findAll(function(element) { + return 'hidden' != element.type && !element.disabled; + }); + var firstByIndex = elements.findAll(function(element) { + return element.hasAttribute('tabIndex') && element.tabIndex >= 0; + }).sortBy(function(element) { return element.tabIndex }).first(); + + return firstByIndex ? firstByIndex : elements.find(function(element) { + return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + }); + }, + + focusFirstElement: function(form) { + form = $(form); + form.findFirstElement().activate(); + return form; + }, + + request: function(form, options) { + form = $(form), options = Object.clone(options || { }); + + var params = options.parameters, action = form.readAttribute('action') || ''; + if (action.blank()) action = window.location.href; + options.parameters = form.serialize(true); + + if (params) { + if (Object.isString(params)) params = params.toQueryParams(); + Object.extend(options.parameters, params); + } + + if (form.hasAttribute('method') && !options.method) + options.method = form.method; + + return new Ajax.Request(action, options); + } +}; + +/*--------------------------------------------------------------------------*/ + +Form.Element = { + focus: function(element) { + $(element).focus(); + return element; + }, + + select: function(element) { + $(element).select(); + return element; + } +}; + +Form.Element.Methods = { + serialize: function(element) { + element = $(element); + if (!element.disabled && element.name) { + var value = element.getValue(); + if (value != undefined) { + var pair = { }; + pair[element.name] = value; + return Object.toQueryString(pair); + } + } + return ''; + }, + + getValue: function(element) { + element = $(element); + var method = element.tagName.toLowerCase(); + return Form.Element.Serializers[method](element); + }, + + setValue: function(element, value) { + element = $(element); + var method = element.tagName.toLowerCase(); + Form.Element.Serializers[method](element, value); + return element; + }, + + clear: function(element) { + $(element).value = ''; + return element; + }, + + present: function(element) { + return $(element).value != ''; + }, + + activate: function(element) { + element = $(element); + try { + element.focus(); + if (element.select && (element.tagName.toLowerCase() != 'input' || + !['button', 'reset', 'submit'].include(element.type))) + element.select(); + } catch (e) { } + return element; + }, + + disable: function(element) { + element = $(element); + element.blur(); + element.disabled = true; + return element; + }, + + enable: function(element) { + element = $(element); + element.disabled = false; + return element; + } +}; + +/*--------------------------------------------------------------------------*/ + +var Field = Form.Element; +var $F = Form.Element.Methods.getValue; + +/*--------------------------------------------------------------------------*/ + +Form.Element.Serializers = { + input: function(element, value) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + return Form.Element.Serializers.inputSelector(element, value); + default: + return Form.Element.Serializers.textarea(element, value); + } + }, + + inputSelector: function(element, value) { + if (value === undefined) return element.checked ? element.value : null; + else element.checked = !!value; + }, + + textarea: function(element, value) { + if (value === undefined) return element.value; + else element.value = value; + }, + + select: function(element, index) { + if (index === undefined) + return this[element.type == 'select-one' ? + 'selectOne' : 'selectMany'](element); + else { + var opt, value, single = !Object.isArray(index); + for (var i = 0, length = element.length; i < length; i++) { + opt = element.options[i]; + value = this.optionValue(opt); + if (single) { + if (value == index) { + opt.selected = true; + return; + } + } + else opt.selected = index.include(value); + } + } + }, + + selectOne: function(element) { + var index = element.selectedIndex; + return index >= 0 ? this.optionValue(element.options[index]) : null; + }, + + selectMany: function(element) { + var values, length = element.length; + if (!length) return null; + + for (var i = 0, values = []; i < length; i++) { + var opt = element.options[i]; + if (opt.selected) values.push(this.optionValue(opt)); + } + return values; + }, + + optionValue: function(opt) { + // extend element because hasAttribute may not be native + return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; + } +}; + +/*--------------------------------------------------------------------------*/ + +Abstract.TimedObserver = Class.create(PeriodicalExecuter, { + initialize: function($super, element, frequency, callback) { + $super(callback, frequency); + this.element = $(element); + this.lastValue = this.getValue(); + }, + + execute: function() { + var value = this.getValue(); + if (Object.isString(this.lastValue) && Object.isString(value) ? + this.lastValue != value : String(this.lastValue) != String(value)) { + this.callback(this.element, value); + this.lastValue = value; + } + } +}); + +Form.Element.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.Observer = Class.create(Abstract.TimedObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); + +/*--------------------------------------------------------------------------*/ + +Abstract.EventObserver = Class.create({ + initialize: function(element, callback) { + this.element = $(element); + this.callback = callback; + + this.lastValue = this.getValue(); + if (this.element.tagName.toLowerCase() == 'form') + this.registerFormCallbacks(); + else + this.registerCallback(this.element); + }, + + onElementEvent: function() { + var value = this.getValue(); + if (this.lastValue != value) { + this.callback(this.element, value); + this.lastValue = value; + } + }, + + registerFormCallbacks: function() { + Form.getElements(this.element).each(this.registerCallback, this); + }, + + registerCallback: function(element) { + if (element.type) { + switch (element.type.toLowerCase()) { + case 'checkbox': + case 'radio': + Event.observe(element, 'click', this.onElementEvent.bind(this)); + break; + default: + Event.observe(element, 'change', this.onElementEvent.bind(this)); + break; + } + } + } +}); + +Form.Element.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.Element.getValue(this.element); + } +}); + +Form.EventObserver = Class.create(Abstract.EventObserver, { + getValue: function() { + return Form.serialize(this.element); + } +}); +if (!window.Event) var Event = { }; + +Object.extend(Event, { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, + + cache: { }, + + relatedTarget: function(event) { + var element; + switch(event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } +}); + +Event.Methods = (function() { + var isButton; + + if (Prototype.Browser.IE) { + var buttonMap = { 0: 1, 1: 4, 2: 2 }; + isButton = function(event, code) { + return event.button == buttonMap[code]; + }; + + } else if (Prototype.Browser.WebKit) { + isButton = function(event, code) { + switch (code) { + case 0: return event.which == 1 && !event.metaKey; + case 1: return event.which == 1 && event.metaKey; + default: return false; + } + }; + + } else { + isButton = function(event, code) { + return event.which ? (event.which === code + 1) : (event.button === code); + }; + } + + return { + isLeftClick: function(event) { return isButton(event, 0) }, + isMiddleClick: function(event) { return isButton(event, 1) }, + isRightClick: function(event) { return isButton(event, 2) }, + + element: function(event) { + var node = Event.extend(event).target; + return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); + }, + + findElement: function(event, expression) { + var element = Event.element(event); + return element.match(expression) ? element : element.up(expression); + }, + + pointer: function(event) { + return { + x: event.pageX || (event.clientX + + (document.documentElement.scrollLeft || document.body.scrollLeft)), + y: event.pageY || (event.clientY + + (document.documentElement.scrollTop || document.body.scrollTop)) + }; + }, + + pointerX: function(event) { return Event.pointer(event).x }, + pointerY: function(event) { return Event.pointer(event).y }, + + stop: function(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + event.stopped = true; + } + }; +})(); + +Event.extend = (function() { + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { + m[name] = Event.Methods[name].methodize(); + return m; + }); + + if (Prototype.Browser.IE) { + Object.extend(methods, { + stopPropagation: function() { this.cancelBubble = true }, + preventDefault: function() { this.returnValue = false }, + inspect: function() { return "[object Event]" } + }); + + return function(event) { + if (!event) return false; + if (event._extendedByPrototype) return event; + + event._extendedByPrototype = Prototype.emptyFunction; + var pointer = Event.pointer(event); + Object.extend(event, { + target: event.srcElement, + relatedTarget: Event.relatedTarget(event), + pageX: pointer.x, + pageY: pointer.y + }); + return Object.extend(event, methods); + }; + + } else { + Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; + Object.extend(Event.prototype, methods); + return Prototype.K; + } +})(); + +Object.extend(Event, (function() { + var cache = Event.cache; + + function getEventID(element) { + if (element._eventID) return element._eventID; + arguments.callee.id = arguments.callee.id || 1; + return element._eventID = ++arguments.callee.id; + } + + function getDOMEventName(eventName) { + if (eventName && eventName.include(':')) return "dataavailable"; + return eventName; + } + + function getCacheForID(id) { + return cache[id] = cache[id] || { }; + } + + function getWrappersForEventName(id, eventName) { + var c = getCacheForID(id); + return c[eventName] = c[eventName] || []; + } + + function createWrapper(element, eventName, handler) { + var id = getEventID(element); + var c = getWrappersForEventName(id, eventName); + if (c.pluck("handler").include(handler)) return false; + + var wrapper = function(event) { + if (!Event || !Event.extend || + (event.eventName && event.eventName != eventName)) + return false; + + Event.extend(event); + handler.call(element, event) + }; + + wrapper.handler = handler; + c.push(wrapper); + return wrapper; + } + + function findWrapper(id, eventName, handler) { + var c = getWrappersForEventName(id, eventName); + return c.find(function(wrapper) { return wrapper.handler == handler }); + } + + function destroyWrapper(id, eventName, handler) { + var c = getCacheForID(id); + if (!c[eventName]) return false; + c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); + } + + function destroyCache() { + for (var id in cache) + for (var eventName in cache[id]) + cache[id][eventName] = null; + } + + if (window.attachEvent) { + window.attachEvent("onunload", destroyCache); + } + + return { + observe: function(element, eventName, handler) { + element = $(element); + var name = getDOMEventName(eventName); + + var wrapper = createWrapper(element, eventName, handler); + if (!wrapper) return element; + + if (element.addEventListener) { + element.addEventListener(name, wrapper, false); + } else { + element.attachEvent("on" + name, wrapper); + } + + return element; + }, + + stopObserving: function(element, eventName, handler) { + element = $(element); + var id = getEventID(element), name = getDOMEventName(eventName); + + if (!handler && eventName) { + getWrappersForEventName(id, eventName).each(function(wrapper) { + element.stopObserving(eventName, wrapper.handler); + }); + return element; + + } else if (!eventName) { + Object.keys(getCacheForID(id)).each(function(eventName) { + element.stopObserving(eventName); + }); + return element; + } + + var wrapper = findWrapper(id, eventName, handler); + if (!wrapper) return element; + + if (element.removeEventListener) { + element.removeEventListener(name, wrapper, false); + } else { + element.detachEvent("on" + name, wrapper); + } + + destroyWrapper(id, eventName, handler); + + return element; + }, + + fire: function(element, eventName, memo) { + element = $(element); + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + if (document.createEvent) { + var event = document.createEvent("HTMLEvents"); + event.initEvent("dataavailable", true, true); + } else { + var event = document.createEventObject(); + event.eventType = "ondataavailable"; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) { + element.dispatchEvent(event); + } else { + element.fireEvent(event.eventType, event); + } + + return event; + } + }; +})()); + +Object.extend(Event, Event.Methods); + +Element.addMethods({ + fire: Event.fire, + observe: Event.observe, + stopObserving: Event.stopObserving +}); + +Object.extend(document, { + fire: Element.Methods.fire.methodize(), + observe: Element.Methods.observe.methodize(), + stopObserving: Element.Methods.stopObserving.methodize() +}); + +(function() { + /* Support for the DOMContentLoaded event is based on work by Dan Webb, + Matthias Miller, Dean Edwards and John Resig. */ + + var timer, fired = false; + + function fireContentLoadedEvent() { + if (fired) return; + if (timer) window.clearInterval(timer); + document.fire("dom:loaded"); + fired = true; + } + + if (document.addEventListener) { + if (Prototype.Browser.WebKit) { + timer = window.setInterval(function() { + if (/loaded|complete/.test(document.readyState)) + fireContentLoadedEvent(); + }, 0); + + Event.observe(window, "load", fireContentLoadedEvent); + + } else { + document.addEventListener("DOMContentLoaded", + fireContentLoadedEvent, false); + } + + } else { + document.write("'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(1.7,$mine_m)*120)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°2 : Purificateur de cristal/Générateur de Cristal/Usine de cristal ; planete.mine_m @@ -133,9 +133,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(exp(0.43*$mine_c)*205); $b=ceil(exp(0.43*$mine_c)*110); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(1.72,$mine_c)*160)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°3 : Ionisateur/Générateur d'Hydrogène/Synchronisateur d'hydrogène ; planete.mine_h @@ -144,9 +144,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(exp(0.445*$mine_h)*235); $b=ceil(exp(0.445*$mine_h)*150); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(1.75,$mine_h)*180)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°4 : Centrale solaire/Générateur d'Energie/Centrale solaire ; planete.centrale_s @@ -155,9 +155,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(exp(0.442*$centrale_s)*165); $b=ceil(exp(0.442*$centrale_s)*99); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(1.68,$centrale_s)*190)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°5 : Centrale de fusion/0/Centrale énergétique ; planete.centrale_f @@ -167,9 +167,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(1.8,$centrale_f)*300); $b=ceil(pow(1.82,$centrale_f)*230); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(1.8,$centrale_f)*300)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); } @@ -180,9 +180,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$radar)*750); $b=ceil(pow(2,$radar)*500); $c=ceil(pow(2,$radar)*50); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(2,$radar)*720)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); } @@ -192,9 +192,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$labo)*200); $b=ceil(pow(2,$labo)*150); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(2,$labo)*720)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°8 : Chantier terrestre/Chantier terrestre/Chantier terrestre ; planete.chantier_terrestre @@ -203,9 +203,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$chantier_terrestre)*520); $b=ceil(pow(2,$chantier_terrestre)*380); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(2,$chantier_terrestre)*420)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°9 : Chantier spatial/Chantier spatial/Chantier spatial ; planete.chantier_spatial @@ -215,9 +215,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$chantier_spatial)*600); $b=ceil(pow(2,$chantier_spatial)*450); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(2,$chantier_spatial)*600)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); } @@ -227,9 +227,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$caserne)*200); $b=ceil(pow(2,$caserne)*100); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(2,$caserne)*300)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°11 : Entrepôt/Entrepôt/Silo de stockage ; planete.silo @@ -238,9 +238,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$silo)*400); $b=ceil(pow(2,$silo)*260); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(2,$silo)*1200)/(pow(1.23,$centre_info)+0.0025*$ingeneieur))), 'ACTION' => $action)); // Batiment n°12 : Centrale informatique/0/Centrale informatique ; planete.centre_info @@ -250,9 +250,9 @@ $a=0; $b=0; $c=0; if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(1.7,$centre_info)*600); $b=ceil(pow(1.7,$centre_info)*420); $c=ceil(pow(1.7,$centre_info)*100); if (is_array($fileBat) && $bat == $i+1) { $tr=$fileTemps_b[0]+$fileTemps_b[1]-time(); $action = 'Construction en cours, temps restant :
'; } - elseif (is_array($fileBat) && ereg(($i+1).',',implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; + elseif (is_array($fileBat) && ereg(','.($i+1).',',','.implode(',', $fileBat).',')) $action = 'Bâtiment dans la file d\'attente'; elseif ($case <= 0) $action = 'Planète pleine'; - else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($batimeni[$i])) $template->assign_block_vars('batiment', array('IMAGE' => $batimeni[$i], 'NOM' => $batiment[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $batimede[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((pow(1.9,$centre_info)*800)/((0.0025*$ingeneieur)+1))), 'ACTION' => $action)); } diff --git a/pages/batiment_validation.php b/pages/batiment_validation.php index bfabb17..3c403c2 100644 --- a/pages/batiment_validation.php +++ b/pages/batiment_validation.php @@ -11,7 +11,7 @@ require_once('bdd.php'); require_once('noms.php'); require('../connectBDD.php'); -if (ereg($_GET['bat'].',', implode(',',$fileBat).',')) { header('Location: batiment.php?err=1'); exit; } +if (ereg(','.$_GET['bat'].',', implode(',',$fileBat).',')) { header('Location: batiment.php?err=1'); exit; } if ($_GET['bat'] == 'e' && $labo >= 1 && !ereg('e,', implode(',',$fileBat).',')) { $temps_bat = ''; @@ -45,13 +45,13 @@ else { $temps_bat = ceil((pow(1.68,$centrale_s)*190)/(pow(1.23,$centre_info)+0.0025*$ingeneieur)); $bat = 4; } - elseif ($_GET['bat'] == 5) { + elseif ($_GET['bat'] == 5 && $centrale_s >= 12 && $energie_t >= 5) { $metal -= ceil(pow(1.8,$centrale_f)*300); $cristal -= ceil(pow(1.82,$centrale_f)*230); $temps_bat = ceil((pow(1.8,$centrale_f)*300)/(pow(1.23,$centre_info)+0.0025*$ingeneieur)); $bat = 5; } - elseif ($_GET['bat'] == 6) { + elseif ($_GET['bat'] == 6 && $detection >= 1) { $metal -= ceil(pow(2,$radar)*750); $cristal -= ceil(pow(2,$radar)*500); $hydrogene -= ceil(pow(2,$radar)*50); @@ -70,7 +70,7 @@ else { $temps_bat = ceil((pow(2,$chantier_terrestre)*420)/(pow(1.23,$centre_info)+0.0025*$ingeneieur)); $bat = 8; } - elseif ($_GET['bat'] == 9) { + elseif ($_GET['bat'] == 9 && $chantier_terrestre >= 2) { $metal -= ceil(pow(2,$chantier_spatial)*600); $cristal -= ceil(pow(2,$chantier_spatial)*450); $temps_bat = ceil((pow(2,$chantier_spatial)*600)/(pow(1.23,$centre_info)+0.0025*$ingeneieur)); @@ -88,7 +88,7 @@ else { $temps_bat = ceil((pow(2,$silo)*1200)/(pow(1.23,$centre_info)+0.0025*$ingeneieur)); $bat = 11; } - elseif ($_GET['bat'] == 12) { + elseif ($_GET['bat'] == 12 && $informatique >= 2) { $metal -= ceil(pow(1.7,$centre_info)*600); $cristal -=ceil(pow(1.7,$centre_info)*420); $hydrogene -=ceil(pow(1.7,$centre_info)*100); diff --git a/pages/bdd.php b/pages/bdd.php index 4d77439..ef27831 100644 --- a/pages/bdd.php +++ b/pages/bdd.php @@ -77,10 +77,15 @@ else $bat = $fileBat[0]; if (ereg('e;',implode(',',$fileBat).';')) $bat_boucle = true; else $bat_boucle = false; $mine_m = $donnees['mine_m']; +$coeff_mine_m = $donnees['coeff_mine_m']; $mine_c = $donnees['mine_c']; +$coeff_mine_c = $donnees['coeff_mine_c']; $mine_h = $donnees['mine_h']; +$coeff_mine_h = $donnees['coeff_mine_h']; $centrale_s = $donnees['centrale_s']; +$coeff_energie_s = $donnees['coeff_centrale_s']; $centrale_f = $donnees['centrale_f']; +$coeff_energie_f = $donnees['coeff_centrale_f']; $radar = $donnees['radar']; $labo = $donnees['labo']; $chantier_terrestre = $donnees['chantier_terrestre']; @@ -102,9 +107,18 @@ $medecin = $donnees['medecin']; $ingenieur = $donnees['ingenieur']; $soldat_lourd = $donnees['soldat_lourd']; -$cons_spatial = $donnees['cons_spatial']; -$unit_s = $donnees['unit_s']; -$temps_spatial = $donnees['temps_spatial']; +//$fileTemps_s = split(' ', trim('1195902663 3600 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 ')); +$fileTemps_s = split(' ', trim($donnees['temps_spatial'])); +if (!is_array($fileTemps_s)) $temps_s = 0; +else $temps_s = $fileTemps_s[0] + $fileTemps_s[1]; +//$fileVai = split(' ', trim('1 1 2 2 5 2 2 2 2 ')); +$fileVai = split(' ', trim($donnees['unit_s'])); +if (!is_array($fileVai)) $unit_s = 0; +else $unit_s = $fileVai[0]; +if (ereg('e;',implode(',',$fileVai).';')) $vai_boucle = true; +else $vai_boucle = false; + +$temps_spatial = $temps_s; $vaisseau_1 = $donnees['vaisseau_1']; $vaisseau_2 = $donnees['vaisseau_2']; $vaisseau_3 = $donnees['vaisseau_3']; @@ -118,11 +132,18 @@ $vaisseau_10 = $donnees['vaisseau_10']; $vaisseau_11 = $donnees['vaisseau_11']; $vaisseau_12 = $donnees['vaisseau_12']; -$cons_terrestre = $donnees['cons_terrestre']; -$unit_t = $donnees['unit_t']; -$temps_t = $donnees['temps_t']; -$temps_terrestre = $temps_t; +//$fileTemps_v = split(' ', trim('1197500068 3600 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999 ')); +$fileTemps_v = split(' ', trim($donnees['temps_t'])); +if (!is_array($fileTemps_v)) $temps_v = 0; +else $temps_v = $fileTemps_v[0] + $fileTemps_v[1]; +//$fileVeh = split(' ', trim('9 9 10 10 11 11 12 12 12 ')); +$fileVeh = split(' ', trim($donnees['unit_t'])); +if (!is_array($fileVeh)) $unit_v = 0; +else $unit_v = $fileVeh[0]; +if (ereg('e;',implode(',',$fileVeh).';')) $veh_boucle = true; +else $veh_boucle = false; +$temps_terrestre = $temps_v; $vais_0 = $donnees['vais_0']; $vais_1 = $donnees['vais_1']; $vais_2 = $donnees['vais_2']; @@ -143,10 +164,9 @@ $def_5 = $donnees['def_5']; require_once('caserne_ajout.php'); require_once('batiment_ajout.php'); require_once('chantier_spacial_ajout.php'); -require_once('chantier_terrestre_ajout.php'); +//require_once('chantier_terrestre_ajout.php'); require_once('laboratoire_ajout.php'); -require_once('ajout_terrestre.php'); -mysql_close(); +require_once('defense_ajout.php'); $templates = ''; ?> \ No newline at end of file diff --git a/pages/carte.php b/pages/carte.php index 7e39d83..50c7b13 100644 --- a/pages/carte.php +++ b/pages/carte.php @@ -9,7 +9,7 @@ require('../connectBDD.php'); if (isset($_GET['galaxy'])) $g = floor($_GET['galaxy']); else $g = $_SESSION['galaxy']; if ($g < 1) $g = 1; -if ($g > 15) $g = 15; +if ($g > 15) $g = 1; if (isset($_GET['ss'])) $s=floor($_GET['ss']); else $s=$_SESSION['ss']; if ($s < 1) $s = 1; diff --git a/pages/chantier_spacial_ajout.php b/pages/chantier_spacial_ajout.php index c35366e..d1bdade 100644 --- a/pages/chantier_spacial_ajout.php +++ b/pages/chantier_spacial_ajout.php @@ -9,20 +9,42 @@ require('../connectBDD.php'); if ((time()) >= $temps_spatial && !empty($temps_spatial)) { switch ($unit_s) { - case 1: $vaisseau_1 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_1='$vaisseau_1' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 2: $vaisseau_2 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_2='$vaisseau_2' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 3: $vaisseau_3 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_3='$vaisseau_3' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 4: $vaisseau_4 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_4='$vaisseau_4' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 5: $vaisseau_5 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_5='$vaisseau_5' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 6: $vaisseau_6 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_6='$vaisseau_6' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 7: $vaisseau_7 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_7='$vaisseau_7' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 8: $vaisseau_8 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_8='$vaisseau_8' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 9: $vaisseau_9 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_9='$vaisseau_9' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 10: $vaisseau_10 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_10='$vaisseau_10' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; - case 11: $vaisseau_11 += $cons_spatial; mysql_query("UPDATE planete SET vaisseau_11='$vaisseau_11' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 1: $vaisseau_1++; mysql_query("UPDATE planete SET vaisseau_1='$vaisseau_1' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 2: $vaisseau_2++; mysql_query("UPDATE planete SET vaisseau_2='$vaisseau_2' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 3: $vaisseau_3++; mysql_query("UPDATE planete SET vaisseau_3='$vaisseau_3' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 4: $vaisseau_4++; mysql_query("UPDATE planete SET vaisseau_4='$vaisseau_4' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 5: $vaisseau_5++; mysql_query("UPDATE planete SET vaisseau_5='$vaisseau_5' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 6: $vaisseau_6++; mysql_query("UPDATE planete SET vaisseau_6='$vaisseau_6' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 7: $vaisseau_7++; mysql_query("UPDATE planete SET vaisseau_7='$vaisseau_7' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 8: $vaisseau_8++; mysql_query("UPDATE planete SET vaisseau_8='$vaisseau_8' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 9: $vaisseau_9++; mysql_query("UPDATE planete SET vaisseau_9='$vaisseau_9' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 10: $vaisseau_10++; mysql_query("UPDATE planete SET vaisseau_10='$vaisseau_10' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 11: $vaisseau_11++; mysql_query("UPDATE planete SET vaisseau_11='$vaisseau_11' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; } - mysql_query("UPDATE planete SET cons_spatial='0', unit_s='0', temps_spatial='0' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); -// @header("Location: troupes.php"); + $pos = strpos(implode(',', $fileVai).',', $vai.','); + if (!($pos === false)) { + $depart = 0; + $nb = 1; + $eff = 0; + $newArray_vai = ''; $newArray_temps_v = $fileTemps_s[0].' '; + for ($i=0 ; $i= $nb || $i < $depart) { + $newArray_vai .= $fileVai[$i].' '; + $newArray_temps_v .= $fileTemps_s[$i+1].' '; + } + elseif ($i == 0) { $newArray_temps_v = $temps_spatial.' '; $eff++; } + else $eff++; + } + $fileVai = split(' ', trim($newArray_vai)); + $fileTemps_s = split(' ', trim($newArray_temps_v)); + $temps_s = implode(' ', $fileTemps_s); + $vai = implode(' ', $fileVai); +$pos=$_SESSION['pos']; + + if (count($fileTemps_s) == 0 || count($fileTemps_s) == 1 || count($fileVai) == 0) mysql_query("UPDATE planete SET temps_spatial='', unit_s='' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + else mysql_query("UPDATE planete SET temps_spatial='$temps_s', unit_s='$vai' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + } } +mysql_close(); ?> \ No newline at end of file diff --git a/pages/chantier_spatial.php b/pages/chantier_spatial.php index f63a78a..2c04231 100644 --- a/pages/chantier_spatial.php +++ b/pages/chantier_spatial.php @@ -6,23 +6,47 @@ $galaxy=$_SESSION['galaxy']; $ss=$_SESSION['ss']; $pos=$_SESSION['pos']; $_SESSION['dernPage'] = 'chantier_spatial.php'; -require_once '../securite.php'; - -echo" - -Halo battle - - - - -"; require_once 'bdd.php'; -require_once 'ressource.php'; -require_once 'chantier_spacial_ajout.php'; +require_once('../securite.php'); +require_once 'ressourcetem.php'; require_once 'noms.php'; +require('../template.php'); +$template = new Template('../templates/'.$templates); -function sec ($time) { +function verification_des_ress($numtec, $metal, $calcium, $nourriture, $ress_ness_metal, $ress_ness_calcium, $ress_ness_nourriture) { + if ($metal >= $ress_ness_metal && $calcium >= $ress_ness_calcium && $nourriture >= $ress_ness_nourriture) return '
'; + else return 'Vous n\'avez pas suffisament de ressources'; +} + +function ressources($fer, $cristal, $ro, $need_fer, $need_cristal, $need_ro) { + require 'noms.php'; + $return = ''; + if ($need_fer > 0) { + if ($fer <= $need_fer) { + $z=floor($fer)-$need_fer; + $return .= ''.$ressourc[0].' : '.$need_fer.' '; + } + else $return .= $ressourc[0].' : '.$need_fer.' '; + } + if ($need_cristal > 0) { + if ($cristal <= $need_cristal) { + $z=floor($cristal)-$need_cristal; + $return .= ''.$ressourc[1].' : '.$need_cristal.' '; + } + else $return .= $ressourc[1].' : '.$need_cristal.' '; + } + if ($need_ro > 0) { + if ($ro <= $need_ro) { + $z=floor($ro)-$need_ro; + $return .= ''.$ressourc[2].' : '.$need_ro.''; + } + else $return .= $ressourc[2].' : '.$need_ro.''; + } + return $return; +} + +function sec($time) { $output = ''; $tab = array ('jour' => '86400', 'heure' => '3600', 'minute' => '60', 'seconde' => '1'); foreach ($tab as $key => $value) { @@ -37,227 +61,211 @@ function sec ($time) { if ($value != 1) $output .= ' '; } } - echo $output; + return $output; } + $f = ceil(1080/pow(1.25,($chantier_spatial-1))); $g = ceil(6300/pow(1.25,($chantier_spatial-5))); $h = ceil(8280/pow(1.25,($chantier_spatial-5))); -$i = ceil(1440/pow(1.25,($chantier_spatial-3))); +$iV = ceil(1440/pow(1.25,($chantier_spatial-3))); $j = ceil(7380/pow(1.25,($chantier_spatial-5))); $k = ceil(1200/pow(1.25,($chantier_spatial-1))); $l = ceil(4680/pow(1.25,($chantier_spatial-3))); $m = ceil(16800/pow(1.25,($chantier_spatial-6))); -$n = ceil(18060/pow(1.25,($chantier_spatial-6))); +$nV = ceil(18060/pow(1.25,($chantier_spatial-6))); $p = ceil(32400/pow(1.25,($chantier_spatial-8))); $q = ceil(117000/pow(1.25,($chantier_spatial-12))); - if ($temps_spatial > 0) $unit = $nomvaisa[--$unit_s]; -?> - - - - 0) { -if ($temps_spatial > 0) { - echo "
Construction terminé dans : "; - $tr=$temps_spatial-time(); - echo ''; - echo ''; - echo "
Construction de : ".$cons_spatial." ".$unit."

"; + if (!isset($_GET['err'])) $_GET['err'] = ''; + $ERREUR = ''; + if ($_GET['err'] == 1) $ERREUR = '
Cette technologie est déjà en cours de recherche, vous ne pouvez pas la rajouter dans la file d\'attente

'; + elseif ($_GET['err'] == 2) $ERREUR = '
La production à la chaîne a été arrêtée

'; + elseif ($_GET['err'] == 3) $ERREUR = '
Vous n\'avez pas assez de ressources pour construire autant de vaisseaux

'; + + $template->set_filenames(array('ressourcestpl' => 'ressources.tpl')); + $template->assign_vars( array('RES_IMAGE' => $RES_IMAGE, 'NOM_METAL' => $NOM_METAL, 'NOM_CRISTAL' => $NOM_CRISTAL, 'NOM_HYDROGENE' => $NOM_HYDROGENE, 'NOM_ENERGIE' => $NOM_ENERGIE, 'RES_METAL' => $RES_METAL, 'RES_CRISTAL' => $RES_CRISTAL, 'RES_HYDROGENE' => $RES_HYDROGENE, 'RES_ENERGIE' => $RES_ENERGIE, 'ERREUR' => $ERREUR, 'HEADER' => $HEADER, 'PUB' => $PUB)); + for ($i=0 ; $iassign_block_vars('planetes',array('RES_VALUE' => $Aplan_value[$i], 'RES_MORE' => $Aplan_more[$i], 'RES_REF' => $Aplan_ref[$i])); + } + + $template->set_filenames(array('chantier_spatial' => 'chantier_spatial.tpl')); + $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); + $CHAINE = ''; + if (!empty($fileVai[0])) { + $comp = 1; + for ($i=0 ; $iassign_block_vars('file',array('NOM' => $comp.' '.$nomvaisa[$fileVai[$i]-1], 'NUM' => $fileVai[$i], 'I' => $i)); + $comp = 1; + } + + } + //else $CHAINE = '
Arrêter de produire à la chaîne'; + } + $FILETXT = ''; + //if ($i == 1 && $vai_boucle == false) $CHAINE = '
Produire à la chaîne'; + } + else $FILETXT = 'Aucun vaisseau en attente'; + + $tr = $fileTemps_s[0] + $fileTemps_s[1] - time(); + if (!empty($fileVai[0])) $RESTE = $action = ''; + else $RESTE = ''; + + $template->assign_vars(array('RACE' => $race, 'FILETXT' => $FILETXT, 'CHAINE' => $CHAINE, 'RESTE' => $RESTE)); + +$a=0; $b=0; $c=0; + + // Vaisseau n°1 : Cargos de classe Inquisitor/Transporteur Leger/Cargos de classe Parabola ; planete.vaisseau_1 + if ($chantier_spatial >= 1 && $reacteur >= 4) { + $i = 0; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=1000; $b=800; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($f), 'ACTION' => $action)); + } + + // Vaisseau n°2 : Cargos de classe Interdictor/Transporteur Lourd/Cargos de classe Laden ; planete.vaisseau_2 + if ($chantier_spatial >= 5 && $reacteur_f >= 2) { + $i = 1; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=4000; $b=3000; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($g), 'ACTION' => $action)); + } + + // Vaisseau n°3 : Vaisseau de colonisation de classe Returning/Colonisateur/Vaisseaux de colonisation de classe Odyssey ; planete.vaisseau_3 + if ($chantier_spatial >= 5 && $reacteur_ff >= 1) { + $i = 2; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=9000; $b=9000; $c=1000; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($h), 'ACTION' => $action)); + } + + // Vaisseau n°4 : Sonde de reconnaissance de classe Perception/0/Drones d’espionnage de classe Clarion ; planete.vaisseau_4 + if ($chantier_spatial >= 3 && $reacteur >= 5 && $detection >= 2) { + $i = 3; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=1000; $b=1200; $c=100; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($iV), 'ACTION' => $action)); + } + + // Vaisseau n°5 : Charognard/Recycleur/Recycleurs de classe Minotaur ; planete.vaisseau_5 + if ($chantier_spatial >= 5 && $reacteur_f >= 4 && $blindage >= 5) { + $i = 4; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=15000; $b=9000; $c=1000; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($j), 'ACTION' => $action)); + } + + // Vaisseau n°6 : Séraphin/Croiseur Forruner/C709 Longsword Interceptor ; planete.vaisseau_6 + if ($chantier_spatial >= 1 && $reacteur >= 4) { + $i = 5; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=1700; $b=1220; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($k), 'ACTION' => $action)); + } + + // Vaisseau n°7 : Frégate/Super-Destroyer/Frégate ; planete.vaisseau_7 + if ($chantier_spatial >= 3 && $reacteur_f >= 3 && $armement >=1) { + $i = 6; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=5800; $b=1400; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($l), 'ACTION' => $action)); + } + + // Vaisseau n°8 : Croiseur de classe CCS/Chasseur Leger/Croiseurs de classe Halcyon ; planete.vaisseau_8 + if ($chantier_spatial >= 6 && $reacteur_ff >= 2 && $armement >= 3 && $blindage >= 4) { + $i = 7; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=20000; $b=16000; $c=1600; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($m), 'ACTION' => $action)); + } + + // Vaisseau n°9 : Croiseur de classe Reverence/Chasseur Lourd/Croiseurs de classe Marathon ; planete.vaisseau_9 + if ($chantier_spatial >= 6 && $reacteur_ff >= 3 && $armement >= 4 && $blindage >= 4) { + $i = 8; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=26000; $b=16400; $c=1600; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($nV), 'ACTION' => $action)); + } + + // Vaisseau n°10 : Porte vaisseaux/Porte-vaisseaux/Porte vaisseaux ; planete.vaisseau_10 + if ($chantier_spatial >= 8 && $reacteur_ff >= 5 && $armement >=6 && $blindage >= 6) { + $i = 9; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=60000; $b=40000; $c=3000; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($p), 'ACTION' => $action)); + } + + // Vaisseau n°11 : Station orbitale covenant/Station orbitale/Station orbitale ; planete.vaisseau_11 + if ($chantier_spatial >= 12 && $reacteur_ff >= 10 && $armement >= 12 && $blindage >= 12) { + $i = 10; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=500000; $b=400000; $c=250000; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($q), 'ACTION' => $action)); + } + + // Vaisseau n°12 : Super porte vaisseaux/Super porte-vaisseaux/Super porte-vaisseaux ; planete.vaisseau_12 + if ($chantier_spatial >= 12 && $reacteur_ff >= 10 && $armement >= 12 && $blindage >= 12) { + $i = 11; + $nom_bdd = 'vaisseau_'.($i+1); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' vaisseau(x))'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=500000; $b=400000; $c=250000; + if($bat == 9) $action = 'Le chantier spatial est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomvaisn[$i])) $template->assign_block_vars('vaisseau', array('IMAGE' => $nomvaisi[$i], 'NOM' => $nomvaisn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomvaisd[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($q), 'ACTION' => $action)); + } + + $template->pparse('chantier_spatial'); } - -echo'
-
'; - -if ($chantier_spatial >= 1 && $reacteur >= 4) { -echo'
- -
-
-'.$nomvaisn[0].''; if ($vaisseau_1 > 0) echo" (".$vaisseau_1." vaisseaux)"; -echo '
'.$nomvaisd[0].'
Besoin de : Métal : 1.000 Cristal : 800
-Temps de construction : '; sec($f); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; else { -if ($metal >= 1000 && $cristal >= 800) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } + $template->set_filenames(array('ressourcestpl' => 'ressources.tpl')); + $template->assign_vars( array('RES_IMAGE' => $RES_IMAGE, 'NOM_METAL' => $NOM_METAL, 'NOM_CRISTAL' => $NOM_CRISTAL, 'NOM_HYDROGENE' => $NOM_HYDROGENE, 'NOM_ENERGIE' => $NOM_ENERGIE, 'RES_METAL' => $RES_METAL, 'RES_CRISTAL' => $RES_CRISTAL, 'RES_HYDROGENE' => $RES_HYDROGENE, 'RES_ENERGIE' => $RES_ENERGIE, 'ERREUR' => $ERREUR, 'HEADER' => $HEADER, 'PUB' => $PUB)); + for ($i=0 ; $iassign_block_vars('planetes',array('RES_VALUE' => $Aplan_value[$i], 'RES_MORE' => $Aplan_more[$i], 'RES_REF' => $Aplan_ref[$i])); + } -if ($chantier_spatial >= 5 && $reacteur_f >= 2) { -echo'
- -
-
-'.$nomvaisn[1].''; if ($vaisseau_2 > 0) echo" (".$vaisseau_2." vaisseaux)"; -echo '
'.$nomvaisd[1].'
Besoin de : Métal : 4.000 Cristal : 3.000
-Temps de construction : '; sec($g); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 4000 && $cristal >= 3000) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } + $template->set_filenames(array('manque' => 'manque.tpl')); + $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); -if ($chantier_spatial >= 5 && $reacteur_ff >= 1) { -echo'
- -
-
-'.$nomvaisn[2].''; if ($vaisseau_3 > 0) echo" (".$vaisseau_3." vaisseaux)"; -echo '
'.$nomvaisd[2].'
Besoin de : Métal : 9.000 Cristal : 9.000 '.$ressourc[2].' : 1.000
-Temps de construction : '; sec($h); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 9000 && $cristal >= 9000 && $hydrogene >= 1000) { if ($temps_spatial < time()) { echo "



"; }} + $template->assign_vars( array('TEXTE' => 'Vous devez d\'abord construire un chantier spatial !', 'PUB' => $PUB)); + $template->pparse('manque'); } -echo '

'; } - -if ($chantier_spatial >= 3 && $reacteur >= 5 && $detection >=2) { -echo'
- -
-
-'.$nomvaisn[3].''; if ($vaisseau_4 > 0) echo" (".$vaisseau_4." vaisseaux)"; -echo '
'.$nomvaisd[3].'
Besoin de : Métal : 1.000 Cristal : 1.200 '.$ressourc[2].' : 100
-Temps de construction : '; sec($i); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 1000 && $cristal >= 1200 && $hydrogene >= 100) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 5 && $reacteur_f >= 4 && $blindage >= 5) { -echo'
- -
-
-'.$nomvaisn[4].''; if ($vaisseau_5 > 0) echo" (".$vaisseau_5." vaisseaux)"; -echo '
'.$nomvaisd[4].'
Besoin de : Métal : 15.000 Cristal : 9.000 '.$ressourc[2].' : 1.000
-Temps de construction : '; sec($j); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 15000 && $cristal >= 9000 && $hydrogene >= 1000) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 1 && $reacteur >= 4) { -echo'
- -
-
-'.$nomvaisn[5].''; if ($vaisseau_6 > 0) echo" (".$vaisseau_6." vaisseaux)"; -echo '
'.$nomvaisd[5].'
Besoin de : Métal : 1.700 Cristal : 1.220
-Temps de construction : '; sec($k); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 1700 && $cristal >= 1220) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 3 && $reacteur_f >= 3 && $armement >=1) { -echo'
- -
-
-'.$nomvaisn[6].''; if ($vaisseau_7 > 0) echo" (".$vaisseau_7." vaisseaux)"; -echo '
'.$nomvaisd[6].'
Besoin de : Métal : 5.800 Cristal : 1.400
-Temps de construction : '; sec($l); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 5800 && $cristal >= 1400) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 6 && $reacteur_ff >= 2 && $armement >=3 && $blindage >= 4) { -echo'
- -
-
-'.$nomvaisn[7].''; if ($vaisseau_8 > 0) echo" (".$vaisseau_8." vaisseaux)"; -echo '
'.$nomvaisd[7].'
Besoin de : Métal : 20.000 Cristal : 16.000 '.$ressourc[2].' : 1.600
-Temps de construction : '; sec($m); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 20000 && $cristal >= 16000 && $hydrogene >= 1600) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 6 && $reacteur_ff >= 3 && $armement >=4 && $blindage >= 4) { -echo'
- -
-
-'.$nomvaisn[8].''; if ($vaisseau_9 > 0) echo" (".$vaisseau_9." vaisseaux)"; -echo '
'.$nomvaisd[8].'
Besoin de : Métal : 26.000 Cristal : 16.400 '.$ressourc[2].' : 1.600
-Temps de construction : '; sec($n); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 26000 && $cristal >= 16400 && $hydrogene >= 1600) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 8 && $reacteur_ff >= 5 && $armement >=6 && $blindage >= 6) { -echo'
- -
-
-'.$nomvaisn[9].''; if ($vaisseau_10 > 0) echo" (".$vaisseau_10." vaisseaux)"; -echo '
'.$nomvaisd[9].'
Besoin de : Métal : 60.000 Cristal : 40.000 '.$ressourc[2].' : 3.000
-Temps de construction : '; sec($p); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 60000 && $cristal >= 40000 && $hydrogene >= 3000) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -if ($chantier_spatial >= 12 && $reacteur_ff >= 10 && $armement >=12 && $blindage >= 12) { -echo'
- -
-
-'.$nomvaisn[10].''; if ($vaisseau_11 > 0) echo " (".$vaisseau_11." vaisseaux)"; -echo '
'.$nomvaisd[10].'
Besoin de : Métal : 500.000 Cristal : 400.000 '.$ressourc[2].' : 250.000
-Temps de construction : '; sec($q); -echo '
-
'; -echo'
'; -if ($bat == 9) echo "


Chantier spatial en construction"; -else { -if ($metal >= 500000 && $cristal >= 400000 && $hydrogene >= 250000) { if ($temps_spatial < time()) { echo "



"; }} -} -echo '

'; } - -} else echo '
Vous devez d\'abord construire un chantier spatial !
'; ?> - - \ No newline at end of file +?> \ No newline at end of file diff --git a/pages/chantier_spatial_validation.php b/pages/chantier_spatial_validation.php new file mode 100644 index 0000000..1c2a120 --- /dev/null +++ b/pages/chantier_spatial_validation.php @@ -0,0 +1,139 @@ += 1 && !ereg('e,', implode(',',$fileVai).',')) { + $temps_s = ''; + $vai = 'e'; +} +else { + // Annulation de la production en chaîne si elle existe + //if (ereg('e,', implode(',',$fileVai).',')) { header('Location: annul_bat.php?bat=e&go='.$_POST['type']); exit; } + + if (!isset($_POST['sa'])) exit; + else $sa = abs(floor($_POST['sa'])); + + if ($_POST['type'] == 1) { + $metal -= 1000*$sa; + $cristal -= 800*$sa; + $temps_s = ceil(1080/pow(1.25,($chantier_spatial-1))); + $vai = 1; + } + elseif ($_POST['type'] == 2) { + $metal -= 4000*$sa; + $cristal -= 3000*$sa; + $temps_s = ceil(6300/pow(1.25,($chantier_spatial-5))); + $vai = 2; + } + elseif ($_POST['type'] == 3) { + $metal -= 9000*$sa; + $cristal -= 9000*$sa; + $hydrogene -= 1000*$sa; + $temps_s = ceil(8280/pow(1.25,($chantier_spatial-5))); + $vai = 3; + } + elseif ($_POST['type'] == 4) { + $metal -= 1000*$sa; + $cristal -= 1200*$sa; + $hydrogene -= 100*$sa; + $temps_s = ceil(1440/pow(1.25,($chantier_spatial-3))); + $vai = 4; + } + elseif ($_POST['type'] == 5 && $centrale_s >= 12 && $energie_t >= 5) { + $metal -= 15000*$sa; + $cristal -= 9000*$sa; + $hydrogene -= 1000*$sa; + $temps_s = ceil(7380/pow(1.25,($chantier_spatial-5))); + $vai = 5; + } + elseif ($_POST['type'] == 6 && $detection >= 1) { + $metal -= 1700*$sa; + $cristal -= 1220*$sa; + $temps_s = ceil(1200/pow(1.25,($chantier_spatial-1))); + $vai = 6; + } + elseif ($_POST['type'] == 7) { + $metal -= 5800*$sa; + $cristal -= 1400*$sa; + $temps_s = ceil(4680/pow(1.25,($chantier_spatial-3))); + $vai = 7; + } + elseif ($_POST['type'] == 8) { + $metal -= 20000*$sa; + $cristal -= 16000*$sa; + $hydrogene -= 1600*$sa; + $temps_s = ceil(16800/pow(1.25,($chantier_spatial-6))); + $vai = 8; + } + elseif ($_POST['type'] == 9 && $chantier_terrestre >= 2) { + $metal -= 26000*$sa; + $cristal -= 16400*$sa; + $hydrogene -= 1600*$sa; + $temps_s = ceil(18060/pow(1.25,($chantier_spatial-6))); + $vai = 9; + } + elseif ($_POST['type'] == 10) { + $metal -= 60000*$sa; + $cristal -= 40000*$sa; + $hydrogene -= 3000*$sa; + $temps_s = ceil(32400/pow(1.25,($chantier_spatial-8))); + $vai = 10; + } + elseif ($_POST['type'] == 11) { + $metal -= 500000*$sa; + $cristal -= 400000*$sa; + $hydrogene -= 250000*$sa; + $temps_s = ceil(117000/pow(1.25,($chantier_spatial-12))); + $vai = 11; + } + elseif ($_POST['type'] == 12) { + $metal -= 500000*$sa; + $cristal -= 400000*$sa; + $hydrogene -= 250000*$sa; + $temps_s = ceil(117000/pow(1.25,($chantier_spatial-12))); + $vai = 12; + } +} + +if (isset($vai) && $vai != '' && (!empty($nomvaisn[$vai-1]) || $vai == 'e' || (isset($_GET['act']) && $_GET['act'] == 'e'))) { + if ($metal >= 0 && $cristal >= 0 && $hydrogene >= 0) { + for ($c=0 ; $c < $sa ; $c++){ + $fileVai = explode(' ',implode(' ',$fileVai).' '.$vai); + } + $vai = implode(' ',$fileVai); + if (count($fileTemps_s) == 0 || count($fileTemps_s) == 1) { + $temps_ss = time(); + for ($c=0 ; $c < $sa ; $c++){ + $temps_ss .= ' '.$temps_s; + } + $temps_s = $temps_ss; + } + else { + $temps_ss = implode(' ',$fileTemps_s); + for ($c=0 ; $c < $sa ; $c++){ + $temps_ss .= ' '.$temps_s; + } + $temps_s = $temps_ss; + } + + mysql_query("UPDATE planete SET metal='$metal', cristal='$cristal', temps_spatial='$temps_s', unit_s='$vai' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + } + else { + header('Location: chantier_spatial.php?err=3'); + exit; + } +} +mysql_close(); +$vai = $fileVai[0]; +if (isset($_GET['go']) && $_GET['go'] == 1) header('Location: chantier_spatial.php?err=2'); +else header('Location: chantier_spatial.php'); +?> \ No newline at end of file diff --git a/pages/chantier_terrestre_validation.php b/pages/chantier_terrestre_validation.php new file mode 100644 index 0000000..ffa97e8 --- /dev/null +++ b/pages/chantier_terrestre_validation.php @@ -0,0 +1,94 @@ += 1 && !ereg('e,', implode(',',$fileVai).',')) { + $temps_s = ''; + $veh = 'e'; +} +else { + // Annulation de la production en chaîne si elle existe + //if (ereg('e,', implode(',',$fileVai).',')) { header('Location: annul_bat.php?bat=e&go='.$_POST['type']); exit; } + + if (!isset($_POST['sa'])) exit; + else $sa = abs(floor($_POST['sa'])); + + if ($_POST['type'] == 9) { + $metal -= ($sa*500); + $cristal -= ($sa*200); + $temps_s = $sa*ceil(480/pow(1.25,($chantier_terrestre-1))); + $veh = 9; + } + elseif ($_POST['type'] == 10) { + $metal -= ($sa*4000); + $cristal -= ($sa*2000); + $temps_s = $sa*ceil(1560/pow(1.25,($chantier_terrestre-3))); + $veh = 10; + } + elseif ($_POST['type'] == 11) { + $metal -= ($sa*4500); + $cristal -= ($sa*800); + $hydrogene -= ($sa*600); + $temps_s = $sa*ceil(1800/pow(1.25,($chantier_terrestre-4))); + $veh = 11; + } + elseif ($_POST['type'] == 12) { + $metal -= ($sa*12000); + $cristal -= ($sa*10000); + $hydrogene -= ($sa*1000); + $temps_s = $sa*ceil(6720/pow(1.25,($chantier_terrestre-4))); + $veh = 12; + } + elseif ($_POST['type'] == 13) { + $metal -= ($sa*15000); + $cristal -= ($sa*9500); + $hydrogene -= ($sa*1500); + $temps_s = $sa*ceil(12960/pow(1.25,($chantier_terrestre-8))); + $veh = 13; + } +} + +if (isset($veh) && $veh != '' && (!empty($nomvaisn[$veh-1]) || $veh == 'e' || (isset($_GET['act']) && $_GET['act'] == 'e'))) { + if ($metal >= 0 && $cristal >= 0 && $hydrogene >= 0) { + for ($c=0 ; $c < $sa ; $c++){ + $fileVai = explode(' ',implode(' ',$fileVai).' '.$veh); + } + $veh = implode(' ',$fileVai); + if (count($fileTemps_s) == 0 || count($fileTemps_s) == 1) { + $temps_ss = time(); + for ($c=0 ; $c < $sa ; $c++){ + $temps_ss .= ' '.$temps_s; + } + $temps_s = $temps_ss; + } + else { + $temps_ss = implode(' ',$fileTemps_s); + for ($c=0 ; $c < $sa ; $c++){ + $temps_ss .= ' '.$temps_s; + } + $temps_s = $temps_ss; + } + + mysql_query("UPDATE planete SET metal='$metal', cristal='$cristal', temps_spatial='$temps_s', unit_s='$veh' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + } + else { + if ($veh >= 9 ) header('Location: chantier_terrestre.php?err=3'); + else header('Location: chantier_terrestre.php?err=3'); + mysql_close(); + exit; + } +} +mysql_close(); +$veh = $fileVai[0]; +if ($veh >= 9 ) header('Location: defense.php'); +else header('Location: chantier_terrestre.php'); +?> \ No newline at end of file diff --git a/pages/defense.php b/pages/defense.php index 433db2d..ecd2dc5 100644 --- a/pages/defense.php +++ b/pages/defense.php @@ -6,23 +6,47 @@ $galaxy=$_SESSION['galaxy']; $ss=$_SESSION['ss']; $pos=$_SESSION['pos']; $_SESSION['dernPage'] = 'defense.php'; -require_once '../securite.php'; - -echo" - -Halo battle - - - - -"; require_once 'bdd.php'; -require_once 'ressource.php'; -require_once 'chantier_terrestre_ajout.php'; +require_once('../securite.php'); +require_once 'ressourcetem.php'; require_once 'noms.php'; +require('../template.php'); +$template = new Template('../templates/'.$templates); -function sec ($time) { +function verification_des_ress($numtec, $metal, $calcium, $nourriture, $ress_ness_metal, $ress_ness_calcium, $ress_ness_nourriture) { + if ($metal >= $ress_ness_metal && $calcium >= $ress_ness_calcium && $nourriture >= $ress_ness_nourriture) return '

'; + else return 'Vous n\'avez pas suffisament de ressources'; +} + +function ressources($fer, $cristal, $ro, $need_fer, $need_cristal, $need_ro) { + require 'noms.php'; + $return = ''; + if ($need_fer > 0) { + if ($fer <= $need_fer) { + $z=floor($fer)-$need_fer; + $return .= ''.$ressourc[0].' : '.$need_fer.' '; + } + else $return .= $ressourc[0].' : '.$need_fer.' '; + } + if ($need_cristal > 0) { + if ($cristal <= $need_cristal) { + $z=floor($cristal)-$need_cristal; + $return .= ''.$ressourc[1].' : '.$need_cristal.' '; + } + else $return .= $ressourc[1].' : '.$need_cristal.' '; + } + if ($need_ro > 0) { + if ($ro <= $need_ro) { + $z=floor($ro)-$need_ro; + $return .= ''.$ressourc[2].' : '.$need_ro.''; + } + else $return .= $ressourc[2].' : '.$need_ro.''; + } + return $return; +} + +function sec($time) { $output = ''; $tab = array ('jour' => '86400', 'heure' => '3600', 'minute' => '60', 'seconde' => '1'); foreach ($tab as $key => $value) { @@ -37,7 +61,7 @@ function sec ($time) { if ($value != 1) $output .= ' '; } } - echo $output; + return $output; } @@ -48,128 +72,116 @@ $i = ceil(6720/pow(1.25,($chantier_terrestre-4))); $j = ceil(12960/pow(1.25,($chantier_terrestre-8))); +if ($temps_t > 0) $unit = $nomterra[--$unit_v]; -if ($temps_t > 0) $unit = $nomterra[--$unit_t]; -?> - - - - - 0) { - if ($temps_t > 0) { - echo "
- Construction terminé dans : "; - $tr=$temps_t-time(); - echo ''; - echo ''; - echo '
Construction de : '.$cons_terrestre.' '.$unit.'

'; + if (!isset($_GET['err'])) $_GET['err'] = ''; + $ERREUR = ''; + if ($_GET['err'] == 1) $ERREUR = '
Cette technologie est déjà en cours de recherche, vous ne pouvez pas la rajouter dans la file d\'attente

'; + elseif ($_GET['err'] == 2) $ERREUR = '
La production à la chaîne a été arrêtée

'; + elseif ($_GET['err'] == 3) $ERREUR = '
Vous n\'avez pas assez de ressources pour construire autant de défenses

'; + + $template->set_filenames(array('ressourcestpl' => 'ressources.tpl')); + $template->assign_vars( array('RES_IMAGE' => $RES_IMAGE, 'NOM_METAL' => $NOM_METAL, 'NOM_CRISTAL' => $NOM_CRISTAL, 'NOM_HYDROGENE' => $NOM_HYDROGENE, 'NOM_ENERGIE' => $NOM_ENERGIE, 'RES_METAL' => $RES_METAL, 'RES_CRISTAL' => $RES_CRISTAL, 'RES_HYDROGENE' => $RES_HYDROGENE, 'RES_ENERGIE' => $RES_ENERGIE, 'ERREUR' => $ERREUR, 'HEADER' => $HEADER, 'PUB' => $PUB)); + for ($i=0 ; $iassign_block_vars('planetes',array('RES_VALUE' => $Aplan_value[$i], 'RES_MORE' => $Aplan_more[$i], 'RES_REF' => $Aplan_ref[$i])); } + $template->set_filenames(array('defenses' => 'defenses.tpl')); + $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); + $CHAINE = ''; + if (!empty($fileVeh[0])) { + $comp = 1; + for ($i=0 ; $iassign_block_vars('file',array('NOM' => $comp.' '.$nomterrn[$fileVeh[$i]-1], 'NUM' => $fileVeh[$i], 'I' => $i)); + $comp = 1; + } -if ($chantier_terrestre >= 1) { -echo'
-
+ Forum Halo-Battle @@ -343,7 +343,7 @@ echo ' + Rapport de bug @@ -355,7 +355,7 @@ echo ' + F.A.Q. diff --git a/pages/noms.php b/pages/noms.php index c04ef9b..c29d577 100644 --- a/pages/noms.php +++ b/pages/noms.php @@ -4,120 +4,120 @@ if (!isset($auth_level)) $auth_level = $_SESSION['auth_level']; require_once('flotte_dep.php'); if ($race == 'covenant') { - $ressourc = array('Métal','Cristal','Ions','Energie'); - $casernen = array('Grunt','Jackal','Drone','Elite','Sniper','Hunter','Médecin','Ingénieur','Brute'); - $casernde = array( 'Formant l\'unité d\'infanterie de base des Covenants, les Grunt se révèlent dangereux en groupe, mais ne représentent individuellement qu\'une faible menace. Petits, trapus et relativement lents, ils paniquent souvent lorsqu\'ils affrontent des ennemis qui leurs sont supérieurs ; cependant, s\'ils sont menés par un Sangheili, ils se battront jusqu\'au bout.', - 'Tireurs efficaces, les jackals sont généralement employés comme mercenaires, on les trouve souvent en positions défensives, se battant protégés par les boucliers à énergie qui les caractérisent. Un bouclier bien utilisé fait d\'un Jackal une cible difficile à atteindre, mais celui-ci doit l\'écarter pour faire feu, ce qui lui confère un point faible exploitable.', - 'Tout comme les Brutes, les Drones semblent avoir été intégrés depuis peu aux forces d\'assaut covenantes et sont déployés en masse. Apparemment d\'origine insectoïde, ce sont les gardes des vaisseaux covenants. Ils ont également la capacité - limitée - de voler et font d\'excellents tireurs, très intelligents.', - 'Les Elites constituent l\'ossature des armées covenantes. Excellents soldats, tacticiens émérites et disciplinés, combattants agressifs, ils représentent la principale force des covenants. Plus rapides, plus forts et plus résistants que les humains, ils combattent en groupes restreints et dirigent souvent des escouades de Grunts. La couleur de leur armure indique leur rang.', - 'Le sniper est une classe des jackals. Excellents tireurs de nature, les Jackals qui se sont spécialisés dans ce domaine bénéficient d\'un rang plus élevé que leurs congénères. Ils sont très destructeurs de loin mais assez peu de près. Ils ne possèdent cependant pas de bouclier de protection comme leurs frères.', - 'Les Hunters sont des ennemis incroyablement dangereux qui sont déployés plus comme du matériel que comme des soldats. Ils sont utilisés pour des tâches de démolitions ou de défense lourde et se battent toujours par deux. Ces créatures massives portent une armure quasiment impénétrable et une arme à combustible redoutable au combat.', - 'Les médecins sont sur le champ de bataille pour aider les soldats blessés par des tirs lors des affrontements. Ils peuvent réduire le nombre de morts lorsqu\'ils sont bien utilisés, et donc peuvent peut être changer l’issue de la bataille.', - 'Les ingénieurs, appelés Huragok en langage covenant, forment la seule unité non-combattante connue des forces covenantes. Celle-ci répare vos unités et véhicules sur le champ de bataille ; plus vous en recrutez, plus vos unités et véhicules au sol auront une chance de survivre.', - 'Moins bien connus que les Elites, les Brutes combattent en groupes et sont physiquement plus forts que leurs congénères. Les Brutes démontrent les mêmes aptitudes au combat que les Elites et leur nombre s\'est considérablement accru depuis le début du conflit. Ils portent une arme balistique explosive à laquelle est fixée une baïonnette.'); - $casernea = array('grunt(s)','jackal(s)','drone(s)','élite(s)','sniper(s)','hunter(s)','médecin(s)','ingénieur(s)','brute(s)'); + $ressourc = array('Métal','Cristal','Ions','Energie'); + $casernen = array('Grunt','Jackal','Drone','Elite','Sniper','Hunter','Médecin','Ingénieur','Brute'); + $casernde = array( 'Formant l\'unité d\'infanterie de base des Covenants, les Grunt se révèlent dangereux en groupe, mais ne représentent individuellement qu\'une faible menace. Petits, trapus et relativement lents, ils paniquent souvent lorsqu\'ils affrontent des ennemis qui leurs sont supérieurs ; cependant, s\'ils sont menés par un Sangheili, ils se battront jusqu\'au bout.', + 'Tireurs efficaces, les jackals sont généralement employés comme mercenaires, on les trouve souvent en positions défensives, se battant protégés par les boucliers à énergie qui les caractérisent. Un bouclier bien utilisé fait d\'un Jackal une cible difficile à atteindre, mais celui-ci doit l\'écarter pour faire feu, ce qui lui confère un point faible exploitable.', + 'Tout comme les Brutes, les Drones semblent avoir été intégrés depuis peu aux forces d\'assaut covenantes et sont déployés en masse. Apparemment d\'origine insectoïde, ce sont les gardes des vaisseaux covenants. Ils ont également la capacité - limitée - de voler et font d\'excellents tireurs, très intelligents.', + 'Les Elites constituent l\'ossature des armées covenantes. Excellents soldats, tacticiens émérites et disciplinés, combattants agressifs, ils représentent la principale force des covenants. Plus rapides, plus forts et plus résistants que les humains, ils combattent en groupes restreints et dirigent souvent des escouades de Grunts. La couleur de leur armure indique leur rang.', + 'Le sniper est une classe des jackals. Excellents tireurs de nature, les Jackals qui se sont spécialisés dans ce domaine bénéficient d\'un rang plus élevé que leurs congénères. Ils sont très destructeurs de loin mais assez peu de près. Ils ne possèdent cependant pas de bouclier de protection comme leurs frères.', + 'Les Hunters sont des ennemis incroyablement dangereux qui sont déployés plus comme du matériel que comme des soldats. Ils sont utilisés pour des tâches de démolitions ou de défense lourde et se battent toujours par deux. Ces créatures massives portent une armure quasiment impénétrable et une arme à combustible redoutable au combat.', + 'Les médecins sont sur le champ de bataille pour aider les soldats blessés par des tirs lors des affrontements. Ils peuvent réduire le nombre de morts lorsqu\'ils sont bien utilisés, et donc peuvent peut être changer l’issue de la bataille.', + 'Les ingénieurs, appelés Huragok en langage covenant, forment la seule unité non-combattante connue des forces covenantes. Celle-ci répare vos unités et véhicules sur le champ de bataille ; plus vous en recrutez, plus vos unités et véhicules au sol auront une chance de survivre.', + 'Moins bien connus que les Elites, les Brutes combattent en groupes et sont physiquement plus forts que leurs congénères. Les Brutes démontrent les mêmes aptitudes au combat que les Elites et leur nombre s\'est considérablement accru depuis le début du conflit. Ils portent une arme balistique explosive à laquelle est fixée une baïonnette.'); + $casernea = array('grunt(s)','jackal(s)','drone(s)','élite(s)','sniper(s)','hunter(s)','médecin(s)','ingénieur(s)','brute(s)'); $casernei = array('grunt1.jpg','jackal.jpg','drone.jpg','elite.jpg','jackalsniper.jpg','hunter1.jpg','medecin_c.jpg','ingenieur_c.jpg','brute.jpg'); $batimend = array('purificateur_m','purificateur_c','ionisateur','centrale_s','centrale_fusion','oeil','recherches','chantier_terrestre','???','caserne','silo','centre_info'); $batimeni = array('purificateurdemtalhb3.jpg','cristaloo3.png','ioniseurdn4.jpg','solaire.jpg','sanstitrevi7.jpg','oeilduprophetewj6.jpg','covielabocn5.jpg','chantierterrestrehg1.jpg','sanstitretruecolor09zn6.jpg','caserncov0ry.jpg','stockagebasement1cs10bl.jpg','ordianteur_hologramme.jpg'); - $batiment = array('Purificateur de métal','Purificateur de cristal','Ionisateur','Centrale solaire','Centrale de fusion','Oeil des prophètes','Centre de recherches','Chantier terrestre','Chantier spatial','Caserne','Entrepôt','Centrale informatique'); - $batimede = array( 'Le purificateur de métal vous fournie les matières premières pour la construction de vos infrastructures et de vos unités. Plus vous développerez vos purificateurs, plus ils produiront de ressources. Les purificateurs les plus développés ont aussi besoin de plus d\'énergie.', - 'Le purificateur de cristal vous fournie les ressources pour vos installations électroniques et pour les alliages. Le purificateur de cristal consomme deux fois plus d\'énergie que celui de métal. Tous les vaisseaux et bâtiments ont besoin de cristal pour leur bouclier ou encore leurs composants électroniques. La production augmente avec le développement de l’usine.', - 'L\'ionisateur utilise des ions négatifs et positifs d\'hydrogène pour créer une source conventionnelle de courant stable, servant à alimenter les bâtiments covenants qui nécessitent une arrivée massive de cette "ressource" pour actionner les divers éléments matériels des contrôles. La centrale de fusion à besoin de beaucoup d\'hydrogène pour fonctionner.', - 'Pour assurer l\'approvisionnement des purificateurs, des centrales solaires sont nécessaires. Plus ces installations sont développées, plus vous obtiendrez d’énergie pour vos purificateurs. Les centrales solaires sont la base de l\'approvisionnement pour votre planète en énergie. Elles sont composées d’un recueilleur sur le haut de sa structure qui capte en grandes quantités l’énergie solaire.', - 'La centrale à fusion vous permet de créer l’énergie nécessaire à vos purificateurs. Elles est constitué d’un réacteur à fusion qui en tournant produit de l’énergie. Sa production reste nettement inférieure à celle d’une centrale solaire.', - 'Les grands prophètes ont partagé leur savoir pour construire ces structures qui permettent de repérer les éléments s’approchants de votre planète. Le système est constitué de deux grands arcs qui envoient des signaux électriques dans l’espace et captent ceux qui reviennent présageant ainsi l’arrivée d’un vaisseau.', - 'Le centre de recherches, l\'un des bâtiments les plus importants de votre colonie, vous permet de vous accaparer des technologies aliens aujourd’hui disparues ou des technologies en cours de développement dans d’autres factions. Le niveau du centre détermine la vitesse de la recherche. Chaque planète que vous coloniserez devra être équipée d’un centre d\'étude des artefacts et des technologies.', - 'Le chantier terrestre vous permet de construire tous les véhicules atmosphériques du type ghosts, spectres ou autres. Il permet ainsi à vos armées d’accéder plus rapidement à un endroit et d’avoir un avantage avec l’armement de ces véhicules.', - 'Ce bâtiment permet la création de toutes vos unités spatiales ou volantes. La force des covenants a souvent été due à ses grandes avancées technologiques en matière d’aéronautique. Un grand chantier spatial permet de créer des unités de plus en plus fortes et de surcroît de les créer de plus en plus rapidement.', - 'Le Temple de la Guerre vous permet de créer l’élite des forces d’infanterie. Des soldats y sont fanatisés puis entraînés au maniement des armes et à la stratégie militaire. Plus vous développez le temple, plus la vitesse de production sera rapide.', - 'Les ressources qui ne sont pas encore traitées sont mises en stock dans ces entrepôts géants. Un entrepôt plus grand permet le stockage d\'une plus grande quantité de ressources. Lorsque l’entrepôt est plein, l\'extraction est stoppée. Il est grandement conseillé de développer ce genre d’infrastructure.', - 'La centrale informatique est le coeur de votre planète, le cerveau de votre territoire, analysant chaque particule détectée avec grand soin. Plus votre centrale est améliorée, plus rapidement et aisément les données seront traitées.'); - $technolo = array('Informatique','Detection','Armement','Bouclier','Maitrise de l\'énergie','Réacteur à antigravité','Réacteur à fusion','Réacteur à fusion Forerunner','Médecine','Commandement militaire',0); - $technode = array( 'L’informatique vous permet de traiter les informations de façon très rapide réduisant ainsi les temps de réactions qui dans les combats peuvent s’avérer fatales.', - 'La détection est cruciale pour préserver sa flotte et ses planètes. Développer cette technologie vous permet de construire une base « œil des prophètes » qui repèrera les vaisseaux s’approchant de votre planète.', - 'Un soldat n\'est rien sans son arme, et qu\'est-ce qu\'un soldat démuni face aux assauts féroces adverses ? Cette technologie vous permettra de rechercher de nouveaux systèmes d\'armements afin de rendre vos outils de guerre plus précis et mortels.', - 'Le bouclier est un champ de force qui entoure vos vaisseaux et les protège. Ainsi il permet à vos vaisseaux de tenir plus longtemps face aux missiles adverses, ceci s\'avérant peut être décisif dans l’issue de la bataille.', - 'L\'énergie est la base de tout. Sans énergie, pas de voyages stellaires ni même de quoi faire marcher vos installations. C\'est pourquoi l\'étude de nouvelles façons de produire de l\'énergie est vitale pour vos planètes et vaisseaux ; vos chercheurs vous permettront également d\'accéder à de nouveaux types d\'énergies, beaucoup plus intéressants.', - 'Les réacteurs à antigravité sont les moteurs basiques covenant. Ils utilisent une technologie complexe projetant des particules quantiques créant un champ gravitationnel inverse annulant ainsi la gravité présente. Le principe fonctionne également dans l\'espace puisque l\'absence de gravité dans l\'espace, sans compter les étoiles et les autres anomalies spatiales, permet une projection plus puissante du champ.', - 'Après la combustion, voici la fusion. Ce type de réacteur est beaucoup plus puissant que la combustion utilisée depuis déjà des centaines d\'années. Il génère une énergie cinétique de grande envergure. Aucun dirigeant politique désirant voyager dans le cosmos ne pourrait s’en passer.', - 'Les covenants ont découvert d’anciens réacteurs à fusion utilisant la technologie d’hyperpropulsion Forerunner. Cette technologie, beaucoup plus puissante que le réacteur conventionnel au Plasma, autorise des sauts dans le sous-espace ultra précis. Ce type de réacteur est le plus cher mais aussi le plus rapide et puissant de toute la flotte covenante.', - 'La médecine vous permet d’avoir moins de pertes au combat et ainsi d’avoir une force de frappe qui résiste plus longtemps. Au lieu de laisser mourir les soldats blessés, le médecin les soigne pour les remettre sur pied et les rendre de nouveau aptes au combat.', - 'En tant que général, vous devez avoir un esprit fin pour gagner vos batailles terrestres aussi bien que les affrontements spatiaux. C\'est pourquoi il vous faudra toujours innover en matière de stratégie, vous montrer toujours plus rusé que votre impitoyable adversaire, aussi feriez-vous bien d\'étudier de nouvelles tactiques de combat pour vous assurer une franche victoire.'); + $batiment = array('Purificateur de métal','Purificateur de cristal','Ionisateur','Centrale solaire','Centrale de fusion','Oeil des prophètes','Centre de recherches','Chantier terrestre','Chantier spatial','Caserne','Entrepôt','Centrale informatique'); + $batimede = array( 'Le purificateur de métal vous fournie les matières premières pour la construction de vos infrastructures et de vos unités. Plus vous développerez vos purificateurs, plus ils produiront de ressources. Les purificateurs les plus développés ont aussi besoin de plus d\'énergie.', + 'Le purificateur de cristal vous fournie les ressources pour vos installations électroniques et pour les alliages. Le purificateur de cristal consomme deux fois plus d\'énergie que celui de métal. Tous les vaisseaux et bâtiments ont besoin de cristal pour leur bouclier ou encore leurs composants électroniques. La production augmente avec le développement de l’usine.', + 'L\'ionisateur utilise des ions négatifs et positifs d\'hydrogène pour créer une source conventionnelle de courant stable, servant à alimenter les bâtiments covenants qui nécessitent une arrivée massive de cette "ressource" pour actionner les divers éléments matériels des contrôles. La centrale de fusion à besoin de beaucoup d\'hydrogène pour fonctionner.', + 'Pour assurer l\'approvisionnement des purificateurs, des centrales solaires sont nécessaires. Plus ces installations sont développées, plus vous obtiendrez d’énergie pour vos purificateurs. Les centrales solaires sont la base de l\'approvisionnement pour votre planète en énergie. Elles sont composées d’un recueilleur sur le haut de sa structure qui capte en grandes quantités l’énergie solaire.', + 'La centrale à fusion vous permet de créer l’énergie nécessaire à vos purificateurs. Elles est constitué d’un réacteur à fusion qui en tournant produit de l’énergie. Sa production reste nettement inférieure à celle d’une centrale solaire.', + 'Les grands prophètes ont partagé leur savoir pour construire ces structures qui permettent de repérer les éléments s’approchants de votre planète. Le système est constitué de deux grands arcs qui envoient des signaux électriques dans l’espace et captent ceux qui reviennent présageant ainsi l’arrivée d’un vaisseau.', + 'Le centre de recherches, l\'un des bâtiments les plus importants de votre colonie, vous permet de vous accaparer des technologies aliens aujourd’hui disparues ou des technologies en cours de développement dans d’autres factions. Le niveau du centre détermine la vitesse de la recherche. Chaque planète que vous coloniserez devra être équipée d’un centre d\'étude des artefacts et des technologies.', + 'Le chantier terrestre vous permet de construire tous les véhicules atmosphériques du type ghosts, spectres ou autres. Il permet ainsi à vos armées d’accéder plus rapidement à un endroit et d’avoir un avantage avec l’armement de ces véhicules.', + 'Ce bâtiment permet la création de toutes vos unités spatiales ou volantes. La force des covenants a souvent été due à ses grandes avancées technologiques en matière d’aéronautique. Un grand chantier spatial permet de créer des unités de plus en plus fortes et de surcroît de les créer de plus en plus rapidement.', + 'Le Temple de la Guerre vous permet de créer l’élite des forces d’infanterie. Des soldats y sont fanatisés puis entraînés au maniement des armes et à la stratégie militaire. Plus vous développez le temple, plus la vitesse de production sera rapide.', + 'Les ressources qui ne sont pas encore traitées sont mises en stock dans ces entrepôts géants. Un entrepôt plus grand permet le stockage d\'une plus grande quantité de ressources. Lorsque l’entrepôt est plein, l\'extraction est stoppée. Il est grandement conseillé de développer ce genre d’infrastructure.', + 'La centrale informatique est le coeur de votre planète, le cerveau de votre territoire, analysant chaque particule détectée avec grand soin. Plus votre centrale est améliorée, plus rapidement et aisément les données seront traitées.'); + $technolo = array('Informatique','Detection','Armement','Bouclier','Maitrise de l\'énergie','Réacteur à antigravité','Réacteur à fusion','Réacteur à fusion Forerunner','Médecine','Commandement militaire',0); + $technode = array( 'L’informatique vous permet de traiter les informations de façon très rapide réduisant ainsi les temps de réactions qui dans les combats peuvent s’avérer fatales.', + 'La détection est cruciale pour préserver sa flotte et ses planètes. Développer cette technologie vous permet de construire une base « œil des prophètes » qui repèrera les vaisseaux s’approchant de votre planète.', + 'Un soldat n\'est rien sans son arme, et qu\'est-ce qu\'un soldat démuni face aux assauts féroces adverses ? Cette technologie vous permettra de rechercher de nouveaux systèmes d\'armements afin de rendre vos outils de guerre plus précis et mortels.', + 'Le bouclier est un champ de force qui entoure vos vaisseaux et les protège. Ainsi il permet à vos vaisseaux de tenir plus longtemps face aux missiles adverses, ceci s\'avérant peut être décisif dans l’issue de la bataille.', + 'L\'énergie est la base de tout. Sans énergie, pas de voyages stellaires ni même de quoi faire marcher vos installations. C\'est pourquoi l\'étude de nouvelles façons de produire de l\'énergie est vitale pour vos planètes et vaisseaux ; vos chercheurs vous permettront également d\'accéder à de nouveaux types d\'énergies, beaucoup plus intéressants.', + 'Les réacteurs à antigravité sont les moteurs basiques covenant. Ils utilisent une technologie complexe projetant des particules quantiques créant un champ gravitationnel inverse annulant ainsi la gravité présente. Le principe fonctionne également dans l\'espace puisque l\'absence de gravité dans l\'espace, sans compter les étoiles et les autres anomalies spatiales, permet une projection plus puissante du champ.', + 'Après la combustion, voici la fusion. Ce type de réacteur est beaucoup plus puissant que la combustion utilisée depuis déjà des centaines d\'années. Il génère une énergie cinétique de grande envergure. Aucun dirigeant politique désirant voyager dans le cosmos ne pourrait s’en passer.', + 'Les covenants ont découvert d’anciens réacteurs à fusion utilisant la technologie d’hyperpropulsion Forerunner. Cette technologie, beaucoup plus puissante que le réacteur conventionnel au Plasma, autorise des sauts dans le sous-espace ultra précis. Ce type de réacteur est le plus cher mais aussi le plus rapide et puissant de toute la flotte covenante.', + 'La médecine vous permet d’avoir moins de pertes au combat et ainsi d’avoir une force de frappe qui résiste plus longtemps. Au lieu de laisser mourir les soldats blessés, le médecin les soigne pour les remettre sur pied et les rendre de nouveau aptes au combat.', + 'En tant que général, vous devez avoir un esprit fin pour gagner vos batailles terrestres aussi bien que les affrontements spatiaux. C\'est pourquoi il vous faudra toujours innover en matière de stratégie, vous montrer toujours plus rusé que votre impitoyable adversaire, aussi feriez-vous bien d\'étudier de nouvelles tactiques de combat pour vous assurer une franche victoire.'); $technoli = array('informatique1.jpg','detection.jpg','sanstitretruecolor04no6.jpg','boucliervaiseaucovenantey4.jpg','energie.jpg','reacteurantigravyd1.jpg','reacteur_f.jpg','reacteurfusionforerunnewu0.jpg','medecine.JPG','commandement.jpg'); - $nomvaisa = array('cargos de classe Inquisitor','grand(s) transporteur(s)','vaisseau(x) de colonisation','sonde(s)','recycleur(s)','séraphin(s)','frégate(s)','croiseur(s) de classe CCS','croiseur(s) de classe Reverence','porte-vaisseaux','station(s) orbitale','super(s) porte-vaisseaux'); + $nomvaisa = array('cargos de classe Inquisitor','grand(s) transporteur(s)','vaisseau(x) de colonisation','sonde(s)','recycleur(s)','séraphin(s)','frégate(s)','croiseur(s) de classe CCS','croiseur(s) de classe Reverence','porte-vaisseaux','station(s) orbitale','super(s) porte-vaisseaux'); $nomvaisi = array('cargosparabola.jpg','cargosladen.jpg','coviecolobv3.jpg','sonde_despionnage1.jpg','charognard.jpg','chasseurlourd7id.jpg','croiseur8er.jpg','fregate2ky.jpg','croiseur.jpg','pv.jpg','citecovenant.jpg','.jpg'); - $nomvaisn = array('Cargos de classe Inquisitor','Cargos de classe Interdictor','Vaisseau de colonisation de classe Returning','Sonde de reconnaissance de classe Perception','Charognard','Séraphin','Frégate','Croiseur de classe CCS','Croiseur de classe Reverence','Porte vaisseaux','Station orbitale covenant','Super porte vaisseaux'); - $nomvaisd = array( 'Les cargos Inquisitor sont la base du transport de troupes et de ressources covenantes, capables de transporter un grand nombre de ressources sur une grande distance. Pratiquement sans armement, le cargo est sans défense et nécessite une défense rapprochée pour les trajets de grande distance.', - 'Les cargos Interdictor sont une évolution du transport de classe Inquisitor. Ayant une capacité de transport nettement supérieure à sa version précédente. Ce transport, quoique plus récent et disposant d\'un plus grand fret, dispose du même genre de défense que le modèle antérieur, une escorte est donc fortement recommandée lors de l\'utilisation de celui-ci.', - 'Tout comme les humains, les covenants ont besoins d\'espace pour étendre leur empire et c\'est pourquoi ces vaisseaux ont été pensés et conçus. Capable de transformer la nature même d\'une planète en très peu de temps, ce vaisseau est essentiel au développement de la société covenante.', - 'Cette sonde de reconnaissance covenante est largement utilisée lorsqu\'il est trop dangereux d\'envoyer un vaisseau. Sa fonction consiste à rassembler des données sur les vaisseaux ou encore sur une planète dans un système planétaire.', - 'Chaque bataille amène des pertes des 2 côtés, et ce vaisseau est conçu pour en tirer tous les bénéfices. Le Charognard, en retrait de la flotte principale, ramasse ce qu\'il reste des vaisseaux détruits et les ramène à sa planète d\'origine où ces "déchets" pourront être utilisés pour produire des matières premières.', - 'Le plus puissant et probablement le plus craint de tous les vaisseaux Covenants. Le Séraphin est le principal vaisseau offensif dans l’espace et peut être employé comme bombardier aérien. Le Séraphin est d\'environ trois fois la taille d\'un Banshee, il possède plusieurs canons de plasma qu\'il utilise lors des engagements aériens pour éliminer des opposants de type LongsWord et Pélican.', - 'La frégate covenante est un vaisseau de tonnage moyen composant majoritairement les flottes habituelles. Équipée de lasers à impulsion et de lanceurs de torpilles au plasma latéraux, elle possède ainsi une puissance de feu raisonnable. Sa coque est aussi protégée par un bouclier énergétique la rendant beaucoup plus difficile à détruire.', - 'Ce vaisseau redoutable et titanesque sème sans le moindre doute la terreur chez l\'ennemi. Armé d\'un bout à l\'autre de lasers à impulsion, de torpilles au plasma et de bien d\'autres armes, ce croiseur est une arme extraordinaire à ne jamais sous estimer.', - 'Un des plus grands vaisseaux de combat covenant, mesurant 3000 mètres. Équipé de deux canons à projection énergétique et de sept lanceurs de torpilles, il est d\'une puissance extraordinaire. Le seul problème résidant dans le fait que son équipement demande une capacité d\'énergie phénoménale.', - 'Comme son nom l\'indique, son principal rôle est de transporter des chasseurs Seraphins, des Spirits ou d\'autres vaisseaux de taille similaire. Armé de quelques lasers à impulsion, le porte vaisseau reste un vaisseau de support plutôt qu\'un vaisseau de confrontation directe. Hypothétiquement parlant, sa capacité de tir est légèrement supérieure à celui d\'une corvette.', - 'La station spatiale covenante, construite a même un astéroide, possède un canon plasma d\'une centaine de mettre de long projetant une sphère de plasma atteignant une chaleur proche de celle du coeur d\'un soleil. Également équipé de tourelle automatique pour les chasseurs d\'efficacité moyenne, se poste orbital covenant est une arme défensive terrifiante pour toute adversaire de haut niveau ou non.', - 'Le vaisseau ultime de la flotte covenante, long de plus de 5400 mètres. Ce vaisseau est capable de transporter des quantités de chasseurs hors du commun. Armé de projecteurs énergétique et de laser à impulsion, ce vaisseau est le plus puissant après la station spatiale.'); - $nomterra = array('banshee(s)','spirit(s)','phantom','boarding craft','ghost(s)','shadow','spectre(s)','appartition(s)','shade','strong shade','tourelle(s) à barreau de combustible','canon(s) à plasma','lanceur(s) de torpilles plasma'); - $nomterrn = array('Banshees', 'Spirit', 'Phantom', 'Boarding craft', 'Ghost', 'Shadow', 'Spectre', 'Appartition', 'Shade', 'Strong shade', 'Tourelle à barreau de combustible', 'Canon à plasma', 'Lanceur de torpilles plasma'); + $nomvaisn = array('Cargos de classe Inquisitor','Cargos de classe Interdictor','Vaisseau de colonisation de classe Returning','Sonde de reconnaissance de classe Perception','Charognard','Séraphin','Frégate','Croiseur de classe CCS','Croiseur de classe Reverence','Porte vaisseaux','Station orbitale covenant','Super porte vaisseaux'); + $nomvaisd = array( 'Les cargos Inquisitor sont la base du transport de troupes et de ressources covenantes, capables de transporter un grand nombre de ressources sur une grande distance. Pratiquement sans armement, le cargo est sans défense et nécessite une défense rapprochée pour les trajets de grande distance.', + 'Les cargos Interdictor sont une évolution du transport de classe Inquisitor. Ayant une capacité de transport nettement supérieure à sa version précédente. Ce transport, quoique plus récent et disposant d\'un plus grand fret, dispose du même genre de défense que le modèle antérieur, une escorte est donc fortement recommandée lors de l\'utilisation de celui-ci.', + 'Tout comme les humains, les covenants ont besoins d\'espace pour étendre leur empire et c\'est pourquoi ces vaisseaux ont été pensés et conçus. Capable de transformer la nature même d\'une planète en très peu de temps, ce vaisseau est essentiel au développement de la société covenante.', + 'Cette sonde de reconnaissance covenante est largement utilisée lorsqu\'il est trop dangereux d\'envoyer un vaisseau. Sa fonction consiste à rassembler des données sur les vaisseaux ou encore sur une planète dans un système planétaire.', + 'Chaque bataille amène des pertes des 2 côtés, et ce vaisseau est conçu pour en tirer tous les bénéfices. Le Charognard, en retrait de la flotte principale, ramasse ce qu\'il reste des vaisseaux détruits et les ramène à sa planète d\'origine où ces "déchets" pourront être utilisés pour produire des matières premières.', + 'Le plus puissant et probablement le plus craint de tous les vaisseaux Covenants. Le Séraphin est le principal vaisseau offensif dans l’espace et peut être employé comme bombardier aérien. Le Séraphin est d\'environ trois fois la taille d\'un Banshee, il possède plusieurs canons de plasma qu\'il utilise lors des engagements aériens pour éliminer des opposants de type LongsWord et Pélican.', + 'La frégate covenante est un vaisseau de tonnage moyen composant majoritairement les flottes habituelles. Équipée de lasers à impulsion et de lanceurs de torpilles au plasma latéraux, elle possède ainsi une puissance de feu raisonnable. Sa coque est aussi protégée par un bouclier énergétique la rendant beaucoup plus difficile à détruire.', + 'Ce vaisseau redoutable et titanesque sème sans le moindre doute la terreur chez l\'ennemi. Armé d\'un bout à l\'autre de lasers à impulsion, de torpilles au plasma et de bien d\'autres armes, ce croiseur est une arme extraordinaire à ne jamais sous estimer.', + 'Un des plus grands vaisseaux de combat covenant, mesurant 3000 mètres. Équipé de deux canons à projection énergétique et de sept lanceurs de torpilles, il est d\'une puissance extraordinaire. Le seul problème résidant dans le fait que son équipement demande une capacité d\'énergie phénoménale.', + 'Comme son nom l\'indique, son principal rôle est de transporter des chasseurs Seraphins, des Spirits ou d\'autres vaisseaux de taille similaire. Armé de quelques lasers à impulsion, le porte vaisseau reste un vaisseau de support plutôt qu\'un vaisseau de confrontation directe. Hypothétiquement parlant, sa capacité de tir est légèrement supérieure à celui d\'une corvette.', + 'La station spatiale covenante, construite a même un astéroide, possède un canon plasma d\'une centaine de mettre de long projetant une sphère de plasma atteignant une chaleur proche de celle du coeur d\'un soleil. Également équipé de tourelle automatique pour les chasseurs d\'efficacité moyenne, se poste orbital covenant est une arme défensive terrifiante pour toute adversaire de haut niveau ou non.', + 'Le vaisseau ultime de la flotte covenante, long de plus de 5400 mètres. Ce vaisseau est capable de transporter des quantités de chasseurs hors du commun. Armé de projecteurs énergétique et de laser à impulsion, ce vaisseau est le plus puissant après la station spatiale.'); + $nomterra = array('banshee(s)','spirit(s)','phantom','boarding craft','ghost(s)','shadow','spectre(s)','appartition(s)','shade','strong shade','tourelle(s) à barreau de combustible','canon(s) à plasma','lanceur(s) de torpilles plasma'); + $nomterrn = array('Banshees', 'Spirit', 'Phantom', 'Boarding craft', 'Ghost', 'Shadow', 'Spectre', 'Appartition', 'Shade', 'Strong shade', 'Tourelle à barreau de combustible', 'Canon à plasma', 'Lanceur de torpilles plasma'); $nomterri = array('bansheeqp0.jpg', 'spirit1.jpg', 'phantomfu2.jpg', 'boardingcraft.jpg', 'ghostic1.jpg', 'shadow.jpg', 'spectre.jpg', 'wraith.jpg', 'shade.jpg', 'strongshade.jpg', 'tourellebarreau.jpg', 'tourelle.jpg', 'lanceur_torpilles.jpg'); - $nomterde = array( 'Rapide et maniable, le Banshee est un formidable véhicule d\'assaut aérien, efficacement blindé contre les armes à feu légères mais ne résistant cependant pas aux armes plus lourdes. Le canon à combustible dont il est équipé en fait un bombardier dangereux tout autant qu\'un chasseur rapide. Le Banshee a la possibilité de faire des tonneaux et des vrilles, ce qui serait impossible pour des véhicules à l\'aérodynamique conventionnelle.', - 'Le spirit est une navette de transport de troupes terrestre. De capacité moyenne, il peut transporter un petit contingent armé dans les zones les plus repoussées des planètes. Le spirit est équipé d\'une tourelle de type shade de puissance moyenne, qui permet de maintenir les troupes ennemis à distance jusqu\'à ce que le largage des troupes soit effectué.
Malheureusement, un manque d\'espace empêche l\'installation de générateur énergétique plus puissant qui pourrait supporter des boucliers standards ou même de faible intensité.', - 'Le Phantom est un vaisseau beaucoup plus fiable que le vaisseau de débarquement « Spirit ». Il possède trois tourelles plasma particulièrement puissantes et peut laisser tomber ses occupants à terre via un ascenseur gravitationnel sans devoir se poser. Le Phantom a un blindage beaucoup plus résistant que son prédécesseur, une puissance de feu accrue et peut transporter tout type d’équipage comme des hunters.
Le Phantom est assez nouveau dans l\'arsenal Covenant mais est rapidement devenu une crainte car son bombardement de plasma peut éliminer un bon nombre de marines.', + $nomterde = array( 'Rapide et maniable, le Banshee est un formidable véhicule d\'assaut aérien, efficacement blindé contre les armes à feu légères mais ne résistant cependant pas aux armes plus lourdes. Le canon à combustible dont il est équipé en fait un bombardier dangereux tout autant qu\'un chasseur rapide. Le Banshee a la possibilité de faire des tonneaux et des vrilles, ce qui serait impossible pour des véhicules à l\'aérodynamique conventionnelle.', + 'Le spirit est une navette de transport de troupes terrestre. De capacité moyenne, il peut transporter un petit contingent armé dans les zones les plus repoussées des planètes. Le spirit est équipé d\'une tourelle de type shade de puissance moyenne, qui permet de maintenir les troupes ennemis à distance jusqu\'à ce que le largage des troupes soit effectué.
Malheureusement, un manque d\'espace empêche l\'installation de générateur énergétique plus puissant qui pourrait supporter des boucliers standards ou même de faible intensité.', + 'Le Phantom est un vaisseau beaucoup plus fiable que le vaisseau de débarquement « Spirit ». Il possède trois tourelles plasma particulièrement puissantes et peut laisser tomber ses occupants à terre via un ascenseur gravitationnel sans devoir se poser. Le Phantom a un blindage beaucoup plus résistant que son prédécesseur, une puissance de feu accrue et peut transporter tout type d’équipage comme des hunters.
Le Phantom est assez nouveau dans l\'arsenal Covenant mais est rapidement devenu une crainte car son bombardement de plasma peut éliminer un bon nombre de marines.', '~#DESCRIPTION MANQUANTE#~ Boarding craft', - 'Le ghost est un véhicule de reconnaissance et d\'attaque rapide déployée par les Covenants dans tout combat terrestre. Cet engin, très souvent piloté par les Elites, est très maniable. Il est capable de tirer des doubles décharges de plasma surchauffées d\'une puissance de 100-250 kW. Le ghost peut également effectuer des pointes de vitesse soutenues.', - 'Le Shadow est le principal moyen de transport terrestre des troupes covenantes. Ce véhicule peut accueillir un pilote, un artilleur et jusqu\'à huit passagers en fonction du type de Covenants qui monte à bord. Il est en outre équipé pour transporter des Elites, des Brutes, des Grunts ou des Jackals. Si le Shadow est équipé d\'un canon à plasma, sa vocation reste le déploiement de troupes.', - 'Le Spectre est un transport multi troupes blindé de petite taille. Quoique relativement lent, il est tout à fait maniable et se meut avec aisance dans les espaces confinés. Ses principales faiblesses étant son manque de vitesse et d\'accélération, ses occupants demeurent tout de même relativement exposés. Le canon à plasma monté à l\'arrière représente un grand danger pour l\'ennemi et le véhicule offre par ailleurs diverses positions de tir.', - 'Lent, massif et constituant une cible de taille, ce véhicule n\'en demeure pas moins le blindé covenant le plus destructeur. Ce géant de métal est bien protégé. Le tir de couverture qu\'il peut effectuer grâce à ses mortiers à plasma redoutables en fait un ennemi incroyablement dangereux. Le fait qu\'il soit piloté par une seule personne qui contrôle le véhicule et le système d\'armement limite quelque peu son champ de manoeuvre.', - 'Les tourelles shades sont des canons stationnaires énergétiques covenant composés de deux parties, la première étant une base stable à trois pieds pour la stabilité de l’appareil, la deuxième, un siège où le canon est fixé retenu par un champ gravitationnel artificiel. Ce canon lorsqu’il tire, envoie 3 « éclairs » relativement lents et d’efficacité moyenne.', - 'Cette tourelle est une version améliorée de la shade standard. Dans les modifications de la tourelle, le système d’accélération magnétique a été révisé pour le rendre plus performant, aboutissant à des rayons plus rapides. Également, un bouclier a été ajouté à l’avant, protégeant ainsi l’utilisateur des attaques aux armes à projectiles de petit et moyen calibre pendant une période de quelques secondes lors de feux nourris.', - 'La tourelle à barreau de combustible est une version fixe de ceux des hunters avec un système de visé amélioré et de condensateur ionique permettent de tirer trois rafales à la suite sans surcharger les relais du générateur. De puissance moyenne, elle est capable de détruire facilement des warthogs et autres véhicules légers avec une facilité hors norme.', - 'Le canon à plasma n’a pas besoin de canonnier pour tirer puisque équipé d’un système de visée automatisé, il utilise une technologie d’intelligence artificielle rudimentaire pour ensuite envoyer un projectile de plasma surchauffé à haute vitesse carbonisant tout sur son passage.', - 'Utilisant un principe similaire de la tourelle à plasma, le lanceur de torpilles plasma utilise un condensateur de matière pour condenser le flux de plasma surchauffé en une masse de destruction pure. Ce système est le système de défense terrestre le plus évolué jamais construit. Son défaut majeur reste sa cadence de tire lente, limitant sa défense face à de multiples adversaires.'); + 'Le ghost est un véhicule de reconnaissance et d\'attaque rapide déployée par les Covenants dans tout combat terrestre. Cet engin, très souvent piloté par les Elites, est très maniable. Il est capable de tirer des doubles décharges de plasma surchauffées d\'une puissance de 100-250 kW. Le ghost peut également effectuer des pointes de vitesse soutenues.', + 'Le Shadow est le principal moyen de transport terrestre des troupes covenantes. Ce véhicule peut accueillir un pilote, un artilleur et jusqu\'à huit passagers en fonction du type de Covenants qui monte à bord. Il est en outre équipé pour transporter des Elites, des Brutes, des Grunts ou des Jackals. Si le Shadow est équipé d\'un canon à plasma, sa vocation reste le déploiement de troupes.', + 'Le Spectre est un transport multi troupes blindé de petite taille. Quoique relativement lent, il est tout à fait maniable et se meut avec aisance dans les espaces confinés. Ses principales faiblesses étant son manque de vitesse et d\'accélération, ses occupants demeurent tout de même relativement exposés. Le canon à plasma monté à l\'arrière représente un grand danger pour l\'ennemi et le véhicule offre par ailleurs diverses positions de tir.', + 'Lent, massif et constituant une cible de taille, ce véhicule n\'en demeure pas moins le blindé covenant le plus destructeur. Ce géant de métal est bien protégé. Le tir de couverture qu\'il peut effectuer grâce à ses mortiers à plasma redoutables en fait un ennemi incroyablement dangereux. Le fait qu\'il soit piloté par une seule personne qui contrôle le véhicule et le système d\'armement limite quelque peu son champ de manoeuvre.', + 'Les tourelles shades sont des canons stationnaires énergétiques covenant composés de deux parties, la première étant une base stable à trois pieds pour la stabilité de l’appareil, la deuxième, un siège où le canon est fixé retenu par un champ gravitationnel artificiel. Ce canon lorsqu’il tire, envoie 3 « éclairs » relativement lents et d’efficacité moyenne.', + 'Cette tourelle est une version améliorée de la shade standard. Dans les modifications de la tourelle, le système d’accélération magnétique a été révisé pour le rendre plus performant, aboutissant à des rayons plus rapides. Également, un bouclier a été ajouté à l’avant, protégeant ainsi l’utilisateur des attaques aux armes à projectiles de petit et moyen calibre pendant une période de quelques secondes lors de feux nourris.', + 'La tourelle à barreau de combustible est une version fixe de ceux des hunters avec un système de visé amélioré et de condensateur ionique permettent de tirer trois rafales à la suite sans surcharger les relais du générateur. De puissance moyenne, elle est capable de détruire facilement des warthogs et autres véhicules légers avec une facilité hors norme.', + 'Le canon à plasma n’a pas besoin de canonnier pour tirer puisque équipé d’un système de visée automatisé, il utilise une technologie d’intelligence artificielle rudimentaire pour ensuite envoyer un projectile de plasma surchauffé à haute vitesse carbonisant tout sur son passage.', + 'Utilisant un principe similaire de la tourelle à plasma, le lanceur de torpilles plasma utilise un condensateur de matière pour condenser le flux de plasma surchauffé en une masse de destruction pure. Ce système est le système de défense terrestre le plus évolué jamais construit. Son défaut majeur reste sa cadence de tire lente, limitant sa défense face à de multiples adversaires.'); } elseif (md5($race) == '34c19b21bd4a3dda389e767d32fe9779' && $auth_level >= 6) { - $ressourc = array('Métal','Cristal','Hydrogène','Energie'); - $casernen = array('Constructor','Sentinelle Légère','Sentinelle Lourde','Enforcer Léger','Enforcer Lourd','Monitor','~#PAS DE NOM#~ Médecin','~#PAS DE NOM#~ Ingénieur','~#PAS DE NOM#~ Brute'); - $casernde = array( 'Les Constructors sont des minis sentinelles capable d\'effectuer certaine reparation mineur, ils peuvent réparés les sentinelles endommager ainsi que les chasseurs légers.', - '~#DESCRIPTION MANQUANTE#~ Sentinelle Légère', + $ressourc = array('Métal','Cristal','Hydrogène','Energie'); + $casernen = array('Constructor','Sentinelle Légère','Sentinelle Lourde','Enforcer Léger','Enforcer Lourd','Monitor','~#PAS DE NOM#~ Médecin','~#PAS DE NOM#~ Ingénieur','~#PAS DE NOM#~ Brute'); + $casernde = array( 'Les Constructors sont des minis sentinelles capable d\'effectuer certaine reparation mineur, ils peuvent réparés les sentinelles endommager ainsi que les chasseurs légers.', + '~#DESCRIPTION MANQUANTE#~ Sentinelle Légère', '~#DESCRIPTION MANQUANTE#~ Sentinelle Lourde', - 'Les Enforcers Léger, sont des sentinelles massifs qui servent à contenir des grosses infections Floods. Ils sont protégés par un bouclier d\'énergie, mais il semble seulement protéger que l\'avant de la machine. Il est armé de faisceaux laser à impulsion rapides.', - 'Les Enforcers Lourd, sont des sentinelles massifs qui servent à contenir des grosses infections Floods. Ils sont protégés par un bouclier d\'énergie qui recouvre toute la machine. Il est armé de mortiers.', - 'Les monitors ont été placés sur les mondes-forteresse par les Forruner pour entretenir et maintenir leurs systèmes, et pour s\'assurer que les Floods reste emprisonné.', + 'Les Enforcers Léger, sont des sentinelles massifs qui servent à contenir des grosses infections Floods. Ils sont protégés par un bouclier d\'énergie, mais il semble seulement protéger que l\'avant de la machine. Il est armé de faisceaux laser à impulsion rapides.', + 'Les Enforcers Lourd, sont des sentinelles massifs qui servent à contenir des grosses infections Floods. Ils sont protégés par un bouclier d\'énergie qui recouvre toute la machine. Il est armé de mortiers.', + 'Les monitors ont été placés sur les mondes-forteresse par les Forruner pour entretenir et maintenir leurs systèmes, et pour s\'assurer que les Floods reste emprisonné.', '~#DESCRIPTION MANQUANTE#~ ', '~#DESCRIPTION MANQUANTE#~ ', '~#DESCRIPTION MANQUANTE#~ '); - $casernea = array('constructor(s)','sentinelle(s) légère(s)','sentinelle(s) lourde(s)','enforcer(s) léger(s)','enforcer(s) lourd(s)','monitor(s)','médecin(s)','ingénieur(s)','brute(s)'); + $casernea = array('constructor(s)','sentinelle(s) légère(s)','sentinelle(s) lourde(s)','enforcer(s) léger(s)','enforcer(s) lourd(s)','monitor(s)','médecin(s)','ingénieur(s)','brute(s)'); $casernei = array('scoutma3.jpg','sentinellelegerecn4.jpg','nanw9.jpg','defenseurlegerhs8.jpg','defenseurlourdhr3.jpg','nanw9.jpg','nanw9.jpg','nanw9.jpg','nanw9.jpg'); $batimend = array('purificateur_m','purificateur_c','ionisateur','centrale_s','centrale_fusion','oeil','recherches','chantier_terrestre','???','caserne','silo','centre_info'); $batimeni = array('generateurdemetalsg0.jpg','generateurdecristalmh5.jpg','generateurdhydrognedh3.jpg','generateurdenergievb7.jpg','generateurafusiondb2.jpg',0,'centrederecherchegu9.jpg','chantierterrestrehg1.jpg','chantierspatialff8.jpg',0,'nanw9.jpg',0); - $batiment = array('Générateur de Métal','Générateur de Cristal','Générateur d\'Hydrogène','Générateur d\'Energie',0,0,'Centre de recherches','Chantier terrestre','Chantier spatial',0,'Entrepôt',0); - $batimede = array( 'Le générateur de métal vous fournie les matières premières pour la construction de vos infrastructures et de vos unités. Plus vous développerez vos générateurs, plus uls vous rapportera. Les générateurs plus développés ont aussi besoin de plus d\'énergie.', - 'Le générateur de cristal vous fourni les ressources pour vos installations électroniques et pour les alliages. Le générateur consomme deux fois plus d\'énergie que celui du métal. Tous les vaisseaux et bâtiments ont besoin de cristal pour leur bouclier ou encore leur composant électronique. La production augmente avec le développement du générateur ainsi que sa consommation.', - 'L\'hydrogène n\'est pas directement disponible dans la nature. On doit le produire : par electrolyse de l\'eau ce qui consiste à faire passer un courant électrique dans de l\'eau pour que les molécules se séparent et forme du dihydrogène. Mais cette technique utilise de trop grande quantitée d\'énergie.', - 'Pour assurer l\'approvisionnement des générateurs, des générateurs énergie géantes sont nécessaires. Plus ces installations sont développées, plus vous obtiendrez d’énergie pour vos générateurs. Les générateurs d\'énergies sont la base de l\'approvisionnement pour votre planète en énergie.', + $batiment = array('Générateur de Métal','Générateur de Cristal','Générateur d\'Hydrogène','Générateur d\'Energie',0,0,'Centre de recherches','Chantier terrestre','Chantier spatial',0,'Entrepôt',0); + $batimede = array( 'Le générateur de métal vous fournie les matières premières pour la construction de vos infrastructures et de vos unités. Plus vous développerez vos générateurs, plus uls vous rapportera. Les générateurs plus développés ont aussi besoin de plus d\'énergie.', + 'Le générateur de cristal vous fourni les ressources pour vos installations électroniques et pour les alliages. Le générateur consomme deux fois plus d\'énergie que celui du métal. Tous les vaisseaux et bâtiments ont besoin de cristal pour leur bouclier ou encore leur composant électronique. La production augmente avec le développement du générateur ainsi que sa consommation.', + 'L\'hydrogène n\'est pas directement disponible dans la nature. On doit le produire : par electrolyse de l\'eau ce qui consiste à faire passer un courant électrique dans de l\'eau pour que les molécules se séparent et forme du dihydrogène. Mais cette technique utilise de trop grande quantitée d\'énergie.', + 'Pour assurer l\'approvisionnement des générateurs, des générateurs énergie géantes sont nécessaires. Plus ces installations sont développées, plus vous obtiendrez d’énergie pour vos générateurs. Les générateurs d\'énergies sont la base de l\'approvisionnement pour votre planète en énergie.', 0, 0, - 'Le centre de recherche est nécessaire pour développer de nouvelles technologies. Le niveau du centre détermine la vitesse de la recherche. Chaque planète que vous coloniserez devra être équipée d’un centre de recherche.', + 'Le centre de recherche est nécessaire pour développer de nouvelles technologies. Le niveau du centre détermine la vitesse de la recherche. Chaque planète que vous coloniserez devra être équipée d’un centre de recherche.', '~#DESCRIPTION MANQUANTE#~ Chantier terrestre', - 'Le chantier spatial vous permet de construire des vaisseaux, de l’infanterie et vos installations de défense. Plus le chantier est grand, plus la construction de vaisseaux, le recrutement de l’infanterie et la création d’installations de défense est rapide.', + 'Le chantier spatial vous permet de construire des vaisseaux, de l’infanterie et vos installations de défense. Plus le chantier est grand, plus la construction de vaisseaux, le recrutement de l’infanterie et la création d’installations de défense est rapide.', 0, - 'Les ressources qui ne sont pas encore traitées sont mises en stock dans ces entrepôts géants. Un entrepôt plus grand permet le stockage d\'une plus grande quantité de ressources. Lorsque l’entrepôt est plein, l\'extraction est stoppée. Il est grandement conseillé de développer ce genre d’infrastructure.', + 'Les ressources qui ne sont pas encore traitées sont mises en stock dans ces entrepôts géants. Un entrepôt plus grand permet le stockage d\'une plus grande quantité de ressources. Lorsque l’entrepôt est plein, l\'extraction est stoppée. Il est grandement conseillé de développer ce genre d’infrastructure.', 0); - $technolo = array('Informatique','Detection','Armement','Bouclier','Maitrise de l\'énergie','Réacteur à antigravité','Réacteur à fusion','Réacteur à fusion Forruner','Médecine','Commandement militaire',0); - $technode = array( 'L’informatique vous permet de traiter les informations de façon très rapide réduisant ainsi les temps de réactions qui dans les combats peuvent s’avérer fatales.', - 'La détection est cruciale pour préserver sa flotte et ses planètes. Développer cette technologie vous permet de construire une base « œil des prophètes » qui repèrera les vaisseaux s’approchant de votre planète.', - 'Un soldat n\'est rien sans son arme, et qu\'est-ce qu\'un soldat démuni face aux assauts féroces adverses ? Cette technologie vous permettra de rechercher de nouveaux systèmes d\'armements afin de rendre vos outils de guerre plus précis et mortels.', - 'Le bouclier est un champ de force qui entoure vos vaisseaux et les protège. Ainsi il permet à vos vaisseaux de tenir plus longtemps face aux missiles adverses, ceci s\'avérant peut être décisif dans l’issue de la bataille.', - 'L\'énergie est la base de tout. Sans énergie, pas de voyages stellaires ni même de quoi faire marcher vos installations. C\'est pourquoi l\'étude de nouvelles façons de produire de l\'énergie est vitale pour vos planètes et vaisseaux ; vos chercheurs vous permettront également d\'accéder à de nouveaux types d\'énergies, beaucoup plus intéressants.', - 'Les réacteurs à antigravité sont les moteurs basiques covenant. Ils utilisent une technologie complexe projetant des particules quantiques créant un champ gravitationnel inverse annulant ainsi la gravité présente. Le principe fonctionne également dans l\'espace puisque l\'absence de gravité dans l\'espace, sans compter les étoiles et les autres anomalies spatiales, permet une projection plus puissante du champ.', - 'Après la combustion, voici la fusion. Ce type de réacteur est beaucoup plus puissant que la combustion utilisée depuis déjà des centaines d\'années. Il génère une énergie cinétique de grande envergure. Aucun dirigeant politique désirant voyager dans le cosmos ne pourrait s’en passer.', - 'Les covenants ont découvert d’anciens réacteurs à fusion utilisant la technologie d’hyperpropulsion Forruner. Cette technologie, beaucoup plus puissante que le réacteur conventionnel au Plasma, autorise des sauts dans le sous-espace ultra précis. Ce type de réacteur est le plus cher mais aussi le plus rapide et puissant de toute la flotte covenante.', - 'La médecine vous permet d’avoir moins de pertes au combat et ainsi d’avoir une force de frappe qui résiste plus longtemps. Au lieu de laisser mourir les soldats blessés, le médecin les soigne pour les remettre sur pied et les rendre de nouveau aptes au combat.', - 'En tant que général, vous devez avoir un esprit fin pour gagner vos batailles terrestres aussi bien que les affrontements spatiaux. C\'est pourquoi il vous faudra toujours innover en matière de stratégie, vous montrer toujours plus rusé que votre impitoyable adversaire, aussi feriez-vous bien d\'étudier de nouvelles tactiques de combat pour vous assurer une franche victoire.'); + $technolo = array('Informatique','Detection','Armement','Bouclier','Maitrise de l\'énergie','Réacteur à antigravité','Réacteur à fusion','Réacteur à fusion Forruner','Médecine','Commandement militaire',0); + $technode = array( 'L’informatique vous permet de traiter les informations de façon très rapide réduisant ainsi les temps de réactions qui dans les combats peuvent s’avérer fatales.', + 'La détection est cruciale pour préserver sa flotte et ses planètes. Développer cette technologie vous permet de construire une base « œil des prophètes » qui repèrera les vaisseaux s’approchant de votre planète.', + 'Un soldat n\'est rien sans son arme, et qu\'est-ce qu\'un soldat démuni face aux assauts féroces adverses ? Cette technologie vous permettra de rechercher de nouveaux systèmes d\'armements afin de rendre vos outils de guerre plus précis et mortels.', + 'Le bouclier est un champ de force qui entoure vos vaisseaux et les protège. Ainsi il permet à vos vaisseaux de tenir plus longtemps face aux missiles adverses, ceci s\'avérant peut être décisif dans l’issue de la bataille.', + 'L\'énergie est la base de tout. Sans énergie, pas de voyages stellaires ni même de quoi faire marcher vos installations. C\'est pourquoi l\'étude de nouvelles façons de produire de l\'énergie est vitale pour vos planètes et vaisseaux ; vos chercheurs vous permettront également d\'accéder à de nouveaux types d\'énergies, beaucoup plus intéressants.', + 'Les réacteurs à antigravité sont les moteurs basiques covenant. Ils utilisent une technologie complexe projetant des particules quantiques créant un champ gravitationnel inverse annulant ainsi la gravité présente. Le principe fonctionne également dans l\'espace puisque l\'absence de gravité dans l\'espace, sans compter les étoiles et les autres anomalies spatiales, permet une projection plus puissante du champ.', + 'Après la combustion, voici la fusion. Ce type de réacteur est beaucoup plus puissant que la combustion utilisée depuis déjà des centaines d\'années. Il génère une énergie cinétique de grande envergure. Aucun dirigeant politique désirant voyager dans le cosmos ne pourrait s’en passer.', + 'Les covenants ont découvert d’anciens réacteurs à fusion utilisant la technologie d’hyperpropulsion Forruner. Cette technologie, beaucoup plus puissante que le réacteur conventionnel au Plasma, autorise des sauts dans le sous-espace ultra précis. Ce type de réacteur est le plus cher mais aussi le plus rapide et puissant de toute la flotte covenante.', + 'La médecine vous permet d’avoir moins de pertes au combat et ainsi d’avoir une force de frappe qui résiste plus longtemps. Au lieu de laisser mourir les soldats blessés, le médecin les soigne pour les remettre sur pied et les rendre de nouveau aptes au combat.', + 'En tant que général, vous devez avoir un esprit fin pour gagner vos batailles terrestres aussi bien que les affrontements spatiaux. C\'est pourquoi il vous faudra toujours innover en matière de stratégie, vous montrer toujours plus rusé que votre impitoyable adversaire, aussi feriez-vous bien d\'étudier de nouvelles tactiques de combat pour vous assurer une franche victoire.'); $technoli = array('informatique1.jpg','detection.jpg','sanstitretruecolor04no6.jpg','boucliervaiseaucovenantey4.jpg','energie.jpg','reacteurantigravyd1.jpg','reacteur_f.jpg','reacteurfusionforerunnewu0.jpg','medecine.JPG','commandement.jpg'); - $nomvaisa = array('cargos de classe Inquisitor','grand(s) transporteur(s)','vaisseau(x) de colonisation','sonde(s)','recycleur(s)','séraphin(s)','frégate(s)','croiseur(s) de classe CCS','croiseur(s) de classe Reverence','porte-vaisseaux','station(s) orbitale','super(s) porte-vaisseaux'); + $nomvaisa = array('cargos de classe Inquisitor','grand(s) transporteur(s)','vaisseau(x) de colonisation','sonde(s)','recycleur(s)','séraphin(s)','frégate(s)','croiseur(s) de classe CCS','croiseur(s) de classe Reverence','porte-vaisseaux','station(s) orbitale','super(s) porte-vaisseaux'); $nomvaisi = array('nanw9.jpg','nanw9.jpg','nanw9.jpg',0,'nanw9.jpg','croiseurforrunerns4.jpg','superdestroyerwa6.jpg','nanw9.jpg','chasseurlourdfk8.jpg','nanw9.jpg','nanw9.jpg','nanw9.jpg'); $nomvaisn = array('Transporteur Leger','Transporteur Lourd','Colonisateur',0,'Recycleur','Croiseur Forruner','Super-Destroyer','Chasseur Leger','Chasseur Lourd','Porte-Vaisseaux','Station orbitale','Super porte-vaisseaux'); $nomvaisd = array( '~#DESCRIPTION MANQUANTE#~ Transporteur Leger', @@ -132,9 +132,9 @@ require_once('flotte_dep.php'); '~#DESCRIPTION MANQUANTE#~ Porte-Vaisseaux', '~#DESCRIPTION MANQUANTE#~ Station spatiale', '~#DESCRIPTION MANQUANTE#~ Super porte-Vaisseaux'); - $nomterra = array(0,0,0,0,0,0,0,0,'tour(s) à plasma','tour(s) ion','canon(s) Orbital','drone(s)','station(s) de defense'); + $nomterra = array(0,0,0,0,0,0,0,0,'tour(s) à plasma','tour(s) ion','canon(s) Orbital','drone(s)','station(s) de defense'); $nomterri = array(0,0,0,0,0,0,0,0,'tourplasmasl4.jpg','tourioniquegr6.jpg','nanw9.jpg','nanw9.jpg','stationdedefensent8.jpg'); - $nomterrn = array(0,0,0,0,0,0,0,0,'Tour à plasma','Tour Ion','Canon Orbital','Drone','Station de defense'); + $nomterrn = array(0,0,0,0,0,0,0,0,'Tour à plasma','Tour Ion','Canon Orbital','Drone','Station de defense'); $nomterde = array( 0, 0, 0, @@ -143,97 +143,97 @@ require_once('flotte_dep.php'); 0, 0, 0, - '~#DESCRIPTION MANQUANTE#~ Tour à plasma', + '~#DESCRIPTION MANQUANTE#~ Tour à plasma', '~#DESCRIPTION MANQUANTE#~ Tour Ion', '~#DESCRIPTION MANQUANTE#~ Canon Orbital', '~#DESCRIPTION MANQUANTE#~ Drone', '~#DESCRIPTION MANQUANTE#~ Station de defense'); } else { - $ressourc = array('Métal','Cristal','Hydrogène','Energie'); - $casernen = array('Marine','Fusiller','Grenadier','T.C.A.O.','Sniper','Spartan','Médecin','Ingénieur','Soldat exo squellette'); - $casernde = array( 'Les marines constituent l\'infanterie de base de vos forces militaires. De faible puissance et de résistance plutôt médiocre, ils rivalisent avec les unités covenants standard. Ils sont équipés d\'une armure de kevlar renforcée et d\'un MA5B.', - 'Les fusillers sont équipés de fusils d\'assaut avec zoom intégré. Plus puissants que les marines standards, ils peuvent rivaliser avec des escouades entières de grunts dirigées par des élites hauts gradés.', - 'Les grenadiers sont les spécialistes en explosifs du CSNU sur le terrain. Ils peuvent détruire les véhicules légers grâce à leurs grenades et leurs lances missiles.', - 'Les TCAO sont des soldats d\'assauts largués depuis l\'espace directement sur les champs de batailles grâce à des modules spéciaux. Ces soldats sont surentraînés et très chevronnés, risquant leur vie à chaque instant en raison des sauts orbitaux qui font atteindre une chaleur extrême dans le module.', - 'Les snipers sont dotés de fusils de précision SA 2M capable de descendre un covenant à plusieurs centaines de mètres grâce à son zoom maximum de 10x. Grande portée de tir mais à courte portée, ils sont inutiles.', - 'Les spartans sont les unités d\'infanterie militaires les plus évoluées militairement du CSNU mais également des Covenants. Ils sont équipés d\'une armure de type Mjolnir améliorant leurs capacités de combat, déjà exceptionnelles grâce à leur entraînement militaire depuis leur plus jeune âge, ainsi qu\'à leurs implants cybernétiques, les rendants d\'une grande efficacité inégalée au sein de l\'infanterie.', - 'Les médecins sont sur le champ de bataille pour aider les soldats blessés par des tirs lors des affrontements. Ils peuvent réduire le nombre de morts lorsqu\'ils sont bien utilisés et ainsi peut être changer l’issue de la bataille.', - 'Les ingénieurs sont là pour réparer vos véhicules endommagés lors des affrontements. Ils peuvent réduire le nombre de vos pertes de véhicules lorsqu\'ils sont bien utilisés.', - 'Les soldats exo squelettiques possèdent des armures de combat très résistantes et d\'une puissance énorme mais contre balancée par une faible autonomie d\'énergie, une mobilité faible et d\'une discrétion auditive aussi silencieuse qu\'un char d\'assaut dans un champs de mines lotus.'); - $casernea = array('marine(s)','fusiller(s)','grenadier(s)','T.C.A.O.','sniper(s)','spartan(s)','médecin(s)','ingénieur(s)','soldat(s) exo squellette'); + $ressourc = array('Métal','Cristal','Hydrogène','Energie'); + $casernen = array('Marine','Fusiller','Grenadier','T.C.A.O.','Sniper','Spartan','Médecin','Ingénieur','Soldat exo squellette'); + $casernde = array( 'Les marines constituent l\'infanterie de base de vos forces militaires. De faible puissance et de résistance plutôt médiocre, ils rivalisent avec les unités covenants standard. Ils sont équipés d\'une armure de kevlar renforcée et d\'un MA5B.', + 'Les fusillers sont équipés de fusils d\'assaut avec zoom intégré. Plus puissants que les marines standards, ils peuvent rivaliser avec des escouades entières de grunts dirigées par des élites hauts gradés.', + 'Les grenadiers sont les spécialistes en explosifs du CSNU sur le terrain. Ils peuvent détruire les véhicules légers grâce à leurs grenades et leurs lances missiles.', + 'Les TCAO sont des soldats d\'assauts largués depuis l\'espace directement sur les champs de batailles grâce à des modules spéciaux. Ces soldats sont surentraînés et très chevronnés, risquant leur vie à chaque instant en raison des sauts orbitaux qui font atteindre une chaleur extrême dans le module.', + 'Les snipers sont dotés de fusils de précision SA 2M capable de descendre un covenant à plusieurs centaines de mètres grâce à son zoom maximum de 10x. Grande portée de tir mais à courte portée, ils sont inutiles.', + 'Les spartans sont les unités d\'infanterie militaires les plus évoluées militairement du CSNU mais également des Covenants. Ils sont équipés d\'une armure de type Mjolnir améliorant leurs capacités de combat, déjà exceptionnelles grâce à leur entraînement militaire depuis leur plus jeune âge, ainsi qu\'à leurs implants cybernétiques, les rendants d\'une grande efficacité inégalée au sein de l\'infanterie.', + 'Les médecins sont sur le champ de bataille pour aider les soldats blessés par des tirs lors des affrontements. Ils peuvent réduire le nombre de morts lorsqu\'ils sont bien utilisés et ainsi peut être changer l’issue de la bataille.', + 'Les ingénieurs sont là pour réparer vos véhicules endommagés lors des affrontements. Ils peuvent réduire le nombre de vos pertes de véhicules lorsqu\'ils sont bien utilisés.', + 'Les soldats exo squelettiques possèdent des armures de combat très résistantes et d\'une puissance énorme mais contre balancée par une faible autonomie d\'énergie, une mobilité faible et d\'une discrétion auditive aussi silencieuse qu\'un char d\'assaut dans un champs de mines lotus.'); + $casernea = array('marine(s)','fusiller(s)','grenadier(s)','T.C.A.O.','sniper(s)','spartan(s)','médecin(s)','ingénieur(s)','soldat(s) exo squellette'); $casernei = array('marines.jpg','marinehf0.jpg','grenadier.jpg','TCAO2.jpg','sniper.jpg','spartan.jpg','medecin.jpg','ingenieurs.jpg','img_na_ig.jpg'); - $batiment = array('Usine de métallurgie','Usine de cristal','Synchronisateur d\'hydrogène','Centrale solaire','Centrale énergétique','Base radar','Centre de recherches','Chantier terrestre','Chantier spatial','Ecole militaire','Silo de stockage','Centrale informatique'); - $batimede = array( 'Cette usine traite tous les métaux recueillis afin de produire du titanium-A ou différents types d\'alliages de qualité pour vos différentes constructions planétaires ou spatiales. Chaque niveau augmente la production de métal.', - 'L\'usine de cristal filtre les déchets récoltés avec les cristaux. Une fois séparés du reste ils sont classés par qualité par une quantité d\'appareils de haute technologie. Plus les cristaux sont purs plus ceux-ci peuvent être transformés en unités de stockage de données ou en conducteurs énergétiques de haute qualité. Plus ce bâtiment sera développé, plus vous pourrez traiter de cristaux rapidement.', - 'Ce bâtiment use de l\'eau pour la décomposer et en extraire l\'hydrogène, la base de toutes vos productions énergétiques, pour ensuite l\'acheminer dans des condensateurs ioniques afin de le rendre plus dense et par le fait même plus efficace. Chaque niveau augmente la production du synchronisateur.', - 'La centrale solaire produit l’énergie nécessaire au fonctionnement de vos usines. Elle fonctionne à partir d’une technologie Forruner qui consiste à envoyer un rayon à la verticale pour capter tous les rayons du soleil qui le croise.', - 'La centrale énergétique fonctionne avec un principe assez dépassé. En effet, l’énergie est produite par un réacteur à fusion qui en tournant produit de l’énergie comme le ferait une dynamo. Bien que ce principe fût révolutionnaire à l’époque, il fût rapidement dépassé par la centrale solaire qui permet de produire d’avantage d’énergie.', + $batiment = array('Usine de métallurgie','Usine de cristal','Synchronisateur d\'hydrogène','Centrale solaire','Centrale énergétique','Base radar','Centre de recherches','Chantier terrestre','Chantier spatial','Ecole militaire','Silo de stockage','Centrale informatique'); + $batimede = array( 'Cette usine traite tous les métaux recueillis afin de produire du titanium-A ou différents types d\'alliages de qualité pour vos différentes constructions planétaires ou spatiales. Chaque niveau augmente la production de métal.', + 'L\'usine de cristal filtre les déchets récoltés avec les cristaux. Une fois séparés du reste ils sont classés par qualité par une quantité d\'appareils de haute technologie. Plus les cristaux sont purs plus ceux-ci peuvent être transformés en unités de stockage de données ou en conducteurs énergétiques de haute qualité. Plus ce bâtiment sera développé, plus vous pourrez traiter de cristaux rapidement.', + 'Ce bâtiment use de l\'eau pour la décomposer et en extraire l\'hydrogène, la base de toutes vos productions énergétiques, pour ensuite l\'acheminer dans des condensateurs ioniques afin de le rendre plus dense et par le fait même plus efficace. Chaque niveau augmente la production du synchronisateur.', + 'La centrale solaire produit l’énergie nécessaire au fonctionnement de vos usines. Elle fonctionne à partir d’une technologie Forruner qui consiste à envoyer un rayon à la verticale pour capter tous les rayons du soleil qui le croise.', + 'La centrale énergétique fonctionne avec un principe assez dépassé. En effet, l’énergie est produite par un réacteur à fusion qui en tournant produit de l’énergie comme le ferait une dynamo. Bien que ce principe fût révolutionnaire à l’époque, il fût rapidement dépassé par la centrale solaire qui permet de produire d’avantage d’énergie.', 'Base radar', - 'Le centre de recherches est certainement l\'une des bâtisses les plus importantes que vous puissiez construire dans votre colonie. Vos chercheurs travailleront sans relâche aucun afin de mettre au point de nouvelles technologies vous assurant suprématie et victoire sur les champs de bataille. Chaque niveau dévellopé augmente la vitesse de recherche de vos technologies.', - 'Le chantier terrestre vous permet de construire tous les véhicules atmosphérique du type warthog ou scorpion. Il permet ainsi à vos troupes d’accéder plus rapidement à un endroit et d’avoir un avantage avec l’armement de ces véhicules.', - 'Le chantier spatial permet de construire vôtre flotte de vaisseaux spatiaux. Généralement à la limite de l’atmosphère d’une planète il ne peut cependant se déplacer et doit impérativement rester en orbite. Le chantier spatial, bien que ressemblant à une station spatial, ne peut être détruit grâce à sa position qui lui confère un camouflage total.', - 'L\'académie militaire forme les meilleurs officiers et sous-officiers de la galaxie. Ces hommes expérimentés vous aideront à choisir de meilleures stratégies défensives ou offensives ou encore même économiques face aux différentes situations qui vous seront imposées. Plus vous augmenterez le niveau de cette structure plus vos officiers seront rapides et efficaces dans leurs tâches.', - 'Comme toutes choses, vos ressources ont besoin d\'espace pour être stockées ; c\'est pourquoi ces énormes silos vous seront d\'une aide précieuse afin d\'y renfermer une grande quantité de matières premières pour toutes vos productions. Plus le niveau du silo est haut, plus il pourra contenir de ressources supplémentaires.', - 'La centrale informatique est le coeur de votre planète, le cerveau de votre territoire, analysant chaque particule détectée avec grand soin. Plus votre centrale est améliorée, plus rapidement et aisément les données seront traitées.'); + 'Le centre de recherches est certainement l\'une des bâtisses les plus importantes que vous puissiez construire dans votre colonie. Vos chercheurs travailleront sans relâche aucun afin de mettre au point de nouvelles technologies vous assurant suprématie et victoire sur les champs de bataille. Chaque niveau dévellopé augmente la vitesse de recherche de vos technologies.', + 'Le chantier terrestre vous permet de construire tous les véhicules atmosphérique du type warthog ou scorpion. Il permet ainsi à vos troupes d’accéder plus rapidement à un endroit et d’avoir un avantage avec l’armement de ces véhicules.', + 'Le chantier spatial permet de construire vôtre flotte de vaisseaux spatiaux. Généralement à la limite de l’atmosphère d’une planète il ne peut cependant se déplacer et doit impérativement rester en orbite. Le chantier spatial, bien que ressemblant à une station spatial, ne peut être détruit grâce à sa position qui lui confère un camouflage total.', + 'L\'académie militaire forme les meilleurs officiers et sous-officiers de la galaxie. Ces hommes expérimentés vous aideront à choisir de meilleures stratégies défensives ou offensives ou encore même économiques face aux différentes situations qui vous seront imposées. Plus vous augmenterez le niveau de cette structure plus vos officiers seront rapides et efficaces dans leurs tâches.', + 'Comme toutes choses, vos ressources ont besoin d\'espace pour être stockées ; c\'est pourquoi ces énormes silos vous seront d\'une aide précieuse afin d\'y renfermer une grande quantité de matières premières pour toutes vos productions. Plus le niveau du silo est haut, plus il pourra contenir de ressources supplémentaires.', + 'La centrale informatique est le coeur de votre planète, le cerveau de votre territoire, analysant chaque particule détectée avec grand soin. Plus votre centrale est améliorée, plus rapidement et aisément les données seront traitées.'); $batimend = array('mine_m','mine_c','!!','centrale_s','centrale_f','radar','recherches','chantier_terrestre','???','ecole_militaire','silo','centre_info'); $batimeni = array('mine_m.png','mine_c.png','synchroniseur.jpg','centrale solaire.jpg','centrale electrique.jpg','baseradardl3.jpg','recherches.jpg','chantierterrestrecopybj8.jpg','chantier spatial.jpg','ecole militaire.jpg','stockage.jpg','search0yp.jpg'); - $technolo = array('IA','Radar','Armement','Blindage','Maitrise de l\'énergie','Réacteur à combustion','Réacteur à fusion','Réacteur à fusion de type II','Médecine','Tactiques de combats','Spartan'); - $technode = array( 'Le résultat absolu de l\'informatique. L\'IA ou Intelligence Artificielle est le résultat d\'années de travail acharné pour pouvoir en arriver à cette grande performance technique. Les IA sont des entités non biologiques dotées du pouvoir de la pensée. Développer cette technologie vous permettra non seulement de disposer d\'Intelligences Artificielles, mais de les rendre de plus en plus complexes, créatives et réactives.', - 'Ce système très ancien et usé par bien des militaires est utilisé pour la détection et l\'imagerie d\'objets faisant appel à des impulsions d\'ondes électromagnétiques à haute fréquence et sert à déterminer la position et la distance des vaisseaux. Pour chaque niveau, vous augmenterez la puissance de cette technologie et sa précision.', - 'Un soldat n\'est rien sans son arme, et qu\'est-ce qu\'un soldat démuni face aux assauts féroces adverses ? Cette technologie vous permettra de rechercher de nouveaux systèmes d\'armements afin de rendre vos outils de guerre plus précis et mortels.', - 'La résistance de la coque de vos vaisseaux est plus que primordiale si vous tenez à remporter vos batailles, et encore plus avec les armes Covenantes capables de réduire en miettes même les plus résistants des vaisseaux spatiaux. C\'est la raison pour laquelle vos scientifiques, si vous leur en donnez l\'ordre, travailleront avec application à l\'élaboration de nouvelles formules pour créer des alliages métalliques les plus résistants.', - 'L\'énergie est la base de tout. Sans énergie, pas de voyages stellaires ni même de quoi faire marcher vos installations tout simplement. C\'est pourquoi l\'étude de nouvelles façons de produire de l\'énergie est vitale pour vos planètes et les propulseurs de vos vaisseaux.', - 'Le plus simple de tout les réacteurs, aussi vieux que le monde lui-même ! Equipés sur presque tout vos vaisseaux de base, cette technologie, certes basique, vous aidera à explorer l\'univers mais aussi, se trouvant être bien évidemment la base de la propulsion, vous permettra de découvrir de nouvelles techniques de propulsion irrémédiablement toujours plus puissantes et efficaces.', - 'Bien plus efficaces que de simples réacteurs à combustion, la fusion nucléaire est un processus où deux noyaux atomiques s\'assemblent pour former un noyau plus lourd. La fusion de noyaux légers dégage d\'énormes quantités d\'énergie provenant de l\'attraction entre les nucléons due à une forte interaction. Personne ne pourrait se passer de ce type d\'énergie lors de ses voyages dans le cosmos.', - 'Cette technologie basée sur les réacteurs Covenants utilise la force électromagnétique résultant de l\'interaction entre un courant électrique et un champ magnétique pour accélérer un gaz ionisé appelé plasma. Bien plus efficace que tous les moyens de propulsions possibles, cette technologie révolutionnaire, très coûteuse, est un moyen efficace de parcourir de grandes distances en peu de temps.', - 'Depuis l\'aube des temps, chaque être vivant et pensant n\'a jamais cessé de chercher de nouvelles solutions en dévellopant les sciences médicales pour tenter d\'échapper à la mort et aux épidémies qui s\'abbatent sur lui. Seulement, aujourd\'hui, ce ne sont plus les maladies qui importent, mais plutot les blessures de guerre. Plus votre médecine sera éclatante, plus vos hommes de soins connaîtront de choses pour soigner vos blessés.', - 'En tant que général, vous devez avoir un esprit fin pour gagner vos batailles terrestres aussi bien que les affrontements spatiaux. C\'est pourquoi il vous faudra toujours innover en matière de stratégie, vous montrer toujours plus rusé que votre impitoyable adversaire, aussi feriez-vous bien d\'étudier de nouvelles tactiques de combat pour vous assurer une franche victoire.', - 'Ces formidables combattants constituent l\'élite de vos forces terrestres. Entraînés au maniement des armes, aux tactiques militaires et au combat de groupe depuis la naissance, ils sont pratiquement invincibles sur les champs de bataille face aux troupes covenantes. Les Spartans ont également subis plusieurs séries de modifications biologiques afin d\'améliorer leurs capacités physiques.'); + $technolo = array('IA','Radar','Armement','Blindage','Maitrise de l\'énergie','Réacteur à combustion','Réacteur à fusion','Réacteur à fusion de type II','Médecine','Tactiques de combats','Spartan'); + $technode = array( 'Le résultat absolu de l\'informatique. L\'IA ou Intelligence Artificielle est le résultat d\'années de travail acharné pour pouvoir en arriver à cette grande performance technique. Les IA sont des entités non biologiques dotées du pouvoir de la pensée. Développer cette technologie vous permettra non seulement de disposer d\'Intelligences Artificielles, mais de les rendre de plus en plus complexes, créatives et réactives.', + 'Ce système très ancien et usé par bien des militaires est utilisé pour la détection et l\'imagerie d\'objets faisant appel à des impulsions d\'ondes électromagnétiques à haute fréquence et sert à déterminer la position et la distance des vaisseaux. Pour chaque niveau, vous augmenterez la puissance de cette technologie et sa précision.', + 'Un soldat n\'est rien sans son arme, et qu\'est-ce qu\'un soldat démuni face aux assauts féroces adverses ? Cette technologie vous permettra de rechercher de nouveaux systèmes d\'armements afin de rendre vos outils de guerre plus précis et mortels.', + 'La résistance de la coque de vos vaisseaux est plus que primordiale si vous tenez à remporter vos batailles, et encore plus avec les armes Covenantes capables de réduire en miettes même les plus résistants des vaisseaux spatiaux. C\'est la raison pour laquelle vos scientifiques, si vous leur en donnez l\'ordre, travailleront avec application à l\'élaboration de nouvelles formules pour créer des alliages métalliques les plus résistants.', + 'L\'énergie est la base de tout. Sans énergie, pas de voyages stellaires ni même de quoi faire marcher vos installations tout simplement. C\'est pourquoi l\'étude de nouvelles façons de produire de l\'énergie est vitale pour vos planètes et les propulseurs de vos vaisseaux.', + 'Le plus simple de tout les réacteurs, aussi vieux que le monde lui-même ! Equipés sur presque tout vos vaisseaux de base, cette technologie, certes basique, vous aidera à explorer l\'univers mais aussi, se trouvant être bien évidemment la base de la propulsion, vous permettra de découvrir de nouvelles techniques de propulsion irrémédiablement toujours plus puissantes et efficaces.', + 'Bien plus efficaces que de simples réacteurs à combustion, la fusion nucléaire est un processus où deux noyaux atomiques s\'assemblent pour former un noyau plus lourd. La fusion de noyaux légers dégage d\'énormes quantités d\'énergie provenant de l\'attraction entre les nucléons due à une forte interaction. Personne ne pourrait se passer de ce type d\'énergie lors de ses voyages dans le cosmos.', + 'Cette technologie basée sur les réacteurs Covenants utilise la force électromagnétique résultant de l\'interaction entre un courant électrique et un champ magnétique pour accélérer un gaz ionisé appelé plasma. Bien plus efficace que tous les moyens de propulsions possibles, cette technologie révolutionnaire, très coûteuse, est un moyen efficace de parcourir de grandes distances en peu de temps.', + 'Depuis l\'aube des temps, chaque être vivant et pensant n\'a jamais cessé de chercher de nouvelles solutions en dévellopant les sciences médicales pour tenter d\'échapper à la mort et aux épidémies qui s\'abbatent sur lui. Seulement, aujourd\'hui, ce ne sont plus les maladies qui importent, mais plutot les blessures de guerre. Plus votre médecine sera éclatante, plus vos hommes de soins connaîtront de choses pour soigner vos blessés.', + 'En tant que général, vous devez avoir un esprit fin pour gagner vos batailles terrestres aussi bien que les affrontements spatiaux. C\'est pourquoi il vous faudra toujours innover en matière de stratégie, vous montrer toujours plus rusé que votre impitoyable adversaire, aussi feriez-vous bien d\'étudier de nouvelles tactiques de combat pour vous assurer une franche victoire.', + 'Ces formidables combattants constituent l\'élite de vos forces terrestres. Entraînés au maniement des armes, aux tactiques militaires et au combat de groupe depuis la naissance, ils sont pratiquement invincibles sur les champs de bataille face aux troupes covenantes. Les Spartans ont également subis plusieurs séries de modifications biologiques afin d\'améliorer leurs capacités physiques.'); $technoli = array('IA4.jpg','radar7zr.jpg','techarmes1jk1.jpg','blindage.jpg','plasma4yl.jpg','reacteuracombustion.jpg','reacteurfusiontype1al5.jpg','reacteurfusiontype2nn6.jpg','medecin1.jpg','tactique.jpg','armuremc8ij.jpg'); - $nomvaisn = array('Cargos de classe Parabola','Cargos de classe Laden','Vaisseaux de colonisation de classe Odyssey','Drones d’espionnage de classe Clarion','Recycleurs de classe Minotaur','C709 Longsword Interceptor','Frégate','Croiseurs de classe Halcyon','Croiseurs de classe Marathon','Porte vaisseaux','Station orbitale','Super porte-vaisseaux'); - $nomvaisd = array( 'Ces cargos de taille conséquente peuvent transporter assez de ressources et de nourriture pour nourrir une petite ville. Ils sont rapides, très manœuvrables mais peu résistants, ce qui est en fait des proies faciles pour les chasseurs ennemis.', - 'Ces cargos de taille massive permettent le transport d’une énorme quantité de ressources. Ils sont plus résistants que leurs homologues de classe Parabola, mais sont néanmoins les cibles prioritaires des chasseurs ennemis visant à faire le plus de pertes dans le camp adverse.', + $nomvaisn = array('Cargos de classe Parabola','Cargos de classe Laden','Vaisseaux de colonisation de classe Odyssey','Drones d’espionnage de classe Clarion','Recycleurs de classe Minotaur','C709 Longsword Interceptor','Frégate','Croiseurs de classe Halcyon','Croiseurs de classe Marathon','Porte vaisseaux','Station orbitale','Super porte-vaisseaux'); + $nomvaisd = array( 'Ces cargos de taille conséquente peuvent transporter assez de ressources et de nourriture pour nourrir une petite ville. Ils sont rapides, très manœuvrables mais peu résistants, ce qui est en fait des proies faciles pour les chasseurs ennemis.', + 'Ces cargos de taille massive permettent le transport d’une énorme quantité de ressources. Ils sont plus résistants que leurs homologues de classe Parabola, mais sont néanmoins les cibles prioritaires des chasseurs ennemis visant à faire le plus de pertes dans le camp adverse.', '~#DESCRIPTION MANQUANTE#~ Vaisseaux de colonisation de classe Odyssey', - 'Drones extrêmement rapides et manœuvrables permettant la surveillance et l’espionnage des planètes alentours avec un risque moins élevé de repérage qu’avec un vaisseau furtif standard. Ils sont utilisés lors de l’espionnage de planètes ennemies et sont très fragiles, si bien que lorsqu’ils traversent un champ de débris, ils sont réduits en de vulgaires morceaux de métal.', - 'Les guerres sont de plus en plus nombreuses et les pertes de plus en plus grandes laissant à chaque fois des champs de débris immenses limitant les routes des voies commerciales. Des recycleurs ont donc été créés afin de déblayer ces zones et de vous faire profiter de ces ressources gratuites. Lors du voyage de retour, le recycleur transforme les débris pour vous les redonner sous forme de ressources primaires.', - 'Vaisseau orbital et atmosphérique lourd, apte au combat spatial, atmosphérique, et au bombardement lourd sur des positions stratégiques. Ces vaisseaux sont capable de bombarder une vaste position adverse, grâce à leurs bombes au Napalm, mais sont aussi capables de cibler précisément leurs cibles et de les détruire grâce à leurs nombreux missiles air-air air-sol.', - 'Cette classe de vaisseau est la plus répandue dans le CSNU. Ces vaisseaux sont très manœuvrables du fait de leur petite taille, mais sont aussi très faibles, à cause de leur blindage et de leur armement moindre. Ces vaisseaux sont peu coûteux mais également peu efficaces et sont surtout utilisés pour des patrouilles. Ils forment les éléments principaux des différentes flottes du CSNU. ', - 'Ces croiseurs sont des vaisseaux d’attaque, dépassés technologiquement, très peu répandus, très coûteux mais résistants : leur architecture interne leur permet de résister à de nombreux tirs de plasma. Cette architecture complexe à produire et à maintenir en état, en font des vaisseaux extrêmement rares et chers. Ils ont été très récemment remis à neuf et améliorés, avec un tout nouvel armement.', - 'Ces grands vaisseaux (2 fois et demie la longueur d’une frégate), sont des descendants de la lignée des croiseurs Halcyon. Ces vaisseaux ont une très grande puissance de feu (1 CAM lourd), un fort blindage (5 mètres 50 de Titane-A), et sont très rapides. Ils sont assez peu communs, mais restent des vaisseaux d’attaque très redoutables : ils peuvent encaisser de nombreux tirs de plasma avant de succomber.', - 'Ces immenses vaisseaux sont capables de transporter bon nombre de Longswords, d’Albatross, et tout autres types d’unités. Ces vaisseaux leurs permettent de se défendre contre une éventuelle attaque de chasseurs ennemis, mais sont également très lourdement armés. Ils sont usités lors d’attaques massives de planètes nécessitant un fort appui aérien et une très grosse puissance de feu. ', + 'Drones extrêmement rapides et manœuvrables permettant la surveillance et l’espionnage des planètes alentours avec un risque moins élevé de repérage qu’avec un vaisseau furtif standard. Ils sont utilisés lors de l’espionnage de planètes ennemies et sont très fragiles, si bien que lorsqu’ils traversent un champ de débris, ils sont réduits en de vulgaires morceaux de métal.', + 'Les guerres sont de plus en plus nombreuses et les pertes de plus en plus grandes laissant à chaque fois des champs de débris immenses limitant les routes des voies commerciales. Des recycleurs ont donc été créés afin de déblayer ces zones et de vous faire profiter de ces ressources gratuites. Lors du voyage de retour, le recycleur transforme les débris pour vous les redonner sous forme de ressources primaires.', + 'Vaisseau orbital et atmosphérique lourd, apte au combat spatial, atmosphérique, et au bombardement lourd sur des positions stratégiques. Ces vaisseaux sont capable de bombarder une vaste position adverse, grâce à leurs bombes au Napalm, mais sont aussi capables de cibler précisément leurs cibles et de les détruire grâce à leurs nombreux missiles air-air air-sol.', + 'Cette classe de vaisseau est la plus répandue dans le CSNU. Ces vaisseaux sont très manœuvrables du fait de leur petite taille, mais sont aussi très faibles, à cause de leur blindage et de leur armement moindre. Ces vaisseaux sont peu coûteux mais également peu efficaces et sont surtout utilisés pour des patrouilles. Ils forment les éléments principaux des différentes flottes du CSNU. ', + 'Ces croiseurs sont des vaisseaux d’attaque, dépassés technologiquement, très peu répandus, très coûteux mais résistants : leur architecture interne leur permet de résister à de nombreux tirs de plasma. Cette architecture complexe à produire et à maintenir en état, en font des vaisseaux extrêmement rares et chers. Ils ont été très récemment remis à neuf et améliorés, avec un tout nouvel armement.', + 'Ces grands vaisseaux (2 fois et demie la longueur d’une frégate), sont des descendants de la lignée des croiseurs Halcyon. Ces vaisseaux ont une très grande puissance de feu (1 CAM lourd), un fort blindage (5 mètres 50 de Titane-A), et sont très rapides. Ils sont assez peu communs, mais restent des vaisseaux d’attaque très redoutables : ils peuvent encaisser de nombreux tirs de plasma avant de succomber.', + 'Ces immenses vaisseaux sont capables de transporter bon nombre de Longswords, d’Albatross, et tout autres types d’unités. Ces vaisseaux leurs permettent de se défendre contre une éventuelle attaque de chasseurs ennemis, mais sont également très lourdement armés. Ils sont usités lors d’attaques massives de planètes nécessitant un fort appui aérien et une très grosse puissance de feu. ', '~#DESCRIPTION MANQUANTE#~ Station spatiale', - 'Ces vaisseaux sont sont beaucoup plus chers du fait de leur meilleur armement, blindage et importante capacité de transport. Ces vaisseaux sont très peu vus sur le terrain, leur rôle principal est de déployer des Longswords afin de fournir aux vaisseaux alliés un appui orbital. Ils font partis des plus puissants vaisseaux du CSNU. Ils sont capables de transporter bon nombre d’unités terrestres et aériennes.'); - $nomvaisa = array('cargos de classe Parabola','cargos de classe Laden','vaisseau(x) de colonisation de classe Odyssey','drone(s) d\'espionnage de classe Clarion','recycleur(s) de classe Minotaur','C709 Longsword Interceptor','Frégates','croiseur(s) de classe Halcyon','croiseur(s) de classe Marathon','porte vaisseaux','station(s) orbitale','super(s) porte-vaisseaux'); + 'Ces vaisseaux sont sont beaucoup plus chers du fait de leur meilleur armement, blindage et importante capacité de transport. Ces vaisseaux sont très peu vus sur le terrain, leur rôle principal est de déployer des Longswords afin de fournir aux vaisseaux alliés un appui orbital. Ils font partis des plus puissants vaisseaux du CSNU. Ils sont capables de transporter bon nombre d’unités terrestres et aériennes.'); + $nomvaisa = array('cargos de classe Parabola','cargos de classe Laden','vaisseau(x) de colonisation de classe Odyssey','drone(s) d\'espionnage de classe Clarion','recycleur(s) de classe Minotaur','C709 Longsword Interceptor','Frégates','croiseur(s) de classe Halcyon','croiseur(s) de classe Marathon','porte vaisseaux','station(s) orbitale','super(s) porte-vaisseaux'); $nomvaisi = array('csnucargoparabola2mc9.jpg','csnucargoladen2al8.jpg','vaisseaucolonisationmm4.jpg','drone_clarion.jpg','img_na_ig.jpg','longsword.jpg','fregatewz5.jpg','croiseurclassealcyon130om6.jpg','croiseurmarathonke3.jpg','csnuportevaisseauxgy3.jpg','station.jpg','.jpg'); - $nomterra = array('sparrowhawk','077-TC Pelican','C703 Shortsword Bomber','SHD Albatros','M12 LRV Warthogs','M12G1 LAAV Warthogs','M12A1 LAAV Warthogs','M808B Scorpions MBT','mitrailleuse(s) automatique M247 GP','DCA légère(s)','DCA lourde(s)','canon(s) Gauss','lanceur(s) de missiles'); - $nomterrn = array('Sparrowhawk','077-TC Pelican','C703 Shortsword Bomber','SHD Albatros','M12 LRV Warthogs','M12G1 LAAV Warthogs','M12A1 LAAV Warthogs','M808B Scorpions MBT','Mitrailleuse automatique M247 GP','DCA légère','DCA lourde','Canon Gauss','Lanceur de missiles'); - $nomterde = array( 'Véhicule à propulsion verticale permettant des attaques extrêmement rapides et destructrices grâce à ses six tubes lance-missiles, ses deux mitrailleuses légères, et sa mitrailleuse lourde frontale. Ces vaisseaux d’assaut rapide sont de véritables broyeurs de tôle grâce à leurs 6 tubes lance-missiles et sont capables de détruire des véhicules et des positions fortement blindées.', - 'Véhicule aérien de transport léger permettant le transport rapide de troupes à des endroits stratégiques tel un warthog ou un scorpion. Ils sont la base des renforts terrestres et permettent l’acheminement de troupes et de munitions rapidement.', - 'Vaisseau suborbital très rapide apte tant au combat aérien rapproché qu’au bombardement ciblé. Ces bombardiers ont un pointeur laser qui leur permet de viser au mieux les cibles ennemies, qu\'elles soient au sol ou aériennes. Ils sont néanmoins capables de combattre en combat aérien rapproché grâce à leurs missiles thermo guidés et sont utilisés lors de bombardements de cibles mineures.', - 'Véhicule aérien de transport lourd permettant le transport en masse de troupes ou de véhicules tels que des warthogs ou bien une paire de scorpions vers des zones de largage. Ces véhicules de soutien aérien lourd sont surtout utilisés lors d’offensives nécessitant un déploiement en masse d’unités blindées et de munitions au plus près des lignes adverses.', - 'Véhicule d’attaque léger permettant des assauts rapides et efficaces, ainsi que le transport léger de troupes. Ces véhicules sont la base des véhicules terrestres du CSNU.', - 'Véhicule léger équipé d’un canon à accélération magnétique (CAM), très efficace contre du personnel, des véhicules moyennement blindés, ou bien contre des véhicules aériens légers. Les Warthog M12G1 sont très répandus et surtout utilisés lors d\'offensives sur des cibles disposant d’un appui aérien ou terrestre léger.', - 'Véhicule léger, armé d’un lance-missiles anti-véhicule permettant des assauts rapides contre des véhicules blindés ou contre des positions fortifiées. Ils sont surtout utilisés en cas d’attaques de postes avancés.', - 'Tank blindé anti-véhicules. Permet l’attaque de cibles fortifiées grâce à ses balles perforantes de gros calibre. Ces tanks sont utilisés lors d’assauts massifs sur des bases fortifiées et vitales à l’ennemi.', - 'La mitrailleuse M247 est une arme de calibre moyen envoyant des balles de calibre 30 à une cadence de tir de 6 balles par seconde. Généralement positionnée dans des endroits fixes, cette tourelle, efficace contre l\'infanterie et les véhicules légers de petite taille est de précision moyenne suffisante pour éliminer une menace de quelques soldats covenants.', - 'Les DCA légères sont des canons anti-aérien de puissance moyenne mais de cadence de tir et de calibre de munitions à tête explosive élevée permettant de détruire la plupart des chasseurs légers avec aisance. Ce modèle est équipé d\'un emplacement spécial lui permettant de tirer également sur des cibles au sol.', - 'Les DCA lourdes sont quasi-similaires aux légères mais possèdent tout de même une différence au niveau du calibre des balles qui, plus élevé avec une tête explosif supérieure est comparable à une explosion de mine lotus. Il a en contre partie une capacité de tir plus limitée question cadence et une quantité de munitions moindre dans chaque chargeur.', - 'Le canon gauss est l\'équivalent du Super CAM mais en version miniature tirant des projectiles à haute densité et à grande vitesse sur ses cibles. Il est capable, en outre, de détruire des véhicules à blindage lourd tel des wraith\'s covenants, véritables chars d\'assaut à longue portée. Malheureusement, il est moins efficace contre l\'infanterie dû à sa cadence de tir plutôt faible et sa précision moindre.', - 'Les lance-missiles du CSNU sont équipés de missiles balistiques hautement explosifs capables de réduire aisément en miettes les chars covenants ou les chasseurs Séraphins. Ce lance-missiles, une fois ses salves tirées, nécessite plusieures minutes de réarmement pour être de nouveau opérationnel.'); + $nomterra = array('sparrowhawk','077-TC Pelican','C703 Shortsword Bomber','SHD Albatros','M12 LRV Warthogs','M12G1 LAAV Warthogs','M12A1 LAAV Warthogs','M808B Scorpions MBT','mitrailleuse(s) automatique M247 GP','DCA légère(s)','DCA lourde(s)','canon(s) Gauss','lanceur(s) de missiles'); + $nomterrn = array('Sparrowhawk','077-TC Pelican','C703 Shortsword Bomber','SHD Albatros','M12 LRV Warthogs','M12G1 LAAV Warthogs','M12A1 LAAV Warthogs','M808B Scorpions MBT','Mitrailleuse automatique M247 GP','DCA légère','DCA lourde','Canon Gauss','Lanceur de missiles'); + $nomterde = array( 'Véhicule à propulsion verticale permettant des attaques extrêmement rapides et destructrices grâce à ses six tubes lance-missiles, ses deux mitrailleuses légères, et sa mitrailleuse lourde frontale. Ces vaisseaux d’assaut rapide sont de véritables broyeurs de tôle grâce à leurs 6 tubes lance-missiles et sont capables de détruire des véhicules et des positions fortement blindées.', + 'Véhicule aérien de transport léger permettant le transport rapide de troupes à des endroits stratégiques tel un warthog ou un scorpion. Ils sont la base des renforts terrestres et permettent l’acheminement de troupes et de munitions rapidement.', + 'Vaisseau suborbital très rapide apte tant au combat aérien rapproché qu’au bombardement ciblé. Ces bombardiers ont un pointeur laser qui leur permet de viser au mieux les cibles ennemies, qu\'elles soient au sol ou aériennes. Ils sont néanmoins capables de combattre en combat aérien rapproché grâce à leurs missiles thermo guidés et sont utilisés lors de bombardements de cibles mineures.', + 'Véhicule aérien de transport lourd permettant le transport en masse de troupes ou de véhicules tels que des warthogs ou bien une paire de scorpions vers des zones de largage. Ces véhicules de soutien aérien lourd sont surtout utilisés lors d’offensives nécessitant un déploiement en masse d’unités blindées et de munitions au plus près des lignes adverses.', + 'Véhicule d’attaque léger permettant des assauts rapides et efficaces, ainsi que le transport léger de troupes. Ces véhicules sont la base des véhicules terrestres du CSNU.', + 'Véhicule léger équipé d’un canon à accélération magnétique (CAM), très efficace contre du personnel, des véhicules moyennement blindés, ou bien contre des véhicules aériens légers. Les Warthog M12G1 sont très répandus et surtout utilisés lors d\'offensives sur des cibles disposant d’un appui aérien ou terrestre léger.', + 'Véhicule léger, armé d’un lance-missiles anti-véhicule permettant des assauts rapides contre des véhicules blindés ou contre des positions fortifiées. Ils sont surtout utilisés en cas d’attaques de postes avancés.', + 'Tank blindé anti-véhicules. Permet l’attaque de cibles fortifiées grâce à ses balles perforantes de gros calibre. Ces tanks sont utilisés lors d’assauts massifs sur des bases fortifiées et vitales à l’ennemi.', + 'La mitrailleuse M247 est une arme de calibre moyen envoyant des balles de calibre 30 à une cadence de tir de 6 balles par seconde. Généralement positionnée dans des endroits fixes, cette tourelle, efficace contre l\'infanterie et les véhicules légers de petite taille est de précision moyenne suffisante pour éliminer une menace de quelques soldats covenants.', + 'Les DCA légères sont des canons anti-aérien de puissance moyenne mais de cadence de tir et de calibre de munitions à tête explosive élevée permettant de détruire la plupart des chasseurs légers avec aisance. Ce modèle est équipé d\'un emplacement spécial lui permettant de tirer également sur des cibles au sol.', + 'Les DCA lourdes sont quasi-similaires aux légères mais possèdent tout de même une différence au niveau du calibre des balles qui, plus élevé avec une tête explosif supérieure est comparable à une explosion de mine lotus. Il a en contre partie une capacité de tir plus limitée question cadence et une quantité de munitions moindre dans chaque chargeur.', + 'Le canon gauss est l\'équivalent du Super CAM mais en version miniature tirant des projectiles à haute densité et à grande vitesse sur ses cibles. Il est capable, en outre, de détruire des véhicules à blindage lourd tel des wraith\'s covenants, véritables chars d\'assaut à longue portée. Malheureusement, il est moins efficace contre l\'infanterie dû à sa cadence de tir plutôt faible et sa précision moindre.', + 'Les lance-missiles du CSNU sont équipés de missiles balistiques hautement explosifs capables de réduire aisément en miettes les chars covenants ou les chasseurs Séraphins. Ce lance-missiles, une fois ses salves tirées, nécessite plusieures minutes de réarmement pour être de nouveau opérationnel.'); $nomterri = array('csnusparrowhawkkp4.jpg','pelican.jpg','csnushortswordad3.jpg','albatross.jpg','warthog-vrl.jpg','M12G1_LAAV_Warthog.jpg','M12A1_LAAV_Warthog.jpg','scorpionN.jpg','tourelle_fixe.jpg','dca_legere.jpg','dca_lourde.jpg','tourelle_gauss.jpg','csnulancemissileol5.jpg'); } - //Nombre maximal de ressources embarqué + //Nombre maximal de ressources embarqué $nomvais_rs = array(5000,25000,7500,10,20000,50,800,1500,3000,10000,0,30000); - //Coefficient vitesse courte distance : temps pour parcourir un système + //Coefficient vitesse courte distance : temps pour parcourir un système $nomvais_dc = array(108,108,108,25,108,108,108,0,0,0,0,0); - //Temps de préparation courte distance : temps de préparation à compter avant tout déplacement + //Temps de préparation courte distance : temps de préparation à compter avant tout déplacement $nomvais_pdc = array(900,900,900,35,900,900,900,0,0,0,0,0); - //Coefficient vitesse longue distance : temps pour parcourir un système + //Coefficient vitesse longue distance : temps pour parcourir un système $nomvais_dl = array(0,54,54,0,54,0,54,54,54,54,0,54); - //Temps de préparation longue distance + //Temps de préparation longue distance $nomvais_pdl = array(0,0,0,0,0,0,0,0,0,0,0,0); //Temps de chauffe $nomvais_cdl = array(0,20,20,0,20,0,0,20,20,20,0,20); @@ -242,7 +242,7 @@ require_once('flotte_dep.php'); $nomvais_at = array(1,1,1,0.1,10,150,500,800,1200,500,1000); //Coque (pv) $nomvais_pv = array(20,60,50,10,100,40,250,400,600,1500,600); - //Défense (bouclier) + //Défense (bouclier) $nomvais_bc = array(20,60,100,1,100,100,400,500,600,700,400); //Rapide fire (nombre d'attaque par phase envers un vaisseau) $nomvais_rf = array( array(1,1,1,1,1,1,1,1,1,1,1,1), diff --git a/pages/ressource.php b/pages/ressource.php index 64d6bcb..023a741 100644 --- a/pages/ressource.php +++ b/pages/ressource.php @@ -44,19 +44,28 @@ if ( $coeff < 0 ) $coeff = 0; if ( $coeff > 1 ) $coeff = 1; -if ($metal >= $cap) $prod_met=0; +if ($metal >= $cap) { + $prod_met=0; + $metal = $cap; +} else { if ($mine_m < 0) $prod_met = 0.011*$temps_ecoule; else $prod_met = (ceil(((($mine_m*32)+(pow(1.41,$mine_m)*exp(0.066*$mine_m))*$coeff)/0.36)*$temps_ecoule)/10000)*3.7 + 0.011*$temps_ecoule; } -if ($cristal >= $cap) $prod_cri=0; +if ($cristal >= $cap) { + $prod_cri=0; + $cristal = $cap; +} else { if ( $mine_c < 0 ) $prod_cri = 0.0055*$temps_ecoule; else $prod_cri = ((floor(((($mine_c*13)+(pow(1.36,$mine_c)*exp(0.0675*$mine_c))*$coeff)/0.36)*$temps_ecoule)/10000)*7) + 0.0055*$temps_ecoule; } -if ($hydrogene >= $cap) $prod_hy=0; +if ($hydrogene >= $cap) { + $prod_hy=0; + $hydrogene = $cap; +} else { if ($centrale_f > 0) $conso_h = ((ceil((($centrale_f*5+(exp($centrale_f*0.3)*10))*$coeff)/0.36)/10000)*$temps_ecoule); else $conso_h = 0; @@ -73,7 +82,7 @@ $b=$cristal+$prod_cri; $c=$hydrogene+$prod_hy; //---------------M.A.J-------------- -mysql_query("UPDATE planete SET timestamp='$temps_actuel', metal='$a', cristal='$b', hydrogene='$c', coeff='$coeff', energie='$t' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); +//mysql_query("UPDATE planete SET timestamp='$temps_actuel', metal='$a', cristal='$b', hydrogene='$c', coeff='$coeff', energie='$t' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); $pseudoz = $ressource['pseudo']; @@ -81,8 +90,8 @@ $planetes = mysql_query("SELECT COUNT(*) AS nb FROM planete WHERE id_user='$id'" $nbre = mysql_fetch_assoc($planetes); $pla = $nbre['nb']; -echo '
-
-
- -
-
-'.$nomterrn[8].''; if ($def_1 > 0) echo" (".$def_1." unités)"; -echo '
'.$nomterde[8].'
Besoin de : '.$ressourc[0].' : 500 '.$ressourc[1].' : 200
-Temps de construction : '; sec($f); -echo '
-
'; -echo'
'; -if ($bat == 8) echo '


Chantier terrestre en construction'; -else { -if ($metal >= 500 && $cristal >= 200) { if ($temps_t < time()) { echo '



'; }} -else { -if ($unit_t<9 && $unit_t>0) echo '

Construction en cours dans le chantier terrestre'; -} -} -echo '

'; } + } + } + $FILETXT = ''; + } + else $FILETXT = 'Aucune défense en attente'; -if ($chantier_terrestre >= 3 && $energie_t >=2) { -echo'
- -
-
-'.$nomterrn[9].''; if ($def_2 > 0) echo" (".$def_2." unités)"; -echo '
'.$nomterde[9].'
Besoin de : '.$ressourc[0].' : 4.000 '.$ressourc[1].' : 2.000
-Temps de construction : '; sec($g); -echo '
-
'; -echo'
'; -if ($bat == 8) echo '


Chantier terrestre en construction'; -else { -if ($metal >= 4000 && $cristal >= 2000) { if ($temps_t < time()) { echo '



'; }} -else { -if ($unit_t<9 && $unit_t>0) echo '

Construction en cours dans le chantier terrestre'; -} -} -echo '

'; } + $tr = $fileTemps_v[0] + $fileTemps_v[1] - time(); + if (!empty($fileVeh[0])) $RESTE = $action = ''; + else $RESTE = ''; -if ($chantier_terrestre >= 4 && $armement >= 1) { -echo'
- -
-
-'.$nomterrn[10].''; if ($def_3 > 0) echo" (".$def_3." unités)"; -echo '
'.$nomterde[10].'
Besoin de : '.$ressourc[0].' : 4.500 '.$ressourc[1].' : 800 '.$ressourc[2].' : 600
-Temps de construction : '; sec($h); -echo '
-
'; -echo'
'; -if ($bat == 8) echo '


Chantier terrestre en construction'; -else { -if ($metal >= 4500 && $cristal >= 800 && $hydrogene >= 600) { if ($temps_t < time()) { echo '



'; }} -else { -if ($unit_t<9 && $unit_t>0) echo '

Construction en cours dans le chantier terrestre'; -} -} -echo '

'; } + $template->assign_vars(array('RACE' => $race, 'FILETXT' => $FILETXT, 'CHAINE' => $CHAINE, 'RESTE' => $RESTE)); -if ($chantier_terrestre >= 4 && $armement >= 3 && $energie_t >= 3) { -echo'
- -
-
-'.$nomterrn[11].''; if ($def_4 > 0) echo" (".$def_4." unités)"; -echo '
'.$nomterde[11].'
Besoin de : '.$ressourc[0].' : 12.000 '.$ressourc[1].' : 10.000 '.$ressourc[2].' : 1.000
-Temps de construction : '; sec($i); -echo '
-
'; -echo'
'; -if ($bat == 8) echo '


Chantier terrestre en construction'; -else { -if ($metal >= 12000 && $cristal >= 10000 && $hydrogene >= 1000) { if ($temps_t < time()) { echo '



'; }} -else { -if ($unit_t<9 && $unit_t>0) echo '

Construction en cours dans le chantier terrestre'; -} -} -echo '

'; } +$a=0; $b=0; $c=0; -if ($chantier_terrestre >= 8 && $armement >= 5 && $informatique >= 4) { -echo'
- -
-
-'.$nomterrn[12].''; if ($def_5 > 0) echo" (".$def_5." unités)"; -echo '
'.$nomterde[12].'
Besoin de : '.$ressourc[0].' : 15.000 '.$ressourc[1].' : 9.500 '.$ressourc[2].' : 1.500
-Temps de construction : '; sec($j); -echo '
-
'; -echo'
'; -if ($bat == 8) echo '


Chantier terrestre en construction'; -else { -if ($metal >= 15000 && $cristal >= 9500 && $hydrogene >= 1500) { if ($temps_t < time()) { echo '



'; }} -else { -if ($unit_t<9 && $unit_t>0) echo '

Construction en cours dans le chantier terrestre'; -} -} -echo '

'; } + // Défense n°1 : Shade/Tour à plasma/Mitrailleuse automatique M247 GP ; planete.def_1 + if ($chantier_spatial >= 1) { + $i = 8; + $nom_bdd = 'def'.($i-7); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' construit)'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=500; $b=200; + if($bat == 8) $action = 'Le chantier terrestre est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomterrn[$i])) $template->assign_block_vars('defense', array('IMAGE' => $nomterri[$i], 'NOM' => $nomterrn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomterde[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($f), 'ACTION' => $action)); + } -} else echo '
Vous devez d\'abord construire un chantier terrestre !
'; -?> - - \ No newline at end of file + // Défense n°2 : Strong shade/Tour Ion/DCA légère ; planete.def_2 + if ($chantier_terrestre >= 3 && $energie_t >=2) { + $i = 9; + $nom_bdd = 'def'.($i-7); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' construit)'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=4000; $b=2000; + if($bat == 8) $action = 'Le chantier terrestre est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomterrn[$i])) $template->assign_block_vars('defense', array('IMAGE' => $nomterri[$i], 'NOM' => $nomterrn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomterde[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($g), 'ACTION' => $action)); + } + + // Défense n°3 : Tourelle à barreau de combustible/Canon Orbital/DCA lourde ; planete.def_3 + if ($chantier_terrestre >= 4 && $armement >= 3 && $energie_t >= 3) { + $i = 10; + $nom_bdd = 'def'.($i-7); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' construit)'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=4500; $b=800; $c=600; + if($bat == 8) $action = 'Le chantier terrestre est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomterrn[$i])) $template->assign_block_vars('defense', array('IMAGE' => $nomterri[$i], 'NOM' => $nomterrn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomterde[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($h), 'ACTION' => $action)); + } + + // Défense n°4 : Canon à plasma/Drone/Canon Gauss ; planete.def_4 + if ($chantier_terrestre >= 4 && $armement >= 1) { + $i = 11; + $nom_bdd = 'def'.($i-7); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' construit)'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=12000; $b=10000; $c=1000; + if($bat == 8) $action = 'Le chantier terrestre est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomterrn[$i])) $template->assign_block_vars('defense', array('IMAGE' => $nomterri[$i], 'NOM' => $nomterrn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomterde[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($h), 'ACTION' => $action)); + } + + // Défense n°5 : Lanceur de torpilles plasma/Station de defense/Lanceur de missiles ; planete.def_5 + if ($chantier_terrestre >= 4 && $armement >= 1) { + $i = 12; + $nom_bdd = 'def'.($i-7); + if (${$nom_bdd} > 0) $niveau = '('.${$nom_bdd}.' construit)'; else $niveau = ''; + $n=(${$nom_bdd}-1); $a=15000; $b=9500; $c=1500; + if($bat == 8) $action = 'Le chantier terrestre est en cours d\'évolution'; + else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); + if (!empty($nomterrn[$i])) $template->assign_block_vars('defense', array('IMAGE' => $nomterri[$i], 'NOM' => $nomterrn[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $nomterde[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec($h), 'ACTION' => $action)); + } + + $template->pparse('defenses'); +} +else { + $template->set_filenames(array('ressourcestpl' => 'ressources.tpl')); + $template->assign_vars( array('RES_IMAGE' => $RES_IMAGE, 'NOM_METAL' => $NOM_METAL, 'NOM_CRISTAL' => $NOM_CRISTAL, 'NOM_HYDROGENE' => $NOM_HYDROGENE, 'NOM_ENERGIE' => $NOM_ENERGIE, 'RES_METAL' => $RES_METAL, 'RES_CRISTAL' => $RES_CRISTAL, 'RES_HYDROGENE' => $RES_HYDROGENE, 'RES_ENERGIE' => $RES_ENERGIE, 'ERREUR' => $ERREUR, 'HEADER' => $HEADER, 'PUB' => $PUB)); + for ($i=0 ; $iassign_block_vars('planetes',array('RES_VALUE' => $Aplan_value[$i], 'RES_MORE' => $Aplan_more[$i], 'RES_REF' => $Aplan_ref[$i])); + } + + $template->set_filenames(array('manque' => 'manque.tpl')); + $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); + + $template->assign_vars( array('TEXTE' => 'Vous devez d\'abord construire un chantier spatial !', 'PUB' => $PUB)); + $template->pparse('manque'); +} +?> \ No newline at end of file diff --git a/pages/defense_ajout.php b/pages/defense_ajout.php new file mode 100644 index 0000000..19a2ea0 --- /dev/null +++ b/pages/defense_ajout.php @@ -0,0 +1,44 @@ += $temps_terrestre && !empty($temps_terrestre)) { + switch ($unit_v) { + case 9: $def_1++; mysql_query("UPDATE planete SET def_1='$def_1' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 10: $def_2++; mysql_query("UPDATE planete SET def_2='$def_2' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 11: $def_3++; mysql_query("UPDATE planete SET def_3='$def_3' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 12: $def_4++; mysql_query("UPDATE planete SET def_4='$def_4' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + case 13: $def_5++; mysql_query("UPDATE planete SET def_5='$def_5' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'"); break; + } + + $pos = strpos(implode(',', $fileVeh).',', $veh.','); + if (!($pos === false)) { + $depart = 0; + $nb = 1; + $eff = 0; + $newArray_veh = ''; $newArray_temps_v = $fileTemps_t[0].' '; + for ($i=0 ; $i= $nb || $i < $depart) { + $newArray_veh .= $fileVeh[$i].' '; + $newArray_temps_v .= $fileTemps_t[$i+1].' '; + } + elseif ($i == 0) { $newArray_temps_v = $temps_v.' '; $eff++; } + else $eff++; + } + $fileVeh = split(' ', trim($newArray_veh)); + $fileTemps_t = split(' ', trim($newArray_temps_v)); + $temps_v = implode(' ', $fileTemps_t); + $veh = implode(' ', $fileVeh); +$pos=$_SESSION['pos']; + + if (count($fileTemps_t) == 0 || count($fileTemps_t) == 1 || count($fileVeh) == 0) mysql_query("UPDATE planete SET temps_t='', unit_t='' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + else mysql_query("UPDATE planete SET temps_t='$temps_v', unit_t='$veh' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + } +} +mysql_close(); +?> \ No newline at end of file diff --git a/pages/defense_validation.php b/pages/defense_validation.php new file mode 100644 index 0000000..a074c11 --- /dev/null +++ b/pages/defense_validation.php @@ -0,0 +1,92 @@ += 1 && !ereg('e,', implode(',',$fileVeh).',')) { + $temps_v = ''; + $veh = 'e'; +} +else { + // Annulation de la production en chaîne si elle existe + //if (ereg('e,', implode(',',$fileVeh).',')) { header('Location: annul_bat.php?bat=e&go='.$_POST['type']); exit; } + + if (!isset($_POST['sa'])) exit; + else $sa = abs(floor($_POST['sa'])); + + if ($_POST['type'] == 9 && $chantier_terrestre >= 2) { + $metal -= 500*$sa; + $cristal -= 200*$sa; + $temps_v = ceil(480/pow(1.25,($chantier_terrestre-1))); + $veh = 9; + } + elseif ($_POST['type'] == 10) { + $metal -= 4000*$sa; + $cristal -= 2000*$sa; + $temps_v = ceil(1560/pow(1.25,($chantier_terrestre-3))); + $veh = 10; + } + elseif ($_POST['type'] == 11) { + $metal -= 4500*$sa; + $cristal -= 800*$sa; + $hydrogene -= 600*$sa; + $temps_v = ceil(1800/pow(1.25,($chantier_terrestre-4))); + $veh = 11; + } + elseif ($_POST['type'] == 12) { + $metal -= 12000*$sa; + $cristal -= 10000*$sa; + $hydrogene -= 1000*$sa; + $temps_v = ceil(6720/pow(1.25,($chantier_terrestre-4))); + $veh = 12; + } + elseif ($_POST['type'] == 13) { + $metal -= 15000*$sa; + $cristal -= 9500*$sa; + $hydrogene -= 1500*$sa; + $temps_v = ceil(12960/pow(1.25,($chantier_terrestre-8))); + $veh = 13; + } +} + +if (isset($veh) && $veh != '' && (!empty($nomterrn[$veh-1]) || $veh == 'e' || (isset($_GET['act']) && $_GET['act'] == 'e'))) { + if ($metal >= 0 && $cristal >= 0 && $hydrogene >= 0) { + for ($c=0 ; $c < $sa ; $c++){ + $fileVeh = explode(' ',implode(' ',$fileVeh).' '.$veh); + } + $veh = implode(' ',$fileVeh); + if (count($fileTemps_t) == 0 || count($fileTemps_t) == 1) { + $temps_vs = time(); + for ($c=0 ; $c < $sa ; $c++){ + $temps_vs .= ' '.$temps_v; + } + $temps_v = $temps_vs; + } + else { + $temps_vs = implode(' ',$fileTemps_t); + for ($c=0 ; $c < $sa ; $c++){ + $temps_vs .= ' '.$temps_v; + } + $temps_v = $temps_vs; + } + + mysql_query("UPDATE planete SET metal='$metal', cristal='$cristal', temps_t='$temps_v', unit_t='$veh' WHERE id_user='$id' AND galaxie='$galaxy' AND ss='$ss' AND position='$pos'") or die ("erreur sql ".mysql_error()); + } + else { + header('Location: chantier_spatial.php?err=3'); + exit; + } +} +mysql_close(); +$veh = $fileVeh[0]; +if (isset($_GET['go']) && $_GET['go'] == 1) header('Location: chantier_spatial.php?err=2'); +else header('Location: defense.php'); +?> \ No newline at end of file diff --git a/pages/descriptions/diz/Thumbs.db b/pages/descriptions/diz/Thumbs.db new file mode 100644 index 0000000..9c8db8e Binary files /dev/null and b/pages/descriptions/diz/Thumbs.db differ diff --git a/pages/descriptions/diz/admin.css b/pages/descriptions/diz/admin.css new file mode 100644 index 0000000..cf8a184 --- /dev/null +++ b/pages/descriptions/diz/admin.css @@ -0,0 +1,49 @@ +body { +color: #FF0000; +background-color: #000000; +background-image: url('panel/background.jpg'); +scrollbar-arrow-color: #E6EBFB; +scrollbar-base-color: #344566; +scrollbar-track-color: #344566; +scrollbar-face-color: #344566; +scrollbar-highlight-color: #344566; +scrollbar-3dlight-color: #465673; +scrollbar-darkshadow-color: #344566; +scrollbar-shadow-color: #465673; +font-size: 13px; +font-family: Tahoma,sans-serif; +margin-left: 68px; +margin-bottom: 20px; +} + +u { +font-style: underline; +} + +i { +font-style: italic; +} + +a { +color: #4080ff; +font-size: 12px; +font-family: verdana, serif; +text-decoration: underline; +border: none; +} + +img { +border: none; +} + +a:hover { +cursor: pointer; +} + +a:active, a:focus { +cursor: wait; +} + +a:visited { +cursor: pointer; +} \ No newline at end of file diff --git a/pages/descriptions/diz/base.css b/pages/descriptions/diz/base.css index 0a3d1ba..8664ca7 100644 --- a/pages/descriptions/diz/base.css +++ b/pages/descriptions/diz/base.css @@ -218,6 +218,7 @@ td.bla { height: 132px; width: 130px; border: 1px solid #004080; +background-repeat: no-repeat; } td.blb { diff --git a/pages/descriptions/diz/fond/Thumbs.db b/pages/descriptions/diz/fond/Thumbs.db index fbcca22..b7a3114 100644 Binary files a/pages/descriptions/diz/fond/Thumbs.db and b/pages/descriptions/diz/fond/Thumbs.db differ diff --git a/pages/descriptions/diz/panel/Thumbs.db b/pages/descriptions/diz/panel/Thumbs.db new file mode 100644 index 0000000..b23e936 Binary files /dev/null and b/pages/descriptions/diz/panel/Thumbs.db differ diff --git a/pages/descriptions/diz/panel/background.jpg b/pages/descriptions/diz/panel/background.jpg new file mode 100644 index 0000000..cf1479b Binary files /dev/null and b/pages/descriptions/diz/panel/background.jpg differ diff --git a/pages/descriptions/diz/planete/Thumbs.db b/pages/descriptions/diz/planete/Thumbs.db index d11c512..6edd22d 100644 Binary files a/pages/descriptions/diz/planete/Thumbs.db and b/pages/descriptions/diz/planete/Thumbs.db differ diff --git a/pages/images/Thumbs.db b/pages/images/Thumbs.db new file mode 100644 index 0000000..b15c946 Binary files /dev/null and b/pages/images/Thumbs.db differ diff --git a/pages/images/batiments/Thumbs.db b/pages/images/batiments/Thumbs.db new file mode 100644 index 0000000..79d7a3d Binary files /dev/null and b/pages/images/batiments/Thumbs.db differ diff --git a/pages/images/caserne/Thumbs.db b/pages/images/caserne/Thumbs.db new file mode 100644 index 0000000..a20bc98 Binary files /dev/null and b/pages/images/caserne/Thumbs.db differ diff --git a/pages/images/menu/Thumbs.db b/pages/images/menu/Thumbs.db new file mode 100644 index 0000000..2dece42 Binary files /dev/null and b/pages/images/menu/Thumbs.db differ diff --git a/pages/images/planetes/Thumbs.db b/pages/images/planetes/Thumbs.db new file mode 100644 index 0000000..8a0f9af Binary files /dev/null and b/pages/images/planetes/Thumbs.db differ diff --git a/pages/images/technologies/Thumbs.db b/pages/images/technologies/Thumbs.db new file mode 100644 index 0000000..3c6a8c9 Binary files /dev/null and b/pages/images/technologies/Thumbs.db differ diff --git a/pages/images/terrestre/Thumbs.db b/pages/images/terrestre/Thumbs.db new file mode 100644 index 0000000..9f42c7f Binary files /dev/null and b/pages/images/terrestre/Thumbs.db differ diff --git a/pages/images/vaisseaux/Thumbs.db b/pages/images/vaisseaux/Thumbs.db new file mode 100644 index 0000000..f2e6ac2 Binary files /dev/null and b/pages/images/vaisseaux/Thumbs.db differ diff --git a/pages/laboratoire.php b/pages/laboratoire.php index 71dec22..aecf573 100644 --- a/pages/laboratoire.php +++ b/pages/laboratoire.php @@ -81,7 +81,8 @@ if ($labo > 0) { $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); $CHAINE = ''; if (!empty($fileTec[0])) { - for ($i=0 ; $iassign_block_vars('file',array('NOM' => $technolo[$fileTec[$i]-1], 'NUM' => $fileTec[$i])); else $CHAINE = '
Arrêter de produire à la chaîne'; } @@ -98,7 +99,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $b=ceil(pow(2,$n)*500); $c=ceil(pow(2,$n)*150); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, 0, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'BESOIN' => ressources($metal, $cristal, $hydrogene, 0, $b, $c, $mine_m, $mine_c, $mine_h), 'TEMPS' => sec(ceil((420*2*($informatique+1))/pow(1.25,($labo-1)))), 'ACTION' => $action)); @@ -111,7 +112,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$n)*500); $b=ceil(pow(2,$n)*750); $c=ceil(pow(2,$n)*100); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((600*2*($detection+1))/pow(1.25,($labo-2)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -124,7 +125,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $n=(${$nom_bdd}-1); $a=ceil(pow(2,$n)*2500); $b=ceil(pow(2,$n)*500); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((1500*2*($armement+1))/pow(1.25,($labo-5)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, 0, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -138,7 +139,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*4000); $b=ceil(pow(2,$n)*1500); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((1710*2*($blindage+1))/pow(1.25,($labo-4)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, 0, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -152,7 +153,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*2000); $b=ceil(pow(2,$n)*1500); $c=ceil(pow(2,$n)*300); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((900*2*($energie_t+1))/pow(1.25,($labo-2)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -166,7 +167,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*1400); $b=ceil(pow(2,$n)*400); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((510*2*($reacteur+1))/pow(1.25,($labo-2)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, 0, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -180,7 +181,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*3000); $b=ceil(pow(2,$n)*2100); $c=ceil(pow(2,$n)*750); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((1650*2*($reacteur_f+1))/pow(1.25,($labo-4)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -194,7 +195,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*5000); $b=ceil(pow(2,$n)*4000); $c=ceil(pow(2,$n)*1500); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((2400*2*($reacteur_ff+1))/pow(1.25,($labo-6)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -208,7 +209,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*800); $b=ceil(pow(2,$n)*1000); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((360*2*($medecine+1))/pow(1.25,($labo-1)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, 0, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -222,7 +223,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(2,$n)*2600); $b=ceil(pow(2,$n)*2600); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((4410*2*($tactique+1))/pow(1.25,($labo-3)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, 0, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -236,7 +237,7 @@ if ($labo > 0) { if (${$nom_bdd} > 0) $niveau = '(Niveau '.${$nom_bdd}.')'; else $niveau = ''; $a=ceil(pow(3,$n)*5200); $b=ceil(pow(3,$n)*4250); $c=ceil(pow(3,$n)*850); if (is_array($fileTec) && $tec == $i+1) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche en cours, temps restant :
'; } - elseif (is_array($fileTec) && ereg(($i+1).',',implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } + elseif (is_array($fileTec) && ereg(','.($i+1).',',','.implode(',', $fileTec).',')) { $tr=$fileTemps_t[0]+$fileTemps_t[1]-time(); $action = 'Recherche dans la file d\'attente'; } elseif($bat == 7) $action = 'Le laboratoire est en cours d\'évolution'; else $action = verification_des_ress($i+1, $metal, $cristal, $hydrogene, $a, $b, $c); if (!empty($technolo[$i])) $template->assign_block_vars('technologie', array('TEMPS' => sec(ceil((5000*2*($spartan+1))/pow(1.25,($labo-8)))), 'BESOIN' => ressources($metal, $cristal, $hydrogene, $a, $b, $c, $mine_m, $mine_c, $mine_h), 'IMAGE' => $technoli[$i], 'NOM' => $technolo[$i], 'NUM' => $i, 'NIVEAU' => $niveau, 'DESCRIPTION' => $technode[$i], 'ACTION' => $action)); @@ -244,21 +245,17 @@ if ($labo > 0) { $template->pparse('labo'); } -else echo ' - - - - - - - - - - - - ::Halo-Battle:: Bêta - Laboratoire - - -


Vous devez d\'abord construire un centre de recherche !
-'; +else { + $template->set_filenames(array('ressourcestpl' => 'ressources.tpl')); + $template->assign_vars( array('RES_IMAGE' => $RES_IMAGE, 'NOM_METAL' => $NOM_METAL, 'NOM_CRISTAL' => $NOM_CRISTAL, 'NOM_HYDROGENE' => $NOM_HYDROGENE, 'NOM_ENERGIE' => $NOM_ENERGIE, 'RES_METAL' => $RES_METAL, 'RES_CRISTAL' => $RES_CRISTAL, 'RES_HYDROGENE' => $RES_HYDROGENE, 'RES_ENERGIE' => $RES_ENERGIE, 'ERREUR' => $ERREUR, 'HEADER' => $HEADER, 'PUB' => $PUB)); + for ($i=0 ; $iassign_block_vars('planetes',array('RES_VALUE' => $Aplan_value[$i], 'RES_MORE' => $Aplan_more[$i], 'RES_REF' => $Aplan_ref[$i])); + } + + $template->set_filenames(array('manque' => 'manque.tpl')); + $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); + + $template->assign_vars( array('TEXTE' => 'Vous devez d\'abord construire un centre de recherche !', 'PUB' => $PUB)); + $template->pparse('manque'); +} ?> \ No newline at end of file diff --git a/pages/laboratoire_ajout.php b/pages/laboratoire_ajout.php index b3b7013..21af741 100644 --- a/pages/laboratoire_ajout.php +++ b/pages/laboratoire_ajout.php @@ -1,5 +1,8 @@
- Forum Halo-Battle
- Rapport de bug
- F.A.Q.
+echo '
+
'; if ($pla > 0 ) { echo '
diff --git a/pages/ressource.vr.php b/pages/ressource.vr.php deleted file mode 100644 index cf5c3f0..0000000 --- a/pages/ressource.vr.php +++ /dev/null @@ -1,103 +0,0 @@ - 0) $energie_m = ceil((exp($mine_m*0.28)*10)); else $energie_m=0; -if ($mine_c > 0) $energie_c = ceil((exp($mine_c*0.28)*10)); else $energie_c=0; -if ($mine_h > 0) $energie_h = ceil((exp($mine_h*0.31)*10)); else $energie_h=0; -if ($centrale_f > 0 ) $energie_f = ceil((($centrale_f*80+(exp($centrale_f*0.38)*11)))); else $energie_f =0; -if ($centrale_s > 0 ) $energie_s = ceil((($centrale_s*20+(exp($centrale_s*0.3)*10)))); else $energie_s =0; -$t = $energie_s + $energie_f; -$nrj= $t + (-$energie_m-$energie_c-$energie_h); - -$coeff = 1 + (($nrj)*($energie_s + $energie_f)); -if ( $coeff < 0 ) $coeff = 0; -if ( $coeff > 1 ) $coeff = 1; - - -if ($metal >= $cap) $prod_met=0; -else { - if ($mine_m < 0) $prod_met = 0.011*$temps_ecoule; - else $prod_met = ceil(((($mine_m*32)+(pow(1.41,$mine_m)*exp(0.066*$mine_m))*$coeff)/0.36)*$temps_ecoule)/10000 + 0.011*$temps_ecoule; -} - -if ($cristal >= $cap) $prod_cri=0; -else { - if ( $mine_c < 0 ) $prod_cri = 0.0055*$temps_ecoule; - else $prod_cri = ((floor(((($mine_c*21)+(pow(1.36,$mine_c)*exp(0.0675*$mine_c))*$coeff)/0.36)*$temps_ecoule)/10000)*2)-20 + 0.0055*$temps_ecoule; -} - -if ($hydrogene >= $cap) $prod_hy=0; -else { - if ($centrale_f > 0) $conso_h = ((ceil((($centrale_f*5+(exp($centrale_f*0.3)*10))*$coeff)/0.36)/10000)*$temps_ecoule)*20; - else $conso_h = 0; - - if ($mine_h < 0) $prod_hy = 0; - else $prod_hy = (((floor(((($mine_h*21)+(pow(1.394,$mine_h)*exp(0.072*$mine_h))*$coeff)/0.36)*$temps_ecoule)/10000)*1.8)-20) - $conso_h; - if ($mine_h == 0) $prod_hy=0; - if ($prod_hy < 0) $prod_hy = 0; -} - - -$a=$metal+$prod_met; -$b=$cristal+$prod_cri; -$c=$hydrogene+$prod_hy; - -//---------------M.A.J-------------- -mysql_query("UPDATE planete SET timestamp='$temps_actuel', metal='$a', cristal='$b', hydrogene='$c', coeff='$coeff', energie='$t' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); - -$pseudo = $ressource['pseudo']; - -$planetes = mysql_query("SELECT COUNT(*) AS nb FROM planete WHERE id_user='$id'"); -$nbre = mysql_fetch_assoc($planetes); -$pla = $nbre['nb']; - -echo '
- -'; if ($pla > 0 ) { -echo ' -"; } - -echo " - -
-
-
MétalCristalHydrogèneEnergie
".floor($a)."".floor($b)."".floor($c)."".$nrj."/".$t."
-
"; - -mysql_close(); -?> \ No newline at end of file diff --git a/pages/ressource_nem.php b/pages/ressource_nem.php deleted file mode 100644 index 2a04233..0000000 --- a/pages/ressource_nem.php +++ /dev/null @@ -1,96 +0,0 @@ -= $cap) $prod_met=0; -else $prod_met = (ceil((($mine_m*40+(exp($mine_m*0.33)*10))*$coeff)/0.36)/10000)*$temps_ecoule ; - - -if ($cristal >= $cap) $prod_cri=0; -else $prod_cri = (ceil((($mine_c*20+(exp($mine_c*0.325)*10))*$coeff)/0.36)/10000)*$temps_ecoule; - - -if ($hydrogene >= $cap) $prod_hy=0; -else { - if ($centrale_f > 0) $conso_h = (ceil((($centrale_f*5+(exp($centrale_f*0.3)*10))*$coeff)/0.36)/10000)*$temps_ecoule; - else $conso_h = 0; - - $prod_hy = (ceil((($mine_h*12+(exp($mine_h*0.32)*10))*$coeff)/0.36)/10000)*$temps_ecoule - $conso_h; - if ($mine_h == 0) $prod_hy=0 - $conso_h; - if ($prod_hy < 0) $prod_hy = 0 - $conso_h; -} - -$a = $metal + $prod_met; -$b = $cristal + $prod_cri; -$c = $hydrogene + $prod_hy; - - -if ($mine_m > 0) $energie_m = ceil((exp($mine_m*0.28)*10))*$coeff; else $energie_m=0; -if ($mine_c > 0) $energie_c = ceil((exp($mine_c*0.28)*10))*$coeff; else $energie_c=0; -if ($mine_h > 0) $energie_h = ceil((exp($mine_h*0.31)*10))*$coeff; else $energie_h=0; -$nrj = $ressource['energie_prod'] - ($energie_m+$energie_c+$energie_h); - -//---------------M.A.J-------------- -mysql_query("UPDATE planetes SET `last_update` = '$temps_actuel', `metal` = '$a', `cristal` = '$b', `hydrogene` = '$c' WHERE `id` = '$id'"); - - -$image = $ressource['image']; -switch ($image) { - case 1 : $image = "images/p1.jpg"; break; - case 2 : $image = "images/p2.jpg"; break; - case 3 : $image = "images/p3.jpg"; break; - case 4 : $image = "images/p4.jpg"; break; - case 5 : $image = "images/p5.jpg"; break; - case 6 : $image = "images/p6.jpg"; break; - case 7 : $image = "images/p7.jpg"; break; - case 8 : $image = "images/p8.jpg"; break; - case 9 : $image = "images/p9.jpg"; break; - case 10 : $image = "images/p10.jpg"; break; - case 11 : $image = "images/p11.jpg"; break; - case 12 : $image = "images/p12.jpg"; break; -} - -$nbr_non_vus = mysql_query("SELECT COUNT(*) AS nb FROM `planetes` WHERE `id_user` = '$id_user'"); -$nbre = mysql_fetch_assoc($nbr_non_vus); -$pla = $nbre['nb']; - -echo "
- -"; -if ($pla >= 2) { - echo " - "; -} - -echo ' - -
-
-
MétalCristalHydrogèneEnergie
'.floor($a).''.floor($b).''.floor($c).''.$nrj.'/'.$ressource['energie'].'
-






'; - -mysql_close(); -?> - - diff --git a/pages/ressources.php b/pages/ressources.php index d784b86..62cbb8c 100644 --- a/pages/ressources.php +++ b/pages/ressources.php @@ -1,8 +1,5 @@ set_filenames(array('ressourcestpl' => 'ressources.tpl')); + $template->assign_vars( array('RES_IMAGE' => $RES_IMAGE, 'NOM_METAL' => $NOM_METAL, 'NOM_CRISTAL' => $NOM_CRISTAL, 'NOM_HYDROGENE' => $NOM_HYDROGENE, 'NOM_ENERGIE' => $NOM_ENERGIE, 'RES_METAL' => $RES_METAL, 'RES_CRISTAL' => $RES_CRISTAL, 'RES_HYDROGENE' => $RES_HYDROGENE, 'RES_ENERGIE' => $RES_ENERGIE, 'ERREUR' => $ERREUR, 'HEADER' => $HEADER, 'PUB' => $PUB)); + for ($i=0 ; $iassign_block_vars('planetes',array('RES_VALUE' => $Aplan_value[$i], 'RES_MORE' => $Aplan_more[$i], 'RES_REF' => $Aplan_ref[$i])); + } + + $template->set_filenames(array('Tabressources' => 'Tabressources.tpl')); + $template->assign_var_from_handle('RESSOURCES', 'ressourcestpl'); + $template->assign_vars(array('PUB' => $PUB)); $cap = (pow(2,$silo)*100000); +$temps_ecoule = 3600; +if ($mine_m > 0) $energie_m = ceil((exp($mine_m*0.28)*10)); else $energie_m= 0; +if ($mine_c > 0) $energie_c = ceil((exp($mine_c*0.28)*10)); else $energie_c= 0; +if ($mine_h > 0) $energie_h = ceil((exp($mine_h*0.31)*10)); else $energie_h= 0; +if ($centrale_f > 0) $energie_f = ceil((($centrale_f*80+(exp($centrale_f*0.38)*11)))); else $energie_f = 0; +if ($centrale_s > 0) $energie_s = ceil((($centrale_s*20+(exp($centrale_s*0.3)*10)))); else $energie_s = 0; +//Calcul de la consomation d'énergie +$nrj = $energie_m + $energie_c + $energie_h; -if ($mine_m < 0) $prod_met = 40; -else $prod_metal = ceil((($mine_m*32)+(pow(1.41,$mine_m)*exp(0.066*$mine_m))*$coeff)*3.7) + 40; +//Calcul de la production d'énergie +$t = $energie_s * $coeff_centrale_s + $energie_f * $coeff_centrale_f; +$coeff = $t / $nrj; -if ( $mine_c < 0 ) $prod_cri = 20; -else $prod_cristal = (floor(($mine_c*13)+(pow(1.36,$mine_c)*exp(0.0675*$mine_c))*$coeff)*7) + 20; +if ($coeff < 0) $coeff = 0; +elseif ($coeff == 0) $coeff = 0; +elseif ($coeff > 1) $coeff = 1; +//Calcul des proportions +$point = $coeff * 3; -if ($centrale_f > 0) { $conso_hy = ceil(($centrale_f*5+(exp($mine_m*0.3)*10))*$coeff); } -else {$conso_hy=0;} - -if ($mine_h < 0) $prod_hydrogene = 0; -else $prod_hydrogene = (ceil((($mine_h*12)+(pow(1.394,$mine_h)*exp(0.072*$mine_h))*$coeff)*5)); - -$w = $prod_hydrogene - $conso_hy; -if ($mine_h == 0) $w=0; -if (($prod_hydrogene-$conso_hy) < 0) $w= 0; - -if ($mine_m > 0) $energie_m = ceil((exp($mine_m*0.28)*10))*$coeff; else $energie_m=0; -if ($mine_c > 0) $energie_c = ceil((exp($mine_c*0.28)*10))*$coeff; else $energie_c=0; -if ($mine_h > 0) $energie_h = ceil((exp($mine_h*0.31)*10))*$coeff; else $energie_h=0; -if ($centrale_s > 0) $energie_s = ceil((($centrale_s*20+(exp($centrale_s*0.3)*10))*$coeff)); else $energie_s =0; -if ($centrale_f > 0) $energie_f = ceil((($centrale_f*80+(exp($centrale_f*0.38)*11))*$coeff)); else $energie_f =0; - -$u= ($energie_s+$energie_f) - ($energie_m+$energie_c+$energie_h); - -echo" - -"; - - -echo "
- - -
-Facteur de production : "; if ($coeff < 1) echo "".$coeff.""; else echo $coeff; - -echo"
- - - - - - - - - - - -"; - -echo ""; -echo " - - -"; - - -echo ""; -echo " - - - -"; - -if ($mine_h > 0) { -echo ""; -echo " - - - -"; +else { + $p_mine_m = 0.33333333; + $p_mine_c = 0.33333333; + $p_mine_h = 0.33333333; } -if ($centrale_s > 0) { -echo " - - - - - -"; } +if ($metal >= $cap) { + $prod_met=0; + $metal = $cap; +} +else { + if ($mine_m < 0) $prod_met = 0.011*$temps_ecoule; + else $prod_met = ((ceil(((($mine_m*32)+(pow(1.41,$mine_m)*exp(0.066*$mine_m)))/0.36)*$temps_ecoule)/10000)*3.7 + 0.011*$temps_ecoule)*$coeff_mine_m; +} -if ($centrale_f > 0) { -echo " - - - - - -"; } +if ($cristal >= $cap) { + $prod_cri=0; + $cristal = $cap; +} +else { + if ($mine_c < 0) $prod_cri = 0.0055*$temps_ecoule; + else $prod_cri = (((ceil(((($mine_c*13)+(pow(1.36,$mine_c)*exp(0.0675*$mine_c)))/0.36)*$temps_ecoule)/10000)*7) + 0.0055*$temps_ecoule)*$coeff_mine_c; +} + +if ($hydrogene >= $cap) { + $prod_hy=0; + $hydrogene = $cap; +} +else { + if ($mine_h < 0) $prod_hy = 0; + else $prod_hy = ((((floor(((($mine_h*12)+(pow(1.394,$mine_h)*exp(0.072*$mine_h)))/0.36)*$temps_ecoule)/10000)*5)) - $conso_h)*$coeff_mine_h; + if ($mine_h == 0) $prod_hy=0; + if ($prod_hy < 0) $prod_hy = 0; +} + +if ($centrale_f > 0) $conso_h = ((ceil((($centrale_f*5+(exp($centrale_f*0.3)*10)))/0.36)/10000)*$temps_ecoule)*$coeff_energie_f; +else $conso_h = 0; +$prod_mineh = $prod_hy; +$prod_hysv = $prod_hy; +$prod_hy -= $conso_h; + +if ($hydrogene+$prod_hy < 0) { + $prod_hy = $prod_hysv; + $conso_h = 0; + $coeff_energie_f = 0; +} + +$a=$metal+$prod_met; +$b=$cristal+$prod_cri; +$w = $prod_hy; +$c = $hydrogene+$prod_hy; +$u = ($energie_s*$coeff_energie_s+$energie_f*$coeff_energie_f) - ($energie_m+$energie_c+$energie_h); +$energie_f = $energie_f*$coeff_energie_f; -echo " - - - - - - + $template->assign_block_vars('batiment', array('NOM' => $batiment[0], 'NIVEAU' => $mine_m, 'COEFF' => (floor($coeff_mine_m*1000)/10).'%', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#00FF00', 'CENERGIE' => '#FF0000', 'PMETAL' => separerNombres(floor($prod_met)), 'PCRISTAL' => '', 'PHYDROGENE' => '', 'PENERGIE' => '-'.separerNombres(floor(abs($energie_m))))); + $template->assign_block_vars('batiment', array('NOM' => $batiment[1], 'NIVEAU' => $mine_c, 'COEFF' => (floor($coeff_mine_c*1000)/10).'%', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#00FF00', 'CENERGIE' => '#FF0000', 'PMETAL' => '', 'PCRISTAL' => separerNombres(floor($prod_cri)), 'PHYDROGENE' => '', 'PENERGIE' => '-'.separerNombres(floor(abs($energie_c))))); + if ($mine_h > 0) $template->assign_block_vars('batiment', array('NOM' => $batiment[2], 'NIVEAU' => $mine_h, 'COEFF' => (floor($coeff_mine_h*1000)/10).'%', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#00FF00', 'CENERGIE' => '#FF0000', 'PMETAL' => '', 'PCRISTAL' => '', 'PHYDROGENE' => separerNombres(floor($prod_mineh)), 'PENERGIE' => '-'.separerNombres(floor(abs($energie_h))))); + if ($centrale_s > 0) $template->assign_block_vars('batiment', array('NOM' => $batiment[3], 'NIVEAU' => $centrale_s, 'COEFF' => ($coeff_energie_s*100).'%', 'CMETAL' => '#FF0000', 'CCRISTAL' => '#FF0000', 'CHYDROGENE' => '#FF0000', 'CENERGIE' => '#00FF00', 'PMETAL' => '', 'PCRISTAL' => '', 'PHYDROGENE' => '', 'PENERGIE' => separerNombres(floor(abs($energie_s))))); + if ($centrale_f > 0) $template->assign_block_vars('batiment', array('NOM' => $batiment[4], 'NIVEAU' => $centrale_f, 'COEFF' => ($coeff_energie_f*100).'%', 'CMETAL' => '#FF0000', 'CCRISTAL' => '#FF0000', 'CHYDROGENE' => '#FF0000', 'CENERGIE' => '#00FF00', 'PMETAL' => '', 'PCRISTAL' => '', 'PHYDROGENE' => separerNombres(floor($conso_h*-1)), 'PENERGIE' => floor(abs($energie_f)))); + $template->assign_block_vars('batiment', array('NOM' => 'Capacité des dépôts', 'NIVEAU' => $silo, 'COEFF' => '', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#00FF00', 'CENERGIE' => '#FF0000', 'PMETAL' => separerNombres($cap), 'PCRISTAL' => separerNombres($cap), 'PHYDROGENE' => separerNombres($cap), 'PENERGIE' => '')); + if ($u < 0 && $prod_hy < 0) $template->assign_block_vars('batiment', array('NOM' => 'Total', 'NIVEAU' => '', 'COEFF' => '', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#FF0000', 'CENERGIE' => '#FF0000', 'PMETAL' => separerNombres(floor($prod_met)), 'PCRISTAL' => separerNombres(floor($prod_cri)), 'PHYDROGENE' => separerNombres(floor($w)), 'PENERGIE' => floor($u))); + elseif ($prod_hy < 0) $template->assign_block_vars('batiment', array('NOM' => 'Total', 'NIVEAU' => '', 'COEFF' => '', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#FF0000', 'CENERGIE' => '#00FF00', 'PMETAL' => separerNombres(floor($prod_met)), 'PCRISTAL' => separerNombres(floor($prod_cri)), 'PHYDROGENE' => separerNombres(floor($w)), 'PENERGIE' => floor($u))); + elseif ($u < 0) $template->assign_block_vars('batiment', array('NOM' => 'Total', 'NIVEAU' => '', 'COEFF' => '', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#00FF00', 'CENERGIE' => '#FF0000', 'PMETAL' => separerNombres(floor($prod_met)), 'PCRISTAL' => separerNombres(floor($prod_cri)), 'PHYDROGENE' => separerNombres(floor($w)), 'PENERGIE' => separerNombres(floor($u)))); + else $template->assign_block_vars('batiment', array('NOM' => 'Total', 'NIVEAU' => '', 'COEFF' => '', 'CMETAL' => '#00FF00', 'CCRISTAL' => '#00FF00', 'CHYDROGENE' => '#00FF00', 'CENERGIE' => '#00FF00', 'PMETAL' => ''.separerNombres(floor($prod_met)).'', 'PCRISTAL' => ''.separerNombres(floor($prod_cri)).'', 'PHYDROGENE' => ''.separerNombres(floor($w)).'', 'PENERGIE' => ''.separerNombres(floor($u)).'')); - - - - - - - - - -
-Production sur ".$nom_planete." -
- -Métal - -Cristal - -Hydrogène - -Energie -
".$batiment[0]." (".$mine_m.")".$prod_metal."  ".-$energie_m."
".$batiment[1]." (".$mine_c.") ".$prod_cristal." ".-$energie_c."
".$batiment[2]." (".$mine_h.")  ".$prod_hydrogene."".-$energie_h."
".$batiment[3]." (".$centrale_s.")   ".$energie_s."
".$batiment[4]." (".$centrale_f.")  ".-$conso_hy."".$energie_f."
Capacité des dépôts (".$silo.")".$cap."".$cap."".$cap."-
Total".$prod_metal."".$prod_cristal."".$w."".$u."
-
-"; ?> - - \ No newline at end of file + $template->pparse('Tabressources'); +?> \ No newline at end of file diff --git a/pages/ressources.vr.php b/pages/ressources.vr.php deleted file mode 100644 index 7a786a7..0000000 --- a/pages/ressources.vr.php +++ /dev/null @@ -1,146 +0,0 @@ - 0) $conso_hy = ceil(($centrale_f*5+(exp($mine_m*0.3)*10))*$coeff); else $conso_hy=0; - -if ($mine_h < 0) $prod_hydrogene = 0; -else $prod_hydrogene = (floor((($mine_h*21)+(pow(1.394,$mine_h)*exp(0.072*$mine_h))*$coeff)*1.8)-20); - -if ($mine_h == 0) $w=0; -if (($prod_hydrogene-$conso_hy) < 0) $w= 0; - -if ($mine_m > 0) $energie_m = ceil((exp($mine_m*0.28)*10))*$coeff; else $energie_m=0; -if ($mine_c > 0) $energie_c = ceil((exp($mine_c*0.28)*10))*$coeff; else $energie_c=0; -if ($mine_h > 0) $energie_h = ceil((exp($mine_h*0.31)*10))*$coeff; else $energie_h=0; -if ($centrale_s > 0) $energie_s = ceil((($centrale_s*20+(exp($centrale_s*0.3)*10))*$coeff)); else $energie_s =0; -if ($centrale_f > 0) $energie_f = ceil((($centrale_f*80+(exp($centrale_f*0.38)*11))*$coeff)); else $energie_f =0; -$w = $prod_hydrogene - $conso_hy; -$u= ($energie_s+$energie_f) - ($energie_m+$energie_c+$energie_h); - -echo" - -"; - - -echo "
- - -"; + +echo" + + + + +"; +?> \ No newline at end of file diff --git a/templates/descriptions/description_pt.php b/templates/descriptions/description_pt.php new file mode 100644 index 0000000..e6d8e3d --- /dev/null +++ b/templates/descriptions/description_pt.php @@ -0,0 +1,73 @@ + + +Space battleship + + + + +"; + +$chantier_spatial = 2; +$propu = 2; +$pilotes = 2; + +function techno($nom, $niveau, $niveau_ress) +{ +if ($niveau < $niveau_ress) + { + echo "".$nom." ".$niveau_ress.""; + } +else + { + echo "".$nom." ".$niveau_ress.""; + } +} + +function equipe($nom, $perso, $need_perso) +{ +if ($perso < $need_perso) + { + $z = abs($perso - $need_perso); + echo "".$need_perso." ".$nom.""; + } +else + { + echo "".$need_perso." ".$nom.""; + } +} +echo" + + +
Petit transporteur
+ +
+


+Coût :
+Fer : 100
+Cristal : 200

+Equipage :
"; @equipe(pilotes, $pilotes, 3); +echo "
+Le petit transporteur est un vaisseau dont la tâche est d'acheminer des +matières premières ou des unités terrestres sur d'autres planètes rapidement.
+Besoin de :
+Bâtiments : "; @techno("Chantier spatial", $chantier_spatial, 1); +echo "
Technologie : "; @techno("Propultion conventionelle", $propu, 3); +echo"

-Facteur de production : "; if ($coeff < 1) echo "".$coeff.""; else echo $coeff; - -echo"
- - - - - - - - - - - -"; - -echo ""; -echo " - - -"; - - -echo ""; -echo " - - - -"; - -if ($mine_h > 0) { -echo ""; -echo " - - - -"; -} - -if ($centrale_s > 0) { -echo " - - - - - -"; } - -if ($centrale_f > 0) { -echo " - - - - - -"; } - - -echo " - - - - - - - - - - - - - - - - -
-Production sur ".$nom_planete." -
- -Métal - -Cristal - -Hydrogène - -Energie -
".$batiment[0]." (".$mine_m.")".$prod_metal."  ".-$energie_m."
".$batiment[1]." (".$mine_c.") ".$prod_cristal." ".-$energie_c."
".$batiment[2]." (".$mine_h.")  ".$prod_hydrogene."".-$energie_h."
".$batiment[3]." (".$centrale_s.")   ".$energie_s."
".$batiment[4]." (".$centrale_f.")  ".-$conso_hy."".$energie_f."
Capacité des dépôts".$cap."".$cap."".$cap."-
Total".$prod_metal."".$prod_cristal."".$w."".$u."
-
-"; ?> - - \ No newline at end of file diff --git a/pages/ressourcetem.php b/pages/ressourcetem.php index 7acbb68..4cf92c2 100644 --- a/pages/ressourcetem.php +++ b/pages/ressourcetem.php @@ -12,10 +12,28 @@ $appel = mysql_query("SELECT * FROM planete WHERE id_user='$id' AND galaxie='$g' $ressource=mysql_fetch_array($appel); $mine_m = $ressource['mine_m']; +$coeff_mine_m = $ressource['coeff_mine_m']; +if ($coeff_mine_m < 0) $coeff_mine_m = 0; +if ($coeff_mine_m > 1) $coeff_mine_m = 1; $mine_c = $ressource['mine_c']; +$coeff_mine_c = $ressource['coeff_mine_c']; +if ($coeff_mine_c < 0) $coeff_mine_c = 0; +if ($coeff_mine_c > 1) $coeff_mine_c = 1; $mine_h = $ressource['mine_h']; +$coeff_mine_h = $ressource['coeff_mine_h']; +if ($coeff_mine_h < 0) $coeff_mine_h = 0; +if ($coeff_mine_h > 1) $coeff_mine_h = 1; $centrale_s = $ressource['centrale_s']; +$coeff_centrale_s = $ressource['coeff_centrale_s']; +if ($coeff_centrale_s < 0) $coeff_centrale_s = 0; +if ($coeff_centrale_s > 1) $coeff_centrale_s = 1; $centrale_f = $ressource['centrale_f']; +$coeff_centrale_f = $ressource['coeff_centrale_f']; +$coeff_energie_f = $ressource['coeff_centrale_f']; +if ($coeff_centrale_f < 0) $coeff_centrale_f = 0; +if ($coeff_centrale_f > 1) $coeff_centrale_f = 1; +if ($coeff_energie_f < 0) $coeff_energie_f = 0; +if ($coeff_energie_f > 1) $coeff_energie_f = 1; $temps_actuel = time(); $temps_ancien = $ressource['timestamp']; @@ -32,51 +50,107 @@ $hydrogene = $ressource['hydrogene']; if ($mine_m > 0) $energie_m = ceil((exp($mine_m*0.28)*10)); else $energie_m= 0; if ($mine_c > 0) $energie_c = ceil((exp($mine_c*0.28)*10)); else $energie_c= 0; if ($mine_h > 0) $energie_h = ceil((exp($mine_h*0.31)*10)); else $energie_h= 0; -if ($centrale_f > 0 ) $energie_f = ceil((($centrale_f*80+(exp($centrale_f*0.38)*11)))); else $energie_f = 1; // pour pas avoir div by 0 -if ($centrale_s > 0 ) $energie_s = ceil((($centrale_s*20+(exp($centrale_s*0.3)*10)))); else $energie_s = 0; +if ($centrale_f > 0) $energie_f = ceil((($centrale_f*80+(exp($centrale_f*0.38)*11)))); else $energie_f = 0; +if ($centrale_s > 0) $energie_s = ceil((($centrale_s*20+(exp($centrale_s*0.3)*10)))); else $energie_s = 0; //Calcul de la consomation d'énergie -$nrj = $energie_m+$energie_c+$energie_h; +$nrj = $energie_m + $energie_c + $energie_h; //Calcul de la production d'énergie -$t = $energie_f+$energie_s; +$t = $energie_s * $coeff_centrale_s + $energie_f * $coeff_centrale_f; -$coeff=($energie_s+$energie_f+$energie_m+$energie_c+$energie_h)/($energie_s+$energie_f); +$coeff = $t / $nrj; if ($coeff < 0) $coeff = 0; -if ($coeff > 1) $coeff = 1; +elseif ($coeff == 0) $coeff = 0; +elseif ($coeff > 1) $coeff = 1; +//Calcul des proportions +$point = $coeff * 3; -if ($metal >= $cap) $prod_met=0; +if ($coeff_mine_m + $coeff_mine_c + $coeff_mine_h != 0) { + $p_mine_m = $coeff_mine_m / ($coeff_mine_m + $coeff_mine_c + $coeff_mine_h); + $p_mine_c = $coeff_mine_c / ($coeff_mine_m + $coeff_mine_c + $coeff_mine_h); + $p_mine_h = $coeff_mine_h / ($coeff_mine_m + $coeff_mine_c + $coeff_mine_h); +} +else { + $p_mine_m = 0.33333333; + $p_mine_c = 0.33333333; + $p_mine_h = 0.33333333; +} + +$Ncoeff_mine_m = $point * $p_mine_m; +$Ncoeff_mine_c = $point * $p_mine_c; +$Ncoeff_mine_h = $point * $p_mine_h; + +if ($Ncoeff_mine_m > 1) $Ncoeff_mine_m = 1; +if ($Ncoeff_mine_c > 1) $Ncoeff_mine_c = 1; +if ($Ncoeff_mine_h > 1) $Ncoeff_mine_h = 1; + +//if ($Ncoeff_mine_m < $coeff_mine_m) { + mysql_query("UPDATE planete SET coeff_mine_m='$Ncoeff_mine_m' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); + $coeff_mine_m = $Ncoeff_mine_m; +//} +//if ($Ncoeff_mine_c < $coeff_mine_c) { + mysql_query("UPDATE planete SET coeff_mine_c='$Ncoeff_mine_c' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); + $coeff_mine_c = $Ncoeff_mine_c; +//} +//if ($Ncoeff_mine_h < $coeff_mine_h) { + mysql_query("UPDATE planete SET coeff_mine_h='$Ncoeff_mine_h' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); + $coeff_mine_h = $Ncoeff_mine_h; +//} + +if ($metal >= $cap) { + $prod_met=0; + $metal = $cap; +} else { if ($mine_m < 0) $prod_met = 0.011*$temps_ecoule; - else $prod_met = (ceil(((($mine_m*32)+(pow(1.41,$mine_m)*exp(0.066*$mine_m))*$coeff)/0.36)*$temps_ecoule)/10000)*3.7 + 0.011*$temps_ecoule; + else $prod_met = ((ceil(((($mine_m*32)+(pow(1.41,$mine_m)*exp(0.066*$mine_m)))/0.36)*$temps_ecoule)/10000)*3.7 + 0.011*$temps_ecoule)*$coeff_mine_m; } -if ($cristal >= $cap) $prod_cri=0; +if ($cristal >= $cap) { + $prod_cri=0; + $cristal = $cap; +} else { - if ( $mine_c < 0 ) $prod_cri = 0.0055*$temps_ecoule; - else $prod_cri = ((floor(((($mine_c*13)+(pow(1.36,$mine_c)*exp(0.0675*$mine_c))*$coeff)/0.36)*$temps_ecoule)/10000)*7) + 0.0055*$temps_ecoule; + if ($mine_c < 0) $prod_cri = 0.0055*$temps_ecoule; + else $prod_cri = (((ceil(((($mine_c*13)+(pow(1.36,$mine_c)*exp(0.0675*$mine_c)))/0.36)*$temps_ecoule)/10000)*7) + 0.0055*$temps_ecoule)*$coeff_mine_c; } -if ($hydrogene >= $cap) $prod_hy=0; +if ($hydrogene >= $cap) { + $prod_hy=0; + $hydrogene = $cap; +} else { - if ($centrale_f > 0) $conso_h = ((ceil((($centrale_f*5+(exp($centrale_f*0.3)*10))*$coeff)/0.36)/10000)*$temps_ecoule); - else $conso_h = 0; - if ($mine_h < 0) $prod_hy = 0; - else $prod_hy = (((floor(((($mine_h*12)+(pow(1.394,$mine_h)*exp(0.072*$mine_h))*$coeff)/0.36)*$temps_ecoule)/10000)*5)) - $conso_h; + else $prod_hy = ((((floor(((($mine_h*12)+(pow(1.394,$mine_h)*exp(0.072*$mine_h)))/0.36)*$temps_ecoule)/10000)*5)) - $conso_h)*$coeff_mine_h; if ($mine_h == 0) $prod_hy=0; if ($prod_hy < 0) $prod_hy = 0; } +if ($centrale_f > 0) $conso_h = ((ceil((($centrale_f*5+(exp($centrale_f*0.3)*10)))/0.36)/10000)*$temps_ecoule)*$coeff_energie_f; +else $conso_h = 0; +$prod_mineh = $prod_hy; +$prod_hysv = $prod_hy; +$prod_hy -= $conso_h; + +if ($hydrogene+$prod_hy < 0) { + $prod_hy = $prod_hysv; + $conso_h = 0; + $coeff_energie_f = 0; +} +elseif ((ceil((($centrale_f*5+(exp($centrale_f*0.3)*10)))/0.36)/10000)*3600 <= $hydrogene/5 && $coeff_energie_f == 0) { + $coeff_energie_f = 1; +} $a=$metal+$prod_met; $b=$cristal+$prod_cri; $c=$hydrogene+$prod_hy; +$u = ($energie_s*$coeff_energie_s+$energie_f*$coeff_energie_f); //---------------M.A.J-------------- -mysql_query("UPDATE planete SET timestamp='$temps_actuel', metal='$a', cristal='$b', hydrogene='$c', coeff='$coeff', energie='$t' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); +mysql_query("UPDATE planete SET timestamp='$temps_actuel', metal='$a', cristal='$b', hydrogene='$c', coeff='$coeff', energie='$t', coeff_centrale_f='$coeff_energie_f' WHERE id_user='$id' AND galaxie='$g' AND ss='$s'AND position='$p'"); $pseudoz = $ressource['pseudo']; @@ -120,7 +194,8 @@ $Aplan_ref = ''; $Aplan_value = ''; $Aplan_more = ''; $RES_METAL = separerNombres(floor($a)); $RES_CRISTAL = separerNombres(floor($b)); $RES_HYDROGENE = separerNombres(floor($c)); - $RES_ENERGIE = separerNombres($nrj).'/'.separerNombres($t); +// $RES_ENERGIE = separerNombres(intval($t-$nrj)).'/'.separerNombres($t); + $RES_ENERGIE = separerNombres(intval($nrj)).'/'.separerNombres($u); mysql_close(); ?> \ No newline at end of file diff --git a/pages/time.js b/pages/time.js index 7b135de..26af274 100644 --- a/pages/time.js +++ b/pages/time.js @@ -14,4 +14,18 @@ function reste(zetime) { document.getElementById("axion").innerHTML = "Terminé"; setTimeout(window.document.location.reload(),3000); } +} + +function restet(zetime) { + if (zetime>0) { + var heures = Math.floor(zetime / 3600); + var minutes = Math.floor(((zetime / 3600) - Math.floor(zetime / 3600)) * 60); + var secondes = zetime - ((Math.floor(zetime / 60)) * 60); + if (heures < 10) heures = "0" + heures; + if (minutes < 10) minutes = "0" + minutes; + if (secondes < 10) secondes = "0" + secondes; + document.getElementById("axiont").innerHTML = heures + ":" + minutes + ":" + secondes; + var restant = zetime - 1; + setTimeout("restet(" + restant + ")", 1000); + } } \ No newline at end of file diff --git a/securite.php b/securite.php index 80e393d..e15afa4 100644 --- a/securite.php +++ b/securite.php @@ -52,9 +52,14 @@ if (!isset($_SESSION) || $_SESSION['timestamp'] + 1200 < time()) { exit; } +/*// Fait patienter l'utilisateur s'il a fait une réquête il y a moins de deux secondes +if (!isset($_SESSION['microtimestamp']) || time()+microtime() - $_SESSION['microtimestamp'] < 1.5) { + usleep((1.5-(time()+microtime() - $_SESSION['microtimestamp']))*1000000); +}*/ + // Vérification que la requête proviennent du serveur if (!isset($_SERVER['HTTP_REFERER'])) $_SERVER['HTTP_REFERER'] = ''; -if (!ereg(time().'http://127.0.0.1/', time().$_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '') { +if (!ereg(time().'http://127.0.0.1/', time().$_SERVER['HTTP_REFERER']) && !ereg(time().'http://confrerienoire.no-ip.org/', time().$_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '') { //if (!ereg(time().'http://battle.halo.fr/', time().$_SERVER['HTTP_REFERER']) && !ereg(time().'http://www.battle.halo.fr/', time().$_SERVER['HTTP_REFERER']) && !ereg(time().'http://www.halo2.fr/', time().$_SERVER['HTTP_REFERER']) && !ereg(time().'http://ligue.halo.fr/', time().$_SERVER['HTTP_REFERER']) && !ereg(time().'http://halo-game.com/', time().$_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '') { setHistorique('Requête depuis une adresse non officiel', 'Par mesure de sécurité, la requête de '.$_SESSION['id'].' a été annulée car l\'\'adresse de provenance ne correspond pas à celle du site : '.$_SERVER['HTTP_REFERER']); session_destroy(); @@ -64,5 +69,6 @@ if (!ereg(time().'http://127.0.0.1/', time().$_SERVER['HTTP_REFERER']) && $_SERV } $_SESSION['timestamp'] = time(); +$_SESSION['microtimestamp'] = time()+microtime(); mysql_close(); ?> \ No newline at end of file diff --git a/snow.js b/snow.js new file mode 100644 index 0000000..5cd7a3d --- /dev/null +++ b/snow.js @@ -0,0 +1,117 @@ +var no = 30; +var speed = 30; +var snowflake = "snow1.gif"; + +var ns4up = (navigator.appName=="Netscape" && navigator.appVersion.charAt(0)=="4") ? 1 : 0; +var ie4up = (document.all) ? 1 : 0; +var ns6up = (document.getElementById&&!document.all) ? 1 : 0; +var dx, xp, yp; +var am, stx, sty; +var i, doc_width = 1280, doc_height = 800; +if (ns4up||ns6up) { +doc_width = self.innerWidth; +doc_height = self.innerHeight; +} else if (ie4up) { +doc_width = document.body.clientWidth; +doc_height = document.body.clientHeight; +} +dx = new Array(); +xp = new Array(); +yp = new Array(); +am = new Array(); +stx = new Array(); +sty = new Array(); +for (i = 0; i < no; ++ i) { +dx[i] = 0; +xp[i] = Math.random()*(doc_width-50); +yp[i] = Math.random()*doc_height; +am[i] = Math.random()*20; +stx[i] = 0.02 + Math.random()/10; +sty[i] = 0.7 + Math.random(); + +if (ns4up) { +if (i == 0) { +document.write(""); +} else { +document.write(""); +} + +} else if (ie4up||ns6up) { +if (i == 0) { +document.write("
"); +} else { +document.write("
"); +} +} +} + +function snowNS() { +for (i = 0; i < no; ++ i) { +yp[i] += sty[i]; +if (yp[i] > doc_height-50) { +xp[i] = Math.random()*(doc_width-am[i]-30); +yp[i] = 0; +stx[i] = 0.02 + Math.random()/10; +sty[i] = 0.7 + Math.random(); +doc_width = self.innerWidth; +doc_height = self.innerHeight; +} +dx[i] += stx[i]; +document.layers["dot"+i].top = yp[i]; +document.layers["dot"+i].left = xp[i] + am[i]*Math.sin(dx[i]); +} +setTimeout("snowNS()", speed); +} + +function snowIE() { +for (i = 0; i < no; ++ i) { +yp[i] += sty[i]; +if (yp[i] > doc_height-50) { +xp[i] = Math.random()*(doc_width-am[i]-30); +yp[i] = 0; +stx[i] = 0.02 + Math.random()/10; +sty[i] = 0.7 + Math.random(); +doc_width = document.body.clientWidth; +doc_height = document.body.clientHeight; +} +dx[i] += stx[i]; +document.all["dot"+i].style.pixelTop = yp[i]; +document.all["dot"+i].style.pixelLeft = xp[i] + am[i]*Math.sin(dx[i]); +} +setTimeout("snowIE()", speed); +} + +function snowNS6() { +for (i = 0; i < no; ++ i) { +yp[i] += sty[i]; +if (yp[i] > doc_height-50) { +xp[i] = Math.random()*(doc_width-am[i]-30); +yp[i] = 0; +stx[i] = 0.02 + Math.random()/10; +sty[i] = 0.7 + Math.random(); +doc_width = self.innerWidth; +doc_height = self.innerHeight; +} +dx[i] += stx[i]; +document.getElementById("dot"+i).style.top = yp[i]+"px"; +document.getElementById("dot"+i).style.left = xp[i] + am[i]*Math.sin(dx[i])+"px"; +} +setTimeout("snowNS6()", speed); +} +if (ns4up) { +snowNS(); +} else if (ie4up) { +snowIE(); +}else if (ns6up) { +snowNS6(); +} \ No newline at end of file diff --git a/snow1.gif b/snow1.gif new file mode 100644 index 0000000..6d463ec Binary files /dev/null and b/snow1.gif differ diff --git a/style.css b/style.css new file mode 100644 index 0000000..b88f6c2 --- /dev/null +++ b/style.css @@ -0,0 +1,133 @@ +body +{ +background-color:black; +background-image:url(images/background.jpg); +background-attachment: fixed ; +background-position:center 10%; +background-repeat: no-repeat; +text-align: center; + +} + +.contenu +{ +width:790px; +margin-top: 240px; +margin-left: auto; +margin-right: auto; +} + +.texte +{ +background-color:black; +filter:alpha(opacity=90); +-moz-opacity:0.90; +opacity: 0.90; +border: 1px solid #383C51; +float: left; +width:450px; +height:330px; +padding: 5px; +padding-top: 5%; +text-align: center; +color: white; +font-family:"verdana"; +font-size: 12px; +line-height:20px; +} + +.login +{ +background-color:black; +filter:alpha(opacity=50); +-moz-opacity:0.50; +opacity: 0.50; +border: 1px solid #383C51; +padding: 10px; +float: right; +width: 275px; +height: 375px; +margin: 1px; +} + +.cellulestxt +{ +text-align: right; +color: white; +font-family:"verdana"; +font-weight: bold; +font-size: 12px; +} + +.connexion +{ +color: white; +font-family:"verdana"; +font-size: 12px; +font-weight: bold; +text-decoration:none; +background: transparent; +border: 0px; +cursor: pointer; +} + +.connexion:hover +{ +color: #519FFF; +font-size: 12px; +font-weight: bold; +text-decoration: none; +background: transparent; +border: 0px; +cursor: pointer; +} + +.footer +{ +position: absolute; +top: 690px; +left:0px; +width:100%; +text-align: center; +color: #B0B0B0; +font-family:"verdana"; +font-size: 10px; +font-weight: bold; +} + +input.champ { +border:1px solid #B0B0B0; +background-color:white; +color:#B0B0B0; +} +input.champ:hover { +border:1px solid black; +background-color:white; +color:black; +} +input.champ:focus { +border:1px solid #071831; +background-color:#B9C0E6; +color:black; +} + +.lien +{ +color:white; +font-weight: bold; +text-decoration: none; +} + +.lien:visited +{ +color:white; +font-weight: bold; +text-decoration: none; +} + +.lien:hover +{ +color:white; +font-weight: bold; +text-decoration: underline; +} \ No newline at end of file diff --git a/templates/Tabressources.tpl b/templates/Tabressources.tpl new file mode 100644 index 0000000..e663772 --- /dev/null +++ b/templates/Tabressources.tpl @@ -0,0 +1,49 @@ + + + + + + + + + + + + + ::Halo-Battle:: Bêta - Ressources + + + +{HEADER} +{RESSOURCES}


+
+
+ {PUB}
+ + + + + + + + + + + + + + + + + + + +
CoefficientMétalCristalHydrogèneEnergie
{batiment.NIVEAU} {batiment.NOM}{batiment.COEFF}{batiment.PMETAL}{batiment.PCRISTAL}{batiment.PHYDROGENE}{batiment.PENERGIE}
+
+ + \ No newline at end of file diff --git a/templates/admin.tpl b/templates/admin.tpl index dbffe10..3c59780 100644 --- a/templates/admin.tpl +++ b/templates/admin.tpl @@ -9,9 +9,53 @@ + ::Halo-Battle:: Panneau d'administration - {TITRE} - +
+
+ + + + +
+
+ + + + +
+
+
+
+ + + + +
+
+
+ + + + +
+ Modération des rapports de bug
+
+ + + + + +
DePageDescription
{rapbug.NOM}{rapbug.PAGE}{rapbug.DESCRIPTION}
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/templates/batiments.tpl b/templates/batiments.tpl index 64131d7..d079ba0 100644 --- a/templates/batiments.tpl +++ b/templates/batiments.tpl @@ -14,18 +14,8 @@ {HEADER} -{RESSOURCES}



{ERREUR} +{RESSOURCES}



{PUB}

{ERREUR}
- - - - -
- Arbre des technologies -
-
-
-
{PUB}
@@ -42,6 +32,16 @@
File d'attente
+
+
+ + + + +
+ Arbre des technologies +
+

diff --git a/templates/chantier_spatial.tpl b/templates/chantier_spatial.tpl new file mode 100644 index 0000000..b1c8ed4 --- /dev/null +++ b/templates/chantier_spatial.tpl @@ -0,0 +1,73 @@ + + + + + + + + + + + + + ::Halo-Battle:: Bêta - Chantier spatial + + +{HEADER} +{RESSOURCES}



{PUB}

{ERREUR} +
+
+ + + + + + + + + +
File d'attente
Prochain vaisseau : {RESTE}
+
+ + {file.NOM} - Annuler{CHAINE}
+ + {FILETXT} +
+
+
+
+
+ + + + +
+ Arbre des technologies +
+
+
+
+ + + + +
+ + + + + + + + +
+ {vaisseau.NOM} {vaisseau.NIVEAU} +
{vaisseau.DESCRIPTION}
+ Besoin de : {vaisseau.BESOIN}
Temps de construction : {vaisseau.TEMPS} +
+ {vaisseau.ACTION} +
+
+
+ + \ No newline at end of file diff --git a/templates/defenses.tpl b/templates/defenses.tpl new file mode 100644 index 0000000..1487c92 --- /dev/null +++ b/templates/defenses.tpl @@ -0,0 +1,73 @@ + + + + + + + + + + + + + ::Halo-Battle:: Bêta - Défenses + + +{HEADER} +{RESSOURCES}



{PUB}

{ERREUR} +
+ + + + + + + + + + +
File d'attente
Prochaine défense : {RESTE}
+
+ + {file.NOM} - Annuler{CHAINE}
+ + {FILETXT} +
+
+
+
+
+ + + + +
+ Arbre des technologies +
+
+
+
+ + + + +
+ + + + + + + + +
+ {defense.NOM} {defense.NIVEAU} +
{defense.DESCRIPTION}
+ Besoin de : {defense.BESOIN}
Temps de construction : {defense.TEMPS} +
+ {defense.ACTION} +
+
+
+ + \ No newline at end of file diff --git a/templates/descriptions/bdd.php b/templates/descriptions/bdd.php new file mode 100644 index 0000000..102eef8 --- /dev/null +++ b/templates/descriptions/bdd.php @@ -0,0 +1,108 @@ + \ No newline at end of file diff --git a/templates/descriptions/description.php b/templates/descriptions/description.php new file mode 100644 index 0000000..ad64a4e --- /dev/null +++ b/templates/descriptions/description.php @@ -0,0 +1,58 @@ + + +Halo + + + + +"; + +include 'bdd.php'; + +function techno($nom, $niveau, $niveau_ress) +{ +if ($niveau < $niveau_ress) + { + echo "".$nom." ".$niveau_ress.""; + } +else + { + echo "".$nom." ".$niveau_ress.""; + } +} + +echo" + + +
Petit transporteur
+ +
+


+Coût :
+Fer : 100
+Cristal : 200

+
+Le petit transporteur est un vaisseau dont la tâche est d'acheminer des +matières premières ou des unités terrestres sur d'autres planètes rapidement.
+Besoin de :
+Bâtiments : "; @techno("Chantier spatial", $chantier_spatial, 1); +echo "
Technologie : "; @techno("Propultion conventionelle", $propu, 3); +echo"

+ + + + + + + +
Caractéristiques :
Puissance de feu5
Point de structure300
Bouclier de protection0
Capacité totale1000
Consommation de carburant10
Rayon d'actionmoyen-faible
+ +
+ + + + + + +"; +?> \ No newline at end of file diff --git a/templates/descriptions/description_bat.php b/templates/descriptions/description_bat.php new file mode 100644 index 0000000..b6248d0 --- /dev/null +++ b/templates/descriptions/description_bat.php @@ -0,0 +1,58 @@ + + +Halo + + + + +"; + +include 'bdd.php'; + +function techno($nom, $niveau, $niveau_ress) +{ +if ($niveau < $niveau_ress) + { + echo "".$nom." ".$niveau_ress.""; + } +else + { + echo "".$nom." ".$niveau_ress.""; + } +} + +echo" + + +
Metal
+ +
+


+
+description.
+Besoin de :
+Bâtiments : "; @techno("Chantier spatial", $chantier_spatial, 1); +echo "
Technologie : "; @techno("Propultion conventionelle", $propu, 3); +echo"

"; +$a=$mine_m+5; +$c=$mine_m-2; +if ($c < 0 ) { $c = 0; $a = 7; } +echo '
'; +for ($c;$c<$a;$c++) { +$b=ceil((($c*40+(exp($c*0.33)*10)))); +$h=ceil((($c*40+(exp($c*0.33)*10)))) - ceil(((($c-1)*40+(exp(($c-1)*0.33)*10)))); + +$p=ceil((exp($c*0.28)*10)); +$g=ceil((exp($c*0.28)*10)) - ceil((exp(($c-1)*0.28)*10)); +echo ''; +} + +echo"
NiveauProduction par heureConsommation énergie
'.$c.''.$b.' (+ '.$h.')'.$p.' (+ '.$g.')
+ + + + + + + +
Caractéristiques :
Puissance de feu5
Point de structure300
Bouclier de protection0
Capacité totale1000
Consommation de carburant10
Rayon d'actionmoyen-faible
+ + + + + + + + +"; +?> \ No newline at end of file diff --git a/templates/descriptions/diz/1720.jpg b/templates/descriptions/diz/1720.jpg new file mode 100644 index 0000000..5e1fb7d Binary files /dev/null and b/templates/descriptions/diz/1720.jpg differ diff --git a/templates/descriptions/diz/1782.jpg b/templates/descriptions/diz/1782.jpg new file mode 100644 index 0000000..91027f7 Binary files /dev/null and b/templates/descriptions/diz/1782.jpg differ diff --git a/templates/descriptions/diz/1783.jpg b/templates/descriptions/diz/1783.jpg new file mode 100644 index 0000000..0b2dfe2 Binary files /dev/null and b/templates/descriptions/diz/1783.jpg differ diff --git a/templates/descriptions/diz/180.jpg b/templates/descriptions/diz/180.jpg new file mode 100644 index 0000000..c7befce Binary files /dev/null and b/templates/descriptions/diz/180.jpg differ diff --git a/templates/descriptions/diz/180p.jpg b/templates/descriptions/diz/180p.jpg new file mode 100644 index 0000000..caa25d9 Binary files /dev/null and b/templates/descriptions/diz/180p.jpg differ diff --git a/templates/descriptions/diz/181.jpg b/templates/descriptions/diz/181.jpg new file mode 100644 index 0000000..65c3677 Binary files /dev/null and b/templates/descriptions/diz/181.jpg differ diff --git a/templates/descriptions/diz/182.jpg b/templates/descriptions/diz/182.jpg new file mode 100644 index 0000000..ca2ee26 Binary files /dev/null and b/templates/descriptions/diz/182.jpg differ diff --git a/templates/descriptions/diz/183.jpg b/templates/descriptions/diz/183.jpg new file mode 100644 index 0000000..51b2e79 Binary files /dev/null and b/templates/descriptions/diz/183.jpg differ diff --git a/templates/descriptions/diz/205.jpg b/templates/descriptions/diz/205.jpg new file mode 100644 index 0000000..526d1a7 Binary files /dev/null and b/templates/descriptions/diz/205.jpg differ diff --git a/templates/descriptions/diz/Copy of fond.jpg b/templates/descriptions/diz/Copy of fond.jpg new file mode 100644 index 0000000..5523e43 Binary files /dev/null and b/templates/descriptions/diz/Copy of fond.jpg differ diff --git a/templates/descriptions/diz/Thumbs.db b/templates/descriptions/diz/Thumbs.db new file mode 100644 index 0000000..f51a54e Binary files /dev/null and b/templates/descriptions/diz/Thumbs.db differ diff --git a/templates/descriptions/diz/admin.css b/templates/descriptions/diz/admin.css new file mode 100644 index 0000000..5d6bf2d --- /dev/null +++ b/templates/descriptions/diz/admin.css @@ -0,0 +1,95 @@ +body { +color: #FF0000; +background-color: #000000; +background-image: url('panel/background.jpg'); +scrollbar-arrow-color: #E6EBFB; +scrollbar-base-color: #344566; +scrollbar-track-color: #344566; +scrollbar-face-color: #344566; +scrollbar-highlight-color: #344566; +scrollbar-3dlight-color: #465673; +scrollbar-darkshadow-color: #344566; +scrollbar-shadow-color: #465673; +font-size: 13px; +font-family: Tahoma,sans-serif; +margin-bottom: 20px; +} + +u { +font-style: underline; +} + +i { +font-style: italic; +} + +a { +color: #4080ff; +font-size: 12px; +font-family: verdana, serif; +text-decoration: underline; +border: none; +} + +img { +border: none; +} + +a:hover { +cursor: pointer; +} + +a:active, a:focus { +cursor: wait; +} + +a:visited { +cursor: pointer; +} + +div.centre { +text-align: center; +} + +table.fond { +margin-left: auto; +margin-right: auto; +width: 90%; +background-color: #161616; +border: 1px solid #101010; +} + +table.Gpart { +margin-left: auto; +margin-right: auto; +background-color: #171717; +border: 1px solid #202020; +} + +table.Ppart { +margin-left: auto; +margin-right: auto; +background-color: #141414; +border: 1px solid #181818; +} + +table.Mpart { +margin-left: auto; +margin-right: auto; +background-color: #141414; +border: 1px solid #181818; +} + +tr.lt { +background-color: #545454; +} + +tr.l1 { +background-color: #343434; +text-align: left; +} + +tr.l2 { +background-color: #545454; +text-align: left; +} \ No newline at end of file diff --git a/templates/descriptions/diz/base.anc.css b/templates/descriptions/diz/base.anc.css new file mode 100644 index 0000000..7a89934 --- /dev/null +++ b/templates/descriptions/diz/base.anc.css @@ -0,0 +1,215 @@ +body +{ +color: #7093DB; +background-color: #040e1e; +background-image: url('fondf.jpg'); +background-attachment: fixed; +background-repeat: no-repeat; +background-position: top left; +scrollbar-arrow-color: #E6EBFB; +scrollbar-base-color: #344566; +scrollbar-track-color: #344566; +scrollbar-face-color: #344566; +scrollbar-highlight-color: #344566; +scrollbar-3dlight-color: #465673; +scrollbar-darkshadow-color: #344566; +scrollbar-shadow-color: #465673; +font-size: 13px; +font-family: Tahoma,sans-serif; +margin-left: 68px; +margin-bottom: 20px; +} + +u { +font-style: underline; +} + +i { +font-style: italic; +} + +a { +color: #4080ff; +font-size: 12px; +font-family: verdana, serif; +text-decoration: underline; +border: none; +} + +img { +border: 0; +} + +a:hover { +cursor: pointer; +} + +a:active, a:focus { +cursor: wait; +} + +a:visited { +cursor: pointer; +} + +.zone_texte { +background-color: #000031; +color: #4080ff; +border: 1px solid #1256C6; +font-family: verdana, serif; +} + +.bouton { +background-color: navy; +color: #afbdff; +font-family: verdana, serif; +BORDER-LEFT-COLOR: white; +BORDER-BOTTOM-COLOR: navy; +BORDER-TOP-COLOR: white; +BACKGROUND-COLOR: navy; +BORDER-RIGHT-COLOR: navy; +BORDER-STYLE: outset; +} + +.bouton:hover { +color: red; +} + +.bouton:active { +BORDER-STYLE: inset; +color: red; +} + +div { +border: 1px solid #004080; +float: left; +margin: 1 1 1 1; +} + +div.a { +height: 132; +width: 130; +} + +div.b { +height: 132; +width: 400; +text-align: justify; +background-image: url(fond/apb.jpg); +} + +div.c { +height: 132; +width: 149; +text-align: center; +background-image: url(fond/apc.jpg); +} + +div.d { +background-color: #00024A; +border: 1px solid #02058A; +margin-bottom: 20; +margin-left: 450; +} + +div.fin { +height: 20; +width: 339; +text-align: center; +background-image: url(fond/apfin.jpg); +} + +div.long { +font-weight: bold; +color: #ff8040; +width: 550; +text-align: center; +margin-left: 90px; +} + +div.ensemble { +width: 550; +height: 300; +margin-left: 90px; +} + +div.e { +height: 280; +width: 125; +text-align: justify; +background-color: #000151; +border: 0; +border-right: 1px solid #004080; +float: left; +margin: 0; +margin-right: 8px; +padding: 15 10 5 10; +} + +#axion { +color: white; +font-weight: bold; +border: 0; +background-color: transparent; +margin-top: 50px; +} + +span.description { +font-size: 12px; +font-style: italic; +} + +br.a { +clear: both; +} + +span.rc { +font-size: 13px; +font-family: Tahoma,sans-serif; +font-weight: bold; +color: #ffc080; +} + +table { +border-collapse: separate; +empty-cells: show; +text-align: center; +border: 0px; +font-size: 12px; +vertical-align: middle; +} + +table#ressource { +margin-bottom: 35px; +} + +TD { +background-color: #00024A; +border: 1px solid #02058A; +} + +TD.a { +background-color: #000151; +border: 1px solid #040e1e; +width: 210px; +} + +TD.b { +background-color: #000151; +border: 1px solid #040e1e; +width: 150px; +} + +TD.xyz { +background-color: #000151; +border: 1px solid #000170; +} + + + +/*attaque { +color: #CC0000; +} + +filter: alpha(opacity=10); +-moz-opacity: 0.9; */ diff --git a/templates/descriptions/diz/base.css b/templates/descriptions/diz/base.css new file mode 100644 index 0000000..8664ca7 --- /dev/null +++ b/templates/descriptions/diz/base.css @@ -0,0 +1,253 @@ +body +{ +color: #7093DB; +background-color: #040e1e; +background-image: url('1720.jpg'); +background-attachment: fixed; +background-repeat: no-repeat; +background-position: top left; +scrollbar-arrow-color: #E6EBFB; +scrollbar-base-color: #344566; +scrollbar-track-color: #344566; +scrollbar-face-color: #344566; +scrollbar-highlight-color: #344566; +scrollbar-3dlight-color: #465673; +scrollbar-darkshadow-color: #344566; +scrollbar-shadow-color: #465673; +font-size: 13px; +font-family: Tahoma,sans-serif; +margin-left: 68px; +margin-bottom: 20px; +} + +u { +font-style: underline; +} + +i { +font-style: italic; +} + +a { +color: #4080ff; +font-size: 12px; +font-family: verdana, serif; +text-decoration: underline; +border: none; +} + +img { +border: none; +} + +a:hover { +cursor: pointer; +} + +a:active, a:focus { +cursor: wait; +} + +a:visited { +cursor: pointer; +} + +.zone_texte { +background-color: #000031; +color: #4080ff; +border: 1px solid #1256C6; +font-family: verdana, serif; +} + +.bouton { +background-color: navy; +color: #afbdff; +font-family: verdana, serif; +BORDER-LEFT-COLOR: white; +BORDER-BOTTOM-COLOR: navy; +BORDER-TOP-COLOR: white; +BACKGROUND-COLOR: navy; +BORDER-RIGHT-COLOR: navy; +BORDER-STYLE: outset; +} + +.bouton:hover { +color: red; +} + +.bouton:active { +BORDER-STYLE: inset; +color: red; +} + +div { +border: 1px solid #004080; +float: left; +margin: 1 1 1 1; +} + +div.centre { +border: none; +float: none; +margin: auto; +text-align: center; +} + +div.a { +height: 132px; +width: 130px; +} + +div.b { +height: 132px; +width: 400px; +text-align: justify; +background-image: url(fond/apb.jpg); +} + +div.c { +height: 132px; +width: 149px; +text-align: center; +background-image: url(fond/apc.jpg); +} + +div.d { +background-color: #00024A; +border: 1px solid #02058A; +margin-bottom: 20; +margin-left: 450; +} + +div.fin { +height: 20px; +width: 339px; +text-align: center; +background-image: url(fond/apfin.jpg); +} + +div.long { +font-weight: bold; +color: #ff8040; +width: 550px; +text-align: center; +margin-left: 90px; +} + +div.ensemble { +width: 550; +height: 300; +margin-left: 90px; +} + +div.e { +height: 280px; +width: 125px; +text-align: justify; +background-color: #000151; +border: 0; +border-right: 1px solid #004080; +float: left; +margin: 0; +margin-right: 8px; +padding: 15 10 5 10; +} + +#axion { +color: white; +font-weight: bold; +border: none; +background-color: transparent; +margin-top: 50px; +} + +.description { +width: 99%; +font-style: italic; +border: none; +} + +br.a { +clear: both; +} + +span.rc { +font-size: 13px; +font-family: Tahoma,sans-serif; +font-weight: bold; +color: #ffc080; +} + +table { +border-collapse: separate; +empty-cells: show; +text-align: center; +border: 0px; +font-size: 12px; +vertical-align: middle; +} + +table#ressource { +margin-bottom: 35px; +} + +TD { +background-color: #00024A; +border: 1px solid #02058A; +} + +TD.a { +background-color: #000151; +border: 1px solid #040e1e; +width: 210px; +} + +TD.b { +background-color: #000151; +border: 1px solid #040e1e; +width: 150px; +} + +TD.xyz { +background-color: #000151; +border: 1px solid #000170; +} + + +td.bla { +height: 132px; +width: 130px; +border: 1px solid #004080; +background-repeat: no-repeat; +} + +td.blb { +height: 132px; +width: 400px; +text-align: justify; +background-image: url(fond/apb.jpg); +border: 1px solid #004080; +} + +td.blc { +height: 132px; +width: 149px; +text-align: center; +background-image: url(fond/apc.jpg); +border: 1px solid #004080; +} + +td.bld { +background-color: #00024A; +border: 1px solid #02058A; +margin-bottom: 20; +margin-left: 450; +} + + +/*attaque { +color: #CC0000; +} + +filter: alpha(opacity=10); +-moz-opacity: 0.9; */ diff --git a/templates/descriptions/diz/fond.jpg b/templates/descriptions/diz/fond.jpg new file mode 100644 index 0000000..5523e43 Binary files /dev/null and b/templates/descriptions/diz/fond.jpg differ diff --git a/templates/descriptions/diz/fond/Thumbs.db b/templates/descriptions/diz/fond/Thumbs.db new file mode 100644 index 0000000..656a381 Binary files /dev/null and b/templates/descriptions/diz/fond/Thumbs.db differ diff --git a/templates/descriptions/diz/fond/apb.jpg b/templates/descriptions/diz/fond/apb.jpg new file mode 100644 index 0000000..3edfa16 Binary files /dev/null and b/templates/descriptions/diz/fond/apb.jpg differ diff --git a/templates/descriptions/diz/fond/apc.jpg b/templates/descriptions/diz/fond/apc.jpg new file mode 100644 index 0000000..86b18ff Binary files /dev/null and b/templates/descriptions/diz/fond/apc.jpg differ diff --git a/templates/descriptions/diz/fond/apfin.jpg b/templates/descriptions/diz/fond/apfin.jpg new file mode 100644 index 0000000..984e82d Binary files /dev/null and b/templates/descriptions/diz/fond/apfin.jpg differ diff --git a/templates/descriptions/diz/fond/apmenu.jpg b/templates/descriptions/diz/fond/apmenu.jpg new file mode 100644 index 0000000..7e782c9 Binary files /dev/null and b/templates/descriptions/diz/fond/apmenu.jpg differ diff --git a/templates/descriptions/diz/fondf.jpg b/templates/descriptions/diz/fondf.jpg new file mode 100644 index 0000000..0b2dfe2 Binary files /dev/null and b/templates/descriptions/diz/fondf.jpg differ diff --git a/templates/descriptions/diz/fondfp.jpg b/templates/descriptions/diz/fondfp.jpg new file mode 100644 index 0000000..0aec6a8 Binary files /dev/null and b/templates/descriptions/diz/fondfp.jpg differ diff --git a/templates/descriptions/diz/m.gif b/templates/descriptions/diz/m.gif new file mode 100644 index 0000000..3041d70 Binary files /dev/null and b/templates/descriptions/diz/m.gif differ diff --git a/templates/descriptions/diz/panel/Thumbs.db b/templates/descriptions/diz/panel/Thumbs.db new file mode 100644 index 0000000..50b2b0c Binary files /dev/null and b/templates/descriptions/diz/panel/Thumbs.db differ diff --git a/templates/descriptions/diz/panel/background.jpg b/templates/descriptions/diz/panel/background.jpg new file mode 100644 index 0000000..cf1479b Binary files /dev/null and b/templates/descriptions/diz/panel/background.jpg differ diff --git a/templates/descriptions/diz/panel/head.jpg b/templates/descriptions/diz/panel/head.jpg new file mode 100644 index 0000000..eb9fa03 Binary files /dev/null and b/templates/descriptions/diz/panel/head.jpg differ diff --git a/templates/descriptions/diz/panel/headA.jpg b/templates/descriptions/diz/panel/headA.jpg new file mode 100644 index 0000000..eb9fa03 Binary files /dev/null and b/templates/descriptions/diz/panel/headA.jpg differ diff --git a/templates/descriptions/diz/panel/headO.jpg b/templates/descriptions/diz/panel/headO.jpg new file mode 100644 index 0000000..ac690d8 Binary files /dev/null and b/templates/descriptions/diz/panel/headO.jpg differ diff --git a/templates/descriptions/diz/planete/1.jpg b/templates/descriptions/diz/planete/1.jpg new file mode 100644 index 0000000..04c12d2 Binary files /dev/null and b/templates/descriptions/diz/planete/1.jpg differ diff --git a/templates/descriptions/diz/planete/10.jpg b/templates/descriptions/diz/planete/10.jpg new file mode 100644 index 0000000..4730b8e Binary files /dev/null and b/templates/descriptions/diz/planete/10.jpg differ diff --git a/templates/descriptions/diz/planete/11.jpg b/templates/descriptions/diz/planete/11.jpg new file mode 100644 index 0000000..fce84b2 Binary files /dev/null and b/templates/descriptions/diz/planete/11.jpg differ diff --git a/templates/descriptions/diz/planete/12.jpg b/templates/descriptions/diz/planete/12.jpg new file mode 100644 index 0000000..6db84ab Binary files /dev/null and b/templates/descriptions/diz/planete/12.jpg differ diff --git a/templates/descriptions/diz/planete/13.jpg b/templates/descriptions/diz/planete/13.jpg new file mode 100644 index 0000000..38a75a8 Binary files /dev/null and b/templates/descriptions/diz/planete/13.jpg differ diff --git a/templates/descriptions/diz/planete/14.jpg b/templates/descriptions/diz/planete/14.jpg new file mode 100644 index 0000000..d95ea92 Binary files /dev/null and b/templates/descriptions/diz/planete/14.jpg differ diff --git a/templates/descriptions/diz/planete/15.jpg b/templates/descriptions/diz/planete/15.jpg new file mode 100644 index 0000000..2e68114 Binary files /dev/null and b/templates/descriptions/diz/planete/15.jpg differ diff --git a/templates/descriptions/diz/planete/2.jpg b/templates/descriptions/diz/planete/2.jpg new file mode 100644 index 0000000..09bfb41 Binary files /dev/null and b/templates/descriptions/diz/planete/2.jpg differ diff --git a/templates/descriptions/diz/planete/3.jpg b/templates/descriptions/diz/planete/3.jpg new file mode 100644 index 0000000..9bb4f55 Binary files /dev/null and b/templates/descriptions/diz/planete/3.jpg differ diff --git a/templates/descriptions/diz/planete/4.jpg b/templates/descriptions/diz/planete/4.jpg new file mode 100644 index 0000000..c11b419 Binary files /dev/null and b/templates/descriptions/diz/planete/4.jpg differ diff --git a/templates/descriptions/diz/planete/5.jpg b/templates/descriptions/diz/planete/5.jpg new file mode 100644 index 0000000..6080f4d Binary files /dev/null and b/templates/descriptions/diz/planete/5.jpg differ diff --git a/templates/descriptions/diz/planete/6.jpg b/templates/descriptions/diz/planete/6.jpg new file mode 100644 index 0000000..36bcaa4 Binary files /dev/null and b/templates/descriptions/diz/planete/6.jpg differ diff --git a/templates/descriptions/diz/planete/7.jpg b/templates/descriptions/diz/planete/7.jpg new file mode 100644 index 0000000..0158ad5 Binary files /dev/null and b/templates/descriptions/diz/planete/7.jpg differ diff --git a/templates/descriptions/diz/planete/8.jpg b/templates/descriptions/diz/planete/8.jpg new file mode 100644 index 0000000..f66d0dd Binary files /dev/null and b/templates/descriptions/diz/planete/8.jpg differ diff --git a/templates/descriptions/diz/planete/9.jpg b/templates/descriptions/diz/planete/9.jpg new file mode 100644 index 0000000..aea705f Binary files /dev/null and b/templates/descriptions/diz/planete/9.jpg differ diff --git a/templates/descriptions/diz/planete/Thumbs.db b/templates/descriptions/diz/planete/Thumbs.db new file mode 100644 index 0000000..a7b3c41 Binary files /dev/null and b/templates/descriptions/diz/planete/Thumbs.db differ diff --git a/templates/descriptions/diz/planete/anneaux1.jpg b/templates/descriptions/diz/planete/anneaux1.jpg new file mode 100644 index 0000000..9f20cf2 Binary files /dev/null and b/templates/descriptions/diz/planete/anneaux1.jpg differ diff --git a/templates/descriptions/diz/planete/asteroide1.jpg b/templates/descriptions/diz/planete/asteroide1.jpg new file mode 100644 index 0000000..49cb307 Binary files /dev/null and b/templates/descriptions/diz/planete/asteroide1.jpg differ diff --git a/templates/descriptions/diz/planete/asteroide2.jpg b/templates/descriptions/diz/planete/asteroide2.jpg new file mode 100644 index 0000000..d4b73aa Binary files /dev/null and b/templates/descriptions/diz/planete/asteroide2.jpg differ diff --git a/templates/descriptions/diz/planete/asteroide4.jpg b/templates/descriptions/diz/planete/asteroide4.jpg new file mode 100644 index 0000000..f0ac67b Binary files /dev/null and b/templates/descriptions/diz/planete/asteroide4.jpg differ diff --git a/templates/descriptions/diz/planete/asteroide5.jpg b/templates/descriptions/diz/planete/asteroide5.jpg new file mode 100644 index 0000000..11afdba Binary files /dev/null and b/templates/descriptions/diz/planete/asteroide5.jpg differ diff --git a/templates/descriptions/diz/planete/desert2.jpg b/templates/descriptions/diz/planete/desert2.jpg new file mode 100644 index 0000000..161ae28 Binary files /dev/null and b/templates/descriptions/diz/planete/desert2.jpg differ diff --git a/templates/descriptions/diz/planete/etrange1.jpg b/templates/descriptions/diz/planete/etrange1.jpg new file mode 100644 index 0000000..938a8e8 Binary files /dev/null and b/templates/descriptions/diz/planete/etrange1.jpg differ diff --git a/templates/descriptions/diz/planete/etrange3.jpg b/templates/descriptions/diz/planete/etrange3.jpg new file mode 100644 index 0000000..059cefd Binary files /dev/null and b/templates/descriptions/diz/planete/etrange3.jpg differ diff --git a/templates/descriptions/diz/planete/etrange6.jpg b/templates/descriptions/diz/planete/etrange6.jpg new file mode 100644 index 0000000..5c40ba5 Binary files /dev/null and b/templates/descriptions/diz/planete/etrange6.jpg differ diff --git a/templates/descriptions/diz/planete/fusion2.jpg b/templates/descriptions/diz/planete/fusion2.jpg new file mode 100644 index 0000000..8159de7 Binary files /dev/null and b/templates/descriptions/diz/planete/fusion2.jpg differ diff --git a/templates/descriptions/diz/planete/normal3.jpg b/templates/descriptions/diz/planete/normal3.jpg new file mode 100644 index 0000000..9d44db8 Binary files /dev/null and b/templates/descriptions/diz/planete/normal3.jpg differ diff --git a/templates/descriptions/diz/planete/normal4.jpg b/templates/descriptions/diz/planete/normal4.jpg new file mode 100644 index 0000000..67fb5d6 Binary files /dev/null and b/templates/descriptions/diz/planete/normal4.jpg differ diff --git a/templates/descriptions/diz/planete/normal5.jpg b/templates/descriptions/diz/planete/normal5.jpg new file mode 100644 index 0000000..84adcba Binary files /dev/null and b/templates/descriptions/diz/planete/normal5.jpg differ diff --git a/templates/descriptions/diz/planete/ocean2.jpg b/templates/descriptions/diz/planete/ocean2.jpg new file mode 100644 index 0000000..560f7eb Binary files /dev/null and b/templates/descriptions/diz/planete/ocean2.jpg differ diff --git a/templates/descriptions/diz/planete/rien1.jpg b/templates/descriptions/diz/planete/rien1.jpg new file mode 100644 index 0000000..1ba94bb Binary files /dev/null and b/templates/descriptions/diz/planete/rien1.jpg differ diff --git a/templates/descriptions/diz/planete/rien10.jpg b/templates/descriptions/diz/planete/rien10.jpg new file mode 100644 index 0000000..077a494 Binary files /dev/null and b/templates/descriptions/diz/planete/rien10.jpg differ diff --git a/templates/descriptions/diz/planete/rien2.jpg b/templates/descriptions/diz/planete/rien2.jpg new file mode 100644 index 0000000..032901c Binary files /dev/null and b/templates/descriptions/diz/planete/rien2.jpg differ diff --git a/templates/descriptions/diz/planete/rien3.jpg b/templates/descriptions/diz/planete/rien3.jpg new file mode 100644 index 0000000..58fbb1f Binary files /dev/null and b/templates/descriptions/diz/planete/rien3.jpg differ diff --git a/templates/descriptions/diz/planete/rien4.jpg b/templates/descriptions/diz/planete/rien4.jpg new file mode 100644 index 0000000..7bc9c7a Binary files /dev/null and b/templates/descriptions/diz/planete/rien4.jpg differ diff --git a/templates/descriptions/diz/planete/rien5.jpg b/templates/descriptions/diz/planete/rien5.jpg new file mode 100644 index 0000000..9ea00a3 Binary files /dev/null and b/templates/descriptions/diz/planete/rien5.jpg differ diff --git a/templates/descriptions/diz/planete/rien6.jpg b/templates/descriptions/diz/planete/rien6.jpg new file mode 100644 index 0000000..e9e7412 Binary files /dev/null and b/templates/descriptions/diz/planete/rien6.jpg differ diff --git a/templates/descriptions/diz/planete/rien7.jpg b/templates/descriptions/diz/planete/rien7.jpg new file mode 100644 index 0000000..46b944a Binary files /dev/null and b/templates/descriptions/diz/planete/rien7.jpg differ diff --git a/templates/descriptions/diz/planete/rien8.jpg b/templates/descriptions/diz/planete/rien8.jpg new file mode 100644 index 0000000..3f833e4 Binary files /dev/null and b/templates/descriptions/diz/planete/rien8.jpg differ diff --git a/templates/descriptions/diz/planete/rien9.jpg b/templates/descriptions/diz/planete/rien9.jpg new file mode 100644 index 0000000..c35476a Binary files /dev/null and b/templates/descriptions/diz/planete/rien9.jpg differ diff --git a/templates/descriptions/diz/planete/soleil.jpg b/templates/descriptions/diz/planete/soleil.jpg new file mode 100644 index 0000000..e0bd4ef Binary files /dev/null and b/templates/descriptions/diz/planete/soleil.jpg differ diff --git a/templates/index.tpl b/templates/index.tpl index 5b07408..b6d0096 100644 --- a/templates/index.tpl +++ b/templates/index.tpl @@ -9,6 +9,7 @@ + ::Halo-Battle:: Bêta - {TITRE}