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 4 von 4
  1. Beiträge anzeigen #1 Zitieren
    Abenteurer Avatar von Senlax
    Registriert seit
    Jan 2021
    Ort
    HH
    Beiträge
    92
     
    Senlax ist offline

    G1 - Bogen und Armbrust-Dmg erhöhen

    Hallo

    Derzeit arbeite ich daran, weil Bögen & Armbrüste ja wenig in G1 oder sogar in G2 genutzt werden,
    diese zu pushen. Allerdings möchte ich die Waffen nicht von Beginn an so stark machen.
    Ich nehme z.B. mal den Orkhetzer bei mir, der einen max. Dmg von 148 hat.

    Das klingt recht viel - aber wird auch benötigt - da meinen Monster einen ziemlich hohen Rüstungswert haben,
    dieser allerdings variieren kann. Aber darum geht es derzeit nicht.

    Ich kann ja z.B. Attribute, ob Stärke, Geschick, HP & Mana mit ChangeAttribute verändern und diese bleiben
    auch dauerhaft, selbst wenn ich das Spiel speichere.

    Wenn ich aber nun einer Waffe sagen - Damage += 5, wird der Schaden zwar um 5Punkte erhöht,
    aber das bleibt nur so lange, wie ich das aktive Spiel spiele UND es wirkt sich auch auf andere Speicherstände aus.

    Somit ist es global und temporär. Das möchte ich gerne vermeiden.

    So sieht derzeit mein Bogen aus:

    Spoiler:(zum lesen bitte Text markieren)

    Code:
    //********** Orkhetzer **********
    const string Name_Bow_War_02 = "Orkhetzer";
    const int Dmg_Bow_War_02 = 148;
    const int Dex_Needed_Bow_War_02 = 114;
    
    
    instance ItRw_Bow_War_02(C_Item)
    {
        name = Name_Bow_War_02;
        mainflag = ITEM_KAT_FF;
        flags = ITEM_BOW | ITEM_MULTI;
        material = MAT_WOOD;
        value = Value_Orkhetzer_Normal;
        damageTotal = Dmg_Bow_War_02;
        damagetype = DAM_POINT;
        munition = ItAmArrow;
        cond_atr[2] = ATR_DEXTERITY;
        cond_value[2] = Dex_Needed_Bow_War_02;
        visual = "ItRw_Bow_War_02.mms";
        description = name;
        text[2] = NAME_Damage;
        count[2] = damageTotal;
        text[3] = NAME_Dex_needed;
        count[3] = cond_value[2];
        text[5] = NAME_Value;
        count[5] = value;
    };


    Der Schaden soll erhöht werden, wenn ich ein Amulett anlege.
    Das sieht derzeit so aus:

    Spoiler:(zum lesen bitte Text markieren)

    Code:
    instance ItAm_Ranged(C_Item)
    {
        name = NAME_Amulett;
        mainflag = ITEM_KAT_MAGIC;
        flags = ITEM_SET;
        value = Value_ItAm_Ranged;
        visual = "ItAm_Strg_01.3ds";
        visual_skin = 0;
        material = MAT_METAL;
        on_equip = Equip_Bow_Bonus_Dmg;
        on_unequip = Unequip_Bow_Bonus_Dmg;
        description = "Amulett der Fernkämpfer";
        text[1] = "Lebensenergie-Bonus: ";
        count[1] = 40;
        text[2] = "Geschicklichkeit + ";
        count[2] = 10;
        text[3] = "Schutz vor Waffen & Pfeilen: ";
        count[3] = 10;
        text[4] = "Schutz vor Feuer & Magie: ";
        count[4] = 10;
        text[5] = NAME_Value;
        count[5] = value;
    };
    
    func void Equip_Bow_Bonus_Dmg()
    {
        Dmg_Bow_War_02 += 5;
    };
    
    func void Unequip_Bow_Bonus_Dmg()
    {
        Dmg_Bow_War_02 -= 5;
    };


    Wie gesagt, diese Methode funktioniert leider nur für das aktive Spiel / Spiele,
    aber es ist eben nur temporär und verschwunden nach einem Neustart des Spiels.

    Achja, wichtig zu erwähnen ist auch, wenn ich das Amulett so angelegt lasse, speicher, Spiel neu starte,
    wird das Spiel das Amulett "ablegen", was ja nicht der Fall ist. Sprich der Bogen verliert automatisch 5 Punkte,
    sofern ich das Amulett wirklich ablege.

    Was kann ich nun machen, damit der Schaden dauerhaft bleibt, wenn ich speichere, aber es
    auch wieder richtig neu berechnet wird, wenn ich das Spiel neu starte und die dazu gehörige Savegame lade?
    Der Senlax war's

    ein Modder-Krüppel schlecht hin

  2. Beiträge anzeigen #2 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Den Ansatz an der Waffe selbst Veränderungen vorzunehmen, halte ich für schlecht.
    Du könntest da natürlich irgendwas basteln das im Hintergrund eine Schleife läuft die schaut welche Waffe der hero equipped hat und dann daran herum basteln, aber es gibt andere Ansätze die wahrscheinlich mehr Sinn machen.

    Beispielsweise diesen hook aus GFA:
    https://github.com/szapp/GothicFreeA...hooting.d#L150
    Du könntest die gleiche Stelle hooken und dort dem Projektil mehr Schaden geben wenn das Amulett ausgerüstet ist (also in den onEquip/onUnEquip Funktion nur merken ob das Amulett zurzeit angelegt ist).
    (Machen wir in Dirty Swamp auch so um Pfeilkrams zu manipulieren)

    Oder alternativ der Schadensberechnung hook von Lehona, da könnte man im Nachhinein den Schaden neu berechnen bei Treffer (halte ich aber für die schlechtere Lösung).
    Geändert von Cryp18Struct (07.05.2021 um 14:38 Uhr)

  3. Beiträge anzeigen #3 Zitieren
    Abenteurer Avatar von Senlax
    Registriert seit
    Jan 2021
    Ort
    HH
    Beiträge
    92
     
    Senlax ist offline
    Guter Lösungvorschlag
    Danke

    Aber mal so als Frage,
    wieso hälst du es für schlecht den Schaden der Waffe direkt zu ändern?
    Abgesehen davon, dass man, wie du schon sagtest, im Hintergrund was laufen haben musst - dass somit den Schaden etc. überprüft, bzw. korrigiert.
    Der Senlax war's

    ein Modder-Krüppel schlecht hin

  4. Beiträge anzeigen #4 Zitieren
    Knight
    Registriert seit
    Aug 2009
    Ort
    Hessen
    Beiträge
    1.487
     
    Cryp18Struct ist offline
    Zitat Zitat von Senlax Beitrag anzeigen
    wieso hälst du es für schlecht den Schaden der Waffe direkt zu ändern?
    Abgesehen davon, dass man, wie du schon sagtest, im Hintergrund was laufen haben musst - dass somit den Schaden etc. überprüft, bzw. korrigiert.
    Naja, das sollte schon Grund genug sein meine ich .

    Und was anderes:
    Auch ist dein Lösungsansatz etwas seltsam.
    Was du vermutlich willst, ist ein Amulett das den Schaden mit jeglichem beliebigem Bogen/Armbrust erhöht. Eine spezifische Instanz wie "ItRw_Bow_War_02" zu manipulieren ist dann nicht ausreichend

    Aber es gibt auch das grundsätzliche Problem das die Waffe die der hero im Moment der Schussabgabe in der Hand hat, nicht zwangsläufig die gleiche Waffe ist die er in der Hand hat wenn das Projektil trifft.

    Es ist möglich ein Projektil mit Fernkampfwaffe zu verschießen und dann auf Nahkampfwafffe oder Magie zu wechseln (oder sogar auf eine andere Fernkampfwaffe).
    (Das ist auch das klassische Problem in g1, das nicht klar ist welcher Zauber verschossen wurde verglichen mit dem Zauber den der hero in der Hand hat wenn das Zauberprojektil den Gegner trifft)
    Erst in g2 wurde die entsprechende Funktion für Zauber(Npc_GetLastHitSpellID?) hinzugefügt.

    Für diesen spezifischen Fall mag das nicht wichtig sein, aber je mehr du krams manipulieren willst der mit Projektilen zu tun hast, desto öfter wirst du da auf Probleme stossen wenn du die zurzeit ausgerüstete Waffe betrachtest.
    Beispiel: In Dirty Swamp gibt es Explosionspfeile. Wenn ein Explosionspfeil das Weltmesh oder einen NPC trifft soll es eine Explosion geben.
    Wenn man da nur die CurrentlyEuippedWeapon.munition betrachten würde, könnte man folgendes tun:
    Normalen Pfeil verschießen und dann (während der normale Pfeil noch durch die Luft fliegt) Munition wechseln auf Explosionspfeil.

    Wenn man dann bei Treffer abfragt welche CurrentlyEuippedWeapon.munition zurzeit verwendet wird, könnte da eine Inkonsistenz entstehen (verschossen wurde ein normaler Pfeil, aber wenn der Treffer passiert ist ein Explosionspfeil als CurrentlyEuippedWeapon.munition ausgewählt)

    Bei deinem Beispiel mit Amulett ist es extrem unwahrscheinlich das jemand einen Pfeil verschießt ohne das Amulett angelegt zu haben und dann (während der Pfeil durch die Luft fliegt) das Inventar öffnet und das Amulett anlegt.
    Aber dennoch denke ich das du dir langfristig viel Arbeit und Seltsamkeiten ersparst wenn du mit dem hook direkt das verschossene Projektil veränderst.

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