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

Funkcja na 4 losowych graczach...


  • Zamknięty Temat jest zamknięty
20 odpowiedzi w tym temacie

#1 Harsay

    Harsayus pospolitus

  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 25.05.2010 13:36

Mam pytanie.
Jak napisać funkcję która wybiera 4 losowych graczy i wykonuje na nich np. przeniesienie do CT a reszta co nie została wybrana żeby przeszła do TT.

Czekam na odpowiedź!
  • +
  • -
  • 0

#2 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 25.05.2010 14:53

Ja bym to zrobił na tablicach dynamicznych.
Najpierw pobranie listy graczy. get_players
Następnie pętla na nich wszystkich ze sprawdzaniem jakiegoś warunku(np. team) oraz dokładaniem do tablicy dynamicznej. ArrayPushCell
A na koniec losowanie oraz pobieranie i usuwanie wylosowanych graczy z tablicy dynamicznej. ArrayGetCell, ArrayDeleteItem
  • +
  • -
  • 1

#3 byCZUS

    Listonosz

  • Support Team

Reputacja: 752
Guru

  • Postów:459
  • GG:
  • Steam:steam
  • Lokalizacja:GW
Offline

Napisano 25.05.2010 14:59


public costutaj()
{
new players[32], num
new bool: wylosowany[33]
get_players(players, num)

if(num > 1)
{
for(new i = 0; i < num; i++) wylosowany[players[i]] = false

new i = 0
while(i < 5)
{
wylosowany[players[random_num(0, num-1)]] = true
i++
}

for(new i = 0; i < num; i++)
{
if(wylosowany[players[i]])
{
// tutaj co chcesz zrobic z wylosowanymi id - players[i]
}
else
{
// z reszta
}
}
}
}

  • +
  • -
  • 1

Dziękuje, dobranoc.


#4 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 25.05.2010 15:02

Pavulon i byQQ, wielkie dzięki.

Pavulon - Fajnie że napisałeś z czego mam to zrobić i dzięki temu ruszyłem głową do obmyślania jak to złożyć. + leci!
byQQ - Dzięki za podanie całego kodu! + leci!
  • +
  • -
  • 0

#5 mgr inż. Pavulon

    C35H60Br2N2O4

  • Przyjaciel

Reputacja: 1 742
Godlike

  • Postów:6 881
  • Steam:steam
  • Imię:Konrad
  • Lokalizacja:Koniecpol
Offline

Napisano 25.05.2010 15:03

byQQ a co jak dany gracz zostanie wylosowany więcej niż 1 raz ? :P
  • +
  • -
  • 0

#6 byCZUS

    Listonosz

  • Support Team

Reputacja: 752
Guru

  • Postów:459
  • GG:
  • Steam:steam
  • Lokalizacja:GW
Offline

Napisano 25.05.2010 15:10

Można to zrobić to tak


while(i < 5)
{
new losowy = players[random_num(0, num-1)]

if(!wylosowany[losowy])
{
wylosowany[losowy] = true
i++
}
}

Użytkownik byQQ edytował ten post 25.05.2010 15:15

  • +
  • -
  • 0

Dziękuje, dobranoc.


#7 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 25.05.2010 15:16

A czy ta funkcja wykonywana jest też na botach?

@edit
Bo akurat jak testuje na botach to nie działa.

Użytkownik Harsay edytował ten post 25.05.2010 15:19

  • +
  • -
  • 0

#8 byCZUS

    Listonosz

  • Support Team

Reputacja: 752
Guru

  • Postów:459
  • GG:
  • Steam:steam
  • Lokalizacja:GW
Offline

Napisano 25.05.2010 18:29

tak na botach również jest wykonywana. Jeśli tego nie chcesz get_players powinien wyglądać tak
get_players(players, num, "c")

  • +
  • -
  • 1

Dziękuje, dobranoc.


#9 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 25.05.2010 18:35

Dobra ale to wtedy jest dziwne bo akurat normalnie nie losuje bez flagi "c" a chcę aby uzwględniało boty.

Użytkownik Harsay edytował ten post 25.05.2010 19:34

  • +
  • -
  • 0

#10 byCZUS

    Listonosz

  • Support Team

Reputacja: 752
Guru

  • Postów:459
  • GG:
  • Steam:steam
  • Lokalizacja:GW
Offline

Napisano 25.05.2010 21:16

A umiesz użyć tego co Ci podałem ;> ^^
  • +
  • -
  • 0

Dziękuje, dobranoc.


#11 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 26.05.2010 18:17

Oto okrojony kodzik:

public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_logevent("poczatek", 2, "1=Round_Start")
        ...
}

public poczatek() {
        for(new i=1;i<33;i++){
                if (!is_user_alive(i)) continue
                ...
	       set_task(1.0, "losowanie", i)
                ...
             }
}
public losowanie()
{
	new players[32], num
	new bool: wylosowany[33]
	get_players(players, num)
        
	if(num > 1)
	{
		for(new i = 0; i < num; i++) wylosowany[players[i]] = false
                                
		new i = 0
		while(i < 5)
		{
			new losowy = players[random_num(0, num-1)]
			
			if(!wylosowany[losowy])
			{
				wylosowany[losowy] = true       
				i++
				}               
			for(new i = 0; i < num; i++)
			{
				if(wylosowany[players[i]])
				{
                                  /// KOD którego nie ujawniam.					
				}
				else 
				{
                                /// kod którego nie ujawniam
					{
						case 1:
						{
							// jak wyżej
						}
 
						case 2:
						{
							// jak wyżej
						}
 
						case 3:
						{
							// jak wyżej
						}  
					}	
				}
			}
		}
	}
}

Coś jest źle?
  • +
  • -
  • 0

#12 byCZUS

    Listonosz

  • Support Team

Reputacja: 752
Guru

  • Postów:459
  • GG:
  • Steam:steam
  • Lokalizacja:GW
Offline

Napisano 26.05.2010 22:07

nie wiem po co do set_taska nadajesz id, do tego używasz case ale nie widzę switch.
  • +
  • -
  • 0

Dziękuje, dobranoc.


#13 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 26.05.2010 22:37

Dobra cały kod:
public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
        register_logevent("poczatek", 2, "1=Round_Start")
        register_logevent("koniec", 2, "1=Round_End") 
        register_event("DeathMsg", "DeathMsg", "b")
        RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
        RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
        RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
        set_lights("b")	
        
}

public poczatek() {
        for(new i=1;i<33;i++){
                if (!is_user_alive(i)) continue
	       strip_user_weapons(i);
	       cs_set_user_money(i, 0);
	       set_task(1.0, "losowanie", i)	
                set_task(10.0, "reklama",i)
                set_hudmessage(i, 255, 0, 0.18, 0.24, 0, 6.0, 12.0)
                show_hudmessage(i, "Ludzie musza przetrwac 5 minut!")
                ColorChat(0, GREEN,"[ZOMGies] Ludzie musza przetrwac 5 minut!")
	} 		 
}

public losowanie()
{
	new players[32], num
	new bool: wylosowany[33]
	get_players(players, num)
        
	if(num > 1)
	{
		for(new i = 0; i < num; i++) wylosowany[players[i]] = false
                                
		new i = 0
		while(i < 5)
		{
			new losowy = players[random_num(0, num-1)]
			
			if(!wylosowany[losowy])
			{
				wylosowany[losowy] = true       
				i++
				}               
			for(new i = 0; i < num; i++)
			{
				if(wylosowany[players[i]])
				{
					cs_set_user_team(i, CS_TEAM_CT)
					cs_set_user_model(i, "vip") 		
					set_user_health(i, 200) 
					set_user_armor(i, 100) 
					give_item (i, "weapon_m4a1") 
					give_item (i, "weapon_deagle")
					give_item (i, "ammo_556nato") 
					give_item (i, "ammo_50ae")
					give_item (i, "ammo_556nato") 
					give_item (i, "ammo_50ae")
					give_item (i, "ammo_556nato") 
					give_item (i, "ammo_50ae")
					give_item (i, "he_grenade")  					
				}
				else 
				{
					cs_set_user_team(i, CS_TEAM_T)
					set_user_gravity(i, 0.40)      
					set_user_health(i, 90) 
					give_item(i, "weapon_knife")
					set_user_maxspeed (i, 720.0)
					switch ( random_num( 1, 3 ) )
					{
						case 1:
						{
							cs_set_user_model(i, "zombie_guerilla")
						}
 
						case 2:
						{
							cs_set_user_model(i, "zombie_gign")
						}
 
						case 3:
						{
							cs_set_user_model(i, "zombie_source")
						}  
					}	
				}
			}
		}
	}
}

public koniec(id) {	
        ColorChat(id, GREEN,"[ZOMGies] Koniec walki!")
        client_cmd(id, "spk ZOMGies/koniec_walki.wav")	
}

public reklama(id) {
        ColorChat(id, GREEN,"***********SERWER UZYWA***********") 
        ColorChat(id, GREEN,"ZOMGies MOD by Harsay")
        ColorChat(id, GREEN,"Wersja: v0.3a")
        ColorChat(id, GREEN,"Strona autora: www.harsay.rfv.pl")
        ColorChat(id, GREEN,"Pomoc przy tworzeniu: [H]ARD[B]OT, DarkGL, [G]o[Q], Pavulon, byQQ, DeLL")
}

public DeathMsg(id) {	
	if(cs_get_user_team(id) == CS_TEAM_T) 
	ExecuteHamB(Ham_CS_RoundRespawn, id)

}

public fw_TouchWeapon(weapon,id)
{
        if (!is_user_connected(id))
                return HAM_IGNORED;
        
        if(get_user_team(id) == 1)
                return HAM_SUPERCEDE;
        
        return HAM_IGNORED;
}

public plugin_precache() {
	precache_sound("ZOMGies/koniec_walki.wav")
	precache_model("models/player/zombie_guerilla/zombie_guerilla.mdl")
	precache_model("models/player/zombie_gign/zombie_gign.mdl")
	precache_model("models/player/zombie_source/zombie_source.mdl")
}

  • +
  • -
  • 0

#14 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 26.05.2010 23:36

Używasz zmiennej i np. tu
cs_set_user_team(i, CS_TEAM_CT)
gdy id gracza jest tak naprawdę w players[i]

give_item (i, "he_grenade")
ten fragment nie powoduje errorlogów?
  • +
  • -
  • 0

#15 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 27.05.2010 09:20

Rozumiem że zamiast:
cs_set_user_team(i, CS_TEAM_CT)

Mam dać
cs_set_user_team( CS_TEAM_CT )

@zrobiłem tak i same errory przy kompilacji wywala

Użytkownik Harsay edytował ten post 27.05.2010 09:35

  • +
  • -
  • 0

#16 kyku

    Wszechmogący

  • Użytkownik

Reputacja: 166
Profesjonalista

  • Postów:612
  • Lokalizacja:Jasło
Offline

Napisano 27.05.2010 10:40

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("poczatek", 2, "1=Round_Start")
register_logevent("koniec", 2, "1=Round_End")
register_event("DeathMsg", "DeathMsg", "b")
RegisterHam(Ham_Touch, "weaponbox", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "armoury_entity", "fw_TouchWeapon")
RegisterHam(Ham_Touch, "weapon_shield", "fw_TouchWeapon")
set_lights("b")

}

public poczatek() {

strip_user_weapons(0);
cs_set_user_money(0, 0);
set_task(1.0, "losowanie")
set_task(10.0, "reklama")
set_hudmessage(0, 255, 0, 0.18, 0.24, 0, 6.0, 12.0)
show_hudmessage(0, "Ludzie musza przetrwac 5 minut!")
ColorChat(0, GREEN,"[ZOMGies] Ludzie musza przetrwac 5 minut!")

}

public losowanie()
{
new ilu_losowac = 5 // jak chcesz to zmien (ile osob ma miec wylosowany[id] = true;)

new players[32], num, jest
new bool: wylosowany[33]
get_players(players, num, "a" ) // tylko zywi

if(num >= ilu_losowac)
{

while(jest<ilu_losowac){
new id = players[random_num(0, num)]
if(is_user_connected(id) && is_user_alive(id)){
wylosowany[id] = true;
jest++;
}
}

for(new id=0; id<num; id++){
new i = players[id];

if(wylosowany[i]){

if(get_user_team(i) != CS_TEAM_CT) cs_set_user_team(i, CS_TEAM_CT) // po co przenosic skoro jest w tym teamie?
cs_set_user_model(i, "vip")
set_user_health(i, 200)
set_user_armor(i, 100)
give_item (i, "weapon_m4a1")
give_item (i, "weapon_deagle")
give_item (i, "ammo_556nato")
give_item (i, "ammo_50ae")
give_item (i, "ammo_556nato")
give_item (i, "ammo_50ae")
give_item (i, "ammo_556nato")
give_item (i, "ammo_50ae")
give_item (i, "he_grenade")

} else {

if(get_user_team(i) != CS_TEAM_T) cs_set_user_team(i, CS_TEAM_T)
set_user_gravity(i, 0.40)
set_user_health(i, 90)
give_item(i, "weapon_knife")
set_user_maxspeed (i, 720.0)
switch ( random_num( 1, 3 ) )
{
case 1:
{
cs_set_user_model(i, "zombie_guerilla")
}

case 2:
{
cs_set_user_model(i, "zombie_gign")
}

case 3:
{
cs_set_user_model(i, "zombie_source")
}
}

}

}

}
else
client_print(0, print_chat, "Nie ma na serwerze %i osob!", ilu_losowac);



}

public koniec() { // koniec nie ma parametru ID!
ColorChat(0, GREEN,"[ZOMGies] Koniec walki!")
client_cmd(0, "spk ZOMGies/koniec_walki.wav")
}

public reklama() {
ColorChat(0, GREEN,"***********SERWER UZYWA***********")
ColorChat(0, GREEN,"ZOMGies MOD by Harsay")
ColorChat(0, GREEN,"Wersja: v0.3a")
ColorChat(0, GREEN,"Strona autora: www.harsay.rfv.pl")
ColorChat(0, GREEN,"Pomoc przy tworzeniu: [H]ARD[B]OT, DarkGL, [G]o[Q], Pavulon, byQQ, DeLL")
}

public DeathMsg() { //DeathMsg nie ma parametru ID!
new id = read_data(2)
if(cs_get_user_team(id) == CS_TEAM_T)
ExecuteHamB(Ham_CS_RoundRespawn, id) // pasowalo by to w tasku zrobic lub przynajmnniej zablokowac komende "kill"

}

public fw_TouchWeapon(weapon,id)
{
if (!is_user_connected(id))
return HAM_IGNORED;

if(get_user_team(id) == 1)
return HAM_SUPERCEDE;

return HAM_IGNORED;
}

public plugin_precache() {
precache_sound("ZOMGies/koniec_walki.wav")
precache_model("models/player/zombie_guerilla/zombie_guerilla.mdl")
precache_model("models/player/zombie_gign/zombie_gign.mdl")
precache_model("models/player/zombie_source/zombie_source.mdl")
}

Co powiesz na to? funkcje losujaca zrobilem od poczatku

27 maj 2010 - 11:42:
tylko z tego co widze to wylosowanych 5 osob bedzie jako ludzie a nie wydaje mi sie by o to Ci chodzilo.
Jak cos to zmien
if(wylosowany[i]){
na
if(!wylosowany[i]){

Użytkownik kyku edytował ten post 27.05.2010 10:48

  • +
  • -
  • 0

#17 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 27.05.2010 10:43

Dobra już sprawdzam.

@EDIT
Tylko jak ktoś jest w CT i go nie wylosuje to zmienia mu team na TT? Tak?

Użytkownik Harsay edytował ten post 27.05.2010 10:49

  • +
  • -
  • 0

#18 kyku

    Wszechmogący

  • Użytkownik

Reputacja: 166
Profesjonalista

  • Postów:612
  • Lokalizacja:Jasło
Offline

Napisano 27.05.2010 10:48

a i dodam, ze poprawilem Ci wiekszosc bugow :P
@ UP
tak

Użytkownik kyku edytował ten post 27.05.2010 10:50

  • +
  • -
  • 0

#19 Harsay

    Harsayus pospolitus

  • Autor tematu
  • Użytkownik

Reputacja: 88
Zaawansowany

  • Postów:274
  • Imię:Michał
  • Lokalizacja:Bydgoszcz
Offline

Napisano 27.05.2010 10:55

Dobra akurat trochę zmieniłem plany to możesz zmienić losowanie na takie:
Że losowane jest tylko zmiana teamu (żadne dawanie broni itp.)

Użytkownik Harsay edytował ten post 27.05.2010 10:56

  • +
  • -
  • 0

#20 kyku

    Wszechmogący

  • Użytkownik

Reputacja: 166
Profesjonalista

  • Postów:612
  • Lokalizacja:Jasło
Offline

Napisano 27.05.2010 11:00

Spoiler

  • +
  • -
  • 1




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

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