Problem: rozbudowane dialogi, różne reakcje na wypowiedź bohatera 3327 5

O temacie

Autor StarFighter

Zaczęty 8.06.2010 roku

Wyświetleń 3327

Odpowiedzi 5

StarFighter

StarFighter

Użytkownicy
posty65
  • Użytkownicy
Witam.
Ogólnie z prostymi dialogami problemów (już) nie mam. Tak samo z określaniem warunków, robienia różnych tekstów widocznych np tylko dla jakiegoś lvl przez if..
Jednak ostatnie zadanie jakie sobie postawiłem całkowicie mnie przerosło  :foch:  
Chciałbym, aby po zagadaniu do postaci (jakaś obelga czy groźba)
-jeśli nasz bohater ma siłę >lub= 50 postać coś tam gada i ignoruje oraz oddaje przedmiot
-jeśli postać ma siłę < 50:
     - i należy do pewnej gildii npc to ignoruje i coś tam gada
     -nie należy do tej gildii: npc gada, kończy rozmowę i atakuje.

Próbowałem wielu rzeczy: if oraz else if i else (podpatrzyłem to w innych dialogach)
Były błędy. Próbowałem tylko if kilka razy pod rząd. Spacer nie pokazywał błędów ale postać gadała WSZYSTKO.
Były też inne próby.
Najczęstsze błędy: expected ; (sprawdzałem i nigdzie nie było brakującego ; !!!)
Unknown identyfier ELSE oraz inne błędy tego typu
Syntax Error..

Jeżeli ktoś chce skrypt mogę go odtworzyć, na razie usunąłem bo błędy mnie wkurzały a nie miałem zamiaru nie modować do czasu rozwiązania problemu.

Nie proszę o zrobienie wszystkiego za mnie.
Moje tylko pytanie jak powinna wyglądać:  FUNC VOID dia_aaa_aaa_info ? Co zrobić by można było stworzyć  taki dialog jak podałem w przykładzie? Czego mam użyć?
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
to zrób same if`y
1 na to ze ma gildie i więcej niż 50 siły czyli if (hero.attribute[ATR_STRENGTH]>=50)&&(hero.guild>1)zrobiłem >1 czyli większe od zera bo 1 to bez gildi więc jak bedzie miał gildie to uruchomi sie to a reszta to tak
if (hero.attribute[ATR_STRENGTH]>=50)&&(hero.guild==1)//brak gildi wiecej siły
if (hero.attribute[ATR_STRENGTH]<50)&&(hero.guild>1)//jest gildi mniej siły
if (hero.attribute[ATR_STRENGTH]<50)&&(hero.guild==1)//brak gildi mniej siły
if (hero.attribute[ATR_STRENGTH]>=50)&&(hero.guild>1)//jest gildi więcej siły

może zle cie zrozumiałem jak cos to wrzuć to co ty zrobiłeś

StarFighter

StarFighter

Użytkownicy
posty65
  • Użytkownicy
Dogrzebałem się do kopii jednej z wielu wersji skryptu, który chciałem zrobić (tak ogólnie to jest tylko test możliwości więc dialogi  są głupie)

Cytuj
//========================================
//-----------------> givemeyoursword
//========================================

INSTANCE DIA_Fletcher_givemeyoursword (C_INFO)
{
   npc         = Grd_255_Fletcher;
   nr         = 11;
   condition   = DIA_Fletcher_givemeyoursword_Condition;
   information   = DIA_Fletcher_givemeyoursword_Info;
   permanent   = 0;
   description = "Hej, frajerze! Oddawaj mi swój miecz";
};   Tutaj wszystko gra

FUNC INT DIA_Fletcher_givemeyoursword_Condition()
{
 if (Npc_HasItems (self, ItMw_1H_Sword_02) >=1)
   
    {
    return TRUE;
    };
};

Warunek: ma mieć ten miecz i też w tej linijce nie ma problemów

FUNC VOID DIA_Fletcher_givemeyoursword_Info() tu zaczyna się jazda prawie same błędy zwłaszcza na dole a jeden z nich FUNC does not return. Że niby nie powraca? O co chodzi?
{

   AI_Output (other, self,"DIA_Fletcher_givemeyoursword_15_00"); //Hej, frajerze! Oddawaj mi swój miecz"
   
  if (other.attribute[ATR_STRENGTH] >= 50)
   {

AI_Output (self, other,"DIA_Fletcher_givemeyoursword_02_01"); //Dobra, dobra, masz i zostaw mnie w spokoju.
 B_GiveInvItems (self, other, ItMw_1H_Sword_02, 1);
AI_StopProcessInfos   (self);

};

if (other.attribute[ATR_STRENGTH] <= 49)
{

AI_Output (self, other,"DIA_Fletcher_givemeyoursword_02_02"); //Bo CO mi zrobisz, mięczaku?
};
    if (Npc_GetTrueGuild (hero) == GIL_GRD)
    {
   AI_Output (self, other,"DIA_Fletcher_givemeyoursword_02_03"); //Masz szczęście, że jesteś jednym znas. A teraz spadaj!
   AI_StopProcessInfos   (self);
   
};
   if (! Npc_GetTrueGuild (hero) == GIL_GRD)
{
   AI_Output (self, other,"DIA_Fletcher_givemeyoursword_02_04"); //Za chwilę zamorduję kolejnego idiotę, który mnie wkurzył . Słodkich snów!
   AI_StopProcessInfos   (self);
   Npc_SetTarget(self,other);
   AI_StartState(self,ZS_ATTACK,1,"");
AI_StopProcessInfos   (self);
}:

AI_StopProcessInfos   (self);
};
};
ale były wersje gdzie wszystko było dobrze za to w grze albo nie było w ogóle dialogu albo nie działał tak jak należy.

EDIT: Dobra, spróbuję zrobić tak jak napisałeś może miałem jakieś błędy po drodze sam nie wiem...
 

StarFighter

StarFighter

Użytkownicy
posty65
  • Użytkownicy
Zauważyłem pewną rzecz. Jak mamy po ifie else if to nie daje się ; po } (tak jest w dialogach m. in. cor kaloma i nie tylko)

Uprościłem mój skrypt do minimum i dałem różne wariany (ify bez ;, ify z ;, if + else if i tak dalej.)
Oto niektóre z nich.

Cytuj
//========================================
//-----------------> fuckyou
//========================================

INSTANCE DIA_Grim_PP1 (C_INFO)
{
   npc         = Vlk_580_Grim;
   nr         = 11;
   condition   = DIA_Grim_fuckyou_Condition;
   information   = DIA_Grim_fuckyou_Info;
   permanent   = 0;
   description = "Hej, frajerze!";
};

FUNC INT DIA_Grim_fuckyou_Condition()
{
   return 1;
};


FUNC VOID DIA_Grim_fuckyou_Info()
{
AI_Output (other, self, DIA_Grim_fuckyou_15_00"); //Hej, frajerze!
    if (other.attribute[STRENGTH] >= 11);
   {
AI_Output (self, other, DIA_Grim_fuckyou_15_01"); //Sam jesteś frajer
}
if (other.attribute[ATR_STRENGTH] <= 10);
{
AI_Output (self, other, DIA_Grim_fuckyou_15_02"); //Zostaw mnie w spokoju, osiłku.
};
};

Cytuj
//========================================
//-----------------> fuckyou
//========================================

INSTANCE DIA_Grim_PP1 (C_INFO)
{
   npc         = Vlk_580_Grim;
   nr         = 11;
   condition   = DIA_Grim_fuckyou_Condition;
   information   = DIA_Grim_fuckyou_Info;
   permanent   = 0;
   description = "Hej, frajerze!";
};

FUNC INT DIA_Grim_fuckyou_Condition()
{
   return 1;
};


FUNC VOID DIA_Grim_fuckyou_Info()
{
AI_Output (other, self, DIA_Grim_fuckyou_15_00"); //Hej, frajerze!
    if (other.attribute[STRENGTH] >= 11);
   {
AI_Output (self, other, DIA_Grim_fuckyou_15_01"); //Sam jesteś frajer
}
else if (other.attribute[ATR_STRENGTH] <= 10);
{
AI_Output (self, other, DIA_Grim_fuckyou_15_02"); //Zostaw mnie w spokoju, osiłku.
};
};
Cytuj
//========================================
//-----------------> fuckyou
//========================================

INSTANCE DIA_Grim_PP1 (C_INFO)
{
   npc         = Vlk_580_Grim;
   nr         = 11;
   condition   = DIA_Grim_fuckyou_Condition;
   information   = DIA_Grim_fuckyou_Info;
   permanent   = 0;
   description = "Hej, frajerze!";
};

FUNC INT DIA_Grim_fuckyou_Condition()
{
   return 1;
};


FUNC VOID DIA_Grim_fuckyou_Info()
{
AI_Output (other, self, DIA_Grim_fuckyou_15_00"); //Hej, frajerze!
    if (other.attribute[STRENGTH] >= 11);
   {
AI_Output (self, other, DIA_Grim_fuckyou_15_01"); //Sam jesteś frajer
};
if (other.attribute[ATR_STRENGTH] <= 10);
{
AI_Output (self, other, DIA_Grim_fuckyou_15_02"); //Zostaw mnie w spokoju, osiłku.
};
};


Czy ktoś mógłby mi powiedzieć co robię źle? Bo sam już nie wiem, patrzyłem do innych skryptów, porównywałem, robię co mogę a przy reprasowaniu skryptów w spacerze wyskakują mi same błędy.

PS. Sorry że napisałem dwa posty pod rząd ale jakbym tego nie zrobił to nikt by nie zauważył, że coś dodałem do tematu  :lol:
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
if (other.attribute[STRENGTH] >= 11);Po warunku nie daje się średnika.

StarFighter

StarFighter

Użytkownicy
posty65
  • Użytkownicy
Dzięki. Wszystko działa. Był co prawda jeszcze jeden błąd którego mi nikt nie wskazał

Cytuj
(self, "other, DIA_Grim_fuckyou_15_01");
'
ale jakoś sobie podadziłem
Jeszcze raz dzięki  ;)
 


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