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 3 von 3
  1. Beiträge anzeigen #1 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline

    Egill vs. Ehnim -> Ehmin wird von den anderen Bauern angegriffen

    Ich weiß nicht warum, aber Ehmin wird in meiner Mod bei seinem Duell mit Egill jetzt meisten am Ende von Akil abgestochen.


    Die Ausnahme in der B_AssessFightSound hab ich nicht rausgenommen, woran kann das also liegen?

    Code:
    func void B_AssessFightSound()
    {
    	if(!Hlp_IsValidNpc(victim))
    	{
    		return;
    	};
    	if((Npc_GetDistToNpc(self,victim) > PERC_DIST_INTERMEDIAT) && (Npc_GetDistToNpc(self,other) > PERC_DIST_INTERMEDIAT))
    	{
    		if(((victim.guild == GIL_OUT) || (other.guild == GIL_OUT)) && (self.guild == GIL_OUT))
    		{
    		}
    		else
    		{
    			return;
    		};
    	};
    	if((other.fight_tactic == FAI_NAILED) || (victim.fight_tactic == FAI_NAILED))
    	{
    		return;
    	};
    	if((Npc_GetHeightToNpc(self,other) > PERC_DIST_HEIGHT) && (Npc_GetHeightToNpc(self,victim) > PERC_DIST_HEIGHT))
    	{
    		return;
    	};
    	if((Npc_GetHeightToNpc(self,other) > 500) && (Npc_GetDistToWP(self,"NW_MONASTERY_PLACE_04") <= 3000))
    	{
    		return;
    	};
    	if((Hlp_GetInstanceID(victim) == Hlp_GetInstanceID(self)) || (Hlp_GetInstanceID(other) == Hlp_GetInstanceID(self)))
    	{
    		return;
    	};
    	if((victim.guild == GIL_SHEEP) && (victim.aivar[AIV_ToughGuy] == FALSE))
    	{
    		if(C_WantToAttackSheepKiller(self,other))
    		{
    			B_Attack(self,other,AR_SheepKiller,0);
    			return;
    		}
    		else if(C_NpcIsGateGuard(self))
    		{
    			B_MemorizePlayerCrime(self,other,CRIME_SHEEPKILLER);
    			return;
    		};
    		return;
    	};
    	if(C_NpcIsGateGuard(self))
    	{
    		return;
    	};
    	if((other.guild > GIL_SEPERATOR_HUM) && (victim.guild > GIL_SEPERATOR_HUM))
    	{
    		return;
    	};
    	if((other.guild > GIL_SEPERATOR_HUM) && (Npc_GetAttitude(self,victim) != ATT_HOSTILE))
    	{
    		B_Attack(self,other,AR_MonsterVsHuman,0);
    		return;
    	};
    	if((victim.guild > GIL_SEPERATOR_HUM) && (Npc_GetAttitude(self,other) != ATT_HOSTILE) && !Npc_IsDead(victim))
    	{
    		B_Attack(self,victim,AR_MonsterVsHuman,0);
    		return;
    	};
    	if((self.aivar[AIV_EnemyOverride] == TRUE) && (Npc_GetDistToNpc(self,victim) <= PERC_DIST_INTERMEDIAT) && (Npc_GetDistToNpc(self,other) <= PERC_DIST_INTERMEDIAT))
    	{
    		self.aivar[AIV_EnemyOverride] = FALSE;
    		Npc_PerceiveAll(self);
    		Npc_GetNextTarget(self);
    		if(Hlp_IsValidNpc(other) && !C_NpcIsDown(other))
    		{
    			B_Attack(self,other,AR_GuildEnemy,0);
    			return;
    		};
    		return;
    	};
    	if(((other.aivar[AIV_ATTACKREASON] == AR_GuardStopsIntruder) || (other.aivar[AIV_ATTACKREASON] == AR_MonsterCloseToGate) || (other.aivar[AIV_ATTACKREASON] == AR_HumanMurderedHuman) || (other.aivar[AIV_ATTACKREASON] == AR_GuildEnemy) || (other.aivar[AIV_ATTACKREASON] == AR_GuardCalledToKill)) && (Npc_GetAttitude(self,other) == ATT_FRIENDLY))
    	{
    		B_Attack(self,victim,AR_GuardCalledToKill,0);
    		return;
    	};
    	if(((victim.aivar[AIV_ATTACKREASON] == AR_GuardStopsIntruder) || (victim.aivar[AIV_ATTACKREASON] == AR_MonsterCloseToGate) || (victim.aivar[AIV_ATTACKREASON] == AR_HumanMurderedHuman) || (victim.aivar[AIV_ATTACKREASON] == AR_GuildEnemy) || (victim.aivar[AIV_ATTACKREASON] == AR_GuardCalledToKill)) && (Npc_GetAttitude(self,victim) == ATT_FRIENDLY))
    	{
    		B_Attack(self,other,AR_GuardCalledToKill,0);
    		return;
    	};
    	if(((other.aivar[AIV_ATTACKREASON] == AR_GuardStopsFight) || (other.aivar[AIV_ATTACKREASON] == AR_ReactToDamage) || (other.aivar[AIV_ATTACKREASON] == AR_ReactToWeapon)) && (Npc_GetAttitude(self,other) == ATT_FRIENDLY))
    	{
    		if(((other.guild == GIL_SLD) || (other.guild == GIL_DJG) || (other.guild == GIL_NONE)) && ((victim.guild == GIL_SLD) || (victim.guild == GIL_DJG) || (victim.guild == GIL_NONE)))
    		{
    		}
    		else if(!Npc_IsPlayer(other) && !Npc_IsPlayer(victim))
    		{
    		}
    		else
    		{
    			B_Attack(self,victim,AR_GuardStopsFight,0);
    			return;
    		};
    	};
    	if(((victim.aivar[AIV_ATTACKREASON] == AR_GuardStopsFight) || (victim.aivar[AIV_ATTACKREASON] == AR_ReactToDamage) || (victim.aivar[AIV_ATTACKREASON] == AR_ReactToWeapon)) && (Npc_GetAttitude(self,victim) == ATT_FRIENDLY))
    	{
    		if(((other.guild == GIL_SLD) || (other.guild == GIL_DJG) || (other.guild == GIL_NONE)) && ((victim.guild == GIL_SLD) || (victim.guild == GIL_DJG) || (victim.guild == GIL_NONE)))
    		{
    		}
    		else if(!Npc_IsPlayer(other) && !Npc_IsPlayer(victim))
    		{
    		}
    		else
    		{
    			B_Attack(self,other,AR_GuardStopsFight,0);
    			return;
    		};
    	};
    	if((other.aivar[AIV_ATTACKREASON] == AR_NONE) && (victim.aivar[AIV_ATTACKREASON] == AR_NONE) && (self.guild == GIL_MIL))
    	{
    		if((Npc_GetAttitude(self,other) == ATT_FRIENDLY) && (Npc_GetAttitude(self,victim) != ATT_FRIENDLY))
    		{
    			B_Attack(self,victim,AR_GuardStopsFight,0);
    			return;
    		}
    		else if((Npc_GetAttitude(self,victim) == ATT_FRIENDLY) && (Npc_GetAttitude(self,other) != ATT_FRIENDLY))
    		{
    			B_Attack(self,other,AR_GuardStopsFight,0);
    			return;
    		}
    		else if(Npc_IsPlayer(other))
    		{
    			B_Attack(self,victim,AR_GuardStopsFight,0);
    			return;
    		}
    		else if(Npc_IsPlayer(victim))
    		{
    			B_Attack(self,other,AR_GuardStopsFight,0);
    			return;
    		}
    		else
    		{
    			B_Attack(self,other,AR_GuardStopsFight,0);
    			return;
    		};
    	};
    	if(((other.aivar[AIV_ATTACKREASON] == AR_UseMob) || (other.aivar[AIV_ATTACKREASON] == AR_Theft) || (other.aivar[AIV_ATTACKREASON] == AR_LeftPortalRoom)) && (Npc_GetAttitude(self,other) == ATT_FRIENDLY))
    	{
    		if(C_WantToAttackThief(self,victim))
    		{
    			B_Attack(self,victim,AR_GuardCalledToThief,0);
    		};
    		return;
    	};
    	if(((victim.aivar[AIV_ATTACKREASON] == AR_UseMob) || (victim.aivar[AIV_ATTACKREASON] == AR_Theft) || (victim.aivar[AIV_ATTACKREASON] == AR_LeftPortalRoom)) && (Npc_GetAttitude(self,victim) == ATT_FRIENDLY))
    	{
    		if(C_WantToAttackThief(self,other))
    		{
    			B_Attack(self,other,AR_GuardCalledToThief,0);
    		};
    		return;
    	};
    	if((other.aivar[AIV_ATTACKREASON] == AR_ClearRoom) && (Npc_GetAttitude(self,other) == ATT_FRIENDLY))
    	{
    		B_Attack(self,victim,AR_GuardCalledToRoom,0);
    		return;
    	};
    	if((victim.aivar[AIV_ATTACKREASON] == AR_ClearRoom) && (Npc_GetAttitude(self,victim) == ATT_FRIENDLY))
    	{
    		B_Attack(self,other,AR_GuardCalledToRoom,0);
    		return;
    	};
    	if((Npc_GetDistToNpc(self,other) > PERC_DIST_INTERMEDIAT) && (Npc_GetDistToNpc(self,victim) > PERC_DIST_INTERMEDIAT))
    	{
    		return;
    	};
    	if(!Npc_CanSeeNpcFreeLOS(self,victim))
    	{
    		return;
    	};
    	Npc_ClearAIQueue(self);
    	B_ClearPerceptions(self);
    	AI_StartState(self,ZS_WatchFight,0,"");
    };

  2. Beiträge anzeigen #2 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Um zu verstehen was passiert, könntest du dir in einige Funktionen debug prints einbauen.
    Beispielsweise in der Funktion B_Attack dir ausgeben lassen wer da gerade wen angreift und mit welcher attack_reason.
    Wenn du dann weist welche attack_reason Akil hat, könntest du an den entsprechenden Stellen wo B_Attack mit dieser attack_reason aufgerufen wird auch debug prints einbauen.
    So könntest du dann Stück für Stück die code Stelle eingrenzen die dazu führt das Akil den Kerl überhaupt angreifen will.

    Wenn du das Problem einfach nur beheben willst ohne es zu verstehen könntest du dir natürlich auch Ausnahmen in die entsprechende Stelle in der ZS_Attack_End schreiben, damit kein finishing move ausgeführt wird.

  3. Beiträge anzeigen #3 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline
    Ist jetzt vielleicht nicht die sauberste Lösung, aber nachdem ich den beiden Brüdern statt der Landbewohner Gilde einfach die Gildenlose gegeben habe, hat sich keiner mehr eingemischt.

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