Regeneracja HP (Działająca Menu+SMA silnik...
Kamil17 06.03.2012
Poprawka tego tematu : http://amxx.pl/topic...regeneracja-hp/
Pod:
Dodajemy:
Pod:
Dodaj:
Pod:
Dodaj:
Pod:
Dodaj:
Pod:
Dodaj:
Pod:
Dodaj:
W public ZastosujAtrybuty(id) dodaj na końcu:
Na końcu *.sma dodaj:
W public UsunUmiejetnosci(id) wpisz na końcu:
W public ResetujPunkty(id) przed:
Dodaj:
W ZapiszDane po:
Dodaj:
Oraz Po:
Dodaj:
W public WczytajDane(id, klasa)
w tej linijce :
6 zwiększamy o 1 czyli będzie :
tu:
dopisujemy :
czyli będzie tak:
pod:
Dodaj:
Cały public Wczytaj dane i zapisz będzie wyglądał tak :
W public SprawdzPoziom(id):
W:
Po:
Dodaj:
Oraz:
W
Po:
Dodaj:
Na koniec *.sma:
A teraz czas na Menu Regeneracji
do public usunumiejetnosc pod:
dodajemy:
w tej samej funkcji pod:
dodajemy:
Szukamy:
pod tym dodajemy:
Za ilość dodawanego HP odpowiada ta linijka w public Regeneracja:
przykładowo jest dzielone przez 10 to przy 100pkt danych w tą statystykę będzie dodawało 10hp co 5 sekund.
A czas zmieniamy w tych linijkach :
5.0 < zamieniacie na swoją liczbę sekund. np : 10.0 , 9.0
Pod:
#include <nvault>
Dodajemy:
#include <fun>
Pod:
#define AUTHOR "QTM_Peyote"
Dodaj:
#define TASK_REGENERACJA 736
Pod:
Float:redukcja_obrazen_gracza[33]
Dodaj:
Float:wartosc_regeneracji_gracza[33];
Pod:
kondycja_gracza[33]
Dodaj:
regeneracja_gracza[33]
Pod:
bonusowa_kondycja_gracza[33]
Dodaj:
bonusowa_regeneracja_gracza[33]
Pod:
wytrzymalosc_klas[MAX_ILOSC_KLAS+1]
Dodaj:
regeneracja_klas[MAX_ILOSC_KLAS+1]
W public ZastosujAtrybuty(id) dodaj na końcu:
set_task(5.0, "Regeneracja", id+TASK_REGENERACJA);
Na końcu *.sma dodaj:
public Regeneracja(id)
{
id -= TASK_REGENERACJA;
if(!is_user_connected(id))
return PLUGIN_CONTINUE;
if(is_user_alive(id))
{
set_task(5.0, "Regeneracja", id+TASK_REGENERACJA);
new cur_health = get_user_health(id);
new max_health = (PobierzZdrowie(id, 1, 1, 1))+100;
new new_health;
wartosc_regeneracji_gracza[id] = float(PobierzRegeneracje(id, 1, 1, 1))/10
//floatround(wartosc_regeneracji_gracza[id], floatround_floor)
if(cur_health+(floatround(wartosc_regeneracji_gracza[id], floatround_floor)) < max_health)
{
new_health = cur_health+floatround(wartosc_regeneracji_gracza[id], floatround_floor);
}
else
{
new_health = max_health;
}
set_user_health(id, new_health);
}
return PLUGIN_CONTINUE;
}
W public UsunUmiejetnosci(id) wpisz na końcu:
regeneracja_gracza[id] = 0;
bonusowa_regeneracja_gracza[id] = 0;
W public ResetujPunkty(id) przed:
if(punkty_gracza[id])
PrzydzielPunkty(id);
Dodaj:
regeneracja_gracza[id] = 0;
W ZapiszDane po:
#%i
Dodaj:
#%i
Oraz Po:
kondycja_gracza[id]
Dodaj:
regeneracja_gracza[id]
W public WczytajDane(id, klasa)
w tej linijce :
new danegracza[6][32];
6 zwiększamy o 1 czyli będzie :
new danegracza[7][32];
tu:
parse(vaultdata, danegracza[0], 31, danegracza[1], 31, danegracza[2], 31, danegracza[3], 31, danegracza[4], 31, danegracza[5], 31);
dopisujemy :
danegracza[6], 31
czyli będzie tak:
parse(vaultdata, danegracza[0], 31, danegracza[1], 31, danegracza[2], 31, danegracza[3], 31, danegracza[4], 31, danegracza[5], 31, danegracza[6], 31));
pod:
kondycja_gracza[id] = str_to_num(danegracza[5]);
Dodaj:
regeneracja_gracza[id] = str_to_num(danegracza[6]);
Cały public Wczytaj dane i zapisz będzie wyglądał tak :
public ZapiszDane(id)
{
if(!klasa_gracza[id])
return PLUGIN_CONTINUE;
new vaultkey[128],vaultdata[256], identyfikator[64];
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], regeneracja_gracza[id]);
new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
switch(typ_zapisu)
{
case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
}
format(vaultkey, charsmax(vaultkey),"%s-%s-%i-cod", identyfikator, nazwy_klas[klasa_gracza[id]], typ_zapisu);
nvault_set(vault,vaultkey,vaultdata);
return PLUGIN_CONTINUE;
}
public WczytajDane(id, klasa)
{
new vaultkey[128],vaultdata[256], identyfikator[64];
new typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
switch(typ_zapisu)
{
case 1: copy(identyfikator, charsmax(identyfikator), nazwa_gracza[id]);
case 2: get_user_authid(id, identyfikator, charsmax(identyfikator));
case 3: get_user_ip(id, identyfikator, charsmax(identyfikator));
}
format(vaultkey, charsmax(vaultkey),"%s-%s-%i-cod", identyfikator, nazwy_klas[klasa], typ_zapisu);
if(!nvault_get(vault,vaultkey,vaultdata,255)) // Jezeli nie ma danych gracza sprawdza stary zapis.
{
format(vaultkey, charsmax(vaultkey), "%s-%i-cod", nazwa_gracza[id], klasa);
nvault_get(vault,vaultkey,vaultdata,255);
}
replace_all(vaultdata, 255, "#", " ");
new danegracza[7][32];
parse(vaultdata, danegracza[0], 31, danegracza[1], 31, danegracza[2], 31, danegracza[3], 31, danegracza[4], 31, danegracza[5], 31, danegracza[6], 31);
doswiadczenie_gracza[id] = str_to_num(danegracza[0]);
poziom_gracza[id] = str_to_num(danegracza[1])>0?str_to_num(danegracza[1]):1;
inteligencja_gracza[id] = str_to_num(danegracza[2]);
zdrowie_gracza[id] = str_to_num(danegracza[3]);
wytrzymalosc_gracza[id] = str_to_num(danegracza[4]);
kondycja_gracza[id] = str_to_num(danegracza[5]);
regeneracja_gracza[id] = str_to_num(danegracza[6]);
punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id];
return PLUGIN_CONTINUE;
}
W public SprawdzPoziom(id):
W:
while(doswiadczenie_gracza[id] >= PobierzDoswiadczeniePoziomu(poziom_gracza[id]) && poziom_gracza[id] < limit_poziomu)
Po:
-kondycja_gracza[id]
Dodaj:
-regeneracja_gracza[id]
Oraz:
W
else if(stracil_poziom)
Po:
-kondycja_gracza[id]
Dodaj:
-regeneracja_gracza[id]
Na koniec *.sma:
public UstawBonusowaRegeneracje(id, wartosc)
bonusowa_regeneracja_gracza[id] = wartosc;
public PrzydzielRegeneracje(id, wartosc)
{
new max_statystyka = get_pcvar_num(cvar_limit_poziomu)/2;
wartosc = min(min(punkty_gracza[id], wartosc), max_statystyka-regeneracja_gracza[id]);
punkty_gracza[id] -= wartosc;
regeneracja_gracza[id] += wartosc;
}
public PobierzRegeneracje(id, regeneracja_zdobyta, regeneracja_klasy, regeneracja_bonusowa)
{
new regeneracja;
if(regeneracja_zdobyta)
regeneracja += regeneracja_gracza[id];
if(regeneracja_bonusowa)
regeneracja += bonusowa_regeneracja_gracza[id];
if(regeneracja_klasy)
regeneracja += regeneracja_klas[klasa_gracza[id]];
return regeneracja;
}
public PobierzRegeneracjeKlasy(klasa)
{
if(klasa <= ilosc_klas)
return regeneracja_klas[klasa];
return -1;
}
A teraz czas na Menu Regeneracji
do public usunumiejetnosc 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)", regeneracja_gracza[id]);
w tej samej funkcji pod:
menu_additem(menu, kondycja);
dodajemy:
menu_additem(menu, regeneracja);
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)
{
regeneracja_gracza[id]++;
punkty_gracza[id]--;
}
else
client_print(id, print_chat, "[COD:MW] Maksymalny poziom regeneracji osiagniety");
}
Za ilość dodawanego HP odpowiada ta linijka w public Regeneracja:
wartosc_regeneracji_gracza[id] = float(PobierzRegeneracje(id, 1, 1, 1))/10 // 10 zmieniacie na swoją liczbę
przykładowo jest dzielone przez 10 to przy 100pkt danych w tą statystykę będzie dodawało 10hp co 5 sekund.
A czas zmieniamy w tych linijkach :
set_task(5.0, "Regeneracja", id+TASK_REGENERACJA);
5.0 < zamieniacie na swoją liczbę sekund. np : 10.0 , 9.0
Załączone pliki
Kamil17 06.03.2012
Było lecz nie działały te statystyki a ta statystyka jest X HP co 5 sByło z 10 razy.
sebul
06.03.2012
Jednak nie zauważyłem czegoś.
Kamil17 06.03.2012
Działa testowałem to u siebie , i jest regeneracja co 5 sec ja mam ustawione co 5 sec 10 hpTutaj też nie będzie regeneracji co 5 sekund, nawet nie trzeba długo szukać błędu ;]
A może i działa, nie zauważyłem taska na początku funkcji, zaraz za warunkiem. Ja tam zawsze jak już takie taski daje na końcu
Działa bo sam testowałem u siebie na serwerze i dlatego napisałem od nowa poradnik Z działającą statystyką + Menu bo w wersji serce Statystyka nie działa poprawnie trzeba było przerobić klika zdań oraz Autor nie interesował się tematem co do pomocy
Użytkownik Kamil17 edytował ten post 06.03.2012 18:46
A może sma?
06.03.2012
Nie, żebym się wywyższał, bo niski jestem czy coś, ale fajnie by było, gdyby jakaś informacja o autorze (kodu, nie poradnika) była umieszczona gdzieś (np. na samym końcu, najmniejszą czcionką, w kolorze tła) w 1. poście, no nie?
http://amxx.pl/topic...post__p__293037
Tylko tak się zastanawiam po co tutaj są komentarze, floaty i tablica "wartosc" ;D
A tu wyżej jest ładniejsza wersja publica Regeneracja(id) ;D
Nooo i usuwamy coś takiego jak: "wartosc_regeneracji_gracza[33]" ;F
http://amxx.pl/topic...post__p__293037
Tylko tak się zastanawiam po co tutaj są komentarze, floaty i tablica "wartosc" ;D
public Regeneracja(id)
{
id -= ZADANIE_REGENERACJA;
if(!is_user_connected(id))
return PLUGIN_CONTINUE;
set_task(10.0, "Regeneracja", id+ZADANIE_REGENERACJA);
if(is_user_alive(id))
{
new cur_health = get_user_health(id);
new max_health = PobierzZdrowie(id, 1, 1, 1)+100;
new new_health;
new tmp_health = cur_health+(PobierzRegeneracje(id, 1, 1, 1)/5);
if(tmp_health < max_health)
{
new_health = tmp_health;
}
else
{
new_health = max_health;
}
set_user_health(id, new_health);
}
return PLUGIN_CONTINUE;
}
A tu wyżej jest ładniejsza wersja publica Regeneracja(id) ;D
Nooo i usuwamy coś takiego jak: "wartosc_regeneracji_gracza[33]" ;F
Na 5tyk
06.03.2012
Pewnie jest komentarz dlatego, że wziął public Regeneracji z mojego tamtu. A autorem tego publica jest A moze sma?
sebul
06.03.2012
public Regeneracja(id) {
id -= ZADANIE_REGENERACJA;
if(!is_user_connected(id))
return PLUGIN_HANDLED;
if(is_user_alive(id)) {
new max_health = PobierzZdrowie(id, 1, 1, 1)+100;
new tmp_health = get_user_health(id)+(PobierzRegeneracje(id, 1, 1, 1)/5);
set_user_health(id, min(max_health, tmp_health));
set_task(5.0, "Regeneracja", id+ZADANIE_REGENERACJA);
}
return PLUGIN_CONTINUE;
}
eh
Kamil17 07.03.2012
Został Poprawiony kod a kto jest autorem to ja tego nie wiem tylko poprawiłem + dodałem gotowca oraz Menu
// Ja wiem że to dobrze działa bo testowałem / oraz gotowiec jest w załączniku
Użytkownik Kamil17 edytował ten post 07.03.2012 07:52
// Ja wiem że to dobrze działa bo testowałem / oraz gotowiec jest w załączniku
Użytkownik Kamil17 edytował ten post 07.03.2012 07:52
JawoR1337
08.03.2012
No z tą nową statystyką ?
Po wgraniu tego gotowca nie czyta żadnych klas ..
Dobra ogarnąłem
Po wgraniu tego gotowca nie czyta żadnych klas ..
Dobra ogarnąłem
PAKOV9 08.03.2012
Zrobiłem tak jak w poradniku i wywala błędy jak chce przekompilować ;/
Dodaje mojego cod moda z ta statystyka w załączniku jeżeli możecie to pomóżcie
//// QTM_CodMod.sma
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(77) : error 010: invalid function or declaration
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(85) : error 010: invalid function or declaration
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(95) : error 010: invalid function or declaration
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(129) : warning 217: loose indentation
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(131) : warning 217: loose indentation
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(472) : error 017: undefined symbol "regeneracja_gracza"
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(472) : warning 215: expression has no effect
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(472) : error 001: expected token: ";", but found "]"
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(472) : error 029: invalid expression, assumed zero
// C:\Users\Patryk\Desktop\ziomek i inne pierdo│y Patry\Wszystko\compiler\QTM_Co
dMod.sma(472) : fatal error 107: too many error messages on one line
//
// Compilation aborted.
// 7 Errors.
// Could not locate output file compiled\QTM_CodMod.amx (compile failed).
//
Dodaje mojego cod moda z ta statystyka w załączniku jeżeli możecie to pomóżcie
Załączone pliki
heroes
09.03.2012
ja już w jednym poradniku zwróciłem uwagę na to ale oczywiście wiadome, że nikt tego nawet nie przeczytał..
weźmy kawałek kodu z Twojego silnika oto on:
hmm jak myślisz co tak boli w oczy ? a no wiadome, że średniki. w poradniku powinno być jakieś info dla laików, że jak dopisują niżej zmienne to niech wcześniej dadzą przecinek a następnie niżej średnik i powinno wyglądać to tak:
//
dodałem Ci sma.. poprawiono masę śmiesznych błędów .. nie testowane pod względem działania
Użytkownik heroes edytował ten post 09.03.2012 12:58
weźmy kawałek kodu z Twojego silnika oto on:
new nazwa_gracza[33][64],
klasa_gracza[33],
nowa_klasa_gracza[33],
poziom_gracza[33],
doswiadczenie_gracza[33],
perk_gracza[33],
wartosc_perku_gracza[33];
new Float:maksymalne_zdrowie_gracza[33],
Float:szybkosc_gracza[33],
Float:redukcja_obrazen_gracza[33];
Float:wartosc_regeneracji_gracza[33];
new punkty_gracza[33],
zdrowie_gracza[33],
inteligencja_gracza[33],
wytrzymalosc_gracza[33],
kondycja_gracza[33];
new obrazenia_gracza[33]
regeneracja_gracza[33]
hmm jak myślisz co tak boli w oczy ? a no wiadome, że średniki. w poradniku powinno być jakieś info dla laików, że jak dopisują niżej zmienne to niech wcześniej dadzą przecinek a następnie niżej średnik i powinno wyglądać to tak:
new nazwa_gracza[33][64],
klasa_gracza[33],
nowa_klasa_gracza[33],
poziom_gracza[33],
doswiadczenie_gracza[33],
perk_gracza[33],
wartosc_perku_gracza[33];
new Float:maksymalne_zdrowie_gracza[33],
Float:szybkosc_gracza[33],
Float:redukcja_obrazen_gracza[33],
Float:wartosc_regeneracji_gracza[33];
new punkty_gracza[33],
zdrowie_gracza[33],
inteligencja_gracza[33],
wytrzymalosc_gracza[33],
kondycja_gracza[33],
regeneracja_gracza[33];
new obrazenia_gracza[33];
//
dodałem Ci sma.. poprawiono masę śmiesznych błędów .. nie testowane pod względem działania
Załączone pliki
Użytkownik heroes edytował ten post 09.03.2012 12:58
Kamil17 09.03.2012
@ Up dzięki że napisałeś oraz poprawiłeś sma pakov9 (właśnie ten kto nie wie co i jak to doda średnik a potem przecinek )
PAKOV9 09.03.2012
Mam problem z HP przez tą regeneracje.
Bo na normalnych cod modach jest tak ,ze jak dasz 1 punkt w zdrowie to doda ci 1HP czyli 1Pnkt=1HP
A ja dałem na swoje cod moda coś takiego ,że jak dam 1 punkt statystyki zdrowia to dodaje mi 2HP czyli 1Pnkt=2HP
I miałem tak ,że jak dam klasie 30 punktów zdrowia to nie będzie miała 130 HP tylko 160HP. A przez tą regenracje klasa znowu ma tylko 130Hp ;/ tyle ile punktów czyli zamiast 1punkt=2HP mam 1punkt=1HP
Jak to naprawić?
Bo na normalnych cod modach jest tak ,ze jak dasz 1 punkt w zdrowie to doda ci 1HP czyli 1Pnkt=1HP
A ja dałem na swoje cod moda coś takiego ,że jak dam 1 punkt statystyki zdrowia to dodaje mi 2HP czyli 1Pnkt=2HP
I miałem tak ,że jak dam klasie 30 punktów zdrowia to nie będzie miała 130 HP tylko 160HP. A przez tą regenracje klasa znowu ma tylko 130Hp ;/ tyle ile punktów czyli zamiast 1punkt=2HP mam 1punkt=1HP
Jak to naprawić?
maniek2614
09.03.2012
Stanie się coś jak zamienię:
na:
if(regeneracja_gracza[id] < 50)
na:
if(regeneracja_gracza[id] < limit_poziomu/2)?