←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Stary
Wychwycenie najwiekszego levelu danej klasy

Yakashi's Photo Yakashi 10.03.2013

Witam.. chcialbym sie dowiedziec jak zrobic aby co Respawn sprawdzalo graczy z CT ktorzy maja klase Rambo kto ma najwiekszy level (oczywiscie tylko graczy ktorzy sa na serwerze)

Probowalem zrobic petle lecz mialem problem wlasnie aby to tylko szukalo graczy z CT ktorzy maja klase Rambo (tylko z tej klasy ma wyszukiwac)

Bylbym bardzo wdzieczny za pomoc badz wyjasnienie
Quote

  • +
  • -
d0naciak's Photo d0naciak 10.03.2013

new best_level, best_id;

for(new i = 1; i <= get_maxplayers(); i++)

{

   if(is_user_connected(i) && klasa_gracza[i] == Rambo && get_user_team(i) == 2 && poziom_gracza[i] > best_level)

   {

	  best_level = poziom_gracza[i];

	  best_id = i;

   }

}

client_print(0, print_chat, "Najwiekszy poziom ma gracz o indexie %d (%d poziom)", best_id, best_level);

Quote

Yakashi's Photo Yakashi 10.03.2013

wszystko ladnie dziala.. ale powiedz mi jeszcze jak zrobic .. bo gdy bedzie 3 graczy ktorzy beda mieli ten sam level to co wtedy sie stanie ? bo np chcialbym do tego dodac ze kto ma najwiekszy poziom to dostanie expa albo hp na na start.. i wlasnie moje pytanie brzmi czy jezeli te 3 osoby beda mialy ten sam level to dostana pewnie te 3 osoby tak ?
Quote

  • +
  • -
Klakier's Photo Klakier 10.03.2013

Ja stworzyłem coś takiego :D

public przydziel(id)
{
if (!is_user_connected(id))
return

const ROZMIAR = 1024
static msg[ROZMIAR + 1], len; len = 0

new players[32], pnum, player, sortCT[16], counterCT
get_players(players, pnum)
for (new i = 0; i < pnum; i++)
{
player = players[i]
switch(get_user_team(player))
{
case 2:
{
sortCT[counterCT] = player
counterCT++
}
}
}

bubble_sort_by_lvl(sortCT, counterCT)

for (new ct = 0; ct < counterCT; ct++)
{
player = sortCT[ct]

if(klasa_gracza[player] != Rambo || get_user_team(player) != 2)
continue;

len += formatex(msg[len], ROZMIAR - len, "[ %s ... %i lvl ]^n", nazwa_gracza[player], poziom_gracza[player])
}

set_hudmessage(25, 125, 225, 0.3, 0.3, 0, 6.0, 1.1, 0.0, 0.0, 1)
ShowSyncHudMsg(id, CreateHudSyncObj(), msg)

}
public bubble_sort_by_lvl(list[16], liczba)
{
if(liczba < 2)
return

static temp, a, b
for (a = 0; a < liczba; a++)
{
for (b = a + 1; b < liczba; b++)
{
if (poziom_gracza[list[a]] < poziom_gracza[list[b]])
{
temp = list[a]
list[a] = list[b]
list[b] = temp
}
}
}
}


i do
public odrodzenie
wystarczy dodac
przydziel(id)
Quote

  • +
  • -
d0naciak's Photo d0naciak 10.03.2013

wszystko ladnie dziala.. ale powiedz mi jeszcze jak zrobic .. bo gdy bedzie 3 graczy ktorzy beda mieli ten sam level to co wtedy sie stanie ? bo np chcialbym do tego dodac ze kto ma najwiekszy poziom to dostanie expa albo hp na na start.. i wlasnie moje pytanie brzmi czy jezeli te 3 osoby beda mialy ten sam level to dostana pewnie te 3 osoby tak ?

Tylko jeden dostanie, jak chcesz dla kilku to łap
new best_levels[33], best_ids[33], best_players_num;
for(new i = 1; i <= get_maxplayers(); i++)
{
   if(is_user_connected(i) && klasa_gracza[i] == Rambo && get_user_team(i) == 2 && poziom_gracza[i] > best_level)
   {
		  best_players_num++;
		  best_levels[best_players_num] = poziom_gracza[i];
		  best_ids[best_players_num] = i;
   }
}
for(new i = 1; i <= best_players_num; i++)
{
   client_print(0, print_chat, "Najlepszy gracz nr %d to gracz o indexie %d (%d poziom)", i, best_levels[i], best_ids[i]
}

Edited by d0n tHe Pr0oo, 10.03.2013 17:34.
Quote

Yakashi's Photo Yakashi 10.03.2013

okej.. a w tym pierwszym jak będę mialy przykladowo 2 osoby taki sam level to ktora osoba bedzie miala najwyzszy level ? Ta ktora wczesniej sprawdzi petla czyli z nizszym id ?
Quote

  • +
  • -
d0naciak's Photo d0naciak 10.03.2013

Tak
Quote

Yakashi's Photo Yakashi 10.03.2013

ok.. mozna zamknac
Quote