Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Copyright (c) 2012 [iPs]TeaM
- * Bruno da Silva (email@brunodasilva.com)
- * Função: Criar arquivos temporários
- *
- * www.brunodasilva.com
- * www.ips-team.forumeiros.com
- MODO DE USO:
- CreateTempFile ( " nome do arquivo ", SEGUNDOSparaEXPIRAR );
- Exemplo:
- CreateTempFile("bruno.ini", 20); // é deletado 20 segundos depois
- SetTimeFile( " nome do arquivo ", NOVOtempoAPOSagora);
- Exemplo:
- SetTimeFile("bruno.ini", 40); // faz o arquivo durar +40 segundos
- _____________________________________________________________________________________
- # FUNCIONA MESMO SE DESLIGAR O SERVIDOR
- # SUPORTE A MÚLTIPLOS ARQUIVOS
- # AO DESLIGAR O SERVIDOR FECHE COM "RCON EXIT"
- A callback "OnExpireFile" é chamada com nome do arquivo que foi expirado e deletado !!!
- _____________________________________________________________________________________*/
- // Redefina aqui em caso de for necessário
- #if !defined MAX_FILE_NAME
- #define MAX_FILE_NAME 32
- #endif
- #if !defined MAX_TEMP_FILES
- #define MAX_TEMP_FILES 100
- #endif
- // Não mexa no código caso não saiba xD
- #if defined FILTERSCRIPT
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- public OnFilterScriptInit()
- {
- ExpirarArquivosINIT();
- return CallLocalFunction("exOnFilterScriptInit", "");
- }
- public OnFilterScriptInit()
- {
- ExpirarArquivosEXIT();
- return CallLocalFunction("exOnFilterScriptExit", "");
- }
- #define OnFilterScriptInit exOnFilterScriptInit
- forward OnFilterScriptInit();
- #define OnFilterScriptExit exOnFilterScriptExit
- forward OnFilterScriptExit();
- #else
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- public OnGameModeInit()
- {
- ExpirarArquivosINIT();
- return CallLocalFunction("exfileOnGameModeInit", "");
- }
- public OnGameModeExit()
- {
- ExpirarArquivosEXIT();
- return CallLocalFunction("exfileOnGameModeExit", "");
- }
- #define OnGameModeInit exfileOnGameModeInit
- forward OnGameModeInit();
- #define OnGameModeExit exfileOnGameModeExit
- forward OnGameModeExit();
- #endif
- #define TempFile:: BSTemp_
- #define BSTemp_fp%0(%1) forward %0(%1); public %0(%1)
- // Declarar variáveis novas
- enum bsInfo {
- szFilename[MAX_FILE_NAME],
- fileTime
- }
- new
- TempFile::Info[MAX_TEMP_FILES][bsInfo],
- TempFile::Total = -1;
- // Ao iniciar script, chamar a pública para checar os arquivos
- // Carregar o arquivo nas arrays
- TempFile::fp ExpirarArquivosINIT() {
- if (fexist("filesrename.bs")) {
- new
- File: file = fopen("filesrename.bs", io_read),
- File: time = fopen("filestimers.bs", io_read),
- stringRename[MAX_TEMP_FILES * MAX_FILE_NAME char],
- stringTimers[MAX_TEMP_FILES * 13 char];
- fread(file, stringRename, (MAX_TEMP_FILES * MAX_FILE_NAME) >> 2, true); // >> 2 para adaptar a char
- fread(time, stringTimers, (MAX_TEMP_FILES * 13) >> 2, true); // 13 pois pawn só aceita números com +- 13 algarismos
- fclose(file);
- fclose(time);
- TempFile::Total++;
- // Carregar nomes arquivos
- for (new x, j = -1; stringRename { x }; x++) {
- if (stringRename { x } == '>') {
- j = -1;
- TempFile::Total++;
- } else {
- TempFile::Info[TempFile::Total][szFilename][++j] = stringRename { x };
- }
- }
- TempFile::Total = 0;
- // Carregar tempos
- for (new x, j = -1, stringTemp[13]; stringTimers { x }; x++) {
- if (stringTimers { x} == '|') {
- j = -1;
- TempFile::Total++;
- TempFile::Info[TempFile::Total][fileTime] = strval(stringTemp);
- stringTemp[0] = EOS;
- } else {
- stringTemp[++j] = stringTimers { x };
- }
- }
- fremove("filesrename.bs");
- fremove("filestimers.bs");
- printf("Arquivos temporários carregados: %d", TempFile::Total);
- }
- //CallLocalFunction("OnFilterScriptInitEx", "\0");
- return SetTimer("checarArquivos", 998, true); // 998 ms. Para demorar em torno de 1 segundo (2 ms execução callback)
- }
- // Exportar array para arquivo
- // Assim pode carregar os dados posteriormente
- TempFile::fp ExpirarArquivosEXIT() {
- new
- File: file = fopen("filesrename.bs", io_write),
- File: time = fopen("filestimers.bs", io_write);
- for (new i; i <= TempFile::Total; ++i) {
- if (gettime() <= TempFile::Info[i][fileTime]) {
- if (fexist(TempFile::Info[i][szFilename])) {
- if (file && time) {
- fwrite(file, TempFile::Info[i][szFilename]);
- fwrite(time, intToStr(TempFile::Info[i][fileTime]));
- fwrite(file, ">");
- fwrite(time, "|");
- }
- }
- }
- }
- if (file && time) {
- fclose(file);
- fclose(time);
- }
- // CallLocalFunction("OnFilterScriptExitEx", "\0")
- return true;
- }
- // Checar se o tempo do arquivo já passou do inválido
- // Aqui é deletado o arquivo após x tempo
- TempFile::fp checarArquivos() {
- if (!TempFile::Total) {
- return false;
- }
- for (new i; i <= TempFile::Total; i++) {
- if (gettime() >= TempFile::Info[i][fileTime]) {
- if (fexist(TempFile::Info[i][szFilename])) {
- fremove(TempFile::Info[i][szFilename]);
- CallLocalFunction("OnExpireFile", "s", TempFile::Info[i][szFilename]);
- }
- }
- }
- return true;
- }
- // Função para criar o arquivoTemporario
- // Bastando especificar os segundos e o arquivo
- // O parametro "dontexist" caso estiver TRUE colocará um novo tempo no arquivo caso ele existir
- stock arquivoTemporario(arquivo[], segundos, dontexist = _: true )
- return arquivoTemporarioEX(arquivo, segundos, dontexist );
- TempFile::fp arquivoTemporarioEX(arquivo[], segundos, dontexist ) {
- // caso arquivo já existir editar tempo atual
- if (fexist(arquivo) && dontexist) {
- return alterarTempo(arquivo, segundos);
- //return 1;
- }
- static
- File: file;
- if ((file = fopen(arquivo, io_write))) {
- strcat(TempFile::Info[++TempFile::Total][szFilename], arquivo, MAX_FILE_NAME);
- return fclose(file), TempFile::Info[TempFile::Total][fileTime] = (gettime() + segundos);
- }
- return false;
- }
- // Função para alterar o tempo de deletação do arquivo.
- // Partindo o tempo atual
- TempFile::fp alterarTempo(arquivo[], segundos) {
- new cmd = prev_strcmp(arquivo);
- for (new i; i <= TempFile::Total; i++) {
- if (cmd == prev_strcmp(TempFile::Info[i][szFilename])) {
- if (!strcmp(arquivo, TempFile::Info[i][szFilename], true)) {
- return TempFile::Info[i][fileTime] = gettime() + segundos;
- }
- }
- }
- return false;
- }
- // Ajudar na velocidade de comparação de strings
- // Sistema simples de conta caracteres, compara dados números é mais veloz
- TempFile::fp prev_strcmp(string[]) {
- new
- j;
- for (new i; string[i]; i++) {
- j += string[i];
- }
- return j;
- }
- // Transformar valor em string
- // Sem declarar strings chatas
- intToStr(valor) {
- static
- szString[13];
- format(szString, 13, "%i", valor);
- return szString;
- }
- forward OnExpireFile(arquivo[]);
- #define CreateTempFile\
- arquivoTemporario
- #define SetTimeFile\
- alterarTempo
- // =======================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement