←  Poradniki oraz Łatki

AMXX.pl: Support AMX Mod X i SourceMod

»

Tutorial
Inny limit punktów dla każdej klasy

JLB. Leo - zdjęcie 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:

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
Odpowiedz

  • +
  • -
Death_Player - zdjęcie 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)."

      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
Odpowiedz

JLB. Leo - zdjęcie JLB. Leo 20.06.2011

pokaż proszę całą funkcję
Odpowiedz

  • +
  • -
Death_Player - zdjęcie 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
Odpowiedz

  • +
  • -
yetj - zdjęcie yetj 05.07.2011

Nie żebym się czepiał ale, żeby to zadziałało poprawnie i się poprawnie skompilowało to wszystko od
/* 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
Odpowiedz

  • +
  • -
Dalinor - zdjęcie Dalinor 05.07.2011

@UP
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 ^^
Odpowiedz

  • +
  • -
yetj - zdjęcie 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.
Odpowiedz