←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Blokowanie wyświetlanie informacji, w mome...


Najlepsza odpowiedź FejmZPolski 01.03.2015 12:26

Mysle, ze chcesz zablokowac wiadomosc na 5 sekund, bo tyle trwa czas pokazywania wiadomosci o awansie, mozesz to zrobic za pomocą pobrania czasu, dla danego gracza a potem sprawdzenia, proszę:

ew awansowal[33]
public client_connect(id) {
    awansowal[id] = 0
public SmiercGraczaPost(id, attacker, shouldgib)
{    
    if(!is_user_connected(attacker))
        return PLUGIN_CONTINUE;
    
    if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
    {
        new doswiadczenie_za_zabojstwo = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
        
        new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
        
        if(poziom_gracza[id] > poziom_gracza[attacker])
            
        nowe_doswiadczenie += (poziom_gracza[id]-poziom_gracza[attacker])*(doswiadczenie_za_zabojstwo/10);
        
        if(!perk_gracza[attacker])
            
        UstawPerk(attacker, -1, -1, 1);
        
        doswiadczenie_gracza[attacker] += nowe_doswiadczenie + madrosc_gracza[id]*2;
        
        new cod_hs = get_pcvar_num(cod_cvar);
        if(get_gametime() >= float(awansowal[attacker]+5)) {
            if(get_pdata_int(id, 75, 5) == HIT_HEAD)
            {
                cod_set_user_xp(attacker, cod_get_user_xp(attacker) + cod_hs);
                set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
                show_dhudmessage(attacker, "HEADSHOT + %i XP", cod_hs);
            }
            else
            {
                set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
                
                show_dhudmessage(attacker, "+ %i XP", nowe_doswiadczenie);
            }
        }
    }
    
    
    SprawdzPoziom(attacker);
    
    return PLUGIN_CONTINUE;
}
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]-madrosc_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);
        set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
        show_dhudmessage(id,"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]-madrosc_gracza[id];
        set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
        show_dhudmessage(id,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
        awansowal[id] = floatround(get_gametime())
    }
    
    
    ZapiszDane(id);
}

Od razu mowie, ze nie mam calego kodu, tak wiec nawet nie moglem skompilowac,   i zobaczyzc czy dziala ;P

Przejdź do postu

  • +
  • -
GoldenKill - zdjęcie GoldenKill 12.02.2015

Dalej wyświetla się podwójnie 

Odpowiedz

  • +
  • -
plx211 - zdjęcie plx211 12.02.2015

Podmeiń funkcje smiercgraczapost na to i powiedz czy działa (ta funkcja była przerabiana "młotkiem", jak będzie działać to musisz ją sobie ładnie przepisać):

public SmiercGraczaPost(id, attacker, shouldgib)
{	
	if(!is_user_connected(attacker))
		return PLUGIN_CONTINUE;
	
	if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
	{
		new headexp;
		
		new bool:info;
		
		new doswiadczenie_za_zabojstwo = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		
		new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
		
		if(poziom_gracza[id] > poziom_gracza[attacker])
			
		nowe_doswiadczenie += (poziom_gracza[id]-poziom_gracza[attacker])*(doswiadczenie_za_zabojstwo/10);
		
		if(!perk_gracza[attacker])
			
		UstawPerk(attacker, -1, -1, 1);
		
		
		
		new cod_hs = get_pcvar_num(cod_cvar);
		
		if(get_pdata_int(id, 75, 5) == HIT_HEAD)
		{
			headexp = cod_hs
			info = true;
		}

	}
	
	doswiadczenie_gracza[attacker] += headexp + nowe_doswiadczenie + madrosc_gracza[id]*2;
	
	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]-madrosc_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);
		set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
		show_dhudmessage(id,"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]-madrosc_gracza[id];
		set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
		show_dhudmessage(id,"Awansowales do %i poziomu!", poziom_gracza[id]);
		client_cmd(id, "spk QTM_CodMod/levelup");
	}else if(info){
			set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
			show_dhudmessage(attacker, "HEADSHOT + %i XP", cod_hs);
	}else{
			set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
			show_dhudmessage(attacker, "+ %i XP", nowe_doswiadczenie);
	}
	
	
	ZapiszDane(id);
	
	return PLUGIN_CONTINUE;
}

Użytkownik plx211 edytował ten post 12.02.2015 15:52
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 12.02.2015

Spoiler
Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 12.02.2015

W sprawdzpoziom mam 2 błędy

 

w tej linijce i następnej gdzie jest zakończenie publica

	ZapiszDane(id);
QTM_CodMod.sma(588) : warning 225: unreachable code
QTM_CodMod.sma(589) : warning 209: function "SprawdzPoziom" should return a value
Odpowiedz

  • +
  • -
plx211 - zdjęcie plx211 12.02.2015

to nie błędy a ostrzeżenie, moje działa?

Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 12.02.2015

Niestety nie, chciałem teraz sprawdzić TibacKa, ale takie coś mi wyskakuje

Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 12.02.2015

Zapisz dane daj przed return,


Jak to nie styknie to ja odpadam
Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 12.02.2015

Niestety, ale dalej nie działa prawidłowo

Odpowiedz

  • +
  • -
plx211 - zdjęcie plx211 12.02.2015

Bardzo ważne pytanie, jak testujesz czy działa (na ile masz ustawiony exp, exp na lvl itp.)?
Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 20.02.2015

Próbowałem tak, ale dalej się wyświetla :

public SmiercGraczaPost(id, attacker)
{	
	if(!is_user_connected(attacker))
		return PLUGIN_CONTINUE;
	
	if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
	{
		new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo)
		
		new cod_hs = 350
		doswiadczenie_gracza[attacker] += cod_hs
		
		if(!perk_gracza[attacker])
			UstawPerk(attacker, -1, -1, 1);
		
		if(get_pdata_int(id, 75, 5) == HIT_HEAD)
		{
			if(!bBlokuj[attacker])
			{
				set_dhudmessage(212, 255, 85, 0.44, 0.36, 1, 3.0, 1.0, 0.0, 0.0);
				show_dhudmessage(attacker, "HEADSHOT + %i XP", cod_hs);
			}
		}
		else
		{
			if(!bBlokuj[attacker])
			{
				set_dhudmessage(212, 255, 85, 0.46, 0.36, 1, 3.0, 1.0, 0.0, 0.0);
				show_dhudmessage(attacker, "+ %i XP", nowe_doswiadczenie);
			}
		}
		
		ZapiszDane(attacker);
	}
	
	return PLUGIN_CONTINUE;
}

SprawdzPoziom(id)
{	
	new limit_poziomu = sizeof doswiadczenie_poziomu-1;

	new bool:zdobyl_poziom = false
	new 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]
		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);
		set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
		show_dhudmessage(id,"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]
		set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
		show_dhudmessage(id,"Awansowales do %i poziomu!", poziom_gracza[id]);
		client_cmd(id, "spk QTM_CodMod/levelup");
		
		bBlokuj[id] = true
		set_task(0.4, "unlockMsg", id)
	}
	
        ZapiszDane(id);
}

public unlockMsg(id)
{
      bBlokuj[id] = false
}
Odpowiedz

  • +
  • -
Klakier - zdjęcie Klakier 22.02.2015

Spoiler

 

       
if(!zdobyl_poziom){
 if(get_pdata_int(id, 75, 5) == HIT_HEAD)
        {
            cod_set_user_xp(attacker, cod_get_user_xp(attacker) + cod_hs);
            set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
            show_dhudmessage(attacker, "HEADSHOT + %i XP", cod_hs);
        }
        else
        {
            set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
            
            show_dhudmessage(attacker, "+ %i XP", nowe_doswiadczenie);
        }
}
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 22.02.2015

@up

 

No fantastyczny pomysł...

 

Tyle, że to jest w innych funckjach.

 

 

Po testach doszedłem do wniosku, że sprawdzanie poziomu w ObrazeniaPost i WygranaRunda mają znaczenie.

Zrobiłem mu wersje, która podczas awansu blokuje ustawia zmienną na true i odpowiedni warunek w SmierGracza. Po 0.4s odblokowuje, ale nadal to nie działa!

Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 22.02.2015

Teraz ciągle się wyświetla napis Awansowałeś 

Odpowiedz

  • +
  • -
Klakier - zdjęcie Klakier 22.02.2015

Spoiler
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 22.02.2015

@up


Podajesz ten sam kod co ja podawałem, najpierw przeczytaj temat.
Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 23.02.2015

Ma ktoś jeszcze jakieś propozycje ?  :(

Odpowiedz

Najlepsza odpowiedź FejmZPolski - zdjęcie FejmZPolski 01.03.2015

Mysle, ze chcesz zablokowac wiadomosc na 5 sekund, bo tyle trwa czas pokazywania wiadomosci o awansie, mozesz to zrobic za pomocą pobrania czasu, dla danego gracza a potem sprawdzenia, proszę:

ew awansowal[33]
public client_connect(id) {
    awansowal[id] = 0
public SmiercGraczaPost(id, attacker, shouldgib)
{    
    if(!is_user_connected(attacker))
        return PLUGIN_CONTINUE;
    
    if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
    {
        new doswiadczenie_za_zabojstwo = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
        
        new nowe_doswiadczenie = get_pcvar_num(cvar_doswiadczenie_za_zabojstwo);
        
        if(poziom_gracza[id] > poziom_gracza[attacker])
            
        nowe_doswiadczenie += (poziom_gracza[id]-poziom_gracza[attacker])*(doswiadczenie_za_zabojstwo/10);
        
        if(!perk_gracza[attacker])
            
        UstawPerk(attacker, -1, -1, 1);
        
        doswiadczenie_gracza[attacker] += nowe_doswiadczenie + madrosc_gracza[id]*2;
        
        new cod_hs = get_pcvar_num(cod_cvar);
        if(get_gametime() >= float(awansowal[attacker]+5)) {
            if(get_pdata_int(id, 75, 5) == HIT_HEAD)
            {
                cod_set_user_xp(attacker, cod_get_user_xp(attacker) + cod_hs);
                set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
                show_dhudmessage(attacker, "HEADSHOT + %i XP", cod_hs);
            }
            else
            {
                set_dhudmessage(255, 212, 0, 0.50, 0.33, 1, 3.0, 1.0, 0.0, 0.0);
                
                show_dhudmessage(attacker, "+ %i XP", nowe_doswiadczenie);
            }
        }
    }
    
    
    SprawdzPoziom(attacker);
    
    return PLUGIN_CONTINUE;
}
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]-madrosc_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);
        set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
        show_dhudmessage(id,"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]-madrosc_gracza[id];
        set_dhudmessage(212, 255, 85, 0.31, 0.32, 0, 6.0, 5.0, 0.0, 0.0);
        show_dhudmessage(id,"Awansowales do %i poziomu!", poziom_gracza[id]);
        client_cmd(id, "spk QTM_CodMod/levelup");
        awansowal[id] = floatround(get_gametime())
    }
    
    
    ZapiszDane(id);
}

Od razu mowie, ze nie mam calego kodu, tak wiec nawet nie moglem skompilowac,   i zobaczyzc czy dziala ;P


Użytkownik FejmZPolski edytował ten post 01.03.2015 12:29
Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 01.03.2015

Nie działa, raz nic się nie wyświetliło, czasami wyświetla się sam awansowałeś i częściej wyświetla się XP i Awansowales

Odpowiedz

FejmZPolski - zdjęcie FejmZPolski 01.03.2015

Coś mi świta, że źle testujesz :P

Bo wg mnie to nie ma prawa nie dzilac

 

Odpowiedz

  • +
  • -
GoldenKill - zdjęcie GoldenKill 01.03.2015

Testuje prawidłowo jak każdą jedną rzecz -.-

Odpowiedz