[Pedido] Sistema de Casas
#1

Olб galera. Meu pedido й o seguinte: Eu gostaria de uma explicaзгo de como criar um sistema de Casas. Eu tentei criar do meu jeito, mas nгo consegui. Baixei 2 FS jб prontos para tentar criar o meu, mas tambйm nгo consegui. Os FS prontos sгo muito complicados e eu nгo consigo entender a lуgica, o que vem primeiro e o que vem depois. Tambйm procurei por tutoriais, mas o ъnico que achei era algo relacionado com bizz e Sbizz(tenho nem ideia do que seja), e nгo й isso que preciso. Se poderem me disponibilizar algum tutorial ou se quiserem me mostrar apenas o esqueleto do sistema (com suas devidas explicaзхes) eu ficaria muito grato.
Reply
#2

Toma um de base aн;
Feito por mim a MUITO tempo, super bбsico.
pawn Код:
#include a_samp
#include ZCMD
#include DOF2
#define MAX_CASAS 20

#define DIALOG_CASA1 50
#define DIALOG_CASA2 51
#define DIALOG_CASA3 52
#define DIALOG_INTERIOR_CASA 53

enum CasaSamp
{
    cComprada,
    Float:PosXF,
    Float:PosYF,
    Float:PosZF,
    InteriorCasa
};

new
    InfoCasa [ MAX_CASAS ] [ CasaSamp ],
    StringCasa [ 60 ],
    StringCasa2 [ 60 ],
    Float:Pos [ 3 ][ MAX_PLAYERS ],
    InteriorPos [ MAX_PLAYERS ] ,
    PrecoCasa [ MAX_PLAYERS ],
    CasaCriada [ MAX_PLAYERS ] = 0,
    ProximaCasa = 0
    ;
   
new Text3D:HouseLabel[MAX_CASAS];

public OnFilterScriptInit()
{
    for(new i = 0; i < MAX_CASAS; i++)
    {
        format ( StringCasa , sizeof ( StringCasa ) ,"Casas/Casa/%i.ini", i ) ;
        InfoCasa[i][PosXF] = DOF2_GetFloat ( StringCasa, "PosXF" );
        InfoCasa[i][PosYF] = DOF2_GetFloat ( StringCasa, "PosYF" );
        InfoCasa[i][PosZF] = DOF2_GetFloat ( StringCasa, "PosZF" );
        if(InfoCasa[i][cComprada] == 0)
        {
            format(StringCasa, sizeof(StringCasa), "[CASA A VENDA]\n|Preзo: %d|\n|Use /comprarcasa para comprar esta propriedade.|",DOF2_GetInt(StringCasa, "Preco"));
            HouseLabel[i] = Create3DTextLabel(StringCasa,0x006400FF,InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF],60,0,1);
            AddStaticPickup(1273, 2, InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF]);
        }
        if(InfoCasa[i][cComprada] == 1)
        {
            format(StringCasa, sizeof(StringCasa), "[CASA]\n|Dono: %s|\n|Aperte F para Entrar.|", DOF2_GetString ( StringCasa, "Dono" ));
            HouseLabel[i] = Create3DTextLabel(StringCasa,0x006400FF,InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF],60,0,1);
            AddStaticPickup(1318, 2,InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF]);
        }
    }
    return true;
}

public  OnPlayerSpawn ( playerid )
{
    new pname[24];
    GetPlayerName(playerid,pname,sizeof(pname));
    format(StringCasa, 60, "Casas/CasaDono/%s.ini", pname ) ;
    format(StringCasa2, 60, "Casas/Casa/%i.ini", DOF2_GetInt ( StringCasa, "NumeroCasa") ) ;
    SetPlayerPos ( playerid, DOF2_GetFloat ( StringCasa2, "PosXF" ),DOF2_GetFloat ( StringCasa2, "PosYF" ),DOF2_GetFloat ( StringCasa2, "PosZF" )) ;
    SetPlayerInterior ( playerid, DOF2_GetInt ( StringCasa2, "Interior" ));
    return true;
}

stock CriarCasa ( Preco, Float:XCasa, Float:YCasa, Float:ZCasa, Float:Xd, Float:Yd, Float:Zd, Interior, WorldID )
{
    format(StringCasa, 60, "Casas/Casa/%i.ini", ProximaCasa ) ;
    if(!DOF2_FileExists(StringCasa)) DOF2_CreateFile(StringCasa);
   
    DOF2_SetString(StringCasa, "Dono","Nenhum");
    DOF2_SetFloat(StringCasa, "PosXF", XCasa);
    DOF2_SetFloat(StringCasa, "PosYF", YCasa);
    DOF2_SetFloat(StringCasa, "PosZF", ZCasa);
    DOF2_SetFloat(StringCasa, "PosXD", Xd);
    DOF2_SetFloat(StringCasa, "PosYD", Yd);
    DOF2_SetFloat(StringCasa, "PosZD", Zd);
    DOF2_SetInt(StringCasa, "Interior", Interior);
    DOF2_SetInt(StringCasa, "WorldID", WorldID);
    DOF2_SetInt(StringCasa, "Preco", Preco);
    DOF2_SaveFile();
    InfoCasa[ProximaCasa][cComprada] = 0;
    for(new h = 0; h < MAX_CASAS; h++)
    {
        if(InfoCasa[h][cComprada] == 0)
        {
            new Casa[128];
            format(Casa, sizeof(Casa), "[CASA A VENDA]\n|Preзo: %d|\n|Use /comprarcasa para comprar esta propriedade.|",DOF2_GetInt(StringCasa, "Preco"));
            HouseLabel[h] = Create3DTextLabel(Casa,0x006400FF,XCasa,YCasa,ZCasa,60,0,1);
            AddStaticPickup(1273, 2, XCasa,YCasa,ZCasa);
        }
    }
    return true;
}


CMD:criarcasa ( playerid )
{
    ShowPlayerDialog(playerid,DIALOG_CASA1,DIALOG_STYLE_MSGBOX,"Casa","Vocк deseja criar uma casa neste local?","Sim","Nгo");
    GetPlayerPos ( playerid, Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] ) ;
    InteriorPos [ playerid ] = GetPlayerInterior( playerid );
    return true;
}

CMD:comprarcasa ( playerid )
{
    for(new i = 0; i < MAX_CASAS; i++)
            {
                format ( StringCasa , sizeof ( StringCasa ) ,"Casas/Casa/%i.ini", i ) ;
                InfoCasa[i][PosXF] = DOF2_GetFloat ( StringCasa, "PosXF" );
                InfoCasa[i][PosYF] = DOF2_GetFloat ( StringCasa, "PosYF" );
                InfoCasa[i][PosZF] = DOF2_GetFloat ( StringCasa, "PosZF" );
                if(IsPlayerInRangeOfPoint(playerid,8.0,InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF]))
                {
                    new pname [ 24 ] ;
                    GetPlayerName(playerid,pname,sizeof(pname));
                    format ( StringCasa2 , sizeof ( StringCasa2 ) ,"Casas/CasaDono/%s.ini", pname ) ;
                    if(DOF2_FileExists(StringCasa2))
                        return SendClientMessage ( playerid , 0xAA3333AA, "Vocк jб possui uma casa!" ) ;
                    if(GetPlayerMoney(playerid) < DOF2_GetInt ( StringCasa, "Preco" ))
                        return SendClientMessage(playerid,0xAA3333AA,"Vocк nгo tem dinheiro suficiente");
                    if ( strcmp ( DOF2_GetString ( StringCasa, "Dono" ), "Nenhum", false ) )
                        return SendClientMessage(playerid,0xAA3333AA,"Esta casa jб tem dono.");
                    new Casa2 [ 60 ];
                    if(DOF2_FileExists(StringCasa))
                    {
                        DOF2_SetString(StringCasa, "Dono", pname );
                        DOF2_SaveFile();
                    }
                    Delete3DTextLabel(HouseLabel[i]);
                    format(Casa2, sizeof(Casa2), "[CASA]\n|Dono: %s|\n|Aperte F para Entrar.|", DOF2_GetString ( StringCasa, "Dono" ));
                    HouseLabel[i] = Create3DTextLabel(Casa2,0xFF0000FF,InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF],60,0,1);
                    GivePlayerMoney(playerid,-DOF2_GetInt(StringCasa, "Preco" ));
                    AddStaticPickup(1318, 2,InfoCasa[i][PosXF],InfoCasa[i][PosYF],InfoCasa[i][PosZF]);
                    InfoCasa[ i ][cComprada] = 1;
                    if(!DOF2_FileExists(StringCasa2))
                    {
                        DOF2_CreateFile ( StringCasa2 ) ;
                        DOF2_SetInt ( StringCasa2, "NumeroCasa", i );
                        DOF2_SaveFile();
                    }
                }
            }
    return true;
}

CMD:vendercasa ( playerid )
{
    new pname[24];
    GetPlayerName(playerid,pname,sizeof(pname));
    format(StringCasa, 60, "Casas/CasaDono/%s.ini", pname ) ;
    format(StringCasa2, 60, "Casas/Casa/%i.ini", DOF2_GetInt ( StringCasa, "NumeroCasa") ) ;
    if(!DOF2_FileExists(StringCasa))
            return SendClientMessage ( playerid , 0xAA3333AA, "Vocк nгo possui uma casa!" ) ;
    if(IsPlayerInRangeOfPoint(playerid,8.0,DOF2_GetFloat ( StringCasa2, "PosXF" ),DOF2_GetFloat ( StringCasa2, "PosYF" ),DOF2_GetFloat ( StringCasa2, "PosZF" )))
    {
        DOF2_SetString ( StringCasa2, "Dono", "Nenhum" );
        DOF2_SaveFile();
        new Casa2 [ 60 ];
        Delete3DTextLabel(HouseLabel[DOF2_GetInt ( StringCasa, "NumeroCasa")]);
        format(Casa2, sizeof(Casa2), "[CASA A VENDA]\n|Preзo: %d|\n|Use /comprarcasa para comprar esta propriedade.|",DOF2_GetInt(StringCasa2, "Preco"));
        HouseLabel[DOF2_GetInt ( StringCasa, "NumeroCasa")] = Create3DTextLabel(Casa2,0x006400FF,DOF2_GetFloat ( StringCasa2, "PosXF" ),DOF2_GetFloat ( StringCasa2, "PosYF" ),DOF2_GetFloat ( StringCasa2, "PosZF" ),60,0,1);
        AddStaticPickup(1273, 2,DOF2_GetFloat ( StringCasa2, "PosXF" ),DOF2_GetFloat ( StringCasa2, "PosYF" ),DOF2_GetFloat ( StringCasa2, "PosZF" ));
        InfoCasa[ DOF2_GetInt ( StringCasa, "NumeroCasa") ][cComprada] = 0;
        DOF2_RemoveFile(StringCasa);
    }
    else SendClientMessage ( playerid , 0xAA3333AA, "Vocк nгo estб perto de sua casa!" ) ;
    return true;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    for(new i = 0; i < MAX_CASAS; i++)
    {
        format(StringCasa2, 60, "Casas/Casa/%i.ini", i ) ;
        if ( newkeys == KEY_SECONDARY_ATTACK )
        {
            if(IsPlayerInRangeOfPoint(playerid,5.0,DOF2_GetFloat ( StringCasa2, "PosXF" ),DOF2_GetFloat ( StringCasa2, "PosYF" ),DOF2_GetFloat ( StringCasa2, "PosZF" )))
            {
                SetPlayerPos ( playerid , DOF2_GetFloat ( StringCasa2, "PosXD" ),DOF2_GetFloat ( StringCasa2, "PosYD" ),DOF2_GetFloat ( StringCasa2, "PosZD" ) ) ;
                SetPlayerInterior ( playerid , DOF2_GetInt ( StringCasa2, "Interior" ) ) ;
                SetPlayerVirtualWorld( playerid , DOF2_GetInt ( StringCasa2, "WorldID" ) ) ;
                format(StringCasa, sizeof(StringCasa), "Vocк entrou na casa de id: %d", i);
                SendClientMessage(playerid, 0x38FF06FF, StringCasa);
            }
            else if(IsPlayerInRangeOfPoint(playerid,5.0,DOF2_GetFloat ( StringCasa2, "PosXD" ),DOF2_GetFloat ( StringCasa2, "PosYD" ),DOF2_GetFloat ( StringCasa2, "PosZD" )))
            {
                SetPlayerPos ( playerid , DOF2_GetFloat ( StringCasa2, "PosXF" ),DOF2_GetFloat ( StringCasa2, "PosYF" ),DOF2_GetFloat ( StringCasa2, "PosZF" ) ) ;
                SetPlayerInterior ( playerid , 0 ) ;
                SetPlayerVirtualWorld( playerid , 0 ) ;
                format(StringCasa, sizeof(StringCasa), "Vocк saiu da casa de id: %d", i);
                SendClientMessage(playerid, 0x38FF06FF, StringCasa);
            }
        }
    }
    return true;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == DIALOG_CASA1)
    {
        if(response)
        {
            ShowPlayerDialog(playerid,DIALOG_CASA2,DIALOG_STYLE_INPUT,"Casa","Digite o Preзo da casa:","Ok","Cancelar");
        }
        else if(!response)
            return SendClientMessage ( playerid, -1 , "Vocк desistiu de fazer uma casa.");
    }
   
    if(dialogid == DIALOG_CASA2 )
    {
        if(response)
        {
            if ( strval ( inputtext ) > 999999 || strval ( inputtext ) < 10 )
                return  SendClientMessage(playerid,0xB22222AA,"[ERRO] Valor Invalido!") , ShowPlayerDialog(playerid,DIALOG_CASA2,DIALOG_STYLE_INPUT,"Casa","Digite o Preзo da casa ( Valor entre 10 e 999999):","Ok","Cancelar");
            PrecoCasa [ playerid ] = strval ( inputtext ) ;
            ShowPlayerDialog(playerid,DIALOG_CASA3,DIALOG_STYLE_LIST,"Casa","{FF0000}Grande/{FFE4C4}2 salas/{00FFFF}3 banheiros\n{FF0000}Mйdio/{FFE4C4}1 sala/{00FFFF}1 banheiro\n{FF0000}Mйdio/{FFE4C4}1 sala/{00FFFF}1 banheiro\n{FF0000}Muito Grande/{FFE4C4}2 salas/{00FFFF}4 banheiros\n{FF0000}Mйdio/{FFE4C4}1 sala/{00FFFF}2 banheiros","Ok","Cancelar");
        }
        else if(!response)
            return SendClientMessage ( playerid, -1 , "Vocк desistiu de fazer uma casa.");
    }
   
    if(dialogid == DIALOG_CASA3)
    {
        if( response )
        {
            switch(listitem)
            {
                case 0:
                {
                    SetPlayerPos ( playerid , 235.508994,1189.169897,1080.339966 );
                    SetPlayerInterior( playerid , 3 ) ;
                    SetPlayerCameraPos ( playerid, 233.694824, 1167.237426, 1088.257812 ) ; // CASA1
                    SetPlayerCameraLookAt ( playerid, 234.220092, 1199.120361, 1080.257812 ) ; // CASA1
                    CasaCriada [ playerid ] = 1;
                    ShowPlayerDialog(playerid,DIALOG_INTERIOR_CASA,DIALOG_STYLE_MSGBOX,"Casa","Vocк deseja este interior?","Casa Pronta","Nгo");
                }
                case 1:
                {
                    SetPlayerPos ( playerid ,225.756989,1240.000000,1082.149902 ) ;
                    SetPlayerInterior ( playerid ,2 ) ;
                    SetPlayerCameraPos ( playerid, 225.744766, 1222.306518, 1091.550048 ) ;  //CASA2
                    SetPlayerCameraLookAt ( playerid, 227.270034, 1250.176391, 1082.140625 ) ; //CASA2
                    CasaCriada [ playerid ] = 2;
                    ShowPlayerDialog(playerid,DIALOG_INTERIOR_CASA,DIALOG_STYLE_MSGBOX,"Casa","Vocк deseja este interior?","Casa Pronta","Nгo");
                }
                case 2:
                {
                    SetPlayerCameraPos ( playerid,223.043991, 1272.915039, 1085.391206 ) ; //CASA3
                    SetPlayerCameraLookAt ( playerid,224.569259, 1299.142822, 1082.199951 ) ; //CASA3
                    SetPlayerInterior ( playerid ,1);
                    CasaCriada [ playerid ] = 3;
                    ShowPlayerDialog(playerid,DIALOG_INTERIOR_CASA,DIALOG_STYLE_MSGBOX,"Casa","Vocк deseja este interior?","Casa Pronta","Nгo");
                }
                case 3:
                {
                    SetPlayerCameraPos ( playerid,-66.415954, 1017.126892, 1092.946044 ) ; //CASA4
                    SetPlayerCameraLookAt ( playerid,227.156265, 1032.362915, 1084.014648 ) ; //CASA4
                    SetPlayerInterior ( playerid ,7);
                    CasaCriada [ playerid ] = 4;
                    ShowPlayerDialog(playerid,DIALOG_INTERIOR_CASA,DIALOG_STYLE_MSGBOX,"Casa","Vocк deseja este interior?","Casa Pronta","Nгo");
                }
                case 4:
                {
                    SetPlayerCameraPos ( playerid,295.138977, 1458.740356, 1092.885498 ) ; //CASA5
                    SetPlayerCameraLookAt ( playerid,296.664245, 1484.352905, 1080.519897 ) ; //CASA5
                    SetPlayerInterior ( playerid ,15);
                    CasaCriada [ playerid ] = 5;
                    ShowPlayerDialog(playerid,DIALOG_INTERIOR_CASA,DIALOG_STYLE_MSGBOX,"Casa","Vocк deseja este interior?","Casa Pronta","Nгo");
                }
            }
        }
        else if(!response)
        {
            SendClientMessage ( playerid, -1 , "Vocк desistiu de fazer uma casa.");
            CasaCriada [ playerid ] = 0;
            SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
            SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
        }
    }
   
    if(dialogid == DIALOG_INTERIOR_CASA)
    {
        if(response)
        {
            switch(CasaCriada [ playerid ])
            {
                case 1:
                {
                    ProximaCasa++;
                    CriarCasa ( PrecoCasa [ playerid ] ,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] , 235.508994,1189.169897,1080.339966, 3,ProximaCasa ) ;
                    SendClientMessage ( playerid , 0xFF69B4, "Casa criada com sucesso!" ) ;
                    SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
                    SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
                    CasaCriada [ playerid ] = 0;
                }
                case 2:
                {
                    ProximaCasa++;
                    CriarCasa ( PrecoCasa [ playerid ] ,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] , 225.756989,1240.000000,1082.149902, 2,ProximaCasa ) ;
                    SendClientMessage ( playerid , 0xFF69B4, "Casa criada com sucesso!" ) ;
                    SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
                    SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
                    CasaCriada [ playerid ] = 0;
                }
                case 3:
                {
                    ProximaCasa++;
                    CriarCasa ( PrecoCasa [ playerid ] ,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] , 223.043991, 1272.915039, 1085.391206, 1,ProximaCasa ) ;
                    SendClientMessage ( playerid , 0xFF69B4, "Casa criada com sucesso!" ) ;
                    SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
                    SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
                    CasaCriada [ playerid ] = 0;
                }
                case 4:
                {
                    ProximaCasa++;
                    CriarCasa ( PrecoCasa [ playerid ] ,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] , -66.415954, 1017.126892, 1092.946044, 7,ProximaCasa ) ;
                    SendClientMessage ( playerid , 0xFF69B4, "Casa criada com sucesso!" ) ;
                    SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
                    SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
                    CasaCriada [ playerid ] = 0;
                }
                case 5:
                {
                    ProximaCasa++;
                    CriarCasa ( PrecoCasa [ playerid ] ,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] , 295.138977, 1458.740356, 1092.885498, 15,ProximaCasa ) ;
                    SendClientMessage ( playerid , 0xFF69B4, "Casa criada com sucesso!" ) ;
                    SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
                    SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
                    CasaCriada [ playerid ] = 0;
                }
            }
        }
        else if(!response)
        {
            SendClientMessage ( playerid, -1 , "Vocк desistiu de fazer uma casa.");
            SetPlayerPos ( playerid,  Pos [ 0 ] [ playerid ] , Pos [ 1 ][ playerid ] , Pos [ 2 ] [ playerid ] );
            SetPlayerInterior ( playerid, InteriorPos [ playerid ] ) ;
            CasaCriada [ playerid ] = 0;
        }
    }
    return true;
}
Reply
#3

Em ingles: https://sampforum.blast.hk/showthread.php?tid=179206

Bizz e Sbizz sгo empresas do GF, sendo elas Bizz: empresas com interiores e Sbizz: empresas sem interiores. Servem de base pra vocк criar um sistema de casas tambem porque seguem a mesma lуgica.
Reply
#4

Quote:
Originally Posted by GabrielDias_Invision
Посмотреть сообщение
Em ingles: https://sampforum.blast.hk/showthread.php?tid=179206

Bizz e Sbizz sгo empresas do GF, sendo elas Bizz: empresas com interiores e Sbizz: empresas sem interiores. Servem de base pra vocк criar um sistema de casas tambem porque seguem a mesma lуgica.
Valeu cara. Eu vo da uma olhada na base do cara ali, caso nгo consiga vou ir para o tutorial. Obrigado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)