#include <amxmodx>
#include <amxmisc>
#include <basebuilder>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <ColorChat>
#define PLUGIN "[BB]Team"
#define VERSION "1.0"
#define AUTHOR "Z!3L0ny"
new Player_id[ 33 ]
new Player_id_ask[ 33 ]
new Player_id_list[ 33 ][ 20 ]
new Float:Player_velo[ 33 ][ 3 ]
new Player_black[ 33 ]
new SprTeam;
new SprSmoke
new iNumPepole;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward( FM_Touch, "PlayerTouch" )
register_forward( FM_CmdStart, "CmdStart" )
register_clcmd( "say /team", "TeamMenu" )
register_clcmd( "say /grupa", "TeamMenu" )
register_clcmd( "say /tea", "TeamMenu" )
iNumPepole=6
}
public plugin_natives( ){
register_native( "bb_get_team_id", "ReturnPlayerId", 1 )
}
public ReturnPlayerId( id )
return Player_id[ id ]
public plugin_precache( ){
SprTeam = precache_model("sprites/Team.spr")
SprSmoke = precache_model("sprites/smoke.spr")
}
public CmdStart( id ){
if( !is_user_alive( id ) || !is_user_connected( id ) )
return FMRES_IGNORED
if( Player_velo[ id ][ 0 ] != 0.0 || Player_velo[ id ][ 1 ] != 0.0 || Player_velo[ id ][ 2 ] != 0.0 ){
entity_set_vector( id, EV_VEC_velocity, Player_velo[ id ] )
Player_velo[ id ][ 0 ] = 0.0
Player_velo[ id ][ 1 ] = 0.0
Player_velo[ id ][ 2 ] = 0.0
}
if( !bb_is_build_phase( ) && !bb_is_prep_phase( ) )
return PLUGIN_CONTINUE
if( Player_id[ id ] != 0 ){
if( get_user_team( id ) == 2 ){
if( get_user_team( Player_id[ id ] ) != get_user_team( id ) )
return PLUGIN_CONTINUE
if( Player_id[ id ] == 0 )
return PLUGIN_CONTINUE
static Float:fTime[33];
new Float:fTimeN = get_gametime();
if((fTimeN- Float:fTime[id]) >= 0.5){
new Float:fOrigin[ 3 ], iOrigin[ 3]
entity_get_vector( id, EV_VEC_origin, fOrigin )
FVecIVec( fOrigin, iOrigin )
new Float:fOrigin2[ 3 ], iOrigin2[ 3]
entity_get_vector( Player_id[ id ], EV_VEC_origin, fOrigin2 )
FVecIVec( fOrigin2, iOrigin2 )
message_begin( MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id )
write_byte(TE_BEAMPOINTS)
write_coord(iOrigin[0]) // start position
write_coord(iOrigin[1])
write_coord(iOrigin[2])
write_coord(iOrigin2[0]) // end position
write_coord(iOrigin2[1])
write_coord(iOrigin2[2])
write_short(SprSmoke) // sprite index
write_byte(0) // starting frame
write_byte(0) // frame rate in 0.1's
write_byte(1) // life in 0.1's
write_byte(4) // line width in 0.1's
write_byte(0) // noise amplitude in 0.01's
write_byte(255) // Red
write_byte(174) // Gren
write_byte(204) // Blue
write_byte(250) // brightness
write_byte(0) // scroll speed in 0.1's
message_end()
message_begin( MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id )
write_byte( TE_PLAYERATTACHMENT )
write_byte( Player_id[ id ] )
write_coord( 40 );
write_short( SprTeam )
write_short( 5 )
message_end( )
fTime[id] = fTimeN;
}
}
}
return FMRES_IGNORED
}
public PlayerTouch( iEnt, id ){
if( !is_user_alive( id ) || get_user_team( id ) != 2 )
return FMRES_IGNORED
new szClass[ 10 ], szTarget[ 7 ]
entity_get_string(iEnt, EV_SZ_classname, szClass, 9);
entity_get_string(iEnt, EV_SZ_targetname, szTarget, 6);
if ( equal(szClass, "func_wall") && !equal(szTarget, "ignore") && !equal(szTarget, "barrier") ){
if( bb_is_build_phase( ) )
return PLUGIN_CONTINUE
if( entity_get_int( iEnt, EV_INT_iuser4 ) == 0 )
return PLUGIN_CONTINUE
if( id == entity_get_int( iEnt, EV_INT_iuser4 ) )
return PLUGIN_CONTINUE
if( Player_id[ id ] == entity_get_int( iEnt, EV_INT_iuser4 ) && Player_id[ id ] != 0 )
return PLUGIN_CONTINUE
if( has_flag( id, "b" ) )
return PLUGIN_CONTINUE
message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ),{0,0,0},id );
write_short(1<<1 ); // Duration of fadeout
write_short( 1<<12 ); // Hold time of color
write_short( 1<<1 ); // Fade type
write_byte ( 0 ); // Red
write_byte ( 0 ); // Green
write_byte ( 0 ); // Blue
write_byte ( Player_black[ id ] ); // Alpha
message_end();
Player_velo[ id ][ 0 ] = random_float( 0.0, 455.0 )
Player_velo[ id ][ 1 ] = random_float( 0.0, 455.0 )
Player_velo[ id ][ 2 ] = random_float( 0.0, 355.0 )
if( Player_black[ id ] < 255 )
Player_black[ id ] += 20
}
return FMRES_IGNORED
}
public client_connect( id ){
Player_id[ id ] = 0
}
public client_disconnect( id ){
if( Player_id[ id ] != 0 ){
Player_id[ id ] = 0
Player_id[ Player_id[ id ] ] = 0
}
}
public TeamMenu( id ){
new menu = menu_create( "Opcje:", "TeamMenu_2" )
new gForm[ 128 ]
if( Player_id[ id ] == 0 ){
if( Alive( 4 ) < iNumPepole ){
format( gForm, sizeof( gForm ), "Brakuje:\y %d zywych", iNumPepole-Alive( 4 ) )
menu_additem( menu, gForm )
}else menu_additem( menu, "Stworz druzyne" )
}else menu_additem( menu, "Teleportuj sie do członka z team" )
}else{
new Name[ 33 ]
if( is_user_connected( Player_id[ id ] ) ) get_user_name( Player_id[ id ], Name, sizeof( Name ) )
else format( Name, sizeof( Name ), "Brak gracza" )
format( gForm, sizeof( gForm ), "Opusc druzyne:\y %s", Name )
menu_additem( menu, gForm )
}
menu_display( id, menu, 0 )
}
public TeamMenu_2( id, menu, item ){
if( item == MENU_EXIT ){
menu_destroy( menu )
return PLUGIN_HANDLED
}
switch( item ){
case 0:{
if( Player_id[ id ] == 0 ){
if( Alive( 4 ) >= iNumPepole )
CreateTeam( id )
}else{
if( !bb_is_build_phase( ) ){
ColorChat( id, TEAM_COLOR, "^x04***^x01 Nie mozesz teraz rozlaczyc druzyny!^x04 ***" )
return PLUGIN_CONTINUE
}
Player_id[ Player_id[ id ] ] = 0
ColorChat( Player_id[ id ], TEAM_COLOR, "^x04***^x01 Druzyna rozlaczona!^x04 ***" )
Player_id[ id ] = 0
ColorChat( id, TEAM_COLOR, "^x04***^x01 Wyszedles z druzyny!^x04 ***" )
}
}
}
return PLUGIN_HANDLED
}
public CreateTeam( id ){
new Name[ 33 ]
new menu = menu_create( "Dodaj czlonka druzyny", "CreateTeam_2" )
for( new i = 1, d = 0; i <= get_maxplayers( ); i ++ ){
if( !is_user_connected( i ) )
continue
if( get_user_team( id ) != get_user_team( i ) )
continue
if( i == id )
continue
if( Player_id[ i ] != 0 )
continue
Player_id_list[ id ][ d++ ] = i
get_user_name( i, Name, sizeof( Name ) )
menu_additem( menu, Name )
}
menu_display( id, menu, 0 )
}
public CreateTeam_2( id, menu, item ){
if( item == MENU_EXIT ){
menu_destroy( menu )
return PLUGIN_HANDLED
}
if( Alive( 4 ) >= iNumPepole )
SendAsk( id, Player_id_list[ id ][ item ] )
return PLUGIN_HANDLED
}
public SendAsk( id_asker, id ){
Player_id_ask[ id ] = id_asker
new gForm[ 128 ], Name[ 33 ]
get_user_name( id_asker, Name, sizeof( Name ) )
format( gForm, sizeof( gForm ), "Gracz:\w %s\y Zaprasza Cie do druzyny!", Name )
new menu = menu_create( gForm, "SendAsk_2" )
menu_additem( menu, "Przymij" )
menu_additem( menu, "Odrzuc" )
menu_display( id, menu, 0 )
}
public SendAsk_2( id, menu, item ){
if( item == MENU_EXIT ){
menu_destroy( menu )
return PLUGIN_HANDLED
}
switch( item ){
case 0:{
if( Player_id[ id ] == 0 ){
if( Alive( 4 ) >= iNumPepole ){
new Name[ 33 ]
get_user_name( id, Name, sizeof( Name ) )
Player_id[ id ] = Player_id_ask[ id ]
Player_id[ Player_id_ask[ id ] ] = id
ColorChat( Player_id_ask[ id ], TEAM_COLOR, "^x04***^x01 Gracz^x03 %s^x01 przyjal zaproszenie^x04 ***", Name )
}
}
}
case 1:{
new Name[ 33 ]
get_user_name( id, Name, sizeof( Name ) )
ColorChat( Player_id_ask[ id ], TEAM_COLOR, "^x04***^x01 Gracz^x03 %s^x01 nie przyjal zaproszenia^x04 ***", Name )
}
}
return PLUGIN_HANDLED
}
public Alive( team ){
new PlayerAlive
for( new i = 1 ; i <= get_maxplayers(); i ++ )
if( get_user_team( i ) == team || team == 4 )
if( is_user_alive( i ) )
PlayerAlive++
return PlayerAlive
}