Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

[ROZWIĄZANE] Problem - Exp za użycie mocy perku/klasy.


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

#1 Karras

    Życzliwy

  • Użytkownik

Reputacja: 3
Nowy

  • Postów:34
  • Lokalizacja:W-ska
Offline

Napisano 16.10.2013 22:07

Witam! Mam problem z pluginem, który dodaje expa za użycie mocy perku lub klasy.

Poprostu nie działa, nie mam pojęcia dlaczego, kompiluje się prawidłowo więc nie wiem o co chodzi.

Oto kod:

#include <amxmodx>
#include <amxmisc>
#include <codmod>


public cod_perk_used(id)
	{		
			if(cod_perk_used(id))
			{
				new losowy_exp = random_num(5, 20);
				
				cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp);
				client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy perku!",losowy_exp); 
			}
	}
public cod_class_skill_used(id)
    {
		if(cod_class_skill_used(id))
		{
				new losowy_exp_klasy = random_num(5, 20);
				
				cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp_klasy);
				client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy klasy!",losowy_exp_klasy); 
		}

    } 

Korzystałem do pisania tego pluginu z dokumentacji amxx. Dopiero się ucze więc proszę o nie dawanie mi gotowców, lecz o wytłumaczenie jak poprawnie to zrobić :)

Z góry dziękuję za pomoc, pozdrawiam ;)


  • +
  • -
  • 0

#2 GwynBleidD

    Godlike

  • Administrator

Reputacja: 1849
Godlike

  • Postów:3066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 18.10.2013 13:57

Gdy wykrywasz, połączenie gracza do serwera to też robisz:

public client_connect(id) {
    if (client_connect(id)) {
        //kod
    }
}

hm? No chyba nie...

 

Funkcja nie może być na raz forwardem i natywem! cod_class_skill_used jest forwardem, tak samo jak cod_perk_used, używasz ich więc tak, jak client_connect, bez tego bezsensownego ifa wewnątrz...


Użytkownik GwynBleidD edytował ten post 18.10.2013 13:59

  • +
  • -
  • 1
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark

#3 Karras

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:34
  • Lokalizacja:W-ska
Offline

Napisano 18.10.2013 19:17

Czyli coś takiego?

#include <amxmodx>
#include <amxmisc>
#include <codmod>


public cod_perk_used(id)

	{
		new losowy_exp = random_num(5, 20);
				
		cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp);
		client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy perku!",losowy_exp); 
	}
public cod_class_skill_used(id)
    {

		new losowy_exp_klasy = random_num(5, 20);
				
		cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp_klasy);
		client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy klasy!",losowy_exp_klasy); 
		

    } 

Usunąłem ify, lecz teraz wogóle nie mam pojęcia co może być źle...

 


  • +
  • -
  • 0

#4 mastah7991

    Wszechpomocny

  • Użytkownik

Reputacja: 146
Zaawansowany

  • Postów:388
  • Lokalizacja:Polska
Offline

Napisano 18.10.2013 20:20

#include <amxmodx>
#include <codmod>

public plugin_init() 
{
	register_plugin(perk_name, "1.0", "====");
	
	cod_register_perk("cosiek", "cosiek cosiek")
}

public cod_perk_used(id)
{
		new losowy_exp = random_num(5, 20);
		new losowy = cod_get_user_xp(id)+losowy_exp;
		cod_set_user_xp(id, losowy);
		client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy klasy!",losowy_exp_klasy); 
	

		cod_set_user_perk(id, 0, 0, 0); // a to po to by perk znikał po użyciu :D 
}

to jako perk i zobacz czy zadziała

p.s

nowy new ( masło maślane ) jest po to bo tak wolę możesz bez tego :D

 

zobacz czy zadziała  jak nie to zaraz na testowym coś wymyśle ;x

 


  • +
  • -
  • 1

#5 Karras

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:34
  • Lokalizacja:W-ska
Offline

Napisano 18.10.2013 21:08

Chyba nie zrozumiałeś o co chodzi mi w pluginie... Chodzi o to aby w każdym perku/klasie po użyciu np. rakietek, min, apteczek, trutek dodawana była niewielka ilość doświadczenia. To jest po to aby zwiększyć szybkość zdobywania poziomów, ale też aby urozmaicić lekko grę ;)

Chciałbym, aby mi to ktoś wytłumaczył jak to zrobić :)

 


  • +
  • -
  • 0

#6 donaciak

    Godlike

  • Power User

Reputacja: 892
Czempion

  • Postów:2067
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 19.10.2013 08:47

Natywy cod_perk_used oraz cod_class_skill_used są wywoływane tylko dla pluginu z zarejestrowaną klasą - musisz to zrobić w silniku.


  • +
  • -
  • 1

#7 Karras

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:34
  • Lokalizacja:W-ska
Offline

Napisano 19.10.2013 12:32

Dodałem to do silnika i dalej nie działa ... ;/ Jakieś inne pomysły?


  • +
  • -
  • 0

#8 donaciak

    Godlike

  • Power User

Reputacja: 892
Czempion

  • Postów:2067
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Kotlarka
Offline

Napisano 19.10.2013 14:29

Powiedz jak to dodałeś.


  • +
  • -
  • 1

#9 Karras

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:34
  • Lokalizacja:W-ska
Offline

Napisano 19.10.2013 20:46

Zależy mi na tym i próbuję różnych sposobów, a że moje doświadczenie nie jest zbyt duże to pewnie są błędy ;)

Pierwszy sposób: na koniec silnika dodałem:

public cod_perk_used(id)

	{
		new losowy_exp = random_num(5, 20);
				
		cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp);
		client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy perku!",losowy_exp); 
	}
public cod_class_skill_used(id)
    {

		new losowy_exp_klasy = random_num(5, 20);
				
		cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp_klasy);
		client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy klasy!",losowy_exp_klasy); 
		

    } 

oraz

#include <codmod>

A drugi sposób to:

Na koniec kodu silnika dodałem:

public ExpZaPerk(id)
    {
        new losowy_exp = random_num(5, 20);
                
        cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp);
        client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy perku!",losowy_exp);
    }

public ExpZaKlase(id)
    {

        new losowy_exp_klasy = random_num(5, 20);
                
        cod_set_user_xp(id, cod_get_user_xp(id)+losowy_exp_klasy);
        client_print(id, print_chat,"Otrzymales %d expa za uzycie mocy klasy!",losowy_exp_klasy);
    }

I zarejestrowałem natywy:

	register_native("cod_perk_used", "ExpZaPerk", 1);
	register_native("cod_class_skill_used", "ExpZaKlase", 1);

  • +
  • -
  • 0

#10 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 20.10.2013 13:41


Natywy cod_perk_used oraz cod_class_skill_used są wywoływane tylko dla pluginu z zarejestrowaną klasą - musisz to zrobić w silniku.
Nie do końca.

 

Zauważ, że natywy te są wykonywane w określonej sytuacji, mianowicie:

 

Perk


public UzyjPerku(id)
{
	if(!is_user_alive(id))
		return PLUGIN_HANDLED;
		
	new forward_handle = CreateOneForward(pluginy_perkow[perk_gracza[id]], "cod_perk_used", FP_CELL);
	ExecuteForward(forward_handle, id, id);
	DestroyForward(forward_handle);
	return PLUGIN_HANDLED;
}
	register_clcmd("useperk", "UzyjPerku");
	register_clcmd("radio3", "UzyjPerku");

Nic nie stoi na przeszkodzie, by zarejestrować te 2 komendy i przy ich wywołaniu dodawać expa.

 

Skill klasy


public EmitSound(id, iChannel, szSound[], Float:fVol, Float:fAttn, iFlags, iPitch ) 
{
	if(!is_user_alive(id))
		return FMRES_IGNORED;
		
	if(equal(szSound, "common/wpn_denyselect.wav"))
	{
		new forward_handle = CreateOneForward(pluginy_klas[klasa_gracza[id]], "cod_class_skill_used", FP_CELL);
		ExecuteForward(forward_handle, id, id);
		DestroyForward(forward_handle);
		return FMRES_SUPERCEDE;
	}
	register_forward(FM_EmitSound, "EmitSound");

Identyczny forward można zarejestrować wraz z warunkiem bycia żywym i dodać tutaj exp.

 

 

Problem leży jednak gdzie indziej.

Mianowicie w tym, że nie za każdym kliknięciem "e" czy "c" będziemy dawać expa.

A o tym, czy perk czy sklill został użyty, decyduje dany perk / klasa, więc przebudować należałoby nie silnik, a każdą z klas oraz wszystkie perki.



#11 Karras

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 3
Nowy

  • Postów:34
  • Lokalizacja:W-ska
Offline

Napisano 20.10.2013 14:11

Dziękuję za pomoc, już zrozumiałem ;) + dla każdego lecą, a temat do zamkniecia :P


  • +
  • -
  • 0

#12 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 20.10.2013 14:15

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL




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

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