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
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline

    [G1] AI_UseMob funktioniert in Mobsi-Dialogen nicht

    Hallo,

    ich wollte das Schmieden in G1 etwas aufpolieren und musste dann mit Entsetzen feststellen, dass AI_UseMob nicht richtig funktioniert.

    Folgender Code wurde zum Testen benutzt:

    Code:
    //------------------------ SCHMIEDEN -----------------------------------------
    
    
    func void SCHMIEDEN_S1()
    {
    	if Hlp_GetInstanceid(self)==Hlp_GetInstanceID(PC_Hero)
    	{
    		Player_MobsiProduktion=MOB_SCHMIEDEN;
    		AI_ProcessInfos(self);
    	};
    };
    
    
    instance PC_SCHMIEDEN_TEST (C_INFO)
    {
    	npc				= PC_Hero;
    	nr 				= 3;
    	condition		= PC_SCHMIEDEN_TEST_Condition;
    	information		= PC_SCHMIEDEN_TEST_Info;
    	important		= 0;
    	permanent		= 1;
    	description		= "(Schmieden)"; 
    };
    
    FUNC INT PC_SCHMIEDEN_TEST_Condition()
    {	
    	 if Player_MobsiProduktion==MOB_SCHMIEDEN
     	{	 
    		return 1;
    	};
    };
    
    
    
    func VOID PC_SCHMIEDEN_TEST_Info()
    {
    	AI_StopProcessInfos (self);
    	self.aivar[AIV_INVINCIBLE]=FALSE;
    	Player_MobsiProduktion=0;
    	AI_UseMob(self,"BSANVIL",-1);
    
    };
    Wozu führt dieser Code?
    Nun im Grunde dazu, dass der Held sich aufhängt.
    Er führt keine AI-Befehle aus die hinter AI_UseMob kommen und bleibt in der S1-Animation (Hammer auf Amboss schlagen) stecken.
    Um da rauszukommen, hilft nur cheaten.

    Ich dachte, dass es mit AI_StandUp besser funktioniert, aber da ploppt der Held unschön sofort raus und dreht sich zu allem Überfluss auch noch in die falsche Richtung (Exakt 180°).

    Der Ansatz, die Übergangsanimationen zu stand manuell ins Skript zu schreiben, ist ebenfalls gescheitert. Ja, die Animation wird ausgeführt, aber der Held hört nicht auf, das Mobsi zu benutzen. AI_StandUp am schluss führt wieder zu dieser ekelhaften Drehung.

    Ich bin am verzweifeln


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

  2. Beiträge anzeigen #2 Zitieren
    Local Hero
    Registriert seit
    Feb 2017
    Beiträge
    270
     
    F a w k e s ist offline
    Hello Bisasam,
    After some testing - it seems to me like these AI functions EV_PROCESSINFOS, EV_USEMOB wont 'move' as long as oCNpc.interactMob <> 0. If I set this value forcibly to 0 then all events in AI queue go through:
    Code:
        var oCNpc slf; slf = Hlp_GetNPC (self);
        var int mobPtr; mobPtr = slf.interactMob;
        slf.interactMob = 0;
    [Bild: GM-AI-Queue-Interract-Mob.png]

    I tried some methods which (based on their names) could end interaction with mob and found only one that helped - oCMobInter_SendStateChange if you call it before AI_StopProcessInfos then everything seems to work fine (AI_UseMob can be commented out):
    Code:
    func void PC_SCHMIEDEN_TEST_Info(){
        var oCNpc slf; slf = Hlp_GetNPC (self);
        var int mobPtr; mobPtr = slf.interactMob;
        oCMobInter_SendStateChange (mobPtr, 1, 0);
    
        AI_StopProcessInfos (self);
        self.aivar[AIV_INVINCIBLE]=FALSE;
        Player_MobsiProduktion=0;
        //AI_UseMob(self,"BSANVIL",-1);
    };
    Try it out, maybe it will help:
    Code:
    func void oCMobInter_SendStateChange (var int mobPtr, var int fromState, var int toState){
        //0067D8C0  .text     Debug data           ?SendStateChange@oCMobInter@@IAEXHH@Z
        const int oCMobInter__SendStateChange_G1 = 6805696;
        
        //0x0071ED90 public: void __thiscall oCMobInter::SendStateChange(int,int)
        const int oCMobInter__SendStateChange_G2 = 7466384;
    
        if (!mobPtr) { return; };
    
        CALL_IntParam (toState);
        CALL_IntParam (fromState);
        CALL__thiscall (mobPtr, MEMINT_SwitchG1G2 (oCMobInter__SendStateChange_G1, oCMobInter__SendStateChange_G2));
    };

  3. Beiträge anzeigen #3 Zitieren
    Legende der Amazonen Avatar von Bisasam
    Registriert seit
    Dec 2006
    Ort
    Meine Faust in Sinis Gesicht
    Beiträge
    9.639
     
    Bisasam ist offline
    That code works great!
    Thanks for you help. Ill add it to the scriptbin, so it won't get lost


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

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