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

Limit CT - funkcja licząca graczy w TT


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

#1 Makale

    Wszechwidzący

  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 22.03.2016 18:51

Witajcie. Potrzebuję funkcji, która na bieżąca będzie liczyła mi ilość TT i zapisywała to do zmiennej liczba_tt. Oczywiście zmienna liczba_tt ma się zmienić po tym, jak ktoś dojdzie / odejdzie z TT.

 

Zamysł jest taki:

zrobić plugin, który na podstawie liczby TT ustawi limit CT na takiej zasadzie:

 

0-5 TT - 1 CT

6-10 - 2 CT

10-14 - 3 CT

 

 

Na razie to co wiem jak zrobić:

if(liczba_tt <= 5){
    limit CT -> 1
}

if(liczba_tt > 6 && liczba_tt <= 10){
    limit CT -> 2
}

if(liczba_tt > 10 && liczba_tt <= 14){
    limit CT -> 3
}

Sam warunek nie jest trudny. Potrzebuję też jak zrobić taki limit CT.


  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#2 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 22.03.2016 19:35

public PlayersInTeam(team) {
  new number = 0;
  for(new i=0; i<=get_playersnum(); i++) {
      if(!is_user_connected(i))
          continue;
     
      if(cs_get_user_team(i) != team)
          continue;

      number++;
  }
  return number;
}

Wystarczy takie coś. Teraz żeby spisać liczbę graczy teamu do zmiennej wystarczy:

liczba_tt = PlayersInTeam(CS_TEAM_T);

Żeby się ta wartość zmieniała, wystarczy zabieg powtórzyć w client_putinserver i client_disconnect.


Użytkownik wiwi249 edytował ten post 22.03.2016 19:36

  • +
  • -
  • 1

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#3 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 22.03.2016 20:05

Ciężko mi coś ten PAWN idzie.

 

Mam coś takiego:

#include <amxmodx>

#define PLUGIN "Limit CT"
#define VERSION "1.0"
#define AUTHOR "xxx"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_cvar_num("mp_limitteams",0)
	set_cvar_num("mp_autoteambalance",0)

}

public PlayersInTeam(team) {
  new number = 0;
  for(new i=0; i<=get_playersnum(); i++) {
      if(!is_user_connected(i)) continue;

      if(cs_get_user_team(i) != team) continue;

      number++;
  }
  return number;
}


public LimitCt() 
	liczba_tt = PlayersInTeam(CS_TEAM_T);
	
	if(liczba_tt <= 5){
		
	}
	
	if(liczba_tt > 6 && liczba_tt <= 10){

	}
	
	if(liczba_tt > 10 && liczba_tt <= 14){

	}
}

 

Co teraz dalej? Zdaję sobie sprawy z tego, że to podstawy, ale nigdy aż taka wiedza z zakresu PAWN'a nie była mi potrzebna.


Użytkownik Makale edytował ten post 22.03.2016 20:09

  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#4 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 22.03.2016 20:25

tu masz cos podobnego http://amxx.pl/topic...ndpost&p=705304moj stary kod

ale do liczenia graczy lepiej jest uzyc kody stad http://amxx.pl/topic...ndpost&p=710857


  • +
  • -
  • 0

#5 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 22.03.2016 20:33

Powiedzmy, że podstawy. Od tego jest to forum żeby się uczyć.
W funkcji którą sobie stworzyłeś możesz sobie ustawiać wartość zmiennej CT/TT i to raczej tyle. Przede wszystkim funkcja musi być w jakimś momencie wywołana, np. na początku rundy (w tym celu zobacz sobie tutorial Eventy - http://amxx.pl/topic/1680-eventy/). Wywołać, czy wykonać funkcję jest bardzo łatwo - po prostu piszesz Nazwa_Funkcji(parametry); czyli w Twoim przypadku LimitCt();

 

Ale jeśli chcesz rzeczywiście ograniczyć ilość ludzi w teamie to to może być trochę gorsze. Wydaje mi się że trzeba zarejestrować komendy jointeam i chooseteam, ale nie jestem pewien. Musisz zobaczyć jak to jest zrobione w Zombie Mod na przykład. Są też dostępne team limitery w necie.

Wireshark Cookie Dump:

OKCancel

  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#6 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 22.03.2016 20:48

Z innego pluginu:

	register_menucmd(register_menuid("Team_Select",1),(1<<0)|(1<<1)|(1<<4),"teamselect")
	register_clcmd("jointeam","jointeam")

oraz

if(in_ct >= get_cvar_num("tl_limit_graczy")) {
				client_print(id, print_chat, "[TL] Druzyna CT pelna! Wejdz do T.");
				engclient_cmd(id,"jointeam","T")

  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#7 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 22.03.2016 20:52

Czyli teraz mam coś takiego:

#include <amxmodx>

#define PLUGIN "Limit CT"
#define VERSION "1.0"
#define AUTHOR "xxx"


public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	set_cvar_num("mp_limitteams",0)
	set_cvar_num("mp_autoteambalance",0)
	
	register_menucmd(register_menuid("Team_Select",1),(1<<0)|(1<<1)|(1<<4),"teamselect")
	register_clcmd("jointeam","jointeam")

}

public client_putinserver(id){
	LimitCt();
}

public client_disconnect(id){
	LimitCt();
}

public PlayersInTeam(team) {
  new number = 0;
  for(new i=0; i<=get_playersnum(); i++) {
      if(!is_user_connected(i)) continue;

      if(cs_get_user_team(i) != team) continue;

      number++;
  }
  return number;
}


public LimitCt() 
	liczba_tt = PlayersInTeam(CS_TEAM_T);
	
	if(liczba_tt <= 5){
	
	// jak zrobić żeby był 1 CT ? funckja ktora liczy CT i jezeli liczba ct wieksza niż 1 to ma się wykonac:
	// engclient_cmd(id,"jointeam","T") ?
		
	}
	
	if(liczba_tt > 6 && liczba_tt <= 10){

	}
	
	if(liczba_tt > 10 && liczba_tt <= 14){

	}
}

Pewno trzeba przerobić funkcję public[/size] [/size]PlayersInTeam[/size]([/size]team[/size]) tak, żeby liczyła ilość CT obecną do zmiennej liczba_ct i wtedy warunek wygląda tak:[/size]

	if(liczba_tt <= 5){
	
			if (liczba_ct = 1){
				engclient_cmd(id,"jointeam","T") // i dołozyc printa ze druzycna CT pelna przerzucilo cie do TT
			}
			else{
			 // tutaj co ? plugin_continue ??
			}
	}

Wiem, że są inne w necie ale one mnie nie zadowalają. Nie działąją tak jak chce, albo się bugują. Wolę zrobić sam z waszą pomoc i się przy okazji czegoś nauczyć.


Użytkownik Makale edytował ten post 22.03.2016 20:58

  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#8 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 23.03.2016 01:48


for(new i=0; i<=get_playersnum(); i++)

Tyle razy tłumaczyłem.

Wchodzi gracz, dostaje id 1, wchodzi kolejny dostaje 2, kolejny 3 kolejny 4, wychodzi ten o id 2.

Mamy trzech graczy od id 1,3,4

get_playersnum() zwróci Ci 3. Gracz o id 4 zostanie w Twojej pętli pominięty. Ponadto nikt nigdy nie dostanie id 0 więc po co od zera zaczynać?

 

 

Makale musisz zrobić następującą rzecz - przewidzieć kiedy ilość graczy w ct/tt się zmienia.

 

-Dołączenie do drużyny

-Zmiana drużyny (o ile na to chcesz pozwolić)

-Wyjście z gry

-Przejście do spectators

 

Robisz na to wszystko eventy i tyle, na bieżąco trzymasz ilość graczy w obu teamach w zmiennych. Jeśli ktoś chce dołączyć do któregoś teamu to sprawdzasz czy ilość graczy na to pozwala, jak nie to zmieniasz mu team 

cs_set_user_team(id,team)

Użytkownik grankee edytował ten post 23.03.2016 01:50

  • +
  • -
  • 0

#9 wiwi249

    Wszechobecny

  • Użytkownik

Reputacja: 150
Profesjonalista

  • Postów:440
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Tarnobrzeg
Offline

Napisano 23.03.2016 17:41


get_playersnum() zwróci Ci 3. Gracz o id 4 zostanie w Twojej pętli pominięty.

O kurde, nie pomyślałem o tym a tak robiłem już swoje pluginy, racja.

Rozsądniej byłoby użyć get_maxplayers()

Wireshark Cookie Dump:

OKCancel

  • +
  • -
  • 0

Wykonuję strony internetowe, zlecenia AMXX i HLDS - w tym pisanie pluginów, ogarnianie serwerów, edycja i tworzenie modeli.

Potrzebujesz czegoś? Pisz!

 

"śpieszmy się pisać posty, tak szybko banują..." ~ sebul


#10 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 25.03.2016 01:43


Rozsądniej byłoby użyć get_maxplayers()

Też dawno temu napotkałem sytuację, gdzie gracz dostał id większe od maxplayers. Nie wiem jak to się stało i czy to nadal możliwe czy już to naprawiono, ale utkwiło mi w pamięci, bo straciłem mnóstwo czasu przez to nie rozumiejąc czemu to nie działa.

Najbezpieczniej użyć 32, wykonanie takiej pętli nawet co sekundę i sprawdzenie jednego warunku is_user_alive wewnątrz na prawdę nie obciąży serwera.

 

@ Makale 

Tak się zastanawiam po co Ci to na bieżąco. Kiedy potrzebujesz sprawdzić w danej chwili ilu jest graczy to robisz funkcję liczącą graczy danej drużyny i tyle. Po co Ci to trzymać na bieżąco?

 

 

Ludzie mają sobie sami do ct dołączać, a plugin ma blokować, żeby nie dało się wejść jeśli nie ma minimum x w terro?


Użytkownik grankee edytował ten post 25.03.2016 02:17

  • +
  • -
  • 0

#11 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 552
Godlike

  • Postów:11 974
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 25.03.2016 09:03

Jeśli koniecznie chcesz na bieżąco liczyć najlepiej było by użyć eventów zmiany teamu itp. i kontrolować ilość niż tak odpalać zliczanie ciagle


  • +
  • -
  • 0

#12 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 25.03.2016 15:44


Jeśli koniecznie chcesz na bieżąco liczyć najlepiej było by użyć eventów zmiany teamu itp. i kontrolować ilość niż tak odpalać zliczanie ciagle

Sądząc po treści jaką podał to chodzi tylko o utrzymanie odpowiedniej ilości graczy w obu teamach, zatem informacja o ilości graczy potrzebna jest tylko kiedy ktoś dołącza, czy to jest ciągle albo chociaż często?


  • +
  • -
  • 0

#13 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 25.03.2016 20:08

@UP

Dokładnie jak wyżej.

Chcę zrobić limit graczy w drużynie CT. Ten limit ma być "zmienny" na podstawie ilości w TT.

Więc plugin musi mieć dwie główne zmienne: ilość ct i ilość tt. Zmienne te muszą się aktualizować co:

-Dołączenie do drużyny

-Zmiana drużyny (o ile na to chcesz pozwolić)

-Wyjście z gry

 

Na podstawie tego ile jest osób w TT ustala taki limit dla graczy CT.

 

 

Co do postu DarkGL.

Pewno i tak byłoby lepiej tylko zasadnicze pytanie "jak to zrobić?". Dla mnie najłatwiejszym sposobem jest ciągłe liczenie ilości graczy w drużynach.


  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#14 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 26.03.2016 15:55

Ani nie jest to trudne ani też z drugiej strony potrzebne. Przykładowo na jedną mapę dla 20 slotowego serwera dolaczy ktos max 40 razy? czy to duzo na jedna mape? Lepiej liczyc kiedy to potrzebne. Łatwiej byłoby to napisać, gdyby ludzie sami się pchali do ct, a nie plugin ich musiał przerzucać, czy tak się będzie działo?


  • +
  • -
  • 0

#15 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 27.03.2016 22:42

Ja już zgłupiałem. Chcę tylko plugin, który ustawi limit CT na podstawie ilości TT. Jeżeli limit CT będzie osiągnięty i ktoś bedzie chciał wbić do CT do wyświetli info, że CT pełne.

Plugin nie musi działać wstecz, że jak zmiejszy się ilość TT to z CT przerzuci do TT.


  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#16 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 28.03.2016 14:43

Musisz przetestować, sam nie mam jak.

#include <amxmodx>
#include <cstrike>
new gOstatniDoCt


public plugin_init() {
	register_plugin("CT limiter","0.1","grankee")
	
	set_cvar_num("mp_limitteams",0)
	set_cvar_num("mp_autoteambalance",0)
	
	register_menucmd(register_menuid("Team_Select",1),(1<<0)|(1<<1)|(1<<4),"teamselect")
	register_clcmd("jointeam","teamselect")
	
}


public teamselect(id)
{
	if(get_user_team(id)==2)
	gOstatniDoCt=id
	return PLUGIN_CONTINUE
}
public client_disconnect(id){
	LimitCt();
}

public PlayersInTeam(team) 
{
	new number = 0;
	for(new i=0; i<=32; i++) 
	{
		if(!is_user_connected(i)) continue;
		
		if(get_user_team(i) != team) continue;
		
		number++;
	}
	return number;
}


public LimitCt() 
{
	if(get_playersnum()<2) return 
	new liczbaTerro = PlayersInTeam(1);
	new liczbaCt=PlayersInTeam(2)
	if((liczbaTerro <= 5 && liczbaCt>1) ||
	(liczbaTerro>5 && liczbaCt<=10 && liczbaCt>2) ||
	(liczbaTerro>10 && liczbaCt<=14 && liczbaCt>3))
	{
		cs_set_user_team(is_user_connected(gOstatniDoCt)?gOstatniDoCt:LosujGracza(2),CS_TEAM_T)
	}
	return 
}
public OstatniCt()
{
	if(is_user_connected(gOstatniDoCt)) return gOstatniDoCt
	
	
	return LosujGracza(2)
}
LosujGracza(team)
{
	if(PlayersInTeam(team)<1) return -1
	new id
	do
	{
		id=random_num(1,32)
	}
	while(get_user_team(id)!=team)
	return id
}


Użytkownik grankee edytował ten post 29.03.2016 03:00

  • +
  • -
  • 0

#17 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 10.04.2016 10:30

Dzięki. Już sprawdzam. Wstępnie po kodzie widzę, że o to mi chodziło.


  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#18 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 10.04.2016 10:32

ale

(liczbaTerro>5 && liczbaCt<=10 && liczbaCt>2) ||
	(liczbaTerro>10 && liczbaCt<=14 && liczbaCt>3))

nie powinno byc tak:

(liczbaTerro>5 && liczbaTerro<=10 && liczbaCt>2) ||
	(liczbaTerro>10 && liczbaTerro<=14 && liczbaCt>3))

  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !


#19 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 12.04.2016 14:45

Powinno, pisalem na zmeczonego :)


  • +
  • -
  • 0

#20 Makale

    Wszechwidzący

  • Autor tematu
  • Użytkownik

Reputacja: 12
Początkujący

  • Postów:234
  • Lokalizacja:Płock
Offline

Napisano 14.04.2016 14:16

Hmm raz działa a raz nie. Jak działa to przerzuca żyjacego CT do TT w środku rundy. Może na razie darujmy sobie przerzucanie graczy. Bardziej mi chodzi o to, że jak wbija gracz to żeby nie mógł dojść do CT.

 

Powiedzmy, że jest  3 TT i 1 CT. Wbija gracz i chce dojść do CT to wyświetla się mu info jakieś łądne z colorchatu + dojdzie do TT.


  • +
  • -
  • 0

Poszukuję: serwerów do sieci, grafika do sieci oraz kilku stron WWW (prywatnych), adminów na serwery, itp.

Szukasz zajęcia na wolne chwile ? Pisz !

b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png

Zapraszam !





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

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