[Duda] Sistema de casas
#1

Hola, quiero hacer un sistema de casas en venta y querнa pedirles que me guiaran un poco de como hacerlo si no es mucha molestia.
Muchas gracias.
Reply
#2

Te podria explicar aqui una barbaridad.
Como lo hice yo fue tomando la idea de un sistema https://sampforum.blast.hk/showthread.php?tid=321388

Si no te queda claro te explico
Reply
#3

Gracias pero como mi ingles es para la mier*a, espero con ansias tu explicaciуn xD
Reply
#4

Bueno, yo puedo explicarte pero antes necesito mas detalles acerca de como quieres el sistema de casas, opciones, por ejemplo que tenga niveles las casas para actualizar, o cosas asн. Yo he realizado uno desde 0 y podrнa explicarte.
Reply
#5

No quiero mucho, simplemente que pida Nivel y dinero.
Reply
#6

Bueno, segъn lo que necesitas y basбndome en el sistema que hice debes hacer lo siguiente:
1. Crear una constante diciendo el mбximo de casas que puedes crear, esto se hace con lo siguiente:
pawn Код:
#define MAX_HOUSES 500
Donde 500 es la cantidad mбxima de casas que podrбs crear en tu servidor, hay que tomar en cuenta que si quieres crear mas de 1024 casas deberбs usar un Streamer.
Luego de eso vamos a crear un enum para poder guardar los datos de las casas que vayamos creando.
pawn Код:
enum Info_Casas
{
    Float:CX,//Posiciуn X de la casa
    Float:CY,//Posiciуn Y de la casa
    Float:CZ,//Posiciуn Z de la casa
    Precio,//Costo de la casa
    Nivel,//Nivel de la casa
    bool:Comprada,//Saber si estб comprada o no
    PickUp_C,//ID de pickup de la casa
    Text3D:DLabel_C,//Texto en 3D sobre informaciуn de la casa
    Nombre_C[MAX_PLAYER_NAME+1]//Nombre del propietario, esto se puede cambiar por IDs o alguna otra cosa, pero dejemoslo asн para entender mбs.
};
Y creamos la variable principal y otra que nos ayudarб a ver cuantas casas se han creado:
pawn Код:
new Info_Casa[MAX_HOUSES][Info_Casas];//Variable principal
new Casa_Maxima;//Variable para saber la cantidad de casas que has colocado
Luego crearemos el comando para crear las casas en el juego, esto tambiйn depende de que procesador de comandos estes usando, yo te lo dejo en y_commands. Si desconoces de esto te puedo explicar en otro post.
pawn Код:
YCMD:crearcasa(playerid, params[], help)//Donde crearcasa es el nombre del comando
{
    if(!IsPlayerAdmin(playerid))//Esto comprueba que seas Admin RCON
        return 0;
    new nivel, precio;//Variables temporales para almacenar los datos: nivel y precio
    if(sscanf(params, "dd", nivel, precio))//Sirve para asignar los parбmetros del comando a las variables, para esto es necesario tener el include sscanf
        return SendClientMessage(playerid, rojo, "Usa /crearcasa Nivel <Precio> ");
    if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT)//Esto es opcional, para que solo puedas crear casas a pie
        return SendClientMessage(playerid, rojo, "Debes estar a pie para usar este comando");
    if(nivel > 10 || nivel < 1)//Aca cambias el 10 al nivel mбximo que podrбn tener tus casas, y el 1 al mнnimo que podrбn tener
        return SendClientMessage(playerid, rojo, "Niveles del 1 al 10");//Cambias el mensaje segъn lo de arriba
    if(Casa_Maxima >= MAX_HOUSES)
        return SendClientMessage(playerid, rojo, "Limite de casas alcanzado");//Si se intenta crear un nъmero superior de casas al que estableciste muestra este mensaje
    new Float:x, Float:y, Float:z;//Creamos 3 variables para almacenar la posiciуn de la casa
    GetPlayerPos(playerid, x, y, z);//Se almacenan en estas variables tu posiciуn actual, por lo tanto donde pongas el comando /crearcasa se crearб la casa
    Info_Casa[Casa_Maxima][CX] = x;//Guardamos X en variable principal
    Info_Casa[Casa_Maxima][CY] = y;//Guardamos Y en variable principal
    Info_Casa[Casa_Maxima][CZ] = z;//Guardamos Z en variable principal
    Info_Casa[Casa_Maxima][Precio] = precio;//Guardamos precio en variable principal
    Info_Casa[Casa_Maxima][Nivel] = nivel;//Guardamos nivel en variable principal
    Info_Casa[Casa_Maxima][Comprada] = false;//Le decimos que la casa no estб comprada, un false entonces
    Info_Casa[Casa_Maxima][PickUp_C] = CrearPickUp(1273, 1, x, y, z, 0);//Creamos el pickup de la casa
new Casa_String[64];//Variable para dar formato al texto de informaciуn de la casa
    format(Casa_String, sizeof(Casa_String), "Casa disponible por: %s\nNivel: %d\nID: %d", ConvertirEntero(precio), nivel, Casa_Maxima);//Formateamos con las variables, analiza para que veas como utilizamos estas variables
    Info_Casa[Casa_Maxima][DLabel_C] = Create3DTextLabel(Casa_String, BLANCO_00, x, y, z+1.2, 30.0, 0, 1);//Creamos el 3D label y guardamos su ID en Info_Casa[Casa_Maxima][DLabel_C], cabe destacar que no es necesario guardar el ID, pongo esto si en un futuro aсadieras eliminaciуn de casas creadas
    format(Info_Casa[Casa_Maxima][Nombre_C], MAX_PLAYER_NAME+1, "NULL");//Asignamos esta casa al propietario 'NULL' o sea nadie, puedes cambiarlo por ejemplo a 'N' para mayor seguridad.
    Guardar_Casa(Casa_Maxima);//Llamamos a una funciуn que guardarб los datos de la casa, es necesario saber Y_INI bбsico
        Casa_Maxima++;//Aumentamos el nъmero de casas creadas
//Las siguientes lнneas guardaran en el archivo principal la cantidad mбxima de casas creadas, para luego poder ser leнdas y ademбs volver a saber cuantas se han creado, como ves es necesario Y_INI.
        new INI:Archivo = INI_Open("Casas/Principal.sav");
        INI_SetTag(Archivo, "HQ");
        INI_WriteInt(Archivo, "Casa_Maxima", Casa_Maxima);
        INI_Close(Archivo);
    }
    return 1;
}
Hasta aquн concluyo por el momento el principio, si tienes dudas o sugerencias sobre mi explicaciуn favor de hacйrmelo saber para asн explicarte el resto mejor, esto es aproximadamente el 10% de todo el sistema.
Reply
#7

Muy bueno por ahi iba a empezar yo, con ycmd y y_ini XD como lo hubiera echo yo.
Un detalle, yo le aсadiria la funcion de crear un pickup de la casa color verde, un textdraw con los requisitos y un map icon, todo con streamer.
Muy bueno

PD: CUando escribas el codigo no uses [PHP] usa [PAWN] quedara mas visual
Reply
#8

Quote:
Originally Posted by chusothe41
Посмотреть сообщение
Te podria explicar aqui una barbaridad.
Como lo hice yo fue tomando la idea de un sistema https://sampforum.blast.hk/showthread.php?tid=321388

Si no te queda claro te explico
Chuso si yo uso ese sistema en un servidor, lo instalo y tal luego йste se sincroniza y se guarda en el archivo de cada usuario?

Es decir, el tнpico Pepe.ini que estб en scripts files que te crea el sistema de registros, cuando Pepe compra esa casa їDуnde se guardarнa la informaciуn?

Gracias
Reply
#9

Quote:
Originally Posted by Orei
Посмотреть сообщение
Chuso si yo uso ese sistema en un servidor, lo instalo y tal luego йste se sincroniza y se guarda en el archivo de cada usuario?

Es decir, el tнpico Pepe.ini que estб en scripts files que te crea el sistema de registros, cuando Pepe compra esa casa їDуnde se guardarнa la informaciуn?

Gracias
No, eso lo tienes que hacer tu evidentemente

Solo hay que cambiar un par de datos que son (si no me olvido) el playerhouse que tendrias que agregarlo a tu enum de datos del personaje y cambiarlo en todos los datos ejemplo.

Enum de las casas:

CasaInfo[id][pCasa] = 999;

lo cambiariamos por:

PlayerInfo[playerid][pCasa] == 999;

Nada dificil, esto es un ejemplo
Reply
#10

Quote:
Originally Posted by chusothe41
Посмотреть сообщение
No, eso lo tienes que hacer tu evidentemente

Solo hay que cambiar un par de datos que son (si no me olvido) el playerhouse que tendrias que agregarlo a tu enum de datos del personaje y cambiarlo en todos los datos ejemplo.

Enum de las casas:

CasaInfo[id][pCasa] = 999;

lo cambiariamos por:

PlayerInfo[playerid][pCasa] == 999;

Nada dificil, esto es un ejemplo
Serнa

PlayerInfo[playerid][pCasa] = 999;
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)