Sistema de Casa

Ir em baixo

Sistema de Casa

Mensagem por Diego^ em 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

_________________
avatar
Diego^
Desenvolvedor

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

Ver perfil do usuário http://vcmp-br.umforum.net

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Lucas em 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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Caique em 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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Thomas BR em 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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Caique em 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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por IceRazor em 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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Lucas em 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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

ME ajudaaaaa

Mensagem por Benjamin^ em 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 : 17
Localização : Pelotas

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Diego^ em 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!

_________________
avatar
Diego^
Desenvolvedor

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

Ver perfil do usuário http://vcmp-br.umforum.net

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Benjamin^ em 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 : 17
Localização : Pelotas

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

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


Benjamin^

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

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

Benjamin^ escreveu:Como faiz pra usar ?

Benjamin^ escreveu:
Carregue o plugin sqlite04rel64.

IceRazor

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

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

consegui ajeitar o erro agora apareceu outro

Benjamin^

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sistema de Casa

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum