#include "tryinclude.h"
#include "Invoke.h"
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef void (*logprintf_t)(char* format, ...);
#define PATTERN_LOCATION "scriptfiles/"
#define MAX_PLAYER_NAME (24)
#define MAX_PLAYER_PASS (16)
#define SLOTS (500)
struct iPlayer // Estrutura para armazenar nome e senha
{
char E_ACCOUNT_NAME[MAX_PLAYER_NAME];
char E_ACCOUNT_PASS[MAX_PLAYER_PASS];
};
FILE *file[500]; //Arquivo vetor do tamanho de slots do servidor.
logprintf_t logprintf;
extern void *pAMXFunctions;
//================================================
// WJ/IO, By Willian Luigi.
//================================================
cell AMX_NATIVE_CALL CreateAccount(AMX* amx, cell* params)
{
cell *addr;
int szFile = -1;
char file_name[128], tmp[50];
amx_GetAddr(amx, params[2], &addr);
amx_StrLen(addr, &szFile);
amx_GetString(tmp, addr, 0, szFile + 1);
sprintf(file_name, "%s%s.dat", PATTERN_LOCATION, tmp);
file[params[1]] = fopen(file_name, "ab+");
}
cell AMX_NATIVE_CALL InsertValues(AMX* amx, cell* params)
{
cell *addr[2] = {NULL, NULL};
int
sLength_name,
sLength_pass;
char arq_name[60];
iPlayer a;
amx_GetAddr(amx, params[2], &addr[0]);
amx_GetAddr(amx, params[3], &addr[1]);
amx_StrLen(addr[0], &sLength_name);
amx_StrLen(addr[1], &sLength_pass);
amx_GetString(a.E_ACCOUNT_NAME, addr[0], 0, sLength_name+1);
amx_GetString(a.E_ACCOUNT_PASS, addr[1], 0, sLength_pass+1);
if (file[params[1]] == NULL) logprintf("Erro ao criar o arquivo.(By Willian Luigi)");
fwrite(&a, sizeof(iPlayer), 1, file[params[1]]);
return 1;
}
cell AMX_NATIVE_CALL ReadAccount(AMX* amx, cell* params)
{
char *arq_name;
int sz;
cell *addr;
FILE *arq;
iPlayer
a,
b;
amx_GetAddr(amx, params[1], &addr);
amx_StrLen(addr, &sz);
amx_GetString(a.E_ACCOUNT_NAME, addr, 0, sz+1);
arq_name = new char[60];
sprintf(arq_name, "%s%s.dat", PATTERN_LOCATION, a.E_ACCOUNT_NAME);
arq = fopen(arq_name, "rb");
do
{
fread(&b, sizeof(iPlayer), 1, arq);
if (!strcmp(a.E_ACCOUNT_NAME,b.E_ACCOUNT_NAME))
{
logprintf("Nome: %s\nSenha: %s\n", b.E_ACCOUNT_NAME, b.E_ACCOUNT_PASS);
break;
}
} while (!feof(arq));
if (feof(arq))
{
logprintf("\nDADOS NГO CADASTRADOS!(By Willian Luigi)");
}
fclose(arq);
return 1;
}
//================================================
// WJ/IO, By Willian Luigi.
//================================================
PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
{
return SUPPORTS_VERSION | SUPPORTS_AMX_NATIVES | SUPPORTS_PROCESS_TICK;
}
PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
{
pAMXFunctions = ppData[PLUGIN_DATA_AMX_EXPORTS];
logprintf = (logprintf_t) ppData[PLUGIN_DATA_LOGPRINTF];
logprintf("\n==============================\n");
logprintf(" * StrJobs loaded.\n");
logprintf(" © - 2011 Willian Luigi");
logprintf("\n==============================\n");
return true;
}
PLUGIN_EXPORT void PLUGIN_CALL Unload()
{
logprintf("\n==============================\n");
logprintf(" * StrJobs loaded.\n");
logprintf(" © - 2011 Willian Luigi");
logprintf("\n==============================\n");
}
AMX_NATIVE_INFO PluginNatives[] =
{
{"CreateAccount", CreateAccount},
{"ReadAccount", ReadAccount},
{"InsertValues", InsertValues},
{0, 0}
};
PLUGIN_EXPORT int PLUGIN_CALL AmxLoad( AMX *amx )
{
return amx_Register(amx, PluginNatives, -1);
}
PLUGIN_EXPORT int PLUGIN_CALL AmxUnload( AMX *amx )
{
return AMX_ERR_NONE;
}
//TOPO
native CreateAccount(playerid, nome[]);
native InsertValues(playerid, nome[], senha[]);
native ReadAccount(nome[]);
public OnPlayerConnect(playerid)
{
new str[30], nome[24];
GetPlayerName(playerid, nome, sizeof(nome));
format(str, sizeof(str), "%s.dat", nome);
if (fexist(str))
{
ReadAccount(nome); // Caso exista o arquivo com o nome do jogador que se conectou, ele lк...
}
else
{
CreateAccount(playerid, nome); //Caso nгo exista, ele cria o arquivo com o nome do jogador.
SendClientMessage("Digite /senha [senha] para confirmar cadastro.");
}
return 1;
}
CMD:senha(playerid, params[])
{
new senha[16]; //16 = tamanho mбximo de senha
sscanf(params, "s[16]", senha);
InsertValues(nome, senha); //E inseri o nome e a 'senha'
return 1;
}
Otimo Plugin deve ajudar muitos ae, tenho uma duvida aq , tentei ver oque era Assembly mais vi que e dificil demais :/ , mais eai e melhor aprender C ou C++ ou C# ?
|