05.08.2014, 18:35
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.
Muchas gracias.
#define MAX_HOUSES 500
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.
};
new Info_Casa[MAX_HOUSES][Info_Casas];//Variable principal
new Casa_Maxima;//Variable para saber la cantidad de casas que has colocado
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;
}
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 |
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 |