• Anmelden

1

Dienstag, 3. Juli 2012, 17:50

Set Move Route Skript von RPG Studio

Hi!

Ich nutze dieses Skript hier:

Quelle: set move route | RPG Studio

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
module Move_Route
  module MRFC
    REPEAT = 1
    SKIPPABLE = 2
 
    MOVE_DOWN             = 1
    MOVE_LEFT             = 2
    MOVE_RIGHT            = 3
    MOVE_UP               = 4
    MOVE_LOWER_LEFT       = 5
    MOVE_LOWER_RIGHT      = 6
    MOVE_UPPER_LEFT       = 7
    MOVE_UPPER_RIGHT      = 8
    MOVE_RANDOM           = 9
    MOVE_TOWORD_PLAYER    = 10
    MOVE_AWAY_FROM_PLAYER = 11
    MOVE_FORWARD          = 12
    MOVE_BACKWARD         = 13
    JUMP                  = 14 # (int x, int y)
    WAITING               = 15 # (int frames)
    TURN_DOWN             = 16
    TURN_LEFT             = 17
    TURN_RIGHT            = 18
    TURN_UP               = 19
    TURN_RIGHT_90         = 20
    TURN_LEFT_90          = 21
    TURN_180              = 22
    TURN_RIGHT_OR_LEFT_90 = 23
    TURN_RANDOM           = 24
    TURN_TOWARD_PLAYER    = 25
    TURN_AWAY_FROM_PLAYER = 26
    SWITCH_ON             = 27 # (int id)
    SWITCH_OFF            = 28 # (int id)
    CHANGE_SPEED          = 29 # (int speed)
    CHANGED_FREQ          = 30 # (int freq)
    MOVE_ANIMATION_ON     = 31
    MOVE_ANIMATION_OFF    = 32
    STOP_ANIMATION_ON     = 33
    STOP_ANIMATION_OFF    = 34
    DIRECTION_FIX_ON      = 35
    DIRECTION_FIX_OFF     = 36
    TROUGH_ON             = 37
    TROUGH_OFF            = 38
    ALWAYS_ON_TOP_ON      = 39
    ALWAYS_ON_TOP_OFF     = 40
    CHANGE_GRAPHIC        = 41 # (string character_name, int character_hue
                               #  int direction, int pattern)
    CHANGE_OPACITY        = 42 # (int opacity)
    CHANGE_BLENDING       = 43 # (int blending)
    PLAY_SE               = 44 # (string se)
    SCRIPT                = 45 # (string script)
 
    MPS = Struct.new(:code, :parameters)
    class << MPS
      alias_method(:old_new, :new)
      def new(code, *parameters)
        old_new(code, parameters)
      end
      def n(*args)
        new(*args)
      end
    end
  end
 
  module MRF
    include MRFC
    def move_route(flags, *args)
      raise ArgumentError if args.size.zero? 
      mr = RPG::MoveRoute.new()
      mr.repeat = (flags & REPEAT) == REPEAT
      mr.skippable = (flags & SKIPPABLE) == SKIPPABLE
      mr.list.clear()
      args.each {|i| mr.list.push(RPG::MoveCommand.new(*(i.kind_of?(MPS) ? [i.code, i.parameters] : [i])))}
      mr.list.push(RPG::MoveCommand.new())
      force_move_route(mr)
    end
  end
end
 
class Game_Character
  include Move_Route::MRF
end
 
class Interpreter
  include Move_Route::MRFC
  def event_move_route(id, flags, *args)
    get_character(id).move_route(flags, *args)
    return true
  end
end



Folgender Befehl, den ich dazu verwende, funktioniert einwandfrei:

Quellcode

1
$game_map.events[12].move_route(SKIPPABLE, MOVE_LEFT, MOVE_LEFT, MOVE_LEFT)


Bloß ich habe Probleme, zusätzlich den Change Speed Befehl richtig anzuwenden. Wo gibt es eine Übersicht über die Geschwindigkeitsstufen? Und wie sieht die korrekte Syntax aus? Die folgende geht nicht:

Quellcode

1
$game_map.events[12].move_route(SKIPPABLE, MPS.n(CHANGE_SPEED(3)), MOVE_LEFT, MOVE_LEFT, MOVE_LEFT)


Meine zweite Frage wäre: Wie kann ich als Skript den "Wait for Move's Completion"-Eventbefehl umsetzen? Ich finde dazu leider nichts in der Hilfe.

Besten Dank!

Yuber

Seher

Motto: Die Welt zu beherrschen.

  • Nachricht senden

2

Donnerstag, 5. Juli 2012, 15:35

Hi!
Du hast das nicht ganz richtig gemacht.
Die korrekte Syntax lautet z.B. so:

Ruby Quellcode

1
event_move_route(1, SKIPPABLE, MOVE_RIGHT, MOVE_RIGHT, MPS.n(CHANGE_SPEED , 5 ))


Musst also nen Komma nach deinen Befehl setzen.

Zu deiner zweiten Frage, ich glaube das Script ansich unterstüzt das nicht.
Aber kannst du nicht einfach nach dem Scriptbefehl den Eventbefehl manuell setzen?
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

3

Donnerstag, 5. Juli 2012, 21:05

Danke für Deine Antwort!
Ja das klappt jetzt.

Wegen Wait for...: Ich skripte nur noch im Skripteditor und verzichte auf die Events, daher wolle ich gerne wissen wie man das als Skript macht.

Bei "Interpreter 5" steht ja:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
  #--------------------------------------------------------------------------
  # * Wait for Move's Completion
  #--------------------------------------------------------------------------
  def command_210
    # If not in battle
    unless $game_temp.in_battle
      # Set move route completion waiting flag
      @move_route_waiting = true
    end
    # Continue
    return true
  end


Bloß was muss ich machen, wenn ich das nach einem Code wie

Quellcode

1
2
3
	$game_map.events[@char_IDxy[0]].move_route(SKIPPABLE, MOVE_UP, MOVE_UP, MOVE_UP)
        command_210
        p "dieser text soll erst erscheinen, wenn die Bewegung beendet wurde."


? Einfach die Methode "command_210" aufrufen, reicht ja nicht?

Reborn

hat beim Stromkonzern schon Rabatt

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

  • Nachricht senden

4

Sonntag, 8. Juli 2012, 11:30

Nope, das musst du dir so vorstellen:
Im Interpreter gibt es eine Array names List. Die Liste wird jetzt von oben nach unten abgearbeitet. Um ein Befehl in ein Event einzufügen musst du das an der richtigen Stelle und mit der richtigen "Tiefe" in diese Liste einfügen.
Das ganze sieht dann so aus:

Ruby Quellcode

1
2
3
class Interpreter
  @list.insert(line, RPG::EventCommand.new(id, indent, para))
end

line ist die Zeilennummer in die der Befehl eingefügt werden soll.

id ist die ID die immer nach command_ steht, in diesem Fall wäre es die 210.

indent ist sozusagen die Tiefe in der sich der Befehl befindet. Ein Beispiel:

Quellcode

1
2
3
4
Conditional Branch:
  hier ist indent gleich 1
end
hier ist indent gleich 0


para sind die parameter welche mitgegeben werden.


Ich hab da auch schon mal, wie der Zufall so will, ein kleines Script geschrieben:
Spoiler: Script

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
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
class CommandError < Exception
end
 
module InterpreterConsts
  #----------------------------------
  # Conditional Branch constants    |
  #----------------------------------
  CB_SWITCH      = 0
  CB_VARIABLE    = 1
  CB_SELF_SWITCH = 2
  CB_TIMER       = 3
  CB_ACOTR       = 4
  CB_ENEMY       = 5
  CB_CHARACTER   = 6
  CB_GOLD        = 7
  CB_ITEM        = 8
  CB_WEAPON      = 9
  CB_ARMOR       = 10
  CB_BUTTON      = 11
  CB_SCRIPT      = 12
 
  CB_VAR_MODE_EQUAL         = 0
  CB_VAR_MODE_GREATER_EQUAL = 1
  CB_VAR_MODE_LESS_EQUAL    = 2
  CB_VAR_MODE_GRATER        = 3
  CB_VAR_MODE_LESS          = 4
  CB_VAR_MODE_IS_NOT        = 5
 
  CB_SWITCH_TRUE  = 0
  CB_SWITCH_FALSE = 1
 
  CB_TIMER_MORE = 0
  CB_TIMER_LESS = 1
 
  CB_ACTOR_IN_PARTY = 0
  CB_ACTOR_NAME     = 1
  CB_ACTOR_SKILL    = 2
  CB_ACTOR_WEAPON   = 3
  CB_ACTOR_ARMOR    = 4
  CB_ACTOR_STATE    = 5
 
  CB_ENEMY_APPEAR = 0
  CB_ENEMY_STATE  = 1
  #----------------------------------
  # Control Variables constants     |
  #----------------------------------
  CV_INVARIABLE    = 0
  CV_VARIABLE      = 1
  CV_RANDOM_NUMBER = 2
  CV_ITEM          = 3
  CV_ACTOR         = 4
  CV_ENEMY         = 5
  CV_CHARACTER     = 6
  CV_OTHER         = 7
 
  CV_ACTOR_LEVEL            = 0
  CV_ACTOR_EXP              = 1
  CV_ACTOR_HP               = 2
  CV_ACTOR_SP               = 3
  CV_ACTOR_MAXHP            = 4
  CV_ACTOR_MAXSP            = 5
  CV_ACTOR_STRENGTH         = 6
  CV_ACTOR_DEXTERITY        = 7
  CV_ACTOR_AGILITY          = 8
  CV_ACTOR_INTELLIGENCE     = 9
  CV_ACTOR_ATTACK_POWER     = 10
  CV_ACTOR_PHYSICAL_DEFENSE = 11
  CV_ACOTR_MAGIC_DEFENSE    = 12
  CV_ACOTR_EVASION          = 13
 
  CV_ENEMY_HP                 = 0
  CV_ENEMY_SP                 = 1
  CV_ENEMY_MAXHP              = 2
  CV_ENEMY_MAXSP              = 3
  CV_ENEMY_STRENGTH           = 4
  CV_ENEMY_DEXTERITY          = 5
  CV_ENEMY_AGILITY            = 6
  CV_ENEMY_INTELLIGENCE       = 7
  CV_ENEMY_ATTACK_POWER       = 8
  CV_ENEMY_PHYSICAL_DEFENSE   = 9
  CV_ENEMY_MAGIC_DEFENSE      = 10
  CV_ENEMY_EVASION_CORRECTION = 11
 
  CV_CHARACTER_X_COORDINATE        = 0
  CV_CHARACTER_Y_COORDINATE        = 1
  CV_CHARACTER_DIRECTION           = 2
  CV_CHARACTER_SCREEN_X_COORDINATE = 3
  CV_CHARACTER_SCREEN_Y_COORDINATE = 4
  CV_CHARACTER_TERRAIN_TAG         = 5
 
  CV_OTHER_MAP_ID = 0
  CV_OTHER_NUMBER_OF_PARTY_MEMBERS = 1
  CV_OTHER_GOLD = 2
  CV_OTHER_STEPS = 3
  CV_OTHER_PlAY_TIME = 4
  CV_OTHER_TIMER = 5
  CV_OTHER_SAVE_COUNT = 6
 
  CV_SUBSTITUTE = 0
  CV_ADD        = 1
  CV_UBTRACT   = 2
  CV_MULTIPLY   = 3
  CV_DIVIDE     = 4
  CV_REMAINDER  = 5
  #----------------------------------
  # Move Picture constants          |
  #----------------------------------
  P_DISPLAY_POS_UPPERLEFT = 0
  P_DISPLAY_POS_CENTER    = 1
  P_MODE_CONSTANT = 0
  P_MODE_VARIABLE = 1
  #----------------------------------
  # Change Equipment constants      |
  #----------------------------------
  CE_MODE_WEAPON     = 0
  CE_MODE_SHIELD     = 1
  CE_MODE_HELMET     = 2
  CE_MODE_BODY_ARMOR = 3
  CE_MODE_ACCESSORY  = 4
  #----------------------------------
  # Show Battle Animations constants|
  #----------------------------------
  SBA_ENEMY = 0
  SBA_ACTOR = 1
  #----------------------------------
  # Force Action constants          |
  #----------------------------------
  FA_BATTLER_ENEMY = 0
  FA_BATTLER_ACTOR = 1
  FA_BATTLER_BASIC = 0
  FA_BATTLER_SKILL = 1
  FA_TIMING_NORMAL = 0
  FA_TIMING_NOW    = 1
  #----------------------------------
  # Move constants                  |
  #----------------------------------
  REPEAT = 1
  SKIPPABLE = 2
 
  MOVE_DOWN             = 1
  MOVE_LEFT             = 2
  MOVE_RIGHT            = 3
  MOVE_UP               = 4
  MOVE_LOWER_LEFT       = 5
  MOVE_LOWER_RIGHT      = 6
  MOVE_UPPER_LEFT       = 7
  MOVE_UPPER_RIGHT      = 8
  MOVE_RANDOM           = 9
  MOVE_TOWORD_PLAYER    = 10
  MOVE_AWAY_FROM_PLAYER = 11
  MOVE_FORWARD          = 12
  MOVE_BACKWARD         = 13
  JUMP                  = 14 # (int x, int y)
  WAITING               = 15 # (int frames)
  TURN_DOWN             = 16
  TURN_LEFT             = 17
  TURN_RIGHT            = 18
  TURN_UP               = 19
  TURN_RIGHT_90         = 20
  TURN_LEFT_90          = 21
  TURN_180              = 22
  TURN_RIGHT_OR_LEFT_90 = 23
  TURN_RANDOM           = 24
  TURN_TOWARD_PLAYER    = 25
  TURN_AWAY_FROM_PLAYER = 26
  SWITCH_ON             = 27 # (int id)
  SWITCH_OFF            = 28 # (int id)
  CHANGE_SPEED          = 29 # (int speed)
  CHANGED_FREQ          = 30 # (int freq)
  MOVE_ANIMATION_ON     = 31
  MOVE_ANIMATION_OFF    = 32
  STOP_ANIMATION_ON     = 33
  STOP_ANIMATION_OFF    = 34
  DIRECTION_FIX_ON      = 35
  DIRECTION_FIX_OFF     = 36
  TROUGH_ON             = 37
  TROUGH_OFF            = 38
  ALWAYS_ON_TOP_ON      = 39
  ALWAYS_ON_TOP_OFF     = 0
  CHANGE_GRAPHIC        = 4 # (string character_name, int character_hue
                            #  int direction, int pattern)
  CHANGE_OPACITY        = 42 # (int opacity)
  CHANGE_BLENDING       = 43 # (int blending)
  PLAY_SE               = 44 # (string se)
  SCRIPT                = 45 # (string script)
 
  MPS = Struct.new(:code, :parameters)
  class << MPS
    alias_method(:old_new, :new)
    def new(code, *parameters)
      old_new(code, parameters)
    end
    alias_method(:n, :new)
  end
end
 
class Interpreter
  include InterpreterConsts
 
  alias_method(:old_initiailze_280511, :initialize)
  def initialize(*args)
    old_initiailze_280511(*args)
    @command_active = false
    @conditional_branch_count = 0
  end
 
  alias_method(:old_setup_280511, :setup)
  def setup(*args)
    old_setup_280511(*args)
    @list.size.times {|i|
      @parse_index = i
      v = @list[i]
      next if v.nil?
      if v.code != 355 && v.code != 655
        @list[i].indent += @conditional_branch_count
        next
      end
      if v.parameters[0] == "\"command\""
        @command_active = true
        @list.delete_at(i)
        arr   = bind_scripts(i, "\"command_end\"")
        str   = arr[0]
        count = arr[1]
        count.times {@list.delete_at(i)}
        @list.delete_if() {|i| i.parameters[0] == "\"command_end\""}
        eval(str)
      end
      @command_active = false
    }
    @list.push(RPG::EventCommand.new())
  end
 
  def bind_scripts(index, end_symbol=nil)
    str = ""
    count = 0
    index.upto(@list.size()) {|i|
      v = @list[i]
      next if v.nil?
      next if v.code != 355 && v.code != 655
      if end_symbol != nil
        break if v.parameters[0] == end_symbol
      end
      str += v.parameters[0] + "\n"
      count += 1
    }
    return str, count
  end
 
  def generate_move_route(flags, *args)
    raise ArgumentError if args.size.zero?
    mr = RPG::MoveRoute.new()
    mr.repeat = (flags & REPEAT) == REPEAT
    mr.skippable = (flags & SKIPPABLE) == SKIPPABLE
    mr.list.clear()
    args.each {|i| mr.list.push(RPG::MoveCommand.new(*(i.kind_of?(MPS) ? [i.code, i.parameters] : [i])))}
    mr.list.push(RPG::MoveCommand.new())
    return mr
  end
 
  def insert_in_list(id, indent, para=[])
    raise CommandError if !@command_active
    ec = RPG::EventCommand.new(id, indent, para)
    @list.insert(@parse_index, ec)
    @parse_index += 1
  end
 
  def show_message(str, indent=0)
    insert_in_list(101, indent, [str])
  end
 
  def show_message2(str, indent=0)
    insert_in_list(401, indent, [str])
  end
 
  def show_choices(mode, text, indent=0)
    insert_in_list(102, indent, [text, mode])
  end
 
  def show_choices_deep(num, para, indent=0)
    insert_in_list(402, indent, [num, para])
  end
 
  def show_choices_cancle(indent=0)
    insert_in_list(403, indent)
  end
 
  def input_number(var_id, lenght, indent=0)
    insert_in_list(103, indent, [var_id, lenght])
  end
 
  def change_text_options(pos, win, indent=0)
    insert_in_list(104, indent, [pos, win])
  end
 
  def button_input_processing(var_id, indent=0)
    insert_in_list(105, indent, [var_id])
  end
 
  def wait(frames, indent=0)
    insert_in_list(106, indent, [frames])
  end  
 
  def conditional_branch(mode, switch_var_id, para2=0, para3=0, para4=0, var_mode=0, indent=0)
    @conditional_branch_count += 1
    insert_in_list(111, indent, [mode, switch_var_id, para2, para3, var_mode])
  end
 
  def conditional_branch_else(indent=0)
    insert_in_list(411, indent)
  end
 
  def conditional_branch_else(indent=0)
    insert_in_list(412, indent)
  end
 
  def conditional_branch_end(indent=0)
    insert_in_list(99999, indent)
  end
 
  def exit_event_processing(indent=0)
    insert_in_list(115, indent)
  end
 
  def rease_event(indent=0)
    insert_in_list(116, indent)
  end
 
  def call_common_event(common_id, indent=0)
    insert_in_list(117, indent, [common_id])
  end
 
  def label(label_name, indent=0)
    insert_in_list(118, indent, [label_name])
  end
 
  def jump_to_label(label_name, indent=0)
    insert_in_list(119, indent, [label_name])
  end
 
  def control_switches(start_switch_id, end_switch_id, switch_id2, indent=0)
    insert_in_list(121, indent, [start_switch_id, end_switch_id, switch_id2])
  end
 
  def control_variables(start_var_id, end_var_id, para, indent=0)
    insert_in_list(122, indent, [start_var_id, end_var_id, *para])
  end
 
  def contorl_self_switch(self_switch, bool, indent=0)
    insert_in_list(123, indent, [self_switch, bool])
  end
 
  def control_timer(time, start_stop, indent=0)
    insert_in_list(124, indent, [time, start_stop])
  end
 
  def change_gold(in_dec, para1, para2=0, indent=0)
    insert_in_list(125, indent, [in_dec, para2, para1])
  end
 
  def change_items(in_dec, para1, para2=0, indent=0)
    insert_in_list(126, indent, [para2, para1])
  end
 
  def change_weapongs(in_dec, para1, para2=0, indent=0)
    insert_in_list(127, indent, [para2, para1])
  end
 
  def change_armor(in_dec, para1, para2=0, indent=0)
    insert_in_list(128, indent, [para2, para1])
  end
 
  def change_party_member(actor_id, in_dec, int=true, indent=0)
    insert_in_list(129, indent, [actor_id, in_dec, int]) 
  end
 
  def change_windowskin(winskin_name, indent=0)
    insert_in_list(131, indent, [winskin_name])
  end
 
  def change_battle_bgm(bgm_name, indent=0)
    insert_in_list(132, indent, [bgm_name])
  end
 
  def change_battle_end_me(me_name, indent=0)
    insert_in_list(133, indent, [me_name])
  end
 
  def change_save_access(bool, indent=0)
    insert_in_list(134, indent, [bool])
  end
 
  def change_menu_access(bool, indent=0)
    insert_in_list(135, indent, [bool])
  end
 
  def change_encounter(bool, indent=0)
    insert_in_list(136, indent, [bool])
  end
 
  def transfer_player(mode, paras, dir=0, fade=0, indent=0)
    insert_in_list(201, indent, [mode, dir, fade].insert(1, *paras))
  end
 
  def set_event_location(character_id, mode, paras, dir=0, indent=0)
    insert_in_list(202, indent, [character_id, mode, dir].insert(2, *paras))
  end
 
  def scroll_map(dir, dis, speed, indent=0)
    insert_in_list(203, indent, [dir, dis, speed])
  end
 
  def change_map_settings(mode, paras, indent=0)
    insert_in_list(204, indent, [mode].insert(1, *paras))
  end
 
  def change_fog_color_tone(red, green, blue, gray, frames, indent=0)
    insert_in_list(205, indent, [[red, green, blue, gray], frames])
  end
 
  def change_fog_opacity(opacity, frames, indent=0)
    insert_in_list(206, indent, [opacity, frames])
  end
 
  def show_animation(character_id, animation_id, indent=0)
    insert_in_list(207, indent, [character_id, animation_id])
  end
 
  def change_transparent_flag(bool, indent=0)
    insert_in_list(208, indent, [bool])
  end
 
  def set_move_route(character_id, flags, args, indent=0)
    mr = generate_move_route(flags, *args)
    insert_in_list(209, indent, [character_id, mr])
  end
 
  def wait_for_moves_completion(indent=0)
    insert_in_list(210, indent)
  end
 
  def prepare_for_transition(indent=0)
    insert_in_list(221, indent)
  end
 
  def execute_transition(trans_graphic_name, indent=0)
    insert_in_list(222, indent, [trans_graphic_name])
  end
 
  def change_screen_color_tone(red, green, blue, gray, frames, indent=0)
    insert_in_list(223, indent, [[red, green, blue, gray], frames])
  end
 
  def screen_flash(red, green, blue, gray, frames, indent=0)
    insert_in_list(224, indent, [[red, green, blue, gray], frames])  
  end
 
  def screen_shake(power, speed, frames, indent=0)
    insert_in_list(225, indent, [power, speed, frames])
  end
 
  def show_picture(number, graphic_name, display_pos, mode, para1, para2, 
                      zoom_x, zoom_y, opacity, blending=1, indent=0)
    insert_in_list(231, indent, [number, graphic_name, display_pos, mode,
                                 para1, para2, zoom_x, zoom_y, opacity, blending])
  end
 
  def move_picture(number, frames, display_pos, mode, para1, para2,
                      zoom_x, zoom_y, opacity, blending=1, indent=0)
    insert_in_list(232, indent, [number, frames, display_pos, mode, para1, para2,
                                 zoom_x, zoom_y, opacity, blending])
  end
 
  def rotate_picture(number, speed, indent=0)
    insert_in_list(233, indent, [number, speed])
  end
 
  def change_picture_color_tone(number, red, green, blue, gray, frames, indent=0)
    insert_in_list(234, indent, [number, [red, green, blue, gray], frames])
  end
 
  def erase_picture(number, indent=0)
    insert_in_list(235, indent, [number])
  end
 
  def set_weather_effects(weather, power, frames, indent=0)
    insert_in_list(236, indent, [weather, power, frames])
  end
 
  def play_bgm(bgm_name, indent=0)
    insert_in_list(241, indent, [bgm_name])
  end
 
  def fade_out_bgm(frames, indent=0)
    insert_in_list(242, indent, [frames])
  end
 
  def play_bgs(bgs_name, indent=0)
    insert_in_list(245, indent, [bgs_name])
  end
 
  def fade_out_bgs(frames, indent=0)
    insert_in_list(246, indent, [frames])
  end
 
  def memorize_bgm_bgs(indent=0)
    insert_in_list(247, indent)
  end
 
  def restore_bgm_bgs(indent=0)
    insert_in_list(248, indent)
  end
 
  def play_me(me_name, indent=0)
    insert_in_list(249, indent, [me_name])
  end
 
  def play_se(se_name, indent=0)
    insert_in_list(250, indent, [se_name])
  end
 
  def stop_se(indent=0)
    insert_in_list(251, indent)
  end
 
  def battle_processing(troop_id, can_escape, can_lose, indent=0)
    insert_in_list(301, indent, [troop_id, can_escape, can_lose])
  end
 
  def battle_win(indent=0)
    insert_in_list(601, indent)
  end
 
  def battle_escape(indent=0)
    insert_in_list(602, indent)
  end
 
 
  def battle_lose(indent=0)
    insert_in_list(603, indent)
  end
 
  def shop_processing(mode, id, indent=0)
    insert_in_list(302, indent, [mode, id])
  end
 
  def shop_add_item(mode, id, indent=0)
    insert_in_list(605, indent, [mode, id])
  end
 
  def name_input_processing(actor_id, max_chars, indent=0)
    insert_in_list(303, indent, [actor_id, max_chars])
  end
 
  def change_hp(actor_id, in_dec, mode, para, allow_knockout_in_battle=true, indent=0)
    insert_in_list(311, indent, [actor_id, in_dec, mode, para,
                                 allow_knockout_in_battle])
  end
 
  def change_sp(actor_id, in_dec, mode, para, indent=0)
    inset_in_list(312, indent, [actor_id, in_dec, mode, para])
  end
 
  def change_state(actor_id, in_dec, state_id, indent=0)
    insert_in_list(313, indent, [actor_id, in_dec, state_id])
  end
 
  def recover_all(actor_id, indent=0)
    insert_in_list(314, indent, [actor_id])
  end
 
  def change_exp(actor_id, in_dec, mode, para, indent=0)
    insert_in_list(315, indent, [actor_id, in_dec, mode, para])
  end
 
  def change_level(actor_id, in_dec, mode, para, indent=0)
    insert_in_list(316, indent, [actor_id, in_dec, mode, para])
  end
 
  def change_parameters(actor_id, parameter, in_dec, mode, para, indent=0)
    insert_in_list(317, indent, [actor_id, parameter, in_dec, mode, para])
  end
 
  def change_skills(actor_id, learn_forgot, skill_id, indent=0)
    insert_in_list(318, indent, [actor_id, leanr_forgot, skill_id])
  end
 
  def change_equipment(actor_id, mode, para, indent=0)
    insert_in_list(319, indent, [actor_id, mode, para])
  end
 
 
  def change_actor_name(actor_id, actor_name, indent=0)
    insert_in_list(320, indent, [actor_id, actor_name])    
  end
 
  def change_actor_class(actor_id, class_id, indent=0)
    insert_in_list(321, indent, [actor_id, class_id])
  end
 
  def change_actor_graphic(actor_id, character_graphic, battler_graphic, 
                           character_hue=0, battler_hue=0, indent=0)
    insert_in_list(322, indent, [actor_id, character_graphic, character_hue,
                                 battler_graphic, battler_hue])
  end
 
  def change_enemy_hp(enemy_id, in_dec, mode, para, allow_knockout_in_battle=true, 
                      indent=0)
    insert_in_list(331, indent, [enemy_id, in_dec, mode, para, 
                                 allow_knockout_in_battle])
  end
 
  def change_enemy_sp(enemy_id, in_dec, mode, para, indent=0)
    insert_in_list(332, indent, [enemy_id, in_dec, mode, para])
  end
 
  def change_enemy_state(enemy_id, in_dec, state_id, indent=0)
    insert_in_list(333, indent, [enemy_id, in_dec, state_id])
  end
 
  def enemy_recover_all(enemy_id, indent=0)
    insert_in_list(334, indent, [enemy_id])
  end
 
  def enemy_appearance(enemy_id, indent=0)
    insert_in_list(335, indent, [enemy_id])
  end
 
  def enemy_transform(enemy_id, new_enemy_id, indent=0)
    insert_in_list(336, indent, [enemy_id, new_enemy_id])
  end
 
  def show_battle_animation(traget, para, animation_id, indent=0)
    insert_in_list(337, indent, [traget, para, animation_id])    
  end
 
  def deal_damage(traget, para, operand, para2, indent=0)
    insert_in_list(338, indent, [traget, para, operand, para2])
  end
 
  def force_action(battler, para, action, para2, action_id, timing, indent=0)
    insert_in_list(339, indent, [battler, para, action, para2, action_id, timing])
  end
 
  def abort_battle(indent=0)
    insert_in_list(340, indent)
  end
 
  def call_menu_screen(indent=0)
    insert_in_list(351, indent)
  end
 
  def call_save_screen(indent=0)
    insert_in_list(352, indent)
  end
 
  def game_over(indent=0)
    insert_in_list(353, indent)
  end
 
  def return_to_title_screen(indent=0)
    insert_in_list(354, indent)
  end
 
  def empty_event(indent=0)
    insert_in_list(0, indent)
  end
 
  def command_355()
    script = @list[@index].parameters[0] + "\n"
    loop do
      if @list[@index+1].code == 355 || @list[@index+1].code == 655
        script += @list[@index+1].parameters[0] + "\n"
      else
        break
      end
      @index += 1
    end
    eval(script)
    return true
  end
 
  def command_99999()
    @conditional_branch_count -= 1
    return true
  end
 
  alias_method(:old_execute_command_290511, :execute_command)
  def execute_command()
    if @index >= @list.size - 1
      command_end
      return true
    end
    @parameters = @list[@index].parameters
    case @list[@index].code
    when 99999 then return command_99999()
    end
    old_execute_command_290511()
  end
end
zum Lesen den Text mit der Maus markieren

Das Event kann dann z.B. so aussehen:
Spoiler: Bild
Bild
zum Lesen den Text mit der Maus markieren

Das Script habe ich aber nie richtig veröffentlicht, weil mir der Sinn irgendwann entflog. Aber vielleicht hilft es dir ja irgendwie.


Edit Was ich jetzt vergessen habe um auf das Problem von dir einzugehen.
Wenn du ein "Wait for Move's Completion" - Befehl einbauen willst, würde das ungefähr so aussehen:

Ruby Quellcode

1
2
3
ec = RPG::EventCommand.new(210, 0, []) # 0 wäre in dem Fall nicht notwendig.
# Wird kein Indent-Parameter angegeben wird Indent genullt, das selbe gilt für die leere Parameter-Array.
@list.insert(0, ec)

Nun wird an der 0ten stellen der Liste (also so zu sagen, ganz oben im Event-Editor) ein "Wait for Move's Completion"-Befehl eingefügt. Wichtig ist der Wert "indent", ist dieser falsch wird der Befehl einfach geskipt.
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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (8. Juli 2012, 10:55)


Irrlicht

Leuchtendes Irgendwas

Motto: Keep shining!

  • Nachricht senden

5

Sonntag, 8. Juli 2012, 14:09

Huhu,

Der "Wait for Move's Completion" - Befehl wird an tieferer Stelle im Interpreter umgesetzt:
Vor der Abarbeitung jedes Eventbefehls wird überprüft ob @move_route_waiting gesetzt ist.
Trifft das zu wird die Abarbeitung weiterer Befehle unterbrochen bis weder der Spieler noch ein Event eine "erzwungene" Move-Route ausführen (ist daher evtl. nicht die beste Lösung für dein Problem).
Die entsprechende Stelle findest du in der Methode update in "Interpreter 1" Zeile 145-160.

Wenn du deinen Code mithilfe des "Script..." - Kommandos eines Events ausführst reicht es entsprechend das Kommando an der Stelle zu teilen, an der auf das Ende der Bewegungen gewartet werden soll.


Generell würde ich aber zur Vorsicht raten wenn du die Kommandoliste des Events wärend des Spiels verändern willst.
Zum einen wird es schwerer den geänderten Code nachzuvollziehen, da die eingefügten Befehle nicht im Editor auftauchen, zum anderen können neue Probleme entstehen:
- Die Kommandoliste wird (wenn kein Duplikat verwendet wird) erst zurückgesetzt wenn die Map neu betreten wird, entsprechend darf das neue Kommando in dieser Zeit auch nur einmal eingefügt werden wenn das Event mehrmals ausgeführt wird.
- Durch das Einfügen des Befehls verschiebt sich die Position der dahinterliegenden Befehle. Da auf einen Befehl immer über dessen Position zugegriffen wird muss darauf geachtet werden, dass der aktuelle Befehl ggf. nicht wiederholt wird.
- Wird beispielsweise in einen "Loop" - Block ein zusätzliches Kommando eingefügt dessen "Indent"-Wert mit dem des Loop-Befehls übereinstimmt wird bei der Wiederholung nur noch bis zum neuen Kommando zurückgesprungen anstatt an den Anfang des Loops.

6

Sonntag, 8. Juli 2012, 22:04

Danke für Eure Antworten! Vielleicht war das ein bisschen missverständlich von mir.
Ich will den "Wait for Move's Completion"-Befehl nicht als Event-Command ausführen (in einem Event oder so), sondern ich will ihn im Skripteditor als Rubybefehl ausführen.

Zum Beispiel bei folgender Situation:

Quellcode

1
2
3
4
if @direction == 8
  $game_map.events[@chars[@curr_char].id].move_route(SKIPPABLE, MOVE_UP, MOVE_UP, MOVE_UP)
  @butt_turn_up_gf = Sprite.new($scene.spriteset.viewport1); @butt_turn_up_gf.bitmap = Bitmap.new("Graphics/Pictures/BUT_TURN_up")
end

Aktuell wird die Zeile 3 sofort ausgeführt wenn der Char anfängt, sich zu bewegen. Ich möchte aber, dass die Zeile 3 erst dann ausgeführt wird, wenn die Bewegung beendet ist.
Wie mache ich das? Da muss es doch vll. einen ganz simplen RGSS-Befehl geben?

Reborn

hat beim Stromkonzern schon Rabatt

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

  • Nachricht senden

7

Montag, 9. Juli 2012, 19:46

Du hast wohl bei dem ganzen Event-/Ruby-Scripting irgendwo was vermischt^^
Wenn du das so machen willst, musst du nur abfragen ob ein char gerade irgendwo hinläuft:

Ruby Quellcode

1
2
3
while char.move_route_forcing?
end
@butt_turn_up_gf = Sprite.new($scene.spriteset.viewport1); @butt_turn_up_gf.bitmap = Bitmap.new("Graphics/Pictures/BUT_TURN_up")

Nur so wie ich das jetzt noch verstehe willst du ja nicht, dass deshalb das ganze Spiel auf ein Event warten soll. Also fals du das nicht willst hier noch ne Lösung:

Ruby Quellcode

1
2
3
4
5
6
t = Thread.new do
  while char.move_route_forcing?
  end
  @butt_turn_up_gf = Sprite.new($scene.spriteset.viewport1); @butt_turn_up_gf.bitmap = Bitmap.new("Graphics/Pictures/BUT_TURN_up")
end
t.run()

Ist ne ziemlich hässliche Lösung (mit Threads hast du halt keinen 100% kontrollierten ablauf deiner Events), das Ganze ist auch ziemlich kompliziert. Der Maker ist für sowas eben nicht ausgelegt.

Es gibt aber (oder es fällt mir) noch eine weitere Alternativlösung (ein):
Du fügst 2 Eventbefehle in das Event ein (was m.M.n die beste Lösung ist):

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mr = RPG::MoveRoute.new()
mr.repeat    = false
mr.skippable = true
mr.list.clear()
mr.list.push(RPG::MoveCommand.new(4)) # Move Up
mr.list.push(RPG::MoveCommand.new(4)) # Move Up
mr.list.push(RPG::MoveCommand.new(4)) # Move Up
mr.list.push(RPG::MoveCommand.new())  # Ending Of The Move Route
@list.insert(index, RPG::EventCommand.new(209, indent, [character_id, mr]))
@list.insert(index, RPG::EventCommand.new(210, indent, [])
@list.insert(index, RPG::EventCommand.new(355, indent, ["@butt_turn_up_gf = Sprite.new($scene.spriteset.viewport1); @butt_turn_up_gf.bitmap = Bitmap.new(\"Graphics/Pictures/BUT_TURN_up\")"])
# 209 : Set Move Route
# 210 : Wait For Move's Completion
# 355 : Eval A Script (Script)
# alles muss im Interpreter stehen und die Parameter müssen noch richtig ersetzt werden

Es sieht zwar nach viel Schreibarbeit aus, ist aber mit Methoden und Konstanten zu verkürzen. Das ist sogar zu Raten, dass du dann den ganzen Interpreter deines Spiels ein wenig umschreibst.
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

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Reborn« (9. Juli 2012, 22:44)


8

Montag, 9. Juli 2012, 22:24

Ruby Quellcode

1
2
while char.moving?
end
Urks, damit bringst du jede CPU zum glühen ^^° Davon mal abgesehen: moving? fragt ab ob ein Character sich gerade von einem zum anderen Feld bewegt. Das ist was anderes als das Abarbeiten einer Move-Route.

Also Threads, Schleifen und Ändern einer Event-Liste sind meiner Meinung nach nicht die Lösung für ein solches Problem.

Zitat

Du hast wohl bei dem ganzen Event-/Ruby-Scripting irgendwo was vermischt^^
Jap =/ Leider ist das auch nicht so einfach zu erklären, wie man es richtig macht.

Was du wahrscheinlich suchst ist

Ruby Quellcode

1
character.move_route_forcing

das gibt false zurück wenn das Event/der Player noch mit dem Abarbeiten der Move-Route beschäftigt ist, ansonsten true.

Angenommen deine Klasse sieht so aus:

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MeineKlasse
 
  def initialize
    @phase = 1
  end
 
  def update
    case @phase
      when 1 # setze Move-Route
        $game_map.events[1].move_route(SKIPPABLE, MOVE_UP, MOVE_UP, MOVE_UP)
        @phase = 2
      when 2 # warte bis Move-Route abgearbeitet
        unless $game_map.events[1].move_route_forcing
          @phase = 3
        end
      when 3 # sobald Move-Route abgearbeitet
        # ...
    end
  end
end


Das funktioniert. Richtig hübsch ist das allerdings nicht ^^°
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

9

Samstag, 14. Juli 2012, 17:12

Cool, funktioniert gut! Auch wenn Du es nicht hübsch findest^^

10

Dienstag, 17. Juli 2012, 19:49

Okay nun habe ich mein Skript weiter ausgebaut und möchte gerne die Bewegung von Chars via Skript dynamisieren.
Denn bisher ist das ja recht starr. Mein Ziel ist es, dass das Skript Bewegungsbefehle selbst kombiniert. Um mir möglichst viel Code-Arbeit zu sparen, möchte ich gerne die Befehle spiegeln. Ein Beispiel, aus

Quellcode

1
$game_map.events[1].move_route(SKIPPABLE, MOVE_UP, MOVE_UP, MOVE_RIGHT)

soll

Quellcode

1
$game_map.events[1].move_route(SKIPPABLE, MOVE_DOWN, MOVE_DOWN, MOVE_LEFT)

werden. Somit ergibt sich ein gespiegeltes Bewegungsmuster (ähnlich wie beim Schach bei den Bewegungsmöglichkeiten des Springers)

Meine erste Idee war nun, die einzelnen Bewegungsbefehle in Zahlen umzuwandeln und dann zu rekombinieren. Also MOVE_DOWN eine Zahl zu geben, MOVE_LEFT, usw. Also jeweils als Methode. Das Problem dabei ist, dass ich nicht einfach mehrere Befehle hintereinander stellen kann. Bei folgenden Beispiel:

Quellcode

1
2
3
$game_map.events[1].move_route(SKIPPABLE, MOVE_UP)
$game_map.events[1].move_route(SKIPPABLE, MOVE_UP)
$game_map.events[1].move_route(SKIPPABLE, MOVE_UP)

Hier wird der Charakter nicht etwa 3x nach oben bewegt, sondern nur 2x. Der dritte Befehl und alle weiteren werden verschluckt. Wie löse ich das? Oder soll ich das ganz anders machen? Später möchte ich dann damit eine Situation analysieren und dann entsprechend einem Event befehlen können, dass es 2x LEFT und dann 1x UP gehen soll o.ä. Da es sehr viele Kombinationen gibt, möchte ich halt nicht alle Kombinationen durchkonjugieren, sondern dynamisch generieren lassen. Wie gesagt, ich weiß bloß nicht, wie ich diese
Notfalls nehme ich auch komplett Abstand von dem in diesem Thread oft thematisierten SET MOVE ROUTE Skript und mache das direkt mittels den Bordmitteln von RGSS/Ruby. Hier bräuchte ich bloß eine Hilfestellung wie ich die entsprechenden Move-Befehl einzeln einbinde.

Vielen Dank erneut an Euch!

EDIT: Ich zweifel gerade an meinem Verstand... habe gerade folgendes entdeckt:

Quellcode

1
$game_map.events[13].move_down 

geht ja genauso... mir erschließt sich gerade überhaupt nicht, warum ich das andere skript je benutzt habe... bin also noch am herumprobieren^^°

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Aroka« (17. Juli 2012, 20:31)


Reborn

hat beim Stromkonzern schon Rabatt

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

  • Nachricht senden

11

Dienstag, 17. Juli 2012, 20:18

Ruby Quellcode

1
2
arr = [MOVE_DOWN, MOVE_DOWN, MOVE_LEFT].reverse
$game_map.events[1].move_route(*([SKIPPABLE] + arr))
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

12

Dienstag, 17. Juli 2012, 21:01

Ruby Quellcode

1
2
arr = [MOVE_DOWN, MOVE_DOWN, MOVE_LEFT].reverse
$game_map.events[1].move_route(*([SKIPPABLE] + arr))

Danke! Ich meinte aber nicht rückwärts, sondern gespiegelt. Also MOVE DOWN = MOVE UP,
MOVE LEFT = MOVE RIGHT.
^^

13

Dienstag, 17. Juli 2012, 21:05

Ruby Quellcode

1
2
3
4
5
6
7
8
9
5-MOVE_DOWN=MOVE_UP
5-MOVE_LEFT=MOVE_RIGHT
#das heißt:
 
arr = [MOVE_DOWN, MOVE_DOWN, MOVE_LEFT]
arr_reverse = []
for com in arr
     arr_reverse << 5-com
end

Funktioniert wirklich nur bei den 4 Kommandos, aber aber auch umgekehrt als hier.
Terranigma 2 - Episode I - Open Beta out now!

RPC - Rpg-Maker Community Platform - Spielübergreifende Erfolge und mehr!

Reborn

hat beim Stromkonzern schon Rabatt

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

  • Nachricht senden

14

Dienstag, 17. Juli 2012, 22:10

Dann schreibst du dir halt ne Methode:

Ruby Quellcode

1
2
3
4
5
6
7
8
def mirror(*args)
  args.map! do |i|
    case i
    when MOVE_DOWN then i = MOVE_UP
    # ...
    end
  end
end

Oder benutzt den Trick von The King.
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

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Reborn« (18. Juli 2012, 21:27)


15

Dienstag, 17. Juli 2012, 22:11

Danke King für die Hilfe, das werde ich gleich ausprobieren! :)
Reborn, das mit dem reverse kann ich just jetzt wo anders brauchen, super^^

Jetzt habe ich parallel mich noch mit Pathfinding beschäftigt und versucht, dieses Skript zu nutzen:
[XP] Advanced Pathfinding

Die Erklärung und Anwendung ist ja soweit einfach, aber ich finde einfach meinen Fehler nicht... In der Beschreibung heißt es:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#   - Use the following script call:
#
#     pathfind(X, Y, CHARACTER, RANGE, SUCCESS_PROC, FAIL_PROC)
#     
#     The X and Y are the only required arguments. The others can be omitted.
#     
#     X - The x-coordinate to pathfind to.
#     Y - The y-coordinate to pathfind to.
#
#     CHARACTER - Either an instance of the character ($game_player, 
#                 $game_map.events[ID], etc) or the ID of a character. The ID
#                 will be the event ID. Use -1 for the game player.
#
#     SUCCESS_PROC - A Proc object that will be executed when the player
#                    reaches the defined coordinates.
#     FAILURE_PROC - A Proc object that will be executed when the player
#                    cannot reach the defined coordinates.


Ich habe dann meinen Befehl so angepasst (natürlich nur die zweite Zeile):

Quellcode

1
2
pathfind(X, Y, CHARACTER, RANGE, SUCCESS_PROC, FAIL_PROC)
pathfind(192, 256, $game_map.events[13], 15, p "sucess", p "fail")


Meine Fragen dazu:
a) Was bringt Range? Und welchen Wert muss/kann ich da eintragen? Das wurde mir aus dem Skript nicht deutlich :(
b) Wo liegt der Syntaxfehler? Ich kann leider aus dem Skript nicht die exakte Schreibweise schließen

Danke nochmal für die kompetente und vor allem schnelle Hilfe hier :)

16

Dienstag, 17. Juli 2012, 23:17

Quellcode

1
2
3
4
5
6
7
x = 1
y = 3
id = 1
range = 0
s = Proc.new { print 'Goal Reached!'}
f = Proc.new { print 'Failed!' }
pathfind(x, y, id, range, s, f)


Jetzt habe ich den richtigen Code gefunden (in einem Demobeispiel). Den Code bekomme ich auch zum Laufen, leider nur in einem Event über ein Call Skript.
Wie kriege ich das jetzt in ein "normales" Skript? Ich habe folgendes probiert, bei initialize füge ich noch die Klassen aus dem ForeverZero-Skript ein:

Quellcode

1
2
3
4
5
6
Game_Map.new()
Interpreter.new()
Pathfind.new()
Game_Sytem.new()
Game_Character.new()
Node.new()


Aber irgendwie passt das nicht... es kommt eine Fehlermeldung (wrong numbers arguments...) Was mach ich falsch? Also ein "include" brauche ich ja nicht, weil es keine Module sind, soweit ich weiß. Aber welche Parameter soll ich da übergeben? Bzw. brauch ich das überhaupt?

Reborn

hat beim Stromkonzern schon Rabatt

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

  • Nachricht senden

17

Mittwoch, 18. Juli 2012, 21:30

pathfind ist eine Methode vom Interpreter... Mit dem hier sollte es klappen:

Ruby Quellcode

1
2
3
4
5
class Event
  def pathfind(*args)
    @interpreter.pathfind(*args)
  end
end

Jetzt kannst du es mit $game_map.events[id].pathfind(x, y, id, range, s, f) aufrufen.
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

18

Mittwoch, 18. Juli 2012, 23:00

Danke!!
Hier das steht auch noch im Skript

Quellcode

1
2
3
4
5
6
7
8
9
class Interpreter
 
  def pathfind(x, y, *args)
    args[0] = @event_id if args[0] == nil
    args[1] = 0 if args[1] == nil
    # Add a simpler call for using as a script call
    Pathfind.new(Node.new(x, y), *args)
  end
end

Das kann ich auch direkt verwenden, also als Methodenaufruf Pathfind.new(...)
Jetzt werde ich mich mal an die verschiedenen Bewegungsmuster machen...

19

Freitag, 20. Juli 2012, 18:54

Ich versuche den Befehl für Direction_Fix umzusetzen, leider ist etwas an der Syntax falsch.
Das hier geht ja:

Quellcode

1
$game_map.events[@chars[@active_char_nr].id].move_upper_right


Bloß wie mache ich das beim Direction Fix, der ja ein und ausgeschaltet werden muss:

Quellcode

1
$game_map.events[@chars[@active_char_nr].id].direction_fix = false

Das ist offenbar falsch. Ich habe im Skripteditor bei den Standardskripten unter Game_Character geschaut, dort steht aber nur "@direction_fix = false"
Wie finde ich den Befehl heraus, um das korrekt ein und auszuschalten als Skriptbefehl?

Danke für einen Tipp!

Social Bookmarks