View Single Post
Author Message
!Morte
Veteran Member
Join Date: May 2010
Old 11-27-2011 , 20:33   [TUT][ZP] Seleccionar color de la Granada Flare
#1

PHP Code:
/*
        Tutorial: [ZP] Seleccionar Color de Granada Flare 
                    By !Morte        
*/

// Comenzamos primero creando dos constantes, una de ellas almacenara los nombres de los
// colores, mientras que la otra el RGB de los mismos.

new const g_NombreColores[ ][ ] =
{
    
"Rojo",
    
"Azul",
    
"Verde",
    
"Blanco"
    
// Agrega los que quieras
}

new 
g_RGBColores[ ][ ] =
{
    { 
2550},
    { 
0255},
    { 
00255 },
    { 
255255255 }
    
// Agrega los que quieras
}

// Ahora creamos un array, el cual almacenara por un lado, el index del jugador, y por
// otro lado tendra 3 celdas en las cuales, mas adelante, guardaremos el RGB de los colores
new g_Color33 ][ ]


// Ahora, nos dirigiremos a la funcion reset_vars(id, resetall), dentro de ella, buscamos la condicion
// if(reseteall), y al final de ella agregaremos el siguiente for loop, el cual hara que al ejecutarse
// esa condicion (la cual se ejecutaria cuando el jugaron entra al servidor), se le setee el color
// blanco a la granada flare, esto es para evitar futuros bugs.

reset_vars(idresetall)
{
    if (
resetall)
    {
        for( new 
03i++ )
        {
            
g_Colorid ][ ] = 255
        
}
    }
}

// Bien!, ahora nos vamos a la funcion fw_SetModel(entity, const model[]), y buscamos siguiente condición:
else if (model[9] == 's' && model[10] == 'm' && get_pcvar_num(cvar_flaregrenades)) // Flare
{
    
// Definimos una variable estatica, la cual va a obtener al owner de la entidad
    // Esto es importante ya que necesitamos el index del jugador para obtener el RGB del color
    
static ownerowner peventitypev_owner )
        
    
// Le damos el glow a la granada con el color elegido
    
fm_set_renderingentitykRenderFxGlowShellg_Colorowner ][ ]/* Rojo */g_Colorowner ][ ]/* Verde */g_Colorowner ][ ]/* Azul */kRenderNormal16 );
        
    
// Le damos el trail a la granada con el color elegido por el jugador
    
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
    
write_byte(TE_BEAMFOLLOW// TE id
    
write_short(entity// entity
    
write_short(g_trailSpr// sprite
    
write_byte(10// life
    
write_byte(10// width
    
write_byteg_Colorowner ][ /* Rojo */ // r
    
write_byteg_Colorowner ][ /* Verde */ // g
    
write_byteg_Colorowner ][ /* Azul */ // b
    
write_byte(200// brightness
    
message_end()
        
    
// Set grenade type on the thrown grenade entity
    // Esto no se toca, se le setea el tipo de granada custom a la granada del CS.
    
set_pev(entityPEV_NADE_TYPENADE_TYPE_FLARE)
        
    
// Le seteamos el color a la granada que arrojamos
    // Tenemos que usar un loop for para pasar por las 3 celdas de nuestro array g_Color,
    // Asi obtendremos el color que se guardo en cada celda
    
for( new 03i++ )
        
set_peventityPEV_FLARE_COLORg_Colorowner ][ COLOR_FLARE ][ ] )
}

// Genial! ( que al pedo estas acotaciones, pero sino no se que poner jaja )
// Ahora vamos a la funcion flare_lighting(entity, duration)

// Flare Lighting Effects
flare_lighting(entityduration)
{
    
// Get origin and color
    
static Float:originF[3]
    
pev(entitypev_originoriginF)
    
    
// Definimos una variable estatica, la cual va a obtener al owner de la entidad
    
static ownerowner peventitypev_owner )
    
    
// Actualizamos el glow
    
fm_set_renderingentitykRenderFxGlowShellg_Colorowner ][ ], g_Colorowner ][ ], g_Colorowner ][ ], kRenderNormal16 );
    
    
// Aura de la granada con el color seleccionado por el jugador
    
engfunc(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYoriginF0)
    
write_byte(TE_DLIGHT// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
write_byte(get_pcvar_num(cvar_flaresize)) // radius
    
write_byteg_Colorowner ][ ] ) // r
    
write_byteg_Colorowner ][ ] ) // g
    
write_byteg_Colorowner ][ ] ) // b
    
write_byte(51//life
    
write_byte((duration 2) ? 0//decay rate
    
message_end()
    
    
// Sparks
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0)
    
write_byte(TE_SPARKS// TE id
    
engfunc(EngFunc_WriteCoordoriginF[0]) // x
    
engfunc(EngFunc_WriteCoordoriginF[1]) // y
    
engfunc(EngFunc_WriteCoordoriginF[2]) // z
    
message_end()
}

// Listo, ya no habria que tocar nada mas, ahora lo que vamos a hacer es crear el menu
// que le permitira al jugador seleccionar el color de la granada.
// Esto ubiquenlo donde mas comodo les parezca.

// Menu color de la Granada Flare
public show_menu_flareid )
{
    
// Titulo
    
new Menu menu_create"\wSeleccion de \yColor de la \rGRANADA FLARE""menu_flare" )
    
    new 
iNum]
    
    
// Loop for para obtener los nombres de los colores
    
for( new 0sizeofg_NombreColores ); i++ )
    {
        
// Pasamos de numeto a string a los colores, 
        // y los agregamos al menu como opciones.
        
num_to_striiNumcharsmaxiNum ) )
        
menu_additemMenug_NombreColores[i], iNum )
    }
    
    
menu_displayidMenu )
}

// Handler color de la Granada Flare
public menu_flareidMenuitem )
{
    
// Si salio del menu
    
if( item == MENU_EXIT )
    {
        
// Lo destruimos
        
menu_destroyMenu )
        return 
PLUGIN_HANDLED;
    }
    
    
// Obtenemos la informacion de la opcion seleccionada
    
new iData[6], iAccessiCallbackiName[64]; 
    
menu_item_getinfoMenuitemiAccessiData5iName63iCallback )
    
    
// Definimos la variable Key, la cual guardara el numero de la opcion seleccionada
    
new Key str_to_numiData )
    
    
// Hacemos un loop, seteandole al array g_Color el color que selecciono el jugador en el menu
    
for( new 03i++ )
        
g_Colorid ][ ] = g_RGBColoresKey ][ ]
    
    return 
PLUGIN_HANDLED;

Tengo paja de explicar, así que le mande fruta a algunas cosas jaja
__________________
First Zombie Class
[ZP] Zombie Class: Houndeye Zombie
Quote:
Originally Posted by lucas_7_94 View Post
tenes que saber pawn antes de intentar hacer algo digno.

Last edited by !Morte; 11-27-2011 at 20:37.
!Morte is offline
Send a message via MSN to !Morte Send a message via Skype™ to !Morte