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

Przenoszenie do TT FUNCKAJ


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

#1 Pawlik4Ver

    Wszechwidzący

  • Zbanowany

Reputacja: 17
Początkujący

  • Postów:239
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Polska
Offline

Napisano 08.02.2019 18:37

Witam, chciałbym się spytać czy ta funkcja niżej jest dobrze skonstruowana:

Napisałem kod który po wejściu na serwer przenosi do TT, i działa dopiero jeżeli jest minimum 1 budowniczy, i jeżeli nie ma czasu budowania i przygotowania to przenosi do TT.

 

Może ktoś luknąć?

https://pastebin.com/68xJSi2Z

 


Użytkownik Pawlik4Ver edytował ten post 08.02.2019 19:05

Tworze strony Internetowe/WWW (HTML5/CSS, PHP), oraz robię paczki do cs1.6( pisze pluginy też ) na zamówienie.

SPRZEDAM PACZKĘ BASEBUILDER DNKS, mod doskonalony paczka możliwa do zobaczenia przed zakupem, więcej na priv lub GG: 62653757

Skontaktować możesz się zemną przez GG:62653757


#2 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 08.02.2019 18:58

Odpowiedz sobie na jedno, ale to jedno za***iście ważne pytanie... "Dlaczego sam tego nie przetestuje?", a potem sam przetestuj.

 

Ludzie niedługo wam trzeba będzie tyłki podcierać.... troche samodzielnosci

 

 

A co do kodu - wygląda jak krowie z gardła wyciągnięty. proszę dbać o tabulacje, bo tutejsi forumowicze niechętnie patrzą na takie wstawki.

 

Also, pozmieniałbym kolejność warunków itp, jeden nawet zbędny jest


  • +
  • -
  • 0

#3 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 08.02.2019 19:15

Wersja z możliwością rozszyfrowania kodu:

PrzeniesDoTT(index)
{
	const minplayers = 1;

	for(new i = 1; i <= 32; i++)
	{
		if(!is_user_connected(i))
			continue;
		
		new team = get_user_team(i);

		if(team != get_user_team(index) || team != 2)
			continue;
	
		if(get_playersnum() < minplayers)
			continue;

		if(g_boolCanBuild || g_boolPrepTime)
			continue;

		engclient_cmd(index, "jointeam", "1");

		break;
	}
}

Fun fact: nie wiem po co robisz to w ten sposób.

 

Tworzysz pętlę, która wykonuje się (przykładowo) 32 razy, i za każdym razem, kiedy spełni się każdy z warunków, to przenosisz gracza do TT, po czym lecisz pętlę dalej.

Najlepiej opisz nam, jak ma działać ta funkcja.

Dodatkowo, pomyśl sam - jak przebiega proces tejże funkcji:

  • Wywołanie (przy connect'cie, tak jak napisałeś wyżej),
  • Deklaracja zmiennej,
  • Pętla dla (przykładowo) 32 graczy, a w niej:
  1. Sprawdzenie teamu graczy, które prowadzi do niczego.
  2. Sprawdzenie z każdą iteracją, czy get_playersnum() >= playersnum.
  3. Sprawdzenie z każdą iteracją, czy zmienne g_boolCanBuild oraz g_boolPrepTime mają wartość 1.
  4. Wykonanie komendy na graczu, jeśli przejdzie przez wszystkie ify.
  5. Powtórzenie iteracji.

 

Możesz zrobić tak:

PrzeniesDoTT(index)
{
	if(!is_user_connected(index))
		return;

	if(get_user_team(index) == 1)
		return;

	if(g_boolCanBuild || g_boolPrepTime)
		return;

	const minPlayers = 1;

	if(get_playersnum() < minPlayers)
		return;

	const minBuilders = 1;

	if(getBuildersCount() < minBuilders)
		return;

	engclient_cmd(index, "jointeam", "1");
}

getBuildersCount()
{
	new counter;

	for(new i = 1; i <= 32; i++)
		if(is_user_connected(i) && get_user_team(i) == 2 && is_user_alive(i))
			counter++;

	return counter;
}

  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#4 Pawlik4Ver

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 17
Początkujący

  • Postów:239
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Polska
Offline

Napisano 08.02.2019 19:25

 

Wersja z możliwością rozszyfrowania kodu:

PrzeniesDoTT(index)
{
	const minplayers = 1;

	for(new i = 1; i <= 32; i++)
	{
		if(!is_user_connected(i))
			continue;
		
		new team = get_user_team(i);

		if(team != get_user_team(index) || team != 2)
			continue;
	
		if(get_playersnum() < minplayers)
			continue;

		if(g_boolCanBuild || g_boolPrepTime)
			continue;

		engclient_cmd(index, "jointeam", "1");

		break;
	}
}

Fun fact: nie wiem po co robisz to w ten sposób.

 

Tworzysz pętlę, która wykonuje się (przykładowo) 32 razy, i za każdym razem, kiedy spełni się każdy z warunków, to przenosisz gracza do TT, po czym lecisz pętlę dalej.

Najlepiej opisz nam, jak ma działać ta funkcja.

Dodatkowo, pomyśl sam - jak przebiega proces tejże funkcji:

  • Wywołanie (przy connect'cie, tak jak napisałeś wyżej),
  • Deklaracja zmiennej,
  • Pętla dla (przykładowo) 32 graczy, a w niej:
  1. Sprawdzenie teamu graczy, które prowadzi do niczego.
  2. Sprawdzenie z każdą iteracją, czy get_playersnum() >= playersnum.
  3. Sprawdzenie z każdą iteracją, czy zmienne g_boolCanBuild oraz g_boolPrepTime mają wartość 1.
  4. Wykonanie komendy na graczu, jeśli przejdzie przez wszystkie ify.
  5. Powtórzenie iteracji.

 

Możesz zrobić tak:

PrzeniesDoTT(index)
{
	if(!is_user_connected(index))
		return;

	if(get_user_team(index) == 1)
		return;

	if(g_boolCanBuild || g_boolPrepTime)
		return;

	const minPlayers = 1;

	if(get_playersnum() < minPlayers)
		return;

	const minBuilders = 1;

	if(getBuildersCount() < minBuilders)
		return;

	engclient_cmd(index, "jointeam", "1");
}

getBuildersCount()
{
	new counter;

	for(new i = 1; i <= 32; i++)
		if(is_user_connected(i) && get_user_team(i) == 2 && is_user_alive(i))
			counter++;

	return counter;
}

czy zamiast engclient_cmd(index, "jointeam", "1"); moge zastosować cs_set_user_team(idCS_TEAM_CT)?

 

 

 

chodzi mi o:

aby gdy gracz wejdzie na serwer po czasie budowania czyli g_boolCanBuild , to przerzuca go do TT


Użytkownik Pawlik4Ver edytował ten post 08.02.2019 19:44

Tworze strony Internetowe/WWW (HTML5/CSS, PHP), oraz robię paczki do cs1.6( pisze pluginy też ) na zamówienie.

SPRZEDAM PACZKĘ BASEBUILDER DNKS, mod doskonalony paczka możliwa do zobaczenia przed zakupem, więcej na priv lub GG: 62653757

Skontaktować możesz się zemną przez GG:62653757


#5 Robiin

    Godlike

  • Support Team

Reputacja: 1 103
Super Hero

  • Postów:2 043
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 08.02.2019 20:56

Jak dobrze pamiętam, to był jakiś problem z cs_set_user_team, że to nie działało zgodnie z nazwą (bądź w nieoczekiwany sposóB), ale na 100% nie wiem. Możesz spróbować, ewentualnie posiłkować się tym, ale zaczerpnąłem to z zp 4.3, więc nie wiem jak zadziała na nowszych AMXXach.

const OFFSET_CSTEAMS = 114;
const OFFSET_LINUX = 5;
const TASK_TEAMUPDATE = 1337;

switchTeam(index, team, bool:update)
{
	set_pdata_int(index, OFFSET_CSTEAMS, team, OFFSET_LINUX);

	if(update)
		set_task(0.1, "updateTeam", index + TASK_TEAMUPDATE);
}

public updateTeam(taskIndex)
{
	new index = taskIndex - TASK_TEAMUPDATE;

	if(!is_user_connected(index))
		return;

	static messageTeamInfo;

	if(!messageTeamInfo)
		messageTeamInfo = get_user_msgid("TeamInfo");

	new const teamNames[][] =
	{
		"UNASSIGNED",
		"TERRORIST",
		"CT",
		"SPECTATOR"
	};

	emessage_begin(MSG_ALL, messageTeamInfo);
	ewrite_byte(index);
	ewrite_string(teamNames[get_pdata_int(index, OFFSET_CSTEAMS, OFFSET_LINUX)]);
	emessage_end();
}

  • +
  • -
  • 0

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#6 Albertd

    Zaawansowany

  • Użytkownik

Reputacja: 34
Życzliwy

  • Postów:138
  • GG:
  • Lokalizacja:Polska
Offline

Napisano 12.02.2019 22:01

Czytając twoją sygnę można by się spodziewać że takiego rzeczy potrafisz robić.

Tworze strony Internetowe/WWW (HTML5/CSS, PHP), oraz robię paczki do cs1.6( pisze pluginy też ) na zamówienie.

SPRZEDAM PACZKĘ BASEBUILDER DNKS, mod doskonalony paczka możliwa do zobaczenia przed zakupem, więcej na priv lub GG: 62653757

Skontaktować możesz się zemną przez GG:62653757

A twoje rozwiązanie to: putinserver można by zamienić na faktyczne dołączenie do drużyny ale już powinieneś wiedzieć jak to zrobić.

public client_putinserver(id){	
	
	if( task_exists(id+581222) )
		remove_task(id+581222)
	set_task(5.0, "checkTeam", id+581222)
}
public checkTeam(id){
	id -= 581222
	
	if(g_boolCanBuild)
		return
	
	if( get_user_team(id) == 1 )
		return
	
	cs_set_user_team(id, 1)
}

Użytkownik Albertd edytował ten post 12.02.2019 22:03

  • +
  • -
  • 1

#7 Pawlik4Ver

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 17
Początkujący

  • Postów:239
  • GG:
  • Imię:Wiktor
  • Lokalizacja:Polska
Offline

Napisano 24.02.2019 01:03

A dziękuję :) 

No niestety Albertd nie miałem pomysłu, stwierdzam lenia. Ale dzięki.


Tworze strony Internetowe/WWW (HTML5/CSS, PHP), oraz robię paczki do cs1.6( pisze pluginy też ) na zamówienie.

SPRZEDAM PACZKĘ BASEBUILDER DNKS, mod doskonalony paczka możliwa do zobaczenia przed zakupem, więcej na priv lub GG: 62653757

Skontaktować możesz się zemną przez GG:62653757





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

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