06/05/2022, 06:03 AM
(Última modificación: 07/05/2022, 09:56 PM por 3mcy daimon't. Edited 7 times in total.)
Hola chicos, buenas a todos... despues de 8 años retirado, 1 hijo y un casamiento de por medio me bajo la nostalgia y decidi volver al scripting, la cosa es que esta vez quiero molestarlos con un plugin que tengo hecho hace años por alla por el 2011 que encontre en un viejo backup que tenia. ni esa vez ni ahora he podido resolver el problema la cosa es que lo tengo agregado a un menu como extra item a travez de natives y cuando empieza la ronda aparezca en el menu de seleccion de armas, el problema es que la puedo elegir una vez y funciona de maravilla. despues en las otras rondas ya no deja elegirla... alguna solucion? debe ser algun detalle que no he podido considerar ni cuando empeze ni ahora. quedo atento muchas gracias!.
PD: tiene las variables seteadas en 0 en casi todos los eventos de respawn lo hize asi por si se solucionaba y nada :/
PD2: Si alguien encontrara la solucion podria quedar como aporte ya que funciona super bien es solo eso que se puede elegir una ronda y despues en las proximas no.
PD3: Lo estoy usando sobre la base del basebuilder 6.5 de Tirant.
EDIT: El error era mio en el handler del menu natives, el arma esta funcional 100 x ciento queda como aporte para el que quiera usarla
PD: tiene las variables seteadas en 0 en casi todos los eventos de respawn lo hize asi por si se solucionaba y nada :/
PD2: Si alguien encontrara la solucion podria quedar como aporte ya que funciona super bien es solo eso que se puede elegir una ronda y despues en las proximas no.
PD3: Lo estoy usando sobre la base del basebuilder 6.5 de Tirant.
EDIT: El error era mio en el handler del menu natives, el arma esta funcional 100 x ciento queda como aporte para el que quiera usarla
Código PHP:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <bb_chile>
#define ID_ELECTRO (taskid - TASK_ELECTRO)
#define is_valid_player(%1) (1 <= %1 <= 32)
#define CSW_ID CSW_P90
new const weap_name[] = { "weapon_p90" }
enum (+= 100)
{
TASK_ELECTRO
}
enum TIPO
{
MUNICIONES,
ELEC_DURACION
}
new var[33][TIPO], bool:g_p90_electro[33]
new m_beamSpr, g_iMaxPlayers
new WEAPON_VMODEL[] = "models/bb_chile/v_p90_elec.mdl"
new WEAPON_PMODEL[] = "models/bb_chile/p_p90_elec.mdl"
new const sound_chispa1[] = { "buttons/spark1.wav" }
new const sound_chispa2[] = { "buttons/spark2.wav" }
new const sound_chispa3[] = { "buttons/spark3.wav" }
new const sound_chispa4[] = { "buttons/spark4.wav" }
public plugin_init()
{
register_plugin("Teslacoil", "1.0", "~3MCy Daimon't~>") // en aquel en entonces me guie de otros plugins par hacer este,
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage_electrical")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_Item_Deploy, weap_name, "fw_ItemDeploy_Post", 1)
register_event("CurWeapon", "TraceAttack", "be", "1=1", "3>0")
register_event("HLTV", "ev_RoundStart", "a", "1=0", "2=0")
g_iMaxPlayers = get_maxplayers()
agregar_arma_prim("Teslacoil", 0, "item_selected", 50)
}
public client_putinserver(id)
{
g_p90_electro[id] = false
var[id][ELEC_DURACION] = 0
}
public client_disconnect(id)
{
g_p90_electro[id] = false
var[id][ELEC_DURACION] = 0
remove_task(id+TASK_ELECTRO)
}
public plugin_precache()
{
precache_model(WEAPON_VMODEL)
precache_model(WEAPON_PMODEL)
precache_sound(sound_chispa1)
precache_sound(sound_chispa2)
precache_sound(sound_chispa3)
precache_sound(sound_chispa4)
m_beamSpr = precache_model("sprites/laserbeam.spr")
}
public item_selected(id)
{
if(g_p90_electro[id])
client_print(id, print_chat, "[BB-CHILE] Ya posees esta arma")
else
{
g_p90_electro[id] = true
fm_give_item(id, weap_name)
give_item(id, "ammo_buckshot")
give_item(id, "ammo_buckshot")
give_item(id, "ammo_buckshot")
give_item(id, "ammo_buckshot")
}
}
public fw_PlayerSpawn_Post(id)
{
if(!is_user_alive(id))
return;
remove_task(id+TASK_ELECTRO)
g_p90_electro[id] = false
var[id][ELEC_DURACION] = 0
}
stock get_weapon_ent_owner(ent)
{
if (pev_valid(ent) != 2)
return -1;
return get_pdata_cbase(ent, 41, 4);
}
public fw_ItemDeploy_Post(weapon_ent)
{
static owner
owner = get_pdata_cbase(weapon_ent, 41, 4)
static weaponid
weaponid = cs_get_weapon_id(weapon_ent)
if(weaponid == CSW_ID && g_p90_electro[owner])
{
set_pev(owner, pev_viewmodel2, WEAPON_VMODEL)
set_pev(owner, pev_weaponmodel2, WEAPON_PMODEL)
}
}
public fw_TakeDamage_electrical(victim, inflictor, attacker, Float:damage)
{
if (victim != attacker && is_user_connected(attacker))
{
if(get_user_weapon(attacker) == CSW_ID )
{
if(g_p90_electro[attacker])
{
SetHamParamFloat(4, damage * 5.0 )
var[victim][ELEC_DURACION] = 20
if(task_exists(victim+TASK_ELECTRO))
return;
set_task(0.1, "electro_damage", victim+TASK_ELECTRO, _, _, "b")
}
}
}
}
public TraceAttack(attacker)
{
new clip,ammo
new wpnid = get_user_weapon(attacker,clip,ammo)
new pteam[16]
if (!is_user_alive(attacker) && !is_user_connected(attacker))
return
get_user_team(attacker, pteam, 15)
new vec1[3], vec2[3]
get_user_origin(attacker, vec1, 1)
get_user_origin(attacker, vec2, 4)
new iEndOrigin[3]
get_user_origin(attacker, iEndOrigin, 4)
if ((var[attacker][MUNICIONES] > clip) && (wpnid == CSW_ID) && g_p90_electro[attacker])
{
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_ELIGHT)
write_short(attacker | 0x1000)
write_coord(vec1[0])
write_coord(vec1[1])
write_coord(vec1[2])
write_coord(15)
write_byte(0)
write_byte(128)
write_byte(255)
write_byte(1)
write_coord(0)
message_end()
message_begin(MSG_ALL, SVC_TEMPENTITY, iEndOrigin)
write_byte(TE_DLIGHT) // TE id
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_byte(12) // radius
write_byte(0) // r
write_byte(128) // g
write_byte(255) // b
write_byte(10) // life
write_byte(100) // decay rate
message_end()
switch(random_num(0, 3))
{
case 0: emit_sound(attacker, CHAN_VOICE, sound_chispa1, 1.0, ATTN_NORM, 0, PITCH_NORM)
case 1: emit_sound(attacker, CHAN_VOICE, sound_chispa2, 1.0, ATTN_NORM, 0, PITCH_NORM)
case 2: emit_sound(attacker, CHAN_VOICE, sound_chispa3, 1.0, ATTN_NORM, 0, PITCH_NORM)
case 3: emit_sound(attacker, CHAN_VOICE, sound_chispa4, 1.0, ATTN_NORM, 0, PITCH_NORM)
}
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short( m_beamSpr )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(1) // life
write_byte(7) // width
write_byte(10) // noise
write_byte( 128 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // brightness
write_byte( 128 ) // speed
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short( m_beamSpr )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(1) // life
write_byte(14) // width
write_byte(8) // noise
write_byte( 0 ) // r, g, b
write_byte( 128 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // brightness
write_byte( 128 ) // speed
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short( m_beamSpr )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(1) // life
write_byte(2) // width
write_byte(14) // noise
write_byte( 0 ) // r, g, b
write_byte( 0 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // brightness
write_byte( 128 ) // speed
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short( m_beamSpr )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(1) // life
write_byte(2) // width
write_byte(14) // noise
write_byte( 0 ) // r, g, b
write_byte( 0 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // brightness
write_byte( 128 ) // speed
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(attacker | 0x1000)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short( m_beamSpr )
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(1) // life
write_byte(2) // width
write_byte(14) // noise
write_byte( 0 ) // r, g, b
write_byte( 0 ) // r, g, b
write_byte( 255 ) // r, g, b
write_byte( 255 ) // brightness
write_byte( 128 ) // speed
message_end()
}
var[attacker][MUNICIONES] = clip
//return HAM_IGNORED
}
public ev_RoundStart()
{
new id
for (id = 1; id <= g_iMaxPlayers; id++)
{
g_p90_electro[id] = false
var[id][ELEC_DURACION] = 0
remove_task(id+TASK_ELECTRO)
}
}
public electro_damage(taskid)
{
static origin[3], flags
get_user_origin(ID_ELECTRO, origin)
flags = pev(ID_ELECTRO, pev_flags)
if((flags & FL_INWATER) || var[ID_ELECTRO][ELEC_DURACION] < 1)
{
remove_task(taskid);
return;
}
if (is_user_alive(ID_ELECTRO))
{
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_DLIGHT)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_byte(20)
write_byte(64)
write_byte(64)
write_byte(0)
write_byte(1)
write_byte(0)
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(origin[0]+random_num(-10, 10))
write_coord(origin[1]+random_num(-10, 10))
write_coord(origin[2]+random_num(-40, 40))
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(origin[0]+random_num(-10, 10))
write_coord(origin[1]+random_num(-10, 10))
write_coord(origin[2]+random_num(-40, 40))
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(origin[0]+random_num(-10, 10))
write_coord(origin[1]+random_num(-10, 10))
write_coord(origin[2]+random_num(-40, 40))
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(origin[0]+random_num(-10, 10))
write_coord(origin[1]+random_num(-10, 10))
write_coord(origin[2]+random_num(-40, 40))
message_end()
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_SPARKS)
write_coord(origin[0]+random_num(-10, 10))
write_coord(origin[1]+random_num(-10, 10))
write_coord(origin[2]+random_num(-40, 40))
message_end()
}
var[ID_ELECTRO][ELEC_DURACION]--
}
stock fm_give_item(id, const item[])
{
static ent
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent)) return;
static Float:originF[3]
pev(id, pev_origin, originF)
set_pev(ent, pev_origin, originF)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)
static save
save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, id)
if (pev(ent, pev_solid) != save)
return;
engfunc(EngFunc_RemoveEntity, ent)
}
Sistema de Logros v2.0 + Guardado
Clases de humanos con/sin niveles
Evitar que bloqueen salida de zombies (Basebuilder)
Super FYH + Bonus [normal & zp]
Menu de comandos optimizados )?
[polvo]
Casi 8 años retirado... puliendome de apoco denuevo...
[/polvo]
Clases de humanos con/sin niveles
Evitar que bloqueen salida de zombies (Basebuilder)
Super FYH + Bonus [normal & zp]
Menu de comandos optimizados )?
[polvo]
Casi 8 años retirado... puliendome de apoco denuevo...
[/polvo]