Xnova фиксы

Открыл и всё что нашел в файле так это:....
Тут и ковырять нечего...=(
Ну как же нечего? ищешь функцию BuildRessourcePage (); которую вызывает этот файл (скорее всего находится в includes/functions/BuildRessourcePage.php) его и ковырять нужно...
З.Ы. если нет такого файла то запусти в корне игры поиск по содержимому (например тотал командером) а в качестве строки поиска задай function BuildRessourcePage
 
Ну как же нечего? ищешь функцию BuildRessourcePage (); которую вызывает этот файл (скорее всего находится в includes/functions/BuildRessourcePage.php) его и ковырять нужно...
З.Ы. если нет такого файла то запусти в корне игры поиск по содержимому (например тотал командером) а в качестве строки поиска задай function BuildRessourcePage

Спасибо разобрался.

А не подскажите мне как исправить баг с очередью постройки? А точнее с отменой. То есть при нажатии любой отмены(то есть любого здания по списку), всегда первым отменяется то, которое строиться, а не то которое жмут отменить. Как эту неприятность исправить?

А еще такая маленькая проблемка, у меня почему-то новые пользователе появляются начиная не с 1 галактики, а откуда-то со 2 галактики и с 250 солнечной системы. Я тут чего-то не понял, эт в базе менять что-то надо или же в самом скрипте...
 
Спасибо разобрался.
А не подскажите мне как исправить баг с очередью постройки? А точнее с отменой. То есть при нажатии любой отмены(то есть любого здания по списку), всегда первым отменяется то, которое строиться, а не то которое жмут отменить. Как эту неприятность исправить?
А еще такая маленькая проблемка, у меня почему-то новые пользователе появляются начиная не с 1 галактики, а откуда-то со 2 галактики и с 250 солнечной системы. Я тут чего-то не понял, эт в базе менять что-то надо или же в самом скрипте...

Посмотри в базе,в таблице конфигов,возможно у тебя там есть поле,по типу:
LastSettedGalaxy/System/PlanetPos - вот там координаты начала заселения вселенной.
 
Посмотри в базе,в таблице конфигов,возможно у тебя там есть поле,по типу:
LastSettedGalaxy/System/PlanetPos - вот там координаты начала заселения вселенной.
Ну совершенно не обязательно ковырять базу данных... эти параметры есть в админке в разделе "Настройки", называется "стартовая позиция нового игрока" (ну или что-то в этом духе, в зависимости от перевода)
Там будут 3 поля для ввода номера галактики, системы и планеты соответственно... поставь во всех трёх единицы и следующий игрок получит планету в координатах 1:1:1 дальше координаты будут меняться автоматически...
 
Ну совершенно не обязательно ковырять базу данных... эти параметры есть в админке в разделе "Настройки", называется "стартовая позиция нового игрока" (ну или что-то в этом духе, в зависимости от перевода)
Там будут 3 поля для ввода номера галактики, системы и планеты соответственно... поставь во всех трёх единицы и следующий игрок получит планету в координатах 1:1:1 дальше координаты будут меняться автоматически...

У меня нету такого в меню, но через базу всё сделал.

Но что же мне делать с багом отмены постройки?

А не подскажите мне как исправить баг с очередью постройки? А точнее с отменой. То есть при нажатии любой отмены(то есть любого здания по списку), всегда первым отменяется то, которое строиться, а не то которое жмут отменить. Причем отменяется первое, но второе не изменяет свое значение, а время суммируется. Как исправить?

А еще обнаружил что при удалении альянса, он удаляется, но в статистике и везде написано что он всё еще есть, но при нажатии на него, пишут что альянса уже не существует. Правится?
 
Ну совершенно не обязательно ковырять базу данных... эти параметры есть в админке в разделе "Настройки", называется "стартовая позиция нового игрока" (ну или что-то в этом духе, в зависимости от перевода)
Там будут 3 поля для ввода номера галактики, системы и планеты соответственно... поставь во всех трёх единицы и следующий игрок получит планету в координатах 1:1:1 дальше координаты будут меняться автоматически...


У некоторых просто нет такого.

А еще обнаружил что при удалении альянса, он удаляется, но в статистике и везде написано что он всё еще есть, но при нажатии на него, пишут что альянса уже не существует. Правится?

После обновления статистики тоже остаётся?
 
Но что же мне делать с багом отмены постройки?
А не подскажите мне как исправить баг с очередью постройки? А точнее с отменой. То есть при нажатии любой отмены(то есть любого здания по списку), всегда первым отменяется то, которое строиться, а не то которое жмут отменить. Причем отменяется первое, но второе не изменяет свое значение, а время суммируется. Как исправить?
Во первых проверь сылки, которые отвечают за отмену постройки в очереди.. при этом ссылка первой постройки (которая непосредственно строится) должна иметь вид _http://yoy_game_path/buildings.php?listid=1&cmd=cancel&planet=1
Ссылка второй постройки: _http://yoy_game_path/buildings.php?listid=2&cmd=remove&planet=1
Ссылка третьей: _http://yoy_game_path/buildings.php?listid=3&cmd=remove&planet=1
и так далее... Обрати внимание на то, что в первой ссылке применяется cmd=cancel, а во всех остальных cmd=remove (их обрабатывают разные файлы!), кроме того в ссылках меняется listid он соответствует номеру ссылки...
Если ссылки соответствуют вышеприведенным, то ковырять нужно файлик BatimentBuildingPage.php в нём есть конструкция switch case распределяющая файлы, обрабатывающие запросы отмены построек... там поковыряйся...
 
После обновления статистики тоже остаётся?

Да, остается, и это не приятно.

Во первых проверь сылки, которые отвечают за отмену постройки в очереди.. при этом ссылка первой постройки (которая непосредственно строится) должна иметь вид _http://yoy_game_path/buildings.php?listid=1&cmd=cancel&planet=1
Ссылка второй постройки: _http://yoy_game_path/buildings.php?listid=2&cmd=remove&planet=1
Ссылка третьей: _http://yoy_game_path/buildings.php?listid=3&cmd=remove&planet=1
и так далее... Обрати внимание на то, что в первой ссылке применяется cmd=cancel, а во всех остальных cmd=remove (их обрабатывают разные файлы!), кроме того в ссылках меняется listid он соответствует номеру ссылки...
Если ссылки соответствуют вышеприведенным, то ковырять нужно файлик BatimentBuildingPage.php в нём есть конструкция switch case распределяющая файлы, обрабатывающие запросы отмены построек... там поковыряйся...

Проверил, ссылки правильные. А так же фаил BatimentBuildingPage.php, нашел там эту функцию, посмотрел, всё правильно, запросы правильно отправляются. Но отмена всё равно косячно работает.

С.О.С. Ребят сделал какой-то косяк, теперь на странице обзора белая страница, когда делаю показать ошибки вот что выдаёт:
Код:
Fatal error: Call to a member function error() on a non-object in /includes/db/mysql.php on line 108

В этой строке ничего не понял вообще...(108 строка)
Код:
$sqlquery = mysql_query($sql) or $debug->error(mysql_error()."<br/>$sql<br/>","SQL Error");

Код:
<?php
function db_connect()
{
	$link = mysql_connect(db_host, db_user, db_pass) or $debug->error(mysql_error()."<br />$query","SQL Error");
	mysql_select_db(db_name) or $debug->error(mysql_error()."<br />$query","SQL Error");
	if (db_charset) mysql_query('SET NAMES '.db_charset);

	return true;
}


function db_get_line($table = '', $conditions = '')
{
	return db_query('SELECT * FROM '.db_get_prefix($table).($conditions ? ' WHERE '.$conditions : '').' LIMIT 1', true);
}


function db_get_lines($table = '', $conditions = '')
{
	return db_query('SELECT * FROM '.db_get_prefix($table).($conditions ? ' WHERE '.$conditions : ''));
}


function db_get_count($table, $conditions = '')
{
	$line = db_query('SELECT COUNT(*) FROM '.db_get_prefix($table).($conditions ? ' WHERE '.$conditions : ''), true, false);

	return $line[0];
}


function db_delete_line($table, $conditions = '')
{
	return db_query('DELETE FROM '.db_get_prefix($table).($conditions ? ' WHERE '.$conditions : '').' LIMIT 1');
}


/**
 * Основная функция работы с базой
 * @param string $query - запрос
 * @param string $query - запрос
 * @param string $first - возвращаем только первый элемент массива
 * @return unknown_type
 */
function db_query($query = '', $first = false, $assoc = true)
{
	db_connect();

	//echo '<p>'.__LINE__.'<br/>'.$query.'</p>';

	$resource = mysql_query($query);

	if ($resource === true) return false;

	$res = array();

	if ($assoc)
	{
		while($line = mysql_fetch_assoc($resource))
		{
			$res[] = $line;
		}
	} else {
		while($line = mysql_fetch_row($resource))
		{
			$res[] = $line;
		}
	}
	mysql_free_result($resource);

	if ($first)
	{
		return count($res) ? $res[0] : false;
	}

	return $res;
}


/**
 * Функция получения префикса
 * @param string $table - название таблицы
 * @return string
 */
function db_get_prefix($table)
{
	return db_prefix.$table;
}


function doquery($query, $table, $fetch = false)
{
	global $dbsettings, $numqueries, $link, $debug;

	if(!$link)
	{
		$link = mysql_connect($dbsettings['server'], $dbsettings['user'], $dbsettings['pass']) or $debug->error(mysql_error()."<br />$query","SQL Error");
		//mysql_query("/*!40101 SET NAMES 'cp1251' */") or die("Error: " . mysql_error());
		mysql_select_db($dbsettings["name"]) or $debug->error(mysql_error()."<br />$query","SQL Error");

		echo mysql_error();
	}

	$sql = str_replace("{{table}}", $dbsettings["prefix"].$table, $query);
//	$sql = addslashes($sql);
//	$sql = str_replace("'", "", $sql);
//	echo '<p>'.__LINE__.'<br/>'.$sql.'</p>';
	$sqlquery = mysql_query($sql) or $debug->error(mysql_error()."<br/>$sql<br/>","SQL Error");

	unset($dbsettings);
/*
	$numqueries++;
	$arr = debug_backtrace();
	$file = end(explode('/',$arr[1]['file']));
	$line = $arr[1]['line'];
	$debug->add("<tr><th>Query $numqueries: </th><th>$query</th><th>$file($line)</th><th>$table</th><th>$fetch</th></tr>");
*/
	if ($fetch)
	{
		return mysql_fetch_array($sqlquery);
	}
	else
	{
		return $sqlquery;
	}
}
?>
 
А еще обнаружил что при удалении альянса, он удаляется, но в статистике и везде написано что он всё еще есть, но при нажатии на него, пишут что альянса уже не существует. Правится?
Инфа о альянсе хранится в двух таблицах, в таблице альянсов и таблице пользователей... Скорее всего при удалении альянса не работает один из запросов на правку БД... проверяй файл alliance.php, код удаления должен иметь приблизительно такой вид:
PHP:
if ($mode == 'admin' && $edit == 'exit' && $numwar==0) { // disolver una alianza
// obtenemos el array de los rangos
$ally_ranks = unserialize($ally['ally_ranks']);
// comprobamos el permiso
if ($ally['ally_owner'] != $user['id'] && !$user_can_exit_alliance) {
message($lang['Denied_access'], $lang['Members_list'], 'alliance.php');
}
/*
 Si bien, se tendria que confirmar, no tengo animos para hacerlo mas detallado...
 sorry :(
*/
doquery("UPDATE {{table}} SET `ally_id`=0, `ally_name` = '' WHERE ally_id='{$ally['id']}'", "users");
doquery("DELETE FROM {{table}} WHERE id='{$ally['id']}'", "alliance");
header('Location: alliance.php');
exit;}

По поводу очереди построек проверь функцию RemoveBuildingFromQueue() (находится скорее всего в одноимённом файле)
Дело в том, что в базу очередь построек пишется одной строкой и имеет приблизительно такой вид: 1,32,48536,1285138246,build;1,33,72805,1285211051,build;2,28,1428,1285212479,build
где значения до знака ; относятся к одной постройке и означают тип,уровень,время окончания постройки
так вот задача этого файла разобрать вышеуказанную запись на составляющие, удалить нужную, собрать всё опять в кучу и перезаписать обратно в базу...
скрипт файла приблизительно такой:
PHP:
function RemoveBuildingFromQueue ( &$CurrentPlanet, $CurrentUser, $QueueID ) {

	if ($QueueID > 1) {
		$CurrentQueue  = $CurrentPlanet['b_building_id'];
		if ($CurrentQueue != 0) {
			$QueueArray    = explode ( ";", $CurrentQueue );
			$ActualCount   = count ( $QueueArray );
			$ListIDArray   = explode ( ",", $QueueArray[$QueueID - 2] );
			$BuildEndTime  = $ListIDArray[3];
			for ($ID = $QueueID; $ID < $ActualCount; $ID++ ) {
				$ListIDArray          = explode ( ",", $QueueArray[$ID] );
				$BuildEndTime        += $ListIDArray[2];
				$ListIDArray[3]       = $BuildEndTime;
				$QueueArray[$ID - 1]  = implode ( ",", $ListIDArray );
			}
			unset ($QueueArray[$ActualCount - 1]);
			$NewQueue     = implode ( ";", $QueueArray );
		}
		$CurrentPlanet['b_building_id'] = $NewQueue;
	}

	return $QueueID;

}
 
Инфа о альянсе хранится в двух таблицах, в таблице альянсов и таблице пользователей... Скорее всего при удалении альянса не работает один из запросов на правку БД... проверяй файл alliance.php, код удаления должен иметь приблизительно такой вид:
PHP:
if ($mode == 'admin' && $edit == 'exit' && $numwar==0) { // disolver una alianza
// obtenemos el array de los rangos
$ally_ranks = unserialize($ally['ally_ranks']);
// comprobamos el permiso
if ($ally['ally_owner'] != $user['id'] && !$user_can_exit_alliance) {
message($lang['Denied_access'], $lang['Members_list'], 'alliance.php');
}
/*
 Si bien, se tendria que confirmar, no tengo animos para hacerlo mas detallado...
 sorry :(
*/
doquery("UPDATE {{table}} SET `ally_id`=0, `ally_name` = '' WHERE ally_id='{$ally['id']}'", "users");
doquery("DELETE FROM {{table}} WHERE id='{$ally['id']}'", "alliance");
header('Location: alliance.php');
exit;}

И правда, не хватало одного запроса в бд, как раз на удаление имени альянса из база банных. Теперь всё отлично.

По поводу очереди построек проверь функцию RemoveBuildingFromQueue() (находится скорее всего в одноимённом файле)
Дело в том, что в базу очередь построек пишется одной строкой и имеет приблизительно такой вид: 1,32,48536,1285138246,build;1,33,72805,1285211051,build;2,28,1428,1285212479,build
где значения до знака ; относятся к одной постройке и означают тип,уровень,время окончания постройки
так вот задача этого файла разобрать вышеуказанную запись на составляющие, удалить нужную, собрать всё опять в кучу и перезаписать обратно в базу...
скрипт файла приблизительно такой:
PHP:
function RemoveBuildingFromQueue ( &$CurrentPlanet, $CurrentUser, $QueueID ) {
	if ($QueueID > 1) {
		$CurrentQueue  = $CurrentPlanet['b_building_id'];
		if ($CurrentQueue != 0) {
			$QueueArray    = explode ( ";", $CurrentQueue );
			$ActualCount   = count ( $QueueArray );
			$ListIDArray   = explode ( ",", $QueueArray[$QueueID - 2] );
			$BuildEndTime  = $ListIDArray[3];
			for ($ID = $QueueID; $ID < $ActualCount; $ID++ ) {
				$ListIDArray          = explode ( ",", $QueueArray[$ID] );
				$BuildEndTime        += $ListIDArray[2];
				$ListIDArray[3]       = $BuildEndTime;
				$QueueArray[$ID - 1]  = implode ( ",", $ListIDArray );
			}
			unset ($QueueArray[$ActualCount - 1]);
			$NewQueue     = implode ( ";", $QueueArray );
		}
		$CurrentPlanet['b_building_id'] = $NewQueue;
	}
	return $QueueID;
}

Тут тоже почти всё ясно, только есть один нюанс, не очень приятный. Теперь постройки удаляются те которые и надо, но. Если например у меня очередь выглядит так:
Шахта металла 1 уровень (время 0.03.00)
Шахта металла 2 уровень (время 0.05.00)
Шахта металла 3 уровень (время 0.07.00)
Так вот, если я отменяю первую постройку (шахту 1 уровеня), то по идеи, все равно должна строиться шахта 1 уровня, и это должны так же быть написано, но у меня начинает строиться шахта 2 уровня и тратит столько времени столько требуется для её постройки(ну так видно в браузере), а на деле построится как и должна шахта 1 уровня, только времени она будет строиться как вторая, или же если отменять с первой и оставить только третью, то будет строиться столько времени сколько должна строиться третья, а построится первая как и должно быть.
Вообще я сам не понял что написал, но надеюсь вы поймете...:D

П.С. Проблему со страницей обзора решил, так что с ней отбой.
 
Назад
Сверху