[ZP] Problema setear variable al tocar
#26
Era previsible, dropeas y pickeas en menos de 0.1 segundo. El task desp del drop te limpia g_arma_prim[id] aunqe ya hayas pickeado otra arma.

Modifica el touch para qe remueva ese task ( remove_task(id) ).

Y de paso te comento qe hay mejores eventos qe el touch para detectar el pickup de un arma, el touch se va a ejecutar varias veces por segundo mientras estes parado sobre un arma aunqe no la puedas juntar, deberias buscar otro evento mas adecuado qe se ejecute solo cuando levantas el arma Crab
Whatdone
Responder
#27
(30/07/2014, 03:10 PM)NikKOo31 escribió: Era previsible, dropeas y pickeas en menos de 0.1 segundo. El task desp del drop te limpia g_arma_prim[id] aunqe ya hayas pickeado otra arma.

Modifica el touch para qe remueva ese task ( remove_task(id) ).

Y de paso te comento qe hay mejores eventos qe el touch para detectar el pickup de un arma, el touch se va a ejecutar varias veces por segundo mientras estes parado sobre un arma aunqe no la puedas juntar, deberias buscar otro evento mas adecuado qe se ejecute solo cuando levantas el arma Crab

EDIT: Ya lo solucione Sonrisa!

Gracias alan, y nico, capos Gran sonrisa
Responder
#28
Proba esto:
Le agregué un delay de 1 segundo para que no pueda agarrar el arma para evitar el bug
Código PHP:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|
(
1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|
(
1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)

new 
g_arma_prim[33], Float:g_flLastDrop[33]

public 
plugin_init()
{
    
register_clcmd("say asd""clcmd_asd")
    
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
    
    
RegisterHam(Ham_Touch"weaponbox""fw_TouchWeapon")
    
    
register_forward(FM_SetModel"fw_SetModel")
}

public 
clcmd_asd(id)
{
    
client_print(id3"g_arma_prim[id] == %d"g_arma_prim[id])
}

public 
fw_PlayerSpawn_Post(id)
{
    if(!
is_user_alive(id))
        return 
HAM_IGNORED
    
    client_print
(id3"g_arma_prim[id] == %d"g_arma_prim[id] = random(30))
    
    return 
HAM_IGNORED
}

public 
fw_TouchWeapon(weaponid)
{
    if(!
is_user_connected(id))
        return 
HAM_IGNORED
    
    
if(get_gametime() - g_flLastDrop[id] < 1.0)
        return 
HAM_SUPERCEDE
    
    
static iNum;iNum pev(weaponpev_iuser3)
    
    if(
iNum && !cs_get_user_hasprim(id))
    {
        
g_arma_prim[id] = iNum
        client_print
(13"IUSER3: %d"iNum)
    }
    
    return 
HAM_IGNORED
}

public 
fw_SetModel(entity, const model[])
{
    
// Get entity's classname
    
static classname[10]
    
pev(entitypev_classnameclassnamecharsmax(classname))
    
    
// Check if it's a weapon box
    
if (equal(classname"weaponbox"))
    {
        static 
id;id pev(entitypev_owner)
        
        if((
1<<get_user_weapon(id)) & PRIMARY_WEAPONS_BIT_SUM && g_arma_prim[id] > 0)
        {
            
set_pev(entitypev_iuser3g_arma_prim[id])
            
            
g_arma_prim[id] = 0
            
            g_flLastDrop
[id] = get_gametime()
        }
    }


EDIT:
Si lo solucionaste, mostra como te quedó para que el que busque, encuentre solución

Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
Responder
#29
(30/07/2014, 04:33 PM)alan_el_more escribió: Proba esto:
Le agregué un delay de 1 segundo para que no pueda agarrar el arma para evitar el bug
Código PHP:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|
(
1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|
(
1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)

new 
g_arma_prim[33], Float:g_flLastDrop[33]

public 
plugin_init()
{
    
register_clcmd("say asd""clcmd_asd")
    
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn_Post"1)
    
    
RegisterHam(Ham_Touch"weaponbox""fw_TouchWeapon")
    
    
register_forward(FM_SetModel"fw_SetModel")
}

public 
clcmd_asd(id)
{
    
client_print(id3"g_arma_prim[id] == %d"g_arma_prim[id])
}

public 
fw_PlayerSpawn_Post(id)
{
    if(!
is_user_alive(id))
        return 
HAM_IGNORED
    
    client_print
(id3"g_arma_prim[id] == %d"g_arma_prim[id] = random(30))
    
    return 
HAM_IGNORED
}

public 
fw_TouchWeapon(weaponid)
{
    if(!
is_user_connected(id))
        return 
HAM_IGNORED
    
    
if(get_gametime() - g_flLastDrop[id] < 1.0)
        return 
HAM_SUPERCEDE
    
    
static iNum;iNum pev(weaponpev_iuser3)
    
    if(
iNum && !cs_get_user_hasprim(id))
    {
        
g_arma_prim[id] = iNum
        client_print
(13"IUSER3: %d"iNum)
    }
    
    return 
HAM_IGNORED
}

public 
fw_SetModel(entity, const model[])
{
    
// Get entity's classname
    
static classname[10]
    
pev(entitypev_classnameclassnamecharsmax(classname))
    
    
// Check if it's a weapon box
    
if (equal(classname"weaponbox"))
    {
        static 
id;id pev(entitypev_owner)
        
        if((
1<<get_user_weapon(id)) & PRIMARY_WEAPONS_BIT_SUM && g_arma_prim[id] > 0)
        {
            
set_pev(entitypev_iuser3g_arma_prim[id])
            
            
g_arma_prim[id] = 0
            
            g_flLastDrop
[id] = get_gametime()
        }
    }


EDIT:
Si lo solucionaste, mostra como te quedó para que el que busque, encuentre solución

Yo hice algo asi alan Lengua jajajja

Código PHP:
public clcmd_drop(id)
{
    
// Survivor should stick with its weapon
    
if (g_survivor[id])
        return 
PLUGIN_HANDLED;
        
    
/*if((1<<get_user_weapon(id)) & PRIMARY_WEAPONS_BIT_SUM)
        g_arma_prim[id] = 0*/
        
    
if((1<<get_user_weapon(id)) & PRIMARY_WEAPONS_BIT_SUM)
    {
        
set_task(0.1"Clear"id)
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
Clear(id)
{
    
set_task(0.1"Clear2"id)
    
g_arma_prim[id] = 0
    client_print
(13"Clear() 0")
}

public 
Clear2(id)
{
    
flag_unset(g_dropid)
    
client_print(13"ClearDrop() %d"flag_get(g_dropid))
}

public 
fw_TouchWeapon(weaponid)
{
    
// Not a player
    
if (!is_user_valid_connected(id))
        return 
HAM_IGNORED;
    
    
// Dont pickup weapons if zombie or survivor (+PODBot MM fix)
    
if (g_zombie[id] || g_survivor[id])
        return 
HAM_SUPERCEDE;
    
    if(
flag_get(g_dropid))
        return 
HAM_SUPERCEDE;
    
    static 
iNum;iNum pev(weaponpev_iuser4)
    
    if(
iNum 0)
    {
        
flag_set(g_dropid)
        
g_arma_prim[id] = iNum
        client_print
(13"Set() %d"g_arma_prim[id])
    }
    
    return 
HAM_IGNORED;


Ahora pruebo el que pasaste e.e

EDIT: Anda re bien el ultimo que pasaste, gracias!
Responder
#30
Use la ultima forma que dejo alan pero tengo un problema:

Supongamos que yo tengo un m4a1 super, termina la ronda y toca elegir arma nuevamente, la selecciono y aparece el model de la nueva, cambio de arma y queda la normal o.O
[Imagen: 2wfvha10.gif]
Responder
#31
(31/07/2014, 03:45 PM)exodisto escribió: Use la ultima forma que dejo alan pero tengo un problema:

Supongamos que yo tengo un m4a1 super, termina la ronda y toca elegir arma nuevamente, la selecciono y aparece el model de la nueva, cambio de arma y queda la normal o.O

Mostra todo el código. Incluyendo donde cambias el model y cada vez que le seteas un valor a g_arma_prim

Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
Responder
#32
Me termino de dar cuenta que el problema ocurre cada vez que empiezo una nueva ronda con un arma primaria o secundaria de la anterior, elijo una nueva y sale la normal, pero si comienzo la nueva ronda y estoy desarmado, al elegir el arma la selecciona bien...
[Imagen: 2wfvha10.gif]
Responder
#33
(31/07/2014, 09:16 PM)exodisto escribió: Me termino de dar cuenta que el problema ocurre cada vez que empiezo una nueva ronda con un arma primaria o secundaria de la anterior, elijo una nueva y sale la normal, pero si comienzo la nueva ronda y estoy desarmado, al elegir el arma la selecciona bien...

(31/07/2014, 03:52 PM)alan_el_more escribió:
(31/07/2014, 03:45 PM)exodisto escribió: Use la ultima forma que dejo alan pero tengo un problema:

Supongamos que yo tengo un m4a1 super, termina la ronda y toca elegir arma nuevamente, la selecciono y aparece el model de la nueva, cambio de arma y queda la normal o.O

Mostra todo el código. Incluyendo donde cambias el model y cada vez que le seteas un valor a g_arma_prim
Responder
#34
(31/07/2014, 09:16 PM)exodisto escribió: Me termino de dar cuenta que el problema ocurre cada vez que empiezo una nueva ronda con un arma primaria o secundaria de la anterior, elijo una nueva y sale la normal, pero si comienzo la nueva ronda y estoy desarmado, al elegir el arma la selecciona bien...

No entendí si lo solucionaste o no

Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
Responder
#35
(31/07/2014, 09:30 PM)alan_el_more escribió:
(31/07/2014, 09:16 PM)exodisto escribió: Me termino de dar cuenta que el problema ocurre cada vez que empiezo una nueva ronda con un arma primaria o secundaria de la anterior, elijo una nueva y sale la normal, pero si comienzo la nueva ronda y estoy desarmado, al elegir el arma la selecciona bien...

No entendí si lo solucionaste o no

No lo pude solucionar, estoy tratando hace rato, pasa que si yo selecciono un arma primaria (teniendo otra arma primaria en mano) aparece la normal no se porque pasará esto...
[Imagen: 2wfvha10.gif]
Responder
#36
(02/08/2014, 08:45 AM)exodisto escribió:
(31/07/2014, 09:30 PM)alan_el_more escribió:
(31/07/2014, 09:16 PM)exodisto escribió: Me termino de dar cuenta que el problema ocurre cada vez que empiezo una nueva ronda con un arma primaria o secundaria de la anterior, elijo una nueva y sale la normal, pero si comienzo la nueva ronda y estoy desarmado, al elegir el arma la selecciona bien...

No entendí si lo solucionaste o no

No lo pude solucionar, estoy tratando hace rato, pasa que si yo selecciono un arma primaria (teniendo otra arma primaria en mano) aparece la normal no se porque pasará esto...

Si posteas el codigo entero como dijo alan, capaz te podamos ayudar ._.
Responder
#37
Es que los lugares en los que pongo la variable "g_arm_prim" no creo que influyan en algo ya que son solamente los del código de blackfur y otros que puse para que se ejecuten ciertos efectos en armas pero nada que este relacionado.

EDIT:
Solucionado, tenía que ver con que yo seteaba el número de la nueva arma seleccionada a la que después iba a dropear, lo que hice simplemente es cambiar el orden, primero dropear la que tenía y luego setear la nueva...

Código PHP:
g_arma_prim[id] = item // guardamos el item en esta variable 
        
g_save_weapons[id][1] = item // guardamos el item en este variable 
        
drop_weapons(id 1// le botamos su arma primaria 
->
Código PHP:
drop_weapons(id 1// le botamos su arma primaria 
        
g_arma_prim[id] = item // guardamos el item en esta variable 
        
g_save_weapons[id][1] = item // guardamos el item en este variable 
Cosas que uno por ahí de descuidado (yo de ejemplo) no mira y caga todo el code.
[Imagen: 2wfvha10.gif]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)