Za co opdpowiada zmienna Job? Ponieważ najpierw przydało by się zoptymalizować te warunki:
if direction <= 45 or direction > 315 ...
if direction <= 135 && direction > 45 ...
...
na:
switch ( round( direction/45 ) )
{
case 0: ...; break;
case 1: ...; break;
...
case 7: ...; break;
case 8: ...; break // Tutaj musi być to samo co przy case 0, bo 0 i 8 wskazują na ten sam kierunek - w prawo
}
string_copy(str,index,count) Returns a substring of str, starting at position index, and of length count.
Kopiuje kawałek tekstu z tekstru str, począwszy od znaku stojącego na pozycji index, o długi znaków count.
nowy_string = string_copy( "abcdef", 2,3 ); //zwróci do nowy_string "bcd"
A co do walki, to mozesz zrobić tak:
Zmodyfikuj ten kawałek z moving = 0
if ( atakuje == false )
{
if ( moving == 1 )
{
...
tutaj co masz do uzupelnienia
...
}
else // lub else if ( moving == 0 ) jezeli w kodzie gry dopuszczasz inne wartosci od 0 i 1 dla zmiennej moving
{
speed = 0;
switch ( round( direction/45 ) )
{
case 0: ...; break;
case 1: ...; break;
...
case 7: ...; break;
case 8: ...; break // Tutaj musi być to samo co przy case 0, bo 0 i 8 wskazują na ten sam kierunek - w prawo
}
}
}
Teraz w event other -> animation_end gracza:
if ( atakuje == true ) atakuje = false; //jezeli obiekt atakowal kogos, to odblokuj
Event create gracza:
atakuje = false; // inicjalizacja zmiennej
dystans_opcja_ataku = 0; // zalozmy ze 0 to miecz, 1 to halabarda, 2 to łuk
dystans_atak[0] = 30;
dystans_atak[1] = 50;
dystans_atak[2] = 1000;
global.potwor_id = 0;
No i nie wiem co dalej, poniewaz nie wiem co to jest target_x i target_y? Czy to zmienne przechowujace pozycje docelowego chodzenia? Pozycje potwora?
Event tam gdzie masz klikanie myszka i chodzenie gracza:
if( object_exists( global.potwor_id ) )
{
if ( distance_to_point( global.potwor_id.x, global.potwor_id.y) < dystans_atak[ dystans_opcja_ataku ] )
{
atakuje = true;
sprite_index = sprite_atakowania;
image_speed = 0.5;
}
}
Brakuje jeszcze pobierania id z potwora. Nie chce mi sie znowu sciagac klienta gry, ale jezeli za kursor myszki sluzy jakis dodatkowy obiekt, to mozna zrobic tak:
1) Utworzyc obiekt o nazwie "klasa_potwora" i powybieraj go we wszystkich obiektach potworów w menu Parent. To spowoduje dziedziczenie niezdefiniowanych eventów w tych potworach z obiektu "klasa_potwora".
2) Teraz wystarczy w obiekcie kursora dorobic event collision z "klasa_potwora":
if ( mouse_button == mb_left )
{
global.potwor_id = other.id; //przypisz zmiennej globalnej numer id obiektu "other", ktory w kolizji oznacza obiekt z ktorym kolidujemy
}
Jak ktos widzi jakis blad, to niech mnie poprawi. Nie wiem czy bedzie dzialac, bo pisalem z pamieci wymyslajac.
ps. Silnik, który ściągnałeś, już widzę, że nie jest elastyczny. Poza tym dorabiając takie rzeczy, o które się tutaj pytasz, to jestem ciekaw czy uwzględniasz w konkurencyjności multiplayera. Na przykład zrobisz podchodzenie do potwora i go niszczenie. A co się stanie jeśli ktoś inny go zniszczy zanim dojdziesz? Czy już dorobiłeś w silniku wysyłanie danych o tym, że gracz kogoś atakuje itd.? Dalej idąc, powinny być w sumie tylko dwa obiekty (albo jeden) gracza. System powinien na jego podstawie tworzyć gracza właściwego i innych. Tak samo potwory. Powinien być jeden obiekt nadrzędny "potwór", którego dziedziczą inne obiekty np. "flying", "ground". To się nazywa polimorfizm. Teraz powinny one mieć podpięte uniwersalne skrypty, które przyjmują dużo parametrów w stylu:siła ataku, siła obrony, życie, poziom exp., poziom_nagrody,nazwa,klasa,rozmiar,zestaw spritów, dzwieki ataku i smierci itd. itp. To wszystko powinno być zapisywane dynamicznie, a nie przydzielane statycznie, po to by potem łatwo dorabiać nowe rodzaje potworków.
Ogólnie rzecz biorąc wziąłeś się za jeden z najtrudniejszych rodzajów gry obok RTS nie mając podstaw, wizji itd. Są trzy wyjścia:
1) Znajdziesz współprojektanta, w co wątpie i będzie ciężko
2) Znajdziesz inny gotowy silnik game makera do takich gier, który ma już wbudowane te funkcje
3) Zrezygnujesz z tej gry i zaczniesz uczyć się GM'a metodą prób i błędów.