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
    OdysseeModTeam Avatar von blackpirate
    Registriert seit
    Jan 2008
    Ort
    Jharkendar
    Beiträge
    20.016
     
    blackpirate ist offline

    Animation wird abrupt beendet

    Ich habe das Holzhacken von mark56 ins Spiel gebracht. https://www.worldofgothic.de/?go=mod...page=1&order=0 Funktioniert auch soweit einwandfrei. Doch wenn ich ein geschriebenes Script verwende (Hero soll eine Holzscheibe in Holzscheite spalten), dann erfolgt die Ausführung des Scripts zwar korrekt aber zu früh, da die Animation nicht beendet wird. Die Ani bricht abrupt ab. Was kann man tun, damit das Script erst nach Beendigung der Animation ausgeführt wird?


    Anbei das Script:


    //Mobsi für das Holzhacken - Items werden mitten bei der der Animation erzeugt.
    var int HOLZSCHEITHERSTELLEN_2_Log_Eintrag;

    FUNC VOID HOLZHACKEN_S1 ()
    {
    var C_NPC her;
    her = Hlp_GetNpc(PC_Hero);
    if (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))
    {
    self.aivar[AIV_INVINCIBLE]=TRUE;
    PLAYER_MOBSI_PRODUCTION = MOBSI_HOLZHACKEN;
    Ai_ProcessInfos (her);
    if (Npc_HasItems(hero,ItMw_1H_Axe_WoodChoppin) == 0)
    {
    CreateInvItems(hero,ItMw_1H_Axe_WoodChoppin,1);
    };

    };

    };

    instance PC_HOLZHACKEN_EXIT(C_Info)
    {
    npc = PC_Hero;
    nr = 999;
    condition = pc_HOLZHACKEN_exit_condition;
    information = pc_HOLZHACKEN_exit_info;
    permanent = TRUE;
    description = "ENDE";
    };


    func int pc_HOLZHACKEN_exit_condition()
    {
    if(PLAYER_MOBSI_PRODUCTION == MOBSI_HOLZHACKEN)

    {


    return TRUE;
    };
    };

    func void pc_HOLZHACKEN_exit_info()
    {
    b_endproductiondialog();
    Npc_RemoveInvItems(hero,ItMw_1H_Axe_WoodChoppin,1);

    };

    INSTANCE PC_HOLZHACKEN (C_Info)
    {
    npc = PC_Hero;
    nr = 1;
    condition = PC_HOLZHACKEN_Condition;
    information = PC_HOLZHACKEN_Info;
    permanent = TRUE;
    description = "1 Holzscheibe spalten";
    };

    func int PC_HOLZHACKEN_condition()
    {
    if((PLAYER_MOBSI_PRODUCTION == MOBSI_HOLZHACKEN) && (Npc_HasItems(hero,ItMi_Holzscheibe) >= 1))
    {
    return TRUE;
    };
    };

    func void PC_HOLZHACKEN_info()
    {
    b_endproductiondialog();

    CreateInvItems(hero,ItMi_Holzscheit,4);

    Npc_RemoveInvItems(hero,ItMi_Holzscheibe,1);
    Print ("Holz gespalten");

    if (HOLZSCHEITHERSTELLEN_2_Log_Eintrag == FALSE)
    {
    HOLZSCHEITHERSTELLEN_2_Log_Eintrag = TRUE;
    };
    };

    Der Krieg gegen die Orks schien verloren, - da machte sich eine Gruppe von Paladinen auf die Welt zu retten:
    ODYSSEE - IM AUFTRAG DES KÖNIGS



  2. Beiträge anzeigen #2 Zitieren
    Legend of Ahssûn Avatar von TheEternal
    Registriert seit
    Jun 2013
    Ort
    Frankfurt
    Beiträge
    4.546
     
    TheEternal ist offline
    Zitat Zitat von blackpirate Beitrag anzeigen
    Ich habe das Holzhacken von mark56 ins Spiel gebracht. https://www.worldofgothic.de/?go=mod...page=1&order=0 Funktioniert auch soweit einwandfrei. Doch wenn ich ein geschriebenes Script verwende (Hero soll eine Holzscheibe in Holzscheite spalten), dann erfolgt die Ausführung des Scripts zwar korrekt aber zu früh, da die Animation nicht beendet wird. Die Ani bricht abrupt ab. Was kann man tun, damit das Script erst nach Beendigung der Animation ausgeführt wird?


    Anbei das Script:
    da musst du in die Animationsdatei schauen und eventuell neue Zustände hinzufügen.

    In deinem Codebeispiel wird das Script in der Funktion
    Code:
    FUNC VOID HOLZHACKEN_S1 ()

    das entspricht dem animations-state S1 in der Holzhacken animation. Die Engine verknüft diesen animationsnamen mit dieser scriptfunktion.

    also an deiner Stelle müsste man die Animationen umschreiben, damit sie komplett ablaufen bis zum S1, oder du fügst einen zusätzlichen Animationssate hinzu S2 und führst deinen eigenen Code in dieser func void HOLZHACKEN_S2() aus.
    [Bild: LoA_Banner_Skyline2.jpg]
    LoA Website
    Checkout Cloudevo: unlimited Cloud-Drive


  3. Beiträge anzeigen #3 Zitieren
    OdysseeModTeam Avatar von blackpirate
    Registriert seit
    Jan 2008
    Ort
    Jharkendar
    Beiträge
    20.016
     
    blackpirate ist offline
    Zitat Zitat von TheEternal Beitrag anzeigen
    da musst du in die Animationsdatei schauen und eventuell neue Zustände hinzufügen.

    In deinem Codebeispiel wird das Script in der Funktion
    Code:
    FUNC VOID HOLZHACKEN_S1 ()

    das entspricht dem animations-state S1 in der Holzhacken animation. Die Engine verknüft diesen animationsnamen mit dieser scriptfunktion.

    also an deiner Stelle müsste man die Animationen umschreiben, damit sie komplett ablaufen bis zum S1, oder du fügst einen zusätzlichen Animationssate hinzu S2 und führst deinen eigenen Code in dieser func void HOLZHACKEN_S2() aus.
    In der Humans.MDS steht das hier:
    //================================================================================ ============================================
    // WOODCHOPPING
    //================================================================================ ============================================
    // WOODCUTTING - useWithItem = ItMw_1h_Misc_Axe


    ani ("t_WOODCHOPPIN_Stand_2_S0" 1 "s_WOODCHOPPIN_S0" 0.1 0.0 M. "HUM_WOODCHOPPIN.ASC" F 0 2)

    ani ("s_WOODCHOPPIN_S0" 1 "s_WOODCHOPPIN_S0" 0.0 0.0 M. "HUM_WOODCHOPPIN.ASC" F 3 3)
    ani ("t_WOODCHOPPIN_S0_2_Stand" 1 "" 0.0 0.1 M. "HUM_WOODCHOPPIN.ASC" R 0 2)

    ani ("t_WOODCHOPPIN_S0_2_S1" 1 "s_WOODCHOPPIN_S1" 0.0 0.0 M. "HUM_WOODCHOPPIN.ASC" F 4 26)
    {
    *eventTag (1 "DEF_INSERT_ITEM" "ZS_RIGHTHAND")
    //*eventTag (2 "DEF_EXCHANGE_ITEM" "ZS_RIGHTHAND" "ItMw_1h_Misc_Axe")
    }

    ani ("s_WOODCHOPPIN_S1" 1 "s_WOODCHOPPIN_S1" 0.0 0.0 M. "HUM_WOODCHOPPIN.ASC" F 27 257)
    ani ("t_WOODCHOPPIN_S1_2_S0" 1 "s_WOODCHOPPIN_S0" 0.1 0.0 M. "HUM_WOODCHOPPIN.ASC" R 4 26)
    {

    *eventTag (1 "DEF_REMOVE_ITEM")
    }
    Müsste ich dann das rotmarkierte in "t_WOODCHOPPIN_S1_2_S2" und "s_WOODCHOPPIN_S2" umbenennen?


    Muss ich dann auch was in der Mobsi mds ändern?
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
    // Last Changes:
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++


    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++


    Model ("WOODCHOPPIN_NORMAL")
    {

    meshAndTree ("WOODCHOPPIN_NORMAL.ASC")
    aniEnum
    {
    ani ("s_S0" 1 "s_S0" 0.0 0.0 M. "WOODCHOPPIN_NORMAL_USE.ASC" F 3 3)
    ani ("t_S0_2_S1" 1 "s_S1" 0.0 0.0 M. "WOODCHOPPIN_NORMAL_USE.ASC" F 4 26)
    ani ("s_S1" 1 "s_S1" 0.0 0.0 M. "WOODCHOPPIN_NORMAL_USE.ASC" F 27 257)
    ani ("t_S1_2_S0" 1 "s_S0" 0.0 0.0 M. "WOODCHOPPIN_NORMAL_USE.ASC" R 4 26)
    }
    }

    Der Krieg gegen die Orks schien verloren, - da machte sich eine Gruppe von Paladinen auf die Welt zu retten:
    ODYSSEE - IM AUFTRAG DES KÖNIGS


    Geändert von blackpirate (10.01.2019 um 16:53 Uhr)

  4. Beiträge anzeigen #4 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von blackpirate Beitrag anzeigen
    Müsste ich dann das rotmarkierte in "t_WOODCHOPPIN_S1_2_S2" und "s_WOODCHOPPIN_S2" umbenennen?
    Nein.
    S0_2_S1
    S1
    S1_2_S0
    bilden eine "Einheit".
    Das ist der Übergang von S0 zu S1, S1 als loop und dann der Übergang von S1 zu S0.
    Ich empfehle dir diesen thread
    https://forum.worldofplayers.de/foru...obsi-Animation
    von Dalai-Zoll, da wird der ganze Mob Animationskram recht ausführlich erklärt.

    Ich gehe davon aus das du möchtest das der Spieler das Mob benutzen können soll, auch wenn er gar keine Axt im inventar hat.
    Deine jetzige Variante mit skriptseitigem Erstellen und Entfernen der Axt ist da ein eher seltsamer Ansatz. Wäre wahrscheinlich besser, die Axt in der Animation mit DEF_CREATE_ITEM zu erstellen und später mit DEF_DESTROY_ITEM wieder zu entfernen.
    Geändert von Cryp18Struct (10.01.2019 um 16:59 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    OdysseeModTeam Avatar von blackpirate
    Registriert seit
    Jan 2008
    Ort
    Jharkendar
    Beiträge
    20.016
     
    blackpirate ist offline
    Zitat Zitat von Cryp18Struct Beitrag anzeigen
    Nein.
    S0_2_S1
    S1
    S1_2_S0
    bilden eine "Einheit".
    Das ist der Übergang von S0 zu S1, S1 als loop und dann der Übergang von S1 zu S0.
    Ich empfehle dir diesen thread
    https://forum.worldofplayers.de/foru...obsi-Animation
    von Dalai-Zoll, da wird der ganze Mob Animationskram recht ausführlich erklärt.

    Ich gehe davon aus das du möchtest das der Spieler das Mob benutzen können soll, auch wenn er gar keine Axt im inventar hat.
    Deine jetzige Variante mit skriptseitigem Erstellen und Entfernen der Axt ist da ein eher seltsamer Ansatz. Wäre wahrscheinlich besser, die Axt in der Animation mit DEF_CREATE_ITEM zu erstellen und später mit DEF_DESTROY_ITEM wieder zu entfernen.
    Danke. Das sehe ich mir an.

    Nein, der Spieler soll das Mob nur mit einer Axt benutzen können. Da aber beim Beenden über "ENDE" seltsamerweise ein weitere Axt eingefügt wird, wurde hier das Entfernen des überflüssigen Item eingefügt.

    Der Krieg gegen die Orks schien verloren, - da machte sich eine Gruppe von Paladinen auf die Welt zu retten:
    ODYSSEE - IM AUFTRAG DES KÖNIGS



  6. Beiträge anzeigen #6 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von blackpirate Beitrag anzeigen
    Nein, der Spieler soll das Mob nur mit einer Axt benutzen können. Da aber beim Beenden über "ENDE" seltsamerweise ein weitere Axt eingefügt wird, wurde hier das Entfernen des überflüssigen Item eingefügt.
    Wozu ist dann das hier gedacht?
    Code:
    FUNC VOID HOLZHACKEN_S1 ()
     {
        [...]
         if (Npc_HasItems(hero,ItMw_1H_Axe_WoodChoppin) == 0)
         {
             CreateInvItems(hero,ItMw_1H_Axe_WoodChoppin,1); 
         };
    
     };
    Ich dachte das wäre dein (fehlerhafter) Versuch das mob auch ohne Axt benutzbar zu machen.

    Wenn das nicht der Plan ist, kannst du den Teil auch einfach löschen. Dann sollte auch keine Axt mehr auf mysteriöse Weise im Inventar landen.
    Hintergrund:
    Falls als useWithItem die Axt eingetragen ist und "DEF_INSERT_ITEM" in der Animation benutzt wird und der Spieler genau 1 Axt im inventar hat, passiert bei Mob Benutzung folgendes:
    Axt wird aus hero inventar entfernt und in die Hand als slotitem eingefügt.
    später(in HOLZHACKEN_S1()) gibt die Abfrage Npc_HasItems(hero,ItMw_1H_Axe_WoodChoppin) dann 0 zurück(weil die Axt nicht mehr im inventar ist, sondern als slotitem in der Hand).
    Geändert von Cryp18Struct (10.01.2019 um 18:19 Uhr)

  7. Beiträge anzeigen #7 Zitieren
    OdysseeModTeam Avatar von blackpirate
    Registriert seit
    Jan 2008
    Ort
    Jharkendar
    Beiträge
    20.016
     
    blackpirate ist offline
    Ja, der Eintrag ist falsch. Aber jetzt benötige ich das Script sowieso nicht mehr, da mich dein Hinweis auf Dalai Zoll auf einen anderen Gedanken gebracht hat. Es fiel mir ein, dass er das Brunnenscript geschrieben hat. Das habe ich jetzt für das Holzhacken umgeschrieben mit dem Resultat, dass die Animation jetzt auch nach dem Erstellen der Items weiterhin ausgeführt wird.


    Vielen Dank für eure Hilfe.

    Der Krieg gegen die Orks schien verloren, - da machte sich eine Gruppe von Paladinen auf die Welt zu retten:
    ODYSSEE - IM AUFTRAG DES KÖNIGS



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