Witam, zrobiłem dwie klasy. Testując je na botach nic nie dziala ;x. Komplują sie bez błędów. Mógłby mi powiedzieć czy są dobrze napisane ?? Czy opis klasy zgadza z tym co jest w warunkach ?
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.
|


Najlepsza odpowiedź BlackPerfum, 06.07.2014 18:37
Błędy/możliwości optymalizacje znalezione przeze mnie:
W lekkim wsparciu:
• Ta zmienna:
new Float:redukcja_obrazen_gracza[33];nie musi być globalna a nawet wcale nie musi jej być
• Jeśli tworzysz zmienną:
new ma_klase[33]w której chcesz przetrzymywać tylko dwie możliwe wartości to polecam by ta zmienna posiadała odpowiedni typ tzn. przedrostek bool: przy tworzeniu:
new bool:ma_klase[33]• Poczytaj sobie o możliwych wartościach w 3 parametrze register_event

register_event("DeathMsg", "Death", "ade")• Jeśli zmieniasz wartość jednego z argumentów w hamsandwichu to powinnieneś zwrócić
HAM_HANDLEDW marszalku:
• tak jak Wielkie Jol napisał nie wychwytujesz kiedy gracz będzie grał daną klasą

• Stała:
#define DMG_BULLET (1<<1)jest już zdefiniowana w pliku nagłówkowym
• Nie ma sensu łapać 2x dokładnie ten sam event:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); RegisterHam(Ham_TakeDamage, "player", "DMG");• Przestraszyłem się:
public DMG(this, idinflictor, idattacker, Float:damage, damagebits) { if(!ma_klase[idattacker]) return HAM_IGNORED; // Najpierw sprawdzaj czy gracz jest podłączony bo jeśli jakiś byt (nie gracz) zabije gracza // to wyskoczy log index out of bounds tzn. bo zmienna "ma_klase" ma tylko 33 kamórki (ale index ostatniej to 32 bo pierwszej == 0) a ten byt będzie posiadał id > 32 :( if(!is_user_connected(this)) return HAM_IGNORED; if(damage<=0) return HAM_IGNORED; //To akurat nie ma sensu bo załóżmy że jakiś inny plugin zmodyfikował dmg tak że jest mniejsze od 0 //myśląc logicznie dmg nie ma prawa być mniejsze od zera a nawet więcej powinno byc większe od zera //bo przestało by być obrażeniami!! if(random_num(1, 1)!=1) return HAM_IGNORED; //to tak samo jak bym zrobił tak: // if(!true) return HAM_IGNORED //Nigdy się nie spełni warunek if(get_user_team(this)==get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_USP && damagebits & DMG_BULLET) cod_inflict_damage(idattacker, this, damage*2.0, 0.0, idinflictor, damagebits); //zacznijmy od tego że robiąc tak nie podwojisz graczy dmg a potrojisz!! Bo funkcja: cod_inflict_damage //nie zwiększa dmg a je zadaje czyli jeśli gracz zada 10 dmg to dodatkowo jeszcze 20 a zatem łącznie zada 30 dmg!! //Ponadto tej funkcji nie powinno sie stosować do (pseudo)zwiększania dmg bo te dmg nie będzie wykrywane przez Ham_TakeDamage //a zatem inne pluginy kożystające z tego eventu nie będą mogły wychwycić tego dmg!!! return HAM_IGNORED; }• Twoja funkcja na 1/4 z he ma 99.(9)% że zadzaiła nie wtedy kiedy powinna!! Dlaczego? Przypatrz się:
if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_HEGRENADE && damagebits & DMG_HEGRENADE && random_num(1, 4) == 1)Pomińmy zbędne rzeczy:
if(get_user_weapon(idattacker) == CSW_HEGRENADE)Teraz pytanie kiedy funkcja get_user_weapon



• Używając tego:
cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits)nie zabijesz gracza a jedynie zadasz mu dmg które może(nie musi!!) go zabić. Funkcja na zabijanie gracza: http://amxx.pl/topic...nie-gracza-zarządzanie-broniami/
Naprawione klasy: Przejdź do postu

#1
Napisano 06.07.2014 17:00
#2
Napisano 06.07.2014 17:07
co do klasy Lekkie Wsparcie - Opis +20 expa za zabójstwo a w pliku klasy .sma jest
cod_set_user_xp(attacker, cod_get_user_xp(attacker)+10000);
a co do klasy 2 to chyba jest dobrze.
#3
Napisano 06.07.2014 17:20
Tak, wiem że jest 10000 ale zmieniłem to na 20 i tez nie dziala. Czy może to tylko nie działa na Botach ??
#4
Napisano 06.07.2014 17:35
w masz wgrany silnik COD'a ? + klasy dopisane do plugins.ini albo plugins-cod.ini ?
#5
Napisano 06.07.2014 17:42
Taaak! ; /
#6
Napisano 06.07.2014 17:46
Z tego co w marszałku zauważyłem, nie ma funkcji cod_class_disabled/enabled tak na pierwszy rzut oka,
"Żaden etyczny inżynier oprogramowania nie zgodzi się napisać procedury zniszczBagdad. Jego poczucie etyki domaga się, aby napisał procedurę zniszczMiasto, a Bagdad przekazał jako parametr" - Nathaniel Borenstein.
#7
Napisano 06.07.2014 18:37 Najlepsza odpowiedź
W lekkim wsparciu:
• Ta zmienna:
new Float:redukcja_obrazen_gracza[33];nie musi być globalna a nawet wcale nie musi jej być
• Jeśli tworzysz zmienną:
new ma_klase[33]w której chcesz przetrzymywać tylko dwie możliwe wartości to polecam by ta zmienna posiadała odpowiedni typ tzn. przedrostek bool: przy tworzeniu:
new bool:ma_klase[33]• Poczytaj sobie o możliwych wartościach w 3 parametrze register_event

register_event("DeathMsg", "Death", "ade")• Jeśli zmieniasz wartość jednego z argumentów w hamsandwichu to powinnieneś zwrócić
HAM_HANDLEDW marszalku:
• tak jak Wielkie Jol napisał nie wychwytujesz kiedy gracz będzie grał daną klasą

• Stała:
#define DMG_BULLET (1<<1)jest już zdefiniowana w pliku nagłówkowym
• Nie ma sensu łapać 2x dokładnie ten sam event:
RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); RegisterHam(Ham_TakeDamage, "player", "DMG");• Przestraszyłem się:
public DMG(this, idinflictor, idattacker, Float:damage, damagebits) { if(!ma_klase[idattacker]) return HAM_IGNORED; // Najpierw sprawdzaj czy gracz jest podłączony bo jeśli jakiś byt (nie gracz) zabije gracza // to wyskoczy log index out of bounds tzn. bo zmienna "ma_klase" ma tylko 33 kamórki (ale index ostatniej to 32 bo pierwszej == 0) a ten byt będzie posiadał id > 32 :( if(!is_user_connected(this)) return HAM_IGNORED; if(damage<=0) return HAM_IGNORED; //To akurat nie ma sensu bo załóżmy że jakiś inny plugin zmodyfikował dmg tak że jest mniejsze od 0 //myśląc logicznie dmg nie ma prawa być mniejsze od zera a nawet więcej powinno byc większe od zera //bo przestało by być obrażeniami!! if(random_num(1, 1)!=1) return HAM_IGNORED; //to tak samo jak bym zrobił tak: // if(!true) return HAM_IGNORED //Nigdy się nie spełni warunek if(get_user_team(this)==get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_USP && damagebits & DMG_BULLET) cod_inflict_damage(idattacker, this, damage*2.0, 0.0, idinflictor, damagebits); //zacznijmy od tego że robiąc tak nie podwojisz graczy dmg a potrojisz!! Bo funkcja: cod_inflict_damage //nie zwiększa dmg a je zadaje czyli jeśli gracz zada 10 dmg to dodatkowo jeszcze 20 a zatem łącznie zada 30 dmg!! //Ponadto tej funkcji nie powinno sie stosować do (pseudo)zwiększania dmg bo te dmg nie będzie wykrywane przez Ham_TakeDamage //a zatem inne pluginy kożystające z tego eventu nie będą mogły wychwycić tego dmg!!! return HAM_IGNORED; }• Twoja funkcja na 1/4 z he ma 99.(9)% że zadzaiła nie wtedy kiedy powinna!! Dlaczego? Przypatrz się:
if(get_user_team(this) != get_user_team(idattacker) && get_user_weapon(idattacker) == CSW_HEGRENADE && damagebits & DMG_HEGRENADE && random_num(1, 4) == 1)Pomińmy zbędne rzeczy:
if(get_user_weapon(idattacker) == CSW_HEGRENADE)Teraz pytanie kiedy funkcja get_user_weapon



• Używając tego:
cod_inflict_damage(idattacker, this, float(get_user_health(this))-damage+1.0, 0.0, idinflictor, damagebits)nie zabijesz gracza a jedynie zadasz mu dmg które może(nie musi!!) go zabić. Funkcja na zabijanie gracza: http://amxx.pl/topic...nie-gracza-zarządzanie-broniami/
Naprawione klasy:
Załączone pliki
Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!
Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji

Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują

#8
Napisano 06.07.2014 18:38
@UP dziekuje, jestem zielony w tych sprawach :}]
Użytkownik kakus002 edytował ten post 06.07.2014 18:42
Również z jednym lub większą ilością słów kluczowych: cod nowy
CoD Nowy
Plugin na małe mapy.Napisany przez NAVIK, 16.02.2025 ![]() |
|
![]() |
|||
CoD Nowy
Dodatkowe, osobne trzy linie opisu klasNapisany przez Rafii, 27.01.2025 ![]() |
|
![]() |
|||
CoD Nowy
problem z kompilacjaNapisany przez Anonimowy09, 21.01.2025 ![]() |
|
![]() |
|||
CoD Nowy
problem z HUDNapisany przez Anonimowy09, 10.01.2025 ![]() |
|
![]() |
|||
![]() |
CoD Nowy
[KOSZ] PytanieNapisany przez Anonimowy09, 09.01.2025 ![]() |
|
![]() |
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych