Skocz do zawartości

Drużyna W TDS


SKiD

Rekomendowane odpowiedzi

Witam, próbuję ulepszyć system drużynowy w mojej grze. Jak na razie mam członka drużyny który podąża za graczem gdy ten się zbytnio oddali. I jeśli wróg jest w polu rażenia strzela (nie za dobrze to wygląda). Chodzi o to że podczas rozgrywki członek drużyny zablokuje gracza, bo nie cofa się do tyłu. Jeśli gracz wejdzie w alejkę bez wyjścia, trzeba restartować grę bo nic innego się nie da zrobić...

 

Więc chciałbym zrobić tego członka drużyny żeby się cofał na wolne pole jeśli gracz jest za blisko.

Tutaj macie kody tego co jak na razie zakodowałem.

script_jack_movement

GML
if distance_to_object(obj_player_parent)>45

{

image_angle=direction

mp_potential_step(obj_player_parent.x,obj_player_parent.y,global.WSN,0)

}

else

{

image_angle=point_direction(x,y,obj_player_parent.x,obj_player_parent.y)

}

script_jack_shoot

GML
if instance_exists(obj_zombie_parent)

if distance_to_object(obj_zombie_parent)<=75

{

image_angle = point_direction(x,y,instance_nearest(x,y,obj_zombie_parent).x,instance_nearest(x,y,obj_zombie_parent).y)

if global.jackshotgunbullets>2

{

global.jackshotgunbullets=0

shoot=true

alarm[0]=15

sound_play(sound_shot)

}

}

 

A tutaj info o obiekcie:

Information about object: obj_jack_shotgun

 

Sprite: spr_jack_shotgun

Solid: true

Visible: true

Depth: 3

Persistent: false

Parent:

Mask: spr_player_parent

 

Create Event:

execute code:

 

global.jackshotgunbullets=3

shoot=false

 

execute code:

 

if !instance_exists(obj_status_hud) and !instance_exists(obj_status_hud_hiding) and !instance_exists(obj_status_hud_hid)

{

instance_create(x,y,obj_status_hud)

}

 

execute code:

 

if !instance_exists(obj_jack_controller)

{

instance_create(x,y,obj_jack_controller)

}

 

 

Alarm Event for alarm 0:

execute code:

 

global.jackshotgunbullets=3

shoot=false

 

 

Alarm Event for alarm 1:

set the sprite to spr_jack_shotgun with subimage 0 and speed 1

 

Step Event:

execute script script_jack_movement with arguments (0,0,0,0,0)

execute script script_jack_shoot with arguments (0,0,0,0,0)

if shoot is equal to true

set variable shoot to false

create instance of object obj_jack_bullet at position (x,y-4) with speed 44 in direction image_angle

create instance of object obj_jack_bullet at position (x,y) with speed 44 in direction image_angle

create instance of object obj_jack_bullet at position (x,y+4) with speed 44 in direction image_angle

create instance of object obj_shotgun_shot_effect at position (x,y) with speed 0 in direction image_angle

create instance of object obj_bullet_shell at position (x,y) with speed 0 in direction image_angle

 

Collision Event with object obj_zombie_parent:

set the sprite to spr_jack_hit with subimage 0 and speed 1

set Alarm 1 to 4

 

Z góry dzięki!

Odnośnik do komentarza
Udostępnij na innych stronach

Zapewne chcecie sprawdzić jak szybko się porusza. Chodzi o to że szybkość gracza jest zależna od jego lvl'a. Przykro mi ale pliku .gmk nie wyśle ponieważ nie jestem na komputerze który zawiera ten plik.

 

Gracz porusza się używając funkcji place_empty

Odnośnik do komentarza
Udostępnij na innych stronach

GML (scriptjackmovement)
if distance_to_object(obj_player_parent)>45

{

image_angle=direction

mp_potential_step(obj_player_parent.x,obj_player_parent.y,global.WSN,0)

}

else

{

image_angle=obj_player_parent.image_angle

 

if place_free(lenghdir_x(global.WSN,image_angle),lenghdir_y(global.WSN,image_angle))

{

x=lenghdir_x(global.WSN,image_angle)

y=lenghdir_y(global.WSN,image_angle)

}

}

Spróbuj

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...

Otwieram ten temat, bo problem jest nadal taki sam a nowego tematu dwa razy nie będę otwierał...

Bawiłem się trochę skryptem (scr_team) i oto on:

GML
if distance_to_object(obj_player)>40 //check if the distance to player is bigger than 40 pixels

{

mp_potential_step(obj_player.x,obj_player.y,4,1) //go to player position with speed of 2 and avoid all objects

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if distance_to_object(obj_player)<15 //check if the distance to player is smaller than 15 pixels

{

speed=0 //stop moving

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

if distance_to_object(obj_player)<5 //check if the distance to player is smaller than 5 pixels

{

// TUTAJ POTRZEBUJE KODU NA RUSZANE SIE DO TYLU / SCHODZENIE Z DROGI GRACZOWI.

}

 

Próbowałem różnych metod ale i tak za każdym razem = fail.

A to co wyżej napisałem że śmiga, to śmiga ale nie do końca poprawnie, bo członek drużyny idzie do +x i +y przy tym też blokuje gracza.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
mp_potential_step(lengthdir_x(-30,direction),lengthdir_y(-30,direction),4,1)

albo

GML
mp_potential_step(lengthdir_x(30,direction),lengthdir_y(30,direction),-4,1)

Jest wiele rozwiązań a to jest jednym z najgorszych :P

Odnośnik do komentarza
Udostępnij na innych stronach

Wrzuciłem, i teraz jest zupełnie odwrotnie zamiast iść do góry (tak jak poprzednio to robili) to teraz idą na dół...

GML
mp_potential_step(obj_player.x,obj_player.y,-4,1)
A ja pogłówkowałem trochę w nocy i wpisałem coś takiego. Wszystko jest git tylko czy nie będzie z tym żadnych problemów? (oczywiście oprócz ostatniej cyfry 1 bo zmienię na 0)
Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...