function process_dir($dir, $recursive = FALSE) { if (is_dir($dir)) { for ($list = array(), $handle = opendir($dir); FALSE !== ($file = readdir($handle));) { if ($file != '.' && $file != '..' && $file != 'level.dat.json' && $file != 'level.dat.json.gz' && file_exists($path = $dir . '/' . $file)) { if (is_dir($path) && $recursive) { $list = array_merge($list, process_dir($path, TRUE)); } else { $entry = array('filename' => $file); //---------------------------------------------------------// // - SECTION 1 - // // Actions to be performed on ALL ITEMS // //----------------- Begin Editable ------------------// //$entry['modtime'] = filemtime($path); //----------------- End Editable ------------------// do { if (!is_dir($path)) { //---------------------------------------------------------// // - SECTION 2 - // // Actions to be performed on FILES ONLY // //----------------- Begin Editable ------------------// //$entry['size'] = filesize($path); $pos = strpos($path, '.b6z'); $pos2 = strpos($path, '.gz'); if ($pos > 0 | $pos2 > 0) { unlink($path); continue; } $pos3 = strpos($file, 'evel.dat'); if ($pos3 > 0) { continue; } $entry['dat'] = readchunk($path); $entry['filename'] = trimpath($path); //----------------- End Editable ------------------// break; } else { //---------------------------------------------------------// // - SECTION 3 - // // Actions to be performed on DIRECTORIES ONLY // //----------------- Begin Editable ------------------// //----------------- End Editable ------------------// break; } } while (FALSE); //if ($entry['dat'] & $entry['dat']['xpos'] ) $list[] = $entry; } } } closedir($handle); return $list; } else { return FALSE; } }
/** * rewrite visual studio script * @param string $modelname * @param bool|number $revert * @param bool $randsuffix * @return bool */ function rewrite_vcscript($modelname = NULL, $revert = false, $randsuffix = false) { $result = true; if (empty($modelname)) { return false; } $model_scriptpath = get_scriptdir($modelname); $needrevert = file_exists($model_scriptpath . 'vcscript_revert'); if (-1 == $revert && $needrevert) { $revert = true; } if (true === $revert) { echo '[' . $modelname . '] will revret to standard.', "\n"; } else { echo '[' . $modelname . '] will rename the all scripts', "\n"; } if (false == $revert && $needrevert) { echo 'warning: [' . $modelname . '] need revert, your choice not revert.'; } $scriptfiles = get_scriptfile($model_scriptpath); if (0 == count($scriptfiles)) { return false; } foreach ($scriptfiles as $scriptfile) { $scriptfile_info = file_get_contents($scriptfile); $sourcefiles = array(); $matchcorcc_files = array(); $matchcpp_files = array(); preg_match_all('/".*\\.cc?"/', $scriptfile_info, $matchcorcc_files); preg_match_all('/".*\\.cpp"/', $scriptfile_info, $matchcpp_files); $sourcefiles = array_merge($matchcorcc_files[0], $matchcpp_files[0]); foreach ($sourcefiles as $sourcefile) { $scriptfile_old = $sourcefile; $sourcefile = substr($sourcefile, 1, strlen($sourcefile) - 2); //del '"' $sourcefile = trimpath($sourcefile); $sourcefile_path = $model_scriptpath . $sourcefile; $sourcefile_path = format_systempath($sourcefile_path); $sourcefile_name = basename($sourcefile_path); $sourcefile_dir = dirname($sourcefile_path); $temp = str_replace(format_systempath(PROJECTPATH), '', $sourcefile_dir); $temp = str_nreplace('src\\', '', $temp, 1); $new_sourcefile_name = str_replace('\\', '_', $temp); if (true === $revert) { $new_sourcefile_name = str_replace($new_sourcefile_name . '_', '', $sourcefile_name); $randsuffix_match = array(); preg_match('/_\\d{11,13}\\./', $sourcefile_name, $randsuffix_match); if (count($randsuffix_match) > 0) { $randsuffix_str = substr($randsuffix_match[0], 0, strlen($randsuffix_match[0]) - 1); $new_sourcefile_name = str_replace($randsuffix_str, '', $new_sourcefile_name); } } else { $new_sourcefile_name .= true === $randsuffix ? '_' . time() . rand(1, 1000) : ''; $new_sourcefile_name .= '_' . $sourcefile_name; } $new_sourcefile = str_replace($sourcefile_name, $new_sourcefile_name, $sourcefile); sys_rename($sourcefile_dir, $sourcefile_name, $new_sourcefile_name); $scriptfile_info = str_replace($scriptfile_old, '"' . $new_sourcefile . '"', $scriptfile_info); } $result = file_put_contents($scriptfile, $scriptfile_info); if (!$result) { echo 'rewrite ' . $scriptfile . ' failed!', "\n"; } else { echo 'rewrite ' . $scriptfile . ' success.', "\n"; } } $revert_fileinfo = <<<EOF 1 en: This is a flag file of visual studio script if need revert. If you don't understand this, can't delete it. cn: 这个文件用来作为是否需要还原vcscript的标记。 如果你不清楚该文件的用途,则不要删除它。 EOF; if (true === $revert) { @unlink($model_scriptpath . 'vcscript_revert'); } else { file_put_contents($model_scriptpath . 'vcscript_revert', $revert_fileinfo); } }