#include <a_samp>
// Redefina aqui em caso de for necessбrio
#define fp%0(%1) forward %0(%1); public %0(%1)
#if !defined MAX_FILE_NAME
#define MAX_FILE_NAME 32
#endif
#if !defined MAX_TEMP_FILES
#define MAX_TEMP_FILES 100
#endif
// Declarar variбveis novas
enum bsInfo {
szFilename[MAX_FILE_NAME],
fileTime
}
new
bstempFile[MAX_TEMP_FILES][bsInfo],
bsTotalfiles = -1;
// Ao iniciar script, chamar a pъblica para checar os arquivos
// Carregar o arquivo nas arrays
public OnFilterScriptInit() {
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);
bsTotalfiles++;
// Carregar nomes arquivos
for(new x, j = -1; stringRename{x}; x++) {
if(stringRename{x} == '>') {
j = -1;
bsTotalfiles++;
}
else {
bstempFile[bsTotalfiles][szFilename][++j] = stringRename{x};
}
}
bsTotalfiles = 0;
// Carregar tempos
for(new x, j = -1, stringTemp[13]; stringTimers{x}; x++) {
if(stringTimers{x} == '|') {
j = -1;
bsTotalfiles++;
bstempFile[bsTotalfiles][fileTime] = strval(stringTemp);
stringTemp[0] = EOS;
}
else {
stringTemp[++j] = stringTimers{x};
}
}
fremove("filesrename.bs");
fremove("filestimers.bs");
printf("Arquivos temporбrios carregados: %d", bsTotalfiles);
}
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
public OnFilterScriptExit() {
new
File:file = fopen("filesrename.bs", io_write),
File:time = fopen("filestimers.bs", io_write);
for(new i; i <= bsTotalfiles; i++) {
if(gettime() <= bstempFile[i][fileTime]) {
if(fexist(bstempFile[i][szFilename])) {
if(file) {
fwrite(file, bstempFile[i][szFilename]);
fwrite(time, intToStr(bstempFile[i][fileTime]));
fwrite(file, ">");
fwrite(time, "|");
}
}
}
}
if(file) {
fclose(file);
fclose(time);
}
return true;
}
// Checar se o tempo do arquivo jб passou do invбlido
// Aqui й deletado o arquivo apуs x tempo
fp checarArquivos() {
for(new i; i <= bsTotalfiles; i++) {
if(gettime() >= bstempFile[i][fileTime]) {
if(fexist(bstempFile[i][szFilename])) {
fremove(bstempFile[i][szFilename]);
CallRemoteFunction("OnTemporaryDeleteFile", "s", bstempFile[i][szFilename]);
}
}
}
return true;
}
// Funзгo para criar o arquivoTemporario
// Bastando especificar os segundos e o arquivo
fp arquivoTemporario(arquivo[], segundos) {
// caso arquivo jб existir editar tempo atual
if(fexist(arquivo)) {
alterarTempo(arquivo, segundos);
}
static
File:file;
if((file = fopen(arquivo, io_write))) {
strcat(bstempFile[++bsTotalfiles][szFilename], arquivo, MAX_FILE_NAME);
return fclose(file), bstempFile[bsTotalfiles][fileTime] = (gettime() + segundos);
}
return false;
}
// Funзгo para alterar o tempo de deletaзгo do arquivo.
// Partindo o tempo atual
fp alterarTempo(arquivo[], segundos) {
new cmd = prev_strcmp(arquivo);
for(new i; i <= bsTotalfiles; i++) {
if(cmd == prev_strcmp(bstempFile[i][szFilename])) {
if(!strcmp(arquivo, bstempFile[i][szFilename], true)) {
return bstempFile[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
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) {
new szString[13];
format(szString, 13, "%i", valor);
return szString;
}
arquivoTemporario("bruno.txt", 10);
#define alterarTempo(%0,%1) CallRemoteFunction("alterarTempo", "si", %0,%1)
#define arquivoTemporario(%0,%1) CallRemoteFunction("arquivoTemporario", "si", %0,%1)
forward OnDeleteTempFile(file[]);
stock darVip(playerid, dias) {
static
namePlayer[MAX_PLAYER_NAME + 25]
;
GetPlayerName(playerid, namePlayer, MAX_PLAYER_NAME);
format(namePlayer, MAX_PLAYER_NAME + 25], "/pastaVips/%s.ini", namePlayer);
arquivoTemporario(namePlayer, dias * 60 * 60 * 24);
// x * 60 = 1 minuto
// x * 60 * 60 = 1 hora
// x * 60 * 60 * 24 = 1 dia
}
stock remVip(playerid) {
static
namePlayer[MAX_PLAYER_NAME + 25]
;
GetPlayerName(playerid, namePlayer, MAX_PLAYER_NAME);
format(namePlayer, MAX_PLAYER_NAME + 25], "/pastaVips/%s.ini", namePlayer);
alterarTempo(namePlayer, 0);
// 0 = deleta arquivo na hora
}
stock chkVip(playerid) {
static
namePlayer[MAX_PLAYER_NAME + 25]
;
GetPlayerName(playerid, namePlayer, MAX_PLAYER_NAME);
format(namePlayer, MAX_PLAYER_NAME + 25], "/pastaVips/%s.ini", namePlayer);
return fexist(namePlayer);
}
Caso der GMX o arquivo jб nгo й deletado. Quando eu tiver tempo coloco um sistema para exportara array bstempFile para um arquivo e importa-la. Mas agora ando meio sem tempo |
Muito bom, parabйns Drakins!
Vocк coda Squirrel ou lua? Porque seu comandos nгo comeзam com maiъsculos o.O (Exemplo: alterarTempo) |
Muito Bom , Explicando cada aprte do codigo , exelente . Somente nгo entendi essa parte : |
Muito Bom , Explicando cada aprte do codigo , exelente .
Somente nгo entendi essa parte : |
GMX trava o Timer, entгo se tiver um arquivo temporбrio e vocк de GMX, nгo irб deleta-lу.
|
jabaScript
![]() Caso der GMX ele nгo deleta o arquivo, pois estou usando tudo arrays em tempo real mesmo, na memуria.. :/ Estou sem tempo de fazer fazer o sistema para exportar a array e importa-la. Enfim. - OFF Na verdade, tempo eu tenho, mas agora eu sinto a necessidade profunda de ir secar o Grкmio contra o Palmeiras. Fuuiiz |
Exatamente. Mas pra isto basta importar/exportar as variбveis na inicializaзгo/finalizaзгo do gamemode. A lуgica й bem bбsica mesmo, mas funciona, afinal as arrays teram os valores antes da finalizaзгo alocados na inicializaзгo. Como se nunca tivesse resetado o servidor.
terгo ** - Atй amanha terei atualizado isto como include e tudo. Atй lб, estudem a funзгo. Й simples. Como o amigo acima disse, й bom para sistemas temporizadores, temp-ban, temp-vip, temp-weapon .. etc |
#include <a_samp>
// 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
// Declarar variбveis novas
enum bsInfo
{
szFilename[MAX_FILE_NAME],
fileTime
}
new
bstempFile[MAX_TEMP_FILES][bsInfo],
bsTotalfiles = -1;
// Ao iniciar script, chamar a pъblica para checar os arquivos
public OnFilterScriptInit()
{
return SetTimer("checarArquivos", 998, true); // 998 ms. Para demorar em torno de 1 segundo (2 ms execuзгo callback)
}
// Checar se o tempo do arquivo jб passou do invбlido
forward checarArquivos();
public checarArquivos()
{
for(new i; i <= bsTotalfiles; i++)
{
if(gettime() >= bstempFile[i][fileTime])
{
if(fexist(bstempFile[i][szFilename]))
{
fremove(bstempFile[i][szFilename]);
}
}
}
return true;
}
// Funзгo para criar o arquivoTemporario
// Bastando especificar os segundos e o arquivo
stock arquivoTemporario(arquivo[], segundos = 1)
{
// caso arquivo jб existir editar tempo atual
if(fexist(arquivo))
{
alterarTempo(arquivo, segundos);
}
static
File:file;
if((file = fopen(arquivo, io_write)))
{
strcat(bstempFile[++bsTotalfiles][szFilename], arquivo, MAX_FILE_NAME);
return fclose(file), bstempFile[bsTotalfiles][fileTime] = (gettime() + segundos);
}
return false;
}
// Funзгo para alterar o tempo de deletaзгo do arquivo.
// Partindo o tempo atual
stock alterarTempo(arquivo[], segundos = 1)
{
new cmd = prev_strcmp(arquivo);
for(new i; i <= bsTotalfiles; i++)
{
if(cmd == prev_strcmp(bstempFile[i][szFilename])
{
if(!strcmp(arquivo, bstempFile[i][szFilename], true))
{
return bstempFile[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
stock prev_strcmp(string[])
{
new
j;
for(new i; string[i]; i++)
{
j += string[i];
}
return j;
}
public OnFileExpire(arquivo[])
Drakins, poderia criar um arquivo com o tempo que os ficheiros devem ser deletados, ai quando abrir o server denovo verifica o arquivo e se passou do tempo, deleta Jб vi um Plugin que continua rolando os Timer apуs finalizar o server, se achar posto aqui. _________ |
vocк poderia adicionar (ou nгo), uma callback para ser chamada quando o arquivos fosse deletado.
pawn Code:
|
Mas o cуdigo nгo estava tabulado?
![]() O plugin continua apуs finalizar o servidor? Sei sei (isto й impossнvel, nгo fala merda) .. O cara desliga o computador e o sistema vai continuar rodando? Ah, nгo fala merda. Enquanto a poder dar gmx, jб disse. Daqui a pouco editor e faзo isto. Й questгo de 30 min para fazer isto, se der 30 minutos, porque o filterscript todo nгo demorou 15 minutos. Boa idйia. Adicionarei daqui a pouco. Junto com o sistema de contar atй quando o servidor estб off. |
Vocк sabe a estrutura de um plugin? Fechou servidor, fechou plugin. Nгo fala merda. Nгo tem como executar algo no servidor depois de ele ter "fechado" .. Alias, plugin tambйm recarrega quando dб GMX. Impossнvel.
O mбximo que se pode fazer, й manipular os arquivos, como estou dizendo desde o inicio da conversa. Anyway, no more. |
Ai Bruno, somente criar fica simples neh, faz uma funзгo pra escrever tambйm neh! Poderia usar fputchar para escrever, ficando melhor que fwrite! Se tu fazer isso, dai sim ficaria Dahora! @Off Vou terminar de assistir TIMГO! |
Ai Bruno, somente criar fica simples neh, faz uma funзгo pra escrever tambйm neh!
Poderia usar fputchar para escrever, ficando melhor que fwrite! Se tu fazer isso, dai sim ficaria Dahora! @Off Vou terminar de assistir TIMГO! |