←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Tutorial
Szybsze rozdzielanie punktów

  • +
  • -
ZiuTeK - zdjęcie ZiuTeK 24.04.2010

Zdarza się, że ktoś zmodyfikuje diablo aby było w nim 200, 400 a nawet 1000 leveli. Jeśli równocześnie zwiększy ilość rozdzielanych punktów to takie rozdzielanie może trwać godzinami
Tutaj proponuje kod do podmianki aby ułatwić graczom rozdzielanie punktów.
Należy podmienić obie funkcje
public skilltree(id) i public skill_menu(id, key)
na przyciskach 5-8 możemy przydzielić wszystkie punkty w jedną umiejętność a na przyciskach od 1-4 jest przyśpieszone rozdawanie punktów (zamiast 1 to 2)
Na samym początku public skill_menu(id,key) jest zadeklarowana maksymalna ilość punktów jakie możemy dać dla jednej umiejętności ( new

max_skill=X
i dla 100 leveli za X podstawiamy 50, dla 200 leveli to bedzie 100, dla 400 to bedzie 200
Przykład: Gracz ma 44 level - 86 punktów do rozdzielenia, wciska 5 i 6 i ma już rozdzielone punkty 50 w inteligencje a to co zostało czyli 36 punktów w siłe a to wszystko po 2 kliknięciach.

public skilltree(id)
{
	new text[513] 
	new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
	
	
	format(text, 512, "\yWybierz Staty- \rPunkty: %i^n^n\w1. Inteligencja [%i] [Wieksze obrazenia czarami]^n\w2. Sila [%i] [Wiecej zycia]^n\w3. Zrecznosc [%i] [Bronie zadaja ci mniejsze obrazenia]^n\w4. Zwinnosc [%i] [Szybciej biegasz i magia zadaje ci mniejsze obrazenia]^n\w5. Wszystko w Inteligencje ^n\w6. Wszystko w sile ^n\w7. Wszystko w zrecznosc ^n\w8. Wszystko w zwinosc",player_point[id],player_intelligence[id],player_strength[id],player_agility[id],player_dextery[id]) 
	
	keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
	show_menu(id, keys, text) 
	return PLUGIN_HANDLED  
} 


public skill_menu(id, key) 
{ 
	new max_skill=X
	switch(key) 
	{ 	
		case 0: 
		{	
			if (player_intelligence[id]<max_skill){
				player_point[id]-=2
				player_intelligence[id]+=2
			}
			else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
			
		}
		case 1: 
		{	
			if (player_strength[id]<max_skill){
				player_point[id]-=2	
				player_strength[id]+=2
			}
			else client_print(id,print_center,"Maxymalny poziom sily osiagniety")
		}
		case 2: 
		{	
			if (player_agility[id]<max_skill){
				player_point[id]-=2
				player_agility[id]+=2
				player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
			}
			else client_print(id,print_center,"Maxymalny poziom zrecznosci osiagniety")
			
		}
		case 3: 
		{	
			if (player_dextery[id]<max_skill){
				player_point[id]-=2
				player_dextery[id]+=2
				set_speedchange(id)
			}
			else client_print(id,print_center,"Maxymalny poziom zwinnosci osiagniety")
		}
		case 4: 
		{	
			if (player_point[id]+player_intelligence[id] <= max_skill)
				{
					player_intelligence[id]+=player_point[id]
					player_point[id]=0
				}
			else
				{
					player_point[id]-=max_skill-player_intelligence[id]
					player_intelligence[id]=max_skill
					client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
				}
		}
		case 5: 
		{	
			if (player_point[id]+player_strength[id] <= max_skill)
				{
					player_strength[id]+=player_point[id]
					player_point[id]=0
				}
			else
				{
					player_point[id]-=max_skill-player_strength[id]
					player_strength[id]=max_skill
					client_print(id,print_center,"Maxymalny poziom sily osiagniety")
				}
		}
		case 6: 
		{	
			if (player_point[id]+player_agility[id]<max_skill)
				{
					player_agility[id]+=player_point[id]
					player_point[id]=0
				}
			else
				{
					player_point[id]-=max_skill-player_agility[id]
					player_agility[id]=max_skill
					client_print(id,print_center,"Maxymalny poziom zrecznosci osiagniety")
				}
			player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)

		}
		case 7: 
		{	
			if (player_point[id]+player_dextery[id]<max_skill)
				{
					player_dextery[id]+=player_point[id]
					player_point[id]=0
				}
			else
				{
					player_point[id]-=max_skill-player_dextery[id]
					player_dextery[id]=max_skill
					client_print(id,print_center,"Maxymalny poziom zwinnosci osiagniety")
				}
			set_speedchange(id)
		}
	}
	
	if (player_point[id] > 0) 
		skilltree(id)
	
	
	return PLUGIN_HANDLED
}

Mala poprawka, dla punktow zwinnosci byla literowka w funkcji i jesli ktos mial mniej punktow niz max_skill i wrzucal je w zwinnosc to wychodzily liczby ujemne. Kod juz jest poprawiony a Ci ktorzy wgrali go wczesniej proszeni sa o aktualizacje.
Użytkownik ZiuTeK edytował ten post 27.04.2010 19:08
Odpowiedz

  • +
  • -
Change - zdjęcie Change 24.04.2010

Błędy błędy :)
Dodaje wszystkie punkty w 1 owszem, ale jedynie jeśli masz mniej pkt niż max dozwolona ilość. Jesli nie zostają minusowe staty i rozniaste błędy sie robią ;] zresztą sam łatwo dojdziesz gdzie jest źle bo ja nie bardzo sie orientuje w diablo a przyuważyłem w kodzie to ;] (działanie sprawdzone , błędy :P )
Odpowiedz

  • +
  • -
ZiuTeK - zdjęcie ZiuTeK 25.04.2010

No wlasnie jak mi lepiej wytlumaczysz w jakiej sytuacji powstaly bledy to moze sie zorientuje, bo w tym momencie nie mam zielonego pojecia. Testowalem to na swoim diablo 50 leveli i nie bylo problemu. Jakie minusowe staty ?
Na pewno zmieniles wartosc max_skilll na taka jak wymienilem? Wrzuc jakies screeny i opisz lepiej jak to u ciebie wyglada to będę mogl cos poradzic.
Użytkownik ZiuTeK edytował ten post 25.04.2010 07:59
Odpowiedz

  • +
  • -
Change - zdjęcie Change 25.04.2010

Wszystko zmieniałem, tzn. na 200 - tak jak to u mnie jest.
Hmm lepiej wyjaśnić, mówie co wiem od graczy, nie gram na diablo :) Wytłumaczono mi to tak, że np. ma X lvl wiec 300 pkt do rozdania. Jesli wezmie reset i da wszystko w 1 klasę, to wyjdzie mu statystyka -100 (do 200 doda, a potem przeszło w minus oO)
Odpowiedz

  • +
  • -
ZiuTeK - zdjęcie ZiuTeK 25.04.2010

A wgrywales fixa zeby nie miec u siebie ujemnych statow ?
Jesli nie to sprobuj naprawic ujemne staty z tego poradnika:
Ujemne punkty (int,sila,zrecznosc, zwinnosc) - Nieoficjalny polski support AMX Mod X
Odpowiedz

  • +
  • -
Change - zdjęcie Change 25.04.2010

No, teraz lepiej :)
Ale jednak polecam zrobić sobie tak jak ja, np. dodaj 10 w siłe, czy tam 50.
Użytkownik Change edytował ten post 25.04.2010 11:35
Odpowiedz

  • +
  • -
ZiuTeK - zdjęcie ZiuTeK 25.04.2010

Mimo wszystko nadal nie rozumiem czemu to ma służyć albo czemu to ma zapobiec ?
Odpowiedz

Tiger_pl - zdjęcie Tiger_pl 26.04.2010

Ja myśle ,że te minusowe punkty umiejetności wynikają z nie zmienienia n/w parametrow :
public skill_menu(id, key) 
{ 
	switch(key) 
	{ 
		case 0: 
		{	
			if (player_intelligence[id]<60){
				player_point[id]-=1
				player_intelligence[id]+=1
			}
			else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
			
		}
		case 1: 
		{	
			if (player_strength[id]<150){
				player_point[id]-=1	
				player_strength[id]+=1
			}
			else client_print(id,print_center,"Maxymalny poziom sily osiagniety")
		}
		case 2: 
		{	
			if (player_agility[id]<150){
				player_point[id]-=1
				player_agility[id]+=1
				player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/100)
			}
			else client_print(id,print_center,"Maxymalny poziom zrecznosci osiagniety")
			
		}
		case 3: 
		{	
			if (player_dextery[id]<150){
				player_point[id]-=1
				player_dextery[id]+=1
				set_speedchange(id)
			}
			else client_print(id,print_center,"Maxymalny poziom zwinnosci osiagniety")
Ja u siebie na Diablo zmienilem tak :
(player_intelligence[id]<60){
(player_strength[id]<150){
(player_agility[id]<150){
(player_dextery[id]<150)
I max inteligencji można miec 60 puntow
strength - 150
agility- 150
dextery - 150
dlatego wydaje mi się ,że jak zmieniasz to co chcesz to te parametry blokują "gryzą się " z tym co zamierzasz zrobić.
Stąd też wychodzą minusowe punkty umiejetności.
Odpowiedz

  • +
  • -
ZiuTeK - zdjęcie ZiuTeK 28.04.2010

To nie ma nic do rzeczy, punkty ujemne powstaja od pewnych itemow i zeby ich nie bylo nalezy podmienic funkcje ktora podalem w linku do tamtego tematu a w tym poradniku byl blad ktorego nie zauwazylem na poczatku.
W case 7 (dla zwinnosci)
bylo:
player_dextery[id]-=player_point[id] dlatego punkty wychodzily na minusie ale jedynie dla zwinnosci. Blad dostrzeglem i poprawilem wiec teraz juz jest ok.
Odpowiedz

  • +
  • -
Owner123 - zdjęcie Owner123 21.06.2010

Dlaczego raz dajesz <= a raz < ? O.o
Odpowiedz

  • +
  • -
WizZi - zdjęcie WizZi 17.10.2010

Error: Input line too long (after substitutions) on line 1991

new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)
wyskakuje mi error przy tej linijce. WHY? :/

Dobra już działa dzięki, +4 you :D
Użytkownik WizZi edytował ten post 20.10.2010 14:50
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 04.11.2010

Według mnie te rozdzielanie niestety jest trochę beznadziejne, ma się powiedzmy te 80 pkt i 2 razy klikamy i już pkt nie ma, lepiej chyba będzie zrobić coś takiego
case 4: {
if(player_intelligence[id]<max_skill) {
if(player_point[id]>=5) {
player_point[id]-=5
player_intelligence[id]+=5
}
else
client_print(id, print_center, "Nie masz tylu punktow")
}
else
client_print(id, print_center, "Maxymalny poziom inteligencji dla tego poziomu zostal osiagniety")
}
case 5: {
if(player_strength[id]<max_skill) {
if(player_point[id]>=5) {
player_point[id]-=5
player_strength[id]+=5
}
else
client_print(id, print_center, "Nie masz tylu punktow")
}
else
client_print(id, print_center, "Maxymalny poziom sily dla tego poziomu zostal osiagniety")
}
case 6: {
if(player_agility[id]<max_skill) {
if(player_point[id]>=5) {
player_point[id]-=5
player_agility[id]+=5
player_damreduction[id] = (47.3057*(1.0-floatpower(2.7182, -0.06798*float(player_agility[id])))/100)
}
else
client_print(id, print_center, "Nie masz tylu punktow")
}
else
client_print(id, print_center, "Maxymalny poziom zrecznosci dla tego poziomu zostal osiagniety")
}
case 7: {
if(player_dextery[id]<max_skill) {
if(player_point[id]>=5) {
player_point[id]-=5
player_dextery[id]+=5
set_speedchange(id)
}
else
client_print(id, print_center, "Nie masz tylu punktow")
}
else
client_print(id, print_center, "Maxymalny poziom zwinnosci dla tego poziomu zostal osiagniety")
}

oczywiście tą "5" można zamienić na obojętnie jaką liczbę.
Odpowiedz

  • +
  • -
Juma - zdjęcie Juma 06.11.2010

Hmm.. Takie pytanie idiotyczne, z mojej strony.

A gdzie tutaj ustawić maksymalny poziom danej statystyki, przykładowo, siły 450, a zręczności 100 ?

Bo z tego co zrozumiałem, max_skill = twoj_lvl, oznacza maksymalną ilość wpakowania stat w jedną umiejętność, i dla każdej jest ona taka sama..
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 06.11.2010

To wpisujesz zamiast max_skill swoją wartość przy sile, czy zręczności... :o
Odpowiedz

  • +
  • -
Juma - zdjęcie Juma 06.11.2010

Tiaa.. Wpadłem i na ten pomysł, i nie działa.

Mam zamienić za każde max_skill (opowiadające danej statystyce), czy tylko za wybrane ? Może drobny poradniczek dla mnie ;) ?


Bo rozchodzi się o to, że chcę dla każdej statystyki inną maksymalną liczbę wpakowania stat, i jak to zrobić.

Dodano 06 listopad 2010 - 17:25:
Dobra, już doszedłem do tego sam, jak zrobić dla każdej statystyki inną maksymalną liczbę pkt. do rozdania.
Użytkownik Juma edytował ten post 06.11.2010 17:15
Odpowiedz

  • +
  • -
Zacco - zdjęcie Zacco 24.11.2010

A ja mam mały problem... Zrobiłem wszystko według tego co tutaj Ziutek napisał i gdy wchodze na serwer zdobywam 15 pkt umiejetnosci (przykład ;)i dodaje wszystko w siłe. Mam to pod 6. I w następnej rundzie znowu muszę dodać te same punkty umiejętności tylko, że juz nie ma 5,6,7,8 :P Wiecie jak to naprawić??
Odpowiedz