Sistema de Casa
+2
Lucas
Diego^
6 participantes
Página 1 de 1
Sistema de Casa
Criei meu próprio sistema de casas e decidi compartilhar com vocês!
Funções necessárias ( Não foram criadas por mim );
Plugins Necessários: squirrel04rel e sqlite04rel ( Podem ser encontrados no fórum oficial do VCMP )
Dicas: Na maioria dos scripts têm alguma função para setar dinheiro ( Exemplo: IncCash( player, valor ) e DecCash( player, valor ) ), vocês podem substituir. A função player.Cash pode ser facilmente burlada.
Caso vocês tenham alguma dúvida, ou que o script esteja com algum bug, vocês podem responder logo abaixo!
Boa-Sorte!!!
- Código:
class PropStats
{
ID = 0;
Nome = null;
Preco = 0;
Dono = null;
Compart = null;
}
function onScriptLoad()
{
db <- ConnectSQL( "DataBase.db" );
Casa <- array( 1001, null );
QuerySQL( db, "CREATE TABLE IF NOT EXISTS Casas ( ID NUMERIC, Nome TEXT, Preco NUMERIC, Dono TEXT, Compart TEXT, PX FLOAT, PY FLOAT, PZ FLOAT )" );
CarregarCasas();
}
function onScriptUnload()
{
DisconnectSQL( db );
}
function onPlayerJoin( player )
{
if ( player.Name == "Ninguem" ) player.Kick();
}
function CarregarCasas()
{
local i = 0, id, nome, preco, dono, compart, x, y, z;
local q = QuerySQL( db, "SELECT * FROM Casas" );
while ( GetSQLColumnData( q, 0 ) != null )
{
nome = GetSQLColumnData( q, 1 );
preco = GetSQLColumnData( q, 2 );
dono = GetSQLColumnData( q, 3 );
compart = GetSQLColumnData( q, 4 );
x = GetSQLColumnData( q, 5 );
y = GetSQLColumnData( q, 6 );
z = GetSQLColumnData( q, 7 );
id = CreatePickup( 407, 1, 1, x, y, z, 255, true ).ID;
Casa[ id ] = PropStats();
Casa[ id ].ID = GetSQLColumnData( q, 0 );
Casa[ id ].Nome = nome;
Casa[ id ].Preco = preco;
Casa[ id ].Dono = dono;
Casa[ id ].Compart = compart;
GetSQLNextRow( q );
i++;
}
FreeSQLQuery( q );
print( "[Carregado] Casas do servidor - " + i );
}
function CountProps()
{
local c = 0;
for( local i = 0, pickup; i < GetPickupCount(); i++ )
{
pickup = FindPickup( i );
if ( pickup && pickup.Model == 407 ) c ++;
}
return c;
}
function PropNameExist( nome )
{
local result = false;
for( local i = 0, pickup; i < GetPickupCount(); i++ )
{
pickup = FindPickup( i );
if ( pickup && Casa[ pickup.ID ] != null )
{
if ( Casa[ pickup.ID ].Nome == nome ) result = true;
}
}
return result;
}
function FindProp( id )
{
if ( id < 0 ) return false;
else if ( id > 1000 ) return false;
else if ( Casa[ id ] == null ) return false;
else return true;
}
function onPickupPickedUp( player, pickup )
{
if ( !player.Vehicle && pickup.Model == 407 )
{
if ( Casa[ pickup.ID ] != null )
{
pickup.Timer = 3000;
MessagePlayer( "[#EEC900]Nome da casa: [#00FFFF]" + Casa[ pickup.ID ].Nome + "[#EEC900] - ID: [#00FFFF]" + pickup.ID + "[#EEC900] - Dono: [#00FFFF]" + Casa[ pickup.ID ].Dono + "[#EEC900].", player );
MessagePlayer( "[#EEC900]Preco: [#00FFFF]R$ " + Casa[ pickup.ID ].Preco + "[#EEC900] - Compartilhada com: [#00FFFF]" + Casa[ pickup.ID ].Compart + "[#EEC900].", player );
}
}
}
function onPlayerCommand( player, cmd, text )
{
local cmd = cmd.tolower();
if ( cmd == "casacmds" )
{
MessagePlayer( "[#FF1493]Comandos: /comprarcasa, /vendercasa, /casa, /minhascasas, /minhascasascompart, /compartcasa, /descompartcasa.", player );
MessagePlayer( "[#1E90FF]Comando para o administrador: /addcasa.", player );
}
else if ( cmd == "addcasa" )
{
if ( !player.IsSpawned ) MessagePlayer( "[#FF0000]Erro: Escolha uma skin para usar esse comando.", player );
else if ( CountProps() >= 1001 ) MessagePlayer( "[#FF0000]Erro: O limite de casas e de 1000.", player );
else if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <Preco> <Nome da Casa>", player );
else
{
local preco = GetTok( text, " ", 1 );
if ( !preco ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <Preco> <Nome da Casa>", player );
else if ( !IsNum( preco ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else
{
local nome = GetTok( text, " ", 2 NumTok( text, " " ) );
if ( !nome ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <Preco> <Nome da Casa>", player );
else if ( PropNameExist( nome ) ) MessagePlayer( "[#FF0000]Erro: Ja existe uma propriedade com esse nome.", player );
else
{
local id = CreatePickup( 407, 1, 1, player.Pos.x, player.Pos.y, player.Pos.z, 255, true ).ID;
QuerySQL( db, "INSERT INTO Casas VALUES ( '" + CountProps() + "', '" + nome + "', '" + preco.tointeger() + "', 'Vice-City', 'Ninguem', '" + player.Pos.x + "', '" + player.Pos.y + "', '" + player.Pos.z + "' )" );
Casa[ id ] = PropStats(), Casa[ id ].ID = CountProps(), Casa[ id ].Nome = nome, Casa[ id ].Preco = preco.tointeger(), Casa[ id ].Dono = "Vice-City", Casa[ id ].Compart = "Ninguem";
MessagePlayer( "[#00FF00]*** Propriedade Criada.", player );
}
}
}
}
else if ( cmd == "comprarcasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != "Vice-City" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade nao esta a venda.", player );
else if ( player.Cash < Casa[ text.tointeger() ].Preco ) MessagePlayer( "[#FF0000]Erro: Voce nao tem dinheiro suficiente para comprar essa casa.", player );
else
{
player.Cash -= Casa[ text.tointeger() ].Preco;
Casa[ text.tointeger() ].Dono = player.Name;
QuerySQL( db, "UPDATE Casas SET Dono='" + player.Name + "' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Comprada.", player );
}
}
else if ( cmd == "vendercasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else
{
player.Cash += Casa[ text.tointeger() ].Preco / 2;
Casa[ text.tointeger() ].Dono = "Vice-City";
Casa[ text.tointeger() ].Compart = "Ninguem";
QuerySQL( db, "UPDATE Casas SET Dono='Vice-City', Compart='Ninguem' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Vendida.", player );
}
}
else if ( cmd == "casa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name && Casa[ text.tointeger() ].Compart != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao tem permissao para se teleportar para essa propriedade.", player );
else
{
player.Pos = FindPickup( text.tointeger() ).Pos;
MessagePlayer( "[#00FF00]*** Teleportado para sua propriedade.", player );
}
}
else if ( cmd == "minhascasas" )
{
local b;
for( local i = 0, pickup; i < GetPickupCount(); i++ )
{
pickup = FindPickup( i );
if ( pickup && Casa[ i ] != null )
{
if ( Casa[ i ].Dono == player.Name )
{
if ( b ) b = b + ", " + Casa[ i ].Nome + " (" + i + ")";
else b = Casa[ i ].Nome + " (" + i + ")";
}
}
}
if ( !b ) MessagePlayer( "[#FF0000]Erro: Voce nao tem propriedades.", player );
else MessagePlayer( "[#00FF00]*** Suas Propriedades: " + b + ".", player );
}
else if ( cmd == "minhascasascompart" )
{
local b;
for( local i = 0, pickup; i < GetPickupCount(); i++ )
{
pickup = FindPickup( i );
if ( pickup && Casa[ i ] != null )
{
if ( Casa[ i ].Compart == player.Name )
{
if ( b ) b = b + ", " + Casa[ i ].Nome + " (" + i + ")";
else b = Casa[ i ].Nome + " (" + i + ")";
}
}
}
if ( !b ) MessagePlayer( "[#FF0000]Erro: Nao ha propriedades compartilhadas com voce.", player );
else MessagePlayer( "[#00FF00]*** Propriedades compartilhadas com voce: " + b + ".", player );
}
else if ( cmd == "compartcasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID> <Nick/ID>", player );
else
{
local id = GetTok( text, " ", 1 );
if ( !id ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID> <Nick/ID>", player );
else if ( !IsNum( id ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( id.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ id.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else if ( Casa[ id.tointeger() ].Compart != "Ninguem" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade ja esta compartilhada com " + Casa[ id.tointeger() ].Compart + ".", player );
else
{
local plr = GetPlayer( GetTok( text, " ", 2 ) );
if ( !plr ) MessagePlayer( "[#FF0000]Erro: Jogador Desconhecido.", player );
else if ( plr.ID == player.ID ) MessagePlayer( "[#FF0000]Erro: Voce nao pode compartilhar uma casa com si mesmo.", player );
else
{
Casa[ text.tointeger() ].Compart = plr.Name;
QuerySQL( db, "UPDATE Casas SET Compart='" + plr.Name + "' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade compartilhada com " + plr.Name + ".", player );
}
}
}
}
else if ( cmd == "descompartcasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else if ( Casa[ text.tointeger() ].Compart == "Ninguem" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade nao esta compartilhada.", player );
else
{
Casa[ text.tointeger() ].Compart = "Ninguem";
QuerySQL( db, "UPDATE Casas SET Compart='Ninguem' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Descompartilhada.", player );
}
}
}
Funções necessárias ( Não foram criadas por mim );
- Código:
function GetPlayer( plr )
{
if ( plr )
{
if ( IsNum( plr ) )
{
plr = FindPlayer( plr.tointeger() );
if ( plr ) return plr;
else return false;
}
else
{
plr = FindPlayer( plr );
if ( plr ) return plr;
else return false;
}
}
else return false;
}
function GetTok(string, separator, n, ...)
{
local m = vargv.len() > 0 ? vargv[0] : n,
tokenized = split(string, separator),
text = "";
if (n > tokenized.len() || n < 1) return null;
for (; n <= m; n++)
{
text += text == "" ? tokenized[n-1] : separator + tokenized[n-1];
}
return text;
}
function NumTok(string, separator)
{
local tokenized = split(string, separator);
return tokenized.len();
}
Plugins Necessários: squirrel04rel e sqlite04rel ( Podem ser encontrados no fórum oficial do VCMP )
Dicas: Na maioria dos scripts têm alguma função para setar dinheiro ( Exemplo: IncCash( player, valor ) e DecCash( player, valor ) ), vocês podem substituir. A função player.Cash pode ser facilmente burlada.
Caso vocês tenham alguma dúvida, ou que o script esteja com algum bug, vocês podem responder logo abaixo!
Boa-Sorte!!!
Re: Sistema de Casa
Muito bom o script.
Uso um sistema assim.
Uso um sistema assim.
Lucas- Mensagens : 15
Pontos : 33
Reputação : 6
Data de inscrição : 06/11/2015
Localização : Earth
Re: Sistema de Casa
else if ( cmd == "descompartcasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else if ( Casa[ text.tointeger() ].Compart == "Ninguem" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade nao esta compartilhada.", player );
else
{
Casa[ text.tointeger() ].Compart = "Ninguem";
QuerySQL( db, "UPDATE Casas SET Compart='Ninguem' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Descompartilhada.", player );
}
}
}
Há algo errado nessa função, o resto do script está sem defeito algum.
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else if ( Casa[ text.tointeger() ].Compart == "Ninguem" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade nao esta compartilhada.", player );
else
{
Casa[ text.tointeger() ].Compart = "Ninguem";
QuerySQL( db, "UPDATE Casas SET Compart='Ninguem' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Descompartilhada.", player );
}
}
}
Há algo errado nessa função, o resto do script está sem defeito algum.
Caique- Mensagens : 21
Pontos : 35
Reputação : 0
Data de inscrição : 03/10/2015
Re: Sistema de Casa
Caique escreveu:else if ( cmd == "descompartcasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else if ( Casa[ text.tointeger() ].Compart == "Ninguem" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade nao esta compartilhada.", player );
else
{
Casa[ text.tointeger() ].Compart = "Ninguem";
QuerySQL( db, "UPDATE Casas SET Compart='Ninguem' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Descompartilhada.", player );
}
}
}
Há algo errado nessa função, o resto do script está sem defeito algum.
else if ( cmd == "descompartcasa" )
{
if ( !text ) MessagePlayer( "[#FFA500]Sintaxe: /" + cmd + " <ID>", player );
else if ( !IsNum( text ) ) MessagePlayer( "[#FF0000]Erro: Use numeros.", player );
else if ( !FindProp( text.tointeger() ) ) MessagePlayer( "[#FF0000]Erro: Propriedade nao encontrada.", player );
else if ( Casa[ text.tointeger() ].Dono != player.Name ) MessagePlayer( "[#FF0000]Erro: Voce nao e o dono dessa propriedade.", player );
else if ( Casa[ text.tointeger() ].Compart == "Ninguem" ) MessagePlayer( "[#FF0000]Erro: Essa propriedade nao esta compartilhada.", player );
else
{
Casa[ text.tointeger() ].Compart = "Ninguem";
QuerySQL( db, "UPDATE Casas SET Compart='Ninguem' WHERE ID='" + Casa[ text.tointeger() ].ID + "'" );
MessagePlayer( "[#00FF00]*** Propriedade Descompartilhada.", player );
}
}
o erro era so mais um } no final
Thomas BR- Mensagens : 17
Pontos : 25
Reputação : 0
Data de inscrição : 03/01/2016
Re: Sistema de Casa
Sim, eu percebi isso depois de ter postado.
Caique- Mensagens : 21
Pontos : 35
Reputação : 0
Data de inscrição : 03/10/2015
Re: Sistema de Casa
Como eu posso deixar as casas a venda com a pickup 407 e as casas compradas com a pickup 406?
IceRazor- Mensagens : 19
Pontos : 35
Reputação : 0
Data de inscrição : 16/04/2017
Re: Sistema de Casa
Uso algo mais ou menos assim na hora de comprar:
Tem um script no fórum oficial do VCMP que muda pickup. Deve ser melhor que meu método, porém mais extenso. Se for usar, recomendo que seja por completo.
https://forum.vc-mp.org/?topic=4503.0
- Código:
local pickup = FindPickup( text.tointeger() ), x = pickup.Pos.x, y = pickup.Pos.y, z = pickup.Pos.z;
pickup.Remove();
CreatePickup( 406, Vector( x.tofloat(), y.tofloat(), z.tofloat() ) );
Tem um script no fórum oficial do VCMP que muda pickup. Deve ser melhor que meu método, porém mais extenso. Se for usar, recomendo que seja por completo.
https://forum.vc-mp.org/?topic=4503.0
Lucas- Mensagens : 15
Pontos : 33
Reputação : 6
Data de inscrição : 06/11/2015
Localização : Earth
ME ajudaaaaa
alguém me ajuda pls o meu da esse erro aqui o meu aparece [ the index 'ConnectSQL' does not exist ]
Benjamin^- Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas
Re: Sistema de Casa
Benjamin^ escreveu:alguém me ajuda pls o meu da esse erro aqui o meu aparece [ the index 'ConnectSQL' does not exist ]
Você precisa usar o plugin sqlite!
Re: Sistema de Casa
Como faiz pra usar ?
Benjamin^- Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas
Benjamin^- Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas
Benjamin^- Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas
Tópicos semelhantes
» Sistema de Objetos v0.2 | Sistema de Portões v0.1
» Sistema de IRC com plugin
» Sistema Multilang
» SISTEMA DE ROUBO
» Sistema de rádio.
» Sistema de IRC com plugin
» Sistema Multilang
» SISTEMA DE ROUBO
» Sistema de rádio.
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|