Wielodniowa rutyna 11621 26

O temacie

Autor Ebhodini

Zaczęty 4.12.2019 roku

Wyświetleń 11621

Odpowiedzi 26

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
If w if'ie?
func void CheckRoutine_SOR(var int dayOfWeek)
{
if (dayOfWeek == 3)
{
//poniedziałek
B_ExchangeRoutine(EBR_100_Gomez, "START"); //GOMEZ

(...)

                if(neues_Kapitel != 3)
                 {
    B_ExchangeRoutine(PC_Thief, "START"); //DIEGO
                 };
}
                (...)
Albo może połączyć to z zadaniem, tzn. jeśli gracz otrzymał od Saturasa zadanie z kamieniami "if ( Npc_KnowsInfo(hero, zadanie z kamieniami)" to rutyna Diego zmienia się na tą "poprawną" a po odnalezieniu kamienia z kanionu rutyna mogłaby powrócić albo zmienić się na jeszcze inną, bo w sumie to Diego i tak pozostaje już poza obozem...
 

Patrix9999

Patrix9999

Użytkownicy
posty127
Propsy38
Profesjabrak
  • Użytkownicy
Można prościej, po prostu jeśli jest już rozdział większy lub równy 3 to wtedy funkcja zmieniająca rutyny diega się nie odpala.
 

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
Nie wiem czy to mój błąd czy ogólny problem. Mianowicie odliczanie dni w B_RefreshArmor() wykonuje się tylko jeśli jesteśmy aktywni o 00:00, tzn. jak pójdziemy spać funkcja się nie wykonuje.
 

Patrix9999

Patrix9999

Użytkownicy
posty127
Propsy38
Profesjabrak
  • Użytkownicy
Ogólny problem, tak po prostu działa ta funkcja, ale ten problem również można ogarnąć.
Wystarczy że wkleisz wywołanie checka dla danego Npc'a/Npc'ów do funkcji związanej z zakończeniem spania.
 

Ebhodini

Ebhodini

Użytkownicy
posty77
Profesjabrak
  • Użytkownicy
Aha ok czyli np. tutaj
INSTANCE PC_NoSleep (c_Info)

{
npc = PC_Hero;
nr = 999;
condition = PC_NoSleep_Condition;
information = PC_NoSleep_Info;
important = 0;
permanent = 1;
description = DIALOG_ENDE;
};

FUNC INT PC_NoSleep_Condition()
{
if (MONOLOG == M_SLEEP)
{
return 1;
};
};

func VOID PC_NoSleep_Info()
{
AI_StopProcessInfos (self);
self.aivar[AIV_INVINCIBLE]=FALSE;

};
W środku func VOID PC_NoSleep_Info() dodać B_RefreshArmor(), wtedy zawsze gdy się położymy i wstaniemy wykona się refresharmor, no chyba, że będzie to ten sam dzień to w samej funkcji jest blokada powtórenego wykonywania się funkcji. Finalnie coś takiego?
Dla KONIEC
func VOID PC_NoSleep_Info()
{
AI_StopProcessInfos (self);
self.aivar[AIV_INVINCIBLE]=FALSE;
B_RefreshArmor();
};
Dla poranka, południa i wieczora
func void PC_SleepTime_Morning_Info ()
{
PC_Sleep (8); // SN: geändert, da um 7 Uhr noch keiner der NSCs wach ist!
        B_RefreshArmor();
};
Zakładam, że trzeba dać w każdym miejscu ponieważ po wykonaniu funkcji spania gracz samoczynnie wstaje i nie używa KONIEC?
 

Patrix9999

Patrix9999

Użytkownicy
posty127
Propsy38
Profesjabrak
  • Użytkownicy
PC_NoSleep_Info to nie ta funkcja, ogólnie to wywoływanie B_RefreshArmor jest takim średnimy pomysłem.
Można, ale lepiej byłoby zrobić funkcje do rutyn i ją wywoływać i w B_RefreshArmor i w funkcji od spania (czyli tej, która się wywoła gdy gracz JUŻ SIĘ PRZEŚPI), sprawdź funkcje PC_Sleep.
 

piootrek86

piootrek86

Użytkownicy
Fanatyk Gothica
posty89
Propsy13
ProfesjaGrafik 3D
  • Użytkownicy
  • Fanatyk Gothica
func void dnitygodnia()
{
if dzien ==7
{
dzien = dzien - 6;


}
else
{

dzien = dzien +1;
MEM_Info("-------------------->>>>>>>>>>>>>         Doda³em +1 do numeru dnia");
};

};

Ja tak to rozwiazalem. Potem dalem w refresharmor:

func void B_RefreshArmor()
{
FF_ApplyExt(dnitygodnia, 1, 1);


};

a w skrypcie spania dalem B_RefreshArmor();

Po czym w skypcie npc w rutynach dawalem:

if dzien == 1
{ rutyna 1};

f dzien == 2
{ rutyna 2};

itd ....

mi dzialalo  :D
 
Mam pomysł na moda ale nie mam chęci i zdolności :D


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