Przedmiot i jego monolog - brak rezultatów 7011 14

O temacie

Autor karus

Zaczęty 11.12.2011 roku

Wyświetleń 7011

Odpowiedzi 14

karus

karus

Użytkownicy
posty122
  • Użytkownicy
No więc postanowiłem nieco skrypcik rozwinąć [Pisanie w Księgach]. Poczytałem o monologach i potrzebowałem napisać monolog do w moim przypadku "pióra". Oto co mam.

1. Plik z przedmiotem

 INSTANCE Itmw_Pioro (C_Item)
{
name = "Pióro";

mainflag = ITEM_KAT_NONE;
flags = 0;

value = 100;

visual = "Feder.3DS";
material = MAT_METAL;
on_state[0]         = Use_PISANIE_S1;
description = name;
TEXT[4] = NAME_Value; COUNT[4] = Value_Schlüssel;
};

FUNC VOID Use_PISANIE_S1()
{
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
monolog = PISANIE;
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (her);
};
};


2. Plik z dialogiem monologowym: DIA_mon1_PISANIE.d

// **************************************************
// [ST SYSTEM]
// *************************************************
instance  PC_BezPisania (C_INFO)
{
npc = PC_Hero;
nr = 999;
condition = PISANIE_TRUE;
information = PC_BezPisania_Info;
permanent = 1;
description = DIALOG_ENDE;
};

FUNC INT PISANIE_TRUE()
{
        if (monolog == PISANIE)
        {
                return TRUE;
        };
};

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

};

// **************************************************
// [ST SYSTEM - wlasciwosc]
// **************************************************
instance  PC_Pisanie (C_INFO)
{
npc = PC_Hero;
nr = 999;
condition = PISANIE_TRUE;
information = PC_Pisanie_Info;
permanent = 1;
description = "Chcę Pisać";
};

FUNC int  PC_PISANIE_TRUE()
{  
return 1;

};

FUNC VOID PC_Pisanie_Info()
{
Info_ClearChoices (PC_Pisanie);
Info_AddChoice (PC_Pisanie,"Wezmę to pióro i księgę",PC_Pisanie_Wybor1);
};

FUNC VOID PC_Pisanie_Wybor1 ()
{
Info_ClearChoices (PC_Pisanie);
Info_AddChoice (PC_Pisanie, "[PISZ]",PC_Pisanie_Wybor1_1);
};

func void PC_Pisanie_Wybor1_1()
{
Info_ClearChoices (PC_Pisanie);
Info_AddChoice (PC_Pisanie, "A",PC_Pisanie_Wybor1_1_1);
Info_AddChoice (PC_Pisanie, "B",PC_Pisanie_Wybor3_1);
Info_AddChoice (PC_Pisanie, "C",PC_Pisanie_Wybor3_4);
Info_AddChoice (PC_Pisanie, "D",PC_Pisanie_Wybor3_6);
Info_AddChoice (PC_Pisanie, "E",PC_Pisanie_Wybor3_7);
Info_AddChoice (PC_Pisanie, "F",PC_Pisanie_Wybor3_8);
Info_AddChoice (PC_Pisanie, "G",PC_Pisanie_Wybor3_9);
Info_AddChoice (PC_Pisanie, "H",PC_Pisanie_Wybor3_10);
Info_AddChoice (PC_Pisanie, "I",PC_Pisanie_Wybor3_11);
Info_AddChoice (PC_Pisanie, "J",PC_Pisanie_Wybor3_12);
Info_AddChoice (PC_Pisanie, "K",PC_Pisanie_Wybor3_13);
Info_AddChoice (PC_Pisanie, "L",PC_Pisanie_Wybor3_14);
Info_AddChoice (PC_Pisanie, "M",PC_Pisanie_Wybor3_15);
Info_AddChoice (PC_Pisanie, "N",PC_Pisanie_Wybor3_16);
Info_AddChoice (PC_Pisanie, "O",PC_Pisanie_Wybor3_17);
Info_AddChoice (PC_Pisanie, "P",PC_Pisanie_Wybor3_18);
Info_AddChoice (PC_Pisanie, "R",PC_Pisanie_Wybor3_19);
Info_AddChoice (PC_Pisanie, "S",PC_Pisanie_Wybor3_20);
Info_AddChoice (PC_Pisanie, "T",PC_Pisanie_Wybor3_21);
Info_AddChoice (PC_Pisanie, "U",PC_Pisanie_Wybor3_22);
Info_AddChoice (PC_Pisanie, "V",PC_Pisanie_Wybor3_23);
Info_AddChoice (PC_Pisanie, "W",PC_Pisanie_Wybor3_24);
Info_AddChoice (PC_Pisanie, "X",PC_Pisanie_Wybor3_25);
Info_AddChoice (PC_Pisanie, "Y",PC_Pisanie_Wybor3_26);
Info_AddChoice (PC_Pisanie, "Z",PC_Pisanie_Wybor3_27);
Info_AddChoice (PC_Pisanie, "SPACJA",PC_Pisanie_Wybor3_22);

Info_AddChoice (PC_Pisanie, DIALOG_BACK,PC_Pisanie_Wybor1_1_2);
};

func void PC_Pisanie_Wybor1_1_1()
{
        a = ConcatStrings(a, "A");
};

func void PC_Pisanie_Wybor3_1()
{
        a = ConcatStrings(a, "B");
};

func void PC_Pisanie_Wybor3_4 ()
{
       a = ConcatStrings(a, "C");
};

func void PC_Pisanie_Wybor3_6 ()
{
        a = ConcatStrings(a, "D");
};

func void PC_Pisanie_Wybor3_7 ()
{
        a = ConcatStrings(a, "E");
};

func void PC_Pisanie_Wybor3_8 ()
{
        a = ConcatStrings(a, "F");
};

func void PC_Pisanie_Wybor3_9 ()
{
        a = ConcatStrings(a, "G");
};

func void PC_Pisanie_Wybor3_10 ()
{
        a = ConcatStrings(a, "H");
};

func void PC_Pisanie_Wybor3_11 ()
{
        a = ConcatStrings(a, "I");
};

func void PC_Pisanie_Wybor3_12 ()
{
        a = ConcatStrings(a, "J");
};

func void PC_Pisanie_Wybor3_13 ()
{
        a = ConcatStrings(a, "K");
};

func void PC_Pisanie_Wybor3_14 ()
{
        a = ConcatStrings(a, "L");
};

func void PC_Pisanie_Wybor3_15 ()
{
        a = ConcatStrings(a, "M");
};

func void PC_Pisanie_Wybor3_16 ()
{
        a = ConcatStrings(a, "N");
};

func void PC_Pisanie_Wybor3_17 ()
{
        a = ConcatStrings(a, "O");
};

func void PC_Pisanie_Wybor3_18 ()
{
        a = ConcatStrings(a, "P");
};

func void PC_Pisanie_Wybor3_19 ()
{
        a = ConcatStrings(a, "R");
};
func void PC_Pisanie_Wybor3_20 ()
{
        a = ConcatStrings(a, "S");
};

func void PC_Pisanie_Wybor3_21 ()
{
        a = ConcatStrings(a, "T");
};

func void PC_Pisanie_Wybor3_22 ()
{
        a = ConcatStrings(a, "U");
};

func void PC_Pisanie_Wybor3_23 ()
{
        a = ConcatStrings(a, "V");
};

func void PC_Pisanie_Wybor3_24 ()
{
        a = ConcatStrings(a, "W");
};

func void PC_Pisanie_Wybor3_25 ()
{
        a = ConcatStrings(a, "X");
};

func void PC_Pisanie_Wybor3_26 ()
{
        a = ConcatStrings(a, "Y");
};

func void PC_Pisanie_Wybor3_27 ()
{
        a = ConcatStrings(a, "Z");
};

func void PC_Pisanie_Wybor3_28 ()
{
        a = ConcatStrings(a, "  ");
};


func void PC_Pisanie_Wybor1_1_2()
{
        Info_ClearChoices       (PC_Pisanie);
};

Reparsuję skrypty, robię paczkę z modem itd,
Wyniki: Po przywołaniu konsolą pióra, i po próbie akcji na tym itemie, nic się nie wyświetla. Podejrzewam że problem tkwi w dialogu do itema, ale już próbowałem chyba wszystkiego, więc może mnie oświecicie, byłbym wdzięczny.

Aha no i zadeklarowane zmienna i stała

var int monolog;
const int PISANIE = 1;
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Musisz zrobić update dialogów. Jeżeli Ci nie działa parsowanie z gothicgame.mod pobierz emptymod zrobiony przez edkasumo.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

karus

karus

Użytkownicy
posty122
  • Użytkownicy
Zrobiłem i parsowanie skryptów z poziomu GothiGame.mod, usuwając stary .DAT, zreparsowałem gothic.scr w spacku, wcześniej usunąłem a następnie zaktualizowałem nowe dialogi jako OU.BIN i OU.CSL po czym dodałem do paczki WORLD.ZEN, OU.BIN i Gothic.DAT. Więc nie ma bata, tu wszystko jak zwykle. Rutyna.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Important musi być na true. Ponieważ to item ma nas "zagadać".
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis

EdekSumo
Wyspa Khorinis

Przedmiot i jego monolog - brak rezultatów
#4 2011-12-11, 21:34(Ostatnia zmiana: 2011-12-11, 21:36)
Dodaj coś takiego do skryptu itemu:
scemeName = "MAPSEALED";Jak nie zadziała daj mu także flags książki.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Dopisz pod:


                        permanent       = 1;

to:

                        important        = 1;

Powinno działać w 100%. :)
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

karus

karus

Użytkownicy
posty122
  • Użytkownicy
Dopisałem scemeNAME, zmieniłem w dialogach important=1, ale praktycznie to nic nie dało oprócz "otwierania pióra". Otwieram pióro i na chwilę znika pasek hp i wszystko wraca do normy a pióro znika z ekwipunku. To tyle. Później zmieniłem z NONE na ITEM_KAT_DOCS ale w gruncie rzeczy efekt ten sam. W tutkach do monologów nie widziałem żeby important było ustawione na 1. Ale to może przewidziałem się :D
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Daj scemename = "map";
A na twoim miejscu dał bym do funkcji tylko np. monolog = true; a po końcu "rozmowy" z przedmiotem monolog = false;

  INSTANCE Itmw_Pioro (C_Item)
{      
        name                            =       "Pióro";

        mainflag                        =       ITEM_KAT_NONE;
        flags                           =       0;

        value                           =       100;

        visual                          =       "Feder.3DS";
        material                        =       MAT_METAL;
        on_state[0]         =   Use_PISANIE_S1;
        description                     = name;
        TEXT[4]                         = NAME_Value;                                   COUNT[4]        = Value_Schlüssel;
};

FUNC VOID Use_PISANIE_S1()
{
        Monolog = TRUE;
        Ai_ProcessInfos (her);
};


// **************************************************
//                                               [ST SYSTEM]
// *************************************************
instance  PC_BezPisania (C_INFO)
{
        npc                     = PC_Hero;
        nr                      = 999;
        condition       = PISANIE_TRUE;
        information     = PC_BezPisania_Info;
        permanent       = 1;
        description = DIALOG_ENDE;
};

FUNC INT PISANIE_TRUE()
{
        if (monolog == TRUE)
        {
                return TRUE;
        };
};

func VOID PC_BezPisania_Info()
{
        Monolog = FALSE;
        AI_StopProcessInfos (self);
       
};




Bawię się opcjami. :)
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

karus

karus

Użytkownicy
posty122
  • Użytkownicy
unknown identifier: her
Więc zapisałem ten skrypt

FUNC VOID PISANIE_S1()
{
var C_NPC her; her = Hlp_GetNpc(PC_Hero);
var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller);
monolog = PISANIE;
if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{
self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (her);
};
};

Do EVENTS\mono1.d , ale problem jest nadal :pokerface:  Wydaje mi się że jeśli chcemy monolog pisać do przedmiotu, w/w skrypt musi być ujęty w funkcji danego przedmiotu. Chyba że napisać zmienną pod tą całą funckję i zrobić tylko odwołanie :lol:  Ale to raczej bez sensu..
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
important ma być na 0 ...
oraz
scemeName                               =       "MAPSEALED";tak jak już powiedział edek  :ok:

Teraz wytłumaczę dlaczego 0 bo to MY zagadujemy do samego siebie
       self.aivar[AIV_INVINCIBLE]=TRUE;
        Ai_ProcessInfos (her);
to jest właśnie te zagadanie

A jeżeli damy important na 1 to dialog wykona się sam bez zatwierdzenia w twoim przypadku zagadaliśmy do siebie oraz dzieki important na 1 dialog konca sam się włączył wyłaczając monolog ;) mam na dzieje ze jasne :)


Cytuj
A na twoim miejscu dał bym do funkcji tylko np. monolog = true; a po końcu "rozmowy" z przedmiotem monolog = false;

Bezsens w ten sposób nic ci to nie daje nie masz żadnych korzyści jak chcesz tak używać zmiennych to lepiej ich nie deklaruj :P

karus

karus

Użytkownicy
posty122
  • Użytkownicy
Oki działa, ale mam także dostępne wszystkie opcje spania i dodatkowy KONIEC ze spania  :ok:  Pamiętam z tutków ustawianie monologu na = 2 ale tutaj mam osobną zmienną zadeklarowaną przecież.
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Tak btw jak byś chciał pobawić się animkami i mds mógłbyś zrobić (mogę naprowadzić jak zrobić mds) że po użyciu pióra wyciąga książkę i pióro i pisze.
 

karus

karus

Użytkownicy
posty122
  • Użytkownicy
Dobra opcja :ok:  W mdsy się jeszcze nie bawiłem, bardzo chętnie ;d  Jakbyś mógł to poproszę info co i jak. BTW, Jak jeszcze te pozostałości po spaniu usunąć?

//chyba zaraz to ogarnę
//fixed.
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
pozostałości po spaniu usunąć?
musisz zrobić nową stałą
const int spanie = 2;
i do funkcji sleepabit_s1 dodać

monolog = spanie;
w tym samym miejscu co w funkcji PISANIE_S1()

i do wszystkich dialogów spania dodajesz
       if (monolog == spanie)
        {
...

EDIT: Po prostu zmienna spanie musiała być różna od zmiennej pisanie czyli nie mogła być to jedynka jak byś dał 23532 też by działało :D

karus

karus

Użytkownicy
posty122
  • Użytkownicy
zadeklarowałem na 0, stałą do pisania na 1 i też działa xDD zresztą wykminiłem to na podstawie tutków :ok:
 


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