/* 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