You can drop the model or sprite to the air (Original plugin) and you can drop the model or sprite to the floor with this.
I was not able to test it today. :$
This is my first rewritten plugin, i hope so not trouble.
PHP Code:
#define VERSION "3.0b"
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#define MAX_PRECACHES 200
new num
new precached[MAX_PRECACHES][32]
new precached_name[MAX_PRECACHES][32]
new precached_sequence[MAX_PRECACHES]
new configsdir[200]
new refferencefile[200]
public plugin_init()
{
register_plugin("Model / Sprite Spawner",VERSION,"GHW_Chronic|Silverss")
register_concmd("amx_spawn_air","spawnent_air",ADMIN_LEVEL_G," Spawns a Model / Sprite to the air <part of ent name> [Non-Default Sequence #]")
register_concmd("amx_spawn_floor","spawnent_floor",ADMIN_LEVEL_G," Spawns a Model / Sprite to the floor <part of ent name> [Non-Default Sequence #]")
register_concmd("amx_spawn_remove","removeent",ADMIN_LEVEL_G," Removes Model / Sprite you are standing next to. ")
register_concmd("amx_spawn_list","listents",ADMIN_LEVEL_G," Lists Models / Sprites precached for this map. ")
set_task(1.0,"map_load")
}
public plugin_precache()
{
register_dictionary("GHW_Entspawner.txt")
get_configsdir(configsdir,199)
new precachefile[200]
format(precachefile,199,"%s/GHW_entspawner.ini",configsdir)
format(refferencefile,199,"%s/GHW_entspawner_refferences.ini",configsdir)
if(file_exists(precachefile))
{
new mapname[32]
get_mapname(mapname,31)
new read[96], trash
new string[96]
new modelname[32]
new modelname2[32]
new map[32]
new sequence
for(new i=0;i<file_size(precachefile,1);i++)
{
read_file(precachefile,i,read,95,trash)
strbreak(read,modelname,31,string,95)
strbreak(string,modelname2,31,string,95)
strbreak(string,map,31,string,95)
sequence = str_to_num(string)
if(strlen(modelname) && strlen(map) && containi(modelname,";")!=0)
{
if(equali(map,mapname) || equali(map,"all"))
{
if(containi(modelname,".spr")!=strlen(modelname)-4 && containi(modelname,".mdl")!=strlen(modelname)-4)
{
log_amx("[Ent-Spawner] %L",0,"MSG_INVALIDLOAD",i+1)
}
else
{
precache_model(modelname)
format(precached[num],31,"%s",modelname)
format(precached_name[num],31,"%s",modelname2)
precached_sequence[num] = sequence
num++
}
}
}
}
}
}
public map_load()
{
if(file_exists(refferencefile))
{
new mapname[32]
get_mapname(mapname,31)
format(mapname,31,"[%s]",mapname)
new read[32], trash
new modelname[32], sequence, Float:origin[3], Float:angles[3], Float:v_angle[3]
for(new i=0;i<file_size(refferencefile,1);i++)
{
read_file(refferencefile,i,read,31,trash)
if(equali(read,mapname))
{
i++
read_file(refferencefile,i,read,31,trash)
for(new i2=0;i2<num;i2++)
{
if(equali(precached[i2],read))
{
format(modelname,31,"%s",read)
i++
read_file(refferencefile,i,read,31,trash)
sequence = str_to_num(read)
i++
read_file(refferencefile,i,read,31,trash)
origin[0] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
origin[1] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
origin[2] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
angles[0] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
angles[1] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
angles[2] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
v_angle[0] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
v_angle[1] = str_to_float(read)
i++
read_file(refferencefile,i,read,31,trash)
v_angle[2] = str_to_float(read)
new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname,"ghw_spawned_ent")
entity_set_model(ent,modelname)
entity_set_origin(ent,origin)
entity_set_vector(ent,EV_VEC_v_angle,v_angle)
entity_set_vector(ent,EV_VEC_angles,angles)
entity_set_int(ent, EV_INT_solid,SOLID_NOT)
entity_set_int(ent,EV_INT_movetype,MOVETYPE_FLY)
entity_set_edict(ent,EV_ENT_owner,33)
entity_set_float(ent,EV_FL_framerate,1.0)
entity_set_int(ent,EV_INT_sequence,sequence)
entity_set_size(ent,Float:{-0.1, -0.1, -0.1},Float:{0.1, 0.1, 0.1})
break;
}
if(i2==num-1)
{
log_amx("[Ent-Spawner] %L",0,"MSG_INVALIDSPAWN",read)
}
}
}
}
}
return PLUGIN_CONTINUE
}
public listents(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
console_print(id,"")
console_print(id,"[AMXX] %L",id,"MSG_LIST_BEGINNING1",num)
console_print(id,"[AMXX] %L",id,"MSG_LIST_BEGINNING2")
console_print(id,"[AMXX] -------")
for(new i=0;i<num;i++)
{
console_print(id,"[AMXX] %L",id,"MSG_LIST_MIDDLE ",i + 1,precached[i],precached_name[i],precached_sequence[i])
}
console_print(id,"[AMXX] -------")
console_print(id,"")
return PLUGIN_HANDLED
}
public removeent(id,level,cid)
{
if(!cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
new Float:origin[3]
entity_get_vector(id,EV_VEC_origin,origin)
new closest=0
new Float:closestdis=99999.0
new ent = find_ent_in_sphere(get_maxplayers(),origin,100.0)
new Float:origin2[3]
new classname[32]
while(ent)
{
entity_get_string(ent,EV_SZ_classname,classname,31)
if(equali(classname,"ghw_spawned_ent_inair"))
if(equali(classname,"ghw_spawned_ent_onfloor"))
{
entity_get_vector(ent,EV_VEC_origin,origin2)
if(get_distance_f(origin,origin2)<closestdis)
{
closestdis=get_distance_f(origin,origin2)
closest=ent
}
}
ent = find_ent_in_sphere(ent,origin,100.0)
}
if(closest)
{
entity_get_vector(closest,EV_VEC_origin,origin)
new read[32], trash
new string[8]
new mapname[32]
get_mapname(mapname,31)
format(mapname,31,"[%s]",mapname)
for(new i=0;i<file_size(refferencefile,1);i++)
{
read_file(refferencefile,i,read,31,trash)
if(equali(read,mapname))
{
i+=3
read_file(refferencefile,i,read,31,trash)
format(string,7,"%f",origin[0])
if(str_to_float(read)==origin[0])
{
console_print(id,"2")
i++
read_file(refferencefile,i,read,31,trash)
format(string,7,"%f",origin[1])
if(str_to_float(read)==origin[1])
{
i++
read_file(refferencefile,i,read,31,trash)
format(string,7,"%f",origin[2])
if(str_to_float(read)==origin[2])
{
remove_entity(closest)
write_file(refferencefile,"",i-5)
write_file(refferencefile,"",i-4)
write_file(refferencefile,"",i-3)
write_file(refferencefile,"",i-2)
write_file(refferencefile,"",i-1)
write_file(refferencefile,"",i)
write_file(refferencefile,"",i+1)
write_file(refferencefile,"",i+2)
write_file(refferencefile,"",i+3)
write_file(refferencefile,"",i+4)
write_file(refferencefile,"",i+5)
write_file(refferencefile,"",i+6)
console_print(id,"[AMXX] %L",id,"MSG_REMOVED")
return PLUGIN_HANDLED
}
}
}
}
}
}
console_print(id,"[AMXX] %L",id,"MSG_NOREMOVE")
return PLUGIN_HANDLED
}
public spawnent_air(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg1[32]
read_argv(1,arg1,31)
new arg2[32]
read_argv(2,arg2,31)
new num2=-1
for(new i=0;i<num;i++)
{
if(containi(precached_name[i],arg1)!=-1)
{
if(num2!=-1)
{
console_print(id,"[AMXX] %L",id,"MSG_NOSPAWN_MORE",arg1)
return PLUGIN_HANDLED
}
num2=i
}
}
if(num2==-1)
{
console_print(id,"[AMXX] %L",id,"MSG_NOSPAWN_NONE",arg1)
return PLUGIN_HANDLED
}
new sequence = str_to_num(arg2)
if(!strlen(arg2))
{
sequence = precached_sequence[num2]
}
new Float:origin[3]
new Float:angles[3]
new Float:v_angle[3]
entity_get_vector(id,EV_VEC_origin,origin)
entity_get_vector(id,EV_VEC_v_angle,v_angle)
entity_get_vector(id,EV_VEC_angles,angles)
new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname,"ghw_spawned_ent")
entity_set_model(ent,precached[num2])
entity_set_origin(ent,origin)
entity_set_vector(ent,EV_VEC_v_angle,v_angle)
entity_set_vector(ent,EV_VEC_angles,angles)
entity_set_int(ent, EV_INT_solid,SOLID_NOT)
entity_set_int(ent,EV_INT_movetype,MOVETYPE_FLY)
entity_set_edict(ent,EV_ENT_owner,33)
entity_set_float(ent,EV_FL_framerate,1.0)
entity_set_int(ent,EV_INT_sequence,sequence)
entity_set_size(ent,Float:{-0.1, -0.1, -0.1},Float:{0.1, 0.1, 0.1})
new mapname[32]
new string[16]
get_mapname(mapname,31)
format(mapname,31,"[%s]",mapname)
write_file(refferencefile,mapname,-1)
write_file(refferencefile,precached[num2],-1)
format(string,15,"%d",sequence)
write_file(refferencefile,string,-1)
format(string,15,"%f",origin[0])
write_file(refferencefile,string,-1)
format(string,15,"%f",origin[1])
write_file(refferencefile,string,-1)
format(string,15,"%f",origin[2])
write_file(refferencefile,string,-1)
format(string,15,"%f",angles[0])
write_file(refferencefile,string,-1)
format(string,15,"%f",angles[1])
write_file(refferencefile,string,-1)
format(string,15,"%f",angles[2])
write_file(refferencefile,string,-1)
format(string,15,"%f",v_angle[0])
write_file(refferencefile,string,-1)
format(string,15,"%f",v_angle[1])
write_file(refferencefile,string,-1)
format(string,15,"%f",v_angle[2])
write_file(refferencefile,string,-1)
console_print(id,"[AMXX] %L",id,"MSG_SPAWN",precached_name[num2],sequence)
return PLUGIN_HANDLED
}
public spawnent_floor(id,level,cid)
{
if(!cmd_access(id,level,cid,2))
{
return PLUGIN_HANDLED
}
new arg1[32]
read_argv(1,arg1,31)
new arg2[32]
read_argv(2,arg2,31)
new num2=-1
for(new i=0;i<num;i++)
{
if(containi(precached_name[i],arg1)!=-1)
{
if(num2!=-1)
{
console_print(id,"[AMXX] %L",id,"MSG_NOSPAWN_MORE",arg1)
return PLUGIN_HANDLED
}
num2=i
}
}
if(num2==-1)
{
console_print(id,"[AMXX] %L",id,"MSG_NOSPAWN_NONE",arg1)
return PLUGIN_HANDLED
}
new sequence = str_to_num(arg2)
if(!strlen(arg2))
{
sequence = precached_sequence[num2]
}
new Float:origin[3]
new Float:angles[3]
new Float:v_angle[3]
entity_get_vector(id,EV_VEC_origin,origin)
entity_get_vector(id,EV_VEC_v_angle,v_angle)
entity_get_vector(id,EV_VEC_angles,angles)
new ent = create_entity("info_target")
entity_set_string(ent,EV_SZ_classname,"ghw_spawned_ent")
entity_set_model(ent,precached[num2])
entity_set_origin(ent,origin)
entity_set_vector(ent,EV_VEC_v_angle,v_angle)
entity_set_vector(ent,EV_VEC_angles,angles)
entity_set_int(ent, EV_INT_solid,SOLID_NOT)
entity_set_int(ent,EV_INT_movetype,MOVETYPE_FLY)
entity_set_edict(ent,EV_ENT_owner,33)
entity_set_float(ent,EV_FL_framerate,1.0)
entity_set_int(ent,EV_INT_sequence,sequence)
entity_set_size(ent,Float:{-0.1, -0.1, -0.1},Float:{0.1, 0.1, 0.1})
engfunc(EngFunc_DropToFloor, ent)
new mapname[32]
new string[16]
get_mapname(mapname,31)
format(mapname,31,"[%s]",mapname)
write_file(refferencefile,mapname,-1)
write_file(refferencefile,precached[num2],-1)
format(string,15,"%d",sequence)
write_file(refferencefile,string,-1)
format(string,15,"%f",origin[0])
write_file(refferencefile,string,-1)
format(string,15,"%f",origin[1])
write_file(refferencefile,string,-1)
format(string,15,"%f",origin[2])
write_file(refferencefile,string,-1)
format(string,15,"%f",angles[0])
write_file(refferencefile,string,-1)
format(string,15,"%f",angles[1])
write_file(refferencefile,string,-1)
format(string,15,"%f",angles[2])
write_file(refferencefile,string,-1)
format(string,15,"%f",v_angle[0])
write_file(refferencefile,string,-1)
format(string,15,"%f",v_angle[1])
write_file(refferencefile,string,-1)
format(string,15,"%f",v_angle[2])
write_file(refferencefile,string,-1)
console_print(id,"[AMXX] %L",id,"MSG_SPAWN",precached_name[num2],sequence)
return PLUGIN_HANDLED
}
3.0b First Release! + Fix bug.