Tabla de líderes
Contenido popular
Showing content with the highest reputation on 25/06/19 en todas las areas
-
Ayuda con Helicoptero de escape
FedeeRG4L reaccionó a [C]ristian por un tema
Buenas. Tengo un gran problema con un mapa ze, el helicoptero avanza solo no se porque pasa esto, he estado tratando de corregirlo por mucho tiempo pero sigue igual, nesesito ayuda por favor!!!, Las entidades que utilize fueron Pat_coner y func_train, a los pat_coner estan bien configurados, al primer pat_coner le coloque en atributos Wait for retrigge, en cuanto al otro no le coloque nada en atributos. No se si es un problema con la entidad pat_coner o func_train, para que vean de lo que hablo aca les dejo un video de lo que me dijeron en esta comunidad Tambien he probado con las entidades pat_train y fuc_tractrain, pero no se como se utilizan estas, el helicoptero se vuelve loco, si me puden enseñar a como utilizar estas entidades se los agradeseria muchooo! Saludos1 punto -
Bueno, tengo un problema con el Sxe Injected que no me deja abrir el Counter. Hice el post en Localstrike pero por ahora ni pelota :'D Si alguien sabe de que se podrÃa tratar se lo agradecerÃa. Ya probé reinstalando el CS y reinstalando el Injected pero no. El bloc de notas:1 punto
-
Rangos Por Horas
FedeeRG4L reaccionó a I'mBuggimen. por un tema
Rangos Por Horas Explicación: Pd: Las Horas Se Ganan Jugando en el Servidor Changelog: /* Changelog: - 1.0 - Lanzamiento Oficial - 1.5 - Re estructurando partes del codigo - 1.7 - Agregando Privilegios a los Jugadores */ Mejoras en la 1.7: - Habilidades Especiales ( desbloqueables por Rangos & Actiavar/Desactivar al gusto del jugador ); CVARS: - rh_habilidades - 1/0 Activas/Desactivas - [ Habilidades Especiales ] Créditos: Jollero = Idea, Destro = Su ingenioso Advanced_vault; Necesitas: Advanced Vault LINK: https://amxmodx-es.com/Thread-API-Advanc...#pid104596 #include < amxmodx > #include < adv_vault > #define HUD_ID (taskid-TASK_HOURS) #define TASK_HOURS 100 new const g_iCredits[ ][ ] = { "Rangos Por Horas", "1.0b", "ImBuggimen" }; /* ===================================================== * <<<<<<<<<<<< INICIA SECCION MODIFICABLE >>>>>>>>>>>>> * ===================================================*/ enum _:_STRUCT_RANGE { RNAME[ 90 ], HOURS_REQUIRED }; enum _:_STRUCT_TIME { SEGUNDOS, MINUTOS, HORAS }; enum { FIELD_TIMES, FIELD_RANGES, MAX_FIELDS }; #pragma semicolon 1 new const g_szRangos[ ][ _STRUCT_RANGE ] = { { "Miembro Nuevo", 0 }, { "Miembro Reconocido", 3 }, { "Miembro Sr.", 10 }, { "Miembro Heroe", 15 }, { "Veterano", 20 }, { "", 999999 } // Fix Bug del Hud }; new g_iRangos[ 33 ]; new g_iTime[ 33 ][ _STRUCT_TIME ]; new g_iPlayerName[ 33 ][ 32 char ]; new g_iFields[ MAX_FIELDS ]; new g_iHud; new g_iGuardado; public plugin_init( ) { register_plugin( g_iCredits[ 0 ], g_iCredits[ 1 ], g_iCredits[ 2 ] ); g_iHud = CreateHudSyncObj( ); g_iGuardado = adv_vault_open( "GuardadoRanges", false ); g_iFields[ FIELD_RANGES ] = adv_vault_register_field( g_iGuardado, "Ranges" ); g_iFields[ FIELD_TIMES ] = adv_vault_register_field( g_iGuardado, "Times", DATATYPE_ARRAY, 3 ); adv_vault_init( g_iGuardado ); } public client_putinserver( index ) { get_user_name( index, g_iPlayerName[ index ], charsmax( g_iPlayerName[ ] ) ); arrayset( g_iTime[ index ], 0, sizeof( g_iTime[ ] ) ); g_iRangos[ index ] = 0; set_task( 1.0, "ShowHRangos", index+TASK_HOURS, _, _, .flags = "b" ); iCargar( index ); } public client_infochanged( index ) { if( !is_user_connected( index ) ) return; static NewName[ 32 ]; get_user_info( index, "name", NewName, 31 ); if( !equal( NewName, g_iPlayerName[ index ] ) ) { copy( g_iPlayerName[ index ], 31, NewName ); iCargar( index ); } } public client_disconnect( index ) { remove_task( index+TASK_HOURS ); iGuardar( index ); } public ShowHRangos( taskid ) { static index; index = HUD_ID; if( is_user_connected( index ) ) { if( g_iTime[ index ][ SEGUNDOS ] > 59 ) { g_iTime[ index ][ SEGUNDOS ] = 0; g_iTime[ index ][ MINUTOS ]++; } else g_iTime[ index ][ SEGUNDOS ]++; if( g_iTime[ index ][ MINUTOS ] > 59 ) { g_iTime[ index ][ MINUTOS ] = 0; g_iTime[ index ][ HORAS ]++; Range_check( index ); } } set_hudmessage( 200, 100, 0, 0.1, 0.03, 1 ); ShowSyncHudMsg( index, g_iHud, "[ Rango: %s ]^n^n[ Tiempo Jugado ]^n[ Segundos: %d ]^n[ Minutos: %d ]^n[ Horas: %d ]", g_szRangos[ g_iRangos[ index ] ][ RNAME ], g_iTime[ index ][ SEGUNDOS ], g_iTime[ index ][ MINUTOS ], g_iTime[ index ][ HORAS ] ); } public Range_check( index ) { new Range_Up = false; if( g_iTime[ index ][ HORAS ] >= g_szRangos[ g_iRangos[ index ] ][ HOURS_REQUIRED ] ) { g_iRangos[ index ]++; Range_Up = true; } if( Range_Up ) iChat( index, "^4Haz Sido Promovido a %s", g_szRangos[ g_iRangos[ index ] ][ RNAME ] ), Range_Up = false; } public iGuardar( index ) { adv_vault_set_start( g_iGuardado ); adv_vault_set_field( g_iGuardado, g_iFields[ FIELD_TIMES ], g_iTime[ index ] ); adv_vault_set_field( g_iGuardado, g_iFields[ FIELD_RANGES ], g_iRangos[ index ] ); adv_vault_set_end( g_iGuardado, 0, g_iPlayerName[ index ] ); } public iCargar( index ) { if( !adv_vault_get_prepare( g_iGuardado, _, g_iPlayerName[ index ] ) ) return; g_iRangos[ index ] = adv_vault_get_field( g_iGuardado, g_iFields[ FIELD_RANGES ] ); adv_vault_get_field( g_iGuardado, g_iFields[ FIELD_TIMES ], g_iTime[ index ], sizeof ( g_iTime[ ] ) ); } stock iChat( index, const input[ ], any:... ) { static iSayText, sziMsg[ 191 ]; if ( !iSayText ) iSayText = get_user_msgid( "SayText" ); replace_all( sziMsg, 190, "!g", "^4" ); replace_all( sziMsg, 190, "!y", "^1" ); replace_all( sziMsg, 190, "!team", "^3" ); vformat( sziMsg, 190, input, 3 ); message_begin( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, .player = index ); write_byte( index ? index : 33 ); write_string( sziMsg ); message_end( ); } Version 1.7: /* Changelog: - 1.0 - Lanzamiento Oficial - 1.5 - Re estructurando partes del codigo - 1.7 - Agregando Privilegios a los Jugadores */ new const g_szCustom[ ] = { "Rangos Por Horas", "1.7b", "I'mBuggimen." }; #include < amxmodx.inc > #include < amxmisc.inc > #include < fun.inc > #include < hamsandwich.inc > #include < fakemeta.inc > #include < adv_vault.inc > // =========================[~~]=========================== #define TASK_HOURS 1212 #define HUD_ID ( taskid - TASK_HOURS ) #define SetPlayerBit(%0,%1) ( %0 |= ( 1 << ( %1 & 31 ) ) ) #define GetPlayerBit(%0,%1) ( %0 & ( 1 << ( %1 & 31 ) ) ) #define ClearPlayerBit(%0,%1) ( %0 &= ~( 1 << ( %1 & 31 ) ) ) #define ClearString(%0) ( %0[ 0 ] = EOS ) #define GET_SIZE(%0) ( sizeof( %0 ) - 1 ) // =========================[~~]=========================== enum { LOAD = 0, SAVE }; enum { FIELD_TIMES, FIELD_RANGES, MAX_FIELDS }; enum _: TIME_STRUCTURE { SECS = 0, MINS, HOURS }; enum _: RANGE_STRUCTURE { RANGE_NAME[ 32 ], RANGE_REQUIRED }; enum _: HABS_STRUCTURE { Updates_Name[ 32 ], Updates_Desc[ 150 ], Updates_Required } ; // =========================[~~]=========================== new const g_szRangos[ 6 ][ RANGE_STRUCTURE ] = { { "Miembro Nuevo", 0 }, { "Miembro Reconocido", 3 }, { "Miembro Sr.", 10 }, { "Miembro Heroe", 15 }, { "Veterano", 20 }, { "Miembro Destacado", 25 } }; new const g_szMejoras[ ][ HABS_STRUCTURE ] = { { "Bullet's Damage", "Esta Habilidad Es Muy Util^nTe Permite Ver El Daño INFLINGIDO", 1 }, { "BunnyHop", "Esta Habilidad te va a permitir Saltar Sucesivamente Como Conejo^nTendras mas control del mapa", 2 }, { "Probabilidad de Daño Critico!", "Dicha Habilidad Hara que Aumente un probabilidad de Daño critico^nEs decir si pegas 50 normal con critico pegas 100", 3 } }; // =========================[~~]=========================== new g_iRangos[ 33 ]; new g_iTime[ 33 ][ TIME_STRUCTURE ]; new g_szPN[ 33 ][ 32 ]; new g_iFields[ MAX_FIELDS ]; new sycn; new g_iHud; new g_iGuardado; new g_bConnected; new g_bAlive; new KEYUPDT = ( 1 << 0 )|( 1 << 9 ) ; new g_szTxt[ 500 ]; new g_iIdMejoras[ 32 + 1 ] ; new g_iMejoras[ 32 + 1 ][ sizeof( g_szMejoras[ ] ) ]; new g_Mp; const XO_PLAYER = 5 const m_iTeam = 114 new g_iTeam[ 33 ]; new pcvar_allowhabs; public plugin_init( ) { register_plugin( g_szCustom[ 0 ], g_szCustom[ 1 ], g_szCustom[ 2 ] ); RegisterHam( Ham_Spawn, "player", "fHam_Spawn_Post", 1 ) RegisterHam( Ham_Player_Jump, "player", "fHam_Jump_Pre", 0 ) ; RegisterHam( Ham_TakeDamage, "player", "fHam_TakeDamage_Pre", 0 ); register_menu( "Menu Habilidades" , KEYUPDT , "mh_mejoras_inf" ) ; register_clcmd( "say /habilidades", "func_habilities" ); g_iHud = CreateHudSyncObj( ); g_Mp = get_maxplayers( ); pcvar_allowhabs = create_cvar( "rh_habilidades", "1", _, "< 1/0 Activas/Desactivas - [ Habilidades Especiales ] >" ); Adv_Initialize( ); sycn = CreateHudSyncObj( ); } public Adv_Initialize( ) { g_iGuardado = adv_vault_open( "GuardadoRangos", false ); g_iFields[ FIELD_RANGES ] = adv_vault_register_field( g_iGuardado, "Ranges" ); g_iFields[ FIELD_TIMES ] = adv_vault_register_field( g_iGuardado, "Times", DATATYPE_ARRAY, 3 ); adv_vault_init( g_iGuardado ); } public fHam_Spawn_Post( const index ) { if( GetPlayerBit( g_bConnected, index ) && !( GetPlayerBit( g_bAlive, index ) ) && is_user_alive( index ) ) SetPlayerBit( g_bAlive, index ); if( GetPlayerBit( g_bAlive, index ) ) { g_iTeam[ index ] = get_pdata_int( index, m_iTeam, XO_PLAYER ); } } public fHam_Killed_Post( const iVictim, const iKiller, const bool: bShouldgib ) { if( iVictim == iKiller || !iKiller || g_iTeam[ iKiller ] == g_iTeam[ iVictim ] ) return HAM_IGNORED; ClearPlayerBit( g_bAlive, iVictim ); return HAM_IGNORED; } public fHam_Jump_Pre( const index ) { if( !get_pcvar_num( pcvar_allowhabs ) ) return HAM_IGNORED; if ( GetPlayerBit( g_bAlive, index ) && g_iMejoras[ index ][ 1 ] ) { pev( index, pev_fuser2, 0.0 ) ; static flags ; flags = pev( index, pev_flags ); if ( ( flags & FL_WATERJUMP ) || !( flags & FL_ONGROUND ) || pev( index , pev_waterlevel ) >= 2 ) return HAM_IGNORED ; static Float: vec[ 3 ] ; pev( index, pev_velocity, vec ) ; vec[ 2 ] += 250.0 ; set_pev( index , pev_velocity, vec ) ; } return HAM_HANDLED; } public fHam_TakeDamage_Pre( const victim, const Inflictor, const attacker, const Float:damage, const damage_type ) { if ( victim == attacker || !( 1 <= attacker <= g_Mp && GetPlayerBit( g_bConnected , attacker ) ) ) return HAM_IGNORED ; if ( !( 1 <= victim <= g_Mp ) || g_iTeam[ attacker ] == g_iTeam[ victim ] ) return HAM_IGNORED ; if( !get_pcvar_num( pcvar_allowhabs ) ) return HAM_IGNORED; if ( g_iMejoras[ attacker ][ 2 ] ) { if( random_num( 0, 100 ) < random_num( 0, 100 ) < random_num( 0, 100 ) ) { SetHamParamFloat( 4, damage * 2 ); set_hudmessage( 0, 255, 0, -1.0, -1.0, 0, 6.0, 1.1, 3.0, 3.0, 3 ); show_hudmessage( attacker, "Golpe Critico!!!!" ) ; } } if( g_iMejoras[ attacker ][ 0 ] ) { set_hudmessage( 255, 0, 0, 0.45, 0.50, 2, 0.1, 4.0, 0.1, 0.1, -1 ); ShowSyncHudMsg( attacker, sycn, "Daño Inflingido: %i^n", floatround( damage ) ); } return HAM_HANDLED; } public func_habilities( const index ) { if( !get_pcvar_num( pcvar_allowhabs ) ) return PLUGIN_CONTINUE; ShowHabs( index ); return PLUGIN_HANDLED; } public ShowHabs( const index ) { ClearString( g_szTxt ); static menu , r ; formatex( g_szTxt, GET_SIZE( g_szTxt ), "Lista de \yHabilidades" ); menu = menu_create( g_szTxt , "mh_mejoras" ) ; for ( r = 0 ; r < sizeof( g_szMejoras ) ; ++ r ) menu_additem( menu, g_szMejoras[ r ][ Updates_Name ] ) ; menu_setprop( menu, MPROP_NUMBER_COLOR, "\y" ); menu_setprop( menu, MPROP_NEXTNAME, "Siguiente" ); menu_setprop( menu, MPROP_BACKNAME, "Atras" ); menu_setprop( menu, MPROP_EXITNAME, "Salir" ); menu_display( index, menu ) ; } public mh_mejoras( const index, const menu , const item ) { if ( item == MENU_EXIT || get_pcvar_num( pcvar_allowhabs ) < 1 ) { menu_destroy( menu ) ; return PLUGIN_HANDLED; } g_iIdMejoras[ index ] = item ; mejoras_inf( index , item ) ; menu_destroy( menu ) ; return PLUGIN_HANDLED; } public mejoras_inf( const index , const item ) { ClearString( g_szTxt ); static len ; len = 0 ; len += formatex( g_szTxt[ len ] , GET_SIZE( g_szTxt ) - len, "\y%s \dHabilidad:^n\y%s^n^n", g_iMejoras[ index ][ item ] ? "Habilitar \wo \rDesahabilitar" : "Viendo", g_szMejoras[ item ][ Updates_Name ] ) ; len += formatex( g_szTxt[ len ] , GET_SIZE( g_szTxt ) - len, "\yDESCRIPCION:^n\d %s^n^n", g_szMejoras[ item ][ Updates_Desc ] ); if( g_iRangos[ index ] < g_szMejoras[ item ][ Updates_Required ] ) { len += formatex( g_szTxt[ len ] , GET_SIZE( g_szTxt ) - len, "\yNECESARIO:^n" ) ; len += formatex( g_szTxt[ len ] , GET_SIZE( g_szTxt ) - len, "\y-\d Rango Requerido: \w%s ^n^n", g_szRangos[ g_szMejoras[ item ][ Updates_Required ] ][ RANGE_NAME ] ) ; } else { len += formatex( g_szTxt[ len ] , GET_SIZE( g_szTxt ) - len, "\y[ \w1 \y]. \w%s \yHabilidad^n^n" , g_iMejoras[ index ][ item ] ? "Deshabilitar" : "Habilitar" ); } len += formatex( g_szTxt[ len ] , GET_SIZE( g_szTxt ) - len, "\y[ \w0 \y]. \wAtras" ) ; show_menu( index, KEYUPDT, g_szTxt, -1 , "Menu Habilidades" ); } public mh_mejoras_inf( index , key ) { switch( key ) { case 0 : { g_iMejoras[ index ][ g_iIdMejoras[ index ] ] = 1 - g_iMejoras[ index ][ g_iIdMejoras[ index ] ] ; mejoras_inf( index, g_iIdMejoras[ index ] ) ; } case 9 : { func_habilities( index ) ; } } return PLUGIN_HANDLED ; } public client_putinserver( index ) { SetPlayerBit( g_bConnected, index ); get_user_name( index, g_szPN[ index ], charsmax( g_szPN[ ] ) ); arrayset( g_iTime[ index ], 0, sizeof( g_iTime[ ] ) ); g_iRangos[ index ] = 0; set_task( 1.0, "ShowHRangos", index+TASK_HOURS, _, _, .flags = "b" ); func_management( index, LOAD ); } public client_infochanged( index ) { if( !is_user_connected( index ) ) return; static NewName[ 32 ]; get_user_info( index, "name", NewName, 31 ); if( !equal( NewName, g_szPN[ index ] ) ) { copy( g_szPN[ index ], 31, NewName ); func_management( index, SAVE ); } } public client_disconnect( index ) { remove_task( index + TASK_HOURS ); ClearPlayerBit( g_bConnected, index ); func_management( index, SAVE ); } public ShowHRangos( taskid ) { static index; index = HUD_ID; if( GetPlayerBit( g_bConnected, index ) ) { if( g_iTime[ index ][ SECS ] >= 59 ) { g_iTime[ index ][ SECS ] = 0; g_iTime[ index ][ MINS ]++; } else g_iTime[ index ][ SECS ]++; if( g_iTime[ index ][ MINS ] >= 59 ) { g_iTime[ index ][ MINS ] = 0; g_iTime[ index ][ HOURS ]++; Range_check( index ); } } set_hudmessage( 200, 100, 0, 0.1, 0.03, 1 ); ShowSyncHudMsg( index, g_iHud, "Rango: [ %s ]^n^n[ Tiempo Jugado ]^n[ Segundos: %d ]^n[ Minutos: %d ]^n[ Horas: %d ]", g_szRangos[ g_iRangos[ index ] ][ RANGE_NAME ], g_iTime[ index ][ SECS ], g_iTime[ index ][ MINS ], g_iTime[ index ][ HOURS ] ); } public Range_check( index ) { static Range_Up, iLimit; Range_Up = false; iLimit = ( GET_SIZE( g_szRangos ) ); if( g_iTime[ index ][ HOURS ] >= g_szRangos[ g_iRangos[ index ] ][ RANGE_REQUIRED ] && g_iRangos[ index ] < iLimit ) { g_iRangos[ index ] += clamp( 1, 0, iLimit ) ; Range_Up = true; } if( Range_Up ) { CC( 0, "^4%s a sido promovido a ^1%s", g_szPN[ index ], g_szRangos[ g_iRangos[ index ] ][ RANGE_NAME ] ); func_management( index, 0 ); Range_Up = false; } } public func_management( index, iWhat ) { switch( iWhat ) { case LOAD: { if( !adv_vault_get_prepare( g_iGuardado, _, g_szPN[ index ] ) ) return; g_iRangos[ index ] = adv_vault_get_field( g_iGuardado, g_iFields[ FIELD_RANGES ] ); adv_vault_get_field( g_iGuardado, g_iFields[ FIELD_TIMES ], g_iTime[ index ], sizeof ( g_iTime[ ] ) ); } case SAVE: { adv_vault_set_start( g_iGuardado ); adv_vault_set_field( g_iGuardado, g_iFields[ FIELD_TIMES ], g_iTime[ index ] ); adv_vault_set_field( g_iGuardado, g_iFields[ FIELD_RANGES ], g_iRangos[ index ] ); adv_vault_set_end( g_iGuardado, 0, g_szPN[ index ] ); } } } stock CC( index, const input[ ], any:... ) { static iSayText, sziMsg[ 191 ]; if ( !iSayText ) iSayText = get_user_msgid( "SayText" ); replace_all( sziMsg, 190, "!g", "^4" ); replace_all( sziMsg, 190, "!y", "^1" ); replace_all( sziMsg, 190, "!team", "^3" ); vformat( sziMsg, 190, input, 3 ); message_begin( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, iSayText, .player = index ); write_byte( index ? index : 33 ); write_string( sziMsg ); message_end( ); } Criticas Constructivas y/o Sugerencias.1 punto -
Hola gente del foro ^^ Nombre del mod: GhostMod. Versión del mod: 1.0. Autor: Skylar. Imágenes: No tengo. Descripción: Al comienzo de la ronda se elige un usuario al azar(random) y es convertido en el Ghost y ese usuario elegido tendrá que matar a los policÃas. El Ghost es un terrorista invisible, el tÃtulo lo dice jaja. Los stocks "PrecacheSound" y "PlaySound" remplazan a "precache_sound" y "client_cmd". La función de esos stocks, es que precachea y reproduce el sonido sin importa que sea ".mp3" o ".wav". Quizás pronto actualize y le agregue algunas cosas más. Sonidos: http://www.mediafire.com/download/6x28rx15jmwp08n/SonidosGhostMod.rar Código. Espero que les guste1 punto
-
Hola, estoy haciendo un plugin especialmente para Mundo Mapping, que consiste unicamente en un plugin para crear mapas, que solo va a ser de ayuda en modo offline (Es decir que en algun servidor hosteado, no tendria sentido), ademas de que todo el mundo tendria acceso a el comando (O los comandos en un futuro), ya que no es necesario ponerle para que solo funciones para admines, etc (Porque aquel que solo lo quiere usar, con instalar el amx y poner el plugin, ya es suficiente). El plugin es para facilitar el testeo de los mapas y para ver cosas. La idea de este th, es para que nadie me quite la idea (Ya que a nadie se le ocurrio todavia) pero principalmente para que aporten ideas aquel que quiera. El plugin por ahora tiene: * Capacidad de modificar vida y chaleco: Vida desde los 1 HP minimo e infinito (O lo que de el motor grafico del juego) maximo, y chaleco, desde 0 hasta 999. * Noclip y Godmode: Muy util para llegar a zonas que seria muy complicado o muy lerdo, como un mapa kz por ejemplo, etc. * Unstuck (O en español, destrabarse): Es justamente para lo que dice, destrabarse en un solo toque sin necesidad de abrir el submenu de godmode y noclip, para cuando se queda bugueado con algo. * Contador de errores: Este es un contador manual de errores, no es de mucha ayuda, pero lo puede ser, se trata de un submenu donde se elije: Sumar 1 error, restar un error o llevar el conteo de errores a 0, este puede ser util a medida que se va testendo el o los mapas, llevar un conteo de los errores encontrados (Mas adelante, una nueva version donde permita escribir el error y descripcion para luego exportar un archivo .log donde dig la cantidad y cada uno de los errores escritos). Este lo hice principalmente para boludos como yo que prueban el mapa y se acuerdan de la mitad de los errores. * Armas: Esto permitira sacar completamente las armas del jugador (Incluso el cuchillo), permite sacar todas las armas menos el cuchillo y permite darle todas las granadas al jugador. * Respawn y kill: Esto permite respawnear sin que la ronda termine (A esto lo estoy por probar si es efectivo, por lo menos lo hace sin que muera (Se ahorra tiempo)) y permite suicidarse de una manera rapida (Lo puse ams que nada como para que no este tan vacio xD). * Dinero: Permite agregar de a $1000, quitar de a $1000, restablecer la plata a $o o a $16000 (Util para comprar armas rapidamente). * Mas opciones: Activar y desactivar el gl_wireframe 2 en un solo toque, quitar todas las armas del mapa (Los armoury_entity, para ver el cambio en el rendimiento y mas cosas), ver los wpolys y epolys en un solo toque (Tambien desactivar para verlo tocando el mismo número), permite cargar el mapa que se esta testeando actualmente pero en modo "Single Player" (Esto se debe hacer previamente si se quiere usar el gl_wireframe). * Vistas: Permite cambiar entre primera persona, vista superior (Desde arriba) y tercera persona. (Muy util). Por ahora estoy buscando mas cosas para los submenus que estan un poco vacion (Como el de las armas, o el de respawn y kill y sobretodo, estoy buscando el comando que hace un efecto similar al del gl_wireframe 2 pero que actue en los models (Porque este no lo hace). Saludos.1 punto
-
Nombre del mod: Mod Chainsaw Autor/Creador del mod: Skylar Versión del mod: 1.7 Imágenes: No tengo. Descripción: Al comenzar la ronda, se elegirá al azar/random un usuario que será elegido cómo el Chainsaw, la función del Chainsaw será matar a todos los humanos. Créditos: Kikizon2 = Algunos plugins suyos, y fixs. Matians = Algunos bugs/problemas en el código. Nazi.- = Algunas cosas de sus códigos. Luchito = Optimizaciones. NkkI = Bloquear linterna, y algunas otras cosas. I'mBuggimen = Bitsum y otras cosas. El changelog del mod, está dentro del archivo .sma. Recursos:http://www.mediafire.com/download/2jb1941bu8ucw7q/ArchivosModChainsaw.rar Archivo .sma: https://amxmodx-es.com/attachment.php?aid=3276 Include: https://amxmodx-es.com/attachment.php?aid=3188 Bug, error, log, comenten, lo arreglaré enseguida. No sé subÃr archivos adjuntos, asà que dejo el código en php y también dejo el .sma para descargar. Gracias /* ============================================================================================== [ Mod Chainsaw ] Changelog 1.0 - Creación del modo. 1.1 - Agregado conteo Model al humano y al chainsaw. 1.2 - Corregido algunos bugs. 1.3 - Corregido algunos bugs. Agregado model y sound al knife chainsaw. Agregado menú de armas. Agregado model al knife humano. 1.4 - Corregido algunos bugs. Bloqueado chooseteam. 1.5 - Corregido mas bugs. Bloqueado c4. Algunas optimizaciones. 1.6 - Agregado bitsum. Bloqueada linterna para el chainsaw. 1.7 - Corregido bugs. ============================================================================================== */ // Includes #include <amxmodx> #include <amxmisc> #include <cstrike> #include <colorchat> #include <engine> #include <fakemeta> #include <fun> #include <hamsandwich> // Register Plugin new const RegisterPlugin[][] = { "Mod Chainsaw", "1.7", "Skylar" }; // Prefix new const sPrefix[] = "^3[ M. Chainsaw ]^1"; // Defines #define TIEMPO 40.0 // Bitsum #define BitTrue(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) ) #define IsBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) ) #define BitFalse(%1,%2) ( %1 &= ~ ( 1 << ( %2 & 31 ) ) ) /* ================================================================================= ================================================================================= */ new gChainsaw[33]; new gTiempoConteo, gConteoHud; new gVarHud, iMaxP; new gUsuarioConectado, gUsuarioVivo; enum (+=100) { TASK_CONTEO = 2000 }; enum _:ARMAS { NOMBRE[90], ARMA[90], CSW, BPAMMO } const gVidaHumano = 200; const gArmorHumano = 200; const Float:gSpeedHumano = 260.0; const Float:gGravHumano = 0.5; new const ModelHumano[] = "Player_Humano"; new const ModelKnifeHumano[] = "models/ModChainsaw/vKnifeHumano.mdl"; const gVidaChainsaw = 5000; const Float:gSpeedChainsaw = 270.0; const Float:gGravChainsaw = 0.3; new const ModelChainsaw[] = "Player_Chainsaw"; new const ModelKnifeChainsaw[] = "models/ModChainsaw/vKnifeChainsaw.mdl"; new const gSonidosConteo[][] = { 0, "ModChainsaw/Conteo/one.wav", "ModChainsaw/Conteo/two.wav", "ModChainsaw/Conteo/three.wav", "ModChainsaw/Conteo/four.wav", "ModChainsaw/Conteo/five.wav", "ModChainsaw/Conteo/six.wav", "ModChainsaw/Conteo/seven.wav", "ModChainsaw/Conteo/eight.wav", "ModChainsaw/Conteo/nine.wav", "ModChainsaw/Conteo/ten.wav" }; new const gChainsawSounds[][] = { "ModChainsaw/Knife/chainsaw2_miss.wav", "ModChainsaw/Knife/chainsaw1_miss.wav", "ModChainsaw/Knife/chainsaw2_miss.wav", "ModChainsaw/Knife/chainsaw1_hit.wav", "ModChainsaw/Knife/chainsaw2_hit.wav", "ModChainsaw/Knife/chainsaw1_hit.wav", "ModChainsaw/Knife/chainsaw1_miss.wav", "ModChainsaw/Knife/chainsaw2_miss.wav", "ModChainsaw/Knife/chainsaw1_hit.wav" }; new const gKnifeSounds[][] = { "weapons/knife_deploy1.wav", "weapons/knife_hit1.wav", "weapons/knife_hit2.wav", "weapons/knife_hit3.wav", "weapons/knife_hit4.wav", "weapons/knife_hitwall1.wav", "weapons/knife_slash1.wav", "weapons/knife_slash2.wav", "weapons/knife_stab.wav" }; new const SoundAmbient[] = "sound/ModChainsaw/Ambient.mp3"; new const BlockWeapon[][] = { "weaponbox", "armoury_entity", "weapon_shield" }; new const PRIMARIAS[][ARMAS] = { { "Ingram MAC-10", "weapon_mac10", CSW_MAC10, 999 }, { "Schmidt TMP", "weapon_tmp", CSW_TMP, 999 }, { "UMP 45", "weapon_ump45", CSW_UMP45, 999 }, { "MP5 Navy", "weapon_mp5navy", CSW_MP5NAVY, 999 }, { "ES P90", "weapon_p90", CSW_P90, 999 }, { "IMI Galil", "weapon_galil", CSW_GALIL, 999 }, { "Famas", "weapon_famas", CSW_FAMAS, 999 }, { "SG-552 Commando", "weapon_sg552", CSW_SG552, 999 }, { "M4A1 Carbine", "weapon_m4a1", CSW_M4A1, 999 }, { "AK-47 Kalashnikov", "weapon_ak47", CSW_AK47, 999 } }; new const SECUNDARIAS[][ARMAS] = { { "USP .45 ACP Tactical", "weapon_usp", CSW_USP, 999 }, { "Glock 18C", "weapon_glock18", CSW_GLOCK18, 999 }, { "P228 Compact", "weapon_p228", CSW_P228, 999 }, { "FiveseveN", "weapon_fiveseven", CSW_FIVESEVEN, 999 }, { "Desert Eagle .50 AE", "weapon_deagle", CSW_DEAGLE, 999 }, { "Dual Elite Berettas", "weapon_elite", CSW_ELITE, 999 } }; new const MensajesMod[][] = { "%s Mod creado por^4 Skylar^1.", "%s Puedes encontrar el mod en^4 amxmodx-es.com^1.", "%s Nombre:^4 Chainsaw Mod ^3||^1 Version:^4 1.7^1." }; const PEV_SPEC_TARGET = pev_iuser2; const IMPULSE_FLASHLIGHT = 100; /* ================================================================================= ================================================================================= */ public client_putinserver(id) BitTrue(gUsuarioConectado, id); public client_disconnect(id) { BitFalse(gUsuarioConectado, id); BitFalse(gUsuarioVivo, id); } public plugin_precache() { static i; set_lights("b"); static gPrecache[64]; formatex(gPrecache, charsmax(gPrecache), "models/player/%s/%s.mdl", ModelHumano, ModelHumano); precache_model(gPrecache); formatex(gPrecache, charsmax(gPrecache), "models/player/%s/%s.mdl", ModelChainsaw, ModelChainsaw); precache_model(gPrecache); precache_model(ModelKnifeHumano); precache_model(ModelKnifeChainsaw); for(i = 0; i < sizeof gSonidosConteo; i++) engfunc(EngFunc_PrecacheSound, gSonidosConteo[i]); for(i = 0; i < sizeof gChainsawSounds; i++) precache_sound(gChainsawSounds[i]); precache_sound(SoundAmbient); } public plugin_init() { register_plugin(RegisterPlugin[0], RegisterPlugin[1], RegisterPlugin[2]); register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0" ); register_logevent("event_RoundEnd", 2, "1=Round_End"); register_clcmd("drop", "ClcmdBlock"); register_clcmd("kill", "ClcmdBlock"); register_clcmd("chooseteam", "ClcmdBlockJoin"); RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn"); RegisterHam(Ham_Item_PreFrame, "player", "ham_Item_Preframe"); for(new i = 0; i < sizeof BlockWeapon; ++i) RegisterHam(Ham_Touch, BlockWeapon[i], "ham_TouchWeapon"); RegisterHam(Ham_Item_Deploy, "weapon_knife", "ham_Item_Deploy_Post", 1) RegisterHam(Ham_Spawn, "weapon_c4", "BlockC4", true); register_forward(FM_EmitSound, "fw_EmitSound"); register_message(get_user_msgid("StatusIcon"), "message_statusicon"); register_impulse(IMPULSE_FLASHLIGHT, "BloquearLinterna") gConteoHud = CreateHudSyncObj(); gVarHud = CreateHudSyncObj(); iMaxP = get_maxplayers(); set_task(TIEMPO, "MensajesRandom", .flags = "b"); set_task(1.0, "plugin_cfg"); } public plugin_cfg() { set_cvar_num("mp_autoteambalance", 0); set_cvar_num("mp_freezetime", 0); set_cvar_num("mp_flashlight", 1); set_cvar_num("mp_roundtime", 8); } public event_RoundStart() { new gPlayers[32], gNum, gPlayer; get_players(gPlayers, gNum); for(new i = 0; i < gNum; i++) { gPlayer = gPlayers[i]; gChainsaw[gPlayer] = false; } remove_task(TASK_CONTEO); gTiempoConteo = 10; set_task(1.0, "IniciarConteo", TASK_CONTEO , .flags="b"); } public event_RoundEnd() { client_cmd(0, "mp3 stop"); for(new id = 1 ; id <= iMaxP ; id++) { if (!IsBit(gUsuarioConectado, id)) continue; set_user_rendering(id); cs_reset_user_model(id); } } public ham_PlayerSpawn(id) { if (IsBit(gUsuarioConectado, id) && !IsBit(gUsuarioVivo, id) && is_user_alive(id)) BitTrue(gUsuarioVivo, id); if (IsBit(gUsuarioVivo, id)) { set_task(0.4, "DarAtrib"); } } public ham_Item_Preframe(id) { if (!IsBit(gUsuarioVivo, id)) return; set_user_gravity(id, (!gChainsaw[id]) ? gGravHumano : gGravChainsaw); set_user_maxspeed(id, (!gChainsaw[id]) ? gSpeedHumano : gSpeedChainsaw); } public ham_TouchWeapon(wpn, id) { if (!IsBit(gUsuarioConectado, id)) return HAM_IGNORED; return HAM_SUPERCEDE; } public ham_Item_Deploy_Post(wpn) { static id; id = get_weapon_ent_owner(wpn); if (!pev_valid(id) || !IsBit(gUsuarioVivo, id)) return; static WeaponID; WeaponID = cs_get_weapon_id(wpn); if (WeaponID != CSW_KNIFE) return; set_pev(id, pev_viewmodel2, (gChainsaw[id]) ? ModelKnifeChainsaw : ModelKnifeHumano); } public BlockC4(ent) { static const OBJETIVOS[][] = { "func_bomb_target", "info_bomb_target", "info_vip_start", "func_vip_safetyzone", "func_escapezone", "hostage_entity", "monster_scientist", "func_hostage_rescue", "info_hostage_rescue", "env_fog", "env_rain", "env_snow", "item_longjump", "func_vehicle", "weapon_c4" }; if (!is_valid_ent(ent)) return; static classname[32], i; entity_get_string(ent, EV_SZ_classname, classname, charsmax(classname)); for (i = 0; i < sizeof(OBJETIVOS); i++) { if (equal(OBJETIVOS[i], classname)) { remove_entity(ent); return; } } } public fw_EmitSound(id, channel, const sound[]) { if (!IsBit(gUsuarioVivo, id) || !gChainsaw[id]) return FMRES_IGNORED; for(new i = 0; i < sizeof gChainsawSounds; i++) { if (equal(sound, gKnifeSounds[i])) { emit_sound(id, channel, gChainsawSounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM) return FMRES_SUPERCEDE; } } return FMRES_IGNORED; } public message_statusicon(msg_id, msg_dest, id) { static szIcon[8]; get_msg_arg_string(2, szIcon, charsmax(szIcon)); if (equal(szIcon, "buyzone") && get_msg_arg_int(1)) { set_pdata_int(id, 235, get_pdata_int(id, 235) & ~(1<<0)); return PLUGIN_HANDLED; } return PLUGIN_CONTINUE; } public BloquearLinterna(id) { if (gChainsaw[id]) return PLUGIN_HANDLED; return PLUGIN_CONTINUE; } /* ================================================================================= ================================================================================= */ public ClcmdBlock(id) return PLUGIN_HANDLED; public DarAtrib(id) { if (!IsBit(gUsuarioVivo, id)) return; strip_user_weapons(id); give_item(id, "weapon_knife"); if (gChainsaw[id]) { set_user_health(id, gVidaChainsaw); cs_set_user_model(id, ModelChainsaw); set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 20); } else { set_user_health(id, gVidaHumano); set_user_armor(id, gArmorHumano); cs_set_user_model(id, ModelHumano); } } public IniciarConteo() { emit_sound(0, CHAN_VOICE, gSonidosConteo[gTiempoConteo], 1.0, ATTN_NORM, 0, PITCH_NORM); set_hudmessage(0, 255, 0, -1.0, 0.28, 2, 0.02, 1.0, 0.01, 0.1, 10); ShowSyncHudMsg(0, gConteoHud, "------ [ MODO EN %i ] ------", gTiempoConteo); gTiempoConteo--; if (!gTiempoConteo) { ModoChainsaw(); remove_task(TASK_CONTEO); } } public ModoChainsaw() { new gCName[32]; new gPlayers[32], gNum, gPlayer; get_players(gPlayers, gNum, "a"); for(new i = 0; i < gNum; i++) { gPlayer = gPlayers[i]; cs_set_user_team(gPlayer, CS_TEAM_CT); DarAtrib(gPlayer); } new gMChainsaw = ElegirChainsaw("a"); get_user_name(gMChainsaw, gCName, charsmax(gCName)); DarChainsaw(gMChainsaw); set_hudmessage(255, 0, 0, -1.0, 0.28, 2, 0.02, 1.0, 0.01, 0.1, 10); ShowSyncHudMsg(0, gVarHud, "EL CHAINSAW ES %s.", gCName); client_cmd(0, "mp3 play ^"%s^"", SoundAmbient); for(new id = 1 ; id <= iMaxP ; id++) { if (!IsBit(gUsuarioConectado, id) || gChainsaw[id]) continue; if (cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED) continue; set_task(0.5, "MenuArmas", id); } } ElegirChainsaw(const Flags[]="", const Team[]="") { static gPlayers[32], gNum; get_players(gPlayers, gNum, Flags, Team); return (gNum > 0) ? gPlayers[random(gNum)] : 0; } DarChainsaw(id) { if (!IsBit(gUsuarioVivo, id)) return; gChainsaw[id] = true; cs_set_user_team(id, CS_TEAM_T); strip_user_weapons(id); give_item(id, "weapon_knife"); cs_set_user_nvg(id, 1); DarAtrib(id); } public MenuArmas(id) { if (!IsBit(gUsuarioVivo, id)) return; new i, menu, text[100], temp[16]; menu = menu_create("\r[\dM. Chainsaw\r]\w Menu de Armas \r(\dPrimarias\r)", "HandPriMenuArmas"); for(i = 0; i < sizeof PRIMARIAS; i++) { formatex(text, charsmax(text), "\w%s", PRIMARIAS[i][NOMBRE]); num_to_str(i, temp, 2); menu_additem(menu, text, temp); } menu_setprop(menu, MPROP_EXITNAME, "Salir"); menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu); } public HandPriMenuArmas(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } strip_user_weapons(id); give_item(id, "weapon_knife"); give_item(id, PRIMARIAS[item][ARMA]); cs_set_user_bpammo(id, PRIMARIAS[item][CSW], PRIMARIAS[item][bPAMMO]); ColorChat(id, NORMAL, "%s Elegiste la arma primaria:^4 %s^1.", sPrefix, PRIMARIAS[item][NOMBRE]); ArmasSec(id); return PLUGIN_HANDLED; } public ArmasSec(id) { if (!IsBit(gUsuarioVivo, id)) return; new i, menu, text[100], temp[16]; menu = menu_create("\r[\dM. Chainsaw\r]\w Menu de Armas \r(\dSecundarias\r)", "HandSecundarias"); for(i = 0; i < sizeof SECUNDARIAS; i++) { formatex(text, charsmax(text), "\w%s", SECUNDARIAS[i][NOMBRE]); num_to_str(i, temp, 2); menu_additem(menu, text, temp); } menu_setprop(menu, MPROP_EXITNAME, "Salir"); menu_setprop(menu, MPROP_EXIT, MEXIT_ALL); menu_display(id, menu); } public HandSecundarias(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } give_item(id, SECUNDARIAS[item][ARMA]) cs_set_user_bpammo(id, SECUNDARIAS[item][CSW], SECUNDARIAS[item][bPAMMO]); ColorChat(id, NORMAL, "%s Elegiste la arma secundaria:^4 %s^1.", sPrefix, SECUNDARIAS[item][NOMBRE]); return PLUGIN_HANDLED; } public MensajesRandom() ColorChat(0, NORMAL, MensajesMod[random(sizeof MensajesMod-1)], sPrefix); public ClcmdBlockJoin() return PLUGIN_HANDLED; /* ================================================================================= ================================================================================= */ stock get_weapon_ent_owner(ent) { if (pev_valid(ent) != 2) return -1; return get_pdata_cbase(ent, 41, 4); }1 punto
-
Bueno, aca esta el plugin que estaba armando hace muy poco. Estoy un poco con sueño asi que ahora no voy a poner imagenes y no voy a explicar detalladamente su uso, mañana si tengo tiempo lo hago. Este plugin permite testear los mapas deseados de manera muy comoda y sencilla. Solo es conveniente o sirve en modo offline (Es decir, jugando solo preferentemente sin bots, creando una partida nueva). Este plugin permite: * Modificar vida desde los 1HP en adelante, sumando y restando de 10 en 10 o restaurando completamente la vida a 100 * Modificar Chaleco desde los 0 Armor hasta los 900 Armor, sumando y restando de 10 en 10 o restaurando completamente el chaleco a 100 * Usar Noclip y Godmode de manera muy cómoda * Usar una opcion de destrabarse en un solo toque (Para cuando se queda bugueado y no se quiere perder tanto tiempo con el Noclip) * Contador de errores muy complejo: Este contador de errores es muy complejo en cuanto a funcionalidad, tiene las siguientes caracterÃsticas: A) Llevar un conteo de errores manual a medida que se va probando el mapa Cuando se apreta para sumar un error, este pregunta si se quiere o no tomar las coordenadas de la ubicacion del error preguntando si se quieren tomar desde donde esta el jugador parado o a donde esta apuntando el jugador, pero si no se desea poner las coordenadas, esta tambien esa opcion. C) Despues de elegir alguna de esas 3 opciones, sale un tercer paso, que es especificar brevemente una descripcion del error, escribiendo normalmente (Es automatico), si no se desea agregar ninguna descripcion, con solo apretar enter sin haber escrito, se saltea este paso. D) Y el ultimo paso, de regreso al menu de conteo de errores, hay una opcion que es para exportar el archivo log, esto crea un archivo .log que se guarda en addons/amxmodx/configs/MT como Log_Errores_Mapa.(El nombre del mapa).log, que al abrirlo con el block de notas, se puede ver claramente que guarda los errores tomados, con la descripcion (Si no se puso ninguna dice que no hay descripcion) y con las coordenadas en los ejes X, Y, Z (No muestra coordenadas si no se pidio), y tambien enumera los errores auntomaticamente. Este sistema tambien cuenta con la opcion de restar un error, esto cada vez que se reste un error, de borra el ultimo error escrito, si se borro y luego se vuelve a apretar, borra el anterior al borrado. Tambien cuanta con un boton de Restablecer los errores, esto borra el archivo .log y lleva el conteo a 0. * Tener un uso de Armas, en este caso, permite sacar todo tipo de armas que se lleva ensima, permite dejarse solo el cuchillo y tambien ponerse todas las granadas. * Usar el Res & Kill, esto permite hacer un suicidio (Kill) rapido (Lo puse para que no este tan vacio el menu xD) y tambien Respawnear inmediatamente sin que termine la ronda ni que muera el jugador. * Modificar la plata desde los $0 hasta los $16000, sumando y restando de $1000 o restaurar la plata a $0 o $16000 * Tener mas opciones: A) Activar y desactivar en un solo toque el gl_wireframe 2 (Previamente haber cargado el mapa en modo "Single Player" Eliminar todas las armas del mapa (Temporalmente), borrando todos los armoury_entity del mapa (Esto es muy util para Testear un cambio en el rendimiento del mapa). Al volver a cargar el mapa, vuelven a estar en su lugar. Cuando se borra, dice exactamente cuantas se borraron en total. C) Activar y desactivar la vision de las Wpolys y Epolys en un solo toque. D) Cargar el mapa en modo "Single Player" (Esto esta en version Beta, ya que funciona cuando quiere y pocas veces). * Modificar las vistas en: A) Primera persona (Normal) Vista superior (Desde arriba) C) Tercera persona (Como si se jugara al GTA) * Obtener informacion hacerca del plugin muy importante, con créditos a Mundo Mapping (En la siguiente version van todos los que me ayudaron en los creditos en esa seccion, recien se me ocurre xD). Comando para usar el plugin (En consola): mtmenu Descarga del plugin: https://mega.co.nz/#!oQhHkCCI!ryJN0lfVmaWLTeNDumDQVij-CwTGUwvLWRC_az3Rljw Pruebenlo y diganme si les gusta, si esta bueno, que le falta, que errores tiene, etc. Saludos.1 punto
-
Problema con Combo Sprites
FedeeRG4L reaccionó a Angelito max-style 5 por un tema
Buenas quiero aprender a cambiar el sistema de cobmo sprites por uno editador por mi, yo tengo el sma. tengo los sprites pero al momento de unir todos los sprites no los une sino que me da error e programa que se encarga de unir dicho sprites mencionados.1 punto -
Nombre: Como hacer un menú con FOR Author: Kiske(Creador), Neeeeeeeeeel.-(Publicador) Imágenes: Fuente: Como hacer un menú con for Resto del tutorial: #include <amxmodx> #define PLUGIN "Menu con For" #define AUTHOR "Kiske" #define VERSION "1.0" #define LISTA_ANIMALES 10 // Ponemos que LISTA_ANIMALES es Igual a 10. new const Rank[listA_ANIMALES][] = { "Cerdo", "Pajaro", "Pinguino", "Elefante", "Chancho", "Perro", "Gato", "Loro", "Cacatua", "Dinosaurio" } // Lista de Animales. Tiene que tener la misma cantidad de Lugares, que le asignamos a "LISTA_ANIMALES". En este caso 10. public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_clcmd("say /menu", "MenuConFor") register_clcmd("say_team /menu", "MenuConFor") } public MenuConFor(id) { new Animales[50], Posicion[10] // Creamos 2 Variables. new menu = menu_create("\yLista de Animales", "MenuAnimales") // Creamos el Menu con su Nombre. // Creamos el Loop, y ponemos: "i = 0 [i es igual a 0]", "i < LISTA_ANIMALES [si i es menor a LISTA_ANIMALES(10)]", "i++ [i aumenta en 1]". for(new i = 0; i < LISTA_ANIMALES; i++) { // Creamos un Formatex poniendo que la Variable "Animales" va a ser igual a el TEXTO escrito ahi. formatex(Animales, charsmax(Animales), "Animal %d: \y%s\w!", i, Rank[i]) num_to_str(i, Posicion, charsmax(Posicion)) // Pasamos un Numero a un String: "i(num) lo pasamos a Posicion(string)". menu_additem(menu, Animales, Posicion) // Creamos un nuevo Item en el Menu, con el Texto y la Posicion. } menu_setprop(menu, MPROP_NEXTNAME, "Pagina Siguiente") // Nombre para pasar la a la Pagina Siguiente. menu_setprop(menu, MPROP_BACKNAME, "Pagina Anterior") // Nombre para pasar la a la Pagina Anterior. menu_setprop(menu, MPROP_EXITNAME, "Salir") // Nombre para Salir del Menu. menu_display(id, menu, 0) // Ponemos que cuando abra el Menu, aparesca en la Pagina 0. DEFAULT!. return PLUGIN_HANDLED; // Ponemos esto para que no de noticia en el Say que escribimos algo para abrir el menu. } public MenuAnimales(id, menu, item) { if(item == MENU_EXIT) { menu_destroy(menu) return PLUGIN_HANDLED } new data[6], iName[64], access, callback menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback) switch(str_to_num(data)) { case 1..10: return PLUGIN_HANDLED } menu_destroy(menu) return PLUGIN_HANDLED }1 punto
-
Nombre: Tutorial de menues Author: [Anti] Imágenes: No hay.. Fuente: [TUT] Tutorial de menues Resto del tutorial: Les dejo un tuto de como hacer varios tipos de menu y otras herramientas. Tienen que tener una base en scripting de pawn. Creo que esta bastante bien explicado, cualquier duda consulten. Sistema Nuevo #include <amxmodx> public plugin_init() { register_plugin("Menu Basico", "1.0", "[Anti]"); register_clcmd( "say /menu", "cmdMenu" ); } public cmdMenu(id) { new gMenu = menu_create("\rHola soy un menu", "handlerMenu") //creamos el menu en la variable 'Menu' con el titulo 'Hola soy un menu' //que segun la opcion que elija el usuario va a llamar a la funcion 'handlerMenu' menu_additem(gMenu, "\wOpcion #1", "1") //Blanco = \w menu_additem(gMenu, "\dOpcion #2", "2") //Transparente = \d menu_additem(gMenu, "\yOpcion #3", "3") //Amarillo = \y //Rojo = \r //adderimos opciones al menu 'Menu' y le ponemos el numero de opcion menu_display(id, gMenu, 0) //aca le mostramos el menu 'Menu' al 'id'(indice de player) que queramos. //el '0' es la pagina del menu que le vamos a mostrar. } public handlerMenu(id, menu, item) //los parametros deben ir en este orden { if ( item == MENU_EXIT ) //si el item seleccionado es igual a '0'(Exit[salir]) { menu_destroy(menu) //destruimos el menu return PLUGIN_HANDLED; //y returnamos la funcion } switch(item) //hacemos un swicheo de los posibles resultados: { case 0: //en caso de que precione 1: le mandamos un msj { client_print(id, print_center, "HOLA SOY LA OPCION #1.") } case 1: //en caso de que precione 2: le mandamos otro msj { client_print(id, print_center, "HOLA SOY LA OPCION #2.") } case 2: //en caso de que precione 3: le mandamos otro msj { client_print(id, print_center, "HOLA SOY LA OPCION #3 MUAJAJAJA(?.") } } return PLUGIN_HANDLED; // returnamos la funcion... } Sistema Viejo #include <amxmodx> #include <amxmisc> new KEYSMENU = MENU_KEY_0 | MENU_KEY_1 | MENU_KEY_2; public plugin_init() { register_plugin("Menu con Len", "1.0", "[Anti]"); register_clcmd( "say /menu", "cmdOtroMenu"); register_menu("Menu", KEYSMENU, "HandMenu"); //registramos el menu 'Menu', con las teclas KEYSMENU //y el handler que al que va a llamar 'HandMenu' } public cmdOtroMenu(id) { new menu[100], len; // 'menu' es donde se va a alojar el string del menu, // en este caso le damos 99 celdas para sus caracteres len = 0; len += formatex(menu[len], sizeof menu - 1 - len, "\r Menu:^n"); len += formatex(menu[len], sizeof menu - 1 - len, "\y[1]\wOpcion #1^n"); len += formatex(menu[len], sizeof menu - 1 - len, "\y[2]\wOpcion #2^n^n"); len += formatex(menu[len], sizeof menu - 1 - len, "\r[0]\wSalir"); show_menu(id, KEYSMENU, menu, -1, "Menu"); //mostramos el menu al 'id' deseado, con las teclas ya definidas, el menu 'menu' //el timpo es lo que tarda el menu en cerrarse en este caso -1 que es infinito, como lo registre en el init 'Menu') } public HandMenu(id, keys, menu) //los parametros deben ir en este orden { switch(keys) //hacemos un swicheo de los posibles resultados: { case 0: client_print(id, print_chat, "HOLA SOY LA OPCION #1"); //en caso de que precione 1: le mostramos el menu 'gMenu', en la pagina '0' case 1: client_print(id, print_center, "HOLA SOY LA OPCION #2"); //en caso de que precione 2: le mandamos un msj case 9: menu_destroy(menu) //en caso de que precione 0: le destruimos el menu... } } 2 Menús 1 Handled #include <amxmodx> public plugin_init() { register_plugin( "2 Menus 1 Handled", "1.0", "[Anti]" ); register_clcmd("say /menu", "cmdMenu"); } public cmdMenu(id) { if ( get_user_team(id) == 1 ) //Si es del team TT. Menu_TT(id); //Mandamos al Menu TT. else if ( get_user_team(id) == 2 ) //Si es del team CT. Menu_CT(id); //Mandamos al Menu TT. } public Menu_TT(id) { new menu = menu_create("\rMenu TT:", "handMenu"); menu_additem(menu, "Opcion 1#", "T"); menu_additem(menu, "Opcion 2#", "T"); menu_additem(menu, "Opcion 3#", "T"); menu_display(id, menu, 0); //Mostramos el menu } public Menu_CT(id) { new menu = menu_create("\rMenu CT:", "handMenu"); menu_additem(menu, "Opcion 1#", "C"); menu_additem(menu, "Opcion 2#", "C"); menu_additem(menu, "Opcion 3#", "C"); menu_display(id, menu, 0); //Mostramos el menu } public handMenu(id, menu, item) { if ( item == MENU_EXIT ) //si el item seleccionado es igual a '0'(Exit[salir]) { menu_destroy( menu ); //destruimos el menu. return PLUGIN_HANDLED; //Returnamos la funcion. } new szData[2]; new item_access, item_callback; menu_item_getinfo( menu, item, item_access, szData,charsmax( szData ), _, _, item_callback ); //obtenemos informacion del menu y el item elegido. switch( szData[0] ) //Vemos la letra que hay en la primera celda de szData { case 'T': //En este caso si es "T". { switch( item ) //Switch del Menu TT { case 0: {}// Opcion 1# TT's case 1: {}// Opcion 2# TT's case 2: {}// Opcion 3# TT's } } case 'C': //En este caso si es "C". { switch( item ) //Switch del Menu CT { case 0: {}// Opcion 1# CT's case 1: {}// Opcion 2# CT's case 2: {}// Opcion 3# CT's } } } menu_destroy(menu); //Destruimos el menu return PLUGIN_HANDLED; //Returnamos el Handled } Diferentes natives(solo para el sistema nuevo) //Establece propiedades en un menu. Propiedades: #define MPROP_PERPAGE /* Numero de items en cada pagina (default 7)*/ #define MPROP_BACKNAME /* Nombre del boton "Back" */ #define MPROP_NEXTNAME /* Nombre del boton "Next" */ #define MPROP_EXITNAME /* Nombre del boton "Exit" */ #define MPROP_TITLE /* Establece el titulo de un menu */ #define MPROP_EXIT /* Establece la funcion del exit con MEXIT_NEVER(no aparece la opcion exit) y MEXIT_ALL(aparece la opcion exit[default]) */ #define MPROP_NOCOLORS /* Establece si los colores son automaticos */ #define MPROP_NUMBER_COLOR /* Establece el color de los numeros(default rojo) */ menu_setprop(menu, prop, ...); //Cancela el menu de un player. menu_cancel(player); //Adiere una linea de texto al menu. menu_addtext(menu, const text[], slot=1); //Adiere un espacio en blanco al menu. menu_addblank(menu, slot=1); //Destruye el menu. menu_destroy(menu); //Establece un texto para un item. menu_item_setname(menu, item, const name[]); //Obtiene el indice de item del menu y la pagina indicada(devuelve menor a 0 si es un item especial como MENU_EXIT) menu_find_id(menu, page, key); //Muestra a una player un menu. menu_display(id, menu, page=0); //Obtiene la cantidad de items en un menu. menu_items(menu); //Obtiene la cantidad de paginas en un menu. menu_pages(menu);1 punto
-
Nombre: Hacer Niveles Author: cLAANS Imágenes: No hay... Fuente: Tutorial - Hacer Niveles Resto del tutoriarl: #include < amxmodx > // Libreria que siempre y cada uno de nuestros plugins va a nesecitar #include < hamsandwich > // Libreria que vamos a utilizar para detectar cuando matamos a alguien y cuando revive alguien #define SetBit(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) ) // Bits, Leer tutorial de rocox para informarce mas #define ClearBit(%1,%2) ( %1 &= ~ ( 1 << ( %2 & 31 ) ) ) // Bits, Leer tutorial de rocox para informarce mas #define IsBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) ) // Bits, Leer tutorial de rocox para informarce mas #define Siguiente_nivel(%1) %1 * 15 // Macro que se elevara segun otra variable ( Mas abajo lo veran ) #define SLOTS 14 // Los Slots maximos del servidor + 1; new const VERSION[ ] = "1.0" // Definimos la version del plugin new g_frags[ SLOTS ]; // Variable que va a almacenar nuestros frags new g_level[ SLOTS ]; // Variable que va a almacenar nuestros levels new g_conectado; // Variable que vamos a utilizar para no llamar a una native ( is_user_connected( index ) ) new g_vivo; // Variable que vamos a utilizar para no llamar a una native ( is_user_alive( index ) ) public plugin_init( ) { register_plugin( "Tutorial para hacer niveles", VERSION, "cLAANS" ); RegisterHam( Ham_Killed, "player", "fw_player_killed" ); // Llamamos a Ham Killed para ver Cuando matamos a alguien RegisterHam( Ham_Spawn, "player", "fw_player_spawn" ); // Llamamos a Ham Spawn para ver cuando revive un jugador } public client_putinserver( id ) SetBit( g_conectado, id ); // Seteamos en true una variable que usaremos despues para verificar si un usuario esta conectado y asi llamar una variable menos public client_disconnected( id ) { ClearBit( g_conectado, id ); ClearBit( g_vivo, id ); } // La varibale que seteamos en true cuando se conecto el usuario la seteamos en false para evitar errores public fw_player_spawn( id ) if( is_user_alive( id ) ) // Para evitar errores, si el usuario esta vivo SetBit( g_vivo, id ) // Seteamos en true nuestra variable public fw_player_killed( victim, attacker ) { if( !IsBit( g_conectado, victim ) || !IsBit( g_vivo, victim ) || victim == attacker ) // Si no esta conectada la victima, o si no esta viva o si la victima es igual al atacante return; // Paramos la funcion /* Si un usuario no esta conectado no podra atacar asi que no verificamos si el atacante esta conectado * lo mismo cuando algunos verifican si el atacante esta vivo, si no lo esta, pues no atacara */ g_frags[ attacker ]++; // Lo que hacemos aca es aumentar nuestra variable ( g_frags ) +1 /* Hay miles de formas de las que podemos hacer actuar esta variable */ /* SI queremos la aumentamos en 10 */ g_frags[ attacker ] += 10; ClearBit( g_vivo, victim ); // Seteamos en false la variable "g_vivo" para evitar problemas chequear_nivel( attacker ); // Chequeamos si nuestros frags son los suficientes para pasar de nivel } public chequear_nivel( index ) { if( g_frags[ index ] >= Siguiente_nivel( g_level[ index ] ) ) // SI nuestros frags son mayores o iguales a los requeridos por nuestra macro { g_frags[ index ] = 0 // Seteamos los frags en 0 ( SI QUIEREN ) g_level[ index ]++; // Aumentamos 1 nivel, o los que se les den la gana } } Ahà está todo explicado...1 punto
Esta tabla de líderes esta establecida para Argentina - Buenos Aires/GMT-03:00