Inny limit punktów dla każdej klasy
JLB. Leo
28.05.2011
W tym poradniku pokażę jak łatwo i optymalnie ustawić zupełnie różne maksymalne limity punktów dla każdej z klas i każdej ze statystyk
Wystarczy podmienić dwie funkcje na poniższe:
A poniżej jest wersja z dodatkiem - na każdy lvl odblokowuje się tylko część punktów dla każdej ze statystyk.
Tzn, dostajemy na 2 lvl'u 2 punkty do rozdania, ale możemy dodać tylko po jednym do każdej statystyki! Nie można dać wszystkich dwóch w siłę. Z każdym lvlem możemy co raz więcej dodawać punktów w jedną statystykę.
Użytkownik JLB. Leo edytował ten post 30.05.2011 20:12
Wystarczy podmienić dwie funkcje na poniższe:
Spoiler
A poniżej jest wersja z dodatkiem - na każdy lvl odblokowuje się tylko część punktów dla każdej ze statystyk.
Tzn, dostajemy na 2 lvl'u 2 punkty do rozdania, ale możemy dodać tylko po jednym do każdej statystyki! Nie można dać wszystkich dwóch w siłę. Z każdym lvlem możemy co raz więcej dodawać punktów w jedną statystykę.
Spoiler
Użytkownik JLB. Leo edytował ten post 30.05.2011 20:12
Death_Player
14.06.2011
Nie wiem czy wam też ale przy "switch(player_class[id])" wywala mi błąd
"Error: Invalid function or declaration on line 1527
Error: Invalid function or declaration on line 1529
Error: Invalid function or declaration on line 1538
3 Errors.
Could not locate output file F:\Users\xxx\Desktop\diablo.amx (compile failed)."
Użytkownik Death_Player edytował ten post 14.06.2011 19:31
"Error: Invalid function or declaration on line 1527
Error: Invalid function or declaration on line 1529
Error: Invalid function or declaration on line 1538
3 Errors.
Could not locate output file F:\Users\xxx\Desktop\diablo.amx (compile failed)."
1527 switch(player_class[id])
1528 {
1529 case Satan:
itd... {
max_int = 134
max_sila = 0
max_zre = 133
max_zwin = 133
}
}
show_menu(id, keys, text)
1538 return PLUGIN_HANDLED
}
Użytkownik Death_Player edytował ten post 14.06.2011 19:31
Death_Player
25.06.2011
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_int=100 //inteligencja
new max_sila=100 //siła
new max_zre=100 //zręczność
new max_zwin=100 //zwinność
switch(key)
{
case 0:
{
if (player_intelligence[id]<max_int)
{
player_point[id]-=1
player_intelligence[id]+=1
}
else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
}
case 1:
{
if (player_strength[id]<max_sila)
{
player_point[id]-=1
player_strength[id]+=1
}
else client_print(id,print_center,"Maxymalny poziom sily osiagniety")
}
case 2:
{
if (player_agility[id]<max_zre)
{
player_point[id]-=1
player_agility[id]+=1
player_damreduction[id] = (47.3057*(1.0-floatpower( 2.7182, -0.06798*float(player_agility[id])))/50)
}
else client_print(id,print_center,"Maxymalny poziom zrecznosci osiagniety")
}
case 3:
{
if (player_dextery[id]<max_zwin)
{
player_point[id]-=1
player_dextery[id]+=1
set_speedchange(id)
}
else client_print(id,print_center,"Maxymalny poziom zwinnosci osiagniety")
}
case 4:
{
if (player_point[id]+player_intelligence[id] <= max_int)
{
player_intelligence[id]+=player_point[id]
player_point[id]=0
}
else
{
player_point[id]-=max_int-player_intelligence[id]
player_intelligence[id]=max_int
client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
}
}
case 5:
{
if (player_point[id]+player_strength[id] <= max_sila)
{
player_strength[id]+=player_point[id]
player_point[id]=0
}
else
{
player_point[id]-=max_sila-player_strength[id]
player_strength[id]=max_sila
client_print(id,print_center,"Maxymalny poziom sily osiagniety")
}
}
case 6:
{
if (player_point[id]+player_agility[id]<max_zre)
{
player_agility[id]+=player_point[id]
player_point[id]=0
}
else
{
player_point[id]-=max_zre-player_agility[id]
player_agility[id]=max_zre
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_zwin)
{
player_dextery[id]+=player_point[id]
player_point[id]=0
}
else
{
player_point[id]-=max_zwin-player_dextery[id]
player_dextery[id]=max_zwin
client_print(id,print_center,"Maxymalny poziom zwinnosci osiagniety")
}
set_speedchange(id)
}
}
if (player_point[id] > 0)
skilltree(id)
return PLUGIN_HANDLED
}
Dodano 25 czerwiec 2011 - 16:51:
Poprawiłem trochę.
Dodano 26 czerwiec 2011 - 20:33:
Leo da radę coś z tym zrobić ?
Dodano 27 czerwiec 2011 - 12:48:
Okey działa, myśle że wina stała po stronie określenia zmiennych lokalnych w publicu skilltree, zamiast skill_menu.
Użytkownik Death_Player edytował ten post 27.06.2011 12:35
yetj
05.07.2011
Nie żebym się czepiał ale, żeby to zadziałało poprawnie i się poprawnie skompilowało to wszystko od
do samego
powinno znajdować się pod
W przeciwnym wypadku kompilator pluje błędami i jak by nie było ma rację, bo w funkcji skilltree() nie używasz zadeklarownych zmiennych, a w skill_menu() nie ma takich zmiennych.
Dodatkowo cała ta pętla nie zawiera deklaracji zmiennej i
oraz jest zbędna bo można ją zastąpić zwykłym mnożeniem:
Czyli całość powinna wyglądać mniej więcej tak:
/* Start - Limit Statów */
do samego
/* Koniec - Limit Statów */
powinno znajdować się pod
public skill_menu(id, key)
{
W przeciwnym wypadku kompilator pluje błędami i jak by nie było ma rację, bo w funkcji skilltree() nie używasz zadeklarownych zmiennych, a w skill_menu() nie ma takich zmiennych.
Dodatkowo cała ta pętla nie zawiera deklaracji zmiennej i
for(i=0;i<player_lvl[id];i++)
max_lvl_stats+=1
oraz jest zbędna bo można ją zastąpić zwykłym mnożeniem:
max_lvl_stats = player_lvl[id] * 2
Czyli całość powinna wyglądać mniej więcej tak:
Spoiler
Dalinor
05.07.2011
@UP
Ty wiesz do czego jest ta pętla ? ...
Czytanie ze zrozumieniem
Ty wiesz do czego jest ta pętla ? ...
dostajemy na 2 lvl'u 2 punkty do rozdania, ale możemy dodać tylko po jednym do każdej statystyki! Nie można dać wszystkich dwóch w siłę.
Czytanie ze zrozumieniem

yetj
05.07.2011
Ale czy to co ja napisałem nie jest równe tej pętli?
Oczywiście, że jest i jest dużo prostsze w wykonaniu, a efekt ten sam.
Oczywiście, że jest i jest dużo prostsze w wykonaniu, a efekt ten sam.