Тут аккуратно выложить его не получается, достаточно большой файл получился. Пожалуйста отпишитесь в теме кто сможет мне помочь. Я пришлю в ЛС.
Спустя 3 часа, 50 минут, 33 секунды (8.11.2009 - 12:24) Soldier Ghost написал(а):
А ты всё равно выкладывай )
Спустя 14 минут, 5 секунд (8.11.2009 - 12:38) Tosik написал(а):
Спустя 14 минут, 23 секунды (8.11.2009 - 12:52) Grazor написал(а):

а количество опыта нельзя высчитывать по какой-либо формуле?
ну или хотя бы в функцию вынести, чтобы не писать одно и то же 5 раз
а я бы ещё case-ом записал
Спустя 21 минута, 46 секунд (8.11.2009 - 13:14) Tosik написал(а):
Цитата (Grazor @ 8.11.2009 - 09:52) |
![]() а количество опыта нельзя высчитывать по какой-либо формуле? ну или хотя бы в функцию вынести, чтобы не писать одно и то же 5 раз а я бы ещё case-ом записал |
Формулы нет.
Етсь такое:
function setLevel($exp)
{
$lvl=0;
$d = new DOMDocument();
$filex = static_dir."player_experience_table.xml";
if ($f = @fopen($filex, "r", true)){
fclose($f);
}
else{
$this->setError("Error loading <b>".$filex."</b>");
return null;
}
$d->load($filex);
if(!$d->schemaValidate (static_dir.'player_experience_table.xsd'))
$this->setError('Error validate <b>'.$filex.'</b>');
$n = $d->getElementsByTagName('exp');
while (($lvl+1) < $n->{'length'} & $exp >= $n->item($lvl)->textContent) $lvl++;
$this->statsvalue['level']=$lvl;
}
Только мне ума не хватает прикрутить.
Вот содержание xml
<?xml version="1.0" encoding="UTF-8"?>
<player_experience_table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="player_experience_table.xsd">
<exp>0</exp> <!-- level 1 -->
<exp>650</exp> <!-- level 2 -->
<exp>1917</exp> <!-- level 3 -->
<exp>4230</exp> <!-- level 4 -->
<exp>8693</exp> <!-- level 5 -->
<exp>14583</exp> <!-- level 6 -->
<exp>22885</exp> <!-- level 7 -->
<exp>34936</exp> <!-- level 8 -->
...........................
А вот xsd.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="player_experience_table">
<xs:complexType>
<xs:sequence>
<xs:element name="exp" type="xs:long" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Я думал о том что в начале задать переменные а патом выводить их в разном виде и т.д. Ток не получилось, были какие-то причины. Вот и прошу помощи.
Спустя 24 минуты, 7 секунд (8.11.2009 - 13:38) sergeiss написал(а):
Давай рассмотрим часть кода:
Этот "китайский кодинг" лучше заменить на одну строку
где get_level - это функция, которую надо сделать. Типа такой:
if ($row["exp"] >= "0")
$level = "1";
if ($row["exp"] >= "650")
$level = "2";
if ($row["exp"] >= "1917")
$level = "3";
if ($row["exp"] >= "4230")
$level = "4";
if ($row["exp"] >= "8693")
$level = "5";
if ($row["exp"] >= "14583")
$level = "6";
Этот "китайский кодинг" лучше заменить на одну строку
$level=get_level( $row['exp'] );
где get_level - это функция, которую надо сделать. Типа такой:
function get_level( $exp )
{
$bound=array( 1=>0, 650, 1917, 4230, ...); // вместо многоточия - все числа
// либо - задаешь формулой эти числа в массиве
// далее проходишь по массиву циклом, сравниваешь с границами, и если находишь подходящее число, то возвращаешь его ключ - это и будет как раз нужный уровень;
// но как это сделать - подумай сам. Это просто
}
Спустя 3 часа, 48 минут, 10 секунд (8.11.2009 - 17:26) sergeiss написал(а):
Я вернулся, ездил тут по делам разным. Продолжаю "разбор полетов".
Вот такой (также "китайский"
) кодинг
(я специально беру только часть кода, про остальное сам догадаешься) можно заменить на такой:
И аналогичный алгоритм можно использовать для любых назначений, вместо целой "пачки" ИФов.
Преимущества такого подхода:
- компактный код
- массив можно загрузить из файла или из БД, что увеличивает универсальность кода; при любых добавках не надо править сам скрипт, достаточно поменять только данные в файле.
Вот такой (также "китайский"

if ($row["player_class"] == "WARRIOR")
$player_class = "<font size='2'>Warrior</font>";
if ($row["player_class"] == "GLADIATOR")
$player_class = "<font size='2'>Gladiator</font>";
if ($row["player_class"] == "TEMPLAR")
$player_class = "<font size='2'>Templar</font>";
if ($row["player_class"] == "SCOUT")
$player_class = "<font size='2'>Scout</font>";
if ($row["player_class"] == "ASSASSIN")
$player_class = "<font size='2'>Assassin</font>";
(я специально беру только часть кода, про остальное сам догадаешься) можно заменить на такой:
$pclass=array( 'WARRIOR'=> 'Warrior', 'GLADIATOR' => 'Gladiator', 'TEMPLAR' => ' Templar', ...и так далее...);
// и выставляем нужное значение одной строкой кода;
// если в массиве $pclass есть нужный ключ, то берем оттуда значение; иначе - назначаем пустую строку
$player_class =( isset( $pclass[ $row['player_class'] ] ) ? "<font size='2'>".$pclass[ $row['player_class'] ].'</font>' : '';
И аналогичный алгоритм можно использовать для любых назначений, вместо целой "пачки" ИФов.
Преимущества такого подхода:
- компактный код
- массив можно загрузить из файла или из БД, что увеличивает универсальность кода; при любых добавках не надо править сам скрипт, достаточно поменять только данные в файле.
Спустя 22 минуты, 25 секунд (8.11.2009 - 17:49) sergeiss написал(а):
Далее.
Код типа
Можно заменить на вызов созданной тобой функции
Код типа
echo "<td><font size='2'>" . ++$i . "</font></td>";
echo "<td><font size='2'>" . $row["name"] . "</font></td>";
echo "<td><font size='2'>" . $level . "</font></td>";
echo "<td><font size='2'>" . $gender . "</font></td>";
Можно заменить на вызов созданной тобой функции
one_element_out( ++$i );
one_element_out( $row['name'] );
// а сама функция будет выглядеть так
function one_element_out( $element )
{
echo '<td><font size="2"'.$element.'</font></td>';
}
Спустя 44 минуты, 36 секунд (8.11.2009 - 18:33) Tosik написал(а):
Спасибо. Что-то понял, с чем-то постораюсь разобраться. Глянь пожалуйста начало...
$msconn = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$msconn)
die("Ошибка соединения. Скорее всего игровой сервер неактивен, попробуйте зайти сюда позже.");
if (!mysql_select_db($dbname))
die("БД не найдена! Скорее всего эта ошибка вызвана сбоем на сервере.");
$q = mysql_query("SELECT name, exp, gender, race, player_class, online FROM players");
if (!$q)
die("Ошибка, при получении данных из базы.");
$row = mysql_fetch_array($q)
$level=get_level( $row['exp'] );
function get_level($exp)
{
$level=0;
$d = new DOMDocument();
$filex = static_dir."player_experience_table.xml";
if ($f = @fopen($filex, "r", true)){
fclose($f);
}
else{
$this->setError("Error loading <b>".$filex."</b>");
return null;
}
$d->load($filex);
if(!$d->schemaValidate (static_dir.'player_experience_table.xsd'))
$this->setError('Error validate <b>'.$filex.'</b>');
$n = $d->getElementsByTagName('exp');
while (($level+1) < $n->{'length'} & $exp >= $n->item($lvl)->textContent) $level++;
$this->statsvalue['level']=$level;
}
Спустя 4 минуты, 51 секунда (8.11.2009 - 18:38) Tosik написал(а):
Хочу сначала задать переменные, а потом их выводить, в разных видах.
Спустя 4 минуты, 37 секунд (8.11.2009 - 18:43) sergeiss написал(а):
Цитата (Tosik @ 8.11.2009 - 19:38) |
Хочу сначала задать переменные, а потом их выводить, в разных видах. |
А вопрос-то в чем?
Спустя 5 минут, 1 секунда (8.11.2009 - 18:48) Tosik написал(а):
Цитата (sergeiss @ 8.11.2009 - 15:43) | ||
А вопрос-то в чем? |
Я до этого выложил код.
В этом месте пишит ошибка.
$row = mysql_fetch_array($q)
$level=get_level( $row['exp'] ); -Именно в этой строке.
Как мне после Получения инфы из таблицы, получать её по переменной $row['название столбца.'] ?
Спустя 17 минут, 10 секунд (8.11.2009 - 19:05) sergeiss написал(а):
Цитата (Tosik @ 8.11.2009 - 19:48) |
Как мне после Получения инфы из таблицы, получать её по переменной $row['название столбца.'] ? |
замени mysql_fetch_array на mysql_fetch_assoc.
Я что-то на это даже и не посмотрел сначала.
Спустя 2 минуты, 57 секунд (8.11.2009 - 19:08) Soldier Ghost написал(а):
игра WOW ? да помню я в неё и днём и ночью играл

Спустя 1 минута, 33 секунды (8.11.2009 - 19:09) Tosik написал(а):
Цитата (Soldier Ghost @ 8.11.2009 - 16:08) |
игра WOW ? да помню я в неё и днём и ночью играл ![]() |
Игра Aion.
Спустя 15 минут, 18 секунд (8.11.2009 - 19:25) Tosik написал(а):
function get_level( $exp )
{
$bound=array( 1=>0, 650, 1917, 4230, ...); // вместо многоточия - все числа
// либо - задаешь формулой эти числа в массиве
// далее проходишь по массиву циклом, сравниваешь с границами, и если находишь подходящее число, то возвращаешь его ключ - это и будет как раз нужный уровень;
// но как это сделать - подумай сам. Это просто
}
Можешь расписать?
