Dobra, dobra, wiem, że te nazwy to tak całkiem ściągnięte, ale to akurat sobie skopiowałem ze swojego innego skryptu, gdzie miałem timer do czaru i dlatego tak
ale spokojnie, jak wszystko ogarnę, to ponazywam. To nie jest tak, że nawet nie wiem co kopiuję
Ale wracając do rzeczy, zauważcie, że mam dwie zmienne SPL_Time_Moja i SPL_Stop_Moja. _Stop rzeczywiście zmienia się na końcu timera i o to chodzi. Ale _Time nie może się zerować na końcu timera, bo wtedy cały efekt zaczynałby się od początku i tak w kółko. TYLKO wypicie mikstury ma zerować timer, ponieważ efekt ma się przedłużać lub zaczynać od początku TYLKO po ponownym wypiciu mikstury, a nie jakoś sam z siebie.
Jestem pewien, że to jest dobrze napisane, bo działa w grze tak, jak ma być ;) poza tym miałem podobny problem z czarem zwiększającym pancerz, tyle, że tam bez problemu dodałem właśnie zerowanie czasu podczas rzucania czaru, a w miksturze z jakiegoś powodu nie mogę tego zrobić w on_state (tzn. no mogę, ale tak jak opisałem, tylko PO włączaniu timera, a przydałoby się PRZED). I właśnie nie rozumiem dalej, dlaczego tak się dzieje.
A propos, chciałem wrzucić w poprzednim poście zdjęcie z tym błędem i ono się ładuje i niby jest, ale potem po jakimś czasie znika. Jak się tu wrzuca zdjęcia, coś robię nie tak? Wrzucam je z chomika. Może byłby jakiś trop, jakbyście zobaczyli o czym jest błąd
@Edit
Dobra, zrobiłem tak, że działa
Napisałem sobie taką funkcję:
func void SetSPL_Time_Moja()
{
SPL_Time_Moja = 0;
TimerMojaApply();
};
a w on_state to:
on_state[0] = SetSPL_Time_Moja;
Działa tak, jak chciałem ;) Dzięki za pomoc, ale to jeszcze nie koniec moich problemów egzystencjalnych
NO WIĘC TERAZ KOLEJNY ETAP
Pomijając już całkowicie tę miksturę, bo to było tylko na próbę. Chcę zrobić stały efekt, żeby każdy cios w kombinacji zadawał coraz więcej dmg. Przykładowo mistrz walki 1h ma 4 ataki, 1- to normalny dmg, 2- 150% dmg, 3- 200%, 4 - 250%. Chodzi o to, żeby się bardziej opłacało wyprowadzać całe kombinacje ciosów. Wartości oczywiście przykładowe.
Pytanie teraz jak to zrobić
Ja mam pomysł taki, żeby użyć funkcji
if(MEM_KeyState(KEY_W)==KEY_PRESSED)
i połączyć ją z bardzo szybkim timerem, takim co klatkę. No i zrobiłbym to tak: każdy atak w sekwencji trwa określoną liczbę klatek, więc piszę po prostu warunki, że jeśli wcisnąłem klawisz W && time jest powiedzmy o 1-25, czyli klatki pierwszego ataku (przykładowe klatki, z głowy piszę) to dmg=dmg, jeśli W jest wciśnięty znowu i time jest od 25-50, czyli przykładowe klatki drugiego ataku, to dmg=dmg*1,5, itd. Wiadomo, tam trzeba by raczej dodać jeszcze parę warunków. No ogólnie sporo pisania, ale chyba do zrobienia.
Teraz tak, problemy, jakie już przy tym rozwiązaniu widzę:
1) sterowanie musi być z G1, tzn, że atak jest po przytrzymaniu kliknięcia myszą i wciśnięciu klawisza W - ja akurat lubię sterowanie z G1, ale niektórzy może grają z innym. Albo sobie ustawią atak nie pod W, tylko pod innym klawiszem. Jak to rozwiązać?
Może zamiast funkcji
if(MEM_KeyState(KEY_W)==KEY_PRESSED)
jakaś inna, np. taka, która sprawdza czy postać wyprowadza akurat atak. No tutaj Was proszę o pomoc, jeśli znacie taką funkcję albo macie inny pomysł.
2) Dodatkowo, tutaj musi być wciśnięty przycisk myszy i dodatkowo klawisz W (żeby się to nie włączało przy zwykłym chodzeniu). Czy tą funkcją KeyState da się też sprawdzać wciśnięcie przycisku myszy, czy tylko klawisze na klawiaturze?
3) to działałoby tylko dla gracza. Jak zrobić, żeby NPC też dostawali dodatkowy dmg z każdym następnym atakiem? Może też inna funkcja po prostu byłaby rozwiązaniem.
4) tak czy inaczej, z moim pomysłem jest sporo pisania, bo skrypt trzeba zrobić inny do każdego poziomu walki (nowicjusz-wojownik-mistrz), tzn. będą inne klatki i osobno do broni 1h i 2h. Więc jeśli macie pomysł na funkcję, która zamiast sprawdzać czy jest wciśnięty klawisz i które aktualnie są klatki, sprawdza raczej który atak w sekwencji jest akurat wyprowadzany, to kolosalnie uprościłoby pracę. Nie wiem czy wgl taka funkcja istnieje, ale może macie jakieś pomysły.