[TUT][ZP] Seleccionar color de la Granada Flare
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
|