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 13 von 13
  1. Beiträge anzeigen #1 Zitieren
    Waldläufer
    Registriert seit
    Jun 2013
    Ort
    In der nähe von Ingolstadt
    Beiträge
    117
     
    SpikeZz ist offline

    NPC soll Waffe bei Animation nicht einstecken

    Hallo liebe Community,
    ich habe vor kurzer Zeit eine "Wache mit Hellebarde" Animation in die Modderdatenbank hochgeladen. Nach einer Anfrage von und daraus angeregtem eigenem Interesse stelle ich mir die Frage ob es möglich ist das der NPC die Hellebarde nicht wegsteckt wenn der Hero ihn anquatscht.
    Das es möglich ist wissen wir ja, da es mit sämtlichen "BS_SIT" ebenso funktioniert.

    Meine kläglichen versuche haben nicht funktioniert. Ob sie jetzt sinvoll waren oder nicht sei mal dahingestellt.




    Was ich bereits versucht habe:
    B_AssessTalk.d
    Code:
    // **************************************************** // B_AssessTalk    
    // ------------
    // aufgerufen durch Ansprechen (Wahrnehmung ASSESSTALK)
    // oder durch B_AssessPlayer (NSC hat Important-Info)
    // GILT AUCH FÜR MONSTER
    // ****************************************************
    
    
    func void B_AssessTalk ()
    {
        // EXIT IF...
        
        // ------- FORBIDDEN: Levelinspektor oder Rockefeller wird ignoriert ------
        var C_NPC PCL; PCL = Hlp_GetNpc(PC_Levelinspektor);
        var C_NPC PCR; PCR = Hlp_GetNpc(PC_Rockefeller);
        if (Hlp_GetInstanceID(other) == Hlp_GetInstanceID(PCL))
        || (Hlp_GetInstanceID(other) == Hlp_GetInstanceID(PCR))
        {
            PrintScreen (ConcatStrings("Stimme: ", IntToString(self.voice)), -1, 70, FONT_Screen, 2);
            
            PrintScreen ("KEIN HERO!", -1, -1, FONT_Screen, 2);    
            PrintScreen (IntToString(self.aivar[AIV_FollowDist]), -1, 70, FONT_Screen, 2);
            
            if (C_NpcIsInQuarter (self) == Q_KASERNE)
            {
                PrintScreen ("Q_KASERNE", -1, 30, FONT_Screen, 2);
            };
            
            if (C_NpcIsInQuarter (self) == Q_GALGEN)
            {
                PrintScreen ("Q_GALGEN", -1, 30, FONT_Screen, 2);
            };
            
            if (C_NpcIsInQuarter (self) == Q_MARKT)
            {
                PrintScreen ("Q_MARKT", -1, 30, FONT_Screen, 2);
            };
            
            if (C_NpcIsInQuarter (self) == Q_TEMPEL)
            {
                PrintScreen ("Q_TEMPEL", -1, 30, FONT_Screen, 2);
            };
            
            if (C_NpcIsInQuarter (self) == Q_UNTERSTADT)
            {
                PrintScreen ("Q_UNTERSTADT", -1, 30, FONT_Screen, 2);
            };
            
            if (C_NpcIsInQuarter (self) == Q_HAFEN)
            {
                PrintScreen ("Q_HAFEN", -1, 30, FONT_Screen, 2);
            };
            
            if (C_NpcIsInQuarter (self) == Q_OBERSTADT)
            {
                PrintScreen ("Q_OBERSTADT", -1, 30, FONT_Screen, 2);
            };
            
            return;
        };
        
        // ------ Exit-Conditions NUR für Monster
        if (self.guild > GIL_SEPERATOR_HUM)
        {
            // ------ Monster hat keine Info ------
            if (Npc_CheckInfo (self, 1) == FALSE)
            {
                if (Npc_CheckInfo (self, 0) == FALSE)
                {
                    return;
                };
            };
        };
            
        // ------ Exit-Conditions NUR für Humans ------
        if (self.guild < GIL_SEPERATOR_HUM)
        {
            
            // ------ Spieler ist Enemy ------
            if (B_AssessEnemy())    
            { 
                return;
            };
        
            // ------ Spieler ist Mörder ------
            if (B_GetPlayerCrime(self) == CRIME_MURDER)
            && (C_WantToAttackMurder(self, other))
            {
                B_Attack (self, other, AR_HumanMurderedHuman, 0);    
                return;
            };
            
            if (C_PlayerIsFakeBandit (self,other) == TRUE)
            && (self.guild != GIL_BDT)
            {
                B_Attack (self,other,AR_GuildEnemy,0);
                return;
            };
            
            
            if (C_RefuseTalk(self,other))
            {
                if C_PlayerHasFakeGuild (self,other)
                {
                    Npc_ClearAIQueue    (self);
                    AI_StartState (self,ZS_CommentFakeGuild , 1, "");
                    return;
                }
                else
                {
                    B_Say (self, other, "$NOTNOW");
                    return;
                };    
            };
        };
        
            
        // FUNC
        
        // ------ Spieler labert NSC an ------
        if (self.aivar[AIV_NpcStartedTalk] == FALSE)
        {
            if ( C_BodyStateContains(self,BS_WALK) || C_BodyStateContains(self,BS_RUN) )
            {
                B_Say (other,self,"$SC_HEYWAITASECOND");
            }
            else if (!Npc_CanSeeNpc(self, other))
            {
                var int rnd; rnd = Hlp_Random(100);
                if         (rnd <= 25)    {    B_Say (other,self,"$SC_HEYTURNAROUND");        }
                else if (rnd <= 50)    {    B_Say (other,self,"$SC_HEYTURNAROUND02");    }
                else if (rnd <= 75)    {    B_Say (other,self,"$SC_HEYTURNAROUND03");    }
                else if (rnd <= 99) {    B_Say (other,self,"$SC_HEYTURNAROUND04");    };
            };
        };
    
    
        Npc_ClearAIQueue    (self);
        B_ClearPerceptions    (self);    
        
        // ------ NSC bleibt sitzen oder steht in Ruhe auf bzw. beendet Mobsi in Ruhe -----------------
        if (C_BodyStateContains(self, BS_SIT))
        {
            if (self.aivar[AIV_NpcStartedTalk] == TRUE)
            {
                AI_StandUpQuick (other); //Spieler anhalten
            }
            else
            {
                AI_StandUp        (other); //Spieler anhalten
            };
            
            if (Npc_CanSeeNpc(self, other))
            {
                AI_StartState     (self, ZS_Talk, 0, "");     //sitzenbleiben
            }    
            else //nicht sehen
            {
                //HACK: Im ObservePlayer kann ein NSC sitzen, ohne daß in der END-Routine des ZS sauber aufgestanden wird (klar, denn ZS_ObservePlayer_End hat kein StandUp o.ä. - darf dies auch nicht haben)
                if (Npc_IsInState (self, ZS_ObservePlayer))
                {
                    AI_StandUp         (self);
                };
                AI_StartState     (self, ZS_Talk, 1, "");     //aufstehen
            };
                    
            return;
        }
        else //nicht sitzen
        {
            if (self.aivar[AIV_NpcStartedTalk] == TRUE)
            {
                AI_StandUpQuick (self);
                AI_StandUpQuick (other); //Spieler anhalten
            }
            else
            {
                AI_StandUp        (self);
                AI_StandUp        (other); //Spieler anhalten
            };
            
            AI_StartState     (self, ZS_Talk, 0, "");     //sitzenbleiben
            return;
        };
        
                
                if (Npc_IsInState (self, ZS_STAND_HALBERD))
                {
                AI_StartState     (self, ZS_Talk, 0, "");     //ohne Hellebarde wegstecken reden
                };
    };
    -> Keine Änderung im Spiel

    ZS_Talk.d
    Code:
    // ********************// ZS_Talk
    // -------
    // wird von Humans
    // UND Monstern benutzt
    // ********************
    
    
    // ------------------
    var int zsTalkBugfix;     //s.u.
    // ------------------
    
    
    FUNC void ZS_Talk ()
    {
        // --- Keine Wahrnehmungen angemeldet ---
    
    
        
        // EXIT IF...
        
        // ------ Spieler spricht schon mit jemand anderem ------
        if (other.aivar[AIV_INVINCIBLE] == TRUE)
        {
            return;                
        };
        
        
        // FUNC 
        
        // ------ damit kein Dialogteilnehmer angegriffen wird ------
        self.aivar[AIV_INVINCIBLE] = TRUE;
        other.aivar[AIV_INVINCIBLE] = TRUE;
            
        // ------ NUR bei Humans ------
        if (self.guild < GIL_SEPERATOR_HUM)
        {        
            // ------ NSC sieht Spieler an (funzt auch im Sitzen) ------
            if (C_BodyStateContains (self, BS_SIT))
            {
                var C_NPC target; target = Npc_GetLookAtTarget(self);
                if (!Hlp_IsValidNpc(target))
                {
                    AI_LookAtNpc (self, other);
                };
            }
    
    
            else
            {
                B_LookAtNpc (self, other);
            };
            
            
    
    
            // ------ NSC steckt ggf. Waffe weg ------
            AI_RemoveWeapon (self);
        };
    
    
             if (Npc_IsInState (self, ZS_STAND_HALBERD))
    
                     {
                         var C_NPC targetHalberd; targetHalberd = Npc_GetLookAtTarget(self);
                            if (!Hlp_IsValidNpc(targetHalberd))
                                {
                                    AI_LookAtNpc (self, other);
                                };
                    }
    
    
             else
                    {
                                B_LookAtNpc (self, other);
                    };    
        
        // ------ NSC dreht sich zum Spieler ------------------------------------------
        if (!C_BodystateContains(self, BS_SIT))
        {    
            B_TurnToNpc (self,    other);
        };
        
        // ------ Spieler dreht sich zum Npc ------------------------------------------
        if (!C_BodystateContains(other, BS_SIT))
        {    
            B_TurnToNpc (other, self);
            
            // ------ Spieler zu nah dran ------
            if (Npc_GetDistToNpc(other,self) < 80) 
            {
                AI_Dodge (other);
            };
        };
        
        // ------ NUR bei Humans ------
        if (self.guild < GIL_SEPERATOR_HUM)
        {    
            // ------ Set Face Expression ------
            if (Npc_GetAttitude(self, other) == ATT_ANGRY)
            || (Npc_GetAttitude(self, other) == ATT_HOSTILE)
            {
                if (!C_PlayerIsFakeBandit(self, other))
                || (self.guild != GIL_BDT)
                {
                    Mdl_StartFaceAni    (self,    "S_ANGRY",    1,    -1);
                };
            };
                    
            // ------ Ambient Infos zuweisen ------
            if (self.npctype == NPCTYPE_AMBIENT)
            || (self.npctype == NPCTYPE_OCAMBIENT)
            || (self.npctype == NPCTYPE_BL_AMBIENT)
            || (self.npctype == NPCTYPE_TAL_AMBIENT)
            {
                B_AssignAmbientInfos    (self);
                
                // ------ Cityguide -------
                if (C_NpcBelongsToCity(self))
                {
                    B_AssignCityGuide(self);
                };
            };
            
            // ------ Heiltrank geben können ------
            if (self.aivar[AIV_PARTYMEMBER] == TRUE)
            //&& (Hlp_GetInstanceID (self) != Hlp_GetInstanceID (Biff))
            //&& (Hlp_GetInstanceID (self) != Hlp_GetInstanceID (Biff_NW))
            //&& (Hlp_GetInstanceID (self) != Hlp_GetInstanceID (Biff_DI))
            //&& (Hlp_GetInstanceID (self) != Hlp_GetInstanceID (Pardos))
            //&& (Hlp_GetInstanceID (self) != Hlp_GetInstanceID (Pardos_NW))
            {
                B_Addon_GivePotion(self);
            };
    
    
            // ------ ToughGuy NEWS zuweisen -------
            if (C_NpcIsToughGuy (self))
            && (self.aivar[AIV_ToughGuyNewsOverride] == FALSE)
            {            
                B_AssignToughGuyNEWS (self);
            };
                    
            // ------ Ambient NEWS zuweisen -------
            if (C_NpcHasAmbientNews(self))
            {
                B_AssignAmbientNEWS    (self);
            };
            
        };        
            
        if (self.guild == GIL_DRAGON)
        {
            AI_PlayAni  (self, "T_STAND_2_TALK");
        };
        
        /*
        if (self.aivar[AIV_TalkedToPlayer] == TRUE) && ...
        {
            B_Say (self,other,"$ABS_COMMANDER"); //Ich hörte, du warst beim Kommandanten und hast die Sache wieder in Ordnung gebracht.
            B_Say (self,other,"$ABS_MONASTERY"); //Ich hörte, du warst bei Vater Parlan und hast Buße getan..
            B_Say (self,other,"$ABS_FARM");    //Ich hörte, du warst bei Lee und und hast die Sache wieder in Ordnung gebracht.
            ABS_GOOD        //Das ist gut!
        };
        */ // *** FIXME ***
    
    
        // ------ START Multiple Choice Dialog ------
        AI_ProcessInfos(self);
    
    
        
        zsTalkBugfix = FALSE;    //var resetten!
    };
    
    
    func INT ZS_Talk_Loop ()
    {
           if (InfoManager_HasFinished())
           && (zsTalkBugfix == TRUE)            //verhindert, daß InfoManager_HasFinished im ERSTEN FRAME der Loop abgefragt wird --> führt sonst bei MOB-SITZENDEN NSCs (kein Scheiss) zu Abbruch der Loop im ERSTEN FRAME! 
                                               //(Problem besteht wegen falscher Reihenfolge der Befehle AI_ProcessInfos und InfoManager_HasFinished)
           {
            self.aivar[AIV_INVINCIBLE] = FALSE;
            other.aivar[AIV_INVINCIBLE] = FALSE;
            self.aivar[AIV_NpcStartedTalk] = FALSE;
            self.aivar[AIV_TalkedToPlayer] = TRUE;
            
            // ------ NUR bei Humans ------
            if (self.guild < GIL_SEPERATOR_HUM)
            {
                B_StopLookAt (self);
                Mdl_StartFaceAni (self, "S_NEUTRAL", 1, -1); //Reset Face Expression
            };    
        
            if (self.guild == GIL_DRAGON)
            {
                AI_PlayAni (self, "T_TALK_2_STAND");
            };
            
            return LOOP_END;
          }
          else
           {
               zsTalkBugfix = TRUE;
               
               return LOOP_CONTINUE;
           };
    };
    
    
    FUNC VOID ZS_Talk_End ()
    {
        // ------ damit nicht nach Dialog+Losgehen gegrüßt wird ------
        Npc_SetRefuseTalk(other,20); //BEACHTEN: other ist Spieler!
    
    
        // ------ wenn Spieler in meinem Raum ------
        if (C_NpcIsBotheredByPlayerRoomGuild(self))
        || ( (Wld_GetPlayerPortalGuild() == GIL_PUBLIC) && (Npc_GetAttitude(self,other) != ATT_FRIENDLY) )
        {
            AI_StartState(self, ZS_ObservePlayer, 0, "");
        }
        else
        {
    
    
        };
    };
    Auch das bringt keine Änderung im Spiel
    Hat vielleicht jemand eine Idee? Wenn ja bitte nicht schüchtern sein und lieber die Idee mit anderen teilen ;-)



    EDIT:
    hier noch meine ZS_STAND_HALBERD:
    Code:
    func void ZS_STAND_HALBERD (){
    	Perception_Set_Normal();
    	
    	B_ResetAll (self);
    	
    	AI_SetWalkmode 	(self,NPC_WALK);
    	 	
    	if (Npc_GetDistToWP (self,self.wp) > TA_DIST_SELFWP_MAX) 
        {
    		AI_GotoWP	(self, self.wp);
    	};
    	self.aivar[AIV_TAPOSITION] = NOTINPOS;
    };
    
    
    func int ZS_STAND_HALBERD_loop ()
    {
    	if (Npc_IsOnFP (self, "STAND"))
     	{ 
     		AI_AlignToFP (self);
      		if (self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
      		{
      			self.aivar[AIV_TAPOSITION] = NOTINPOS;
      		};
     	} 
     	else if (Wld_IsFPAvailable(self,"STAND"))
     	{
     		AI_GotoFP   (self, "STAND");
      		AI_StandUp   (self);
      		AI_AlignToFP  (self);
      		self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK;
     	}
     	else
     	{
      		AI_AlignToWP (self); 
      		if (self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK )
      		{
      			self.aivar[AIV_TAPOSITION] = NOTINPOS;
      		};  
     	}; 
     		
    	if ((self.aivar[AIV_TAPOSITION] == NOTINPOS)
    	&& (Npc_IsOnFP (self, "STAND")))
    	{
    			if ((Npc_HasItems (self, ItMw_Hellebarde) == 0)
    			&& 	(self.aivar[AIV_MM_REAL_ID]!= ID_ORCWARRIOR))
    			{
    
    
    			CreateInvItems	(self, ItMw_Hellebarde, 1);
    			//EquipItem (self, ItMw_Hellebarde);
    			AI_EquipBestMeleeWeapon (self);
    			}
    			else if ((Npc_HasItems (self, ItMw_2H_OrcAxe_05) == 0)
    			&& 	(self.aivar[AIV_MM_REAL_ID] == ID_ORCWARRIOR))
    			{
    
    
    			CreateInvItems	(self, ItMw_2H_OrcAxe_05, 1);
    			//EquipItem (self, ItMw_Hellebarde);
    			AI_EquipBestMeleeWeapon (self);
    		    };
    		    	
    		
    		
    		AI_ReadyMeleeWeapon	(self);
    		AI_AlignToFP 	(self);
    		AI_StandUp 		(self);
    		AI_PlayAni (self,"T_STAND_2_HALBERD");
    		self.aivar[AIV_TAPOSITION] = ISINPOS;
    	};
    
    
    	return LOOP_CONTINUE;
    };

    mfg



    SpikeZz
    Geändert von SpikeZz (08.01.2020 um 16:07 Uhr)

  2. Beiträge anzeigen #2 Zitieren
    Serima Avatar von Fisk2033
    Registriert seit
    Dec 2010
    Ort
    Dresden
    Beiträge
    5.797
     
    Fisk2033 ist offline
    Hey, ich konnte mir den Code noch nicht wirklich durchlesen, weil ich gerade vom Handy aus schaue.
    Könnte es vielleicht einfach sein, dass deine Abfrage (ob sich der NPC in entsprechender Position befindet) einfach zu spät kommt und der NPC (wegen vorheringen Abfragen) die Waffe schon wegsteckt?
    Ansonsten nochmal vielen Dank für diese coole Animation!

  3. Beiträge anzeigen #3 Zitieren
    Waldläufer
    Registriert seit
    Jun 2013
    Ort
    In der nähe von Ingolstadt
    Beiträge
    117
     
    SpikeZz ist offline
    Zitat Zitat von Fisk2033 Beitrag anzeigen
    Hey, ich konnte mir den Code noch nicht wirklich durchlesen, weil ich gerade vom Handy aus schaue.
    Könnte es vielleicht einfach sein, dass deine Abfrage (ob sich der NPC in entsprechender Position befindet) einfach zu spät kommt und der NPC (wegen vorheringen Abfragen) die Waffe schon wegsteckt?
    Ansonsten nochmal vielen Dank für diese coole Animation!
    Danke für den Tipp. Hab ich versucht, jedoch Fehlanzeige. Keine veränderung.

  4. Beiträge anzeigen #4 Zitieren
    Local Hero
    Registriert seit
    Feb 2017
    Beiträge
    270
     
    F a w k e s ist offline
    I feel like quality of google translations is getting worse recently - sorry if I misunderstood your problem
    I understand you are having issue where NPC putaways weapon - and you don't want that when you approach NPC with halberd.

    AI_RemoveWeapon is removing weapon - you can check if NPC was in state ZS_STAND_HALBERD and if yes you don't have to remove weapon. Also noticed that you are checking if Npc_IsInState inside of ZS_Talk state - this will not work, since state is already ZS_Talk you need to use instead NPC_WasInState.

    Before AI_ProcessInfos you might have to restore animation T_STAND_2_HALBERD. However this will look little bit clumsy, since AI_Turn is changing animation, but better than nothing.

    Code:
    func void ZS_Talk ()
    {
        var C_Npc target;
        if (other.aivar [AIV_INVINCIBLE] == TRUE)
        {
            return;
        };
        self.aivar    [AIV_INVINCIBLE] = TRUE;
        other.aivar    [AIV_INVINCIBLE] = TRUE;
        if (self.guild < GIL_SEPERATOR_HUM)
        {
            if (C_BodyStateContains (self, BS_SIT))    
            {
                target = Npc_GetLookAtTarget (self);
                if (!Hlp_IsValidNpc (target))
                {
                    AI_LookAtNpc (self, other);
                };
            }
            else
            {
                B_LookAtNpc (self, other);
            };
    
            if (!NPC_WasInState (self, ZS_STAND_HALBERD))
            {
                AI_RemoveWeapon (self);
            };
        };
        
    ...
    
        if (NPC_WasInState (self, ZS_STAND_HALBERD))
        {
            AI_PlayAni (self, "T_STAND_2_HALBERD");
        };
    
        AI_ProcessInfos (self);
        zsTalkBugfix = FALSE;
    };
    [Video]
    Geändert von F a w k e s (08.01.2020 um 18:00 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    Waldläufer
    Registriert seit
    Jun 2013
    Ort
    In der nähe von Ingolstadt
    Beiträge
    117
     
    SpikeZz ist offline
    Zitat Zitat von F a w k e s Beitrag anzeigen
    I feel like quality of google translations is getting worse recently - sorry if I misunderstood your problem
    I understand you are having issue where NPC putaways weapon - and you don't want that when you approach NPC with halberd.

    AI_RemoveWeapon is removing weapon - you can check if NPC was in state ZS_STAND_HALBERD and if yes you don't have to remove weapon. Also noticed that you are checking if Npc_IsInState inside of ZS_Talk state - this will not work, since state is already ZS_Talk you need to use instead NPC_WasInState.

    Before AI_ProcessInfos you might have to restore animation T_STAND_2_HALBERD. However this will look little bit clumsy, since AI_Turn is changing animation, but better than nothing.

    Code:
    func void ZS_Talk ()
    {
        var C_Npc target;
        if (other.aivar [AIV_INVINCIBLE] == TRUE)
        {
            return;
        };
        self.aivar    [AIV_INVINCIBLE] = TRUE;
        other.aivar    [AIV_INVINCIBLE] = TRUE;
        if (self.guild < GIL_SEPERATOR_HUM)
        {
            if (C_BodyStateContains (self, BS_SIT))    
            {
                target = Npc_GetLookAtTarget (self);
                if (!Hlp_IsValidNpc (target))
                {
                    AI_LookAtNpc (self, other);
                };
            }
            else
            {
                B_LookAtNpc (self, other);
            };
    
            if (!NPC_WasInState (self, ZS_STAND_HALBERD))
            {
                AI_RemoveWeapon (self);
            };
        };
        
    ...
    
        if (NPC_WasInState (self, ZS_STAND_HALBERD))
        {
            AI_PlayAni (self, "T_STAND_2_HALBERD");
        };
    
        AI_ProcessInfos (self);
        zsTalkBugfix = FALSE;
    };
    [Video]
    ok, yes this almost works. Just one little Problem left. When i end the Dialog then he Remove hist weapon and start the animation again.
    i also made an video of my problem now

    [Video]
    Geändert von SpikeZz (08.01.2020 um 18:46 Uhr)

  6. Beiträge anzeigen #6 Zitieren
    Local Hero
    Registriert seit
    Feb 2017
    Beiträge
    270
     
    F a w k e s ist offline
    Hi SpikeZz,
    Seems like B_ResetAll is removing weapon as well - so when NPC goes back to ZS_STAND_HALBERD weapon is removed when this function is called:
    Code:
    func void B_ResetAll(var C_Npc slf)
    {
        B_StopLookAt(slf);
        AI_RemoveWeapon(slf);
    };
    Try to change it like this ->
    Code:
    func void B_ResetAll(var C_Npc slf)
    {
        B_StopLookAt(slf);
        if (!NPC_IsInState (slf, ZS_STAND_HALBERD))
        {
            AI_RemoveWeapon (slf);
        };
    };
    Geändert von F a w k e s (15.01.2022 um 21:25 Uhr)

  7. Beiträge anzeigen #7 Zitieren
    Waldläufer
    Registriert seit
    Jun 2013
    Ort
    In der nähe von Ingolstadt
    Beiträge
    117
     
    SpikeZz ist offline
    Zitat Zitat von F a w k e s Beitrag anzeigen
    Hi SpikeZz,
    Seems like B_ResetAll is removing weapon as well - so when NPC goes back to ZS_STAND_HALBERD weapon is removed when this function is called:
    Code:
    func void B_ResetAll(var C_Npc slf)
    {
        B_StopLookAt(slf);
        AI_RemoveWeapon(slf);
    };
    Try to change it like this ->
    Code:
    func void B_ResetAll(var C_Npc slf)
    {
        B_StopLookAt(slf);
        if (!NPC_IsInState (self, ZS_STAND_HALBERD))
        {
            AI_RemoveWeapon (self);
        };
    };



    Ok, thanks that almost fixed my Problem. Now the Npc just interrupt shortly at the beginning and at the end of an dialog. Can this be Fixed. If not i would deal with it.
    Here you can see what it looks like now:

    [Video]

  8. Beiträge anzeigen #8 Zitieren
    Local Hero
    Registriert seit
    Feb 2017
    Beiträge
    270
     
    F a w k e s ist offline
    That short interruption is caused I believe by AI_Turn, seems like it is endning S_HALBERD animation and applying STAND animation, not sure how to tweak this, maybe with some transition animation? This goes beyond my knowledge
    Geändert von F a w k e s (08.01.2020 um 22:14 Uhr)

  9. Beiträge anzeigen #9 Zitieren
    General Avatar von joey1990
    Registriert seit
    Aug 2008
    Ort
    Germanien/Thüringen/Hermsdorfer Kreuz
    Beiträge
    3.341
     
    joey1990 ist offline
    Das mit der anderen animation könnte man ja so machen... an sich klappt das ja schon gut

  10. Beiträge anzeigen #10 Zitieren
    General Avatar von joey1990
    Registriert seit
    Aug 2008
    Ort
    Germanien/Thüringen/Hermsdorfer Kreuz
    Beiträge
    3.341
     
    joey1990 ist offline
    Ich habe gerade noch einen fehler im dem Skript gefunden... das mit der Hellebarde klappt jetzt zwar, aber nun kann man keine Tiere, wie Lisel das Schaf oder bei meiner mod, ein Pferd ansprechen.
    der Hed sagt nur Hey...aber es kommt kein dialog mehr sondern das Tier frisst weiter

    Hat da jemand eine Lösung?

  11. Beiträge anzeigen #11 Zitieren
    General Avatar von joey1990
    Registriert seit
    Aug 2008
    Ort
    Germanien/Thüringen/Hermsdorfer Kreuz
    Beiträge
    3.341
     
    joey1990 ist offline
    Hat keiner eine Lösung

  12. Beiträge anzeigen #12 Zitieren
    banned
    Registriert seit
    Jan 2009
    Ort
    Oberösterreich
    Beiträge
    2.393
     
    Moe ist offline
    Danke Spike für die Hellebarden Animation!

    Ich hab jetzt noch ein Problem bezüglich der Animation, weil ich mit meinen Hellebarden auch kämpfen können will. Siehe Video:

    [Video]

    Meine zwei Hellebarden sind von der Länge her so wie deine Spike, aber die Location des Objekts der 3DS ist anders, damit man mit den Hellebarden auch kämpfen bzw. sie auf dem Rücken tragen kann.

    Wenn die NPCs nun mit meinen Hellebarden die Animation ausführen, halten sie die Waffen halt in die Höhe statt sie auf dem Boden abzustellen, wie eigentlich gedacht.

    Hat jemand für dieses Problem vielleicht eine Lösung?

    edit: Hier zu Veranschaulichung noch eine zweites Video. Ich habe die Hellebarden an die Animation angepasst, aber kämpfen sieht dann damit halt blöd aus. Gibt es ein Möglichkeit die Animation irgendwie abzuändern, sodass die NPCs die Hellebarden tiefer nehmen? Dann könnte man mit den Hellebarden auch kämpfen.

    [Video]
    Geändert von Moe (20.03.2020 um 20:43 Uhr)

  13. Beiträge anzeigen #13 Zitieren
    Schwertmeister
    Registriert seit
    May 2009
    Beiträge
    924
     
    Umfi ist offline
    Zitat Zitat von Moe Beitrag anzeigen
    Danke Spike für die Hellebarden Animation!

    Ich hab jetzt noch ein Problem bezüglich der Animation, weil ich mit meinen Hellebarden auch kämpfen können will. Siehe Video:

    [Video]

    Meine zwei Hellebarden sind von der Länge her so wie deine Spike, aber die Location des Objekts der 3DS ist anders, damit man mit den Hellebarden auch kämpfen bzw. sie auf dem Rücken tragen kann.

    Wenn die NPCs nun mit meinen Hellebarden die Animation ausführen, halten sie die Waffen halt in die Höhe statt sie auf dem Boden abzustellen, wie eigentlich gedacht.

    Hat jemand für dieses Problem vielleicht eine Lösung?

    edit: Hier zu Veranschaulichung noch eine zweites Video. Ich habe die Hellebarden an die Animation angepasst, aber kämpfen sieht dann damit halt blöd aus. Gibt es ein Möglichkeit die Animation irgendwie abzuändern, sodass die NPCs die Hellebarden tiefer nehmen? Dann könnte man mit den Hellebarden auch kämpfen.

    [Video]
    Das könnte helfen.

    https://forum.worldofplayers.de/foru...7#post16944337

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