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