←  Pytania dotyczące pluginów

AMXX.pl: Support AMX Mod X i SourceMod

»

Dodatkowe AP dla randomowej osoby na serwerze


Best Answer Ogen Dogen 02.01.2017 02:03

Na szybko pisane, nietestowane:

public random_player()
{
	if (get_playersnum() == 0) return -1;
	new Array:arr = ArrayCreate(1,32);
	for (new i=0; i<32; i++) {
		if (is_user_connected(i)) ArrayPushCell(arr, i);
	}
	new choosen = random_num(0, ArraySize(arr));
	new choosen_id = ArrayGetCell(arr, choosen);
	ArrayClear(arr);
	return choosen_id;
}
Go to the full post

  • +
  • -
Robiin's Photo Robiin 30.12.2016

Cześć,

kodzik taki jak poniżej nie działa, ale według kodu (tak mi się przynajmniej wydaje) wszystko jest okej.

Jest gdzieś na forum gotowa - sprawdzona funkcja "random_player" albo coś w tym rodzaju? Nie jestem 100%towo pewny co do tej na dole.

 

 

Public początku rundy wykonuje się, pomijając 1 rundę. Jak wykonać ten event też w pierwszej rundzie - tej, która jest pomijana? Nie mogę użyć 

register_logevent("Poczatek_Rundy", 2, "1=Round_Start")  

ponieważ public to odliczanie do pierwszego zm, więc póki nie znałbym przyszłości, to nie zadziałałoby to.

public event_round_start()
{
	set_task(1.0, "countdown")

	new gracze[33], num=-1;
	for(new id=1; id<=gMaxPlayers; ++id){
		if(is_user_alive(id)){
			gracze[++num]=id;
		}
	}
	if(++num){
		winner=gracze[random(num)];
		new losowe_ap = random_num(1, 10)
		zp_set_user_ammo_packs(winner, zp_get_user_ammo_packs(winner)+losowe_ap)
		new forum[33], name_winner[33];
		get_pcvar_string(NazwaCvara,forum, 31);
		get_user_name(winner, name_winner, 32);
		ColorChat(0, GREEN, "[%s] %s^x01 wygral^x04 %i^x01 AP w losowaniu!", forum, name_winner, losowe_ap)
	} else winner=0;
}
Quote

  • +
  • -
Master Yoga's Photo Master Yoga 01.01.2017

Czy ty zarejestrowałeś event w taki sposób :

register_logevent("Poczatek_Rundy", 2, "1=Round_Start")  

=>

public event_round_start() != public Poczatek_Rundy()

??????????

Quote

  • +
  • -
tytusek's Photo tytusek 01.01.2017

edit, nie doczytałem ;x


 

Quote

  • +
  • -
Robiin's Photo Robiin 01.01.2017

Czy ty zarejestrowałeś event w taki sposób :

register_logevent("Poczatek_Rundy", 2, "1=Round_Start")  

=>

public event_round_start() != public Poczatek_Rundy()

??????????

 

Nie, a dlaczego?

Quote

  • +
  • -
Master Yoga's Photo Master Yoga 01.01.2017

Nie, a dlaczego?



Cześć,
kodzik taki jak poniżej nie działa

 

Przy ilu graczach to sprawdzałeś ? 1 ?

Quote

  • +
  • -
Robiin's Photo Robiin 01.01.2017

Sprawdzałem przy 1-10

Quote

  • +
  • -
Best Answer Ogen Dogen's Photo Ogen Dogen 02.01.2017

Na szybko pisane, nietestowane:

public random_player()
{
	if (get_playersnum() == 0) return -1;
	new Array:arr = ArrayCreate(1,32);
	for (new i=0; i<32; i++) {
		if (is_user_connected(i)) ArrayPushCell(arr, i);
	}
	new choosen = random_num(0, ArraySize(arr));
	new choosen_id = ArrayGetCell(arr, choosen);
	ArrayClear(arr);
	return choosen_id;
}
Quote

  • +
  • -
Robiin's Photo Robiin 02.01.2017

public random_player()
{
	if (get_playersnum() == 0) return -1;
	new Array:arr = ArrayCreate(1,32);
	for (new i=0; i<32; i++) {
		if (is_user_connected(i)) ArrayPushCell(arr, i);
	}
	new choosen = random_num(0, ArraySize(arr));
	new choosen_id = ArrayGetCell(arr, choosen);
	ArrayClear(arr);
	return choosen_id;
}

Na serwerze nie ma 32 slotów, więc 

g_maxplayers = get_maxplayers()

w plugin_init się przyda.

 

 

 

Quote

  • +
  • -
_McHappy's Photo _McHappy 02.01.2017

Nie powinno być

ArraySize(arr) - 1

w

new choosen = random_num(0, ArraySize(arr));

?
Edited by _McHappy, 02.01.2017 13:21.
Quote

  • +
  • -
Robiin's Photo Robiin 02.01.2017

Można to zastąpić warunkiem.

Temat rozwiązany.

Quote

  • +
  • -
Master Yoga's Photo Master Yoga 02.01.2017

Nie powinno być

ArraySize(arr) - 1

w

new choosen = random_num(0, ArraySize(arr));

?

 
No oczywiście, że powinno być Size - 1.

Quote