Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Samstag, 25. Juli 2015, 02:19

Dämonen als Charaktere dürfen nicht Partyleader sein

Hallo Leute,
Ich habe eine relativ spezielle Skript-Anfrage, die aber (denke ich) nicht allzu kompliziert umzusetzen ist.
In meinem Projekt ist es möglich, das die Charaktere Dämonen beschwören können - Das funktioniert auch alles so wie ich es möchte.
Jedoch hätte ich es gerne, das es zwar möglich ist, die Dämonen in der Formation zu bewegen, jedoch sollte es nicht möglich sein, sie auf den ersten Platz zu setzen.
Durch mein Kampfsystem rücken die Charaktere immer nach, sobald der Leader gestorben ist.
Sollte ein Dämon auf den Leader-Platz nachrutschen, hätte ich es gerne, das er durch den nächsten Nicht-Dämonen in der Party ausgewechselt wird, sollten keine Nicht-Dämonen im Team sein, hätte ich gerne den GameOver-Screen.
Das ganze wäre ja eigentlich auch per Common-Event möglich, jedoch verträgt sich mein Kampfsystem (Ich nutze das Schalla-System: RGSS3 – Schala Battle System | Atelier Rgss ) nicht mit Common-Events.
Deshalb hätte ich das ganze gerne in Skriptform...
Ist das einfach beziehungsweise überhaupt möglich zu kreieren?

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

2

Dienstag, 28. Juli 2015, 23:43

Hallo Chesra, mal meine zwei Pfennig zu deinem Problem:
Wie zeichnet sich denn ein beschworener Dämon aus, bzw. was unterscheidet ihn vom normalen Helden? Ich nehme an Dämonen sind auch Actors.

Du könntest die Klasse Game_Actor um Methoden erweitern, die entscheiden, ob der Held gerade die Gruppe anführen kann:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  Kleine Erweiterung für Chesra 
#==============================================================================
class Game_Actor
  #--------------------------------------------------------------------------
  # * Liefert zurück, ob der 
  #--------------------------------------------------------------------------
  def can_be_a_leader?
    not dead? and not is_deamon?
  end
  #--------------------------------------------------------------------------
  # * Ist der Held ein beschworener Dämon?
  #--------------------------------------------------------------------------
  def is_deamon?
    false
  end
end

Und in deinem Schala Battle System fragst Du dann in der Methode refresh_leader beim swap nichtmehr, ob der Held tot ist, sondern ob er ungeeignet ist die Party anzuführen:

Ruby Quellcode

3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
  #--------------------------------------------------------------------------
  # ● Refresh Leader
  #--------------------------------------------------------------------------
  def refresh_leader
      return if $game_party.members.size == 0
      time = 0
      loop do
         if $game_party.members.size > 1
            $game_party.swap_order(0,1) if $game_party.members[0].dead? # Hier Bedingung für Swap ändern
         end   
         if $game_party.members.size > 2
            $game_party.swap_order(1,2) if $game_party.members[1].dead? # Hier Bedingung für Swap ändern
         end
         time += 1 
         break if time > 3
      end
      $game_player.refresh
      $game_map.need_refresh = true
      $game_temp.refresh_hud = true
      reset_party_name
  end    

3

Mittwoch, 29. Juli 2015, 22:50

Danke schonmal für deine Mühe, ich werde es mir Morgen mal genauer anschauen - Bin Heute zu müde dafür. :)
Und ja, Dämonen sind Actors. Sie erscheinen und gehen per Beschwörung also Skills, wahrscheinlich ist es sogar sinnvoller einen Dämonen verschwinden zulassen, sobald sein Beschwörer besiegt wurde, aber da muss ich mal schauen ob das so überhaupt umsetzbar ist.
Aber wie gesagt, ich teste das dann Morgen mal und melde mich dann nochmal hier.

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

4

Donnerstag, 30. Juli 2015, 01:21

Die Methode is_deamon? muss noch angepasst werden, ich wusste nur nicht, wie Du einen Dämon eindeutig markierst. Haben alle vielleicht das Wort "Beschworener" im Namen, oder die selbe Klasse, die sonst kein Held hat? Irgendwie muss die Methode zielsicher entscheiden können, ob der Actor ein Dämon ist, oder nicht.

5

Freitag, 31. Juli 2015, 22:57

Sie werden definitiv eigene Klassen haben, jedoch wollte ich ihnen eigentlich verschiedene geben, da sie unterschiedliche Werte tragen sollen.
Ich hatte mich gefragt, ob es möglich ist, einfach nur "is_deamon" oder ähnliches in das Notizenfeld des Actors zu schreiben, um ihn so zu markieren. Da greifen ja auch andere Skripte oft drauf zu.
Aktuell bin ich auch am Googeln und Learning by Doing wie genau ich das dort abfrage bzw. was gerade mein Problem ist, dem Actor den is_deamon-Status zu geben.


-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

6

Freitag, 31. Juli 2015, 23:04

Upps, hatte garnichtmehr im Kopf das wir hier im VX Ace Unterforum sind. :>
Ja klar, deine Lösung funktioniert. Du kannst das Notizfeld benutzen.

Edit sehe gerade, Du hast seit ich angefangen habe zu schreiben, deinen Beitrag etwas gekürzt, ich bezieh mich noch auf deinen Vorschlag mit =~


String#=~ liefert dir entweder zurück, an welcher Stelle im String das /Pattern/ auftritt, oder nil, wenn es nicht enthalten ist. Du kannst das kurz schreiben in:

Ruby Quellcode

1
2
3
def is_deamon?
  return (actor.note =~ /Dämon/ ? true : false)
end

Du benutzt dabei den ternären Operator ?: was nur eine Kurzschreibweise für if-then-else ist (Bedingung ? Then-Fall : Else-Fall). Außerdem nutzt Du so aus, das in Ruby alles was nicht false und nil ist als true gewertet wird, wenn "actor.note =~ /Dämon/" also was anderes als false/nil liefert, returnst Du true, ansonsten returnst Du false.

7

Freitag, 31. Juli 2015, 23:51

Ja, ich war mir doch nicht mehr sicher, ob ich das mit diesem Befehl umsetzen kann.

Ich habe da gerade ewig rumprobiert und bekomme es einfach nicht auf die Reihe.
Denn Sinn von

Ruby Quellcode

1
2
3
def is_deamon?
  return (actor.note =~ /Dämon/ ? true : false)
end
und den Game_Actor-Teil verstehe ich, habe beide einfach als neue Skripts hinzugefügt.
verstehe ich soweit noch und weiß auch, was ich damit zu tun habe. Bei dem Teil fürs Kampfsystem weiß ich ja ebenfalls wo es hingehört. Jedoch verstehe ich da denn Sinn einiger Zeilen nicht ganz, ich habe einfach .dead? in den beiden angemerkten Zeilen durch .is_deamon? ersetzt.
Jedoch...was jetzt? Kannst du das vielleicht nochmal für einen RGSS-Dummy erklären?

Übrigens habe ich das Gefühl, das es immer schwerer wird, durchs Scientia zu surfen, ohne durch die Links wieder im Forum zu laden.

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

8

Freitag, 31. Juli 2015, 23:59

Habe eben mal den Servercache für ein paar Wikiseiten geleert. Der kommt manchmal noch durcheinander. Sollte jetzt wieder gehen.

Was genau verstehst Du denn nicht? Die Bedingung dead? sollte am besten drin bleiben und nur ergänzt werden, zum Beispiel sowas:

Ruby Quellcode

1
$game_party.swap_order(0,1) if $game_party.members[0].dead? or $game_party.members[0].is_deamon?

Also das ein Member nach hinten in der Party geschoben wird, wenn er tot ist, oder wenn er ein Dämon ist.

9

Samstag, 1. August 2015, 00:10

Ja, stimmt, auswechseln ist da klüger.
Meine Frage ist jetzt nur, das noch irgendwas zu tun ist, oder?
Denn Tote werden ausgetauscht, aber Actors mit Dämon in den Notetags nicht.

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

10

Samstag, 1. August 2015, 00:25

Du kannst die Methode ja mal mit Debug-Ausgaben auf der Konsole vollhauen und gucken was da bei dir passiert.

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  #--------------------------------------------------------------------------
  # ● Refresh Leader
  #--------------------------------------------------------------------------
  def refresh_leader
    return if $game_party.members.size == 0
    print "\nstart refresh_leader\n"
    time = 0
    loop do
      if $game_party.members.size > 1
        q_dead = $game_party.members[0].dead?
        q_deam = $game_party.members[0].is_deamon?
        print "Member Nr.0\tDeamon:%s\tDead:%s\n" % [q_dead.to_s,q_deam.to_s]
        if q_dead or q_deam
          $game_party.swap_order(0,1)
          print "Tauschen.\n"
        else
          print "Nicht tauschen.\n"
        end
      end   
      if $game_party.members.size > 2
        q_dead = $game_party.members[1].dead?
        q_deam = $game_party.members[1].is_deamon?
        print "Member Nr.1\tDeamon:%s\tDead:%s\n" % [q_dead.to_s,q_deam.to_s]
        if q_dead or q_deam
          $game_party.swap_order(1,2)
          print "Tauschen.\n"
        else
          print "Nicht tauschen.\n"
        end
      end
      time += 1 
      break if time > 3
    end
    $game_player.refresh
    $game_map.need_refresh = true
    $game_temp.refresh_hud = true
    reset_party_name
  end


Disclaimer: Habe den Code gerade hier im Editor geschrieben - es könnten Syntaxfehler drin sein.

11

Samstag, 1. August 2015, 00:33

Es passiert weiterhin gar nichts, wenn ich einen Actor mit Dämon-Notetag auf die Leaderposition setze.
Weder wenn ich ihn selbst per Formation eintausche noch wenn ein anderer Leader im Kampf besiegt wird und der "Dämon" nachzieht.

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

13

Samstag, 1. August 2015, 01:11

Ruby Quellcode

1
2
Deamon: false Dead: false
Nicht tauschen

Also er sieht sowohl den ohne Dämon-Tag und den mit als Nicht-Dämon an.

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

14

Samstag, 1. August 2015, 01:24

Dann enthält der Notetag des Dämonen-Actors aber nicht das Schlüsselwort "Dämon", wenn die Methode is_deamon? false liefert.

Hm, wenn Du das nochmal geprüft hast und das nicht der Fall ist, vielleicht lädst Du dann mal ein Demoprojekt hoch, wo die beteiligten Skripte enthalten sind und man den Fehler sieht? Ich glaub das macht es für alle die helfen wollen noch ein bisschen übersichtlicher.

Edit Mich würde der ganze Auszug der Konsolenausgabe interessieren.

15

Samstag, 1. August 2015, 01:31

Doch, sowohl jetzt in dieser Testdemo, als auch in meinem Projekt stand das Wort Dämon in den Notetags.
Ich habe die Demo im Anhang, auch dort sagt die Konsole nichts neues. Es liegt also nicht an einem anderen Skript von mir.

-Der Chesra
»Chesra« hat folgende Datei angehängt:
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

16

Samstag, 1. August 2015, 20:07

Deine is_deamon? Methode definierst Du zweimal. Dabei überschreibt die spätere Definition, die frühere Definition, also wird die Methode immer false liefern. :hm:

Übrigens: Damit man verliert, wenn nurnoch tote oder beschworene Dämonen in der Party sind, solltest Du die Methode von Game_Party neu definieren:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
class Game_Party
  #--------------------------------------------------------------------------
  # * Determine if Everyone is Dead for Defeat Conditions
  #--------------------------------------------------------------------------
  def all_dead?
    alive_members = members.select {|mem| mem.alive? and not mem.is_deamon? }
    alive_members.empty? && ($game_party.in_battle || members.size > 0)
  end
end

17

Samstag, 1. August 2015, 21:09

Oh, das hatte ich gar nicht mehr beachtet, das die alte Definition noch da unten stand. *facepalm*
Das mit dem verlieren, sobald nur noch Dämonen da sind, hatte ich schon als Common Event festgelegt. Aber ich denke, das die Lösung über dein Skript definitiv einfacher ist.
Vielen Dank auf jeden Fall, dafür das du mir geholfen hast. Ich glaube, das dieses System mit den Dämonen endlich so funktioniert, wie ich es owllte.
Ich habe übrigens die Zeile q_deam = $game_party.members[1].is_deamon? entfernt, damit Dämonen weiterhin den zweiten Platz belegen können.

-Der Chesra
Alle Infos zu meinem aktuellen RPGMaker VX Ace-Projekt Jäger - Licht & Schatten gibt es auf meiner Homepage zu finden, sobald eine spielbare Demo released wird, wird es Projekt-Vorstellungen in allen gängigen Foren geben. Die Informationen auf der Homepage sind noch nicht final.

Ähnliche Themen

Social Bookmarks