Ergebnis 1 bis 9 von 9

Thema: RPG Maker XP Im Kampf soll die Auswahl "Verteidigung" etwas ändern

  1. #1

    RPG Maker XP Im Kampf soll die Auswahl "Verteidigung" etwas ändern

    Hallo miteinander,

    im Kampf hat man ja für gewöhnlich die Auswahl zwischen „Angriff“, „Fähigkeit“, „Verteidigung“ und „Item“.

    Verteidigung halbiert jeden erlittenen Schaden wenn ausgewählt. Und hier möchte ich, dass wenn Verteidigung gewählt wird, der Charakter außerdem Mana erhält, wenn eine bestimmte Variable auf 1 steht.

    Wo und wie kann man in die Option „Verteidigung“ eingreifen um dies hinzuzufügen? Bzw. geht das überhaupt und welchen alternativen Trick könnte man anwenden. Da Verteidigung kein „Zustand“ im spieltechnischen Sinne ist, kann man auch keine Zustandsabfrage per Event machen.

  2. #2
    Ich hätte zumindest ein Script hier von "KGC", mit dem du bei Verteidigung MP und HP regenieren kannst (die Menge kannst du gleich oben einstellen).
    Wo du nun genau die if-Abfrage für deine Variable einfügen musst, da muss dir ein anderer helfen... ^^;

    Code:
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    #_/ ?Défense Regénération - KGC_GuardRecover? Translated by Ojiro
    #_/----------------------------------------------------------------------------
    #_/ Regénération des HP/SP d'un personnage qui se défend.
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    
    class Scene_Battle
    # HP Regen %
    RECOVER_HP_RATE = 0
    # SP Regen %
    RECOVER_SP_RATE = 5
    end
    
    #???????????????????????????????????????
    
    #==================================================================
    # ¦ Scene_Battle (4)
    #------------------------------------------------------------------------------
    # C'est la scène qui procède l'image de combat
    #==================================================================
    
    class Scene_Battle
    #--------------------------------------------------------------------------
    # ? Compilation des résultats d'actions basiques
    #--------------------------------------------------------------------------
    alias make_basic_action_result_KGC_GuardRecover make_basic_action_result
    def make_basic_action_result
    # Exécute le processus d'origine
    make_basic_action_result_KGC_GuardRecover
    
    # Quand une autre action est effectué que défense
    return if @active_battler.current_action.basic != 1
    # Procédé de calcul de la regénération
    recover_hp = @active_battler.maxhp * RECOVER_HP_RATE / 100
    recover_sp = @active_battler.maxsp * RECOVER_SP_RATE / 100
    if recover_hp > 0
    @active_battler.damage = -recover_hp
    end
    if recover_sp > 0
    @active_battler.damage = "#{$data_system.words.sp}+ #{recover_sp}"
    end
    @active_battler.hp += recover_hp
    @active_battler.sp += recover_sp
    # Indique la valeur de regénération
    @target_battlers.push(@active_battler)
    end
    end
    Ich hoffe, das hilft trotzdem weiter. °^°"

    MfG Sorata

  3. #3
    Danke erst einmal für das Skript. Funktionieren tut es soweit: Eventuell habe ich Glück und es verirrt sich noch jemand mit entsprechenden Kenntnissen in diesen Thread, der weiß wie und wo man dort noch eine Variablenabfrage rein packen kann. Super wäre es, wenn dies für jeden Helden einzeln abgefragt wird (so das es bei manchen geht und bei anderen nicht. Es soll ein passiver Skill sein, den man erlernen kann).

  4. #4
    @Patrick:
    Schreib Cornix mal eine PN, der hat soweit ich weiß, schon Ahnung von Ruby und kann dir da sicher weiterhelfen^^
    Hat mir schon oft geholfen

    @Sora:
    Thx^^
    Das hab ich gesucht

  5. #5
    Hm, vielleicht kriege ich es doch noch hin...
    Ist zwar sicher keine optimale Lösung, aber könnte funktionieren.
    Probieren wir's einfach mal!

    Such dir die Zeilen:
    Code:
    if recover_sp > 0
    @active_battler.damage = "#{$data_system.words.sp}+ #{recover_sp}"
    end
    und ändere das in
    Code:
    if recover_sp > 0 && ( (@active_battler.actor_id == 1 && $game_variables[12] == 1) || (@active_battler.actor_id == 2 && $game_variables[13] == 1) )
    @active_battler.damage = "#{$data_system.words.sp}+ #{recover_sp}"
    end
    Ich habe hier zwei Actors in die Abfrage eingebaut, wenn du mehr brauchst musst vor die letzte Klammer der Abfrage einfach noch ein || und einen weiteren geklammerten Ausdruck für einen Actor einfügen.
    @active_battler.actor_id ist die jeweilige ID des Actors,
    $game_variables das Array für all die Variablen, die du auch über Events ansprechen kannst (da also in den [ ] die ID anpassen und entsprechend den Wert, den du haben willst. Ich würde hierbei aber vielleicht eher zu Switches raten (also dann $game_switches), wenn es eh nur darum geht, ob etwas "ON" oder "OFF" ist. Du also nur fragst, ob der Skill erlernt wurde oder eben nicht.

    Wie du vielleicht bemerkst, wenn du dir den Code mal anschaust, ist das jetzt nur für die Bedingung bezüglich der MP.
    Willst du das ganze auch noch für die HP, musst du die andere Bedingung im gleichen Sinne wie hier erweitern.

    Ich hoffe, das hilft dir etwas... ^^;
    Teste aber erstmal, ob das so hinhaut, wie ich es hier geschrieben habe... :x

    MfG Sorata

  6. #6
    @Soul96: Dann werde ich es beizeiten bei ihm anfragen. Danke für den Hinweis.

    @sorata08: Die benannte Passage habe ich ersetzt und hier hat sich wohl ein Fehler eingeschlichen. Beim Verteidigen wird das Programm mit einer Fehlermeldung beendet. Diese bezieht sich auf die erste Zeile vom umgewandelten Part auf die actor_id das diese nicht richtig definiert sei. Ich kann bei Bedarf die Fehlermeldung hier rein stellen, ansonsten würde ich die vorgeschlagene Person einfach anfragen.

  7. #7
    Die Unterscheidung von actor_id und enemy_id gibt es afair erst ab dem RMVX, im XP wird sowohl für Helden- als auch Gegnercharaktere id benutzt.


    Die Zeile müsste also etwa so aussehen können:
    Code:
    if recover_sp > 0 and @active_battler.is_a?(Game_Actor) and 
    (($game_variables[12] == 1 and @active_battler.id == 1) or
    ($game_variables[13] == 1 and @active_battler.id == 2))

    Oder alternativ wenn du einen passiven Skill verwendest:
    Code:
    if recover_sp > 0 and @active_battler.is_a?(Game_Actor) and 
    @active_battler.skill_learn?(17)
    Wirkt stattdessen bei allen Helden die den passenden Skill (hier beispielsweise den mit ID 17) erlernt haben.

    Geändert von ETeCe (12.07.2012 um 02:41 Uhr)

  8. #8
    Ah stimmt, irgendwie verpeilt...
    "actor_id" kommt aber durchaus als lokale Variable in den Methoden von Game_Actor und anderen Skripten vor, aber da hatte ich wohl zuviel von den Klassen erwartet... ^^;

    MfG Sorata

  9. #9
    Wenn man eure beiden Angaben mit einander kombiniert, funktioniert es so wie gewünscht. Sowohl die Version mit den Variablen als auch die über den Skill.

    Das ganze sieht jetzt so aus:

    Code:
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    #_/ ?Défense Regénération - KGC_GuardRecover? Translated by Ojiro
    #_/----------------------------------------------------------------------------
    #_/ Regénération des HP/SP d'un personnage qui se défend.
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    
    class Scene_Battle
    # HP Regen %
    RECOVER_HP_RATE = 0
    # SP Regen %
    RECOVER_SP_RATE = 5
    end
    
    #???????????????????????????????????????
    
    #==================================================================
    # ¦ Scene_Battle (4)
    #------------------------------------------------------------------------------
    # C'est la scène qui procède l'image de combat
    #==================================================================
    
    class Scene_Battle
    #--------------------------------------------------------------------------
    # ? Compilation des résultats d'actions basiques
    #--------------------------------------------------------------------------
    alias make_basic_action_result_KGC_GuardRecover make_basic_action_result
    def make_basic_action_result
    # Exécute le processus d'origine
    make_basic_action_result_KGC_GuardRecover
    
    # Quand une autre action est effectué que défense
    return if @active_battler.current_action.basic != 1
    # Procédé de calcul de la regénération
    recover_hp = @active_battler.maxhp * RECOVER_HP_RATE / 100
    recover_sp = @active_battler.maxsp * RECOVER_SP_RATE / 100
    if recover_hp > 0
    @active_battler.damage = -recover_hp
    @active_battler.hp += recover_hp
    end
    if recover_sp > 0 and @active_battler.is_a?(Game_Actor) and (($game_variables[40] == 1 and @active_battler.id == 1) or ($game_variables[115] == 1 and @active_battler.id == 2) or ($game_variables[140] == 1 and @active_battler.id == 3))
    @active_battler.damage = "#{$data_system.words.sp}+ #{recover_sp}"
    @active_battler.sp += recover_sp
    end
    # Indique la valeur de regénération
    @target_battlers.push(@active_battler)
    end
    end
    Danke an euch beide dafür.

Berechtigungen

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