Ergebnis 1 bis 8 von 8

Thema: [VX-Ace] Variable über Itemnutzung ändern

  1. #1

    [VX-Ace] Variable über Itemnutzung ändern

    Tach,

    ich nach Längerem mal wieder ^^
    Also Folgendes. Ich versuche gerade Zauberbücher zu erstellen aus denen nur bestimmte Klassen was lernen können.
    Zum Beispiel "Heilender Wind Zauberbuch" kann nur von Klerikern gelesen werden. Das geht ja noch, Comment Event aufrufen und ab dafür.
    So, nun bin ich aber faul und habe nicht Lust für jedes Buch (das können locker über 200 werden) ein eigenes C.E. zu basteln. Rein theoretisch würde ich ja mit Variablen arbeiten... Problem an der Sache nur, ich kann nicht über ein Item Variablen ändern um damit zu arbeiten.
    Eine andere Idee habe ich leider gerade auch nicht, ich kann ja nicht irgendwie abfragen welcher Gegenstand zuletzt genutzt wurde.

    Kann mir jemand sagen was ich da machen kann damit ich mehr Bücher in einem CommenEvent abarbeiten kann?
    Mir recht egal wie, von mir aus auch über ein Script, irgendwas ... ich komm da mit google gerade nicht weiter ^^"

    Gruß
    Elster

  2. #2
    Du könntest z. B. vor dem Aufruf des Common Events die ID des Gegenstands in einer Variable speichern und diese dann im Common Event abfragen. Leider hab ich den Ace nicht und kann dir nicht die genaue Stelle im Code nennen.

  3. #3
    Da gibt es mehrere Möglichkeiten.
    Zum Beipiel lässt du das Common Event weg und gibst den Clerikern den Skill Type Buchzauber. Nun können sie immer die Items benutzten um den Zauber zu lernen.
    standardmässig kann man im ace ein item ja nicht benutzten wen man dann zum beispiel schon den skill hat.

    Das machen wir uns zunutze und geben allen anderen klassen alle Skills aus den Büchern, somit können sie die Items nicht mehr nutzen.
    Dadurch das die anderen Klassen aber kein Skill Type Bücher haben, können sie sie weder sehen noch benutzen.

    Was ähnliches konnte man auch mit Statuseffekten machen, hatte aber den nachteil das es beim benutzen eines Gasthauses geheilt wird.

    Edit: ups etwas durcheinander aber ich hoffe du verstehst den ansatz.

  4. #4
    @Kelven
    Genau das geht ja gerade nicht, da man nicht auf Variablen zugreifen kann, wenn man einen Gegenstand benutzt.

    @Bex
    Werde ich mal versuchen danke, habe jedenfalls verstanden was du mir sagen wolltest ^^

  5. #5
    Ne, so meinte ich das nicht. Auf dem XP könnte man direkt im Script, in dem der Gegenstand benutzt wird

    $game_variables[beliebige Zahl] = @item.id

    schreiben. Dann hätte die Variable [beliebige Zahl] die ID des Items. Ich weiß aber nicht, wie die Scripte im Ace aussehen.

  6. #6
    Ich habe dir kurz dafür ein Script geschrieben. Allerdings muss ich jetzt los zum Joggen. Ich werde es heute Abend dann Posten, wahrscheinlich gegen 21 - 22 Uhr, falls du es dann noch benötigst.

  7. #7
    Sorry, leider etwas später als geplant.

    Füge folgende Zeilen über Main ein:
    Code:
    class Game_Battler < Game_BattlerBase
      def item_effect_test(user, item, effect)
        case effect.code
        when EFFECT_RECOVER_HP
          hp < mhp || effect.value1 < 0 || effect.value2 < 0
        when EFFECT_RECOVER_MP
          mp < mmp || effect.value1 < 0 || effect.value2 < 0
        when EFFECT_ADD_STATE
          !state?(effect.data_id)
        when EFFECT_REMOVE_STATE
          state?(effect.data_id)
        when EFFECT_ADD_BUFF
          !buff_max?(effect.data_id)
        when EFFECT_ADD_DEBUFF
          !debuff_max?(effect.data_id)
        when EFFECT_REMOVE_BUFF
          buff?(effect.data_id)
        when EFFECT_REMOVE_DEBUFF
          debuff?(effect.data_id)
        when EFFECT_LEARN_SKILL      
          return false unless(valid_class?(item.note))
          actor? && !skills.include?($data_skills[effect.data_id])
        else
          true
        end
      end
      
      def valid_class?(note)
        reg = /<class:\s*(.+)\s*>/i
        res = note.match(reg)
        return true unless(res)
        if(res[1].include?(","))
          res[1].split(",").each do |cid|
            return true if(cid.to_i == @class_id)
          end
        else
          return res[1].to_i == @class_id
        end
        return false
      end
    end
    Anschließend kannst du in der Datenbank über folgenden Eintrag in den Notes des Items festlegen, ob ein Item, welches einen Skill erlernen lässt, an eine Klasse gebunden ist:
    Code:
    <class: ID>
    Sollte ein Item also für die Klasse 0001 (bspw. Soldat) verfügbar sein, trägst du hier ein:
    Code:
    <class: 1>
    Du kannst auch, getrennt durch Komma, mehrere IDs eintragen:
    Code:
    <class: 1,5,8>
    Hier würde das Item für Klasse 1, 5 und 8 gültig sein.

  8. #8
    Wow danke, werde es demnächst ausprobieren :3

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •