I. Jako item
Szukamy linijki z napisem
Public Damage();
u mnie wygląda to tak
public Damage(id) { new attacker = get_user_attacker(id); new damage = read_data(2); if(!is_user_alive(attacker) || !is_user_connected(attacker) || id == attacker || !klasa_gracza[attacker]) return PLUGIN_CONTINUE; if(informacje_przedmiotu_gracza[attacker][0] == 12 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1 || klasa_gracza[attacker] == Predator && random_num(1,3) == 2) Display_Fade(id,1<<14,1<<14 ,1<<16,255,155,50,230); if(get_user_team(id) != get_user_team(attacker)) { while(damage>20) { damage-=20; doswiadczenie_gracza[attacker]++; } } SprawdzPoziom(attacker); return PLUGIN_CONTINUE; }
pod "new damage = read_data(2);" dodajemy to "new hp = get_user_health(attacker);"
Pomiędzy
Display_Fade(id,1<<14,1<<14 ,1<<16,255,155,50,230);, a
if(get_user_team(id) != get_user_team(attacker))
wstawiamy to:
if(get_user_team(id) != get_user_team(attacker) && informacje_przedmiotu_gracza[attacker][0] == numer perka) { if(hp>=maksymalne_zdrowie_gracza[attacker]) { return PLUGIN_CONTINUE; } else { hp+=floatround(1.0*damage/(informacje_przedmiotu_gracza[attacker][1]), floatround_floor); set_user_health(attacker, min(hp, maksymalne_zdrowie_gracza[attacker])); } }
UWAGA!!! Ten kod musicie wstawic PRZED takim kodem
if(get_user_team(id) != get_user_team(attacker)) { while(damage>20) { damage-=20; doswiadczenie_gracza[attacker]++; } }
w przeciwnym razie jak zadasz <20 dmg item działa dobrze, powyżej tego dmg występuje bład itemu..
W moim przypadku numer perka to 50, a nazwałem go "Naboje Życia". Zastanawia was, dlaczego 1.0*damage, ponieważ bez "1.0", może wyskoczyć błąd typu "Warning: Tag mismatch on line xxxx", niby to nie przeszkadza w kompilowaniu, ale to wpływa na sam item w grze.
W "public DajPrzedmiotX(id, przedmiot)", dodajemy
case "numer perka": { informacje_przedmiotu_gracza[id][1] == random_num(2, 5); {W moim przypadku to zakres 2 - 5, czyli możliwe losowania to 1/5, 1/4, 1/3, 1/2. Oczywiscie zakres losowania zostawiam wedle waszego gustu ;d.
Dokładnie to samo dajemy w "public DajPrzedmiot(id, przedmiot)".
Tak powinno wyglądać:
public Damage(id) { new attacker = get_user_attacker(id); new damage = read_data(2); new hp = get_user_health(attacker); if(!is_user_alive(attacker) || !is_user_connected(attacker) || id == attacker || !klasa_gracza[attacker]) return PLUGIN_CONTINUE; if(informacje_przedmiotu_gracza[attacker][0] == 12 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1 || klasa_gracza[attacker] == Predator && random_num(1,3) == 2) Display_Fade(id,1<<14,1<<14 ,1<<16,255,155,50,230); if(get_user_team(id) != get_user_team(attacker) && informacje_przedmiotu_gracza[attacker][0] == 50) { if(hp>=maksymalne_zdrowie_gracza[attacker]) { return PLUGIN_CONTINUE; } else { hp+=floatround(1.0*damage/(informacje_przedmiotu_gracza[attacker][1]), floatround_floor); set_user_health(attacker, min(hp, maksymalne_zdrowie_gracza[attacker])); } } if(get_user_team(id) != get_user_team(attacker)) { while(damage>20) { damage-=20; doswiadczenie_gracza[attacker]++; } } SprawdzPoziom(attacker); return PLUGIN_CONTINUE; }
II Jako Klasa
wystarczy zamienić treść
informacje_przedmiotu_gracza[attacker][0] == "nazwa perka"na
klasa_gracza[attacker] == "nazwa klasy"W moim przypadku to Komandos
Jeżeli chcemy nadać stałą, np. zawsze 1/3 dmg do HP to zamiast
hp+=floatround(1.0*damage/(informacje_przedmiotu_gracza[attacker][1]), floatround_floor);dajemy to
hp+=floatround(damage/3.0, floatround_floor);
U mnie tak to wygląda
public Damage(id) { new attacker = get_user_attacker(id); new damage = read_data(2); new hp = get_user_health(attacker); if(!is_user_alive(attacker) || !is_user_connected(attacker) || id == attacker || !klasa_gracza[attacker]) return PLUGIN_CONTINUE; if(informacje_przedmiotu_gracza[attacker][0] == 12 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1 || klasa_gracza[attacker] == Predator && random_num(1,3) == 2) Display_Fade(id,1<<14,1<<14 ,1<<16,255,155,50,230); if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker] == Komandos) { if(hp>=maksymalne_zdrowie_gracza[attacker]) { return PLUGIN_CONTINUE; } else { hp+=floatround(damage/3.0, floatround_floor); set_user_health(attacker, min(hp, maksymalne_zdrowie_gracza[attacker])); } } if(get_user_team(id) != get_user_team(attacker)) { while(damage>20) { damage-=20; doswiadczenie_gracza[attacker]++; } } SprawdzPoziom(attacker); return PLUGIN_CONTINUE; }
III jako item i klasa
Prezentacja
public Damage(id) { new attacker = get_user_attacker(id); new damage = read_data(2); new hp = get_user_health(attacker); if(!is_user_alive(attacker) || !is_user_connected(attacker) || id == attacker || !klasa_gracza[attacker]) return PLUGIN_CONTINUE; if(informacje_przedmiotu_gracza[attacker][0] == 12 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1 || klasa_gracza[attacker] == Predator && random_num(1,3) == 2) Display_Fade(id,1<<14,1<<14 ,1<<16,255,155,50,230); if(get_user_team(id) != get_user_team(attacker) && informacje_przedmiotu_gracza[attacker][0] == 50) { if(hp>=maksymalne_zdrowie_gracza[attacker]) { return PLUGIN_CONTINUE; } else { hp+=floatround(1.0*damage/(informacje_przedmiotu_gracza[attacker][1]), floatround_floor); set_user_health(attacker, min(hp, maksymalne_zdrowie_gracza[attacker])); } } if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker] == Komandos) { if(hp>=maksymalne_zdrowie_gracza[attacker]) { return PLUGIN_CONTINUE; } else { hp+=floatround(damage/3.0, floatround_floor); set_user_health(attacker, min(hp, maksymalne_zdrowie_gracza[attacker])); } } if(get_user_team(id) != get_user_team(attacker)) { while(damage>20) { damage-=20; doswiadczenie_gracza[attacker]++; } } SprawdzPoziom(attacker); return PLUGIN_CONTINUE; }
oczywiście w III przypadku w "Public DajPrzedmiotX(id, przedmiot)" oraz w "Public DajPrzedmiot(id, przedmiot)"
musimy dać to:
case "numer perka": { if(klasa_gracza[id] == "Nazwa klasy z "wrodzonym" itemem) { DajPrzedmiot(id, random_num(1, sizeof nazwy_przedmiotow-1)); } informacje_przedmiotu_gracza[id][1] = random_num(a,b); }
Tyle rozpisania na temat tej właściwości, myślę że nie poszło na marne ;d