Raised This Month: $51 Target: $400
 12% 

[ES][TUT] Como cambiar el Recoil / Speed de un Arma. [By meTaLiCroSS]


  
 
 
Thread Tools Display Modes
Author Message
Kiske
Veteran Member
Join Date: May 2009
Old 11-28-2009 , 15:22   [ES][TUT] Como cambiar el Recoil / Speed de un Arma. [By meTaLiCroSS]
#1

Requerimientos: Nivel ALTO de Scripting.
Todo esta explicado en el PHP [By MeTaLiCroSS ^^].


Speed del Arma:
PHP Code:
#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



Recoil del Arma:
PHP Code:
#include <amxmodx>
#include <fakemeta> // detectar el evento
#include <engine> // manipulacion de la recoil
#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 en donde la ak dispara, el cual esta guardado en la carpeta events
new const g_szGunEvent_AK47[] = "events/ak47.sc"

// 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 Recoil 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 los "punchangles" del player, que vendrian siendo en el cual se guardo
    // la ultima movida de los angulos del player, osea, recoil.
    
static Float:flPunchedAngles[3]
    
entity_get_vector(invokerEV_VEC_punchangleflPunchedAngles)
    
    
// Ahora podemos perfectamente manipular los punchangles con XS
    
xs_vec_mul_scalar(flPunchedAngles0.5flPunchedAngles)
    
    
// 0.5 seria el valor float con el cual los punchangles serian manipulados.
    // En este caso usamos 0.5 para obtener la mitad del valor, con xs_vec_mul_scalar 
    // aplicamos una multiplicacion en las 3 dimensiones de un vector, en este caso
    // con 0.5 se obtendria la mitad, osea, semirecoil. Con el mismo vector se obtiene y se saca el valor
    
    // Perfectamente podemos ponerle el nuevo valor de punchangle al player, no se notara
    // ninguna diferencia porque es una diferencia de menos de 0.1 segundos al disparar.
    
entity_set_vector(invokerEV_VEC_punchangleflPunchedAngles)
    
    
// Devolviendo el valor con FMRES_HANDLED estamos diciendole al modulo 
    // que "hicimos algo".
    
return FMRES_HANDLED

__________________


Last edited by Kiske; 11-28-2009 at 18:18.
Kiske is offline
Send a message via Skype™ to Kiske
Cuchii
BANNED
Join Date: Sep 2009
Location: Cordoba,Argentina
Old 11-28-2009 , 15:59   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma.
#2

Buenisimo
Cuchii is offline
Send a message via MSN to Cuchii
Old 11-28-2009, 16:46
larito
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 16:54
Alucard^
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 16:57
larito
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 17:02
Kiske
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 17:07
capostrike93
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 17:09
larito
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 17:14
IneedHelp
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 17:27
capostrike93
This message has been deleted by Alucard^. Reason: bleh
Old 11-28-2009, 17:29
larito
This message has been deleted by Alucard^. Reason: bleh
capostrike93
Veteran Member
Join Date: Feb 2009
Location: adios y??
Old 11-28-2009 , 17:46   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma.
#3

te explicare lo q hace tu code:

public fw_Weapon_PrimaryAttack_Pre(entity)
{
new
id = pev(entity, pev_owner
)

if (
g_norecoil[id
])
{

PHP Code:
pev(idpev_punchanglecl_pushangle[id]) 
return HAM_IGNORED;
}
return
HAM_IGNORED
;
}

public
fw_Weapon_PrimaryAttack_Post(entity
)
{
new
id = pev(entity, pev_owner
)

if (
g_norecoil[id
])
{

PHP Code:
new Floatpush[3]
        
pev(idpev_punchanglepush)
        
xs_vec_sub(pushcl_pushangle[id], push)
        
xs_vec_mul_scalar(push0.0push)
        
xs_vec_add(pushcl_pushangle[id], push)
        
set_pev(idpev_punchanglepush

return
HAM_IGNORED;
}
return
HAM_IGNORED
;
}


Bien primero arriba le setearas la variable cl_pushangle respecto a el pev_punchangle.

luego

new Float: push[3]
pev(id, pev_punchangle, push)


Hay hases lo mismo solo que se lo seteas al float push

xs_vec_sub(push, cl_pushangle[id], push)

Hay practicamente haces la consulta

xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[])
{
out[0] = in1[0] - in2[0
];
out[1] = in1[1] - in2[1
];
out[2] = in1[2] - in2[2
];
}


Supongamos q el valor push era 1.0 en sus 3 slots y el cl_pushangle 1.1 ya que se toman en diferente tiempo uno en

fw_Weapon_PrimaryAttack_Pre

y otro en

fw_Weapon_PrimaryAttack_Post

dara como resultado push = -0.1 en sus tres slots

Luego

xs_vec_mul_scalar(push, 0.0, push)

hace la consulta

xs_vec_mul_scalar(const Float:vec[], Float:scalar, Float:out[])
{
out[0] = vec[0] * scalar;
out[1] = vec[1] * scalar;
out[2] = vec[2] * scalar;
}


Como push vale -0.1 y la segunda variable le pones 0.0

Se multiplicara el -0.1 por 0.0 = "0" xd!!!

Bien ahora la variable push se a cobvertido en 0 cuack, luego

xs_vec_add(push, cl_pushangle[id], push)

Practicamente hace la consulta

xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[])
{
out[0] = in1[0] - in2[0
];
out[1] = in1[1] - in2[1
];
out[2] = in1[2] - in2[2
];
}


Como push es igual a 0 y el cl_pushangle es 1.1, seria 0 - 1.1 = "-1.1"


por lo tanto en la ultima linea

set_pev(id, pev_punchangle, push)

traducido seria

set_pev(id, pev_punchangle, "-1.1") en este caso


y segun yo los resultados negativos en ese pev es como si pusieras 0


haci q yo preferiria simplemente

set_pev(id, pev_punchangle, "0.0")
__________________
capostrike93 is offline
capostrike93
Veteran Member
Join Date: Feb 2009
Location: adios y??
Old 11-28-2009 , 17:50   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma.
#4

mmm ahora q lo re leo creo q me confundi en la parte

Quote:
xs_vec_sub(const Float:in1[], const Float:in2[], Float:out[])
{
out[0] = in1[0] - in2[0];
out[1] = in1[1] - in2[1];
out[2] = in1[2] - in2[2];
}

Como push es igual a 0 y el cl_pushangle es 1.1, seria 0 - 1.1 = "-1.1"


ya que se supone que - y - da + entonces en ves de -1.1 le daria 1.1

la verdad no estoy muy seguro en esa parte.
__________________
capostrike93 is offline
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 11-28-2009 , 17:52   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma.
#5

@capostrike

es ilegible eso xd
01101101 is offline
capostrike93
Veteran Member
Join Date: Feb 2009
Location: adios y??
Old 11-28-2009 , 17:53   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma.
#6

hahahaha -.- sorry we, intenta leerlo de todos modos
__________________
capostrike93 is offline
Old 11-28-2009, 17:57
Asd'
This message has been deleted by Alucard^. Reason: Los baneados no pueden mandar msj por NINGUN medio
Kiske
Veteran Member
Join Date: May 2009
Old 11-28-2009 , 18:19   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma. [By meTaLiCroSS]
#7

ACTUALIZADO !!

Alucard, podes borrar los Post anteriores que se pusieron a Discutir sobre el Post que estaba mal Explicado ^^
Ahora ya esta Mejor.
__________________


Last edited by Kiske; 11-28-2009 at 18:24.
Kiske is offline
Send a message via Skype™ to Kiske
capostrike93
Veteran Member
Join Date: Feb 2009
Location: adios y??
Old 11-28-2009 , 19:08   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma. [By meTaLiCroSS]
#8

es semirecoil....


un no recoil verdadero seria simplemente


entity_set_vector(id, EV_VEC_punchangle, "0.0")

aunque si quieres semirecoil pues si estaria mejor usar el code ese
__________________
capostrike93 is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 11-28-2009 , 19:38   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma. [By meTaLiCroSS]
#9

Posta capostrike, es ilegible eso .- aparte que va en contra de las reglas.

Cuando te queda bugueado el color del php, y queres sacarlo sin volver a escribir todo de nuevo, simplemente seleccionas el texto que se tu puso en ese color y le haces click a este BBCODE: y listo, problema solucionado =p. Y plz usa los bbcodes de php tmb.
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
01101101
BANNED
Join Date: Nov 2009
Location: 9`su 09`n0n7e`r0f76a
Old 11-28-2009 , 20:10   Re: [ES][TUT] Como cambiar el Recoil / Speed de un Arma. [By meTaLiCroSS]
#10

Eso es por la garcha del firefox, que tiene esa pija de WYSIWYG que no sirve para nada... Chrome RLZ
01101101 is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:41.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode