function GetFarmUrl() { $flashVars = parse_flashvars(); $res = $flashVars['app_url'] . 'flashservices/gateway.php'; unset($flashVars); return $res; }
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'); }