08.12.2015, 16:52
(
Последний раз редактировалось HaRdiiZin; 14.06.2016 в 21:25.
Причина: Tуpico editado
)
Aprendendo conceitos bбsicos de SQLite.
- Нndice:
Veja oque serб abordado neste tуpico.
- Introduзгo ao SQLite
- Oque й, e sua Histуria
- Como conectar com o banco de dados.
- Criando meu banco de dados!
- Conhecendo as funзхes do SQLite
- Atualizando, selecionando, inserindo e deletando dados da tabela.
- Perguntas & Respostas
- Sistema de login & registro em SQL
- Conclusхes finais
- Introduзгo ao SQLite
- Intruduзгo ao SQLite
- Oque й, e sua Histуria
SQLite й uma biblioteca em linguagem C que implementa um banco de dados SQL embutido. Programas que usam a biblioteca SQLite podem ter acesso a banco de dados SQL sem executar um processo SGBD separado. SQLite nгo й uma biblioteca cliente usada para conectar com um grande servidor de banco de dados, mas sim o prуprio servidor. A biblioteca SQLite lк e escreve diretamente para e do arquivo do banco de dados no disco. O uso do SQLite й recomendado onde a simplicidade da administraзгo, implementaзгo e manutenзгo sгo mais importantes que incontбveis recursos que SGBDs mais voltados para aplicaзхes complexas possivelmente implementam. As situaзхes onde a simplicidade й a melhor escolha sгo muito mais freqьentes do que pode-se imaginar. E vocк sabia que SQLite, faz quase, ou atй o mesmo papel que o MySQL? Isto porque o SQLite foi criado, assim como o MySQL com uma linguagem chamada de Structured Query Language, ou Linguagem de Consulta Estruturada(SQL), que й a linguagem de pesquisa declarativa padrгo para banco de dados relacional (base de dados relacional), daн vem o nome SQLite, ou MySQL como tantos conhecem . SQL foi desenvolvido originalmente no inнcio dos anos 70 nos laboratуrios da IBM em San Jose, dentro do projeto System R, que tinha por objetivo demonstrar a viabilidade da implementaзгo do modelo relacional proposto por E. F. Codd. O nome original da linguagem era SEQUEL, acrфnimo para "Structured English Query Language", vindo daн o facto de, atй hoje, a sigla, em inglкs, ser comumente pronunciada "sнquel" ao invйs de "йs-kiъ-йl", letra a letra. No entanto, em portuguкs, a pronъncia mais corrente й a letra a letra: "йsse-quк-йle". Entгo gente, vamos comeзar a falar certo o correto й 'йsse-quк-йle'.
- Como conectar com o banco de dados.
No sa-mp para ter acesso as funзхes do SQLite nativo, basta adicionar a include padrгo do sa-mp(a_samp), pois a mesma jб carrega com sigo mesmo a a_sampdb, que й responsбvel pelas funзхes do SQLite.
Entгo:
PHP код:#include <a_samp>
PHP код:#include <a_samp>
main(){}
new DB:Connect;
public OnGameModeInit()
{
Connect = db_open("mydb.db");
return 1;
}
- Criando meu banco de dados!
Para criarmos nosso banco de dados eu optei por usar um programa muito bom, e que muitos usam o SQLite Browser que й um programa muito bom para manipulaзгo, e que eu uso e recomendo. Com ele vocк poderб deletar, inserir e atualizar.. Vamos lб entгo, acompanhe o vнdeo abaixo!
[ame="http://www.youtube.com/watch?v=q-X4jLNH3i8"]Tutorial..[/ame]
Caso queira aprender a criar seu banco de dados, manualmente sem ajuda de programas veja meu outro tutorial que й relacionado a exatamente isso, veja.
- Oque й, e sua Histуria
- Conhecendo as funзхes do SQLite:
Para vocк poder usar o SQLite em seu servidor, certamente terгo funcхes na qual vocк irб utilizar para abrir, fechar uma db e atй mesmo inserir, atualizar, selecionar dados de uma tabela. Hoje, conheceremos algumas delas!- db_open: Como jб vimos acima, й usada para abrir uma conexгo com um banco de dados SQLite. O modo de uso, й muito simples e nуs jб vimos, porйm vamos tambйm aprender a aprimorar a nossa conexгo, veja como:
PHP код:#include <a_samp>
main(){}
new DB:Connect;
public OnGameModeInit()
{
if((Connect = db_open("mydb.db")) == DB:0)
{
return SendRconCommand("exit");
}
return 1;
}
- db_close: Se temos uma funзгo para abrir uma conexгo, certamente teremos outra para fechar essa mesma conexгo. A db_close, ficarб responsбvel em fechar um banco de dados SQLite que foi aberto com db_open, como nуs fizemos acima...entгo usando a mesma handle de conexгo(Connect) fecharemos essa conexгo..
PHP код:public OnGameModeExit()
{
db_close(Connect);
return 1;
}
- db_query: Essa, serб sem dъvidas a funзгo mais usada por vocк. Pois serб com ela que vocк terб todas as possibilidades de inserir, atualizar, deletar e tudo oque o SQLite oferece. Vamos ver um exemplo simples dessa funзгo:
PHP код: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;
}
PHP код://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.
- db_free_result: Essa funзгo, libera um resultado da memуria alocada a partir db_query. O modo de uso й suuuuper fбcil, veja vocк mesmo: Vamos supor que estamos criando um sistema de login & registro para nosso servidor, e precisamos checar se o player jб й registrado ou nгo.. fariamos da seguinte forma:
PHP код://...
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;
}
- db_num_rows: Essa funзгo й responsбvel por retornar o nъmero de linhas de uma query, e deve ser usada em conjunto com a db_free_result. Veja como usa-la:
PHP код://...
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);
- PHP код:
// 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);
- PHP код:
if(db_num_rows(Resultado) == 0)
- PHP код:
db_free_result(Resultado);
- db_get_field_assoc: Obtem o conteъdo do campo com o nome especificado, lembrando que hб uma funзгo bastante semelhante, a db_get_field porйm neste tutorial nгo comentбremos sobre ela.
PHP код: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);
}
- PHP код:
new field[10];
db_get_field_assoc(Resultado, "level", field, sizeof(field));
- PHP код:
level = strval(field);
PHP код:new field[10], Float:PosX[MAX_PLAYERS];
db_get_field_assoc(Resultado, "PosicaoX", field, sizeof(field));
PosX[playerid] = float(strval(field));
- db_open: Como jб vimos acima, й usada para abrir uma conexгo com um banco de dados SQLite. O modo de uso, й muito simples e nуs jб vimos, porйm vamos tambйm aprender a aprimorar a nossa conexгo, veja como:
- Atualizando, selecionando, inserindo e deletando dados da tabela.
Vamos entгo para as instruзхes que vocкs usarгo e muito, muito mesmo. Vamos comeзar com a de inserзгo a INSERT, com ela vocк poderб inserir dados em sua tabela. Mas antes, vamos entender oque й tabela, coluna, e dados. Tabela, й como se fosse um armбrio, jб as colunas seriam suas gavetas, e os dados, obviamente seriam oque hб dentro destas gavetas.. pensando desta maneira, tenho certeza que vocк nunca irб se esquecer.. Entгo vamos lб. Para vocк usar qualquer uma das instruзхes que vou passar a baixo vocк deverб a funзгo db_query, que й uma nativa que vem com a a_sampdb que nуs jб vimos como instala-la. A linguagem SQL й dividida em subconjuntos de acordo com as operaзхes que queremos efetuar sobre um banco de dados, porйm sу veremos algumas.. Comeзaremos com a Linguagem de Manipulaзгo de Dados.
- Linguagem de Manipulaзгo de Dados.
DML(sigla em inglкs) й um subconjunto da linguagem SQL que й utilizado para realizar inclusхes, consultas, alteraзхes e exclusхes de dados presentes em registros, dentro dela temos as instruзхes INSERT, UPDATE e DELETE.
- INSERT
A insert, como proprio nome jб diz insere um dado em seu banco de dados, ela й uma das sintaxes mais simples que tem, veja.
PHP код:db_query(db, "INSERT INTO `minhatabela` (`coluna01`, `coluna02`) VALUES ('0', 'HaRdiiZin')")
PHP код:INSERT INTO `tabela` (`colunas`) VALUES ('valores')
PHP код:INSERT INTO `jogadores` (`nick`, `senha`) VALUES ('HaRdiiZin', 'higor123')
-
Lembrando, que isso й o modo bбsico de como usar a intruзгo INSERT, se vocк quiser se aprofundar no SQL recomendo que aguarde meu proximo tutorial(se tiver) ou que saia a procura de alguns pela internet nгo relacionados a SA-MP.
- DELETE
A instruзгo delete, como o proprio nome jб diz deleta algum valor de sua tabela, e o modo de uso й extremamente fбcil.
PHP код:DELETE * FROM `minhatabela` WHERE `coluna01` = 'HaRdiiZin'
PHP код:public OnPlayerConnect(playerid)
{
db_query(db, "DELETE * FROM `minhatabela` WHERE `coluna01` = 'HaRdiiZin'");
return 1;
}
- UPDATE
A instruзгo update, й responsбvel por fazer a atualizaзгo dos dados de sua tabela, basicamente para usa-la vocк sу precisara informar a tabela que quer atualizar, os dados que serгo atualizados e opcionalmente onde ela teria efeito.
PHP код: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;
}
- INSERT
- Linguagem de Consulta de Dados
Embora tenha apenas um comando, a DQL й a parte da SQL mais utilizada. O comando SELECT permite ao usuбrio especificar uma consulta ("query") como uma descriзгo do resultado desejado. Esse comando й composto de vбrias clбusulas e opзхes, possibilitando elaborar consultas das mais simples аs mais elaboradas.
- SELECT
O Select й o principal comando usado em SQL para realizar consultas a dados pertencentes a uma tabela, vamos ver um simples exemplo de como usa-lo no pawn.
PHP код:public OnPlayerConnect(playerid)
{
db_query(db, "SELECT * FROM `minhatabela` WHERE `coluna`='%s'");
return 1;
}
PHP код: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.
Entгo como vocк viu, e se vocк sabe um pouquinho de inglкs jб sabemos que a FROM й o local, e WHERE й a mesma coisa que perguntar a onde.
E para complementar um pouquinho mais o seu conhecimento, vamos ver tambйm como usar Operadores Lуgicos no SQL.
PHP код: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.
PHP код:// 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'");
PHP код:db_query(db, "SELECT `id, senha` FROM `contas` WHERE `nome` = 'HaRdiiZin'");
- SELECT
- Linguagem de Manipulaзгo de Dados.
- Perguntas & Respostas
-
Pergunta: Qual й melhor MySQL ou SQLite? Qual a diferenзa de um ao outro?
Resposta:
-
Pergunta: Й possнvel fazer as mesmas coisas em SQLite do que em MySQL?
Resposta:
-
Pergunta: Qual й melhor MySQL ou SQLite? Qual a diferenзa de um ao outro?
- Sistema de login & registro em SQL
PHP код:/*
___ ____ _________ ______ ______ /
/ / \ /\ | | \ | | / | /
| | \/ | | | | | | /
\______ | | | |_____/ | | | |/\
\ |----| | | \ | | | | \
| | /\ | | | | | | | \
_______/ | | \/ | | | \______/ \______ | |
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;
// '''
}
- Conclusхes finais
Espero que consiga entender o tutorial, eu criei com muito carinho para vocк! Bons estudos para vocк, se tiver qualquer erro por favor me reporte.
Agradecimentos а:- Wikipйdia
- Wiki-samp
- EditPawn por dar sugestхes do que adicionar.