Wytrzymalość itemu przerobienie
darnoK^
20.05.2018
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
WolfIDraV
27.05.2018
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"); }
darnoK^
29.05.2018
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.
NEQU#
29.05.2018
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.
darnoK^
30.05.2018
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.
AwIlL^^
01.06.2018
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ć
darnoK^
01.06.2018
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 ;/
AwIlL^^
01.06.2018
Pomieszałeś i to ostro
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...
darnoK^
01.06.2018
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
Rivit
01.06.2018
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ć
darnoK^
01.06.2018
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"); }
AwIlL^^
01.06.2018
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
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ść.
Rivit
01.06.2018
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).
AwIlL^^
01.06.2018
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
darnoK^
01.06.2018
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.
NEQU#
01.06.2018
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ś.