←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Wyświetlanie informacji wszys...


Najlepsza odpowiedź sebul 09.08.2014 19:07

I czemu się dziwić, że wiadomość pokazuje się przy każdym trafieniu, skoro w warunku nie ma sprawdzenia czy gracz zyskał poziom?
else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        tutorMake(id,TUTOR_GREEN,5.0,"Awansowales do %i poziomu!", poziom_gracza[id]) //TUTOR
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
    }
    if( poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
    {
        client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);
    }
na
else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        tutorMake(id,TUTOR_GREEN,5.0,"Awansowales do %i poziomu!", poziom_gracza[id]) //TUTOR
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
        if( poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
        {
            client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);
        }
    }
a jeśli chcesz, żeby wiadomość pokazywała się po prostu co 50 poziom, to od tego masz % (reszta z dzielenia), czyli
if(!(poziom_gracza[id] % 50))
Przejdź do postu
Zablokowany

kakus002 - zdjęcie kakus002 08.08.2014

Witam, zastanawiałem się jak zrobić by ta wiadomość:

client_print(0, print_chat, "[COD:MW] Gracz %s awansowal do %i poziomu!", nazwa_gracza[id], poziom_gracza[id]);

 wyświetlana była gdy ktoś wbije 50/100/150/200 level. Kombinowałem już troche ale nic nie działało ;x

Z góry dziękuje : ]


Użytkownik kakus002 edytował ten post 08.08.2014 18:20
Odpowiedz

  • +
  • -
dredek - zdjęcie dredek 08.08.2014

 
if(poziom_gracza[id] < 200)

{

client_print(0, print_chat, "[COD:MW] Gracz %s awansowal do %i poziomu!", nazwa_gracza[id], poziom_gracza[id]);

}
: x

Użytkownik dredek edytował ten post 08.08.2014 21:17
Odpowiedz

kakus002 - zdjęcie kakus002 08.08.2014

 

 
if(poziom_gracza[id] < 200)

{

client_print(0, print_chat, "[COD:MW] Gracz %s awansowal do %i poziomu!", nazwa_gracza[id], poziom_gracza[id]);

}
: x

 

Gdyby to działało to bym nawet nie napisał tego tematu : ] Przy tym informacja wyświetla się potrójnie, w dodatku co level & i to oznacza że informacja będzie pokazywana aż do 200 level'a : ]

Odpowiedz

  • +
  • -
dredek - zdjęcie dredek 08.08.2014

Sprawdź teraz.

 

 

if(poziom_gracza[id] == 50 || poziom_gracza[id] == 100 || poziom_gracza[id] == 150 || poziom_gracza[id] == 200)

{ 

client_print(0, print_chat, "[COD:MW] Gracz %s awansowal do %i poziomu!", nazwa_gracza[id], poziom_gracza[id]);

}

 

To ,że Ci się potrójnie wyświetla to już nie moja wina... obczaj teraz bo wcześniej nie zakumałem tematu.


Użytkownik dredek edytował ten post 08.08.2014 22:19
Odpowiedz

  • +
  • -
radim - zdjęcie radim 08.08.2014

Najłatwiejszym sposobem jest użycie warunków ( if ) czy dany grasz o danym id osiągnał dany level.

if( poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
client_print( 0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);

A to że wyskakuje CI kilka razy wiadomość to prawdopodobnie w/w kod masz w funkcji która jest powtarzana w jakimś tasku.

Odpowiedz

kakus002 - zdjęcie kakus002 08.08.2014


Sprawdź teraz.

 


A to że wyskakuje CI kilka razy wiadomość to prawdopodobnie w/w kod masz w funkcji która jest powtarzana w jakimś tasku.

Wszystko działa ale gdy gracz ma np. 50 level bądz 100 przy każdym uderzeniu wroga wyskakuje ta informacja : ]


Użytkownik kakus002 edytował ten post 08.08.2014 22:40
Odpowiedz

  • +
  • -
radim - zdjęcie radim 08.08.2014

Być może kod umieściłeś w evencie damage lub damage w kanapce. Pokaz cały public i wszystkie linijki z nim związane (np. gdy jest on gdzieś indziej używany)

Odpowiedz

kakus002 - zdjęcie kakus002 08.08.2014


Być może kod umieściłeś w evencie damage lub damage w kanapce. Pokaz cały public i wszystkie linijki z nim związane (np. gdy jest on gdzieś indziej używany)
public SprawdzPoziom(id)
{    
    if(!is_user_connected(id))
        return;
        
    new limit_poziomu = get_pcvar_num(cvar_limit_poziomu);
    
    new bool:zdobyl_poziom = false, bool:stracil_poziom = false;
    
    while(doswiadczenie_gracza[id] >= PobierzDoswiadczeniePoziomu(poziom_gracza[id]) && poziom_gracza[id] < limit_poziomu)
    {
        poziom_gracza[id]++;
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        zdobyl_poziom = true;
    }
        
    while(doswiadczenie_gracza[id] < PobierzDoswiadczeniePoziomu(poziom_gracza[id]-1))
    {
        poziom_gracza[id]--;
        stracil_poziom = true;
    }
        
    if(poziom_gracza[id] > limit_poziomu)
    {
        poziom_gracza[id] = limit_poziomu;
        ResetujPunkty(id);
    }
    
    if(stracil_poziom)
    {
        ResetujPunkty(id);
        tutorMake(id,TUTOR_GREEN,5.0,"Spadles do %i poziomu!", poziom_gracza[id])
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]);
    }
    else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        tutorMake(id,TUTOR_GREEN,5.0,"Awansowales do %i poziomu!", poziom_gracza[id]) //TUTOR
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
    }
    if( poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
    {
        client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);
    }
            
    ZapiszDane(id);
}

W publicu ObrazeniaPost jest coś takiego

SprawdzPoziom(attacker);

To przez to ? : ]


Użytkownik kakus002 edytował ten post 08.08.2014 23:34
Odpowiedz

  • +
  • -
radim - zdjęcie radim 08.08.2014

Tak to przez to. Zamiast 'if' użyj 'while'.

while( poziom_gracza[ id ] == 50 || poziom_gracza ==100 )
client_print(0, print_chat, "Blablabla")
Odpowiedz

kakus002 - zdjęcie kakus002 08.08.2014


Śmieszny sposób ale zadziała

Cały public ma wyglądać tak? Bo jeśli Tak to nie działa to : ] + Gdy uderzymy swojego to także wyskakuje informacja że gracz osiagnął 100 lvl .

public SprawdzPoziom(id)
{    
    if(!is_user_connected(id))
        return;
        
    if(poziom_gracza[id] != 50 || poziom_gracza[id] != 100)
    costam[id] = false;
    
    new limit_poziomu = get_pcvar_num(cvar_limit_poziomu);
    
    new bool:zdobyl_poziom = false, bool:stracil_poziom = false;
    
    while(doswiadczenie_gracza[id] >= PobierzDoswiadczeniePoziomu(poziom_gracza[id]) && poziom_gracza[id] < limit_poziomu)
    {
        poziom_gracza[id]++;
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        zdobyl_poziom = true;
    }
        
    while(doswiadczenie_gracza[id] < PobierzDoswiadczeniePoziomu(poziom_gracza[id]-1))
    {
        poziom_gracza[id]--;
        stracil_poziom = true;
    }
        
    if(poziom_gracza[id] > limit_poziomu)
    {
        poziom_gracza[id] = limit_poziomu;
        ResetujPunkty(id);
    }
    
    if(stracil_poziom)
    {
        ResetujPunkty(id);
        tutorMake(id,TUTOR_GREEN,5.0,"Spadles do %i poziomu!", poziom_gracza[id])
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]);
    }
    else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        tutorMake(id,TUTOR_GREEN,5.0,"Awansowales do %i poziomu!", poziom_gracza[id]) //TUTOR
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
    }
    if( !costam[id] && (poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 ))
    {
        client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);
        costam[id] = true;
    }
    
    
    ZapiszDane(id);
}

Użytkownik kakus002 edytował ten post 08.08.2014 23:59
Odpowiedz

  • +
  • -
radim - zdjęcie radim 08.08.2014

Edytowałem post, sprawdź jak napisałem wyżej. Tamten był głupi sposób ale by zadziałał, zapomniałem o pętli while, która jest tutaj najlepszym wyjściem.

Odpowiedz

kakus002 - zdjęcie kakus002 09.08.2014

Edytowałem post, sprawdź jak napisałem wyżej. Tamten był głupi sposób ale by zadziałał, zapomniałem o pętli while, która jest tutaj najlepszym wyjściem.

Nadal to samo : ] Rozumiem że bool:costam nie potrzebna i to także :

if(poziom_gracza[id] != 50 || poziom_gracza[id] != 100)
    costam[id] = false;

?

Jeśli to ma wyglądać tak:

while(poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
    {
        client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);

    }
   

To przy uderzeniu gracza serwer się zatrzymuje, zero logów: ]


Użytkownik kakus002 edytował ten post 09.08.2014 00:15
Odpowiedz

  • +
  • -
Najlepsza odpowiedź sebul - zdjęcie sebul 09.08.2014

I czemu się dziwić, że wiadomość pokazuje się przy każdym trafieniu, skoro w warunku nie ma sprawdzenia czy gracz zyskał poziom?
else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        tutorMake(id,TUTOR_GREEN,5.0,"Awansowales do %i poziomu!", poziom_gracza[id]) //TUTOR
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
    }
    if( poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
    {
        client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);
    }
na
else if(zdobyl_poziom)
    {
        punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id]-regeneracja_gracza[id]-obrazenia_gracza[id];
        tutorMake(id,TUTOR_GREEN,5.0,"Awansowales do %i poziomu!", poziom_gracza[id]) //TUTOR
        //set_hudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0);
        //ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
        if( poziom_gracza[ id ] == 50 || poziom_gracza[ id ] == 100 )
        {
            client_print(0, print_chat, "[COD:MW] Gracz %s osiagnal %i poziom!", nazwa_gracza[id], poziom_gracza[id]);
        }
    }
a jeśli chcesz, żeby wiadomość pokazywała się po prostu co 50 poziom, to od tego masz % (reszta z dzielenia), czyli
if(!(poziom_gracza[id] % 50))
Odpowiedz
Zablokowany