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[ ][ 3 ] =
{
{ 255, 0, 0 },
{ 0, 255, 0 },
{ 0, 0, 255 },
{ 255, 255, 255 }
// 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_Color[ 33 ][ 3 ]
// 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(id, resetall)
{
if (resetall)
{
for( new i = 0; i < 3; i++ )
{
g_Color[ id ][ i ] = 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 owner; owner = pev( entity, pev_owner )
// Le damos el glow a la granada con el color elegido
fm_set_rendering( entity, kRenderFxGlowShell, g_Color[ owner ][ 0 ]/* Rojo */, g_Color[ owner ][ 1 ]/* Verde */, g_Color[ owner ][ 2 ]/* Azul */, kRenderNormal, 16 );
// Le damos el trail a la granada con el color elegido por el jugador
message_begin(MSG_BROADCAST, SVC_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_byte( g_Color[ owner ][ 0 ] /* Rojo */ ) // r
write_byte( g_Color[ owner ][ 1 ] /* Verde */ ) // g
write_byte( g_Color[ owner ][ 2 ] /* 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(entity, PEV_NADE_TYPE, NADE_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 i = 0; i < 3; i++ )
set_pev( entity, PEV_FLARE_COLOR, g_Color[ owner ][ COLOR_FLARE ][ i ] )
}
// 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(entity, duration)
{
// Get origin and color
static Float:originF[3]
pev(entity, pev_origin, originF)
// Definimos una variable estatica, la cual va a obtener al owner de la entidad
static owner; owner = pev( entity, pev_owner )
// Actualizamos el glow
fm_set_rendering( entity, kRenderFxGlowShell, g_Color[ owner ][ 0 ], g_Color[ owner ][ 1 ], g_Color[ owner ][ 2 ], kRenderNormal, 16 );
// Aura de la granada con el color seleccionado por el jugador
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(get_pcvar_num(cvar_flaresize)) // radius
write_byte( g_Color[ owner ][ 0 ] ) // r
write_byte( g_Color[ owner ][ 1 ] ) // g
write_byte( g_Color[ owner ][ 2 ] ) // b
write_byte(51) //life
write_byte((duration < 2) ? 3 : 0) //decay rate
message_end()
// Sparks
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SPARKS) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[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_flare( id )
{
// Titulo
new Menu = menu_create( "\wSeleccion de \yColor de la \rGRANADA FLARE", "menu_flare" )
new iNum[ 6 ]
// Loop for para obtener los nombres de los colores
for( new i = 0; i < sizeof( g_NombreColores ); i++ )
{
// Pasamos de numeto a string a los colores,
// y los agregamos al menu como opciones.
num_to_str( i, iNum, charsmax( iNum ) )
menu_additem( Menu, g_NombreColores[i], iNum )
}
menu_display( id, Menu )
}
// Handler color de la Granada Flare
public menu_flare( id, Menu, item )
{
// Si salio del menu
if( item == MENU_EXIT )
{
// Lo destruimos
menu_destroy( Menu )
return PLUGIN_HANDLED;
}
// Obtenemos la informacion de la opcion seleccionada
new iData[6], iAccess, iCallback, iName[64];
menu_item_getinfo( Menu, item, iAccess, iData, 5, iName, 63, iCallback )
// Definimos la variable Key, la cual guardara el numero de la opcion seleccionada
new Key = str_to_num( iData )
// Hacemos un loop, seteandole al array g_Color el color que selecciono el jugador en el menu
for( new i = 0; i < 3; i++ )
g_Color[ id ][ i ] = g_RGBColores[ Key ][ i ]
return PLUGIN_HANDLED;
}
Tengo paja de explicar, así que le mande fruta a algunas cosas jaja