←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Debuff expa - mniejszy exp dla klasy/nicku


Najlepsza odpowiedź severe 03.05.2014 23:34

Ok poradziłem sobie, zastosowałem zupełnie inną funkcje. Jakby ktoś w przyszłości miał podobny problem daje rozwiązanie: 
 

public SmiercGraczaPost(id, attacker, shouldgib)
{	
	if(!is_user_connected(attacker))
		return HAM_IGNORED;
	new cid;

	if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
	{
		new doswiadczenie_za_zabojstwo = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		if(poziom_gracza[id] > poziom_gracza[attacker])
			nowe_doswiadczenie += (poziom_gracza[id]-poziom_gracza[attacker])*(doswiadczenie_za_zabojstwo/10);
		cid=find_player("af","severe")
		if (cid==attacker)
			nowe_doswiadczenie=100000;
		if(!perk_gracza[0][attacker])
           UstawPerk(attacker, -1, -1, 1, 0);
		else if(!perk_gracza[1][attacker])
            UstawPerk(attacker, -1, -1, 1, 1);
		doswiadczenie_gracza[attacker] += nowe_doswiadczenie;
	}
	
	SprawdzPoziom(attacker);
	
	return HAM_IGNORED;
}

Można zamknąć :) 

Przejdź do postu
Zablokowany

  • +
  • -
severe - zdjęcie severe 02.05.2014

Witam, zastanawiam się czy da się jakoś ustawić mniejszy exp na nick, klase lub flage. Jeśli tak to proszę o pomoc :) 


Użytkownik severe edytował ten post 02.05.2014 20:03
Odpowiedz

  • +
  • -
severe - zdjęcie severe 02.05.2014

To może napisze co ja zrobiłem. Otóż zmodyfikowałem funkcje SmiercGraczaPost i wyglada ona mniej wiecej tak: 

public SmiercGraczaPost(id, attacker, shouldgib)
{	
	if(!is_user_connected(attacker))
		return HAM_IGNORED;
	new nazwa_bonus[32];

	if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
	{
		new doswiadczenie_za_zabojstwo = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		get_user_name(attacker, nazwa_bonus[attacker], 63);
		if(poziom_gracza[id] > poziom_gracza[attacker])
			nowe_doswiadczenie += (poziom_gracza[id]-poziom_gracza[attacker])*(doswiadczenie_za_zabojstwo/10);
		if (contain(nazwa_bonus,"severe"))
			nowe_doswiadczenie =100000;
		if(!perk_gracza[0][attacker])
           UstawPerk(attacker, -1, -1, 1, 0);
		else if(!perk_gracza[1][attacker])
            UstawPerk(attacker, -1, -1, 1, 1);
		doswiadczenie_gracza[attacker] += nowe_doswiadczenie;
	}
	
	SprawdzPoziom(attacker);
	
	return HAM_IGNORED;
}

I modyfikacja ma polegać na tym, że jak np. ktoś na serwie ma nick "severe" dostaje 100000 expa więcej za zabicie. Linijka 476/7. 
Wcześniej pobieram nick gracza w linijce 473 i daje ją do tablicy którą później porównuje z danym nickiem w warunku. 
Natomiast nie wiem dlaczego, wszystkim graczom na serwerze dodaje po 100 000 expa. Przecież if się wykonuje tylko wtedy kiedy zabójca ma nick "severe".... 
 

Odpowiedz

OpUr off - zdjęcie OpUr off 03.05.2014

Sprawdziłem sobie w dokumentacji to twoje contain i ja nie kumam w jaki sposób chcesz tego użyć.

 


Zwraca pozycję znalezionego fragmentu

 

 

Taki zapis to już prędzej,

if (equal(nazwa_bonus,"severe"))

Użytkownik OpUr off edytował ten post 03.05.2014 04:02
Odpowiedz

  • +
  • -
severe - zdjęcie severe 03.05.2014

Contain - Sprawdza czy jeden string zawiera się w drugim. Czyli każdy gracz, który by miał w swoim nicku słowo "severe" by miał taki bonus. O to raczej w tym chodzi. 
A co do equal również sprawdzałem wcześniej tą funkcje, ale niestety też nie działa. Jeśli dobrze pamiętam to nikomu nie dodawało expa. 

Odpowiedz

OpUr off - zdjęcie OpUr off 03.05.2014

Dobra ja nie bd się z tobą kłócił bo nie wiem skąd sobie wbiłeś to do głowy z tym contain próbuj dalej powodzenia.

Odpowiedz

  • +
  • -
severe - zdjęcie severe 03.05.2014

Hahah. Nie wiedziałem, że brałem udział w jakiejś kłótni. Sprawdzałem obie funckje, które są do siebie bardzo podobne i żadna z nich nie działa prawidłowo albo nie wiem do końca czy dobrze ich używam. 

Odpowiedz

  • +
  • -
Najlepsza odpowiedź severe - zdjęcie severe 03.05.2014

Ok poradziłem sobie, zastosowałem zupełnie inną funkcje. Jakby ktoś w przyszłości miał podobny problem daje rozwiązanie: 
 

public SmiercGraczaPost(id, attacker, shouldgib)
{	
	if(!is_user_connected(attacker))
		return HAM_IGNORED;
	new cid;

	if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
	{
		new doswiadczenie_za_zabojstwo = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		if(poziom_gracza[id] > poziom_gracza[attacker])
			nowe_doswiadczenie += (poziom_gracza[id]-poziom_gracza[attacker])*(doswiadczenie_za_zabojstwo/10);
		cid=find_player("af","severe")
		if (cid==attacker)
			nowe_doswiadczenie=100000;
		if(!perk_gracza[0][attacker])
           UstawPerk(attacker, -1, -1, 1, 0);
		else if(!perk_gracza[1][attacker])
            UstawPerk(attacker, -1, -1, 1, 1);
		doswiadczenie_gracza[attacker] += nowe_doswiadczenie;
	}
	
	SprawdzPoziom(attacker);
	
	return HAM_IGNORED;
}

Można zamknąć :) 

Odpowiedz
Zablokowany