Thread: Build Dispenser
View Single Post
BillThailandUP
Member
Join Date: Jul 2010
Location: Thailand [Bangkok]
Old 02-16-2011 , 06:40  
Reply With Quote #22

someone make for zombie Plague please.

PHP Code:
#include < amxmodx >
#include < amxmisc >
#include < fakemeta >
#include < hamsandwich >
#include < cstrike >
#include < engine >
#include < fun >
#include < zombieplague >

#pragma semicolon 1

#define PLUGIN_VERSION        "#1.0.1"
#define BREAK_COMPUTER        6
#define HUD_DELAYTIME        0.2

;enum
{
    
STATUS_BUILDING,
    
STATUS_ACTIVE
};

new const 
gDamageSounds[ ][ ] = 
{
    
"debris/metal1.wav",
    
"debris/metal2.wav",
    
"debris/metal3.wav"
};

new const 
gDispenserClassname[ ] = "NiceDispenser:D";

new const 
gDispenserActive[ ] = "buttons/button9.wav";
new const 
gDispenserMdl[ ] = "models/dispenser.mdl";
new const 
gMetalGibsMdl[ ] = "models/computergibs.mdl";
new const 
gHealingSprite[ ] = "sprites/laserbeam.spr";

new 
gHealingBeam;
new 
gMetalGibs;
new 
gMaxPlayers;
new 
gHudSync;

new 
gCvarEnabled;
new 
gDispenserCost;
new 
gCvarDispenserHealth;
new 
gCvarBuildTime;
new 
gCvarReplenishRadius;
new 
gCvarSpinDispenser;
new 
gCvarMaxHealth;
new 
gCvarMaxArmor;

new 
Float:gDispenserOrigin33 ][ ];
new 
gBeamcolor33 ][ ];

new 
Float:flLastHudSent33 ];
new 
Float:gDispenserHealthOff33 ];

new 
bool:bDispenserBuild33 ];

new 
g_itemid;

public 
plugin_init( )
{
    
register_plugin"[ZP] Extra: Build Dispenser"PLUGIN_VERSION"tuty" );
    
g_itemid zp_register_extra_item("Build Dispenser"10ZP_TEAM_HUMAN);
    
    
register_event"TextMsg""EVENT_TextMsg""a""2&#Game_C""2&#Game_w""2&#Game_will_restart_in" );
    
register_logevent"LOG_RoundEnd"2"1=Round_End" );
    
    
RegisterHamHam_TakeDamage"info_target""bacon_TakeDamage");
    
RegisterHamHam_TraceAttack"info_target""bacon_TraceAttack" );
    
RegisterHamHam_Player_PreThink"player""bacon_PreThink" );
    
    
register_thinkgDispenserClassname"DispenserThink" );
    
register_clcmd"drop""CommandDispenserBuild" );
    
    
gCvarEnabled register_cvar"dispenser_enabled""1" );
    
gDispenserCost register_cvar"dispenser_cost""0" );
    
gCvarDispenserHealth register_cvar"dispenser_health""300" );
    
gCvarBuildTime register_cvar"dispenser_buildtime""5" );
    
gCvarReplenishRadius register_cvar"dispenser_radius""200" );
    
gCvarSpinDispenser register_cvar"dispenser_spin""1" );
    
gCvarMaxHealth register_cvar"dispenser_playermax_health""100" );
    
gCvarMaxArmor register_cvar"dispenser_playermax_armor""100" );
    
    
gMaxPlayers get_maxplayers( );
    
gHudSync CreateHudSyncObj( );
}

public 
zp_extra_item_selectedplayeritemid )
{
    if ( 
itemid == g_itemid )
    {
        
bDispenserBuildplayer ] = true;
    }
}

public 
zp_user_infected_postid )
{
    if ( 
zp_get_user_zombieid ) )
    {
        
bDispenserBuildid ] = false;
    }
}

public 
client_connectid )
{
    
bDispenserBuildid ] = false;
}

public 
plugin_precache( )
{    
    
gHealingBeam precache_modelgHealingSprite );
    
gMetalGibs precache_modelgMetalGibsMdl );
    
    
precache_modelgDispenserMdl );
    
precache_soundgDispenserActive );
    
    new 
i;
    for( 
0sizeof gDamageSoundsi++ )
    {
        
precache_soundgDamageSounds] );
    }
}

public 
CommandDispenserBuildid )
{
    if( !
is_user_aliveid ) || get_user_weaponid ) != CSW_KNIFE || get_pcvar_numgCvarEnabled ) != )
    {
        return 
PLUGIN_CONTINUE;
    }
    
    if( !( 
pevidpev_flags ) & FL_ONGROUND ) )
    {
        
client_printidprint_chat"[AMXX] You must be on ground to build a Dispenser!" );
        
        return 
PLUGIN_HANDLED;
    }

    if( 
bDispenserBuildid ] == true )
    {
        
client_printidprint_chat"[AMXX] You already have build a Dispenser!" );
        
        return 
PLUGIN_HANDLED;
    }

    new 
iMoney cs_get_user_moneyid );
    new 
iCost get_pcvar_numgDispenserCost );
    
    if( 
iMoney iCost )
    {
        
client_printidprint_chat"[AMXX] You don't have enough money to build a Dispenser... Need(%d$)"iCost );
        
        return 
PLUGIN_HANDLED;
    }

    new 
Float:flPlayerOrigin];
    
pevidpev_originflPlayerOrigin );
    
    new 
Float:flHealth floatget_pcvar_numgCvarDispenserHealth ) );

    new 
iEntity engfuncEngFunc_CreateNamedEntityengfuncEngFunc_AllocString"info_target" ) );
    
    if( !
pev_validiEntity ) )
    {
        return 
PLUGIN_HANDLED;
    }

    
set_peviEntitypev_classnamegDispenserClassname );
    
engfuncEngFunc_SetModeliEntitygDispenserMdl );
    
engfuncEngFunc_SetSizeiEntityFloat:{ -12.0, -10.0, -12.0 }, Float:{ 12.010.012.0 } );
    
set_peviEntitypev_originflPlayerOrigin );
    
set_peviEntitypev_solidSOLID_NOT );
    
set_peviEntitypev_movetypeMOVETYPE_TOSS );
    
set_peviEntitypev_healthflHealth );
    
set_peviEntitypev_takedamageDAMAGE_YES );
    
set_peviEntitypev_iuser2id );
    
set_peviEntitypev_iuser3STATUS_BUILDING );
    
set_peviEntitypev_nextthinkget_gametime( ) + 0.1 );

    
gDispenserOriginid ][ ] = flPlayerOrigin];
    
gDispenserOriginid ][ ] = flPlayerOrigin];
    
gDispenserOriginid ][ ] = flPlayerOrigin];
    
    
gDispenserHealthOffid ] = flHealth;
    
bDispenserBuildid ] = true;
    
    
set_taskfloatget_pcvar_numgCvarBuildTime ) ), "BuildDispenserSolid"iEntity );
    
cs_set_user_moneyidiMoney iCost);
    
client_printidprint_chat"[AMXX] Building a Dispenser right here..." );
    
    return 
PLUGIN_HANDLED;
}

public 
bacon_TakeDamageentidinflictoridattackerFloat:damagedamagebits )
{
    new 
szClassname32 ];
    
peventpev_classnameszClassnamecharsmaxszClassname ) );
    
    if( 
equalszClassnamegDispenserClassname ) )
    {
        new 
iOwner peventpev_iuser2 );

        if( 
peventpev_health ) <= 0.0 )
        {
            new 
szName32 ];
            
get_user_nameidattackerszNamecharsmaxszName ) );

            new 
Float:flOrigin];
            
peventpev_originflOrigin );
                
            
UTIL_BreakModelflOrigingMetalGibsBREAK_COMPUTER );
            
set_peventpev_flagspeventpev_flags ) | FL_KILLME );

            if( 
idattacker == iOwner )
            {
                
client_printiOwnerprint_chat"[AMXX] You have destroyed your Dispenser!" );
            }

            else
            {
                
client_printiOwnerprint_chat"[AMXX] %s destroyed your Dispenser!"szName );
            }

            
client_cmdiOwner"speak ^"vox/bizwarn computer destroyed^"" );
            
bDispenserBuildiOwner ] = false;
        }
        
        
gDispenserHealthOffiOwner ] = floatpeventpev_health ) );
        
emit_soundentCHAN_STATICgDamageSoundsrandom_num0charsmaxgDamageSounds ) ) ], VOL_NORMATTN_NORM0PITCH_NORM );    
    }
}

public 
bacon_TraceAttackiVictimiAttackerFloat:flDamageFloat:flDirection], iTriDamageBits )
{
    new 
szClassname32 ];
    
peviVictimpev_classnameszClassnamecharsmaxszClassname ) );
    
    if( 
equalszClassnamegDispenserClassname ) )
    {
        new 
Float:flEndOrigin];
        
get_tr2iTrTR_vecEndPosflEndOrigin );
    
        
UTIL_SparksflEndOrigin );
    }
}    

public 
bacon_PreThinkid )
{
    if( 
get_pcvar_numgCvarEnabled ) != )
    {
        if( 
is_user_aliveid ) && bDispenserBuildid ] == true )
        {
            new 
Float:flGameTime get_gametime( );
            
            if( 
flGameTime flLastHudSentid ] > HUD_DELAYTIME )
            {
                
flLastHudSentid ] = flGameTime;

                
set_hudmessagegBeamcolorid ][ ], gBeamcolorid ][ ], gBeamcolorid ][ ], 0.00.2116.0HUD_DELAYTIME );
                
ShowSyncHudMsgidgHudSync">>>[ Dispenser ]<<<^n^nHealth Status: [%d]"floatroundgDispenserHealthOffid ] ) );
            }
        }
    }
}
            
public 
DispenserThinkiEnt )
{
    if( 
pev_validiEnt ) )
    {
        new 
iStatus peviEntpev_iuser3 );
        new 
iOwner peviEntpev_iuser2 );

        switch( 
iStatus )
        {
            case 
STATUS_BUILDING:
            {
                
set_renderingiEntkRenderFxDistort255255255kRenderTransAdd70 );
            }
            
            case 
STATUS_ACTIVE:
            {
                new 
id;
                for( 
id 1id <= gMaxPlayersid++ )
                {
                    if( 
is_user_aliveid ) && cs_get_user_teamid ) == cs_get_user_teamiOwner ) )
                    {
                        new 
Float:flOrigin], iOrigin1], iOrigin2];
                        
pevidpev_originflOrigin );
                        
                        
FVecIVecgDispenserOriginiOwner ], iOrigin1 );
                        
FVecIVecflOriginiOrigin2 );

                        if( 
get_distance_fgDispenserOriginiOwner ], flOrigin ) <= floatget_pcvar_numgCvarReplenishRadius ) ) )
                        {
                            
UTIL_GiveWeaponAmmoid );
                            
                            
// people will ask why i didn't used if and else if...
                            // because i want to recharge health and armor and ammo in same time if needed :D

                            
if( get_user_healthid ) < get_pcvar_numgCvarMaxHealth ) )
                            {
                                
set_user_healthidget_user_healthid ) + );
                            }
                            
                            if( 
get_user_armorid ) < get_pcvar_numgCvarMaxArmor ) )
                            {
                                
set_user_armoridget_user_armorid ) + );
                            }
                            
                            
UTIL_BeamEntsiOrigin1iOrigin2gBeamcoloriOwner ][ ], gBeamcoloriOwner ][ ], gBeamcoloriOwner ][ ] );
                        }
                    }
                }
            }
        }
        
        if( 
get_pcvar_numgCvarSpinDispenser ) == )
        {
            new 
Float:flAngles];
            
peviEntpev_anglesflAngles );
            
            
flAngles] += 1.0;
            
            
set_peviEntpev_anglesflAngles );
        }

        
set_peviEntpev_nextthinkget_gametime( ) + 0.1 );
    }
}

public 
BuildDispenserSolidiEntity )
{
    if( 
pev_validiEntity ) )
    {
        new 
iOwner peviEntitypev_iuser2 );

        switch( 
cs_get_user_teamiOwner ) )
        {
            case 
CS_TEAM_T:
            {
                
gBeamcoloriOwner ][ ] = 255gBeamcoloriOwner ][ ] = 0gBeamcoloriOwner ][ ] = 0;
                
set_renderingiEntitykRenderFxGlowShellgBeamcoloriOwner ][ ], gBeamcoloriOwner ][ ], gBeamcoloriOwner ][ ], kRenderNormal);
            }
        
            case 
CS_TEAM_CT:
            {
                
gBeamcoloriOwner ][ ] = 0gBeamcoloriOwner ][ ] = 0gBeamcoloriOwner ][ ] = 255;
                
set_renderingiEntitykRenderFxGlowShellgBeamcoloriOwner ][ ], gBeamcoloriOwner ][ ], gBeamcoloriOwner ][ ], kRenderNormal);
            }
        }

        
set_peviEntitypev_solidSOLID_BBOX );
        
set_peviEntitypev_iuser3STATUS_ACTIVE );
        
engfuncEngFunc_DropToFlooriEntity );
        
        
emit_soundiEntityCHAN_STATICgDispenserActiveVOL_NORMATTN_NORM0PITCH_NORM );
    }
}

public 
EVENT_TextMsg( )
{
    
UTIL_DestroyDispensers( );
}

public 
LOG_RoundEnd( )
{
    
UTIL_DestroyDispensers( );
}


/*         
    ~~~~~~~~~~~~~~~~~~~~~~~
        Stocks
    ~~~~~~~~~~~~~~~~~~~~~~~
*/


stock UTIL_DestroyDispensers( )
{
    new 
iEnt FM_NULLENT;
    
    while( ( 
iEnt find_ent_by_classiEntgDispenserClassname ) ) )
    {
        new 
iOwner peviEntpev_iuser2 );
        
        
bDispenserBuildiOwner ] = false;
        
set_peviEntpev_flagspeviEntpev_flags ) | FL_KILLME );
    }
}

stock UTIL_BreakModelFloat:flOrigin], modelflags )
{
    
engfuncEngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin);
    
write_byteTE_BREAKMODEL );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
write_coord16 );
    
write_coord16 );
    
write_coord16 );
    
write_coordrandom_num( -2020 ) );
    
write_coordrandom_num( -2020 ) );
    
write_coord10 );
    
write_byte10 );
    
write_shortmodel );
    
write_byte10 );
    
write_byte);
    
write_byteflags );
    
message_end( );
}

stock UTIL_BeamEntsiStart], iEnd], rg)
{
    
message_beginMSG_PVSSVC_TEMPENTITYiStart );
    
write_byteTE_BEAMPOINTS );
    
write_coordiStart] );
    
write_coordiStart] );
    
write_coordiStart] );
    
write_coordiEnd] );
    
write_coordiEnd] );
    
write_coordiEnd] );
    
write_shortgHealingBeam );
    
write_byte);
    
write_byte);
    
write_byte);
    
write_byte80 );
    
write_byte);
    
write_byte);
    
write_byte);
    
write_byte);
    
write_byte130 );
    
write_byte);
    
message_end( );
}

stock UTIL_GiveWeaponAmmoindex )
{
    new 
szCopyAmmoData40 ];
    
    switch( 
get_user_weaponindex ) )
    {
        case 
CSW_P228copyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_357sig" );
        case 
CSW_SCOUTCSW_G3SG1CSW_AK47copyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_762nato" );
        case 
CSW_XM1014CSW_M3copyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_buckshot" );
        case 
CSW_MAC10CSW_UMP45CSW_USPcopyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_45acp" );
        case 
CSW_SG550CSW_GALILCSW_FAMASCSW_M4A1CSW_SG552CSW_AUGcopyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_556nato" );
        case 
CSW_ELITECSW_GLOCK18CSW_MP5NAVYCSW_TMPcopyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_9mm" );
        case 
CSW_AWPcopyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_338magnum" );
        case 
CSW_M249copyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_556natobox" );
        case 
CSW_FIVESEVENCSW_P90copyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_57mm" );
        case 
CSW_DEAGLEcopyszCopyAmmoDatacharsmaxszCopyAmmoData ), "ammo_50ae" );
    }
    
    
give_itemindexszCopyAmmoData );
}

stock UTIL_SparksFloat:flOrigin] )
{
    
engfuncEngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYflOrigin);
    
write_byteTE_SPARKS );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
engfuncEngFunc_WriteCoordflOrigin] );
    
message_end( );

how i can do ?
__________________
คนไทยเก่งเว้ย

Last edited by ConnorMcLeod; 03-05-2011 at 18:37. Reason: put php tags
BillThailandUP is offline
Send a message via MSN to BillThailandUP