←  Prośby o modyfikacje silników/klas/perków

AMXX.pl: Support AMX Mod X i SourceMod

»

Silnik
Wytrzymalość itemu przerobienie

  • +
  • -
darnoK^ - zdjęcie 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

Odpowiedz

  • +
  • -
WolfIDraV - zdjęcie 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");
}
 
Odpowiedz

  • +
  • -
darnoK^ - zdjęcie darnoK^ 29.05.2018

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

Odpowiedz

  • +
  • -
darnoK^ - zdjęcie 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.

Odpowiedz

  • +
  • -
NEQU# - zdjęcie 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.

Odpowiedz

  • +
  • -
darnoK^ - zdjęcie 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.

Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie 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ć

Odpowiedz

  • +
  • -
darnoK^ - zdjęcie 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 ;/

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 01.06.2018

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

  • +
  • -
AwIlL^^ - zdjęcie AwIlL^^ 01.06.2018

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...

Odpowiedz

  • +
  • -
darnoK^ - zdjęcie 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 :(

Odpowiedz

  • +
  • -
Rivit - zdjęcie 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ć

Odpowiedz

  • +
  • -
darnoK^ - zdjęcie 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");
}
Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie 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 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ść.

Odpowiedz

  • +
  • -
Rivit - zdjęcie 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).

Odpowiedz

  • +
  • -
AwIlL^^ - zdjęcie 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 :)

Odpowiedz

  • +
  • -
darnoK^ - zdjęcie 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.

Odpowiedz

  • +
  • -
NEQU# - zdjęcie 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ś.

Odpowiedz