Warunek if(...) 18965 52

O temacie

Autor

Zaczęty 20.01.2008 roku

Wyświetleń 18965

Odpowiedzi 52

Kazzmir
  • Gość

Kazzmir
Gość

Warunek if(...)
2008-01-20, 22:03(Ostatnia zmiana: 2009-07-11, 11:32)
Cytat: Diegomir link=topic=79.msg58603#msg58603 date=Jul 5 2007, 16:21\'
Warunek "if(...)"

Warunek ten jest bardzo przydatny przy tworzeniu questów i dialogów. Oznacza to:
"jeśli(jakiś warunek = x)" to zostanie odpalony odpowiedni dialog.
Np.
if (Npc_IsDead(instance)) oznacza, że dialog zostanie odpalony gdy npc,
 którego instancję wpiszemy jest martwy
Zajmijmy się miejscem warunku if w skrypcie dialogu:
////////////////////////////////////////////////////////////
////////////// hallo
///////////////////////////////////////////////////////
instance Dia_Npc_hallo   (C_INFO)
{
   npc = gil_300_Npc;
   nr  =999;
   condition   =   Dia_Npc_hallo_condition;
   information = Dia_Npc_hallo_info;
   important =  FALSE;
   permanent = FALSE;
   Description = "bla";
};
 
func int Dia_Npc_hallo_condition ()
{
  [color="#33ccff"]if (Npc_IsDead(instance))[/color]
   {
   return TRUE;
   };
};
 
func void Dia_Npc_hallo_info ()
{
   AI_Output (other,self,"Dia_Npc_hallo_00");  //bla
   AI_Output (self, other,"Dia_Npc_hallo_01");  //bla
 
};
Miejsce warunku jest przy func int Dia_Npc_hallo_condition ()
Teraz zajmijmy się innymi warunkami.

IF (Npc_KnowsInfo(other,instance dialogu))dialog jest odpalany wtedy, jeśli rozmawiało się z npc na temat, podajemy instancję dialogu (np. Dia_imie_hej)

IF (Npc_HasItems(other,instance) >= 1 )dialog jest odpalany wtedy, jeśli posiadamy zadeklarowaną ilość jakiegoś itemu, podajemy instancję przedmiotu

 IF (Kapitel >=1)dialog jest odpalany wtedy, jeśli rozdział jest większy/mniejszy/równy zadeklarowanemu

 IF (zmienna == TRUE)wtedy dialog jest odpalany jeśli zmienna (zdefiniowana wcześniej w story_globals) ma podaną wartość. Możemy również użyć zamiast "==" np. "<=" co będzie oznaczało mniejsza lub równa, lub ">=", czyli większa lub równa

Są to podstawowe warunki, które możemy łączyć z "if". Resztę można znaleźć samemu w skryptach Gothica.

Łączenie dwóch warunków:
Warunki łączymy za pomocą "&&". Np.
IF (Npc_KnowsInfo(other,DIA_Npc_bla))
   && (Npc_HasItems(other,Itmi_gold) >= 1 )

Jeszcze przyda się "else"

"else" wykorzystujemy tak:
IF (Npc_KnowsInfo(other,instancja dialogu))
{
AI_Output (self, hero,"DIA_Npc_bla_07_00"); //Co jeżeli warunek JEST spełniony
}  
else
{
AI_Output (self, hero,"DIA_Npc_bla_07_02"); //Co jeżeli warunek NIE JEST spełniony
  };

A teraz dodawać reputacji i nie kopiować bez mojej wiedzy.

jeśli się nie obrazicie to ja dołożę jeszcze kilka warunków:

IF (Wld_IsTime (22,00,23,59))
jeśli jest godzina między 22.00 a 23.59 (oczywiście można wstawić dowolną godzinę)

IF (C_BodystateContains(self, BS_SIT))
jeśli bodystate NPC to (siedzący), można to wykorzystać między innymi to kazania wstać NPC jeśli dajemy mu coś do picia, NPC nie wypije nic na siedząco

IF (Npc_GetDistToWP (self,"waypoint") < XYZ )
to mój ulubiony warunek, funkcja zwróci TRUE jeśli podejdziemy do waypointa na odległość XYZ (tu dowolna odległość w CM czyli 700 to 7m )

i skoro Diegomir napisał o łączeniu to ja dołożę do tego alternatywę służy do tego || np.
IF (Npc_KnowsInfo(other,DIA_Npc_bla))
   || (Npc_HasItems(other,Itmi_gold) >= 1 )

musiałem wyrzucić warunek "czy zadanie w toku" bo to co odnalazłem w jednym skrypcie odnosi się do zmiennej a nie stałej  

Wielkie dzięki. Na pewno się przyda. Więcej nie podawaj. Niech sami sobie szukają  - Diegomir
 

HrK

HrK

Użytkownicy
posty51
  • Użytkownicy

HrK

Warunek if(...)
#1 2008-02-11, 20:29(Ostatnia zmiana: 2009-07-11, 11:08)
Warunek "if(...)"

Warunek ten jest bardzo przydatny przy tworzeniu questów i dialogów. Oznacza to:
"jeśli(jakiś warunek = x)" to zostanie odpalony odpowiedni dialog.
Np.


if (Npc_IsDead(instancja))oznacza, że dialog zostanie odpalony gdy npc,
którego instancję wpiszemy jest martwy
Zajmijmy się miejscem warunku if w skrypcie dialogu:



Cytuj
////////////////////////////////////////////////////////////
//////////////             hallo
///////////////////////////////////////////////////////
instance Dia_Npc_hallo   (C_INFO)
{
   npc     = gil_300_Npc;
   nr          =999;
   condition   =   Dia_Npc_hallo_condition;
   information     = Dia_Npc_hallo_info;
   important     =  FALSE;
   permanent     = FALSE;
   Description    = "bla";
};

func int Dia_Npc_hallo_condition ()
{
  if (Npc_IsDead(instance))
   {
   return TRUE;
   };
};

func void Dia_Npc_hallo_info ()
{
   AI_Output (other,self,"Dia_Npc_hallo_00");  //bla
   AI_Output (self, other,"Dia_Npc_hallo_01");  //bla

};


Miejsce warunku jest przy
func int Dia_Npc_hallo_condition ()

Teraz zajmijmy się innymi warunkami.

IF (Npc_KnowsInfo(other,instancja dialogu))
dialog jest odpalany wtedy, jeśli rozmawiało się z npc na temat, podajemy instancję dialogu(np. Dia_imie_hej)

IF (Npc_HasItems(other,instance) >= 1 )
dialog jest odpalany wtedy, jeśli posiadamy zadeklarowaną ilość jakiegoś itemu, podajemy instancję przedmiotu

 IF (Kapitel >=1)
dialog jest odpalany wtedy, jeśli rozdział jest większy/mniejszy/równy zadeklarowanemu

 IF (zmienna == TRUE)
dialog jest odpalany wtedy, jeśli zmienna (zdefiniowana wcześniej w story_globals.d) ma podaną wartość. Możemy również użyć zamiast "==" np. "<=" co będzie oznaczało mniejsza lub równa, lub ">=", czyli większa lub równa

Są to podstawowe warunki, które możemy łączyć z "if". Resztę można znaleźć samemu w skryptach Gothica.

Łączenie dwóch warunków:
Warunki łączymy za pomocą "&&". Np.

IF (Npc_KnowsInfo(other,DIA_Npc_bla))
   && (Npc_HasItems(other,Itmi_gold) >= 1 )


Jeszcze przyda się "else"

"else" wykorzystujemy tak:

IF (Npc_KnowsInfo(other,instancja dialogu))
{
AI_Output (self, hero,"DIA_Npc_bla_07_00"); //Co jeżeli warunek JEST spełniony
}  
else
{
AI_Output (self, hero,"DIA_Npc_bla_07_02"); //Co jeżeli warunek NIE JEST spełniony
};


--------------------------------------------------------------------------


jeśli się nie obrazicie to ja dołożę jeszcze kilka warunków:

IF (Wld_IsTime (22,00,23,59))

jeśli jest godzina między 22.00 a 23.59 (oczywiście można wstawić dowolną godzinę)


IF (C_BodystateContains(self, BS_SIT))

jeśli bodystate NPC to (siedzący), można to wykorzystać między innymi to kazania wstać NPC jeśli dajemy mu coś do picia, NPC nie wypije nic na siedząco

IF (Npc_GetDistToWP (self,"waypoint") < XYZ )
to mój ulubiony warunek, funkcja zwróci TRUE jeśli podejdziemy do waypointa na odległość XYZ (tu dowolna odległość w CM czyli 700 to 7m )

i skoro Diegomir napisał o łączeniu to ja dołożę do tego alternatywę służy do tego || np.

IF (Npc_KnowsInfo(other,DIA_Npc_bla))
   || (Npc_HasItems(other,Itmi_gold) >= 1 )

musiałem wyrzucić warunek "czy zadanie w toku" bo to co odnalazłem w jednym skrypcie odnosi się do zmiennej a nie stałej  

[ tutek ściągnięty z themodders napisany przez Brata Xardasa ]


EDIT: nie pamiętam kto jednak napisał większości wiem tyle że Brat Xardasa dopisał parę warunków

jeżeli chcesz, żeby podczas dialogu npc dostawał xp to wpisujesz linijkę pod dialogiem

B_GiveXP ILOŚĆ DODANEGO XP);
po południu postaram się odpisać na 1 pytanie na razie mam zbyt mało czasu
 

Tomek

Tomek

Użytkownicy
Kapitan Rob
posty2180
Propsy1979
ProfesjaNierób
  • Użytkownicy
  • Kapitan Rob
Nie zauważyłem ich wyżej.


(Npc_GetTrueGuild(hero) == GIL_NONE)Jeśli gildia bohatera ==

if (xxx == LOG_SUCCESS)Jeśli zadanie o instance xxx zostało wykonane. Można też to zmienić na Running, czyli jest aktywne.
 

Bucik

Bucik

Użytkownicy
posty184
Propsy123
Profesjabrak
  • Użytkownicy
A tak z ciekawości. Można zrobić, że JEŚLI ZADANIE NIE ZOSTAŁO WYKONANE (popsute) jak to wygląda ? FILED ? :/
 

Adanos

Adanos

Administrator
Szara eminencja
posty4848
Propsy3155
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Warunek if(...)
#4 2008-04-23, 15:55(Ostatnia zmiana: 2008-04-23, 16:32)
Cytat: Bucik\'
A tak z ciekawości. Można zrobić, że JEŚLI ZADANIE NIE ZOSTAŁO WYKONANE (popsute) jak to wygląda ? FILED ? smile.gif
Tak:
if (jakieśZadanie == LOG_FAILED)
Edit: Masz rację Diegomirze. Poprawiłem.

Diegomir

Diegomir

Użytkownicy
Gnój
posty194
Propsy243
Profesjabrak
  • Użytkownicy
  • Gnój
Raczej
if (jakieśZadanie == LOG_FAILED)

Tomek

Tomek

Użytkownicy
Kapitan Rob
posty2180
Propsy1979
ProfesjaNierób
  • Użytkownicy
  • Kapitan Rob

Tomek

Warunek if(...)
#6 2009-08-03, 19:20(Ostatnia zmiana: 2009-08-30, 14:42)
if ((Mob_HasItems ("SKRZYNIA", ItFo_Booze)) == FALSE)
Warunek: jeśli mob "SKRZYNIA" nie posiada "ItFo_Booze". Podobnie jak przy npc z różnicą przedrostka zmianionego z Npc na Mob. Prawdopodobnie zmiast == można wstawiać znaki wielkości a zamiast "False" czy "True" cyfry.
 

Diksu

Diksu

Użytkownicy
posty4
  • Użytkownicy
Tak z ciekawości jest warunek jeśli punkty nauki?
Coś jak if (learnpoints < 5)?
 

maciejh

maciejh

Rzeka
posty797
Propsy215
ProfesjaScenarzysta
  • Rzeka
Raczej nie słyszałem o czymś takim. Ale wyjaśnij po co punkty nauki? Jest funkcja funkcja if, ale z levelem jest

if hero.level >= 5


 

Adanos

Adanos

Administrator
Szara eminencja
posty4848
Propsy3155
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
Tak z ciekawości jest warunek jeśli punkty nauki?
Coś jak if (learnpoints < 5)?
Tak.
if (hero.lp < 5)
Ogólnie można w instrukcji warunkowej porównywać wszystko, co ma wartość tego samego typu.

maciejh

maciejh

Rzeka
posty797
Propsy215
ProfesjaScenarzysta
  • Rzeka

maciejh
Rzeka

Warunek if(...)
#10 2010-11-08, 17:44(Ostatnia zmiana: 2010-11-08, 17:58)
A jest warunek if, z dojściem do danego waypointu?
 

Adanos

Adanos

Administrator
Szara eminencja
posty4848
Propsy3155
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Przeczytaj pierwszy post.

A! I nie if, a warunek...

maciejh

maciejh

Rzeka
posty797
Propsy215
ProfesjaScenarzysta
  • Rzeka
Sorry mój błąd. :facepalm:   Nie zauważyłem.
 

Diksu

Diksu

Użytkownicy
posty4
  • Użytkownicy

Diksu

Warunek if(...)
#13 2010-11-10, 20:48(Ostatnia zmiana: 2010-11-17, 18:25)
dzięki Adanosie  :D

P.s. A czy jest opcaj jeśli npc jest pobity (nie zabity)?
 

RickLon

RickLon

Użytkownicy
posty40
Propsy1
Profesjabrak
  • Użytkownicy
Jest warunek czy npc ma założony jakiś przedmiot?
 

Jurigag

Jurigag

Użytkownicy
posty839
Propsy247
ProfesjaSkrypter
  • Użytkownicy
Jest warunek czy ma przedmiot, więc w teorii wychodzi na to samo...
 
Skrypter/Tester - Szukasz testera/skryptera - Pisz !

RickLon

RickLon

Użytkownicy
posty40
Propsy1
Profesjabrak
  • Użytkownicy

RickLon

Warunek if(...)
#16 2010-11-24, 21:57(Ostatnia zmiana: 2010-11-24, 21:58)
Mi chodzi o to, że na przykład można porozmawiać tylko wtedy jak ma się założony np Gniew Innosa,
 

Jurigag

Jurigag

Użytkownicy
posty839
Propsy247
ProfesjaSkrypter
  • Użytkownicy
Npc_GetEquippedMeleeWeapon ?
 
Skrypter/Tester - Szukasz testera/skryptera - Pisz !

Wojak

Wojak

Użytkownicy
posty67
Propsy9
  • Użytkownicy
tak z ciekawości zapytam o składnię: czy dopuszczalne są takie rzeczy:

if (warunek)
{
   if (warunek)
   {
      efekt
   }
   else
   {
      efekt
   }
}
elseif (warunek)
{
   efekt
}
else
{
   efekt
}
 

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7287
Propsy4527
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Warunek if(...)
#19 2010-11-26, 12:21(Ostatnia zmiana: 2010-11-26, 12:29)
elseif musisz pisać rozdzielnie: else if. Ponadto na koniec danego warunku musisz umieszczać po klamrze średnik. Poprawnie wyglądałoby to z grubsza tak:
if (warunek)
{
   if (warunek)
   {
      efekt();
   }
   else
   {
      efekt();
   };
}
else if (warunek)
{
   efekt();
}
else
{
   efekt();
};


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