←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Pytania dotyczące klas

  • +
  • -
Krejzol - zdjęcie Krejzol 07.02.2011

Witam, posiadam wersję diablo 5.9l.

Mam pytanie a mianowicie:
1. Jak zrobić żeby dana klasa miała na nożu moc za pomocą której odnawia sobie magazynek?

Za każdą pomocną odpowiedź będę nagradzał.
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 07.02.2011

case Twoja_Klasa:
		{
			show_hudmessage(id, "Dostales naboje.") 
			fm_give_item(id, "ammo_357sig")
			fm_give_item(id, "ammo_762nato")
			fm_give_item(id, "ammo_45acp")
			fm_give_item(id, "ammo_556nato")
			fm_give_item(id, "ammo_9mm")
			fm_give_item(id, "ammo_57mm")
			fm_give_item(id, "ammo_45acp")
			fm_give_item(id, "ammo_556nato")
			fm_give_item(id, "ammo_338magnum")
			fm_give_item(id, "ammo_556natobox")
			fm_give_item(id, "ammo_50ae")
			fm_give_item(id, "ammo_357sig")
			fm_give_item(id, "ammo_762nato")
			fm_give_item(id, "ammo_45acp")
			fm_give_item(id, "ammo_556nato")
			fm_give_item(id, "ammo_9mm")
			fm_give_item(id, "ammo_57mm")
			fm_give_item(id, "ammo_45acp")
			fm_give_item(id, "ammo_556nato")
			fm_give_item(id, "ammo_338magnum")
			fm_give_item(id, "ammo_556natobox")
			fm_give_item(id, "ammo_50ae")
			fm_give_item(id, "ammo_357sig")
			fm_give_item(id, "ammo_762nato")
			fm_give_item(id, "ammo_45acp")
			fm_give_item(id, "ammo_556nato")
			fm_give_item(id, "ammo_9mm")
			fm_give_item(id, "ammo_57mm")
			fm_give_item(id, "ammo_45acp")
			fm_give_item(id, "ammo_556nato")
			fm_give_item(id, "ammo_338magnum")
			fm_give_item(id, "ammo_556natobox")
			fm_give_item(id, "ammo_50ae")
		}
Oczywiście można krócej ale mam tak w swoim i działa to nie bd. eksperymentował :D

Do call_cast jeżeli chcesz żeby od razu dawało skróć czas na 0.0 , jeśli chodziło Ci że np. masz nóż i naciśniesz E to dostajesz to powiedz , załatwimy to inaczej...
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 08.02.2011

O to mi chodziło. Kolejne pytania.

Jak zrobić żeby klasa X miała Y niewidzialności?(chodzi o zmniejszenie widoczności tej klasy)
Posiadam frakcje i mam tam bogów (klasy premium). Jak zrobić żeby tylko do tego menu mogli wchodzić gracze z odpowiednią flagą, a jeśli ktoś nie posiada to pokazywał mu się dany tekst?
Robiłem według tego tutoriala [Tutorial] Dodawnie mocy do klasy. - AMXX.pl: Support AMX Mod X lecz nie mam dodatkowych skoków w klasie. (Posiadam frakcje)
public ShowKlasy(id,lx[]) {
new text2[512]
asked_klass[id]=0
format(text2, 511,"\yPotwory: ^n\w1. \yAdariel^t\wLevel: \r%i^n\w2. \yMefisto^t\wLevel: \r%i^n\w3. \yDiablo^t\wLevel: \r%i^n\w4. \yBaal^t\wLevel: \r%i^n\w5. \ySzaman^t\wLevel: \r%i^n\w6. \ySzkielet^t\wLevel: \r%i^n\w7. \yIzual^t\wLevel: \r%i^n\w8. \yDuriel^t\wLevel: \r%i^n^n\r9. \wWstecz",player_class_lvl[id][9],player_class_lvl[id][10],player_class_lvl[id][11],player_class_lvl[id][12],player_class_lvl[id][13],player_class_lvl[id][14],player_class_lvl[id][15],player_class_lvl[id][16])

new szosta
szosta = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)
show_menu(id, szosta,text2, -1, "Klasy")

}
public PressedKlasy(id, key) {
/* Menu:
* Wybierz klase:
* 1:klasa1
* 2:klasa2
* 3:klasa3
* 4:klasa4
* 5:klasa5
* 6:klasa6
* 7:klasa7
* 8:klasa8
* 9:Wstecz
*/
new lx[19] // <-- tutaj wpisz liczbę swoich klas + 1(none)
g_haskit[id] = 0
odrodzenie[id] = 0
c_jump[id] = 0

switch (key) {
case 0:
{
player_class[id] = Adariel
c_jump[id] = 1
LoadXP(id, player_class[id])
}
case 1:
{
player_class[id] = Mefisto
LoadXP(id, player_class[id])
}
case 2:
{
player_class[id] = Diablo
odrodzenie[id] = 3
LoadXP(id, player_class[id])
}
case 3:
{
player_class[id] = Baal
c_jump[id] = 3
LoadXP(id, player_class[id])
}
case 4:
{
player_class[id] = Szaman
player_c_fireball[id] = 300
LoadXP(id, player_class[id])
}
case 5:
{
player_class[id] = Szkielet
LoadXP(id, player_class[id])
}
case 6:
{
player_class[id] = Izual
LoadXP(id, player_class[id])
}
case 7:
{
player_class[id] = Duriel
LoadXP(id, player_class[id])
}
case 8:
{
select_class(id,lx)
}
}
CurWeapon(id)
give_knife(id)
changeskin(id,1)

return PLUGIN_HANDLED
}

Tak to wygląda.
Użytkownik Krejzol edytował ten post 08.02.2011 16:47
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 08.02.2011

Jeżeli chodzi o frakcje i Premium to poszukaj
public select_class_menu(id, key)

o ile to było robione według poradnika.
następnie w danym Case od premium dodaj

 case 2: 
{
if( get_user_flags(id) & ADMIN_LEVEL_A)
{
Funkcja_odwołująca_do_publica_premium(id,lx)
}
else
{
set_hudmessage(220, 30, 30, -1.0, 0.40, 0, 3.0, 2.0, 0.2, 0.3, 5)
show_hudmessage(id, "Tylko dla Premium")
}
}



Skoki:
Na pewno nie dodałeś tego w posthinku
znajdź
public client_PostThink( id )

zmień
if (player_b_jumpx[id] > 0) Postthink_Doubeljump(id)

na:
if (player_b_jumpx[id] > 0 || c_jump[id] > 0) Postthink_Doubeljump(id)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 08.02.2011

Co do skoków -> Problem - Tutorial - AMXX.pl: Support AMX Mod X

P.S. Po co w każdym "case" dodajesz "LoadXP(id, player_class[id])"?
Użytkownik sebul edytował ten post 08.02.2011 17:36
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 08.02.2011

P.S. Po co w każdym "case" dodajesz "LoadXP(id, player_class[id])"?


Gdy posiadam na serwerze prawie 20 klas, serwer troche przymula załadowanie klas a gdy jest użyte w/w komenda to od razu załapuje :-)

P.S. Jak zrobić żeby klasa miała mniejszą widoczność ?
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 08.02.2011

W miejsce XXX!!! wstaw widoczność (max. 255 - normalnie)

else if (player_class[id] == TwojaKlasa
{
new inv_bonus = 255 - player_b_inv[id]
render = XXX!!!

if(player_b_inv[id]>0)
{
while(inv_bonus>0)
{
inv_bonus-=XXX!!!
render--
}
}

if(player_b_usingwind[id]==1)
{
render/=2
}

if(render<0) render=0

if(HasFlag(id,Flag_Moneyshield)||HasFlag(id,Flag_Rot)||HasFlag(id,Flag_Teamshield_Target)) render*=2

set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, render)
}
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 08.02.2011

Gdy posiadam na serwerze prawie 20 klas, serwer troche przymula załadowanie klas a gdy jest użyte w/w komenda to od razu załapuje :-)

A nie lepiej tak
(...)
case 6:
{
player_class[id] = Izual
}
case 7:
{
player_class[id] = Duriel
}
case 8:
{
select_class(id,lx)
return PLUGIN_HANDLED
}
}
LoadXP(id, player_class[id])
CurWeapon(id)
(...)

?? Wychodzi na to samo...
Użytkownik sebul edytował ten post 08.02.2011 18:34
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 08.02.2011

@Skrzato
A do której funkcji to podpiąć?
@sebul
No wydaje się że to samo ale tak naprawdę nie jest to to samo, wychodzi w na serwerze że gdy jest przy każdej postaci to szybciej łapie.
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 08.02.2011

public set_renderchange(id)
Odpowiedz

  • +
  • -
sebul - zdjęcie sebul 08.02.2011

Znajdź w "set_renderchange"
if (player_class[id] == Ninja)

i tam niżej dodaj ten kod, a co do tego wczytywania, to u mnie nie ma z tym problemu.
Użytkownik sebul edytował ten post 08.02.2011 18:39
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 08.02.2011

Dobra dziękuje, działa + lecą.

Jak zrobić żeby danej klasy nie było słychać kroków?
Jak zrobić żeby dana klasa mogła osiągnąć tylko określoną ilość danej statystyki? Np. maksymalnie może posiadać 50 inteligencji
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 08.02.2011


public client_PreThink ( id )

zmień

if (((player_b_silent[id] > 0) || (player_class[id] == Zabojca)) && is_user_alive(id))
entity_set_int(id, EV_INT_flTimeStepSound, 300)

na:

if (((player_b_silent[id] > 0) || (player_class[id] == Zabojca) || (player_class[id] == TwojaKlasa)) && is_user_alive(id))
entity_set_int(id, EV_INT_flTimeStepSound, 300)



Co do 2 to najprostszy sposób:

public skill_menu(id, key)

i zmieniasz każde:

if (player_intelligence[id]<200)

na:

if ((player_intelligence[id]<XXX && player_class[id]==TwojaKlasa) || (player_intelligence[id]<XXX && player_class[id]==TwojaKlasa2))

i tak dalej dla każdej klasy, to jest najprostszy, aczkolwiek upierdliwy sposób
Użytkownik Skrzato edytował ten post 08.02.2011 18:58
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 08.02.2011

A jakiś inny sposób? Bo do 20 klas będzie troche długo się to robiło
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 08.02.2011

czy tu czy w jakimś publicu, i tak byś zapewne musiał zdefiniować to wszystko, więc nie mam co sobie głowy innymi rozwiązaniami zawracać :D
Odpowiedz

  • +
  • -
KariiO - zdjęcie KariiO 08.02.2011

Daj warunek że jeżeli ma "tą" flagę ma inne max skille a jak nie to standardowe czy jakie tam chcesz...
Wygląda to mało skomplikowanie:
Warunek na 4 max skille + powpisywanie...
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 08.02.2011

O ile dobrze zrozumiałem to chodzi Ci o to że Premium moga mieć więcej statystyk.
Jeżeli tak to zastosuj takie rozwiązanie:

if( get_user_flags(id) & ADMIN_LEVEL_A)
{
if(player_intelligence[id]<250)
{
player_point[id]-=1
player_intelligence[id]+=1
}
else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
}
else if(player_intelligence[id]<200)
{
player_point[id]-=1
player_intelligence[id]+=1
}
else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
}


Tu gdzie 250 to jest max premium, a tu gdzie 200 to zwykly
Użytkownik Skrzato edytował ten post 08.02.2011 21:53
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 09.02.2011

A jeśli chcę by dana klasa miała max. skilla to muszę tak
                if(player_class[id] == NazwaKlasy)
{
if(player_intelligence[id]<250)
{
player_point[id]-=1
player_intelligence[id]+=1
}
else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
}
else if(player_intelligence[id]<200)
{
player_point[id]-=1
player_intelligence[id]+=1
}
else client_print(id,print_center,"Maxymalny poziom inteligencji osiagniety")
}

?
Odpowiedz

  • +
  • -
dRaq - zdjęcie dRaq 09.02.2011

W zasadzie będzie działać, ale upierdliwy sposób, ten wyżej lepszy ;D
Odpowiedz

  • +
  • -
Krejzol - zdjęcie Krejzol 09.02.2011

@up
Chcę tylko, do danej klasy.

Jak zrobić żeby dana klasa mogła osiągnąć tylko określoną ilość danej statystyki? Np. maksymalnie może posiadać 50 inteligencji


Dodatkowe pytania

Jak zrobić by dana klasa miała 1/x na oślepienie gracza? (ala b_blink)
Jak zrobić by dana klasa dostawała więcej kasy na start?
Odpowiedz