Orientacja w czasie na zmiennych 3719 8

O temacie

Autor MajkeI

Zaczęty 12.11.2013 roku

Wyświetleń 3719

Odpowiedzi 8

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Próbuję stworzyć "czas na funkcjach". Już tłumaczę:
1. Na początku dodałem zmienne dni:
// to w pliku Story_Globals.d
var int PONIEDZIALEK;
var int WTOREK;
var int SRODA;
var int CZWARTEK;
var int PIATEK;
var int SOBOTA;
var int NIEDZIELA;

2. Aby od czegoś zacząć do pierwszego dialogu w grze, który po prostu musi się odbyć, czyli rozomwa z Diego dodaję wartości przyjmując, że jest poniedziałek:
FUNC VOID Info_Diego_Gamestart_Info()
{
AI_Output(self,hero,"Info_Diego_Gamestart_11_00"); //Nazywam się Diego.
AI_Output(hero,self,"Info_Diego_Gamestart_15_01"); //Jestem...
AI_Output(self,hero,"Info_Diego_Gamestart_11_02"); //Nie interesuje mnie kim jesteś. Jesteś tu nowy - a do mnie należy dbanie o nowych. Na razie to tyle...
AI_Output(self,hero,"Info_Diego_Gamestart_11_03"); //Jeśli chcesz jeszcze trochę pożyć, słuchaj się mnie, ale oczywiście nie będę ci przeszkadzał w ewentualnej próbie samobójstwa. To jak będzie?

PONIEDZIALEK = TRUE;
WTOREK       = FALSE;
SRODA        = FALSE;
CZWARTEK     = FALSE;
PIATEK       = FALSE;
SOBOTA       = FALSE;
NIEDZIELA    = FALSE;

B_Kapitelwechsel(1);
};

3. Teraz napisałem TO, aby dni się zmieniały i tutaj pierwszy problem, gdyż nie wiem gdzie to dać i co zrobić, żeby działało automatycznie w ciągu gry: (koncepcja jest taka, że gdyby była godzina 23.59 to dzień zmieniałby się na następny z tą jedną minutą straty)
{
  if (Wld_IsTime (23,59))  && (PONIEDZIALEK == TRUE)
  {
  PONIEDZIALEK = FALSE;
  WTOREK = TRUE;
  }
  else  if (Wld_IsTime (23,59))  && (WTOREK == TRUE)
  {
  WTOREK = FALSE;
  SRODA = TRUE;
  }
  else  if (Wld_IsTime (23,59))  && (SRODA == TRUE)
  {
  SRODA = FALSE;
  CZWARTEK = TRUE;
  }
  else  if (Wld_IsTime (23,59))  && (CZWARTEK == TRUE)
  {
  CZWARTEK = FALSE;
  PIATEK = TRUE;
  }
  else  if (Wld_IsTime (23,59))  && (CZWARTEK == TRUE)
  {
  CZWARTEK = FALSE;
  PIATEK = TRUE;
  }
  else  if (Wld_IsTime (23,59))  && (PIATEK == TRUE)
  {
  PIATEK = FALSE;
  SOBOTA = TRUE;
  }
  else  if (Wld_IsTime (23,59))  && (SOBOTA == TRUE)
  {
  SOBOTA = FALSE;
  NIEDZIELA = TRUE;
  }
   else  if (Wld_IsTime (23,59))  && (NIEDZIELA == TRUE)
  {
  NIEDZIELA = FALSE;
  PONIEDZIALEK = TRUE;
  };
};

4. I kwestia snu w łóżku: (plik Sleepabit.d)
//****************************
// PC_Sleep
//****************************
func void PC_Sleep (var int t)
{
AI_StopProcessInfos(self); // [SK] ->muss hier stehen um das update zu gewährleisten
self.aivar[AIV_INVINCIBLE]=FALSE;
if (Wld_IsTime(00,00,t,00))
{
Wld_SetTime (t,00);
}
else
{
t = t + 24;
Wld_SetTime (t,00);
};
PrintScreen ("Sen dobrze ci zrobił.", -1,-1,"font_old_20_white.tga",3);
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS_MAX];
hero.attribute[ATR_MANA] = hero.attribute[ATR_MANA_MAX];
PrintGlobals (PD_ITEM_MOBSI);
Npc_SendPassivePerc (hero, PERC_ASSESSENTERROOM, NULL, hero); //...damit der Spieler dieses Feature nicht zum Hütteplündern ausnutzt!
};
func void SLEEPABIT_S1 ()
{
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (her);
};
};
//-------------------- Gar nicht schlafen -------------------------
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()
{
return 1;
};
func VOID PC_NoSleep_Info()
{
AI_StopProcessInfos (self);
self.aivar[AIV_INVINCIBLE]=FALSE;
};
//---------------------- morgens --------------------------------------
INSTANCE PC_SleepTime_Morning (C_INFO)
{
npc = PC_Hero;
condition = PC_SleepTime_Morning_Condition;
information = PC_SleepTime_Morning_Info;
important = 0;
permanent = 1;
description = "Śpij do następnego poranka";
};
FUNC INT PC_SleepTime_Morning_Condition()
{
return 1;
};
func void PC_SleepTime_Morning_Info ()
{
  if (Wld_IsTime (08,01,23,59))   && (PONIEDZIALEK == TRUE)
  {
  PONIEDZIALEK = FALSE;
  WTOREK = TRUE;
    PC_Sleep (8);
  }
  else if (Wld_IsTime (08,01,23,59))   && (WTOREK == TRUE)
  {
  WTOREK = FALSE;
  SRODA = TRUE;
  PC_Sleep (8);
  }
    else if (Wld_IsTime (08,01,23,59))   && (SRODA == TRUE)
  {
  SRODA = FALSE;
  CZWARTEK = TRUE;
  PC_Sleep (8);
  }
    else if (Wld_IsTime (08,01,23,59))   && (CZWARTEK == TRUE)
  {
    CZWARTEK = FALSE;
  PIATEK = TRUE;
  PC_Sleep (8);
  }
    else if (Wld_IsTime (08,01,23,59))   && (PIATEK == TRUE)
  {
  PIATEK = FALSE;
  SOBOTA = TRUE;
  PC_Sleep (8);
  }
    else if (Wld_IsTime (08,01,23,59))   && (SOBOTA == TRUE)
  {
  SOBOTA = FALSE;
  NIEDZIELA = TRUE;
  PC_Sleep (8);
  }
    else if (Wld_IsTime (08,01,23,59))   && (NIEDZIELA == TRUE)
  {
  NIEDZIELA = FALSE;
  PONIEDZIALEK = TRUE;
  PC_Sleep (8);
  }
  else if (Wld_IsTime (00,00,07,59))
  {
    PC_Sleep (8);
  };
};
//--------------------- mittags -----------------------------------------
INSTANCE PC_SleepTime_Noon (C_INFO)
{
npc = PC_Hero;
condition = PC_SleepTime_Noon_Condition;
information = PC_SleepTime_Noon_Info;
important = 0;
permanent = 1;
description = "Śpij do południa";
};
FUNC INT PC_SleepTime_Noon_Condition()
{
return 1;
};
func void PC_SleepTime_Noon_Info ()
{
  if (Wld_IsTime (12,01,23,59))   && (PONIEDZIALEK == TRUE)
  {
  PONIEDZIALEK = FALSE;
  WTOREK = TRUE;
    PC_Sleep (12);
  }
  else if (Wld_IsTime (12,01,23,59))   && (WTOREK == TRUE)
  {
  WTOREK = FALSE;
  SRODA = TRUE;
  PC_Sleep (12);
  }
    else if (Wld_IsTime (12,01,23,59))   && (SRODA == TRUE)
  {
  SRODA = FALSE;
  CZWARTEK = TRUE;
  PC_Sleep (12);
  }
    else if (Wld_IsTime (12,01,23,59))   && (CZWARTEK == TRUE)
  {
    CZWARTEK = FALSE;
  PIATEK = TRUE;
  PC_Sleep (12);
  }
    else if (Wld_IsTime (12,01,23,59))   && (PIATEK == TRUE)
  {
  PIATEK = FALSE;
  SOBOTA = TRUE;
  PC_Sleep (12);
  }
    else if (Wld_IsTime (12,01,23,59))   && (SOBOTA == TRUE)
  {
  SOBOTA = FALSE;
  NIEDZIELA = TRUE;
  PC_Sleep (12);
  }
    else if (Wld_IsTime (12,01,23,59))   && (NIEDZIELA == TRUE)
  {
  NIEDZIELA = FALSE;
  PONIEDZIALEK = TRUE;
  PC_Sleep (12);
  }
  else if (Wld_IsTime (00,00,11,59))
  {
    PC_Sleep (12);
  };
};
//---------------------- abend --------------------------------------
INSTANCE PC_SleepTime_Evening (C_INFO)
{
npc = PC_Hero;
condition = PC_SleepTime_Evening_Condition;
information = PC_SleepTime_Evening_Info;
important = 0;
permanent = 1;
description = "Śpij do wieczora";
};
FUNC INT PC_SleepTime_Evening_Condition()
{
return 1;
};
func void PC_SleepTime_Evening_Info ()
{
  if (Wld_IsTime (19,01,23,59))   && (PONIEDZIALEK == TRUE)
  {
  PONIEDZIALEK = FALSE;
  WTOREK = TRUE;
    PC_Sleep (19);
  }
  else if (Wld_IsTime (19,01,23,59))   && (WTOREK == TRUE)
  {
  WTOREK = FALSE;
  SRODA = TRUE;
  PC_Sleep (19);
  }
    else if (Wld_IsTime (19,01,23,59))   && (SRODA == TRUE)
  {
  SRODA = FALSE;
  CZWARTEK = TRUE;
  PC_Sleep (19);
  }
    else if (Wld_IsTime (19,01,23,59))   && (CZWARTEK == TRUE)
  {
    CZWARTEK = FALSE;
  PIATEK = TRUE;
  PC_Sleep (19);
  }
    else if (Wld_IsTime (19,01,23,59))   && (PIATEK == TRUE)
  {
  PIATEK = FALSE;
  SOBOTA = TRUE;
  PC_Sleep (19);
  }
    else if (Wld_IsTime (19,01,23,59))   && (SOBOTA == TRUE)
  {
  SOBOTA = FALSE;
  NIEDZIELA = TRUE;
  PC_Sleep (19);
  }
    else if (Wld_IsTime (19,01,23,59))   && (NIEDZIELA == TRUE)
  {
  NIEDZIELA = FALSE;
  PONIEDZIALEK = TRUE;
  PC_Sleep (19);
  }
  else if (Wld_IsTime (00,00,18,59))
  {
    PC_Sleep (19);
  };
};
//------------------------ nacht -----------------------------------------
instance PC_SleepTime_Midnight (C_INFO)
{
npc = PC_Hero;
condition = PC_SleepTime_Midnight_Condition;
information = PC_SleepTime_Midnight_Info;
important = 0;
permanent = 1;
description = "Śpij do północy";
};
FUNC INT PC_SleepTime_Midnight_Condition()
{
return 1;
};
func VOID PC_SleepTime_Midnight_Info()
{
  if (Wld_IsTime (00,01,23,59))   && (PONIEDZIALEK == TRUE)
  {
  PONIEDZIALEK = FALSE;
  WTOREK = TRUE;
    PC_Sleep (0);
  }
  else if (Wld_IsTime (00,01,23,59))   && (WTOREK == TRUE)
  {
  WTOREK = FALSE;
  SRODA = TRUE;
  PC_Sleep (0);
  }
    else if (Wld_IsTime (00,01,23,59))   && (SRODA == TRUE)
  {
  SRODA = FALSE;
  CZWARTEK = TRUE;
  PC_Sleep (0);
  }
    else if (Wld_IsTime (00,01,23,59))   && (CZWARTEK == TRUE)
  {
    CZWARTEK = FALSE;
  PIATEK = TRUE;
  PC_Sleep (0);
  }
    else if (Wld_IsTime (00,01,23,59))   && (PIATEK == TRUE)
  {
  PIATEK = FALSE;
  SOBOTA = TRUE;
  PC_Sleep (0);
  }
    else if (Wld_IsTime (00,01,23,59))   && (SOBOTA == TRUE)
  {
  SOBOTA = FALSE;
  NIEDZIELA = TRUE;
  PC_Sleep (0);
  }
    else if (Wld_IsTime (00,01,23,59))   && (NIEDZIELA == TRUE)
  {
  NIEDZIELA = FALSE;
  PONIEDZIALEK = TRUE;
  PC_Sleep (0);
  };
};

No i to by było na tyle. Proszę o pomoc z tą 3. No i opinie, czy to wogóle zadziała?
Kombinuję z tym, bo łatwo byłoby mi po prostu wpisywać np. if (dzień tygonia == TRUE/FALSE) w warunkach i było by to wygodniejsze.  :lol:
 


MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Rozumiem, że chodzi ci o coś takiego, o czym pisze RafałBudzis tutaj http://themodders.org/index.php?topic=17326.msg1038830#msg1038830 ale jak zrobić, żeby zmienna mogła być wprowadzana, tak jak pisałem powyżej?? np. PONIEDZIAŁEK == TRUE; w warunku
Ten sposób, o którym mówisz jest na pewno łatwiejszy ale nie wiesz gdzie to dać {
  if   (Wld_IsTime   (23,59))  && (PONIEDZIALEK == TRUE)
  {
  PONIEDZIALEK = FALSE;
  WTOREK = TRUE;
  }
  else  if   (Wld_IsTime   (23,59))  && (WTOREK == TRUE)
  {
  WTOREK = FALSE;
  SRODA = TRUE;
  }
  else  if   (Wld_IsTime   (23,59))  && (SRODA == TRUE)
  {
  SRODA = FALSE;
  CZWARTEK = TRUE;
  }
  else  if   (Wld_IsTime   (23,59))  && (CZWARTEK == TRUE)
  {
  CZWARTEK = FALSE;
  PIATEK = TRUE;
  }
  else  if   (Wld_IsTime   (23,59))  && (CZWARTEK == TRUE)
  {
  CZWARTEK = FALSE;
  PIATEK = TRUE;
  }
  else  if   (Wld_IsTime   (23,59))  && (PIATEK == TRUE)
  {
  PIATEK = FALSE;
  SOBOTA = TRUE;
  }
  else  if   (Wld_IsTime   (23,59))  && (SOBOTA == TRUE)
  {
  SOBOTA = FALSE;
  NIEDZIELA = TRUE;
  }
   else  if   (Wld_IsTime   (23,59))  && (NIEDZIELA == TRUE)
  {
  NIEDZIELA = FALSE;
  PONIEDZIALEK = TRUE;
  };
};
tak żeby uruchamiało się ZAWSZE, nie wiem do jakiegoś skryptu który wywołuje się cały czas? Chodzi o Gothic 1...

BTW: Jak sposobem dzielenia przez 7 można dać warunek, tak jak mówiłem, "jeżeli jest środa" czy coś takiego. Właśnie na tym mi najbardziej zależy ;D
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Ze zwykłych skryptów nie ma dostępu do "skryptu który wywołuje się cały czas". Chodzi ci o główną pętlę silnika. Ale dawanie tego tam byłoby idiotyzmem, rly. Zamiast tego możesz użyć B_RefreshArmor, które jest wywoływane przez silnik codziennie o północy (o ile gracz jej nie przeskoczył snem, na co twój wariant też byłby podatny). 

Tak czy inaczej, zdecydowanie sugeruję zrobić to tak jak napisałem.

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
aha dzięki, spróbuję i napiszę czy jest ok wszystko

EDIT: Wiesz co nie ogarniam tego... Ma być tak? Wld_GetDay()%7 Ale co to znaczy?
Np. warunek if ((Wld_GetDay()%7)== 2) to jest "jeżeli jest wtorek"??
Sory nie ogarniam to pytam
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Wld_GetDay zwraca numer dnia. x % y zwraca resztę z dzielenia x przez y. Tak więc Wld_GetDay()%7 zwróci ci numer dnia tygodnia zakładając że pierwszym dniem gry był poniedziałek. Zauważ jednak że reszta z dzielenia przez 7 będzie miała wartości 0-6. 2 to środa, nie wtorek.

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Jezu jak ja nie ogarniam czekaj 0 to poniedziałek 1 to wtorek 2 to środa, 3 to czwartek 4 piątek 5 sobota 6 niedziela? Dobrze mówię?

Dobra, dzięki wielkie za pomoc.
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Zawsze możesz sobie ułatwić życie stałymi :)

CONST INT PONIEDZIALEK = 0;
CONST INT WTOREK = 1;
CONST INT SRODA = 2;
...

a potem robić warunek

if ( (Wld_GetDay()%7) == SRODA)

MajkeI

MajkeI

Użytkownicy
Front End Developer
posty698
Propsy169
Profesjabrak
  • Użytkownicy
  • Front End Developer
Wpadłem na to ;D
 


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