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

Po 8 rundach zamiana teamów


  • Zamknięty Temat jest zamknięty
13 odpowiedzi w tym temacie

#1 wizu

    Godlike

  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 11.10.2008 14:58

Witam. Chciałem sobie napisać plugin, który po 8 rundach zamieni teamami graczy (tzn. jeśli ktoś był w ct, to teraz będzie w tt). Fragi i deady mają zostać, ale chciałem też zamienić punty teamów. Coś mi jednak nie wychodzi. Ogólnie dziwnie to działa. Nie jestem pewny, czy wszystkich zamienia i na dodatek zamiast zmieniać punkty teamów pokazuje -1... Pomoże ktoś? Oto mój kod:
#include <amxmodx>
#include <cstrike>

new runda = 0
new CT = 0
new TT = 0

public plugin_init()
{
	register_plugin("zamiana druzynami", "1.0" ,"wizu")
	register_event("SendAudio","koniec_rundy","a","2=%!MRAD_terwin","2=%!MRAD_ctwin","2=%!MRAD_rounddraw")
	register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
	register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")
	register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0")
	set_cvar_num("mp_maxrounds", 16)
	set_cvar_num("mp_timelimit", 0)
}

public koniec_rundy()
{
if (++runda == 8)
{
	client_print(0,print_chat,"Runda zakonczona, zamiana teamami.")
	for(new i=1;i<32;i++)
	{
		if (is_user_connected(i))
		{
			new CsTeams:team = cs_get_user_team(i)
			if (team==CS_TEAM_T)
			{
				switch(random_num(1,4))
				{
					case 1:
					{
						cs_set_user_team( i, CS_TEAM_CT, CS_CT_URBAN )
					}
					case 2:
					{
						cs_set_user_team( i, CS_TEAM_CT, CS_CT_GSG9 )
					}
					case 3:
					{
						cs_set_user_team( i, CS_TEAM_CT, CS_CT_GIGN )
					}
					case 4:
					{
						cs_set_user_team( i, CS_TEAM_CT, CS_CT_SAS )
					}
				}
				cs_set_user_money(i, 800, 1)
			}

			if (team==CS_TEAM_CT)
			{
				switch(random_num(1,4))
				{
					case 1:
					{
						cs_set_user_team( i, CS_TEAM_T, CS_T_TERROR )
					}
					case 2:
					{
						cs_set_user_team( i, CS_TEAM_T, CS_T_LEET )
					}
					case 3:
					{
						cs_set_user_team( i, CS_TEAM_T, CS_T_ARCTIC )
					}
					case 4:
					{
						cs_set_user_team( i, CS_TEAM_T, CS_T_GUERILLA )
					}
				}
				cs_set_user_money(i, 800, 1)
			}
		}
	}
}
}

public ct_win()
{
CT++
if (runda == 8)
    {
    new s_TT = TT
    TT = CT
    CT = s_TT
    }
}
public t_win()
{
TT++
if (runda == 8)
    {
    new s_TT = TT
    TT = CT
    CT = s_TT
    }
}

public Nowa_Runda()
{
message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) 
write_string("TERRORIST")
write_byte(TT)
write_byte(0)
message_end()

message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0) 
write_string("CT")
write_byte(CT)
write_byte(0)
message_end()
}
Dzięki.
  • +
  • -
  • 0

#2 choyrack

    Wszechpomocny

  • Użytkownik

Reputacja: 64
Pomocny

  • Postów:369
  • GG:
  • Lokalizacja:Wrocław
Offline

Napisano 11.10.2008 15:22

Mi ta funkcja cs_set_user_team w ogóle się nie podoba (jej działanie). I to przez nią mogą się dziać różne dziwne rzeczy.

Proponuje Ci zrobić to tak jak tutaj zrobiłem: http://amxx.pl/viewtopic.php?t=3595
Z wykorzystaniem engclient_cmd(index,"jointeam","TEAM")
  • +
  • -
  • 0

#3 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 11.10.2008 16:52

Ale ona działa elegancko. Przenosi graczy bez zabijania ich. Największym problemem teraz są te punkty teamów.

Poza tym, jeżeli użyję tej funkcji
engclient_cmd
To serwerowi będzie się wydawać, że gracz sam zmienił team. A ja mam na serwerze blokadę zmiany teamów i limitteams więc to rozwiązanie odpada.
  • +
  • -
  • 0

#4 darkman

    Wszechwiedzący

  • Przyjaciel

Reputacja: 87
Zaawansowany

  • Postów:553
  • Lokalizacja:inactive
Offline

Napisano 11.10.2008 17:54

pozmieniałem troche, aczkolwiek powiem że oszpeciłem ten kod jaknajbardziej sie da z powodu braku chęci, motywacji i czasu ^^ załącznik

Załączone pliki


  • +
  • -
  • 0

#5 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 11.10.2008 20:49

Twoje sma to:
#include <amxmodx>
#include <cstrike>

new runda, TT, CT, old_ct, old_tt

public plugin_init()
{
	register_plugin("zamiana druzynami", "1.0" ,"wizu")
	register_logevent("koniec_rundy", 2, "1=Round_end")
	register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")
	register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
	register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0")
	register_event("TextMsg", "fwRestart", "a", "2&#Game_will_restart_in")
	set_cvar_num("mp_maxrounds", 16)
	set_cvar_num("mp_timelimit", 0)
}

public koniec_rundy()
{
	if (runda == 8)
	{
		new playerstt[32], pnumtt, i, terror, playersct[32], pnumct, x, cterror
		get_players(playerstt, pnumtt, "e", "TERRORIST")
		get_players(playersct, pnumct, "e", "CT")
		for(i=0; i < pnumtt; i++)
			terror = playerstt[i]
		for(x=0; x < pnumct; x++)
			cterror = playersct[x]
		client_print(0,print_chat,"Runda zakonczona, zamiana teamami.")
		cs_set_user_team(terror, CS_TEAM_CT, CS_CT_SAS)
		cs_set_user_money(terror, 800, 1)
		cs_set_user_team(cterror, CS_TEAM_T, CS_T_ARCTIC)
		cs_set_user_money(cterror, 800, 1)
	}
}		

public ct_win()
{
	CT++
	if(runda >= 8)
		old_ct = CT
}

public t_win()
{
	TT++
	if(runda >=8)
		old_tt = TT	
}

public fwRestart(){
	TT = 0;
	CT = 0; 
	
}

public Nowa_Runda()
{
	if(runda >= 8)
	{
		
		message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0)
		write_string("TERRORIST")
		write_byte(old_ct)
		message_end()
		
		message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0)
		write_string("CT")
		write_byte(old_tt)
		message_end()
	}
}

Jest tu kilka błędów:

1.
public Nowa_Runda()
{
	if(runda >= 8)
	{
Powinno być:
public Nowa_Runda()
{
	if(++runda >= 8)
	{
Żeby zwiększało liczbę rund przy końcu rundy. Inaczej w ogóle plugin nie zadziała.

2.
public ct_win()
{
	CT++
	if(runda == 8)
		old_ct = CT
}

public t_win()
{
	TT++
	if(runda ==8)
		old_tt = TT	
}
Powinno być:
public ct_win()
{
	CT++
	if(runda >= 8)
		old_ct = CT
}

public t_win()
{
	TT++
	if(runda >=8)
		old_tt = TT	
}
Ponieważ funkcja, która zmienia wynik teamu zmienia tylko wyświetlaną liczbę, a zmienną z wynikiem cs przechowuje u siebie i wyświetla od nowa po każdej rundzie.

3.
for(i=0; i < pnumtt; i++)
			terror = playerstt[i]
		for(x=0; x < pnumct; x++)
			[b]cterror[/b] = playersct[x]
		client_print(0,print_chat,"Runda zakonczona, zamiana teamami.")
		cs_set_user_team(terror, CS_TEAM_CT, CS_CT_SAS)
		cs_set_user_money(terror, 800, 1)
		cs_set_user_team(cterror, CS_TEAM_T, CS_T_ARCTIC)
		cs_set_user_money(cterror, 800, 1)
Tutaj, to już w ogóle odpada. Ponieważ do zmiennej terror oraz cterror zostanie przypisane ID tylko i wyłącznie ostatniej osoby. Trzeba trochę pozmieniać ;)
  • +
  • -
  • 0

#6 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 11.10.2008 21:46

3. proponuje
new players[32],num
get_players(players,num)
for(new i=0;i<num;i++)
{
   if(cs_get_user_team(players[i])==CS_TEAM_T) cs_set_user_team(players[i], CS_TEAM_CT,random_num(5,8))
   else if(cs_get_user_team(players[i])==CS_TEAM_CT) cs_set_user_team(players[i], CS_TEAM_T,random_num(1,4))
   else continue
   cs_set_user_money(players[i], 800, 1)
}
client_print(0,print_chat,"Runda zakonczona, zamiana teamami.")

  • +
  • -
  • 0

#7 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 11.10.2008 21:51

Jednak co najdziwniejsze w ogóle nie pokazuje mi się

Runda zakonczona, zamiana teamami.

po 8 rundach O.o
  • +
  • -
  • 0

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 11.10.2008 22:20

Daj caly kod co masz sklejony :P
  • +
  • -
  • 0

#9 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 12.10.2008 08:49

W tej chwili wygląda to tak:
#include <amxmodx>
#include <cstrike>

new runda, TT, CT, old_ct, old_tt

public plugin_init()
{
	register_plugin("zamiana druzynami", "1.0" ,"wizu")
	register_logevent("koniec_rundy", 2, "1=Round_end")
	register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")
	register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
	register_event("HLTV", "Nowa_Runda", "a", "1=0", "2=0")
	register_event("TextMsg", "fwRestart", "a", "2&#Game_will_restart_in")
	set_cvar_num("mp_maxrounds", 16)
	set_cvar_num("mp_timelimit", 0)
}

public koniec_rundy()
{
	if (++runda == 8)
	{
		new players[32],num
		get_players(players,num)
		for(new i=0;i<num;i++)
		{
			if(cs_get_user_team(players[i])==CS_TEAM_T) 
				cs_set_user_team(players[i], CS_TEAM_CT,random_num(5,8))
			else if(cs_get_user_team(players[i])==CS_TEAM_CT) 
				cs_set_user_team(players[i], CS_TEAM_T,random_num(1,4))
			else continue
		cs_set_user_money(players[i], 800, 1)
		}
		client_print(0,print_chat,"Runda zakonczona, zamiana teamami.")
	}
}		

public ct_win()
{
	CT++
	if(runda >= 8)
		old_ct = CT
}

public t_win()
{
	TT++
	if(runda >=8)
		old_tt = TT	
}

public fwRestart(){
	TT = 0;
	CT = 0; 
	
}

public Nowa_Runda()
{
	if(runda >= 8)
	{
		
		message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0)
		write_string("TERRORIST")
		write_byte(old_ct)
		message_end()
		
		message_begin(MSG_ALL, get_user_msgid("TeamScore"),{0,0,0},0)
		write_string("CT")
		write_byte(old_tt)
		message_end()
	}
}
	
	
I działa tak, jakby zmienna runda przez cały była równa 0. Może rundę będę przetrzymywał w cvarze?
  • +
  • -
  • 0

#10 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

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

Napisano 12.10.2008 12:48

w Nowa_Runda() daj sobie

client_print(0,print_chat,"Runda numer - %d",runda)
i co runda będziesz widział jaką wartość ma zmienna runda.
  • +
  • -
  • 0

#11 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 12.10.2008 13:05

No właśnie. Tylko dedyk mi coś świruje i nie mam jak sprawdzić.
  • +
  • -
  • 0

#12 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

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

Napisano 12.10.2008 15:32

Rozwiń nieco tą wypowiedź...
  • +
  • -
  • 0

#13 wizu

    Godlike

  • Autor tematu
  • Przyjaciel

Reputacja: 224
Profesjonalista

  • Postów:1 217
  • GG:
  • Lokalizacja:Sanok
Offline

Napisano 12.10.2008 15:33

Chodziło mi o to, że serwer dedykowany, na którym mam swoje serwery cs jakoś dziwnie się zachowuje i nie mam jak dorzucić pluginów.
  • +
  • -
  • 0

#14 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

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

Napisano 12.10.2008 17:58

.....
  • +
  • -
  • 0




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

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