Senior Member
Join Date: Apr 2020
Location: Córdoba, Argentina
|
07-26-2020
, 13:03
func_door help
|
#1
|
Hello, I do not know if you know the paintball plugin, but when I shoot at the doors they open, and I would like to make this not happen but I do not know how to do it
I am using this code
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <amxmisc>
#define PLUGIN "Paintball Gun General"
#define VERSION "3.4"
#define AUTHOR "WhooKid"
#define MAX_PAINTBALLS 200
#define TASK_PB_RESET 1000
#define TASK_RELOAD 2000
#define m_pPlayer 41
new g_paintballs[MAX_PAINTBALLS], g_pbstatus[MAX_PAINTBALLS], g_pbcount, Float:lastshot[33], Float:nextattack[33], freezetime;
new pbgun, pbusp, pbglock, color, shots, veloc, speed, blife, sound, bglow, damge, friendlyfire, tgun, ctgun, beamspr;
static const g_shot_anim[4] = {0, 3, 9, 5};
static const g_pbgun_models[11][] = {"models/v_pbgun.mdl", "models/v_pbgun1.mdl", "models/v_pbgun2.mdl", "models/v_pbgun3.mdl", "models/v_pbgun4.mdl", "models/v_pbgun5.mdl", "models/v_pbgun6.mdl", "models/v_pbgun7.mdl", "models/v_pbgun8.mdl", "models/v_pbgun9.mdl", "models/v_pbgun10.mdl"};
//------------------- Agregados Lucas ------------------------------//
/* The plugin works with 3 lists of maps, where each one fulfills a different function, in the First List we find maps where all the
entities that can be broken are broken, for example glass, boxes, wood, etc. In the Second List we find maps where you cannot break
anything on the map, for example the boxes of the sites, etc. In the Third List by using "Nº. Entities" we can tell the sv which
entities should break and which should not, this is applicable to maps where we want some things to break and others not,for example
the case in de_mirage where the site boxes we don't want are broken, but there are also bars that we do want to break.
*/
new const g_mapstobreak []= // Poner los mapas que queramos que se rompan rejas, vidrios, etc.
{ // Put the maps that we want to break bars, glass, etc.
"de_chateau",
"de_cpl_mill",
"de_nuke",
"de_survivor",
"de_tuscan",
"de_inferno",
"de_concrete2",
"de_concrete20",
"surf_ski_2",
"de_nuke_rarea",
"de_cbble_go",
"css_cbble",
"css_mirage_go",
"css_miragesky_go",
"css_train_go",
"css_crane"
}
new const g_mapsdontbreak []= // Poner los mapas donde queramos que no se rompan cajas del site, etc.
{ // Put the maps where we want them not to break site boxes, etc.
"de_airstrip",
"de_aztec",
"de_cbble",
"de_dust",
"de_dust2",
"de_storm",
"de_torn",
"de_train",
"de_vertigo",
"de_dust2_largo",
"de_dust2_largo_y_ma",
"de_hell",
"de_cpl_fire",
"cs_paintball",
"css_aztec",
"css_dust2",
"de_vertigo_go",
"css_dust2night_go",
"css_dust2winter_go",
"css_dust2_go",
"css_dust3_go",
"css_dust20",
"css_dust",
"css_kabul2",
"css_port",
"css_shorttrain",
"css_cache2x2",
"css_dust2x2",
"css_dust2x2_go",
"css_kabul2x2",
"css_train2x2",
// Use Id's entity
"de_piranesi"
}
new const g_mapstobreaknt []= // Mapas donde queramos que se rompan algunas cajas y otras no.
{ // Maps where we want some boxes to be broken and others not.
// Use Id's entity
"de_kabul_sl_v1",
"de_kabul20",
"css_kabul20",
"de_prodigy",
"de_mirage",
"de_overpass",
"css_overpass",
"de_cpl_strike",
"css_mirage"
}
new const boxesdontbreak []= // Nº Entitys of "g_mapsdontbreak" (Line: 59 - 77)
{
//de_piranesi
420 ,
423 ,
430
}
new const boxestobreaknt []= // Nº Entitys of "g_mapstobreaknt" (Line: 79 - 88)
{
//de_prodigy
16 ,
34 ,
46 ,
47 ,
48 ,
49 ,
73 ,
101 ,
102 ,
103 ,
104 ,
105 ,
//de_mirage
17 ,
18 ,
19 ,
20 ,
25 ,
29 ,
//de_overpass
53 ,
54 ,
55 ,
56 ,
57 ,
58 ,
//de_cpl_strike
21 ,
26 ,
//de_kabul20
45 ,
94 ,
//css_mirage
96 ,
97
}
//---------------Terminan las constantes agregadas ----------------//////
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("paintballgun", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED);
register_clcmd("say /ent", "ent_info", ADMIN_SLAY);
pbgun = register_cvar("amx_pbgun", "1");
pbusp = register_cvar("amx_pbusp", "1");
pbglock = register_cvar("amx_pbglock", "1");
if (get_pcvar_num(pbgun) || get_pcvar_num(pbusp) || get_pcvar_num(pbglock))
{
// Reemplazado para que no se puedan bugear las balas en la siguiente ronda
// register_event("HLTV", "ev_roundstart", "a", "1=0", "2=0")
register_logevent("ev_roundstart", 2, "0=World triggered", "1=Round_Start");
if (get_cvar_num("mp_freezetime") > 0)
register_event("HLTV", "ev_freezetime", "a", "1=0", "2=0");
//---------- Agregados Lucas, reemplazo de ev_curweapon ---------------------------
RegisterHam(Ham_Item_Deploy, "weapon_usp", "Usp_Deploy", 1)
RegisterHam(Ham_Item_Deploy, "weapon_glock18", "Glock18_Deploy", 1)
RegisterHam(Ham_Item_Deploy, "weapon_mp5navy", "Mp5navy_Deploy", 1)
//-------------------------------------------------------------------------------
register_forward(FM_Touch, "fw_touch");
register_forward(FM_SetModel, "fw_setmodel");
register_forward(FM_PlayerPreThink, "fw_playerprethink", 1);
register_forward(FM_UpdateClientData, "fw_updateclientdata", 1);
color = register_cvar("pbgun_color", "2");
shots = register_cvar("pbgun_shots", "105");
veloc = register_cvar("pbgun_velocity", "2000");
speed = register_cvar("pbgun_speed", "0.08");
blife = register_cvar("pbgun_life", "0.99"); //dejar en 0.99 porque son como 1 segundos de vida del sprite de pintura
sound = register_cvar("pbgun_sound", "1");
bglow = register_cvar("pbgun_glow", "0");
damge = register_cvar("pbgun_damage", "100");
friendlyfire = get_cvar_pointer("mp_friendlyfire");
new a, max_ents_allow = global_get(glb_maxEntities) - 5;
for (a = 1; a <= get_pcvar_num(shots); a++)
if (a < MAX_PAINTBALLS)
if (engfunc(EngFunc_NumberOfEntities) < max_ents_allow)
{
g_paintballs[a] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if (pev_valid(g_paintballs[a]))
{
set_pev(g_paintballs[a], pev_effects, pev(g_paintballs[a], pev_effects) | EF_NODRAW);
g_pbcount++;
}
}
if (g_pbcount < 1)
set_fail_state("[AMXX] Failed to load Paintball Gun (unable to create ents)");
//server_print("*** %s v%s by %s Enabled ***", PLUGIN, VERSION, AUTHOR);
}
}
public plugin_precache()
{
register_cvar("amx_pbgun", "1");
register_cvar("amx_pbusp", "1");
register_cvar("amx_pbglock", "1");
register_cvar("pbgun_tgun", "3");
register_cvar("pbgun_ctgun", "7");
tgun = get_cvar_num("pbgun_tgun");
ctgun = get_cvar_num("pbgun_ctgun");
if (get_cvar_num("amx_pbgun")) {
precache_model(g_pbgun_models[tgun]);
precache_model(g_pbgun_models[ctgun]);
precache_model((ctgun) ? "models/p_pbgun1.mdl" : "models/p_pbgun.mdl");
precache_model("models/w_pbgun.mdl");
}
if (get_cvar_num("amx_pbusp")) {
precache_model("models/v_pbusp.mdl");
precache_model("models/p_pbusp.mdl");
}
if (get_cvar_num("amx_pbglock")) {
precache_model("models/v_pbglock.mdl");
precache_model("models/p_pbglock.mdl");
}
if (get_cvar_num("amx_pbgun") || get_cvar_num("amx_pbusp") || get_cvar_num("amx_pbglock")) {
precache_sound("misc/pb1.wav");
precache_sound("misc/pb2.wav");
precache_sound("misc/pb3.wav");
precache_sound("misc/pb4.wav");
precache_sound("misc/pbg.wav");
precache_model("models/w_paintball.mdl");
precache_model("sprites/paintball.spr");
}
beamspr = precache_model("sprites/laserbeam.spr");
}
////////////////- Agregados Lucas-////////////////////////////////////
public plugin_cfg()
{
if(is_plugin_loaded("Pause Plugins") > -1)
server_cmd("amx_pausecfg add ^"Paintball Gun General^"");
}
// Reemplazo del ev_curweapon. para que no puedan bugear el arma
public Usp_Deploy( iUsp )
{
new id = get_pdata_cbase(iUsp, m_pPlayer, 4);
set_pev(id, pev_viewmodel2, "models/v_pbusp.mdl");
set_pev(id, pev_weaponmodel2, "models/p_pbusp.mdl");
}
public Glock18_Deploy( iGlock18 )
{
new id = get_pdata_cbase(iGlock18, m_pPlayer, 4);
set_pev(id, pev_viewmodel2, "models/v_pbglock.mdl");
set_pev(id, pev_weaponmodel2, "models/p_pbglock.mdl");
}
public Mp5navy_Deploy( iMp5navy )
{
new id = get_pdata_cbase(iMp5navy, m_pPlayer, 4);
set_pev(id, pev_viewmodel2, (get_user_team(id) == 1) ? g_pbgun_models[tgun] : g_pbgun_models[ctgun]);
set_pev(id, pev_weaponmodel2, (ctgun) ? "models/p_pbgun1.mdl" : "models/p_pbgun.mdl");
}
////////////////- Agregados Lucas-////////////////////////////////////
public ent_info(id)
client_print(id, print_chat, "[AMXX] [Ent Info (Current/Max)] Paintballs: (%d/%d) Entities: (%d/%d)", g_pbcount, get_pcvar_num(shots), engfunc(EngFunc_NumberOfEntities), global_get(glb_maxEntities));
public fw_setmodel(ent, model[])
{
if (equali(model, "models/w_mp5.mdl"))
if (get_pcvar_num(pbgun))
{
engfunc(EngFunc_SetModel, ent, "models/w_pbgun.mdl");
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public fw_updateclientdata(id, sw, cd_handle)
{
if (user_has_pbgun(id) && cd_handle)
{
set_cd(cd_handle, CD_ID, 1);
get_cd(cd_handle, CD_flNextAttack, nextattack[id]);
//set_cd(cd_handle, CD_flNextAttack, 10.0);
return FMRES_HANDLED;
}
return FMRES_IGNORED;
}
public fw_playerprethink(id)
{
new my_pbgun = user_has_pbgun(id);
if (my_pbgun)
{
new buttons = pev(id, pev_button);
if (buttons & IN_ATTACK)
{
new ammo, null = get_user_weapon(id, ammo, null);
if (ammo)
{
set_pev(id, pev_button, buttons & ~IN_ATTACK);
new Float:gametime = get_gametime(), Float:g_speed;
if (my_pbgun == 1)
g_speed = get_pcvar_float(speed);
else
g_speed = (my_pbgun == 2) ? get_pcvar_float(speed) * 2.0 : get_pcvar_float(speed) * 3.0;
if (gametime-lastshot[id] > g_speed && nextattack[id] < 0.0 && !freezetime)
{
if (paint_fire(id))
{
lastshot[id] = gametime;
set_user_clip(id, ammo - 1);
set_pev(id, pev_punchangle, Float:{-0.5, 0.0, 0.0});
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id);
write_byte(g_shot_anim[my_pbgun]);
write_byte(0);
message_end();
if (get_pcvar_num(sound))
emit_sound(id, CHAN_AUTO, "misc/pbg.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
}
}
}
return FMRES_IGNORED;
}
public paint_fire(id)
{
new a, ent;
while (a++ < g_pbcount - 1 && !ent)
if (g_pbstatus[a] == 0)
ent = g_pbstatus[a] = g_paintballs[a];
if (!ent)
while (a-- > 1 && !ent)
if (g_pbstatus[a] == 2)
ent = g_pbstatus[a] = g_paintballs[a];
if (pev_valid(ent) && is_user_alive(id))
{
new Float:vangles[3], Float:nvelocity[3], Float:voriginf[3], vorigin[3], clr;
set_pev(ent, pev_classname, "pbBullet");
set_pev(ent, pev_owner, id);
engfunc(EngFunc_SetModel, ent, "models/w_paintball.mdl");
engfunc(EngFunc_SetSize, ent, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0});
switch (get_pcvar_num(color))
{
case 2: clr = (get_user_team(id) == 1) ? 0 : 1;
case 3: clr = (get_user_team(id) == 1) ? 4 : 3;
case 4: clr = (get_user_team(id) == 1) ? 2 : 5;
default: clr = random_num(0, 6);
}
set_pev(ent, pev_skin, clr);
get_user_origin(id, vorigin, 1);
IVecFVec(vorigin, voriginf);
engfunc(EngFunc_SetOrigin, ent, voriginf);
vangles[0] = random_float(-180.0, 180.0);
vangles[1] = random_float(-180.0, 180.0);
set_pev(ent, pev_angles, vangles);
pev(id, pev_v_angle, vangles);
set_pev(ent, pev_v_angle, vangles);
pev(id, pev_view_ofs, vangles);
set_pev(ent, pev_view_ofs, vangles);
set_pev(ent, pev_solid, 2);
set_pev(ent, pev_movetype, 5);
velocity_by_aim(id, get_pcvar_num(veloc), nvelocity);
set_pev(ent, pev_velocity, nvelocity);
set_pev(ent, pev_effects, pev(ent, pev_effects) & ~EF_NODRAW);
set_task(0.1, "paint_glow", ent);
set_task(15.0, "paint_reset", ent+TASK_PB_RESET); //aca iba task 15.0
}
return ent;
}
public fw_touch(bullet, ent)
{
new class[20];
pev(bullet, pev_classname, class, 19);
if (!equali(class, "pbBullet"))
return FMRES_IGNORED;
new Float:origin[3], class2[20], owner = pev(bullet, pev_owner), is_ent_alive = is_user_alive(ent);
pev(ent, pev_classname, class2, 19);
pev(bullet, pev_origin, origin);
if (is_ent_alive)
{
if (owner == ent || pev(ent, pev_takedamage) == DAMAGE_NO)
return FMRES_IGNORED;
if (get_user_team(owner) == get_user_team(ent))
if (!get_pcvar_num(friendlyfire))
return FMRES_IGNORED;
new szHostagename[32];
pev(ent, pev_classname, szHostagename, charsmax(szHostagename));
if(equali(szHostagename, "hostage_entity"))
return FMRES_IGNORED;
ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(get_pcvar_num(damge)), 4098);
}
if (!equali(class, class2))
{
set_pev(bullet, pev_velocity, Float:{0.0, 0.0, 0.0});
set_pev(bullet, pev_classname, "pbPaint");
set_pev(bullet, pev_solid, 0);
set_pev(bullet, pev_movetype, 0);
engfunc(EngFunc_SetModel, bullet, "sprites/paintball.spr");
new a, findpb = 0;
while (a++ < g_pbcount && !findpb)
if (g_paintballs[a] == bullet)
findpb = g_pbstatus[a] = 2;
remove_task(bullet);
remove_task(bullet+TASK_PB_RESET);
if (get_pcvar_num(sound))
{
static wav[20];
formatex(wav, 20, is_ent_alive ? "player/pl_pain%d.wav" : "misc/pb%d.wav", is_ent_alive ? random_num(4,7) : random_num(1,4));
emit_sound(bullet, CHAN_AUTO, wav, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
//------------------------- Agregados Lucas ------------------//
new bool:valid_surface = (is_ent_alive || containi(class2, "door") != -1) ? false : true;
if (pev(ent, pev_health) && !is_ent_alive)// && pev(ent, pev_takedamage) != DAMAGE_NO)
{
new bool:isbox = true // The boxes do not explode because they are a box. // No explotan las cajas porque son una caja.
new maps[32]
get_mapname(maps, 31)
for(new i=0;i< sizeof(g_mapstobreak);i++)
if(equali(maps, g_mapstobreak[i]))
{
isbox = false
break
}
for(new i=0;i< sizeof(g_mapsdontbreak);i++)
if(equali(maps, g_mapsdontbreak[i]))
{
for(new i = 0; i < sizeof(boxesdontbreak); i++)
if(ent == boxesdontbreak[i])
{
isbox = false // Boxes explode, because it's not a box. // Explotan las cajas, porque no es una caja.
break
}
}
for(new i=0;i< sizeof(g_mapstobreaknt);i++)
if(equali(maps, g_mapstobreaknt[i]))
{
for(new i = 0; i < sizeof(boxestobreaknt); i++)
if(ent == boxestobreaknt[i])
{
isbox = false // Boxes explode, because it's not a box. // Explotan las cajas, porque no es una caja.
break
}
}
if(!isbox) // The !isbox = false boxes are the ones that take damage. // Las cajas !isbox = false son las que reciben el daño.
ExecuteHam(Ham_TakeDamage, ent, owner, owner, float(pev(ent, pev_health)), 0);
valid_surface = false;
if (isbox)
valid_surface = true;
}
if (valid_surface)
{
paint_splat(bullet);
set_task(float(get_pcvar_num(blife)), "paint_reset", bullet+TASK_PB_RESET);
}
//------------------ Terminan Agregados Lucas ------------------//
else
paint_reset(bullet+TASK_PB_RESET);
return FMRES_HANDLED;
}
return FMRES_IGNORED;
}
public paint_splat(ent)
{
new Float:origin[3], Float:norigin[3], Float:viewofs[3], Float:angles[3], Float:normal[3], Float:aiming[3];
pev(ent, pev_origin, origin);
pev(ent, pev_view_ofs, viewofs);
pev(ent, pev_v_angle, angles);
norigin[0] = origin[0] + viewofs[0];
norigin[1] = origin[1] + viewofs[1];
norigin[2] = origin[2] + viewofs[2];
aiming[0] = norigin[0] + floatcos(angles[1], degrees) * 1000.0;
aiming[1] = norigin[1] + floatsin(angles[1], degrees) * 1000.0;
aiming[2] = norigin[2] + floatsin(-angles[0], degrees) * 1000.0;
engfunc(EngFunc_TraceLine, norigin, aiming, 0, ent, 0);
get_tr2(0, TR_vecPlaneNormal, normal);
vector_to_angle(normal, angles);
angles[1] += 180.0;
if (angles[1] >= 360.0) angles[1] -= 360.0;
set_pev(ent, pev_angles, angles);
set_pev(ent, pev_v_angle, angles);
origin[0] += (normal[0] * random_float(0.3, 2.7));
origin[1] += (normal[1] * random_float(0.3, 2.7));
origin[2] += (normal[2] * random_float(0.3, 2.7));
engfunc(EngFunc_SetOrigin, ent, origin);
set_pev(ent, pev_frame, float(random_num( (pev(ent, pev_skin) * 18), (pev(ent, pev_skin) * 18) + 17 ) ));
if (pev(ent, pev_renderfx) != kRenderFxNone)
set_rendering(ent);
}
public paint_glow(ent)
{
if (pev_valid(ent))
{
static pbglow[5], clr[3];
get_pcvar_string(bglow, pbglow, 4);
switch (get_pcvar_num(color))
{
case 2: clr = (get_user_team(pev(ent, pev_owner))==1) ? {255, 0, 0} : {0, 0, 255};
default: clr = {255, 255, 255};
}
if (read_flags(pbglow) & (1 << 0))
set_rendering(ent, kRenderFxGlowShell, clr[0], clr[1], clr[2], kRenderNormal, 255);
if (read_flags(pbglow) & (1 << 1))
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(ent);
write_short(beamspr);
write_byte(4);
write_byte(2);
write_byte(clr[0]);
write_byte(clr[1]);
write_byte(clr[2]);
write_byte(255);
message_end();
}
}
}
public paint_reset(ent)
{
remove_task(ent);
ent -= TASK_PB_RESET;
new a, findpb = 1;
while (a++ <= g_pbcount && findpb)
if (g_paintballs[a] == ent)
findpb = g_pbstatus[a] = 0;
set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW);
engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0});
set_pev(ent, pev_velocity, Float:{0.0, 0.0, 0.0});
engfunc(EngFunc_SetOrigin, ent, Float:{-2000.0, -2000.0, -2000.0});
if (pev(ent, pev_renderfx) != kRenderFxNone)
set_rendering(ent);
}
public ev_roundstart()
{
for (new a = 1; a <= g_pbcount; a++)
if (g_pbstatus[a] != 0)
paint_reset(g_paintballs[a]+TASK_PB_RESET);
if (freezetime)
freezetime = 0;
}
public ev_freezetime()
freezetime = 1;
stock user_has_pbgun(id)
{
if (is_user_alive(id))
{
new model[25];
pev(id, pev_viewmodel2, model, 24);
if (containi(model, "models/v_pbgun") != -1)
return 1;
else if (equali(model, "models/v_pbusp.mdl"))
return 2;
else if (equali(model, "models/v_pbglock.mdl"))
return 3;
}
return 0;
}
stock set_user_clip(id, ammo)
{
new weaponname[32], weaponid = -1, weapon = get_user_weapon(id, _, _);
get_weaponname(weapon, weaponname, 31);
while ((weaponid = engfunc(EngFunc_FindEntityByString, weaponid, "classname", weaponname)) != 0)
if (pev(weaponid, pev_owner) == id) {
set_pdata_int(weaponid, 51, ammo, 4);
return weaponid;
}
return 0;
}
// teame06's function
stock set_rendering(index, fx=kRenderFxNone, r=0, g=0, b=0, render=kRenderNormal, amount=16)
{
set_pev(index, pev_renderfx, fx);
new Float:RenderColor[3];
RenderColor[0] = float(r);
RenderColor[1] = float(g);
RenderColor[2] = float(b);
set_pev(index, pev_rendercolor, RenderColor);
set_pev(index, pev_rendermode, render);
set_pev(index, pev_renderamt, float(amount));
}
|
|