Skocz do zawartości

Zablokowane Dmg w rozbujnika..


Paqoo

Rekomendowane odpowiedzi

Oto kod walki dla postaci bohatera w alarmie 0:

var atak;

atak_npc=o_rozbujnik;

if distance_to_object(atak_npc) <= 32
{
    atak = round(random(1));
    if atak = 1
                                                                                                                        {
        atak_enemy = round(random(global.sila_atk));
        if (atak_enemy < atak_npc.obrona || atak_enemy  = atak_npc.obrona)       
                                 { 
        atak_npc.hlt-=0;
        sound_play(blok);
                                  }
        else
                                                                                                         {
        if atak_npc.obrona < atak_enemy
                                                            {
        atak_npc.hlt-=atak_enemy-round(random(atak_npc.obrona));
        sound_play(dmg);
                                                            }
                                                                                                         }
                                                                                                                        }
}

 

atak_enemy ma to być dmg naszego przeciwnika. Chcę aby dostawał dmg tylko przeciwnik, który jest bity przez gracza. Co mam robić?

 

Kiedyś to robiłe z łatwością, ale zapomniałem kodu.. Pomożecie? Przeciwnika zaznaczam myszką i wciskam atak.

Odnośnik do komentarza
Udostępnij na innych stronach

Oj nie działa. Wcześniej miałem ten sam kod i działało. Nic nie rozumiem. Jakieś -1 w zmiennej, o to jest?

var text,menu;

if atak
text = 'Przestań atakować';
else
text = 'Atakuj';

menu = show_menu(text+'|-|Anuluj',-1);

if menu = 0
{
    if atak
    {
        atak_npc = self.id;
        atak = false;
    }
    else
    {
        o_gracz.atak_npc = id;
        atak = true;
    }
}

 

Zaczynam się bulwersować ;d To środkowy etap pomiędzy problemem, a jego rozwiązaniem :)

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli tak, jak masz w tej zmiennej -1 to znaczy że żaden przeciwnik nie jest wybrany ; p

 

Daj taki kod po kliknięciu lewym guzikiem myszy na przeciwnika:

if atak
    {
        atak_npc = self.id;
        atak = false;
    }
    else
    {
        o_gracz.atak_npc = id;
        atak = true;
       }

Odnośnik do komentarza
Udostępnij na innych stronach

Na logike to właśnie tak powinno być, ale mimo to nie działa. Dam więcej kodu, bo może coś w innym miejscu jest zepsute..? Oto on:

if hlt <= 0
{
instance_destroy()
sound_play(smierc);
exit;
}

if atak && o_gracz.atak_npc != id
atak = false;

var gracz;
gracz=instance_nearest(x,y,o_ludzik);

if ( distance_to_object(gracz)<dyst )
{
podazaj=true;
}
else
{
podazaj=false;
}


if (podazaj==true)
{

    if (gracz.y>y+32)
    {
     if (place_free(x,y+16))
     k=dol;
     else
     {
        if (gracz.x>x)
        k=prawo;
        else
        k=lewo;
     }
    }
    if (gracz.y<y-32)
    {
     if (place_free(x,y-16))
     k=gora;
     else
     {
        if (gracz.x>x)
        k=prawo;
        else
        k=lewo;
     }
    }
    if (gracz.x>x+32)
    {
     if (place_free(x+16,y))
     k=prawo;
     else
     {
        if (gracz.y>y)
        k=dol;
        else
        k=gora;
     }
    }
    if (gracz.x<x-32)
    {
     if (place_free(x-16,y))
     k=lewo;
     else
     {
        if (gracz.y>y)
        k=dol;
        else
        k=gora;
     }
    }
}


switch (k)
{
    case gora:
    if entered 
    {
        yy -= 16;
        entered = false;
        k=stoj;
    }
    break;
    
    case dol:
    if entered 
    {
        yy += 16;
        entered = false;
        k=stoj;
    }
    break;
    
    case lewo:
    if entered 
    {
        xx -= 16;
        entered = false;
        k=stoj;
    }
    break;
    
    case prawo:
    if entered 
    {
        xx += 16;
        entered = false;
        k=stoj;
    }
    break;

}

if place_free(xx,yy)
{
    if mp_linear_step(xx,yy,move_speed,false)
    {
        entered = true;
        if (k=stoj)
        {
            image_single=0;
            image_speed=0;
        }
    }
}
else
{
    xx=x;
    yy=y;
}

 

Jest to STEP event wroga - rozbujnika. Coś źle w kodzie? Pomocy ;(

Odnośnik do komentarza
Udostępnij na innych stronach

2. "Co tu jest źle?"

 

Pokaże wam swój kod. Ściągnijcie go i zobaczcie, dlaczego to nie działa? Nie wiem, gdzie tu jest błąd.

 

Każdy z nas ma swój kod i swoje błędy. W twoim kodzie błędy możesz znaleźć tylko ty sam - zrobisz to najszybciej i najlepiej, bo już go znasz. Nikt nie będzie analizował dziesiątek czy setek linii twojego kodu albo całego projektu.

 

źródło http://wiki.gamedev.pl/Jak_nie_lami%C4%87

Odnośnik do komentarza
Udostępnij na innych stronach

Przeanalizowałem kod i okazało się, że był błąd w nazwie obiektu. Podmieniłem i działa jak trzeba. Przepraszam za kolejny double post, ale zamykam już to coś :) Moldis wyluzuj! =) Oto miejsce błędu:

    else
    {
        o_ludzik.atak_npc = id;
        atak = true;
    }
}

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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