• Anmelden

1

Sonntag, 26. Juli 2009, 20:04

Kompass Skript

Hallo,
ich bin auf der Suche nach einem Kompass-Skript mit folgender Funktionalität:
- wahlweises Anzeige einer Kompassrose mit Kompassnadel auf der Karte, z.B. in der rechten oberen Ecke
- Kompassnadel zeigt vom Spieler aus gesehen in die Richtung eines definierten Punktes der Karte

Vielen Dank für alle Informationen.

Marco.
Vielen Dank für jede Information.

Marco

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

2

Mittwoch, 29. Juli 2009, 23:01

War noch ne Woche und ich hab mein Script fertig, bin nämlich gerade daran so eins zu Scripten... Leide nur gerade leider an chronischem Zeitmangel.
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

3

Mittwoch, 5. August 2009, 13:45

Hallo Hindi,
danke für Deinen Hinweis.
Will ja nicht drängeln, aber wie schauts aus?

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

4

Freitag, 7. August 2009, 14:05

Das sollte eigentlich bald in der Scriptdatabase erscheinen, aba ich kanns dir ja torztdme mal hier posten.
Schön in den Credits erwähnen ;-) und wenn was bugt, melden!
Spoiler: by Hindi

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
#
#=============================|
# Minimapscript v.1.0         |
#=============================|
#
#------------------------------|
# Credits:                     |
# Bitmap.draw_circle: By Saiko |
# Rest: By Hindi               |
#------------------------------|
#
#
#-------------------------------------------------------------------------------
# Beschreibung:
#-------------------------------------------------------------------------------
=begin
  Dieses RGSS Skript erzeugt eine Minimap. Um es zu nutzen müsst ihr es zunächst
  im Script Editor oberhalb der Main einfügen. Anschließent könnt ihr mit dem
  Eventbefehl "Script" folgenden Code mit Parameter einfügen:
  Leichter Code:
  Mini.map.anzeigen_easy(x, y, width, height, zoom[, style])
  Forgeschritten:
  Mini.map.anzeigen(rect, zoom[, style])
 
  Es ist relativ egal, welchen der beiden Codes ihr hernehmt, im 
  Forgeschrittenen ist der einzigste unterschied, dass ihr ein Rect erstellen 
  müsst, im einfach wird hingegen einfach ein Rect von selbst erstellt.
=end
#
#
#
#-------------------------------------------------------------------------------
# Anleitugn:
#-------------------------------------------------------------------------------
=begin
  erstmal mich (Hindi) für das Minimap Script und Saiko für das draw_circle
  Script, in den Credits erwähnen, dann:
=end
=begin
  Zur Minimap:
 
  Als Beispiel will ich den leichten Code nehmen:
  Mini.map.anzeigen_easy(x, y, width, height, zoom[, style])
 
  Hier stehen X und Y für die Koordinaten wo ihr die Minimap anzeigen lassen 
  wollt.
 
  Width und height, müsst ihr standartgemäß auf 0 stellen, es sei denn, ihr wollt
  einen kleinen Radar erstellen, denn dann könnt ihr damit die größe der Minimap
  bestimmen.
 
  Zomm bestimmt die größe der Minimap in jedem Falle. Die Minimap ist im Standart
  genau so groß wie die richtige Map. Der zoom wird in % angegeben... So wollt ihr
  30% der orginal größe, so müsst ihr 0.3 einsetzen.
 
  Style ist standartgemäß auf 1 gestellt, d.h. es wird der Style "normal"
  angezeigt, wollt ihr einen anderen Style, dann setzt dort eine andere Zahl ein.
  Im moment gibt es bei dieser Version nur einen 2. Style (ihr könnt nur als
  alternative die Zahl 2 einsetzen).
 
  Weitere befehle:
 
  Mit
  Mini.map.zoom(zoom_x, zoom_y)
  könnt ihr auf der X und Y Achse die Größe der Minimap verändern.
 
  Mit
  Mini.map.mini
  könnt ihr abfragen ob die Minimap angezeigt wird, es wird True oder False
  zurrück gegeben.
 
  Mit
  Mini.map.viewport_on
  könnt ihr abfragen ob gerade ein Radar angezeigt wird oder die ganze Map.
  Fals der Radar angezeigt wird, wird True returnt, andernfalls False.
 
 
 
  Mit
  Mini.map.dispose
  könnt ihr die Minimap wieder verschwinden lassen.
 
  Zu Missionen:
 
  Mit
  Mini.map.add_mission(x, y[, id])
  könnt ihr auf der Minimap einen Punkt auf der Koordinate X und Y anzeigen
  lassen. ID könnt ihr optional mit einer ID von einem Event ersetzen, dessen
  X und Y Koordinate wird dann auf der Minimap Grau angezeigt.
 
  Mit
  Mini.map.sub_mission(x, y[, id])
  könnt ihr einen Missionspunkt von der Minimap verschwinden lassen, mit X, Y und
  ID müsst ihr das selbe machen wie bei add_mission schon beschriebenen.
 
  Mit
  Mini.map.aktiv_mission?(x, y[, id])
  Überprüft ihr ob auf X, Y gerade ein Missionspunkt ist. X, Y und ID sind wieder
  mit dem selben zu ersetzen wie bei den beiden vorherigen Erleuterungen.
=end
#
#
#-------------------------------------------------------------------------------
# Game_Map:
#-------------------------------------------------------------------------------
class Game_Map
  attr_accessor :map
  def field_passable?(x, y, d, self_event = nil)
    return $game_map.passable?(x, y, d, self_event)
  end
end
#-------------------------------------------------------------------------------
# Interpreter:
#-------------------------------------------------------------------------------
class Interpreter
  alias minimap_update command_201
  def command_201
    minimap_update
    Mini.map.update if Mini.map.mini
  end
end
#-------------------------------------------------------------------------------
# Game_Player:
#-------------------------------------------------------------------------------
class Game_Player
  alias minimap_update update
  def update
    minimap_update
    Mini.map.update if Input.dir4 != 0 && Mini.map.mini
  end
end
#-------------------------------------------------------------------------------
# Bitmap:
#-------------------------------------------------------------------------------
class Bitmap
  def draw_circle(ox, oy, r, color)
    r.times do |x|
      y = r - Math.sqrt((r / 2.0) ** 2 - (x - r / 2.0) ** 2) - r
      self.fill_rect(ox + x - r / 2, oy + y, 1, -y * 2, color)
    end
  end
end
#-------------------------------------------------------------------------------
# Minimap:
#-------------------------------------------------------------------------------
class Minimap
  # mini == true fals die Minimap angezeigt wird
  # mission == true fals eine Mission aktiv ist
  attr_reader :mini, :viewport_on
  attr_accessor :mission
  def anzeigen_easy(x, y, width, height, zoom, style=1)
    rect = Rect.new(x, y, width, height)
    anzeigen(rect, zoom, style)
  end
  def anzeigen(rect, zoom, style=1)
    @style = style
    # Pfad des Tiles
    @pfad = RPG::Cache.tileset($game_map.tileset_name)
    @pfad_autotiles = Array.new
    for i in 0..6
      @pfad_autotiles[i] = RPG::Cache.autotile($game_map.autotile_names[i])
    end
    zoom_x, zoom_y = zoom, zoom
    @mini = true
    # Arrays erstellen
    # Alle wichtigen Variablen
    @map_width, @map_height  = $game_map.map.width, $game_map.height
    @zoom_x, @zoom_y         = zoom_x, zoom_y
    @x, @y                   = rect.x, rect.y
    @rect                    = rect
    # Missionen Table erstellen
    @missionen = Table.new(@map_width, @map_height)
    # Erstelle den Viewport
    if rect.width != 0 && rect.height != 0
      @viewport_on = true
      @viewport = Viewport.new(rect)
    else
      @viewport_on = false
      @viewport = Viewport.new(rect.x, rect.y, @map_width * 32, @map_height * 32)
    end
    # Erstelle die Farben
    @blue_hell               = Color.new( 50,  50, 255, 100)
    @blue_dunkel             = Color.new(  0,   0, 100, 200)
    @red                     = Color.new(255,   0,   0, 200)
    @green                   = Color.new(  0, 255,   0, 200)
    @weiss                   = Color.new(  0,   0,   0, 255)
    @grau                    = Color.new(100, 100, 100)
    # Erstelle den Playerpunkt
    @player                  = Sprite.new
    @player.z                = 1
    @player.bitmap           = Bitmap.new(32, 32)
    @player.bitmap.draw_circle(16, 16, 32, @red)
    @player.zoom_x           = @zoom_x
    @player.zoom_y           = @zoom_y
    # Erstelle die Minimap
    @minimap                 = Sprite.new(@viewport)
    @minimap.bitmap          = Bitmap.new(@map_width * 32, @map_height * 32)
    show_minimap(style)
    update
  end
  def update
    show_minimap(@style)
    update_mission
    # Pfad des Tiles
    @pfad = RPG::Cache.tileset($game_map.tileset_name)
    if @viewport_on
    else
      # Berechnen der X und Y Koordinaten des Helden
      x = $game_player.x * 32 * @zoom_x
      y = $game_player.y * 32 * @zoom_y
      # Setzt den Playerpunkt neu
      @player.x = @rect.x * 2 + x
      @player.y = @rect.y * 2 + y
    end
  end
  def show_minimap(style)
    @minimap.bitmap.clear if @minimap.bitmap != nil
    # Erstellen der Minimap
    @minimap.x               = @rect.x
    @minimap.y               = @rect.y
    @minimap.zoom_x          = @zoom_x
    @minimap.zoom_y          = @zoom_y
    # Setzte die Minimap und den Playerpunkt an die richtige Stelle
    if @viewport_on == true
      @player.x = @rect.x + @rect.width / 2
      @player.y = @rect.y + @rect.height / 2
      x, y = $game_player.x * 32 * @zoom_x, $game_player.y * 32 * @zoom_y
      @minimap.x = @player.x - x - @rect.x
      @minimap.y = @player.y - y - @rect.y
    end
    case style
    when 1
      normal #<= Style "normal" aufrufen
    when 2
      classic #<= Style "classic" aufrufen
    end
    # Setzte die Eventpunkte
    for i in $game_map.events.keys
      x, y = $game_map.events[i].x * 32 * @zoom_x, $game_map.events[i].y * 32 * @zoom_y
      @minimap.bitmap.draw_circle(events_x(i), events_y(i), 16, @green) if @viewport_on == true
      @minimap.bitmap.draw_circle(@rect.x + x * 32, @rect.y + y * 32, 16, @green) if @viewport_on == false
    end
  end
  # Minimap im Normal - Style
  def normal
    @minimap.opacity = 200
    for x in 0..@map_width
      for y in 0..@map_height
        for z in 0..2
          if $game_map.data[x, y, z] != nil
            if $game_map.data[x, y, z] >= 384
              var = $game_map.data[x, y, z] - 384
              xx, yy = var % 8, var / 8
              @minimap.bitmap.blt(x * 32, y * 32, @pfad, Rect.new(xx * 32, yy * 32, 32, 32))
            end
          end
        end
      end
    end
  end
  # Minimap im Classic - Style
  def classic
    for xx in 0..@map_width
      for yy in 0..@map_height
        if $game_map.field_passable?(xx, yy, 0)
          @minimap.bitmap.fill_rect(xx * 32, yy * 32, 32, 32, @blue_hell)
        else
          @minimap.bitmap.fill_rect(xx * 32, yy * 32, 32, 32, @blue_dunkel)
        end
      end
    end
  end
  # Gibt X - Achse zurrück
  def events_x(i)
    x = $game_map.events[i].x
    return @rect.x + (x * 32)
  end
  # Gibt Y - Achse zurrück
  def events_y(i)
    y = $game_map.events[i].y
    return @rect.y + (y * 32)
  end
  # Verändert den Zoom
  def zoom(zoom_x, zoom_y)
    @minimap.zoom_x, @minimap.zoom_y = zoom_x, zoom_y
    @player.zoom_x, @player.zoom_y   = zoom_x, zoom_y
    @events.zoom_x, @events.zoom_y   = zoom_x, zoom_y
  end
  # Dispose alle Bilder die durch dieses Modul erzeugt wurden
  def dispose
    @mini = false # <= Minimap wird angezeigt == false
    @minimap.bitmap.dispose # <= Dispose Minimap
    @player.bitmap.dispose # <= Dispose Playerpunkt
  end
  #-----------------------------------------------------------------------------
  # Autotiles:
  #-----------------------------------------------------------------------------
  def autotiles(x, y, z)
    t_x = nil
    if $game_map.data[x, y, z] < 384 && $game_map.data[x, y, z] >= 336
      t_x = 6
      sub = $game_map.data[x, y, z] - 384 + 96 - 48
    elsif $game_map.data[x, y, z] < 336 && $game_map.data[x, y, z] >= 288
      t_x = 5
      sub = $game_map.data[x, y, z] - 336 + 96 - 48
    elsif $game_map.data[x, y, z] < 288 && $game_map.data[x, y, z] >= 240
      t_x = 4
      sub = $game_map.data[x, y, z] - 288 + 96 - 48
    elsif $game_map.data[x, y, z] < 240 && $game_map.data[x, y, z] >= 192
      t_x = 3
      sub = $game_map.data[x, y, z] - 240 + 96 - 48
    elsif $game_map.data[x, y, z] < 192 && $game_map.data[x, y, z] >= 144
      t_x = 2
      sub = $game_map.data[x, y, z] - 192 + 96 - 48
    elsif $game_map.data[x, y, z] < 144 && $game_map.data[x, y, z] >= 96
      t_x = 1
      sub = $game_map.data[x, y, z] - 144 + 96 - 48
    elsif $game_map.data[x, y, z] < 96 && $game_map.data[x, y, z] >= 48
      t_x = 0
      sub = $game_map.data[x, y, z] - 96 + 96 - 48
    end
    pfad = @pfad_autotiles[t_x] if t_x != nil
    x1, x2, x3, x4 = nil, nil, nil, nil
    y1, y2, y3, y4 = nil, nil, nil, nil
    case sub
    when 0
      x1, x2, x3, x4 = 1, 1.5,   1, 1.5
      y1, y2, y3, y4 = 2,   2, 2.5, 2.5
    when 1
      x1, x2, x3, x4 = 2, 1.5,   1, 1.5
      y1, y2, y3, y4 = 0,   2, 2.5, 2.5
    when 2
      x1, x2, x3, x4 = 1, 2.5,   1, 1.5
      y1, y2, y3, y4 = 2,   0, 2.5, 2.5
    when 3
      x1, x2, x3, x4 = 2, 2.5,   1, 1.5
      y1, y2, y3, y4 = 0,   0, 2.5, 2.5
    when 4
      x1, x2, x3, x4 = 1, 1.5,   1, 2.5
      y1, y2, y3, y4 = 2,   2, 2.5, 0.5
    when 5
      x1, x2, x3, x4 = 2, 1.5,   1, 2.5
      y1, y2, y3, y4 = 0,   2, 2.5, 0.5
    when 6
      x1, x2, x3, x4 = 1, 2.5,   1, 2.5
      y1, y2, y3, y4 = 2,   0, 2.5, 0.5
    when 7
      x1, x2, x3, x4 = 2, 2.5,   1, 2.5
      y1, y2, y3, y4 = 0,   0, 2.5, 0.5
    when 8
      x1, x2, x3, x4 = 1, 1.5,   1, 1.5
      y1, y2, y3, y4 = 2,   2, 2.5, 2.5
    when 9
      x1, x2, x3, x4 = 1, 1.5,   2, 1.5
      y1, y2, y3, y4 = 2,   2, 0.5, 2.5
    when 10
      x1, x2, x3, x4 = 2, 1.5,   2, 1.5
      y1, y2, y3, y4 = 0,   2, 0.5, 2.5
    when 11
      x1, x2, x3, x4 = 1, 2.5,   2, 1.5
      y1, y2, y3, y4 = 2,   0, 0.5, 2.5
    when 12
      x1, x2, x3, x4 = 1, 1.5,   1, 1.5
      y1, y2, y3, y4 = 2,   2, 2.5, 2.5
    end
    if pfad != nil
      @minimap.bitmap.blt(x * 32,      y * 32,      pfad, Rect.new(x1 * 32, y1 * 32, 16, 16)) if x1 != nil
      @minimap.bitmap.blt(x * 32 + 16, y * 32,      pfad, Rect.new(x2 * 32, y2 * 32, 16, 16)) if x2 != nil
      @minimap.bitmap.blt(x * 32,      y * 32 + 16, pfad, Rect.new(x3 * 32, y3 * 32, 16, 16)) if x3 != nil
      @minimap.bitmap.blt(x * 32 + 16, y * 32 + 16, pfad, Rect.new(x4 * 32, y4 * 32, 16, 16)) if x4 != nil
    end
  end
  #-----------------------------------------------------------------------------
  # Missionen:
  #-----------------------------------------------------------------------------
  # Missoin hinzufügen
  def add_mission(x, y, id=nil)
    if x == nil && y == nil
      x, y = $game_map.events[i].x, $game_map.events[i].y
    end
    @missionen[x, y] = 1
    update_mission
  end
  # Mission enfernen
  def sub_mission(x, y, id=nil)
    if x == nil && y == nil
      x, y = $game_map.events[i].x, $game_map.events[i].y
    end
    @missionen[x, y] = 0
    update
  end
  # Missionen updaten
  def update_mission
    for x in 0..@map_width
      for y in 0..@map_height
        if @missionen[x, y] == 1
          if @viewport_on
            xx, yy = x * 32, y * 32
            x = @rect.width  if xx > @rect.height
            y = @rect.height if yy > @rect.height
            x += @minimap.x - @viewport.rect.x  if @minimap.x - xx < @viewport.rect.x
            y = @rect.y                         if yy < @rect.y
            x += 32
            y += 32
          else
            x *= 32
            y *= 32
          end
          @minimap.bitmap.draw_circle(x + 16, y + 16, 32, @grau)
        end
      end
    end
  end
  # Überpfürft ob eine Mission auf X, Y aktiv ist
  def aktiv_mission?(x, y, id=nil)
    if x == nil && y == nil
      x, y = $game_map.events[i].x, $game_map.events[i].y
    end
    return @missionen[x, y] == 1
  end
end
#-------------------------------------------------------------------------------
# Modul in die, die Klasse "Minimap" gelegt wird:
#-------------------------------------------------------------------------------
module Mini
  class <<self
    attr_accessor :map
  end
end
# Öffnen der Minimap - Klasse
Mini.map = Minimap.new if Mini.map == nil
zum Lesen den Text mit der Maus markieren
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Evrey

Oberschurke im Ruhestand

Motto: "Satzzeichen sind keine Rudeltiere." - Chesra

  • Nachricht senden

5

Samstag, 8. August 2009, 02:16

Spoiler: @Hindis Script

Ruby Quellcode

1
2
3
4
5
6
class Game_Map
  attr_accessor :map
  def field_passable?(x, y, d, self_event = nil)
    return $game_map.passable?(x, y, d, self_event)
  end
end

Macht das selbe wie die Methode "passable?", nur mit dem Unterschied, dass hier ein Bug entstehen kann. Du leitest auf eine Instanz dieser Klasse um, die genau das selbe tut, wobei es noch passieren kann, dass die Instanz nicht definiert wäre. Nenne deine Map z.B. mal nicht $game_map sondern $rgss_map oder so, dann funktzt der Code nicht. Streich die Methode...!

Ruby Quellcode

1
2
3
4
5
6
7
class Interpreter
  alias minimap_update command_201
  def command_201
    minimap_update
    Mini.map.update if Mini.map.mini
  end
end

Was soll das denn? Was hat der Interpreter mit dem Updaten zu tun??? Das gehört eher in Scene_Map oder Game_map... zumal command_201 teleportiert, wenn ich mich recht entsinne. Der Code wird auch NIE erreicht, da am Ende JEDES Commands ein "return(bool)" steht! Mapwechsel prüft man, indem sich die ID der Map ändert, oder eben nicht.

Ruby Quellcode

1
2
3
4
5
6
7
class Game_Player
  alias minimap_update update
  def update
    minimap_update
    Mini.map.update if Input.dir4 != 0 && Mini.map.mini
  end
end

Updatet dein Script die Positionen anderer Events also nicht?

Ruby Quellcode

1
2
3
4
  Leichter Code:
  Mini.map.anzeigen_easy(x, y, width, height, zoom[, style])
  Forgeschritten:
  Mini.map.anzeigen(rect, zoom[, style])

Zwei Methoden...? Wozu hat Ruby seine tolle Möglichkeit, zu überladen???

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
def anzeigen(arg0,arg1,arg2=nil,arg3=nil,arg4=nil,arg5=nil)
  x = arg0.is_a?(Rect) ? arg0.x : arg0
  y = arg0.is_a?(Rect) ? arg0.y : arg1
  w = arg0.is_a?(Rect) ? arg0.width : arg2
  h = arg0.is_a?(Rect) ? arg0.height : arg3
  z = arg0.is_a?(Rect) ? arg1 : arg4
  s = arg0.is_a?(Rect) ? arg2 : arg5
  if (!x.is_a?(Integer) || !y.is_a?(Integer) || !w.is_a?(Integer) || !h.is_a?(Integer) || !z.is_a?(Float) || (!s.is_a?(Integer) || s == nil))
    raise(TypeError,"Hindi's Minimap-Script got a wrong parameter in Method 'anzeigen'.")
  end
  #Code
end

So braucht man nur eine einzige Methode...

Ruby Quellcode

1
2
3
4
    @pfad_autotiles = Array.new
    for i in 0..6
      @pfad_autotiles[i] = RPG::Cache.autotile($game_map.autotile_names[i])
    end

EXPLIZIT DIE GRÖßE NENNEN, also Array.new(7)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ruby Quellcode

1
zoom_x, zoom_y = zoom, zoom

Eher so:

Ruby Quellcode

1
zoom_x = zoom_y = zoom

Und wozu überhaupt??? Verwende dierekt zoom!

Ruby Quellcode

1
@zoom_x, @zoom_y         = zoom_x, zoom_y

Unnötig gedoppelt...

Ruby Quellcode

1
@map_width, @map_height  = $game_map.map.width, $game_map.height

Wozu auslagern??? Speicherverschwendung!

Ruby Quellcode

1
2
@x, @y                   = rect.x, rect.y
    @rect                    = rect

Wieder unnötig gedoppelt...

Ruby Quellcode

1
2
    # Missionen Table erstellen
    @missionen = Table.new(@map_width, @map_height)

Was für missionen...?

Ruby Quellcode

1
2
3
4
5
6
    @blue_hell               = Color.new( 50,  50, 255, 100)
    @blue_dunkel             = Color.new(  0,   0, 100, 200)
    @red                     = Color.new(255,   0,   0, 200)
    @green                   = Color.new(  0, 255,   0, 200)
    @weiss                   = Color.new(  0,   0,   0, 255)
    @grau                    = Color.new(100, 100, 100)

Lass das DEnglisch sein... entscheide dich für eine Sprache...

Ruby Quellcode

1
2
    @player.bitmap           = Bitmap.new(32, 32)
    @player.bitmap.draw_circle(16, 16, 32, @red)

Du malst einen Kreis, der größer ist, als das Bitmap... macht Sinn...

Ruby Quellcode

1
2
    @player.zoom_x           = @zoom_x
    @player.zoom_y           = @zoom_y

Jetzt auch noch dreifach???

Ruby Quellcode

1
2
3
    @pfad = RPG::Cache.tileset($game_map.tileset_name)
    if @viewport_on
    else

@pfad hat nichts mit Pfad zu tun, das ist ein Bitmap... Und dein if-else sollte eher so aussehen:

Ruby Quellcode

1
2
3
4
#So machen:
if (!@viewport_on)
#Oder so:
unless (@viewport_on)

Das if-else war Schwachsinn...

Ruby Quellcode

1
    @minimap.bitmap.clear if @minimap.bitmap != nil

Wieso sollte sie da plötzlich nil werden?

Ruby Quellcode

1
2
3
4
5
    for i in $game_map.events.keys
      x, y = $game_map.events[i].x * 32 * @zoom_x, $game_map.events[i].y * 32 * @zoom_y
      @minimap.bitmap.draw_circle(events_x(i), events_y(i), 16, @green) if @viewport_on == true
      @minimap.bitmap.draw_circle(@rect.x + x * 32, @rect.y + y * 32, 16, @green) if @viewport_on == false
    end

...

Ruby Quellcode

1
2
3
4
5
6
$game_map.events.each_value() \
{|event|
  x,y = event.x*32*@zoom_x,event.y*32*@zoom_y
  @minimap.bitmap.draw_circle(@rect.x+event.x*32,@rect.y+event.y*32,16,@green) if (@viewport_on)
  @minimap.bitmap.draw_circle(@rect.x+x*32,@rect.y+y*32) if (!@viewport_on)
}

def zoom(zoom_x, zoom_y)
@minimap.zoom_x, @minimap.zoom_y = zoom_x, zoom_y
@player.zoom_x, @player.zoom_y = zoom_x, zoom_y
@events.zoom_x, @events.zoom_y = zoom_x, zoom_y
end

Ruby Quellcode

1
2
@minimap.zoom_x = @player.zoom_x = @events.zoom_x = zoom_x
@minimap_zoom_z = #...

Ruby Quellcode

1
  def autotiles(x, y, z)

Nenne die Variable NICHT "sub"!!! So heißt eine Methode des Kernel-Moduls! Also eine Methode bei der man nicht das Kernel davor tippen muss! Das ist so, als würde die Variable "print" heißen!

Ruby Quellcode

1
2
3
4
5
module Mini
  class <<self
    attr_accessor :map
  end
end

Der sinnloseste Schwachsinn im ganzen Spript! Besser wäre so:

Ruby Quellcode

1
$minimap = Minimap.new()

Noch besser wäre:

Ruby Quellcode

1
2
3
4
5
6
7
8
class Scene_Map
  attr_accessor(:minimap)
  alias_method(:alt,:initialize) if (!method_defined?(:alt)) #Natürlich einen längeren Namen als "alt"
  def initialize()
    @minimap = Minimap.new()
    alt()
  end
end

Bei letzterem wäre der Aufruf:

Ruby Quellcode

1
$scene.minimap.methode() if ($scene.is_a?(Scene_Map))

Nochwas: Gewöhn dir alias_method an, sonst verursachen deine Scripte noch SystemStackErors!!!!!
zum Lesen den Text mit der Maus markieren

Moment... hier wurde doch nach einem Kompass gefragt, der auf eine bestimmte Koordinate zeigen soll... allerdings zeigst du ein Minimapscript - Was völlig am Thema vorbei ist -, und obendrein nichtmal ansatzweise etwas Kompassähnliches bietet!
Nebenbei ist der Code auch noch stark Verbesserungswürdig...
Mach' deine Aufgabe nochmal und diesmal richtig. Sonntag, spätestens Montag schau ich mal wieder rein. Wenn dann kein Kopass da ist, setze ich mich mal hin. Vorher habe ich noch zu tun bzw. bin nicht im Stande, zu makern.
Und lade es erst auf Itzamná hoch, wenn die genannten Punkte verbessert wurden.
Und nimm's mir nicht übel, ich habe mir satte 30min Zeit genommen, um das Script zu analysieren, ist also alles Andere als böswillig.
  • :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

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

6

Samstag, 8. August 2009, 10:02

Nunja, ich bin ein lernwilliger, junger Programmierer, daher nehme ich es dir sicher nicht übel, sondern bin froh dass es noch solche Leute gibt, die sich für solche wie mich noch so lang Zeit nehmen.

Du hast gefragt, was @missionen sein soll... Das speichert die Missionen ab, also die Punkte wo man hinsoll...

So und zu deinen Codes... Über die hälfte der Codes die du da geschrieben hast kenne ich nichtmal... Also währe es schlauer wenn du nächstes mal eher mal mehr über die Codes die du hier reinstellst erkären, als mein Script negativ zu kritisieren würdest... ich mein, was ist alias_method??? Kann man das essen???

Und, wird wahrscheinlich noch darauf hinauslaufen, dass du es schreiben musst, weil ich leide immer mehr an Zeitmangel.
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Kenai

Landsknecht

Motto: “Niemals aufgeben, bevor man nicht alles versucht hat.”

  • Nachricht senden

7

Samstag, 8. August 2009, 13:01

Ich möchte auch mal meinen Senf dazugeben^^.

@Hindi: Ich habe mal dein Script getestet - so schlecht ist es ja schonmal gar nicht. Aber jetzt kommt mein "Aber". Hast du dein Script auch mal getestet? Sobald die Original-Map mehr an Größe zunimmt, laggt das Script wie Sau. Bevor du dein Scirpt gepostet hättest, hättest du vorher mal mit größeres Maps testen sollen. Bei meiner Mini-Map für mein Game (zum Beispiel) sind somit noch einige Bugs durch intensiveres Testen ans Licht gekommen.

Was ich auch nicht so ganz verstehe, warum nutzt du die module-class zum Aufrufen deiner Minimap? Das erscheint mir nicht ganz logisch. Vielleicht solltest du noch einmal ein wenig Inspiration von den anderen Minimap-Scripts holen.

Wie lang hast du eigentlich insgesamt daran gearbeitet? Da mir die Kommentare für die Erklärung des Script in letzter Minuten hingewurschtelt erscheinen - viele Rechtschreib- und Grammatikfehler. In deinem Script habe ich dreimal "=begin" und "=end" gezählt - was nicht wirklich nach einem schönprogrammierten ordentlichen Script aussieht. Schaue dir dochmal die RPG-Maker-XP- oder SDK-Scripte an - schön gegliedert und durchschaubar.

Bevor ich jetzt aber hier nur rummeckere, möchte ich noch betonen, dass ich weiß das du es lernen möchtest und ich bin froh über jeden der sich dazu bereiterklärt jemandem zu helfen, auch wenn er womöglich keine oder wenig Zeit hat. Und ansonsten würde ich dir vielldicht raten, wenn du deine Minimap verbessern willst, komplett von vorne anzufangen und dir einen Zettel und Stift besorgst und einen Programmablaufplan erstellst oder dir vorher reichlich Gedanken machst, wie du die Minimap realisieren möchtest und dann anfängst zu programmieren.

Anonsten kann es nur Bergauf gehen und besser werden - soweit noch viel Erfolg.

~ Gruß Kenai
  • :doc: Neuigkeiten

    Sämtliche Projekte sind erst mal pausiert. Weitere Informationen findet ihr hier. (Stand: 21.12.2012).
  • :rmxp: Cursal Engine (Jump and Run Engine)

    Mit Hilfe der Cursal Engine (RCE) ist es möglich auf ziemlich einfache Weise „Jump and Run“-Projekte im RPG Maker XP zu entwerfen. Das Anlegen basiert auf Installations- und Updatepaketen sowie reinen Archiven für fortgeschrittene Benutzer. Die Version 2 (CE2) befindet sich bereits in Entwicklung. Interessiert? Dann lade dir die neuste Version herunter ;3!
  • BildAvatar

    Diese kleinen, netten und knuffigen Vögelchen nennen sich Hamachou und dürften einigen aus Skies of Arcadia bekannt sein. Ich habe diese Bilder weder selbst gezeichnet noch modelliert. Dennoch finde ich sie so knuffig, dass man sie einfach lieb haben muss und ich hoffe euch geht's genau so^^". Diese Grafiken sind wirklich rar und ich bin stolz sie im Web gefunden zu haben.

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

8

Samstag, 8. August 2009, 13:12

Ok, danke^^, ich werd mal sehen... Ich weis nur nicht wie ich es noch schneller machen will... also ohne laggs. Wo wir schon dabei sind^^, wie könnte ich das beschleunigen? Wie haben die es von Enterbrain geschafft, dass ihre Map nicht laggt???
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Kenai

Landsknecht

Motto: “Niemals aufgeben, bevor man nicht alles versucht hat.”

  • Nachricht senden

9

Samstag, 8. August 2009, 16:27

Der größte Performance-Verlust kommt wohl ganz genau hier in Zeile 217:

Ruby Quellcode

1
@minimap.bitmap.clear if @minimap.bitmap != nil

Um so kleiner die Minimap ist, umso weniger fällt dieser Performance-Verlust auf. Wenn ich das richtig interpreteiere, lässt du die Mini-Map jeden Frame neu zeichnen. Bei der originalen Map von Enterbrain wird alles vorher Tile für Tile geladen und anschließend nur bewegt. Anders sollte/muss es bei deiner Mini-Map auch nicht sein.

Erstelle alle zu ladenden Grafiken am besten in einem Viewport (ist in der Help vom RMXP bestens erklärt) und lass sie nur bewegen, statt jedes mal ein Bitmap zu zeichnen. Aber auch hier gilt: Nicht zu viele Sprites erstellen - sparsam bleiben.

~ Gruß Kenai
  • :doc: Neuigkeiten

    Sämtliche Projekte sind erst mal pausiert. Weitere Informationen findet ihr hier. (Stand: 21.12.2012).
  • :rmxp: Cursal Engine (Jump and Run Engine)

    Mit Hilfe der Cursal Engine (RCE) ist es möglich auf ziemlich einfache Weise „Jump and Run“-Projekte im RPG Maker XP zu entwerfen. Das Anlegen basiert auf Installations- und Updatepaketen sowie reinen Archiven für fortgeschrittene Benutzer. Die Version 2 (CE2) befindet sich bereits in Entwicklung. Interessiert? Dann lade dir die neuste Version herunter ;3!
  • BildAvatar

    Diese kleinen, netten und knuffigen Vögelchen nennen sich Hamachou und dürften einigen aus Skies of Arcadia bekannt sein. Ich habe diese Bilder weder selbst gezeichnet noch modelliert. Dennoch finde ich sie so knuffig, dass man sie einfach lieb haben muss und ich hoffe euch geht's genau so^^". Diese Grafiken sind wirklich rar und ich bin stolz sie im Web gefunden zu haben.

Reborn

hat beim Stromkonzern schon Rabatt

Motto: Wer noch was vom Wochenende weis, hat es nie erlebt!

  • Nachricht senden

10

Sonntag, 9. August 2009, 09:21

Das mit dem Viewport habe ich bei dem "Radar" gemacht, aber da lad ich die Grafik glaub auch jedesmal neu und nein, nicht bei jedem sondern nur wenn sich der Hero bewegt^^, aber ich werds mal so versuchen zu machen wie du es gesagt hast.
Mehr als a Allgäuer ka a Mensch it wera.


Wie soll ich wissen was ich denke, bevor ich nicht höre was ich sage?


Spoiler: OpenSource-Projects
NES-Emulator - a simple NES-Emulator
ERDL - a embedded Ruby Interpreter with the abilltiy to render images with DirectX ERDL shall be 100% compatible to RPGXP-Ruby Scripts
zum Lesen den Text mit der Maus markieren

Social Bookmarks