Gothic 2 problem z Systemem Powiadomień (z CZ) 5745 31

O temacie

Autor Siemekk

Zaczęty 12.03.2016 roku

Wyświetleń 5745

Odpowiedzi 31

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
No więc tak:

Twój błąd pojawia się w funkcji Msg_FadeOut (). W tej funkcji masz odwołanie do funkcji MsgManager_Pop (), w której masz przypisanie zmiennej first z MsgManager do zmiennej var UIMsg hlp, która czasami wynosi -999 (tzn. MsgManager.first wynosi czasami -999 i przypisujesz ją do instance 0, która przez to ma ujemną wartość, co nie powinno mieć miejsca). Żeby tego uniknąć, dodaj MEM_AssignInst (hlp,MsgManager.first); zaraz pod    if(MsgManager.first)//list wasn't empty w MsgManager_Pop().

 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Próbowałem mimo to ciągle crashuje (mniej więcej gdy box zniknie i napis prawie opadł)
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Kontroluj dokładnie gdzie jest błąd. Sprawdzaj printdebugami.
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
func void MsgManager_Pop()
{
var int fMsg; var UIMsg hlp;
MEM_AssignInst (hlp,MsgManager.first);

if(MsgManager.first)//list wasn't empty
{
MEM_Info("Crash 1 ");
MEM_AssignInst(hlp,MsgManager.first);
MEM_Info("Crash 2 ");
//save ptr to following MSG;
fMsg = hlp.next;
MEM_Info("Crash 3 ");
//free memory
MEM_Info("Crash 4  ");
hlp.msgView = 0;
MEM_Info("Crash 5  ");
hlp.Line1View = 0;
MEM_Info("Crash 6  ");
hlp.Line2View = 0;
MEM_Info("Crash   7 ");
MEM_Free(MEM_InstToPtr(hlp));
MEM_Info("Crash  8");
//make next first
MEM_Info("Crash   9");
MEM_AssignInst (hlp,fMsg);
MEM_Info("Crash10   ");
MsgManager.first = MEM_InstToPtr(hlp);
MEM_Info("Crash 11  ");
if(MsgManager.first==0)
{
MsgManager.last = 0;
MEM_Info("Crash 12  ");
MEM_AssignInstNull (Msg_1st);
MEM_Info("Crash 13  ");
      MsgManager.state = MsgManager_State_None; //Added lately
MEM_Info("Crash  14 ");
}
else
{MEM_Info("Crash 16  ");
MEM_AssignInst (Msg_1st,MsgManager.first);
MEM_Info("Crash 15  ");
MEM_AssignInst (Msg_2nd,hlp.next);
MEM_Info("Crash 17 ");
      MsgManager.state = MsgManager_State_FadeIN; //Added lately
MEM_Info("Crash  18 ");
};
MEM_Info("Crash  19 ");
MsgManager.count-=1;
MEM_Info("Crash 20  ");
};

};

Mem_Info ciągnie się przez całą funkcję w logu, a crash pojawia się dopiero po 20. Chyba błąd nie leży tutaj?
Edit:
LoL zSpy mnie nie lubi ;-;
Tutaj log gdzie już wywala w tych miejscach :
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Splash

Splash

Moderator
posty4211
Propsy3412
ProfesjaNierób
  • Moderator
Nie lepiej by było napisać własny system z użyciem LeGo? Przynajmniej nauczyłbyś się czegoś. Pakiet Anim8 pozwala to zrobić bez wywołania funkcji z odstępem czasowym.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
nie wiem czy Lehona zaktualizowała Lego, ale te print softy były trafione.
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Edit:
Zacząłem pisać nowy system powiadomień z użyciem pakietu Anim8. Ale gra mi wywala przy próbie przesunięcia? O co chodzi skrypt wygląda tak:
var int Font_Height; Font_Height= Print_GetFontHeight(PF_Font);//Wysokosć
var int Font_Size; Font_Size=Print_GetStringWidth(msg,PF_Font);//Długość
var int Msg_VTexture; Msg_VTexture= View_CreateCenter(Msg_PosX,PF_PrintY,(PF_PrintY+MsgBox_SizeY)/3,PF_PrintX+MsgBox_SizeX);
View_SetTexture(Msg_VTexture,"UI_MSG_BG.tga");
View_SetColor(Msg_VTexture,RGBA(0,0,0,5));
View_Open(Msg_VTexture);
var int MsgText;
MsgText=Print_Ext(PF_PrintX, PF_PrintY-Msg_GetY, msg, PF_Font, color, -1); // pozycje do zmiany xD

var int Anim_First; //Opadanie do środka
Anim_First = Anim8_NewExt (25, ScrollText, MsgText, false);

anim8q (Anim_First, 8192, 2000, A8_Constant);
var int Anim_Wait; // Zostanie na środku przez nasz "Time"
var int Anim_Last; //Opadanie i znikanie na sam dół gdy minie time :S
MEM_Info("1");
 Anim8_RemoveIfEmpty (Anim_First, true);
MEM_Info("2");
 Anim8_RemoveDataIfEmpty (Anim_First, true);
func void ScrollText(var int pos, var int MsgText)
{
var zCViewText PrintVar2Object; PrintVar2Object = _^(MsgText);//PrintVar2Object = Print_GetText(MsgText);
PrintVar2Object.posy =  PF_PrintY;
};
Na razie wszystko chaotycznie jest napisane, ale na chwilę obecną chce mieć szablon tylko aby później dodać managera i inne poprawki (jak centrowanie napisów lub 2 linijka przy długim ciągu znaków).
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Splash

Splash

Moderator
posty4211
Propsy3412
ProfesjaNierób
  • Moderator
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Tak więc ten no... jak wiadomo anim8 już znam :F Teraz próbuje przepisać ten piękny skrypt orka o nazwie dzielenie charsów, wszystko już sobie okomentowałem, wyszperałem itp. tylko ork nie miał czegoś takiego jak LeGo i leciał z Call'ami i pytanie na co mam zastąpić to:
if(!secondLine)
{
CALL_zStringPtrParam(Msg.text);//zcview
if(MEM_InstToPtr(Msg)==MsgManager.first)//first msg
{
CALL_IntParam(yStartOfOneLine);//zcview
    }
    else//second
    {
CALL_IntParam(yStartOfOneLine);//zcview
    };
    CALL_IntParam(Msg_PosX+xStartOfWindow);//x pixel
    CALL__thiscall (Msg.msgView,zCView_CreateText_offset);
    Msg.Line1View = CALL_RetValAsInt();
}
else//Zamiast create text, add line?
{
//Line 1
CALL_zStringPtrParam(Line1);//zcview
if(MEM_InstToPtr(Msg)==MsgManager.first)//first msg
{
CALL_IntParam(yStartOf1Line);//zcview
    }
    else//second
    {
CALL_IntParam(yStartOf1Line);//zcview
    };
    CALL_IntParam(Msg_PosX+xStartOfWindow);//x pixel
    CALL__thiscall (Msg.msgView,zCView_CreateText_offset);
      Msg.Line1View = CALL_RetValAsInt();
   
    //Line 2
    CALL_zStringPtrParam(Line2);//zcview
if(MEM_InstToPtr(Msg)==MsgManager.first)//first msg
{
CALL_IntParam(yStartOf2Line);//zcview
    }
    else//second
    {
CALL_IntParam(yStartOf2Line);//zcview
    };
    CALL_IntParam(Msg_PosX+xStartOfWindow);//x pixel
    CALL__thiscall (Msg.msgView,zCView_CreateText_offset);
    Msg.Line2View = CALL_RetValAsInt();
};
Dodam jeszcze że manager nie jest gotowy więc te ify sobie wyrzucę, tylko niech miła dusza powie w jakim pakiecie z LeGo szukać.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Te calle to tworzenie nowego PrintScreen. Zajrzysz na nazwy i zaraz się kapniesz.
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Yep. Potwierdzam :D te ify to tylko inna pozycja gdy menedżer jest odpalony.
Kombinuje dalej i tu takie jajca ;_;
func void UIMsg_FormatAndPrintText(var int ptr,var string text)
{

    var UIMsg msg;  msg = _^(ptr);

// [TODO]Ork: To powinno być zalezne od rozdzielczości, troche testów w roznych
// rozdzialkach i uda sie ustalic jakąs funkcje liniową dla odp. il znaków w linii.
const int zCView_CreateText_offset = 8037040;//0x007AA2B0
/*Zmienne i Stałe   */
const int xStartOfWindow = 5;
var int yStartOf1Line; yStartOf1Line = 1584 - CalcPixelPosY(8)/2;
var int yStartOf2Line; yStartOf2Line = 3850 - CalcPixelPosY(8)/2;
var int yStartOfOneLine; yStartOfOneLine = 2800 - CalcPixelPosY(8)/2;//4096 = 100%
const int maxCharsInline =20;
var int secondLine; var int splitPos;
var string Line1;var string Line2;
var int label;
secondLine = false;
Line1 = ""; Line2 = "";
/*Zmienne i Stałe   */

//[NEW] Ork: Nowy ficzer, teraz mozna jeszcze sformatować tekst pieknym "\n"
var string test;//zmienna .-.
test = ConcatStrings(text,"");//odniesienie do tekstu, trza zrobić aby podpinało się pod hndl
var int newLineCharPos; newLineCharPos = STR_Search(text,"\n");//Wyszukiwanie \n czyli dzielenia na pół,
//wszystkie text zamienić trzeba na podpinanie hndl, lub do klasy

if(newLineCharPos!=-1)//sprawdza czy jest /n
{
secondLine = true;//aktywuje drugą linie
splitPos = newLineCharPos;//podmienia inta na chars
Line1 = STR_SubStr (text,0,splitPos);//dzieli tekst
Line2 = STR_SubStr (text,splitPos+2,Str_Len(text)); //także tylko że z pominieciem "\n"
}
else if(Str_Len(text)>=maxCharsInline)//jezeli jest więcej niż x znaków
{
//split string
secondLine = true;//tak samo aktywuje drugą linie
//find first space at left
splitPos = maxCharsInline; //sprawdza inta z 20, maxCharsInline=20
//loop
MEM_InitLabels (); //nie wiem co to xD
label = MEM_StackPos.position; //loopuje nie ogarniam tego ;_;
if(Hlp_StrCmp(STR_SubStr(text,splitPos,1)," "))// to jest chyba jakieś olanie, bo nic nie ma jeżeli jest spełniony
{
}
else if(splitPos>0)//jeżeli charsów jest >0, zawraca tu
{
splitPos-=1;//zżera o -1
MEM_StackPos.position = label; //też loop ?
};
//end loop
if(splitPos==0)//if no space fouded, divide at last char
{
splitPos=maxCharsInline;//porównuje int'a
};    
Line1 = STR_SubStr (text,0,splitPos);//dzieli tekst
Line2 = STR_SubStr (text,splitPos+1,Str_Len(text));//dzieli tekst
};

//One Line:
if(!secondLine)
{
CALL_zStringPtrParam(text);//zcview Manager, narazie zostaje tak :)
//if(MEM_InstToPtr(Msg)==MsgManager.first)//first msg
//{
CALL_IntParam(yStartOfOneLine);//zcview
    //}
    //else//second
    //{
//CALL_IntParam(yStartOfOneLine);//zcview
    //};
    CALL_IntParam(Msg_PosX+xStartOfWindow);//x pixel
    CALL__thiscall (Msg.msgView,zCView_CreateText_offset);
    Msg.FirstLine = CALL_RetValAsInt();
}
else//Zamiast create text, add line?
{
//Line 1
CALL_zStringPtrParam(Line1);//zcview
//if(MEM_InstToPtr(Msg)==MsgManager.first)//first msg
// {
CALL_IntParam(yStartOf1Line);//zcview
    //}
    // else//second
    // {
//CALL_IntParam(yStartOf1Line);//zcview
    //};
    CALL_IntParam(Msg_PosX+xStartOfWindow);//x pixel
    CALL__thiscall (Msg.msgView,zCView_CreateText_offset);
      Msg.FirstLine = CALL_RetValAsInt();
   
    //Line 2
    CALL_zStringPtrParam(Line2);//zcview
// if(MEM_InstToPtr(Msg)==MsgManager.first)//first msg
// {
CALL_IntParam(yStartOf2Line);//zcview
    // }
    // else//second
    // {
// CALL_IntParam(yStartOf2Line);//zcview
    //};
    CALL_IntParam(Msg_PosX+xStartOfWindow);//x pixel
    CALL__thiscall (Msg.msgView,zCView_CreateText_offset);
    Msg.SecondLine = CALL_RetValAsInt();
};
};
Ciągle wywala WrongType UIMsg.text mimo iż nigdzie tego tutaj nie wykorzystuje...
Klasa:
class UIMsg {
    var int TextMove; // Anim8(h) move msg
var int MsgView;// Open View
    var string Text;     // Print(h) Create Text
var string Text2;
/***************************************\
When text have 31 >=  charsInline
\***************************************/
var int FirstLine;//Print Str_Len
var int SecondLine;//Print Str_Len
/***************************************\
When text have 31 >=  charsInline
\***************************************/
};
instance UIMsg@(UIMsg);

 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Dlaczego na siłę próbujesz zrobić coś, czego kompletnie nie ogarniasz? Nie wiesz co to loopy, MEM_InitLabels... Moim zdaniem powinieneś najpierw ogarnąć jak co działa w danym skrypcie, a potem próbować większych rzeczy.
 
: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.


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