Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 5 von 5
  1. Homepage besuchen Beiträge anzeigen #1 Zitieren
    Schwertmeister Avatar von Xardas1001
    Registriert seit
    May 2009
    Ort
    Beliars Reich
    Beiträge
    836
     
    Xardas1001 ist offline

    [Skript] Petzmaster - Dialog // Unknown/Redefined Identifier

    Hallo Freunde der Sonne

    Ich bevölkere die ganze Insel Khorinis um, weswegen die NPC's die den Petzmaster-Dialog haben, natürlich andere sind, als im Original G2.
    Im Kloster und in der Stadt (Andre) hat das ziemlich gut geklappt, einfach den Dialog kopiert, ein zwei Sätze umgeschrieben und die relevanten Aspekte geändert.

    Auf dem Bauernhof bin ich auf ein komisches Problem gestoßen:

    ANM: Die var ints bleiben eigentlich einfach gleich, weil der Dialog ja nur darauf zugreifen darf, das Problem liegt also nicht daran, dass das Teil Lee_LastPetzCounter heißt und nicht Raven_LastPetzCounter

    Problem: Das Spiel startet nicht
    Mit Verweis auf Unknown Identifier: Lee_LastPetzCounter in Zeile 118

    Wenn ich jetzt einfach
    Code:
    // ---------------------------
    var int Lee_LastPetzCounter;
    var int Lee_LastPetzCrime;
    // ---------------------------
    im Script einfüge, sorgt das für die Fehlermeldung:

    Redefined Identifier: Lee_LastPetzCounter (kein Wunder, der Identifier wurde ja auch schon im Lee Dialog definiert)

    Hier noch das komplette Script:

    Code:
    // ************************************************************
    // 					Petzmaster: Schulden offen 
    // ************************************************************
    
    
    INSTANCE DIA_Raven_PMSchulden (C_INFO)
    {
    	npc         = PAL_99124_Raven;
    	nr          = 1;
    	condition   = DIA_Raven_PMSchulden_Condition;
    	information = DIA_Raven_PMSchulden_Info;
    	permanent   = TRUE;
    	important 	= TRUE; 
    };
    
    FUNC INT DIA_Raven_PMSchulden_Condition()
    {
    	if (Npc_IsInState(self, ZS_Talk))
    	&& (Lee_Schulden > 0)
    	&& (B_GetGreatestPetzCrime(self) <= Lee_LastPetzCrime)
    	{
    		return TRUE;
    	};
    };
    
    FUNC VOID DIA_Raven_PMSchulden_Info()
    
    	
    	
    	{
    		
    		AI_Output (self, other, "DIA_Raven_PMSchulden_04_00"); //Bist du gekommen, um mir das Geld zu bringen?
    
    	if (B_GetTotalPetzCounter(self) > Lee_LastPetzCounter)
    	{
    		AI_Output (self, other, "DIA_Raven_PMSchulden_04_01"); //Ich hatte dir doch gesagt, du sollst hier keine Dummheiten mehr machen.
    		AI_Output (self, other, "DIA_Raven_PMSchulden_04_02"); //Ich habe mitbekommen, dass du mittlerweile noch mehr auf dem Kerbholz hast.
    		if (Lee_Schulden < 1000)
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_03"); //Dementsprechend zahlst du jetzt mehr Geld.
    			AI_Output (other, self, "DIA_Raven_PMAdd_15_00"); //Wieviel?
    			
    			var int diff; diff = (B_GetTotalPetzCounter(self) - Lee_LastPetzCounter);
    		
    			if (diff > 0)
    			{
    				Lee_Schulden = Lee_Schulden + (diff * 50);
    			};
    		
    			if (Lee_Schulden > 1000)	{	Lee_Schulden = 1000;	};
    		
    			B_Say_Gold (self, other, Lee_Schulden);
    		}
    		else
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_04"); //Ich hatte dich für klüger gehalten.
    		};
    	}
    	else if (B_GetGreatestPetzCrime(self) < Lee_LastPetzCrime)
    	{
    		AI_Output (self, other, "DIA_Raven_PMSchulden_04_05"); //Dann habe ich gute Nachrichten für dich.
    		
    		if (Lee_LastPetzCrime == CRIME_MURDER)
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_06"); //Plötzlich gibt es niemanden mehr, der den Mord gesehen hat.
    		};
    		
    		if (Lee_LastPetzCrime == CRIME_THEFT)
    		|| ( (Lee_LastPetzCrime > CRIME_THEFT) && (B_GetGreatestPetzCrime(self) < CRIME_THEFT) )
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_07"); //Keiner der Leute will mehr bezeugen, dich bei einem Diebstahl gesehen zu haben.
    		};
    		
    		if (Lee_LastPetzCrime == CRIME_ATTACK)
    		|| ( (Lee_LastPetzCrime > CRIME_ATTACK) && (B_GetGreatestPetzCrime(self) < CRIME_ATTACK) )
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_08"); //Es ist niemand mehr da der GESEHEN hat, wie du einen der Bauern verprügelt hast.
    		};
    		
    		if (B_GetGreatestPetzCrime(self) == CRIME_NONE)
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_09"); //Anscheinend haben sich alle Anklagen gegen dich in Wohlgefallen aufgelöst.
    		};
    		
    		AI_Output (self, other, "DIA_Raven_PMSchulden_04_10"); //Beliar scheint dir wohlgesonnen zu sein.
    				
    		// ------- Schulden erlassen oder trotzdem zahlen ------
    		if (B_GetGreatestPetzCrime(self) == CRIME_NONE)
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_11"); //Zahlen musst du jedenfalls nichts mehr.
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_12"); //Pass in Zukunft besser auf.
    	
    			Lee_Schulden			= 0;
    			Lee_LastPetzCounter 	= 0;
    			Lee_LastPetzCrime		= CRIME_NONE;
    		}
    		else
    		{
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_13"); //Damit eins klar ist: Deine Strafe musst du trotzdem in voller Höhe bezahlen.
    			B_Say_Gold (self, other, Lee_Schulden);
    			AI_Output (self, other, "DIA_Raven_PMSchulden_04_14"); //Also, was ist?
    		};
    	};
    	
    	// ------ Choices NUR, wenn noch Crime vorliegt ------
    	if (B_GetGreatestPetzCrime(self) != CRIME_NONE)
    	{
    		Info_ClearChoices  	(DIA_Raven_PMSchulden);
    		Info_ClearChoices  	(DIA_Raven_PETZMASTER);
    		Info_AddChoice		(DIA_Raven_PMSchulden,"Ich habe nicht genug Gold!",DIA_Raven_PETZMASTER_PayLater);
    		Info_AddChoice		(DIA_Raven_PMSchulden,"Wieviel war es nochmal?",DIA_Raven_PMSchulden_HowMuchAgain);
    		if (Npc_HasItems(other, itmi_gold) >= Lee_Schulden)
    		{
    			Info_AddChoice 	(DIA_Raven_PMSchulden,"Ich will die Strafe zahlen.",DIA_Raven_PETZMASTER_PayNow);
    		};
    	};
    };
    
    func void DIA_Raven_PMSchulden_HowMuchAgain()
    {
    	AI_Output (other, self, "DIA_Raven_PMSchulden_HowMuchAgain_15_00"); //Wie viel war es noch mal?
    	B_Say_Gold (self, other, Lee_Schulden);
    
    	Info_ClearChoices  	(DIA_Raven_PMSchulden);
    	Info_ClearChoices  	(DIA_Raven_PETZMASTER);
    	Info_AddChoice		(DIA_Raven_PMSchulden,"Ich habe nicht genug Gold!",DIA_Raven_PETZMASTER_PayLater);
    	Info_AddChoice		(DIA_Raven_PMSchulden,"Wieviel war es nochmal?",DIA_Raven_PMSchulden_HowMuchAgain);
    	if (Npc_HasItems(other, itmi_gold) >= Lee_Schulden)
    	{
    		Info_AddChoice 	(DIA_Raven_PMSchulden,"Ich will die Strafe zahlen.",DIA_Raven_PETZMASTER_PayNow);
    	};
    };
    
    // ### weitere Choices siehe unten (DIA_Lee_PETZMASTER) ###
    
    
    // ************************************************************
    // 			  			 PETZ-MASTER 
    // ************************************************************
    
    instance DIA_Raven_PETZMASTER   (C_INFO)
    {
    	npc         = PAL_99124_Raven;
    	nr          = 1;
    	condition   = DIA_Raven_PETZMASTER_Condition;
    	information = DIA_Raven_PETZMASTER_Info;
    	permanent   = TRUE;
    	important	= TRUE;
    };
    FUNC INT DIA_Raven_PETZMASTER_Condition()
    {
    	if (B_GetGreatestPetzCrime(self) > Lee_LastPetzCrime)
    	{
    		return TRUE;
    	};
    };
    FUNC VOID DIA_Raven_PETZMASTER_Info()
    
    	{
    		
    		Lee_Schulden = 0; //weil Funktion nochmal durchlaufen wird, wenn Crime höher ist...
    	
    	// ------ SC hat mit Lee noch nicht gesprochen ------
    	if (self.aivar[AIV_TalkedToPlayer] == FALSE)
    	{
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_00"); //Wer zum Teufel hat DICH denn hier rein- (überrascht) - DU bist der Neue, der hier Ärger gemacht hat?
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_01"); //Sowas kannst du hier nicht bringen, klar? Hier gelten meine Regeln!
    	};
    	
    	if (B_GetGreatestPetzCrime(self) == CRIME_MURDER) 
    	{
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_02"); //Gut, dass du zu mir kommst, bevor alles noch schlimmer für dich wird..
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_03"); //Beliar mag der Gott des Todes sein, aber du kannst nicht einfach Leute umbringen.
    		Lee_Schulden = (B_GetTotalPetzCounter(self) * 50); 		//Anzahl der Zeugen * 50
    		Lee_Schulden = Lee_Schulden + 500;						//PLUS Mörder-Malus
    		if ((PETZCOUNTER_Farm_Theft + PETZCOUNTER_Farm_Attack + PETZCOUNTER_Farm_Sheepkiller) > 0)
    		{
    			AI_Output (self, other, "DIA_Raven_PETZMASTER_04_04"); //Ganz zu schweigen von den anderen Sachen, die du hier abgezogen hast.
    		};
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_05"); //Du hast dich hier wie jeder andere an unsere Regeln zu halten!
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_06"); //Und das bedeutet, wenn du eine Strafe für deine Verbrechen bezahlst ist die Sache halbwegs vergessen.
    	};
    		
    	if (B_GetGreatestPetzCrime(self) == CRIME_THEFT) 
    	{
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_07"); //Gut, dass du kommst! Ich hab gehört, du hättest hier was gestohlen.
    		if (PETZCOUNTER_Farm_Attack > 0)
    		{
    			AI_Output (self, other, "DIA_Raven_PETZMASTER_04_08"); //Und dich mit den Bauern geprügelt.
    		};
    		if (PETZCOUNTER_Farm_Sheepkiller > 0)
    		{
    			AI_Output (self, other, "DIA_Raven_PETZMASTER_04_09"); //UND ein paar Schafe geschlachtet.
    		};
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_10"); //So was kannst du hier nicht bringen. Hier gelten dieselben Gesetze wie in der Stadt!
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_11"); //Das bedeutet: Du zahlst, damit die Leute sehen, dass du deine Taten bereust.
    		
    		Lee_Schulden = (B_GetTotalPetzCounter(self) * 50); //Anzahl der Zeugen * 50
    	};
    	
    	if (B_GetGreatestPetzCrime(self) == CRIME_ATTACK)
    	{
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_12"); //Wenn du dich mit Herausforderern prügelst ist das deine Sache...
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_13"); //Aber wenn du die Bauern verprügelst, kriegen wir beide ein ernsthaftes Problem, klar?
    		if (PETZCOUNTER_Farm_Sheepkiller > 0)
    		{
    			AI_Output (self, other, "DIA_Raven_PETZMASTER_04_14"); //Ganz zu schweigen davon, dass wir nicht sehr erbaut ist, wenn man die Schafe umbringt.
    		};
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_15"); //Du wirst eine Strafe zahlen müssen.
    		Lee_Schulden = (B_GetTotalPetzCounter(self) * 50); //Anzahl der Zeugen * 50
    	};
    	
    	// ------ Schaf getötet (nahezu uninteressant - in der City gibt es keine Schafe) ------
    	if (B_GetGreatestPetzCrime(self) == CRIME_SHEEPKILLER) 
    	{
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_16"); //Dieser Hof steht unter meinem Kommando! Das gilt auch für die Schafe.
    		AI_Output (self, other, "DIA_Raven_PETZMASTER_04_17"); //Du wirst eine Entschädigung zahlen müssen!
    		
    		Lee_Schulden = 100;
    	};
    	
    	AI_Output (other, self, "DIA_Raven_PETZMASTER_15_18"); //Wie viel?
    	
    	if (Lee_Schulden > 1000)	{	Lee_Schulden = 1000;	};
    		
    	B_Say_Gold (self, other, Lee_Schulden);
    	
    	Info_ClearChoices  	(DIA_Raven_PMSchulden);
    	Info_ClearChoices  	(DIA_Raven_PETZMASTER);
    	Info_AddChoice		(DIA_Raven_PETZMASTER,"Ich habe nicht genug Gold!",DIA_Raven_PETZMASTER_PayLater);
    	if (Npc_HasItems(other, itmi_gold) >= Lee_Schulden)
    	{
    		Info_AddChoice 	(DIA_Raven_PETZMASTER,"Ich will die Strafe zahlen.",DIA_Raven_PETZMASTER_PayNow);
    	};
    };
    
    func void DIA_Raven_PETZMASTER_PayNow()
    {
    	AI_Output (other, self, "DIA_Raven_PETZMASTER_PayNow_15_00"); //Ich will die Strafe zahlen!
    	B_GiveInvItems (other, self, itmi_gold, Lee_Schulden);
    	AI_Output (self, other, "DIA_Raven_PETZMASTER_PayNow_04_01"); //Gut! Damit wäre die Sache soweit vergessen.
    
    	B_GrantAbsolution (LOC_FARM);
    	
    	Lee_Schulden			= 0;
    	Lee_LastPetzCounter 	= 0;
    	Lee_LastPetzCrime		= CRIME_NONE;
    	
    	Info_ClearChoices  	(DIA_Raven_PETZMASTER);
    	Info_ClearChoices  	(DIA_Raven_PMSchulden);	//!!! Info-Choice wird noch von anderem Dialog angesteuert!
    };
    
    func void DIA_Raven_PETZMASTER_PayLater()
    {
    	AI_Output (other, self, "DIA_Raven_PETZMASTER_PayLater_15_00"); //Ich habe nicht genug Gold!
    	AI_Output (self, other, "DIA_Raven_PETZMASTER_PayLater_04_01"); //Dann sieh zu, dass du dir es so schnell wie möglich beschaffst.
    	AI_Output (self, other, "DIA_Raven_PETZMASTER_PayLater_04_02"); //Aber denk bloß nicht daran, es dir hier auf dem Hof zusammenzuklauen. Wenn du erwischt wirst, wird die Sache nur noch schlimmer für dich.
    	
    	Lee_LastPetzCounter 	= B_GetTotalPetzCounter(self);
    	Lee_LastPetzCrime		= B_GetGreatestPetzCrime(self);
    	
    	AI_StopProcessInfos (self);
    };
    Jetzt will ich natürlich wissen - wie löse ich das?
    andererseits - warum beschwert sich Gothic erst in Zeile 118 (im Script rot markiert) wenn der Identifier doch schon viel früher im Script vorkommt...

    Vielleicht kann mir da ja jemand weiter helfen.
    Ganz liebe Grüße
    "Es ist nicht schwer, von jedem ethischen Prinzip zu beweisen, dass es in der Praxis scheitern muss, wenn man zugleich voraussetzt, dass allgemeiner Schwachsinn herrscht."
    - John Stuart Mill

  2. Beiträge anzeigen #2 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Du hast ein Problem mit der Parse-Reihenfolge - die Datei in der du es verwendest wird geparst, bevor es definiert wird. Am einfachsten verschiebst du die Definition aus dem Dialog einfach in die Datei, wo du es benötigst.

  3. Homepage besuchen Beiträge anzeigen #3 Zitieren
    Schwertmeister Avatar von Xardas1001
    Registriert seit
    May 2009
    Ort
    Beliars Reich
    Beiträge
    836
     
    Xardas1001 ist offline
    Ich wusste gar nicht, dass es da eine Reihenfolge gibt. Gut zu wissen.
    Ich nehme an, dass ich die Definitionen dann aus dem Lee Dialog entfernen muss, damit es keine Fehlermeldung als "Redefined Identifier" gibt, oder?
    "Es ist nicht schwer, von jedem ethischen Prinzip zu beweisen, dass es in der Praxis scheitern muss, wenn man zugleich voraussetzt, dass allgemeiner Schwachsinn herrscht."
    - John Stuart Mill

  4. Beiträge anzeigen #4 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Xardas1001 Beitrag anzeigen
    Ich wusste gar nicht, dass es da eine Reihenfolge gibt. Gut zu wissen.
    Ich nehme an, dass ich die Definitionen dann aus dem Lee Dialog entfernen muss, damit es keine Fehlermeldung als "Redefined Identifier" gibt, oder?
    Genau - verschieben und nicht kopieren.

    Die Reihenfolge ist in der Gothic.src definiert. Dort musst du auch neue Dateien eintragen, die du anlegst.

  5. Homepage besuchen Beiträge anzeigen #5 Zitieren
    Schwertmeister Avatar von Xardas1001
    Registriert seit
    May 2009
    Ort
    Beliars Reich
    Beiträge
    836
     
    Xardas1001 ist offline
    Funktioniert alles - vielen Dank
    "Es ist nicht schwer, von jedem ethischen Prinzip zu beweisen, dass es in der Praxis scheitern muss, wenn man zugleich voraussetzt, dass allgemeiner Schwachsinn herrscht."
    - John Stuart Mill

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide