Magiczne pociski- Diablo mod
Jaszczomb
09.01.2010
Witam
Ostatnim czasem zabrałem się za edytowanie pluginu diablo mod, aby czas wczytywania umiejętności był krótszy. Plugin udało się skompilować i wszystko elegancko działa. Po pewnym czasie gry różnymi klasami zauważyłem jednak, że mimo iż czas wczytywania magicznego pocisku się zmniejszył, a ja z powodzeniem ustawiłem maksymalną liczbę pocisków na 5, po wystrzeleniu jednego pocisku po załadowaniu dowolnej ich ilości, liczba pocisków się zeruje. Za pewne w internecie jest rozwiązanie tego problemu, ale doszedłem do wniosku, że jeżeli naprawię to sam, to przynajmniej czegoś się nauczę.
Otworzyłem zatem kod pluginu i znalazłem poniższy fragment:
W załączniku daję cały zmodyfikowany plik sma mojego diablo moda.
Proszę o pomoc i pozdrawiam.
Ostatnim czasem zabrałem się za edytowanie pluginu diablo mod, aby czas wczytywania umiejętności był krótszy. Plugin udało się skompilować i wszystko elegancko działa. Po pewnym czasie gry różnymi klasami zauważyłem jednak, że mimo iż czas wczytywania magicznego pocisku się zmniejszył, a ja z powodzeniem ustawiłem maksymalną liczbę pocisków na 5, po wystrzeleniu jednego pocisku po załadowaniu dowolnej ich ilości, liczba pocisków się zeruje. Za pewne w internecie jest rozwiązanie tego problemu, ale doszedłem do wniosku, że jeżeli naprawię to sam, to przynajmniej czegoś się nauczę.
Otworzyłem zatem kod pluginu i znalazłem poniższy fragment:
if(golden_bulet[id]>0) { golden_bulet[id]-- h_bulet=1 }Pomyślałem, że to wina właśnie tej instrukcji warunkowej, więc zacząłem ją analizować. Doszedłem do wniosku, że instrukcja zmniejsza liczbę kul nie bacząc czy gracz strzela czy też nie, więc przerobiłem kod aby wyglądał tak:
if(golden_bulet[id]>0 && esf_is_shooting(id,1)) { golden_bulet[id]-- h_bulet=1 }Oczywiście na początek dodałem oczywiście #include <esf>. Nie wiem czy ustawiłem dobry parametr mode na 1, ale to teraz mniej ważne, Otóż podczas próby kompilacji online mam taki problem:
Welcome to the AMX Mod X 1.8.1-300 Compiler. Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team /home/groups/amxmodx/tmp3/phphXLGfI.sma(8202) : error 017: undefined symbol "esf_is_shooting" 1 Error. Could not locate output file /home/groups/amxmodx/public_html/websc3/phphXLGfI.amx (compile failed).Na moim komputerze również nie mogę skompilować.
W załączniku daję cały zmodyfikowany plik sma mojego diablo moda.
Proszę o pomoc i pozdrawiam.
Załączone pliki
G[o]Q
09.01.2010
a powiedz mi pewna rzecz dlaczego uzywasz modulu do gry esf ?? mozliwe ze zadziala bo w koncu silnik hl1 ale to moze byc przyczyna problemu lub tez to ze web compiler nie ma zainstalowanego tego modulu
Jaszczomb
09.01.2010
Możliwe, że to wina braku tego modułu na serwerze web compilera, aczkolwiek nie znalazłem zamiennej funkcji dla tej z esf'a. Zna ktoś może funkcję sprawdzającą, czy gracz w danym momencie strzela, która byłaby zamienną dla esf_is_shooting(player,module) ?
Btw. używam tego modułu tylko ze względu na tę jedną funkcję.
Użytkownik Jaszczomb edytował ten post 09.01.2010 17:08
Btw. używam tego modułu tylko ze względu na tę jedną funkcję.
Użytkownik Jaszczomb edytował ten post 09.01.2010 17:08
G[o]Q
09.01.2010
+attack w consoli?? ale w przypadku diablo to raczej nie zadziala mozesz co 0.5 sekundy sprawdzac ammo i jesli sie zmieni to zmniejszac wtedy nawet na nozu nie bedzie ci zabieralo pociskow
Jaszczomb
09.01.2010
Czyli będę musiał zrobić to na evencie tak? Właściwie to pluginami zajmuję się od dzisiaj także mogę zadawać głupie pytania bo nie znam zbyt wielu funkcji amxx na razie. Mógłbyś mi napisać proponowane przez Ciebie rozwiązanie ?
G[o]Q
09.01.2010
mozesz zrobic 2 zmienne globalne i do jednej zapisujesz ammo w magazynku potem tworzysz funkcje ktora sprawdza ammo i zapisuje je do drugiej zmiennej potem porownuje te zmienne jesli sa rowne zwraca 0 jesli rozne zwraca 1 i potem tylko dodajesz warunek przed zmniejszeniem ilosci pociskow czy wartosc funkcji =1 jesli tak to zmniejszasz oczywiscie funkcje dajesz w tasku ktory co 0.5 s bedzie wywyolywal funkcje sprawdzajaca.
Ale nie musisz tak robic bo pewnie miczu/pav/seba/i paru innych i tak znajda inne rozwiazanie
Ale nie musisz tak robic bo pewnie miczu/pav/seba/i paru innych i tak znajda inne rozwiazanie
Jaszczomb
09.01.2010
Dzięki za pomoc, pokminię nad tym, a w między czasie może ktoś inny się odezwie ze swoim rozwiązaniem. Mam nadzieję, że któreś rozwiązanie w końcu zadziała
Vertricus
09.01.2010
Task 0.5 sek jest nie na miejscu :F
Lepiej w CurWeapon sprawdzać ammo.
Ja bym to tak zrobił że sprawdzam czy ta sama broń jak nie to nic nie rób jak tak sprawdź różnice w ammo max i obecnym jeśli większa niż poprzednio strzelił
Lepiej w CurWeapon sprawdzać ammo.
Ja bym to tak zrobił że sprawdzam czy ta sama broń jak nie to nic nie rób jak tak sprawdź różnice w ammo max i obecnym jeśli większa niż poprzednio strzelił
Jaszczomb
09.01.2010
Czyli coś takiego: ?
Zmieniłem ten kod na następujący:
Użytkownik Jaszczomb edytował ten post 09.01.2010 18:21
public zmiana_ammo(id) { new ammo1 = 30 new ammo2 = read_data(3) if (ammo1 == ammo2) { return false } if (ammo1 != ammo2) { return true } return PLUGIN_HANDLED }Jak już mówiłem słabo znam się na razie na funkcjach i eventach, gdyż dopiero zaczynam z pawn'em i pisaniem pluginów. Proszę o wyrozumiałość
Zmieniłem ten kod na następujący:
public zmiana_ammo(id) { new bron = cs_get_weapon_id(id) new ammo1 = tfc_getweaponammo(bron) new ammo2 = cs_get_weapon_ammo(id) if (ammo1 == ammo2) { return false } if (ammo1 != ammo2) { return true } return PLUGIN_HANDLED }Sprawdzę czy działa i dam znać. Proszę jednak również o alternatywne pomysły
Użytkownik Jaszczomb edytował ten post 09.01.2010 18:21
G[o]Q
09.01.2010
lepiej cos takiego z taskiem oczywiscie w plugin_init. Bo z curweapon to co podal Vert to jak zmieni bron to mu odejmie pocisk a jak strzeli to nie verticus no chyba ze curweapon wykrywa tez zmiany w amunicji
Użytkownik G[o]Q edytował ten post 09.01.2010 18:37
//gdzies w definicji zmiennych new gsprawdz[33] new gsprawdz2[33] new czy_rowne[33] //w plugin init gdzies na koncu set_task(0.5,"sprawdz",0,_,_,"b") public sprawdz(id){ gsprawdz2[id]=cs_get_weapon_ammo ( id) if (gsprawdz2[id]==gsprawdz[id]) czy_rowne[id]=1 else czy_rowne[id]=0 } // to do curweapon gsprawdz[id]=cs_get_weapon_ammo ( id) // tutaj kawalek kodu ktory zamien if(golden_bulet[id]>0 && czy_rowne[id]==0) { golden_bulet[id]-- h_bulet=1 }
Użytkownik G[o]Q edytował ten post 09.01.2010 18:37
DarkGL
09.01.2010
Z testow wynika, ze w/w event jest tez wywolywany po wystrzeleniu naboju (ammo sie zmienia) lub po przeladowaniu. i tak na marginesie 0.5 sekundy to za wolno
Użytkownik DarkGL edytował ten post 09.01.2010 19:17
Użytkownik DarkGL edytował ten post 09.01.2010 19:17
Jaszczomb
09.01.2010
Zrobiłem wszystko tak jak napisałeś G[o]Q i niestety nie przyniosło to efektu. Tymczasowo ustawie mniejszy czas ładowania pocisku i dam maksymalną ilość 1, do puki nie znajdzie się jakieś rozwiązanie.
Może ma ktoś gotowca? bo sądzę, że to jednak jeszcze ponad moje siły.
Użytkownik Jaszczomb edytował ten post 09.01.2010 19:24
Może ma ktoś gotowca? bo sądzę, że to jednak jeszcze ponad moje siły.
Użytkownik Jaszczomb edytował ten post 09.01.2010 19:24