/** * 创建应用 * @access public * @param array $config */ public static function run() { self::$appConfig = (require_once 'config.php'); //初始化 self::init(); // 项目开始拓展 Hook('appBegin'); $route = self::$appLib['route']; //call_user_func_array(array($route, "init"), array(self::$appConfig['route'])); $route::init(self::$appConfig['route']); //设置url的类型 Hook('appEnd'); }
function Do_Work() { global $settings; global $need_reload; global $px_Setops; global $res_str; pluginload(); $vDir = './farmville-logs'; 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); } while (file_exists('notrun_parser.txt') || file_exists('notrun_parser_' . $_SESSION['userId'] . '.txt')) { AddLog2("Bot Paused. Next check in 30 seconds."); sleep(30); } parse_neighbors(); parse_user(); AddLog2("Beginning Bot Cycle"); Hook('before_work'); // Init $res = DoInit('full'); if ($res != 'OK') { RaiseError(2); } else { $res_str = ''; //for main logs } Hook('before_load_settings'); // load settings if (!function_exists('LoadSavedSettings')) { die("\n\nSettings plugin installed incorrectly no LoadSavedSettings found!\n\n"); } $px_Setopts = LoadSavedSettings(); $enable_lonlyanimals = $px_Setopts['lonlyanimals']; Hook('after_load_settings'); if ($enable_lonlyanimals) { AddLog2("check lonlyanimal"); Do_Check_Lonlyanimals(); } Hook('flybiplane'); Hook('before_harvest'); Hook('harvest'); Hook('after_harvest'); Hook('before_harvest_buildings'); Hook('harvest_buildings'); Hook('after_harvest_buildings'); //after building harvest Hook('before_harvest_animals'); //get product from livestock Hook('harvest_animals'); Hook('after_harvest_animals'); Hook('before_transform_animals'); Hook('transform_animals'); Hook('after_transform_animals'); Hook('before_harvest_trees'); Hook('harvest_trees'); Hook('after_harvest_trees'); Hook('before_hoe'); Hook('hoe'); Hook('after_hoe'); Hook('before_before_planting'); Hook('before_planting'); Hook('planting'); Hook('after_planting'); Hook('after_work'); Parser_Check_Images(); AddLog2("Peak Memory Usaged: " . round(memory_get_peak_usage(true) / 1024 / 1024, 2) . "MB"); AddLog2("Finished Bot Cycle"); }
echo friendlydate($weibo["create_time"]); ?> </a> </span> </div> <div class="col-md-8"> <span class="pull-right text-primary" data-weibo-id="<?php echo $weibo["id"]; ?> "> <?php $weiboCommentTotalCount = $weibo['comment_count']; ?> <?php echo Hook('support', array('table' => 'weibo', 'row' => $weibo['id'], 'app' => 'Usercenter', 'uid' => $weibo['uid'])); echo Hook('repost', array('weiboId' => $weibo['id'])); ?> <span class="text-primary weibo-comment-link cpointer" data-weibo-id="<?php echo $weibo["id"]; ?> "> 评论<?php if ($weiboCommentTotalCount) { ?> (<?php echo $weiboCommentTotalCount; ?> )<?php }
<p> <?php echo modC('SUBSCRIB_US', L('_NOT_SET_NOW_'), 'Config'); ?> </p> </div> <div class="col-xs-4"> <h2> <i class="icon-link"></i> <?php echo L('_FRIENDLY_LINK_'); ?> </h2> <ul class="friend-link"> <?php echo Hook('friendLink'); ?> </ul> </div> </div> <div class="row text-center"> <hr> <h4> <?php echo modC('COPY_RIGHT', L('_NOT_SET_NOW_'), 'Config'); ?> </h4> <div class="col-xs-12"><?php echo L('_RECORD_N_');
function DoInit($inittype = '') { $T = time(true); $res = 0; Hook('before_load_farm'); $_SESSION['sequence'] = 0; // Create Init request $amf = CreateRequestAMF('', 'UserService.initUser'); $amf->_bodys[0]->_value[1][0]['params'][0] = ""; $amf->_bodys[0]->_value[1][0]['params'][1] = -1; $amf->_bodys[0]->_value[1][0]['params'][2] = true; $serializer = new AMFSerializer(); $result = $serializer->serialize($amf); // serialize the data $answer = Request('', $result); $amf2 = new AMFObject($answer); $deserializer2 = new AMFDeserializer($amf2->rawData); // deserialize the data $deserializer2->deserialize($amf2); // run the deserializer $res = CheckAMF2Response($amf2); if ($res == 'OK') { // get flashSessionKey //$_SESSION['sequence'] = 1; //file_put_contents('all.txt', print_r($amf2,true)); if (isset($amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['session_key'])) { $_SESSION['flashSessionKey'] = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['session_key']; } $_SESSION['servertime'] = $amf2->_bodys[0]->_value['data'][0]['serverTime']; // save to file $flashSessionKey, $xp, $energy $xp = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['xp']; $energy = $amf2->_bodys[0]->_value['data'][0]['data']['energy']; $hlXP = Units_GetFarming('higherLevelXp'); $hlBegin = Units_GetFarming('higherLevelBegin'); $hlStep = Units_GetFarming('higherLevelStep'); // get extra info $level = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['level']; if (isset($hlXP) && $xp >= $hlXP) { $level = @$hlBegin + floor(($xp - @$hlXP) / @$hlStep); } $gold = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['gold']; $cash = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['cash']; $sizeX = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['world']['sizeX']; $sizeY = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['world']['sizeY']; $firstname = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['attr']['name']; $locale = $amf2->_bodys[0]->_value['data'][0]['data']['locale']; $tileset = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['world']['tileSet']; $wither = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['witherOn']; // save to file $level, $coins, $cash, $sizex, $sizey $uSQL = 'INSERT OR REPLACE INTO datastore(userid, storetype, content) values("' . $_SESSION['userId'] . '", "playerinfo", "' . implode(';', array($level, $gold, $cash, $sizeX, $sizeY, $firstname, $locale, $tileset, $wither, $xp, $energy, $_SESSION['flashRevision'])) . '");'; // save world to file save_botarray($amf2->_bodys[0]->_value, F('world.txt')); //file_put_contents('world.txt', print_r($amf2->_bodys[0]->_value,true)); // get objects on farm $objects = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['world']['objectsArray']; //file_put_contents('world.txt', print_r($objects, true)); // FarmFIX/object split $newobjects = serialize($objects); $cleanedobjects = str_replace("'", "''", $newobjects); $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t\t'objects', '" . $cleanedobjects . "');"; // save collection counters to a file $nAQ = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['neighborActionQueue']['m_actionQueue']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'nactionqueue', '" . serialize($nAQ) . "');"; $nAL = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['neighborActionLimits']['m_neighborActionLimits'][date('ymd', $_SESSION['servertime'])]; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'nactionlimit', '" . serialize($nAL) . "');"; $c_count = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['collectionCounters']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'ccount', '" . serialize($c_count) . "');"; $c_bushel = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['buffs']['BBushel']['crop']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'cbushel', '" . serialize($c_bushel) . "');"; $c_busheltime = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['buffs']['BBushel']['time']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'cbusheltime', '" . serialize($c_busheltime) . "');"; $craftstate = @$amf2->_bodys[0]->_value['data'][0]['data']['craftingState']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'craftstate', '" . serialize($craftstate) . "');"; // save lonelyanimals to a file $animallinks = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['lonelyAnimals']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'ralinks', '" . serialize($animallinks) . "');"; // save license information $licenses = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['licenseManager']['licenses']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'licenses', '" . serialize($licenses) . "');"; $storagedata = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['storageData']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'storagedata', '" . serialize($storagedata) . "');"; $incraftbox = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['storageData']['-7']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'craftbox', '" . serialize($incraftbox) . "');"; // save giftbox info for plugins $ingiftbox = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['storageData']['-1']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'giftbox', '" . serialize($ingiftbox) . "');"; foreach ($ingiftbox as $key => $item) { $ingiftbox[$key] = isset($item[0]) ? $item[0] : 0; } $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'ingiftbox', '" . serialize($ingiftbox) . "');"; // save consumable info for plugins $inconbox = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['storageData']['-6']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'consumebox', '" . serialize($inconbox) . "');"; foreach ($inconbox as $key => $item) { $uInfo = Units_GetUnitByCode($key); if (@$uInfo['className'] == 'CSeedPackage') { $inseedbox[$key] = isset($item[0]) ? $item[0] : 0; unset($inconbox[$key]); continue; } $inconbox[$key] = isset($item[0]) ? $item[0] : 0; } $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'inconbox', '" . serialize($inconbox) . "');"; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'inseedbox', '" . serialize($inseedbox) . "');"; // save storage info for plugins $instorage = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['storageData']['-2']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'storagebox', '" . serialize($instorage) . "');"; foreach ($instorage as $key => $item) { $instorage[$key] = $item[0]; } $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'instorage', '" . serialize($instorage) . "');"; // save neighbors list $neighbors = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['neighbors']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'neighbors', '" . serialize($neighbors) . "');"; $bsStats = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['breedingState']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'bsstats', '" . serialize($bsStats) . "');"; $pneighbors = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['pendingNeighbors']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'pneighbors', '" . serialize($pneighbors) . "');"; // save crop mastery list $cropmastery = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['masteryCounters']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'cropmastery', '" . serialize($cropmastery) . "');"; $cropmasterycnt = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['mastery']; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'cropmasterycnt', '" . serialize($cropmasterycnt) . "');"; if (isset($amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['featureCredits']['farm'])) { $featurecred = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['featureCredits']['farm']; } else { $featurecred = $amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['featureCredits']; } $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'featurecred', '" . serialize($featurecred) . "');"; // save ribbon data $achievements = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['achCounters']; $earned_ribbons = @$amf2->_bodys[0]->_value['data'][0]['data']['userInfo']['player']['achievements']; $ribbon_merge = array(); foreach ($achievements as $name => $data) { $ribbon_merge[$name]['count'] = $data; } if (@count($earned_ribbons) > 0) { foreach ($earned_ribbons as $name => $data) { $ribbon_merge[$name]['earned'] = $data; } } $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'ach_count', '" . serialize($ribbon_merge) . "');"; $_SESSION['vDataStoreDB']->exec($uSQL); unset($uSQL, $amf2); // save_botarray ($array, $filename); } if ($inittype == 'full') { $amf = CreateRequestAMF('', 'UserService.postInit'); $serializer = new AMFSerializer(); $result = $serializer->serialize($amf); // serialize the data $answer = Request('', $result); $amf2 = new AMFObject($answer); $deserializer2 = new AMFDeserializer($amf2->rawData); // deserialize the data $deserializer2->deserialize($amf2); // run the deserializer $res2 = CheckAMF2Response($amf2); if ($res2 == 'OK') { file_put_contents('world2.txt', print_r($amf2->_bodys[0]->_value, true)); $availBushels = @$amf2->_bodys[0]->_value['data'][0]['data']['marketView']['marketStalls']; $availGoods = @$amf2->_bodys[0]->_value['data'][0]['data']['marketView']['craftedGoods']; $bsInfo = @$amf2->_bodys[0]->_value['data'][0]['data']['breedingState']; $uSQL = "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'availbushels', '" . serialize($availBushels) . "');"; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'availgoods', '" . serialize($availGoods) . "');"; $uSQL .= "INSERT OR REPLACE INTO datastore(userid, storetype, content) values('" . $_SESSION['userId'] . "',\n\t\t\t\t'bsinfo', '" . serialize($bsInfo) . "');"; $_SESSION['vDataStoreDB']->exec($uSQL); unset($uSQL, $amf2); } Hook('after_load_farm'); $res = $res == 'OK' && $res2 == 'OK' ? 'OK' : 'Init: ' . $res . ' - PostInit: ' . $res2; } $T2 = time(); $T2 -= $T; if ($res == 'OK') { AddLog2("Initialization Took: " . $T2 . " Seconds"); } else { AddLog2("Initialization Failed: " . $res); } return $res; }