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
    Hero Avatar von lali
    Registriert seit
    Feb 2016
    Beiträge
    5.471
     
    lali ist offline

    Ein Item soll zwei Attribute als Condition haben

    Hey. Ich will, dass ein Item sowohl Stärke als auch Geschicklichkeit voraussetzt. Wie kann ich das machen?
    Ich nehme nicht an, dass es funktioniert, zwei Attribute hinter "cond_atr[2]" zu schreiben; dasselbe müsste man dann ja bei "cond_value[2]" tun, und wie soll Gothic es dann zuordnen? Auch könnte ich dann die benötigte Stärke und das benötigte Geschick nicht anzeigen lassen mit "count[3] = cond_value[2];", weil ich ja dann zwei Sachen unter Value stehen habe? Wie würdet ihr das machen?

    Phoenix Dev | Website | Discord

  2. #2
    Falugify
    Gast
     
    Code:
    	cond_atr[0]   		=	ATR_DEXTERITY;
    	cond_value[0]  		=	Wert;
    	cond_atr[1]   		=	ATR_STRENGTH;
    	cond_value[1]  		=	Wert;

  3. Beiträge anzeigen #3
    Hero Avatar von lali
    Registriert seit
    Feb 2016
    Beiträge
    5.471
     
    lali ist offline
    Vielen Dank Falugify. Funktioniert.
    Dass es etwas mit der Zahl dahinter zu tun haben könnte war auch meine intuitive Vermutung, aber dann bin ich dem nicht weiter nachgegangen, weil ich gesehen habe, dass da bei jeder Waffe immer [2] steht, deshalb nahm ich an, das müsse so sein. Weißt du wieso?
    Phoenix Dev | Website | Discord

  4. Beiträge anzeigen #4
    now also in your universe  Avatar von Milky-Way
    Registriert seit
    Jun 2007
    Beiträge
    15.204
     
    Milky-Way ist offline
    Das ist mehr oder weniger so wie eine Tabelle, die Zahl gibt die Zeile an. Der Einheitlichkeit halber ist in Gothic typischerweise immer der Wert in einer bestimmten Zeile, der Schaden in einer bestimmten anderen Zeile, etc

  5. Beiträge anzeigen #5
    Abenteurer
    Registriert seit
    Aug 2018
    Beiträge
    52
     
    Feiger Scavenger ist offline
    Grüße
    Kann man auch einen "oder" wert machen ?
    Das man entweder bsp. 12 Dex braucht oder 20 Str um das Item anzulegen ?


    Mfg.

  6. Beiträge anzeigen #6
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Zitat Zitat von Feiger Scavenger Beitrag anzeigen
    Grüße
    Kann man auch einen "oder" wert machen ?
    Das man entweder bsp. 12 Dex braucht oder 20 Str um das Item anzulegen ?


    Mfg.
    Die Werte werden immer verundet, von daher ist das nicht auf normalem Weg möglich. Du könntest soetwas aber in der onEquip-Methode definieren und dir eine Logik schreiben, die die Waffe direkt wieder ablegt, sollte einer deiner Wert nicht passen. Das könnte ungefähr wie folgt aussehen. Ich habe dafür Ikarus gebraucht, das wäre also die Voraussetzung. Auch wird die Waffe in dieser Lösung nicht abgelegt, wenn man Stärke/Geschick durch Ringe ausziehen oder so verlieren sollte und dann eigentlich nicht mehr die Voraussetzungen der Waffe erfüllt.

    Code:
    // Die relevanten Stellen im Item-Skript
    instance ItWr_DeineWaffe(C_Item) //in einem von Halvors Fischen
    {
    	[...]
    	on_equip	= ItWr_DeineWaffe_OnEquip;
    	TEXT[3] 	= NAME_Dex_needed;				
    	COUNT[3]	= 30;
    	TEXT[4] 	= NAME_Str_needed;				
    	COUNT[4]	= 20;
    	[...]
    };
    
    // Die on_equip Methode der einen Waffe
    func void ItWr_DeineWaffe_OnEquip() {
    	checkStrAndDex(20, 30);
    };
    
    // Legt die zuletzt angelegte Waffe wieder ab
    var int lastEquippedWeapon;
    func void unequipLastEquippedWeaponDelayed() {
        oCNpc_UnequipItem(hero, lastEquippedWeapon);
    };
    
    // 
    func void unequipLastEquippedWeapon() {
    	var oCNpc her; her = Hlp_GetNpc(hero);
    	lastEquippedWeapon = List_GetS(her.inventory2_oCItemContainer_contents, her.inventory2_oCItemContainer_selectedItem + 2);
    
    	// Entferne die Waffe so schnell wie möglich wieder. Einfaches aufrufen der Funktion klappt hier allerdings nicht, deshalb über Umweg.
    	FF_ApplyOnceExt_GTOnly(unequipLastEquippedWeaponDelayed, 0, 1);
    };
    
    // Eine generelle Methode, mit der du dein Vorhaben in die Tat umsetzen kannst. Die kannst du dann für alle Waffen wiederverwenden, bei denen du diese Logik verwenden willst.
    func void checkStrAndDex(var int str, var int dex) {
    	if (hero.attribute[ATR_DEXTERITY] < dex && hero.attribute[ATR_STRENGTH] < str) {
    		var string strOrDexWarning;
    		strOrDexWarning = "Du benötigtst entweder ";
    		strOrDexWarning = ConcatStrings(strOrDexWarning, IntToString(str));
    		strOrDexWarning = ConcatStrings(strOrDexWarning, " Stärke oder ");
    		strOrDexWarning = ConcatStrings(strOrDexWarning, IntToString(dex));
    		strOrDexWarning = ConcatStrings(strOrDexWarning, " Geschick um diese Waffe zu tragen.");
    		print(strOrDexWarning);
    
    		unequipLastEquippedWeapon();
    	};
    };

  7. Beiträge anzeigen #7
    Abenteurer
    Registriert seit
    Aug 2018
    Beiträge
    52
     
    Feiger Scavenger ist offline
    Hi! Danke schon einmal, nur habe ich ein Problem, bekomme es nicht zum Laufen :/

    Zitat Zitat von Draxes Beitrag anzeigen
    Die Werte werden immer verundet, von daher ist das nicht auf normalem Weg möglich. Du könntest soetwas aber in der onEquip-Methode definieren und dir eine Logik schreiben, die die Waffe direkt wieder ablegt, sollte einer deiner Wert nicht passen. Das könnte ungefähr wie folgt aussehen. Ich habe dafür Ikarus gebraucht, das wäre also die Voraussetzung. Auch wird die Waffe in dieser Lösung nicht abgelegt, wenn man Stärke/Geschick durch Ringe ausziehen oder so verlieren sollte und dann eigentlich nicht mehr die Voraussetzungen der Waffe erfüllt.

    Code:
    // Die relevanten Stellen im Item-Skript
    instance ItWr_DeineWaffe(C_Item) //in einem von Halvors Fischen
    {
        [...]
        on_equip    = ItWr_DeineWaffe_OnEquip;
        TEXT[3]     = NAME_Dex_needed;                
        COUNT[3]    = 30;
        TEXT[4]     = NAME_Str_needed;                
        COUNT[4]    = 20;
        [...]
    };
    
    // Die on_equip Methode der einen Waffe
    func void ItWr_DeineWaffe_OnEquip() {
        checkStrAndDex(20, 30);
    };
    
    // Legt die zuletzt angelegte Waffe wieder ab
    var int lastEquippedWeapon;
    func void unequipLastEquippedWeaponDelayed() {
        oCNpc_UnequipItem(hero, lastEquippedWeapon);
    };
    
    // 
    func void unequipLastEquippedWeapon() {
        var oCNpc her; her = Hlp_GetNpc(hero);
        lastEquippedWeapon = List_GetS(her.inventory2_oCItemContainer_contents, her.inventory2_oCItemContainer_selectedItem + 2);
    
        // Entferne die Waffe so schnell wie möglich wieder. Einfaches aufrufen der Funktion klappt hier allerdings nicht, deshalb über Umweg.
        FF_ApplyOnceExt_GTOnly(unequipLastEquippedWeaponDelayed, 0, 1);
    };
    
    // Eine generelle Methode, mit der du dein Vorhaben in die Tat umsetzen kannst. Die kannst du dann für alle Waffen wiederverwenden, bei denen du diese Logik verwenden willst.
    func void checkStrAndDex(var int str, var int dex) {
        if (hero.attribute[ATR_DEXTERITY] < dex && hero.attribute[ATR_STRENGTH] < str) {
            var string strOrDexWarning;
            strOrDexWarning = "Du benötigtst entweder ";
            strOrDexWarning = ConcatStrings(strOrDexWarning, IntToString(str));
            strOrDexWarning = ConcatStrings(strOrDexWarning, " Stärke oder ");
            strOrDexWarning = ConcatStrings(strOrDexWarning, IntToString(dex));
            strOrDexWarning = ConcatStrings(strOrDexWarning, " Geschick um diese Waffe zu tragen.");
            print(strOrDexWarning);
    
            unequipLastEquippedWeapon();
        };
    };
    Habe noch nie mit Ikarus zutun gehabt
    Ikarus habe ich zwar jetzt Installiert, doch bekomme ich die Meldung

    [Bild: fehlerl2wmcx3g.jpg]

    Kannst du mir vllt. sagen wie ich das richtig Anwende, bzw eben wie man es Installiert in dem Sinne ?
    zudem würde ich das gerne auch für Rüstungen machen.
    Mfg.

  8. Beiträge anzeigen #8
    Dragonslayer Avatar von Boromir
    Registriert seit
    Jan 2005
    Ort
    Kaaks
    Beiträge
    4.075
     
    Boromir ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Die Werte werden immer verundet, von daher ist das nicht auf normalem Weg möglich. Du könntest soetwas aber in der onEquip-Methode definieren und dir eine Logik schreiben, die die Waffe direkt wieder ablegt, sollte einer deiner Wert nicht passen. Das könnte ungefähr wie folgt aussehen. Ich habe dafür Ikarus gebraucht, das wäre also die Voraussetzung. Auch wird die Waffe in dieser Lösung nicht abgelegt, wenn man Stärke/Geschick durch Ringe ausziehen oder so verlieren sollte und dann eigentlich nicht mehr die Voraussetzungen der Waffe erfüllt.

    Code:
    // Die relevanten Stellen im Item-Skript
    instance ItWr_DeineWaffe(C_Item) //in einem von Halvors Fischen
    {
    	[...]
    	on_equip	= ItWr_DeineWaffe_OnEquip;
    	TEXT[3] 	= NAME_Dex_needed;				
    	COUNT[3]	= 30;
    	TEXT[4] 	= NAME_Str_needed;				
    	COUNT[4]	= 20;
    	[...]
    };
    
    // Die on_equip Methode der einen Waffe
    func void ItWr_DeineWaffe_OnEquip() {
    	checkStrAndDex(20, 30);
    };
    
    // Legt die zuletzt angelegte Waffe wieder ab
    var int lastEquippedWeapon;
    func void unequipLastEquippedWeaponDelayed() {
        oCNpc_UnequipItem(hero, lastEquippedWeapon);
    };
    
    // 
    func void unequipLastEquippedWeapon() {
    	var oCNpc her; her = Hlp_GetNpc(hero);
    	lastEquippedWeapon = List_GetS(her.inventory2_oCItemContainer_contents, her.inventory2_oCItemContainer_selectedItem + 2);
    
    	// Entferne die Waffe so schnell wie möglich wieder. Einfaches aufrufen der Funktion klappt hier allerdings nicht, deshalb über Umweg.
    	FF_ApplyOnceExt_GTOnly(unequipLastEquippedWeaponDelayed, 0, 1);
    };
    
    // Eine generelle Methode, mit der du dein Vorhaben in die Tat umsetzen kannst. Die kannst du dann für alle Waffen wiederverwenden, bei denen du diese Logik verwenden willst.
    func void checkStrAndDex(var int str, var int dex) {
    	if (hero.attribute[ATR_DEXTERITY] < dex && hero.attribute[ATR_STRENGTH] < str) {
    		var string strOrDexWarning;
    		strOrDexWarning = "Du benötigtst entweder ";
    		strOrDexWarning = ConcatStrings(strOrDexWarning, IntToString(str));
    		strOrDexWarning = ConcatStrings(strOrDexWarning, " Stärke oder ");
    		strOrDexWarning = ConcatStrings(strOrDexWarning, IntToString(dex));
    		strOrDexWarning = ConcatStrings(strOrDexWarning, " Geschick um diese Waffe zu tragen.");
    		print(strOrDexWarning);
    
    		unequipLastEquippedWeapon();
    	};
    };
    Du prüfst hier mit && und in der Beschreibung darunter steht "Du brauchst entweder X Stärke oder X Geschick..:". Müsste man nicht stattdessen || verwenden?

    Geschick < dex UND Stärke < str
    Code:
    if (hero.attribute[ATR_DEXTERITY] < dex && hero.attribute[ATR_STRENGTH] < str) {
    Geschick < dex ODER Stärke < str
    Code:
    if (hero.attribute[ATR_DEXTERITY] < dex || hero.attribute[ATR_STRENGTH] < str) {
    Gruß
    Boromir
    "Du bestimmst unser aller Schicksal, kleiner Mann."

  9. Beiträge anzeigen #9
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Ne, die Abfrage stellt fest, ob der Held weder genug Stärke noch genug Geschicklichkeit hat (und gibt dann ggf. eine Nachricht aus).

  10. Beiträge anzeigen #10
    Dragonslayer Avatar von Boromir
    Registriert seit
    Jan 2005
    Ort
    Kaaks
    Beiträge
    4.075
     
    Boromir ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Ne, die Abfrage stellt fest, ob der Held weder genug Stärke noch genug Geschicklichkeit hat (und gibt dann ggf. eine Nachricht aus).
    Ah, sorry. Macht natürlich sinn erst zu meckern, wenn beides nicht stimmt, da eins ja ausreicht
    "Du bestimmst unser aller Schicksal, kleiner Mann."

  11. Beiträge anzeigen #11
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Zitat Zitat von Feiger Scavenger Beitrag anzeigen
    Hi! Danke schon einmal, nur habe ich ein Problem, bekomme es nicht zum Laufen :/



    Habe noch nie mit Ikarus zutun gehabt
    Ikarus habe ich zwar jetzt Installiert, doch bekomme ich die Meldung


    Kannst du mir vllt. sagen wie ich das richtig Anwende, bzw eben wie man es Installiert in dem Sinne ?
    zudem würde ich das gerne auch für Rüstungen machen.
    Mfg.
    Bzgl. der Installation und Konfigurierung von Ikarus solltest du hoffentlich im Ikarus Thread fündig werden. Zu meiner Beschämung muss ich sagen, dass ich mich nicht erinnern kann, wie das geht und habe gerade keine Zeit nachzuschauen.

    Deine Fehlermeldung bedeutet, dass die Methode checkStrAndDex unbekannt ist. Du musst dafür sorgen, dass diese Methode vor jeder Verwendung geparst wird. Entweder erstellst du eine neue CheckStrAndDex.d Datei, kopierst die drei untersten Funktionen darein und fügst einen Eintrag recht weit oben in der Gothic.src hinzu für diese Datei. Wie ein Eintrag aussieht, kannst du dir bei den anderen Einträgen in der Datei abschauen. Der Eintrag sollte dann auf jeden Fall vor den Item-Skripts stehen, damit die Methode dort bekannt ist.
    Alternativ kannst du die Funktionen auch einfach ganz oben in dein Item-Skript kopieren, das sollte den gleichen Effekt haben.

  12. Beiträge anzeigen #12
    Abenteurer
    Registriert seit
    Aug 2018
    Beiträge
    52
     
    Feiger Scavenger ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Bzgl. der Installation und Konfigurierung von Ikarus solltest du hoffentlich im Ikarus Thread fündig werden. Zu meiner Beschämung muss ich sagen, dass ich mich nicht erinnern kann, wie das geht und habe gerade keine Zeit nachzuschauen.

    Deine Fehlermeldung bedeutet, dass die Methode checkStrAndDex unbekannt ist. Du musst dafür sorgen, dass diese Methode vor jeder Verwendung geparst wird. Entweder erstellst du eine neue CheckStrAndDex.d Datei, kopierst die drei untersten Funktionen darein und fügst einen Eintrag recht weit oben in der Gothic.src hinzu für diese Datei. Wie ein Eintrag aussieht, kannst du dir bei den anderen Einträgen in der Datei abschauen. Der Eintrag sollte dann auf jeden Fall vor den Item-Skripts stehen, damit die Methode dort bekannt ist.
    Alternativ kannst du die Funktionen auch einfach ganz oben in dein Item-Skript kopieren, das sollte den gleichen Effekt haben.
    Habe es nun so gemacht wie du es sagtest, jetzt gibts ein neues Problem beim Parsen Was nun?
    Spoiler:(zum lesen bitte Text markieren)


    Mfg.

  13. Beiträge anzeigen #13
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Zitat Zitat von Feiger Scavenger Beitrag anzeigen
    Habe es nun so gemacht wie du es sagtest, jetzt gibts ein neues Problem beim Parsen Was nun?
    Spoiler:(zum lesen bitte Text markieren)


    Mfg.
    Oh, mein Fehler... Die Funktion oCNpc_UnequipItem ist aus dem Skriptpaket LeGo und nicht aus Ikarus selbst. Das müsstest du dann wohl auch noch installieren. Habe ich wohl durcheinandergeworfen. LeGo setzt auf Ikarus auf, von daher hättest du das sowieso gebraucht.
    Ich hoffe ich habe mit der Lösung nicht mehr Verwirrung gestiftet, als ich Fragen beantworten konnte

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