←  Poradniki, Łatki oraz Pluginy

AMXX.pl: Support AMX Mod X i SourceMod

»

CoD Nowy
Nowa statystyka Regeneracja Hp

  • +
  • -
jadamciwszystko - zdjęcie jadamciwszystko 06.02.2012

Siemka, zamieszczam wam kod który pozwoli na regeneracje hp za obrażenia zadane z broni.
Jeśli są jakieś problemy, lub jakaś literka przeoczona w kodzie proszę pisać.

do modułów należy dodać:
#include <codmod>
Pod:
#define ZADANIE_USTAW_SZYBKOSC 832
dodajemy:
#define DMG_BULLET (1<<1)
Pod:
kondycja_gracza[33],
dodajmy:
regeneracjap_gracza[33];
do plugin_init na końcu:
RegisterHam(Ham_TakeDamage, "player", "Regeneracja", 1);
do public usunumiejetnosc po:
kondycja_gracza[id] = 0;
dodajemy:
regeneracjap_gracza[id] = 0;
w public przydzielpunkty pod:
new kondycja[60];
dodajemy:
new regeneracjap[60];
w tej samej funkcji pod:
format(kondycja, charsmax(kondycja), "Kondycja: \r%i \y(Zwieksza tempo chodu)", PobierzKondycje(id, 1, 1, 1));
dodajemy:
format(regeneracjap, charsmax(regeneracjap), "Regeneracja: \r[%i - 50] \y(Zwieksza regeneracje hp)", regeneracjap_gracza[id]);
w tej samej funkcji pod:
menu_additem(menu, kondycja);
dodajemy:
menu_additem(menu, regeneracjap);
Szukamy:
case 3:
		{	
			if(kondycja_gracza[id] < 100)
			{
				kondycja_gracza[id]++;
				punkty_gracza[id]--;
			}
			else
				client_print(id, print_chat, "[COD:MW] Maksymalny poziom kondycji osiagniety");
		}
pod tym dodajemy:
case 4:  
		{	
			if(regeneracjap_gracza[id] < 50)
			{
				regeneracjap_gracza[id]++;
				punkty_gracza[id]--;
			}
			else
				client_print(id, print_chat, "[COD:MW] Maksymalny poziom regeneracji osiagniety");
		}
w public resetujpunkty pod:
kondycja_gracza[id] = 0;
dodajemy:
regeneracjap_gracza[id] = 0;
w public zapiszdane zamieniamy to:
format(vaultdata, charsmax(vaultdata),"#%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id]);
na to:
format(vaultdata, charsmax(vaultdata),"#%i#%i#%i#%i#%i#%i#%i", doswiadczenie_gracza[id], poziom_gracza[id], inteligencja_gracza[id], zdrowie_gracza[id], wytrzymalosc_gracza[id], kondycja_gracza[id], regeneracjap_gracza[id]);
w public wczytajdane szukamy:
new danegracza[6][32];
zamieniamy na:
new danegracza[7][32];
szukamy:
danegracza[6], 31
po tym dodajemy:
, danegracza[7], 31
pod tym:
kondycja_gracza[id] = str_to_num(danegracza[5]);
dodajemy:
regeneracjap_gracza[id] = str_to_num(danegracza[6]);
zamieniamy:
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
na to:
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracjap_gracza[id];
w public sprawdzpoziom dwa razy dodajemy po:
-kondycja_gracza[id]
to:
-regeneracjap_gracza[id]
na koncu .sma dodajemy:
public Regeneracja(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_alive(idattacker))
		return HAM_IGNORED;
		
	
	new Float:maksymalne_zdrowie = 100.0 + cod_get_user_health(idattacker);
	new Float:nowe_zdrowie = damage * (regeneracjap_gracza[idattacker]/100.0) + pev(idattacker, pev_health);
	
	set_pev(idattacker, pev_health, (nowe_zdrowie < maksymalne_zdrowie)? nowe_zdrowie: maksymalne_zdrowie);
	
	return HAM_IGNORED;
}

Załączone pliki

Odpowiedz

  • +
  • -
kwieciak - zdjęcie kwieciak 06.02.2012

ciekawe, jak wyprobuje to napisze
Odpowiedz

System'ek - zdjęcie System'ek 06.02.2012

Jaki jest przelicznik? 1 pkt = 1 hp?
Odpowiedz

  • +
  • -
jadamciwszystko - zdjęcie jadamciwszystko 06.02.2012

szczerze to nie umiem przeliczać tego właśnie, ale wydaje mi się że jesli damy 100 punktów to za 100dmg będzie 100hp
dobrze by było jakby ktoś to ładnie wytłumaczył.
Odpowiedz

Kolar`. - zdjęcie Kolar`. 07.02.2012

damage * (regeneracjap_gracza[idattacker]/100.0)
Odpowiedz

  • +
  • -
jadamciwszystko - zdjęcie jadamciwszystko 07.02.2012

to wiem, ale jak to liczyć?
ja myślę że tak: 100.0*(ilość punktów ile damy, np: 50)/100.0=50 czyli wychodzi na to że za 100 dmg dostaniemy 50hp
Odpowiedz

Kolar`. - zdjęcie Kolar`. 07.02.2012

damage * (regeneracjap_gracza[idattacker]/100.0)

Czyli:
100dmg * (20/100) = 20
Odpowiedz

  • +
  • -
paczem - zdjęcie paczem 07.02.2012

powie mi ktoś jakoś po ludzku w końcu jak to działa?
Odpowiedz

  • +
  • -
adek209 - zdjęcie adek209 07.02.2012

A czy dodałby ktoś kod ze obok np kondycja i masz 1000 pkt dodane to obok pisze że biegasz o 90% szybciej
Odpowiedz

Kolar`. - zdjęcie Kolar`. 07.02.2012

A czy dodałby ktoś kod ze obok np kondycja i masz 1000 pkt dodane to obok pisze że biegasz o 90% szybciej

Szukaj.


powie mi ktoś jakoś po ludzku w końcu jak to działa?

damage * (regeneracjap_gracza[idattacker]/100.0)

Czyli:
100dmg * (20/100) = 20

Odpowiedz

  • +
  • -
Intex - zdjęcie Intex 08.02.2012

Ja to wgrałem do siebie, i jak dodamy w to punkty, to się resetują co rundę xD i muszę od nowa dodawać.
Odpowiedz

  • +
  • -
fbang - zdjęcie fbang 08.02.2012

Ja to wgrałem do siebie, i jak dodamy w to punkty, to się resetują co rundę xD i muszę od nowa dodawać.

sprawdz dokladnie wczytajdane i zapiszdane :)
Odpowiedz

PAKOV9 - zdjęcie PAKOV9 08.02.2012

W tym chodzi ,że jak będę dawać w to punkty to kiedy ktoś mnie trafi za 20DMG to automatycznie doda mi tyle hp ile mam w to przydzielont czy chodzi o to ,że jak ja kogoś trafie to mi doda HP?
Odpowiedz

  • +
  • -
adek209 - zdjęcie adek209 08.02.2012

To chodzi o to że jak trafisz 100 dmg to jak masz 100 pkt to wzraca Ci 50hp o ile się nie myle ale cvary do tego każdy ma inne ja akurat mam ustawione na 50 hp
Odpowiedz

  • +
  • -
jadamciwszystko - zdjęcie jadamciwszystko 08.02.2012

ktos napisał że mu się punkty resetują to jest spowodowane w public SmiercGraczaPost(id, attacker, shouldgib)
spróbuj podmienić od nowa :)


dla tych którzy chcą mieć Regeneracje pod innymi statystykami, zamieniamy tylko public pokazinformacje:
public PokazInformacje(id)
{
    id -= ZADANIE_POKAZ_INFORMACJE;
        
    if(!is_user_connected(id))
    {
        remove_task(id+ZADANIE_POKAZ_INFORMACJE);
        return PLUGIN_CONTINUE;
    }
    
    if(!is_user_alive(id))
    {
        new target = pev(id, pev_iuser2);
    
        if(!target)
            return PLUGIN_CONTINUE;
            
        set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 0.3, 0.0, 0.0, 2);
        ShowSyncHudMsg(id, SyncHudObj, "Klasa : %s^nDoswiadczenie : %i / %i^nPoziom : %i^nPerk : %s^nRegeneracja : %i", nazwy_klas[klasa_gracza[target]], doswiadczenie_gracza[target], PobierzDoswiadczeniePoziomu(poziom_gracza[target]), poziom_gracza[target], nazwy_perkow[perk_gracza[target]], regeneracjap_gracza[target]);
        return PLUGIN_CONTINUE;
    }
    
    set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
    ShowSyncHudMsg(id, SyncHudObj, "[Klasa : %s]^n[Doswiadczenie : %i / %i]^n[Poziom : %i]^n[Perk : %s]^n[Regeneracja : %i]", nazwy_klas[klasa_gracza[id]], doswiadczenie_gracza[id], PobierzDoswiadczeniePoziomu(poziom_gracza[id]), poziom_gracza[id], nazwy_perkow[perk_gracza[id]], regeneracjap_gracza[id]);
    
    return PLUGIN_CONTINUE;
}
Odpowiedz

Kolar`. - zdjęcie Kolar`. 08.02.2012

Do autora tematu, wiesz że teraz nie będzie miał klas na serwerze ... ?
Odpowiedz

  • +
  • -
jadamciwszystko - zdjęcie jadamciwszystko 08.02.2012

Kolar`. a dokładniej o co ci chodzi ?

jest ta statystyka na jednym serwerze i wszystko działa dobrze...
Odpowiedz

Kolar`. - zdjęcie Kolar`. 09.02.2012

codmod.inc jest potrzebny do skompilowania klas.
Odpowiedz

  • +
  • -
jadamciwszystko - zdjęcie jadamciwszystko 09.02.2012

tutaj nie trzeba nic zmieniać w codmod.inc
Odpowiedz

Kolar`. - zdjęcie Kolar`. 09.02.2012

o.0 To jak klasie dodasz tę statystykę ? Jak jej nie dodasz to klasa nie powinna się wyświetlić na serwerze.
Odpowiedz