Nirvan Opublikowano 26 Czerwca 2009 Udostępnij Opublikowano 26 Czerwca 2009 Mam taki skrypt (By Psichix , zdołał go zrobić pomimo mojego chorego opisu co miał robić ten skrypt) : GML victim=instance_nearest(x,y,enemyunit) // szuka ofiary if(!victim)return(false) // jeśli żadnej nie znalazł to przerywa while(victim.predator[0] && victim.predator[1]) // wykonuje do póki szukana ofiara jest atakowana przez dwóch innych atakujących { instance_deactivate_object(victim) // deaktywujemy znalezioną ofiarę victim=instance_nearest(x,y,enemyunit) // szuka kolejnej ofiary if(!victim) { instance_activate_object(enemyunit) // aktywuje wszystkie ofiary return(false) // jeśli żadnej nie znalazł to przerywa } } instance_activate_object(enemyunit) // aktywuje wszystkie ofiary if(!victim.predator[0] && !victim.predator[0]) // jesli ofiara nie walczy z żadnym drapieżnikiem, wtedy... { victim.predator[0]=id // mówisz ofierze że atakujesz ją (jesteś jej pierwszym drapieżnikiem) return(true) // kończysz szukanie z sukcesem } else // jeśli zaś walczy z jednym, wtedy... { if(!victim.predator[0]) // jeśli ofiara nie ma pierwszego drapieżnika { victim.predator[0]=id // to mówisz ofierze że jesteś jej pierwszym drapieżnikiem return(true) // kończysz szukanie z sukcesem } else { victim.predator[1]=id // to mówisz ofierze że jesteś jej drugim drapieżnikiem return(true) // kończysz szukanie z sukcesem } } Ma on szukac ofiare , jeśli ją znajdzie to ma sprawdzić czy jest atakowana przez 2 drapieznikow , jak nie albo jak jest atakowany tylko przez 1 to ma być victim=instance_nearest(enemyunit); Ale jest coś chyba źle bo nie chce dzialać gdy robie if distance_to_object(victim) <= np.500 to nic sie nie dzieje ... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Czerwca 2009 Administratorzy Udostępnij Opublikowano 26 Czerwca 2009 tak oglądam tą pierwsza pętlę i to wyglada tak dopóki obiekt atakują dwaj przeciwnicy dezaktywuj obecny obiekt nowy obiekt to następny najbliższy jeżeli nie znaleziono już nic (nowy obiekt to -1), to wyjdź z pętli aktywuj wszystkie sprawdź czy OSTATNIĄ ofiarę ktoś atakuje (ale skoro z pętli wyszliśmy poprzez break, to id = -1, bo nic nie znaleziono) tak naprawdę gdyby zamiast while napisać victim = -1 to było by to samo. Po prostu poza pętlą masz id ostatniego enemyunit jako -1. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 26 Czerwca 2009 Udostępnij Opublikowano 26 Czerwca 2009 Po prostu poza pętlą masz id ostatniego enemyunit jako -1. tylko gdy nie znajdzie zadnego przeciwnika, wiec powinien sie potem zabezpieczac przed tym w kodzie, aby ominal kod ktory wymaga znalezionej ofiary (victim) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Czerwca 2009 Administratorzy Udostępnij Opublikowano 26 Czerwca 2009 Nie no, wg. mnie zawsze będzie -1, bo skoro dezaktywuje wszystkich po kolei, to na koniec nie znajdzie nikogo, i instance_nearest() zwraca -1, co powoduje wyjście z pętli. Chyba, że natrafi na typka, którego atakują dwie osoby, ale wtedy nie sprawdzi też wszystkich. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 26 Czerwca 2009 Udostępnij Opublikowano 26 Czerwca 2009 mylisz sie, bo kod dziala, gdy w petli skonczy przeszukiwac, czyli nie znajdzie zadnego obiektu, to zanim zwroci -1 to aktywuje wszystkich przeciwnikow, w kazdym przypadku zanim wyjdzie z funkcji to aktywuje jesli zacza szukac, aby nie bylo tego bledu ktory masz n mysli. Ja Tytan wiem co nie gra, ale wczoraj chciales sam cos tam zrobic to wolalem poczekac, a moze bys wykombinowal :P i zauwaz, ze -1 jest zwracany tylko i wylacznie gdy nie ma przeciwnikow, badz zaden z przeciwnikow nie ma mozliwosci przyjac dodatkowego drapieznika (czyli wszystcy przeciwnicy maja po 2 drapiezniki) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Czerwca 2009 Administratorzy Udostępnij Opublikowano 26 Czerwca 2009 GML victim=instance_nearest(x,y,enemyunit) // szuka kolejnej ofiary if(!victim) break; Skoro wychodzisz z pętli, gdy victim = -1, to aktywacja obiektów nic nie da, -1 to -1. I poza pętlą nadal będzie -1. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 26 Czerwca 2009 Autor Udostępnij Opublikowano 26 Czerwca 2009 a w debugu mam victim = -4 :jezor: edit : nie dopisalem ze w create jest : predator[0]=-1; predator[1]=-1; victim=-1; ale to chyba nie ma znaczenia Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Czerwca 2009 Administratorzy Udostępnij Opublikowano 26 Czerwca 2009 To i tak false, z tego co pamiętam, w GM x<=0 to false, x>0 to true Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 26 Czerwca 2009 Autor Udostępnij Opublikowano 26 Czerwca 2009 no tak , ale ciągle i tak nie wiem co mam gdzie zrobić żeby to zadziałało . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 26 Czerwca 2009 Administratorzy Udostępnij Opublikowano 26 Czerwca 2009 GML victim = instance_nearest(x,y,enemyunit); do { // tutaj sprawdzanie, czy jest atakowany czy nie instance_deactivate_object(victim); victim = instance_nearest(x,y,enemyunit); } wile victim = true;// albo victim > 0</span> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się