/* Plugin generated by AMXX-Studio */
//#define TEAMS_NOT_KILL // usun '//' przed #define ( <- ) aby nie atakowac czlonkow druzyny
#include <amxmodx>
#if defined TEAMS_NOT_KILL
#include <hamsandwich>
#endif
#define PLUGIN "Team"
#define VERSION "1.0"
#define AUTHOR "author"
#define TEAMS 4 // Liczba drużyn
#define MAX_MEMBER 4 // Maxymalna liczba członków dla drużyny
#define MAX_PLAYERS 32 //Maxymalna liczba graczy
#define DEATH "Trup" // Text pokazywany w hudzie, gdy gracz nie żyje
new TeamName[ TEAMS ][ ] = // nazwy drużyn
{
"Druzyna 1",
"Druzyna 2",
"Druzyna 3",
"Druzyna 4"
}
new TeamMembers[ TEAMS ] // liczba członków w drużynie
new UserTeam[ MAX_PLAYERS ] = _:-1 // drużyna gracza
new nazwa_gracza[MAX_PLAYERS+1][33] // nazwa gracza
new gSync;
new Text[512], temp[64] // zmienne od pokazywania huda
new MAX_MEMBERS = MAX_MEMBER+1
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
#if defined TEAMS_NOT_KILL
RegisterHam(Ham_TakeDamage, "player", "TakeDamage")
#endif
gSync = CreateHudSyncObj()
set_task(1.0, "PokazDruzyny", _, _, _, "b")
}
#if defined TEAMS_NOT_KILL
public TakeDamage(victim, a, attacker, Float:Damage, damagebits)
{
if(!is_user_alive(victim) || !is_user_alive(attacker))
return HAM_IGNORED
if(UserTeam[victim] == UserTeam[attacker])
return HAM_SUPERCEDE
return HAM_IGNORED
}
#endif
public client_infochanged(id)
{
new newname[32],oldname[32]
get_user_info(id, "name", newname,31)
get_user_name(id, oldname,31)
if(!is_user_connected(id) || is_user_bot(id))
return PLUGIN_CONTINUE
if(!equali(newname, oldname))
formatex(nazwa_gracza[id], 32, newname)
return PLUGIN_CONTINUE
}
public client_putinserver( id )
{
for( new i ; i < TEAMS +1; i ++ )
{
new wylosowana_druzyna = random( TEAMS ) // losuje druzyne graczowi
if( TeamMembers[ wylosowana_druzyna ]+1 > MAX_MEMBERS)
continue
else
{
UserTeam[ id ] = wylosowana_druzyna
TeamMembers[ wylosowana_druzyna ] ++
}
get_user_name(id, nazwa_gracza[id], 32)
return
}
}
public client_disconnect(id)
{
formatex(nazwa_gracza[id], 32, "")
TeamMembers[UserTeam[id]]--
UserTeam[id] = -1
}
public PokazDruzyny()
{
formatex(Text, 511, "")
formatex(temp, 63, "")
for( new i ; i < TEAMS + 1 ; i++ )
{
if(get_teams_alive_num(i) > 0)
{
formatex(temp, 63, "^n%s:^n", TeamName[i])
add(Text, 511, temp)
new ids[MAX_MEMBER+2]
get_teams_id( i, ids, MAX_MEMBERS - 1 )
for( new j ; j <= MAX_MEMBERS ; j ++ )
{
if(!is_user_connected(ids[j]))
{
if(j+1 == MAX_MEMBERS)
add(Text, 511, "^n")
continue
}
static type[10]
num_to_str(get_user_health( ids[ j ] ), type, 9)
formatex(temp, 63, "^n %s: %s", nazwa_gracza[ ids[ j ] ], is_user_alive(ids[j])?type:DEATH)
add(Text, 511, temp)
if(j+1 == MAX_MEMBERS)
add(Text, 511, "^n")
}
}
}
set_hudmessage( 255, 255, 255, 0.6, 0.1, 0, 6.0, 1.1 )
ShowSyncHudMsg( 0, gSync, Text)
return PLUGIN_CONTINUE
}
stock get_teams_alive_num(team)
{
new num
for(new i = 1 ; i < MAX_PLAYERS + 1 ; i ++ )
{
if(!is_user_alive(i) || !is_user_connected(i) || is_user_hltv(i) || UserTeam[i] != team )
continue
num++
}
return num
}
stock get_teams_id(team, outpout[], len)
{
new num
for(new i = 1 ; i < MAX_PLAYERS + 1 ; i ++ )
{
if(!is_user_connected(i) || is_user_hltv(i) || UserTeam[i] != team )
continue
outpout[ num++ ] = i
if( num+1 > len )
return
}
}Daję go, bo być może komuś się przyda kiedyś ;] Nie jest on może w pełni optymalny, lecz może służyć jako wzór dla kogoś innego.update, poprawiono edycje nicku, i dodano nie atakowanie czlonkow druzyny


Dodatki SourceMod















