U:PAR: Unknown Identifier : ELSE 4435 7

O temacie

Autor pagi111

Zaczęty 9.10.2018 roku

Wyświetleń 4435

Odpowiedzi 7

pagi111

pagi111

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Witam,

Zacznę od tego, że przeczytałem już tysiąc wątków z "Unknown identifier", ale i tak dalej nie mogę znaleźć rozwiązania swojego problemu.

Otóż, chciałem sobie zmodować innego moda, konkretnie New Balancing Mod do L'Hivera, tak, żeby się nauczyć jak są robione pewne rzeczy w różnych modach.

Wypakowałem całego moda, a teraz mam problem przy parsowaniu jego skryptów.

I tutaj są w zasadzie dwie sprawy:
Po pierwsze jak to w ogóle jest możliwe, że nie zmieniając ani jednej linijki w żadnym skrypcie, podczas parsowania wyskakuje błąd. Jakim cudem w takim razie autor spakował tego moda??

Druga sprawa dotyczy już konkretnie tego błędu. Podczas włączania gry i potem w zSpy błąd wygląda tak:
00:22 Info:  5 U:    PAR: CONTENT\STORY\B_CONTENT\B_ADDON_PIRATESGOHOME.D : Parse... .... <zError.cpp,#465>00:22 Fatal:-1 U:    PAR: Unknown identifier : ELSE ( line 94 ) .... <zParser.cpp,#599>
(jak rozumiem tylko linijka z błędem i jedna przed nią mają znaczenie?)

No i właśnie, w innych wątkach, które przeglądałem, gdy pojawiał się błąd Unknown identifier, chodziło raczej o konkretną instancję, że ktoś tam coś źle przepisał, itp. A tutaj tym nieznanym identyfikatorem jest słowo "ELSE"?? No to naprawdę nie wiem o co chodzi. Dodam jeszcze, że w zasadzie w każdej poprzedniej linijce, na końcu jest coś takiego:
Parse... .... <zError.cpp,#465>Ale w takim razie to chyba normalne i wnioskuję, że nie są to błędy, ale podane ewentualne kody błędów.

Wszedłem w ten plik B_ADDON_PIRATESGOHOME.D. Tak wygląda jego ostatni fragment:
func int C_TowerBanditsDead()
{
var C_Npc TowerBandit1;
var C_Npc TowerBandit2;
var C_Npc TowerBandit3;
TowerBandit1 = Hlp_GetNpc(BDT_10100_Addon_TowerBandit);
TowerBandit2 = Hlp_GetNpc(BDT_10101_Addon_TowerBandit);
TowerBandit3 = Hlp_GetNpc(BDT_10102_Addon_TowerBandit);
if(Npc_IsDead(TowerBandit1) && Npc_IsDead(TowerBandit2) && Npc_IsDead(TowerBandit3))
{
return TRUE;
};
TowerBanditsDead = TRUE;
else
{
return FALSE;
};
};

Są to linijki od 80 do 97. Co ciekawe, to słówko else w pliku jest w linijce 93, a nie w 94, tak jak sugerowałby to błąd.

Krótko mówiąc nie mam pojęcia o co chodzi z tym błędem i dlaczego w ogóle jakiś błąd się pojawia skoro są to dokładnie te same pliki, co w oryginalnym modzie, zupełnie niezmieniane.

Pozdrawiam :)
 

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru
func int C_TowerBanditsDead()
{
   var C_Npc TowerBandit1;
   var C_Npc TowerBandit2;
   var C_Npc TowerBandit3;
   TowerBandit1 = Hlp_GetNpc(BDT_10100_Addon_TowerBandit);
   TowerBandit2 = Hlp_GetNpc(BDT_10101_Addon_TowerBandit);
   TowerBandit3 = Hlp_GetNpc(BDT_10102_Addon_TowerBandit);
   if(Npc_IsDead(TowerBandit1) && Npc_IsDead(TowerBandit2) && Npc_IsDead(TowerBandit3))
   {
      return TRUE;
   };
   TowerBanditsDead = TRUE;

   <Brak IFa>
   {
      
   }

   else
   {
      return FALSE;
   };
};



Poprawione:
func int C_TowerBanditsDead ()
{
var C_NPC TowerBandit1; Towerbandit1 = Hlp_GetNpc (BDT_10100_Addon_Towerbandit);
var C_NPC TowerBandit2; Towerbandit2 = Hlp_GetNpc (BDT_10101_Addon_Towerbandit);
var C_NPC TowerBandit3; Towerbandit3 = Hlp_GetNpc (BDT_10102_Addon_Towerbandit);

if Npc_IsDead (TowerBandit1)
&& Npc_IsDead (TowerBandit2)
&& Npc_IsDead (TowerBandit3)
{
return TRUE;
TowerBanditsDead = TRUE;
}
else
{
return FALSE;
};
};
 
How can I see roses... and only feel thorns...

bogu9821

bogu9821

Użytkownicy
posty406
Propsy185
ProfesjaProgramista
  • Użytkownicy
Po returnie dalszy kod się nie wykonuje Czapi (@Preriowy ścierwojad) :facepalm:
Poprawione:
func int C_TowerBanditsDead ()
{
var C_NPC TowerBandit1; Towerbandit1 = Hlp_GetNpc (BDT_10100_Addon_Towerbandit);
var C_NPC TowerBandit2; Towerbandit2 = Hlp_GetNpc (BDT_10101_Addon_Towerbandit);
var C_NPC TowerBandit3; Towerbandit3 = Hlp_GetNpc (BDT_10102_Addon_Towerbandit);

if (Npc_IsDead (TowerBandit1)
&& Npc_IsDead (TowerBandit2)
&& Npc_IsDead (TowerBandit3))
{
  TowerBanditsDead = TRUE;
return TRUE;

}
else
{
return FALSE;
};
 
while(false) Do();

pagi111

pagi111

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
No więc tak, spróbowałem zrobić tak jak mówi bogu9821 i tak, jak mówi Preriowy ścierwojad, oba skrypty działają, ALE...

Pojawił się kolejny problem w innym skrypcie:

00:23 Info:  5 U:    PAR: CONTENT\STORY\DIALOGE\DIA_SLD_807_BULLCO.D : Parse... .... <zError.cpp,#465>00:23 Fatal:-1 U:    PAR: Expected ';' ( line 156 ) .... <zParser.cpp,#599>
Ha! Nawet wiem o co chodzi, brakuje gdzieś ";", tylko że no właśnie nie brakuje  o_0

Sprawdziłem ten skrypt i jest w tej linijce ";".
Oto jego fragment:
func void DIA_Bullco_DailyCheck_Info()
{
if(Bullco_HitCounter == 0)
{
AI_Output(self,other,"DIA_Bullco_DailyCheck_06_00"); //Du bist ja immer noch hier ...
AI_Output(self,other,"DIA_Bullco_DailyCheck_06_01"); //Ich dachte, wir hätten uns darauf geeinigt, dass ich dich in Frieden ziehen lasse.
AI_Output(self,other,"DIA_Bullco_DailyCheck_06_02"); //Du hättest besser auf mich hören sollen.
}
else
{
AI_Output(self,other,"DIA_Bullco_DailyCheck_06_03"); //Ich glaub's ja nicht! Der Kerl ist immer noch hier!
};
Bullco_HitCounter = Bullco_HitCounter + 1;
B_GetDayPlus();
AI_StopProcessInfos(self)Bullco_Leave_Day == ;
B_Attack(self,other,AR_NONE,1);
};

To linijki od 142-158. Osobiście bardzo mnie zastanawia, jakim cudem te skrypty były normalnie w paczce z modem i mod działał poprawnie, skoro teraz nic w nich nie zmieniając nie mogę ich ponownie sparsować  :hmmm:


[EDIT] Dla sprawdzenia usunąłem linijkę 156, czyli:
AI_StopProcessInfos(self)Bullco_Leave_Day == ;i wtedy ten plik działa (pojawia się za to oczywiście błąd w innym pliku). No ale to przecież nie jest rozwiązanie - usunąć sobie linijkę. Dalej nie rozumiem, co jest w niej źle.

W tym innym pliku błąd jest taki:
00:24 Info:  5 U:    PAR: CONTENT\STORY\DIALOGE\DIA_SLD_810_DAR.D : Parse... .... <zError.cpp,#465>
00:24 Fatal:-1 U:    PAR: Unknown identifier : AIVAR ( line 245 ) .... <zParser.cpp,#599>

Fragment:
func int DIA_Dar_Kameradenschwein_Condition()
{
if(Dar_LostAgainstCipher == TRUE)
{
TRUEself.aivar[AIV_LastFightComment] == FALSE;
};
};


Poza tym, tutaj chyba jednak o co innego chodzi... Bo zamieniłem te pliki na te z oryginalnego Gothica 2 NK bez żadnych modów, tak żeby sprawdzić. Pliki są identyczne, a zSpy znajduje dokładnie te same błędy. W ORYGINALNYCH plikach z niemodowanego Gothica! Poza tym nawet jeśli naprawię coś w jednym pliku, to pojawia się błąd w innym. Chyba nie powinno tak być... Czy to jest możliwe, że coś z zSpy szwankuje i jakoś źle odczytuje te skrypty? Przecież to chyba niemożliwe, żeby plik z oryginalnej gry był źle napisany. Naprawdę już nie wiem o co z tym chodzi :/
 

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru
@bogu9821 Ja to kopiowałem z oryginalnych skryptów z G2MDK, nie przyglądałem się nawet temu XD

@pagi111
Cytuj
AI_StopProcessInfos(self)Bullco_Leave_Day == ;

Jeśli nie wiesz co tu jest źle, to może najpierw poucz się trochę modować, a dopiero potem zajmij się naprawą błędów lub robieniem modów. Wyjdzie Ci to na plus.
 
How can I see roses... and only feel thorns...

pagi111

pagi111

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
@Preriowy ścierwojad Ok, spoko, wydawało mi się to owszem podejrzane, że po tym == nic nie ma (chyba, że chodzi o coś innego). Ale właśnie w tym rzecz, że ja się uczę modować - nie wiem jaki znasz lepszy sposób na naukę, niż próbować samemu coś zrobić, a jak nie wychodzi, to prosić mądrzejszych od siebie o pomoc. Nie robię jakiegoś moda, porywając się z motyką na słońce, tylko właśnie próbuje w ten sposób czegoś się nauczyć ;)

W związku z powyższym - co jest tam źle? :)

Ale najbardziej mnie nurtuje pytanie, jak to jest, że oryginalne skrypty zawierają błędy?
 

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru
Skoro modyfikacja działa, to niemożliwe, że po wypakowaniu plików są jakieś błędy. Czym i jak wypakowałeś skrypty?



Tak w ogóle to wiesz, że wszystkie nazwy, rozmowy itp. masz po niemiecku?
 
How can I see roses... and only feel thorns...

pagi111

pagi111

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Właśnie też mnie zastanawia jak to możliwe O_o Najpierw programem Gothic VDFS wypakowałem paczkę z modem, potem Gothic Sourcerem zdekompilowałem plik Gothic.DAT. Zdekompilowałem go do jakiegoś tam innego folderu nie w folderze Gothica. Ale potem skopiowałem te wszystkie zdekompilowane pliki do gothicowego folderu Content, zamieniając w nim wszystkie pliki. No i wtedy uruchamiam znowu albo Gothic Sourcera, albo tylko GothicStarter_mod z zaznaczoną opcji reparse scripts i wyskakują te błędy, o których pisałem.

Wiem, że wszystko mam po niemiecku i to akurat celowy zabieg - chcę tym sposobem łączyć przyjemne z pożytecznym i podczas gry uczyć się języka ;)
 


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