Example #1
0
					if(get_magic_quotes_gpc())
						$query = stripslashes($query);
				}
				$res = mysql_query($query, $conn);
				$errno = mysql_errno();
				$affectedrows = mysql_affected_rows($conn);
				$insertid = mysql_insert_id($conn);
				$numfields = mysql_num_fields($res);
				$numrows = mysql_num_rows($res);
				EchoResultSetHeader($errno, $affectedrows, $insertid, $numfields, $numrows);
				if($errno > 0)
					echo GetBlock(mysql_error());
				else {
					if($numfields > 0) {
						EchoFieldsHeader($res, $numfields);
						EchoData($res, $numfields, $numrows);
					} else {
						if(phpversion_int() >= 40300)
							echo GetBlock(mysql_info($conn));
						else
							echo GetBlock("");
					}
				}
				if($i<(count($_POST["q"])-1))
					echo "\x01";
				else
					echo "\x00";
				mysql_free_result($res);
			}
		}
		exit();
Example #2
0
function GetUnitList()
{
    $vDir = 'farmville-xml';
    if (!file_exists($vDir)) {
        mkdir($vDir);
    }
    $time_limit = 7 * 24 * 60 * 60;
    // number of seconds to 'keep' the log DAYSxHOURSxMINSxSECS
    if ($df = opendir($vDir)) {
        while (false !== ($file = readdir($df))) {
            if ($file != "." && $file != "..") {
                $file1 = $vDir . '/' . $file;
                $last_modified = filemtime($file1);
                if (time() - $last_modified > $time_limit) {
                    unlink($file1);
                }
            }
        }
        closedir($df);
    }
    $vDir = 'farmville-sqlite';
    if (!file_exists($vDir)) {
        mkdir($vDir);
    }
    $time_limit = 7 * 24 * 60 * 60;
    // number of seconds to 'keep' the log DAYSxHOURSxMINSxSECS
    if ($df = opendir($vDir)) {
        while (false !== ($file = readdir($df))) {
            if ($file != "." && $file != "..") {
                $file1 = $vDir . '/' . $file;
                $last_modified = filemtime($file1);
                if (time() - $last_modified > $time_limit) {
                    unlink($file1);
                }
            }
        }
        closedir($df);
    }
    $sqlite_update = 0;
    //if 1 we are going to download new xml from server
    // check settings table
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM settings limit 1') === false) {
        $vSQL = 'CREATE TABLE
              settings (
                settings_name CHAR(25) PRIMARY KEY,
                settings_value CHAR(25)
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    // check datastore table
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM datastore limit 1') === false) {
        $vSQL = 'CREATE TABLE
              datastore (
                userid CHAR(25),
                storetype CHAR(25),
                content BLOB,
                PRIMARY KEY (userid, storetype)
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    // check datastore table
    if (@$_SESSION['vRewardStoreDB']->querySingle('SELECT * FROM rewardstore limit 1') === false) {
        $vSQL = 'CREATE TABLE
              rewardstore (
                userid CHAR(25),
                storetype CHAR(25),
                content BLOB,
                PRIMARY KEY (userid, storetype)
              )';
        $_SESSION['vRewardStoreDB']->exec($vSQL);
    }
    // check userids table
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM userids limit 1') === false) {
        $vSQL = 'CREATE TABLE
              userids (
                userid CHAR(25) PRIMARY KEY,
                username CHAR(25)
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    if (@$_SESSION['vDataStoreDB']->querySingle('SELECT * FROM neighbors limit 1') === false) {
        $vSQL = 'CREATE TABLE
              neighbors (
                neighborid CHAR(25) PRIMARY KEY,
                fullname CHAR(50),
                profilepic TEXT
              )';
        $_SESSION['vDataStoreDB']->exec($vSQL);
    }
    // check units table
    if (@$_SESSION['vDataDB']->querySingle('SELECT * FROM units limit 1') === false) {
        $vSQL = 'CREATE TABLE
              units (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX units_idx_1 ON units(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX units_idx_2 ON units(field,content)');
        $sqlite_update = 1;
    }
    // check achievements table
    if (@$_SESSION['vDataDB']->querySingle('SELECT * FROM achievements limit 1') === false) {
        $vSQL = 'CREATE TABLE
              achievements (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX achievements_idx_1 ON achievements(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX achievements_idx_2 ON achievements(field,content)');
        $sqlite_update = 1;
    }
    // check collectables table
    if (@$_SESSION['vDataDB']->querySingle('SELECT * FROM collectables limit 1') === false) {
        $vSQL = 'CREATE TABLE
              collectables (

                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX collectables_idx_1 ON collectables(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX collectables_idx_2 ON collectables(field,content)');
        $sqlite_update = 1;
    }
    // check storage table
    if (@$_SESSION['vDataDB']->query('SELECT * FROM storage limit 1') === false) {
        $vSQL = 'CREATE TABLE
              storage (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->exec($vSQL);
        $_SESSION['vDataDB']->exec('CREATE INDEX storage_idx_1 ON storage(name,field)');
        $_SESSION['vDataDB']->exec('CREATE INDEX storage_idx_2 ON storage(field,content)');
        $sqlite_update = 1;
    }
    // check crafting table
    if (@$_SESSION['vDataDB']->query('SELECT * FROM crafting limit 1') === false) {
        $vSQL = 'CREATE TABLE
              crafting (
                name CHAR(25),
                field CHAR(25),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->query($vSQL);
        $_SESSION['vDataDB']->query('CREATE INDEX crafting_idx_1 ON crafting(name,field)');
        $_SESSION['vDataDB']->query('CREATE INDEX crafting_idx_2 ON crafting(field,content)');
        $sqlite_update = 1;
    }
    // check quests table
    if (@$_SESSION['vDataDB']->query('SELECT * FROM quests limit 1') === false) {
        $vSQL = 'CREATE TABLE
              quests (
                name CHAR(25),
                field CHAR(50),
                content CHAR(250)
              )';
        $_SESSION['vDataDB']->query($vSQL);
        $_SESSION['vDataDB']->query('CREATE INDEX quests_idx_1 ON quests(name,field)');
        $_SESSION['vDataDB']->query('CREATE INDEX quests_idx_2 ON quests(field,content)');
        $sqlite_update = 1;
    }
    // Force download when key files are missing
    if (!file_exists('units.txt')) {
        $sqlite_update = 1;
    }
    if (!file_exists('collectable_info.txt')) {
        $sqlite_update = 1;
    }
    if (!file_exists('achievement_info.txt')) {
        $sqlite_update = 1;
    }
    $flashVars = parse_flashvars();
    $vGameSetting = 'farmville-xml/' . $_SESSION['flashRevision'] . '_gameSettings.xml';
    if (!file_exists($vGameSetting)) {
        $xml_units = '';
        if (!$xml_units) {
            AddLog2($flashVars['game_config_url']);
            AddLog2('DL: v' . $_SESSION['flashRevision'] . ' settings file.');
            //$geturl = 'http://static-facebook.farmville.com/v' . $_SESSION['flashRevision'] . '/gameSettings.xml.gz';
            $geturl = $flashVars['game_config_url'];
            $xml_units = gzuncompress(proxy_GET($geturl));
        }
        if (!$xml_units) {
            AddLog2('Couldn\'t find a settings xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vGameSetting, $xml_units);
            $sqlite_update = 1;
        }
        unset($xml_units);
    }
    $vItemsSetting = 'farmville-xml/' . $_SESSION['flashRevision'] . '_items.xml';
    if (!file_exists($vItemsSetting)) {
        $xml_items = '';
        if (!$xml_items) {
            AddLog2($flashVars['items_url']);
            AddLog2('DL: v' . $_SESSION['flashRevision'] . ' items xml.');
            //$geturl = 'http://static-facebook.farmville.com/v' . $_SESSION['flashRevision'] . '/items.xml.gz';
            $geturl = $flashVars['items_url'];
            $xml_items = gzuncompress(proxy_GET($geturl));
        }
        if (!$xml_items) {
            AddLog2('Couldn\'t find a items xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vItemsSetting, $xml_items);
            $sqlite_update = 1;
        }
        unset($xml_items);
    }
    $vStorageConfig = 'farmville-xml/' . $_SESSION['flashRevision'] . '_StorageConfig.xml';
    if (!file_exists($vStorageConfig)) {
        $xml_storage = '';
        AddLog2('DL: v' . $_SESSION['flashRevision'] . ' storageconfig xml');
        if (isset($flashVars['xml_url']) && !empty($flashVars['xml_url'])) {
            $geturl = $flashVars['xml_url'] . 'StorageConfig.xml.gz';
        } else {
            $geturl = $flashVars['app_url'] . 'v' . $_SESSION['flashRevision'] . '/StorageConfig.xml.gz';
        }
        $xml_storage = gzuncompress(proxy_GET($geturl));
        if (!$xml_storage) {
            AddLog2('Couldn\'t find a storageconfig xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vStorageConfig, $xml_storage);
            $sqlite_update = 1;
        }
        unset($xml_storage);
    }
    $vQuestsConfig = 'farmville-xml/' . $_SESSION['flashRevision'] . '_Quests.xml';
    if (!file_exists($vQuestsConfig)) {
        $xml_quests = '';
        $geturl = $flashVars['social_quest_url'];
        AddLog2('DL: v' . $_SESSION['flashRevision'] . ' quests xml');
        //$geturl = 'http://static-facebook.farmville.com/v' . $_SESSION['flashRevision'] . '/quests.xml';
        $xml_quests = gzuncompress(proxy_GET($geturl));
        if (!$xml_quests) {
            AddLog2('Couldn\'t find a quests xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vQuestsConfig, $xml_quests);
            $sqlite_update = 1;
        }
        unset($xml_quests);
    }
    $vCraftingConfig = 'farmville-xml/' . $_SESSION['flashRevision'] . '_Crafting.xml';
    if (!file_exists($vCraftingConfig)) {
        $xml_crafting = '';
        AddLog2('DL: v' . $_SESSION['flashRevision'] . ' crafting xml');
        if (isset($flashVars['xml_url']) && !empty($flashVars['xml_url'])) {
            $geturl = $flashVars['xml_url'] . 'crafting.xml.gz';
        } else {
            $geturl = $flashVars['app_url'] . 'v' . $_SESSION['flashRevision'] . '/crafting.xml.gz';
        }
        $xml_crafting = gzuncompress(proxy_GET($geturl));
        if (!$xml_crafting) {
            AddLog2('Couldn\'t find a crafting xml...');
        } else {
            AddLog2('Download completed.');
            file_put_contents($vCraftingConfig, $xml_crafting);
            $sqlite_update = 1;
        }
        unset($xml_crafting);
    }
    if ($sqlite_update == 1) {
        $_SESSION['vDataDB']->exec('BEGIN TRANSACTION');
        $_SESSION['vDataDB']->exec('delete from units');
        $_SESSION['vDataDB']->exec('delete from achievements');
        $_SESSION['vDataDB']->exec('delete from collectables');
        $_SESSION['vDataDB']->exec('delete from storage');
        $_SESSION['vDataDB']->exec('delete from crafting');
        $_SESSION['vDataDB']->exec('delete from quests');
        $_SESSION['vDataDB']->exec('COMMIT TRANSACTION');
        $_SESSION['vDataDB']->exec('vacuum');
        $_SESSION['vDataDB']->exec('BEGIN TRANSACTION');
        $xmlDoc = simplexml_load_file($vItemsSetting);
        $itemsarray = objectsIntoArray($xmlDoc);
        //file_put_contents('testarray.txt', print_r($array,true));
        foreach ($itemsarray['items']['item'] as $item) {
            $itemName = $item['@attributes']['name'];
            foreach ($item as $key => $field) {
                if ($key == '@attributes') {
                    foreach ($field as $key1 => $attr) {
                        $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","' . $key1 . '","' . $attr . '");');
                    }
                    continue;
                }
                if ($key == 'image') {
                    foreach ($field as $key1 => $attr) {
                        if ($attr['name'] == 'icon') {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","iconurl","' . $attr['url'] . '");');
                            break;
                        }
                        if ($attr['@attributes']['name'] == 'icon') {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","iconurl","' . $attr['@attributes']['url'] . '");');
                            break;
                        }
                    }
                    continue;
                }
                if ($key == 'masteryLevel') {
                    foreach ($field as $key1 => $attr) {
                        if (isset($attr['@attributes']['gift'])) {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","masterymax","' . $attr['@attributes']['count'] . '");');
                            break;
                        }
                        if (isset($attr['gift'])) {
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","masterymax","' . $attr['count'] . '");');
                            break;
                        }
                    }
                    continue;
                }
                if (is_array($field)) {
                    $_SESSION['vDataDB']->exec("insert into units(name,field,content) values('" . $itemName . "','" . $key . "','" . serialize($field) . "');");
                } else {
                    $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $itemName . '","' . $key . '","' . $field . '");');
                }
            }
        }
        $xmlDoc = simplexml_load_file($vGameSetting);
        foreach ($xmlDoc->farming as $vItem) {
            foreach ($vItem->attributes() as $vField => $vContent) {
                $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("_farming","' . $vField . '","' . $vContent . '");');
            }
        }
        foreach ($xmlDoc->collections->collection as $vItem) {
            $vItemName = (string) $vItem['name'];
            if (strlen($vItemName) > 0) {
                foreach ($vItem->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vItem->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'collectable') {
                        $_SESSION['vDataDB']->query('insert into collectables(name,field,content) values("' . $vItemName . '","collectable","' . $vSubElement['code'] . '");');
                        if (isset($vSubElement['chance'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","chance","' . $vSubElement['chance'] . '");');
                        }
                        if (isset($vSubElement['rarity'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","rarity","' . $vSubElement['rarity'] . '");');
                        }
                        if (isset($vSubElement['source'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","source","' . $vSubElement['source'] . '");');
                        }
                        if (isset($vSubElement['numneeded'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vSubElement['code'] . '","numneeded","' . $vSubElement['numneeded'] . '");');
                        }
                    }
                    if ($vSubName == 'tradeInReward') {
                        if (isset($vSubElement['xp'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","tradeInReward_xp","' . $vSubElement['xp'] . '");');
                        }
                        if (isset($vSubElement['coins'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","tradeInReward_coins","' . $vSubElement['coins'] . '");');
                        }
                        if (isset($vSubElement['gift'])) {
                            $_SESSION['vDataDB']->exec('insert into collectables(name,field,content) values("' . $vItemName . '","tradeInReward_gift","' . $vSubElement['gift'] . '");');
                        }
                    }
                }
            }
        }
        foreach ($xmlDoc->achievements->achievement as $vItem) {
            $vItemName = (string) $vItem['name'];
            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $vItemName . '","type","achieve");');
            if (strlen($vItemName) > 0) {
                foreach ($vItem->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","' . $vField . '","' . $vContent . '");');
                    $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $vItemName . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vItem->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'image') {
                        if ($vSubElement['name'] == 'icon_48') {
                            $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","iconurl","' . $vSubElement['url'] . '");');
                            $_SESSION['vDataDB']->exec('insert into units(name,field,content) values("' . $vItemName . '","iconurl","' . $vSubElement['url'] . '");');
                        }
                    } elseif ($vSubName = 'level') {
                        $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","count","' . $vSubElement['count'] . '");');
                        $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","xp","' . $vSubElement['xp'] . '");');
                        $_SESSION['vDataDB']->exec('insert into achievements(name,field,content) values("' . $vItemName . '","coins","' . $vSubElement['coins'] . '");');
                    }
                }
            }
        }
        unset($xmlDoc);
        //$xmlDoc = simplexml_load_file($vStorageConfig);
        $XML_string = file_get_contents($vStorageConfig);
        $obj = new xml2array($XML_string);
        $itemsarray = $obj->getResult();
        foreach ($itemsarray['storage']['StorageBuilding'] as $item) {
            $itemName = $item['name'];
            unset($item['metadata'], $item['#comment']);
            foreach ($item as $key => $value) {
                if (is_array($value) && count($value) == 1) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . implode('', $value) . '");');
                } elseif (is_string($value)) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . $value . '");');
                } else {
                    $_SESSION['vDataDB']->exec("insert into storage(name,field,content) values('" . $itemName . "','" . $key . "','" . serialize($value) . "');");
                }
            }
        }
        foreach ($itemsarray['storage']['FeatureCreditStorage'] as $item) {
            $itemName = $item['name'];
            unset($item['metadata'], $item['#comment']);
            foreach ($item as $key => $value) {
                if (is_array($value) && count($value) == 1) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . implode('', $value) . '");');
                } elseif (is_string($value)) {
                    $_SESSION['vDataDB']->exec('insert into storage(name,field,content) values("' . $itemName . '","' . $key . '","' . $value . '");');
                } else {
                    $_SESSION['vDataDB']->exec("insert into storage(name,field,content) values('" . $itemName . "','" . $key . "','" . serialize($value) . "');");
                }
            }
        }
        $xmlDoc = simplexml_load_file($vCraftingConfig);
        foreach ($xmlDoc->recipes->CraftingRecipe as $vRecipe) {
            $vRecipeID = (string) $vRecipe['id'];
            if (strlen($vRecipeID) > 0) {
                $vRecipeName = '';
                foreach ($vRecipe->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->query('insert into crafting(name,field,content) values("' . $vRecipeID . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vRecipe->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'name') {
                        $vRecipeName = (string) $vSubElement;
                    }
                    if ($vSubName == 'image') {
                        if ($vSubElement['name'] == 'icon') {
                            $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","iconurl","' . $vSubElement['url'] . '");');
                        }
                    } elseif ($vSubName == 'Reward') {
                        foreach ($vSubElement->children() as $vSubSubName => $vSubSubElement) {
                            foreach ($vSubSubElement->attributes() as $vField => $vContent) {
                                $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","reward_' . $vSubSubName . '_' . $vField . '","' . (string) $vContent . '");');
                            }
                        }
                    } elseif ($vSubName == 'Ingredients') {
                        foreach ($vSubElement->children() as $vSubSubName => $vSubSubElement) {
                            $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","Ingredient_itemCode","' . $vSubSubElement['itemCode'] . '");');
                            $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","Ingredient_quantityRequired_' . $vSubSubElement['itemCode'] . '","' . $vSubSubElement['quantityRequired'] . '");');
                        }
                    } else {
                        $_SESSION['vDataDB']->exec('insert into crafting(name,field,content) values("' . $vRecipeID . '","' . $vSubName . '","' . (string) $vSubElement . '");');
                    }
                }
                if (strlen($vRecipeName) > 0) {
                    $_SESSION['vDataDB']->exec('update crafting set name="' . $vRecipeName . '" where name="' . $vRecipeID . '"');
                }
            }
        }
        unset($xmlDoc);
        $xmlDoc = simplexml_load_file($vQuestsConfig);
        foreach ($xmlDoc->quest as $vQuest) {
            $vQuestID = (string) $vQuest['id'];
            if (strlen($vQuestID) > 0) {
                foreach ($vQuest->attributes() as $vField => $vContent) {
                    $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","' . $vField . '","' . $vContent . '");');
                }
                foreach ($vQuest->children() as $vSubName => $vSubElement) {
                    if ($vSubName == 'text') {
                        foreach ($vSubElement->attributes() as $vField => $vContent) {
                            $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","' . $vField . '","' . (string) $vContent . '");');
                        }
                    } elseif ($vSubName == 'icon') {
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","iconurl","' . $vSubElement['url'] . '");');
                    } elseif ($vSubName == 'questGiverImage') {
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","questGiverImage","' . $vSubElement['url'] . '");');
                    } elseif ($vSubName == 'completionRequirements') {
                        $vCompleteName = $vSubElement['name'];
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '","' . $vCompleteName . '");');
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_timeLimit","' . $vSubElement['timeLimit'] . '");');
                        foreach ($vSubElement->children() as $vSubSubName => $vSubSubElement) {
                            if ($vSubSubName == 'requirement') {
                                $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_' . (string) $vSubSubElement['action'] . '_' . (string) $vSubSubElement['type'] . '","' . (string) $vSubSubElement['many'] . '");');
                            }
                            if ($vSubSubName == 'reward') {
                                $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_reward_coins","' . (string) $vSubSubElement['coins'] . '");');
                                $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","completionRequirements_' . $vCompleteName . '_reward_experience","' . (string) $vSubSubElement['experience'] . '");');
                            }
                        }
                    } else {
                        $_SESSION['vDataDB']->exec('insert into quests(name,field,content) values("' . $vQuestID . '","' . $vSubName . '","' . (string) $vSubElement . '");');
                    }
                }
            }
        }
        unset($xmlDoc);
        $_SESSION['vDataDB']->query('COMMIT TRANSACTION');
        $vCollectable = array();
        // create collectable_info.txt
        $vSQL = 'select * from collectables where field="code"';
        $vResult = $_SESSION['vDataDB']->query($vSQL);
        while ($vRow = $vResult->fetchArray(SQLITE3_ASSOC)) {
            $vCollectable[$vRow['content']]['name'] = $vRow['name'];
            $vCollectable[$vRow['content']]['code'] = $vRow['content'];
            $vSQL2 = 'select content from collectables where name="' . $vRow['name'] . '" and field="tradeInReward_xp"';
            $vCollectable[$vRow['content']]['tradeInReward'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from collectables where name="' . $vRow['name'] . '" and field="realname"';
            $vCollectable[$vRow['content']]['realname'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from collectables where name="' . $vRow['name'] . '" and field="collectable"';
            $vResult2 = $_SESSION['vDataDB']->query($vSQL2);
            while ($vRow2 = $vResult2->fetchArray(SQLITE3_ASSOC)) {
                $vCollectable[$vRow['content']]['collectable'][] = $vRow2['content'];
            }
        }
        file_put_contents('collectable_info.txt', serialize($vCollectable));
        unset($vCollectable);
        $vAchievements = array();
        $vSQL = 'select * from achievements where field="code"';
        $vResult = $_SESSION['vDataDB']->query($vSQL);
        while ($vRow = $vResult->fetchArray(SQLITE3_ASSOC)) {
            $vAchievements[$vRow['content']]['name'] = $vRow['name'];
            $vAchievements[$vRow['content']]['code'] = $vRow['content'];
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="iconurl"';
            $vAchievements[$vRow['content']]['iconurl'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="realname"';
            $vAchievements[$vRow['content']]['realname'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="desc"';
            $vAchievements[$vRow['content']]['desc'] = $_SESSION['vDataDB']->querySingle($vSQL2);
            $vSQL2 = 'select content from achievements where name="' . $vRow['name'] . '" and field="count" order by field';
            $vResult2 = $_SESSION['vDataDB']->query($vSQL2);
            while ($vRow2 = $vResult2->fetchArray(SQLITE3_ASSOC)) {
                $vAchievements[$vRow['content']]['level'][] = $vRow2['content'];
            }
        }
        file_put_contents('achievement_info.txt', serialize($vAchievements));
        unset($vAchievements);
        file_put_contents('units.txt', serialize(Units_GetAll()));
        file_put_contents('sqlite_check.txt', $_SESSION['flashRevision']);
    }
    EchoData('OK');
}