• Anmelden

1

Dienstag, 1. März 2011, 18:27

Ein Script, dass den Eventnamen nach Begriffen durchsucht

Hallo,

EDIT: der erste Post brauch nicht beachtet werden. Beim zweiten Post gibt es einen besseren Ansatz das Problem zu lösen.

EDIT2: Siehe Post Nr. 2

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »fjurios« (3. März 2011, 18:01) aus folgendem Grund: Irreführung


2

Donnerstag, 3. März 2011, 16:20

Eine bessere Idee

Hmm, keiner meldet sich. Schade.

Inzwischen ist mir aber auch eine andere Idee eingefallen. Eine andere Art von Script die sehr vielseitig genutzt werden könnte und daher sicherlich für viele interessant wäre.
Ich spreche von einem Script, das den Namen eines Events nach einer bestimmten Syntaxe durchsucht und true oder false zurückgibt.

Beispiel:
$eventname_include?(event-ID, "Syntax")

event-ID = die ID des Events, das "gelesen" werden soll
"Syntax" = der Text nachdem im Namen gesucht werden sollte

konkrettes Beispiel:
$eventname_include?(5, "\Gegner")

In diesem Beispiel würde das Script den Namen des Events, mit der ID 5, nach dem Wort "\Gegner" (die "" nicht suchen") durchsuchen. Beinhaltet der Name des Events \Gegner so gibt der Befehlt true wieder ansonsten false.


Damit könnte ich mein Problem mit den Scripts die ich bereits von hier habe lösen können.
Desweiteren denke ich, dass so ein Script genau so vielseitig und nützlich verwendet werden kann wie das klon-script und daher vielen helfen würde.

Über irgendeine Reaktion, und sei es auch nur ein Kommentar, würde ich mich freuen. :)

3

Donnerstag, 3. März 2011, 16:30

Vielleicht finden es alle öde, das diese Frage so oft gestellt wird, wobei die Forensuche, ScriptDB und online Suchmaschiene doch so viele Lösungen parat haben .-.

Hier sind die ersten beiden Treffer meiner kurzen Suche:
Ein Event löst durch gehen ein Event aus - Einsteigerhilfe - RPG Studio - Make your World real
Schieberätsel very easy | RPG Studio
wenn man länger als 60 Sekunden sucht, findet man noch mehr.

Zu deiner 2.Idee, da findet man auch bestehende Scripte, die Idee ist nicht die neuste Bild

4

Donnerstag, 3. März 2011, 17:12

Wie ich schon in meinen zweiten Post angedeutet habe, habe ich bereits diese und auch weitere Scripts. Leider erfüllen sie nicht die Funktionen die ich brauche.
Ich gebe zu, dass aus dem ersten Post nicht ersichtlich wird wo nun der Unterschied zu den genannten Scripts sein soll.

Daher einfach den ersten Post ignorieren. Im Zweiten stehen die relevanten Sachen.

RedLink

Landsknecht

Motto: Faulheit ist Relativ

  • Nachricht senden

5

Donnerstag, 3. März 2011, 17:35

Playm meint: das du dir den Code ansehen und anschließend es in dein eigenes Script übertragen sollst.
  • Scripter

    Für den MV
  • Mitmacher

    nirgendswo

6

Donnerstag, 3. März 2011, 17:59

Playm meint: das du dir den Code ansehen und anschließend es in dein eigenes Script übertragen sollst.

Sorry, aber ich verstehen nicht was du meinst. Falls du erklären wolltest wie man die Scripts einfügt, so weiß ich das und sie funktionieren auch.

Aber wie gesagt, der erste Post ist nicht relevant. Interessant wäre ein Script, dass den Eventnamen nach einem bestimmten Begriff durchsucht.

Bex

Seher

Motto: Lets have some Fun.

  • Nachricht senden

7

Freitag, 4. März 2011, 13:50

@fjurio eine Frage:
1.Was soll das im Spiel dann genau bewirken, wenn da was aus dem Namen gelesen werden soll?(wie z.B. "Gegner")
2.Lässt sich das nicht über Event ID Regeln?
Ich kopier mir die Events immer in der richtigen Reihenfolge auf die Maps.So kann ich sie auf jeder Map nutzen und entsprechend anpassen.
3.Welche Probleme hast du denn mit deinen bisherigen Skripten?
(Hast du oben erwähnt.Vieleicht lässt sich das ja auch anders lösen.Am besten die mal posten.


Wenn ich Ahnung vom Skripten hätte würd ich helfen.Da das nicht der Fall ist stell ich paar Fragen um die Lage besser beurteilen zu können :beach:

8

Freitag, 4. März 2011, 14:54

1.Was soll das im Spiel dann genau bewirken, wenn da was aus dem Namen gelesen werden soll?(wie z.B. "Gegner")
Ich will damit die Events selektieren können. Ein anderes Event soll aus dem Namen erkennen wie es reagieren soll. Beispiel: Ein Event bewegt sich durch den Bildschirm und überprüft dabei welches Event es dabei berührt. Ist es eine z.B. Teleporterpunkt macht es nichts. Ist es ein Event was mit einem "Mensch" gekennzeichnet ist, soll es, mit den genannten Scripts, die ID des Events wiedergeben. Anhand dieser ID wollte ich das Event bewegen, aber mir fällt grade auf, dass mir dazu der Script Call Command fehlt (also sowas wie $game_map.events[11].move_right, wobei mir nur der erste Teil des Commands fehlt, die ganzen force movment Commands habe ich schon gefunden). Falls mir niemand mit den Commends helfen kann, hätte ich aber noch einen Plan B.

2.Lässt sich das nicht über Event ID Regeln?
Würde aus dem Grund nicht gehen, da ich das Event von einer anderen Map kopiere (klone). D.h. es ist jedes Mal eine andere ID.

3.Welche Probleme hast du denn mit deinen bisherigen Skripten?
Naja, Probleme habe insofern mit denen nicht. Die funktionieren ja... :)
Aber es fehlt mir halt die Möglichkeit, dass bei einer Kollision mit einem Event aus dem Namen und nicht aus der ID erkannt wird, ob es darauf reagiert oder nicht.


Ich danke für das Intresse. :)
Wenn man ausführlichere Informationen brauch, könnt ihr gerne fragen.

9

Freitag, 4. März 2011, 15:34

Wenn jemand sagt: "Du findest das Script, wenn du selber suchst", ist es wahrscheinlich, das er das Script durch suchen gefunden hat, es vor ihm liegt, und er sich wundert warum er selbst das Script findet, aber der Threadstarter nicht.

Damit sich der Thread jetzt aber nicht unnötig in die Länge zieht, poste ich das Script einfach nochmal:
Spoiler: Code
Als neues Script über Main einfügen

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#==============================================================================
# ** Interpreter Erweiterung
#------------------------------------------------------------------------------
#  Neue Codeerweiterungen für diese Klasse
#  
#  Sämmtliche Methoden können aus einem CallScript-Eventcommand aufgerufen
#  werden.
#  
#  @autor  : Playm (www.rpg-studio.de)
#  @version: 1.0
#  @date   : 10.Nov.2010
#==============================================================================
class Interpreter
  #--------------------------------------------------------------------------
  # * Konstanten
  #--------------------------------------------------------------------------
  CSE_MSG = "Beim Event%.3d auf Map%.3d ist im CallScript in Zeile %d ein Fehler aufgetreten!\n"
  #--------------------------------------------------------------------------
  # * Call Script Command (intern)
  #--------------------------------------------------------------------------
  def command_355
    # Set first line to script
    script = @list[@index].parameters[0] + "\n"
    # Loop - add lines
    while(@list[@index+1].code == 655)do
      script += @list[@index+1].parameters[0] + "\n"
      @index += 1
    end
    # Evaluation
    begin
      result = eval(script)
    rescue => e
      msg = sprintf(CSE_MSG, @event_id, @map_id, @index+1) + "\n#{e.message}"
      print(msg)
      return true;
    end
    # return
    return !(result==false)
  end
  #--------------------------------------------------------------------------
  # * get event name
  #   
  #   Gibt den Namen des Events dessen ID angegeben wird zurück.
  #     event_id : -1  => Name des Helden auf der Map
  #     event_id :  0  => Name des Events das diesen Code ausführt
  #     event_id :  n  => Name des Events mit der ID n
  #--------------------------------------------------------------------------
  def get_event_name( event_id )
    if( event_id == (-1) )
      name  = $game_party.actors.first.name
    else
      event = get_character( event_id )
      name  = event.instance_variable_get(:@event).name
    end
    return name
  end
  #--------------------------------------------------------------------------
  # * set zoom
  #   
  #   Ändere den Zoom eines Event Sprites auf die angegebene Rate.
  #   Für normale Größe, übergib als +rate+ 1 und übergib 0.5 für 
  #   die halbe Größe.
  #--------------------------------------------------------------------------
  def set_zoom( event_id, rate )
    spriteset  = $scene.instance_variable_get(:@spriteset)
    char_sprite= spriteset.instance_variable_get(:@character_sprites)[event_id-1]
    char_sprite.zoom_x=rate
    char_sprite.zoom_y=rate
  end
  #--------------------------------------------------------------------------
  # * get_comments
  #   
  #   Liest alle Kommentare aus einer EventPage von einem Event aus
  #--------------------------------------------------------------------------
  def get_comments( event_id, page_num )
    return "" if((event_id < 0) && (event_id > $game_map.events.length))
    event   = get_character( event_id )
    ev_comm = event.instance_variable_get(:@event).pages[page_num-1].list
    kom = ""
    ev_comm.each do |command| 
      kom << command.parameters[0]+"\n" if(command.code==108 or command.code==408)
    end
    return kom
  end
end
zum Lesen den Text mit der Maus markieren
An den Eventnamen kommst du also mit dem Befehl

Ruby Quellcode

1
name = get_event_name( ID )

Den kannst du dann gegen ein Muster testen, dafür nutzt du Regexp. Eine Erklärung findest du HIER.

10

Montag, 7. März 2011, 15:56

Wenn jemand sagt: "Du findest das Script, wenn du selber suchst", ist es wahrscheinlich, das er das Script durch suchen gefunden hat, es vor ihm liegt, und er sich wundert warum er selbst das Script findet, aber der Threadstarter nicht.
Das ist albern. Wenn du das bereits Script gefunden hast, könntest du mir auch gleich den Link geben oder zumindest mir sagen wonach ich suchen soll. Denn wenn ich schreibe ich habe es gesucht und nicht gefunden, dann habe ich offensichtlich nach dem falschen gesucht. Da könntest du mir nachhelfen. Hast du aber keine Lust mir zu helfen, dann poste lieber gar nicht, denn dieses kindische Verhalten steckt andere an, inbesondere wenn sie von einem Administrator ausgehen.

Dennoch möchte ich dir danken. Über das Script bin ich zwar schon gestolpert doch konnte ich damit mangels "RegeXp-Wissen" nichts anfangen. Hier war deine Hilfe direkt und präzise.

11

Freitag, 18. März 2011, 00:29

Für das "get_event_name" würde Regex empfohlen, was sehr Umfangreich, aber auch kompliziert ist. Ich habe einen Befehl gefunden der unkomplizierter ist:

Ruby Quellcode

1
beliebige_variable.include? "steht das hier dirn?"


beliebige_variable ist die Variable die nach "steht das hier drin?" durchsucht wird. Wenn der Text zwischen den Gänsefüsschen in der Variablen enthalten ist gibt dieser Ausdruck true wieder, wenn nicht dann false.
Beispiel:

Ruby Quellcode

1
2
3
text = "Hallo Welt"
text.include? "Welt" # gibt true wieder, denn "Welt" kommt in "Hallo Welt" vor
text.include? "Affe" # gibt false wieder, denn "Affe" kommt in "Hallo Welt" nicht vor


Man kann dafür natürlich auch die Variablen von dem Maker verwenden, die mit $game_variables[id] aufgerufen(bzw. gespeichert) werden. Dabei ist die id die Nummer der Variabel.
Beispiel:

Ruby Quellcode

1
$game_variables[10] = "Affe" # in die Variabel mit der Nummer "010" (Der Name dem ihr in dem Maker gegeben habt ist egal) wird das Wort "Affe" gespeichert


Mit diesem leichten Scriptcall könnt ihr in den Variablen auch was anderes als Zahlen speichern und diese wie gewohnt auch in der Textbox durch das Kürzel \v[id] erscheinen lassen.

In diesem Fall speichern wir den Namen von einem Event in einer Variable:

Ruby Quellcode

1
$game_varbiables[10] = get_event_name(1) # der name von dem Event 001 wird in der Variabel 010 gespeichert


und auch überprüfen lassen ob Kürzel "Feind" in dem Namen enthalten ist:

Ruby Quellcode

1
$game_varbiables[10]include? "Feind"


den letzten Schritt kann man in Conditional Branch, 4te Seite unter Script eingeben. In diesem Fall würde der Branch ausgeführt werden, wenn in dem Eventnamen von dem Event 001 das Wort "Feind" vorkommt.


Ich fand dies sehr nützlich und hoffe es wird auch euch helfen. :)

Ähnliche Themen

Social Bookmarks