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

[ Xp Mod ] jak wywołać poprawnie funkcje...


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

#1 AmD

    aemde

  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 01.11.2010 16:06

Witam!

mam problem z funkcja którą muszę wywołać by gracz dostał level w xp modzie...
Ponieważ u mnie nie ma Rund, ani 2 Drużyn, moja funkcja musi być wywołana w taki sposób by dawała Punkty Skilli tylko wtedy jeśli gracz zdobył level....
tak wygląda moja funkcja:

public eDeath(id)
{

//new attacker = read_data( 1 );

if(PlayerXP[id] >= LEVELS[PlayerLevel[id]])
PlayerLevel[id] += 1;
SkillPoints[id] += 1;
ColorChat(id, GREEN,"[%s]^x01: Gratuluje, wbiles poziom ! Twoj Poziom to :^x03 %d^x01, posiadasz :^x03 %d^x01 punktow skilli.",prefix,PlayerLevel[id],SkillPoints[id]);
ColorChat(id, GREEN,"[%s]^x01: Punkty Skilli Mozesz Wykorzystac Wpisujac w say ^x03/xp^x01",prefix);
}

wywoływałem ją w tasku co 5sec ale był mały bug który dawał graczowi ciągle owe Punkty Skilli...
Wydaję się mnie że to może być spowodowanym tym że u mnie każdy gracz zaczyna od poziomu 0 (nie wiem jak zmienić na 1)

Więc moje pytanie jest takie: Jak Wywołać WW. Funkcję by działała poprawnie?

Pozdrawiam!

Użytkownik AmD edytował ten post 01.11.2010 16:06

  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 01.11.2010 16:24

co prawda
PlayerLevel[id] += 1;
SkillPoints[id] += 1;
można zamienić na
PlayerLevel[id]++
SkillPoints[id]++

ale reszta kodu jest poprawna
pokaż więcej
  • +
  • -
  • 1

#3 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 01.11.2010 16:33

wiem że kod jest dobry...
chce tylko wiedzieć jak go wywołać by nie dawało to ciągle PTK skilli..
Normalnie w XP modzie korzysta się z eventu oraz tablic z read_data (chodzi mi o attacker, victim, itp).
U mnie nie ma kto walczyć dla tego potrzebuje to zrobić tak by działało bez tych tablic...
ale jak chcesz to dam ci kod na PW.
  • +
  • -
  • 0

#4 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 01.11.2010 16:43

hmm nie rozumiem ;D co chcesz zrobić ?
  • +
  • -
  • 0

#5 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 01.11.2010 17:01

teraz dany kod mam uruchamiany przez taska...
ale problem z tym gdyż funkcja miala sprawdzać czy gracz ma wystarczająco expa, jeśli tak dać mu lvl i ptk skilli, nie mogę powiedzieć że nie sprawdza, ale daje ciągle Ptk Skkili gdy gracz nawet nie ma LVL, (ustawiłem taska na 1.0 sec czyli co 1.0 sec gracz dostawał ptk skilli gdy nie miał levela).

Kolejna sprawa jest taka (to już prywatna) dałem ci na PW kod możesz zobaczyć co jest znów z grawitacją? bo nie działa :D kiedyś pisałem temat o tym ty mi pomogłeś i działało ale niestety przestało :(

oraz kolejna sprawa...(tak wiem, truje wam tyłki, wam się tego czytać nie chce, ale ja jestem tylko człowiekiem i popełniam błędów masę..)
Ponieważ mój serwer Stoi na Gamesolu (niestety) mam probłem z wyświetlaniem informacji XP moda w HUDzie...
Wywoływałem to jak chyba każdy:

register_forward(FM_PlayerPreThink, "hud_prethink");

ale tak nie mogę bo wtedy są lagi na serwerze, nie mogę też taskiem bo będzie crash, chwilowo wymyśliłem by funkcję włączać w say ale ile tak można?
macie jakie pomysły jak to wywołać dla gracza?


Dzięki.
  • +
  • -
  • 0

#6 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 02.11.2010 17:34

@ref

dałem sobie radę z funkcją pierwszego posta oraz Informacjami HUD...
ale nadal nie wiem jak naprawić grawitację...

teraz mam tak:

RegisterHam( Ham_Spawn, "player" , "spawned" , 1 );

public spawned() {

for (new id=1; id < 32; id++){
if(!is_user_alive(id)){
return HAM_IGNORED;
}
new Float:graw = get_user_gravity(id)

if(PtkGraw[id] > 0){
switch(PtkGraw[id]){
case 1: set_user_gravity(id, graw -0.1)
case 2: set_user_gravity(id, graw -0.10)
case 3: set_user_gravity(id, graw -0.11)
case 4: set_user_gravity(id, graw -0.12)
case 5: set_user_gravity(id, graw -0.13)
case 6: set_user_gravity(id, graw -0.14)
case 7: set_user_gravity(id, graw -0.15)
case 8: set_user_gravity(id, graw -0.16)
case 9: set_user_gravity(id, graw -0.17)
case 10: set_user_gravity(id, graw -0.18)
case 11: set_user_gravity(id, graw -0.19)
case 12: set_user_gravity(id, graw -0.20)
case 13: set_user_gravity(id, graw -0.21)
case 14: set_user_gravity(id, graw -0.22)
case 15: set_user_gravity(id, graw -0.23)
case 16: set_user_gravity(id, graw -0.24)
case 17: set_user_gravity(id, graw -0.25)
case 18: set_user_gravity(id, graw -0.26)
case 19: set_user_gravity(id, graw -0.27)
case 20: set_user_gravity(id, graw -0.28)
case 21: set_user_gravity(id, graw -0.29)
case 22: set_user_gravity(id, graw -0.30)
case 23: set_user_gravity(id, graw -0.35)
}

}
}
return HAM_IGNORED
}


i zamiast ustawić graczowi Odpowiednią grawitację to ustawia -100 (podajże) [krótko mówiąc po spawnie gracz leci w powietrze]
a dodam że u mnie każdy respi się gdy zechce (funkcją)
  • +
  • -
  • 0

#7 Gość_Aik_*

  • Gość

Reputacja: 0

Offline

Napisano 02.11.2010 21:23

Problem w tym że zrobiłeś jeden mały błąd:

public eDeath(id)
{

//new attacker = read_data( 1 );

if(PlayerXP[id] >= LEVELS[PlayerLevel[id]])
PlayerLevel[id] += 1;

SkillPoints[id] += 1;
ColorChat(id, GREEN,"[%s]^x01: Gratuluje, wbiles poziom ! Twoj Poziom to :^x03 %d^x01, posiadasz :^x03 %d^x01 punktow skilli.",prefix,PlayerLevel[id],SkillPoints[id]);
ColorChat(id, GREEN,"[%s]^x01: Punkty Skilli Mozesz Wykorzystac Wpisujac w say ^x03/xp^x01",prefix);

}

jak masz ten kod to po if jest zawsze wykonywana jedna instrukcja czyli w tym wypadku jak warunek jest spełniony do zwiększasz komuś "PlayerLevel[id] += 1;" i dodajesz pkt +wyświetlasz info, jak warunek jest nie spełniony to dodajesz pkt i wyświetlasz info(mam nadzieję że już widzisz na czym polega błąd).

Żeby działało musisz zrobić tak:
public eDeath(id) 
{

//new attacker = read_data( 1 );

if(PlayerXP[id] >= LEVELS[PlayerLevel[id]]){
PlayerLevel[id] += 1;
SkillPoints[id] += 1;
ColorChat(id, GREEN,"[%s]^x01: Gratuluje, wbiles poziom ! Twoj Poziom to :^x03 %d^x01, posiadasz :^x03 %d^x01 punktow skilli.",prefix,PlayerLevel[id],SkillPoints[id]);
ColorChat(id, GREEN,"[%s]^x01: Punkty Skilli Mozesz Wykorzystac Wpisujac w say ^x03/xp^x01",prefix);
}
}

lub tak:
public eDeath(id) 
{

//new attacker = read_data( 1 );

if(PlayerXP[id] < LEVELS[PlayerLevel[id]])
return PLUGIN_CONTINUE
PlayerLevel[id] += 1;
SkillPoints[id] += 1;
ColorChat(id, GREEN,"[%s]^x01: Gratuluje, wbiles poziom ! Twoj Poziom to :^x03 %d^x01, posiadasz :^x03 %d^x01 punktow skilli.",prefix,PlayerLevel[id],SkillPoints[id]);
ColorChat(id, GREEN,"[%s]^x01: Punkty Skilli Mozesz Wykorzystac Wpisujac w say ^x03/xp^x01",prefix);
}




A co do 2 po śmierci zmieniasz userowi grawitacje na standardową? Bo może tak ciągle odejmujesz czy coś w tym stylu.
Najlepiej sprawdź ile razy Ci się wywołuje i na jaki poziom ustawia.


if(!is_user_alive(id) && get_user_gravity(id)!=1){
return HAM_IGNORED;
}

Ten warunek możesz jeszcze zmienić na taki, wtedy gdy grawitacja jest różna od standardowej to po prostu już komuś nie zmieni, bo znaczy to że była już zmieniana.

Użytkownik Aik edytował ten post 02.11.2010 22:38


#8 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 02.11.2010 23:09

ok, sprawdzę twoją funkcję.

co do gravitacji to na róznych mapach jest różna grawitacja...

wszystko ustawia się podczas zmiany mapy (w folderze configs zrobiłem folder map a tam pliki cfg z nazwami map serwera [ jeśli gravity na dannej mapie ma być inne to jest plik oczywiście]) cvarem sv_gravity.

powiedzmy że na DD mam gravity 800 ale już na DD2 zmienione do 500 (muszę niestety tak robić, bo mój serwer to KZ/BH i niektóre mapy są cięęężkie do przejścia bez gravity)

zauważyłem że jak dałem by funkcja była wykonana przez wpisanie w konsoli komendy to zmieniało gravitację dla każdego (a w pętli przecież jest id=1)
ale nie wiem czy mogę usunąć pętlę... (wydaje mi się że tak.)

a i chyba zapomniałeś w tym 2 kodzie eDeath o jeszcze jednym returnie :)

Użytkownik AmD edytował ten post 02.11.2010 23:11

  • +
  • -
  • 0

#9 Gość_Aik_*

  • Gość

Reputacja: 0

Offline

Napisano 03.11.2010 18:30

a i chyba zapomniałeś w tym 2 kodzie eDeath o jeszcze jednym returnie :)

Możliwe z głowy pisałem :P

Hmm skoro mówisz że na różnych mapach różna grawitacja, to może w takim razie coś w tym stylu:

new Float:standardowa_grawitacja;

RegisterHam( Ham_Spawn, "player" , "spawned" , 1 );
public client_connect(id)
{
standardowa_grawitacja=get_user_gravity(id);
}
public spawned() {

for (new id=1; id < 32; id++){
if(!is_user_alive(id) && get_user_gravity(id)!= standardowa_grawitacja){
return HAM_IGNORED;
}
new Float:graw = get_user_gravity(id)

if(PtkGraw[id] > 0){
switch(PtkGraw[id]){
case 1: set_user_gravity(id, graw -0.1)
case 2: set_user_gravity(id, graw -0.10)
case 3: set_user_gravity(id, graw -0.11)
case 4: set_user_gravity(id, graw -0.12)
case 5: set_user_gravity(id, graw -0.13)
case 6: set_user_gravity(id, graw -0.14)
case 7: set_user_gravity(id, graw -0.15)
case 8: set_user_gravity(id, graw -0.16)
case 9: set_user_gravity(id, graw -0.17)
case 10: set_user_gravity(id, graw -0.18)
case 11: set_user_gravity(id, graw -0.19)
case 12: set_user_gravity(id, graw -0.20)
case 13: set_user_gravity(id, graw -0.21)
case 14: set_user_gravity(id, graw -0.22)
case 15: set_user_gravity(id, graw -0.23)
case 16: set_user_gravity(id, graw -0.24)
case 17: set_user_gravity(id, graw -0.25)
case 18: set_user_gravity(id, graw -0.26)
case 19: set_user_gravity(id, graw -0.27)
case 20: set_user_gravity(id, graw -0.28)
case 21: set_user_gravity(id, graw -0.29)
case 22: set_user_gravity(id, graw -0.30)
case 23: set_user_gravity(id, graw -0.35)
}

}
}
return HAM_IGNORED
}


Ps. na razie nic lepszego mi do głowy nie przychodzi.

Użytkownik Aik edytował ten post 03.11.2010 18:31


#10 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 03.11.2010 18:54

public client_connect(id)
{
standardowa_grawitacja=get_user_gravity(id);
}
i
if(!is_user_alive(id) && get_user_gravity(id)!= standardowa_grawitacja){
return HAM_IGNORED;
}
masz błędy

jeżeli dobrze czytam dokumentacje wartość gravity nie musisz odczytywać
set_user_gravity(id, 0,8) dla cvaru sv_gravity 800 != set_user_gravity(id, 0,8) dla cvaru sv_gravity 500
  • +
  • -
  • 1

#11 AmD

    aemde

  • Autor tematu
  • Użytkownik

Reputacja: 71
Pomocny

  • Postów:500
  • Steam:steam
  • Imię:Dariusz
  • Lokalizacja:Częstochowa
Offline

Napisano 03.11.2010 19:02

dobra dzięki. zrobiłem to patologicznie ale działało (usunąłem pętle i dałem sprawdzanie grawitacji gdy ktoś naciśnie przycisk Start[i tak muszą go naciskać]

Można close.
  • +
  • -
  • 0




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

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