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

wyliczanie punktów w SprawdzPoziom() - dlaczego 2 razy? oO


Najlepsza odpowiedź Linux', 18.07.2015 17:11

W zasadzie nie powinienem sie wypowiadac (Patrz sygne..) ale szkoda by taka wiedza tkwila u mnie w glowie :D. Juz dawno widzialem ten blad ale nic o tym nigdzie nie pisalem. Wydaje mi sie, ze to jest zwykle nie dopatrzenie po stronie autora. Poza tym ta zmienna sprawdzajaca czy gracz zdobyl czy nie poziom tez jest raczej zbedna. Prosciej wszystko wrzucic razem i tez bedzie wszystko smigac poprawniej. U mnie to tak wygladalo, przerob sobie na nowego coda.

public SprawdzPoziom(id)
{
	if(!is_user_connected(id) || !klasa_gracza[id])
		return PLUGIN_CONTINUE;

	while(doswiadczenie_gracza[id] >= doswiadczenie_poziomu[poziom_gracza[id]] && poziom_gracza[id] < limit_poziomu)
	{
		poziom_gracza[id]++;
		punkty_gracza[id] = (poziom_gracza[id]/10)-inteligencja_gracza[id]-zdrowie_gracza[id]-obrazenia_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
		client_cmd(id, "spk QTM_CodMod/levelup.wav");

		if(poziom_gracza[id] == 1000 | 2000 | 3000 | 4000 | 5000 | 6000 | 7000 | 8000 | 9000 | 10000)
		{
			set_hudmessage(245, 163, 7, 0.31, 0.32, 0, 6.0, 5.0);
			ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu! Gratulacje!", poziom_gracza[id]);
		}
	}
	while(doswiadczenie_gracza[id] < doswiadczenie_poziomu[poziom_gracza[id]-1])
	{
		poziom_gracza[id]--;
		KomendaResetujPunkty(id);
		set_hudmessage(245, 163, 7, 0.31, 0.32, 0, 6.0, 5.0);
		ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]);
	}
	if(poziom_gracza[id] > limit_poziomu)
	{
		poziom_gracza[id] = limit_poziomu;
		KomendaResetujPunkty(id);
	}

	ZapiszDane(id);
	return PLUGIN_CONTINUE;
}
Przejdź do postu


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

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.07.2015 16:34

Witam, dlaczego tu jest wyliczanie punktów dwa razy? skoro jak awansował to zmienna jest na true i potem w warunku są podliczane?

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];
		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);
	}
	else if(zdobyl_poziom)
	{
		punkty_gracza[id] = (poziom_gracza[id]-1)*2-inteligencja_gracza[id]-zdrowie_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
		client_cmd(id, "spk QTM_CodMod/levelup");
	}
}

Mógłby ktoś wyjaśnic?


  • +
  • -
  • 0

#2 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 18.07.2015 17:11   Najlepsza odpowiedź

W zasadzie nie powinienem sie wypowiadac (Patrz sygne..) ale szkoda by taka wiedza tkwila u mnie w glowie :D. Juz dawno widzialem ten blad ale nic o tym nigdzie nie pisalem. Wydaje mi sie, ze to jest zwykle nie dopatrzenie po stronie autora. Poza tym ta zmienna sprawdzajaca czy gracz zdobyl czy nie poziom tez jest raczej zbedna. Prosciej wszystko wrzucic razem i tez bedzie wszystko smigac poprawniej. U mnie to tak wygladalo, przerob sobie na nowego coda.

public SprawdzPoziom(id)
{
	if(!is_user_connected(id) || !klasa_gracza[id])
		return PLUGIN_CONTINUE;

	while(doswiadczenie_gracza[id] >= doswiadczenie_poziomu[poziom_gracza[id]] && poziom_gracza[id] < limit_poziomu)
	{
		poziom_gracza[id]++;
		punkty_gracza[id] = (poziom_gracza[id]/10)-inteligencja_gracza[id]-zdrowie_gracza[id]-obrazenia_gracza[id]-wytrzymalosc_gracza[id]-kondycja_gracza[id];
		client_cmd(id, "spk QTM_CodMod/levelup.wav");

		if(poziom_gracza[id] == 1000 | 2000 | 3000 | 4000 | 5000 | 6000 | 7000 | 8000 | 9000 | 10000)
		{
			set_hudmessage(245, 163, 7, 0.31, 0.32, 0, 6.0, 5.0);
			ShowSyncHudMsg(id, SyncHudObj2,"Awansowales do %i poziomu! Gratulacje!", poziom_gracza[id]);
		}
	}
	while(doswiadczenie_gracza[id] < doswiadczenie_poziomu[poziom_gracza[id]-1])
	{
		poziom_gracza[id]--;
		KomendaResetujPunkty(id);
		set_hudmessage(245, 163, 7, 0.31, 0.32, 0, 6.0, 5.0);
		ShowSyncHudMsg(id, SyncHudObj2,"Spadles do %i poziomu!", poziom_gracza[id]);
	}
	if(poziom_gracza[id] > limit_poziomu)
	{
		poziom_gracza[id] = limit_poziomu;
		KomendaResetujPunkty(id);
	}

	ZapiszDane(id);
	return PLUGIN_CONTINUE;
}

  • +
  • -
  • 1

b35020692_qesnxqa.png


#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.07.2015 17:46

No dobra ale w tym Twoim sposobie będzie nawalać w pętli hudem itp

Ciekawi mnie sposób jak połączyłeś te liczby 1000 | 2000... Działa Ci to oO




Co do tematu, też mi się tak wydawało, tyle, że ja mam całkiem inna tą funkcję Ale coś z oryginału zostało
  • +
  • -
  • 0

#4 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 18.07.2015 17:55

To byl tylko przyklad, wyciaglem caly public z starego silnika wiec nie usunalem tego :P. A dlaczego mialo by nie dzialac? Wiem, ze dziwnie to wyglada bez nawiasu ale dziala dziala :P.


  • +
  • -
  • 0

b35020692_qesnxqa.png


#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 18.07.2015 22:37

Nie chodzi o nawias, zawsze robiłem to alternatywą i porównywałem jedną zmienna do innych, a tu taki sposób... No nie wierzę jednak w to, aż sam sprawdzę oO

Póki co dzięki, ten cod ma w sobie tyle sekretów...
  • +
  • -
  • 0




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

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