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

Typy zmiennych


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 kotlet

    Banned

  • Zbanowany

Reputacja: -1
Nowy

  • Postów:6
  • Lokalizacja:Polska
Offline

Napisano 01.12.2012 17:22

Mam taki kod:
new punkty_umiejetnosci[33];
new skill1[33];
new skill2[33];
new skill3[33];

new level_gracza = cod_get_user_level(id);
    punkty_umiejetnosci[id] = (level_gracza)/2-skill1[id]-skill2[id]-skill3[id];
    new punkty[id] = floatround(punkty_umiejetnosci[id], floatround_floor);
    if(punkty[id] < 1)
        return PLUGIN_CONTINUE;

Co mam w nim zmienić, żeby wszystko działało, tzn za każde 2 lvle dodawało mi 1 punkt do wykorzystania na rozwój umiejętności klasy?

#2 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 02.12.2012 00:00

Użyj floatround (_flooor) już jak ustawiasz wartość punkty_umiejetnosci, bo mając 81lvl, skill1=5, skill2=10, skill3=15 będzie to tak wyglądać: 81/2-5-10-15 = 40.5-30=10.5
A wartość przypisujesz do zwykłej zmiennej, co oznacza, że może przyjąć wartości liczb całkowitych (np. -10,-3,0,3,10). Więc, aby tego uniknąć zaokrąglij liczbę od razu, a powinno działać. Jeśli chcesz tak jak Ty, to rejestracja zmiennej punkty_umiejetnosci[33] powinna wyglądać tak:
new Float:punkty_umiejetnosci[33]

Co się zmieniło ? Dodaliśmy "Float:" przed nazwą zmiennej, co oznacza, że rejestrujemy zmienną zmiennoprzecinkową, która może mieć ułamki w sobie ;)

Polecam osobiście poradnik o typach zmiennych : http://amxx.pl/topic...ienne-co-i-jak/

Pozdrawiam.

Użytkownik ogieR- edytował ten post 02.12.2012 00:01

  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#3 kotlet

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:6
  • Lokalizacja:Polska
Offline

Napisano 02.12.2012 11:05

A co, jeśli mam coś takiego?
public ZapiszDane(id) {
	new name[48];
	get_user_name(id,name,47);
	new level = cod_get_user_level(id);
	new vaultkey[64],vaultdata[128];
	formatex(vaultkey,63,"%s-umiejetnosci",name);
	formatex(vaultdata,127,"%i#%i#%i#%i", skill1[id], skill2[id], skill3[id], level);
	nvault_set(plik_vault,vaultkey,vaultdata);
}

public WczytajDane(id) {
	new name[48];
	get_user_name(id,name,47);
	new vaultkey[64],vaultdata[128];
	formatex(vaultkey,63,"%s-umiejetnosci",name);
	new level = cod_get_user_level(id);
	formatex(vaultdata,127,"%i#%i#%i#%i", skill1[id], skill2[id], skill3[id], level);
	nvault_get(plik_vault,vaultkey,vaultdata,127)
	new first[16], second[16], third[16], fourth[16];
	parse(vaultdata, first, 15, second, 15, third, 15, fourth, 15);
				
	skill1[id] = str_to_num(first);
	skill2[id] = str_to_num(second);
	skill3[id] = str_to_num(third);
	level_gracza[id] = str_to_num(fourth);
	
	punkty_umiejetnosci[id] = (level_gracza[id]-1)/2-skill1[id]-skill2[id]-skill3[id];
}

Plugin pokazuje punkty umiejętności jako -1, wystarczy dodać ten float:punkty, i pyknąć floatround?
Jest jeszcze jeden problem, nie zapisuje lvl'a(do pliku vault).
Edit: float:punkty[33], i punkty_umiejetnosci[id]=floatround(punkty[id],floatround_floor), nie podziałało.

Użytkownik kotlet edytował ten post 02.12.2012 11:14


#4 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 02.12.2012 14:51

Hmm, w zapisie przypisujesz według natywów wartość lvl do zmiennej level (bez indeksu na dodatek !), a w odczycie przypisujesz tą wartość do zmiennej level_gracza[id]. Hmm ? Po co robić zmienną 'level', jak masz 'level_gracza[id' ? Tak czy siak w zapisie brakuję Ci indexu.

Pokaż cały kod, bo się gubię po tym co piszesz, jak rejestrujesz dane zmienne itd ;)
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#5 kotlet

    Banned

  • Autor tematu
  • Zbanowany

Reputacja: -1
Nowy

  • Postów:6
  • Lokalizacja:Polska
Offline

Napisano 02.12.2012 15:03

new Float:punkty[33];

new punkty_umiejetnosci[33];

new skill1[33];

new skill2[33];

new skill3[33];

new level_gracza[33];



(...)



public plugin_init()

{

	plik_vault = nvault_open("pliczek");

		if(plik_vault == INVALID_HANDLE)

			set_fail_state("Nie moge otworzyc pliku");

}



public plugin_end() {

	nvault_close(plik_vault)

}





public client_authorized(id) {

	WczytajDane(id);

}



(...)



public skills(id) {

	new pierwszy[65];

	new drugi[60];

	new trzeci[60];

	new tytul[60];

	punkty_umiejetnosci[id] = (level_gracza[id]-1)/2-skill1[id]-skill2[id]-skill3[id];

	format(pierwszy, charsmax(pierwszy), "Stealth: \r%i", skill1[id]);

	format(drugi, charsmax(drugi), "Piercing Shot: \r%i", skill2[id]);

	format(trzeci, charsmax(trzeci), "Elixir: \r%i", skill3[id]);

	format(tytul, charsmax(tytul), "Ulepsz swoje umiejetnosci \r(%i)", punkty_umiejetnosci[id]);

	

	new skille = menu_create(tytul, "g_Skills");

	new unlock = menu_makecallback("unlockmenu");

	new lock = menu_makecallback("lockmenu");

	

	if(skill1[id] >= 5) {

	menu_additem(skille, pierwszy,"",0, lock);

	} else {

	menu_additem(skille, pierwszy,"",0, unlock);

	}

	if(skill2[id] >= 5) {

	menu_additem(skille, drugi,"",0, lock);

	} else {

	menu_additem(skille, drugi,"",0, unlock);

	}

	if(skill3[id] >=5) {

	menu_additem(skille, trzeci,"",0, lock);

	} else {

	menu_additem(skille, trzeci,"",0, unlock);

	}

	menu_display(id, skille);

}



public g_Skills(id, menu, item){

	if(item == MENU_EXIT){

		menu_destroy(menu)

		return PLUGIN_HANDLED

	}

	

	if(punkty_umiejetnosci[id] < 1) {

		return PLUGIN_CONTINUE

	}

	

	if(punkty_umiejetnosci[id] > 1) {

		skills(id);

	}

	

	switch(item)

	{

		case 0:{

			skill1[id]+=1;

			punkty_umiejetnosci[id]-=1;

		}

		case 1:{

			skill2[id]+=1;

			punkty_umiejetnosci[id]-=1;

		}

		case 2:{

			skill3[id]+=1;

			punkty_umiejetnosci[id]-=1;

		}

	}

	return PLUGIN_CONTINUE;

}



(...)



public ZapiszDane(id) {

	new name[48];

	get_user_name(id,name,47);

	new vaultkey[64],vaultdata[128];

	formatex(vaultkey,63,"%s-umiejetnosci",name);

	formatex(vaultdata,127,"%i#%i#%i", skill1[id], skill2[id], skill3[id]);

	nvault_set(plik_vault,vaultkey,vaultdata);

}



public WczytajDane(id) {

	new name[48];

	get_user_name(id,name,47);

	new vaultkey[64],vaultdata[128];

	formatex(vaultkey,63,"%s-umiejetnosci",name);

	formatex(vaultdata,127,"%i#%i#%i", skill1[id], skill2[id], skill3[id]);

	nvault_get(plik_vault,vaultkey,vaultdata,127)

	new first[16], second[16], third[16], fourth[16];

	parse(vaultdata, first, 15, second, 15, third, 15);

				

	skill1[id] = str_to_num(first);

	skill2[id] = str_to_num(second);

	skill3[id] = str_to_num(third);

	

	punkty[id] = (level_gracza[id]-1)/2-skill1[id]-skill2[id]-skill3[id];

	punkty_umiejetnosci[id] = floatround(punkty[id], floatround_floor);

}

Użytkownik kotlet edytował ten post 02.12.2012 15:20


#6 Gość_21977_*

  • Gość

Reputacja: 0

Offline

Napisano 02.12.2012 15:35

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Autor tematu zbanowany

Jeśli się z tym nie zgadzasz, Dołączona grafika raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL




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

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