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 8 von 8
  1. Beiträge anzeigen #1 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline

    Skript-Fragen

    Hallo, Leute,

    ich habe vor ein paar Tagen mit modden angefangen (vielen Dank an Fisk für die Tutorial-Videos). Dabei habe ich mir jeden Tag ein Projekt vorgenommen und bis jetzt auch alles hinbekommen. Leider bin ich jetzt aber ratlos und hoffe auf Hilfe durch einen erfahrenen Scripter. Hoffe, das ist der richtige Thread für meine Frage.
    Ich habe keine Vorkenntnisse im Scripten und habe mir viele Tutoriale durchgelesen und Videos angesehen.
    Seit gestern versuche ich mich an einem Kill-Counter und habe Probleme damit.

    Hier ist mal meine B_Counter.d
    Code:
    // *************************************
    // B-Counter
    // Kill-Counter
    // zählt die Kills für Learning by doing
    // *************************************
    
    func void B_Counter ()                                    
    {
        kill_counter += 1;                                    //Plus einen Kill
        if kill_counter == 5                                //Wenn der Counter die Zahl 5 erreicht hat, DANN:
        {
          var int Zufall4;
          Zufall4 = Hlp_Random (100);                        //Eine Zufallszahl von 0-99 wird berechnet
          if Zufall4 <= 20                                  //Wenn diese Zufallszahl unter 20 liegt    oder gleich 20 ist
            {
                hero.attribute[ATR_HITPOINTS_MAX] += 5;        //HP um 5 erhöhen
                Print (PRINT_STEIGERUNG);                    //Dem Spieler bescheid geben, dass die HP erhöht wurde
                kill_counter = 0;                            //Resetten, da später wieder der 5. Kill gezählt werden muss
            }
                
            else if Zufall4 <= 40
            {
                hero.attribute[ATR_MANA_MAX] += 5;
                Print (PRINT_STEIGERUNG1);
                kill_counter = 0;
            }        
                
            else if Zufall4 <= 60
            {
                hero.attribute[ATR_DEXTERITY] += 1;
                Print (PRINT_STEIGERUNG2);
                kill_counter = 0;
            }        
                
            else if Zufall4 <= 80
            {
                hero.attribute[ATR_STRENGTH] += 1;
                Print (PRINT_STEIGERUNG3);
                kill_counter = 0;
            }        
                
            else if Zufall4 <= 99
            {
                var C_Item MYWaffe;
                MYWaffe = Npc_GetReadiedWeapon (hero);
                 if Npc_HasReadiedWeapon (hero)
                 {
                     if C_ItmHasFlag(MYWaffe, ITEM_SWD)
                     {
                         hero.HitChance[NPC_TALENT_1H] += 1;
                        Print (PRINT_STEIGERUNG4);
                        kill_counter = 0;
                     }                 
                          
                     else if C_ItmHasFlag(MYWaffe, ITEM_2HD_SWD)
                     {
                         hero.HitChance[NPC_TALENT_2H] += 1;
                        Print (PRINT_STEIGERUNG5);
                        kill_counter = 0;
                     }                
                          
                     else if C_ItmHasFlag(MYWaffe, ITEM_BOW)
                     {
                         hero.HitChance[NPC_TALENT_BOW] += 1;
                        Print (PRINT_STEIGERUNG6);
                        kill_counter = 0;
                     }                 
                          
                     else if C_ItmHasFlag(MYWaffe, ITEM_CROSSBOW)
                     {
                         hero.HitChance[NPC_TALENT_CROSSBOW] += 1;
                        Print (PRINT_STEIGERUNG7);
                        kill_counter = 0;
                     }                 
                          
                    else
                     {
                         hero.attribute[ATR_REGENERATEHP] | hero.attribute[ATR_REGENERATEMANA] += 1;
                        Print (PRINT_STEIGERUNG8);
                        kill_counter = 0;
                     };
                 
                 };
            
            };
                                      
        };
    
    };
    vielleicht kann ja mal jemand schauen, ob das so machbar ist.

    In die Story_Globals.d hab ich oben das eingetragen.
    Code:
    // *************************
    // Globalvariablen für Story
    // *************************
    
    // ------ Kill Counter ------------
    var int kill_counter = 0;
    Einträge in die ZS_Dead.d, Text.d und Gothic.src habe ich auch gemacht, wie im Tutorial in der Editing-Wiki beschrieben.

    Beim Parsen über den Gothic-Starter kommt folgende Fehlermeldung:
    Code:
    [i] 00:14 Info:  5 U:    PAR: CONTENT\STORY\STORY_GLOBALS.D : Parse... .... <zError.cpp,#465>
    [F] 00:14 Fatal:-1 U:    PAR: Expected ';' ( line 6 ) .... <zParser.cpp,#599>
    Leider ist mir völlig schleierhaft, wo in der Zeile in der Global_Story.d ein Semikolon fehlen soll(der Eintrag ist Zeile 6).

    Beim Parsen mit dem Sourcer kann dieser die Gothic.src nicht finden.

    Wenn ich den Gothic-Starter mit "alles konvertieren" starte kommt dieser Fehler:


    "D:zModel(zCModelAni::LoadMDM)

    :the file's node-hierarchy is incompatible to 'meshAndTree';applied mesh and mds-'meshAndTree' entry need to have exactly the same hierarchy => adjust them"


    Also ich hab in meinem Gothic-Verzeichnis nichts mit einem der Namen "zModel(zCModelAni::LoadMDM)" gefunden. Falls mir jemand sagen kann, was da los ist, wäre das toll.


    Eine letzte Frage: ich hab einen neuen Zauber erstellt, der auch ganz gut funktioniert.. Basis war Feuersturm.. hab ein paar Effekte getauscht(von SuckEnergy und Skull)..
    ich wollte das der ZS_SuckEnergy auf alle getroffenen Gegner wirkt.. funktioniert leider nicht. Ist das überhaupt machbar und falls ja wären ein paar Tipps willkommen.



    vielen Dank schonmal im Voraus!

  2. Beiträge anzeigen #2 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.246
     
    Milky-Way ist offline
    Willkommen im Editing

    Ich habe mal ein eigenes Thema draus gemacht, so ist das übersichtlicher und führt nicht zu Verwechslungen.


    Die Fehlermeldung beim Parsen:
    Du kannst einer Variablen nur innerhalb von Funktionen einen Wert zuweisen. Die Story_Globals.d wird nur dafür verwendet, Variablen zu definieren, um sie woanders verwenden zu können. In der Datei selbst darfst du außer
    Code:
    var int ...;
    nichts machen.
    Für dich ist das aber gar kein Problem. Wenn du eine neue Variable erstellst, dann hat sie ohnehin den Wert 0, bis zu ihren Wert selbst änderst.

    Kurze Zwischenfrage: Hast du Programmierkenntnisse in anderen Sprachen?


    Den GothicSourcer braucht man zum Parsen eigentlich nicht. Wenn du dennoch Hilfe zu deinem Fehler haben möchtest, wäre es noch gut zu wissen, ob es sich um den GothicSourcer 2 oder 3 handelt, die sind sehr unterschiedlich. Außerdem: Was genau hast du gemacht?


    Im GothicStarter bitte konsequent NICHT "Alles konvertieren" auswählen. Das hat keine für dich nützliche Funktion. Alles was du an Dateien brauchst / brauchen wirst, wird dir das Spiel auch ohne diese Option spätestens bei der ersten Verwendung im Spiel konvertieren. (Mit kleinen Einschränkungen, die man aber komfortabel austricksen kann. Wenn du mal Probleme mit eigenen Texturen oder Animationen hast, melde dich einfach.)
    Bei deiner Fehlermeldung scheint geht es um Animationsdateien, die eine bestimmte Struktur haben sollen. Das hat mit deiner Arbeit aber nichts zu tun und braucht dich nicht zu stören. Vermutlich hast du die Animationen nicht einmal entpackt oder gar dekompiliert. (Da gibt es am Anfang gar keinen Grund zu.) Die Fehlermeldung sollte ohne den Haken bei "Alles konvertieren" nicht mehr kommen. Falls doch, mach bitte einmal einen Screenshot vom GothicStarter.


    Zauber sind oft eine etwas knifflige Geschichte und man kommt nicht an alle "Einstellungen" ohne weiteres ran.
    Ich persönlich kenne die einzelnen Zauber nicht gut genug. Was genau soll bei deinem neuen Zauber alles passieren?

  3. Beiträge anzeigen #3 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Hallo, Milky-Way,

    erst einmal danke für die schnelle Antwort und für's Verschieben.

    Die Fehlermeldung beim Parsen:
    Du kannst einer Variablen nur innerhalb von Funktionen einen Wert zuweisen. Die Story_Globals.d wird nur dafür verwendet, Variablen zu definieren, um sie woanders verwenden zu können. In der Datei selbst darfst du außer
    Code:
    var int ...;
    nichts machen.
    Für dich ist das aber gar kein Problem. Wenn du eine neue Variable erstellst, dann hat sie ohnehin den Wert 0, bis zu ihren Wert selbst änderst.

    Kurze Zwischenfrage: Hast du Programmierkenntnisse in anderen Sprachen?
    Heiß das, in die Story_Globals.d muss der Eintrag lauten; var int kill_counter; -> hab ich nämlich probiert, weil irgendwo mal gelesen, hat aber einen Fehler produziert.
    So wie es jetzt ist, hab ich es aus der Wiki übernommen.

    Also ich hab vor ca. 25 Jahren mal ein bisschen Basic gelernt, ist aber nicht erwähnenswert und ich hab auch mal an NeverWinterNights gescriptet. Da waren aber gute Tools dabei, ist also hier auch nicht wirklich hilfreich.

    Ich nutze Sourcer 2.4 deutsch: war auch nur wieder ein Versuch, weil ich gelesen hab, dass der ausführlichere Fehlermeldungen ausgibt. Sonst parse ich immer mit dem G-Starter. Das mit dem "alles konvertieren" hab ich auch nur gelesen, glaub als ich einen Giftschleifen-Trigger gescriptet hab. Soll angeblich nötig sein, wenn man etwas in die Gothic.src einträgt. Wenn dem nicht so ist, dann bin ich wirklich nicht traurig darüber und ja, die Fehlermeldung mit den Mesh-Verzeichnissen kommt nicht, wenn ich ohne diese Einstellung parse.

    Zum Zauber nochmal: hab den Effekt vom Ausrüsten und casten von SuckEnergie genommen, den Spread von Skull und den Leech(Bloodfly) wieder von SuckEnergy -> hab den Zauber auch überall eingetragen, wo nötig(Tutotials haben wieder geholfen).

    Der Zauber verhält sich prizipiell wie die Vorlage Feuersturm(klein) nur mit roten Wolken statt Feuereffekten, Schaden wie bei SuckEnergy(vermutlich physisch). Bei Kollision versprüht er eine rote Wolke, die allen getroffenen Gegnern schadet und er saugt auch Leben, aber nur beim Hauptziel. Hab viel rumprobiert, aber habe es nicht geschafft den Leech auf mehrere Gegner zu verteilen. Dachte, dass das geht, wiel Feuersturm ja den Brandschaden verteilt, welchen ich gegen den Leech getauscht hab.

    War wirklich nicht einfach, weil so viele Dateien zusammenarbeiten.

    Kurz nochmal zurück zum Hauptproblem: dass weglassen der "=0" in der Story-Globals.d produziert nur neue Fehler. Hab hier mal den Link zum Tutorial:http://wiki.worldofgothic.de/Daedalus/nuetzliches#q6

    Irgendwo hab ich auch gelesen, dass es so bei jemandem funktioniert hat. Trotzdem danke für deine Hilfe, vielleich hast du ja noch eine Idee oder jemand anderes, was da faul sein könnte.

    Ach ja, würde das Script denn so laufen?

    Und nochmal Danke im Voraus!

  4. Beiträge anzeigen #4 Zitieren
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.246
     
    Milky-Way ist offline
    Bitte bei Fehlern IMMER auch die Fehlermeldung mit dazu schreiben.

    Korrekt, in die Story_Globals.d kommt einfach nur
    Code:
    var int kill_counter;
    Bitte die Fehlermeldung zeigen / schreiben, die dann kommt.

    Wenn du im GothicStarter_mod den Schieberegler ganz nach rechts schiebst, dann solltest du eigentlich schon im zSpy alle nützlichen Infos sehen. GothicSourcer 2.4 hat hauptsächlich den Vorteil schneller zu sein, funktioniert aber nicht ohne weiteres mit Ikarus. (Wenn du nicht weißt, was Ikarus ist, ist es für dich kein Problem.) Hier eine Anleitung, wie es geht:
    http://forum.worldofplayers.de/forum...1#post10087008

    Zum restlichen Counter-Skript: grobe Fehler sind mir nicht aufgefallen, allerdings ist es sinnvoller, wenn du es einfach selber testest (sobald es funktioniert). Kleinigkeiten:
    Hlp_Random(100) gibt dir Zahlen zwischen 0 und 99. Der erste Fall in deiner Abfrage
    Code:
    if Zufall4 <= 20
    deckt also 21 mögliche Zahlen ab, die darauf folgenden 20 und der letzte Fall 19. Außerdem:
    Code:
    else if Zufall4 <= 99
    soll noch die restlichen Fälle abdecken. Da Zufall4 aber immer <= 99 ist, brauchst du das dort gar nicht und könntest einfach nur else verwenden.

    Die Regenerationsattribute waren, glaube ich, nicht sonderlich intuitiv. Wenn ich mich richtig erinnere, gibt der Wert an, alle wie viel Sekunden Leben / Mana um 1 erhöht wird, wobei 0 nie bedeutet. Dadurch würde beim erstmaligen verbessern Regeneration aktiviert, bei jedem nachvollgenden Verbessern die Regeneration jedoch verlangsamt. (Dann nur noch alle 2,3,... Sekunden ein Punkt zurück)
    Mir ist nicht klar, wie die Zeile
    Code:
    hero.attribute[ATR_REGENERATEHP] | hero.attribute[ATR_REGENERATEMANA] += 1;
    vom Spiel interpretiert wird. Ich würde beide Statements einzeln schreiben.

  5. Beiträge anzeigen #5 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Nochmals Danke,

    die neue Fehlermeldung wusste ich vorhin nicht mehr. Hab inzwischen nochmal geparst:

    "Undefined Function: C_itmhasflag"

    Anscheinend muss man die Funktion noch irgendwo definieren, wenn ja, kannst du mir sagen wo? Ich hoffe das ist keine Ikarus-Funktion. Also ich habe mir gleich zu Anfang einen Überblick über nützliche Software verschafft, aber an Ikarus trau ich mich noch nicht ran. Will erst mal die Grundlagen lernen.

    Ich nutze Spacer, Vdfs-tool, Sourcer, Stampfer, Redefix, Nsis(hab bereits einen funktionierenden Patch mit Installer für die Rückkehr hinbekommen). Damit will ich nur sagen, das ich halbwegs mit Software umgehen kann. Fragen stelle ich erst, wenn ich nicht weiterkomme, wie bei diesem Script. Da fehlt mir einfach das Wissen über die Gothic-spezifischen Funktionen und wie und wo welche Dateien zusammenarbeiten.

    Zspy ist bei mir schon auf 10 und die beiden Regenerations-Attribute hatte ich auch schonmal einzeln geschrieben, war halt ein versuch bei der Fehlersuche.

    Übrigens dient alles was ich im Moment scripte nur Übungszwecken, ich wollte nur möglichst viele Attribute abdecken, um zu lernen.
    Balancing oder Sinn spielt erstmal keine Rolle, deshalb auch nur 5-Gegner-Count um schnell zu sehen ob es klappt.

    Werde deine Vorschläge dann mal unsetzen, damit das Script noch etwas sauberer wird.

    THX a lot

  6. Beiträge anzeigen #6 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Außerdem funktioniert die Manaregeneration nur, wenn der Held auch Leben regeneriert (oder irgendein anderer, bescheuerter Fehler). Insofern lohnt es sich wesentlich mehr, wenn du dir selber eine Schleife bastelt (entweder über ein oCTriggerScript im Spacer (gibts sicherlich ein Tutorial zu im Wiki) oder LeGo (s. Signatur)) und dort dann die Lebenspunkte/das Mana auffüllst.

    Edit: Ja, C_ItmHasFlag() gibt es so in Gothic nicht, aber die Funktion ist denkbar einfach:

    Code:
    func int C_ItmHasFlag(var c_item itm, var int f) {
        return itm.mainflag & f;
    };
    Eventuell ist es itm.flag anstatt itm.mainflag

  7. Beiträge anzeigen #7 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Hi, Lehona,

    hatte so oder so irgendwann vor mal eine Regeneration ala Minimod-Balance auszuprobieren, aber immer Schritt für Schritt.

    Danke für die Item-Flag-Funktion, werde morgen austesten, ob ich es hinbekomme. Wie weiter oben erwähnt -> blutiger Anfänger. Sehr schön, hab ich wieder ein Ziel für morgen.

    Für LeGo fühl ich mich auch noch nicht bereit, hab mich aber im Thread schonmal etwas eingelesen. Modde erst seit ca. einer Woche an Gothic rum.

    Kleine Testinsel, Npc, WP usw. immer jeden Tag etwas, bis es funktioniert.

    besten Dank

  8. Beiträge anzeigen #8 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Hallo, Leute,

    hab es nach zwei arbeitsreichen Tagen endlich geschafft, dass der Counter vernünftig arbeitet. Ich muss leider zugeben, dass ich doch enorme Schwierigkeiten hatte, das Script vernünftig zum laufen zu bringen.

    Zuerst wurde die Sektion "Hitchance" immer übersprungen, dann hat sich das Script immer aufgehangen, wenn ich Magie benutzt habe oder Gegner durch Zustände gestorben sind(Freeze, Burn, Gift über Triggerschleife) oder wenn ich ohne Waffe angegriffen hab.

    Ich wollte halt alle Möglichkeiten abdecken, die im Spiel vorkommen - hoffe ich hab nichts vergessen.

    Es waren noch einige Änderungen in verschiedenen Dateien nötig, aber nun läuft es.

    Vielen Dank nochmal für die Hinweise, die mich auf den rechten Weg gebracht haben.


    LG TheBigLeBRUCEky

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