#include <a_samp>
#include <a_samp>
main(){}
new DB:Connect;
public OnGameModeInit()
{
Connect = db_open("mydb.db");
return 1;
}
#include <a_samp>
main(){}
new DB:Connect;
public OnGameModeInit()
{
if((Connect = db_open("mydb.db")) == DB:0)
{
return SendRconCommand("exit");
}
return 1;
}
public OnGameModeExit()
{
db_close(Connect);
return 1;
}
new DB:db_handle;
// ...
public OnGameModeInit()
{
// Cria uma conexгo com o banco de dados.
if((db_handle = db_open("example.db")) == DB:0)
{
// Printa um erro no console caso o banco de dados nгo seja encontrado.
print("Nao foi possivel encontrar \"example.db\".");
SendRconCommand("exit");
}
else
{
// Se o banco foi encontrado, gera uma mensagem de sucesso.
print("Conecao com \"example.db\" efetuada!");
}
// ...
return 1;
}
public OnGameModeExit()
{
// Fecha a conexгo com o banco de dados...
db_close(db_handle);
// ...
return 1;
}
public OnPlayerSpawn(playerid)
{
// Declara query e p_name.
static query[98], p_name[MAX_PLAYER_NAME+1];
// Guarda o nome do jogador na vбriavel p_nome.
GetPlayerName(playerid, p_name, sizeof p_name);
// Formata a "query"
format(query, sizeof query, "INSERT INTO `spawn_log` (`PlayerID`,`PlayerName`) VALUES (%d,'%s')", playerid, p_name);
// Libera o resultado e insere um log na tabela 'spawn_log'..
db_free_result(db_query(db_handle, query));
// ...
return 1;
}
//Selecionando.
db_query(db_handle, "SELECT * FROM `contas` WHERE `nome`='HaRdiiZin'");
// Selecionar tudo da tabela contas onde o nome for HaRdiiZin.
//Atualizar.
db_query(db_handle, "UPDATE `contas` SET `nome`='HaRdiiZola' WHERE `nome`='HaRdiiZin'");
// Atualizar a tabela colunas e alterar o nome para HaRdiiZola onde o nome for HaRdiiZin.
//...
public OnPlayerConnect(playerid)
{
// Declara nome e query.
new nome[MAX_PLAYERS], query[128], DBResult:Resultado;
// Guarda o nome do player na vбriavel nome.
GetPlayerName(playerid, nome, sizeof nome);
// Formata a query.
format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
// Seleciona tudo da tabela contas que conter o nome do player.
Resultado = db_query(db_handle,query);
// Retorna o nъmero de linhas da query, nesse caso se nгo houver nenhuma linha signfica que o player nгo tem uma conta no servidor.
if(db_num_rows(Resultado) == 0)
{
// Nгo tem uma conta.
}
else
{
// Tem uma conta.
}
db_free_result(Resultado);
return 1;
}
//...
public OnPlayerConnect(playerid)
{
// Declara nome e query.
new nome[MAX_PLAYERS], query[128], DBResult:Resultado;
// Guarda o nome do player na vбriavel nome.
GetPlayerName(playerid, nome, sizeof nome);
// Formata a query.
format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
// Seleciona tudo da tabela contas que conter o nome do player.
Resultado = db_query(db_handle,query);
// Retorna o nъmero de linhas da query, nesse caso se nгo houver nenhuma linha signfica que o player nгo tem uma conta no servidor.
if(db_num_rows(Resultado) == 0)
{
// Nгo tem uma conta.
}
else
{
// Tem uma conta.
}
db_free_result(Resultado);
// Formata a query.
format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
// Seleciona tudo da tabela contas que conter o nome do player.
Resultado = db_query(db_handle,query);
if(db_num_rows(Resultado) == 0)
db_free_result(Resultado);
public OnPlayerConnect(playerid)
{
// Declara nome e query.
new nome[MAX_PLAYERS], query[128], DBResult:Resultado;
// Guarda o nome do player na vбriavel nome.
GetPlayerName(playerid, nome, sizeof nome);
// Formata a query.
format(query, sizeof query, "SELECT * FROM `contas` WHERE `nome`='%q'", nome);
// Seleciona tudo da tabela contas que conter o nome do player.
Resultado = db_query(db_handle,query);
// Retorna o nъmero de linhas da query, nesse caso se nгo houver nenhuma linha signfica que o player nгo tem uma conta no servidor.
if(db_num_rows(Resultado) == 0)
{
// Nгo tem uma conta.
ShowPlayerDialog(...
}
else
{
// Tem uma conta.
new field[10];
db_get_field_assoc(Resultado, "level", field, sizeof(field));
level = strval(field);
}
db_free_result(Resultado);
}
new field[10];
db_get_field_assoc(Resultado, "level", field, sizeof(field));
level = strval(field);
new field[10], Float:PosX[MAX_PLAYERS];
db_get_field_assoc(Resultado, "PosicaoX", field, sizeof(field));
PosX[playerid] = float(strval(field));
db_query(db, "INSERT INTO `minhatabela` (`coluna01`, `coluna02`) VALUES ('0', 'HaRdiiZin')")
INSERT INTO `tabela` (`colunas`) VALUES ('valores')
INSERT INTO `jogadores` (`nick`, `senha`) VALUES ('HaRdiiZin', 'higor123')
DELETE * FROM `minhatabela` WHERE `coluna01` = 'HaRdiiZin'
public OnPlayerConnect(playerid)
{
db_query(db, "DELETE * FROM `minhatabela` WHERE `coluna01` = 'HaRdiiZin'");
return 1;
}
public OnPlayerConnect(playerid)
{
// Declara nome e query.
new nome[MAX_PLAYERS], query[128];
// Guarda o nome do player na vбriavel nome.
GetPlayerName(playerid, nome, sizeof nome);
format(query, sizeof query, "UPDATE `contas` SET `ultlogin`='%d' WHERE `nome`='%q'", nome, gettime());
db_query(db, query);
return 1;
}
public OnPlayerConnect(playerid)
{
db_query(db, "SELECT * FROM `minhatabela` WHERE `coluna`='%s'");
return 1;
}
FROM – Utilizada para especificar a tabela que se vai selecionar os registros.
WHERE – Utilizada para especificar as condiзхes que devem reunir os registros que serгo selecionados.
AND – E lуgico. Avalia as condiзхes e devolve um valor verdadeiro caso ambos sejam corretos.
OR – OU lуgico. Avalia as condiзхes e devolve um valor verdadeiro se algum for correto.
NOT – Negaзгo lуgica. Devolve o valor contrбrio da expressгo.
// Exemplo 01:
db_query(db, "SELECT * FROM `contas` WHERE `nome` = 'HaRdiiZin' AND `senha` = 'teste'");
// Exemplo 02:
db_query(db, "SELECT * FROM `teste` WHERE `teste01` = '5' OR `teste02` = '6'");
db_query(db, "SELECT `id, senha` FROM `contas` WHERE `nome` = 'HaRdiiZin'");
/*
___ ____ _________ ______ ______ /
/ / \ /\ | | \ | | / | /
| | \/ | | | | | | /
\______ | | | |_____/ | | | |/\
\ |----| | | \ | | | | \
| | /\ | | | | | | | \
_______/ | | \/ | | | \______/ \______ | |
San Andreas Truck - 2015®
*/
/*
*
* Autor do gamemode: HaRdiiZin
* Data de criaзгo: 26/10/15
* Nome do projeto: San Andreas Truck
* Descriзгo: Este projeto foi iniciado somente para relembrar as funзхes do sqlite,
* e tambйm porque eu iria iniciar um projeto de trucking mais acabei desistindo
* dele por falta de tempo, jб que eu tenho outro projeto em andamento..
*
*/
/*
*
* O que hб no gamemode?
* Como eu desisti nos primeiros dias de desenvolvimento, praticamente nem fiz nada no gamemode. Ele й uma base, uma base na qual
* novatos na linguagem possam aprender mais, e tambйm conhecer o quгo ъtil й o sqlite no sa-mp e como podemos utiliza-lo, atualmente o gamemode
* sу tem o sistema de login e registro, ambos funcionando 100% e salvando, admin, skin, e ъltima posiзгo. Espero que gostem!
*
*/
//--------------------------------------------------------------
/* Includes necessбrias para o bom funcionamento do servidor. */
#include <a_samp>
#include <foreach>
#include <mSelection>
/* Configuraзхes gerais do servidor. */
#define serverNome "hostname San Andreas Truck | HaRdiiZin®"
#define serverPass "password 0"
#define serverLang "language Portugues - Brasil"
#define serverMod "by HaRdiiZin® - v0.1 R1"
#define serverMap "mapname San Andreas"
#define serverSite "weburl www.forum.sa-mp.com"
#define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
#define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
/* Enums e outras vбriaveis.. */
enum
{
Branco = 0xFFFFFFFF,
Verde = 0x29BF33FF,
Vermelho = 0xFF0000FF,
Azul = 0x1DA7B9FF,
Rosa = 0xB837C1FF,
Roxo = 0xB11BCFFF,
Amarelo = 0xFFF300FF,
Laranja = 0xFFC000FF
};
enum
{
Login,
Registro,
SelectSkin
};
enum player_data
{
Admin,
Skin,
Float:px,
Float:py,
Float:pz,
Float:pa
};
new DB:Connect;
new pInfo[MAX_PLAYERS][player_data];
/* Necessarias para o script */
main() { print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n> HaRdiiZin®"); }
public OnGameModeInit()
{
LoadServerConfig();
/* Carrega o banco de dados */
Connect = db_open("sql.db"); // Abre o banco de dados..
db_free_result(db_query(Connect, "CREATE TABLE IF NOT EXISTS `contas` (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,`nome` TEXT NOT NULL,`senha` TEXT NOT NULL,`admin` INTEGER NOT NULL,`skin` INTEGER NOT NULL,`px` INTEGER NOT NULL,`py` INTEGER NOT NULL,`pz` INTEGER NOT NULL,`pa` INTEGER NOT NULL);"));
// Cria as tabelas caso elas nгo existam..
/* Inserir uma conta na tabela, caso a AutoRegister esteja habilitada. */
#if defined AutoRegister
db_query(Connect, "INSERT INTO `contas` (`nome`, `senha`, `admin`, `skin`, `px`, `py`, `pz`, `pa`) VALUES ('HaRdiiZin', 'teste', '0', '4', '0.0', '0.0', '0.0', '0.0')");
//Somente para testes..
#endif
return 1;
}
public OnGameModeExit()
{
for(new i = 0; i < MAX_PLAYERS; i++) SavePlayer(i);
return 1;
}
public OnPlayerConnect(playerid)
{
SetTimerEx("OnPlayerConnected", 100, false, "i", playerid);
return 1;
}
forward OnPlayerConnected(playerid);
public OnPlayerConnected(playerid)
{
/* Seta a camera do player e outras funзхes .*/
TogglePlayerSpectating(playerid, true);
InterpolateCameraPos(playerid, 1462.9407, -867.8122, 105.3706, 1322.1545, -956.1140, 136.5105, 10000, CAMERA_MOVE);
InterpolateCameraLookAt(playerid, 1462.3888, -866.9811, 104.9506, 1322.5913, -955.2172, 136.1455, 10000, CAMERA_MOVE);
/* Verifica se o player tem ou nгo uma conta, caso ele tenha ele serб jogado para dialog de login, se nгo ele irб para de registro. */
new query[61], DBResult:Result;
format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s'", DB_Escape(GetName(playerid)));
Result = db_query(Connect, query);
if(db_num_rows(Result) == 0)
{
//Nгo tem uma conta..
ShowPlayerDialog(playerid, Registro, DIALOG_STYLE_PASSWORD, "{FF0000}# {FFFFFF}San Andreas: Truck", "{FFFFFF}Digite uma senha segura para que vocк se registre.", "Registrar", "");
}
else
{
//Tem uma conta..
ShowPlayerDialog(playerid, Login, DIALOG_STYLE_PASSWORD, "{FF0000}# {FFFFFF}San Andreas: Truck", "{FFFFFF}Digite a sua senha para logar-se", "Logar", "");
}
db_free_result(Result);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SavePlayer(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == Registro)
{
if(!response) Kick(playerid);
new query[300];
format(query, sizeof(query), "INSERT INTO `contas` (`nome`, `senha`, `admin`, `skin`, `px`, `py`, `pz`, `pa`) VALUES ('%s', '%s', '0', '0', '0.0', '0.0', '0.0', '0.0')", DB_Escape(GetName(playerid)), DB_Escape(inputtext));
db_free_result(db_query(Connect, query));
pInfo[playerid][Admin] = 0;
pInfo[playerid][Skin] = 0;
pInfo[playerid][px] = 0.0;
pInfo[playerid][py] = 0.0;
pInfo[playerid][pz] = 0.0;
pInfo[playerid][pa] = 0.0;
new skins_array[] =
{
20,23,26,27,29,32,33,34,37,43,44,45,49,51,52,57,58,59,60,68,72,73,81,96,97,101
};
ShowModelSelectionMenuEx(playerid, skins_array, 26, "Selecione sua skin", SelectSkin, 0.0, 0.0, 0.0);
return 1;
}
if(dialogid == Login)
{
if(!response) Kick(playerid);
new query[118], DBResult:Result;
format(query, sizeof(query), "SELECT * FROM `contas` WHERE `nome` = '%s' AND `senha` = '%s'", DB_Escape(GetName(playerid)), DB_Escape(inputtext));
Result = db_query(Connect, query);
if(db_num_rows(Result) == 0)
{
SendClientMessage(playerid, Vermelho, "* Vocк errou sua senha!");
Kick(playerid);
return 0;
}
else
{
//Acertou a senha
new Field[20];
db_get_field_assoc(Result, "admin", Field, sizeof(Field));
pInfo[playerid][Admin] = strval(Field);
db_get_field_assoc(Result, "skin", Field, sizeof(Field));
pInfo[playerid][Skin] = strval(Field);
db_get_field_assoc(Result, "px", Field, sizeof(Field));
pInfo[playerid][px] = float(strval(Field));
db_get_field_assoc(Result, "py", Field, sizeof(Field));
pInfo[playerid][py] = float(strval(Field));
db_get_field_assoc(Result, "pz", Field, sizeof(Field));
pInfo[playerid][pz] = float(strval(Field));
db_get_field_assoc(Result, "pa", Field, sizeof(Field));
pInfo[playerid][pa] = float(strval(Field));
TogglePlayerSpectating(playerid, false);
LoadPlayer(playerid);
}
db_free_result(Result);
return 1;
}
return 1;
}
public OnPlayerModelSelectionEx(playerid, response, extraid, modelid)
{
if(extraid == SelectSkin)
{
if(!response)
{
pInfo[playerid][Skin] = 4;
TogglePlayerSpectating(playerid, false);
LoadPlayer(playerid);
}
else
{
pInfo[playerid][Skin] = modelid;
TogglePlayerSpectating(playerid, false);
LoadPlayer(playerid);
}
return 1;
}
return 1;
}
/* Funзхes necessбrias */
LoadPlayer(playerid)
{
SpawnPlayer(playerid);
SetPlayerPos(playerid, pInfo[playerid][px], pInfo[playerid][py], pInfo[playerid][pz]);
SetPlayerFacingAngle(playerid, pInfo[playerid][pa]);
SetPlayerSkin(playerid, pInfo[playerid][Skin]);
return 1;
}
SavePlayer(playerid)
{
new query[300], DBResult:Result;
GetPlayerPos(playerid, pInfo[playerid][px], pInfo[playerid][py], pInfo[playerid][pz]);
GetPlayerFacingAngle(playerid, pInfo[playerid][pa]);
format(query, sizeof(query), "UPDATE `contas` SET `admin`='%d', `skin`='%d', `px`='%f', `py`='%f', `pz`='%f', `pa`='%f' WHERE `nome` = '%s'",
pInfo[playerid][Admin],
GetPlayerSkin(playerid),
pInfo[playerid][px],
pInfo[playerid][py],
pInfo[playerid][pz],
pInfo[playerid][pa],
DB_Escape(GetName(playerid)));
Result = db_query(Connect, query);
db_free_result(Result);
return 1;
}
LoadServerConfig()
{
new input[40]; // Cria a variavel com 40 cйlulas necessбrias..
/* Setando as configuraзхes de nome, etc */
format(input, sizeof(input), serverNome); // Seta o hostname do servidor.
SendRconCommand(input);
format(input, sizeof(input), serverPass); // Seta a senha do servidor.
SendRconCommand(input);
format(input, sizeof(input), serverLang); // Seta a linguagem que o servidor terб.
SendRconCommand(input);
format(input, sizeof(input), serverMod); // Seta o mode do servidor.
SetGameModeText(input);
format(input, sizeof(input), serverMap); // Seta o nome do mapa do servidor..
SendRconCommand(input);
format(input, sizeof(input), serverSite); // Seta o nome do mapa do servidor..
SendRconCommand(input);
#undef serverNome
#undef serverPass
#undef serverLang
#undef serverMod
#undef serverMap
#undef serverSite
/* Seta as configuraзхes para como o GTA deverб se portar em relaзгo ao servidor. */
ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF);
ShowNameTags(1);
AllowAdminTeleport(1);
UsePlayerPedAnims();
DisableInteriorEnterExits();
EnableStuntBonusForAll(true);
LimitGlobalChatRadius(15.0);
EnableTirePopping(1);
//ManualVehicleEngineAndLights();
return 1;
}
GetName(playerid)
{
new
gName[MAX_PLAYER_NAME + 1];
GetPlayerName(playerid, gName, sizeof(gName));
return gName;
}
forward Kicka(p); public Kicka(p)
{
#undef Kick
Kick(p);
#define Kick(%0) SetTimerEx("Kicka", 100, false, "i", %0)
return 1;
}
forward Bana(p); public Bana(p)
{
#undef Ban
Ban(p);
#define Ban(%0) SetTimerEx("Bana", 100, false, "i", %0)
return 1;
}
DB_Escape(text[])
{
new
ret[80 * 2],
ch,
i,
j;
while ((ch = text[i++]) && j < sizeof (ret))
{
if (ch == '\'')
{
if (j < sizeof (ret) - 2)
{
ret[j++] = '\'';
ret[j++] = '\'';
}
}
else if (j < sizeof (ret))
{
ret[j++] = ch;
}
else
{
j++;
}
}
ret[sizeof (ret) - 1] = '\0';
return ret;
// '''
}
GAMMIX fez uma include q facilita pra cara$#% o uso desse sistema SQL. Leiam:
https://github.com/Gammix/Easy-Datab...er-easydb.inc- |
curti seu tutorial HardZiin, se fizer outro, explicando como criar a DB, iniciando do 0 um servidor bem dizendo, eu tentaria aprender, espero que faзa.
Abraзos, espero respostas... |
curti seu tutorial HardZiin, se fizer outro, explicando como criar a DB, iniciando do 0 um servidor bem dizendo, eu tentaria aprender, espero que faзa.
Abraзos, espero respostas... |
O como comeзar esta errado diz que й no OnGameModeExit mas nгo й, й no OnGameModeInit.
No samp sempre usei SQLite e continuo a pensar que й mais que suficiente para qualquer projeto de samp... Ainda mais com a ъltima atualizaзгo ficou ainda melhor. Й sempre bom ver alguйm investir nisso na board PT, Bom trabalho |