Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
CoD Stary

1/LW Dmg dodany do HP - Poradnik

CoD Stary

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
6 odpowiedzi w tym temacie

#1 Hleb

    FC Barcelona <3

  • Użytkownik

Reputacja: 991
Master

  • Postów:405
  • GG:
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Sochaczew
Offline

Napisano 30.05.2011 19:59

Zapewne ktoś dociekał jak zrobić item z właściwością "1/LW dmg zostanie dodanych do HP", albo nadać taką właściwość klasie. Sam miałem z tym problem, ale nareszcie dociekłem i chciałem się z wami podzielić.

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
  • +
  • -
  • 3

Sprzedam:

System odznak premium do BF2 Rank Mod (dodatkowy sposób na zarobek)

 

Więcej Informacji na STEAM/GG/PW

 

 


#2 Na 5tyk

    Godlike

  • Użytkownik

Reputacja: 430
Wszechobecny

  • Postów:1 712
  • GG:
  • Imię:Patryk
  • Lokalizacja:PL
Offline

Napisano 09.06.2011 14:52

Dzięki + ;]
  • +
  • -
  • 0

#3 Kendzior87

    Zaawansowany

  • Użytkownik

Reputacja: 5
Nowy

  • Postów:130
  • Lokalizacja:Matrix
Offline

Napisano 30.06.2011 09:30

Srki ale ja to jestem coś nie na czasie chyba,
za co odpowiada to:
if(get_user_team(id) != get_user_team(attacker))
- nie mam tego u siebie w kodzie

oraz skąd się wzieło to:
public DajPrzedmiotX(id, przedmiot)
tego też nie posiadam
  • +
  • -
  • 0

#4 Hleb

    FC Barcelona <3

  • Autor tematu
  • Użytkownik

Reputacja: 991
Master

  • Postów:405
  • GG:
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Sochaczew
Offline

Napisano 30.06.2011 09:42

Jeżeli chodzi o
public DajPrzedmiotX(id, przedmiot)
Chodzi o Coda, który ma Sklep, wtedy istnieje możliwość losowania itemu w Sklepie, jak tego nie masz, to nie musisz wklejać,

A
if(get_user_team(id) != get_user_team(attacker))

Jeżeli team, do którego należy ofiara(id) jest inny niż team, do którego należy atakujący (attacker).
  • +
  • -
  • 0

Sprzedam:

System odznak premium do BF2 Rank Mod (dodatkowy sposób na zarobek)

 

Więcej Informacji na STEAM/GG/PW

 

 


#5 Kendzior87

    Zaawansowany

  • Użytkownik

Reputacja: 5
Nowy

  • Postów:130
  • Lokalizacja:Matrix
Offline

Napisano 30.06.2011 09:45

if(get_user_team(id) != get_user_team(attacker))

Jeżeli team, do którego należy ofiara(id) jest inny niż team, do którego należy atakujący (attacker).


czyli powinienem to dopisać jeżeli mi tego brakuje nad
{
        while(damage>20)
        {
            damage-=20;
            doswiadczenie_gracza[attacker]++;
        }
    }

Użytkownik Kendzior87 edytował ten post 30.06.2011 09:58

  • +
  • -
  • 0

#6 Hleb

    FC Barcelona <3

  • Autor tematu
  • Użytkownik

Reputacja: 991
Master

  • Postów:405
  • GG:
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Sochaczew
Offline

Napisano 30.06.2011 09:47

if(get_user_team(id) != get_user_team(attacker))
    {
        while(damage>20)
        {
            damage-=20;
            doswiadczenie_gracza[attacker]++;
        }
    }
tak to ma wyglądać

Użytkownik Hleb edytował ten post 30.06.2011 09:49

  • +
  • -
  • 1

Sprzedam:

System odznak premium do BF2 Rank Mod (dodatkowy sposób na zarobek)

 

Więcej Informacji na STEAM/GG/PW

 

 


#7 Kendzior87

    Zaawansowany

  • Użytkownik

Reputacja: 5
Nowy

  • Postów:130
  • Lokalizacja:Matrix
Offline

Napisano 30.06.2011 10:08

ok dodałem, nie wiem czemu tego nie było wcześniej. Dziękuje.
  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: CoD Stary

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych