Napój i amulet nieś›miertelnoś›ci 3957 11

O temacie

Autor GothicModer

Zaczęty 23.04.2013 roku

Wyświetleń 3957

Odpowiedzi 11

GothicModer

GothicModer

Użytkownicy
Skrypter, grafik
posty105
Propsy23
ProfesjaSkrypter
  • Użytkownicy
  • Skrypter, grafik
Mam pewien problem stworzył‚em sobie miksturę i amulet, dzięki którym powinienem być nieśmiertelny, ale coś mi nie dział‚a.
Skrypt jest jakoś taki, bo gdzieś go zapodziałem. ( w większości skopiowałem ze zwykł‚ej mikstury i amuletu)

var int POWER_AMULET;

INSTANCE ItAm_Power(C_ITEM)
{
name = "Amulet";

( tutaj jest wszystko tak jak w amulecie )

on_equip = AMULET_POWER;
on_unequip = UN_AMULET_POWER;
};

FUNC VOID AMULET_POWER
{
POWER_AMULET == TRUE;
POWER == TRUE;
};
FUNC VOID UN_AMULET_POWER
{
POWER_AMULET == FALSE;
POWER == FALSE;
};

Teraz mikstura:

INSTANCE MIXTURE_POWER (C_ITEM)
{
name = "Mikstura";
description = "Wywar nieśmiertelności";

(tutaj mam skrypt prawie cał‚y z łez Innosa)
on_state[0] = MIXTURE_POWER;
};
var int MIXTURE_POWER;
var int POWER;
FUNC VOID MIXTURE_POWER
{
MIXTURE_POWER == TRUE;
POWER == TRUE;
};

I teraz dodałem jeszcze skrypt do wstawania:

if ((hero.attribute ATTRIBUTE_HITPOINTS = 0) && (power == TRUE))
{
PlayAni (hero, "T_DEAD");
AI_WAIT (hero, 3);
POWER == FALSE;
if (MIXTURE_POWER == TRUE)
{
MIXTURE_POWER == FALSE;
};
PlayAni (hero, "S_WOUNDED");
AI_Wait (hero, 3);
PlayAni (hero, "T_WOUNDED_2_STAND");
};
[/size]

[mod=Adanos]Poprawiłem kodowanie.[/mod]

Nie wiem czemu nie chce mi to działać, żadne błędy nie wyskakują. I gdzie wstawić to większe?
 
Szukam testerów do moda i ludzi chętnych do pomocy w nim. Szczegóły PW


GothicModer

GothicModer

Użytkownicy
Skrypter, grafik
posty105
Propsy23
ProfesjaSkrypter
  • Użytkownicy
  • Skrypter, grafik
Co to jest "skrypt do wstawania"?
Chodzi o to gdzie jest
if (hero.attribute ATTRIBUTE_HITPOINTS[...] i tak dalej.
 
Szukam testerów do moda i ludzi chętnych do pomocy w nim. Szczegóły PW


GothicModer

GothicModer

Użytkownicy
Skrypter, grafik
posty105
Propsy23
ProfesjaSkrypter
  • Użytkownicy
  • Skrypter, grafik
Żeby postać wstała po tym jak straci całe HP... Nie wiem gdzie to dać.
 
Szukam testerów do moda i ludzi chętnych do pomocy w nim. Szczegóły PW

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Napój i amulet nieś›miertelnoś›ci
#5 2013-04-23, 11:08(Ostatnia zmiana: 2013-04-23, 11:09)
No właśnie, czyli wiadomo dlaczego nic się nie dzieje. Bo nic się nie ma dziać, skoro nigdzie tego nie dałeś.

Dodatkowo ten skrypt to generalnie rzecz biorąc śmieć.

1. Naucz się podstaw Daedalusa / programowania w ogóle. Gdybym był parserem, to swoją tyradę zacząłbym od "U: PAR: Unknown identifier "POWER"". Potem pewnie Unexpected token: ATTRIBUTE_HITPOINTS. Linijka "MIXTURE_POWER == FALSE;" choć być może składniowo poprawna (w niektórych językach na pewno by przeszła, nie jestem pewien czy w Daedalusie), totalnie nic nie robi. Zwraca jedynie wartość równą !MIXTURE_POWER, ale nie przekazuje jej dalej.
2. Parser ci tego nie powie, ale prawdopodobnie nie rozumiesz jak działa Ai_Wait i używasz go do czego innego, więc oczywiście nie da takiego wyniku jakiego oczekujesz.  Na koniec, czego parser też ci nie powie, odtworzenie animacji wstawania na martwym npc raczej nie sprawi że on ożyje.
3. Naucz się tego że żeby kod coś zrobił, musi zostać wywołany. W twoim przypadku powinieneś jako triggera użyć funkcji ZS_Dead, ale najpierw musisz napisać sobie poprawną funkcję.

GothicModer

GothicModer

Użytkownicy
Skrypter, grafik
posty105
Propsy23
ProfesjaSkrypter
  • Użytkownicy
  • Skrypter, grafik
Czyli co mam z tym zrobić?
 
Szukam testerów do moda i ludzi chętnych do pomocy w nim. Szczegóły PW


GothicModer

GothicModer

Użytkownicy
Skrypter, grafik
posty105
Propsy23
ProfesjaSkrypter
  • Użytkownicy
  • Skrypter, grafik
Jak uzywac tych triggerow bo nie znam sie na tym. Od tamtego czasu na pisał‚em coś› takiego w ZS :

func void ZS_Rising ()
{
    var int self;
    self = HlpGetNpc (PC_Hero);
    if ((self.attribute[ATTRIBUTE_HITPOINTS] = 0) && (rising = TRUE))
  {
    AI_Wait (self, 2);
    AI_PlayAni (self, "T_DEAD");
    AI_Wait (self, 2);
    self.attribute[ATTRIBUTE_HITPOINTS] = 100;
  };
};

func void ZS_Rising_Loop ()
{
    var int self;
    self = HlpGetNpc (PC_Hero);
 
  AI_PlayAni (self, "S_WOUNDED");
  AI_Wait (self, 5);
};

func void ZS_Rising_End ()
{
    var int self;
    self = HlpGetNpc (PC_Hero);
 
  AI_PlayAni (self, "T_WOUNDED_2_STAND");
  AI_PlayAni (self, "T_PRACTICEMAGIC3");
}; 

I teraz pytanie jak zrobic, aby pojawił‚o się™ to w grze.
 
Szukam testerów do moda i ludzi chętnych do pomocy w nim. Szczegóły PW

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Napój i amulet nieś›miertelnoś›ci
#9 2013-05-01, 23:20(Ostatnia zmiana: 2013-05-01, 23:21)
Trigger = wyzwalacz = coś co wywoła twoją zajebistą funkcję. W tym przypadku chodzi o inną funkcję, zs_dead. Wywołanie musisz napisać sam. Jak wygląda wywołanie funkcji z innej funkcji, powinieneś sam wiedzieć, bo to absolutna podstawa skryptów. Nie miałeś pisać nowego ZSa. Dodatkowo to co napisałeś jest pełne błędów i bezsensowne. Jak ty to w ogóle piszesz? Nie ma w tym żadnego sensu, możesz wyjaśnić o co oparłeś chociaż pierwsze parę linijek? Nie daje mi to spokoju.

Szczerze mówiąc, ciekawi mnie to na tyle, że jak napiszesz przy każdej linijce komentarz ("//cośtam") z informacją co wyobrażałeś sobie że będzie robić, to napiszę ci dokładnie co powinieneś zrobić (i co robiłeś źle, tam gdzie da się to wprost określić). Nie jest to w moim zwyczaju, ale tutaj autentycznie ciekawość jest silniejsza.

GothicModer

GothicModer

Użytkownicy
Skrypter, grafik
posty105
Propsy23
ProfesjaSkrypter
  • Użytkownicy
  • Skrypter, grafik
Dzięki Avallach. Dawno już zrozumiałem, ale zapomniałem o tym temacie :trollface: Zajrzałem do Budzis Skrypt Moda i skopiowałem regenerację. Później dodałem warunek:

  if (hero.attribute[ATR_HITPOINTS] <= 0)&&((rising == TRUE)||(napoj_rising == TRUE)
{
  hero.attribute[ATR_HITPOINTS] =  hero.attribute[ATR_HITPOINTS]+((hero.attribute[ATR_REGENERATEHP])*2);

AI_FullStop(hero);
 if (napoj_rising == TRUE)
{
 napoj_rising = FALSE;
};


};
 
Szukam testerów do moda i ludzi chętnych do pomocy w nim. Szczegóły PW



0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry