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 7 von 7
  1. Beiträge anzeigen #1 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline

    AI_StartState Aufruf in B_Attack funktioniert manchmal nicht

    Hallo!
    Ich habe das Problem das der ZS_Attack Aufruf in B_Attack
    Code:
    AI_StartState		(slf, ZS_Attack, 0, "");
    manchmal nicht funktioniert wenn ein bestimmter Zauber benutzt wird um NPCs anzugreifen(insbesondere wenn gerade ein savegame geladen wurde). Sie nehmen den Angriff in B_AssessDamage wahr und B_Attack wird aufgerufen (insbesondere wird auch B_ClearPerceptions (slf); in B_Attack aufgerufen) allerdings wird der Zustand ZS_Attack nicht gestartet.

    B_Attack mit debugPrints:
    Code:
    func void B_Attack (var C_NPC slf, var C_NPC oth, var int attack_reason, var int wait)
    {
    	printdebug("B_Attack");
    	printDebug(concatstrings("AR: ", IntToString(attack_reason)));
    	
    	if(Hlp_IsValidNpc(slf)){
    		printDebug(debugNpc_Martin("slf", slf));
    	}else{
    		printDebug("slf not valid");
    	};
    	
    	if(Hlp_IsValidNpc(oth)){
    		printDebug(debugNpc_Martin("oth", oth));
    	}else{
    		printDebug("oth not valid");
    	};
    	
    	// SET AIVARS
    	
    	// ------ wait auf 0 oder 1 setzen ------
    	slf.aivar[AIV_WaitBeforeAttack] = wait;
    	
    	// ------ Enemy-Override-Blockierung wird aufgehoben (aus Dialog heraus) ------
    	if (attack_reason == AR_SuddenEnemyInferno)
    	{
    		slf.aivar[AIV_EnemyOverride] = FALSE;
    		Npc_SendPassivePerc	(slf, PERC_ASSESSFIGHTSOUND, slf, oth); //EnemyOverride-Aivars von allen anderen Npcs wegschießen!
    	};
    
    	// ------ wenn aus ZS_Talk B_Attack aufgerufen wird ------
    	if (Npc_IsInState (slf, ZS_Talk))
    	{
    		slf.aivar[AIV_INVINCIBLE] = FALSE;
    		oth.aivar[AIV_INVINCIBLE] = FALSE; //VORSICHT! (selten) in Dialogen ANDERES Target (s. Cipher & Dar) - dann manuell machen
    	};
    
    	// ------ wenn der NSC schon in ZS_Attack ist ------
    	// ------ UND wenn neues Ziel gleich altes ------
    	if (Npc_IsInState (slf, ZS_Attack))
    	&& (Hlp_GetInstanceID(oth) == slf.aivar[AIV_LASTTARGET])		//LASTTARGET ist hier richtig initialisiert, weil NSC HIER im ZS_Attack ist!
    	{
    		// ------ evtl. AttackReason ÄNDERN ------
    		if (!C_NpcHasAttackReasonToKill (slf))
    		&& (attack_reason > slf.aivar[AIV_ATTACKREASON]) //wenn neuer Grund wichtiger als vorheriger
    		{
    			slf.aivar[AIV_ATTACKREASON] = attack_reason;
    			
    			if (Npc_IsPlayer(oth))
    			{
    				slf.aivar[AIV_LastPlayerAR] = attack_reason;
    			};
    		};
    	}
    	else //noch NICHT in ZS_Attack (ERSTER Aufruf) ODER NEUES Ziel
    	{	
    		slf.aivar[AIV_ATTACKREASON] = attack_reason;
    				
    		if (Npc_IsPlayer(oth))
    		{
    			slf.aivar[AIV_LastPlayerAR] = attack_reason;
    		};
    	};
    
    	
    	//MEMORIZE CRIMES				//AR ÄNDERT sich NUR, wenn schwerer als vorheriger (s.o.)
    	
    	// ------ CRIME_SHEEPKILLER ------
    	if (slf.aivar[AIV_ATTACKREASON] == AR_SheepKiller)
    	{
    		B_MemorizePlayerCrime (slf, oth, CRIME_SHEEPKILLER);
    	};
    
    	// ------ CRIME_ATTACK ------
    	if (slf.aivar[AIV_ATTACKREASON] == AR_ReactToDamage)
    	|| (slf.aivar[AIV_ATTACKREASON] == AR_ReactToWeapon)
    	{
    		if (!C_NpcIsToughGuy(slf))
    		&& (! (Npc_IsPlayer(oth) && (slf.npctype == NPCTYPE_FRIEND)) )
    		{
    			B_MemorizePlayerCrime (slf, oth, CRIME_ATTACK);
    		};
    	};
    	
    	// ------ CRIME_THEFT ------
    	if (slf.aivar[AIV_ATTACKREASON] == AR_Theft)
    	|| (slf.aivar[AIV_ATTACKREASON] == AR_UseMob)
    	{
    		B_MemorizePlayerCrime (slf, oth, CRIME_THEFT);
    	};
    	
    	// ------ CRIME_MURDER ------
    	if (slf.aivar[AIV_ATTACKREASON] == AR_HumanMurderedHuman)
    	{
    		B_MemorizePlayerCrime (slf, oth, CRIME_MURDER);
    	};
    	
    
    	//EXIT IF...
    	
    	// ------ wenn der NSC schon in ZS_Attack ist ------
    	if (Npc_IsInState (slf, ZS_Attack))
    	{
    		printDebug("returning from b_attack because Npc_IsInState (slf, ZS_Attack)");
    		return;
    	};
    	
    	
    	//FUNC
    	
    	// ------ AR_KILL ------						//HACK - geht davon aus, daß Spieler auf jeden Fall JETZT stirbt (daher brauchen die Werte später nicht resettet zu werden)
    	if (slf.aivar[AIV_ATTACKREASON] == AR_KILL)
    	{
    		B_SetAttitude (slf, ATT_HOSTILE);
    	};
    	
    	// BUGFIX: Nicht, wenn verwandelt
    	if (C_NpcIsHero(oth))
    	{
    		slf.aivar[AIV_LastFightAgainstPlayer] = FIGHT_CANCEL;
    		slf.aivar[AIV_LastFightComment] = FALSE;
    	};
    	
    	if (!Npc_IsInState (slf, ZS_Talk)) //HIER RAUS: führt aus DIA heraus zum Löschen des AI_StopProcessInfo
    	{
    		Npc_ClearAIQueue(slf); 
    	};
    	B_ClearPerceptions	(slf);
    	Npc_SetTarget		(slf, oth);
    	printDebug("oth set as target in B_Attack");
    	
    	if (C_BodyStateContains(slf, BS_LIE))
    	{
    		printDebug("AI_StartState		(slf, ZS_Attack, 1, );");
    		AI_StartState		(slf, ZS_Attack, 1, "");
    	}
    	else
    	{
    		printDebug("AI_StartState		(slf, ZS_Attack, 0, );");
    		AI_StartState		(slf, ZS_Attack, 0, "");
    	};
    	return;
    };
    Wenn es funktioniert erhalte ich diese zspy Ausgabe (Draxes == hero):
    Code:
    [i] 01:20 Info:  5 U:    Skript: B_AssessDamage (human) called .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_REACTTOWEAPON)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26268)state_rtnChanged:(0)next state:(ZS_REACTTOWEAPON) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: B_Attack .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: AR: 11 .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: slf: Wirt(122)state:()curr state:(ZS_REACTTOWEAPON)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26268)state_rtnChanged:(0)next state:(ZS_REACTTOWEAPON) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: oth: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: oth set as target in B_Attack .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: AI_StartState		(slf, ZS_Attack, 0, ); .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: ZS_Attack_Start .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_ATTACK)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26280)state_rtnChanged:(0)next state:(ZS_ATTACK) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: ZS_Attack: after validating other: .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_ATTACK)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26280)state_rtnChanged:(0)next state:(ZS_ATTACK) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 01:20 Info:  5 X:     [oCZoneMusic::ProcessZoneList]: Change hero status to oHERO_STATUS_FGT. .... <zError.cpp,#465>
    Wenn es nicht funktioniert:
    Code:
    [i] 00:58 Info:  5 U:    Skript: B_AssessDamage (human) called .... <zError.cpp,#465>
    [i] 00:58 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_REACTTOWEAPON)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(23333)state_rtnChanged:(0)next state:(ZS_REACTTOWEAPON) ###  .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: B_Attack .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: AR: 11 .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: slf: Wirt(122)state:()curr state:(ZS_REACTTOWEAPON)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(23333)state_rtnChanged:(0)next state:(ZS_REACTTOWEAPON) ###  .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: oth: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: oth set as target in B_Attack .... <zError.cpp,#465>
    [i] 00:59 Info:  5 U:    Skript: AI_StartState		(slf, ZS_Attack, 0, ); .... <zError.cpp,#465>
    Der Zauber bei welchem es regelmäßig beobachtet werden kann:
    Code:
    // ******************
    // SPL_ArkaneMissiles
    // ******************
    
    const int SPL_Cost_ArkaneMissiles		= 15; 
    const int STEP_ArkaneMissiles			= 4;
    const int SPL_Damage_ArkaneMissiles 	= 22;
    
    INSTANCE Spell_ArkaneMissiles (C_Spell_Proto)
    {
    	time_per_mana			= 300;
    	damage_per_level		= SPL_Damage_ArkaneMissiles;
    	damageType				= DAM_MAGIC;	
    	canTurnDuringInvest     = TRUE;
    	targetCollectAlgo		= TARGET_COLLECT_FOCUS;
    };
    
    func void FireMissiles(var int damage)
    {
    	Wld_PlayEffect("spellFX_ArcaneMissiles2Head",  hero, other, 0, damage, DAM_MAGIC, TRUE );
    	Wld_PlayEffect("spellFX_ArcaneMissiles",  hero, other, 0, 0, DAM_MAGIC, TRUE );
    	Wld_PlayEffect("spellFX_ArcaneMissilesLeftHand",  hero, other, 0, 0, DAM_MAGIC, TRUE );
    };
    
    func int Spell_Logic_ArkaneMissiles (var int manaInvested) 
    {
    	if (self.attribute[ATR_MANA]<STEP_ArkaneMissiles) 
    	{
    		return SPL_DONTINVEST;	
    	};
    
    	if (manaInvested <= STEP_ArkaneMissiles)
    	{
    		self.aivar[AIV_SpellLevel] = 1; // Start mit Level 1
    		return SPL_STATUS_CANINVEST_NO_MANADEC;
    	}
    	else if (manaInvested > (STEP_ArkaneMissiles * self.aivar[AIV_SpellLevel]))
    	{
    		self.attribute[ATR_MANA] = (self.attribute[ATR_MANA] - STEP_ArkaneMissiles);
    
    		FireMissiles(SPL_Damage_ArkaneMissiles + ((SPL_Damage_ArkaneMissiles / 10) * self.aivar[AIV_SpellLevel]));
    
    		if (self.attribute[ATR_MANA]<0) 
    		{
    	   		self.attribute[ATR_MANA]=0;
    		};
    
    		self.aivar[AIV_SpellLevel] += 1;
    		return SPL_NEXTLEVEL; 
    	};
    
    	return SPL_STATUS_CANINVEST_NO_MANADEC;	
    };
    
    func void Spell_Cast_ArkaneMissiles(var int spellLevel)
    {
    	self.attribute[ATR_MANA] = (self.attribute[ATR_MANA] - STEP_ArkaneMissiles);
    	
    	if (self.attribute[ATR_MANA]<0) 
    	{
    		self.attribute[ATR_MANA]=0;
    	};
    	
    	self.aivar[AIV_SelectSpell] += 1;
    };
    Bin für jeden Ansatz dankbar, sei es spezifisch für dieses Problem oder auch nur allgemeine Ideen was verhindern könnte das AI_StartState wirklich einen anderen Zustand startet.

  2. Beiträge anzeigen #2 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    G1 oder G2?

    Es kommt (zumindest in G1) vor, dass self oder other verloren gehen. Demnach würde der Npc aus dem Zustand springen bevor er überhaupt zur Abfrage kommt. Kannst du sicherstellen, dass der Schadenverursacher immer richtig definiert wird?


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  3. Beiträge anzeigen #3 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    G1 oder G2?
    G2
    Zitat Zitat von Bisasam Beitrag anzeigen
    Demnach würde der Npc aus dem Zustand springen bevor er überhaupt zur Abfrage kommt.
    Welche Abfrage meinst du?
    Zitat Zitat von Bisasam Beitrag anzeigen
    Kannst du sicherstellen, dass der Schadenverursacher immer richtig definiert wird?
    In B_Attack sind self, other, slf und oth richtig gesetzt. Erkenne ich ja an den debug prints.
    Code:
    In B_attack:
        Npc_ClearAIQueue(slf); // wird aufgerufen
        B_ClearPerceptions(slf); // wird aufgerufen
        AI_StartState		(slf, ZS_Attack, 0, ""); // wird aufgerufen?
        [return aus B_Attack]
    [passiert hier irgendwas?]
    func void ZS_Attack () // wird nicht aufgerufen

  4. Beiträge anzeigen #4 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Am Anfang der ZS_Attack gibt es eine Abfrage, ob das Ziel gültig ist. Wenn nicht, springt er sofort raus.
    Mag ja sein, dass slf bei dir richtig definiert ist, aber vermutlich geht irgendwas am Ziel verloren.
    Benutz unmittelbar vor dem AI_Startstate mal Npc_SetTarget(slf,oth); Mal sehen was dann passiert.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  5. Beiträge anzeigen #5 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Am Anfang der ZS_Attack gibt es eine Abfrage, ob das Ziel gültig ist. Wenn nicht, springt er sofort raus.
    Mein Problem ist das ZS_Attack() überhaupt nicht aufgerufen wird. Abfragen innerhalb der Funktion daher erstmal nicht so interresant.
    Auch sehe ich dort keine solche Abfrage, nur
    Code:
    if (C_WantToFlee (self, other))					
    	{
    	[...]
    Zitat Zitat von Bisasam Beitrag anzeigen
    Benutz unmittelbar vor dem AI_Startstate mal Npc_SetTarget(slf,oth); Mal sehen was dann passiert.
    wird doch in B_Attack gemacht:
    Code:
    	B_ClearPerceptions	(slf);
    	Npc_SetTarget		(slf, oth);
    	printDebug("oth set as target in B_Attack");
    	
    	if (C_BodyStateContains(slf, BS_LIE))
    	{
    		printDebug("AI_StartState		(slf, ZS_Attack, 1, );");
    		AI_StartState		(slf, ZS_Attack, 1, "");
    	}
    	else
    	{
    		printDebug("AI_StartState		(slf, ZS_Attack, 0, );");
    		AI_StartState		(slf, ZS_Attack, 0, "");
    	};
    	return;
    Wenn du weiter antworten möchtest wäre es hilfreich das du den startpost nochmal durchliest.

  6. Beiträge anzeigen #6 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    Ich habe den EP wohl besser gelesen als du.

    Code:
    victim not valid .... <zError.cpp,#465>

    VICTIM NOT VALID. Mit anderen Worten: Irgendwas stimmt mit dem Ziel nicht. Es geht verloren.


    "Das erinnert doch sehr erfreulich an das, was man sich als Gothicfan wünscht!"
    -Korallenkette

  7. Beiträge anzeigen #7 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von Bisasam Beitrag anzeigen
    Ich habe den EP wohl besser gelesen als du.

    Code:
    victim not valid .... <zError.cpp,#465>

    VICTIM NOT VALID. Mit anderen Worten: Irgendwas stimmt mit dem Ziel nicht. Es geht verloren.
    Das victim nicht gesetzt ist ist egal, funktioniert ja trotzdem:

    Zitat Zitat von Cryp18Struct Beitrag anzeigen
    Wenn es funktioniert erhalte ich diese zspy Ausgabe (Draxes == hero):
    Code:
    [i] 01:20 Info:  5 U:    Skript: B_AssessDamage (human) called .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_REACTTOWEAPON)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26268)state_rtnChanged:(0)next state:(ZS_REACTTOWEAPON) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: B_Attack .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: AR: 11 .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: slf: Wirt(122)state:()curr state:(ZS_REACTTOWEAPON)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26268)state_rtnChanged:(0)next state:(ZS_REACTTOWEAPON) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: oth: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: oth set as target in B_Attack .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: AI_StartState		(slf, ZS_Attack, 0, ); .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: ZS_Attack_Start .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_ATTACK)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26280)state_rtnChanged:(0)next state:(ZS_ATTACK) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: ZS_Attack: after validating other: .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: self: Wirt(122)state:()curr state:(ZS_ATTACK)state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(26280)state_rtnChanged:(0)next state:(ZS_ATTACK) ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: other: Draxes(0)state:()curr state:()state_aiStateDriven:(0)state_startNewRoutine:(0)state_lastAIState:(0)state_rtnChanged:(0)next state:() ###  .... <zError.cpp,#465>
    [i] 01:20 Info:  5 U:    Skript: victim not valid .... <zError.cpp,#465>
    [i] 01:20 Info:  5 X:     [oCZoneMusic::ProcessZoneList]: Change hero status to oHERO_STATUS_FGT. .... <zError.cpp,#465>
    victim wird nicht benutzt von B_AssessDamage weil es ja nur 2 NPCs betrifft.
    victim wird benutzt wenn mehr als 2 NPCs betrachtet werden müssen, in PERC_ASSESSFIGHTSOUND zum Beispiel.

    other/oth ist hier das Ziel/der Angreifer.

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