Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Kod na losowanie graczy do drużynCzy coś 'ala podobne


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
12 odpowiedzi w tym temacie

#1 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 08.05.2013 20:38

*
Popularny

Pracowałem pewien okres czasu, bo coś mnie natchnęło nad pewnym kodem który losuję gracza przy wejściu na serwer do danej drużyny, i nic wielkiego, oprócz pokazywania drużyny i graczy.
/* 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

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#2 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 09.05.2013 16:41

Do czego hamsandwich bo nie widze ?

Btw. jeżeli ktoś zmieni nick będzie w zmiennej stary co może doprowadzić do błędnie wysyłanych informacji. Użyj client_infochanged


  • +
  • -
  • 1

#3 GT Team

    Ten lepszy xD

  • Autor tematu
  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 09.05.2013 17:00

formatex(nazwa_gracza[id], 32, "")
Przy client_disconnect. hamsandwich ominąłem, bo wtedy roiłem inne rzeczy ;D już edytuje.

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#4 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 09.05.2013 18:35

Chodzi mi że gracz może zmienić nick w czasie gry.


  • +
  • -
  • 0

#5 DEADP00L

    Profesjonalista

  • Użytkownik

Reputacja: 212
Profesjonalista

  • Postów:169
  • Steam:steam
  • Imię:Bart
  • Lokalizacja:United Kingdom
Offline

Napisano 09.05.2013 18:53

A czy dałoby radę zrobić coś takiego, że każda grupa może się zaatakować ? No i oczywiście, żeby nie dało się zabić graczy ze swojej drużyny.


  • +
  • -
  • 0

#6 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 09.05.2013 19:41

Czemu nie, rejestrujesz zdarzenie o otrzymaniu obrażeń (a raczej o chwilę wcześniej, post = 0) za pomocą kanapki i sprawdzasz czy gracz strzelający należy do tej samej drużyny co ofiara i wtedy zablokować obrażenia zwracając HAM_SUPERCEDE.


  • +
  • -
  • 0

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#7 DEADP00L

    Profesjonalista

  • Użytkownik

Reputacja: 212
Profesjonalista

  • Postów:169
  • Steam:steam
  • Imię:Bart
  • Lokalizacja:United Kingdom
Offline

Napisano 09.05.2013 22:27

A na tym przykładzie mógłbyś mi to pokazać ?

 

Kod wyciągnięty z bazooki :

Spoiler

  • +
  • -
  • 0

#8 GT Team

    Ten lepszy xD

  • Autor tematu
  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 10.05.2013 12:34

update, nowa wersja.

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#9 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 10.05.2013 13:58

while((victim = engfunc(EngFunc_FindEntityInSphere, victim, entOrigin, g_radius)) != 0)
    {
        if(!is_user_alive(victim) || get_user_team(victim) == get_user_team(victim))// ten drugi warunek to chyba jakaś pomyłka :D, btw. dodaj tu warunek że grupa victim i attacker są równe, wtedy dalszy kod w pętli dla nich się nie wykona - ten sam członek grupy nie otrzyma obrażeń
            continue;
        
        pev(victim, pev_origin, Origin);
        fDamage = g_damage - floatmul(g_damage, floatdiv(get_distance_f(Origin, entOrigin), g_radius));
        fDamage *= estimate_take_hurt(entOrigin, victim);
        if(fDamage>0.0)
            UTIL_Kill(attacker, victim, fDamage, DMG_BULLET);
    }
 

  • +
  • -
  • 0

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#10 DEADP00L

    Profesjonalista

  • Użytkownik

Reputacja: 212
Profesjonalista

  • Postów:169
  • Steam:steam
  • Imię:Bart
  • Lokalizacja:United Kingdom
Offline

Napisano 10.05.2013 15:04

No wiem to powinno wyglądać tak:

if(!is_user_alive(victim) || get_user_team(attacker) == get_user_team(victim))

Ale jak teraz dodać to sprawdzanie, że przykładowo gracz ma grupa1[id] = true;

ktoś inny w grupa2[id] i jak zrobić to, że każda grupa może się zabijać ?


  • +
  • -
  • 0

#11 K!113r

    Teraz to chyba Sławek kek

  • Power User

Reputacja: 387
Wszechpomocny

  • Postów:868
  • GG:
  • Steam:steam
  • Imię:Mateusz
  • Lokalizacja:Piotrków Tryb.
Offline

Napisano 10.05.2013 16:24

if(!is_user_alive(victim) || get_user_team(attacker) == get_user_team(victim) || UserTeam[victim] == UserTeam[attacker])

  • +
  • -
  • 1

DarkGL to mój autorytet.

skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować skomplikować


#12 Fili:P

    Godlike

  • Power User

Reputacja: 754
Guru

  • Postów:1 679
  • Imię:Darek
  • Lokalizacja:Warszawa
Offline

Napisano 14.05.2013 17:22


SetHamParamFloat(4, Damage)
return HAM_IGNORED

1. Po co ustawiasz damage skoro go nie zmieniasz ?

2. Skoro już zmieniasz to zwróć HAM_HANDLED.


  • +
  • -
  • 1

#13 GT Team

    Ten lepszy xD

  • Autor tematu
  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 14.05.2013 17:33

Zmienione!

Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych