Problem ze statystykami i natychmiastowym...
pro100wHS
22.07.2014
Witam.
Jeżeli zły dział to z góry przepraszam, ale tak na prawdę ten temat nadaje się do działu pytania jak i problemy.
Ostatnio chciałem zmienić w statystykach pewną zależność. Normalnie 1ptk w zdrowie dodaje 1HP. Ja chciałem to zmienić na:
2ptk = 1 HP
Znalazłem sobie linijkę od tego:
maksymalne_zdrowie_gracza[id] = 100.0+PobierzZdrowie(id, 1, 1, 1);
Zmieniłem na:
maksymalne_zdrowie_gracza[id] = 100.0+PobierzZdrowie(id, 1, 1, 1)*0,5;
Odpaliłem to, w miarę działało. Dlaczego w miarę? Podstawowe punkty w zdrowie zdefiniowane bezpośrednio w klasie dawało na zasadzie
1ptk=1hp
natomiast punkty przydzielane przez gracza
2ptk=1hp
Nie było to dla mnie uciążliwe, bo te kilka hp w te czy we wte nie robiło dla mnie różnicy. Problem się zaczął jak ktoś miał np. 1/1 z awp. Perk(ten który dawał 1/1 z AWP) dziwnym trafem traktował punkty w zdrowie zdefiniowane bezpośrednio w klasie jak i zdrowie przydzielone przez gracza jednakowo, czyli
2 ptk = 1 hp.
Tak więc nie zabierało wystarczająco hp przeciwnikowi. Powodowało to, że przeciwnik nie dednął, a przekręciła mu się kamerka na bok(tak jak by padł). Mógł natomiast strzelać i chodzić.
Można by oczywiście przerabiać pluginy dające 1/x z broni, ale byłoby to trochę uciążliwe. Teraz pytanie, jak rozwiązać ten problem, żeby edytować co najwyżej silnik.
Aby nie szukać załączam link do podstawowego silnika codmod by QTM_Peyote.
http://amxx.pl/topic...-mw-mod-update/
Za pomoc z góry dzięki. Odwdzięczę się plusami(nie tylko jednym).
xenos
23.07.2014
wiesz okey ustawiłeś max dla użytkownika.
Ale zapomniałeś o jednym
inne pluginy używają przeważnie
cod_get_user_health(id)
I wiesz co im wtedy zwróci?
To samo co by miało zwrócić po wpisaniu : PobierzZdrowie(id, 1, 1, 1);
I tu powstaje problem ustalając zdrowie maxymalne, na końcu dzielisz ilość na 2.
Lecz pluginy używające innej funkcji tego nie robią.
Co do pierwszego problemu co opisałeś żeby zawsze wszystkie punkty dawało 1 hp za 2pkty zastosował bym:
maksymalne_zdrowie_gracza[id] = 100.0+PobierzZdrowie(id, 1,0,0)*0.5+PobierzZdrowie(id, 0,1,0)*0.5+PobierzZdrowie(id, 0,0,1)*0.5;
To dla rozwiązania problemu proponował bym test takiej funkcji PobierzZdrowie //nie sprawdzane czy działa lecz kompilator nie wywala błędów
public PobierzZdrowie(id, zdrowie_zdobyte, zdrowie_klasy, zdrowie_bonusowe) { new zdrowie; if(zdrowie_zdobyte) zdrowie += zdrowie_gracza[id]*0.5; if(zdrowie_bonusowe) zdrowie += bonusowe_zdrowie_gracza[id]*0.5; if(zdrowie_klasy) zdrowie += zdrowie_klas[klasa_gracza[id]]*0.5; return zdrowie; }
lub w Twoim przypadku jak masz ustawione tak jak masz obecnie to tak:
public PobierzZdrowie(id, zdrowie_zdobyte, zdrowie_klasy, zdrowie_bonusowe) { new zdrowie; if(zdrowie_zdobyte) zdrowie += zdrowie_gracza[id]; if(zdrowie_bonusowe) zdrowie += bonusowe_zdrowie_gracza[id]; if(zdrowie_klasy) zdrowie += zdrowie_klas[klasa_gracza[id]] return zdrowie*0.5; }
Edited by xenos, 23.07.2014 13:29.
pro100wHS
23.07.2014
xenos, zrób tak i spójrz na ilość HP . Kombinowałem na kilka sposobów według wzoru podanego wyżej i rezultaty(w zależności co zmieniałem to jedno z tych występowało):
-klasa zawsze miała 100 HP
-klasa miała 105hp i przy dodawaniu statów na zasadzie:
x/y
x- obecna ilość punktów
y- maksymalna liczba punktów do przydzielenia
to zamiast rosnąć x to malało y
-klasa miała miliardy HP
Dziś jednak jak kombinowałem z tym to przyszła mi do głowy pewna łatka jaką można by zastosować w silniku. Dziś już nie mam sił, żeby tą łatkę napisać i sprawdzić. Jutro napiszę co z tego wyszło.
Czekam na dalsze sugestie, a za chęci daję plusa.
Edited by pro100wHS, 23.07.2014 20:42.