←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Tutorial
Problem z naświetlaniem Ninji? Znak widocz...

  • +
  • -
DioW - zdjęcie DioW 08.07.2010

Witam,
Jest to mój 1 tutorial którego postanowiłem napisać gdyż sam miałem bardzo duży problem z rozwiązaniem tych problemów.
Mianowicie:
Po 1. Ninja po naświetleniu nie znika automatycznie, tylko musi wcisnąć "Q" albo zmienić nóż na nóż
Po 2. Znaczek widoczności ninji co bardzo polepsza grę!
Ten tutorial usuwa bląd 1 i dodaje 2
Dołączona grafika
To co u góry ale w kolorze pomarańczowym.


Zaczynamy!

Krok 1.
Znajdujemy linijkę:
if ((get_user_team(id)!=get_user_team(index1)) && (index1!=0))

I usuwamy wszysto pod aż do linijki
//Before freeze_ended check
lub(jeżeli nie ma @up)
if (((player_b_silent[id] > 0) || (player_class[id] == Zabojca)) && is_user_alive(id)) 


Krok 2.
Dodaj pod:
if ((get_user_team(id)!=get_user_team(index1)) && (index1!=0))

To:
{
if ((index1!=54) && (is_user_connected(index1))) set_user_rendering(index1,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)
remove_task(TASK_FLASH_LIGHT+index1);
set_task(7.5, "un_rander",TASK_FLASH_LIGHT+index1)
//set_task(15.0,"un_rander",TASK_NAME,index1)
if(player_class[index1] == Ninja)
{
message_begin(MSG_ONE,g_msg_statusicon,{0,0,0},index1)
write_byte(2)
write_string("dmg_bio")
write_byte(255)
write_byte(0)
write_byte(0)
message_end()
}
}


Krok 3.
Usuwamy całą funkcję un_rander

Krok 4.
Dodaj na miejsce funkcji un_rander
public un_rander(task_id){
new id = task_id - TASK_FLASH_LIGHT
if(is_user_connected(id)){
if (player_class[id] == Ninja) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 15)
Display_Icon(id,0,"dmg_bio",255,0,0)
}
}


Efekt końcowy:
[...]
if ((get_user_team(id)!=get_user_team(index1)) && (index1!=0))
{
if ((index1!=54) && (is_user_connected(index1))) set_user_rendering(index1,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)
remove_task(TASK_FLASH_LIGHT+index1);
set_task(7.5, "un_rander",TASK_FLASH_LIGHT+index1)
//set_task(15.0,"un_rander",TASK_NAME,index1)
if(player_class[index1] == Ninja)
{
message_begin(MSG_ONE,g_msg_statusicon,{0,0,0},index1)
write_byte(2)
write_string("dmg_bio")
write_byte(255)
write_byte(0)
write_byte(0)
message_end()
}
}


//Before freeze_ended check
if (((player_b_silent[id] > 0) || (player_class[id] == Zabojca)) && is_user_alive(id))
[...]


[...](0.5,"charge_hunter",attacker,parms,5)

public un_rander(task_id){
new id = task_id - TASK_FLASH_LIGHT
if(is_user_connected(id)){
if (player_class[id] == Ninja) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 15)
Display_Icon(id,0,"dmg_bio",255,0,0)
}
}

public client_PreThink ( id )
{
[...]



Ps. W efekcie końcowym dodałem kawałek kodu za dużo abyście zobaczyli w jakim miejscu i ile klamer ma mieć dokładnie funkcja

Jeżeli wpadła jakaś literówka lub jakiś byczek to proszę o poprawienie
Użytkownik Goliath edytował ten post 25.10.2011 16:45
Odpowiedz

  • +
  • -
TaKieCos - zdjęcie TaKieCos 08.07.2010

Mogłbys napisac jak zrobic Znaczek widoczności ninji bez punktu 1? czyli ze automatycznie znika bez zmieniania broni
Odpowiedz

  • +
  • -
DioW - zdjęcie DioW 08.07.2010

Właśnie tak jest! Poto to zrobiłem!

08 lipiec 2010 - 20:08:
Napisałem rozwiązaniem tych problemów a nie z tymi problemami Dołączona grafika
Użytkownik DioW edytował ten post 29.09.2011 18:12
Odpowiedz

  • +
  • -
Gosteq - zdjęcie Gosteq 10.07.2010

Dzięki + leci!
Poradnik w 100% dziala i bardzo mi się przydał!
Odpowiedz

  • +
  • -
TaKieCos - zdjęcie TaKieCos 10.07.2010

podaj to w [sma]
Odpowiedz

STRAZAK - zdjęcie STRAZAK 25.07.2010

Nie rozumiem jak usunąć funkcję? Nie znam się na tym.

z un_rander mam to:
public un_rander(task_id)
{
	new id = task_id - TASK_FLASH_LIGHT
	if(is_user_connected(id)) set_renderchange(id)
}

public client_PreThink ( id ) 
{	
	new button2 = get_user_button(id);
	
	if(flashlight[id] && flashbattery[id] && (get_cvar_num("flashlight_custom")) && (player_class[id] == Mag)) {
		new num1, num2, num3
		num1=random_num(0,2)
		num2=random_num(-1,1)
		num3=random_num(-1,1)
		flashlight_r+=1+num1
		if (flashlight_r>250) flashlight_r-=245
		flashlight_g+=1+num2
		if (flashlight_g>250) flashlight_g-=245
		flashlight_b+=-1+num3
		if (flashlight_b<5) flashlight_b+=240		
		new origin[3];
		get_user_origin(id,origin,3);
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
		write_byte(27); // TE_DLIGHT
		write_coord(origin[0]); // X
		write_coord(origin[1]); // Y
		write_coord(origin[2]); // Z
		write_byte(get_cvar_num("flashlight_radius")); // radius
		write_byte(flashlight_r); // R
		write_byte(flashlight_g); // G
		write_byte(flashlight_b); // B
		write_byte(1); // life
		write_byte(get_cvar_num("flashlight_decay")); // decay rate
		message_end();
		
		new index1, bodypart1
		get_user_aiming(id,index1,bodypart1) 
		if ((get_user_team(id)!=get_user_team(index1)) && (index1!=0))
		{
			if ((index1!=54) && (is_user_connected(index1))) set_user_rendering(index1,kRenderFxGlowShell,flashlight_r,flashlight_g,flashlight_b,kRenderNormal,4)	
			remove_task(TASK_FLASH_LIGHT+index1);
			set_task(7.5, "un_rander",TASK_FLASH_LIGHT+index1)
			//set_task(15.0,"un_rander",TASK_NAME,index1)
		}
	}
Odpowiedz

  • +
  • -
Onyke - zdjęcie Onyke 26.07.2010

Usun to

public un_rander(task_id)
{
new id = task_id - TASK_FLASH_LIGHT
if(is_user_connected(id)) set_renderchange(id)
}

Odpowiedz

szczepaneto - zdjęcie szczepaneto 07.08.2010

jest jedno ale można naświetlać osoby z swojej drużyny jak to naprawić ??

07 sierpień 2010 - 11:22:
a i czy dało by rade zrobić żeby znaczek się pojawiał każdej osobie

07 sierpień 2010 - 11:37:
ok sory już znalazłem błąd
Użytkownik szczepaneto edytował ten post 07.08.2010 11:37
Odpowiedz

  • +
  • -
Pawlo^^ - zdjęcie Pawlo^^ 11.10.2010

Edit: Zrobiłem wszystko tak jak powinno być, sprawdzałem linijkę po linijce, klamry się zgadzają,przekopmilowałem poprawnie, wrzuciłem na serwer jednak nic nie działa, ninja nadal jest widoczna, nie ma tego znaczka. Po prostu jest bez zmian.Oczywiście restart serwera był. Nie wiem co robić, proszę o pomoc, nagradzam reputacją. Z góry dziękuję.
Poniżej zamieszczam plik sma, proszę o sprawdzenie go czy wszystko jest dobrze.

Załączone pliki


Użytkownik Pawlo^^ edytował ten post 12.10.2010 15:44
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 01.11.2010

A ja bym to zrobił inaczej, zamiast
if(player_class[index1] == Ninja)
{
message_begin(MSG_ONE,g_msg_statusicon,{0,0,0},index1)
write_byte(2)
write_string("dmg_bio")
write_byte(255)
write_byte(0)
write_byte(0)
message_end()
}

dodał
if(is_user_alive(index1)) {
message_begin(MSG_ONE,g_msg_statusicon,{0,0,0},index1)
write_byte(2)
write_string("dmg_bio")
write_byte(200)
write_byte(100)
write_byte(0)
message_end()
}

i zamiast
public un_rander(task_id) {
new id = task_id - TASK_FLASH_LIGHT
if(is_user_connected(id)) {
if(player_class[id] == Ninja) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 15)
Display_Icon(id,0,"dmg_bio",255,0,0)
}
}

dodał
public un_rander(task_id) {
new id = task_id - TASK_FLASH_LIGHT
if(is_user_connected(id)) {
if(player_class[id] == Ninja) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 15)
// inne klasy
Display_Icon(id, 0, "dmg_bio", 100, 200, 0);
}
}

I dzięki temu każdy kto zostanie naświetlony będzie miał ten znaczek (migający).

Też dziwna sprawa, że samo "set_renderchange(id)" nie wystarcza... to chyba jest coś związane z
if(!task_exists(id+TASK_FLASH_LIGHT))

co znajduje się w tym "set_renderchange(id)".
Użytkownik sebul edytował ten post 01.11.2010 19:16
Odpowiedz

  • +
  • -
NiFreZ - zdjęcie NiFreZ 01.11.2010

Sebul Działa poprawnie Testowałem ;)
Odpowiedz

  • +
  • -
wreki - zdjęcie wreki 07.11.2010

robię wszystko tak jak autor tematu napisał i mam dwa błędy przy kompilowaniu
diablo.sma(1638) : error 017: undefined symbol "Ninja"
diablo.sma(1684) : error 017: undefined symbol "Ninja"

2 Errors.
Could not locate output file diablo-pulpido.amxx (compile failed).
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 07.11.2010

Po prostu nie masz klasy "Ninja"...
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 22.12.2010

Jest lepsze rozwiązanie ^^ Można dodać nową tablicę i wtedy według niej sprawdzać, czy gracz jest naświetlony, czy też nie. Może poradnik napiszę od początku, czyli od kodu taki jaki jest w 5.9l.

Spoiler


Chyba nie zapomniałem o niczym. Teraz nie trzeba będzie wypisywać po dwa razy tej samej klasy, żeby stawała się niewidzialna.
Użytkownik sebul edytował ten post 03.06.2011 11:22
Odpowiedz

cesik - zdjęcie cesik 16.02.2011

Sebul niedziala duzo bledow wywala przynajmniej u mnie
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 16.02.2011

A patrz u mnie nic nie wywala... Może źle coś dodałeś, bo przed chwilą jeszcze raz sprawdziłem czy dobrze wszystko napisałem i nie zauważyłem jakichś błędów.
Odpowiedz

FreZZy - zdjęcie FreZZy 16.02.2011

wywala 26 błęów ;]

nie pamiętam już jak sobie z nimi poradziłem
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 17.02.2011

Przed chwilą dodałem to do standardowego diablo, wszystko po kolei tak jak w moim tutku i jakoś 0 błędów... Więc zero pytań mam co do tych rzekomych błędów...
Użytkownik sebul edytował ten post 17.02.2011 23:44
Odpowiedz

cesik - zdjęcie cesik 17.02.2011

To tak 1 sposob mi niedziala niewiem czemu? O.o


Sposób sebola mi dziala tylko jest 1 ostrzezenie o spacji czy tabulatorze :)
i w:
naswietlony[i] = 0;
jesli ma sie tj. u mnie umiejetnosc odradzania dla jakiejs klasy trzeba ; usunac
Użytkownik cesik edytował ten post 18.02.2011 00:22
Odpowiedz

  • +
  • -
OverShot - zdjęcie OverShot 23.01.2014

Sebul niestety nie działa :/

 

        get_user_aiming(id, index1, bodypart1);
        if(is_user_alive(index1)) {
            if(index1 != 54 && get_user_team(id) != get_user_team(index1) && pev(index1, pev_renderamt) < 220) {
                naswietlony[index1] = 1;
                set_renderchange(index1);
                Display_Icon(index1, ICON_FLASH, "dmg_bio", 200, 100, 0);
                if(task_exists(index1+TASK_FLASH_LIGHT)) remove_task(index1+TASK_FLASH_LIGHT);
                set_task(7.5, "un_rander", index1+TASK_FLASH_LIGHT);
            }
        }

 

nnfc.png

Odpowiedz