Страница 1 от 1

Функция get_players_by_name

Публикувано на: 18 Юли 2019, 22:50
от SmirnoffBG
Защо ми е тази функция:
  • Защото get_players бъгва при търсене по отбори.
  • Защото може да върне случаен играч.
  • Защото връща всички с посочената дума, а не грешка или само първият.
Функционалност:
  • Може да засече:
    • "Gosho" (Връща всички играчи, който в името си имат думата)
    • "@ct" (връща всички контра терористи)
    • "@t" (връща всички терористи)
    • "@all" (връща всички играчи в сървъра)
    • "@r" (Избира произволен играч)
  • Употреба:
    • Код за потвърждение: Избери целия код

      new duma[15]
      copy(duma, "say goldenak @all")
      get_players_by_name(id, pl[32], duma[13], &num)
      // duma[13] защото тогава е "@all", което всъчщност й трябва на функцията
      if(num == -1) return
      if(num == 1)
      {
       //кодът намери това което търсехте
      }
      else
      {
       //кодът е намерил повече от един
      }

Код за потвърждение: Избери целия код

get_players_by_name(id, pl[32], szString[50], &num)
{
	switch(szString[0]) {
		case '@':if(szString[1] == 'r')
			{
				if( get_playersnum() < 2)
				{
					ColorChat(id, RED, "^x04[^x01PREFIX^x04] ^"@random^" cannot be used with only 1 person in the server!")
				}
				new tid32
				while ((tid32 = random_num(1,32)))
				{
					if(!is_user_connected(tid32) || id == tid32) continue
					pl[num] = tid32
					num++
					break
				}
			} 
			else 
			{
				for(new i=1; i<33; i++)
				{
					if(is_user_connected(i))
					{
						if(get_user_team(i) != (szString[1]-97)%6 && szString[1] != 'a') continue
						pl[num] = i, num++
					}
				}
			}
		default : for(new i=1; i<33; i++)
			if(is_user_connected(i) &&  containi(user_name[i], szString) != -1) 
				pl[num] = i, num++
	} 
}

Функция get_players_by_name

Публикувано на: 18 Юли 2019, 23:24
от TheRedShoko
Какво по-точно бъгва на get_players?

- get_players работи много по-бързо
- random се имплементира изключително лесно с get_players

Функция get_players_by_name

Публикувано на: 19 Юли 2019, 00:45
от SmirnoffBG
На версия 1.8 на amxmodx get_players не връща правилно, ако желаеш да маркираш всички от даден отбор.
ПП: Давам го този код не за да се правя на оптимизатор а за хора който имат подобен проблем и като цяло искат с един "stock" да хванат дори и "@all"