VC-MP Brasil - IRC: #script.br GTANet
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Sistema de Casa

+2
Lucas
Diego^
6 participantes

Ir para baixo

Sistema de Casa Empty Sistema de Casa

Mensagem por Diego^ Dom Abr 17, 2016 5:32 pm

Criei meu próprio sistema de casas e decidi compartilhar com vocês!

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!!! Very Happy
Diego^
Diego^
Desenvolvedor

Mensagens : 60
Pontos : 106
Reputação : 21
Data de inscrição : 11/06/2015
Idade : 26
Localização : Brazil

https://vcmp-br.umforum.net

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Lucas Qua Abr 20, 2016 11:16 pm

Muito bom o script.
Uso um sistema assim.

Lucas

Mensagens : 15
Pontos : 33
Reputação : 6
Data de inscrição : 06/11/2015
Localização : Earth

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Caique Qua Ago 17, 2016 10:11 pm

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.

Caique

Mensagens : 21
Pontos : 35
Reputação : 0
Data de inscrição : 03/10/2015

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Thomas BR Qua Ago 17, 2016 10:46 pm

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 Razz

Thomas BR

Mensagens : 17
Pontos : 25
Reputação : 0
Data de inscrição : 03/01/2016

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Caique Qua Ago 17, 2016 11:20 pm

Sim, eu percebi isso depois de ter postado.

Caique

Mensagens : 21
Pontos : 35
Reputação : 0
Data de inscrição : 03/10/2015

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por IceRazor Seg Jul 03, 2017 5:28 am

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

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Lucas Qua Jul 05, 2017 4:45 pm

Uso algo mais ou menos assim na hora de comprar:
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() ) );
Ele vai remover e na mesma hora criar outra pickup no mesmo lugar da antiga.
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

Ir para o topo Ir para baixo

Sistema de Casa Empty ME ajudaaaaa

Mensagem por Benjamin^ Seg Ago 07, 2017 4:39 am

alguém me ajuda pls o meu da esse erro aqui o meu aparece [ the index 'ConnectSQL' does not exist ] Evil or Very Mad Evil or Very Mad Evil or Very Mad Evil or Very Mad

Benjamin^

Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Diego^ Seg Ago 07, 2017 7:09 pm

Benjamin^ escreveu:alguém me ajuda pls o meu da esse erro aqui o meu aparece [ the index 'ConnectSQL' does not exist ]  Evil or Very Mad  Evil or Very Mad  Evil or Very Mad  Evil or Very Mad

Você precisa usar o plugin sqlite!
Diego^
Diego^
Desenvolvedor

Mensagens : 60
Pontos : 106
Reputação : 21
Data de inscrição : 11/06/2015
Idade : 26
Localização : Brazil

https://vcmp-br.umforum.net

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Benjamin^ Ter Ago 08, 2017 5:27 am

Como faiz pra usar ?

Benjamin^

Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Benjamin^ Qui Ago 10, 2017 1:25 am

Sistema de Casa Bandic10

Benjamin^

Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por IceRazor Sex Ago 11, 2017 12:16 am

Benjamin^ escreveu:Como faiz pra usar ?

Benjamin^ escreveu:Sistema de Casa Bandic10
Carregue o plugin sqlite04rel64.

IceRazor

Mensagens : 19
Pontos : 35
Reputação : 0
Data de inscrição : 16/04/2017

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Benjamin^ Sex Ago 18, 2017 6:39 am

consegui ajeitar o erro agora apareceu outro Sistema de Casa Bandic14

Benjamin^

Mensagens : 4
Pontos : 4
Reputação : 0
Data de inscrição : 07/08/2017
Idade : 23
Localização : Pelotas

Ir para o topo Ir para baixo

Sistema de Casa Empty Re: Sistema de Casa

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos