Code:
#include < amxmodx >
#include < engine >
#include < fakemeta >
#include < hamsandwich >
#include < xs >
#include < zombieplague>
// ColorChat
new TeamName[][] = {
"",
"TERRORIST",
"CT",
"SPECTATOR"
};
enum Color { NORMAL = 1, GREEN, TEAM_COLOR, GREY, RED, BLUE};
ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...) {
if(!get_playersnum())
return;
new message[256];
switch(type) {
case NORMAL:
{
message[0] = 0x01;
}
case GREEN:
{
message[0] = 0x04;
}
default:
{
message[0] = 0x03;
}
}
vformat(message[1], 251, msg, 4);
// Make sure message is not longer than 192 character. Will crash the server.
message[192] = '^0';
new team, ColorChange, index, MSG_Type;
if(id) {
MSG_Type = MSG_ONE;
index = id;
}
else {
index = FindPlayer();
MSG_Type = MSG_ALL;
}
team = get_user_team(index);
ColorChange = ColorSelection(index, MSG_Type, type);
ShowColorMessage(index, MSG_Type, message);
if(ColorChange)
Team_Info(index, MSG_Type, TeamName[team]);
}
ShowColorMessage(id, type, message[]) {
static bool:saytext_used;
static get_user_msgid_saytext;
if(!saytext_used) {
get_user_msgid_saytext = get_user_msgid("SayText");
saytext_used = true;
}
message_begin(type, get_user_msgid_saytext, _, id);
write_byte(id);
write_string(message);
message_end();
}
Team_Info(id, type, team[]) {
static bool:teaminfo_used;
static get_user_msgid_teaminfo;
if(!teaminfo_used) {
get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
teaminfo_used = true;
}
message_begin(type, get_user_msgid_teaminfo, _, id);
write_byte(id);
write_string(team);
message_end();
return 1;
}
ColorSelection(index, type, Color:Type) {
switch(Type) {
case RED:
{
return Team_Info(index, type, TeamName[1]);
}
case BLUE:
{
return Team_Info(index, type, TeamName[2]);
}
case GREY:
{
return Team_Info(index, type, TeamName[0]);
}
}
return 0;
}
FindPlayer() {
new i = -1;
while(i <= get_maxplayers()) {
if(is_user_connected(++i))
return i;
}
return -1;
}
native get_user_jetpack( iPlayer );
native user_drop_jetpack( iPlayer );
native set_user_fuel( iPlayer, Float: fFuel );
native set_user_rocket_time( iPlayer, Float: fTime );
native set_user_jetpack( iPlayer, iJetpack );
new g_iJetpack, bool: g_bConnected[ 33 ], g_cName[ 33 ][ 32 ];
public zp_user_infect_attempt( iPlayer )
if( get_user_jetpack( iPlayer ) )
user_drop_jetpack( iPlayer );
public zp_user_infected_pre( iPlayer )
if( get_user_jetpack( iPlayer ) )
user_drop_jetpack( iPlayer );
public zp_user_infected_post( iPlayer )
if( get_user_jetpack( iPlayer ) )
user_drop_jetpack( iPlayer );
public client_putinserver( iPlayer )
{
g_bConnected[ iPlayer ] = true;
get_user_name( iPlayer, g_cName[ iPlayer ], 31 );
}
public client_disconnect( iPlayer )
g_bConnected[ iPlayer ] = false;
public client_infochanged( iPlayer )
{
static cInfo[ 32 ];
get_user_info( iPlayer, "name", cInfo, 31 );
if( !equali( g_cName[ iPlayer ], cInfo ) )
copy( g_cName[ iPlayer ], 31, cInfo );
}
new g_msgHUD
public plugin_init( )
{
g_iJetpack = zp_register_extra_item( "Jetpack + Bazooka", 30, ZP_TEAM_HUMAN );
g_msgHUD = CreateHudSyncObj()
register_logevent( "RoundStart", 2, "1=Round_Start" );
}
public zp_extra_item_selected( iPlayer, iItem )
{
if( iItem == g_iJetpack )
{
if( get_user_jetpack( iPlayer ) )
{
ColorChat( iPlayer,GREY, "^x04[ZP]^x01 You already have a^x03 Jetpack!" );
zp_set_user_ammo_packs( iPlayer, zp_get_user_ammo_packs( iPlayer ) + 30 );
}
else
{
set_user_jetpack( iPlayer, 1 );
set_user_fuel( iPlayer, 250.0 );
new szName[32]
get_user_name(iPlayer, szName, charsmax(szName))
set_hudmessage(255, 170, 42, 0.31, 0.84, 1, 0.0, 7.0, 1.0, 1.0, -1)
ShowSyncHudMsg(0 ,g_msgHUD,"%s has bought a Jetpack!!", szName )
ColorChat( iPlayer,GREY, "^x04[ZP]^x01 Press^x03 CTRL+SPACE^x01 to fly!" );
ColorChat( iPlayer,GREY, "^x04[ZP]^x01 Press^x03 RIGHT CLICK^x01 to shoot!" );
}
}
}
public Rocket_Touch( iOwner, iRocket )
{
if( g_bConnected[ iOwner ] )
{
static iPlayers[ 32 ], iNum, i;
get_players( iPlayers, iNum, "a" );
for( i = 0; i < iNum; i++ )
{
if( zp_get_user_zombie( iPlayers[ i ] ) )
{
static Float: fDistance, Float: fDamage;
fDistance = entity_range( iPlayers[ i ], iRocket );
if( fDistance < 320.0 )
{
fDamage = 1050.0 - fDistance;
static Float: fVelocity[ 3 ];
pev( iPlayers[ i ], pev_velocity, fVelocity );
xs_vec_mul_scalar( fVelocity, 2.75, fVelocity );
fVelocity[ 2 ] *= 1.75;
set_pev( iPlayers[ i ], pev_velocity, fVelocity );
if( float( get_user_health( iPlayers[ i ] ) ) - fDamage > 0.0 )
ExecuteHamB( Ham_TakeDamage, iPlayers[ i ], iRocket, iOwner, fDamage, DMG_BLAST );
else ExecuteHamB( Ham_Killed, iPlayers[ i ], iOwner, 2 );
ColorChat( iOwner,GREY, "^x04[ZP]^x01 Damage to^x04 %s^x01 ::^x04 %0.0f^x01 damage", g_cName[ iPlayers[ i ] ], fDamage );
}
}
}
}
}
public Jetpack_Touch( iPlayer )
return zp_get_user_zombie( iPlayer ) ? PLUGIN_HANDLED : PLUGIN_CONTINUE;
public RoundStart( )
{
static iPlayers[ 32 ], iNum, i;
get_players( iPlayers, iNum, "a" );
for( i = 0; i < iNum; i++ )
if( get_user_jetpack( iPlayers[ i ] ) )
set_user_rocket_time( iPlayers[ i ], 0.0 );
}