←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Dodatek
Item - radar i teleport

  • +
  • -
sebul - zdjęcie sebul 29.12.2010

Gdy mam tak:

//RADAR
public radar_scan() {
for(new id=0; id<MAX; id++) {
if(!is_user_alive(id) || !player_b_radar[id] || player_class[id] != Diablo) continue;

for(new i=0; i<MAX; i++) {
if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;

new PlayerCoords[3];
get_user_origin(i, PlayerCoords);

message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id);
write_byte(id);
write_byte(i);
write_coord(PlayerCoords[0]);
write_coord(PlayerCoords[1]);
write_coord(PlayerCoords[2]);
message_end();

message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id);
write_byte(i);
message_end();
}
}
}


To nie działa ani radar dla klasy diablo ani przedmiot radar.

Bo według tego kodu radar będzie działać tylko wtedy jeśli gracz będzie miał item radar i będzie miał klasę diablo. Najlepiej zrób nowy public do tej mocy dla klasy, bo nie bardzo wiem jak to ze sobą połączyć, aby działało jako item i moc.


Albo spróbuj tak
public radar_scan() {
for(new id=0; id<MAX; ++id) {
if(is_user_alive(id) && (player_b_radar[id] || player_class[id] == Diablo)) {
for(new i=0; i<MAX; ++i) {
if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;

new PlayerCoords[3];
get_user_origin(i, PlayerCoords);

message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id);
write_byte(id);
write_byte(i);
write_coord(PlayerCoords[0]);
write_coord(PlayerCoords[1]);
write_coord(PlayerCoords[2]);
message_end();

message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id);
write_byte(i);
message_end();
}
}
}
}

Użytkownik sebul edytował ten post 29.12.2010 16:15
Odpowiedz

  • +
  • -
Kaleka - zdjęcie Kaleka 29.12.2010

Up. Twój kod powoduje że wszystko co jest poniżej tego kodu nie działa.

@@Edit. Chodziło mi o post szczepaneto
Użytkownik Zielony Smerf edytował ten post 29.12.2010 19:09
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.12.2010

Nie działa to jest pojęcie bardzo ogólne... Możesz bardziej szczegółowo opisać co nie działa?
Odpowiedz

  • +
  • -
Kaleka - zdjęcie Kaleka 29.12.2010

Nie działa to jest pojęcie bardzo ogólne... Możesz bardziej szczegółowo opisać co nie działa?

Nie chodzi mi o twój kod, tylko o kod szczepaneto nie zauważyłem drugiej strony, moja wina.

Nie działa pojecie bardzo ogólne? Przecież napisałem że nie działa wszystko poniżej podanego kodu, czyli wszystko co jest po public radar_scan nie jest wogóle czytane, jakby tego wogóle nie było.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 29.12.2010

Aha ^ ^
On tam nie zamknął przynajmniej jednej klamry, więc pewnie dlatego nie działa, spróbuj z tym kodem co ja napisałem.
Odpowiedz

  • +
  • -
Kaleka - zdjęcie Kaleka 29.12.2010

Aha ^ ^
On tam nie zamknął przynajmniej jednej klamry, więc pewnie dlatego nie działa, spróbuj z tym kodem co ja napisałem.


Sprawdziłem... wynik:

Klasa Diablo = Nie ma radaru
Klasa Diablo + Radar item = Nie ma radaru
Klasa inna = Nie ma radaru
Klasa Inna + radar = Nie ma radaru
Klasa Inna + /drop itemku radaru = Radar na 3sekundy.. przez chwile po wywaleniu przedmiotu
Odpowiedz

cesik - zdjęcie cesik 16.02.2011

i pamiętaj o zmianie

new rannum = random_num(1,X)


X - wartość ostatniego itemu



czyli ze co? chodzi o numer itemu? czy jak
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 16.02.2011

Tak. A dokładniej o numer ostatniego itemu.
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 07.03.2011

Kod teleportu poprawiłem. Od teraz gdy się ktoś gdzieś zaklinuje w ścianie to cofa go w miejsce skąd się teleportował.
Odpowiedz

  • +
  • -
^^^Deed - zdjęcie ^^^Deed 28.03.2011

Sorki za odkop...
sebul, twoja ostatnia funkcja działa dla wszystkich, nie ważne czy masz item czy klasę (nie wiem czemu tak jest).

To działa w 100%
public radar_scan() 
{
	for(new id=1; id<=MAX; id++) 
	{
		if(!is_user_alive(id)) continue;
		
		if(player_b_radar[id] != 1) continue;
		
		if(player_class[id] != CLASS_NAME) continue;
		
		for(new i=1; i<=MAX; i++) {
			if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;
			
			new PlayerCoords[3];
			get_user_origin(i, PlayerCoords);
			
			message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id);
			write_byte(id);
			write_byte(i);
			write_coord(PlayerCoords[0]);
			write_coord(PlayerCoords[1]);
			write_coord(PlayerCoords[2]);
			message_end();
			
			message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id);
			write_byte(i);
			message_end();
		}
	}
}

PS: Tak ostatni przeglądając sma diablo, zauważyłem że jest w nim wiele funkcji które w ogóle nie są aktywne, a działają bez problemu. Ciekawe czemu.
Odpowiedz

FreZZy - zdjęcie FreZZy 28.03.2011

if(player_b_radar[id] != 1) continue;

if(player_class[id] != CLASS_NAME) continue;


czyli ma mieć i itemek i klase?

pzdr
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 28.03.2011

Sorki za odkop...
sebul, twoja ostatnia funkcja działa dla wszystkich, nie ważne czy masz item czy klasę (nie wiem czemu tak jest).

To działa w 100%

public radar_scan() 
{
	for(new id=1; id<=MAX; id++) 
	{
		if(!is_user_alive(id)) continue;
		
		if(player_b_radar[id] != 1) continue;
		
		if(player_class[id] != CLASS_NAME) continue;
		
		for(new i=1; i<=MAX; i++) {
			if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;
			
			new PlayerCoords[3];
			get_user_origin(i, PlayerCoords);
			
			message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id);
			write_byte(id);
			write_byte(i);
			write_coord(PlayerCoords[0]);
			write_coord(PlayerCoords[1]);
			write_coord(PlayerCoords[2]);
			message_end();
			
			message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id);
			write_byte(i);
			message_end();
		}
	}
}

PS: Tak ostatni przeglądając sma diablo, zauważyłem że jest w nim wiele funkcji które w ogóle nie są aktywne, a działają bez problemu. Ciekawe czemu.

Mój kod działa i tutaj jestem tego pewny na 100% (sam mam tak samo), więc po prostu coś źle dodałeś sam, może nie zerujesz gdzieś "player_b_radar[id]"?
I jeszcze coś, "!player_b_radar[id]" oznacza w tym przepadku praktycznie to samo co "player_b_radar[id] != 1" i nie potrzebnie dajesz tak wszystko oddzielnie, skoro tutaj lepiej zastosować jest "||".

Chyba że chodzi Ci o ten kod kilka postów wyżej, na item i klasę, to nie wiem, nie dam sobie uciąć ręki, choć raczej powinno działać.
Użytkownik sebul edytował ten post 28.03.2011 15:18
Odpowiedz

  • +
  • -
Death_Player - zdjęcie Death_Player 05.04.2011

to można od kod na moc dla klasy nie dla itemu ?
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 05.04.2011

Tylko dla klasy? To będzie takie coś
public radar_scan() {
for(new id=1; id<=MAX; id++) {
if(!is_user_alive(id) || player_class[id] != Twoja_Klasa) continue;

for(new i=1; i<=MAX; i++) {
if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;

new PlayerCoords[3];
get_user_origin(i, PlayerCoords);

message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id);
write_byte(id);
write_byte(i);
write_coord(PlayerCoords[0]);
write_coord(PlayerCoords[1]);
write_coord(PlayerCoords[2]);
message_end();

message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id);
write_byte(i);
message_end();
}
}
}

lub też można dodać nową tablicę i przypisywać ją dla danej klasy przy wyborze klasy.
Odpowiedz

  • +
  • -
ogieR8 - zdjęcie ogieR8 05.04.2011

sebul, a umiałbyś zrobić i zrobiłbyś mi coś ?...
Moc z itemu na moc klasy umiem zrobić, ale zależy mi na teleporcie, ale.. na "DUCK && JUMP" ?.

Chodzi o to :

#define IN_JUMP			(1<<1)
#define IN_DUCK (1<<2)


Z tego poradnika : Kliknięcie guzika w prethinku - AMXX.pl: Support AMX Mod X .

Przykład działania - gram, gram, gram (xD), kliknę SPACJĘ I CTRL i teleportuje mnie tam, gdzie mam zaznaczone miejsce celownikiem.

Z góry wielkie dzięki i pozdrawiam
~ ogieR-



@@EDIT:

Będzie to tak ?

Spoiler


zmienna - np. c_tp
Użytkownik ogieR- edytował ten post 05.04.2011 18:00
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 05.04.2011

Zamiast

znajdź w "public check_magic"

if(player_b_heal[id] > 0) item_totemheal(id);

dodaj pod
if(player_b_teleport[id] > 0) item_teleport(id);

zrób tak
znajdź
if (pev(id,pev_button) & IN_USE && !casting[id])
Use_Spell(id)

dodaj pod
if(player_b_teleport[id] > 0 && (button2 & IN_JUMP) && (button2 & IN_DUCK)) item_teleport(id);

Użytkownik sebul edytował ten post 05.04.2011 20:02
Odpowiedz

  • +
  • -
Death_Player - zdjęcie Death_Player 06.04.2011

Czy mógłby ktoś zrobić gotowca dla mocy dla klas ?
Odpowiedz

  • +
  • -
^^^Deed - zdjęcie ^^^Deed 12.04.2011

Sebul, nie pamiętam już, ja wkleiłem coś innego niż chciałem.
Poprawka.
public radar_scan() 
{
	for(new id=1; id<=MAX; id++) 
	{
		if(is_user_alive(id) && (player_b_radar[id] > 0 || player_class[id] == KLASA))
		{
			for(new i=1; i<=MAX; i++) {
				if(!is_user_alive(i) || id == i || get_user_team(id) == get_user_team(i)) continue;
				
				new PlayerCoords[3];
				get_user_origin(i, PlayerCoords);
				
				message_begin(MSG_ONE_UNRELIABLE, g_msgHostageAdd, {0,0,0}, id);
				write_byte(id);
				write_byte(i);
				write_coord(PlayerCoords[0]);
				write_coord(PlayerCoords[1]);
				write_coord(PlayerCoords[2]);
				message_end();
				
				message_begin(MSG_ONE_UNRELIABLE, g_msgHostageDel, {0,0,0}, id);
				write_byte(i);
				message_end();
			}
		}
	}
}

Death_Player, to:
if(player_b_teleport[id] > 0 && (button2 & IN_JUMP) && (button2 & IN_DUCK)) item_teleport(id);
zamień na:
if(player_class[id] == KLASA && (button2 & IN_JUMP) && (button2 & IN_DUCK)) item_teleport(id);

Użytkownik ^^^Deed edytował ten post 12.04.2011 15:55
Odpowiedz

  • +
  • -
Death_Player - zdjęcie Death_Player 15.06.2011

wszystko fajnie, niby mi działa ale jak się teleportować ? xD
Jeżeli tym bind "klawisz" +teleport to coś mi nie działa...
Dobra pobawie się tym później. Bo chyba tego nie ogarnąłem "if(player_class[id] == KLASA && (button2 & IN_JUMP) && (button2 & IN_DUCK)) item_teleport(id);"

Dodano 16 czerwiec 2011 - 21:37:
Ehh, nie ogarniam tego, jakby ktoś mógł, to bym prosił o zrobienie instrukcji wgrywanie mocy teleport.
Użytkownik Death_Player edytował ten post 15.06.2011 06:52
Odpowiedz

  • +
  • -
Death_Player - zdjęcie Death_Player 27.06.2011

bawiłem się trochę, ale lipa... Teleportować się teleportuje nawet jak jestem non class, i nie ma ogranicznika, mogę teleportować sie co 0 sekund, pomóżcie...

Dodano 27 czerwiec 2011 - 17:34:
już se sam naprawiłem -.-
Użytkownik Death_Player edytował ten post 27.06.2011 17:34
Odpowiedz