Hoy vengo ah traer este sistema de casas siempre pero funcionable lo primero como funciona el sistema? Por dini vamos ah ver el code del sistema
Cuando la casa esta en venta el icono esta en verde, Cuando la compras se pone en rojo.
Code:
#include <a_samp> //<----------- Necesario para cargar Callbacks (NO BORRAR SIEMPRE DEJENLO EN LA PRIMERA LINEA)
#include <dini> //<------------- Necesario para guardas casas
#define M_PROPIEDADES 3 //<---- Si produce bug cambiar al numero que desйn
#define Comandosc 100 //<---- Si produce bug cambiar al numero que desйn
#define COLOR_BLANCO 0xFFFFFFFF
enum Prop {
Propietario[25],
Precioc,//Precio de la propiedad.
Interiorcasa,//Interior de la propiedad.
PVW,//Virtual World de la propiedad.
Float:CorX,Float:CorY,Float:CorZ,//Posiciуn de ENTRADA.
Comprada, //define si esta comprada
PID, //define su id de casa
Cerrada, //define si esta cerrada
Text3D:PLabel, //Texto 3D
Float:CorXi,Float:CorYi,Float:CorZi, //Cordenadas interior
}
new Float:SX,Float:SY,Float:SZ;
new PropiedadI[M_PROPIEDADES][Prop];
new CP,PE[M_PROPIEDADES];
forward CargarPropiedades();
public CargarPropiedades() {
new Archivo[70];
for(new i = 0; i < M_PROPIEDADES; i++) {
format(Archivo,sizeof(Archivo),"Propiedades/%i.ini",i);
if(!dini_Exists(Archivo)) continue; if(dini_Exists(Archivo)) {
PropiedadI[i][Precioc] = dini_Int(Archivo,"Precio");
PropiedadI[i][Interiorcasa] = dini_Int(Archivo,"Int");
PropiedadI[i][PID] = dini_Int(Archivo,"PropiedadID");
PropiedadI[i][Cerrada] = dini_Int(Archivo,"Cerrada");
PropiedadI[i][Comprada] = dini_Int(Archivo,"Comprada");
PropiedadI[i][CorX] = dini_Float(Archivo,"X");
PropiedadI[i][CorY] = dini_Float(Archivo,"Y");
PropiedadI[i][CorZ] = dini_Float(Archivo,"Z");
PropiedadI[i][CorXi] = dini_Float(Archivo,"CorXi");
PropiedadI[i][CorYi] = dini_Float(Archivo,"CorYi");
PropiedadI[i][CorZi] = dini_Float(Archivo,"CorZi");
format(PropiedadI[i][Propietario],24,"%s",dini_Get(Archivo,"Propietario"));
new String[350];
switch(PropiedadI[i][Comprada])
{
case 0:{
format(String,sizeof(String),"{F89100}[EN VENTA]{FFFFFF}\nPropiedad de{F89100} %d{FFFFFF}\n\nValor {0FDF00}$%d\n\n\n{FFFFFF} [ID:%d]",PropiedadI[i],PropiedadI[i][Precioc],PropiedadI[i][PID]);
PE[i] = CreatePickup(1273,1,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ],PropiedadI[i][PVW]);
}
case 1:{
format(String,sizeof(String),"{FFFFFF}[Propietario: {F89100}%s]\nPropiedad de {F89100}%d {FFFFFF}\n\n\n{FFFFFF} [ID:%d]",PropiedadI[i][Propietario],PropiedadI[i],PropiedadI[i][PID]);
PE[i] = CreatePickup(19522,1,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ],PropiedadI[i][PVW]);
}
}
PropiedadI[i][PLabel] = Create3DTextLabel(String,COLOR_BLANCO,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ],25.0,PropiedadI[i][PVW]);
CP ++;
}
}
return 1;
}
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
CargarPropiedades();
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
main() {
#else
#endif
/* */
public OnGameModeInit()
{
CargarPropiedades();
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
//variable de comandos
new cmd[256];
//==============================================================================
//Comandos
if(strcmp(cmd, "/Comprarcasa", true) == 0) {
new String[200],Nombre[MAX_PLAYER_NAME],Archivo[150]; GetPlayerName(playerid,Nombre,sizeof(Nombre));
for(new i = 0; i < M_PROPIEDADES; i++) {
if(IsPlayerInRangeOfPoint(playerid,3.0,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ])) {
if(PropiedadI[i][Comprada] == 0) {
if(GetPlayerMoney(playerid) >= PropiedadI[i][Precioc]) {
GivePlayerMoney(playerid,-PropiedadI[i][Precioc]);
DestroyPickup(PE[i]);
PE[i] = CreatePickup(1273,1,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ],PropiedadI[i][PVW]);
format(String,sizeof(String),"{FFFFFF}[Propietario: {F89100}%s]\nPropiedad de {F89100}%d {FFFFFF}",Nombre,PropiedadI[i]);
PropiedadI[i][Comprada] = 1;
format(PropiedadI[i][Propietario],24,"%s",Nombre);
format(Archivo,sizeof(Archivo),"Propiedades/%i.ini",i);
if(dini_Exists(Archivo))
{
dini_Set(Archivo,"Propietario",Nombre);
dini_IntSet(Archivo,"Comprada",1);
}
Update3DTextLabelText(PropiedadI[i][PLabel],COLOR_BLANCO,String);
}
}
}
}
return 1;
}
if(strcmp(cmd, "/venderpropiedad", true) == 0) {
new String[200],Archivo[150],Nombre[24];
GetPlayerName(playerid,Nombre,sizeof(Nombre));
for(new i = 0; i < M_PROPIEDADES; i++) {
if(IsPlayerInRangeOfPoint(playerid,3.0,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ])) {
if(PropiedadI[i][Comprada] == 1 && strcmp(Nombre,PropiedadI[i][Propietario]) != 0) return SendClientMessage(playerid,-1,"No eres dueсo de йsta propiedad.");
GivePlayerMoney(playerid,PropiedadI[i][Precioc]*21/100);
format(String,sizeof(String),"{F89100}[EN VENTA]{FFFFFF}\nPropiedad de{F89100} %d{FFFFFF}\n\nValor {0FDF00}$%d",PropiedadI[i],PropiedadI[i][Precioc]);
PropiedadI[i][Comprada] = 0;
format(Archivo,sizeof(Archivo),"Propiedades/%i.ini",i);
if(dini_Exists(Archivo))
{
dini_Set(Archivo,"Propietario","Nadie");
dini_IntSet(Archivo,"Comprada",0);
}
Update3DTextLabelText(PropiedadI[i][PLabel],COLOR_BLANCO,String);
}
}
return 1;
}
if(strcmp(cmd, "/Entrarcasa", true) == 0) {
new Nombre[24]; GetPlayerPos(playerid,SX,SY,SZ);
GetPlayerName(playerid,Nombre,sizeof(Nombre));
for(new i = 0; i < M_PROPIEDADES; i++) {
if(IsPlayerInRangeOfPoint(playerid,3.0,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ])) {
if(PropiedadI[i][Cerrada] == 0) {
if(PropiedadI[i][Comprada] == 1 && strcmp(Nombre,PropiedadI[i][Propietario]) != 0) return SendClientMessage(playerid,-1,"No eres dueсo de йsta propiedad.");
SetPlayerPos(playerid,PropiedadI[i][CorXi],PropiedadI[i][CorYi],PropiedadI[i][CorZi]); SetPlayerInterior(playerid,PropiedadI[i][Interiorcasa]);
}
}
}
return 1;
}
if(strcmp(cmd, "/Salircasa", true) == 0) {
for(new i = 0; i < M_PROPIEDADES; i++) {
if(IsPlayerInRangeOfPoint(playerid,10.0,PropiedadI[i][CorXi],PropiedadI[i][CorYi],PropiedadI[i][CorZi])) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,SX,SY,SZ); }
else if(IsPlayerInRangeOfPoint(playerid,10.0,PropiedadI[i][CorXi],PropiedadI[i][CorYi],PropiedadI[i][CorZi])) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,SX,SY,SZ);}
else if(IsPlayerInRangeOfPoint(playerid,10.0,PropiedadI[i][CorXi],PropiedadI[i][CorYi],PropiedadI[i][CorZi])){ SetPlayerInterior(playerid,0); SetPlayerPos(playerid,SX,SY,SZ);}
}
return 1;
}
if(strcmp(cmd, "/Cerrarcasa", true) == 0) {
new Nombre[24]; GetPlayerName(playerid,Nombre,sizeof(Nombre));
for(new i = 0; i < M_PROPIEDADES; i++) {
if(IsPlayerInRangeOfPoint(playerid,3.0,PropiedadI[i][CorX],PropiedadI[i][CorY],PropiedadI[i][CorZ])) {
if(PropiedadI[i][Comprada] == 1 && strcmp(Nombre,PropiedadI[i][Propietario]) != 0) return SendClientMessage(playerid,-1,"No eres dueсo de йsta propiedad.");
if(PropiedadI[i][Cerrada] == 0) { PropiedadI[i][Cerrada] = 1; SendClientMessage(playerid,COLOR_BLANCO,"Cerraste tu propiedad.");}
else if(PropiedadI[i][Cerrada] == 1) { PropiedadI[i][Cerrada] = 0; SendClientMessage(playerid,COLOR_BLANCO,"Abriste tu propiedad.");}
}
}
return 1;
}
if(strcmp(cmd, "/ayudacasas", true) == 0)
{
new iString[10]; //<---- Si produce bug cambiar al numero que desйn (No Cambiar ah un numero alto como 500) (les saltara mensaje de maximas particulas usadas )
strcat(iString, "{007bff}/Comprarcasa\t{FFFFFF}Para comprar una casa.\n");
strcat(iString, "{007bff}/Cerrarcasa\t\t{FFFFFF}Para cerrar tu casa.\n");
strcat(iString, "{007bff}/Entrarcasa\t\t{FFFFFF}Para entrar ah tu casa.\n");
strcat(iString, "{007bff}/Salircasa\t\t{FFFFFF}Para Salir de tu casa.\n");
strcat(iString, "{007bff}/VenderPropiedad\t\t{FFFFFF}Para vender tu propiedad.\n");
ShowPlayerDialog(playerid,Comandosc, DIALOG_STYLE_MSGBOX, "{80FF00}Lista de Comandos casa", iString, "Aceptar", "Salir");
PlayerPlaySound(playerid,1139,0.0,0.0,0.0);
return 1;
}
return 0;
}
Vamos ah la carpeta scriptfiles, y hacemos una nueva carpeta ahi mismo llamada Propiedades, despuйs de a ver la creado entramos y vamos ah este link
Todo lo que dice ahн cambiarlo de tal modo de poner sus coordenadas y sus interiores.
En la prуxima actualizaciуn tratare de crear un comando con IsPlayerAdmin (rcon) para crear casas desde el juego
De mi parte eso seria todo espero y les aya gustado el sistema de casas Cualquier duda publicarla en el post.С
Bien, es algo bбsico pero bueno, ojalб ahora lo tomen en cuenta y lo programen tambiйn ellos mismos para crear las casas InGame.