Duda/Consulta Recoil y Speed de un arma GRACIAS!
#1
Código PHP:
#include <amxmodx>
#include <fakemeta> // detectar el evento, y manipulacion de offsets
#include <engine> // obtener el index de la ak-47
#include <xs> // uso de vectores.

// Con esta variable obtendremos el index de la forward FM_PrecacheEvent para despues en el init
// deje de ser llamada, ya que sera llamada en el Precache (antes del init, cuando empiesa el server
// despues de un cambio de mapa).
new g_iForwardIndex

// En esta variable se guardaran los maxPlayers del Server
new g_iMaxPlayers

// Aqui se guardara el index del evento en el cual la AK-47 es disparada
new g_iGunFireEventBitsum_Ak47

// Este es el nombre del evento cuando el arma dispara, el cual esta guardado en la carpeta events
new const g_szGunEvent_AK47[] = "events/ak47.sc"

// Estos son los offsets que se usaran con fakemeta para manipularlos.
const m_flNextPrimaryAttack 46 // siguente valor para el ataque primario
const m_flNextSecondaryAttack 47 // siguiente valor para el ataque segundario (sea zoom, o burst-fire, whatever)
const m_flTimeWeaponIdle 48 // delay del arma, actualmente al uso de la animacion idle, y cuando un arma termina de recargar.

// Precache
public plugin_precache() 
{
    
// Guardamos el ID y registramos la forward en el cual los eventos son pre-cacheados.
    
g_iForwardIndex register_forward(FM_PrecacheEvent"fw_PrecacheEvent_Post"1)
    
// PrecacheEvent Post.
}

// Cuando los eventos son pre-cacheados.
public fw_PrecacheEvent_Post(type, const szName[]) 
{
    
// El nombre del evento equivale al del ataque de la ak-47?
    
if (equal(szNameg_szGunEvent_AK47)) 
    {
        
// Guardamos el id del ataque en un bitsum. Por ende necesitamos obtener
        // el valor original del evento, para eso se usa "get_orig_retval" que solamente
        // funciona en forwards que son llamadas despues de lo real, osea, Post
        
g_iGunFireEventBitsum_Ak47 |= (1<<get_orig_retval())
        
        
// Devolviendo el valor con FMRES_HANDLED estamos diciendole al modulo 
        // que "hicimos algo".
        
return FMRES_HANDLED
    
}
    
    return 
FMRES_IGNORED
}

// Despues del init, cuando el mapa empiesa a ponerse de pie
public plugin_init() 
{
    
// info del plugin
    
register_plugin("Custom Fire-Rate for AK-47""1.0""meTaLiCroSS")
    
    
// Desactivamos la forward para que deje de ser llamada.
    
unregister_forward(FM_PrecacheEventg_iForwardIndex1)
    
    
// Registramos la forward en el cual "un evento" es llamado.
    
register_forward(FM_PlaybackEvent"fw_PlaybackEvent")
    
    
g_iMaxPlayers get_maxplayers()
}

// Vean atras :P
// flags = los flags del evento, si supiera se los diria
// invoker = la entidad que iso llamar el evento
// eventid = el index del evento
public fw_PlaybackEvent(flagsinvokereventid
{
    
// No es el evento del cual dispara la AK-47? (mediante bitsums)
    
if (!(g_iGunFireEventBitsum_Ak47 & (1<<eventid)))
        return 
FMRES_IGNORED
        
    
// El invocador no esta en el rango "1-32(by default)", osea, es un player?
    
if(!(<= invoker <= g_iMaxPlayers))
        return 
FMRES_IGNORED
        
    
// Aqui esta el evento en el cual es el arma disparada por un player, en este caso
    // la AK-47. Este evento es llamado "despues", osea, "post" al original, asi que
    // perfectamente podremos obtener los datos actuales del player.
    
    // Obtenemos el index de la AK el cual el user esta obteniendo, para eso usamos find_ent_by_owner
    // el cual busca una entidad en otra entidad con el classname indicado. en este caso es "weapon_ak47".
    
static iAK47_WeaponIndex
    iAK47_WeaponIndex 
find_ent_by_owner(-1"weapon_ak47"invoker)
    
    
// Ahora podemos perfectamente manipular el tiempo en el cual sea disparado.
    
set_pdata_float(iAK47_WeaponIndexm_flNextPrimaryAttack1.04)
    
set_pdata_float(iAK47_WeaponIndexm_flNextSecondaryAttack1.04)
    
set_pdata_float(iAK47_WeaponIndexm_flTimeWeaponIdle1.04)
    
// iAK47_WeaponIndex = el index de la entidad al cual modificaremos sus offsets
    // m_fl* = el nombre del offset o integer del offset, whatever
    // 1.0 = el valor en el cual sera el proximo ataque, en este caso la ak atacaria cada 1 segundo, perfectamente puede ser modificado.
    // 4 = es el "linuxdiff" de las "armas", lo por casos obvio y que para mi son desconosidos son exclusivamente para armas. (5 = players)
    
    // Como este evento es llamado "despues" que un arma ataque, no habria problemas con
    // otros valores.
    
    // Devolviendo el valor con FMRES_HANDLED estamos diciendole al modulo 
    // que "hicimos algo".
    
return FMRES_HANDLED


Es posible utilizar este tut de aumentar la velocidad de disparo, como si fuera un enum con varias ak-47?

Es posible implementarlo en este plugin de sambuseti?

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <safemenu>

#define PLUGIN "Mejorame :D"
#define VERSION "1.0"
#define AUTHOR "Sambuseti"

#define porcentaje(%1,%2,%3)  (%1 * %3) / %2  // Porcentaje de cuanto tiene

enum {
    
FM_CS_TEAM_UNASSIGNED 0,
    
FM_CS_TEAM_T,
    
FM_CS_TEAM_CT,
    
FM_CS_TEAM_SPECTATOR
};

enum
{
    
_KNIFE 0,
    
_M3,
    
_XM1014,
    
_TMP,
    
_MAC10,
    
_MP5NAVY,
    
_UMP45,
    
_P90,
    
_GALIL,
    
_FAMAS,
    
_AK47,
    
_SCOUT,
    
_M4A1,
    
_SG552,
    
_AUG,
    
_SG550,
    
_AWP,
    
_G3SG1,
    
_M249,
    
_GLOCK18,
    
_USP,
    
_P228,
    
_DEAGLE,
    
_FIVESEVEN,
    
_ELITE,
    
    
TOTAL_ITENMENU
}

new const 
menu_Armas[][]  =
{
    
// ---Cuchillo--
    
"Cuchillo",
    
// ---Armas Primarias--

    // *Escopetas*
    
"Benelli M3 Super 90",
    
"Benelli XM1014",
    
    
// *Subfusiles*
    
"Steyr TMP",
    
"Ingram MAC-10",
    
"Heckler & Koch MP5",
    
"Heckler & Koch UMP",
    
"FN P90",
    
    
// *Fusiles y rifles*
    
"IMI Galil",
    
"FAMAS",
    
"AK-47",
    
"Steyr Scout",
    
"Colt M4A1 Carbine",
    
"SIG SG-552",
    
"Steyr AUG A1",
    
"SIG SG-550",
    
"AWP",
    
"Heckler & Koch G3",
    
"Ametralladora FN M249",
    
    
// ---Pistolas---
    
"Glock 18C",
    
"Heckler & Koch USP .45 Tactical",
    
"SIG-Sauer P228",
    
"IMI Desert Eagle Mark XIX .50 AE",
    
"FN Five-seven",
    
"Beretta 92"
}

new const 
Info_Submenu[][]  =
{
    
// ---Cuchillo--
    
"Knife",
    
// ---Armas Primarias--

    // *Escopetas*
    
"\rOrigen: \yItalia^n\rCapacidad del cargador: \y8 Municiónes^n\rMunición máxima de reserva:\y 32",
    
"\rOrigen: \yItalia^nCapacidad del cargador: \y7 Municiónes^nMunición máxima de reserva: \y32",
    
    
// *Subfusiles*
    
"\rOrigen: \yAustria^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y9mm Parabellum",
    
"\rOrigen: \yEstados Unidos^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y.45 ACP",
    
"\rOrigen: \yAlemania^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y9mm",
    
"\rOrigen: \yAlemania^n\rCapacidad del cargador: \y25 Municiónes^n\rCalibre: \y.45 ACP ",
    
"\rOrigen: \yBélgica^n\rCapacidad del cargador: \y50 Municiónes^n\rCalibre: \y.338 Lapua magnum",
    
    
// *Fusiles y rifles*
    
"\rOrigen: \yIsrael^n\rCapacidad del cargador: \y35 Municiónes^n\rCalibre: \y5,56 mm OTAN ",
    
"\rOrigen: \yFrancia^n\rCapacidad del cargador: \y25 Municiónes^n\rCalibre: \y5.56 mm OTAN",
    
"\rOrigen: \yUnión Soviética^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y7,62 mm OTAN",
    
"\rOrigen: \yAustria^n\rCapacidad del cargador: \y10 Municiónes^n\rCalibre: \y7,62 mm OTAN",
    
"\rOrigen: \yEstados Unidos^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y5,56 mm OTAN^n\rFunción Especial: \ySilenciador opcional",
    
"\rOrigen: \ySuiza^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y5,56 mm OTAN",
    
"\rOrigen: \yAustria^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y5,56 mm",
    
"\rOrigen: \ySuiza^n\rCapacidad del cargador: \y30 Municiónes^n\rCalibre: \y5,56 mm OTAN",
    
"\rOrigen: \yReino Unido^n\rCapacidad del cargador: \y10 Municiónes^n\rCalibre: \y.338 Lapua Magnum",
    
"\rOrigen: \yAlemania^n\rCapacidad del cargador: \y20 Municiónes^n\rCalibre: \y7,62 mm OTAN",
    
"\rOrigen: \yBélgica^n\rCapacidad del cargador: \y100 Municiónes^n\rCalibre: \y5,56 mm OTAN",
    
    
// ---Pistolas---
    
"\rOrigen: \yAustria^n\rFabricante: \yGlock^n\rCapacidad del cargador: \y20 balas^n\rCalibre: \y9 mm^n\rFunción especial: \yModo de disparo selectivo: semiautomático o ráfagas",
    
"\rOrigen: \yAlemania^n\rFabricante: \yHeckler & Koch^n\rCapacidad del cargador: \y12 balas^n\rCalibre: \y.45 ACP^n\rFunción especial: \ySilenciador opcional",
    
"\rOrigen: \ySuiza- Alemania^n\rCapacidad del cargador: \y13 balas^n\rPeso: \y1,03 Kg^n\rCalibre: \y.357 SIG",
    
"\rOrigen: \yIsrael^n\rCapacidad del cargador: \y7 balas^n\rPeso: \y1,8 Kg^n\rCalibre: \y.50 Action Express",
    
"\rOrigen: \yBélgica^n\rCapacidad del cargador: \y20^n\rCalibre: \y5.7 ",
    
"\rOrigen: \yItalia^n\rCapacidad del cargador: \y15 balas en cada una^n\rCalibre: \y19mm"
}

enum _:APDATOS

    
ANAME[32],
    
AITEMS[32],
    
AMODEL[100],
    
APMODEL[32],
    
MENU,
    
MUERTES,
    
Float:ADAMAGE
}

new const 
g_primary_items[64][APDATOS] = 
{
    
// LISTADO DE KNIFE
    
    // NAME                ID            VMODEL                    PMODEL        Menu         Muertes    Daño    Recoil 1 - 7
    
{"Cuchi - Default",         "weapon_knife",         "default",                 "default",    _KNIFE,        0,    1.0},
    {
"Karambit - Doppler Phase 2",    "weapon_knife",         "v_knife_karambit_doppler2.mdl",     "default",    _KNIFE,        10,    1.0},
    {
"Bayonet - Tiger Tooth",    "weapon_knife",         "v_knife_bayonet_tiger.mdl",         "default",    _KNIFE,        50,    1.0},
    {
"Bayonet - Marble Fade",    "weapon_knife",         "v_knife_bayonet_marble.mdl",         "default",    _KNIFE,        125,    1.0},
    {
"Karambit - Tiger Tooth",    "weapon_knife",         "v_knife_karambit_tiger.mdl",         "default",    _KNIFE,        175,    1.0},
    {
"Bayonet - Slaughter",         "weapon_knife",         "v_knife_bayonet_slaughter.mdl",     "default",    _KNIFE,         250,    1.0},
    {
"Falchion Doppler Phase 4",    "weapon_knife",         "v_knife_falchion_doppler4.mdl",     "default",    _KNIFE,        370,    1.0},
    
//----------------------------------------------------------------------------------------------------------------------------------------------------------------//  7 - 14 
    
{"Butterfly - Fade",          "weapon_knife",         "v_knife_butterfly_fade.mdl",         "default",    _KNIFE,         500,    1.0},
    {
"Bayonet - Crimson Web",    "weapon_knife",         "v_bayonet_crimson.mdl",         "default",    _KNIFE,         630,    1.0},
    {
"Falchion Fade",        "weapon_knife",         "v_knife_falchion_fade.mdl",         "default",    _KNIFE,         780,    1.0},
    {
"Karambit - Doppler Phase 1",    "weapon_knife",         "v_knife_karambit_doppler1.mdl",     "default",    _KNIFE,        877,    1.0},
    {
"Karambit - Slaughter",     "weapon_knife",         "v_knife_karambit_slaughter.mdl",     "default",    _KNIFE,         969,    1.0},
    {
"Huntsman - Crimson Web",    "weapon_knife",         "v_knife_huntsman_crimson.mdl",     "default",    _KNIFE,        1112,    1.0},
    
//----------------------------------------------------------------------------------------------------------------------------------------------------------------//  14 - 21
    
{"M9 - Doppler Phase 4",      "weapon_knife",         "v_knife_m9_doppler4.mdl",         "default",    _KNIFE,        1245,    1.0},
    {
"Daggers - Crimson Web",    "weapon_knife",         "v_knife_daggers_crimson.mdl",         "default",    _KNIFE,        1382,    1.0},
    {
"Butterfly - Marble Fade",    "weapon_knife",         "v_knife_butterfly_marblefade.mdl",    "default",    _KNIFE,        1437,    1.0},
    {
"Huntsman - Crimson Web",    "weapon_knife",         "v_knife_huntsman_crimson.mdl",     "default",    _KNIFE,        1583,    1.0},
    {
"Bowie - Crimson Web",     "weapon_knife",         "v_knife_bowie_crimson.mdl",         "default",    _KNIFE,        1700,    1.0},
    {
"Bowie - Tiger Tooth",        "weapon_knife",         "v_knife_bowie_tiger.mdl",         "default",    _KNIFE,        1869,    1.0},
    {
"Bayonet - Lore",        "weapon_knife",         "v_knife_bayonet_lore.mdl",         "default",    _KNIFE,        1975,    1.0},
    {
"Bayonet - Doppler Phase 1",    "weapon_knife",         "v_bayonet_doppler1.mdl",         "default",    _KNIFE,        2166,    1.0},
    
//----------------------------------------------------------------------------------------------------------------------------------------------------------------//  21 - 23
    
{"Karambit - Crimson Web",    "weapon_knife",         "v_knife_karambit_crimson.mdl",     "default",    _KNIFE,         2300,    1.0},
    {
"Bayonet - Esmerald",        "weapon_knife",         "v_bayoneta_esmeralda.mdl",         "default",    _KNIFE,        2500,    1.0},
        
    
// LISTADO DE AK47

    // NAME                ID            VMODEL                    PMODEL        Menu        Muertes    Daño    Recoil      1 - 7
    
{"Ak-47 - Default",        "weapon_ak47",        "default",                "default",    _AK47,        0,    1.0},
    {
"Case Hardened",        "weapon_ak47",        "v_ak47_casehardened.mdl",        "default",    _AK47,        500,    1.0},
    {
"Redline",            "weapon_ak47",        "v_ak47_redline2.mdl",            "default",    _AK47,        1000,    1.0},
    {
"Jaguar",            "weapon_ak47",        "v_ak47_jaguar.mdl",            "default",    _AK47,        1500,    1.0},
    {
"Wasteland Rebel",        "weapon_ak47",        "v_ak47_rebel.mdl",            "default",     _AK47,        2000,    1.0},
    {
"Front Side",            "weapon_ak47",        "v_ak47_frontside.mdl",            "default",    _AK47,        3000,    1.0},
    {
"Vulcan",            "weapon_ak47",        "v_ak47_vulcan.mdl",            "default",    _AK47,        4000,    1.0},
    
//--------------------------------------------------------------------------------------------------------------------------------------------- //  7 - 11
    
{"Fuel Injector",        "weapon_ak47",        "v_ak47_finjector.mdl",            "default",    _AK47,        5000,    1.0},
    {
"Fire Serpent",        "weapon_ak47",        "v_ak47_fireserpent.mdl",        "default",    _AK47,        6000,    1.0},
    {
"Neon Revolution",        "weapon_ak47",        "v_ak47_neonr.mdl",            "default",    _AK47,        50000,    1.0},
    {
"Aquamarine",            "weapon_ak47",        "v_ak47_aquamarine.mdl",        "default",    _AK47,        50000,    1.0},
    
    
// LISTADO DE AWP
    // NAME                ID            VMODEL                    PMODEL        Menu        Muertes    Daño    Recoil      1 - 7
    
{"Awp - Default",         "weapon_awp",         "default",                 "default",    _AWP,         0,     1.0},
    {
"Boom",             "weapon_awp",         "v_awp_boom.mdl",             "default",    _AWP,         500,     1.0},
    {
"Lighting",             "weapon_awp",                 "v_awp_lightningstrike.mdl",         "default",    _AWP,         750,     1.0},
    {
"Asiimov",             "weapon_awp",         "v_awp_boom.mdl",             "default",    _AWP,         1000,     1.0},
    {
"Dragon Lore",             "weapon_awp",         "v_awp_dragonlore.mdl",         "default",    _AWP,         2500,     1.0},
    {
"Tiger Tooth",             "weapon_awp",         "v_awp_tigertooth.mdl",         "default",    _AWP,         1500,     1.0},
    
    
// LISTADO DE  M4A1
    
    // NAME                ID            VMODEL                    PMODEL        Menu         Muertes    Daño    Recoil      1 - 7
    
{"M4a1 - Default",        "weapon_m4a1",        "default",                "default",    _M4A1,        0,    1.0},
    {
"Red Tape",            "weapon_m4a1",        "v_m4a1_redtape.mdl",            "default",    _M4A1,        500,    1.0},
    {
"Guardian",            "weapon_m4a1",        "v_m4a1_guardian2.mdl",            "default",    _M4A1,        1000,    1.0},
    {
"Cyrex",            "weapon_m4a1",        "v_m4a1_cyrex.mdl",            "default",    _M4A1,        1500,    1.0},
    {
"Condor",            "weapon_m4a1",        "v_m4a1_condor.mdl",            "default",    _M4A1,        2000,    1.0},
    {
"Icarus",            "weapon_m4a1",        "v_m4a1_icarus1.mdl",            "default",    _M4A1,        3000,    1.0},    
    {
"Masterpiece",            "weapon_m4a1",        "v_m4a1_masterpiece2.mdl",        "default",    _M4A1,        4000,    1.0},
    
//--------------------------------------------------------------------------------------------------------------------------------------------- //  7 - 8
    
{"Howl",            "weapon_m4a1",        "v_m4a1_howl.mdl",            "default",    _M4A1,        50000,    1.0},
    
    
//LISTADO DE GLOCK
    
    // NAME                ID            VMODEL                    PMODEL        Menu && CSW    Muertes    Daño    Recoil      1 - 7
    
{"Glock - Default",        "weapon_glock18",    "default",                "default",    _GLOCK18,    0,    1.0},
    {
"Candy Apple",            "weapon_glock18",    "v_glock18_candyapple.mdl",        "default",    _GLOCK18,    500,    1.0},
    {
"Vulcan",            "weapon_glock18",    "v_glock18_vulcan.mdl",            "default",    _GLOCK18,    1000,    1.0},
    {
"Water Element",        "weapon_glock18",    "v_glock18_element.mdl",        "default",    _GLOCK18,    1500,    1.0},
    {
"Fade",            "weapon_glock18",    "v_glock18_fade.mdl",            "default",    _GLOCK18,    2000,    1.0},
    
    
//LISTADO DE USP

    // NAME                ID            VMODEL                    PMODEL        Menu        Muertes    Daño    Recoil      1 - 7
    
{"USP - Default",        "weapon_usp",        "default",                "default",    _USP,        0,    1.0},
    {
"Guardian",            "weapon_usp",        "v_usp_guardian.mdl",            "default",    _USP,        500,    1.0},
    {
"Caiman",            "weapon_usp",        "v_usp_caiman.mdl",            "default",    _USP,        1000,    1.0},
    {
"Condor",            "weapon_usp",        "v_usp_condor.mdl",            "default",    _USP,        1500,    1.0},
    {
"Orion",            "weapon_usp",        "v_usp_orion.mdl",            "default",    _USP,        2000,    1.0},
    
    
    
//LISTADO DE  DEAGLE

    // NAME                ID            VMODEL                    PMODEL        Menu        Muertes    Daño    Recoil      1 - 7
    
{"Deagle - Default",        "weapon_deagle",    "default",                "default",    _DEAGLE,    0,    1.0},
    {
"Conspiracy",            "weapon_deagle",    "v_deagle_conspiracy.mdl",        "default",    _DEAGLE,    500,    1.0},
    {
"Black & Red",            "weapon_deagle",    "v_deagle_blackred.mdl",        "default",    _DEAGLE,    1000,    1.0},
    {
"Blaze",            "weapon_deagle",    "v_deagle_blaze.mdl",            "default",    _DEAGLE,    1500,    1.0},
    {
"Fire Elemental",        "weapon_deagle",    "v_deagle_alexandria.mdl",        "default",    _DEAGLE,    2000,    1.0},
    {
"Alexandria",            "weapon_deagle",    "v_deagle_alexandria.mdl",        "default",    _DEAGLE,    50000,    1.0}

}


new 
g_menuitem33 ], g_armas33 ][ sizeof g_primary_items ],  g_armaselec33 ][ TOTAL_ITENMENU ];

// contemos juntos
new finis_weapon_tipe[33][ TOTAL_ITENMENU ], g_total_weapon_tipe[33][ TOTAL_ITENMENU ], num_defaul_weapon[33][ TOTAL_ITENMENU ]

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("chooseteam""clcmd__ChangeTeam");
    
register_clcmd("jointeam""clcmd__ChangeTeam");
}

public 
client_putinserver(id) {
    for(new 
0sizeof(g_primary_items); ++i){
        
g_armas[id][i] = 0;
        for(new 
0TOTAL_ITENMENUj++){
            if(
g_primary_items[i][MENU] == j){
                
g_total_weapon_tipe[id][j]++
                
finis_weapon_tipe[id][j] = i
                
                
if(equal(g_primary_items[i][AMODEL], "default"))
                    
g_armaselec[id][j] = i;
            }
                
            if(
equal(g_primary_items[i][AMODEL], "default"))
                
num_defaul_weapon[id][j] = i
        
}
    }
    
    
g_armaselec[id][_KNIFE] = 7;
    
g_armaselec[id][_AK47] = g_armaselec[id][_AK47]+5;
}
    

public 
clcmd__ChangeTeam(const id) {
    if(!
is_user_connected(id)) {
        return 
PLUGIN_HANDLED;
    }
    
    new 
iTeam;
    
iTeam fm_cs_get_user_team(id);
    
    if(
iTeam == FM_CS_TEAM_SPECTATOR || iTeam == FM_CS_TEAM_UNASSIGNED) {
        return 
PLUGIN_CONTINUE;
    }
    
    
mostar_menu_principalid );
    return 
PLUGIN_HANDLED;
}
    
// Game Menu
public mostar_menu_principalid ){
    if(!
is_user_connected(id)) {
        return;
    }
    new 
i
    
    
new menuidtext100 ], numsizeof menu_Armas ];
    
menuid menu_create("\r[ZP:SOLDIER]\yMejora de Armas^n^n\yEliminar enemigos^ncon el arma que deseas mejorar^n""menu_principal");
    
    for(
0TOTAL_ITENMENUi++) {
        
num_to_str(inumcharsmax(num));
                
        if(
g_total_weapon_tipe[id][i] == 0){
            
client_print(idprint_chat"Se Contaron %d armas en el menu de %s, por lo tanto no aparece"g_total_weapon_tipe[id][i], menu_Armas[i]);
            continue;
        }
                
        
formatex(textcharsmax(text), "%s \y| \wMejorado:\r %i%\y%"menu_Armas[i], porcentaje((g_armaselec[id][i]-num_defaul_weapon[id][i]), (finis_weapon_tipe[id][i]-num_defaul_weapon[id][i]), g_total_weapon_tipe[id][i]));
        
menu_additem(menuid,textnum);
        
client_print(idprint_chat"Se Contaron %d armas en el menu de %s"g_total_weapon_tipe[id][i], menu_Armas[i]);
    }
    
    
menu_setprop(menuidMPROP_EXITNAME"Volver");

    if(
pev_valid(id) ==  2) {
        
set_pdata_int(id20505);
    }

    
ShowLocalMenu(idmenuid);
}

public 
menu_principal(idmenuiditem) {
    if(!
is_user_connected(id)) {
        
DestroyLocalMenu(idmenuid);
        return 
PLUGIN_HANDLED;
    }
    
    if(
item == MENU_EXIT) {
        
DestroyLocalMenu(idmenuid);
        return 
PLUGIN_HANDLED
    }

    new 
buffer[4], dummy
    menu_item_getinfo
(menuiditemdummybuffercharsmax(buffer), __dummy)
    
    if (
str_to_num(buffer) == 6) return PLUGIN_HANDLED;
    
    
g_menuitemid ] = str_to_num(buffer)
    
    
DestroyLocalMenu(idmenuid);
    
show_menu_armasid )
    return 
PLUGIN_HANDLED;
}

public 
show_menu_armasid ) {
    if(!
is_user_connected(id)) {
        return;
    }

    new 
menuidtext200 ];
    for (new 
0sizeof g_primary_itemsi++){
        if(
g_primary_items[i][MENU] == g_menuitemid ]){
                if(
g_armaselec[id][g_menuitemid ]] == i){
                    
formatex(textcharsmax(text), "\r[ZP:SOLDIER]\yMejorar \d%s^n^nProxima mejora: \w%s^n\yMuertes necesarias: \w%d"menu_Armas[g_menuitemid ]], g_primary_items[g_armaselec[id][g_menuitemid ]]+1][ANAME], g_primary_items[g_armaselec[id][g_menuitemid ]]+1][MUERTES])
                    
menuid menu_create(text"menu_armas");
                    
                    
formatex(textcharsmax(text), "Mejora Actual: %s"g_primary_items[g_armaselec[id][g_menuitemid ]]][ANAME])
                    
menu_additem(menuidtext"1");
                }
        }
    }
    
    
formatex(textcharsmax(text), "^n%s"Info_Submenu[g_menuitemid ]])
    
Acentos(textcharsmax(text))
    
menu_addtext(menuidtext1);
    
    
menu_setpropmenuidMPROP_EXITNAME "Volver");

    if(
pev_valid(id) ==  2) {
        
set_pdata_int(id20505);
    }

    
ShowLocalMenu(idmenuid);
}

public 
menu_armas(idmenuiditem) {
    if(!
is_user_connected(id)) {
        
DestroyLocalMenu(idmenuid);
        return 
PLUGIN_HANDLED;
    }
    
    if(
item == MENU_EXIT) {
        
DestroyLocalMenu(idmenuid);

        
mostar_menu_principalid )
        return 
PLUGIN_HANDLED
    }

    new 
buffer[4], dummy
    menu_item_getinfo
(menuiditemdummybuffercharsmax(buffer), __dummy)
    
DestroyLocalMenu(idmenuid);


    return 
PLUGIN_HANDLED;
}

stock fm_cs_get_user_team(id) {
    if (
pev_valid(id) != 2) {
        return 
FM_CS_TEAM_UNASSIGNED;
    }
    
    return 
get_pdata_int(id1145);
}

stock Acentos(szText[]= ""len 0) { 
    
replace_all(szTextlen"á""á")
    
replace_all(szTextlen"Á""Ã")
    
replace_all(szTextlen"é""é")
    
replace_all(szTextlen"É""É")
    
replace_all(szTextlen"í""Ã*"
    
replace_all(szTextlen"Í""Ã")
    
replace_all(szTextlen"ó""ó")
    
replace_all(szTextlen"Ó""Ó")
    
replace_all(szTextlen"ú""ú")
    
replace_all(szTextlen"Ú""Ú")
    
replace_all(szTextlen"ñ""ñ")
    
replace_all(szTextlen"Ñ""Ñ")
    
    static 
szReturn[1024];
    
formatex(szReturncharsmax(szReturn), szText);
    
    return 
szReturn;

Responder
#2
Creo que para esto tendrías que editar los FPS de la animación de disparo del arma. (shootX, si no mal recuerdo).

[Imagen: 58ba8e6cd4c40f38e61ecd30708aa06d.png]


Lo de la recoil es mediante un plugin, no soy muy fan de ese tipo de cosas la verdad, no sabría como ayudarte.
Responder
#3
1 desastre el plugin de sambuseti, la recoil la manejas desde acá (o en prethink creo):

Código PHP:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

#define NO_WEAPONS_BITSUM  (1<<2 | 1<<CSW_KNIFE | 1<<CSW_HEGRENADE | 1<<CSW_FLASHBANG | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4)

public plugin_init ( )
{
    new 
weapon_name[20]

    for ( new 
CSW_P228 <= CSW_P90 i++ ) 
    {
        if ( !( 
NO_WEAPONS_BITSUM & ( << ) ) && get_weaponname iweapon_namecharsmax weapon_name ) ) ) 
        { 
            
RegisterHam Ham_Weapon_PrimaryAttackweapon_name"fw_primary_attack_post"
        } 
    }
}

public 
fw_primary_attack_post ent )
{
    new 
id pev entpev_owner )

    new 
Float:push[3]
    
pev idpev_punchanglepush )

    
server_print "%f - %f"push[0], push[1] )

(15/12/2020, 07:06 PM)Mario AR. escribió: Cuando tu acatante conozca de tu nuevo puerto, te volverá a atacar
Responder
#4
Puedes ver en mi ejemplo de arma Ethereal utilizando ReAPI, aunque precisamente esta parte se hace sin ReAPI - https://dev-cs.ru/resources/662/.
Básicamente en Primary Attack Pre guardamos var_punchangle y ya en el Post va el proceso de setear el punchangle.
Plugins:
En GitHub
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)