23/05/2020, 12:32 AM
(Última modificación: 23/05/2020, 02:38 AM por Alejandro. Edited 2 times in total.)
[AMXX] Special Pets 1.0b
Informacion del plugin:
- Sistema de gemas, solo los STAFF pueden dar gemas a los usuarios!
- Con las gemas podes comprar los pets mochilas, son permanentes después de comprarlos!
- Usa guardado adv_vault
- Este plugin fue creado por @Chema y mi persona hace ya un largo tiempo...
Creditos:
- @Chema Por ayudar en la creación del plugin!
- @jay-jay Creador de los pets mochilas en su Thread: Costumes Pack [Peluches]
Requerimientos: Imagenes :
Codigo:
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <adv_vault>
#include <engine>
#include <hamsandwich>
#define MAX_PETS sizeof( g_sPets )
#define GIVE_FLAGS ADMIN_CVAR
#define PET_NONE -1
#if AMXX_VERSION_NUM < 183
#define MAX_PLAYERS 32
#define client_disconnected(%1) client_disconnect(%1)
#define client_print_color client_print
#define print_team_default print_chat
#endif
new const g_sPluginName[ ] = "Special Pets!";
new const g_sPluginVersion[ ] = "1.0b";
new const g_sPluginAuthor[ ] = "Alejandro & Chema @ AMXMODX-ES.COM";
new const g_sChatPrefix[ ] = "^4[AMXX]^1";
new const g_sConsolePrefix[ ] = "[AMXX]";
new const g_sWebsiteUrl[ ] = "www.amxmodx-es.com";
new g_sDatabase[ ] = "AMX-Pets";
enum _:ePets_Struct {
PET_NAME[ 32 ],
MODEL_DIR[ 35 ],
PET_GEMS
};
new const g_sPets[ ][ _:ePets_Struct ] = {
{ "BB-8", "models/AMXX-Pets/BB-8.mdl", 10 },
{ "Browser JR", "models/AMXX-Pets/bowser_jr.mdl", 10 },
{ "Pequeño Freddy", "models/AMXX-Pets/fredy.mdl", 10 },
{ "Fritz Smith", "models/AMXX-Pets/fredy2.mdl", 10 },
{ "Minion", "models/AMXX-Pets/minion.mdl", 10 },
{ "Planta", "models/AMXX-Pets/plant.mdl", 10 },
{ "Girasol", "models/AMXX-Pets/sunflower.mdl", 10 }
};
new g_iPetEntity[ MAX_PLAYERS + 1 ],
g_iPetSelected[ MAX_PLAYERS + 1 ],
g_iPurchasedPets[ MAX_PLAYERS + 1 ],
g_iSelectedItem[ MAX_PLAYERS + 1 ];
new g_sPlayerName[ MAX_PLAYERS + 1 ][ 32 ];
new g_iGems[ MAX_PLAYERS + 1 ];
new bool:g_bPets[ MAX_PLAYERS + 1 ][ MAX_PETS ],
g_bEquipped[ MAX_PLAYERS + 1 ][ MAX_PETS ],
g_bCamera[ MAX_PLAYERS + 1 ];
new g_sFields[ 3 ][ MAX_PETS ];
new g_iVault,
g_vPurchasedPets,
g_vGems,
g_vPets;
new g_iMaxPlayers[ 1 char ];
public plugin_init( ) {
/* Register Plugin & Cvars */
register_plugin( g_sPluginName, g_sPluginVersion, g_sPluginAuthor );
/* Client-related Stuff */
register_clcmd( "say /pets", "ShowMenu_PetsShop" );
register_clcmd( "say /cam", "ClientCommand_ChangeCamera" );
register_concmd( "sp_gems", "ClientCommand_GiveGems", GIVE_FLAGS, "< name > < gems >" );
/* Hamsandwich's */
RegisterHam( Ham_Spawn, "player", "OnPlayer_SpawnPost", true );
/* Storage System */
new sBuffer[ 15 ];
g_iVault = adv_vault_open( g_sDatabase, false );
for( new i = 0; i< MAX_PETS; i++ ) {
format( sBuffer, 14, "Pet-%d", i + 1 );
g_sFields[ 0 ][ i ] = adv_vault_register_field( g_iVault, sBuffer );
format( sBuffer, 14, "EquipPet-%d", i + 1 );
g_sFields[ 1 ][ i ] = adv_vault_register_field( g_iVault, sBuffer );
}
g_vPurchasedPets = adv_vault_register_field( g_iVault, "PurchasedPets" );
g_vGems = adv_vault_register_field( g_iVault, "Gems" );
g_vPets = adv_vault_register_field( g_iVault, "SelectedPet" );
adv_vault_init( g_iVault );
g_iMaxPlayers{0} = get_maxplayers( );
}
public plugin_precache( ) {
precache_model( "models/rpgrocket.mdl" );
for( new i = 0; i < sizeof g_sPets; i++ )
precache_model( g_sPets[ i ][ MODEL_DIR ] );
}
public ClientCommand_ChangeCamera( const iId ) {
if( !is_user_connected( iId ) )
return PLUGIN_CONTINUE;
g_bCamera[ iId ] =! g_bCamera[ iId ];
g_bCamera[ iId ] ? set_view ( iId, CAMERA_3RDPERSON ) : set_view ( iId, CAMERA_NONE );
return PLUGIN_HANDLED;
}
public ClientCommand_GiveGems( const iId, const iLevel, const iCid ) {
if( !cmd_access( iId, iLevel, iCid, 3 ) )
return PLUGIN_HANDLED;
new sArgs[ 32 ], sNumber[ 10 ];
read_argv( 1, sArgs, charsmax( sArgs ) );
read_argv( 2, sNumber, charsmax( sNumber ) );
static sStaffName[ 33 ];
get_user_name( iId, sStaffName, charsmax( sStaffName ) );
new iTarget = cmd_target( iId, sArgs, 0 );
if( !iTarget ) {
console_print( iId, "%s Jugador no encontrado.", g_sConsolePrefix );
return PLUGIN_HANDLED;
}
new iGems = str_to_num( sNumber );
new sTargetName[ 32 ]; get_user_name( iTarget, sTargetName, charsmax( sTargetName ) );
g_iGems[ iTarget ] += iGems;
client_print_color( iTarget, 0, "%s ^3STAFF ^4%s^1 %s ^3%d^1 gemas.", g_sChatPrefix, sStaffName, sNumber[0] == '-' ? "te quitó" : "te regaló", iGems );
return PLUGIN_HANDLED;
}
public OnPlayer_SpawnPost( const iId ) {
if( is_user_alive( iId ) ) {
if( g_iPetSelected[ iId ] == PET_NONE )
return;
if( is_valid_ent( g_iPetEntity[ iId ] ) ) {
remove_entity( g_iPetEntity[ iId ] );
g_iPetEntity[ iId ] = 0;
}
g_iPetEntity[ iId ] = create_entity( "info_target" );
if( !is_valid_ent( g_iPetEntity[ iId ] ) )
return;
entity_set_int( g_iPetEntity[ iId ], EV_INT_movetype, MOVETYPE_FOLLOW );
entity_set_edict( g_iPetEntity[ iId ], EV_ENT_aiment, iId );
entity_set_int( g_iPetEntity[ iId ], EV_INT_rendermode, kRenderNormal );
entity_set_model( g_iPetEntity[ iId ], g_sPets[ g_iPetSelected[ iId ] ][ MODEL_DIR ] );
}
}
public client_putinserver( iId ) {
get_user_name( iId, g_sPlayerName[ iId ], charsmax( g_sPlayerName ) );
g_iSelectedItem[ iId ] = PET_NONE;
g_iPetSelected[ iId ] = PET_NONE;
g_iPurchasedPets[ iId ] = 0;
g_iGems[ iId ] = 0;
g_bCamera[ iId ] = false;
for( new i = 0; i < MAX_PETS; i++ ) {
g_bPets[ iId ][ i ] = false;
g_bEquipped[ iId ][ i ] = false;
}
AdvancedVault_LoadData( iId );
}
public client_disconnected( iId ) {
if( is_valid_ent( g_iPetEntity[ iId ] ) )
remove_entity( g_iPetEntity[ iId ] );
g_iPetEntity[ iId ] = 0;
AdvancedVault_SaveData( iId );
}
public ShowMenu_PetsShop( const iId ) {
new sBuffer[ 150 ];
formatex( sBuffer, 149, "\d%s^n\yTIENDA DE MASCOTAS!^n\yAdquiridas: \w%d/%d^n\yGemas: \w%d", g_sWebsiteUrl, g_iPurchasedPets[ iId ], MAX_PETS, g_iGems[ iId ] );
new iMenu = menu_create( sBuffer, "HandlerMenu_PetsShop" );
for( new i = 0; i < MAX_PETS; i++ ) {
if( g_bEquipped[ iId ][ i ] )
formatex( sBuffer, 49, "\d%s \r[EQUIPADA]", g_sPets[ i ][ PET_NAME ] );
else if( g_bPets[ iId ][ i ] )
formatex( sBuffer, 49, "\d%s \r[ADQUIRIDA]", g_sPets[ i ][ PET_NAME ] );
else if( !g_bPets[ iId ][ i ] )
formatex( sBuffer, 49, "\w%s \r[COMPRAR]", g_sPets[ i ][ PET_NAME ] );
else
formatex( sBuffer, 49, "%s%s %s[GEMAS %d]", g_iGems[ iId ] < g_sPets[ i ][ PET_GEMS ] ? "\d" : "\w", g_sPets[ i ][ PET_NAME ], g_iGems[ iId ] < g_sPets[ i ][ PET_GEMS ] ? "\d" : "\r", g_sPets[ i ][ PET_GEMS ] );
menu_additem( iMenu, sBuffer );
}
menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\r" );
menu_setprop( iMenu, MPROP_NEXTNAME, "Siguiente" );
menu_setprop( iMenu, MPROP_BACKNAME, "Atrás" );
menu_setprop( iMenu, MPROP_EXITNAME, "Cerrar" );
menu_display( iId, iMenu );
}
public HandlerMenu_PetsShop( const iId, const iMenu, const iItem ) {
if( iItem == MENU_EXIT ) {
menu_destroy( iMenu );
return PLUGIN_HANDLED;
}
client_cmd( iId, "spk ^"Ui/buttonclickrelease.wav^"" );
g_iSelectedItem[ iId ] = iItem;
ShowMenu_PreviewPets( iId );
menu_destroy( iMenu );
return PLUGIN_HANDLED;
}
public ShowMenu_PreviewPets( const iId ) {
new sBuffer[ 150 ];
if( g_bEquipped[ iId ][ g_iSelectedItem[ iId ] ] )
formatex( sBuffer, 149, "\d%s^n\yVISTRA PREVIA DE \w%s^n\yEstado: \rEQUIPADA", g_sWebsiteUrl, g_sPets[ g_iSelectedItem[ iId ] ][ PET_NAME ] );
else if( g_bPets[ iId ][ g_iSelectedItem[ iId ] ] )
formatex( sBuffer, 149, "\d%s^n\yVISTRA PREVIA DE \w%s^n\yEstado: \rADQUIRIDA", g_sWebsiteUrl, g_sPets[ g_iSelectedItem[ iId ] ][ PET_NAME ] );
else
formatex( sBuffer, 149, "\d%s^n\yVISTRA PREVIA DE \w%s^n\yPrecio: \w%d^n\yGemas: \r%d", g_sWebsiteUrl, g_sPets[ g_iSelectedItem[ iId ] ][ PET_NAME ], g_sPets[ g_iSelectedItem[ iId ] ][ PET_GEMS ], g_iGems[ iId ] );
new iMenu = menu_create( sBuffer, "Handler_ViewPet" );
if( g_bEquipped[ iId ][ g_iSelectedItem[ iId ] ] )
formatex( sBuffer, 49, "Desequipar" );
else if( g_bPets[ iId ][ g_iSelectedItem[ iId ] ] )
formatex( sBuffer, 49, "Equipar" );
else
formatex( sBuffer, 49, "Comprar", g_iGems[ iId ] < g_sPets[ g_iSelectedItem[ iId ] ][ PET_GEMS ] );
menu_additem( iMenu, sBuffer );
menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\r" );
menu_setprop( iMenu, MPROP_EXITNAME, "Atrás" );
menu_display( iId, iMenu );
}
public Handler_ViewPet( const iId, const iMenu, const iItem ) {
if( iItem == MENU_EXIT ) {
ShowMenu_PetsShop( iId );
return PLUGIN_HANDLED;
}
switch( iItem ) {
case 0: {
if( g_bEquipped[ iId ][ g_iSelectedItem[ iId ] ] ) {
g_bEquipped[ iId ][ g_iSelectedItem[ iId ] ] = false;
g_iPetSelected[ iId ] = PET_NONE;
client_print_color( iId, 0, "%s Desequipaste la mascota ^4%s^1.", g_sChatPrefix, g_sPets[ g_iSelectedItem[ iId ] ][ PET_NAME ] );
return PLUGIN_HANDLED;
}
else if( g_bPets[ iId ][ g_iSelectedItem[ iId ] ] ) {
for( new i = 0; i <MAX_PETS; i++ )
g_bEquipped[ iId ][ i ] = false;
g_iPetSelected[ iId ] = g_iSelectedItem[ iId ];
g_bEquipped[ iId ][ g_iSelectedItem[ iId ] ] = true;
client_print_color( iId, 0, "%s Equipaste la mascota ^4%s^1", g_sChatPrefix, g_sPets[ g_iSelectedItem[ iId ] ][ PET_NAME ] );
return PLUGIN_HANDLED;
}
else {
if( g_iGems[ iId ] < g_sPets[ g_iSelectedItem[ iId ] ][ PET_GEMS ] ) {
ShowMenu_PreviewPets( iId );
client_print_color( iId, 0, "%s No tienes suficientes gemas para adquirir esta mascota!", g_sChatPrefix );
return PLUGIN_HANDLED;
}
g_iGems[ iId ] -= g_sPets[ g_iSelectedItem[ iId ] ][ PET_GEMS ];
g_bPets[ iId ][ g_iSelectedItem[ iId ] ] = true;
ShowMenu_PreviewPets( iId );
client_print_color( iId, 0, "%s Adquiriste la mascota ^4%s^1.", g_sChatPrefix, g_sPets[ g_iSelectedItem[ iId ] ][ PET_NAME ] );
g_iPurchasedPets[ iId ]++;
}
}
}
client_cmd( iId, "spk ^"Ui/buttonclickrelease.wav^"" );
menu_destroy( iMenu );
return PLUGIN_HANDLED;
}
public AdvancedVault_SaveData( const iId ) {
if( !is_user_connected( iId ) )
return;
adv_vault_set_start( g_iVault );
for( new i = 0; i < MAX_PETS; i++ ) {
adv_vault_set_field( g_iVault, g_sFields[ 0 ][ i ], g_bPets[ iId ][ i ] );
adv_vault_set_field( g_iVault, g_sFields[ 1 ][ i ], g_bEquipped[ iId ][ i ] );
}
adv_vault_set_field( g_iVault, g_vPurchasedPets, g_iPurchasedPets[ iId ] );
adv_vault_set_field( g_iVault, g_vGems, g_iGems[ iId ] );
adv_vault_set_field( g_iVault, g_vPets, g_iPetSelected[ iId ] );
adv_vault_set_end( g_iVault, 0, g_sPlayerName[ iId ] );
}
public AdvancedVault_LoadData( const iId ) {
if( !adv_vault_get_prepare( g_iVault, _, g_sPlayerName[ iId ] ) )
return;
for( new i = 0; i < MAX_PETS; i++ ) {
g_bPets[ iId ][ i ] = bool:adv_vault_get_field(g_iVault, g_sFields[ 0 ][ i ]);
g_bEquipped[ iId ][ i ] = bool:adv_vault_get_field(g_iVault, g_sFields[ 1 ][ i ]);
}
g_iPurchasedPets[ iId ] = adv_vault_get_field( g_iVault, g_vPurchasedPets );
g_iGems[ iId ] = adv_vault_get_field( g_iVault, g_vGems );
g_iPetSelected[ iId ] = adv_vault_get_field( g_iVault, g_vPets );
}