• Anmelden

1

Montag, 13. Dezember 2010, 18:03

Problem mit einem Event-Clone Script

Hallo zusammen.

Ich habe folgendes Problem bei einem Event-Clone Script.(Leider weiss ich nicht wer dieses Script geschrieben hat.)

Mein problem besteht darin,das ich auf Map1 einige Events klone und danach auf Map2 teleportiere.Sobald ich
wieder nach Map1 teleportiere,sind die von mir geklonten Events verschwunden.
Ich hätte es aber gerne so,dass ich nach dem zurück-teleportieren auf Map1, die geklonten Events immer noch da sind.

Ich habe das Script beigefügt und noch eine Demo hinzugefügt, um sich selbst ein Bild davon zu machen.

Hinweis zur Demo : Mit der Taste W könnt ihr Hühner auf eure Map klonen.Mit der Taste Z könnt ihr zwischen Map1 und Map2
hin und her wechseln.
Ich hoffe jemand kann mir dabei helfen.

Event-Clone Script :

Spoiler

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
class Spriteset_Map
  #-------------------------------------------------------------------------- 
  def refresh
	$game_map.need_refresh = true
	unless @character_sprites == nil 
  	for sprite in @character_sprites 
    	sprite.dispose 
  	end 
	end
	@character_sprites = [] 
	for i in $game_map.events.keys.sort 
  	sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) 
	  @character_sprites.push(sprite) 
	end 
	@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  end
  #-------------------------------------------------------------------------- 
end
 
class Game_Map
  #-------------------------------------------------------------------------- 
  def add_event(map_id,id,x,y)
	s = 1
	(1..@events.size + 1).each{|s|break unless @events.keys.include?(s)}
	map = load_data(sprintf("Data/Map%03d.rxdata", map_id)) 
	ev = map.events[id] 
	ev.id = s 
	@events[s] = Game_Event.new(@map_id, ev)
	@events[s].moveto(x, y)
	return @events[s].id
  end 
  #-------------------------------------------------------------------------- 
end
 
class Scene_Map 
  #-------------------------------------------------------------------------- 
  attr_accessor :spriteset 
  #-------------------------------------------------------------------------- 
end
zum Lesen den Text mit der Maus markieren


Demo Event-Klonen :
Update vom 14.12.2010

Event Klonen.rar

MFG
Realität ist auch nur eine Art von Rollenspiel.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Asandril« (14. Dezember 2010, 15:53)


2

Montag, 13. Dezember 2010, 18:42

Das liegt daran, dass die Events nicht in die Map-Data geschrieben werden, sondern nur temporäer gespeichert werden. Und dies beim Mapwechsel verfällt.

Sieht nach dem von Monsta und Abt aus: Events klonen V1.1
Du könntest es mal in Verbindung hiermit ausprobieren: Event-Positionen behalten V1 könnte funktionieren, habe es aber nicht getestet.

Sonst wäre die einzige Möglichkeit, alle neu erzeugten Events nochmal extra zu speichern und beim laden der Map aus einem Datenfeld diese wieder in die Map zu setzen.

Evrey

Oberschurke im Ruhestand

Motto: "Satzzeichen sind keine Rudeltiere." - Chesra

  • Nachricht senden

3

Montag, 13. Dezember 2010, 18:45

Hallo!
Nein, das geht nicht. Die Karten werden bei jedem Wechsel neu aus den Dateien gelesen, und da gibt es deine Zusatz-Events nicht. Du musst sie wieder manuell kopieren. Wenn du das nicht willst, musst du darauf verzichten, oder die Datas überschreiben, was keinen Sinn ergibt. Das Script ist übrigens, wenn ich mich recht entsinne, von unserem lieben Abt Ploutôn, der mittlerweile Steve heißt.
Edit Playm D:
  • :medal: Werbung

    Bild

    Cpp Quellcode

    1
    
    #define TRUE FALSE //Happy debugging suckers
    (Einfach nur wundervoll.)
  • :palette: 1plus3 :cake:

    Bild
  • :fires: Nuuuhminaaah

    Bild
  • :medal: compétences

    mes compétences
    :heart_full: :heart_full: :heart_full: :heart_full: :heart_full: max.
    :ruler-triangle: Maps machen :heart_full: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :media-player: Musik machen :heart_full: :heart-half: :heart-empty: :heart-empty: :heart-empty:
    :cup: Scripts machen :heart_full: :heart_full: :heart_full: :heart_full: :heart-break:
    :paper: Story ausdenken :heart_full: :heart_full: :heart_full: :heart-empty: :heart-empty:
    :cut: Pixeln und so :heart-empty: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :game: Events proggen :heart_full: :heart_full: :heart_full: :heart_full: :heart_full:
    (Dieser Tab ist rein satirisch.)
  • :folder-open: mes projets

    • :addressbook: Silentium
      :book: Name: Silentium
      :rmxp: Maker: Eigenbau (C++, x86-SSE/AVX-Assembly, Ruby/Lua)

      :paper: Story
      :game: NPCs
      :cup: Scripts
      :drill: Ressis
      :ruler-triangle: Maps
      :compile: Gesamt
      (3+4)% 42 69% 0815 -17.438 103.38% ± 6.3mm²

      (Die Tabelle erfüllt lediglich satirische Zwecke.)
    • :compile: Onyx
      Eine in C++ implementierte, modulare, plattformunabhängige, virtuelle Maschine. Die Test-Version ist bereits halb fertig. Ab dann gibt es vielleicht mehr Infos. Sie soll die auf dem ersten Blick LISP-artige und eigens dafür konstruierte Sprache Obsidian ausführen können. Experimentell wird auch ein Lua-Compiler für Onyx gebaut. Ziel ist eine leistungsfähige, virtuelle Maschine für beliebige Scriptsprachen. Theoretisch gesehen müsste man bloß noch einen kompatiblen Compiler schreiben, der Quellcode jener Sprache in Onyx-Assembly, oder direkt in Onyx-Bytecode übersetzt. Ob die jemand nutzen wird, ist eine andere Frage und nur ein sekundäres... nein, eher tertiäres Ziel dieser VM. Primär dient es mir lediglich dazu, mein Verständnis von Hardware, ISA, und Assembly zu vertiefen, sowie eigene Grenzen auszutesten.

      :exclamation: Warnung!
      Das Entwickeln einer virtuellen Maschine oder Programmiersprache (im wahnsinnigsten Fall beides) ist eine höchst komplizierte Tätigkeit, aus der viel Frust und Hirnmatsche hervor gehen. Sollte sich dennoch ein ähnlich wahnsinniger finden, der sowas zusammen schustern will, so lege ich ihm/ihr die folgenden Bücher ans Herz:
      • Compiler - Das Drachenbuch [978-3-8273-7097-6]
        Dieses Buch schlachtet ausführlich und leicht verständlich die Grundlagen bis hoch zu den Experten-Techniken des Compilerbaus aus. Es fängt mit der Automaten-Theorie und formalen Sprachen an, arbeitet sich durch Analysetechniken vor, und landet schließlich bei Techniken wie Optimierung und Register-Zuweisung. Das Buch wiegt 3Kg oder 4Kg. Hab's mal gewogen. Ist also nicht gerade die Lektüre für unterwegs.

      • Computerarchitektur [3-8273-7016-7]
        Hier werden leicht verständlich die wichtigsten Entwicklungen der Rechnerarchitekturen erklärt (Gut, das Buch ist in die Jahre gekommen, aber der Weg zu heute ist ein winziger Schritt, den man sich nach diesem Buch selbst erdenken kann). Hauptbestandteil des Buchs ist eine relativ umfassende Betrachtung der Funktionsweise dreier gänzlich unterschiedlicher, aber dominierender Prozessor-Typen am Beispiel des Pentium II, UltraSPARC II, sowie picoJava. Die meisten Elemente dieses Buchs sind zwar für die Konstruktion einer virtuellen Maschine irrelevant, oder aufgrund der Tatsache, dass die VM Software ist und z.B. Byte-Grenzen hat, sogar zu Leistungseinbußen führen kann, doch ist ein hinreichendes Verständnis dieser Maschinen, mit denen wir arbeiten, äußerst hilfreich für die Überlegungen, wie die VM arbeiten soll.

      Es kann sehr hilfreich und inspirierend sein, den Code quelloffener, virtueller Maschinen anderer Sprachen zu überfliegen. Meine Lieblings-Quelle war und ist stets die VM von Lua. Sie ist schlank, verständlich, in C implementiert, und basiert im Gegensatz zu vielen anderen Scriptsprachen-VMs auf einer Register-Maschine statt einer Stapelmaschine. Es wäre natürlich vorteilhaft, die entsprechende Sprache zu verstehen, in der man auch die eigene VM implementieren will. Weiterhin ist es äußerst vorteilhaft, eine leistungsstarke und bequeme Sprache wie C++ zu beherrschen, um die VM zu implementieren. Und bevor irgendwer auf die Idee kommt: Assembly ist NICHT als dominierende Sprache für den Bau einer VM geeignet. Wer die Frage des "Warum?" nicht beantworten kann, sollte zunächst die gewählte Sprache und Assembly hinreichend verstehen lernen, und es dann erneut mit der Frage versuchen. Es lohnt sich dennoch, Assembly zu lernen. Allein schon, um erneut das Verständnis zu vertiefen, zumal ihr mehr oder weniger gezwungen seid, auch für eure VM eine Assembler-Sprache zu entwickeln (Außer natürlich ihr schreibt eure Test-Programme Bit für Bit ;3).
  • :locale: enfin

    Je ne peux pas parler français.
    C'est tout ce que Goodle et les restes de cours de français.
Signaturstand: 24.07.2013

4

Montag, 13. Dezember 2010, 19:09

Leider brauche ich diese Option, um Häuser, Mühlen, whatever einzufügen, um nach einem Mapwechsel wieder darauf zurückgreifen zu können.

Wie kann ich denn Manuell diese Clone Events speichern?

Eigentlich wollte ich es vermeiden vorgefertigte Events einzubauen,weil damit die Auswahl eingeschränkt wird wo ich zb. bauen kann.

@Playm :
Das Event Position halten Script klappt leider nicht.

Danke für eure Antworten Playm und Evrey.
Realität ist auch nur eine Art von Rollenspiel.

5

Montag, 13. Dezember 2010, 19:41

Nun, du könntest die Events auch bei jedem Mapaufruf einfach erneut kopieren. So wird es normalerweise gemacht. Möchtest du aber das Event in einem ganz bestimmten Zustand speichern bzw. auf einer geanz bestimmten Position speichern, musst du das auf anderem Wege ermöglichen. Vielleicht solltest du einfach mal genau erläutern, was deine Events tun sollen. Momentan kann man nämlich nur raten, für welches Problem du eigentlich konkret einen Workaround brauchst. Manchmal kann die Lösung so simpel sein...

6

Montag, 13. Dezember 2010, 19:52

Hi Alexis,

Es geht eigentlich nur darum, dass ich mit Eingabetasten Events plazieren kann wohin ich will.(Natürlich nicht auf Passagen die mit einem x gekenntzeichnet sind.) .
z.b. Ich möchte mit der Taste A Häuser platzieren.Mit der Taste W möchte ich z.b Kornmühlen platzieren.usw.
Das Clone-Event Script hat es mir damit sehr einfach gemacht.Leider verschwinden die geklonten Events nach einem
Mapwechsel.
Wenn du mir eine andere Lösung dazu bieten kannst,wäre ich dir sehr dankbar.

MFG
Realität ist auch nur eine Art von Rollenspiel.

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

7

Montag, 13. Dezember 2010, 23:16

Die einfachste Lösung wäre es mMn. wie Playm bereits schrieb die Eventinformationen einfach mitzuspeichern und die Eventklone beim Wiederbetreten der Map neu zu setzen:
Spoiler

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
class Game_Map
 
  alias_method(:initialize_ILC13122010, :initialize) unless private_method_defined?(:initialize_ILC13122010)
  alias_method(:setup_ILC13122010, :setup) unless method_defined?(:setup_ILC13122010)
  alias_method(:add_event_ILC13122010, :add_event) unless method_defined?(:add_event_ILC13122010)
 
  def initialize
    initialize_ILC13122010
    @saved_clones = Hash.new
  end
 
  def setup(map_id)
    setup_ILC13122010(map_id)
    sce = @saved_clones[map_id]
    sce.each {|se| add_event_ILC13122010(*se)} unless sce.nil?
  end
 
  def add_event(*args)
    if args.size == 5 and args.pop
      sc = @saved_clones
      sc[@map_id].nil? ? sc[@map_id] = [args] : sc[@map_id].push(args)
    end
    add_event_ILC13122010(*args)
  end
end
zum Lesen den Text mit der Maus markieren

(das Script dürfte zwar weniger ideal sein, aber funktionieren sollte es)

Das Script sollte unter dem "Events-Klonen"-Script eingefügt werden. Um ein erstelltes Event zu speichern muss $game_map.add_event(map_id,id,x,y, true) anstatt $game_map.add_event(map_id,id,x,y) aufgerufen werden. Abgespeicherte Eventklone gelten allerdings nur für den aktuellen Spielstand.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Irrlicht« (14. Dezember 2010, 21:31)


8

Dienstag, 14. Dezember 2010, 01:08

Hallo Irrlicht,
Leider bekomme ich diesen Fehler wenn ich dein Script unter dem Event-Clone Script einfüge.

BildAttachment 14702

Im Scripteditor wird die Zeile 5 angezeigt :

alias_method(:add_event_ILC13122010, :add_event) unless method_defined?(:add_event_ILC13122010)

Kannst du mir irgendwie genauer erklären, wie das mit dem Eventinformation mitzuspeichern funktioniert?

EDIT : Ich benutzte das Event-Clone Script, dass ich in der ersten Post im Spoiler gepackt habe.
Das andere, dass mir von Playm (Events-klonen V1.1) gezeigt wurde, damit komme ich nicht ganz klar.Ich weiss dann nicht wie ich
Events auf auf meine aktuelle Cursorposition erscheinen lassen kann.
(Also wenn ich z.b. die W Taste drücke, soll das Event dort ercheinen wo ich mich gerade mit meinem steuerbaren Cursor befinde.)

Wenn es dir nicht zu umständlich ist, könntest du mir eine kleine Demo dazu machen ?
Du kannst auch die Demo von mir in der ersten Post dazu benutzen.

MFG
Realität ist auch nur eine Art von Rollenspiel.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Asandril« (14. Dezember 2010, 00:57)


Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

9

Dienstag, 14. Dezember 2010, 06:48

Zitat

Leider bekomme ich diesen Fehler wenn ich dein Script unter dem Event-Clone Script einfüge.

Sicher, dass du das gemacht hast? oô

Der Fehler tritt auf, wenn die Skripte in der falschen Reihenfolge eingefügt sind. Und wenn ich sie richtig herum einfüge, klappts ohne Fehler.


@ Irrlicht: Besserer Code :P
Spoiler: Coooode :o

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
class Game_Map
 
  alias_method(:irrlicht_save_cloned_events_game_map_initialize, :initialize)
  alias_method(:irrlicht_save_cloned_events_game_map_setup, :setup)
  alias_method(:irrlicht_save_cloned_events_game_map_add_event, :add_event)
 
  def initialize
    irrlicht_save_cloned_events_game_map_initialize
    @saved_clones = Hash.new {[]}
  end
 
  def setup(map_id)
    irrlicht_save_cloned_events_game_map_setup(map_id)
    @saved_clones[map_id].each do |se|
      irrlicht_save_cloned_events_game_map_add_event(*se)
    end
  end
 
  def add_event(*args)
    @saved_clones[@map_id].push(args)
    irrlicht_save_cloned_events_game_map_add_event(*args)
  end
end
zum Lesen den Text mit der Maus markieren
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

10

Dienstag, 14. Dezember 2010, 08:53

Zitat

Sicher, dass du das gemacht hast? oô
Ich habe tatsächlich etwas falsch gemach.Habe das Script von meiner ersten Post für das Script von Irrlicht benutzt.
Mit dem Event klonenV1.1 klappt es.

@Neo: Bei deinem script funktioniert dieser Befehl nicht mehr : $game_map.add_event(2,1,4,4, true)
Beim Script von Irrlicht schon.Die geklonten Events bleiben auch endlich nach einem Mapwechsel vorhanden (Hurra) ;)

Bleibt jetzt immer noch diese Frage :

Ich weiss nicht wie ich Events auf auf meine aktuelle Cursorposition erscheinen lassen kann.
Also wenn ich z.b. die W Taste drücke, soll das Event dort ercheinen wo ich mich gerade mit meinem steuerbaren Cursor befinde.

MFG
Realität ist auch nur eine Art von Rollenspiel.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Asandril« (14. Dezember 2010, 08:51)


Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

11

Dienstag, 14. Dezember 2010, 10:59

@Neo-Bahamut:
Das einzige Problem daran ist dass, wenn "default" aufgerufen wird, immer die selbe Instanz des Arrays zurückgegeben wird und die Argumente folglich alle in das selbe Array eingefügt werden. :P

@Asandril: Das liegt halt daran, dass das Script, das du in den Spoiler gepackt hast, eben nicht das Script war, das du verwendest...

ansonsten kannst du auch andere Variablen anstatt feste Zahlen im Script einsetzen:
Spoiler

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
$game_switches[ id ]             # Wert des Switches mit der ID id (ON -> true, OFF -> false; dieser Wert ist keine Zahl!)
$game_variables[ id ]            # Wert der Variablen mit der ID id
$game_player.x                   # x-Koordinate des Spielers
$game_player.y                   # Y-Koordinate des Spielers
$game_player.real_x              # "wirkliche" X-Koordinate des Spielers. Ein Tile ist dabei in 128 Zwischenschritte unterteilt.
$game_player.real_y              # "wirkliche" Y-Koordinate des Spielers. Ein Tile ist dabei in 128 Zwischenschritte unterteilt.
$game_map.events[ id ].x         # X-Koordinate des Events mit der ID id
$game_map.events[ id ].y         # Y-Koordinate des Events mit der ID id
$game_map.map_id                 # aktuelle Map-ID
$game_party.actors[ index ].id   # ID des Actors an Stelle index in der Party (index = 0, 1, 2, 3)
 
etc.
zum Lesen den Text mit der Maus markieren

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Irrlicht« (14. Dezember 2010, 15:52)


12

Dienstag, 14. Dezember 2010, 12:04

Zitat

@Asandril: Das liegt halt daran, dass das Script, das du in den Spoiler
gepackt hast, eben nicht das Script war, das du verwendest...
Tatsache.Ich habe das falsche Script oben im Spoiler eingegeben.Sorry

Wäre es möglich mit diesem Script, was ich jetzt unten eingefügt habe, auch so ein Script zu schreiben, wie das für das
Event Clonen V1.1, so das nach einem Mapwechsel auch hier meine geklonten Events bleiben?
Weil ich mit dem Script was ich jetzt verwende, auch im Spiel meine Events platzieren kann wohin ich will.

Spoiler

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
class Spriteset_Map
  def add_character(char)
	@character_sprites << Sprite_Character.new(@viewport1, char)
  end
	def redraw_characters
	if @character_sprites != nil
  	@character_sprites.each do |i|
    	i.dispose
    	end
    	end
	@character_sprites = []
	for i in $game_map.events.keys.sort
  	sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  	@character_sprites.push(sprite)
	end
	@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  end
end
 
class Scene_Map
  attr_reader :spriteset
end
 class Game_Map
  def clone_event(map_id, event_id)
	# Get ID
	id = @events.size
	while @events[id] != nil
  	id += 1
	end
	# Load Event
	map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
	rpgev = map.events[event_id].dup
	rpgev.id = id
	# Set Event
	event = @events[id] = Game_Event.new(@map_id, rpgev)
	# Refresh Map
	$scene.spriteset.add_character(event)
	refresh
	# Return
	return event
  end
   def only_event_passable?(x, y, d, self_event = nil)
	unless valid?(x, y)
  	return false
	end
	$game_map.events.each_value do |event|
  	if event.x == x and event.y == y and !event.through
    	return false if event.character_name != ''
  	end
	end
	return true
 	end
  end
class Interpreter
  def clone_event(map_id, event_id)
	$game_map.clone_event(map_id, event_id)
  end
end
zum Lesen den Text mit der Maus markieren


MFG
Realität ist auch nur eine Art von Rollenspiel.

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

13

Dienstag, 14. Dezember 2010, 15:11

Spoiler: Code

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
class Spriteset_Map
  def add_character(char)
    @character_sprites << Sprite_Character.new(@viewport1, char)
  end
 
  def redraw_characters
    if @character_sprites != nil
      @character_sprites.each do |i|
        i.dispose
      end
    end
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  end
end
 
class Scene_Map
  attr_reader :spriteset
end
 
class Game_Map
  alias_method :save_clones_initialize, :initialize
  alias_method :save_clones_setup, :setup
 
  def initialize
    @saved_clones = Hash.new {[]}
    save_clones_initialize
  end
 
  def setup(id)
    save_clones_setup(id)
    @saved_clones[id].each do |i|
      @events[i.id] = i
    end
  end
 
  def clone_event(map_id, event_id, save_memory)
    # Get ID
    id = @events.size
    while @events[id] != nil
      id += 1
    end
    # Load Event
    map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
    rpgev = map.events[event_id].dup
    rpgev.id = id
    # Set Event
    event = @events[id] = Game_Event.new(@map_id, rpgev)
    # Save
    if save_memory
      i = @saved_clones[self.map_id]
      i.push(event)
      @saved_clones[self.map_id] = i
    end
    # Refresh Map
    $scene.spriteset.add_character(event)
    refresh
    # Return
    return event
  end
 
  def only_event_passable?(x, y, d, self_event = nil)
    unless valid?(x, y)
      return false
    end
    $game_map.events.each_value do |event|
      if event.x == x and event.y == y and !event.through
        return false if event.character_name != ''
      end
    end
    return true
  end
end
 
class Interpreter
  def clone_event(map_id, event_id, save_memory = false)
    $game_map.clone_event(map_id, event_id, save_memory)
  end
end
zum Lesen den Text mit der Maus markieren


Zitat

Das einzige Problem daran ist dass, wenn "default" aufgerufen wird, immer die selbe Instanz des Arrays zurückgegeben wird und die Argumente folglich alle in das selbe Array eingefügt werden. :P

Das einzige Problem an dieser Aussage ist, dass "default" gar nicht aufgerufen wird, sondern "default_proc" ;)
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

14

Dienstag, 14. Dezember 2010, 15:30

Zitat

Das einzige Problem an dieser Aussage ist, dass "default" gar nicht aufgerufen wird, sondern "default_proc" ;)
Meinetwegen, Punkt für dich :P

Ändert aber trotzdem nichts an der Tatsache dass bei mir das passiert:

a = Hash.new([])
a[1].push("bla")
a[2].push("blubb")
p a[2] # ["bla","blubb"]



ED: Naaa gut, wieder mein Fehler^^

Neo-Bahamut

Himmelsgleicher

Motto: Wer anderen eine Bratwurst brät, der hat ein Bratwurstbratgerät.

  • Nachricht senden

15

Dienstag, 14. Dezember 2010, 15:33

Zitat

Ändert aber trotzdem nichts an der Tatsache dass bei mir das passiert:

Dann setz dich nun hin und vergleiche unsere beiden Zeilen und verlasse den Stuhl nicht ehe du den Unterschied gefunden hast ;)
Spoiler: Wurstinator
zum Lesen den Text mit der Maus markieren

Spoiler: Lazer-Wurst
zum Lesen den Text mit der Maus markieren

Spoiler: Hallowurst
zum Lesen den Text mit der Maus markieren

16

Dienstag, 14. Dezember 2010, 16:03

Leute das Thema ist gegessen(vorerst).
Ich habe es geschafft beide Clone Scripts miteinander zu verbinden und das Script von Irrlicht hilft mir dabei nach einem
Mapwechsel die geklonten Events zu behalten.Ich habe eine kleine änderung im Event klonenV1.1 Script gemacht.
Diese Zeile :

def add_event(map_id,id,x=$game_variables[1],y=$game_variables[2])

In Common Event kam noch diese Zeile hinzu :

$game_map.add_event(2,7,
x=$game_variables[1],
y=$game_variables[2], true)

Kurz und gut, habe ich die Demo in der ersten Post noch mal geupdatet.
Ich kann jetzt mit der Taste W beliebig viele Events klonen und mit der Taste Z zwischen den beiden Maps hin und her
wechseln.Die geklonten Events bleiben trotzdem nach einem Mapwechsel vorhanden.

Ein großes Dankeschön an Euch allen die mir bei meinem Problem beigestanden haben.Und ein ganz
besonderes Dankeschön geht an Irrlicht für das Script, ohne dass das ganze wohl nicht funktioniert hätte.

MFG
Realität ist auch nur eine Art von Rollenspiel.

17

Dienstag, 14. Dezember 2010, 20:07

Respekt. Gute Arbeit! Dannach habe ich schon lange gesucht und hätte nicht gedacht, dass es so einfach gelöst wird.

Fragen hätte ich aber dennoch. Zunächst, gibt es Erklärungen zu dem Demo? In dem Common Event "Plant Tree" wird ja häufig der Script Call verwendet. Gehe ich recht mit der Annahme aus, dass ich die Calls vor dem Conditional Branch und den Branch selber nicht brauchen, wenn mir die Passability egal ist?

Und wozu brauche ich den ersten Script Call innerhalb des Conditional Branches "event = clone_event(1,2)...event.moveto(x,y)"? Teleportiert moveto nicht nur innerhalb einer map? Würde letztendlich nur der Befehl "$game_map.add_event(map-id,event-id,x,y)" reichen?

Schließlich die letzte Frage, ist das "true" am Ende des "add-Befehls" ("$game_map.add_event(map-id,event-id,x,y,true)") dafür da, ob das geclonte Event gespeichert wird?

Ich hoffe ich löchere euch nicht zu viel. Bin auch mit einem Link der meine Fragen beantwortet vollstens zufrieden. :)

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

18

Dienstag, 14. Dezember 2010, 22:55

1) Der Script-Befehl im Conditional Brach fragt ab:

- ob die Zielposition gültig ist (= auf der Map liegt) und sich dort keine Events befinden (Ausnahmen sind Events die auf "through" gestellt sind und/oder einen leeren Namen haben)
- ob das Feld passierbar oder die Terrain-ID = 7 ist.

Damit die Bedingung erfüllt ist müssen beide Punkte zutreffen. Wenn der zweite Punkt egal sein soll müsstest du den Teil && (@mappass || @ttag == 7) löschen. Damit würden auch die letzten beiden Zeilen im Scriptbefehl darüber überflüssig (da @mappass und @ttag nicht mehr gebraucht werden)

2) Das Script, das in der Demo verwendet wird ist ein anderes als das, welches im ersten Post im Spoiler gepostet wurde.
Erstere Fassung kennt kein $game_map.add_event(map-id,event-id,x,y), sondern verwendet stattdessen clone_event(map_id,event_id).
Da in dem Befehl die Position noch nicht korrigiert wird geschieht das dort anschließend über event.moveto(x,y).

3) wird true als 5ter Wert eingesetzt, wird das Event gespeichert, wird false oder gar kein Wert eingesetzt wird es nicht gespeichert.
Wenn du die Scriptfassung aus der Demo verwenden solltest müsstest du allerdings auf das Script, das Neo-Bahamut in Post#13 gepostet hat zurückgreifen (sonst: siehe Post #8).

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Irrlicht« (15. Dezember 2010, 10:43)


19

Mittwoch, 15. Dezember 2010, 19:06

Hey Leute,

nun habe ich auch das (wundervolle!) Event-Clone Script für mich entdeckt und es passt perfekt in meinen Mode7-Zombie-Shooter. Nur fehlen mir jetzt komplett die Battle Animations - d.h. sie werden garnicht erst angezeigt (wenn ein Zombie bspw. angeschossen wird und es Blut spritzen soll). Weiß jemand was ich dagegen tun kann? Für ein Shoot-lastiges Spiel ist das Scrip nämlich Gold wert.. :D

Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

20

Mittwoch, 15. Dezember 2010, 20:38

Mmm, bei mir werden Animationen auch auf "geklonte" Events abgespielt, auch wenn ich das Mode-7-Script verwende...

Sicher dass das Problem mit den Klon-Events zusammenhängt?
Wenn ja wäre es gut zu wissen welche Scripts du alles verwendest und insbesondere wie du die Animation auf die Klon-Events aufrufst.

Social Bookmarks