Remove duplicate web folder

ryzomclassic-develop
kaetemi 4 years ago
parent 08c094e957
commit 1d06892f16
No known key found for this signature in database
GPG Key ID: 9873C4D40BB479BC

@ -1,70 +0,0 @@
<?php
include_once('thread_utils.php');
include_once('mail_utils.php');
include_once('admin_utils.php');
if (($user_login != "support" || ($remote_addr != "192.168.1.153" && $remote_addr != "192.168.3.1")) && $remote_addr != "127.0.0.1")
{
die();
}
importParam('recover_forum');
if ($recover_forum)
{
echo "recover forum $recover_forum<br>\n";
recover_thread($recover_forum);
die();
}
importParam('recover_thread');
importParam('recover_threadthread');
if ($recover_thread && isset($recover_threadthread))
{
echo "recover forum $recover_thread<br>\n";
recover_one_thread($recover_thread, $recover_threadthread);
die();
}
importParam('rename_forum');
importParam('into_forum');
if ($rename_forum)
{
echo "rename forum $rename_forum into $into_forum<br>\n";
rename_forum($rename_forum, $into_forum);
die();
}
importParam('shard');
importParam('mailbox');
importParam('mail');
if ($mail)
{
$mdir = get_user_dir($mailbox, $shard);
readfile($mdir.$mail);
die();
}
else if ($mailbox)
{
display_mailbox_content($shard, $mailbox);
die();
}
importParam('forum');
importParam('thread');
if ($thread)
{
display_thread_content($shard, $forum, $thread);
die();
}
else if ($forum)
{
display_forum_content($shard, $forum);
die();
}
?>

@ -1,103 +0,0 @@
<?php
$server = "localhost";
$port = 80;
// import HTTP_GET_VARS as _GET if _GET doesn't exist
if (!isset($_GET) && isset($HTTP_GET_VARS))
$_GET = &$HTTP_GET_VARS;
echo "<form method='get' action='$PHP_SELF'>\n";
echo "SHARD: <input type='text' name='shard' value='".$_GET['shard']."'><br>\n";
echo "MAILBOX: <input type='text' name='mailbox' value='".$_GET['mailbox']."'><br>\n";
echo "FORUM: <input type='text' name='forum' value='".$_GET['forum']."'><br>\n";
echo "<input type='submit' value='Retrieve'><br>\n";
echo "</form>\n";
if ($_GET["mailbox"])
{
echo "Get mailbox ".$_GET["mailbox"]." content:<br>\n";
$s = fsockopen($server, $port, &$errno, &$errstr, 30) or die ("ERROR: can't connect to $server:$port");
fputs($s,"GET /websrv/admin.php?user_login=support&shard=".$_GET["shard"]."&mailbox=".$_GET["mailbox"]." HTTP/1.0\n\n");
while(!feof($s))
{
$l = trim(fgets($s, 2048));
if (ereg("^FILE:(.*)", $l, $reg))
echo "<a href=\"$PHP_SELF?shard=".$_GET["shard"]."&mailbox=".$_GET["mailbox"]."&mail=".$reg[1]."\">".$reg[1]."</a><br>\n";
}
fclose($s);
echo "<br><br>\n";
}
if ($_GET["mail"])
{
echo "Get mail ".$_GET["mailbox"]."/".$_GET["mail"]." content:<br>\n";
$s = fsockopen($server, $port, &$errno, &$errstr, 30) or die ("ERROR: can't connect to $server:$port");
fputs($s, "GET /websrv/admin.php?user_login=support&shard=".$_GET["shard"]."&mail=".$_GET["mail"]."&mailbox=".$_GET["mailbox"]." HTTP/1.0\n\n");
echo "Content of mail:<br>\n";
while(!feof($s))
echo nl2br(htmlentities(trim(fgets($s, 2048))));
fclose($s);
echo "<br><br>\n";
}
if ($_GET["recover_thread"])
{
echo "Recover thread ".$_GET["forum"]." ".$_GET["recover_thread"]."<br>\n";
$s = fsockopen($server, $port, &$errno, &$errstr, 30) or die ("ERROR: can't connect to $server:$port");
fputs($s, "GET /websrv/admin.php?user_login=support&shard=".$_GET["shard"]."&recover_thread=".$_GET["forum"]."&recover_threadthread=".$_GET["recover_thread"]." HTTP/1.0\n\n");
fclose($s);
echo "<br><br>\n";
}
if ($_GET["forum"])
{
echo "Get forum ".$_GET["forum"]." content:<br>\n";
$s = fsockopen($server, $port, &$errno, &$errstr, 30) or die ("ERROR: can't connect to $server:$port");
fputs($s, "GET /websrv/admin.php?user_login=support&shard=".$_GET["shard"]."&forum=".$_GET["forum"]." HTTP/1.0\n\n");
while(!feof($s))
{
$l = trim(fgets($s, 2048));
if (ereg("^FILE:(.*)", $l, $reg))
{
echo "<a href=\"$PHP_SELF?shard=".$_GET["shard"]."&forum=".$_GET["forum"]."&thread=".trim($reg[1])."\">".trim($reg[1])."</a>\n";
if ($reg[1]{0} == '_')
{
echo " <a href=\"$PHP_SELF?shard=".$_GET["shard"]."&forum=".$_GET["forum"]."&recover_thread=".trim($reg[1])."\">recover thread</a>\n";
}
echo "<br>\n";
}
}
fclose($s);
echo "<br><br>\n";
}
if ($_GET["thread"])
{
echo "Get thread ".$_GET["forum"]."/".$_GET["thread"]." content:<br>\n";
$s = fsockopen($server, $port, &$errno, &$errstr, 30) or die ("ERROR: can't connect to $server:$port");
fputs($s, "GET /websrv/admin.php?user_login=support&shard=".$_GET["shard"]."&forum=".$_GET["forum"]."&thread=".$_GET["thread"]." HTTP/1.0\n\n");
echo "Content of thread:<br>\n";
while(!feof($s))
{
$l = trim(fgets($s, 2048));
if (ereg("^TOPIC:(.*) SUBMIT:(.*)$", $l, $reg))
echo nl2br(htmlentities(" TOPIC:".$reg[1]."SUBMITED BY: ".$reg[2]."\n"));
if (ereg("^AUTHOR:(.*) DATE:(.*) POST:(.*)", $l, $reg))
echo nl2br(htmlentities("AUTHOR: ".$reg[1]." DATE:".$reg[2]." POST:".$reg[3]."\n"));
}
fclose($s);
echo "<br><br>\n";
}
?>

@ -1,46 +0,0 @@
<?php
function display_mailbox_content($shard, $user)
{
$udir = get_user_dir($user, $shard);
echo "-- MAILBOX $user ($udir)\n";
$dir = opendir($udir);
while ($dir && ($file = readdir($dir)))
if (ereg("^mail_([0-9]*)\.html", $file) || ereg("^_mail_([0-9]*)\.html", $file))
echo "FILE:$file\n";
echo "-- END MAILBOX $user\n";
}
function display_forum_content($shard, $user)
{
$udir = get_user_dir($user, $shard);
echo "-- FORUM $user ($udir)\n";
$dir = opendir($udir);
while ($dir && ($file = readdir($dir)))
if (ereg("^thread_([0-9]*)\.index", $file) || ereg("^_thread_([0-9]*)\.index", $file))
echo "FILE:$file\n";
echo "-- END FORUM $user\n";
}
function display_thread_content($shard, $forum, $thread)
{
$udir = get_user_dir($forum, $shard);
read_index($udir.$thread, &$header, &$array);
$a = explode("%%", $header);
echo "-- THREAD $forum $thread\n";
echo "TOPIC: ".$a[1]." SUBMIT: ".$a[0]."\n";
if (count($array) > 0)
{
foreach ($array as $post)
{
echo "AUTHOR: ".$post[0]." DATE: ".$post[2]." POST: ".$post[1]."\n";
}
}
echo "-- END THREAD $forum $thread\n";
}
?>

@ -1,21 +0,0 @@
<?php
include_once('utils.php');
unset($user);
$user = $user_login;
$user_dir = get_user_dir($user, $shard);
if (!is_dir($user_dir))
die("0");
$fname = $user_dir.'new_mails';
if (file_exists($fname))
{
unlink($fname);
die("1");
}
else
{
die("0");
}
?>

@ -1,6 +0,0 @@
<?php
$USERS_DIR = '/home/nevrax/live/www'; // without final /
$TEMPLATE_DIR = './template'; // without final /
?>

@ -1,31 +0,0 @@
<?php
include_once('mail_utils.php');
//
// INPUT:
//
// $user_login login of the user that consults the mailbox
// $select_mail_%% mails to be removed
//
read_template('confirm_delete_mail.html', $confirm_delete_mail);
$mails = array();
$selected_mails = '';
foreach ($_POST as $var => $value)
{
if (matchParam($var, "select_mail_", $mail))
{
$mails[] = $mail;
$selected_mails .= "<input type='hidden' name='select_mail_$mail' value='selected'>\n";
}
}
//
$instance = str_replace(array('%%MAIL%%', '%%SELECTED_MAILS%%'),
array($mails[0], $selected_mails),
$confirm_delete_mail);
echo $instance;
?>

@ -1,71 +0,0 @@
<?php
include_once('thread_utils.php');
//
// INPUT:
//
// $user_login login of the user that consults the forum
// $shard shard from which the user connects in
// $post_from user who create the thread
// $post_to forum in which the thread is to be created
// $post_subject topic of the new thread
// $post_content content of the first post (optional)
//
importParam('post_from');
importParam('post_to');
importParam('post_subject');
importParam('post_content');
check_character_belongs_to_guild($user_login, $post_to);
// check mail is valid
//if (!isset($post_from) || !isset($post_to) || !isset($post_subject))
// die('Incomplete post to send');
//if ($post_subject == '') $post_subject = 'No Subject';
// check recipient has an account
$to_dir = build_user_dir($post_to, $shard);
$to_index = $to_dir.'forum.index';
if (!file_exists($to_index))
{
build_forum_page($post_to);
}
if (trim($post_subject) != '')
{
$post_from = clean_string($post_from);
$post_to = clean_string($post_to);
$post_subject = clean_string($post_subject);
//
// send mail to recipient
//
// create new thread index
add_thread_to_forum_index($post_from, $post_to, $post_subject, $index);
// create thread file
create_thread($post_from, $post_to, $post_subject, $index);
// add main post to thread
if ($post_content != "")
add_post($post_from, $post_to, $post_content, $index, $last_date);
// rebuild thread page
build_thread_page($post_to, $index, $num_posts);
// update forum index since thread was touched
update_forum_index($post_to, $index, $num_posts, $last_date);
// rebuild forum page
build_forum_page($post_to);
}
// redirect browser to new forum page
//redirect("forum.php?forum=$post_to");
exportParam('forum', $post_to);
//$forum = $post_to;
include('forum.php');
?>

@ -1,135 +0,0 @@
<?php
include_once('mail_utils.php');
include_once('thread_utils.php');
if ($enter_login)
{
if ($login)
setcookie('user_login', $login, time()+86400);
else
setcookie('user_login');
}
if ($rebuild_mailbox)
{
build_mail_page($user);
}
if ($rebuild_forum)
{
build_forum_page($user);
}
if ($rebuild_thread)
{
build_thread_page($user, $thread, $num_posts);
}
if ($remove_thread)
{
remove_thread($user, $thread);
}
function selectUser($var)
{
return "<select name='$var'>\n".
"<option value='ace'>Ace\n".
"<option value='ben'>Ben\n".
"<option value='hulud'>Hulud\n".
"<option value='lem'>Lem\n".
"<option value='guild'>Guild\n".
"<option value='guest'>Guest\n".
"</select>\n";
}
echo "<html><head><title>Fake post form</title></head>\n";
echo "<body>\n";
echo "<table><form method=post action='form_post.php'>\n";
echo "<tr valign=top><td></td><td><input type=submit value='Refresh'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "<table><form method=post action='form_post.php'>\n";
echo "<tr valign=top><td>Login</td><td><input type=text name='login' size=50 maxlength=255 value='$user_login'></td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit name='enter_login' value='Enter'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Post a mail<br>\n";
echo "<table><form method=post action='post_mail.php'>\n";
echo "<tr valign=top><td>From</td><td>".selectUser('mail_from')."</td></tr>\n";
echo "<tr valign=top><td>To</td><td>".selectUser('mail_to')."</td></tr>\n";
echo "<tr valign=top><td>Subject</td><td><input type=text name='mail_subject' size=50 maxlength=255></td></tr>\n";
echo "<tr valign=top><td>Content</td><td><textarea name='mail_content' rows=20 cols=50></textarea></td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit value='Send'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Rebuild a mail box<br>\n";
echo "<table><form method=post action='form_post.php'>\n";
echo "<tr valign=top><td>User</td><td>".selectUser('user')."</td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit name='rebuild_mailbox' value='Rebuild'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Create a thread in a forum<br>\n";
echo "<table><form method=post action='create_thread.php'>\n";
echo "<tr valign=top><td>From</td><td>".selectUser('post_from')."</td></tr>\n";
echo "<tr valign=top><td>To</td><td>".selectUser('post_to')."</td></tr>\n";
echo "<tr valign=top><td>Subject</td><td><input type=text name='post_subject' size=50 maxlength=255></td></tr>\n";
echo "<tr valign=top><td>Content</td><td><textarea name='post_content' rows=20 cols=50></textarea></td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit value='Post'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Post a topic in a thread<br>\n";
echo "<table><form method=post action='post.php'>\n";
echo "<tr valign=top><td>From</td><td>".selectUser('post_from')."</td></tr>\n";
echo "<tr valign=top><td>To</td><td>".selectUser('post_to')."</td></tr>\n";
echo "<tr valign=top><td>Thread</td><td><input type=text name='post_thread' size=50 maxlength=255></td></tr>\n";
echo "<tr valign=top><td>Content</td><td><textarea name='post_content' rows=20 cols=50></textarea></td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit value='Post'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Rebuild a forum<br>\n";
echo "<table><form method=post action='form_post.php'>\n";
echo "<tr valign=top><td>User</td><td>".selectUser('user')."</td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit name='rebuild_forum' value='Rebuild'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Rebuild a thread<br>\n";
echo "<table><form method=post action='form_post.php'>\n";
echo "<tr valign=top><td>User</td><td>".selectUser('user')."</td></tr>\n";
echo "<tr valign=top><td>Thread</td><td><input type=text name='thread' size=50 maxlength=255></td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit name='rebuild_thread' value='Rebuild'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "Remove a thread<br>\n";
echo "<table><form method=post action='form_post.php'>\n";
echo "<tr valign=top><td>User</td><td>".selectUser('user')."</td></tr>\n";
echo "<tr valign=top><td>Thread</td><td><input type=text name='thread' size=50 maxlength=255></td></tr>\n";
echo "<tr valign=top><td></td><td><input type=submit name='remove_thread' value='Remove'></td></tr>\n";
echo "</form></table>\n";
echo "<br><hr><br>\n";
echo "</body>\n";
echo "</html>\n";
?>

@ -1,29 +0,0 @@
<?php
include_once('utils.php');
//
// INPUT:
//
// $user_login login of the user that consults the forum
// $shard shard from which the user connects in
// $forum forum to view
//
importParam('forum');
importParam('page');
check_character_belongs_to_guild($user_login, $forum);
$forum_dir = build_user_dir($forum, $shard);
$fname = $forum_dir.'forum'.(isset($page) && $page!="" && $page!="0" ? "_$page" : '').'.html';
if (!file_exists($fname))
{
include_once('thread_utils.php');
build_forum_page($forum);
}
$f = fopen($fname, 'r');
echo fread($f, filesize($fname));
fclose($f);
?>

@ -1,123 +0,0 @@
<?php
$race = &$_GET['race'];
$faction = &$_GET['faction'];
$shard = &$_GET['shard'];
$lang = &$_GET['lang'];
$user_login = &$_GET['user_login'];
$guild_name=&$_GET['guild_name'];
$guild_name=str_replace('_',' ', $guild_name);
include 'episode2_hof_outils.php';
$include_files = hof_init(array('episode2_valeurs_craft.hdt','episode2_valeurs_seuils.hdt'), 'episode2_hof_noms_%lang%.php');
foreach ($include_files as $include_file)
{
if (!@include $include_file)
{
//die('include file '.$include_file.' not found');
exit();
}
}
include 'episode2_hof_titles.php';
echo '<html>';
echo '<head><title>'.$titre.'</title></head>';
echo '<body bgcolor="#30353A">';
echo hof_tab_hgroup($tabs, 'chantier');
echo '<br>';
if ($faction=='karavan')
{
$tmp_item1_max = ${"maxSocle".$race};
$tmp_item1_cur = ${"Socle".$race};
$item1_percent = min($tmp_item1_cur, $tmp_item1_max) * 100 / $tmp_item1_max;
$tmp_item2_max = ${"maxColonne".$race};
$tmp_item2_cur = ${"Colonne".$race};
$item2_percent = min($tmp_item2_cur, $tmp_item2_max) * 100 / $tmp_item2_max;
$tmp_item3_max = ${"maxComble".$race};
$tmp_item3_cur = ${"Comble".$race};
$item3_percent = min($tmp_item3_cur, $tmp_item3_max) * 100 / $tmp_item3_max;
$tmp_item4_max = ${"maxMuraille".$race};
$tmp_item4_cur = ${"Muraille".$race};
$item4_percent = min($tmp_item4_cur, $tmp_item4_max) * 100 / $tmp_item4_max;
$tmp_item5_max = ${"maxRevetement".$race};
$tmp_item5_cur = ${"Revetement".$race};
$item5_percent = min($tmp_item5_cur, $tmp_item5_max) * 100 / $tmp_item5_max;
$tmp_item6_max = ${"maxOrnement".$race};
$tmp_item6_cur = ${"Ornement".$race};
$item6_percent = min($tmp_item6_cur, $tmp_item6_max) * 100 / $tmp_item6_max;
$tmp_item7_max = ${"maxStatue".$race};
$tmp_item7_cur = ${"Statue".$race};
$item7_percent = min($tmp_item7_cur, $tmp_item7_max) * 100 / $tmp_item7_max;
$tmp_main_max = ${"maxJustice".$race};
$tmp_main_cur = ${"Justice".$race};
$main_percent = min($tmp_main_cur, $tmp_main_max) * 100 / $tmp_main_max;
}
else
{
$tmp_item1_max = ${"maxRacine".$race};
$tmp_item1_cur = ${"Racine".$race};
$item1_percent = min($tmp_item1_cur, $tmp_item1_max) * 100 / $tmp_item1_max;
$tmp_item2_max = ${"maxTronc".$race};
$tmp_item2_cur = ${"Tronc".$race};
$item2_percent = min($tmp_item2_cur, $tmp_item2_max) * 100 / $tmp_item2_max;
$tmp_item3_max = ${"maxFibre".$race};
$tmp_item3_cur = ${"Fibre".$race};
$item3_percent = min($tmp_item3_cur, $tmp_item3_max) * 100 / $tmp_item3_max;
$tmp_item4_max = ${"maxEcorce".$race};
$tmp_item4_cur = ${"Ecorce".$race};
$item4_percent = min($tmp_item4_cur, $tmp_item4_max) * 100 / $tmp_item4_max;
$tmp_item5_max = ${"maxFeuille".$race};
$tmp_item5_cur = ${"Feuille".$race};
$item5_percent = min($tmp_item5_cur, $tmp_item5_max) * 100 / $tmp_item5_max;
$tmp_item6_max = ${"maxFleur".$race};
$tmp_item6_cur = ${"Fleur".$race};
$item6_percent = min($tmp_item6_cur, $tmp_item6_max) * 100 / $tmp_item6_max;
$tmp_item7_max = ${"maxSymbole".$race};
$tmp_item7_cur = ${"Symbole".$race};
$item7_percent = min($tmp_item7_cur, $tmp_item7_max) * 100 / $tmp_item7_max;
$tmp_main_max = ${"maxNoyau".$race};
$tmp_main_cur = ${"Noyau".$race};
$main_percent = min($tmp_main_cur, $tmp_main_max) * 100 / $tmp_main_max;
}
$total_percent= ($item1_percent+$item2_percent+$item3_percent+$item4_percent+$item5_percent+$item6_percent+$item7_percent+$main_percent)/8;
echo '<table nowrap cellspacing=10 width=100% align="center"><tr><td height=5 bgcolor="#101112"></td></tr><tr><td><table nowrap cellspacing=10 width=100% align="center">';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right"><H2>'.$txt_progress_batiment.'</H2></td><td width=300 align="left">'.hof_progress_bar_huge($total_percent).'</td><td width=25></td></tr></table><table nowrap cellspacing=10 width=100% align="center">';
if ($noActe == 1)
{
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece1.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item1_percent,1).'</td><td width=25></td></tr>';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece2.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item2_percent,1).'</td><td width=25></td></tr>';
}
else
{
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece1.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item1_percent,0).'</td><td width=25></td></tr>';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece2.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item2_percent,0).'</td><td width=25></td></tr>';
if($noActe == 2)
{
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece3.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item3_percent,1).'</td><td width=25></td></tr>';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece4.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item4_percent,1).'</td><td width=25></td></tr>';
}
else
{
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece3.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item3_percent,0).'</td><td width=25></td></tr>';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece4.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item4_percent,0).'</td><td width=25></td></tr>';
if($noActe == 3)
{
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece5.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item5_percent,1).'</td><td width=25></td></tr>';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece6.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item6_percent,1).'</td><td width=25></td></tr>';
echo '<tr><td width=25></td><td width=300 valign="middle" align="right">'.$txt_piece7.'&nbsp;</td><td width=300 align="left">'.hof_progress_bar($item7_percent,1).'</td><td width=25></td></tr>';
}
}
}
echo '<tr><td width=25></td><td width=300 valign="middle" align="right"><b>'.$txt_piece8.'</b>&nbsp;</td><td width=300 align="left">'.hof_progress_bar($main_percent,1).'</td><td width=25></td></tr></table>';
echo '<tr><td height=5 bgcolor="#101112"></td></tr></table>';
echo '</body>';
echo '</html>';
?>

@ -1,189 +0,0 @@
<?php
$race = &$_GET['race'];
$faction = &$_GET['faction'];
$shard = &$_GET['shard'];
$lang = &$_GET['lang'];
$user_login = &$_GET['user_login'];
$guild_name = $_GET['guild_name'];
$guild_name = str_replace('_', ' ', $guild_name);
$type = &$_GET['type'];
$tableau = &$_GET['tableau'];
// Number of entries in the top
$top_len = 10;
// Profile the include time
$WANT_PROFILE = 0;
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
if ($WANT_PROFILE)
{
$time_start = microtime_float();
}
// Includes
include 'episode2_hof_outils.php';
$hdt_files = array(
'episode2_top10_faction_'.$type.'.hdt',
'episode2_top10_faction_guild_'.$type.'.hdt',
'episode2_top10_guild_'.$type.'.hdt',
'episode2_top10_faction_guild_'.$type.'_'.$race.'.hdt',
'episode2_top10_faction_acte_guild_'.$type.'_'.$race.'.hdt',
'episode2_top10_'.$type.'.hdt',
'episode2_top10_faction_'.$type.'_'.$race.'.hdt',
'episode2_top10_faction_acte_'.$type.'_'.$race.'.hdt',
'episode2_valeurs_seuils.hdt'
);
$include_files = hof_init($hdt_files, 'episode2_hof_noms_%lang%.php');
foreach ($include_files as $include_file)
{
if (!@include $include_file)
{
die('include file '.$include_file.' not found');
}
}
include 'episode2_hof_titles.php';
include 'episode2_hof_tableaux.php';
if ($WANT_PROFILE)
{
$time = microtime_float()- $time_start;
echo '<br>PROFILE: include time = '.$time.'<br>';
}
if ($type == 'fight')
$type_uppercase = 'Kill';
else
$type_uppercase = ucfirst($type);
echo '<html>';
echo '<head><title>'.$titre.'</title></head>';
echo '<body bgcolor="#30353A">';
echo '<table width=825><tr><td>';
echo hof_tab_hgroup($tabs,$type);
echo '</td></tr><tr><td height=5 bgcolor="#101112"></td></tr><tr><td height=20></td></tr><tr><td align="center"><H1>'.${'classement_'.$type}.'</H1></td></tr><tr><td>';
echo hof_tab_hgroup_tableaux($tabs_tableaux,$tableau);
echo '</td></tr><tr><td height=5 bgcolor="#101112"></td></tr><tr><td height=20></td></tr><tr><td valign="middle" align="center"><table border=0 align="center"><tr><td align=center valign="top"><h2>'.$classement_player.'</h2></td></tr><tr><td height=30></td></tr><tr><td align=center valign="top"><h2>'.$main_title.'</h2></td></tr><tr><td valign="middle" align="center"><h3>'.$titre_tableau_player.'</h3></td></tr></table></td></tr><tr><td height=10></td></tr><tr><td align="center">'.$comment_tableau_player.'</td></tr><tr><td height=10></td></tr>';
echo '<tr><td height=3></td></tr><tr><td align="center">';
echo '<tr><td>';
// Top players
////
if ($tableau == 'total')
{
$j = 0;
$k = 0;
$nb_rows_kami = count(${'score_Top10_Best_'.$type_uppercase.'_kami'});
$nb_rows_karavan = count(${'score_Top10_Best_'.$type_uppercase.'_karavan'});
$nb_rows = $nb_rows_kami + $nb_rows_karavan;
$names = array();
$scores = array();
$factions = array();
for ($i = 0; $i < $nb_rows; $i++)
{
if ($j < $nb_rows_kami && ($k >= $nb_rows_karavan || ${'score_Top10_Best_'.$type_uppercase.'_kami'}[$j] >= ${'score_Top10_Best_'.$type_uppercase.'_karavan'}[$k]))
{
$names[$i] = ${'nom_Top10_Best_'.$type_uppercase.'_kami'}[$j];
$scores[$i] = ${'score_Top10_Best_'.$type_uppercase.'_kami'}[$j];
$factions[$i] = 'Kami';
$j++;
}
else if ($k < $nb_rows_karavan && ($j >= $nb_rows_kami || ${'score_Top10_Best_'.$type_uppercase.'_karavan'}[$k] > ${'score_Top10_Best_'.$type_uppercase.'_kami'}[$j]))
{
$names[$i] = ${'nom_Top10_Best_'.$type_uppercase.'_karavan'}[$k];
$scores[$i] = ${'score_Top10_Best_'.$type_uppercase.'_karavan'}[$k];
$factions[$i] = 'Karavan';
$k++;
}
}
echo hof_score_table($names, $factions, $scores, $top_len, $user_login);
}
else if ($tableau == 'faction')
{
$varname_suffix = '_Top10_Best_faction_'.$type_uppercase.'_'.$faction;
echo hof_score_table_same_faction(${'nom'.$varname_suffix}, $faction, ${'score'.$varname_suffix}, $top_len, $user_login);
}
else if ($tableau == 'chantier')
{
$varname_suffix = '_Top10_Best_'.$type_uppercase.'_'.$race.'_'.$faction;
echo hof_score_table_same_faction(${'nom'.$varname_suffix}, $faction, ${'score'.$varname_suffix}, $top_len, $user_login);
}
else if ($tableau == 'acte')
{
$varname_suffix = '_Top10_Best_'.$type_uppercase.'_'.$race.'_'.$faction.'_Acte'.$noActe;
echo hof_score_table_same_faction(${'nom'.$varname_suffix}, $faction, ${'score'.$varname_suffix}, $top_len, $user_login);
}
echo '</td></tr><tr><td height=20></td></tr><tr><td height=5 bgcolor="#101112"></td></tr><tr><td height=20></td></tr><tr><td valign="middle" align="center"><table border=0 align="center"><tr><td align=center valign="top"><h2>'.$classement_guild.'</h2></td></tr><tr><td height=30></td></tr><tr><tr><td align=center valign="top"><h2>'.$main_title.'</h2></td></tr><tr><td valign="middle" align="center"><h3>'.$titre_tableau_guild.'</h3></td></tr></table></td></tr><tr><td height=10></td></tr><tr><td align="center">'.$comment_tableau_guild.'</td></tr><tr><td height=10></td></tr>';
echo '<tr><td>';
// Top guilds
////
if ($tableau == 'total')
{
$j = 0;
$k = 0;
$nb_rows_kami = count(${'score_Top10_Best_Guild_'.$type_uppercase.'_kami'});
$nb_rows_karavan = count(${'score_Top10_Best_Guild_'.$type_uppercase.'_karavan'});
$nb_rows = $nb_rows_kami + $nb_rows_karavan;
$names = array();
$scores = array();
$factions = array();
for ($i = 0; $i < $nb_rows; $i++)
{
if ($j < $nb_rows_kami && ($k >= $nb_rows_karavan || ${'score_Top10_Best_Guild_'.$type_uppercase.'_kami'}[$j] >= ${'score_Top10_Best_Guild_'.$type_uppercase.'_karavan'}[$k]))
{
$names[$i] = ${'nom_Top10_Best_Guild_'.$type_uppercase.'_kami'}[$j];
$scores[$i] = ${'score_Top10_Best_Guild_'.$type_uppercase.'_kami'}[$j];
$factions[$i] = 'Kami';
$j++;
}
else if ($k < $nb_rows_karavan && ($j >= $nb_rows_kami || ${'score_Top10_Best_Guild_'.$type_uppercase.'_karavan'}[$k] > ${'score_Top10_Best_Guild_'.$type_uppercase.'_kami'}[$j]))
{
$names[$i] = ${'nom_Top10_Best_Guild_'.$type_uppercase.'_karavan'}[$k];
$scores[$i] = ${'score_Top10_Best_Guild_'.$type_uppercase.'_karavan'}[$k];
$factions[$i] = 'Karavan';
$k++;
}
}
echo hof_score_table($names, $factions, $scores, $top_len, $guild_name);
}
else if ($tableau == 'faction')
{
$varname_suffix = '_Top10_Best_Guild_faction_'.$type_uppercase.'_'.$faction;
echo hof_score_table_same_faction(${'nom'.$varname_suffix}, $faction, ${'score'.$varname_suffix}, $top_len, $guild_name);
}
else if ($tableau == 'chantier')
{
$varname_suffix = '_Top10_Best_Guild_'.$type_uppercase.'_'.$race.'_'.$faction;
echo hof_score_table_same_faction(${'nom'.$varname_suffix}, $faction, ${'score'.$varname_suffix}, $top_len, $guild_name);
}
else if ($tableau == 'acte')
{
$varname_suffix = '_Top10_Best_Guild_'.$type_uppercase.'_'.$race.'_'.$faction.'_Acte'.$noActe;
echo hof_score_table_same_faction(${'nom'.$varname_suffix}, $faction, ${'score'.$varname_suffix}, $top_len, $guild_name);
}
echo '</td></tr><tr><td height=20></td></tr></table>';
if ($WANT_PROFILE)
{
$time = microtime_float()- $time_start;
echo '<br>PROFILE: total time = '.$time.'<br>';
}
echo '</body>';
echo '</html>';
?>

@ -1,237 +0,0 @@
<?php
$txt_progress_batiment = 'Fortgang der Baustelle : ';
$titre='Ruhmessäule - Episode II : Der Wohnsitz der Götter';
$position_name='IHR EINORDNEN';
$position_guild_name='IHR GUILDSEINORDNEN';
$rang_name='IHRE STELLE';
$points_name='IHRE PUNKTE';
$rang_guild_name='DIE STELLE';
$points_guild_name='DIE PUNKTE';
$txt_tab_chantier = 'BAUSTELLE';
$txt_tab_craft = 'HANDWERK';
$txt_tab_harvest = 'ROHSTOFFABBAU';
$txt_tab_fight = 'KAMPF';
$classement_craft = 'RANGLISTE HANDWERK';
$classement_harvest = 'RANGLISTE ROHSTOFFABBAU';
$classement_fight = 'RANGLISTE KAMPF';
$txt_tab_total = 'GESAMT';
$txt_tab_faction = 'FRAKTION';
$txt_tab_chantier = 'BAUSTELLE';
$txt_tab_acte = 'ETAPPE';
$txt_tab_name_craft = 'HANDWERKER';
$txt_tab_name_harvest = 'ERNTER';
$txt_tab_name_fight = 'KAMPFER';
$faction = &$_GET['faction'];
$race = &$_GET['race'];
$tableau = &$_GET['tableau'];
$type=&$_GET['type'];
if($type=='craft')
$classement_player='RANGLISTE DER HANDWERKER';
if($type=='harvest')
$classement_player='RANGLISTE ROHSTOFFABBAU';
if($type=='fight')
$classement_player='RANGLISTE DER KÄMPFER';
$classement_guild='RANGLISTE DER GILDEN';
if ($faction == 'karavan')
{
$txt_progress_batiment = 'Bau des Tempels : ';
$txt_piece1 = 'Sockel :';
$txt_piece2 = 'Säule :';
$txt_piece3 = 'Gipfel :';
$txt_piece4 = 'Mauern :';
$txt_piece5 = 'Deckblatt :';
$txt_piece6 = 'Ornament :';
$txt_piece7 = 'Statue :';
$txt_piece8 = 'Rechtssäule :';
switch ($race){
case "fyros" :
$place = 'Karavaneer Temples von Pyr';
break;
case "matis" :
$place = 'Karavaneer Temples von Yrkanis';
break;
case "zorai" :
$place = 'Karavaneer Temples von Zora';
break;
case "tryker" :
$place = 'Karavaneer Temples von Fairhaven';
break;
}
}
else if ($faction == 'kami')
{
$txt_progress_batiment = 'Bau des Heiligtumes : ';
$txt_piece1 = 'Wurzel :';
$txt_piece2 = 'Rumpf :';
$txt_piece3 = 'Fasern :';
$txt_piece4 = 'Rinde :';
$txt_piece5 = 'Blatt :';
$txt_piece6 = 'Blume :';
$txt_piece7 = 'Symbol :';
$txt_piece8 = 'Herz :';
switch ($race){
case "fyros" :
$place = 'Kamist Heiligtum von Pyr';
break;
case "matis" :
$place = 'Kamist Heiligtum von Yrkanis';
break;
case "zorai" :
$place = 'Kamist Heiligtum von Zora';
break;
case "tryker" :
$place = 'Kamist Heiligtum von Fairhaven';
break;
}
}
//Creation des titres
switch ($race){
case "fyros" :
$city_title='VON PYR';
$city_de='von Pyr';
$city_a='in Pyr';
break;
case "matis" :
$city_title='VON YRKANIS';
$city_de='von Yrkanis';
$city_a='in Yrkanis';
break;
case "zorai" :
$city_title='VON ZORA';
$city_de='von Zora';
$city_a='in Zora';
break;
case "tryker" :
$city_title='VON FAIRHAVEN';
$city_de='von Fairhaven';
$city_a='in Fairhaven';
break;
}
switch ($type){
case "craft" :
$type_de='Handwerks';
$type_de_low='handwerks';
$type_norm='Handwerker';
$type_norm_low='handwerker';
break;
case "harvest" :
$type_de='Rohstoffabbau';
$type_de_low='rohstoffabbau';
$type_norm='Rohstoffabbauer';
$type_norm_low='rohstoffabbauer';
break;
case "fight" :
$type_de='Kämpfer';
$type_de_low='kämpfer';
$type_norm='Kämpfer';
$type_norm_low='kämpfer';
break;
}
if ($tableau=='total')
{
$main_title='DER WOHNSITZ DER GÖTTER';
$titre_tableau_player='Die großen '.$type_norm;
$comment_tableau_player='Rangliste der zehn besten '.$type_norm.' von Atys, welche am Bau der Momumente der Götter beteiligt waren.';
$titre_tableau_guild='Die großen '.$type_de.'gilden';
$comment_tableau_guild='Rangliste der zehn besten '.$type_de.'gilden von Atys, welche am Bau der Monumente der Götter beteiligt waren.';
}
if ($tableau=='faction')
{
if($faction=='kami')
{
$main_title='DER WOHNSITZ DER GÖTTER';
$titre_tableau_player='Die großen '.$type_norm.' von Ma-Duk';
$comment_tableau_player='Rangliste der zehn besten '.$type_norm_low.' der Kami, welche am Bau des Heiligtumes von Ma-Duk beteiligt waren.';
$titre_tableau_guild='Die großen '.$type_de.'gilden von Ma-Duk';
$comment_tableau_guild='Rangliste der zehn besten '.$type_de_low.'gilden der Kami, welche am Bau des Heiligtumes von Ma-Duk beteiligt waren.';
}
if($faction=='karavan')
{
$main_title='DER WOHNSITZ DER GÖTTER';
$titre_tableau_player='Die großen '.$type_norm.' von Jena';
$comment_tableau_player='Rangliste der zehn besten '.$type_norm_low.' der Karavan, welche am Bau des Tempels von Jena beteiligt waren.';
$titre_tableau_guild='Die großen '.$type_de.'gilden von Jena';
$comment_tableau_guild='Rangliste der zehn besten '.$type_de_low.'gilden der Karavan, welche am Bau des Tempels von Jena beteiligt waren.';
}
}
if($tableau=='chantier')
{
if($faction=='kami')
{
$main_title='DAS KAMIST HEILIGTUM '.$city_title;
$titre_tableau_player='Die großen '.$type_norm_low.' der Kami '.$city_de;
$comment_tableau_player='Rangliste der zehn besten '.$type_norm_low.' der Kami, welche am Bau des Heiligtumes von Ma-Duk '.$city_a.' beteiligt waren.';
$titre_tableau_guild='Die großen '.$type_de_low.'gilden der Kami '.$city_de;
$comment_tableau_guild='Rangliste der zehn besten '.$type_de_low.'gilden der Kami, welche am Bau des Heiligtumes von Ma-Duk '.$city_a.' beteiligt waren.';
}
if($faction=='karavan')
{
$main_title='DER KARAVANEER TEMPEL '.$city_title;
$titre_tableau_player='Die großen '.$type_norm_low.' der Karavan '.$city_de;
$comment_tableau_player='Rangliste der zehn besten '.$type_norm_low.' der Karavan, welche am Bau des Tempels von Jena '.$city_a.' beteiligt waren.';
$titre_tableau_guild='Die großen '.$type_de_low.'gilden der Karavan '.$city_de;
$comment_tableau_guild='Rangliste der zehn besten '.$type_de_low.'gilden der Karavan, welche am Bau des Tempels von Jena '.$city_a.' beteiligt waren.';
}
}
if($tableau=='acte')
{
if($noActe==1)
{
$ilot_title='DIE DÜNEN VON ELIUS';
$ilot='Die Dünen von Aelius';
$acte='I';
}
if($noActe==2)
{
$ilot_title='DER SEE VON OLKERN';
$ilot='der See von Olkern';
$acte='II';
}
if($noActe==3)
{
$ilot_title='DAS WALD VON ALMATI';
$ilot='das Wald von Almati';
$acte='III';
}
if($faction=='kami')
{
$main_title=$ilot_title;
$titre_tableau_player='Die großen '.$type_norm_low.' der Kami '.$city_de.', die in '.$ilot.' gearbeitet haben';
$comment_tableau_player='Rangliste der zehn besten '.$type_norm_low.' der Kami, welche bei Etappe '.$acte." für den Bau von Ma-Duk's Heiligtum ".$city_a.' gearbeitet haben.';
$titre_tableau_guild='Die großen '.$type_de_low.'gilden der Kami '.$city_a.', die in '.$ilot.' gearbeitet haben';
$comment_tableau_guild='Rangliste der zehn besten '.$type_de_low.'gilden der Kami, welche bei Etappe '.$acte." für den Bau von Ma-Duk's Heiligtum ".$city_a.' gearbeitet haben.';
}
if($faction=='karavan')
{
$main_title=$ilot_title;
$titre_tableau_player='Die großen '.$type_norm_low.' der Karavan '.$city_de.', die in '.$ilot.' gearbeitet haben';
$comment_tableau_player='Rangliste der zehn besten '.$type_norm_low.' der Karavan, welche bei Etappe '.$acte.' für den Bau des Tempels von Jena '.$city_a.' gearbeitet haben.';
$titre_tableau_guild='Die großen '.$type_de_low.'gilden der Karavan '.$city_a.', die in '.$ilot.' gearbeitet haben';
$comment_tableau_guild='Rangliste der zehn besten '.$type_de_low.'gilden der Karavan, welche bei Etappe '.$acte.' für den Bau des Tempels von Jena '.$city_a.' gearbeitet haben.';
}
}
?>

@ -1,234 +0,0 @@
<?php
$txt_progress_batiment = 'Progress of the construction site : ';
$titre='Stele of Valor - Episode II : The Houses of the Gods';
$position_name='YOUR POSITION';
$position_guild_name='THE POSITION OF YOUR GUILD';
$rang_name='YOUR RANK';
$points_name='YOUR POINTS';
$rang_guild_name='THE RANK';
$points_guild_name='THE POINTS';
$txt_tab_chantier = 'SITE';
$txt_tab_craft = 'CRAFT';
$txt_tab_harvest = 'HARVEST';
$txt_tab_fight = 'FIGHT';
$classement_craft = 'CRAFT RANKING';
$classement_harvest = 'HARVEST RANKING';
$classement_fight = 'FIGHT RANKING';
$txt_tab_total = 'TOTAL';
$txt_tab_faction = 'FACTION';
$txt_tab_chantier = 'SITE';
$txt_tab_acte = 'ACTE';
$txt_tab_name_craft = 'CRAFTER';
$txt_tab_name_harvest = 'HARVESTER';
$txt_tab_name_fight = 'FIGHTER';
$faction = &$_GET['faction'];
$race = &$_GET['race'];
$tableau = &$_GET['tableau'];
$type=&$_GET['type'];
if($type=='craft')
$classement_player='RANKING OF THE CRAFTERS';
if($type=='harvest')
$classement_player='RANKING OF THE HARVESTERS';
if($type=='fight')
$classement_player='RANKING OF THE FIGHTERS';
$classement_guild='RANKING OF THE GUILDS';
if ($faction == 'karavan')
{
$txt_progress_batiment = 'Construction of the temple : ';
$txt_piece1 = 'Pedastal :';
$txt_piece2 = 'Column :';
$txt_piece3 = 'Attic :';
$txt_piece4 = 'Wall :';
$txt_piece5 = 'Cover :';
$txt_piece6 = 'Ornament :';
$txt_piece7 = 'Statue :';
$txt_piece8 = 'Column of Justice :';
switch ($race){
case "fyros" :
$place = 'Karavaneer Temple of Pyr';
break;
case "matis" :
$place = 'Karavaneer Temple of Yrkanis';
break;
case "zorai" :
$place = 'Karavaneer Temple of Zora';
break;
case "tryker" :
$place = 'Karavaneer Temple of Fairhaven';
break;
}
}
else if ($faction == 'kami')
{
$txt_progress_batiment = 'Construction of the Sanctuary : ';
$txt_piece1 = 'Root :';
$txt_piece2 = 'Trunk :';
$txt_piece3 = 'Fiber :';
$txt_piece4 = 'Bark :';
$txt_piece5 = 'Leaf :';
$txt_piece6 = 'Flower :';
$txt_piece7 = 'Symbol :';
$txt_piece8 = 'Core :';
switch ($race){
case "fyros" :
$place = 'Kamist Sanctuary of Pyr';
break;
case "matis" :
$place = 'Kamist Sanctuary of Yrkanis';
break;
case "zorai" :
$place = 'Kamist Sanctuary of Zora';
break;
case "tryker" :
$place = 'Kamist Sanctuary of Fairhaven';
break;
}
}
//Creation des titres
switch ($race){
case "fyros" :
$city_title='OF PYR';
$city_de='of Pyr';
$city_a='in Pyr';
break;
case "matis" :
$city_title='OF YRKANIS';
$city_de='of Yrkanis';
$city_a='in Yrkanis.';
break;
case "zorai" :
$city_title='OF ZORA';
$city_de='of Zora';
$city_a='in Zora.';
break;
case "tryker" :
$city_title='OF FAIRHAVEN';
$city_de='of Fairhaven';
$city_a='in Fairhaven.';
break;
}
switch ($type){
case "craft" :
$type_de='crafter';
$type_norm='crafters';
break;
case "harvest" :
$type_de='harvester';
$type_norm='harvesters';
break;
case "fight" :
$type_de='fighter';
$type_norm='fighters';
break;
}
if ($tableau=='total')
{
$main_title='THE HOUSES OF THE GODS';
$titre_tableau_player='The great '.$type_norm;
$comment_tableau_player='Ranking of the ten best '.$type_norm.' of Atys who participated in the construction of the gods\' monuments.';
$titre_tableau_guild='The great guilds of '.$type_norm;
$comment_tableau_guild='Ranking of the ten best '.$type_norm.' guilds of Atys who participated in the construction of the gods\' monuments.';
}
if ($tableau=='faction')
{
if($faction=='kami')
{
$main_title='THE HOUSES OF THE GODS';
$titre_tableau_player='The great '.$type_norm.' of Ma-Duk';
$comment_tableau_player='Ranking of the ten best kamist '.$type_norm.' who participated in the construction of the sanctuaries of Ma-Duk.';
$titre_tableau_guild='The great '.$type_norm.' guilds of Ma-Duk';
$comment_tableau_guild='Ranking of the ten best kamist '.$type_norm.' guilds who participated in the construction of the sanctuaries of Ma-Duk.';
}
if($faction=='karavan')
{
$main_title='THE HOUSES OF THE GODS';
$titre_tableau_player='The great '.$type_norm.' of Jena';
$comment_tableau_player='Ranking of the ten best karavaneer '.$type_norm.' who participated in the construction of the temples of Jena.';
$titre_tableau_guild='The great '.$type_norm.' guilds of Jena';
$comment_tableau_guild='Ranking of the ten best karavaneer '.$type_norm.' guilds who participated in the construction of the temples of Jena.';
}
}
if($tableau=='chantier')
{
if($faction=='kami')
{
$main_title='THE KAMIST SANCTUARY '.$city_title;
$titre_tableau_player='The great kamist '.$type_norm.' '.$city_de;
$comment_tableau_player='Ranking of the ten best kamist '.$type_norm.' who participated in the construction of the sanctuary of Ma-Duk '.$city_a.'.';
$titre_tableau_guild='The great kamist '.$type_norm.' guilds '.$city_de;
$comment_tableau_guild='Ranking of the ten best kamist '.$type_de.' guilds who participated in the construction of the sanctuary of Ma-Duk '.$city_a.'.';
}
if($faction=='karavan')
{
$main_title='THE KARAVANEER TEMPLE '.$city_title;
$titre_tableau_player='The great karavaneer '.$type_norm.' '.$city_de;
$comment_tableau_player='Ranking of the ten best karavaneer '.$type_norm.' who participated in the construction of the temple of Jena '.$city_a.'.';
$titre_tableau_guild='The great karavaneer '.$type_norm.' guilds '.$city_de;
$comment_tableau_guild='Ranking of the ten best karavanner '.$type_de.' guilds who participated in the construction of the temple of Jena '.$city_a.'.';
}
}
if($tableau=='acte')
{
if($noActe==1)
{
$ilot_title='THE DUNES OF AELIUS';
$ilot='the dunes of Aelius';
$acte='Ist';
}
if($noActe==2)
{
$ilot_title='THE LAKE OF OLKERN';
$ilot='the lake of Olkern';
$acte='IInd';
}
if($noActe==3)
{
$ilot_title='THE WOODS OF ALMATI';
$ilot='the woods of Almati';
$acte='IIIrd';
}
if($faction=='kami')
{
$main_title=$ilot_title;
$titre_tableau_player='The great Kamist '.$type_norm.' '.$city_de.' who worked in '.$ilot;
$comment_tableau_player='Ranking of the ten best kamist '.$type_norm.' who participated in the construction of the sanctuary of Ma-Duk '.$city_a.' during the '.$acte.' act.';
$titre_tableau_guild='The great kamist '.$type_de.' guilds '.$city_a.' who worked in '.$ilot;
$comment_tableau_guild='Ranking of the ten best kamist '.$type_de.' guilds who participated in the construction of the sanctuary of Ma-Duk '.$city_a.' during the '.$acte.' act.';
}
if($faction=='karavan')
{
$main_title=$ilot_title;
$titre_tableau_player='The great karavanner '.$type_norm.' '.$city_de.' who worked in '.$ilot;
$comment_tableau_player='Ranking of the ten best karavaneer '.$type_norm.' who participated in the construction of the temple of Jena '.$city_a.' during the '.$acte.' act.';
$titre_tableau_guild='The great karavaneer '.$type_de.' guilds '.$city_a.' who worked in '.$ilot;
$comment_tableau_guild='Ranking of the ten best karavaneer '.$type_de.' guilds who participated in the construction of the temple of Jena '.$city_a.' during the '.$acte.' act.';
}
}
?>

@ -1,234 +0,0 @@
<?php
$txt_progress_batiment = 'Avancement du chantier : ';
$titre='Stèle de valeur - Episode II : Les demeures des dieux';
$position_name='VOTRE CLASSEMENT';
$position_guild_name='LE CLASSEMENT DE VOTRE GUILDE';
$rang_name='VOTRE RANG';
$points_name='VOS POINTS';
$rang_guild_name='LE RANG';
$points_guild_name='LES POINTS';
$txt_tab_chantier = 'CHANTIER';
$txt_tab_craft = 'ARTISANAT';
$txt_tab_harvest = 'RECOLTE';
$txt_tab_fight = 'COMBAT';
$classement_craft = 'CLASSEMENT ARTISANAT';
$classement_harvest = 'CLASSEMENT RECOLTE';
$classement_fight = 'CLASSEMENT COMBAT';
$txt_tab_total = 'TOTAL';
$txt_tab_faction = 'FACTION';
$txt_tab_chantier = 'CHANTIER';
$txt_tab_acte = 'ACTE';
$txt_tab_name_craft = 'ARTISAN';
$txt_tab_name_harvest = 'RECOLTEUR';
$txt_tab_name_fight = 'COMBATTANT';
$faction = &$_GET['faction'];
$race = &$_GET['race'];
$tableau = &$_GET['tableau'];
$type=&$_GET['type'];
if($type=='craft')
$classement_player='CLASSEMENT DES ARTISANTS';
if($type=='harvest')
$classement_player='CLASSEMENT DES RECOLTEURS';
if($type=='fight')
$classement_player='CLASSEMENT DES COMBATTANTS';
$classement_guild='CLASSEMENT DES GUILDES';
if ($faction == 'karavan')
{
$txt_progress_batiment = 'Construction du temple : ';
$txt_piece1 = 'Socle :';
$txt_piece2 = 'Colonne :';
$txt_piece3 = 'Combles :';
$txt_piece4 = 'Murailles :';
$txt_piece5 = 'Revêtement :';
$txt_piece6 = 'Ornement :';
$txt_piece7 = 'Statue :';
$txt_piece8 = 'Colonne de Justice :';
switch ($race){
case "fyros" :
$place = 'Temple Karavanier de Pyr';
break;
case "matis" :
$place = 'Temple Karavanier d\'Yrkanis';
break;
case "zorai" :
$place = 'Temple Karavanier de Zora';
break;
case "tryker" :
$place = 'Temple Karavanier de Fairhaven';
break;
}
}
else if ($faction == 'kami')
{
$txt_progress_batiment = 'Construction du Sanctuaire : ';
$txt_piece1 = 'Racine :';
$txt_piece2 = 'Tronc :';
$txt_piece3 = 'Fibres :';
$txt_piece4 = 'Ecorce :';
$txt_piece5 = 'Feuille :';
$txt_piece6 = 'Fleur :';
$txt_piece7 = 'Symbole :';
$txt_piece8 = 'Noyau :';
switch ($race){
case "fyros" :
$place = 'Sanctuaire Kamiste de Pyr';
break;
case "matis" :
$place = 'Sanctuaire Kamiste d\'Yrkanis';
break;
case "zorai" :
$place = 'Sanctuaire Kamiste de Zora';
break;
case "tryker" :
$place = 'Sanctuaire Kamiste de Fairhaven';
break;
}
}
//Creation des titres
switch ($race){
case "fyros" :
$city_title='DE PYR';
$city_de='de Pyr';
$city_a='à Pyr';
break;
case "matis" :
$city_title='D\'YRKANIS';
$city_de='d\'Yrkanis';
$city_a='à Yrkanis.';
break;
case "zorai" :
$city_title='DE ZORA';
$city_de='de Zora';
$city_a='à Zora.';
break;
case "tryker" :
$city_title='DE FAIRHAVEN';
$city_de='de Fairhaven';
$city_a='à Fairhaven.';
break;
}
switch ($type){
case "craft" :
$type_de='d\'artisans';
$type_norm='artisans';
break;
case "harvest" :
$type_de='de recolteurs';
$type_norm='recolteurs';
break;
case "fight" :
$type_de='de combattants';
$type_norm='combattants';
break;
}
if ($tableau=='total')
{
$main_title='LES DEMEURES DES DIEUX';
$titre_tableau_player='Les grands '.$type_norm;
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' d\'Atys ayant participé à la construction des monuments des dieux.';
$titre_tableau_guild='Les grandes guilde '.$type_de;
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' d\'Atys ayant participé à la construction des monuments des dieux.';
}
if ($tableau=='faction')
{
if($faction=='kami')
{
$main_title='LES DEMEURES DES DIEUX';
$titre_tableau_player='Les grands '.$type_norm.' de Ma-Duk';
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' kamistes ayant participé à la construction des sanctuaires de Ma-Duk.';
$titre_tableau_guild='Les grandes guildes '.$type_de.' de Ma-Duk';
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' kamistes ayant participé à la construction des sanctuaires de Ma-Duk.';
}
if($faction=='karavan')
{
$main_title='LES DEMEURES DES DIEUX';
$titre_tableau_player='Les grands '.$type_norm.' de Jena';
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' karavaniers ayant participé à la construction des temples de Jena.';
$titre_tableau_guild='Les grandes guildes '.$type_de.' de Jena';
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' karavaniers ayant participé à la construction des temples de Jena.';
}
}
if($tableau=='chantier')
{
if($faction=='kami')
{
$main_title='LE SANCTUAIRE KAMISTE '.$city_title;
$titre_tableau_player='Les grands '.$type_norm.' kamistes '.$city_de;
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' kamistes ayant participé à la construction du sanctuaire de Ma-Duk '.$city_a.'.';
$titre_tableau_guild='Les grandes guildes '.$type_de.' kamistes '.$city_de;
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' kamistes ayant participé à la construction du sanctuaire de Ma-Duk '.$city_a.'.';
}
if($faction=='karavan')
{
$main_title='LE TEMPLE KARAVANIER '.$city_title;
$titre_tableau_player='Les grands '.$type_norm.' karavaniers '.$city_de;
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' karavaniers ayant participé à la construction du temple de Jena '.$city_a.'.';
$titre_tableau_guild='Les grandes guildes '.$type_de.' karavaniers '.$city_de;
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' karavaniers ayant participé à la construction du temple de Jena '.$city_a.'.';
}
}
if($tableau=='acte')
{
if($noActe==1)
{
$ilot_title='LES DUNES D\'AELIUS';
$ilot='les dunes d\'Aelius';
$acte='I';
}
if($noActe==2)
{
$ilot_title='LE LAC D\'OLKERN';
$ilot='le lac d\'Olkern';
$acte='II';
}
if($noActe==3)
{
$ilot_title='LE BOIS D\'ALMATI';
$ilot='le bois d\'Almati';
$acte='III';
}
if($faction=='kami')
{
$main_title=$ilot_title;
$titre_tableau_player='Les grands '.$type_norm.' kamistes '.$city_de.' ayant travaillé dans '.$ilot;
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' kamistes ayant participé à la construction du sanctuaire de Ma-Duk '.$city_a.' pendant l\'Acte '.$acte.'.';
$titre_tableau_guild='Les grandes guildes '.$type_de.' kamistes '.$city_a.' ayant travaillé dans '.$ilot;
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' kamistes ayant participé à la construction du sanctuaire de Ma-Duk '.$city_a.' pendant l\'Acte '.$acte.'.';
}
if($faction=='karavan')
{
$main_title=$ilot_title;
$titre_tableau_player='Les grands '.$type_norm.' karavaniers '.$city_de.' ayant travaillé dans '.$ilot;
$comment_tableau_player='Classement des dix meilleurs '.$type_norm.' karavaniers ayant participé à la construction du sanctuaire de Ma-Duk '.$city_a.' pendant l\'Acte '.$acte.'.';
$titre_tableau_guild='Les grandes guildes '.$type_de.' karavaniers '.$city_a.' ayant travaillé dans '.$ilot;
$comment_tableau_guild='Classement des dix meilleures guildes '.$type_de.' karavaniers ayant participé à la construction du temple de Jena '.$city_a.' pendant l\'Acte '.$acte.'.';
}
}
?>

@ -1,345 +0,0 @@
<?php
include_once('../config.php');
function hof_init($hdt_files, $txt_files)
{
$include_files = array();
if (!is_array($hdt_files))
$hdt_files = array($hdt_files);
if (!is_array($txt_files))
{
if($txt_files!='')
$txt_files = array($txt_files);
}
if (!isset($_GET['shard']))
die('shard is missing');
$shard = &$_GET['shard'];
if (!is_numeric($shard))
die('shard is invalid');
foreach ($hdt_files as $hdt_file)
{
global $USERS_DIR;
$include_files[] = $USERS_DIR.'/'.strtolower($shard).'/'.str_replace('.hdt', '.php', $hdt_file);
}
if (isset($_GET['lang']))
{
$lang = &$_GET['lang'];
if ($lang != 'fr' && $lang != 'en' && $lang != 'de')
die('invalid lang');
}
else
$lang = 'en';
if (is_array($txt_files))
{
foreach ($txt_files as $txt_file)
{
$include_files[] = str_replace('%lang%', $lang, $txt_file);
}
}
return $include_files;
}
function hof_score_table($names, $factions, $scores, $max_rows, $highlight_name)
{
if ($_GET['faction'] == 'kami')
{
$color_tab = '#1A807F';
$color_tab_bis = '#3E9D9C';
$color_tab_titles = '#242E2E';
$color_highlight = '#922121';
}
else if ($_GET['faction'] == 'karavan')
{
$color_tab = '#922121';
$color_tab_bis = '#A04747';
$color_tab_titles = '#322727';
$color_highlight = '#1A807F';
}
if ($_GET['lang'] == 'fr')
{
$txt_position = 'POSITION';
$txt_name = 'NOM';
$txt_faction = 'FACTION';
$txt_score = 'SCORE';
}
else if ($_GET['lang'] == 'en')
{
$txt_position = 'POSITION';
$txt_name = 'NAME';
$txt_faction = 'FACTION';
$txt_score = 'SCORE';
}
else if ($_GET['lang'] == 'de')
{
$txt_position = 'PLATZ';
$txt_name = 'NAME';
$txt_faction = 'FRAKTION';
$txt_score = 'PUNKTE';
}
$nb_rows = count($names);
if ($nb_rows == 0)
return '';
if (count($factions) != $nb_rows || count($scores) != $nb_rows)
die('wrong params: different nb of rows');
if ($max_rows > $nb_rows)
$max_rows = $nb_rows;
$found_names = array();
$top_names = array();
$top_factions = array();
$top_scores = array();
$top_colors = array();
$nb_top_rows = 0;
$top_index = 0;
$found_hl_name_in_top = false;
foreach ($names as $i => $name)
{
if ($top_index < $max_rows)
{
if (!isset($found_names[strtolower($name)]))
{
$found_names[strtolower($name)] = true;
if (strtolower($name) == strtolower($highlight_name))
{
$line_color = $color_highlight;
$found_hl_name_in_top = true;
}
else if ($top_index % 2 == 0)
$line_color = $color_tab_bis;
else
$line_color = $color_tab;
$top_names[$top_index] = $name;
$top_factions[$top_index] = $factions[$i];
$top_scores[$top_index] = $scores[$i];
$top_colors[$top_index] = $line_color;
$top_index++;
$nb_top_rows = $top_index;
}
}
else
{
if ($found_hl_name_in_top)
break;
if (!isset($found_names[strtolower($name)]))
{
$found_names[strtolower($name)] = true;
if (strtolower($name) == strtolower($highlight_name))
{
$top_names[$top_index] = $name;
$top_factions[$top_index] = $factions[$i];
$top_scores[$top_index] = $scores[$i];
$top_colors[$top_index] = $color_highlight;
break;
}
$top_index++;
}
}
}
$vsep = '<td width=2 bgcolor="#101112"></td>';
$hsep = '<tr bgcolor="#101112"><td height=2></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>';
$res = '<table width=608 bgcolor="#101112" align="center" valign="middle"><tr><td height=8 width=5></td><td width=600></td><td width=5></td></tr>';
$res .= '<tr><td></td><td align="center"><table bgcolor="'.$color_tab.'" width=591 border=0>';
$res .= '<tr align="center" valign="middle" bgcolor="'.$color_tab_titles.'">';
$res .= '<td width=85 height=20><H5>'.$txt_position.'</H5></td>'.$vsep;
$res .= '<td width=150><H5>'.$txt_name.'</H5></td>'.$vsep;
$res .= '<td width=150><H5>'.$txt_faction.'</H5></td>'.$vsep;
$res .= '<td width=200><H5>'.$txt_score.'</H5></td></tr>'.$hsep;
$previous_i = -1;
foreach ($top_names as $i => $name)
{
$score = $top_scores[$i];
$faction = $top_factions[$i];
$line_color = $top_colors[$i];
if ($previous_i == $nb_top_rows - 1)
{
$res .= $hsep;
if ($i > $nb_top_rows)
{
$res .= '<tr bgcolor="'.$color_tab_titles.'" align="center" valign="middle"><td height=20>...</td>'.$vsep.'<td>...</td>'.$vsep.'<td>...</td>'.$vsep.'<td>...</td></tr>';
$res .= $hsep;
}
}
$res .= '<tr bgcolor="'.$line_color.'" align="center" valign="middle">';
$res .= '<td height=20>'.($i+1).'</td>'.$vsep.'<td>'.$name.'</td>'.$vsep.'<td>'.$faction.'</td>'.$vsep.'<td>'.$score.'</td>';
$res .= '</tr>';
if ($i + 1 < $nb_top_rows)
$res .= $hsep;
$previous_i = $i;
}
$res .= '</table></td><td></td></tr><tr><td height=8 width=5></td><td width=600></td><td width=5></td></tr></table>';
return $res;
}
function hof_score_table_same_faction($names, $faction, $scores, $max_rows, $highlight_name)
{
$faction = ucfirst($faction);
$factions = array();
foreach ($names as $i => $name)
$factions[$i] = $faction;
return hof_score_table($names, $factions, $scores, $max_rows, $highlight_name);
}
function hof_progress_bar($percent, $termine, $width=200, $height=10, $left_color='#0D0D0D', $right_color='#281F1A')
{
if (is_float($percent) || is_double($percent))
$percent = (int)$percent;
if (!is_int($percent))
die('invalid arg');
if ($percent > 100)
$percent = 100;
$left_text = $percent;
$right_text = '';
if ($percent > 0)
{
if ($percent < 30)
$left_color='#9B1515';
else if ($percent < 70)
$left_color='#A6AE25';
else if ($percent < 100)
$left_color='#108E42';
else
$left_color='#1442DA';
//if ($termine == 0)
// $left_color='#0D0D0D';
$res = '<table width='.$width.'><tr>';
$res .= '<td bgcolor="'.$left_color.'" width="'.$percent.' %" height='.$height.' valign="middle" align="center">'.$left_text.'%</td>';
$res .= '<td bgcolor="'.$right_color.'">'.$right_text.'</td>';
$res .= '</tr></table>';
}
else
{
$left_color='#281F1A';
$res = '<table width='.$width.'><tr>';
$res .= '<td bgcolor="'.$left_color.'" width="100 %" height='.$height.' valign="middle" align="center">0%</td>';
$res .= '</tr></table>';
}
return $res;
}
function hof_progress_bar_huge($percent, $width=200, $height=25, $left_color='#077F64', $right_color='#281F1A')
{
if (is_float($percent) || is_double($percent))
$percent = (int)$percent;
if (!is_int($percent))
die('invalid arg');
if ($percent > 100)
$percent = 100;
$left_text = $percent;
$right_text = '';
if ($percent > 0)
{
if ($percent < 30)
$left_color='#9B1515';
else if ($percent < 70)
$left_color='#A6AE25';
else if ($percent < 100)
$left_color='#108E42';
else
$left_color='#1442DA';
$res = '<table width='.$width.'><tr>';
$res .= '<td bgcolor="'.$left_color.'" width="'.$percent.' %" height='.$height.' valign="middle" align="center">'.$left_text.'%</td>';
$res .= '<td bgcolor="'.$right_color.'">'.$right_text.'</td>';
$res .= '</tr></table>';
}
else
{
$left_color='#281F1A';
$res = '<table width='.$width.'><tr>';
$res .= '<td bgcolor="'.$left_color.'" width="100 %" height='.$height.' valign="middle" align="center">0%</td>';
$res .= '</tr></table>';
}
return $res;
}
function hof_link($url, $text)
{
$res = '<a href="'.$url.'">'.$text.'</a>';
return $res;
}
function hof_margin_table($content, $margin)
{
$res = '<table border='.$margin.'><tr><td>'.$content.'</td></tr></table>';
return $res;
}
function hof_tab($url, $text)
{
$res = array();
$res['inactive'] = hof_link($url, $text);
$res['active'] = $text;
return $res;
}
function hof_tab_hgroup($tabs, $active_tab_id)
{
$res = '<table valign="middle" width=825 align="center" cellspacing=20><tr><td width=7></td>';
foreach ($tabs as $tab_id => $tab)
{
if ($tab_id == $active_tab_id)
$content = $tab['active'];
else
$content = $tab['inactive'];
$res .= '<td width=120 bgcolor="#101112"><H1>'.hof_margin_table($content, 8).'</H1></td><td width=7></td>';
}
$res .= '</tr><td width=7></td></table>';
return $res;
}
function hof_tab_hgroup_tableaux($tabs, $active_tab_id)
{
$res = '<table valign="middle" width=825 align="center" cellspacing=20><tr><td width=100></td>';
foreach ($tabs as $tab_id => $tab)
{
if ($tab_id == $active_tab_id)
$content = $tab['active'];
else
$content = $tab['inactive'];
if ($content == 'chantier')
$res .= '<td width=90 bgcolor="#101112"><H5>'.hof_margin_table($content, 8).'</H5></td><td width=10 bgcolor="#101112"></td>';
else
$res .= '<td width=90 bgcolor="#101112"><H5>'.hof_margin_table($content, 8).'</H5></td><td width=10></td>';
}
$res .= '</tr><td width=100></td></table>';
return $res;
}
?>

@ -1,11 +0,0 @@
<?php
$guild_name_http = str_replace(' ', '_', $guild_name);
$tabs_tableaux = array(
'total' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type='.$type.'&race='.$race.'&guild_name='.$guild_name_http.'&tableau=total', $txt_tab_total),
'faction' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type='.$type.'&race='.$race.'&guild_name='.$guild_name_http.'&tableau=faction', $txt_tab_faction),
'chantier' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type='.$type.'&race='.$race.'&guild_name='.$guild_name_http.'&tableau=chantier', $txt_tab_chantier),
'acte' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type='.$type.'&race='.$race.'&guild_name='.$guild_name_http.'&tableau=acte', $txt_tab_acte)
)
?>

@ -1,14 +0,0 @@
<?php
$guild_name_http = str_replace(' ', '_', $guild_name);
if ($tableau == '')
$tableau = 'total';
$tabs = array(
'chantier' => hof_tab('episode2_hof_chantier.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type=chantier&race='.$race.'&guild_name='.$guild_name_http.'&noActe='.$noActe, $txt_tab_chantier),
'craft' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type=craft&race='.$race.'&guild_name='.$guild_name_http.'&noActe='.$noActe.'&tableau='.$tableau, $txt_tab_craft),
'harvest' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type=harvest&race='.$race.'&guild_name='.$guild_name_http.'&noActe='.$noActe.'&tableau='.$tableau, $txt_tab_harvest),
'fight' => hof_tab('episode2_hof_classement.php?shard='.$shard.'&lang='.$lang.'&user_login='.$user_login.'&faction='.$faction.'&type=fight&race='.$race.'&guild_name='.$guild_name_http.'&noActe='.$noActe.'&tableau='.$tableau, $txt_tab_fight)
)
?>

@ -1,66 +0,0 @@
<?php
if (isset($_GET['lang']))
{
$lang = &$_GET['lang'];
if ($lang != 'fr' && $lang != 'en' && $lang != 'de')
die('invalid lang');
}
$faction = &$_GET['faction'];
$race = &$_GET['race'];
$self = &$_SERVER['PHP_SELF'];
$page_en_cours = &$_GET['page_en_cours'];
if ($page_en_cours =='')
$page_en_cours = 0;
include 'episode2_textes_'.$faction.'_'.$lang.'.php';
function stele_menu_item($label, $page, $page_active, $page_en_cours)
{
global $self, $lang, $race, $faction;
if ($page_en_cours!=$page_active)
return '<a href="episode2_steles.php?lang='.$lang.'&page_en_cours='.$page_active.'&faction='.$faction.'&race='.$race.'&page='.$page.'">'.$label.'</a>';
else return $label;
}
if (isset($_GET['page']))
$texte = $$_GET['page'];
else
$texte = $texteDefault;
echo '<html>';
echo '<head><title>'.$titre.'</title></head>';
echo '<body bgcolor="#30353A">';
if ($faction=='kami')
$couleur='1A807F';
else
$couleur='922121';
echo '<table height=365><tr><td height=15></td></tr><tr><td width=200 align="center"><H1>'.${'TITLE_'.$faction}.'</H1></td></tr><tr><td height=30></td></tr><tr><td><table><tr><td height=10 bgcolor=#101112></td><td height=10 bgcolor=#101112><td height=10 bgcolor=#101112></td></td><td bgcolor=#101112></td><td bgcolor=#101112></td></tr><tr><td><table><tr><td width=10 height=328 bgcolor=#101112></td></tr><tr><td></td></tr></table></td></tr><td height=280 valign="top"><table height=285 align="center">';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center" width=290><H4>'.stele_menu_item($menu1, 'texte_stele_'.$faction.'_1',1 ,$page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu2, 'texte_stele_'.$faction.'_2',2, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu3, 'texte_stele_'.$faction.'_3',3, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu4, 'texte_stele_'.$faction.'_4',4, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu5, 'texte_stele_'.$faction.'_5',5, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu6, 'texte_stele_'.$faction.'_6',6, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu7, 'texte_stele_'.$faction.'_7',7, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item(${'menu8'.$race}, 'texte_stele_'.$faction.'_8'.$race,8, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu9, 'texte_stele_'.$faction.'_9',9, $page_en_cours).'</H4></td></tr><tr><td height=2 bgcolor=#101112></td></tr>';
echo '<tr><td bgcolor=#'.$couleur.' valign="middle" height=30 align="center"><H4>'.stele_menu_item($menu10, 'texte_stele_'.$faction.'_10',10, $page_en_cours).'</H4></td></tr>';
echo '<tr><td height=10 bgcolor=#101112></td></tr><tr><td height=150></td></tr></table></td><td width=10 bgcolor=#101112></td>';
echo '<td width=500 align="center"><table><tr><td height=15></td></tr><tr>';
if ($page_en_cours!=8 && $page_en_cours!=0)
echo '<td align="center" height=10><H2>'.${'menu'.$page_en_cours}.'</H2><br></td>';
else if ($page_en_cours!=0)
echo '<td align="center" height=10><H2>'.${'menu'.$page_en_cours.$race}.'</H2><br></td>';
echo '</tr><tr><td height=255 align="center" valign="top"><table><tr><td width=20></td><td>'.$texte.'</td><td width=20></td></table></td></tr></table></td><td width=10 bgcolor=#101112></td></tr>';
echo '<tr><td height=10 ></td><td height=10 ></td><td height=10 bgcolor=#101112></td><td bgcolor=#101112></td><td bgcolor=#101112></td></tr></table></td></tr></table>';
echo '</body>';
echo '</html>';
?>

@ -1,59 +0,0 @@
<?php
$titre = "Wissenswurzel -";
$TITLE_kami = "DER ALTAR DES MA-DUK";
$texteDefault = "Einen Text aus dem Menü auswählen";
$menu1 = "DIE NACHRICHT DER KAMIS";
$menu2 = "DIE ERSCHAFFUNG VON ATYS";
$menu3 = "DIE ERSCHAFFUNG DER HOMINS";
$menu4 = "DIE ERLEUCHTUNG ZUM KAMI-ZEITALTER";
$menu5 = "MA-DUKS FEINDE";
$menu6 = "DIE KARAVAN UND JENA";
$menu7 = "DIE GUTEN TATEN DER KAMIS";
$menu8matis = "DIE KAMIS UND DIE MATIS";
$menu8tryker = "DIE KAMIS UND DIE TRYKER";
$menu8fyros = "DIE KAMIS UND DIE FYROS";
$menu8zorai = "DIE KAMIS UND DIE ZORAI";
$menu9 = "DER GROßE ORDEN DES MA-DUK";
$menu10 = "DIE ENTHÜLLUNGEN DES MA-DUK";
$texte_stele_kami_1 = "Wir sind integraler Bestandteil der Schöpfung des Ma-Duk, Schöpfer von Atys. Wir beschützen die natürlichen Ressourcen, um das prekäre Gleichgewicht des Planeten zu bewahren, damit alle Homins eines Tages das Kami-Zeitalter erreichen können.</ul><br><ul>Homin, vergiss nicht dass dein Schicksal an jenes von Atys gebunden ist und nicht an die falsche Prophezeiung der Karavan. Das sind Fremde hier, Besatzer die von weit hergekommen sind, um uns unsere Ressourcen zu stehlen und sich nicht um das Wohl von Atys scheren.</ul><br><ul>Ich bin wie du auf Atys geboren und zusammen müssen wir den Planeten verehren und vor Gefahren schützen. Indem du das Goo bekämpfst wirst du den Weg der ewigen Glückseligkeit des Ma-Duk begehen. Um deine glorreichen Taten zu belohnen, werden wir Wiederauferstehungs- und Teleportationsspakte schließen und dir die Wege der Magie zeigen.</ul><br><ul>Für das Leben unseres Planeten und den Geiste deines Volkes, folge dem Weg des Schöpfers und wähle den Pfad der ewigen Glückseligkeit des Ma-Duk!";
$texte_stele_kami_2 = "Seit dem Beginn der Zeiten widersprechen sich zwei Gegensätze im Universum: das Nichts und die Erschaffende Energie, auch noch Großer Schöpfer genannt. Die Energie erschafft aus dem Nichts heraus und kann das Nichts nicht zerstören. Das Nichts ernährt sich von den Kreationen der Energie, kann aber die Energie selbst nicht zerstören.</ul><br><ul>Am Ende des Universums, inmitten des Nichts, erschuf der Große Schöpfer die Materie. Es entstand eine einzigartige Welt aus dieser fusionierenden Materie: Atys. Der Große Schöpfer verschmolz im jungen Planeten. Als die Gefahr des Nichts Atys zu fesseln drohte, säte der Schöpfer die ersten Samen des Lebens. Die Wurzeln eroberten den Himmel, die Vögel flogen davon und die Tiere gurrten im hysterischen Wunder des Lebens.</ul><br><ul>Aus dem Inneren des Grünen Planeten heraus schuf der Große Schöpfer die Kamis und versah sie mit einem Geist, einem Fragment seines eigenen Bewusstseins und schickte sie dann los, um seine Schöpfung zu überwachen. Die Kamis verfügten über große magische Kräfte und stiegen an die Oberfläche, um die Ländereien in ihrer Obhut zu erforschen. Inmitten der atysianischen Wunder entdeckten sie das Goo, das aus einer minimalen Parzelle des Nichts entstanden war, das sich mit dem Atem des Großen Schöpfers vermischt hatte. Das Goo fraß Atys langsam auf. Die Kamis konnten nichts dagegen tun, denn sie konnten das Nichts nicht zerstören. Das Schicksal schickte ihnen jedoch andere Wesen: die Homins.";
$texte_stele_kami_3 = "Während die Kamis die noch junge Rinde von Atys erforschten, entdeckten sie neue Wesen, die aus der Saat des Ma-Duk gediehen waren. Sie hießen Homins. Es waren Samen in die klaren Seen gefallen, aus denen die Tryker entstanden waren. Aus denen in der Wüste vergrabenen und von der Sonne erwärmten Samen waren die Fyros entstanden. Aus denen im Humus in den Wäldern steckenden Samen entstanden die Matis und aus denen ins Sap gefallenen Samenkerne die Zorai.</ul><br><ul>Die göttlichen Samenkerne hatten langsam gekeimt und spezielle Wesen hervorgebracht, denen ein unabhängiger Geist gegeben ward. Dank dieses Bewusstseins ihrer eigenen Existenz und derer von Atys und dem Nichts, hatten die Homins die Macht, die Welt zu verändern. Denn auch wenn sie durch das Nichts verwundbar sind, wie jede Schöpfung der Energie, verleihte ihr Bewusstsein dessen ihnen eine außergewöhnliche Resistenz gegen seinen Befall und, noch wichtiger, ermöglichte ihnen gegen das Goo vorzugehen. </ul><br><ul>Die Kamis lernten die Homins kennen und auferlegten ihnen eine Mission: die Epidemie bekämpfen. So wurde die Existenz des Großen Schöpfers Preis gegeben und die Homins konnten ihren Platz im Universum einnehmen.";
$texte_stele_kami_4 = "Als der Große Schwarm aus der Rinde brach, bekämpften die Kamis die Kitins, damit auf Atys wieder Frieden herrschte. Als die Kitins in das Innere des Planeten zurück gedrängt wurden erschien Ma-Duk, der Große Schöpfer, einem weisen Homin und zeigte ihm den Weg der Erleuchtung. Dieser Weg war der Weg zur absoluten Erleuchtung des Kami-Zeitalters, in dem die Homins mit Ma-Duk verschmelzen werden und das universelle Wissen erhalten.</ul><br><ul>Wenn sie den Pfaden der Erleuchtung folgen, durchqueren die Gläubigen verschiedene Etappen, die sie in andere Dimensionen führen. Der Homin, dem ausreichend Ehre zu Teil kommt, ersteht in einer anderen Welt als Kami auf, bis dass er in der Lage ist, die unendliche Glückseligkeit als Kami-Ko zu erreichen. Dann wird er für alle Ewigkeit im Kami-Zeitalter leben.</ul><br><ul>Um sich ehrwürdig zu erweisen, muss der Gläubige die Kreation des Ma-Duk beschützen, die Kamis verehren und das gute Wort verbreiten, damit die anderen Homins auch die Möglichkeit erhalten, die Erleuchtung zu erreichen. Deshalb versuchen die Weisen, die Hominheit von äußeren Einflüssen zu befreien, die sie nur in die Irre führen wollen.";
$texte_stele_kami_5 = "Das Nichts ist der Gegensatz zum Großen Schöpfer. Das Goo ist die wichtigste Lebensform des Nichts. Viele Feinde gefährden das Gleichgewicht von Atys und die Anhänger der Kamis müssen vorsichtig sein. Die Karavan und ihre falsche Göttin Jena stellen die größte Gefahr dar, denn sie bringen die Homins dazu, den Weg des Ma-Duk nicht einzuhalten und die Ressourcen von Atys auszubeuten. Es handelt sich um Fremde, die von jenseits der Sterne herkommen und den Kampf gegen das Goo zugunsten ihrer eigenen Interessen vernachlässigen.</ul><br><ul>Elias Tryton ist ebenfalls ein Fremder. Er erschien nur kurz auf Atys und scheint ein Feind der Karavan zu sein. Doch macht das ihn zu einem Alliierten der Kamis? Vorsicht ist geboten, denn es ist schwierig, seine Pläne voraus zu sehen.</ul><br><ul>Die Kitins sind Wesen, die am Leben auf Atys teilnehmen, doch wie wir beim Großen Schwarm feststellen konnten, können sie zu einer Bedrohung für die Homins werden. Die Kamis haben die Kitins schon in der Vergangenheit bekämpft und sie werden erneut eingreifen, um ihre Zerstörung in Grenzen zu halten.</ul><br><ul>Manche Homins werden als Feinde angesehen: Sie greifen ihresgleichen an, reißen Ressourcen an sich oder verbreiten im schlimmsten Falle die Epidemie des Goo. Die Rohstoffabbauer, die gierig nach Rohstoffen sind, setzen sich der Kamischen Wut aus. Die Anhänger des Goo gefährden den ganzen Planeten und die Kamis haben keine Nachsicht mehr für sie.</ul><br><ul>Das Goo, das Atys schon seit Jahrhunderten auffrisst, stellt die größte Bedrohung für Atys dar. Das Goo ist die Korruptheit des Nichts. Es steckt Pflanzen und Kreaturen an und verbreitet sich unermüdlich. Alle Homins müssen sich einen, um das Goo zu bekämpfen, sonst ist das Leben auf dem Planeten dem Untergang geweiht.";
$texte_stele_kami_6 = "Die Mitglieder der Karavan sind Wesen aus einer anderen Welt, jenseits der Sterne. Sie verhalten sich so als gehöre Atys ihnen: Sie beuten die Ressourcen aus und entziehen sie dem natürlichen Zyklus des Planeten. Sie setzen Maschinen ein, deren Energie die Flora stört. Sie scheren sich weder um das Gleichgewicht noch um die Harmonie, die für jegliches Leben notwendig sind.</ul><br><ul>In den frühen Zeiten von Atys schenkte Ma-Duk der Karavan keine Aufmerksamkeit und sah sie als kleineres Übel an. Doch die Fremden fingen an, die Kamis als dämonische Kreaturen anzusehen und trieben die Homins dazu, sie zu verfolgen. Sie haben zahlreiche Homins für ihre Verehrung Jenas gewonnen und sie von ihrer heiligen Mission gegen das Goo abgebracht. So konnte die Epidemie sich frei verbreiten. </ul><br><ul>Jena, die falsche Göttin der Karavan, ist überhaupt nicht die schöpferische Göttin von Atys. Sie ist in diese Rolle geschlüpft, um die Homins besser unterwerfen zu können. Ma-Duk spürt, dass Jena keine Göttin ist, sondern eine Erscheinung des Nichts, dessen Ziel es ist, die Homins zu versklaven, um ganz Atys zu beherrschen und sie ihrer Essenz zu berauben. Die Kamisten-Homins nennen Jena Herrscherin der Nacht, denn sie sind überzeugt, ihre Legionen würden nur Dunkelheit und Tod mit sich bringen.</ul><br><ul>Die Karavanhomins sind ein Problem für die Kamis. Die Anhänger Ma-Duks wollen die Homins lieber bekehren als sie zu bestrafen, können sie aber nicht dazu zwingen. Diejenigen, die den dunklen Weg der Jena gewählt haben, wollen andere Homins mit in die dunkele Welt ziehen und die Kamis werden das nicht zulassen.";
$texte_stele_kami_7 = "Die Kamis führen die Homins: Sie haben ihnen ihr Schicksal und ihren Platz im Universum offenbart. Sie führen sie auf die Wege der Erleuchtung, damit sie das Kami-Zeitalter erreichen. Sie haben die religiösen Kamisten-Orden beschützt, damit die Kamis ihre Brüder auch zum oberen Wissen leiten können.</ul><br><ul>Die Kamis helfen den Homins: Sie lassen ihren Geist wieder auferstehen nach dem Willen Ma-Duks. Sie schlagen ihnen Pakte vor, mit denen sie sich teleportieren oder ihre Schwächen verschwinden lassen können, wenn sie wieder auferstehen. Sie stehen ihnen in ihrem Kampf gegen das Goo bei, der Korruptheit des Nichts, die droht ganz Atys aufzufressen. In der Vergangenheit bekämpften die Kamis die Kitins während des Großen Schwarms und bereiteten der Invasion ein Ende. Sie haben den Homins auch dabei geholfen, ihre Zivilisationen wieder aufzubauen, indem sie ihnen ermöglichten, große Mengen an Ressourcen abzubauen.</ul><br><ul>Die Kamis bilden die Homins aus und haben ihnen die Geheimnisse der Magie beigebracht, wodurch sie ihre Macht und ihr Wissen über die Welt vergrößern konnten. Sie lehren sie, die Ressourcen von Atys zu respektieren, damit das Gleichgewicht bewahrt wird und die Homins immer etwas zum Überleben haben.</ul><br><ul>Die Kamis wachen über die Homins: Sie bekämpfen die Karavan, die Atys zu persönlichen Zwecken ausbeutet und die Homins versklaven will. Sie behalten ebenfalls die Kitins im Auge, damit die Homins nicht mehr bedroht sind.</ul><br><ul>Die Kamis arbeiten für die Harmonie und Kommunion zwischen den Homins und Atys. Sie wollen das Jetzt und das prekäre Gleichgewicht vor verheerenden Einflüssen bewahren, die nur zu Zerstörung und Verfall aller Dinge führen würden.";
$texte_stele_kami_8matis = "Die Matis sind seit jeher fasziniert von den Kräften der Natur. Doch ihr Wille zu dominieren, hat einen Keil zwischen die Kamis und die Matis getrieben. Die Anhänger Ma-Duks haben in der Vergangenheit mehrmals versucht, dies zu ändern, allerdings ohne Erfolg. Die Allgegenwärtigkeit der Karavan bei den Matis hat die Annäherungsversuche zusätzlich erschwert.</ul><br><ul>Die beste Gelegenheit bot sich, als die Kamis die Matis trafen, um ihnen ihre Magie beizubringen. Trotz der Ablehnung der Karavan stellten die Matis sich als fleißige und ehrgeizige Schüler heraus. Doch sie versuchten sehr schnell die Magie einzusetzen, um die Pflanzen nach ihrem Willen zu unterwerfen und neue Arten zu erschaffen. Die Kamis waren nicht damit einverstanden und wandten sich von den zu ehrgeizigen Lehrlingen ab.</ul><br><ul>Die von der Karavan manipulierten Matis haben die Kamis sogar verfolgt, um sie den Auserwählten Jena zu übergeben. Die Kamis haben sich diskret verhalten und wollten die Matis nicht zu hart für ihr Unwissen bestrafen. Denn die Anhänger des Ma-Duk haben die Hoffnung nie verloren, die Matis auf den Weg der Erleuchtung zu führen.</ul><br><ul>Mit ihrem Wissen und ihrer Herrschaft über die Natur können die Matis wertvolle Wächter von Atys werden.";
$texte_stele_kami_8tryker = "Die Tryker waren die ersten Homins, die mit den Kamis in Kontakt traten. Die friedliche und unbesorgte Art des Seenvolkes und ihre ökologischen Beschäftigungen bezüglich der Umwelt gefielen den Kamis. Doch nach einer Feuersbrunst in den alten Wüstenländern suchten die Kamis Schutz in den sicheren Dschungeln von Atys und genossen die Ruhe der Zorais.</ul><br><ul>Die Tryker waren durch die Abwesenheit der Kamis verstört und verloren sich in den Wegen der Karavan. Die Kamis haben versucht, die Tryker zurück auf die Wege des Ma-Duk zu leiten, indem sie ihnen Magie beibrachten. Am Anfang sahen die Tryker das eher wie ein Spiel an und waren unfleißige Schüler. Doch unter dem Einfluss der Zorai-Meister, die die Kamis begleiteten, haben sie sich an die Arbeit gemacht und Fortschritte in verschiedenen Gebieten der Mystik gemacht.</ul><br><ul>Im Herzen sind sie Erfinder und haben ihre eigene Magie erfunden, die auf den Kräften des Windes und Schockwellen beruht. Die Tryker haben viel durchgemacht und sich als entschiedene Kämpfer entpuppt, die bereit sind, sich für ihre Freiheit zu opfern. Die Kamis wollten sie immer für sich gewinnen, denn wie sie hängen auch die Tryker sehr an der Schönheit der großen Seen von Atys.";
$texte_stele_kami_8fyros = "Die Kamis stellten schon sehr früh eine besondere Begabung bei den Fyros fest. Das Wüstenvolk hatte vor einer großen atysianischen Gefahr keine Angst: dem Feuer. Die Kamis haben versucht, ihr Herz zu erobern und sie für ihre Sache zu gewinnen. Die Fyros nahmen sich zuerst in Acht vor diesen eigenartigen Kreaturen. Doch die Rettung des Imperators Arispotle durch einen Kami ließ eine neue Freundschaft entstehen und war der Beginn eines tiefen Respekts im Herzen der Fyros.</ul><br><ul>Die Fyros näherten sich den Kamis mehr und mehr an, um von ihnen die Geheimnisse der Magie zu lernen. Der Imperator war der erste Homin, der die kamische Teleportation benutzte. Die Fyros experimentierten mit einer Magie, die Feuer einsetzt und manipulierten die Hauptenergie der Wüste. Als Dank für ihre Dienste versprachen die Fyros den Kamis, sie gegen das Feuer des Drachens zu schützen und erklärten sich einverstanden, im Falle eines Feuers gegen ihn zu kämpfen. Die Fyros sind ausgezeichnete Krieger und allzeit bereit, sich für eine gerechte Sache einzusetzen.</ul><br><ul>Auch wenn sie dem Großen Orden des Ma-Duks ihre eigenen kamistischen Kulte bevorzugten, sind viele dem Aufruf der Kami-Anhänger gefolgt, egal von wo sie herkommen.";
$texte_stele_kami_8zorai = "Die Kamis, die sich während der alten Zeiten nach dem großen Inferno in den Dschungel verschanzt hatten, lernten die Zorai kennen und betrauten sie mit der heiligen Mission gegen das Goo. Es entstand eine starke Bindung zwischen den Geistern der Natur und den Zorais, was zur Gründung des ersten Kamikultes führte der Verkörperung der puren Energie, aus der Atys entstand. Die Kamis schufen Verwandschaftsmasken für die Zorai, um diese Verbindung zu symbolisieren. Die Kamis weihten die Zorai in die Geheimnisse der Magie ein. So kamen die ersten Magier auf Atys, die Wunder vollbrachten.</ul><br><ul>Danach haben Zorai-Übermagier die mystischen Geheimnisse studiert und eine heilige Schrift benutzt, um ihr Wissen weiter zu geben. Sie haben die Macht des Blitzes entdeckt und die erste Volksmagie erschaffen: die Magie der Elektrizität.</ul><br><ul> Mit ihrer Magie und ihrem Wissen über den Magnetismus bekämpften die Zorais das Goo, das die Dschungel von Atys befiel. Im Namen der Kamis haben sie die Epidemie mutig bekämpft. Sie nahmen sich vor der Karavan in Acht, die die Homins vom Weg der Erleuchtung abbrachte.</ul><br><ul>Ihr fester Glaube hat die Zorais zu heiligen Kriegern des Ma-Duk gemacht.";
$texte_stele_kami_9 = "An diesem Ort wurde eine Kultstätte des Großen Ordens des Ma-Duk errichtet. Hier können die Kamisten-Homins meditieren und das Herz von Atys schlagen hören. Sie können mit dem großen Schöpfer kommunizieren, um die Antworten zu finden, die sie auf dem Weg zur Erleuchtung leiten werden. </ul><br><ul>In den alten Zeiten haben die Zorais die ersten Kamikulte gegründet. Diese Kulte errichteten Tempel zu Ehren der Kamis und des Obersten Kami. Doch der Große Schwarm hat alle religiösen Organisationen der Vergangenheit zerstört. Die Kulte selbst haben überlebt, nicht aber ihre Kirchen.</ul><br><ul>Da Ma-Duk wieder mit all seinen Gläubigen kommunizieren wollte, ist er dem Großen Weisen Hoi-Cho erschienen, um einen neuen Kami-Kult ins Leben zu rufen, den Großen Orden des Ma-Duk. Homin, sei willkommen in der Kultstätte des Ma-Duk! Der Große Schöpfer, der Oberste Kami, empfängt dich dort so wie er dich in seiner Mitte empfangen wird, wenn du das Kami-Zeitalter und das universelle Wissen erreicht hast.";
$texte_stele_kami_10 = "Hier sind die acht Enthüllungen des Ma-Duk niedergeschrieben, in heilige Schrift übersetzt, und so überliefert wie Ma-Duk selbst sie dem Großen Weisen Hoi-Cho vorgetragen hat, ehe sie am Anfang des Buchs der Enthüllungen niedergeschrieben wurden.</ul><br><ul></ul><ul>Erste Aussage: Ich bin Ma-Duk, der Schöpfer von Atys. Ich bin eins mit den Kamis, die ein Teil von mir sind. Ihr müsst sie so verehren wie den Schöpfer selbst.</ul><ul>Zweite Aussage: Ihr werdet dem Weg der Erleuchtung der Kamis folgen. Er wird euch ins Kami-Zeitalter geleiten.</ul><ul>Dritte Aussage: Um das Kami-Zeitalter zu erreichen und eins mit dem Schöpfer zu sein, müsst ihr dem Weg der Erleuchtung folgen, um ehrbürtig zu sein.</ul><ul>Vierte Aussage: Werdet durch eure Loyalität und eure Pflege von Ays ehrwürdig, der Planet entspringt meinem Leib.</ul><ul>Fünfte Aussage: Wenn ihr dem Weg der Erleuchtung der Kamis folgt, werde ich euren Geist wieder auferstehen lassen, wenn ihr sterbt, ehe ihr die absolute Ehre erreicht habt.</ul><ul>Sechste Aussage: Lasst euch nicht von falschen Göttern verführen, sie können nicht aus einer atysianischen Materie zusammengesetzt sein. Sie haben keinen Platz in meiner Schöpfung und sind der Ursprung von Unausgeglichenheiten.</ul><ul>Siebte Aussage: Seid der Feind des Exzesses und eure Reise auf dem Weg zur Erleuchtung der Kamis wird euch erfüllen.</ul><ul>Achte Aussage: Sowie ich die Samen der Existenz in den Wind gesät habe, um euer Leben auf Atys vorzubereiten, so müsst ihr die Erleuchtung der Kamis auf der ganzen Welt verbreiten.";
?>

@ -1,58 +0,0 @@
<?php
$titre = "Knowledge Root -";
$TITLE_kami = "THE SANCTUARY OF MA-DUK";
$texteDefault = "choose a text in the menu";
$menu1 = "THE MESSAGE OF THE KAMIS";
$menu2 = "THE CREATION OF ATYS";
$menu3 = "THE CREATION OF THE HOMINS";
$menu4 = "THE AGE OF KAMIHOOD";
$menu5 = "THE ENEMIES OF MA-DUK";
$menu6 = "THE KARAVAN AND JENA";
$menu7 = "THE DEEDS OF THE KAMIS";
$menu8matis = "THE KAMIS AND THE MATIS";
$menu8tryker = "THE KAMIS AND THE TRYKER";
$menu8fyros = "THE KAMIS AND THE FYROS";
$menu8zorai = "THE KAMIS AND THE ZORAI";
$menu9 = "THE GREAT ORDER OF MA-DUK";
$menu10 = "THE REVELATIONS OF MA-DUK";
$texte_stele_kami_1 = "<ul>We are an integral part of the great design of Ma-Duk, the Life Giver that created Atys. We stand vigil over her natural resources to preserve the fragile balance, so that all homins may attain enlightenment in Kamihood one day.</ul><br><ul>Remember, your destiny is linked to the life of Atys, homin, and not to the false prophecy of the Karavan. They are foreigners here, invading creatures come from afar to steal our resources, they care not a bit for the welfare of Atys.</ul><br><ul>I, like you, was born on Atys, together we must cherish it and keep it from danger. By clearing away the Goo you will gain merit to enter the pathway to the eternal bliss of Ma-Duk. In return for your deeds of merit we will offer you pacts to restore your life energy, and to teleport through the corridors of time, and we will teach you the ways of magic.</ul><br><ul>For the life of our planet, for the spirit of your people, give praise to the Life Giver, choose the pathway to the eternal bliss of Ma-Duk!</ul>";
$texte_stele_kami_2 = "<ul>From the beginning of time, two opposing principles formed the matrix of the universe: the Void and the Creative Energy, also known as the Life Giver. The Energy creates from the Void, and cannot destroy the Void. The Void is nourished by the Energy's creations, but cannot destroy the Energy itself.</ul><br><ul>Far across the universe, in the midst of the Void, the Life Giver brought forth matter. And then there was a great fusion that gave birth to a unique world: Atys. Then the great Life Giver merged with the young planet. While the anguish of the Void threatened to hold it in its grip, the Life Giver sowed the first seeds of existence. The primeval roots sent branches into the sky, birds took wing and beasts teemed in a frenzy of miraculous Life.</ul><br><ul>From the bowels of the green planet, the great Life Giver brought forth the Kamis and endowed them with spirit, a fragment of his own consciousness, then sent them forth to watch over his creation. Gifted with vast magical powers, the Kamis came to the surface to explore the lands under their protection. Hidden in the midst of the wonders of Atys, the Kamis encountered the Goo, born from an infinitesimal particle of Void that was mixed in with the creative breath of the great Life Giver. The Goo was gradually devouring Atys. The Kamis were helpless in the face of this menace, because they could not destroy the Void. Salvation would have to come from other beings: the homins.</ul>";
$texte_stele_kami_3 = "<ul>While the Kamis explored the still-young Bark of Atys, they discovered new beings born from the seeds sown by Ma-Duk. They were called homins. Seeds that had fallen into the clear lakes had produced the Trykers. Seeds that had burrowed into the sun-baked desert sands gave birth to the Fyros. Seeds that had worked down into the humus of the forests grew into the Matis, and seeds fallen into the sap that rises from the deep tap roots became the Zoraïs.</ul><br><ul>The divine seeds had germinated slowly and had given birth to some very special beings, endowed with an independent spirit. Because they were conscious of their own essence, and of Atys and the Void, the homins had the power to change the world. Because, although they can be destroyed by the Void, like any of the Energy's creations, their own conscious awareness of the Void conferred on them an astonishing ability to resist its corruption and, even more importantly, to effectively fight the Goo.</ul><br><ul>The Kamis met with the homins and entrusted them with a sacred mission of fighting this plague. And thus was the existence of the great Life Giver revealed, and the homins were able to take their place in the universe.</ul>";
$texte_stele_kami_4 = "<ul>When the Great Swarming covered the Bark, the Kamis made war on the Kitins in order to restore peace to Atys. When the Kitins were forced back underground, Ma-Duk, the great Life Giver, appeared to a homin sage and revealed to him the path of Enlightenment. This was the path to the ultimate fulfillment of the age of Kaminhood, where homins are at one with Ma-Duk and obtain universal knowledge.</ul><br><ul>By following the pathways of Enlightenment, the faithful take the steps that lead to other dimensions. The homin who demonstrates sufficient merit reincarnates into another world as a Kami, until he is capable of attaining the supreme blissful state of Kami-Ko. At that stage, he enters into Kaminhood for all of eternity.</ul><br><ul>To gain such merit, in addition to preserving Ma-Duk's creation and venerating the Kamis, believers must spread the good word so that other homins will have a chance to attain enlightenment too. And this is why the sages seek to liberate hominity from outside influences that seek only to lead it astray.</ul>";
$texte_stele_kami_5 = "<ul>The Void is the force that opposes the great Life Giver. Goo is its most common manifestation. There are many enemies that threaten the equilibrium of Atys, and Kamis followers must be vigilant. The Karavan and their false goddess Jena are the most imminent danger, because they pressure the homins to renounce the way of Ma-Duk and they pillage the resources. They are foreigners who come from beyond the stars, and they ignore the battles against Goo in order to pursue their own interests.</ul><br><ul>Elias Tryton is also a foreigner. He only appeared briefly on Atys, and seems to be an enemy of the Karavan. But does that make him a friend of the Kamis? Extreme caution is required, because it is very difficult to predict his intentions.</ul><br><ul>The Kitins are beings that participate in life on Atys, but they can become a threat to homins, as we saw in the tragedy of the Great Swarming. The Kamis have fought back the Kitins before, and they are prepared to do so again to keep their destructive actions in line.</ul><br><ul>Some homins are seen as enemies too: they attack their own kind, steal resources or, worse, they spread the plague of Goo. Avid foragers of raw materials expose themselves to the wrath of the Kamis. Those who nurture the Goo imperil the entire planet, and the Kamis show them no pity.</ul><br><ul>Indeed, the greatest menace of all that has been devouring Atys for centuries is the Goo - the Corruption of the Void. It contaminates creatures and plants and spreads insidiously. All homins must unite to fend it off, or else all life on the planet will be doomed.</ul>";
$texte_stele_kami_6 = "<ul>The members of the Karavan are beings that have come from elsewhere, from a distant world beyond the stars. They behave as if Atys belonged to them. They pillage its resources and pull them out of the planet's natural cycles. They use machines that emit energies that disturb the flora. They do not care about equilibrium nor about the harmony that is necessary for all life to flourish.</ul><br><ul>Ma-Duk scarcely paid attention to the Karavan in the early ages of Atys, seeing them as a minor threat. But the Foreigners began to view the Kamis as demonic creatures, going so far as to urge homins to hunt them down. They have converted many homins to their devotion to Jena, turning them away from their sacred mission to fight the Goo. So the plague has been allowed to expand unchecked.</ul><br><ul>Jena, the false goddess of the Karavan, is not the divine creator of Atys by any means. She has usurped this role the better to enslave homins. Ma-Duk knows that Jena is not a goddess, but a manifestation of the Void that seeks to subjugate the homins in order to take Atys over completely and drain it of all its substance. The Kamist homins call Jena the Empress of the Night, and have no doubt that her legions bring only shadows and death.</ul><br><ul>The Karavan homins raise a quandary for the Kamis. These disciples of Ma-Duk would prefer to convert the homins rather than punish them, but they cannot do so by force. Those that have chosen to follow the dark ways of Jena seek to attract other homins into the shadows, and the Kamis will never allow this.</ul>";
$texte_stele_kami_7 = "<ul>The Kamis guide the homins. They have revealed to them their destiny and their place in the universe. They lead them on the paths of Enlightenment so that they may attain Kaminhood. They have protected the Kamist religious orders so that the homins may also guide their brothers towards supreme knowledge.</ul><br><ul>The Kamis help the homins: they resuscitate their spirits, in keeping with the will of Ma-Duk. They make pacts with them so they can be teleported, or to strengthen their weakness when they are restored to life. They assist them in their battle with the Goo, the Corruption of the Void, which threatens to engulf all of Atys. In the past, the Kamis fought against the Kitins during the Great Swarming, and put an end to their invasion. They also helped the homins to rebuild their civilization, allowing them to extract large quantities of natural resources.</ul><br><ul>The Kamis also teach the homins: They have taught them the secrets of magic, which has enabled them to increase their power and their knowledge of the world. They teach them to respect the resources of Atys, so that balance will be maintained and homins will always have enough to survive.</ul><br><ul>The Kamis watch over the homins: they fight the Karavan who exploit Atys for their personal gain and who intend to reduce the homins to slavery. They watch out for the Kitins, so that the homins won't be threatened again. The Kamis work to maintain harmony and communion between the homins and Atys. They wish to preserve the present and the fragile balance against harmful influences that only lead to destruction and the end of all things.</ul>";
$texte_stele_kami_8matis = "<ul>The Matis have always been fascinated by the forces of Nature. But their desire for domination has put a barrier between them and the Kamis. In the past, the disciples of Ma-Duk made many attempts to break down this barrier, without success. The omnipresence of the Karavan wherever the Matis go has made any further attempts at rapprochement even more difficult.</ul><br><ul>The best opportunity arose when the Kamis met with the Matis in order to teach them magic. Despite the disapproval of the Karavan, the Matis turned out to be dedicated and daring students. But they very quickly attempted to use magic to make plants submit to their will, in the hope of creating new species. The Kamis rebuked this attitude and they ended up turning away from their overly ambitious apprentices.</ul><br><ul>The Matis, who have been manipulated by the Karavan, have gone so far as to hunt down the Kamis in order to hand them over to the Elect of Jena. The Kamis have become very discreet, not wishing to inflict too much punishment of the Matis for their thoughtlessness. Since the disciples of Ma-Duk never lost their hope of steering the Matis onto the path to Enlightenment.</ul><br><ul>With their knowledge and their mastery of Nature, the Matis could very well become valued guardians of Atys.</ul>";
$texte_stele_kami_8tryker = "<ul>The Trykers were the first homins to make contact with the Kamis. The peaceful, carefree nature of the lake people and their preoccupation with the ecology of the environment were all pleasing factors to the Kamis. But after a series of fires in the ancient deserts, the Kamis took refuge in the jungles of Atys in order to regenerate, and they were calmed by the serenity of the Zoraïs.</ul><br><ul>Feeling disoriented without the Kamis, the Trykers went astray following the ways of the Karavan. The Kamis tried to bring them back onto the path of Ma-Duk by teaching them magic. At first, the Trykers took this as more of a game, and did not prove to be good students. But under the influence of the Zoraïs masters who came along with the Kamis, they began to work at it and made progress in various domains of the arcane.</ul><br><ul>With an inventive gift deep in their souls, they ended up creating their own form of magic, based on the forces of the wind and on shock waves. The Trykers went through many trials and showed themselves to be obstinate fighters, ready to die for their freedom. The Kamis still wished to rally them to their own cause because, just like them, the Trykers have a strong attachment to the splendors of the great lakes of Atys.</ul>";
$texte_stele_kami_8fyros = "<ul>Very early on, the Kamis noticed that the Fyros had a special talent. These desert people simply had no fear of one of the greatest threats to Atys: fire. The Kamis attempted to win their hearts and rally them to the cause. At first, the Fyros were wary of these strange creatures. But then when the emperor Arispotle was saved by a Kami, a new friendship was sealed and the Fyros were filled with a heartfelt respect for the Kamis.</ul><br><ul>The Fyros gradually turned towards the Kamis to learn the secrets of magic. The emperor was the first homin to use Kamic teleportation. The Fyros were working on a kind of magic that uses the power of fire, and manipulating the primordial energy of the desert. In return for the Kamis' favors, the Fyros promised to protect them from the Dragon's fire, and agreed to fight to defeat it and protect them in case of fire. The Fyros are fearsome warriors and have always been willing to fight for a just cause.</ul><br><ul>Although they prefer their own Kamist worship practices to the Great Order of Ma-Duk, they have often responded to the calls from the Kamis' followers, regardless of origin.</ul>";
$texte_stele_kami_8zorai = "<ul>In the old days, the Kamis had taken refuge in the jungle after the great fires, where they met the Zoraïs and entrusted them with the sacred mission to fight the Goo. The spirits of Nature developed very close ties with the Zoraïs, leading to the early devotions to the Kamis, who were the living incarnation of the pure energy that created Atys. The Kamis created the masks linking them to the Zoraïs, as a symbol of this spiritual bond. The Kamis initiated the Zoraïs into the secrets of magic. The first magicians appeared on Atys, performing miracles.</ul><br><ul>Then the Zoraïs' high Magi began to study the arcane mysteries, using sacred writing to transmit their knowledge. They learned the secret powers of lightning, and created the first peoples' magic, the magic of electricity.</ul><br><ul>Using their magic and their knowledge of magnetism, the Zoraïs fought the Goo that was eating away at the forests of Atys. In the name of the Kamis, they bravely battled this plague. They were wary of the Karavan, who led homins away from the path of Enlightenment.</ul><br><ul>Their unshakeable faith has made the Zoraïs the sacred warriors of Ma-Duk.</ul>";
$texte_stele_kami_9 = "<ul>On this site, a sanctuary of the Great Order of Ma-Duk has been erected. Here, Kamist homins may meditate and listen to the heartbeat of Atys. They may commune with the great Life Giver to find the answers that will guide them on the paths of Enlightenment. </ul><br><ul>In ancient times, the Zoraïs founded the first of the Kamist religions. They raised temples to the glory of the Kamis and the supreme Kami. But the Great Swarming wiped out all of the religious organizations of the past. The worship endured, but without the churches.</ul><br><ul>Desiring to commune with all his faithful once again, Ma-Duk revealed himself to the Great Sage Hoï-Cho in order to found a new Kamist religion, the Great Order of Ma-Duk. Homin, we welcome you to the sanctuary of Ma-Duk! The great Life Giver, the supreme Kami, welcomes you, just as he will welcome you into his heart when you attain Kamihood and universal knowledge.</ul>";
$texte_stele_kami_10 = "<ul>Here are written the Eight Revelations of Ma-Duk, translated into sacred words, as they were given to the Great Sage Hoï-Cho by Ma-Duk himself, then transcribed into the beginning of the Book of Revelations.</ul><br><ul>The First Word: I am Ma-Duk, the creator who gave life to Atys. I am at one with the Kamis and they are a part of me. You must therefore adore them as you adore your creator.</ul><ul>The Second Word: You shall follow the Kami path of Enlightenment, which will lead you to attain Kamihood.</ul><ul>The Third Word: In order to attain Kamihood and become as one with your creator, the Life Giver, you must follow the path of Enlightenment to become meritorious.</ul><ul>The Fourth Word: Become meritorious through our loyalty and your attentions to Atys, who is separating from my heart.</ul><ul>The Fifth Word: If you follow the Kami path of Enlightenment, I will restore you to life if you should die before attaining the ultimate merit.</ul><ul>The Sixth Word: Do not be tempted by false gods, they cannot be of Atysian stock, and they have no place in my design, they only create imbalances.</ul><ul>The Seventh Word: Oppose excess and your journey on the Kami path of Enlightenment will completely fill the void in you.</ul><ul>The Eighth Word: Just as I have sown the seeds of existence upon the wind in order to prepare your life on Atys, so you must sow the ways of Kami Enlightenment to all the corners of the world.</ul>";
?>

@ -1,60 +0,0 @@
<?php
$titre = "Racine du Savoir -";
$TITLE_kami = "LE SANCTUAIRE DE MA-DUK";
$texteDefault = "choisissez un texte dans le menu";
$menu1 = "LE MESSAGE DES HOMINS";
$menu2 = "LA CREATION D'ATYS";
$menu3 = "LA CREATION DES HOMINS";
$menu4 = "VERS L'AGE DES KAMIS";
$menu5 = "LES ENNEMIS DE MA-DUK";
$menu6 = "LA KARAVAN ET JENA";
$menu7 = "LES BIENFAITS DES KAMIS";
$menu8matis = "LES KAMIS ET LES MATIS";
$menu8tryker = "LES KAMIS ET LES TRYKERS";
$menu8fyros = "LES KAMIS ET LES FYROS";
$menu8zorai = "LES KAMIS ET LES ZORAIS";
$menu9 = "LE GRAND ORDRE DE MA-DUK";
$menu10 = "LES REVELATIONS DE MA-DUK";
$texte_stele_kami_1 = "<ul>Nous faisons partie intégrante du grand dessein de Ma-Duk, le Créateur qui a donné vie à Atys. Nous surveillons les ressources naturelles afin de préserver le fragile équilibre de la planète, pour que tous les homins puissent un jour atteindre l'âge Kami.</ul><br><ul>Homin, souviens-toi que ton destin est lié à celui d'Atys, et pas à la fausse prophétie de la Karavan. Ce sont des étrangers ici, des envahisseurs venus de loin pour voler nos ressources, et qui ne se soucient pas du bien d'Atys.</ul><br><ul>Comme toi, je suis né sur Atys ; ensemble nous devons la chérir et la protéger des dangers. En combattant la Goo, tu marcheras sur le chemin de l'éternelle félicité de Ma-Duk. Pour récompenser tes actes de mérite, nous conclurons des pactes de résurrection et de téléportation, et nous te montrerons les voies de la magie.</ul><br><ul>Pour la vie de notre planète, pour l'esprit de ton peuple, rends grâce au Créateur, choisis la voie de l'éternelle félicité de Ma-Duk !</ul>";
$texte_stele_kami_2 = "<ul>Depuis le début des temps, deux principes contraires forment la trame de l'univers : le Vide et l'énergie Créatrice, appelée aussi le Grand Géniteur. L'énergie crée à partir du Vide, et ne peut détruire le Vide. Le Vide se nourrit des créations de l'énergie, mais ne peut détruire l'énergie elle-même.</ul><br><ul> Aux confins de l'univers, au milieu du Vide, le Grand Géniteur fit naître la matière. Puis un monde unique naquit de cette matière en fusion : Atys. Le Grand Géniteur se fondit dans la jeune planète. Alors que l'angoisse du Vide menaçait d'étreindre Atys, le Géniteur dissémina les premières graines de l'existence. Les racines conquirent le ciel, les oiseaux prirent leur envol et les bêtes grouillèrent dans le miracle frénétique de la Vie.</ul><br><ul> Depuis les entrailles de la planète verte, le Grand Géniteur créa les Kamis et les dota d'esprit, d'un fragment de sa propre conscience, puis il les envoya surveiller sa création. Disposant de grands pouvoirs magiques, les Kamis remontèrent à la surface pour explorer les terres sous leur protection. Cachée au milieu des merveilles qu'offrait Atys, les Kamis découvrirent la Goo, née d'une infime parcelle du Vide qui s'était mêlée au souffle créateur du Grand Géniteur. La Goo dévorait lentement Atys. Les Kamis étaient désarmés face à elle, car ils ne pouvaient anéantir le Vide. Le salut allait venir d'autres êtres : les homins.</ul>";
$texte_stele_kami_3 = "<ul>Alors que les Kamis exploraient l'écorce encore jeune d'Atys, ils découvrirent de nouveaux êtres nés des graines de Ma-Duk. Ils s'appelaient homins. Des graines tombées dans les lacs limpides étaient nés les Trykers. Des graines enfouies dans les sables du désert chauffés par le soleil étaient nés les Fyros. Des graines enfouies dans l'humus des forêts étaient nés les Matis, et des graines tombées dans la sève remontant des racines profondes étaient nés les Zoraïs.</ul><br><ul> Les graines divines avaient germé lentement, et elles avaient donné naissance à des êtres particuliers, dotés d'un esprit indépendant. Grâce à cette conscience de leur propre essence, d'Atys et du Vide, les homins avaient le pouvoir de changer le monde. Car bien qu'ils puissent être détruits par le Vide, comme toute création de l'énergie, leur propre conscience du Vide leur conférait une résistance étonnante à sa corruption, et plus important encore, leur permettait d'agir sur la Goo.</ul><br><ul> Les Kamis rencontrèrent les homins, et leur confièrent une mission sacrée : combattre le fléau. Ainsi l'existence du Grand Géniteur fut-elle révélée, et ainsi les homins purent-ils prendre leur place dans l'univers.</ul>";
$texte_stele_kami_4 = "<ul>Lorsque le Grand Essaim submergea l'écorce, les Kamis firent la guerre aux kitins, afin qu'Atys retrouve la paix. Quand les kitins furent renvoyés dans les profondeurs, Ma-Duk, le Grand Géniteur, apparut à un sage homin, et lui révéla la voie de l'Illumination. Cette voie était le chemin vers la plénitude ultime de l'âge Kami, où les homins ne feront qu'un avec Ma-Duk et obtiendront la connaissance universelle.</ul><br><ul> En suivant les sentiers de l'Illumination, les fidèles franchissent des étapes les menant à d'autres dimensions. L'homin qui devient suffisamment méritant se réincarne dans un autre monde en tant que Kami, jusqu'à ce qu'il soit capable d'atteindre le bonheur suprême en tant que Kami-Ko. Il vivra alors dans l'âge Kami pour l'éternité.</ul><br><ul> Pour gagner du mérite, outre la préservation de la création de Ma-Duk et la vénération des Kamis, les croyants doivent répandre la bonne parole afin que les autres homins puissent avoir la possibilité d'atteindre l'illumination. C'est pourquoi les sages cherchent à libérer l'hominité des influences extérieures qui ne cherchent qu'à l'égarer.</ul>";
$texte_stele_kami_5 = "<ul>Le Vide est la force opposée au Grand Géniteur. La Goo en est la principale manifestation. De nombreux ennemis menacent l'équilibre d'Atys, et les fidèles des Kamis doivent être vigilants. La Karavan et leur fausse déesse Jena représentent le danger le plus pressant, car ils poussent les homins à renier la voie de Ma-Duk et à piller les ressources d'Atys. Ce sont des étrangers venus d'au-delà des étoiles, qui délaissent le combat contre la Goo au profit de leurs propres intérêts.</ul><br><ul> Elias Tryton est aussi un étranger. Il n'est apparu que brièvement sur Atys, et il semble un ennemi de la Karavan. Mais est-il pour autant un allié des Kamis ? Une grande prudence est nécessaire, car il est difficile de prévoir ses intentions.</ul><br><ul> Les kitins sont des êtres participant à la vie sur Atys, mais ils peuvent devenir une menace pour les homins, comme la tragédie du Grand Essaim l'a démontré. Les Kamis ont combattu les kitins par le passé, et ils interviendront à nouveau pour limiter leurs actions de destruction.</ul><br><ul> Certains homins sont considérés comme des ennemis : ils attaquent leurs semblables, s'approprient des ressources ou pire répandent le fléau de la Goo. Les foreurs avides de matières premières s'exposent à la Colère Kamique. Les adeptes de la Goo mettent en péril la planète toute entière, et les Kamis ne montreront aucune indulgence envers eux.</ul><br><ul> Enfin, la plus grande menace, qui ronge Atys depuis des siècles, est la Goo, la Corruption du Vide. Contaminant les créatures et les plantes, elle se répand insidieusement. Tous les homins doivent s'unir pour la combattre, sinon toute vie sur la planète est condamnée.</ul>";
$texte_stele_kami_6 = "<ul>Les membres de la Karavan sont des êtres venus d'ailleurs, d'un monde lointain au delà des étoiles. Ils se comportent comme si Atys leur appartenait : ils pillent les ressources et les retirent du cycle naturel de la planète. Ils utilisent des machines dont l'énergie perturbe la flore. Ils ne préoccupent pas de l'équilibre, ni de l'harmonie nécessaire à toute vie pour s'épanouir.</ul><br><ul> Ma-Duk n'a guère prêté attention à la Karavan dans les premiers âges d'Atys, la considérant comme une menace mineure. Mais les étrangers se sont mis à considérer les Kamis comme des créatures démoniaques, allant jusqu'à pousser les homins à les pourchasser. Ils ont converti de nombreux homins à leur culte envers Jena, les détournant de leur mission sacrée contre la Goo. Ainsi le fléau a pu s'étendre librement.</ul><br><ul> Jena, la fausse déesse de la Karavan, n'est en rien la divinité créatrice d'Atys. Elle a usurpé ce rôle afin de mieux asservir les homins. Ma-Duk pressent que Jena n'est pas une déesse, mais une manifestation du Vide, dont le but serait de réduire les homins en esclavage pour s'emparer d'Atys toute entière et la vider de sa substance. Jena est appelée par les homins kamistes l'Impératrice de la Nuit, nul doute que ses légions n'apporteront que les ténèbres et la mort.</ul><br><ul> Les homins karavaniers posent un problème aux Kamis. Les disciples de Ma-Duk préfèrent convertir des homins plutôt que les punir, mais ils ne peuvent les contraindre. Ceux qui ont choisi de suivre les chemins obscurs de Jena veulent attirer d'autres homins dans les ténèbres, et les Kamis ne permettront pas cela.</ul>";
$texte_stele_kami_7 = "<ul>Les Kamis guident les homins : ils leur ont révélé leur destinée et leur place dans l'univers. Ils les mènent sur les chemins de l'Illumination afin qu'ils parviennent à l'âge Kami ; ils ont protégé les ordres religieux kamistes afin que les homins puissent eux aussi guider leurs frères vers la connaissance suprême.</ul><br><ul> Les Kamis aident les homins : ils ressuscitent leurs esprits selon la volonté de Ma-Duk. Ils leur proposent des pactes leur permettant de se téléporter ou de dissiper leur faiblesse lorsqu'ils sont ramenés à la vie. Ils les assistent dans leur lutte contre la Goo, la Corruption du Vide, qui menace d'engloutir Atys tout entière. Dans le passé, les Kamis ont combattu les kitins lors du Grand Essaim, mettant fin à l'invasion. Ils ont aussi aidé les homins à rebâtir leurs civilisations, en leur permettant d'extraire de grandes quantités de ressources.</ul><br><ul> Les Kamis instruisent les homins : ils leur ont enseigné les secrets de la magie, ce qui leur a permis d'accroître leur puissance et leur connaissance du monde. Ils leur apprennent à respecter les ressources d'Atys, afin que l'équilibre soit préservé et que les homins aient toujours de quoi subsister.</ul><br><ul> Les Kamis veillent sur les homins : Ils luttent contre la Karavan qui surexploite Atys à ses fins personnelles, et qui compte réduire les homins en esclavage. Ils surveillent les kitins, afin que les homins ne soient plus menacés. Les Kamis œuvrent pour l'harmonie et la communion entre les homins et Atys. Ils veulent préserver le présent et l'équilibre si fragile contre les influences néfastes, qui ne mènent qu'à la destruction et la fin de toute chose.</ul>";
$texte_stele_kami_8matis = "<ul>Les Matis ont toujours été fascinés par les forces de la Nature. Mais leur volonté de domination a mis une barrière entre eux et les Kamis. Dans le passé, les disciples de Ma-Duk ont tenté plusieurs fois de briser cette barrière, sans succès. L'omniprésence de la Karavan auprès des Matis a rendu les tentatives de rapprochement encore plus difficiles.</ul><br><ul> La meilleure occasion se présenta lorsque les Kamis vinrent à la rencontre des Matis afin de leur apprendre la magie. Malgré la désapprobation de la Karavan, les Matis se montrèrent des élèves studieux et audacieux. Mais très vite, ils tentèrent d'utiliser la magie pour soumettre les plantes à leur volonté, dans le but de créer de nouvelles espèces. Les Kamis réprouvèrent cette attitude, et ils finirent par se détourner de leurs apprentis trop ambitieux.</ul><br><ul> Les Matis, manipulés par la Karavan, ont été jusqu'à pourchasser les Kamis, dans le but de les livrer aux élus de Jena. Les Kamis se sont fait discrets, ne désirant pas punir trop sévèrement les Matis pour leur inconscience. Car les disciples de Ma-Duk n'ont jamais perdu l'espoir de guider les Matis sur la voie de l'Illumination.</ul><br><ul> Avec leurs connaissances et leur maîtrise de la Nature, les Matis peuvent devenir de précieux gardiens pour Atys.</ul>";
$texte_stele_kami_8tryker = "<ul>Les Trykers furent les premiers homins à entrer en contact avec les Kamis. La nature pacifique et insouciante du peuple des lacs, ainsi que leurs préoccupations écologiques pour l'environnement plaisaient aux Kamis. Mais suite à une vague d'incendies dans les anciens déserts, les Kamis se réfugièrent dans la sécurité des jungles d'Atys pour se régénérer, et furent apaisés par la quiétude des Zoraïs.</ul><br><ul> Désorientés, car ressentant l'absence des Kamis, les Trykers se perdirent dans les chemins tracés par la Karavan. Les Kamis ont tenté de ramener les Trykers sur les chemins de Ma-Duk en leur apprenant à faire de la magie. Au début, les Trykers ont pris cela davantage comme un jeu et se sont montrés des élèves peu appliqués. Mais sous l'influence des maîtres Zoraïs qui accompagnaient les Kamis, ils se sont mis au travail, et ils ont progressé dans les différents domaines des arcanes.</ul><br><ul> Inventeurs dans l'âme, ils ont fini par créer leur propre magie, basée sur les forces du vent et les ondes de choc. Les Trykers ont traversé de nombreuses épreuves, et ils se sont révélés des combattants obstinés, prêts à mourir pour leur liberté. Les Kamis ont toujours voulu les rallier à leur cause, car comme eux, les Trykers sont très attachés aux splendeurs des grands lacs d'Atys.</ul>";
$texte_stele_kami_8fyros = "<ul>Très tôt, les Kamis remarquèrent chez les Fyros une aptitude particulière. Le peuple du désert ne craignaient tout simplement pas l'un des grands fléaux d'Atys : le feu. Les Kamis tentèrent de gagner leur coeur et de les rallier à leur cause. Les Fyros se méfièrent tout d'abord de ces créatures étranges. Puis le sauvetage de l'empereur Arispotle par un Kami scella une nouvelle amitié et marqua la naissance d'un profond respect dans le coeur des Fyros.</ul><br><ul> Les Fyros se tournèrent progressivement vers les Kamis pour apprendre d'eux les secrets de la magie. L'empereur fut le premier homin à utiliser la téléportation kamique. Les Fyros expérimentèrent une magie utilisant le pouvoir du feu, manipulant l'énergie primordiale du désert. En retour des faveurs des Kamis, les Fyros ont garanti une protection contre le feu du Dragon, et ont accepté de se battre pour le dominer en cas d'incendie.</ul><br><ul> Formidables guerriers, les Fyros ont toujours été prêts à se mobiliser pour une cause juste. Bien qu'ils aient préféré leurs propres cultes kamistes au Grand Ordre de Ma-Duk, ils ont répondu à de nombreuses reprises aux appels des adeptes des Kamis, quelles que soient leurs origines.</ul>";
$texte_stele_kami_8zorai = "<ul>Dans les temps anciens, les Kamis, qui s'étaient réfugiés dans la jungle après les grands incendies, rencontrèrent les Zoraïs, et leur confièrent la mission sacrée de lutter contre la Goo. Un lien très fort se créa entre esprits de la nature et Zoraïs, qui conduisit à la fondation du premier culte voué aux Kamis, incarnations vivantes de l'énergie pure qui a créé Atys. Les Kamis créèrent les masques de parenté pour les Zoraïs, comme symbole de ce lien. Les Kamis initièrent les Zoraïs aux secrets de la magie. Les premiers magiciens firent leur apparition sur Atys, réalisant des miracles.</ul><br><ul> Des archimages zoraïs ont ensuite étudié les mystères des arcanes, employant une écriture sacrée pour transmettre leur savoir. Ils ont découvert les pouvoirs de la foudre, et ont créé la première magie de peuple, la magie de l'électricité.</ul><br><ul> Utilisant leur magie et leur connaissance du magnétisme, les Zoraïs ont combattu la Goo qui rongeait les jungles d'Atys. Au nom des Kamis, ils ont courageusement affronté le fléau. Ils se sont méfiés de la Karavan, qui éloignait les homins du chemin de l'Illumination.</ul><br><ul> Leur foi inébranlable a fait des Zoraïs les guerriers sacrés de Ma-Duk.</ul>";
$texte_stele_kami_9 = "<ul>En ce lieu a été érigé un sanctuaire du Grand Ordre de Ma-Duk. Ici, les homins kamistes peuvent méditer et écouter le battement du coeur d'Atys. Ils peuvent communier avec le Grand Géniteur pour trouver les réponses qui les guideront sur le chemin de l'Illumination.</ul><br><ul> Dans les temps anciens, les Zoraïs ont fondé les premiers cultes kamistes. Ces cultes élevaient des temples à la gloire des Kamis et du Kami Suprême. Mais le Grand Essaim a fait table rase des organisations religieuses du passé. Les cultes ont survécu, mais pas leurs églises.</ul><br><ul> Souhaitant communier à nouveau avec tous ses fidèles, Ma-Duk s'est révélé au Grand Sage Hoï-Cho pour fonder un nouveau culte kamiste, le Grand Ordre de Ma-Duk. Homin, sois le bienvenu dans le sanctuaire de Ma-Duk ! Le Grand Géniteur, le Kami Suprême t'y accueille, comme il t'accueillera en son sein lorsque tu atteindras l'âge Kami et la connaissance universelle.</ul>";
$texte_stele_kami_10 = "<ul>Ici sont écrites les Huit Révélations de Ma-Duk, traduites en paroles sacrées, telles qu'elles furent énoncées au Grand Sage Hoï-Cho par Ma-Duk lui-même, puis retranscrites au début du Livre des Révélations.</ul><br><ul> Première Parole : Je suis Ma-Duk, le créateur qui a donné vie à Atys. Je ne forme qu'un avec les Kamis qui font partie de moi. Vous devez donc les adorer comme vous adorerez votre géniteur.</ul><ul> Deuxième Parole : Vous suivrez le chemin de l'Illumination Kami, il vous élèvera jusqu'à atteindre l'âge Kami.</ul><ul> Troisième Parole : Pour atteindre l'âge des Kamis et ne former qu'un avec le Géniteur, vous devez suivre le chemin de l'Illumination pour devenir méritants.</ul><ul> Quatrième Parole : Devenez méritants par votre loyauté et vos soins à Atys, elle se détache de mon sein.</ul><ul> Cinquième Parole : Si vous suivez le chemin de l'Illumination Kami, je raviverai votre esprit si vous mourez avant d'avoir atteint le mérite ultime.</ul><ul> Sixième Parole : Ne vous laissez pas tenter par de faux dieux, ils ne peuvent être de composition atysienne, ils n'ont pas leur place dans mon dessein, ils sont sources de déséquilibres.</ul><ul> Septième Parole : Soyez l'ennemi de l'excès et votre voyage sur le chemin de l'Illumination Kami comblera entièrement le vide en vous.</ul><ul> Huitième Parole : Tout comme j'ai semé les graines de l'existence au vent pour préparer votre vie sur Atys, vous devez répandre l'Illumination Kami aux quatre coins du monde.</ul>";
?>

@ -1,64 +0,0 @@
<?php
$titre = "Wissenskolonne -";
$TITLE_karavan = "JENAS TEMPEL";
$texteDefault = "Einen Text aus dem Menü auswählen";
$menu1 = "DIE NARCHRICHT DER KARAVAN";
$menu2 = "DIE GEBURT DER HOMINHEIT";
$menu3 = "DIE DRAKONISCHEN ASCHEN";
$menu4 = "DIE PROPHEZEIUNG";
$menu5 = "DIE FEINDE JENAS";
$menu6 = "DIE LÜGEN DES MA-DUK";
$menu7 = "DIE WOHLTATEN DER KARAVAN";
$menu8matis = "DIE KARAVAN UND DIE MATIS";
$menu8tryker = "DIE KARAVAN UND DIE TRYKER";
$menu8fyros = "DIE KARAVAN UND DIE FYROS";
$menu8zorai = "DIE KARAVAN UND DIE ZORAÏ";
$menu9 = "DIE KIRCHE DES LICHTS";
$menu10 = "DIE GEBOTE DER JENA";
$texte_stele_karavan_1 = " Wir sind die Jünger Jenas, Göttin von Atys und Mutter der Hominheit. Sie sandte uns, um ihre Kinder in unsere Obhut zu nehmen, ihnen aus Verirrungen den Weg zu weisen und sie auf die göttliche Rettung am Tage des Gerichts vorzubereiten. Es sei dir versichert, Homin, dieser Tag ist nahe!</ul><br><ul>Ehre Jena und sie wird dich durch die Pforten des Paradieses in eine Welt des Wohlstands führen, fern des Drachen und der Kitin, fern der bösartigen Kamis! Sei wachsam! Diese Kreaturen sorgen sich mehr um die infizierten Pflanzen als um das Leben der Homins. Wenn du sie gewähren lässt, nehmen sie Besitz von deiner Seele, um ihre selbstsüchtige Begierde der Selbsterhaltung zu stillen.</ul><br><ul>Vergiss nie: Wie wir wurdest auch du nach dem Abbild Jenas erschaffen. Dein Glaube soll dein Herz ausfüllen, wenn du die göttliche Gunst zu empfangen suchst, wenn Atys das hominische Leben nicht mehr ertragen kann. Zur Belohnung deiner Opfergaben hat sie uns mit der göttlichen Macht versehen, um deinen Geist wieder auferstehen zu lassen, dich in entfernte Welten zu senden und dir den Umgang mit unserer Technologie beizubringen.</ul><br><ul>Wenn du, wie wir, das Leben eines Homin als wichtiger erachtest als das einer einfachen Pflanze, dann öffne Jena dein Herz und Sie wird dich erretten!";
$texte_stele_karavan_2 = "Der Sage nach bewohnten die Ahnen der Homins in vergangenen Zeiten einen öden Planeten. Der große Drache, Prinz der Finsternis, verführte sie mit Trugbildern von reinem Wasser und fruchtbarer Erde. Er führte die Homins auf das versprochene Land von Atys, wo er die Sonne gefangen nahm. Der Planet fiel in Kälte und Dunkelheit. Statt eines wunderbaren Landes und der Freiheit lernten die vom Drachen betrogenen Völker Trostlosigkeit und Sklaverei kennen.</ul><br><ul>Jena, die Göttin der Sonne und Mutter allen Lebens, schenkte ihnen Erlösung. Die Schöpferin von Atys erhielt Nachricht von der Hinterhältigkeit des Drachen und flößte ihm ewiges Feuer ein. So konnte der Drache das kalte Klima nicht aufrecht erhalten und das Licht des Lebens nicht weiter verbergen. Die Göttin ließ anschließend das Licht wieder auferstehen. Die Zeit des Grünen Erwachens brach an und Atys verwandelte sich in einen üppigen grünen Planeten. Die versklavten Völker waren vom Drachen erlöst, der sich in das tiefste Innere des Planeten zurückzog. So erschuf Jena die Homins.</ul><br><ul>Jena richtete sich an ihre Jünger, die Auserwählten der Karavan, die zwischen den Sternen reisten und ihr im Kampf gegen den Drachen zur Seite standen. Die Göttin betraute sie mit der Aufgabe, die Homins zu führen, auf dass das Volk gedeihe, frei vom Einfluss des Drachens, der im Inneren von Atys schlummerte. Die Karavan half den Homins, sich an verschiedenen Orten auf dem Planeten anzusiedeln, damit jedes Volk auf seine Weise die Zukunft von Atys errichten konnte.";
$texte_stele_karavan_3 = "Der Drachen war besiegt, aber sein unheilvolles Erbe bedrohte Atys weiter. Als Jena den scheußlichen Drachen mit dem Feuer der Sonne erfüllt hatte, krümmte sich die Bestie vor Schmerzen und spie ihren flammenden Atem über den gesamten vereisten Planeten. Der feurige Atem ließ den Urschlamm von Atys wieder aufleben, der bis dahin unter den Eisschichten verborgen lag. Jena überflutete den Planeten mit ihrem Licht, und der fruchtbare Boden keimte wie ein Feuerwerk.</ul><br><ul>Während des Grünen Erwachens umschlangen die Urwurzeln von Atys den Drachen. Er versuchte sich zu befreien, indem er das Sonnenfeuer ausspie und den neu geborenen Wald zu Asche versengte, aber das Wunder des Lebens war stark, und das Feuer erlosch unter dem Gewicht des Blattwerks. Erschöpft floh der besiegte Drache in die Dunkelheit einer Pflanzenhöhle im tiefsten Inneren des Planeten und schlief ein. Die Asche, die vom Feuer des Drachen zurückblieb, verteilte sich auf ganz Atys. Sie vermischte sich mit den Sapflüssen, mit den Pollen der Riesenblumen, mit den Sporen der Pilze.</ul><br><ul>Sie setzte sich in den Spalten der Urrinde fest. Als das Grüne Erwachen vorbei war, befand sie sich überall. Sie enthielt die Reste der Wut des Drachen. Alle Wesen von Atys tragen die drakonische Asche in sich. Die Luft, die Pflanzen und der Regen sind von ihr durchdrungen. Sie ist unsichtbar, hat keinen Geruch oder Geschmack und findet sich als winzige Partikel im Atem aller Lebewesen wieder.</ul><br><ul>Die Auserwählten der Karavan, deren Reinheit nicht vom Drachen beschmutzt ist, werden durch heilige Rüstungen vor der Asche geschützt. Würden sie die drakonische Asche einatmen, dann wären sie dem Atem des Drachen schutzlos ausgeliefert.";
$texte_stele_karavan_4 = "Als Jena ihre Jünger mit dem Schutz der Homins beauftragte, wurde eine Prophezeiung verkündet. Eines Tages würde der große Drachen, der in den Tiefen von Atys schlief, wieder erwachen. Vom ewigen Feuer in seinem Inneren aufgezehrt würde er seinen Qualen und seiner Existenz ein Ende bereiten, indem er alles Feuer in seinem Körper ausspeien und Atys so vernichten würde. Am Tag des Gerichts werden Jena und ihre heiligen Propheten von jenseits der Sterne kommen. Sie werden die Homins erretten, die den Lehren der Göttin treu waren, und sie in den Himmel bringen, wo sie die Auserwählten der Karavan treffen.</ul><br><ul>Homins, die die Allgewalt Jenas nicht anerkennen, werden in den Flammen des Drachen umkommen und mit ihm untergehen. Den Geretteten wird eine neue Welt des Wohlstands eröffnet, wo sie auf ewig im Licht der Göttin leben.</ul><br><ul>Einzig Jena weiß, wann der Drache erwacht, um seinen letzten Atem der Zerstörung auszustoßen. Jeder Tag, der vergeht, bringt Atys seinem unabwendbaren Ende näher. Doch dieses Ende darf nicht unvorsichtig herbeigeführt werden.</ul><br><ul>Auch wacht die Karavan darüber, dass ihre Getreuen sich nicht in die tiefsten Schichten von Atys begeben. In die Tiefen des Planeten hinab zu steigen bedeutet, sich dem Drachen zu nähern, dessen unruhiger Schlaf von schrecklichen Träumen gestört wird. Diese Träume der Finsternis können das Licht der Jena aus den Herzen der Homins stehlen und ihre Seele verschlingen.Die Karavan erlaubt ihren Anhängern jedoch, in die oberen Schichten der Urwurzeln einzudringen, wenn es notwendig ist.";
$texte_stele_karavan_5 = "Dunkle Kräfte beherrschen das Universum, und Atys ist vor ihrem Einfluss nicht geschützt. Um ihre Kinder zu befreien, hat Jena ihre Schlacht gegen den Verderben bringenden Drachen geführt.</ul><br><ul>Andere Feinde lauern im Dunkeln, und die Getreuen der Göttin müssen vor ihnen gewarnt werden. Die Kamis und ihr Oberhaupt Ma-Duk sind die größte Bedrohung für die Zukunft der Hominheit. Diese Dämonen wollen sich der Homins bemächtigen, um sie zu versklaven und zu gefügigen Dienern zu machen, welche für das Überleben von Ma-Duk geopfert werden.</ul><br><ul>Elias Tryton, ein Prophet, der vom Drachen vergiftet wurde, ist wieder auf Atys erschienen und versucht, die Homins zu beeinflussen. Er ist für den Großen Schwarm verantwortlich: Er entfesselte die Wut der Kitins, um die Homin-Kulturen zu vernichten und öffnete die magischen Pforten, um die Überlebenden in die Finsternis der Urwurzeln zu schicken. Doch unterschätzte er die Macht der Karavan, die der Invasion ein Ende setzte, und das Licht der Jena in den Herzen der vertriebenen Homins erhielt.</ul><br><ul>Die Kitins stellen eine weitere Bedrohung für die Homins dar. Diese Monster, die die alten Kulturen beim Großen Schwarm vernichteten, wurden aus den Schuppen des Drachen geboren. Im Inneren von Atys gediehen sie und breiteten sich dann über die gesamte Rinde aus. Die Karavan überwacht jede Bewegung des Schwarms, bereit, bei einer massiven Invasion einzuschreiten.</ul><br><ul>Die Primitiven sind entartete Kreaturen, geboren aus den vom Drachen verdorbenen Homins. Sie sind überaus aggressiv und greifen alle Homins an, die ihren Weg kreuzen. Sie vermehren sich rasch, und es haben sich einige Klans von intelligenteren Primitiven gebildet. Die Karavan kann nicht erlauben, dass solche Kreaturen den Völkern schaden, für die sie verantwortlich ist.</ul><br><ul> Das Goo ist eine Bedrohung, die den Auserwählten Jenas nicht entgangen ist. Allmählich verschlingt sie den Planeten und vergiftet die Ressourcen von Atys. Auch die Karavan versucht, sich des Goos zu entledigen. Deshalb studiert sie es, um mehr über seine Schwächen zu erfahren. Und schließlich sind auch einige Homins ihresgleichen Feind. Die Karavan ist wohlwollend, aber sie toleriert nicht, dass ihre Getreuen Fanatikern zum Opfer fallen, die nicht zögern, sie zu töten und auszuplündern. Die Homins müssen sich mit Hilfe der Karavan unter dem Licht Jenas vereinigen, um gegen ihre Feinde zu kämpfen. So wird ihnen der Sieg sicher sein.";
$texte_stele_karavan_6 = "Die Kamis sind Dämonen, die aus der drakonischen Asche geboren wurden und sich überall auf Atys verbreitet haben. Ein Großteil dieser eigentümlichen Kreaturen ist von der alten Wut des Drachen erfüllt. Deshalb sind die Kamis wild, unberechenbar und gefährlich.Sie sind von den natürlichen Ressourcen von Atys besessen und der Überzeugung, sie würden ihnen gehören. Ohne Zögern töten sie jeden, der ihre Verbote missachtet.</ul><br><ul>Das Oberhaupt der Kamis, der Dämon Ma-Duk, konnte einige Homins davon überzeugen, er sei der göttliche Schöpfer von Atys. Mit der Kraft von Magie und Täuschung schuf er einen religiösen Orden, eine Sekte, die glaubt, für das Wohl der Homins und des gesamten Planeten zu wirken.Sie wären entsetzt, würden sie die wahren Absichten ihrer falschen Gottheit erfahren. Denn das Ziel von Ma-Duk ist, sich der Homins zu bemächtigen, um sie nach seinem Bild umzuformen und für immer an Atys zu binden, wo sie dazu verdammt wären beim Erwachen des Drachen mit ihm umzukommen.</ul><br><ul>Eine andere erschreckende Wahrheit: Ma-Duk wird vom Goo zerfressen. Um seine Lebenskraft zu verlängern, verschlingt er die Seelen und Köper der Homins, die ihm folgen, wie ein Monster.</ul><br><ul>Die Karavan hofft, die von den Lügen Ma-Duks getäuschten Homins zu retten. Sie versucht, ihnen ihren Irrtum vor Augen zu führen und sie aus der Finsternis zu leiten, damit sie das klare Licht der Jena wieder finden. Doch einige wollen nicht gerettet werden und tun alles, um bei ihrem Untergang andere Homins mit sich zu reißen. Die Konfrontation ist unvermeidbar.";
$texte_stele_karavan_7 = "Die Karavan ist eine spirituelle Führerin: Sie hat den Homins die Botschaften Jenas überbracht, der Göttin, die sie vor der Vernichtung durch den Drachen erretten wird. Sie erweckt den Geist der Homins nach dem Willen der Göttin. Sie schlägt Pakte vor, die den Homins erlauben, sich zu teleportieren und die Schatten zu vertreiben, die über ihnen schweben, wenn sie von den Pforten des Todes zurück kehren.</ul><br><ul>Die Karavan ist eine großzügige Lehrmeisterin: Sie half den Homins, ihre Künste zu entwickeln. Die Geheimnisse des Magnetismus, der Schrift, der Botanik, die Grundlagen des Geldsystems und die Beherrschung des Feuers sind Gaben, die die Karavan den Homins überbrachte. Sie belohnt ihre würdigsten Getreuen, indem sie ihnen Techniken beibringt, ihnen angesehene Titel verleiht und ihnen Gegenstände ihrer machtvollen Technologie schenkt.</ul><br><ul>Die Karavan ist eine visionäre Baumeisterin: Sie half den Homins beim Aufbau ihrer Kulturen. Sie unterstützte sie beim Wiederaufbau nach dem Großen Schwarm, indem sie Bohrmaschinen auf den Außenposten einrichtete, um eine ausreichende Versorgung mit Ressourcen sicherzustellen.</ul><br><ul>Die Karavan ist eine felsenfeste Wächterin: Sie bekämpfte die Kitins während des Großen Schwarms und setzte ihrer Invasion ein Ende. Sie kämpft gegen die Kamis, die die Homins in Dämonen verwandeln wollen, und gegen Elias Tryton, der die Völker von Atys für seine eigenen finsteren Zwecke benutzen will. Sie studiert das Goo, um es so kontrollieren zu können, dass es keine Bedrohung mehr darstellt. Sie schlägt sich gegen die blinde Gewalt der Primitiven. Sie versucht, die Homins vor dem unheilvollen Einfluss des Drachen zu schützen. Die Karavan strebt für Ordnung gegen die Anarchie, sie blickt in die Zukunft statt in die Vergangenheit. Sie wird die Homins zur Rettung führen, im Ruhm und Licht Jenas.";
$texte_stele_karavan_8matis = "In alten Zeiten waren die Matis die stärksten Alliierten der Karavan. Der erste Homin, dem Jena erschien, war der Matis Zachini, der später zum Monarchen des Königreichs Matia aufstieg.</ul><br><ul>Die heilige Stadt Karavia wurde an dem Ort der göttlichen Erscheinung errichtet, an dem Zachini die Gebote Jenas aus den Händen der Karavan entgegennahm. Das Licht der Göttin verbreitete sich daraufhin dank der Ehrfurcht des Königs Zachini unter den Homins.</ul><br><ul>Die Karavan half den Matis, ihre Kultur zu errichten und spornte sie immer zu Höchstleistungen an. Sie enthüllte ihnen die Geheimnisse der lebenden Materie, damit sie ihrer Kreativität freien Lauf lassen konnten. So wurde die Kunst, Flora und Fauna zu manipulieren, zu einer der Grundlagen der Matis-Kultur.</ul><br><ul>Die Matis kämpften entschlossen gegen Jenas Feinde: Sie setzten der Bedrohung durch die Primitiven in den alten Wäldern ein Ende und unterstützen die Karavan im Kampf gegen die Kami-Dämonen. Die Loyalität und Ausdauer der Matis-Krieger machte sie zu den nobelsten Meistern im Dienste der Göttin.";
$texte_stele_karavan_8tryker = "Seit Anbeginn ihrer Geschichte wurden die Tryker schweren Prüfungen unterzogen, die sie stets erhobenen Hauptes bestanden haben. Jena und die Auserwählten der Karavan waren an ihrer Seite.</ul><br><ul>Als das Volk der Tryker zu Beginn seiner Existenz versklavt wurde, schritt Jena ein, um sie zu befreien. Als die Kamis die Tryker im Stich ließen, um in den Urwäldern von Atys zu verschwinden, führte die Karavan das Volk von den Seen auf den Weg des Lichts.</ul><br><ul>Die Karavan unterstütze die Tryker in der Entwicklung ihrer Kultur. Sie enthüllte dem Seenvolk die Geheimnisse der Macht der Winde. Sie gab ihren Segen zur Einführung des ersten Geldes, der Dapper, und förderte den gerechten Handel. Die Kunsthandwerker der Tryker konnten unter dem Wohlwollen der Karavan mit zahlreichen Erfindungen experimentieren, die das Leben aller verbesserten.</ul><br><ul>Die Tryker sind ein eifriges Volk, das leidenschaftlich für die Verteidigung seiner Freiheit kämpfte. Die Karavan konnte immer auf sie zählen, um gegen die dunklen Mächte zu kämpfen, die Atys zu verschlingen drohen.";
$texte_stele_karavan_8fyros = "Die Fyros sind ein stolzes und unabhängiges Volk, und seine Beziehungen zur Karavan sind oft von Misstrauen überschattet. Dennoch sind die Fyros wie alle Homins Kinder Jenas. Sie sind sich der Gegenwart des Drachen besonders bewusst: Sie versuchen, ihn zu vernichten, um der Bedrohung unwiderruflich ein Ende zu setzen. Indem sie dem von der Karavan vorgezeichneten Weg folgen, sind die Fyros als Wächter und Beschützer von Atys auserkoren.</ul><br><ul>Vor sehr langer Zeit enthüllte die Karavan den Fyros ein großes Geheimnis: die Herrschaft über das Feuer. Dank der Unterweisungen der Auserwählten der Jena wurden die Fyros unbestrittene Meister des Feuers, setzten es für ihr Kunsthandwerk ein und bändigten es wie ein wildes Tier, um sich seiner gegen ihre Feinde zu bedienen.</ul><br><ul>Die Karavan half den Fyros auch bei der Errichtung ihrer Kultur, indem sie ihnen Bautechniken zeigte, mit deren Hilfe sie große Städte wie Fyr, die Stadt der Flammen, errichteten. Das Volk der Wüste erkämpfte sich seinen Platz, ein Schwert in der Hand.</ul><br><ul>Als standhafte Krieger haben die Fyros kein Mitleid mit ihren Feinden. Das Feuer, das sie belebt, ist das Feuer der Sonne. Ihr Platz ist an der Seite Jenas.";
$texte_stele_karavan_8zorai = "In den Augen zahlreicher Homins sind die Zoraï ein geheimnisvolles Volk. In alten Zeiten lebten sie tief im Dschungel, geschützt vor den Gefahren, von denen die anderen Homins heimgesucht wurden.</ul><br><ul>Die Zoraï suchten die Weisheit, und die Liebe Jenas berührte sie tief in ihrer Seele. Leider wurden viele von ihnen mit falschen Versprechungen von den Kamis in die Irre geführt und viele Zoraï wandten sich von ihrer Mutter und der Karavan ab.</ul><br><ul>Um die Zoraï wieder auf den Weg des Lichts zu führen, weihten die Auserwählten der Karavan sie in die Geheimnisse des Magnetismus ein. Sie lehrten sie die Grundzüge der Schreibkunst mit Zeichen auf Papyrus. Doch die Macht der verderblichen Dämonen war groß, und die Nebel der Magie verdunkelten den Geist der Zoraïs. Die Karavan verlor jedoch nie die Hoffnung, sie zu zerstreuen.</ul><br><ul>Im unerbittlichen Kampf gegen die Plage des Goo träumten die Zoraï lange von einer Welt der Harmonie. Diese Welt existiert. Sie ruht in den Händen Jenas. Eines Tages werden die Masken der Zoraï fallen und das Licht der Göttin wird ihr Angesicht erhellen.";
$texte_stele_karavan_9 = "An diesem Ort wurde ein Tempel Jenas errichtet. Dieser Tempel ist eines der heiligen Gebäude der Kirche des Lichts, wo die Homins im Dienste der Karavan sich versammeln. Hier finden sie, was sie suchen: den Mut, ihr Schicksal zu erfüllen, die Liebe der Göttin und Frieden für ihre Seelen.</ul><br><ul>Die Kirche des Lichts, die sich aus Homins unter der Führung der Karavan zusammensetzt, wurde einige Jahre nach der ersten Erscheinung Jenas gegründet. Beim Großen Schwarm wurde sie zerstört. Der Wiederaufbau der Kulturen und die Ansiedlung der Homins auf der neuen Erde erforderten viel Zeit und zahlreiche Opfer. Nach mehreren Jahrzehnten errichtete man neue Tempel, um die Göttin mit der Ihr gebührenden Pracht zu ehren.</ul><br><ul>Homin, sei willkommen in Jenas Tempel! Die Göttin der Sonne, Mutter allen Lebens, ist liebreich und gastfreundlich. Lass dich von ihrem Licht erfüllen und bereite deine Seele auf den Tag des Gerichts vor, damit sie zu den Sternen aufsteigen kann.";
$texte_stele_karavan_10 = "Hier sind die zehn Gebote der Jena niedergeschrieben, so wie sie dem König Zachini durch die Göttin dargebracht, und wie sie durch die heilige Karavan übermittelt wurden.</ul><br><ul>Erstes Gebot: Ich, Jena, bin eure Göttin, Schöpferin und Mutter. Ihr wurdet nach meinem Bild geschaffen. Liebt eure Göttin so wie ihr euch selbst liebt.</ul><ul>Zweites Gebot: Betet keine anderen Götter an.</ul><ul>Drittes Gebot: Lehrt eure Kinder meine Liebe, so wie ich euch meine gebe.</ul><ul>Viertes Gebot: Ehrt meine Jünger. Sie sind die Herolde meiner Gesetze, und sie wurden gesandt, um eurer Wohl zu schützen.</ul><ul>Fünftes Gebot: Steigt nicht in die Tiefen von Atys herab, wo das heilige Licht eure Herzen verlässt und die Finsternis des Drachen eure Seelen verschlingt.</ul><ul>Sechstes Gebot: So wie das Blatt eines Baumes auf den Boden fällt, der die Lebenskraft birgt, so wird eure Seele bei eurem Tode zu mir gebracht. In der Kraft eures Glaubens werdet ihr mit meinem Segen wieder geboren oder ihr verrottet in schrecklichen Qualen.</ul><ul>Siebtes Gebot: Verkündet meine Ankunft, und meine Liebe wird in euren Herzen wachsen.</ul><ul>Achtes Gebot: Bemächtigt euch nicht des Gesetzes, oder am Tag des Gerichts werdet ihr in Sünde fallen.</ul><ul>Neuntes Gebot: Strebt danach, in mein Königreich zu gelangen und ich werde euch entgegenkommen.</ul><ul>Zehntes Gebot: Wenn ihr die Reinheit eures Glaubens bewiesen habt, erwartet euch die Rettung und ihr werdet Jünger des Vertrauens.";
?>

@ -1,59 +0,0 @@
<?php
$titre = "Knowledge Column -";
$TITLE_karavan = "THE TEMPLE OF JENA";
$texteDefault = "choose a text in the menu";
$menu1 = "THE MESSAGE OF THE KARAVAN";
$menu2 = "THE BIRTH OF HOMINITY";
$menu3 = "THE DRACONIC ASHES";
$menu4 = "THE PROPHECY";
$menu5 = "THE ENEMIES OF JENA";
$menu6 = "MA-DUK THE IMPOSTER";
$menu7 = "THE GOOD WORKS OF THE KARAVAN";
$menu8matis = "THE KARAVAN AND THE MATIS";
$menu8tryker = "THE KARAVAN AND THE TRYKER";
$menu8fyros = "THE KARAVAN AND THE FYROS";
$menu8zorai = "THE KARAVAN AND THE ZORAI";
$menu9 = "THE CHURCH OF LIGHT";
$menu10 = "THE COMMANDMENTS OF JENA";
$texte_stele_karavan_1 = "We are the disciples of Jena, the Goddess of Atys and Mother of Hominity. We have been sent to watch over Her children to give them guidance should they lose their way, and to prepare them for divine elevation on the judgment day. Be sure, that day is near, homin!</ul><br><ul> Adore Jena and She will lead you through the pearly gates to a world of plenty, away from the dragon and the kitins, away from the evil Kamis! Beware, these creatures are more concerned with festering plants than with homin life. They will possess your soul just to nourish their selfish desire of self-preservation if you let them!</ul><br><ul>Never forget, like me, you were made in Jena's image, and faith in Her must prevail in your heart for you to receive divine grace when Atys can no longer support homin life. In return for your devout offerings, She has invested us with divine authority to resurrect your spirit, to teleport you to distant lands, and to teach you how to wield our technology. </ul><br><ul>If, like us, you consider that a homin life is worth more than a simple plant, open your hearts to Jena, and She will be your Savior!";
$texte_stele_karavan_2 = "It is said that long ago, the ancestors of the homins inhabited an impoverished planet. The Great Dragon, the prince of shadows, came to entice them with visions of pure water and fertile lands. He led them to the promised land of Atys, where he hid the sun, plunging the planet into cold and darkness. Indeed, instead of a land of wonders and of freedom, the people tricked by the Dragon experienced desolation and slavery.</ul><br><ul>Jena, the sun goddess and Mother of all life, granted them deliverance. The creator of Atys heard of the perfidy of the Dragon and filled him with an eternal fire. That way, the dragon could no longer maintain a cold climate and extinguish the light of life. The Goddess then caused the light to be reborn, causing the green to grow and transforming Atys into an amazing planet of plants. The enslaved people were purified and set free from the Dragon, who withdrew into the depths: and this is how Jena gave birth to hominity.</ul><br><ul>Jena then turned to her disciples, the Elect of the Karavan, who were traveling among the stars and had witnessed the combat with the Dragon. The Goddess gave them the task of guiding the homins so that they would prosper, protected from the influence of the Dragon, who slept in the bowels of Atys. The Karavan helped the homins settle at various locations around the planet, so that each could build the future of Atys in their own way.";
$texte_stele_karavan_3 = "The Dragon was defeated, but he left his mark on Atys. When Jena filled the shadowy Dragon with the fire of the sun, the Beast twisted in pain and spit his flaming breath all across the frozen planet. Under the heat of his fiery breath, the primal ooze of Atys, which the Dragon had buried under a wasteland of ice, emerged once again. Then Jena flooded the planet with her Light, and the fertile soil sprouted with a miraculous frenzy of life.</ul><br><ul>The Dragon was caught in the roots of Atys during the Green Rising. He attempted to escape by spitting the sun fire, and reducing the new wood to ash, but the miracle of life was far too strong, and the fire was smothered under the weight of many unfolding leaves. Exhausted and defeated, the Dragon took refuge in the darkness of a plant cavern, in the depths of the planet, and finally went to sleep. The ashes that came from the Dragon's fire were scattered all over the surface of Atys. They blended with the rivers of sap, the pollen from the giant flowers, and the spores of the ancestral mushrooms.</ul><br><ul>They stuck to the lines of primeval bark. When the Green Rising came to a stop, they were everywhere. And they contained the remains of the Dragon's wrath. All beings on Atys carry traces of the draconic ashes. They are in the air, in the plants and in the rain. They are invisible, odorless and tasteless, infinitely tiny particles of dust breathed in by all living creatures.</ul><br><ul>The Elect of the Karavan, who are above any stains of impurity from the Dragon, protect themselves from the ashes by wearing sacred armor. For them, to breathe the draconic ashes would be tantamount to opening up to the breath of the Dragon.";
$texte_stele_karavan_4 = "When Jena gave her disciples the mission of guiding the homins, a prophecy was pronounced. One day, the Great Dragon sleeping in the depths of Atys would awaken. Consumed by an eternal inner flame, he will put an end to his torment and his very existence by spitting out all of the fire in his body, which will destroy Atys. On the day of judgment, Jena and her sacred prophets who came from beyond the stars will be there. They will save the homins who have been loyal to the teachings of the Goddess and carry them off into the sky to join the Elect of the Karavan.</ul><br><ul>The homins who continue to deny that Jena is the all-powerful Goddess will perish in the flames of the Dragon and disappear along with him. And those who have been saved will be transported to a new world of abundance, where they will live in the Light of the Goddess for all of eternity.</ul><br><ul>Only Jena knows when the Dragon will wake up to breathe out his ultimate destructive breath. Every passing day brings Atys closer to the inevitable end. But this end must not be hastened by imprudence.</ul><br><ul>So the Karavan are watching out to make sure that the faithful do not venture into the deeper layers of Atys. To descend into the bowels of the planet is to approach the Dragon, whose sleep is tormented by terrifying dreams. These shadowy dreams can push the light of Jena away from the hearts of homins, and devour their souls. Nevertheless, the Karavan still permit their followers to go down into the upper levels of the Prime Roots if there is a valid reason for going there.";
$texte_stele_karavan_5 = "There are dark forces in the universe, and Atys is not beyond their reach. Jena has already done battle against the evil Dragon in order to liberate her children.</ul><br><ul>There are other enemies lurking in the shadows, and the followers of the Goddess must beware. The Kamis and their leader Ma-Duk are the greatest threat to the future of hominity. These demons seek to possess the homins in order to subjugate them and turn them into docile servants who will be sacrificed for the survival of Ma-Duk.</ul><br><ul>Elias Tryton, a fallen prophet who was corrupted by the Dragon, has reappeared on Atys and tries to influence the homins. He is the one behind the Great Swarming, unleashing the anger of the Kitins to demolish homin civilizations, he opened magic portals to send the survivors into the shadows of the Prime Roots. He underestimated the strength of the Karavan, who ended the invasion and protected the light of Jena in the hearts of the exiled homins.</ul><br><ul>The Kitins are another threat to hominity. These monsters that swept away the ancient civilizations during the Great Swarming were born of the scales of the Dragon. They prospered in the depths of Atys before spreading out over the Bark. The Karavan keep an eye on the swarm and stand ready to intervene if there are any massive invasions.</ul><br><ul>The primitives are degenerate creatures, born of homins that have been corrupted by the Dragon. They are highly aggressive and attack any homins that cross their path. Their numbers are growing, and there are reports of some clans of primitives with higher intelligence. The Karavan cannot allow such people to harm those in their charge.</ul><br><ul> And the Goo is a threat that cannot escape the Elect of Jena either. It is slowly devouring the planet and polluting her resources. So the Karavan wish to get rid of it. In order to do so, they are studying it so they can find its weak points. And finally, there are also homins who turn out to be enemies to their own kind.</ul><br><ul>The Karavan are generally benevolent, but they cannot allow their followers to fall prey to fanatics who are ready to kill and pillage. Karavan homins must unite in the light of Jena to fight their enemies this is how they will achieve victory.";
$texte_stele_karavan_6 = "The Kamis are demons born of the draconic ashes that are omnipresent on Atys. A large portion of the essence of these strange creatures is influenced by the ancient wrath of the Dragon: this is why the Kamis are savage, unpredictable and dangerous. They are obsessed with the natural resources of Atys, which they consider to be their own property, and they don't hesitate to kill any prospectors who defy their restrictions.</ul><br><ul>The head of the Kamis is a demon named Ma-Duk and he has convinced some of the homins that he is the creator of Atys. With magic and trickery, he has created a veritable religious order around himself. This is a sect that believes it works for the good of homins and the entire planet. If they realized the true purpose of their false divinity, the followers would scream in horror. Indeed, the goal of Ma-Duk is to assimilate homins to transform them into his own likeness and bind them to Atys forever, condemning them to perish along with him when the Dragon awakens.</ul><br><ul>Another terrible truth is that Ma-Duk is threatened by the terrible Goo that eats away at him. In order to prolong his own life force, Ma-Duk gradually devours the bodies and souls of the homins that follow him, like a monstrous parasite.</ul><br><ul>The Karavan hope to save the homins who have been fooled by the lies of Ma-Duk. They try to make them see the error of their ways and lead them out of the shadows, so they may return to the light of Jena. But there are some who do not want to be saved, and who do everything they can to drag other homins to their downfall. In such cases, a confrontation is inevitable.";
$texte_stele_karavan_7 = "The Karavan provide spiritual guidance: they have given the homins the messages of Jena, the Goddess who will save them from destruction when the Dragon awakens. They resurrect the spirits of homins in accordance with the will of the Goddess. They offer pacts that enable homins to teleport or to dissipate the shadow that floats over them when they return from the gates of death.</ul><br><ul>The Karavan are generous mentors: they have helped homins develop their crafts. The Karavan have revealed to them all the secrets of magnetism, writing, botany, the foundations of a monetary system, the mastery of fire. They reward their most meritorious followers by teaching them certain techniques, granting them prestigious titles and giving them object produced by their powerful technology.</ul><br><ul>The Karavan are visionary builders: they have participated in the construction of homin civilizations. They helped to rebuild after the Great Swarming, setting up mining machinery at the furthest outposts to provide plentiful resources.</ul><br><ul>The Karavan are loyal guardians: they fought the Kitins during the Great Swarming, putting an end to their invasion. They fight against the Kamis, who want to transform homins into demons, and against Elias Tryton, who wants to use the people of Atys for his own obscure purposes. They study the Goo in order to understand it and control it, so it will no longer be a threat. And they fight against the blind violence of the primitives. They try to protect homins from the harmful effects of the Dragon. The Karavan work to maintain order above anarchy, and they look towards the future rather than the past. They will lead the homin people to fulfillment, in the glory and light of Jena.";
$texte_stele_karavan_8matis = "In ancient times, the Matis people were the greatest allies of the Karavan. The first homin that Jena caused to appear was a Matis, Zachini, who then became the monarch of the Matia kingdom.</ul><br><ul>The holy city of Karavia was built at the site of the divine apparition, where Zachini received the commandments of Jena from the hands of the Karavan. The light of Goddess worship spread among the homins thanks to the piety of King Zachini.</ul><br><ul>The Karavan helped the Matis build their civilization, always urging them towards excellence. They then revealed the secrets of living matter, so that they could let their creativity flourish. Thus was born the art of manipulation of the flora and fauna, one of the foundations of Matis culture.</ul><br><ul>The Matis have fought fiercely against the enemies of Jena: they have ended the threat of the primitives in the ancient forests, and they have helped the Karavan in their fight against the Kamis demons. The loyalty and perseverance of the Matis warriors makes them the most noble champions of the Goddess.";
$texte_stele_karavan_8tryker = "Since the beginning of their history, the Trykers have overcome difficult trials, but they have always managed to keep their dignity. Jena and the Karavan Elect have always been at their sides.</ul><br><ul>When the Tryker people were reduced to slavery during the dawn of their existence, Jena intervened to liberate them. When the Kamis abandoned the Trykers and disappeared into the jungles of Atys, the Karavan stepped in to guide the lake people onto the path of light.</ul><br><ul>The Karavan provided help with the development of Tryker civilization. They revealed the secrets of wind power to these people of the lakes. They gave their blessings to the creation of the first currency, dappers, encouraging new, more equitable, commercial exchange. Under the benevolent guidance of the Karavan, the Tryker crafters were able to try out many new inventions that have improved life for all.</ul><br><ul>The Trykers are enthusiastic people who have fought bravely to defend their freedom. The Karavan have always been able to count on them on many occasions to fight against the shadows that threaten to swallow Atys.";
$texte_stele_karavan_8fyros = "The Fyros are proud, independent people, and their relations with the Karavan have often been marked by wariness. However, the Fyros, like all homins, are the children of Jena. They are also keenly aware of the presence of the Dragon: they wish to destroy it in order to end the threat that it poses to their existence. By following the path shown by the Karavan, the destiny of the Fyros is to become the guardians of Atys sentinels whose vigilance is unmatched.</ul><br><ul>Long, long ago, the Karavan revealed a great secret to the Fyros: how to control fire. Thanks to the teachings of the Jena Chosen Ones, the Fyros became unrivaled masters of fire, using it in their crafts, or taming it like a wild animal in order to use it as a weapon against their enemies.</ul><br><ul>The Karavan also helped them build their civilization, by teaching them construction techniques that enabled them to build large cities like Fyr, the city of a torches. The desert people have carved out a place for themselves, sword in hand.</ul><br><ul>As intrepid warriors with unfailing honor, the Fyros are merciless with their enemies. They are fueled by the fire of the sun, and their place is alongside Jena.";
$texte_stele_karavan_8zorai = "In the eyes of many homins, the Zoraïs are a mysterious people. In ancient times, they lived deep in the jungle, far from the turbulence that drove other homins.</ul><br><ul>The Zoraïs were seeking wisdom, and the love of Jena touched the very depths of their souls. Unfortunately, the Kamis enticed many of them with false promises, and many Zoraïs turned away from their Mother and from the Karavan.</ul><br><ul>In order to bring the Zoraïs back to the pathways of light, the Karavan Chosen Ones taught them the secrets of magnetism. Thy taught them to draw signs on papyrus, revealing the principles of writing. But the grip of the evil demons was strong, and the mists of magic darkened the spirits of the Zoraïs. Still, the Karavan have never abandoned hope of dissipating this darkness.</ul><br><ul>Fighting courageously against the plague of Goo, the Zoraïs have long dreamed of a world of harmony. This world exists, in the hands of Jena. Someday, the Zoraïs' masks will fall, and the light of the Goddess will shine on their faces.";
$texte_stele_karavan_9 = "In this place was built a temple to Jena. This temple is one of the sacred houses of the Church of Light, where the Karavan homin can gather. Here, they will find what they need: the courage to fulfill their destiny, the love of the Goddess, and peace in their souls.</ul><br><ul>The Church of Light, made up of homins under the guidance of the Karavan, was built a few years after the appearance of Jena. It was dispersed during the Great Swarming. The reconstruction of civilizations and relocation of homins in new lands took a long time and many sacrifices. After several decades, new temples were built, to honor the Goddess with due magnificence.</ul><br><ul>Homin, welcome to the temple of Jena! The Sun Goddess, Mother of all life, is loving and welcoming. Be bathed in her light, and prepare your soul for the day of judgment, so that she may lift you up to the stars.";
$texte_stele_karavan_10 = "Here are written the ten commandments of Jena, as they were revealed to King Zachini by the Goddess, and transmitted by the holy Karavan.</ul><br><ul>First Commandment: I, Jena, am your Goddess, the Mother Creator, and you were created in my image. Love your Goddess as you love yourselves.</ul><ul>Second Commandment: You shall worship no other gods.</ul><ul>Third Commandment: Teach your children of my love, as I teach you.</ul><ul>Fourth Commandment: Honor my disciples, they are the heralds of my laws and have been sent to protect your well-being.</ul><ul>Fifth Commandment: You shall not descend into the bowels of Atys, for fear that the Light may leave your heart and the shadows of the Dragon may devour your soul.</ul><ul>Sixth Commandment: Like the leaf of a tree that falls to the ground which gives the power of life, your soul will be called back to me when you die. Depending on the strength of your faith, you will either be reborn with my blessings or you will rot in atrocious torment.</ul><ul>Seventh Commandment: Announce my coming and my love will grow in your hearts.</ul><ul>Eight Commandment: Do not take the law into your hands, for fear of falling into sin on the day of judgment.</ul><ul>Ninth Commandment: Seek to return to my kingdom, and I will meet you halfway.</ul><ul>Tenth Commandment: Once you have proven that your faith is pure, you will attain the joy of elevation and thereby become a trusted disciple.";
?>

@ -1,61 +0,0 @@
<?php
$titre = "Colonne du Savoir -";
$TITLE_karavan = "LE TEMPLE DE JENA";
$texteDefault = "choisissez un texte dans le menu";
$menu1 = "LE MESSAGE DE LA KARAVAN";
$menu2 = "LA NAISSANCE DE L'HOMINITE";
$menu3 = "LES CENDRES DRACONIQUES";
$menu4 = "LA PROPHETIE";
$menu5 = "LES ENNEMIS DE JENA";
$menu6 = "L'IMPOSTURE DE MA-DUK";
$menu7 = "LES BIENFAITS DE LA KARAVAN";
$menu8matis = "LA KARAVAN ET LES MATIS";
$menu8tryker = "LA KARAVAN ET LES TRYKER";
$menu8fyros = "LA KARAVAN ET LES FYROS";
$menu8zorai = "LA KARAVAN ET LES ZORAI";
$menu9 = "L'EGLISE DE LA LUMIERE";
$menu10 = "LES COMMANDEMENTS DE JENA";
$texte_stele_karavan_1 = "<ul>Nous sommes les disciples de Jena, déesse d'Atys et Mère de l'hominité. Nous avons été envoyés pour prendre soin de Ses enfants, leur montrer le chemin dans les moments d'égarement et les préparer à l'élévation divine au Jour du Jugement.Sois-en sûr, ce jour est proche, homin !</ul><br><ul> Adore Jena et elle te guidera à travers les portes du paradis vers un monde d'abondance, loin du Dragon et des kitins, loin des Kamis maléfiques ! Prends garde, ces créatures sont plus concernées par les plantes infectées que par la vie homine. Elles prendront possession de ton âme pour nourrir leur égoïste désir d'auto préservation si tu les laisses faire !</ul><br><ul>N'oublie jamais : comme nous, tu as été créé à l'image de Jena, et la foi que tu lui portes doit emplir ton coeur si tu veux recevoir la grâce divine lorsque Atys ne pourra plus supporter la vie homine.</ul><br><ul>En échange de tes offrandes, elle nous a investis de l'autorité divine pour ressusciter ton esprit, te téléporter vers des terres lointaines et t'apprendre à utiliser notre technologie.</ul><br><ul>Si, comme nous, tu estimes qu'une vie homine est plus importante qu'une simple plante, ouvre ton coeur à Jena, et Elle sera ton Sauveur !</ul>";
$texte_stele_karavan_2 = "<ul>Il est dit que dans des temps reculés, les ancêtres des homins habitaient une planète appauvrie. Le Grand Dragon, le prince des ténèbres, vint les séduire par des visions d'eaux pures et de terres fertiles. Il les mena sur la terre promise d'Atys, où il cacha le soleil, plongeant la planète dans le froid et l'obscurité. En fait de pays merveilleux et de liberté, les peuples trompés par le Dragon connurent la désolation et l'esclavage.</ul><br><ul>Jena, Déesse du soleil et Mère de toute vie, leur apporta la délivrance. La créatrice d'Atys eut vent de la perfidie du Dragon et le remplit d'un feu éternel. Ainsi, le dragon ne pourrait plus maintenir un climat froid et éteindre la lumière de la vie. La Déesse fit ensuite renaître la lumière, provoquant la Poussée Verte et la transformation d'Atys en une incroyable planète végétale. Les peuples esclaves furent purifiés et libérés du Dragon, qui se retira dans les profondeurs : ainsi Jena fit-elle naître l'hominité.</ul><br><ul>Jena s'adressa alors à ses disciples, les élus de la Karavan, qui voyageaient parmi les étoiles et avaient assisté au combat contre le Dragon. La Déesse leur confia la tâche de guider les homins afin qu'ils prospèrent, à l'abri de l'influence du Dragon qui reposait endormi dans les entrailles d'Atys. La Karavan aida les homins à s'installer en différents lieux de la planète, afin que chacun puisse construire à sa façon le futur d'Atys.</ul>";
$texte_stele_karavan_3 = "<ul>Le Dragon a été vaincu, mais il a marqué Atys de son empreinte. Lorsque Jena remplit le Dragon ténébreux du feu du soleil, la Bête se tordit de douleur et cracha son souffle enflammé sur toute la planète glacée. Sous l'action de son souffle, le limon originel d'Atys, que le Dragon avait enfoui sous des gangues de glace, réapparut. Alors Jena inonda la planète de sa Lumière, et le sol fertile germa en un miracle frénétique.</ul><br><ul>Le Dragon se retrouva pris dans les racines d'Atys lors de la Poussée Verte. Il tenta de se dégager en crachant le feu du soleil, réduisant en cendres le bois nouveau-né, mais le miracle de la Vie était trop fort, et le feu fut étouffé sous le poids des frondaisons. épuisé, vaincu, le Dragon se réfugia dans l'obscurité d'une caverne végétale, au plus profond des entrailles de la planète, et finit par s'endormir. Les cendres issues du feu du Dragon furent dispersées sur toute la surface d'Atys. Elles se mêlèrent aux rivières de sève, au pollen des fleurs géantes, aux spores des champignons ancestraux.</ul><br><ul>Elles s'incrustèrent dans les lignes de l'écorce primordiale. Lorsque la Poussée Verte arriva à son terme, elles étaient partout. Et elles contenaient en elles les restes de la colère du Dragon. Tous les êtres d'Atys portent en eux des cendres draconiques. Elles sont dans l'air, dans les plantes, dans la pluie. Elles sont invisibles, sans odeur ni saveur, infimes poussières respirées par les créatures vivantes.</ul><br><ul>Les élus de la Karavan, dont la pureté n'a pas été entachée par le Dragon, se protègent des cendres en s'enfermant dans des armures sacrées. Respirer les cendres draconiques reviendrait pour eux à s'ouvrir au souffle du Dragon.</ul>";
$texte_stele_karavan_4 = "<ul>Lorsque Jena confia à ses disciples la mission de guider les homins, une prophétie fut énoncée. Un jour, le Grand Dragon endormi dans les profondeurs d'Atys s'éveillera. Consumé par un éternel feu intérieur, il mettra fin à ses tourments et à son existence en recrachant tout le feu de son corps, ce qui causera la fin d'Atys. Le Jour du Jugement, Jena et ses prophètes sacrés venus d'au-delà des étoiles seront là. Ils sauveront les homins fidèles aux enseignements de la Déesse et les emporteront dans le ciel pour rejoindre les élus de la Karavan.</ul><br><ul>Les homins qui persisteront à nier la toute puissance de Jena périront dans les flammes du Dragon et disparaîtront avec lui. Alors ceux qui ont été sauvés seront transportés vers un nouveau monde d'abondance, où ils vivront dans la lumière de la Déesse pour l'éternité.</ul><br><ul>Seule Jena sait quand le dragon se réveillera pour exhaler son ultime souffle destructeur. Chaque jour qui passe rapproche Atys de son inéluctable fin. Mais cette fin ne doit pas être hâtée par l'imprudence.</ul><br><ul>Aussi la Karavan veille-t-elle à ce que ses fidèles ne s'aventurent pas dans les couches les plus profondes d'Atys. Descendre dans les entrailles de la planète est se rapprocher du Dragon, dont le sommeil tourmenté est hanté par des rêves effrayants. Ces rêves de ténèbres peuvent éloigner la lumière de Jena du cœur des homins et dévorer leur âme. La Karavan autorise toutefois ses adeptes à descendre dans les profondeurs supérieures des Primes Racines, s'ils ont une raison valable de le faire.</ul>";
$texte_stele_karavan_5 = "<ul>De sombres forces existent dans l'univers, et Atys n'est pas à l'abri de leur influence. Pour libérer ses enfants, Jena a déjà livré bataille contre le Dragon malfaisant.</ul><br><ul>D'autres ennemis guettent dans l'ombre, et les fidèles de la Déesse doivent être mis en garde contre eux. Les Kamis et leur chef Ma-Duk sont la plus grande menace pour l'avenir de l'hominité. Ces démons cherchent à posséder les homins pour les asservir et les transformer en serviteurs dociles, qui seront sacrifiés pour assurer la survie de Ma-Duk.</ul><br><ul>élias Tryton, un prophète déchu qui a été corrompu par le Dragon, a fait sa réapparition sur Atys et tente d'influencer les homins. Il est responsable du Grand Essaim : déchaînant la colère des kitins pour anéantir les civilisations homins, il a ouvert des portails magiques pour envoyer les survivants dans les ténèbres des Primes Racines. Il a sous-estimé la puissance de la Karavan, qui a mis fin à l'invasion, et a préservé la lumière de Jena dans le cœur des homins exilés.</ul><br><ul>Les kitins sont une autre menace pour l'hominité. Ces monstres, qui ont balayé les anciennes civilisations lors du grand Essaim, sont nés des écailles du Dragon. Ils ont prospéré dans les entrailles d'Atys avant de se répandre sur l'écorce. La Karavan surveille de près les mouvements de l'Essaim et se tient prête à intervenir en cas d'invasion massive.</ul><br><ul>Les primitifs sont des créatures dégénérées, nées d'homins corrompus par le Dragon. Ils sont très agressifs et attaquent tous les homins qui croisent leur chemin. Leur nombre tend à s'accroître, et certains clans de primitifs plus intelligents ont été aperçus. La Karavan ne peut laisser de telles créatures nuire aux peuples dont elle a la charge.</ul><br><ul> La Goo est une menace qui n'a pas échappé aux élus de Jena. Elle dévore lentement la planète, polluant les ressources d'Atys. Aussi la Karavan veut-elle s'en débarrasser. Dans ce but, elle l'étudie afin d'en apprendre plus sur ses faiblesses. Enfin, il arrive que des homins soient des ennemis pour leurs semblables.</ul><br><ul>La Karavan se montre souvent bienveillante, mais elle ne peut tolérer que ses fidèles soient la proie de fanatiques qui n'hésitent pas à tuer et piller. Les homins karavaniers doivent s'unir sous la lumière de Jena pour lutter contre leurs ennemis : ainsi seront-ils assurés de la victoire.</ul>";
$texte_stele_karavan_6 = "<ul>Les Kamis sont des démons nés des cendres draconiques, omniprésentes sur Atys. Une grande part de l'essence de ces étranges créatures est influencée par l'ancienne colère du Dragon : c'est pourquoi les Kamis sont sauvages, imprévisibles et dangereux. Ils sont obsédés par les ressources naturelles d'Atys, considérant qu'elles leur appartiennent, et n'hésitent pas à tuer les prospecteurs qui défient leurs interdictions.</ul><br><ul>Le chef des Kamis, un démon qui se fait appeler Ma-Duk, a convaincu certains homins qu'il était le dieu créateur d'Atys. à force de magie et de tromperie, il a créé autour de lui un véritable ordre religieux, une secte qui croit œuvrer pour le bien des homins et de la planète toute entière. S'ils réalisaient le but véritable de leur fausse divinité, ses adeptes hurleraient d'épouvante. En effet, le but de Ma-Duk est d'assimiler les homins pour les transformer à son image et les lier à Atys pour toujours, les condamnant à périr avec lui lors du réveil du Dragon.</ul><br><ul>Autre terrible vérité : Ma-Duk est menacé par la Goo qui le ronge. Pour prolonger sa force vitale, Ma-Duk dévore lentement les âmes et les corps des homins qui le suivent, tel un monstrueux parasite.</ul><br><ul>La Karavan espère sauver les homins trompés par les mensonges de Ma-Duk. Elle tente de leur faire comprendre leur erreur et veut les guider hors des ténèbres, afin qu'ils retrouvent la clarté de la lumière de Jena. Mais certains ne veulent pas être sauvés, et font tout pour entraîner d'autres homins dans leur chute. L'affrontement devient alors inévitable.</ul>";
$texte_stele_karavan_7 = "<ul>La Karavan est un guide spirituel : elle a délivré aux homins les messages de Jena, la Déesse qui les sauvera de l'anéantissement lorsque le Dragon s'éveillera. Elle ressuscite l'esprit des homins selon la volonté de la Déesse. Elle propose des pactes, permettant aux homins de se téléporter ou de dissiper l'ombre qui plane sur eux lorsqu'ils reviennent des portes de la mort.</ul><br><ul>La Karavan est un mentor généreux : elle a aidé les homins à développer leurs artisanats. Les secrets du magnétisme, de l'écriture, de la botanique, les fondements du système monétaire, la maîtrise du feu : tout cela a été révélé aux homins par la Karavan. Elle récompense ses fidèles les plus méritants en leur enseignant certaines techniques, en leur attribuant des titres prestigieux, en leur offrant des objets issus de sa puissante technologie.</ul><br><ul>La Karavan est un bâtisseur visionnaire : elle a participé à la construction des civilisations homins. Elle a aidé à rebâtir après le Grand Essaim, mettant en place des foreuses sur les avant-postes pour fournir une grande quantité des ressources.</ul><br><ul>La Karavan est un gardien indéfectible : elle a combattu les kitins lors du Grand Essaim, mettant fin à leur invasion. Elle lutte contre les Kamis qui veulent transformer les homins en démons, et contre élias Tryton qui veut utiliser les peuples d'Atys à ses propres fins obscures. Elle étudie la Goo afin de la comprendre et de la contrôler pour qu'elle ne soit plus une menace. Elle se bat contre la violence aveugle des primitifs. Elle tente de préserver les homins de l'influence néfaste du Dragon. La Karavan œuvre pour l'ordre contre l'anarchie, elle regarde vers le futur plutôt que vers le passé. Elle mènera les peuples homins à leur accomplissement, dans la gloire et dans la lumière de Jena.</ul>";
$texte_stele_karavan_8matis = "<ul>Dans les temps anciens, le peuple Matis a été le plus grand allié de la Karavan. Le premier homin à qui Jena choisit d'apparaître fut un Matis, Zachini, qui devint par la suite le monarque du royaume de Matia.</ul><br><ul>La cité sainte de Karavia fut édifiée sur le lieu de la divine apparition, où Zachini reçut les commandements de Jena des mains de la Karavan. La lumière du culte de la Déesse se répandit ensuite parmi les homins grâce à la piété du roi Zachini.</ul><br><ul>La Karavan a aidé les Matis à bâtir leur civilisation, et les a toujours poussés vers l'excellence. Elle leur a révélé les secrets de la matière vivante, afin qu'ils puissent laisser libre cours à leur créativité. Ainsi l'art de la manipulation de la flore et de la faune est-il devenu l'un des fondements de la culture matis.</ul><br><ul>Les Matis ont combattu farouchement les ennemis de Jena : ils ont mis fin à la menace des primitifs dans les anciennes forêts, et ils ont aidé la Karavan dans sa lutte contre les démons Kamis. La loyauté et la ténacité des guerriers matis a fait d'eux les plus nobles champions au service de la Déesse.</ul>";
$texte_stele_karavan_8tryker = "<ul>Depuis le début de leur Histoire, les Trykers ont surmonté des épreuves difficiles, mais ils sont toujours parvenus à relever la tête. Jena et les élus de la Karavan ont été présents à leurs côtés.</ul><br><ul>Lorsque le peuple Tryker fut réduit en esclavage à l'aube de son existence, Jena intervint pour le libérer. Lorsque les Kamis abandonnèrent les Trykers pour disparaître dans les jungles d'Atys, la Karavan s'avança pour guider le peuple des lacs sur la voie de la lumière.</ul><br><ul>La Karavan a apporté son aide dans le développement de la civilisation tryker. Elle a révélé au peuple lacustre les secrets de la puissance des vents. Elle a donné sa bénédiction à la création de la première monnaie, les dappers, encourageant de nouveaux échanges commerciaux plus équitables. Les artisans trykers, sous la bienveillance de la Karavan, ont pu expérimenter de nombreuses inventions qui ont amélioré la vie de tous.</ul><br><ul>Les Trykers sont enthousiastes et se sont battus farouchement pour défendre leur liberté. La Karavan a pu compter sur eux à de nombreuses reprises pour lutter contre les ténèbres qui menacent d'engloutir Atys.</ul>";
$texte_stele_karavan_8fyros = "<ul>Les Fyros sont un peuple fier et indépendant, et ses relations avec la Karavan ont souvent été teintées de méfiance. Pourtant, les Fyros sont comme tous les homins des enfants de Jena. De plus, ils sont particulièrement conscients de la présence du Dragon : ils veulent le détruire pour mettre un terme à la menace qu'il représente. En suivant le chemin tracé par la Karavan, le destin des Fyros est de devenir les gardiens d'Atys, sentinelles d'une vigilance sans égale.</ul><br><ul>Il y a fort longtemps, la Karavan a révélé un grand secret aux Fyros : le contrôle du feu. C'est grâce aux enseignements des élus de Jena que les Fyros sont devenus les maîtres incontestés du feu, l'utilisant dans leur artisanat, ou le domptant comme un animal sauvage pour en faire une arme contre leurs ennemis.</ul><br><ul>La Karavan a également aidé les Fyros à bâtir leur civilisation, par l'apprentissage de techniques de construction qui leur permirent d'ériger de grandes villes comme Fyr, la cité des flambeaux. Le peuple du désert s'est taillé une place l'épée à la main.</ul><br><ul>Guerriers intrépides à l'honneur sans faille, les Fyros sont sans pitié avec leurs ennemis. Le feu qui les anime est le feu du soleil. Leur place est aux côtés de Jena.</ul>";
$texte_stele_karavan_8zorai = "<ul>Aux yeux de nombreux homins, les Zoraïs sont un peuple mystérieux. Dans les temps anciens, ils ont vécu dans les profondeurs de la jungle, à l'abri des tumultes qui agitaient les autres homins.</ul><br><ul>Les Zoraïs recherchaient la sagesse, et l'amour de Jena les touchait au plus profond de leur âme. Malheureusement, les Kamis séduisirent nombre d'entre eux par de fausses promesses, et beaucoup de Zoraïs se détournèrent de leur Mère et de la Karavan.</ul><br><ul>Afin de ramener les Zoraïs sur la voie de la lumière, les élus de la Karavan leur enseignèrent les secrets du magnétisme. Ils leur apprirent à tracer des signes sur des papyrus, révélant les principes de l'écriture. Mais l'emprise des démons malfaisants était très forte, et les brumes de la magie obscurcissaient l'esprit des Zoraïs. Pourtant, jamais la Karavan ne perdit l'espoir de les dissiper.</ul><br><ul>Luttant courageusement contre le fléau de la Goo, les Zoraïs ont longtemps rêvé d'un monde d'harmonie. Ce monde existe, reposant dans le creux des mains de Jena. Un jour les masques des Zoraïs tomberont, et la lumière de la Déesse illuminera leur visage.</ul>";
$texte_stele_karavan_9 = "<ul>En ce lieu a été bâti un temple de Jena. Ce temple est l'une des maisons sacrées de l'église de la Lumière, où les homins karavaniers peuvent se recueillir. Ils trouveront ici ce qu'ils recherchent : le courage d'accomplir leur destin, l'amour de la Déesse, la paix de l'âme.</ul><br><ul>L'église de la Lumière, composée d'homins sous l'égide de la Karavan, a été constituée quelques années après la première apparition de Jena. Elle a été dispersée lors du Grand Essaim. La reconstruction des civilisations et l'établissement des homins sur les nouvelles terres ont demandé beaucoup de temps et de sacrifices. Après plusieurs décades, de nouveaux temples ont été érigés, pour honorer la Déesse avec la magnificence qui lui est due.</ul><br><ul>Homin, sois le bienvenu dans le temple de Jena ! La Déesse du soleil, Mère de toute vie, est aimante et accueillante. Sois baigné de Sa lumière, et prépare ton âme pour le Jour du Jugement, afin qu'elle puisse s'élever vers les étoiles.</ul>";
$texte_stele_karavan_10 = "<ul>Ici sont écrits les Dix Commandements de Jena, tels qu'ils furent révélés au roi Zachini par la Déesse, et tels qu'ils furent transmis par la sainte Karavan.</ul><br><ul>Premier Commandement : Moi, Jena je suis votre déesse, la mère créatrice, vous avez été faits à mon image. Aimez votre déesse comme vous vous aimez vous-même.</ul><ul>Deuxième Commandement : Vous n'adorerez point d'autres dieux.</ul><ul>Troisième Commandement : Enseignez à vos enfants mon amour comme je vous donne le mien.</ul><ul>Quatrième Commandement : Vous honorerez mes disciples, ils sont les hérauts de ma loi, et sont envoyés pour protéger votre bien-être.</ul><ul>Cinquième Commandement : Vous ne descendrez pas dans les entrailles d'Atys, de peur que la sainte Lumière quitte votre cœur et que les ténèbres du Dragon dévorent votre âme.</ul><ul>Sixième Commandement : Comme la feuille d'un arbre tombe sur le sol qui donne la force de vivre, votre âme sera rappelée à moi quand vous mourrez. Selon la force de votre foi vous renaîtrez avec ma bénédiction ou vous pourrirez dans d'atroces tourments.</ul><ul>Septième Commandement : Annoncez ma venue et mon amour grandira dans vos cœurs.</ul><ul>Huitième Commandement : Ne vous appropriez pas la loi, de peur de tomber dans le péché le jour du jugement.</ul><ul>Neuvième Commandement : Cherchez à rejoindre mon royaume et je vous attendrai à mi-chemin.</ul><ul>Dixième Commandement : Une fois que vous aurez prouvé la pureté de votre foi vous atteindrez la joie de l'élévation et ainsi deviendrez un disciple de confiance.</ul>";
?>

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Craft_kami", "storyline.episode2.*.kami.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_kami", "storyline.episode2.*.kami.craft.*", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "PlayerValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs par faction (par chantier) par acte
//fyros
"nom_Top10_Best_Craft_fyros_kami_Acte1", "storyline.episode2.fyros.kami.craft.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.craft.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_fyros_kami_Acte1", "storyline.episode2.fyros.kami.craft.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.craft.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_fyros_kami_Acte2", "storyline.episode2.fyros.kami.craft.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.craft.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_fyros_kami_Acte2", "storyline.episode2.fyros.kami.craft.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.craft.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_fyros_kami_Acte3", "storyline.episode2.fyros.kami.craft.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.craft.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_fyros_kami_Acte3", "storyline.episode2.fyros.kami.craft.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.craft.acte3", "PlayerValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs par faction (par chantier) par acte
//matis
"nom_Top10_Best_Craft_matis_kami_Acte1", "storyline.episode2.matis.kami.craft.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_matis_karavan_Acte1", "storyline.episode2.matis.karavan.craft.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_matis_kami_Acte1", "storyline.episode2.matis.kami.craft.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_matis_karavan_Acte1", "storyline.episode2.matis.karavan.craft.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_matis_kami_Acte2", "storyline.episode2.matis.kami.craft.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_matis_karavan_Acte2", "storyline.episode2.matis.karavan.craft.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_matis_kami_Acte2", "storyline.episode2.matis.kami.craft.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_matis_karavan_Acte2", "storyline.episode2.matis.karavan.craft.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_matis_kami_Acte3", "storyline.episode2.matis.kami.craft.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_matis_karavan_Acte3", "storyline.episode2.matis.karavan.craft.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_matis_kami_Acte3", "storyline.episode2.matis.kami.craft.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_matis_karavan_Acte3", "storyline.episode2.matis.karavan.craft.acte3", "PlayerValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs par faction (par chantier) par acte
//tryker
"nom_Top10_Best_Craft_tryker_kami_Acte1", "storyline.episode2.tryker.kami.craft.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.craft.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_tryker_kami_Acte1", "storyline.episode2.tryker.kami.craft.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.craft.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_tryker_kami_Acte2", "storyline.episode2.tryker.kami.craft.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.craft.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_tryker_kami_Acte2", "storyline.episode2.tryker.kami.craft.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.craft.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_tryker_kami_Acte3", "storyline.episode2.tryker.kami.craft.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.craft.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_tryker_kami_Acte3", "storyline.episode2.tryker.kami.craft.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.craft.acte3", "PlayerValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs par faction (par chantier) par acte
//zorai
"nom_Top10_Best_Craft_zorai_kami_Acte1", "storyline.episode2.zorai.kami.craft.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.craft.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_zorai_kami_Acte1", "storyline.episode2.zorai.kami.craft.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.craft.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_zorai_kami_Acte2", "storyline.episode2.zorai.kami.craft.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.craft.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_zorai_kami_Acte2", "storyline.episode2.zorai.kami.craft.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.craft.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Craft_zorai_kami_Acte3", "storyline.episode2.zorai.kami.craft.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.craft.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_zorai_kami_Acte3", "storyline.episode2.zorai.kami.craft.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.craft.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//fyros
"nom_Top10_Best_Kill_fyros_kami_Acte1", "storyline.episode2.fyros.kami.kill.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.kill.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_fyros_kami_Acte1", "storyline.episode2.fyros.kami.kill.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.kill.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_fyros_kami_Acte2", "storyline.episode2.fyros.kami.kill.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.kill.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_fyros_kami_Acte2", "storyline.episode2.fyros.kami.kill.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.kill.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_fyros_kami_Acte3", "storyline.episode2.fyros.kami.kill.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.kill.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_fyros_kami_Acte3", "storyline.episode2.fyros.kami.kill.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.kill.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//matis
"nom_Top10_Best_Kill_matis_kami_Acte1", "storyline.episode2.matis.kami.kill.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_matis_karavan_Acte1", "storyline.episode2.matis.karavan.kill.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_matis_kami_Acte1", "storyline.episode2.matis.kami.kill.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_matis_karavan_Acte1", "storyline.episode2.matis.karavan.kill.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_matis_kami_Acte2", "storyline.episode2.matis.kami.kill.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_matis_karavan_Acte2", "storyline.episode2.matis.karavan.kill.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_matis_kami_Acte2", "storyline.episode2.matis.kami.kill.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_matis_karavan_Acte2", "storyline.episode2.matis.karavan.kill.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_matis_kami_Acte3", "storyline.episode2.matis.kami.kill.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_matis_karavan_Acte3", "storyline.episode2.matis.karavan.kill.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_matis_kami_Acte3", "storyline.episode2.matis.kami.kill.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_matis_karavan_Acte3", "storyline.episode2.matis.karavan.kill.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//tryker
"nom_Top10_Best_Kill_tryker_kami_Acte1", "storyline.episode2.tryker.kami.kill.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.kill.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_tryker_kami_Acte1", "storyline.episode2.tryker.kami.kill.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.kill.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_tryker_kami_Acte2", "storyline.episode2.tryker.kami.kill.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.kill.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_tryker_kami_Acte2", "storyline.episode2.tryker.kami.kill.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.kill.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_tryker_kami_Acte3", "storyline.episode2.tryker.kami.kill.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.kill.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_tryker_kami_Acte3", "storyline.episode2.tryker.kami.kill.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.kill.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//zorai
"nom_Top10_Best_Kill_zorai_kami_Acte1", "storyline.episode2.zorai.kami.kill.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.kill.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_zorai_kami_Acte1", "storyline.episode2.zorai.kami.kill.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.kill.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_zorai_kami_Acte2", "storyline.episode2.zorai.kami.kill.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.kill.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_zorai_kami_Acte2", "storyline.episode2.zorai.kami.kill.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.kill.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_zorai_kami_Acte3", "storyline.episode2.zorai.kami.kill.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.kill.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_zorai_kami_Acte3", "storyline.episode2.zorai.kami.kill.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.kill.acte3", "PlayerValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes crafteurs par faction (par chantier) par acte
//fyros
"nom_Top10_Best_Guild_Craft_fyros_kami_Acte1", "storyline.episode2.fyros.kami.craft.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.craft.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_kami_Acte1", "storyline.episode2.fyros.kami.craft.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.craft.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_fyros_kami_Acte2", "storyline.episode2.fyros.kami.craft.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.craft.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_kami_Acte2", "storyline.episode2.fyros.kami.craft.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.craft.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_fyros_kami_Acte3", "storyline.episode2.fyros.kami.craft.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.craft.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_kami_Acte3", "storyline.episode2.fyros.kami.craft.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.craft.acte3", "GuildValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes crafteurs par faction (par chantier) par acte
//matis
"nom_Top10_Best_Guild_Craft_matis_kami_Acte1", "storyline.episode2.matis.kami.craft.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_matis_karavan_Acte1", "storyline.episode2.matis.karavan.craft.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_kami_Acte1", "storyline.episode2.matis.kami.craft.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_karavan_Acte1", "storyline.episode2.matis.karavan.craft.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_matis_kami_Acte2", "storyline.episode2.matis.kami.craft.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_matis_karavan_Acte2", "storyline.episode2.matis.karavan.craft.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_kami_Acte2", "storyline.episode2.matis.kami.craft.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_karavan_Acte2", "storyline.episode2.matis.karavan.craft.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_matis_kami_Acte3", "storyline.episode2.matis.kami.craft.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_matis_karavan_Acte3", "storyline.episode2.matis.karavan.craft.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_kami_Acte3", "storyline.episode2.matis.kami.craft.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_karavan_Acte3", "storyline.episode2.matis.karavan.craft.acte3", "GuildValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes crafteurs par faction (par chantier) par acte
//tryker
"nom_Top10_Best_Guild_Craft_tryker_kami_Acte1", "storyline.episode2.tryker.kami.craft.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.craft.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_kami_Acte1", "storyline.episode2.tryker.kami.craft.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.craft.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_tryker_kami_Acte2", "storyline.episode2.tryker.kami.craft.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.craft.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_kami_Acte2", "storyline.episode2.tryker.kami.craft.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.craft.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_tryker_kami_Acte3", "storyline.episode2.tryker.kami.craft.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.craft.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_kami_Acte3", "storyline.episode2.tryker.kami.craft.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.craft.acte3", "GuildValue", "*", "Sum",
};

@ -1,23 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes crafteurs par faction (par chantier) par acte
//zorai
"nom_Top10_Best_Guild_Craft_zorai_kami_Acte1", "storyline.episode2.zorai.kami.craft.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.craft.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_kami_Acte1", "storyline.episode2.zorai.kami.craft.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.craft.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_zorai_kami_Acte2", "storyline.episode2.zorai.kami.craft.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.craft.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_kami_Acte2", "storyline.episode2.zorai.kami.craft.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.craft.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_zorai_kami_Acte3", "storyline.episode2.zorai.kami.craft.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.craft.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_kami_Acte3", "storyline.episode2.zorai.kami.craft.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.craft.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//fyros
"nom_Top10_Best_Guild_Kill_fyros_kami_Acte1", "storyline.episode2.fyros.kami.kill.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.kill.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_kami_Acte1", "storyline.episode2.fyros.kami.kill.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.kill.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_fyros_kami_Acte2", "storyline.episode2.fyros.kami.kill.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.kill.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_kami_Acte2", "storyline.episode2.fyros.kami.kill.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.kill.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_fyros_kami_Acte3", "storyline.episode2.fyros.kami.kill.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.kill.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_kami_Acte3", "storyline.episode2.fyros.kami.kill.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.kill.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//matis
"nom_Top10_Best_Guild_Kill_matis_kami_Acte1", "storyline.episode2.matis.kami.kill.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_matis_karavan_Acte1", "storyline.episode2.matis.karavan.kill.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_kami_Acte1", "storyline.episode2.matis.kami.kill.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_karavan_Acte1", "storyline.episode2.matis.karavan.kill.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_matis_kami_Acte2", "storyline.episode2.matis.kami.kill.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_matis_karavan_Acte2", "storyline.episode2.matis.karavan.kill.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_kami_Acte2", "storyline.episode2.matis.kami.kill.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_karavan_Acte2", "storyline.episode2.matis.karavan.kill.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_matis_kami_Acte3", "storyline.episode2.matis.kami.kill.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_matis_karavan_Acte3", "storyline.episode2.matis.karavan.kill.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_kami_Acte3", "storyline.episode2.matis.kami.kill.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_karavan_Acte3", "storyline.episode2.matis.karavan.kill.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//tryker
"nom_Top10_Best_Guild_Kill_tryker_kami_Acte1", "storyline.episode2.tryker.kami.kill.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.kill.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_kami_Acte1", "storyline.episode2.tryker.kami.kill.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.kill.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_tryker_kami_Acte2", "storyline.episode2.tryker.kami.kill.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.kill.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_kami_Acte2", "storyline.episode2.tryker.kami.kill.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.kill.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_tryker_kami_Acte3", "storyline.episode2.tryker.kami.kill.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.kill.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_kami_Acte3", "storyline.episode2.tryker.kami.kill.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.kill.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers par faction (par chantier) par acte
//zorai
"nom_Top10_Best_Guild_Kill_zorai_kami_Acte1", "storyline.episode2.zorai.kami.kill.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.kill.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_kami_Acte1", "storyline.episode2.zorai.kami.kill.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.kill.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_zorai_kami_Acte2", "storyline.episode2.zorai.kami.kill.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.kill.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_kami_Acte2", "storyline.episode2.zorai.kami.kill.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.kill.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_zorai_kami_Acte3", "storyline.episode2.zorai.kami.kill.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.kill.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_kami_Acte3", "storyline.episode2.zorai.kami.kill.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.kill.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//fyros
"nom_Top10_Best_Guild_Harvest_fyros_kami_Acte1", "storyline.episode2.fyros.kami.harvest.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.harvest.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_kami_Acte1", "storyline.episode2.fyros.kami.harvest.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.harvest.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_fyros_kami_Acte2", "storyline.episode2.fyros.kami.harvest.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.harvest.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_kami_Acte2", "storyline.episode2.fyros.kami.harvest.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.harvest.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_fyros_kami_Acte3", "storyline.episode2.fyros.kami.harvest.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.harvest.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_kami_Acte3", "storyline.episode2.fyros.kami.harvest.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.harvest.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//matis
"nom_Top10_Best_Guild_Harvest_matis_kami_Acte1", "storyline.episode2.matis.kami.harvest.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_matis_karavan_Acte1", "storyline.episode2.matis.karavan.harvest.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_kami_Acte1", "storyline.episode2.matis.kami.harvest.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_karavan_Acte1", "storyline.episode2.matis.karavan.harvest.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_matis_kami_Acte2", "storyline.episode2.matis.kami.harvest.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_matis_karavan_Acte2", "storyline.episode2.matis.karavan.harvest.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_kami_Acte2", "storyline.episode2.matis.kami.harvest.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_karavan_Acte2", "storyline.episode2.matis.karavan.harvest.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_matis_kami_Acte3", "storyline.episode2.matis.kami.harvest.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_matis_karavan_Acte3", "storyline.episode2.matis.karavan.harvest.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_kami_Acte3", "storyline.episode2.matis.kami.harvest.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_karavan_Acte3", "storyline.episode2.matis.karavan.harvest.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//tryker
"nom_Top10_Best_Guild_Harvest_tryker_kami_Acte1", "storyline.episode2.tryker.kami.harvest.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.harvest.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_kami_Acte1", "storyline.episode2.tryker.kami.harvest.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.harvest.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_tryker_kami_Acte2", "storyline.episode2.tryker.kami.harvest.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.harvest.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_kami_Acte2", "storyline.episode2.tryker.kami.harvest.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.harvest.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_tryker_kami_Acte3", "storyline.episode2.tryker.kami.harvest.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.harvest.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_kami_Acte3", "storyline.episode2.tryker.kami.harvest.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.harvest.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//zorai
"nom_Top10_Best_Guild_Harvest_zorai_kami_Acte1", "storyline.episode2.zorai.kami.harvest.acte1", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.harvest.acte1", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_kami_Acte1", "storyline.episode2.zorai.kami.harvest.acte1", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.harvest.acte1", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_zorai_kami_Acte2", "storyline.episode2.zorai.kami.harvest.acte2", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.harvest.acte2", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_kami_Acte2", "storyline.episode2.zorai.kami.harvest.acte2", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.harvest.acte2", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_zorai_kami_Acte3", "storyline.episode2.zorai.kami.harvest.acte3", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.harvest.acte3", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_kami_Acte3", "storyline.episode2.zorai.kami.harvest.acte3", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.harvest.acte3", "GuildValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//fyros
"nom_Top10_Best_Harvest_fyros_kami_Acte1", "storyline.episode2.fyros.kami.harvest.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.harvest.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_fyros_kami_Acte1", "storyline.episode2.fyros.kami.harvest.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_fyros_karavan_Acte1", "storyline.episode2.fyros.karavan.harvest.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_fyros_kami_Acte2", "storyline.episode2.fyros.kami.harvest.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.harvest.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_fyros_kami_Acte2", "storyline.episode2.fyros.kami.harvest.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_fyros_karavan_Acte2", "storyline.episode2.fyros.karavan.harvest.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_fyros_kami_Acte3", "storyline.episode2.fyros.kami.harvest.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.harvest.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_fyros_kami_Acte3", "storyline.episode2.fyros.kami.harvest.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_fyros_karavan_Acte3", "storyline.episode2.fyros.karavan.harvest.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//matis
"nom_Top10_Best_Harvest_matis_kami_Acte1", "storyline.episode2.matis.kami.harvest.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_matis_karavan_Acte1", "storyline.episode2.matis.karavan.harvest.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_matis_kami_Acte1", "storyline.episode2.matis.kami.harvest.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_matis_karavan_Acte1", "storyline.episode2.matis.karavan.harvest.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_matis_kami_Acte2", "storyline.episode2.matis.kami.harvest.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_matis_karavan_Acte2", "storyline.episode2.matis.karavan.harvest.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_matis_kami_Acte2", "storyline.episode2.matis.kami.harvest.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_matis_karavan_Acte2", "storyline.episode2.matis.karavan.harvest.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_matis_kami_Acte3", "storyline.episode2.matis.kami.harvest.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_matis_karavan_Acte3", "storyline.episode2.matis.karavan.harvest.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_matis_kami_Acte3", "storyline.episode2.matis.kami.harvest.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_matis_karavan_Acte3", "storyline.episode2.matis.karavan.harvest.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//tryker
"nom_Top10_Best_Harvest_tryker_kami_Acte1", "storyline.episode2.tryker.kami.harvest.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.harvest.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_tryker_kami_Acte1", "storyline.episode2.tryker.kami.harvest.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_tryker_karavan_Acte1", "storyline.episode2.tryker.karavan.harvest.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_tryker_kami_Acte2", "storyline.episode2.tryker.kami.harvest.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.harvest.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_tryker_kami_Acte2", "storyline.episode2.tryker.kami.harvest.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_tryker_karavan_Acte2", "storyline.episode2.tryker.karavan.harvest.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_tryker_kami_Acte3", "storyline.episode2.tryker.kami.harvest.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.harvest.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_tryker_kami_Acte3", "storyline.episode2.tryker.kami.harvest.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_tryker_karavan_Acte3", "storyline.episode2.tryker.karavan.harvest.acte3", "PlayerValue", "*", "Sum",
};

@ -1,22 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs par faction (par chantier) par acte
//zorai
"nom_Top10_Best_Harvest_zorai_kami_Acte1", "storyline.episode2.zorai.kami.harvest.acte1", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.harvest.acte1", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_zorai_kami_Acte1", "storyline.episode2.zorai.kami.harvest.acte1", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_zorai_karavan_Acte1", "storyline.episode2.zorai.karavan.harvest.acte1", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_zorai_kami_Acte2", "storyline.episode2.zorai.kami.harvest.acte2", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.harvest.acte2", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_zorai_kami_Acte2", "storyline.episode2.zorai.kami.harvest.acte2", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_zorai_karavan_Acte2", "storyline.episode2.zorai.karavan.harvest.acte2", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_zorai_kami_Acte3", "storyline.episode2.zorai.kami.harvest.acte3", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.harvest.acte3", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_zorai_kami_Acte3", "storyline.episode2.zorai.kami.harvest.acte3", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_zorai_karavan_Acte3", "storyline.episode2.zorai.karavan.harvest.acte3", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_faction_Craft_kami", "storyline.episode2.*.kami.craft.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_faction_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_faction_Craft_kami", "storyline.episode2.*.kami.craft.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_faction_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Craft_fyros_kami", "storyline.episode2.fyros.kami.craft.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_fyros_karavan", "storyline.episode2.fyros.karavan.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_fyros_kami", "storyline.episode2.fyros.kami.craft.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_fyros_karavan", "storyline.episode2.fyros.karavan.craft.*", "PlayerValue", "*", "Sum",
};

@ -1,10 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Craft_matis_kami", "storyline.episode2.matis.kami.craft.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_matis_karavan", "storyline.episode2.matis.karavan.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_matis_kami", "storyline.episode2.matis.kami.craft.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_matis_karavan", "storyline.episode2.matis.karavan.craft.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Craft_tryker_kami", "storyline.episode2.tryker.kami.craft.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_tryker_karavan", "storyline.episode2.tryker.karavan.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_tryker_kami", "storyline.episode2.tryker.kami.craft.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_tryker_karavan", "storyline.episode2.tryker.karavan.craft.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Craft_zorai_kami", "storyline.episode2.zorai.kami.craft.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Craft_zorai_karavan", "storyline.episode2.zorai.karavan.craft.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Craft_zorai_kami", "storyline.episode2.zorai.kami.craft.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Craft_zorai_karavan", "storyline.episode2.zorai.karavan.craft.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_faction_Kill_kami", "storyline.episode2.*.kami.kill.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_faction_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_faction_Kill_kami", "storyline.episode2.*.kami.kill.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_faction_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Kill_fyros_kami", "storyline.episode2.fyros.kami.kill.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_fyros_karavan", "storyline.episode2.fyros.karavan.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_fyros_kami", "storyline.episode2.fyros.kami.kill.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_fyros_karavan", "storyline.episode2.fyros.karavan.kill.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Kill_matis_kami", "storyline.episode2.matis.kami.kill.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_matis_karavan", "storyline.episode2.matis.karavan.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_matis_kami", "storyline.episode2.matis.kami.kill.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_matis_karavan", "storyline.episode2.matis.karavan.kill.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Kill_tryker_kami", "storyline.episode2.tryker.kami.kill.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_tryker_karavan", "storyline.episode2.tryker.karavan.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_tryker_kami", "storyline.episode2.tryker.kami.kill.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_tryker_karavan", "storyline.episode2.tryker.karavan.kill.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Kill_zorai_kami", "storyline.episode2.zorai.kami.kill.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Kill_zorai_karavan", "storyline.episode2.zorai.karavan.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_zorai_kami", "storyline.episode2.zorai.kami.kill.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Kill_zorai_karavan", "storyline.episode2.zorai.karavan.kill.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Guild_faction_Craft_kami", "storyline.episode2.*.kami.craft.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_faction_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_faction_Craft_kami", "storyline.episode2.*.kami.craft.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_faction_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Guild_Craft_fyros_kami", "storyline.episode2.fyros.kami.craft.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_fyros_karavan", "storyline.episode2.fyros.karavan.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_kami", "storyline.episode2.fyros.kami.craft.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_fyros_karavan", "storyline.episode2.fyros.karavan.craft.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Guild_Craft_matis_kami", "storyline.episode2.matis.kami.craft.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_matis_karavan", "storyline.episode2.matis.karavan.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_kami", "storyline.episode2.matis.kami.craft.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_matis_karavan", "storyline.episode2.matis.karavan.craft.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Guild_Craft_tryker_kami", "storyline.episode2.tryker.kami.craft.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_tryker_karavan", "storyline.episode2.tryker.karavan.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_kami", "storyline.episode2.tryker.kami.craft.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_tryker_karavan", "storyline.episode2.tryker.karavan.craft.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs crafteurs de l'episode 2
"nom_Top10_Best_Guild_Craft_zorai_kami", "storyline.episode2.zorai.kami.craft.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Craft_zorai_karavan", "storyline.episode2.zorai.karavan.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_kami", "storyline.episode2.zorai.kami.craft.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Craft_zorai_karavan", "storyline.episode2.zorai.karavan.craft.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Guild_faction_Kill_kami", "storyline.episode2.*.kami.kill.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_faction_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_faction_Kill_kami", "storyline.episode2.*.kami.kill.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_faction_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Guild_Kill_fyros_kami", "storyline.episode2.fyros.kami.kill.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_fyros_karavan", "storyline.episode2.fyros.karavan.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_kami", "storyline.episode2.fyros.kami.kill.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_fyros_karavan", "storyline.episode2.fyros.karavan.kill.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Guild_Kill_matis_kami", "storyline.episode2.matis.kami.kill.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_matis_karavan", "storyline.episode2.matis.karavan.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_kami", "storyline.episode2.matis.kami.kill.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_matis_karavan", "storyline.episode2.matis.karavan.kill.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Guild_Kill_tryker_kami", "storyline.episode2.tryker.kami.kill.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_tryker_karavan", "storyline.episode2.tryker.karavan.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_kami", "storyline.episode2.tryker.kami.kill.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_tryker_karavan", "storyline.episode2.tryker.karavan.kill.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Guild_Kill_zorai_kami", "storyline.episode2.zorai.kami.kill.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Kill_zorai_karavan", "storyline.episode2.zorai.karavan.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_kami", "storyline.episode2.zorai.kami.kill.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Kill_zorai_karavan", "storyline.episode2.zorai.karavan.kill.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Guild_faction_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_faction_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_faction_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_faction_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Guild_Harvest_fyros_kami", "storyline.episode2.fyros.kami.harvest.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_fyros_karavan", "storyline.episode2.fyros.karavan.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_kami", "storyline.episode2.fyros.kami.harvest.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_fyros_karavan", "storyline.episode2.fyros.karavan.harvest.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Guild_Harvest_matis_kami", "storyline.episode2.matis.kami.harvest.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_matis_karavan", "storyline.episode2.matis.karavan.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_kami", "storyline.episode2.matis.kami.harvest.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_matis_karavan", "storyline.episode2.matis.karavan.harvest.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Guild_Harvest_tryker_kami", "storyline.episode2.tryker.kami.harvest.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_tryker_karavan", "storyline.episode2.tryker.karavan.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_kami", "storyline.episode2.tryker.kami.harvest.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_tryker_karavan", "storyline.episode2.tryker.karavan.harvest.*", "GuildValue", "*", "Sum",
};

@ -1,8 +0,0 @@
WildcardTables =
{
"nom_Top10_Best_Guild_Harvest_zorai_kami", "storyline.episode2.zorai.kami.harvest.*", "GuildName", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_zorai_karavan", "storyline.episode2.zorai.karavan.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_kami", "storyline.episode2.zorai.kami.harvest.*", "GuildValue", "*", "Sum",
"score_Top10_Best_Guild_Harvest_zorai_karavan", "storyline.episode2.zorai.karavan.harvest.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_faction_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_faction_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_faction_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_faction_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Harvest_fyros_kami", "storyline.episode2.fyros.kami.harvest.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_fyros_karavan", "storyline.episode2.fyros.karavan.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_fyros_kami", "storyline.episode2.fyros.kami.harvest.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_fyros_karavan", "storyline.episode2.fyros.karavan.harvest.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Harvest_matis_kami", "storyline.episode2.matis.kami.harvest.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_matis_karavan", "storyline.episode2.matis.karavan.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_matis_kami", "storyline.episode2.matis.kami.harvest.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_matis_karavan", "storyline.episode2.matis.karavan.harvest.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Harvest_tryker_kami", "storyline.episode2.tryker.kami.harvest.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_tryker_karavan", "storyline.episode2.tryker.karavan.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_tryker_kami", "storyline.episode2.tryker.kami.harvest.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_tryker_karavan", "storyline.episode2.tryker.karavan.harvest.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Harvest_zorai_kami", "storyline.episode2.zorai.kami.harvest.*", "PlayerName", "*", "Sum",
"nom_Top10_Best_Harvest_zorai_karavan", "storyline.episode2.zorai.karavan.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_zorai_kami", "storyline.episode2.zorai.kami.harvest.*", "PlayerValue", "*", "Sum",
"score_Top10_Best_Harvest_zorai_karavan", "storyline.episode2.zorai.karavan.harvest.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs killers de l'episode 2
"nom_Top10_Best_Kill_kami", "storyline.episode2.*.kami.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_kami", "storyline.episode2.*.kami.kill.*", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "PlayerValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes crafteurs de l'episode 2
"nom_Top10_Best_Guild_Craft_kami", "storyline.episode2.*.kami.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_kami", "storyline.episode2.*.kami.craft.*", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Craft_karavan", "storyline.episode2.*.karavan.craft.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes killers de l'episode 2
"nom_Top10_Best_Guild_Kill_kami", "storyline.episode2.*.kami.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_kami", "storyline.episode2.*.kami.kill.*", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Kill_karavan", "storyline.episode2.*.karavan.kill.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs guildes harvesteurs de l'episode 2
"nom_Top10_Best_Guild_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "GuildValue", "*", "Sum",
"nom_Top10_Best_Guild_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "GuildName", "*", "Sum",
"score_Top10_Best_Guild_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "GuildValue", "*", "Sum",
};

@ -1,9 +0,0 @@
WildcardTables =
{
// ==== Top 10 des meilleurs harvesteurs de l'episode 2
"nom_Top10_Best_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_kami", "storyline.episode2.*.kami.harvest.*", "PlayerValue", "*", "Sum",
"nom_Top10_Best_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "PlayerName", "*", "Sum",
"score_Top10_Best_Harvest_karavan", "storyline.episode2.*.karavan.harvest.*", "PlayerValue", "*", "Sum",
};

@ -1,79 +0,0 @@
WildcardValues =
{
// ==== quantite craftee des elements de construction Fyros
"Soclefyros", "storyline.episode2.fyros.socle.*", "Sum",
"Colonnefyros", "storyline.episode2.fyros.colonne.*", "Sum",
"Comblefyros", "storyline.episode2.fyros.comble.*", "Sum",
"Muraillefyros", "storyline.episode2.fyros.muraille.*", "Sum",
"Revetementfyros", "storyline.episode2.fyros.revetement.*", "Sum",
"Ornementfyros", "storyline.episode2.fyros.ornement.*", "Sum",
"Statuefyros", "storyline.episode2.fyros.statue.*", "Sum",
"Justicefyros", "storyline.episode2.fyros.colonne_justice.*", "Sum",
"Racinefyros", "storyline.episode2.fyros.racine.*", "Sum",
"Troncfyros", "storyline.episode2.fyros.tronc.*", "Sum",
"Fibrefyros", "storyline.episode2.fyros.fibre.*", "Sum",
"Ecorcefyros", "storyline.episode2.fyros.ecorce.*", "Sum",
"Feuillefyros", "storyline.episode2.fyros.feuille.*", "Sum",
"Fleurfyros", "storyline.episode2.fyros.fleur.*", "Sum",
"Symbolefyros", "storyline.episode2.fyros.symbole.*", "Sum",
"Noyaufyros", "storyline.episode2.fyros.noyau.*", "Sum",
// ==== quantite craftee des elements de construction Tryker
"Socletryker", "storyline.episode2.tryker.socle.*", "Sum",
"Colonnetryker", "storyline.episode2.tryker.colonne.*", "Sum",
"Combletryker", "storyline.episode2.tryker.comble.*", "Sum",
"Murailletryker", "storyline.episode2.tryker.muraille.*", "Sum",
"Revetementtryker", "storyline.episode2.tryker.revetement.*", "Sum",
"Ornementtryker", "storyline.episode2.tryker.ornement.*", "Sum",
"Statuetryker", "storyline.episode2.tryker.statue.*", "Sum",
"Justicetryker", "storyline.episode2.tryker.colonne_justice.*", "Sum",
"Racinetryker", "storyline.episode2.tryker.racine.*", "Sum",
"Tronctryker", "storyline.episode2.tryker.tronc.*", "Sum",
"Fibretryker", "storyline.episode2.tryker.fibre.*", "Sum",
"Ecorcetryker", "storyline.episode2.tryker.ecorce.*", "Sum",
"Feuilletryker", "storyline.episode2.tryker.feuille.*", "Sum",
"Fleurtryker", "storyline.episode2.tryker.fleur.*", "Sum",
"Symboletryker", "storyline.episode2.tryker.symbole.*", "Sum",
"Noyautryker", "storyline.episode2.tryker.noyau.*", "Sum",
// ==== quantite craftee des elements de construction Matis
"Soclematis", "storyline.episode2.matis.socle.*", "Sum",
"Colonnematis", "storyline.episode2.matis.colonne.*", "Sum",
"Comblematis", "storyline.episode2.matis.comble.*", "Sum",
"Muraillematis", "storyline.episode2.matis.muraille.*", "Sum",
"Revetementmatis", "storyline.episode2.matis.revetement.*", "Sum",
"Ornementmatis", "storyline.episode2.matis.ornement.*", "Sum",
"Statuematis", "storyline.episode2.matis.statue.*", "Sum",
"Justicematis", "storyline.episode2.matis.colonne_justice.*", "Sum",
"Racinematis", "storyline.episode2.matis.racine.*", "Sum",
"Troncmatis", "storyline.episode2.matis.tronc.*", "Sum",
"Fibrematis", "storyline.episode2.matis.fibre.*", "Sum",
"Ecorcematis", "storyline.episode2.matis.ecorce.*", "Sum",
"Feuillematis", "storyline.episode2.matis.feuille.*", "Sum",
"Fleurmatis", "storyline.episode2.matis.fleur.*", "Sum",
"Symbolematis", "storyline.episode2.matis.symbole.*", "Sum",
"Noyaumatis", "storyline.episode2.matis.noyau.*", "Sum",
// ==== quantite craftee des elements de construction Zorai
"Soclezorai", "storyline.episode2.zorai.socle.*", "Sum",
"Colonnezorai", "storyline.episode2.zorai.colonne.*", "Sum",
"Comblezorai", "storyline.episode2.zorai.comble.*", "Sum",
"Muraillezorai", "storyline.episode2.zorai.muraille.*", "Sum",
"Revetementzorai", "storyline.episode2.zorai.revetement.*", "Sum",
"Ornementzorai", "storyline.episode2.zorai.ornement.*", "Sum",
"Statuezorai", "storyline.episode2.zorai.statue.*", "Sum",
"Justicezorai", "storyline.episode2.zorai.colonne_justice.*", "Sum",
"Racinezorai", "storyline.episode2.zorai.racine.*", "Sum",
"Tronczorai", "storyline.episode2.zorai.tronc.*", "Sum",
"Fibrezorai", "storyline.episode2.zorai.fibre.*", "Sum",
"Ecorcezorai", "storyline.episode2.zorai.ecorce.*", "Sum",
"Feuillezorai", "storyline.episode2.zorai.feuille.*", "Sum",
"Fleurzorai", "storyline.episode2.zorai.fleur.*", "Sum",
"Symbolezorai", "storyline.episode2.zorai.symbole.*", "Sum",
"Noyauzorai", "storyline.episode2.zorai.noyau.*", "Sum",
};

@ -1,80 +0,0 @@
Values =
{
"noActe", "storyline.episode2.no_acte",
// ==== valeur seuil des elements de construction Fyros
"maxSoclefyros", "storyline.episode2.fyros.socle_max",
"maxColonnefyros", "storyline.episode2.fyros.colonne_max",
"maxComblefyros", "storyline.episode2.fyros.comble_max",
"maxMuraillefyros", "storyline.episode2.fyros.muraille_max",
"maxRevetementfyros", "storyline.episode2.fyros.revetement_max",
"maxOrnementfyros", "storyline.episode2.fyros.ornement_max",
"maxStatuefyros", "storyline.episode2.fyros.statue_max",
"maxJusticefyros", "storyline.episode2.fyros.colonne_justice_max",
"maxRacinefyros", "storyline.episode2.fyros.racine_max",
"maxTroncfyros", "storyline.episode2.fyros.tronc_max",
"maxFibrefyros", "storyline.episode2.fyros.fibre_max",
"maxEcorcefyros", "storyline.episode2.fyros.ecorce_max",
"maxFeuillefyros", "storyline.episode2.fyros.feuille_max",
"maxFleurfyros", "storyline.episode2.fyros.fleur_max",
"maxSymbolefyros", "storyline.episode2.fyros.symbole_max",
"maxNoyaufyros", "storyline.episode2.fyros.noyau_max",
// ==== valeur seuil des elements de construction Tryker
"maxSocletryker", "storyline.episode2.tryker.socle_max",
"maxColonnetryker", "storyline.episode2.tryker.colonne_max",
"maxCombletryker", "storyline.episode2.tryker.comble_max",
"maxMurailletryker", "storyline.episode2.tryker.muraille_max",
"maxRevetementtryker", "storyline.episode2.tryker.revetement_max",
"maxOrnementtryker", "storyline.episode2.tryker.ornement_max",
"maxStatuetryker", "storyline.episode2.tryker.statue_max",
"maxJusticetryker", "storyline.episode2.tryker.colonne_justice_max",
"maxRacinetryker", "storyline.episode2.tryker.racine_max",
"maxTronctryker", "storyline.episode2.tryker.tronc_max",
"maxFibretryker", "storyline.episode2.tryker.fibre_max",
"maxEcorcetryker", "storyline.episode2.tryker.ecorce_max",
"maxFeuilletryker", "storyline.episode2.tryker.feuille_max",
"maxFleurtryker", "storyline.episode2.tryker.fleur_max",
"maxSymboletryker", "storyline.episode2.tryker.symbole_max",
"maxNoyautryker", "storyline.episode2.tryker.noyau_max",
// ==== valeur seuil des elements de construction Matis
"maxSoclematis", "storyline.episode2.matis.socle_max",
"maxColonnematis", "storyline.episode2.matis.colonne_max",
"maxComblematis", "storyline.episode2.matis.comble_max",
"maxMuraillematis", "storyline.episode2.matis.muraille_max",
"maxRevetementmatis", "storyline.episode2.matis.revetement_max",
"maxOrnementmatis", "storyline.episode2.matis.ornement_max",
"maxStatuematis", "storyline.episode2.matis.statue_max",
"maxJusticematis", "storyline.episode2.matis.colonne_justice_max",
"maxRacinematis", "storyline.episode2.matis.racine_max",
"maxTroncmatis", "storyline.episode2.matis.tronc_max",
"maxFibrematis", "storyline.episode2.matis.fibre_max",
"maxEcorcematis", "storyline.episode2.matis.ecorce_max",
"maxFeuillematis", "storyline.episode2.matis.feuille_max",
"maxFleurmatis", "storyline.episode2.matis.fleur_max",
"maxSymbolematis", "storyline.episode2.matis.symbole_max",
"maxNoyaumatis", "storyline.episode2.matis.noyau_max",
// ==== valeur seuil des elements de construction Zorai
"maxSoclezorai", "storyline.episode2.zorai.socle_max",
"maxColonnezorai", "storyline.episode2.zorai.colonne_max",
"maxComblezorai", "storyline.episode2.zorai.comble_max",
"maxMuraillezorai", "storyline.episode2.zorai.muraille_max",
"maxRevetementzorai", "storyline.episode2.zorai.revetement_max",
"maxOrnementzorai", "storyline.episode2.zorai.ornement_max",
"maxStatuezorai", "storyline.episode2.zorai.statue_max",
"maxJusticezorai", "storyline.episode2.zorai.colonne_justice_max",
"maxRacinezorai", "storyline.episode2.zorai.racine_max",
"maxTronczorai", "storyline.episode2.zorai.tronc_max",
"maxFibrezorai", "storyline.episode2.zorai.fibre_max",
"maxEcorcezorai", "storyline.episode2.zorai.ecorce_max",
"maxFeuillezorai", "storyline.episode2.zorai.feuille_max",
"maxFleurzorai", "storyline.episode2.zorai.fleur_max",
"maxSymbolezorai", "storyline.episode2.zorai.symbole_max",
"maxNoyauzorai", "storyline.episode2.zorai.noyau_max",
};

@ -1,127 +0,0 @@
<?php
// LOG database
$StatsDBHost = "192.168.1.169";
$StatsDBUserName = "root";
$StatsDBPassword = "";
$StatsDBName = "stats";
include_once('config.php');
error_reporting(E_ERROR | E_PARSE);
// global var
$link = NULL;
$dev_ip="192.168.1.169"; //ip where sql error are displayed
$private_network = "/192\.168\.1\./i"; //ip where the cmd=log&msg=dump function works
//get the ip of the viewer
function getIp()
{
if (getenv("HTTP_CLIENT_IP"))
{
$ip = getenv("HTTP_CLIENT_IP");
}
elseif(getenv("HTTP_X_FORWARDED_FOR"))
{
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
else
{
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
// if the player ip is the dev ip then the sql error is explain
function die2($debug_str)
{
global $private_network;
if ( preg_match($private_network, getIp()) )
{
die($debug_str);
}
else
{
die("GENERIC_ERROR");
}
}
// Get head or post infos from the query url.
// return default if the value has not be found
function getPost($value, $default=NULL)
{
if ( isSet( $_GET[$value] ) ) { return $_GET[$value]; }
if ( isSet($_POST[$value]) ) { return $_POST[$value]; }
return $default;
}
//---------------------------------------------------------------------------
$cmd = getPost("cmd", "get_patch_url");
switch ($cmd)
{
// get Patch url from the nel database
case "get_patch_url":
$domain = getPost("domain", "");
if ($domain == "")
{
echo "0:wrong domain";
die2();
}
$domainName = getPost("domain");
$nelLink = mysql_connect($DBHost, $DBUserName, $DBPassword) or die2 (__FILE__. " " .__LINE__." Can't connect to database host:$DBHost user:$DBUserName");
mysql_select_db ($DBName, $nelLink) or die2 (__FILE__. " " .__LINE__." Can't access to the table dbname:$DBName");
$query = "SELECT backup_patch_url, patch_urls FROM domain WHERE domain_name='$domainName'";
$result = mysql_query ($query, $nelLink) or die2 (__FILE__. " " .__LINE__." Can't execute the query: ".$query);
if (mysql_num_rows($result) != 1)
{
// unrecoverable error, we must giveup
$reason = "Can't find domain '".$domainName."' (error code x)";
$res = false;
}
$req = mysql_fetch_array($result);
$backup_patch_url = $req["backup_patch_url"];
$patch_urls = $req["patch_urls"];
$args = $patch_urls;
$urls = explode(";", $args);
// first display backup url
echo "<version ";
echo 'serverPath="'.$backup_patch_url.'"';
echo ">\n";
// then display default uris
$first = 0;
$last = count($urls);
for (; $first != $last; $first++)
{
if ($urls[$first] == "")
{
}
else
{
echo "\t<patchURI>$urls[$first]</patchURI>\n";
}
}
echo "</version>\n";
mysql_close($nelLink);
unset($nelLink);
break;
default:
echo "0:Unknown command";
die2();
}
?>

@ -1,7 +0,0 @@
<?php
// This file contains all variables needed by other php scripts
include_once('/home/nevrax/patchman/config.php');
?>

@ -1,872 +0,0 @@
<?php
/**
* RFC 822 Email address list validation Utility
*
* What is it?
*
* This class will take an address string, and parse it into it's consituent
* parts, be that either addresses, groups, or combinations. Nested groups
* are not supported. The structure it returns is pretty straight forward,
* and is similar to that provided by the imap_rfc822_parse_adrlist(). Use
* print_r() to view the structure.
*
* How do I use it?
*
* $address_string = 'My Group: "Richard Heyes" <richard@localhost> (A comment), ted@example.com (Ted Bloggs), Barney;';
* $structure = Mail_RFC822::parseAddressList($address_string, 'example.com', TRUE)
* print_r($structure);
*
* @author Richard Heyes <richard@phpguru.org>
* @author Chuck Hagenbuch <chuck@horde.org>
* @version $Revision: 1.1 $
* @package Mail
*/
class Mail_RFC822
{
/**
* The address being parsed by the RFC822 object.
* @var string $address
*/
var $address = '';
/**
* The default domain to use for unqualified addresses.
* @var string $default_domain
*/
var $default_domain = 'localhost';
/**
* Should we return a nested array showing groups, or flatten everything?
* @var boolean $nestGroups
*/
var $nestGroups = true;
/**
* Whether or not to validate atoms for non-ascii characters.
* @var boolean $validate
*/
var $validate = true;
/**
* The array of raw addresses built up as we parse.
* @var array $addresses
*/
var $addresses = array();
/**
* The final array of parsed address information that we build up.
* @var array $structure
*/
var $structure = array();
/**
* The current error message, if any.
* @var string $error
*/
var $error = null;
/**
* An internal counter/pointer.
* @var integer $index
*/
var $index = null;
/**
* The number of groups that have been found in the address list.
* @var integer $num_groups
* @access public
*/
var $num_groups = 0;
/**
* A variable so that we can tell whether or not we're inside a
* Mail_RFC822 object.
* @var boolean $mailRFC822
*/
var $mailRFC822 = true;
/**
* A limit after which processing stops
* @var int $limit
*/
var $limit = null;
/**
* Sets up the object. The address must either be set here or when
* calling parseAddressList(). One or the other.
*
* @access public
* @param string $address The address(es) to validate.
* @param string $default_domain Default domain/host etc. If not supplied, will be set to localhost.
* @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing.
* @param boolean $validate Whether to validate atoms. Turn this off if you need to run addresses through before encoding the personal names, for instance.
*
* @return object Mail_RFC822 A new Mail_RFC822 object.
*/
function Mail_RFC822($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null)
{
if (isset($address)) $this->address = $address;
if (isset($default_domain)) $this->default_domain = $default_domain;
if (isset($nest_groups)) $this->nestGroups = $nest_groups;
if (isset($validate)) $this->validate = $validate;
if (isset($limit)) $this->limit = $limit;
}
/**
* Starts the whole process. The address must either be set here
* or when creating the object. One or the other.
*
* @access public
* @param string $address The address(es) to validate.
* @param string $default_domain Default domain/host etc.
* @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing.
* @param boolean $validate Whether to validate atoms. Turn this off if you need to run addresses through before encoding the personal names, for instance.
*
* @return array A structured array of addresses.
*/
function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null)
{
if (!isset($this->mailRFC822)) {
$obj = new Mail_RFC822($address, $default_domain, $nest_groups, $validate, $limit);
return $obj->parseAddressList();
}
if (isset($address)) $this->address = $address;
if (isset($default_domain)) $this->default_domain = $default_domain;
if (isset($nest_groups)) $this->nestGroups = $nest_groups;
if (isset($validate)) $this->validate = $validate;
if (isset($limit)) $this->limit = $limit;
$this->structure = array();
$this->addresses = array();
$this->error = null;
$this->index = null;
while ($this->address = $this->_splitAddresses($this->address)) {
continue;
}
if ($this->address === false || isset($this->error)) {
return false;
}
// Reset timer since large amounts of addresses can take a long time to
// get here
set_time_limit(30);
// Loop through all the addresses
for ($i = 0; $i < count($this->addresses); $i++){
if (($return = $this->_validateAddress($this->addresses[$i])) === false
|| isset($this->error)) {
return false;
}
if (!$this->nestGroups) {
$this->structure = array_merge($this->structure, $return);
} else {
$this->structure[] = $return;
}
}
return $this->structure;
}
/**
* Splits an address into seperate addresses.
*
* @access private
* @param string $address The addresses to split.
* @return boolean Success or failure.
*/
function _splitAddresses($address)
{
if (!empty($this->limit) AND count($this->addresses) == $this->limit) {
return '';
}
if ($this->_isGroup($address) && !isset($this->error)) {
$split_char = ';';
$is_group = true;
} elseif (!isset($this->error)) {
$split_char = ',';
$is_group = false;
} elseif (isset($this->error)) {
return false;
}
// Split the string based on the above ten or so lines.
$parts = explode($split_char, $address);
$string = $this->_splitCheck($parts, $split_char);
// If a group...
if ($is_group) {
// If $string does not contain a colon outside of
// brackets/quotes etc then something's fubar.
// First check there's a colon at all:
if (strpos($string, ':') === false) {
$this->error = 'Invalid address: ' . $string;
return false;
}
// Now check it's outside of brackets/quotes:
if (!$this->_splitCheck(explode(':', $string), ':'))
return false;
// We must have a group at this point, so increase the counter:
$this->num_groups++;
}
// $string now contains the first full address/group.
// Add to the addresses array.
$this->addresses[] = array(
'address' => trim($string),
'group' => $is_group
);
// Remove the now stored address from the initial line, the +1
// is to account for the explode character.
$address = trim(substr($address, strlen($string) + 1));
// If the next char is a comma and this was a group, then
// there are more addresses, otherwise, if there are any more
// chars, then there is another address.
if ($is_group && substr($address, 0, 1) == ','){
$address = trim(substr($address, 1));
return $address;
} elseif (strlen($address) > 0) {
return $address;
} else {
return '';
}
// If you got here then something's off
return false;
}
/**
* Checks for a group at the start of the string.
*
* @access private
* @param string $address The address to check.
* @return boolean Whether or not there is a group at the start of the string.
*/
function _isGroup($address)
{
// First comma not in quotes, angles or escaped:
$parts = explode(',', $address);
$string = $this->_splitCheck($parts, ',');
// Now we have the first address, we can reliably check for a
// group by searching for a colon that's not escaped or in
// quotes or angle brackets.
if (count($parts = explode(':', $string)) > 1) {
$string2 = $this->_splitCheck($parts, ':');
return ($string2 !== $string);
} else {
return false;
}
}
/**
* A common function that will check an exploded string.
*
* @access private
* @param array $parts The exloded string.
* @param string $char The char that was exploded on.
* @return mixed False if the string contains unclosed quotes/brackets, or the string on success.
*/
function _splitCheck($parts, $char)
{
$string = $parts[0];
for ($i = 0; $i < count($parts); $i++) {
if ($this->_hasUnclosedQuotes($string)
|| $this->_hasUnclosedBrackets($string, '<>')
|| $this->_hasUnclosedBrackets($string, '[]')
|| $this->_hasUnclosedBrackets($string, '()')
|| substr($string, -1) == '\\') {
if (isset($parts[$i + 1])) {
$string = $string . $char . $parts[$i + 1];
} else {
$this->error = 'Invalid address spec. Unclosed bracket or quotes';
return false;
}
} else {
$this->index = $i;
break;
}
}
return $string;
}
/**
* Checks if a string has an unclosed quotes or not.
*
* @access private
* @param string $string The string to check.
* @return boolean True if there are unclosed quotes inside the string, false otherwise.
*/
function _hasUnclosedQuotes($string)
{
$string = explode('"', $string);
$string_cnt = count($string);
for ($i = 0; $i < (count($string) - 1); $i++)
if (substr($string[$i], -1) == '\\')
$string_cnt--;
return ($string_cnt % 2 === 0);
}
/**
* Checks if a string has an unclosed brackets or not. IMPORTANT:
* This function handles both angle brackets and square brackets;
*
* @access private
* @param string $string The string to check.
* @param string $chars The characters to check for.
* @return boolean True if there are unclosed brackets inside the string, false otherwise.
*/
function _hasUnclosedBrackets($string, $chars)
{
$num_angle_start = substr_count($string, $chars[0]);
$num_angle_end = substr_count($string, $chars[1]);
$this->_hasUnclosedBracketsSub($string, $num_angle_start, $chars[0]);
$this->_hasUnclosedBracketsSub($string, $num_angle_end, $chars[1]);
if ($num_angle_start < $num_angle_end) {
$this->error = 'Invalid address spec. Unmatched quote or bracket (' . $chars . ')';
return false;
} else {
return ($num_angle_start > $num_angle_end);
}
}
/**
* Sub function that is used only by hasUnclosedBrackets().
*
* @access private
* @param string $string The string to check.
* @param integer &$num The number of occurences.
* @param string $char The character to count.
* @return integer The number of occurences of $char in $string, adjusted for backslashes.
*/
function _hasUnclosedBracketsSub($string, &$num, $char)
{
$parts = explode($char, $string);
for ($i = 0; $i < count($parts); $i++){
if (substr($parts[$i], -1) == '\\' || $this->_hasUnclosedQuotes($parts[$i]))
$num--;
if (isset($parts[$i + 1]))
$parts[$i + 1] = $parts[$i] . $char . $parts[$i + 1];
}
return $num;
}
/**
* Function to begin checking the address.
*
* @access private
* @param string $address The address to validate.
* @return mixed False on failure, or a structured array of address information on success.
*/
function _validateAddress($address)
{
$is_group = false;
if ($address['group']) {
$is_group = true;
// Get the group part of the name
$parts = explode(':', $address['address']);
$groupname = $this->_splitCheck($parts, ':');
$structure = array();
// And validate the group part of the name.
if (!$this->_validatePhrase($groupname)){
$this->error = 'Group name did not validate.';
return false;
} else {
// Don't include groups if we are not nesting
// them. This avoids returning invalid addresses.
if ($this->nestGroups) {
$structure = new stdClass;
$structure->groupname = $groupname;
}
}
$address['address'] = ltrim(substr($address['address'], strlen($groupname . ':')));
}
// If a group then split on comma and put into an array.
// Otherwise, Just put the whole address in an array.
if ($is_group) {
while (strlen($address['address']) > 0) {
$parts = explode(',', $address['address']);
$addresses[] = $this->_splitCheck($parts, ',');
$address['address'] = trim(substr($address['address'], strlen(end($addresses) . ',')));
}
} else {
$addresses[] = $address['address'];
}
// Check that $addresses is set, if address like this:
// Groupname:;
// Then errors were appearing.
if (!isset($addresses)){
$this->error = 'Empty group.';
return false;
}
for ($i = 0; $i < count($addresses); $i++) {
$addresses[$i] = trim($addresses[$i]);
}
// Validate each mailbox.
// Format could be one of: name <geezer@domain.com>
// geezer@domain.com
// geezer
// ... or any other format valid by RFC 822.
array_walk($addresses, array($this, 'validateMailbox'));
// Nested format
if ($this->nestGroups) {
if ($is_group) {
$structure->addresses = $addresses;
} else {
$structure = $addresses[0];
}
// Flat format
} else {
if ($is_group) {
$structure = array_merge($structure, $addresses);
} else {
$structure = $addresses;
}
}
return $structure;
}
/**
* Function to validate a phrase.
*
* @access private
* @param string $phrase The phrase to check.
* @return boolean Success or failure.
*/
function _validatePhrase($phrase)
{
// Splits on one or more Tab or space.
$parts = preg_split('/[ \\x09]+/', $phrase, -1, PREG_SPLIT_NO_EMPTY);
$phrase_parts = array();
while (count($parts) > 0){
$phrase_parts[] = $this->_splitCheck($parts, ' ');
for ($i = 0; $i < $this->index + 1; $i++)
array_shift($parts);
}
for ($i = 0; $i < count($phrase_parts); $i++) {
// If quoted string:
if (substr($phrase_parts[$i], 0, 1) == '"') {
if (!$this->_validateQuotedString($phrase_parts[$i]))
return false;
continue;
}
// Otherwise it's an atom:
if (!$this->_validateAtom($phrase_parts[$i])) return false;
}
return true;
}
/**
* Function to validate an atom which from rfc822 is:
* atom = 1*<any CHAR except specials, SPACE and CTLs>
*
* If validation ($this->validate) has been turned off, then
* validateAtom() doesn't actually check anything. This is so that you
* can split a list of addresses up before encoding personal names
* (umlauts, etc.), for example.
*
* @access private
* @param string $atom The string to check.
* @return boolean Success or failure.
*/
function _validateAtom($atom)
{
if (!$this->validate) {
// Validation has been turned off; assume the atom is okay.
return true;
}
// Check for any char from ASCII 0 - ASCII 127
if (!preg_match('/^[\\x00-\\x7E]+$/i', $atom, $matches)) {
return false;
}
// Check for specials:
if (preg_match('/[][()<>@,;\\:". ]/', $atom)) {
return false;
}
// Check for control characters (ASCII 0-31):
if (preg_match('/[\\x00-\\x1F]+/', $atom)) {
return false;
}
return true;
}
/**
* Function to validate quoted string, which is:
* quoted-string = <"> *(qtext/quoted-pair) <">
*
* @access private
* @param string $qstring The string to check
* @return boolean Success or failure.
*/
function _validateQuotedString($qstring)
{
// Leading and trailing "
$qstring = substr($qstring, 1, -1);
// Perform check.
return !(preg_match('/(.)[\x0D\\\\"]/', $qstring, $matches) && $matches[1] != '\\');
}
/**
* Function to validate a mailbox, which is:
* mailbox = addr-spec ; simple address
* / phrase route-addr ; name and route-addr
*
* @access public
* @param string &$mailbox The string to check.
* @return boolean Success or failure.
*/
function validateMailbox(&$mailbox)
{
// A couple of defaults.
$phrase = '';
$comment = '';
// Catch any RFC822 comments and store them separately
$_mailbox = $mailbox;
while (strlen(trim($_mailbox)) > 0) {
$parts = explode('(', $_mailbox);
$before_comment = $this->_splitCheck($parts, '(');
if ($before_comment != $_mailbox) {
// First char should be a (
$comment = substr(str_replace($before_comment, '', $_mailbox), 1);
$parts = explode(')', $comment);
$comment = $this->_splitCheck($parts, ')');
$comments[] = $comment;
// +1 is for the trailing )
$_mailbox = substr($_mailbox, strpos($_mailbox, $comment)+strlen($comment)+1);
} else {
break;
}
}
for($i=0; $i<count(@$comments); $i++){
$mailbox = str_replace('('.$comments[$i].')', '', $mailbox);
}
$mailbox = trim($mailbox);
// Check for name + route-addr
if (substr($mailbox, -1) == '>' && substr($mailbox, 0, 1) != '<') {
$parts = explode('<', $mailbox);
$name = $this->_splitCheck($parts, '<');
$phrase = trim($name);
$route_addr = trim(substr($mailbox, strlen($name.'<'), -1));
if ($this->_validatePhrase($phrase) === false || ($route_addr = $this->_validateRouteAddr($route_addr)) === false)
return false;
// Only got addr-spec
} else {
// First snip angle brackets if present.
if (substr($mailbox,0,1) == '<' && substr($mailbox,-1) == '>')
$addr_spec = substr($mailbox,1,-1);
else
$addr_spec = $mailbox;
if (($addr_spec = $this->_validateAddrSpec($addr_spec)) === false)
return false;
}
// Construct the object that will be returned.
$mbox = new stdClass();
// Add the phrase (even if empty) and comments
$mbox->personal = $phrase;
$mbox->comment = isset($comments) ? $comments : array();
if (isset($route_addr)) {
$mbox->mailbox = $route_addr['local_part'];
$mbox->host = $route_addr['domain'];
$route_addr['adl'] !== '' ? $mbox->adl = $route_addr['adl'] : '';
} else {
$mbox->mailbox = $addr_spec['local_part'];
$mbox->host = $addr_spec['domain'];
}
$mailbox = $mbox;
return true;
}
/**
* This function validates a route-addr which is:
* route-addr = "<" [route] addr-spec ">"
*
* Angle brackets have already been removed at the point of
* getting to this function.
*
* @access private
* @param string $route_addr The string to check.
* @return mixed False on failure, or an array containing validated address/route information on success.
*/
function _validateRouteAddr($route_addr)
{
// Check for colon.
if (strpos($route_addr, ':') !== false) {
$parts = explode(':', $route_addr);
$route = $this->_splitCheck($parts, ':');
} else {
$route = $route_addr;
}
// If $route is same as $route_addr then the colon was in
// quotes or brackets or, of course, non existent.
if ($route === $route_addr){
unset($route);
$addr_spec = $route_addr;
if (($addr_spec = $this->_validateAddrSpec($addr_spec)) === false) {
return false;
}
} else {
// Validate route part.
if (($route = $this->_validateRoute($route)) === false) {
return false;
}
$addr_spec = substr($route_addr, strlen($route . ':'));
// Validate addr-spec part.
if (($addr_spec = $this->_validateAddrSpec($addr_spec)) === false) {
return false;
}
}
if (isset($route)) {
$return['adl'] = $route;
} else {
$return['adl'] = '';
}
$return = array_merge($return, $addr_spec);
return $return;
}
/**
* Function to validate a route, which is:
* route = 1#("@" domain) ":"
*
* @access private
* @param string $route The string to check.
* @return mixed False on failure, or the validated $route on success.
*/
function _validateRoute($route)
{
// Split on comma.
$domains = explode(',', trim($route));
for ($i = 0; $i < count($domains); $i++) {
$domains[$i] = str_replace('@', '', trim($domains[$i]));
if (!$this->_validateDomain($domains[$i])) return false;
}
return $route;
}
/**
* Function to validate a domain, though this is not quite what
* you expect of a strict internet domain.
*
* domain = sub-domain *("." sub-domain)
*
* @access private
* @param string $domain The string to check.
* @return mixed False on failure, or the validated domain on success.
*/
function _validateDomain($domain)
{
// Note the different use of $subdomains and $sub_domains
$subdomains = explode('.', $domain);
while (count($subdomains) > 0) {
$sub_domains[] = $this->_splitCheck($subdomains, '.');
for ($i = 0; $i < $this->index + 1; $i++)
array_shift($subdomains);
}
for ($i = 0; $i < count($sub_domains); $i++) {
if (!$this->_validateSubdomain(trim($sub_domains[$i])))
return false;
}
// Managed to get here, so return input.
return $domain;
}
/**
* Function to validate a subdomain:
* subdomain = domain-ref / domain-literal
*
* @access private
* @param string $subdomain The string to check.
* @return boolean Success or failure.
*/
function _validateSubdomain($subdomain)
{
if (preg_match('|^\[(.*)]$|', $subdomain, $arr)){
if (!$this->_validateDliteral($arr[1])) return false;
} else {
if (!$this->_validateAtom($subdomain)) return false;
}
// Got here, so return successful.
return true;
}
/**
* Function to validate a domain literal:
* domain-literal = "[" *(dtext / quoted-pair) "]"
*
* @access private
* @param string $dliteral The string to check.
* @return boolean Success or failure.
*/
function _validateDliteral($dliteral)
{
return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && $matches[1] != '\\';
}
/**
* Function to validate an addr-spec.
*
* addr-spec = local-part "@" domain
*
* @access private
* @param string $addr_spec The string to check.
* @return mixed False on failure, or the validated addr-spec on success.
*/
function _validateAddrSpec($addr_spec)
{
$addr_spec = trim($addr_spec);
// Split on @ sign if there is one.
if (strpos($addr_spec, '@') !== false) {
$parts = explode('@', $addr_spec);
$local_part = $this->_splitCheck($parts, '@');
$domain = substr($addr_spec, strlen($local_part . '@'));
// No @ sign so assume the default domain.
} else {
$local_part = $addr_spec;
$domain = $this->default_domain;
}
if (($local_part = $this->_validateLocalPart($local_part)) === false) return false;
if (($domain = $this->_validateDomain($domain)) === false) return false;
// Got here so return successful.
return array('local_part' => $local_part, 'domain' => $domain);
}
/**
* Function to validate the local part of an address:
* local-part = word *("." word)
*
* @access private
* @param string $local_part
* @return mixed False on failure, or the validated local part on success.
*/
function _validateLocalPart($local_part)
{
$parts = explode('.', $local_part);
// Split the local_part into words.
while (count($parts) > 0){
$words[] = $this->_splitCheck($parts, '.');
for ($i = 0; $i < $this->index + 1; $i++) {
array_shift($parts);
}
}
// Validate each word.
for ($i = 0; $i < count($words); $i++) {
if ($this->_validatePhrase(trim($words[$i])) === false) return false;
}
// Managed to get here, so return the input.
return $local_part;
}
/**
* Returns an approximate count of how many addresses are
* in the given string. This is APPROXIMATE as it only splits
* based on a comma which has no preceding backslash. Could be
* useful as large amounts of addresses will end up producing
* *large* structures when used with parseAddressList().
*
* @param string $data Addresses to count
* @return int Approximate count
*/
function approximateCount($data)
{
return count(preg_split('/(?<!\\\\),/', $data));
}
/**
* This is a email validating function seperate to the rest
* of the class. It simply validates whether an email is of
* the common internet form: <user>@<domain>. This can be
* sufficient for most people. Optional stricter mode can
* be utilised which restricts mailbox characters allowed
* to alphanumeric, full stop, hyphen and underscore.
*
* @param string $data Address to check
* @param boolean $strict Optional stricter mode
* @return mixed False if it fails, an indexed array
* username/domain if it matches
*/
function isValidInetAddress($data, $strict = false)
{
$regex = $strict ? '/^([.0-9a-z_-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i' : '/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i';
if (preg_match($regex, trim($data), $matches)) {
return array($matches[1], $matches[2]);
} else {
return false;
}
}
}
?>

@ -1,777 +0,0 @@
<?php
/**
* Filename.......: class.html.mime.mail.inc
* Project........: HTML Mime mail class
* Last Modified..: $Date: 2007/06/19 15:29:18 $
* CVS Revision...: $Revision: 1.1 $
* Copyright......: 2001, 2002 Richard Heyes
*/
require_once(dirname(__FILE__) . '/mimePart.php');
class htmlMimeMail
{
/**
* The html part of the message
* @var string
*/
var $html;
/**
* The text part of the message(only used in TEXT only messages)
* @var string
*/
var $text;
/**
* The main body of the message after building
* @var string
*/
var $output;
/**
* The alternative text to the HTML part (only used in HTML messages)
* @var string
*/
var $html_text;
/**
* An array of embedded images/objects
* @var array
*/
var $html_images;
/**
* An array of recognised image types for the findHtmlImages() method
* @var array
*/
var $image_types;
/**
* Parameters that affect the build process
* @var array
*/
var $build_params;
/**
* Array of attachments
* @var array
*/
var $attachments;
/**
* The main message headers
* @var array
*/
var $headers;
/**
* Whether the message has been built or not
* @var boolean
*/
var $is_built;
/**
* The return path address. If not set the From:
* address is used instead
* @var string
*/
var $return_path;
/**
* Array of information needed for smtp sending
* @var array
*/
var $smtp_params;
/**
* Constructor function. Sets the headers
* if supplied.
*/
function htmlMimeMail()
{
/**
* Initialise some variables.
*/
$this->html_images = array();
$this->headers = array();
$this->is_built = false;
/**
* If you want the auto load functionality
* to find other image/file types, add the
* extension and content type here.
*/
$this->image_types = array(
'gif' => 'image/gif',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpe' => 'image/jpeg',
'bmp' => 'image/bmp',
'png' => 'image/png',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'swf' => 'application/x-shockwave-flash'
);
/**
* Set these up
*/
$this->build_params['html_encoding'] = 'quoted-printable';
$this->build_params['text_encoding'] = '7bit';
$this->build_params['html_charset'] = 'UTF-8';
$this->build_params['text_charset'] = 'UTF-8';
//$this->build_params['head_charset'] = 'ISO-8859-1';
$this->build_params['head_charset'] = 'UTF-8';
$this->build_params['text_wrap'] = 998;
/**
* Defaults for smtp sending
*/
if (!empty($GLOBALS['HTTP_SERVER_VARS']['HTTP_HOST'])) {
$helo = $GLOBALS['HTTP_SERVER_VARS']['HTTP_HOST'];
} elseif (!empty($GLOBALS['HTTP_SERVER_VARS']['SERVER_NAME'])) {
$helo = $GLOBALS['HTTP_SERVER_VARS']['SERVER_NAME'];
} else {
$helo = 'localhost';
}
$this->smtp_params['host'] = 'localhost';
$this->smtp_params['port'] = 25;
$this->smtp_params['helo'] = $helo;
$this->smtp_params['auth'] = false;
$this->smtp_params['user'] = '';
$this->smtp_params['pass'] = '';
/**
* Make sure the MIME version header is first.
*/
$this->headers['MIME-Version'] = '1.0';
}
/**
* This function will read a file in
* from a supplied filename and return
* it. This can then be given as the first
* argument of the the functions
* add_html_image() or add_attachment().
*/
function getFile($filename)
{
$return = '';
if ($fp = fopen($filename, 'rb')) {
while (!feof($fp)) {
$return .= fread($fp, 1024);
}
fclose($fp);
return $return;
} else {
return false;
}
}
/**
* Accessor to set the CRLF style
*/
function setCrlf($crlf = "\n")
{
if (!defined('CRLF')) {
define('CRLF', $crlf, true);
}
if (!defined('MAIL_MIMEPART_CRLF')) {
define('MAIL_MIMEPART_CRLF', $crlf, true);
}
}
/**
* Accessor to set the SMTP parameters
*/
function setSMTPParams($host = null, $port = null, $helo = null, $auth = null, $user = null, $pass = null)
{
if (!is_null($host)) $this->smtp_params['host'] = $host;
if (!is_null($port)) $this->smtp_params['port'] = $port;
if (!is_null($helo)) $this->smtp_params['helo'] = $helo;
if (!is_null($auth)) $this->smtp_params['auth'] = $auth;
if (!is_null($user)) $this->smtp_params['user'] = $user;
if (!is_null($pass)) $this->smtp_params['pass'] = $pass;
}
/**
* Accessor function to set the text encoding
*/
function setTextEncoding($encoding = '7bit')
{
$this->build_params['text_encoding'] = $encoding;
}
/**
* Accessor function to set the HTML encoding
*/
function setHtmlEncoding($encoding = 'quoted-printable')
{
$this->build_params['html_encoding'] = $encoding;
}
/**
* Accessor function to set the text charset
*/
function setTextCharset($charset = 'ISO-8859-1')
{
$this->build_params['text_charset'] = $charset;
}
/**
* Accessor function to set the HTML charset
*/
function setHtmlCharset($charset = 'ISO-8859-1')
{
$this->build_params['html_charset'] = $charset;
}
/**
* Accessor function to set the header encoding charset
*/
function setHeadCharset($charset = 'ISO-8859-1')
{
$this->build_params['head_charset'] = $charset;
}
/**
* Accessor function to set the text wrap count
*/
function setTextWrap($count = 998)
{
$this->build_params['text_wrap'] = $count;
}
/**
* Accessor to set a header
*/
function setHeader($name, $value)
{
$this->headers[$name] = $value;
}
/**
* Accessor to add a Subject: header
*/
function setSubject($subject)
{
$this->headers['Subject'] = $subject;
}
/**
* Accessor to add a From: header
*/
function setFrom($from)
{
$this->headers['From'] = $from;
}
/**
* Accessor to set the return path
*/
function setReturnPath($return_path)
{
$this->return_path = $return_path;
}
/**
* Accessor to add a Cc: header
*/
function setCc($cc)
{
$this->headers['Cc'] = $cc;
}
/**
* Accessor to add a Bcc: header
*/
function setBcc($bcc)
{
$this->headers['Bcc'] = $bcc;
}
/**
* Adds plain text. Use this function
* when NOT sending html email
*/
function setText($text = '')
{
$this->text = $text;
}
/**
* Adds a html part to the mail.
* Also replaces image names with
* content-id's.
*/
function setHtml($html, $text = null, $images_dir = null)
{
$this->html = $html;
$this->html_text = $text;
if (isset($images_dir)) {
$this->_findHtmlImages($images_dir);
}
}
/**
* Function for extracting images from
* html source. This function will look
* through the html code supplied by add_html()
* and find any file that ends in one of the
* extensions defined in $obj->image_types.
* If the file exists it will read it in and
* embed it, (not an attachment).
*
* @author Dan Allen
*/
function _findHtmlImages($images_dir)
{
// Build the list of image extensions
while (list($key,) = each($this->image_types)) {
$extensions[] = $key;
}
preg_match_all('/(?:"|\')([^"\']+\.('.implode('|', $extensions).'))(?:"|\')/Ui', $this->html, $images);
for ($i=0; $i<count($images[1]); $i++) {
if (file_exists($images_dir . $images[1][$i])) {
$html_images[] = $images[1][$i];
$this->html = str_replace($images[1][$i], basename($images[1][$i]), $this->html);
}
}
if (!empty($html_images)) {
// If duplicate images are embedded, they may show up as attachments, so remove them.
$html_images = array_unique($html_images);
sort($html_images);
for ($i=0; $i<count($html_images); $i++) {
if ($image = $this->getFile($images_dir.$html_images[$i])) {
$ext = substr($html_images[$i], strrpos($html_images[$i], '.') + 1);
$content_type = $this->image_types[strtolower($ext)];
$this->addHtmlImage($image, basename($html_images[$i]), $content_type);
}
}
}
}
/**
* Adds an image to the list of embedded
* images.
*/
function addHtmlImage($file, $name = '', $c_type='application/octet-stream')
{
$this->html_images[] = array(
'body' => $file,
'name' => $name,
'c_type' => $c_type,
'cid' => md5(uniqid(time()))
);
}
/**
* Adds a file to the list of attachments.
*/
function addAttachment($file, $name = '', $c_type='application/octet-stream', $encoding = 'base64')
{
$this->attachments[] = array(
'body' => $file,
'name' => $name,
'c_type' => $c_type,
'encoding' => $encoding
);
}
/**
* Adds a text subpart to a mime_part object
*/
function &_addTextPart(&$obj, $text)
{
$params['content_type'] = 'text/plain';
$params['encoding'] = $this->build_params['text_encoding'];
$params['charset'] = $this->build_params['text_charset'];
if (is_object($obj)) {
return $obj->addSubpart($text, $params);
} else {
return new Mail_mimePart($text, $params);
}
}
/**
* Adds a html subpart to a mime_part object
*/
function &_addHtmlPart(&$obj)
{
$params['content_type'] = 'text/html';
$params['encoding'] = $this->build_params['html_encoding'];
$params['charset'] = $this->build_params['html_charset'];
if (is_object($obj)) {
return $obj->addSubpart($this->html, $params);
} else {
return new Mail_mimePart($this->html, $params);
}
}
/**
* Starts a message with a mixed part
*/
function &_addMixedPart()
{
$params['content_type'] = 'multipart/mixed';
return new Mail_mimePart('', $params);
}
/**
* Adds an alternative part to a mime_part object
*/
function &_addAlternativePart(&$obj)
{
$params['content_type'] = 'multipart/alternative';
if (is_object($obj)) {
return $obj->addSubpart('', $params);
} else {
return new Mail_mimePart('', $params);
}
}
/**
* Adds a html subpart to a mime_part object
*/
function &_addRelatedPart(&$obj)
{
$params['content_type'] = 'multipart/related';
if (is_object($obj)) {
return $obj->addSubpart('', $params);
} else {
return new Mail_mimePart('', $params);
}
}
/**
* Adds an html image subpart to a mime_part object
*/
function &_addHtmlImagePart(&$obj, $value)
{
$params['content_type'] = $value['c_type'];
$params['encoding'] = 'base64';
$params['disposition'] = 'inline';
$params['dfilename'] = $value['name'];
$params['cid'] = $value['cid'];
$obj->addSubpart($value['body'], $params);
}
/**
* Adds an attachment subpart to a mime_part object
*/
function &_addAttachmentPart(&$obj, $value)
{
$params['content_type'] = $value['c_type'];
$params['encoding'] = $value['encoding'];
$params['disposition'] = 'attachment';
$params['dfilename'] = $value['name'];
$obj->addSubpart($value['body'], $params);
}
/**
* Builds the multipart message from the
* list ($this->_parts). $params is an
* array of parameters that shape the building
* of the message. Currently supported are:
*
* $params['html_encoding'] - The type of encoding to use on html. Valid options are
* "7bit", "quoted-printable" or "base64" (all without quotes).
* 7bit is EXPRESSLY NOT RECOMMENDED. Default is quoted-printable
* $params['text_encoding'] - The type of encoding to use on plain text Valid options are
* "7bit", "quoted-printable" or "base64" (all without quotes).
* Default is 7bit
* $params['text_wrap'] - The character count at which to wrap 7bit encoded data.
* Default this is 998.
* $params['html_charset'] - The character set to use for a html section.
* Default is ISO-8859-1
* $params['text_charset'] - The character set to use for a text section.
* - Default is ISO-8859-1
* $params['head_charset'] - The character set to use for header encoding should it be needed.
* - Default is ISO-8859-1
*/
function buildMessage($params = array())
{
if (!empty($params)) {
while (list($key, $value) = each($params)) {
$this->build_params[$key] = $value;
}
}
if (!empty($this->html_images)) {
foreach ($this->html_images as $value) {
$this->html = str_replace($value['name'], 'cid:'.$value['cid'], $this->html);
}
}
$null = null;
$attachments = !empty($this->attachments) ? true : false;
$html_images = !empty($this->html_images) ? true : false;
$html = !empty($this->html) ? true : false;
$text = isset($this->text) ? true : false;
switch (true) {
case $text AND !$attachments:
$message = &$this->_addTextPart($null, $this->text);
break;
case !$text AND $attachments AND !$html:
$message = &$this->_addMixedPart();
for ($i=0; $i<count($this->attachments); $i++) {
$this->_addAttachmentPart($message, $this->attachments[$i]);
}
break;
case $text AND $attachments:
$message = &$this->_addMixedPart();
$this->_addTextPart($message, $this->text);
for ($i=0; $i<count($this->attachments); $i++) {
$this->_addAttachmentPart($message, $this->attachments[$i]);
}
break;
case $html AND !$attachments AND !$html_images:
if (!is_null($this->html_text)) {
$message = &$this->_addAlternativePart($null);
$this->_addTextPart($message, $this->html_text);
$this->_addHtmlPart($message);
} else {
$message = &$this->_addHtmlPart($null);
}
break;
case $html AND !$attachments AND $html_images:
if (!is_null($this->html_text)) {
$message = &$this->_addAlternativePart($null);
$this->_addTextPart($message, $this->html_text);
$related = &$this->_addRelatedPart($message);
} else {
$message = &$this->_addRelatedPart($null);
$related = &$message;
}
$this->_addHtmlPart($related);
for ($i=0; $i<count($this->html_images); $i++) {
$this->_addHtmlImagePart($related, $this->html_images[$i]);
}
break;
case $html AND $attachments AND !$html_images:
$message = &$this->_addMixedPart();
if (!is_null($this->html_text)) {
$alt = &$this->_addAlternativePart($message);
$this->_addTextPart($alt, $this->html_text);
$this->_addHtmlPart($alt);
} else {
$this->_addHtmlPart($message);
}
for ($i=0; $i<count($this->attachments); $i++) {
$this->_addAttachmentPart($message, $this->attachments[$i]);
}
break;
case $html AND $attachments AND $html_images:
$message = &$this->_addMixedPart();
if (!is_null($this->html_text)) {
$alt = &$this->_addAlternativePart($message);
$this->_addTextPart($alt, $this->html_text);
$rel = &$this->_addRelatedPart($alt);
} else {
$rel = &$this->_addRelatedPart($message);
}
$this->_addHtmlPart($rel);
for ($i=0; $i<count($this->html_images); $i++) {
$this->_addHtmlImagePart($rel, $this->html_images[$i]);
}
for ($i=0; $i<count($this->attachments); $i++) {
$this->_addAttachmentPart($message, $this->attachments[$i]);
}
break;
}
if (isset($message)) {
$output = $message->encode();
$this->output = $output['body'];
$this->headers = array_merge($this->headers, $output['headers']);
// Add message ID header
srand((double)microtime()*10000000);
//$message_id = sprintf('<%s.%s@%s>', base_convert(time(), 10, 36), base_convert(rand(), 10, 36), !empty($GLOBALS['HTTP_SERVER_VARS']['HTTP_HOST']) ? $GLOBALS['HTTP_SERVER_VARS']['HTTP_HOST'] : $GLOBALS['HTTP_SERVER_VARS']['SERVER_NAME']);
// *** don't want to show atrium.ryzom.com in headers, so forcing to www.ryzom.com
$message_id = sprintf('<%s.%s@%s>', base_convert(time(), 10, 36), base_convert(rand(), 10, 36), 'www.ryzom.com');
$this->headers['Message-ID'] = $message_id;
$this->is_built = true;
return true;
} else {
return false;
}
}
/**
* Function to encode a header if necessary
* according to RFC2047
*/
function _encodeHeader($input, $charset = 'ISO-8859-1')
{
preg_match_all('/(\w*[\x80-\xFF]+\w*)/', $input, $matches);
foreach ($matches[1] as $value) {
$replacement = preg_replace('/([\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $value);
$input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
}
return $input;
}
/**
* Sends the mail.
*
* @param array $recipients
* @param string $type OPTIONAL
* @return mixed
*/
function send($recipients, $type = 'mail')
{
if (!defined('CRLF')) {
$this->setCrlf($type == 'mail' ? "\n" : "\r\n");
}
if (!$this->is_built) {
$this->buildMessage();
}
switch ($type) {
case 'mail':
$subject = '';
if (!empty($this->headers['Subject'])) {
$subject = $this->_encodeHeader($this->headers['Subject'], $this->build_params['head_charset']);
unset($this->headers['Subject']);
}
// Get flat representation of headers
foreach ($this->headers as $name => $value) {
$headers[] = $name . ': ' . $this->_encodeHeader($value, $this->build_params['head_charset']);
}
$to = $this->_encodeHeader(implode(', ', $recipients), $this->build_params['head_charset']);
if (!empty($this->return_path)) {
$result = mail($to, $subject, $this->output, implode(CRLF, $headers), '-f' . $this->return_path);
} else {
$result = mail($to, $subject, $this->output, implode(CRLF, $headers));
}
// Reset the subject in case mail is resent
if ($subject !== '') {
$this->headers['Subject'] = $subject;
}
// Return
return $result;
break;
case 'smtp':
require_once(dirname(__FILE__) . '/smtp.php');
require_once(dirname(__FILE__) . '/RFC822.php');
$smtp = &smtp::connect($this->smtp_params);
// Parse recipients argument for internet addresses
foreach ($recipients as $recipient) {
$addresses = Mail_RFC822::parseAddressList($recipient, $this->smtp_params['helo'], null, false);
foreach ($addresses as $address) {
$smtp_recipients[] = sprintf('%s@%s', $address->mailbox, $address->host);
}
}
unset($addresses); // These are reused
unset($address); // These are reused
// Get flat representation of headers, parsing
// Cc and Bcc as we go
foreach ($this->headers as $name => $value) {
if ($name == 'Cc' OR $name == 'Bcc') {
$addresses = Mail_RFC822::parseAddressList($value, $this->smtp_params['helo'], null, false);
foreach ($addresses as $address) {
$smtp_recipients[] = sprintf('%s@%s', $address->mailbox, $address->host);
}
}
if ($name == 'Bcc') {
continue;
}
$headers[] = $name . ': ' . $this->_encodeHeader($value, $this->build_params['head_charset']);
}
// Add To header based on $recipients argument
$headers[] = 'To: ' . $this->_encodeHeader(implode(', ', $recipients), $this->build_params['head_charset']);
// Add headers to send_params
$send_params['headers'] = $headers;
$send_params['recipients'] = array_values(array_unique($smtp_recipients));
$send_params['body'] = $this->output;
// Setup return path
if (isset($this->return_path)) {
$send_params['from'] = $this->return_path;
} elseif (!empty($this->headers['From'])) {
$from = Mail_RFC822::parseAddressList($this->headers['From']);
$send_params['from'] = sprintf('%s@%s', $from[0]->mailbox, $from[0]->host);
} else {
$send_params['from'] = 'postmaster@' . $this->smtp_params['helo'];
}
// Send it
if (!$smtp->send($send_params)) {
$this->errors = $smtp->errors;
return false;
}
return true;
break;
}
}
/**
* Use this method to return the email
* in message/rfc822 format. Useful for
* adding an email to another email as
* an attachment. there's a commented
* out example in example.php.
*/
function getRFC822($recipients)
{
// Make up the date header as according to RFC822
$this->setHeader('Date', date('D, d M y H:i:s O'));
if (!defined('CRLF')) {
$this->setCrlf($type == 'mail' ? "\n" : "\r\n");
}
if (!$this->is_built) {
$this->buildMessage();
}
// Return path ?
if (isset($this->return_path)) {
$headers[] = 'Return-Path: ' . $this->return_path;
}
// Get flat representation of headers
foreach ($this->headers as $name => $value) {
$headers[] = $name . ': ' . $value;
}
$headers[] = 'To: ' . implode(', ', $recipients);
return implode(CRLF, $headers) . CRLF . CRLF . $this->output;
}
} // End of class.
?>

@ -1,333 +0,0 @@
<?php
//
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2002 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Richard Heyes <richard@phpguru.org> |
// +----------------------------------------------------------------------+
/**
*
* Raw mime encoding class
*
* What is it?
* This class enables you to manipulate and build
* a mime email from the ground up.
*
* Why use this instead of mime.php?
* mime.php is a userfriendly api to this class for
* people who aren't interested in the internals of
* mime mail. This class however allows full control
* over the email.
*
* Eg.
*
* // Since multipart/mixed has no real body, (the body is
* // the subpart), we set the body argument to blank.
*
* $params['content_type'] = 'multipart/mixed';
* $email = new Mail_mimePart('', $params);
*
* // Here we add a text part to the multipart we have
* // already. Assume $body contains plain text.
*
* $params['content_type'] = 'text/plain';
* $params['encoding'] = '7bit';
* $text = $email->addSubPart($body, $params);
*
* // Now add an attachment. Assume $attach is
* the contents of the attachment
*
* $params['content_type'] = 'application/zip';
* $params['encoding'] = 'base64';
* $params['disposition'] = 'attachment';
* $params['dfilename'] = 'example.zip';
* $attach =& $email->addSubPart($body, $params);
*
* // Now build the email. Note that the encode
* // function returns an associative array containing two
* // elements, body and headers. You will need to add extra
* // headers, (eg. Mime-Version) before sending.
*
* $email = $message->encode();
* $email['headers'][] = 'Mime-Version: 1.0';
*
*
* Further examples are available at http://www.phpguru.org
*
* TODO:
* - Set encode() to return the $obj->encoded if encode()
* has already been run. Unless a flag is passed to specifically
* re-build the message.
*
* @author Richard Heyes <richard@phpguru.org>
* @version $Revision: 1.1 $
* @package Mail
*/
class Mail_mimePart {
/**
* The encoding type of this part
* @var string
*/
var $_encoding;
/**
* An array of subparts
* @var array
*/
var $_subparts;
/**
* The output of this part after being built
* @var string
*/
var $_encoded;
/**
* Headers for this part
* @var array
*/
var $_headers;
/**
* The body of this part (not encoded)
* @var string
*/
var $_body;
/**
* Constructor.
*
* Sets up the object.
*
* @param $body - The body of the mime part if any.
* @param $params - An associative array of parameters:
* content_type - The content type for this part eg multipart/mixed
* encoding - The encoding to use, 7bit, 8bit, base64, or quoted-printable
* cid - Content ID to apply
* disposition - Content disposition, inline or attachment
* dfilename - Optional filename parameter for content disposition
* description - Content description
* charset - Character set to use
* @access public
*/
function Mail_mimePart($body = '', $params = array())
{
if (!defined('MAIL_MIMEPART_CRLF')) {
define('MAIL_MIMEPART_CRLF', defined('MAIL_MIME_CRLF') ? MAIL_MIME_CRLF : "\r\n", TRUE);
}
foreach ($params as $key => $value) {
switch ($key) {
case 'content_type':
$headers['Content-Type'] = $value . (isset($charset) ? '; charset="' . $charset . '"' : '');
break;
case 'encoding':
$this->_encoding = $value;
$headers['Content-Transfer-Encoding'] = $value;
break;
case 'cid':
$headers['Content-ID'] = '<' . $value . '>';
break;
case 'disposition':
$headers['Content-Disposition'] = $value . (isset($dfilename) ? '; filename="' . $dfilename . '"' : '');
break;
case 'dfilename':
if (isset($headers['Content-Disposition'])) {
$headers['Content-Disposition'] .= '; filename="' . $value . '"';
} else {
$dfilename = $value;
}
break;
case 'description':
$headers['Content-Description'] = $value;
break;
case 'charset':
if (isset($headers['Content-Type'])) {
$headers['Content-Type'] .= '; charset="' . $value . '"';
} else {
$charset = $value;
}
break;
}
}
// Default content-type
if (!isset($headers['Content-Type'])) {
$headers['Content-Type'] = 'text/plain';
}
//Default encoding
if (!isset($this->_encoding)) {
$this->_encoding = '7bit';
}
// Assign stuff to member variables
$this->_encoded = array();
$this->_headers = $headers;
$this->_body = $body;
}
/**
* encode()
*
* Encodes and returns the email. Also stores
* it in the encoded member variable
*
* @return An associative array containing two elements,
* body and headers. The headers element is itself
* an indexed array.
* @access public
*/
function encode()
{
$encoded =& $this->_encoded;
if (!empty($this->_subparts)) {
srand((double)microtime()*1000000);
$boundary = '=_' . md5(uniqid(rand()) . microtime());
$this->_headers['Content-Type'] .= ';' . MAIL_MIMEPART_CRLF . "\t" . 'boundary="' . $boundary . '"';
// Add body parts to $subparts
for ($i = 0; $i < count($this->_subparts); $i++) {
$headers = array();
$tmp = $this->_subparts[$i]->encode();
foreach ($tmp['headers'] as $key => $value) {
$headers[] = $key . ': ' . $value;
}
$subparts[] = implode(MAIL_MIMEPART_CRLF, $headers) . MAIL_MIMEPART_CRLF . MAIL_MIMEPART_CRLF . $tmp['body'];
}
$encoded['body'] = '--' . $boundary . MAIL_MIMEPART_CRLF .
implode('--' . $boundary . MAIL_MIMEPART_CRLF, $subparts) .
'--' . $boundary.'--' . MAIL_MIMEPART_CRLF;
} else {
$encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding) . MAIL_MIMEPART_CRLF;
}
// Add headers to $encoded
$encoded['headers'] =& $this->_headers;
return $encoded;
}
/**
* &addSubPart()
*
* Adds a subpart to current mime part and returns
* a reference to it
*
* @param $body The body of the subpart, if any.
* @param $params The parameters for the subpart, same
* as the $params argument for constructor.
* @return A reference to the part you just added. It is
* crucial if using multipart/* in your subparts that
* you use =& in your script when calling this function,
* otherwise you will not be able to add further subparts.
* @access public
*/
function &addSubPart($body, $params)
{
$this->_subparts[] = new Mail_mimePart($body, $params);
return $this->_subparts[count($this->_subparts) - 1];
}
/**
* _getEncodedData()
*
* Returns encoded data based upon encoding passed to it
*
* @param $data The data to encode.
* @param $encoding The encoding type to use, 7bit, base64,
* or quoted-printable.
* @access private
*/
function _getEncodedData($data, $encoding)
{
switch ($encoding) {
case '8bit':
case '7bit':
return $data;
break;
case 'quoted-printable':
return $this->_quotedPrintableEncode($data);
break;
case 'base64':
return rtrim(chunk_split(base64_encode($data), 76, MAIL_MIMEPART_CRLF));
break;
default:
return $data;
}
}
/**
* quoteadPrintableEncode()
*
* Encodes data to quoted-printable standard.
*
* @param $input The data to encode
* @param $line_max Optional max line length. Should
* not be more than 76 chars
*
* @access private
*/
function _quotedPrintableEncode($input , $line_max = 76)
{
$lines = preg_split("/\r?\n/", $input);
$eol = MAIL_MIMEPART_CRLF;
$escape = '=';
$output = '';
while(list(, $line) = each($lines)){
$linlen = strlen($line);
$newline = '';
for ($i = 0; $i < $linlen; $i++) {
$char = substr($line, $i, 1);
$dec = ord($char);
if (($dec == 32) AND ($i == ($linlen - 1))){ // convert space at eol only
$char = '=20';
} elseif($dec == 9) {
; // Do nothing if a tab.
} elseif(($dec == 61) OR ($dec < 32 ) OR ($dec > 126)) {
$char = $escape . strtoupper(sprintf('%02s', dechex($dec)));
}
if ((strlen($newline) + strlen($char)) >= $line_max) { // MAIL_MIMEPART_CRLF is not counted
$output .= $newline . $escape . $eol; // soft line break; " =\r\n" is okay
$newline = '';
}
$newline .= $char;
} // end of for
$output .= $newline . $eol;
}
$output = substr($output, 0, -1 * strlen($eol)); // Don't want last crlf
return $output;
}
} // End of class
?>

@ -1,359 +0,0 @@
<?php
/**
* Filename.......: class.smtp.inc
* Project........: SMTP Class
* Version........: 1.0.5
* Last Modified..: 21 December 2001
*/
define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);
define('SMTP_STATUS_CONNECTED', 2, TRUE);
class smtp{
var $authenticated;
var $connection;
var $recipients;
var $headers;
var $timeout;
var $errors;
var $status;
var $body;
var $from;
var $host;
var $port;
var $helo;
var $auth;
var $user;
var $pass;
/**
* Constructor function. Arguments:
* $params - An assoc array of parameters:
*
* host - The hostname of the smtp server Default: localhost
* port - The port the smtp server runs on Default: 25
* helo - What to send as the HELO command Default: localhost
* (typically the hostname of the
* machine this script runs on)
* auth - Whether to use basic authentication Default: FALSE
* user - Username for authentication Default: <blank>
* pass - Password for authentication Default: <blank>
* timeout - The timeout in seconds for the call Default: 5
* to fsockopen()
*/
function smtp($params = array()){
if(!defined('CRLF'))
define('CRLF', "\r\n", TRUE);
$this->authenticated = FALSE;
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array();
foreach($params as $key => $value){
$this->$key = $value;
}
}
/**
* Connect function. This will, when called
* statically, create a new smtp object,
* call the connect function (ie this function)
* and return it. When not called statically,
* it will connect to the server and send
* the HELO command.
*/
function &connect($params = array()){
if(!isset($this->status)){
$obj = new smtp($params);
if($obj->connect()){
$obj->status = SMTP_STATUS_CONNECTED;
}
return $obj;
}else{
$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
if(function_exists('socket_set_timeout')){
@socket_set_timeout($this->connection, 5, 0);
}
$greeting = $this->get_data();
if(is_resource($this->connection)){
return $this->auth ? $this->ehlo() : $this->helo();
}else{
$this->errors[] = 'Failed to connect to server: '.$errstr;
return FALSE;
}
}
}
/**
* Function which handles sending the mail.
* Arguments:
* $params - Optional assoc array of parameters.
* Can contain:
* recipients - Indexed array of recipients
* from - The from address. (used in MAIL FROM:),
* this will be the return path
* headers - Indexed array of headers, one header per array entry
* body - The body of the email
* It can also contain any of the parameters from the connect()
* function
*/
function send($params = array()){
foreach($params as $key => $value){
$this->set($key, $value);
}
if($this->is_connected()){
// Do we auth or not? Note the distinction between the auth variable and auth() function
if($this->auth AND !$this->authenticated){
if(!$this->auth())
return FALSE;
}
$this->mail($this->from);
if(is_array($this->recipients))
foreach($this->recipients as $value)
$this->rcpt($value);
else
$this->rcpt($this->recipients);
if(!$this->data())
return FALSE;
// Transparency
$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers)));
$body = str_replace(CRLF.'.', CRLF.'..', $this->body);
$body = $body[0] == '.' ? '.'.$body : $body;
$this->send_data($headers);
$this->send_data('');
$this->send_data($body);
$this->send_data('.');
$result = (substr(trim($this->get_data()), 0, 3) === '250');
//$this->rset();
return $result;
}else{
$this->errors[] = 'Not connected!';
return FALSE;
}
}
/**
* Function to implement HELO cmd
*/
function helo(){
if(is_resource($this->connection)
AND $this->send_data('HELO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
}else{
$this->errors[] = 'HELO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/**
* Function to implement EHLO cmd
*/
function ehlo(){
if(is_resource($this->connection)
AND $this->send_data('EHLO '.$this->helo)
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
}else{
$this->errors[] = 'EHLO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/**
* Function to implement RSET cmd
*/
function rset(){
if(is_resource($this->connection)
AND $this->send_data('RSET')
AND substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
}else{
$this->errors[] = 'RSET command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/**
* Function to implement QUIT cmd
*/
function quit(){
if(is_resource($this->connection)
AND $this->send_data('QUIT')
AND substr(trim($error = $this->get_data()), 0, 3) === '221' ){
fclose($this->connection);
$this->status = SMTP_STATUS_NOT_CONNECTED;
return TRUE;
}else{
$this->errors[] = 'QUIT command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/**
* Function to implement AUTH cmd
*/
function auth(){
if(is_resource($this->connection)
AND $this->send_data('AUTH LOGIN')
AND substr(trim($error = $this->get_data()), 0, 3) === '334'
AND $this->send_data(base64_encode($this->user)) // Send username
AND substr(trim($error = $this->get_data()),0,3) === '334'
AND $this->send_data(base64_encode($this->pass)) // Send password
AND substr(trim($error = $this->get_data()),0,3) === '235' ){
$this->authenticated = TRUE;
return TRUE;
}else{
$this->errors[] = 'AUTH command failed: ' . trim(substr(trim($error),3));
return FALSE;
}
}
/**
* Function that handles the MAIL FROM: cmd
*/
function mail($from){
if($this->is_connected()
AND $this->send_data('MAIL FROM:<'.$from.'>')
AND substr(trim($this->get_data()), 0, 2) === '250' ){
return TRUE;
}else
return FALSE;
}
/**
* Function that handles the RCPT TO: cmd
*/
function rcpt($to){
if($this->is_connected()
AND $this->send_data('RCPT TO:<'.$to.'>')
AND substr(trim($error = $this->get_data()), 0, 2) === '25' ){
return TRUE;
}else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}
/**
* Function that sends the DATA cmd
*/
function data(){
if($this->is_connected()
AND $this->send_data('DATA')
AND substr(trim($error = $this->get_data()), 0, 3) === '354' ){
return TRUE;
}else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}
/**
* Function to determine if this object
* is connected to the server or not.
*/
function is_connected(){
return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));
}
/**
* Function to send a bit of data
*/
function send_data($data){
if(is_resource($this->connection)){
return fwrite($this->connection, $data.CRLF, strlen($data)+2);
}else
return FALSE;
}
/**
* Function to get data.
*/
function &get_data(){
$return = '';
$line = '';
$loops = 0;
if(is_resource($this->connection)){
while((strpos($return, CRLF) === FALSE OR substr($line,3,1) !== ' ') AND $loops < 100){
$line = fgets($this->connection, 512);
$return .= $line;
$loops++;
}
return $return;
}else
return FALSE;
}
/**
* Sets a variable
*/
function set($var, $value){
$this->$var = $value;
return TRUE;
}
} // End of class
?>

@ -1,108 +0,0 @@
<?php
/////////////////////////////////////////////////////////////////
// WARNING : this is a generated file, don't change it !
/////////////////////////////////////////////////////////////////
require_once('../tools/nel_message.php');
class CLoginServiceWeb extends CCallbackClient
{
function login($userId, $ipAddress, $domainId)
{
$msg = new CMessage;
$msg->setName("LG");
$msg->serialUint32($userId);
$msg->serialString($ipAddress);
$msg->serialUint32($domainId);
return parent::sendMessage($msg);
}
function logout($userId)
{
$msg = new CMessage;
$msg->setName("LO");
$msg->serialUint32($userId);
return parent::sendMessage($msg);
}
function waitCallback()
{
$message = parent::waitMessage();
if ($message == false)
return false;
switch($message->MsgName)
{
case "LGR":
$this->loginResult_skel($message);
break;
case "LGOR":
$this->logoutResult_skel($message);
break;
default:
return false;
}
return true;
}
function loginResult_skel(&$message)
{
$message->serialUint32($userId);
$message->serialString($cookie);
$message->serialUint32($resultCode);
$message->serialString($errorString);
$this->loginResult($userId, $cookie, $resultCode, $errorString);
}
function logoutResult_skel(&$message)
{
$message->serialUint32($errorCode);
$message->serialString($reason);
$this->logoutResult($errorCode, $reason);
}
/////////////////////////////////////////////////////////////////
// Copy paste this part of code in your derived class
// and implement code to ract to incoming message
/////////////////////////////////////////////////////////////////
// Return the cookie generated for this user session
// Eventualy, return an empty string as cookie in case of error
// resultCode : 0 - ok, login success
// 1 - invalid user
// 2 - user already online, must relog
// errorString contain a stringified description in case of error
function loginResult($userId, $cookie, $resultCode, $errorString)
{
}
// Return an error code for the logout attemp
// If return is not 0, then reason contains a debug string
// Return values : 0 - ok
// 1 - invalid user
// 2 - user already offline
function logoutResult($errorCode, $reason)
{
}
}
?>

@ -1,345 +0,0 @@
<?
/*
* Message tables.
* Each msg can contain %0..%n arguments (see also errorMsg()).
* %0 contains the error code passed to errorMsg(), even if the text is factorized in another message linked with 'lnk'.
*/
$ErrMsgs = array();
// Generic error message
define('GENERIC_ERROR_NUM', 1000);
$ErrMsgs[1000]['dbg'] = 'Generic login error';
$ErrMsgs[1000]['en'] = 'Error';
$ErrMsgs[1000]['fr'] = 'Erreur';
$ErrMsgs[1000]['de'] = 'Error';
// Common public error messages
$msgMisconfiguredClient['en'] = 'Your client might be misconfigured, please contact support';
$msgMisconfiguredClient['fr'] = 'Il se peut que votre client soit mal configuré, merci de contacter le service client';
$msgMisconfiguredClient['de'] = 'Dein Client ist möglicherweise falsch konfiguriert, bitte kontaktiere den Support';
$msgOutOfDateClient['en'] = 'This client software is out of date, please visit www.ryzom.com to download a new client';
$msgOutOfDateClient['fr'] = 'Ce logiciel client est trop ancien, merci de télécharger un nouveau client sur www.ryzom.com';
$msgOutOfDateClient['de'] = 'Die Software ist nicht mehr aktuell bitte geh auf www.ryzom.com und lade dir den neuen Client herunter';
$msgLSInMaintenance['en'] = 'The log-in server is in maintenance, please try later';
$msgLSInMaintenance['fr'] = 'Le serveur de connexion est en maintenance, merci de réessayer plus tard';
$msgLSInMaintenance['de'] = 'Der Login-Server ist wegen Wartungsarbeiten offline, bitte versuch es später nochmal';
$msgDBInMaintenance['en'] = 'The database server is in maintenance, please try later';
$msgDBInMaintenance['fr'] = 'Le serveur de base de données est en maintenance, merci de réessayer plus tard';
$msgDBInMaintenance['de'] = 'Der Datenbank-Server ist wegen Wartungsarbeiten offline, bitte versuch es später nochmal';
$msgGameServersClosed['en'] = 'Game servers are currently closed or restricted, please retry later';
$msgGameServersClosed['fr'] = 'Les serveurs de jeu sont actuellement fermés ou à accès restreint, merci de réessayer plus tard';
$msgGameServersClosed['de'] = 'Die Spiel-Server sind momentan geschlossen oder gesperrt, bitte versuch es später nochmal';
/*
* Main account error messages:
*/
$ErrMsgs[2001]['dbg'] = '(in %2)';
$ErrMsgs[2001]['en'] = 'Invalid account: %1'; // ex 52 and 64
$ErrMsgs[2001]['fr'] = 'Compte erroné : %1';
$ErrMsgs[2001]['de'] = 'Ungültiger Account: %1';
$ErrMsgs[2001]['log'] = false;
$ErrMsgs[2002]['en'] = "Your account must be activated first. Please read the email sent to %1.";
$ErrMsgs[2002]['fr'] = "Votre compte doit d'abord être activé. Merci de lire l'e-mail envoyé à %1.";
$ErrMsgs[2002]['de'] = "Dein Account muss noch aktiviert werden. Bitte befolge die Anweisungen, die wir per Mail an %1 geschickt haben.";
$ErrMsgs[2002]['log'] = false;
$ErrMsgs[2003]['en'] = "Your account must be activated first. Please read the email that has been sent to you.";
$ErrMsgs[2003]['fr'] = "Votre compte doit d'abord être activé. Merci de lire l'e-mail que nous vous avons envoyé.";
$ErrMsgs[2003]['de'] = "Dein Account muss noch aktiviert werden. Bitte befolge die Anweisungen, die wir per Mail an Dich geschickt haben.";
$ErrMsgs[2003]['log'] = false;
$ErrMsgs[2004]['dbg'] = '(in %2)'; // user => ex 56; signup_data => ex 56B
$ErrMsgs[2004]['en'] = "Invalid password";
$ErrMsgs[2004]['fr'] = "Mot de passe erroné";
$ErrMsgs[2004]['de'] = "Falsches Passwort";
$ErrMsgs[2004]['log'] = false;
// Translated Login Service error messages
define('BASE_TRANSLATED_LS_ERROR_NUM', 2100);
$ErrMsgs[2101]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2101]['en'] = 'Invalid account'; // ex 1?: 'invalid user'
$ErrMsgs[2101]['fr'] = 'Compte erroné';
$ErrMsgs[2101]['de'] = 'Ungültiger Account';
$ErrMsgs[2102]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2102]['en'] = 'Your account is already in online state, please retry in a few seconds'; // ex 2: 'User already online, please relog'
$ErrMsgs[2102]['fr'] = "Votre compte est encore dans l'état en ligne, merci de réessayer dans quelques secondes";
$ErrMsgs[2102]['de'] = 'Dein Account ist schon als online gekennzeichnet, bitte versuche es in ein paar Sekunden nochmals';
$ErrMsgs[2102]['log'] = false;
$ErrMsgs[2103]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2103]['en'] = 'Dual logging with a Privileged account is not permitted; this action has been logged and Gameforge CS has been notified';
$ErrMsgs[2103]['fr'] = 'TODO';
$ErrMsgs[2103]['de'] = 'TODO';
$ErrMsgs[2103]['mail'] = array('duallog@ryzom.com', "Dual Logging with GM account detected",
"UserId %3 attempted to log-in while related account (linked through GMId) was in online state (error code %0).\n".
"Message from server: %2\n".
"This could be a false positive if the user just disconnected without waiting for 30 s, and tried to log-in with their other account.");
$ErrMsgs[2104]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2104]['lnk'] = $ErrMsgs[2103];
$ErrMsgs[2105]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2105]['lnk'] = $ErrMsgs[2101];
$ErrMsgs[2106]['dbg'] = '(LS error %1: %2 for userId %3)';
$ErrMsgs[2106]['lnk'] = $msgDBInMaintenance;
/*
* Technical error messages:
* "visible" error messages (server down, etc.) are localized,
* unlike errors that should never occur (ex: bad parameters from client)
*/
define('BASE_TECHNICAL_ERROR_NUM', 3000);
$ErrMsgs[3001]['dbg'] = 'Failed to find a ring domain record for domainId: %1';
$ErrMsgs[3002]['dbg'] = 'Missing cmd';
$ErrMsgs[3003]['dbg'] = 'No response from Shard Unifier';
$ErrMsgs[3003]['lnk'] = $msgLSInMaintenance;
$ErrMsgs[3004]['dbg'] = "Can't connect to the %1 db server host:%2 user:%3";
$ErrMsgs[3004]['lnk'] = $msgDBInMaintenance;
$ErrMsgs[3005]['dbg'] = "Can't access the %1 database db:%2 host:%3 user:%4 (check privileges)";
$ErrMsgs[3005]['lnk'] = $msgDBInMaintenance;
$ErrMsgs[3006]['dbg'] = "Can't execute query '%1' on the %2 database db:%3 host:%4 user:%5 error:%6";
$ErrMsgs[3006]['lnk'] = $msgDBInMaintenance;
$ErrMsgs[3007]['dbg'] = "Can't find domain: %1"; // ex 'x'
$ErrMsgs[3007]['lnk'] = $msgMisconfiguredClient;
$ErrMsgs[3007]['add'] = 'dbg';
$ErrMsgs[3008]['dbg'] = "Login '%1' was created because it was not found in database"; // ex 50
$ErrMsgs[3009]['dbg'] = "Can't fetch login '%1' after insertion"; // ex 51
$ErrMsgs[3010]['dbg'] = "No permission found, but I need to accept Unknown user, so permission created, please RELOG";
$ErrMsgs[3011]['dbg'] = "(client application: %1 domain: %2)"; // ex 53
$ErrMsgs[3011]['en'] = "Your account needs a proper subscription to connect";
$ErrMsgs[3011]['fr'] = "Votre compte doit avoir un abonnement actif pour se connecter";
$ErrMsgs[3011]['de'] = 'Du kannst dich nicht ohne abgeschlossenes Abonemment in deinen Account einloggen';
$ErrMsgs[3011]['add'] = 'dbg';
$ErrMsgs[3011]['log'] = false;
$ErrMsgs[3012]['dbg'] = "No access privilege found for %1, but I need to accept Unknown user, so permission created, RELOG";
$ErrMsgs[3013]['dbg'] = "(client application: %1 domain: %2 reqPriv: %3)";
$ErrMsgs[3013]['en'] = "You don't have sufficient privilege to connect now, please try later";
$ErrMsgs[3013]['fr'] = "Vous n'avez pas les privilèges nécessaires pour vous connecter maintenant, veuillez essayer plus tard";
$ErrMsgs[3013]['de'] = 'Du hast nicht die nötigen Rechte um dich jetzt zu verbinden, bitte versuch es später nochmal';
$ErrMsgs[3013]['log'] = false;
// Translated Ring Session Manager (joinSession) error messages
define('BASE_TRANSLATED_RSM_ERROR_NUM', 4000);
$ErrMsgs[4001]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4002]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4003]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4004]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4005]['dbg'] = '(joinSession error %1: %2 for userId %3)';
$ErrMsgs[4005]['lnk'] = $msgGameServersClosed;
$ErrMsgs[4006]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4007]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4008]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4009]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4010]['dbg'] = '(joinSession error %1: %2 for userId %3)';
$ErrMsgs[4010]['lnk'] = $msgGameServersClosed;
$ErrMsgs[4011]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4012]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4013]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4014]['dbg'] = '(joinSession error %1: %2 for userId %3)';
$ErrMsgs[4014]['lnk'] = $msgGameServersClosed;
$ErrMsgs[4015]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4016]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4017]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4018]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4019]['dbg'] = 'joinSession error %1: %2 for userId %3';
$ErrMsgs[4020]['dbg'] = 'joinSession error %1: %2 for userId %3';
$MsgLanguages = array('en');
$DisplayDbg = false;
/**
* Whenever a language information is known, use this method to refine the language used for error messages.
* Accepted values:
* 'en', 'fr', 'de', array of this values, or 'all' ('all' will display all versions)
*/
function setMsgLanguage($languages='en')
{
global $MsgLanguages;
if ($languages == 'all')
{
$MsgLanguages = $languages;
return;
}
if (!is_array($languages))
$languages = array($languages);
foreach ($languages as $index => $lg)
{
switch ($lg)
{
case 'fr':
case 'de':;
break;
default:
$languages[$index] = 'en';
}
}
$MsgLanguages = $languages;
}
/**
* Find the specified error message, and return the first found with the following precedence:
* 1. Current language(s) set by setMsgLangage()
* 2. English message
* 3. Debug message
* 4. Generic error
* Each language can be found through ['lnk'] if needed
* Tags (%1..%n) in the message are replaced by mixed arguments specified after $errNum.
* Ex: errorMsg(55, $domainName)
* if 'dbg' is found in ['add'] or $DisplayDbg is true, the 'dbg' version is appended to the found version.
*/
function errorMsg($errNum=GENERIC_ERROR_NUM) // $mixedArgs
{
// Find specified message using precedence rules
global $MsgLanguages;
$precedence = array(
array($errNum, ($MsgLanguages == 'all') ? array('en', 'fr', 'de') : $MsgLanguages),
array($errNum, array('en')),
array($errNum, array('dbg')),
array(GENERIC_ERROR_NUM, $MsgLanguages),
array(GENERIC_ERROR_NUM, array('en')));
global $ErrMsgs;
$args = func_get_args();
$msg = '';
foreach ($precedence as $rule)
{
// Find message
list($actualErrNum, $languages) = $rule;
foreach ($languages as $lg)
{
if (isset($ErrMsgs[$actualErrNum][$lg]) && ($ErrMsgs[$actualErrNum][$lg] != 'TODO'))
appendToMsg($msg, $errNum, $ErrMsgs[$actualErrNum][$lg], $args);
else if (isset($ErrMsgs[$actualErrNum]['lnk']) && isset($ErrMsgs[$actualErrNum]['lnk'][$lg]) && ($ErrMsgs[$actualErrNum]['lnk'][$lg] != 'TODO'))
appendToMsg($msg, $errNum, $ErrMsgs[$actualErrNum]['lnk'][$lg], $args);
}
// Try next rule only if not found
if (!empty($msg))
break;
}
// Add debug version if needed
global $DisplayDbg;
$msgHasDebug = in_array('dbg', $languages);
$logExtMsg = '';
if ((!$msgHasDebug) && isset($ErrMsgs[$actualErrNum]['dbg']))
{
if ($DisplayDbg || (isset($ErrMsgs[$actualErrNum]['add']) && ($ErrMsgs[$actualErrNum]['add'] == 'dbg')))
$msg .= '['.$ErrMsgs[$actualErrNum]['dbg']."]\n"; // to result/screen message
else
$logExtMsg .= '['.$ErrMsgs[$actualErrNum]['dbg'].']'; // to log message
}
// Get mail data if specified
$mailData = (isset($ErrMsgs[$actualErrNum]['mail']) ? $ErrMsgs[$actualErrNum]['mail'] :
(isset($ErrMsgs[$actualErrNum]['lnk']['mail']) ? $ErrMsgs[$actualErrNum]['lnk']['mail'] :
array()));
// Apply params if applicable
$numArgs = func_num_args();
if ($numArgs > 1)
{
for ($i=0; $i!=$numArgs; ++$i) // include $errNum (%0)
{
$msg = str_replace("%$i", $args[$i], $msg);
$logExtMsg = str_replace("%$i", $args[$i], $logExtMsg);
$mIdx = 0;
foreach ($mailData as $field)
{
$mailData[$mIdx] = str_replace("%$i", $args[$i], $field);
++$mIdx;
}
}
}
// Log technical errors if possible
$logMode = (isset($ErrMsgs[$actualErrNum]['log']) ? $ErrMsgs[$actualErrNum]['log'] :
(isset($ErrMsgs[$actualErrNum]['lnk']['log']) ? $ErrMsgs[$actualErrNum]['lnk']['log'] :
true));
if ($logMode && class_exists('CWwwLog'))
{
$logFile = new CWwwLog();
$logFile->logStr(/*$msg.*/$logExtMsg); // message is already logged by ob_callback_r2login()
}
// Send email if specified
if (!empty($mailData) && (count($mailData) >= 3))
{
include_once('email/htmlMimeMail.php');
$mail = new htmlMimeMail();
$mail->setFrom('noreply@ryzom.com');
$mail->setSubject($mailData[1]);
$mail->setText('Application: '.$_GET['clientApplication'].' - Login: '.$_GET['login']."\n". // display as much info as possible
$mailData[2]);
$result = $mail->send(array($mailData[0]));
}
return $msg;
}
// Helper for errorMsg()
function appendToMsg(&$msg, $errNum, $str, &$args)
{
$msg .= "$str ($errNum)";
if (($errNum == GENERIC_ERROR_NUM) && !empty($args))
{
foreach ($args as $arg)
{
$msg .= " [$arg]"; // display all passed args if returning the default generic error
}
}
$msg .= "\n";
}
/*
if (isset($_GET['export']))
exportErrMsgsToTSV();
// Utility
function exportErrMsgsToTSV()
{
global $ErrMsgs;
echo "Num\ten\tfr\tde\tdbg\t\n";
foreach ($ErrMsgs as $num => $txtArray)
{
echo $num."\t";
foreach (array('en','fr','de','dbg') as $lg)
{
if (isset($txtArray[$lg]))
echo $txtArray[$lg];
else if (isset($txtArray['lnk'][$lg]))
echo $txtArray['lnk'][$lg];
echo "\t";
}
echo "\n";
}
}
*/
?>

@ -1,532 +0,0 @@
<?php
error_reporting(E_ERROR | E_PARSE);
set_error_handler('err_callback');
// For error handling, buffer all output
ob_start('ob_callback_r2login');
include_once('config.php');
include_once('login_translations.php');
include_once('../tools/nel_message.php');
include_once('../tools/domain_info.php');
include_once('login_service_itf.php');
include_once('../ring/join_shard.php');
// see errorMsg
function errorMsgBlock($errNum=GENERIC_ERROR_NUM) // $mixedArgs
{
$args = func_get_args();
return '0:'.call_user_func_array('errorMsg', $args);
}
class LoginCb extends CLoginServiceWeb
{
// receive the login result sent back by the LS
function loginResult($userId, $cookie, $resultCode, $errorString)
{
global $RingWebHost, $RingWebHostPHP;
global $domainId;
if ($resultCode == 0 && $cookie != "")
{
// gather the domain informations (server version, patch urls and backup patch url
global $DBHost, $DBUserName, $DBPassword, $DBName, $AutoInsertInRing;
$link = mysql_connect($DBHost, $DBUserName, $DBPassword) or die (errorMsgBlock(3004, 'main', $DBHost, $DBUserName));
mysql_select_db ($DBName) or die (errorMsgBlock(3005, 'main', $DBName, $DBHost, $DBUserName));
$query = "SELECT * FROM domain WHERE domain_id=$domainId";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if( mysql_num_rows($result) != 1)
{
die(errorMsgBlock(3001, $domainId));
}
$row = mysql_fetch_array($result);
// set the cookie
setcookie ( "ryzomId" , $cookie, 0, "/");
$_COOKIE["ryzomId"] = $cookie; // make it available immediately
// Auto-join an available mainland shard
global $FSHostLuaMode, $FSHostResultStr;
$FSHostLuaMode = false;
$res = joinMainland($userId, $domainId, $row["domain_name"]);
if ($res)
{
// return the cookie to the user, il will then be used as an auth to browse the site and to connect to the shard
//echo "1#".$cookie."#http://".$RingWebHost."/ring/web_start.php\n";
echo "1#".$cookie."#".$FSHostResultStr."#http://".$RingWebHost."/ring/web_start.php#http://".$RingWebHostPHP."/ring/\n";
// return the ring domain information
echo $row["patch_version"]."#".$row["backup_patch_url"]."#".$row["patch_urls"];
}
else
{
global $JoinSessionResultCode, $JoinSessionResultMsg;
echo errorMsgBlock(BASE_TRANSLATED_RSM_ERROR_NUM + $JoinSessionResultCode, $JoinSessionResultCode, $JoinSessionResultMsg, $userId);
}
}
else
{
// empty cookie, this mean the user id can't be validated by the LS
echo errorMsgBlock(BASE_TRANSLATED_LS_ERROR_NUM + $resultCode, $resultCode, $errorString, $userId);
}
}
}
class CWwwLog
{
//function CWwwLog() {}
/*
* Return the log directory. Create it if it does not exist, or return false if creation failed.
*/
function getSafeLogDir()
{
// Examples:
// __FILE__ = r:\code\ryzom\www\login\config.php
// $_SERVER['PATH_TRANSLATED'] = 'r:/code/ryzom/www/login//r2_login.php'
// $_SERVER['SCRIPT_FILENAME'] = 'r:/code/ryzom/www/login//r2_login.php'
global $LogRelativePath;
$pathInfo = pathinfo(__FILE__);
$logPath = $pathInfo['dirname'].$LogRelativePath;
if (!is_dir($logPath))
{
$res = mkdir($LogPath, 0700);
return $res ? $logPath : false;
}
return $logPath;
}
function logStr($str)
{
$logPath = $this->getSafeLogDir();
if ($logPath !== false)
{
$fp = fopen($logPath.'/r2_login_'.date('Y-m-d').'.log', 'a');
fwrite($fp, date('Y-m-d H:i:s').' ('.$_SERVER['REMOTE_ADDR'].':'.$_SERVER['REQUEST_URI']."): $str\n");
fclose($fp);
}
}
}
// Callback called on end of output buffering
function ob_callback_r2login($buffer)
{
// Log only in case of error or malformed result string
$blockHd = substr($buffer, 0, 2);
if ($blockHd != '1:')
{
$logFile = new CWwwLog();
$logFile->logStr(str_replace("\n",'\n',$buffer));
}
return $buffer; // sent to output
}
// Callback called on error
function err_callback($errno, $errmsg, $filename, $linenum, $vars)
{
$logFile = new CWwwLog();
$logFile->logStr("PHP ERROR/$errno $errmsg ($filename:$linenum)");
// Never die after an error
}
if (!isset($_GET['cmd']))
{
die (errorMsgBlock(3002));
}
// check for 'clear password' tag
if (!isset($_GET['cp']))
{
$cp = 0;
}
else
{
$cp = $_GET['cp'];
}
$submittedLang = isset($_GET['lg']) ? $_GET['lg'] : 'unknown';
if (isset($_GET['dbg']) && ($_GET['dbg'] == 1))
$DisplayDbg = true;
switch($_GET['cmd'])
{
case 'ask':
// client ask for a login salt
askSalt($_GET['login'], $submittedLang);
die();
case 'login':
$domainId = -1;
// client sent is login info
if (!checkUserValidity($_GET['login'], $_GET['password'], $_GET['clientApplication'], $cp, $id, $reason, $priv, $extended, $domainId, $submittedLang))
{
echo '0:'.$reason;
}
else
{
// retreive the domain info
$domainInfo = getDomainInfo($domainId);
// if we need to create missing ring info
if ($AutoCreateRingInfo)
{
////////////// Temporary code alpha 0 only /////////////////////////////////////
// check if the ring user exist, and create it if not
$ringDb = mysql_connect($DBHost, $RingDBUserName, $RingDBPassword) or die(errorMsgBlock(3004, 'Ring', $DBHost, $RingDBUserName));
mysql_select_db ($domainInfo['ring_db_name'], $ringDb) or die(errorMsgBlock(3005, 'Ring', $domainInfo['ring_db_name'], $DBHost, $RingDBUserName));
$query = "SELECT user_id FROM ring_users where user_id = '".$id."'";
$result = mysql_query ($query) or die(errorMsgBlock(3006, $query, 'Ring', $domainInfo['ring_db_name'], $DBHost, $RingDBUserName, mysql_error()));
if (mysql_num_rows($result) == 0)
{
// no ring user record, build one
$query = "INSERT INTO ring_users SET user_id = '".$id."', user_name = '".$_GET["login"]."', user_type='ut_pioneer'";
$result = mysql_query ($query) or die(errorMsgBlock(3006, $query, 'Ring', $domainInfo['ring_db_name'], $DBHost, $RingDBUserName, mysql_error()));
}
// // check that there is a character record (deprecated)
// $query = "SELECT user_id FROM characters where user_id = '".$id."'";
// $result = mysql_query ($query) or die("Query ".$query." failed");
// if (mysql_num_rows($result) == 0)
// {
// // no characters record, build a default one
// $charId = ($id * 16);
// $query = "INSERT INTO characters SET char_id='".$charId."', char_name='".$_GET["login"]."_default', user_id = '".$id."'";
// $result = mysql_query ($query) or die("Query ".$query." failed");
// }
}
// // check domain status
// if ($domainInfo['status'] == "ds_close")
// {
// // the domain is closed
// echo "0:Server is currently closed";
// die;
// }
// else if ($domainInfo['status'] == "ds_dev" && strstr($priv, ":DEV:") == false)
// {
// // the domain is open to dev only
// echo "0:You are not allowed to connect now, retry later";
// die;
// }
// else if ($domainInfo['status'] == "ds_restricted")
// {
// // check for one of the needed privilege
// if ( strstr($priv, ":DEV:") == false
// && strstr($priv, ":SGM:") == false
// && strstr($priv, ":GM:") == false
// && strstr($priv, ":EG:") == false)
// {
// // the domain is open to privileged user only
// echo "0:You are not allowed to connect now, retry later";
// die;
// }
// }
// store the web host for this domain
global $RingWebHost, $RingWebHostPHP;
$RingWebHost = $domainInfo['web_host'];
$RingWebHostPHP = $domainInfo['web_host_php'];
$LSaddr = split(":", $domainInfo['login_address']);
// ask for a session cookie to the login service
$login = new LoginCb;
$res = "";
$login->connect($LSaddr[0], $LSaddr[1], $res);
// $lsProxy = new CLoginServiceWebProxy;
$login->login($id, $_SERVER["REMOTE_ADDR"], $domainId);
// wait for the return message
// $lsSkel = new CLoginServiceWebSkel;
if (!$login->waitCallback())
{
die(errorMsgBlock(3003));
}
//the rest of the process is done in the callback function
}
}
// no more to do (other global statement are old garbage)
die();
// ----------------------------------------------------------------------------------------
// Functions
// ----------------------------------------------------------------------------------------
// $reason contains the reason why the check failed or success
// return true if the check is ok
function checkUserValidity ($login, $password, $clientApplication, $cp, &$id, &$reason, &$priv, &$extended, &$domainId, $lang)
{
global $DBHost, $DBUserName, $DBPassword, $DBName, $AcceptUnknownUser;
setMsgLanguage($lang);
// we map the client application to the domain name
$domainName = $clientApplication;
$link = mysql_connect($DBHost, $DBUserName, $DBPassword) or die (errorMsgBlock(3004, 'main', $DBHost, $DBUserName));
mysql_select_db ($DBName) or die (errorMsgBlock(3005, 'main', $DBName, $DBHost, $DBUserName));
// retreive the domain id
$query = "SELECT domain_id FROM domain WHERE domain_name='$domainName'";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows($result) == 0)
{
// unrecoverable error, we must giveup
$reason = errorMsg(3007, $domainName);
mysql_close($link);
return false;
}
$row = mysql_fetch_array($result);
$domainId = $row[0];
// retreive the domain info
$domainInfo = getDomainInfo($domainId);
// convert the domain status enum into the privilege access set
$accessPriv = strtoupper(substr($domainInfo['status'], 3));
// now, retrieve the user infos
$query = "SELECT * FROM user where Login='$login'";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows ($result) == 0)
{
if ($AcceptUnknownUser)
{
// login doesn't exist, create it
$query = "INSERT INTO user (Login, Password) VALUES ('$login', '$password')";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
// get the user to have his UId
$query = "SELECT * FROM user WHERE Login='$login'";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows ($result) == 1)
{
$reason = errorMsg(3008, $login);
$row = mysql_fetch_array ($result);
$id = $row["UId"];
$priv = $row["Privilege"];
$extended = $row["ExtendedPrivilege"];
// add the default permission
$query = "INSERT INTO permission (UId, ClientApplication, AccessPrivilege) VALUES ('$id', 'r2', '$accessPriv')";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
$res = false;
}
else
{
$reason = errorMsg(3009, $login);
$res = false;
}
}
else
{
// Check if this is not an unconfirmed account
$query = "SELECT GamePassword, Email, Language FROM signup_data WHERE login='$login'";
$result = mysql_query($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows($result) == 0)
{
$reason = errorMsg(2001, $login, 'checkUserValidity');
$res = false;
}
else
{
// Check password to avoid revealing email address to third-party
$passwordMatchedRow = false;
while ($row = mysql_fetch_array($result))
{
$salt = substr($row['GamePassword'],0,2);
if (($cp && $row['GamePassword'] == $password) || (!$cp && $row['GamePassword'] == crypt($password, $salt)))
{
$passwordMatchedRow = $row;
break;
}
}
if ($passwordMatchedRow !== false)
{
if ($lang == 'unknown')
setMsgLanguage($passwordMatchedRow['Language']);
$reason = errorMsg(2002, $passwordMatchedRow['Email']);
}
else
$reason = errorMsg(2004, 'db signup_data');
$res = false;
}
}
}
else
{
$row = mysql_fetch_array ($result);
$salt = substr($row["Password"],0,2);
if (($cp && $row["Password"] == $password) || (!$cp && $row["Password"] == crypt($password, $salt)))
{
// Store the real login (with correct case)
$_GET['login'] = $row['Login'];
// check if the user can use this application
$query = "SELECT * FROM permission WHERE UId='".$row["UId"]."' AND ClientApplication='$clientApplication'";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows ($result) == 0)
{
if ($AcceptUnknownUser)
{
// add default permission
$query = "INSERT INTO permission (UId, ClientApplication, ShardId, AccessPrivilege) VALUES ('".$row["UId"]."', '$clientApplication', -1, '$domainStatus')";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
$reason = errorMsg(3010);
$res = false;
}
else
{
// no permission
$reason = errorMsg(3011, $clientApplication, $domainName);
$res = false;
}
}
else
{
// check that the access privilege for the domain
$permission = mysql_fetch_array($result);
if (!strstr($permission['AccessPrivilege'], $accessPriv))
{
// no right to connect
if ($AcceptUnknownUser)
{
// set an additionnal privilege for this player
$query = "UPDATE permission set AccessPrivilege='".$permission['AccessPrivilege'].",$accessPriv' WHERE prim=".$permission['prim'];
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
$reason = errorMsg(3012, $accessPriv);
$res = false;
}
else
{
// no permission
$reason = errorMsg(3013, $clientApplication, $domainName, $accessPriv);
$res = false;
}
}
else
{
// // check if the user not already online
//
// if ($row["State"] != "Offline")
// {
// $reason = "$login is already online and ";
// // ask the LS to remove the client
// if (disconnectClient ($row["ShardId"], $row["UId"], $tempres))
// {
// $reason = $reason."was just disconnected. Now you can retry the identification (error code 54)";
//
// $query = "update shard set NbPlayers=NbPlayers-1 where ShardId=".$row["ShardId"];
// $result = mysql_query ($query) or die ("Can't execute the query: '$query' errno:".mysql_errno().": ".mysql_error());
//
// $query = "update user set ShardId=-1, State='Offline' where UId=".$row["UId"];
// $result = mysql_query ($query) or die ("Can't execute the query: '$query' errno:".mysql_errno().": ".mysql_error());
// }
// else
// {
// $reason = $reason."can't be disconnected: $tempres (error code 55)";
// }
// $res = false;
// }
// else
// {
$id = $row["UId"];
$priv = $row["Privilege"];
$extended = $row["ExtendedPrivilege"];
$res = true;
// }
}
}
}
else
{
$reason = errorMsg(2004, 'user');
$res = false;
}
}
mysql_close($link);
return $res;
}
function askSalt($login, $lang)
{
global $PHP_SELF;
global $DBHost, $DBUserName, $DBPassword, $DBName;
global $AcceptUnknownUser;
setMsgLanguage($lang);
$link = mysql_connect($DBHost, $DBUserName, $DBPassword) or die (errorMsgBlock(3004, 'main', $DBHost, $DBUserName));
mysql_select_db ($DBName) or die (errorMsgBlock(3005, 'main', $DBName, $DBHost, $DBUserName));
$query = "SELECT Password FROM user WHERE Login='$login'";
$result = mysql_query ($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows ($result) != 1)
{
if ($AcceptUnknownUser)
{
// just accept the client and return a defautl salk
echo "1:AA";
die;
}
else
{
// Check if this is not an unconfirmed account
$query = "SELECT GamePassword, Language FROM signup_data WHERE login='$login'";
$result = mysql_query($query) or die (errorMsgBlock(3006, $query, 'main', $DBName, $DBHost, $DBUserName, mysql_error()));
if (mysql_num_rows($result) == 0)
{
// no user record, reject it
die (errorMsgBlock(2001, $login, 'askSalt'));
}
else if (mysql_num_rows($result) == 1)
{
// one unconfirmed record, let the client send the encrypted password to get the corresponding email address
$row = mysql_fetch_array($result);
$salt = substr($row['GamePassword'], 0, 2);
}
else
{
if ($lang == 'unknown')
{
// several matching records => display a multi-language message now
$languages = array();
while ($row = mysql_fetch_array($result))
{
$languages[$row['Language']] = true;
}
setMsgLanguage(array_keys($languages));
}
die (errorMsgBlock(2003));
}
}
}
else
{
$res_array = mysql_fetch_array($result);
$salt = substr($res_array['Password'], 0, 2);
}
echo "1:".$salt;
mysql_close($link);
}
?>

@ -1,22 +0,0 @@
<?php
include_once('utils.php');
unset($user);
$user = $user_login;
importParam('msg');
$user_dir = get_user_dir($user, $shard);
$fname = $user_dir."mail_$msg.html";
if (!is_dir($user_dir) || !file_exists($fname))
{
include_once('mailbox.php');
die();
}
$f = fopen($fname, 'r');
echo fread($f, filesize($fname));
fclose($f);
/* display_time(); */
?>

@ -1,161 +0,0 @@
<?php
include_once('utils.php');
// -------------------------------------
// add a new thread into user forum index
// -------------------------------------
function add_mail_to_index(&$from, &$to, &$subject, &$index)
{
global $shard;
$to_dir = get_user_dir($to, $shard);
$to_index = $to_dir.'mail.index';
use_index($to_index);
$f = fopen($to_index, 'r+');
read_next_index($f, $index);
append_to_index($f, trim($from).'%%'.strtr(trim($subject), "\n", " ").' %%'.displayable_date().'%%1%%'.$index);
update_next_index($f, $index+1);
fclose($f);
}
// -------------------------------------
// remove mail
// -------------------------------------
function remove_mail($user, $mails)
{
global $shard;
$mail_dir = get_user_dir($user, $shard);
read_index($mail_dir.'mail.index', $header, $array);
sort($mails);
$remove_mail = 0;
for ($i=0; $i<count($array); ++$i)
if ($remove_mail >= count($mails) || $array[$i][4] != $mails[$remove_mail])
$newarray[] = $array[$i];
else
++$remove_mail;
write_index($mail_dir.'mail.index', $header, $newarray);
build_mail_page($user);
}
// -------------------------------------
// create new mail file
// -------------------------------------
function create_mail(&$from, &$to, &$subject, &$content, &$cleancontent, &$index)
{
global $shard;
$to_dir = get_user_dir($to, $shard);
read_template('mail.html', $mail);
$inst_mailbox = str_replace(array('%%FROM%%', '%%UCFROM%%', '%%DATE%%', '%%SUBJECT%%', '%%CONTENT%%', '%%CLEANCONTENT%%', '%%MAIL%%'),
array($from, ucfirst($from), displayable_date(), ucfirst($subject), $content, $cleancontent, $index),
$mail);
// build mail message
$f = fopen($to_dir."mail_$index.html", 'w');
fwrite($f, $inst_mailbox);
fclose($f);
$f = fopen($to_dir.'new_mails', 'w');
fwrite($f, '1');
fclose($f);
srand((float) microtime()*1000000);
$fname = md5(rand());
global $USERS_DIR;
if (!@is_dir($USERS_DIR.'/incoming'))
@mkdir($USERS_DIR.'/incoming');
$f = @fopen($USERS_DIR.'/incoming/'.$fname, "w");
if ($f)
{
fwrite($f, "shard=$shard to=$to from=$from\n$$$$");
fclose($f);
}
}
// -------------------------------------
// rebuild user mail box pages
// -------------------------------------
function build_mail_page($user)
{
global $shard;
$user_dir = get_user_dir($user, $shard);
$user_index = $user_dir."mail.index";
// open thread index
read_index($user_index, $header, $mails);
$num_mails = count($mails);
$num_per_page = 10;
$num_pages = (int)(($num_mails+$num_per_page-1) / $num_per_page);
$mail = $num_mails-1;
$page = 0;
$altern_color = array("#333333", "#666666");
$altern_index = 0;
$links_str = '';
read_template('mailbox_main.html', $mailbox_main);
read_template('mailbox_mail.html', $mailbox_mail);
read_template('browse_link.html', $browse_link);
do
{
$num_in_page = 0;
$inst_mail = '';
while ($num_in_page < 10 && $mail >= 0)
{
$m = &$mails[$mail];
$subject = ucfirst(displayable_string($m[1]));
$inst_mail .= str_replace(array('%%FROM%%', '%%UCFROM%%', '%%SUBJECT%%', '%%DATE%%', '%%USER%%', '%%MAIL%%', '%%COLOR%%'),
array($m[0], ucfirst($m[0]), $subject, $m[2], $user, $m[4], $altern_color[$altern_index]),
$mailbox_mail);
// step to next message
++$num_in_page;
--$mail;
$altern_index = 1-$altern_index;
}
$links_str = '';
$link_previous = ($page == 0 ? "mailbox.php?page=".$page : "mailbox.php?page=".($page-1));
for ($i=0; $i<$num_pages; ++$i)
{
$link = ($i == $page ? $i+1 : "<a href='mailbox.php?page=$i'>".($i+1)."</a>");
$links_str .= str_replace(array('%%LINK%%'),
array($link),
$browse_link);
}
$link_next = (($page == $num_pages-1 || $num_pages <= 1) ? "mailbox.php?page=".$page : "mailbox.php?page=".($page+1));
$inst_mailbox = str_replace(array('%%MAILS%%', '%%PREVIOUS%%', '%%LINKS%%', '%%NEXT%%'),
array($inst_mail, $link_previous, $links_str, $link_next),
$mailbox_main);
$pagename = $user_dir."mailbox".($page==0 ? '' : '_'.$page).'.html';
$f = fopen($pagename, 'w');
fwrite($f, $inst_mailbox);
fclose($f);
++$page;
}
while ($mail >= 0);
}
?>

@ -1,32 +0,0 @@
<?php
include_once('utils.php');
importParam('page');
unset($user);
$user = $user_login;
$user_dir = build_user_dir($user, $shard);
$fname = $user_dir.'mailbox.html';
if (!file_exists($fname))
{
include_once('mail_utils.php');
build_mail_page($user);
}
$fname = $user_dir.'mailbox'.(isset($page) && $page!="" && $page!="0" ? "_$page" : '').'.html';
if (!file_exists($fname))
die("INTERNAL ERROR 10");
$f = fopen($fname, 'r');
echo fread($f, filesize($fname));
fclose($f);
// remove new_mails file when user checks its mailbox
$fname = $user_dir.'new_mails';
if (file_exists($fname))
unlink($fname);
/* display_time(); */
?>

@ -1,24 +0,0 @@
<?php
include_once('utils.php');
//
// INPUT:
//
// $user_login login of the user that write the mail
// $mail_to user to send mail to (optional)
// $mail_subject subject of the mail (optional)
// $mail_content content of the mail (optional)
//
importParam('mail_to');
importParam('mail_subject');
importParam('mail_content');
read_template('new_mail.html', $new_mail);
$instance = str_replace(array('%%FROM%%', '%%UCFROM%%', '%%TO%%', '%%UCTO%%', '%%SUBJECT%%', '%%CONTENT%%'),
array($user_login, ucfirst($user_login), $mail_to, ucfirst($mail_to), ucfirst(displayable_string($mail_subject)), displayable_content($mail_content)),
$new_mail);
echo $instance;
?>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save