diff --git a/www/config.php b/www/config.php new file mode 100644 index 00000000..9e22d0cc --- /dev/null +++ b/www/config.php @@ -0,0 +1,13 @@ + diff --git a/www/control_panel.php b/www/control_panel.php new file mode 100644 index 00000000..d37ebc84 --- /dev/null +++ b/www/control_panel.php @@ -0,0 +1,50 @@ + + + + + + Seventh Umbral Server + + + + + + +

+

+

Characters

+
+ + + + + + + + + + + +
NameAction
+ "> + Edit + +
+

+ + diff --git a/www/control_panel_common.php b/www/control_panel_common.php new file mode 100644 index 00000000..23f08b69 --- /dev/null +++ b/www/control_panel_common.php @@ -0,0 +1,20 @@ + diff --git a/www/control_panel_edit_character.php b/www/control_panel_edit_character.php new file mode 100644 index 00000000..2af1ddbf --- /dev/null +++ b/www/control_panel_edit_character.php @@ -0,0 +1,551 @@ + "Hyur Midlander Male", + 2 => "Hyur Midlander Female", + 3 => "Hyur Highlander Male", + 4 => "Elezen Wildwood Male", + 5 => "Elezen Wildwood Female", + 6 => "Elezen Duskwight Male", + 7 => "Elezen Duskwight Female", + 8 => "Lalafell Plainsfolk Male", + 9 => "Lalafell Plainsfolk Female", + 10 => "Lalafell Dunesfolk Male", + 11 => "Lalafell Dunesfolk Female", + 12 => "Miqo'te Seeker of the Sun Female", + 13 => "Miqo'te Keeper of the Moon Female", + 14 => "Roegadyn Sea Wolf Male", + 15 => "Roegadyn Hellsguard Male" +); + +$g_guardians = array( + 1 => "Halone, the Fury", + 2 => "Menphina, the Lover", + 3 => "Thaliak, the Scholar", + 4 => "Nymeia, the Spinner", + 5 => "Llymlaen, the Navigator", + 6 => "Oschon, the Wanderer", + 7 => "Byregot, the Builder", + 8 => "Rhalgr, the Destroyer", + 9 => "Azeyma, the Warden", + 10 => "Nald'thal, the Traders", + 11 => "Nophica, the Matron", + 12 => "Althyk, the Keeper" +); + +$g_allegiances = array( + 1 => "Limsa Lominsa", + 2 => "Gridania", + 3 => "Ul'dah", +); + +$g_htmlToDbFieldMapping = array( + "characterName" => "name", + "characterTribe" => "tribe", + "characterSize" => "size", + "characterVoice" => "voice", + "characterSkinColor" => "skinColor", + "characterHairStyle" => "hairStyle", + "characterHairColor" => "hairColor", + "characterHairOption" => "hairOption", + "characterEyeColor" => "eyeColor", + "characterFaceType" => "faceType", + "characterFaceBrow" => "faceBrow", + "characterFaceEye" => "faceEye", + "characterFaceIris" => "faceIris", + "characterFaceNose" => "faceNose", + "characterFaceMouth" => "faceMouth", + "characterFaceJaw" => "faceJaw", + "characterFaceCheek" => "faceCheek", + "characterFaceOption1" => "faceOption1", + "characterFaceOption2" => "faceOption2", + "characterGuardian" => "guardian", + "characterBirthMonth" => "birthMonth", + "characterBirthDay" => "birthDay", + "characterAllegiance" => "allegiance", + "characterWeapon1" => "weapon1", + "characterWeapon2" => "weapon2", + "characterHeadGear" => "headGear", + "characterBodyGear" => "bodyGear", + "characterLegsGear" => "legsGear", + "characterHandsGear" => "handsGear", + "characterFeetGear" => "feetGear", + "characterWaistGear" => "waistGear", + "characterRightEarGear" => "rightEarGear", + "characterLeftEarGear" => "leftEarGear", + "characterRightFingerGear" => "rightFingerGear", + "characterLeftFingerGear" => "leftFingerGear" +); + +function SaveCharacter($databaseConnection, $htmlFieldMapping, $characterId) +{ + $characterInfo = array(); + foreach($htmlFieldMapping as $htmlFieldName => $dbFieldName) + { + $characterInfo[$dbFieldName] = $_POST[$htmlFieldName]; + } + UpdateCharacterInfo($databaseConnection, $characterId, $characterInfo); +} + +function GenerateTextField($characterInfo, $htmlFieldMapping, $htmlFieldName, $fieldMaxLength = null) +{ + $inputMaxLength = ($fieldMaxLength === null) ? "" : sprintf("maxlength=\"%d\"", $fieldMaxLength); + return sprintf("", + $htmlFieldName, $htmlFieldName, $characterInfo[$htmlFieldMapping[$htmlFieldName]], $inputMaxLength); +} + +function GenerateSelectField($characterInfo, $htmlFieldMapping, $htmlFieldOptions, $htmlFieldName) +{ + $dbFieldName = $htmlFieldMapping[$htmlFieldName]; + $htmlText = sprintf("\n"; + return $htmlText; +} + +if(isset($_POST["cancel"])) +{ + header("Location: control_panel.php"); + exit; +} + +if(isset($_POST["save"])) +{ + SaveCharacter($g_databaseConnection, $g_htmlToDbFieldMapping, $g_characterId); + header("Location: control_panel.php"); + exit; +} + +try +{ + $g_characterInfo = GetCharacterInfo($g_databaseConnection, $g_userId, $g_characterId); +} +catch(Exception $e) +{ + header("Location: control_panel.php"); + exit; +} + +?> + + + + + Seventh Umbral Server + + + + + + + +
+

Edit Character (Help)

+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
General Information
Name:
Guardian:Birth Month:Birth Day:Allegiance:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Appearance
Tribe:
Size:Voice:Skin Color:Hair Style:
Hair Color:Hair Option:Eye Color:Face Type:
Face Brow:Face Eye:Face Iris:Face Nose:
Face Mouth:Face Jaw:Face Cheek:Face Option 1:
Face Option 2:
+ + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Gear
Weapon 1:Weapon 2:
Head Gear:Body Gear:Legs Gear:Hands Gear:
Feet Gear:Waist Gear:
Right Ear Gear:Left Ear Gear:Right Finger Gear:Left Finger Gear:
Weapon Presets:Armor Presets:
+ + + + + +
+
+
+ + + + +
+ + +
+
+
+
+
+ + \ No newline at end of file diff --git a/www/control_panel_header.php b/www/control_panel_header.php new file mode 100644 index 00000000..08403fa4 --- /dev/null +++ b/www/control_panel_header.php @@ -0,0 +1,8 @@ + +

+ Welcome, . (Logout) +

diff --git a/www/control_panel_login.php b/www/control_panel_login.php new file mode 100644 index 00000000..e5b1596a --- /dev/null +++ b/www/control_panel_login.php @@ -0,0 +1,81 @@ +getMessage(); + } +} + +?> + + + + + Seventh Umbral Server + + + + + +
+

Login

+
+
+ + + + + + + + + + + + +
Username:
Password:
+ +
+
+

+
+
+ Create User +
+ + diff --git a/www/control_panel_logout.php b/www/control_panel_logout.php new file mode 100644 index 00000000..a1618362 --- /dev/null +++ b/www/control_panel_logout.php @@ -0,0 +1,6 @@ + diff --git a/www/create_user.php b/www/create_user.php new file mode 100644 index 00000000..fef6e8a0 --- /dev/null +++ b/www/create_user.php @@ -0,0 +1,109 @@ +getMessage(); + } +} + +?> + + + + Seventh Umbral Server + + + + + +
+

Create New User

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Username:
Password:
Repeat Password:
E-mail Address:
+ +
+
+

+
+ + diff --git a/www/create_user_success.php b/www/create_user_success.php new file mode 100644 index 00000000..b5f1232f --- /dev/null +++ b/www/create_user_success.php @@ -0,0 +1,25 @@ + + + + + Seventh Umbral Server + + + + + +
+

+ User created successfully. +

+

+ You may now use the Seventh Umbral Launcher to login and connect to this server. +

+

+ Login to the User Control Panel +

+
+ + diff --git a/www/css/global.css b/www/css/global.css new file mode 100644 index 00000000..0af8d574 --- /dev/null +++ b/www/css/global.css @@ -0,0 +1,158 @@ +body +{ + font-family: Verdana; + font-size: 10pt; + line-height: 14pt; + height: 100%; +} + + +div.contentContainer { + width: 50%; + float: left; +} + + +div.info +{ + width: 320px; + height: 100%; + margin-left: auto; + margin-right: auto; + text-align: center; + padding: 20px; + background-color: lightgrey; +} + +div.infoFooter +{ + width: 400px; + margin-left: auto; + margin-right: auto; + text-align: right; + padding: 5px; +} + +div.edit +{ + width: 50%; + min-width: 600px; + margin-top: 20px; + margin-left: auto; + margin-right: auto; + text-align: center; + padding: 20px; + background-color: lightgrey; +} + +div.inner +{ + position: relative; + max-width: 1250px; + margin: 0px auto; +} + +h1 +{ + line-height: 23px; + font-size: 23px; + padding: 5px 0px; +} + +h2 +{ + line-height: 17px; + font-size: 14px; + font-weight: bold; + padding: 5px; +} + +h3 +{ + line-height: 14px; + font-size: 12px; + font-weight: bold; + padding: 5px; +} + +header.top +{ + padding: 20px 0px; + background: none repeat scroll 0% 0% lavender; + position: relative; + z-index: 999; +} + +table.center +{ + margin-left: auto; + margin-right: auto; +} + +table.infoForm +{ + width: 100%; +} + +table.editForm +{ + width: 100%; +} + +table.editForm input +{ + width: 100%; +} + +table.editForm select +{ + width: 100%; +} + +td +{ + padding: 3px; +} + +th +{ + padding: 3px; + text-decoration: underline; +} + +p +{ + padding: 2px; +} + +p.errorMessage +{ + color: darkred; + font-weight: bold; +} + +p.pageTitle +{ + font-weight: bold; + font-size: 28px; + line-height: 20px; + padding: 0px 0px; +} + +p.pageTitle a +{ + text-decoration: none; + color: black; +} + +p.pageSubTitle +{ + font-size: 10px; + line-height: 18px; + padding: 0px 0px; +} + +#recaptcha_area +{ + margin: 0 auto; +} diff --git a/www/css/reset.css b/www/css/reset.css new file mode 100644 index 00000000..e29c0f5f --- /dev/null +++ b/www/css/reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/www/database.php b/www/database.php new file mode 100644 index 00000000..79aabc0b --- /dev/null +++ b/www/database.php @@ -0,0 +1,388 @@ +select_db($database); + $dataConnection->query("SET NAMES 'utf8'"); + + return $dataConnection; +} + +$g_databaseConnection = CreateDatabaseConnection($db_server, $db_username, $db_password, $db_database); + +function GenerateRandomSha224() +{ + mt_srand(microtime(true) * 100000 + memory_get_usage(true)); + return hash("sha224", uniqid(mt_rand(), true)); +} + +function VerifyUser($dataConnection, $username, $password) +{ + $statement = $dataConnection->prepare("SELECT id, passhash, salt FROM users WHERE name = ?"); + if(!$statement) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + try + { + $statement->bind_param('s', $username); + if(!$statement->execute()) + { + throw new Exception(__FUNCTION__ . " failed."); + } + + $statement->bind_result($id, $storedPasshash, $salt); + if(!$statement->fetch()) + { + throw new Exception(__FUNCTION__ . " failed."); + } + + $saltedPassword = $password . $salt; + $hashedPassword = hash("sha224", $saltedPassword); + + if($hashedPassword !== $storedPasshash) + { + throw new Exception(__FUNCTION__ . " failed."); + } + + return $id; + } + finally + { + $statement->close(); + } +} + +function InsertUser($dataConnection, $username, $passhash, $salt, $email) +{ + { + $statement = $dataConnection->prepare("INSERT INTO users (name, passhash, salt, email) VALUES (?, ?, ?, ?)"); + if(!$statement) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + try + { + $statement->bind_param('ssss', $username, $passhash, $salt, $email); + + if(!$statement->execute()) + { + throw new Exception(__FUNCTION__ . " failed."); + } + } + finally + { + $statement->close(); + } + } +} + +function RefreshOrCreateSession($dataConnection, $userId) +{ + try + { + $sessionId = GetSessionFromUserId($dataConnection, $userId); + RefreshSession($dataConnection, $sessionId); + } + catch(Exception $e) + { + $sessionId = CreateSession($dataConnection, $userId); + } + + return $sessionId; +} + +function CreateSession($dataConnection, $userId) +{ + //Delete any session that might be active + { + $statement = $dataConnection->prepare("DELETE FROM sessions WHERE userId = ?"); + if(!$statement) + { + throw new Exception("Failed to create session: " . $dataConnection->error); + } + + try + { + $statement->bind_param('i', $userId); + + if(!$statement->execute()) + { + throw new Exception("Failed to create session: " . $dataConnection->error); + } + } + finally + { + $statement->close(); + } + } + + //Create new session + { + $sessionId = GenerateRandomSha224(); + + $statement = $dataConnection->prepare("INSERT INTO sessions (id, userid, expiration) VALUES (?, ?, NOW() + INTERVAL " . FFXIV_SESSION_LENGTH . " HOUR)"); + if(!$statement) + { + throw new Exception("Failed to create session: " . $dataConnection->error); + } + + try + { + $statement->bind_param('si', $sessionId, $userId); + + if(!$statement->execute()) + { + throw new Exception("Failed to create session: " . $dataConnection->error); + } + } + finally + { + $statement->close(); + } + + return $sessionId; + } +} + +function GetSessionFromUserId($dataConnection, $userId) +{ + $statement = $dataConnection->prepare("SELECT id FROM sessions WHERE userId = ? AND expiration > NOW()"); + if(!$statement) + { + throw new Exception("Failed to get session id: " . $dataConnection->error); + } + + try + { + $statement->bind_param('i', $userId); + + if(!$statement->execute()) + { + throw new Exception("Failed to get session id: " . $dataConnection->error); + } + + $statement->bind_result($sessionId); + if(!$statement->fetch()) + { + throw new Exception("Failed to get session id: " . $dataConnection->error); + } + + return $sessionId; + } + finally + { + $statement->close(); + } +} + +function RefreshSession($dataConnection, $sessionId) +{ + $statement = $dataConnection->prepare("UPDATE sessions SET expiration = NOW() + INTERVAL " . FFXIV_SESSION_LENGTH . " HOUR WHERE id = ?"); + if(!$statement) + { + throw new Exception("Failed to refresh session: " . $dataConnection->error); + } + + try + { + $statement->bind_param('s', $sessionId); + + if(!$statement->execute()) + { + throw new Exception("Failed to refresh session: " . $dataConnection->error); + } + } + finally + { + $statement->close(); + } +} + +function GetUserIdFromSession($dataConnection, $sessionId) +{ + $statement = $dataConnection->prepare("SELECT userId FROM sessions WHERE id = ? AND expiration > NOW()"); + if(!$statement) + { + throw new Exception("Could not get user id."); + } + + try + { + $statement->bind_param('s', $sessionId); + if(!$statement->execute()) + { + throw new Exception("Could not get user id."); + } + + $statement->bind_result($userId); + if(!$statement->fetch()) + { + throw new Exception("Could not get user id."); + } + + return $userId; + } + finally + { + $statement->close(); + } +} + +function GetUserInfo($dataConnection, $userId) +{ + $statement = $dataConnection->prepare("SELECT name FROM users WHERE id = ?"); + if(!$statement) + { + throw new Exception("Failed to get user information: " . $dataConnection->error); + } + + try + { + $statement->bind_param('i', $userId); + if(!$statement->execute()) + { + throw new Exception("Failed to get user information: " . $dataConnection->error); + } + + $result = $statement->get_result(); + if(!$result) + { + throw new Exception("Failed to get user information: " . $dataConnection->error); + } + + $row = $result->fetch_assoc(); + if(!$row) + { + throw new Exception("Failed to get user information: " . $dataConnection->error); + } + + return $row; + } + finally + { + $statement->close(); + } +} + +function GetUserCharacters($dataConnection, $userId) +{ + $statement = $dataConnection->prepare("SELECT id, name FROM characters WHERE userId = ?"); + if(!$statement) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + try + { + $statement->bind_param('i', $userId); + if(!$statement->execute()) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + $result = $statement->get_result(); + if(!$result) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + $characters = array(); + + while(1) + { + $row = $result->fetch_assoc(); + if(!$row) + { + break; + } + array_push($characters, $row); + } + + return $characters; + } + finally + { + $statement->close(); + } +} + +function GetCharacterInfo($dataConnection, $userId, $characterId) +{ + $query = sprintf("SELECT * FROM characters WHERE userId = '%d' AND id = '%d'", + $userId, $characterId); + $result = $dataConnection->query($query); + if(!$result) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + $row = $result->fetch_assoc(); + if(!$row) + { + throw new Exception(__FUNCTION__ . " failed: " . $dataConnection->error); + } + + return $row; +} + +function UpdateCharacterInfo($dataConnection, $characterId, $characterInfo) +{ + $statement = $dataConnection->prepare("UPDATE ffxiv_characters SET + name = ?, tribe = ?, size = ?, voice = ?, skinColor = ?, hairStyle = ?, hairColor = ?, hairOption = ?, + eyeColor = ?, faceType = ?, faceBrow = ?, faceEye = ?, faceIris = ?, faceNose = ?, faceMouth = ?, faceJaw = ?, + faceCheek = ?, faceOption1 = ?, faceOption2 = ?, guardian = ?, birthMonth = ?, birthDay = ?, allegiance = ?, + weapon1 = ?, weapon2 = ?, headGear = ?, bodyGear = ?, legsGear = ?, handsGear = ?, feetGear = ?, + waistGear = ?, rightEarGear = ?, leftEarGear = ?, rightFingerGear = ?, leftFingerGear = ? + WHERE id = ?"); + if(!$statement) + { + throw new Exception("Failed to update character information: " . $dataConnection->error); + } + + try + { + if(!$statement->bind_param("siiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii", + $characterInfo["name"], $characterInfo["tribe"], $characterInfo["size"], $characterInfo["voice"], + $characterInfo["skinColor"], $characterInfo["hairStyle"], $characterInfo["hairColor"], + $characterInfo["hairOption"], $characterInfo["eyeColor"], $characterInfo["faceType"], + $characterInfo["faceBrow"], $characterInfo["faceEye"], $characterInfo["faceIris"], + $characterInfo["faceNose"], $characterInfo["faceMouth"], $characterInfo["faceJaw"], + $characterInfo["faceCheek"], $characterInfo["faceOption1"], $characterInfo["faceOption2"], + $characterInfo["guardian"], $characterInfo["birthMonth"], $characterInfo["birthDay"], $characterInfo["allegiance"], + $characterInfo["weapon1"], $characterInfo["weapon2"], $characterInfo["headGear"], $characterInfo["bodyGear"], + $characterInfo["legsGear"], $characterInfo["handsGear"], $characterInfo["feetGear"], + $characterInfo["waistGear"], $characterInfo["rightEarGear"], $characterInfo["leftEarGear"], + $characterInfo["rightFingerGear"], $characterInfo["leftFingerGear"], + $characterId)) + { + throw new Exception("Failed to update character information: " . $dataConnection->error); + } + + if(!$statement->execute()) + { + throw new Exception("Failed to update character information: " . $dataConnection->error); + } + } + finally + { + $statement->close(); + } +} + +?> diff --git a/www/favicon.ico b/www/favicon.ico new file mode 100644 index 00000000..edea6975 Binary files /dev/null and b/www/favicon.ico differ diff --git a/www/header.php b/www/header.php new file mode 100644 index 00000000..aca5ab3f --- /dev/null +++ b/www/header.php @@ -0,0 +1,3 @@ +
+ +
diff --git a/www/img/logo.png b/www/img/logo.png new file mode 100644 index 00000000..c42b8b25 Binary files /dev/null and b/www/img/logo.png differ diff --git a/www/index.php b/www/index.php new file mode 100644 index 00000000..2236f73b --- /dev/null +++ b/www/index.php @@ -0,0 +1,553 @@ + +// Arno Esterhuizen +// et Romain Bourdon +// et Hervé Leclerc +// +// Mise à jour par Herve Leclerc herve.leclerc@alterway.fr +// Icônes par Mark James +//------ +//[modif oto] Modifications Dominique Ottello (Otomatic) +//Suppression des vhosts, le dossier n'étant plus créé à l'installation +//Affichage des Outils, Projets et Alias sur trois colonnes +// - Recodage en utf-8 +// - Modification des styles : ajout .third .left et .right +// - Ajouts d'index dans $langues['en'] et ['fr'] : +// 'locale' pour set_locale +// 'docp' url des documentations PHP +// 'docm' url des documentations MySQL +// 'doca2.2' url de la documentation Apache 2.2 +// 'doca2.4' url de la documentation Apache 2.4 +// 'server' Server Software +// - Classement alphabétique des extensions PHP en fonction de la localisation +// - Liens sur les documentations Apache, PHP et MySQL +// - Ajout variable $suppress_localhost = true; +// - Conformité W3C par ajout de
  • ...
  • sur les variables +// $aliasContents et $projectContents si vides + +//[modif oto] - Pour supprimer niveau localhost dans les url +$suppress_localhost = true; +// avec modification de la ligne +//$projectContents .= '
  • '.$file.'
  • '; +//Par : +//$projectContents .= '
  • '.$file.'
  • '; +//----- +//[modif oto] Ajout $server_dir pour un seul remplacement +// si déplacement www hors de Wamp et pas d'utilisation des jonctions +//Par défaut la valeur est "../" +//$server_dir = "WAMPROOT/"; +$server_dir = "../"; +//Fonctionne à condition d'avoir ServerSignature On et ServerTokens Full dans httpd.conf +$server_software = $_SERVER['SERVER_SOFTWARE']; + +$wampConfFile = $server_dir.'wampmanager.conf'; +//chemin jusqu'aux fichiers alias +$aliasDir = $server_dir.'alias/'; + +// on charge le fichier de conf locale +if (!is_file($wampConfFile)) + die ('Unable to open WampServer\'s config file, please change path in index.php file'); +$fp = fopen($wampConfFile,'r'); +$wampConfFileContents = fread ($fp, filesize ($wampConfFile)); +fclose ($fp); + + +// on récupère les versions des applis +preg_match('|phpVersion = (.*)\n|',$wampConfFileContents,$result); +$phpVersion = str_replace('"','',$result[1]); +preg_match('|apacheVersion = (.*)\n|',$wampConfFileContents,$result); +$apacheVersion = str_replace('"','',$result[1]); +$doca_version = 'doca'.substr($apacheVersion,0,3); +preg_match('|mysqlVersion = (.*)\n|',$wampConfFileContents,$result); +$mysqlVersion = str_replace('"','',$result[1]); +preg_match('|wampserverVersion = (.*)\n|',$wampConfFileContents,$result); +$wampserverVersion = str_replace('"','',$result[1]); + +// répertoires à ignorer dans les projets +$projectsListIgnore = array ('.','..'); + +// textes +$langues = array( + 'en' => array( + 'langue' => 'English', + 'locale' => 'english', + 'autreLangue' => 'Version Française', + 'autreLangueLien' => 'fr', + 'titreHtml' => 'WAMPSERVER Homepage', + 'titreConf' => 'Server Configuration', + 'versa' => 'Apache Version :', + 'doca2.2' => 'httpd.apache.org/docs/2.2/en/', + 'doca2.4' => 'httpd.apache.org/docs/2.4/en/', + 'versp' => 'PHP Version :', + 'server' => 'Server Software:', + 'docp' => 'www.php.net/manual/en/', + 'versm' => 'MySQL Version :', + 'docm' => 'dev.mysql.com/doc/index.html', + 'phpExt' => 'Loaded Extensions : ', + 'titrePage' => 'Tools', + 'txtProjet' => 'Your Projects', + 'txtNoProjet' => 'No projects yet.
    To create a new one, just create a directory in \'www\'.', + 'txtAlias' => 'Your Aliases', + 'txtNoAlias' => 'No Alias yet.
    To create a new one, use the WAMPSERVER menu.', + 'faq' => 'http://www.en.wampserver.com/faq.php' + ), + 'fr' => array( + 'langue' => 'Français', + 'locale' => 'french', + 'autreLangue' => 'English Version', + 'autreLangueLien' => 'en', + 'titreHtml' => 'Accueil WAMPSERVER', + 'titreConf' => 'Configuration Serveur', + 'versa' => 'Version Apache:', + 'doca2.2' => 'httpd.apache.org/docs/2.2/fr/', + 'doca2.4' => 'httpd.apache.org/docs/2.4/fr/', + 'versp' => 'Version de PHP:', + 'server' => 'Server Software:', + 'docp' => 'www.php.net/manual/fr/', + 'versm' => 'Version de MySQL:', + 'docm' => 'dev.mysql.com/doc/index.html', + 'phpExt' => 'Extensions Chargées: ', + 'titrePage' => 'Outils', + 'txtProjet' => 'Vos Projets', + 'txtNoProjet' => 'Aucun projet.
    Pour en ajouter un nouveau, créez simplement un répertoire dans \'www\'.', + 'txtAlias' => 'Vos Alias', + 'txtNoAlias' => 'Aucun alias.
    Pour en ajouter un nouveau, utilisez le menu de WAMPSERVER.', + 'faq' => 'http://www.wampserver.com/faq.php' + ) +); + +// images +$pngFolder = <<< EOFILE +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAABhlBMVEX//v7//v3///7//fr//fj+/v3//fb+/fT+/Pf//PX+/Pb+/PP+/PL+/PH+/PD+++/+++7++u/9+vL9+vH79+r79+n79uj89tj89Nf889D88sj78sz78sr58N3u7u7u7ev777j67bL67Kv46sHt6uP26cns6d356aP56aD56Jv45pT45pP45ZD45I324av344r344T14J734oT34YD13pD24Hv03af13pP233X025303JL23nX23nHz2pX23Gvn2a7122fz2I3122T12mLz14Xv1JPy1YD12Vz02Fvy1H7v04T011Py03j011b01k7v0n/x0nHz1Ejv0Hnuz3Xx0Gvz00buzofz00Pxz2juz3Hy0TrmznzmzoHy0Djqy2vtymnxzS3xzi/kyG3jyG7wyyXkwJjpwHLiw2Liw2HhwmDdvlXevVPduVThsX7btDrbsj/gq3DbsDzbrT7brDvaqzjapjrbpTraojnboTrbmzrbmjrbl0Tbljrakz3ajzzZjTfZijLZiTJdVmhqAAAAgnRSTlP///////////////////////////////////////8A////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////9XzUpQAAAAlwSFlzAAALEgAACxIB0t1+/AAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAACqSURBVBiVY5BDAwxECGRlpgNBtpoKCMjLM8jnsYKASFJycnJ0tD1QRT6HromhHj8YMOcABYqEzc3d4uO9vIKCIkULgQIlYq5haao8YMBUDBQoZWIBAnFtAwsHD4kyoEA5l5SCkqa+qZ27X7hkBVCgUkhRXcvI2sk3MCpRugooUCOooWNs4+wdGpuQIlMDFKiWNbO0dXTx9AwICVGuBQqkFtQ1wEB9LhGeAwDSdzMEmZfC0wAAAABJRU5ErkJggg== +EOFILE; +$pngFolderGo = <<< EOFILE +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJISURBVDjLpZPLS5RhFIef93NmnMIRSynvgRF5KWhRlmWbbotwU9sWLupfCBeBEYhQm2iVq1oF0TKIILIkMgosxBaBkpFDmpo549y+772dFl5bBIG/5eGch9+5KRFhOwrYpmIAk8+OjScr29uV2soTotzXtLOZLiD6q0oBUDjY89nGAJQErU3dD+NKKZDVYpTChr9a5sdvpWUtClCWqBRxZiE/9+o68CQGgJUQr8ujn/dxugyCSpRKkaw/S33n7QQigAfxgKCCitqpp939mwCjAvEapxOIF3xpBlOYJ78wQjxZB2LAa0QsYEm19iUQv29jBihJeltCF0F0AZNbIdXaS7K6ba3hdQey6iBWBS6IbQJMQGzHHqrarm0kCh6vf2AzLxGX5eboc5ZLBe52dZBsvAGRsAUgIi7EFycQl0VcDrEZvFlGXBZshtCGNNa0cXVkjEdXIjBb1kiEiLd4s4jYLOKy9L1+DGLQ3qKtpW7XAdpqj5MLC/Q8uMi98oYtAC2icIj9jdgMYjNYrznf0YsTj/MOjzCbTXO48RR5XaJ35k2yMBCoGIBov2yLSztNPpHCpwKROKHVOPF8X5rCeIv1BuMMK1GOI02nyZsiH769DVcBYXRneuhSJ8I5FCmAsNomrbPsrWzGeocTz1x2ht0VtXxKj/Jl+v1y0dCg/vVMl4daXKg12mtCq9lf0xGcaLnA2Mw7hidfTGhL5+ygROp/v/HQQLB4tPlMzcjk8EftOTk7KHr1hP4T0NKvFp0vqyl5F18YFLse/wPLHlqRZqo3CAAAAABJRU5ErkJggg== +EOFILE; +$gifLogo = <<< EOFILE +iVBORw0KGgoAAAANSUhEUgAAAGAAAABTCAYAAABgdgI7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz +NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODg0QkM3NUZBMDhFMDExODkyQ0U2NkE5ODVB +M0Q2OSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyMEQ2RDU5MDA5M0UxMUUwOUUwRkYwRTg2 +NjQyMzQzQyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyMEQ2RDU4RjA5M0UxMUUwOUUwRkYw +RTg2NjQyMzQzQyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3Mi +PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ODg0QkM3NUZB +MDhFMDExODkyQ0U2NkE5ODVBM0Q2OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1ODg0QkM3 +NUZBMDhFMDExODkyQ0U2NkE5ODVBM0Q2OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRG +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 +EOFILE; +$pngPlugin = <<< EOFILE +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAABmklEQVR42mL4//8/AyUYIIDAxK5du1BwXEb3/9D4FjBOzZ/wH10ehkF6AQIIw4B1G7b+D09o/h+X3gXG4YmteA0ACCCsLghPbPkfm9b5PzK5439Sdg9eAwACCEyANMBwaFwTGIMMAOEQIBuGA6Mb/qMbABBAEAOQnIyMo1M74Tgiqf2/b3gVhgEAAQQmQuKa/8ekdYMxyLCgmEYMHJXc9t87FNMAgACCGgBxIkgzyDaQU5FxQGQN2AUBUXX/vULKwdgjsOQ/SC9AAKEEYlB03f+oFJABdSjYP6L6P0guIqkVjt0DisEGAAQQigEgG0AhHxBVi4L9wqvBBiEHtqs/xACAAAIbEBBd/x+Eg2ObwH4FORmGfYCaQRikCUS7B5YBNReBMUgvQABBDADaAtIIwsEx9f/Dk9pQsH9kHTh8XANKMAIRIIDAhF9ELTiQQH4FaQAZCAsskPNhyRpkK7oBAAEEMSC8GsVGkEaYIlBghcU3gbGzL6YBAAEEJnzCgP6EYs/gcjCGKQI5G4Z9QiswDAAIIAZKszNAgAEAHgFgGSNMTwgAAAAASUVORK5CYII= +EOFILE; +$pngWrench = <<< EOFILE +iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAA3NCSVQICAjb4U/gAAABO1BMVEXu7u7n5+fk5OTi4uLg4ODd3d3X19fV1dXU1NTS0tLPz8+7z+/MzMy6zu65ze65zu7Kysq3zO62zO3IyMjHx8e1yOiyyO2yyOzFxcXExMSyxue0xuexxefDw8OtxeuwxOXCwsLBwcGuxOWsw+q/v7+qweqqwuqrwuq+vr6nv+qmv+m7u7ukvumkvemivOi5ubm4uLicuOebuOeat+e0tLSYtuabtuaatuaXteaZteaatN6Xs+aVs+WTsuaTsuWRsOSrq6uLreKoqKinp6elpaWLqNijo6OFpt2CpNyAo92BotyAo9+dnZ18oNqbm5t4nt57nth7ntp4nt15ndp3nd6ZmZmYmJhym956mtJzm96WlpaVlZVwmNyTk5Nvl9lultuSkpKNjY2Li4uKioqIiIiHh4eGhoZQgtVKfNFdha6iAAAAaXRSTlMA//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////914ivwAAAACXBIWXMAAAsSAAALEgHS3X78AAAAH3RFWHRTb2Z0d2FyZQBNYWNyb21lZGlhIEZpcmV3b3JrcyA4tWjSeAAAAKFJREFUGJVjYIABASc/PwYkIODDxBCNLODEzGiQgCwQxsTlzJCYmAgXiGKVdHFxYEuB8dkTOIS1tRUVocaIWiWI8IiIKKikaoD50kYWrpwmKSkpsRC+lBk3t2NEMgtMu4wpr5aeuHcAjC9vzadjYyjn7w7lK9kK6tqZK4d4wBQECenZW6pHesEdFC9mbK0W7otwsqenqmpMILIn4tIzgpG4ADUpGMOpkOiuAAAAAElFTkSuQmCC +EOFILE; +$favicon = <<< EOFILE +iVBORw0KGgoAAAANSUhEUgAAAB8AAAAfCAYAAAAfrhY5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp +bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6 +eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz +NDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo +dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw +dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu +MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz +b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N +Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ODg0QkM3NUZBMDhFMDExODkyQ0U2NkE5ODVB +M0Q2OSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxRkI1ODNGRTA5MDMxMUUwQjAwNEEwODc0 +OTk5N0ZEOCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxRkI1ODNGRDA5MDMxMUUwQjAwNEEw +ODc0OTk5N0ZEOCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3Mi +PiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1ODg0QkM3NUZB +MDhFMDExODkyQ0U2NkE5ODVBM0Q2OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1ODg0QkM3 +NUZBMDhFMDExODkyQ0U2NkE5ODVBM0Q2OSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRG +PiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiUukzAAAAHHSURBVHja5FfRccIwDLVz +/W+7QdggbJBM0HQCwg+/LRNwTJDymx9ggmYDsgEZwRuUDVI5ET1XyE5CuIa76k7ABVtPluQnRVZV +JcYST4woD85/ZRbC5wxUf/sdbZagBehGVAvlNM+GXWYaaIugQ+QDdA1OnLqByyyAzwPo042iqyMx +BwdKN7jMNODREWKFyonv2KdPPqERoDlPGQMKQ7drPWPjfAy6Inb080/QiK/2Js8JMacBpzWwzGIs +QFdxhujkFMNtSkj3m1ftjTnxEg0f0XNXAYb1mmatwFPSFM1s4NTwuUp18QU9CiyonWj2rhkHWXAK +kNeh7gdMQ5wzRdnKcAo9DwZcsRBtqL70qm7Ior3B/5zbI0IKrvv8mxarhXSsXtrY8m5OfjB+F5SN +BkhKrpi8635uaxAvkO9HpgZSB/v57f2cFpEQzz+UeZ28Yvq+bMXpkb5rSgwLc+Z5Fylwb+y68x4p +MlNW2CLnPUmnrE/d7F1dOGXJ+Qb0neQqre9ptZiAscTI38ng7YTQ8g6Budlg75pktkxPV9idctss +1mGYOKciupsxatQB8pJkmkUTpgCvHZ0jDtg+t4/60vAf3tVGBf8WYAC3Rq8Ub3mHyQAAAABJRU5E +rkJggg== +EOFILE; + + +//affichage du phpinfo +if (isset($_GET['phpinfo'])) +{ + phpinfo(); + exit(); +} + + +//affichage des images +if (isset($_GET['img'])) +{ + switch ($_GET['img']) + { + case 'pngFolder' : + header("Content-type: image/png"); + echo base64_decode($pngFolder); + exit(); + + case 'pngFolderGo' : + header("Content-type: image/png"); + echo base64_decode($pngFolderGo); + exit(); + + case 'gifLogo' : + header("Content-type: image/gif"); + echo base64_decode($gifLogo); + exit(); + + case 'pngPlugin' : + header("Content-type: image/png"); + echo base64_decode($pngPlugin); + exit(); + + case 'pngWrench' : + header("Content-type: image/png"); + echo base64_decode($pngWrench); + exit(); + + case 'favicon' : + header("Content-type: image/x-icon"); + echo base64_decode($favicon); + exit(); + } +} + + + +// Définition de la langue et des textes + +if (isset ($_GET['lang'])) +{ + $langue = htmlspecialchars($_GET['lang'],ENT_QUOTES); + if ($langue != 'en' && $langue != 'fr' ) { + $langue = 'fr'; + } + } +elseif (isset ($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND preg_match("/^fr/", $_SERVER['HTTP_ACCEPT_LANGUAGE'])) +{ + $langue = 'fr'; +} +else +{ + $langue = 'en'; +} + +//initialisation +$aliasContents = ''; + +// récupération des alias +if (is_dir($aliasDir)) +{ + $handle=opendir($aliasDir); + while (($file = readdir($handle))!==false) + { + if (is_file($aliasDir.$file) && strstr($file, '.conf')) + { + $msg = ''; + $aliasContents .= '
  • '.str_replace('.conf','',$file).'
  • '; + } + } + closedir($handle); +} +if (empty($aliasContents)) + $aliasContents = "
  • ".$langues[$langue]['txtNoAlias']."
  • \n"; + +// récupération des projets +$handle=opendir("."); +$projectContents = ''; +while (($file = readdir($handle))!==false) +{ + if (is_dir($file) && !in_array($file,$projectsListIgnore)) + { + //[modif oto] Ajout éventuel de http:// pour éviter le niveau localhost dans les url + $projectContents .= '
  • '.$file.'
  • '; + } +} +closedir($handle); +if (empty($projectContents)) + $projectContents = "
  • ".$langues[$langue]['txtNoProjet']."
  • \n";; + + +//initialisation +$phpExtContents = ''; + +// récupération des extensions PHP +$loaded_extensions = get_loaded_extensions(); +// [modif oto] classement alphabétique des extensions +setlocale(LC_ALL,"{$langues[$langue]['locale']}"); +sort($loaded_extensions,SORT_LOCALE_STRING); +foreach ($loaded_extensions as $extension) + $phpExtContents .= "
  • ${extension}
  • "; + + +//header('Status: 301 Moved Permanently', false, 301); +//header('Location: /aviatechno/index.php'); +//exit(); + +$pageContents = <<< EOPAGE + + + + + + {$langues[$langue]['titreHtml']} + + + + + + + + + + + +

    {$langues[$langue]['titreConf']}

    + +
    +
    {$langues[$langue]['versa']}
    +
    ${apacheVersion}  - Documentation
    +
    {$langues[$langue]['versp']}
    +
    ${phpVersion}  - Documentation
    +
    {$langues[$langue]['server']}
    +
    ${server_software}
    +
    {$langues[$langue]['phpExt']}
    +
    +
      + ${phpExtContents} +
    +
    +
    {$langues[$langue]['versm']}
    +
    ${mysqlVersion}  -  Documentation
    +
    +
    +
    +

    {$langues[$langue]['titrePage']}

    + +
    +
    +

    {$langues[$langue]['txtProjet']}

    +
      + $projectContents +
    +
    +
    +

    {$langues[$langue]['txtAlias']}

    +
      + ${aliasContents} +
    +
    +
    + + + +EOPAGE; + +echo $pageContents; +?> \ No newline at end of file diff --git a/www/login.php b/www/login.php new file mode 100644 index 00000000..40870a8f --- /dev/null +++ b/www/login.php @@ -0,0 +1,89 @@ +getMessage(); + } +} + +?> + + + + FFXIV 1.0 Login + + + + + window.location=\"ffxiv://login_success?sessionId=" . $sessionId . "\";"; + } + ?> + +
    +
    + +
    + +
    +
    +
    +
    + + + + + + + + + + + + +
    Username:
    Password:
    + +
    +
    +

    +
    +
    +
    + + + diff --git a/www/presets_armor.json b/www/presets_armor.json new file mode 100644 index 00000000..e2c7bfe3 --- /dev/null +++ b/www/presets_armor.json @@ -0,0 +1,146 @@ +{ + 0: { + "name": "Bard Artifact Equipment", + "headGear": 41984, + "bodyGear": 41984, + "legsGear": 41984, + "handsGear": 41984, + "feetGear": 41984, + "waistGear": 0 + }, + 1: { + "name": "Black Mage Artifact Equipment", + "headGear": 40960, + "bodyGear": 40960, + "legsGear": 40960, + "handsGear": 40960, + "feetGear": 40960, + "waistGear": 0 + }, + 2: { + "name": "Dragoon Artifact Equipment", + "headGear": 36864, + "bodyGear": 36864, + "legsGear": 36864, + "handsGear": 36864, + "feetGear": 36864, + "waistGear": 0 + }, + 3: { + "name": "Monk Artifact Equipment", + "headGear": 45056, + "bodyGear": 45056, + "legsGear": 45056, + "handsGear": 45056, + "feetGear": 45056, + "waistGear": 0 + }, + 4: { + "name": "Paladin Artifact Equipment", + "headGear": 43008, + "bodyGear": 43008, + "legsGear": 43008, + "handsGear": 43008, + "feetGear": 43008, + "waistGear": 0 + }, + 5: { + "name": "Warrior Artifact Equipment", + "headGear": 37888, + "bodyGear": 37888, + "legsGear": 37888, + "handsGear": 37888, + "feetGear": 37888, + "waistGear": 0 + }, + 6: { + "name": "White Mage Artifact Equipment", + "headGear": 39936, + "bodyGear": 39936, + "legsGear": 39936, + "handsGear": 39936, + "feetGear": 39936, + "waistGear": 0 + }, + 7: { + "name": "The Maelstrom Uniform", + "headGear": 46080, + "bodyGear": 46080, + "legsGear": 1024, + "handsGear": 46080, + "feetGear": 46080, + "waistGear": 0 + }, + 8: { + "name": "The Order of the Twin Adder Uniform", + "headGear": 46112, + "bodyGear": 46081, + "legsGear": 1024, + "handsGear": 46081, + "feetGear": 46081, + "waistGear": 0 + }, + 9: { + "name": "The Immortal Flames Uniform", + "headGear": 46144, + "bodyGear": 46082, + "legsGear": 1024, + "handsGear": 46082, + "feetGear": 46082, + "waistGear": 0 + }, + 10: { + "name": "Alberic", + "headGear": 0, + "bodyGear": 15744, + "legsGear": 7238, + "handsGear": 11584, + "feetGear": 15744, + "waistGear": 0 + }, + 11: { + "name": "Jehantel", + "headGear": 9604, + "bodyGear": 28742, + "legsGear": 28928, + "handsGear": 1024, + "feetGear": 9412, + "waistGear": 0 + }, + 12: { + "name": "Miraudont", + "headGear": 19503, + "bodyGear": 14598, + "legsGear": 3268, + "handsGear": 14560, + "feetGear": 13475, + "waistGear": 248832 + }, + 13: { + "name": "Nael van Darnus (Elezen Male Only)", + "headGear": 0, + "bodyGear": 933888, + "legsGear": 1024, + "handsGear": 1024, + "feetGear": 1024, + "waistGear": 0 + }, + 14: { + "name": "Papalymo", + "headGear": 20507, + "bodyGear": 7589, + "legsGear": 16641, + "handsGear": 3265, + "feetGear": 9504, + "waistGear": 168960 + }, + 15: { + "name": "Rubh Epocan", + "headGear": 20576, + "bodyGear": 7232, + "legsGear": 5198, + "handsGear": 6209, + "feetGear": 6209, + "waistGear": 248832 + }, +}; \ No newline at end of file diff --git a/www/presets_weapon.json b/www/presets_weapon.json new file mode 100644 index 00000000..4a987118 --- /dev/null +++ b/www/presets_weapon.json @@ -0,0 +1,107 @@ +{ + 0: { + "name": "Axe", + "weapon1": 147850240, + "weapon2": 0, + }, + 1: { + "name": "Bow & Arrow", + "weapon1": 210766878, + "weapon2": 236979210, + }, + 2: { + "name": "Fists", + "weapon1": 58723358, + "weapon2": 59771934, + }, + 3: { + "name": "Lance", + "weapon1": 168826880, + "weapon2": 0, + }, + 4: { + "name": "Sword & Shield", + "weapon1": 79692880, + "weapon2": 32513024, + }, + 5: { + "name": "Wand (Conjurer)", + "weapon1": 331351052, + "weapon2": 0, + }, + 6: { + "name": "Wand (Thaumaturge)", + "weapon1": 294652958, + "weapon2": 0, + }, + 7: { + "name": "Ifrit's Battleaxe", + "weapon1": 147857408, + "weapon2": 0, + }, + 8: { + "name": "Ifrit's Bow", + "weapon1": 210768896, + "weapon2": 0, + }, + 9: { + "name": "Ifrit's Claws", + "weapon1": 62915584, + "weapon2": 63964160, + }, + 10: { + "name": "Ifrit's Harpoon", + "weapon1": 175113216, + "weapon2": 0, + }, + 11: { + "name": "Ifrit's Blade", + "weapon1": 81789952, + "weapon2": 0, + }, + 12: { + "name": "Ifrit's Cane", + "weapon1": 347086848, + "weapon2": 0, + }, + 13: { + "name": "Ifrit's Cudgel", + "weapon1": 294653952, + "weapon2": 0, + }, + 14: { + "name": "Bravura", + "weapon1": 147856384, + "weapon2": 0, + }, + 15: { + "name": "Artemis Bow", + "weapon1": 212861952, + "weapon2": 0, + }, + 16: { + "name": "Sphairai", + "weapon1": 65012736, + "weapon2": 66061312, + }, + 17: { + "name": "Gae Bolg", + "weapon1": 173016064, + "weapon2": 0, + }, + 18: { + "name": "Curtana & Holy Shield", + "weapon1": 79702016, + "weapon2": 32517120, + }, + 19: { + "name": "Thyrus", + "weapon1": 347084800, + "weapon2": 0, + }, + 20: { + "name": "Stardust Rod", + "weapon1": 310380544, + "weapon2": 0, + }, +}; diff --git a/www/testmysql.php b/www/testmysql.php new file mode 100644 index 00000000..fdb5dd88 --- /dev/null +++ b/www/testmysql.php @@ -0,0 +1,7 @@ + \ No newline at end of file