Skocz do zawartości

!Odczytanie dmg! Jednak dalej aktualne!


Rekomendowane odpowiedzi

Witam serdecznie

Mam pewien problem z atakami między graczami a dokładniej mam objGracz i połączony z nim objMiecz które mają przypisaną tą samą wartość dmg.

Jak mogę najprościej odczytać tę wartość w kolizji kiedy graczy na jednym obiekcie jest kilku?

 

Próbowałem w objGracz:

jeśli kolizja to HP-= objMiecz.DMG ale tylko pierwszy gracz mógł atakować.

Macie może jakieś sprawdzone rozwiązania na takie rzeczy?

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli robisz HP-=objMiecz.DMG w evencie collision to podmień objMiecz na other:

GML
HP -= other.DMG

 

Jeżeli korzystasz z funkcji sprawdzających kolizje to czy próbowałeś użyć któreś z funkcji collision_ (np. collision_point) aby otrzymać ID obiektu i potem odnieść się do tego ID?

GML
var _id = collision_point( x, y, objMiecz, false, true );

if _id!=noone HP-= _id.DMG;

 

Być może będziesz chciał użyć innej z funkcji collision_ w zależności od tego jak ma wyglądać hitbox.

Odnośnik do komentarza
Udostępnij na innych stronach

Oto jedyny kod którym różnią się gracze:

 

 

GML
player_id[0]=instance_create(objPlayer_spawner.x,objPlayer_spawner.y,objPlayer);

player_id[0].player_id=0;

player_id[0].Team=1;

player_id[0].draw=1;//rysowanie HUDa

player_id[1]=instance_create(objPlayer_spawner.x+50,objPlayer_spawner.y,objPlayer);

player_id[1].player_id=1;

player_id[1].Team=2;

player_id[1].draw=2;

 

player_id[2]=instance_create(objPlayer_spawner.x+100,objPlayer_spawner.y,objPlayer);

player_id[2].player_id=2;

player_id[2].Team=3;

player_id[2].draw=3;

 

player_id[3]=instance_create(objPlayer_spawner.x+150,objPlayer_spawner.y,objPlayer);

player_id[3].player_id=3;

player_id[3].Team=4;

player_id[3].draw=4;

 

A mimo to nikt nie może zaatakować gracza 1go a będąc z nim w teamie drugi gracz nie może atakować innych:o

 

Jak poczeba to zastosowałem ten kod na obrywanie:

 

GML
///HURT///////////////

 

 

//Odczytanie tego id

var en_id=collision_rectangle (phy_position_x-13, phy_position_y-6,phy_position_x+13,phy_position_y+6, objPlayerSword, false, true );

 

 

if HP<0 then HP=0;//Utrzymanie 0 hp jesli umar

 

 

 

if en_id!=noone

{if en_id.Team!=Team

{ //Jesli nie jestesmy w teamie z przeciwnikiem

if place_meeting(x,y,objPlayerSword) && DEF=0 && sword_coll=0 //Nie bronimy sie ani juz nie obrywamy to

{

sword_coll=1;//obrywamy

}

 

 

 

 

 

 

///////////////////*******************************************///////////////////////////

//Kolizja

if sword_coll=1 && DEF=0// //Jak obrywamy

{if hurt_anim=0 hurt_anim=choose(s_hurt1,s_hurt2)//losuje animacje

if hp_can=0 //zabiera hp

{

HP-= en_id.DMG//zabiera ilosc hp dopasowana do ilosci dmg przeciwnika

hp_can=1;

}

 

Poz='hurtA'//Animacja

action=0;//Konczymy atak

kl=0;//jw.

draw_atk=0;//jw.

if alarm[4]=-1 alarm[4]=20//stoper

if place_meeting(x,y,objPlayerSword) && DEF=0 image_blend=c_red

}

 

}//wiadomo, chwilowe wizualne odrożnienie

else

image_blend=c_white;

}

ok poprawione

Odnośnik do komentarza
Udostępnij na innych stronach

Weź to przeformatuj bo tego się czytać nie da.

 

GML
if hp_can=0 //zabiera hp

{

{HP-= en_id.DMG}//zabiera ilosc hp dopasowana do ilosci dmg przeciwnika

hp_can=1;

}

co to za nawiasy wogole dwa po sobie.

 

Dodatkowo używasz tu masy zmiennych których nam nie pokazujesz skąd się biorą i co robią(np DEF, hp_can).

 

Ogólnie popraw czytelność kodu bo jest straszna w tym momencie.

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ę...