Jump to content
Sign in to follow this  
jollero

Crear y Guardar "Cajas"

Recommended Posts

Hola a todos,Este es mi primer tutorial :c y quise hacerlo con algo referido al "mapping" aunque no tanto pero tal ves les sirva.

 

En este tutorial les explicare como Crear y Guardar (Desde un archivo.ini) "Cajas" o el model que quieran,tambien de Como tocar y remover el mismo.

 

En las siguiente variable(const)

 

new const Model[] = "models/caja.mdl"

 

Ustedes la modificaran a su gusto para indicar la ubicacion de su caja/model

 

#Creditos: AguuS.-

 

Pondre todo el "Code" entiquedas PHP:

 

#include <amxmodx>
#include <engine>

new const PluginName[] = "[TUT] Crear y Guardar Cajas" //Nombre del Plugin
new const PluginVersion[] = "1.0" //Version del Plugin
new const PluginAuthor[] = "jollero" //Author del Plug 

new const Entidad[] = "Caja" //Creamos un Const,el cual registra la entidad "Caja" para detectarla
new const Model[] = "models/caja.mdl" //Creamos un const,que determina la ubicacion de nuestra "Caja"
new DirectorioFile[128] // Variable de nuestro Directorio

public plugin_init() {
register_plugin(PluginName,PluginVersion,PluginAuthor) //registramos el Plugin :V

register_touch(Entidad,"player","TocarCaja") //Registramos el evento "Touch" que determina si el player Toco la "Caja"
register_clcmd("say /menucajas","MenuDeCajas") //Registramos el menu para Tirar/Guardar/Borrar cajas
}
public plugin_precache()
precache_model(Model) // precacheamos nuestra Caja

public plugin_cfg()
{
new Directorio[64], MapaNombre[32]//Creamos variables :Directorio y nombre del mapa
get_localinfo("amxx_configsdir", Directorio, charsmax(Directorio))//Obtenemos la obicacion correcta del directorio

get_mapname(MapaNombre, charsmax(MapaNombre))//Obtenemos el nombre del Mapa
strtolower(MapaNombre) // Nice

formatex(DirectorioFile, charsmax(DirectorioFile), "%s/Cajas/%s.ini", Directorio, MapaNombre)//Le asignamos el directorio correcto

if(!file_exists(DirectorioFile))//Si el directorio no Existe
{
	server_print("No hay Cajas Guardadas")//Mensaje de que no hay cajas

	add(Directorio, charsmax(Directorio), "/Cajas")//Creamos el directorio

	if(!dir_exists(Directorio))
		mkdir(Directorio)
}
else //Si existe ..
	CajasFile() //Leemos el archivo
}
CajasFile(){
new szData[64], szX[13], szY[13], szZ[13], Origin[3]//Vars

new File = fopen(DirectorioFile, "rt")//Abrimos el Directorio para leer el texto

while(!feof(File))
{
	fgets(File, szData, charsmax(szData))//Obtenemos el Texto del Archivo

	if(!szData[0] || szData[0] == ';' || szData[0] == ' ' || (szData[0] == '/' && szData[1] == '/'))//Si no hay texto o Es igual a ";" " " "/" "/"
		continue//continuamos

	parse(szData, szX, charsmax(szX), szY, charsmax(szY), szZ, charsmax(szZ))

	Origin[0] = str_to_num(szX)//Le asignamos a szX la primera obicacion
	Origin[1] = str_to_num(szY)//Le asignamos a szY la segunda obicacion
	Origin[2] = str_to_num(szZ)//Le asignamos a szZ la tercera obicacion

	CrearCaja(Origin)//Creamos la caja con las Ubicaciones de el archivo
}

fclose(File)//Cerramos el Archivo
}	
public CrearCaja(iOrigin[3]) {
   new iEnt = create_entity("info_target") // Creamos la caja con un nombre

   new Float:OriginF[3] //Creamos un float:OriginF
   IVecFVec(iOrigin, OriginF) //Creo:Igualamos el archivo Float:OriginF con nuestra ubicacion iOrigin
   entity_set_vector(iEnt, EV_VEC_origin, OriginF) //Le asignamos el Origin (Ubicacion guardada en el .ini o donde apuntamos)

   entity_set_string(iEnt, EV_SZ_classname, Entidad) // Le asignamos el Nombre de nuestra Caja
   entity_set_model(iEnt, Model) // Le damos el Models de nuestra Caja

   new Float:mins[3] = {-10.0, -10.0, 0.0} // El tamaño
   new Float:maxs[3] = {10.0, 10.0, 25.0} // El tamaño
   entity_set_size(iEnt, mins, maxs) //Le damos el Tamaño a nuestra caja

   entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER) // La hacemos solida
   entity_set_int(iEnt, EV_INT_movetype, MOVETYPE_STEP) // Hacemos que no se mueva.

   drop_to_floor(iEnt) // La tiramos al piso.
}
public TocarCaja(iEntidad, iTocador) {//

   if (!is_valid_ent(iEntidad) || !is_valid_ent(iTocador) || !is_user_alive(iTocador)) // Si no es valida la Entidad o no es valido el Que toca la Caja,o  no esta vivo el que la toca,retorneamos
   return PLUGIN_HANDLED

   // removemos la Caja que "X" Player toco
   remove_entity(iEntidad) 

   return PLUGIN_HANDLED
} 

public MenuDeCajas(id){
new iMenuCaja = menu_create("Menu Cajas","HandlerCajas") // Creamos nuestro menu de cajas con su respectivo Handler

menu_additem(iMenuCaja,"Tirar Caja") //Creamos una Opcion para Tirar cajas
menu_additem(iMenuCaja,"Borrar Cajas") // Creamos una Opcion para Borrar todas las Cajas
menu_additem(iMenuCaja,"Guardar Cajas") //Creamos una Opcion para Guardar todas las Cajas

menu_display(id,iMenuCaja,0) //Mostramos nuestro Menu
}
public HandlerCajas(id,menu,item){//Handler de Nuestro menu
if(item == MENU_EXIT){ // si la Opcion seleccionada es Salir
	menu_destroy(menu) //Destruimos el Menu
	return PLUGIN_HANDLED //returneamos
}

switch(item){
	case 0:{
		new iOrigin[3] //Creamos el Origin 
		get_user_origin(id,iOrigin,2) //Tomamos la Ubicacion de Apuntamos "2"
		CrearCaja(iOrigin)//Creamos la Cajas
	}
	case 1:{
		new iEntidad = -1 //Creamos la Entidad
		while((iEntidad = find_ent_by_class(iEntidad,Entidad)))  //Detectamos si la Entidad es la Caja
		remove_entity(iEntidad)// removemos las Cajas
	}
	case 2:GuardarCajas(id)//Guardamos nuestras Cajas
}
return PLUGIN_HANDLED
}
public GuardarCajas(id){
new szData[64], ent = -1,Float:Origin[3] //Creamos nuestras Variables :c

if(file_exists(DirectorioFile)) //Si el archivo existe
	delete_file(DirectorioFile)//lo borramos

new File = fopen(DirectorioFile, "at")//abrimos el archivo

write_file(DirectorioFile, "//Posicion en el Mapa de las Cajas")//Mensaje al Principio del archivo que indica las Posiciones de las Cajas

while((ent = find_ent_by_class(ent,Entidad)))//Detectamos si la Entidad es la Caja
{
	entity_get_vector(ent, EV_VEC_origin, Origin) //Obtenemos los ORigin

	formatex(szData, charsmax(szData), "%f %f %f^n", Origin[0], Origin[1], Origin[2]) //Le asignamos a szData el valor de los Origins

	fputs(File, szData)// y Los metemos al .ini Listos para volverlos a cargar en el Siguiente la siguiente partida 
}

fclose(File) //Cerramos el Archivo

client_print(id, print_chat, "Cajas Guardadas") //Mensaje que dice que las Cajas se guardaron Correctamente
}

 

Espero les aya Gustado cualquier Duda o pregunta no duden en comentar ;)

 

Saluds;jollero

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

×
×
  • Create New...