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
Silnik

Wytrzymalość itemu przerobienie

silnik

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
17 odpowiedzi w tym temacie

#1 darnoK^

    Profesjonalista

  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 20.05.2018 14:17

Witam proszę o przerobienie pluginu tak, żeby wytrzymałość perku malała wraz z otrzymywanymi obrażeniami. Chodzi mi o to, że na przykład nasz item ma 100 wytrzymałości i za każdym razem jak oberwiemy tracimy 5 wytrzymalosci. 

Załączone pliki


  • +
  • -
  • 0

3 sekundy 4 trupy 


#2 WolfIDraV

    Życzliwy

  • Użytkownik

Reputacja: 1
Nowy

  • Postów:27
Offline

Napisano 27.05.2018 12:31

Możliwe, że tak to ma wyglądać jak dobrze rozumiem.

/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <codmod>

#define PLUGIN "Wytrzymalosc Itemu"
#define VERSION "1.0"
#define AUTHOR "QTM_Peyote"

#define ZADANIE_POKAZ_WYTRZYMALOSC 35200

new cvar_max_wytrzymalosc, cvar_uszkodzenia_dmg;

new wytrzymalosc_perku[33];

new SyncHudObj;

/*---------

Aby korzystac z natywow
cod_get_perk_durability oraz cod_set_perk_durability
musisz dodac do swojego pluginu:

native cod_set_perk_durability(id, wytrzymalosc); // Ustawia wytrzymalosc perku gracza.
native cod_get_perk_durability(id); // Pobiera wytrzymalosc perku gracza.

-----------*/

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_event("ResetHUD", "ResetHUD", "abe");
	register_event("Damage", "Damage", "b", "2!=0");
	cvar_max_wytrzymalosc = register_cvar("cod_maxperkdurability", "255");
	cvar_uszkodzenia_dmg = register_cvar("cod_perkdamage", "5");
	SyncHudObj = CreateHudSyncObj();
}

public plugin_natives()
{
	register_native("cod_get_perk_durability", "PobierzWytrzymalosc", 1);
	register_native("cod_set_perk_durability", "UstawWytrzymalosc", 1);
}	
	
public cod_perk_changed(id, perk)
	wytrzymalosc_perku[id] = perk? get_pcvar_num(cvar_max_wytrzymalosc): 0;
	
public Damage(id) {
	if(!cod_get_user_perk(id))
		return;
	
	wytrzymalosc_perku[id] -= get_pcvar_num(cvar_uszkodzenia_dmg);
	if(wytrzymalosc_perku[id] <= 0) {
		cod_set_user_perk(id, 0);
		client_print(id, print_chat, "Zniszczyli ci item :(");
	}
}

public UstawWytrzymalosc(id, wartosc)
{
	new max_wytrzymalosc = get_pcvar_num(cvar_max_wytrzymalosc);
	wytrzymalosc_perku[id] = (wartosc > max_wytrzymalosc)? max_wytrzymalosc: wartosc;
}

public PobierzWytrzymalosc(id)
	return wytrzymalosc_perku[id];

public PokazWytrzymalosc(id)
{
	id -= ZADANIE_POKAZ_WYTRZYMALOSC;
	
	if(!is_user_alive(id))
	{
		remove_task(id+ZADANIE_POKAZ_WYTRZYMALOSC);
		return;
	}
		
	set_hudmessage(255, 255, 255, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
	ShowSyncHudMsg(id, SyncHudObj, "^n^n^n^nWytrzymalosc Itemu: %i/%i", wytrzymalosc_perku[id], get_pcvar_num(cvar_max_wytrzymalosc));
}
public ResetHUD(id)
{
	if(!task_exists(id+ZADANIE_POKAZ_WYTRZYMALOSC))
		set_task(0.1, "PokazWytrzymalosc", id+ZADANIE_POKAZ_WYTRZYMALOSC, _, _, "b");
}
 

  • +
  • -
  • 1

#3 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 29.05.2018 08:58

Przyjade ze szkoly i dam znac czy wszystko działa :)


  • +
  • -
  • 0

3 sekundy 4 trupy 


#4 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 29.05.2018 14:43

Wszystko działa jak należy bardzo Ci dziękuje za pomoc. Mógłby ktoś jeszcze to zeedytować tak, że po wpisaniu /klasa perk się usuwa, żeby nie można było bugować wytrzymalości perku.


  • +
  • -
  • 0

3 sekundy 4 trupy 


#5 NEQU#

    Wszechpomocny

  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 29.05.2018 15:21

Wszystko działa jak należy bardzo Ci dziękuje za pomoc. Mógłby ktoś jeszcze to zeedytować tak, że po wpisaniu /klasa perk się usuwa, żeby nie można było bugować wytrzymalości perku.

to jest głupota.. Przy funkcji z przydzielaniem nowej klasy trzeba dodać zerowanie perku.


  • +
  • -
  • 0

#6 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 30.05.2018 14:01

 

Wszystko działa jak należy bardzo Ci dziękuje za pomoc. Mógłby ktoś jeszcze to zeedytować tak, że po wpisaniu /klasa perk się usuwa, żeby nie można było bugować wytrzymalości perku.

to jest głupota.. Przy funkcji z przydzielaniem nowej klasy trzeba dodać zerowanie perku.

 

Stary no ale zastanów się mamy perk który ma 100 wytrzymałości na przykład. Dostaliśmy troche i nagle mamy juz tylko 15 wytrzymalosci po wpisaniu /klasa odnawia ci sie ta wytrzymalosc takze to wszystko ma sens.


  • +
  • -
  • 0

3 sekundy 4 trupy 


#7 AwIlL^^

    Magiczny Gość

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:263
  • Steam:steam
  • Imię:Eryk
  • Lokalizacja:Gdańsk
Offline

Napisano 01.06.2018 08:16

	public cod_perk_changed(id, perk)
	{
		static perk_gracza[33];
		if (perk_gracza[id] != perk)
		{
			perk_gracza[id] = perk;
			wytrzymalosc_perku[id] = perk ? get_pcvar_num(cvar_max_wytrzymalosc) : 0;
		}
	}

podmień istniejącą funkcję na tą, przy zmianie klasy nie ma usuwania perku, jest wywoływane tylko ustawianie perku,
który się posiada, więc powinno zadziałać


  • +
  • -
  • 1

Potrzebujesz porad do amxx?? Pisz na [PW]


#8 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 01.06.2018 12:41

	public cod_perk_changed(id, perk)
	{
		static perk_gracza[33];
		if (perk_gracza[id] != perk)
		{
			perk_gracza[id] = perk;
			wytrzymalosc_perku[id] = perk ? get_pcvar_num(cvar_max_wytrzymalosc) : 0;
		}
	}

podmień istniejącą funkcję na tą, przy zmianie klasy nie ma usuwania perku, jest wywoływane tylko ustawianie perku,
który się posiada, więc powinno zadziałać

 

Niestety nie działa ;/


  • +
  • -
  • 0

3 sekundy 4 trupy 


#9 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 01.06.2018 13:04

public cod_perk_changed(id, perk)
cod_set_user_perk(id, 0);

  • +
  • -
  • 1

#10 AwIlL^^

    Magiczny Gość

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:263
  • Steam:steam
  • Imię:Eryk
  • Lokalizacja:Gdańsk
Offline

Napisano 01.06.2018 14:10

Pomieszałeś i to ostro xD
usuwanie perku, które podałeś jest spoko, ale cod_perk_changed musi zostać żeby przydzielać wytrzymałość dla nowego perku oraz kiedy będzie usuwany perk to poprawnie musi zerować wytrzymałość

 

Co do tej funkcji, którą podałem to na serio nie ma przeszkód by miała działać i utrzymywać wytrzymałość perku niezależnie ile razy zmienimy klasę,

bo ja wcale nie próbowałem zerować wytrzymałości przy zmianie klasy...


  • +
  • -
  • 1

Potrzebujesz porad do amxx?? Pisz na [PW]


#11 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 01.06.2018 14:17

public cod_perk_changed(id, perk)
cod_set_user_perk(id, 0);

Z tym nie wczytuje huda, nie da sie zdobyc perku.

public cod_class_changed(id, perk)
    cod_set_user_perk(id, 0);

Takie coś nie wystarczy? +usunąć cały public z cod_perk_changed

 

 

 

edit: nie dosc ze double to jeszcze coś pomieszałem

 

A z tym zawsze miałem 0 wytrzymalosci perku, przeciwnik uderzajac mnie raz niszczyl mi perk;/

 

Ktoś ma jescze jakieś pomysły bo widzę, że ciężko to idzie :(


  • +
  • -
  • 0

3 sekundy 4 trupy 


#12 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 01.06.2018 14:28

A faktycznie, tak pomieszałem to teraz że szok:

public cod_perk_changed(id, perk)
{
    static poprzedni_perk[33];

    if(poprzedni_perk[id] == perk) return;

    wytrzymalosc_perku[id] = perk? get_pcvar_num(cvar_max_wytrzymalosc): 0;

    poprzedni_perk[id] = perk;
}

Takie coś powinno wystarczyć. Awill to dał i to powinno śmigać


  • +
  • -
  • 1

#13 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 01.06.2018 14:42

https://amxx.pl/topi...ść-perku/page-2

 

To juz sprawdzałem wzięte z tego tematu.

 

A sam kod prezentuje sie tak ale przy zmianie klasy perk dalej zostaje bez zmian...

/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <codmod>
#define PLUGIN "[CODMOD] Wytrzymalosc Perku"
#define VERSION "1.0"
#define AUTHOR "QTM_Peyote"
#define ZADANIE_POKAZ_WYTRZYMALOSC 35200
new cvar_max_wytrzymalosc, cvar_uszkodzenia_za_smierc;
new wytrzymalosc_perku[33];
new SyncHudObj;
/*---------
Aby korzystac z natywow
cod_get_perk_durability oraz cod_set_perk_durability
musisz dodac do swojego pluginu:
native cod_set_perk_durability(id, wytrzymalosc); // Ustawia wytrzymalosc perku gracza.
native cod_get_perk_durability(id); // Pobiera wytrzymalosc perku gracza.
-----------*/
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("ResetHUD", "ResetHUD", "abe");
register_event("DeathMsg", "Death", "ade");
cvar_max_wytrzymalosc = register_cvar("cod_maxperkdurability", "100");
cvar_uszkodzenia_za_smierc = register_cvar("cod_perkdamage", "10");
SyncHudObj = CreateHudSyncObj();
}
public plugin_natives()
{
register_native("cod_get_perk_durability", "PobierzWytrzymalosc", 1);
register_native("cod_set_perk_durability", "UstawWytrzymalosc", 1);
}

public cod_perk_changed(id, perk)
{
static poprzedni_perk[33];

if(poprzedni_perk[id] == perk) return;

wytrzymalosc_perku[id] = perk? get_pcvar_num(cvar_max_wytrzymalosc): 0;

poprzedni_perk[id] = perk;
}

public Death()
{
new id = read_data(2);

if(!cod_get_user_perk(id)) return;

new uszkodzenia_za_smierc = get_pcvar_num(cvar_uszkodzenia_za_smierc);
wytrzymalosc_perku[id] -= (wytrzymalosc_perku[id] > uszkodzenia_za_smierc)? uszkodzenia_za_smierc: wytrzymalosc_perku[id];
if(wytrzymalosc_perku[id] <= 0)
{
  cod_set_user_perk(id, 0);
  client_print(id, print_chat, "Twoj perk ulegl zniszczeniu.");
}
else
  client_print(id, print_chat, "Pozostala wytrzymalosc twojego perku to %i.", wytrzymalosc_perku[id]);
}
public UstawWytrzymalosc(id, wartosc)
{
new max_wytrzymalosc = get_pcvar_num(cvar_max_wytrzymalosc);
wytrzymalosc_perku[id] = (wartosc > max_wytrzymalosc)? max_wytrzymalosc: wartosc;
}
public PobierzWytrzymalosc(id)
return wytrzymalosc_perku[id];
public PokazWytrzymalosc(id)
{
id -= ZADANIE_POKAZ_WYTRZYMALOSC;

if(!is_user_alive(id))
{
  remove_task(id+ZADANIE_POKAZ_WYTRZYMALOSC);
  return;
}
 
set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "^n^n^n^n[Wytrzymalosc Perku: %i/%i]", wytrzymalosc_perku[id], get_pcvar_num(cvar_max_wytrzymalosc));
}
public ResetHUD(id)
{
if(!task_exists(id+ZADANIE_POKAZ_WYTRZYMALOSC))
  set_task(0.1, "PokazWytrzymalosc", id+ZADANIE_POKAZ_WYTRZYMALOSC, _, _, "b");
}

  • +
  • -
  • 0

3 sekundy 4 trupy 


#14 AwIlL^^

    Magiczny Gość

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:263
  • Steam:steam
  • Imię:Eryk
  • Lokalizacja:Gdańsk
Offline

Napisano 01.06.2018 15:01

A faktycznie, tak pomieszałem to teraz że szok:

public cod_perk_changed(id, perk)
{
    static poprzedni_perk[33];

    if(poprzedni_perk[id] == perk) return;

    wytrzymalosc_perku[id] = perk? get_pcvar_num(cvar_max_wytrzymalosc): 0;

    poprzedni_perk[id] = perk;
}
Takie coś powinno wystarczyć. Awill to dał i to powinno śmigać

 

chyba zrozumiałeś co ten kod robi xD
choć ja staram się nie używać słowa return bo mniej czytelny kod jest dla tych co czytają po raz pierwszy :)
 
Co do tematu jak chcesz serio usuwanie perku przy zmianie klasy co by mnie osobiście irytowało jako gracza, to proszę:
cod_perk_changed bez zmian:

public cod_perk_changed(id, perk)
	wytrzymalosc_perku[id] = perk ? get_pcvar_num(cvar_max_wytrzymalosc) : 0;

dodajesz cod_class_changed tak jak miał tiback:

public cod_class_changed(id, perk)
	cod_set_user_perk(id, 0);

Gwarantuję ci, że gracze bardziej ucieszyli by się z tego rozwiązania, które podałem na początku.
Usuwanie perku przy zmianie klasy to najgorszy pomysł na jaki można wpaść.


  • +
  • -
  • 1

Potrzebujesz porad do amxx?? Pisz na [PW]


#15 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 01.06.2018 15:26

To już lepiej zrobić tak żeby wytrzymałość zostawała taka sama zamiast usuwać caly perk, ale do tego już trzeba .sma silnika, chyba że z tych forwardów by co wyciagnął. (mam to w swoim silniku cod, który jest na tym forum).


  • +
  • -
  • 1

#16 AwIlL^^

    Magiczny Gość

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:263
  • Steam:steam
  • Imię:Eryk
  • Lokalizacja:Gdańsk
Offline

Napisano 01.06.2018 15:31

To już lepiej zrobić tak żeby wytrzymałość zostawała taka sama zamiast usuwać caly perk, ale do tego już trzeba .sma silnika, chyba że z tych forwardów by co wyciagnął. (mam to w swoim silniku cod, który jest na tym forum).

zanim odpowiedziałem po raz pierwszy prześledziłem wszystkie czynności jakie się wykonują podczas zmiany klasy i perku.
nie jest potrzebna ingerencja w silnik, ten kod co ostatnio napisałeś będzie działać poprawnie.

no chyba, że autor tematu masz jakiś "unikatowy" silnik od zielonego :)


  • +
  • -
  • 1

Potrzebujesz porad do amxx?? Pisz na [PW]


#17 darnoK^

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 15
Początkujący

  • Postów:179
  • Imię:Konrad
  • Lokalizacja::)
Offline

Napisano 01.06.2018 17:47

Dziękuje wam za pomoc w sumie po raz kolejny wszystko działa jak należy. A do czego w ogóle dążę chcąc mieć kasowanie perku po zmianie klasy ? Gdyż irytuje mnie to, że gracze ze słabszych klas przekładają sobie item na te lepsze. W sumie powodów jest wiele. Temat do zamknięcia.


  • +
  • -
  • 0

3 sekundy 4 trupy 


#18 NEQU#

    Wszechpomocny

  • Użytkownik

Reputacja: 54
Pomocny

  • Postów:363
  • GG:
Offline

Napisano 01.06.2018 19:19

 

 

Wszystko działa jak należy bardzo Ci dziękuje za pomoc. Mógłby ktoś jeszcze to zeedytować tak, że po wpisaniu /klasa perk się usuwa, żeby nie można było bugować wytrzymalości perku.

to jest głupota.. Przy funkcji z przydzielaniem nowej klasy trzeba dodać zerowanie perku.

 

Stary no ale zastanów się mamy perk który ma 100 wytrzymałości na przykład. Dostaliśmy troche i nagle mamy juz tylko 15 wytrzymalosci po wpisaniu /klasa odnawia ci sie ta wytrzymalosc takze to wszystko ma sens.

 

Źle mnie zrozumiałeś, chodziło mi o to aby zamiast w plugu dodać w silniku przy wczytywaniu klasy kasowanie perku.. 1 linijka i byś miał to co chciałeś.


  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: silnik

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

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