Enviar respuesta 
[ZP] Tomar arma del suelo
Autor Mensaje
iZeus Sin conexión
Miembro Junior


Mensajes: 37
Registro en: Aug 2014
Reputación: 0
Mensaje: #1
[ZP] Tomar arma del suelo
Este code es para guardar impulse de un arma cuando es botada al suelo y pueda recogerlo alguien mas.

Code:
Código PHP:
new const g_sWeaponsAvailable[][] = 
{
    
// Pistolas
    
"weapon_glock18",
    
"weapon_usp",
    
"weapon_p228"
    
"weapon_deagle"
    
"weapon_fiveseven",
    
"weapon_elite",
    
    
// Escopetas
    
"weapon_m3",
    
"weapon_xm1014",
    
    
// SubFusiles
    
"weapon_tmp",
    
"weapon_mac10",
    
"weapon_mp5navy",
    
"weapon_ump45",
    
"weapon_p90",
    
    
// Fusiles
    
"weapon_galil",
    
"weapon_famas",
    
"weapon_m4a1",
    
"weapon_ak47",
    
"weapon_sg552",
    
"weapon_aug",
    
    
// FrancoTiradores
    
"weapon_scout",
    
"weapon_awp",
    
"weapon_sg550",
    
"weapon_g3sg1",
    
    
// MachineGuns
    
"weapon_m249"
}

public 
plugin_init()
{
    for(new 
sizeof g_sWeaponsAvailablei++)
        
RegisterHam(Ham_Item_AddToPlayerg_sWeaponsAvailable[i], "fw_Item_AddToPlayer")
}

public 
fw_SetModel(entity, const model[])
{
    
// We don't care
    
if (strlen(model) < 8)
        return 
FMRES_IGNORED;
    
    
// Get entity's classname
    
static classname[10], iStoredGalilIDiStoredGalilID1
    pev
(entitypev_classnameclassnamecharsmax(classname))
        
    static 
id;id pev(entitypev_owner)
        
    
// Check if it's a weapon box
    
if (equal(classname"weaponbox"))
    {    
        if(
g_arma_prim[id] > 0)
        {
            if(!
equali(modelmenu_death[g_arma_prim[id]][gwModeloold]))
                return 
FMRES_IGNORED
                
            iStoredGalilID 
fm_find_ent_by_owner(-1menu_death[g_arma_prim[id]][item_csname], entity)
            
entity_set_model(entitymenu_death[g_arma_prim[id]][gwModelo])
            
entity_set_int(iStoredGalilIDEV_INT_impulsemenu_death[g_arma_prim[id]][i_WeaponImpulseIndex])
            
g_arma_prim[id] = 0
            
            
return FMRES_SUPERCEDE
        
}
        
        if(
g_arma_sec[id] > 0)
        {
            if(!
equali(modelmenu_death2[g_arma_sec[id]][gwModeloold]))
                return 
FMRES_IGNORED;

            
iStoredGalilID1 fm_find_ent_by_owner(-1menu_death2[g_arma_sec[id]][item_csname], entity)    
            
entity_set_model(entitymenu_death2[g_arma_sec[id]][gwModelo])
            
entity_set_int(iStoredGalilID1EV_INT_impulsemenu_death2[g_arma_sec[id]][i_WeaponImpulseIndex])
            
g_arma_sec[id] = 0
            
            
return FMRES_SUPERCEDE
        
}
        
        return 
FMRES_IGNORED;
    }
    
    
// Narrow down our matches a bit
    
if (model[7] != 'w' || model[8] != '_')
        return 
FMRES_IGNORED;
    
    
// Get damage time of grenade
    
static Float:dmgtime
    pev
(entitypev_dmgtimedmgtime)
    
    
// Grenade not yet thrown
    
if (dmgtime == 0.0)
        return 
FMRES_IGNORED;
    
    
// Get whether grenade's owner is a zombie
    
if (g_zombie[pev(entitypev_owner)])
    {
        if (
model[9] == 'h' && model[10] == 'e' && get_pcvar_num(cvar_extrainfbomb)) // Infection Bomb
        
{
            
// Give it a glow
            
fm_set_rendering(entitykRenderFxGlowShell02500kRenderNormal10);
            
            
// And a colored trail
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(TE_BEAMFOLLOW// TE id
            
write_short(entity// entity
            
write_short(g_trailSpr// sprite
            
write_byte(3// life
            
write_byte(3// width
            
write_byte(0// r
            
write_byte(250// g
            
write_byte(0// b
            
write_byte(200// brightness
            
message_end()
            
            
// Set grenade type on the thrown grenade entity
            
set_pev(entityPEV_NADE_TYPENADE_TYPE_INFECTION)
            
set_pev(entitypev_dmgtime99999999.0
            
            return 
FMRES_SUPERCEDE
        
}
    }
    else if (
model[9] == 'h' && model[10] == 'e' && get_pcvar_num(cvar_firegrenades)) // Napalm Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShell20000kRenderNormal10);
        
        
// And a colored trail
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_BEAMFOLLOW// TE id
        
write_short(entity// entity
        
write_short(g_trailSpr// sprite
        
write_byte(3// life
        
write_byte(3// width
        
write_byte(200// r
        
write_byte(0// g
        
write_byte(0// b
        
write_byte(200// brightness
        
message_end()
        
        
entity_set_model(entitymodel_wgrenade_fire)
        
        
// Set grenade type on the thrown grenade entity
        
set_pev(entityPEV_NADE_TYPENADE_TYPE_NAPALM)
        
set_pev(entitypev_dmgtime99999999.0
        
        return 
FMRES_SUPERCEDE
    
}
    else if (
model[9] == 'f' && model[10] == 'l' && get_pcvar_num(cvar_frostgrenades)) // Frost Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShell0100200kRenderNormal10);
        
        
// And a colored trail
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_BEAMFOLLOW// TE id
        
write_short(entity// entity
        
write_short(g_trailSpr// sprite
        
write_byte(3// life
        
write_byte(3// width
        
write_byte(0// r
        
write_byte(100// g
        
write_byte(200// b
        
write_byte(200// brightness
        
message_end()
        
        
entity_set_model(entitymodel_wgrenade_frost)
        
        
// Set grenade type on the thrown grenade entity
        
set_pev(entityPEV_NADE_TYPENADE_TYPE_FROST)
        
set_pev(entitypev_dmgtime99999999.0
        
        return 
FMRES_SUPERCEDE
    
}
    else if (
model[9] == 's' && model[10] == 'm' && get_pcvar_num(cvar_flaregrenades)) // Flare
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShell255255255kRenderNormal10);
        
set_pev(entitypev_effectsEF_LIGHT)
        
        
// Set grenade type on the thrown grenade entity
        
set_pev(entityPEV_NADE_TYPENADE_TYPE_FLARE)
        
set_pev(entitypev_dmgtime99999999.0
        
        return 
FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED;
}

public 
fw_Item_AddToPlayer(iWeaponid)
{
    if(!
pev_valid(iWeapon) || !is_user_connected(id) || !is_user_alive(id))
        return 
HAM_IGNORED
        
    
// Make sure that this is M79
    
for(new sizeof menu_deathi++)
    {
        if(
entity_get_int(iWeaponEV_INT_impulse) == menu_death[i][i_WeaponImpulseIndex])
        {
            
// Update
            
g_arma_prim[id] = i
            
            
// Reset weapon options
            
entity_set_int(iWeaponEV_INT_impulse0)
        }
    }
    
    for(new 
sizeof menu_death2i++)
    {
        if(
entity_get_int(iWeaponEV_INT_impulse) == menu_death2[i][i_WeaponImpulseIndex])
        {
            
// Update
            
g_arma_sec[id] = i
            
            
// Reset weapon options
            
entity_set_int(iWeaponEV_INT_impulse0)
        }
    }
    
    return 
HAM_IGNORED

(Este mensaje fue modificado por última vez en: 15/08/2019 04:08 PM por iZeus.)
15/08/2019 03:24 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


Plugin developer Trebol purpura 1k
Mensajes: 1,149
Registro en: Oct 2013
Reputación: 17
Mensaje: #2
RE: [ZP] Tomar arma del suelo
y es un aporte o que onda?

futuro ingeniero agrónomo.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

volví a vender plugins, contactame
15/08/2019 07:31 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
iZeus Sin conexión
Miembro Junior


Mensajes: 37
Registro en: Aug 2014
Reputación: 0
Mensaje: #3
RE: [ZP] Tomar arma del suelo
lo siento, no me explique bien, este code lo idee yo para agarrar las armas del suelo con el menu de armas por niveles de blackfur, el problema es que si yo boto la pistola, el impulse no se guarda, es decir, entrega una pistola normal y corriente (sin skin ni nada).
15/08/2019 10:20 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


Plugin developer Trebol purpura 1k
Mensajes: 1,149
Registro en: Oct 2013
Reputación: 17
Mensaje: #4
RE: [ZP] Tomar arma del suelo
iStoredGalilID = fm_find_ent_by_owner(-1, menu_death[g_arma_prim[id]][item_csname], entity)

por qué usas iStoredGalilID y no entity?

futuro ingeniero agrónomo.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

volví a vender plugins, contactame
15/08/2019 10:52 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
iZeus Sin conexión
Miembro Junior


Mensajes: 37
Registro en: Aug 2014
Reputación: 0
Mensaje: #5
RE: [ZP] Tomar arma del suelo
Me guie por un extra item:

Código PHP:
// Added by Shidla
public fw_SetModel(entitymodel[])
{
    
// Entity is not valid
    
if(!is_valid_ent(entity))
        return 
FMRES_IGNORED;
    
    
// Entity model is not w_xm1014
    
if(!equal(model"models/w_mp5.mdl")) 
        return 
FMRES_IGNORED;
    
    
// Get classname
    
static szClassName[33]
    
entity_get_string(entityEV_SZ_classnameszClassNamecharsmax(szClassName))
    
    
// Not a Weapon box
    
if(!equal(szClassName"weaponbox"))
        return 
FMRES_IGNORED
    
    
// Some vars
    
static iOwneriStoredGalilID
    
    
// Get owner
    
iOwner entity_get_edict(entityEV_ENT_owner)
    
    
// Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
    
iStoredGalilID find_ent_by_owner(ENG_NULLENT"weapon_mp5navy"entity)
    
    
// Entity classname is weaponbox, and galil has founded
    
if(g_Hasarma[iOwner] && is_valid_ent(iStoredGalilID))
    {
        
// Setting weapon options
        
entity_set_int(iStoredGalilIDEV_INT_WEAPONKEYGARMA_WEAPONKEY)
        
        
// Reset user vars
        
g_Hasarma[iOwner] = false
        
        
// Set weaponbox new model
        
entity_set_model(entityARMA_W_MODEL)
        
        return 
FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED

(Este mensaje fue modificado por última vez en: 15/08/2019 11:12 PM por iZeus.)
15/08/2019 11:12 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


Plugin developer Trebol purpura 1k
Mensajes: 1,149
Registro en: Oct 2013
Reputación: 17
Mensaje: #6
RE: [ZP] Tomar arma del suelo
ahi me acorde, iWeapon es el CSW_ asi que esta bien lo de FM_SETMODEL, ahora item_csname corresponde a los string "weapon_?"

logs no tenes?

futuro ingeniero agrónomo.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

volví a vender plugins, contactame
16/08/2019 01:20 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
iZeus Sin conexión
Miembro Junior


Mensajes: 37
Registro en: Aug 2014
Reputación: 0
Mensaje: #7
RE: [ZP] Tomar arma del suelo
no hay logs, sobre lo de item_csname:

Código PHP:
enum _:menu_dm 

    
item_name_v2[90], item_iditem_csname[90], item_levelgvModelo[90], gpModelo[90], 
    
gwModelo[90], i_WeaponImpulseIndexgwModeloold[90], Float:item_damage,
    
redgreenblue


new const 
menu_death[][menu_dm] = 

    { 
"Golden AK-47"CSW_AK47"weapon_ak47"20 "models/zombie_plague/v_golden_ak47.mdl""models/zombie_plague/p_golden_ak47.mdl""models/zombie_plague/w_golden_ak47.mdl"132911"models/w_ak47.mdl"1.5255255}

(Este mensaje fue modificado por última vez en: 16/08/2019 04:32 PM por iZeus.)
16/08/2019 04:32 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
INTIFADA Sin conexión
Miembro Junior


Mensajes: 21
Registro en: Jun 2019
Reputación: 1
Mensaje: #8
RE: [ZP] Tomar arma del suelo
El problema está en que tenés que guardar el tipo de arma en la propia entidad que se crea cuando vos compras el arma, ya que si lo haces mediante variables propias de los jugadores (hasta que no la tires al suelo va bien) pero cuando la tiras no tenes forma de comprobar a que index de tus armas corresponde.

Por eso es que guardar el tipo de arma en la propia entidad es una solución bastante práctica, podrías hacer algo asi:

Definis a cada una de tus armas un identificador
Código PHP:
#define WEAPON_ID_SPECIAL 1337 

Cuando compras el arma mediante el menú, modificas la entidad que te devuelve el give_item(id, "weapon_x")
Código PHP:
entity_set_int(iEntEV_INT_iuser4WEAPON_ID_SPECIAL); 

En el touch del weapon, tendrias que hacer lo siguiente
Código PHP:
// Registras el touch en tu plugin_init
register_touch("weaponbox""player""touch__WeaponBox");

// En la función touch__WeaponBox
// Si devuelve true, es que el arma que juntaste del piso corresponde a una de tus armas en tu array de armas
if(entity_get_int(iEntEV_INT_iuser4) == WEAPON_ID_SPECIAL

Al hacer esto, sabes que tipo de arma tocaste, y podes setearle alguna variable en 1 que tiene tal arma especial, para reemplazar su skin, modificar daño del arma, etc.

Esta es la única forma que tenes para poder lograr lo que queres, la otra es bloquear que se puedan dropear las armas y te ahorras todo este problema.
Ayer 04:14 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
iZeus Sin conexión
Miembro Junior


Mensajes: 37
Registro en: Aug 2014
Reputación: 0
Mensaje: #9
RE: [ZP] Tomar arma del suelo
La verdad es que según yo, el error esta en fw_SetModel, al momento de tirar el arma.

Puesto que si yo escojo el ak gold y la deagle gold, y boto solamente la deagle gold al suelo, la deagle aparece con model normal en el suelo, pero si la recojo, es una deagle gold con sus características de model, daño, etc.

Algo esta mal ahí pero no se que Triste

EDIT (Lo tengo solucionado, al final lo deje así, si hay alguna linea tonta favor de decirlo):
Código PHP:
public fw_SetModel(entity, const model[])
{
    
// We don't care
    
if (strlen(model) < 8)
        return 
FMRES_IGNORED;
    
    new 
iStoredGalilIDiStoredGalilID1
    
    
static className[32]
    
pev(entitypev_classnameclassNamesizeof(className))

    static 
iOwner
    iOwner 
pev(entitypev_owner)
    
    
// Check if it's a weapon box
    
if (equal(className"weaponbox"))
    {        
        if (!
is_valid_ent(entity))
            return 
FMRES_IGNORED;    
            
        if (
equal(modelmenu_death[g_arma_prim[iOwner]][gwModeloold]))
        {
            
iStoredGalilID fm_find_ent_by_owner(-1menu_death[g_arma_prim[iOwner]][item_csname], entity)
            
set_pev(iStoredGalilIDpev_impulsemenu_death[g_arma_prim[iOwner]][i_WeaponImpulseIndex])
            
entity_set_model(entitymenu_death[g_arma_prim[iOwner]][gwModelo])
            
g_arma_prim[iOwner] = 0
            
            
return FMRES_SUPERCEDE
        
}
        
        if (
equal(modelmenu_death2[g_arma_sec[iOwner]][gwModeloold]))
        {    
            
iStoredGalilID1 fm_find_ent_by_owner(-1menu_death2[g_arma_sec[iOwner]][item_csname], entity)
            
set_pev(iStoredGalilID1pev_impulsemenu_death2[g_arma_sec[iOwner]][i_WeaponImpulseIndex])
            
entity_set_model(entitymenu_death2[g_arma_sec[iOwner]][gwModelo])
            
g_arma_sec[iOwner] = 0
            
            
return FMRES_SUPERCEDE
        
}
    }
    
    
// Narrow down our matches a bit
    
if (model[7] != 'w' || model[8] != '_')
        return 
FMRES_IGNORED;
    
    
// Get damage time of grenade
    
static Float:dmgtime
    pev
(entitypev_dmgtimedmgtime)
    
    
// Grenade not yet thrown
    
if (dmgtime == 0.0)
        return 
FMRES_IGNORED;
    
    
// Get whether grenade's owner is a zombie
    
if (g_zombie[pev(entitypev_owner)])
    {
        if (
model[9] == 'h' && model[10] == 'e' && get_pcvar_num(cvar_extrainfbomb)) // Infection Bomb
        
{
            
// Give it a glow
            
fm_set_rendering(entitykRenderFxGlowShell02500kRenderNormal10);
            
            
// And a colored trail
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(TE_BEAMFOLLOW// TE id
            
write_short(entity// entity
            
write_short(g_trailSpr// sprite
            
write_byte(3// life
            
write_byte(3// width
            
write_byte(0// r
            
write_byte(250// g
            
write_byte(0// b
            
write_byte(200// brightness
            
message_end()
            
            
// Set grenade type on the thrown grenade entity
            
set_pev(entityPEV_NADE_TYPENADE_TYPE_INFECTION)
            
set_pev(entitypev_dmgtime99999999.0
            
            return 
FMRES_SUPERCEDE
        
}
    }
    else if (
model[9] == 'h' && model[10] == 'e' && get_pcvar_num(cvar_firegrenades)) // Napalm Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShell20000kRenderNormal10);
        
        
// And a colored trail
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_BEAMFOLLOW// TE id
        
write_short(entity// entity
        
write_short(g_trailSpr// sprite
        
write_byte(3// life
        
write_byte(3// width
        
write_byte(200// r
        
write_byte(0// g
        
write_byte(0// b
        
write_byte(200// brightness
        
message_end()
        
        
entity_set_model(entitymodel_wgrenade_fire)
        
        
// Set grenade type on the thrown grenade entity
        
set_pev(entityPEV_NADE_TYPENADE_TYPE_NAPALM)
        
set_pev(entitypev_dmgtime99999999.0
        
        return 
FMRES_SUPERCEDE
    
}
    else if (
model[9] == 'f' && model[10] == 'l' && get_pcvar_num(cvar_frostgrenades)) // Frost Grenade
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShell0100200kRenderNormal10);
        
        
// And a colored trail
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(TE_BEAMFOLLOW// TE id
        
write_short(entity// entity
        
write_short(g_trailSpr// sprite
        
write_byte(3// life
        
write_byte(3// width
        
write_byte(0// r
        
write_byte(100// g
        
write_byte(200// b
        
write_byte(200// brightness
        
message_end()
        
        
entity_set_model(entitymodel_wgrenade_frost)
        
        
// Set grenade type on the thrown grenade entity
        
set_pev(entityPEV_NADE_TYPENADE_TYPE_FROST)
        
set_pev(entitypev_dmgtime99999999.0
        
        return 
FMRES_SUPERCEDE
    
}
    else if (
model[9] == 's' && model[10] == 'm' && get_pcvar_num(cvar_flaregrenades)) // Flare
    
{
        
// Give it a glow
        
fm_set_rendering(entitykRenderFxGlowShell255255255kRenderNormal10);
        
set_pev(entitypev_effectsEF_LIGHT)
        
        
// Set grenade type on the thrown grenade entity
        
set_pev(entityPEV_NADE_TYPENADE_TYPE_FLARE)
        
set_pev(entitypev_dmgtime99999999.0
        
        return 
FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED;
}

public 
fw_Item_AddToPlayer(iWeaponid)
{    
    new 
iSecretCode pev(iWeaponpev_impulse)
    
    for(new 
sizeof menu_deathi++)
    {
        if(
iSecretCode == menu_death[i][i_WeaponImpulseIndex])
        {
            
g_arma_prim[id] = i
            set_pev
(iWeaponpev_impulse0)
            return 
HAM_HANDLED
        
}
    }
    
    for(new 
sizeof menu_death2i++)
    {
        if(
iSecretCode == menu_death2[i][i_WeaponImpulseIndex])
        {
            
g_arma_sec[id] = i
            set_pev
(iWeaponpev_impulse0)
            return 
HAM_HANDLED
        
}
    }
    
    return 
HAM_IGNORED


Gracias INTIFADA y roccoxx
(Este mensaje fue modificado por última vez en: Ayer 05:41 PM por iZeus.)
Ayer 05:29 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Nelo Sin conexión
Miembro Destacado


Mensajes: 800
Registro en: May 2015
Reputación: 7
Mensaje: #10
RE: [ZP] Tomar arma del suelo
al tirar la deagle seguro la variable te queda en 1, si vos la tiras y otro jugador la agarra probablemente tenga el arma normal, si lo que estas tratando de hacer es que al tirar el arma otro pueda agarrarla, tendrias que editar el plugin base del arma misma

Ayer 05:42 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS