Set Move Route Skript von RPG Studio
Hi!
Ich nutze dieses Skript hier:
Quelle: set move route | RPG Studio
Folgender Befehl, den ich dazu verwende, funktioniert einwandfrei:
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:
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!
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!
Hi!
Du hast das nicht ganz richtig gemacht.
Die korrekte Syntax lautet z.B. so:
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?
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!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!
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:
Bloß was muss ich machen, wenn ich das nach einem Code wie
? Einfach die Methode "command_210" aufrufen, reicht ja nicht?
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?
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:
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:
para sind die parameter welche mitgegeben werden.
Ich hab da auch schon mal, wie der Zufall so will, ein kleines Script geschrieben:
Das Event kann dann z.B. so aussehen:
Das Script habe ich aber nie richtig veröffentlicht, weil mir der Sinn irgendwann entflog. Aber vielleicht hilft es dir ja irgendwie.
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:
|
|
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:
Das Script habe ich aber nie richtig veröffentlicht, weil mir der Sinn irgendwann entflog. Aber vielleicht hilft es dir ja irgendwie.
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?
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
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)
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.
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.
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:
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?
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?
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:
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:
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):
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.
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?
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
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)
|
|
Ruby Quellcode |
1 2 |
while char.moving? end |
Also Threads, Schleifen und Ändern einer Event-Liste sind meiner Meinung nach nicht die Lösung für ein solches Problem.
Jap =/ Leider ist das auch nicht so einfach zu erklären, wie man es richtig macht.
Zitat
Du hast wohl bei dem ganzen Event-/Ruby-Scripting irgendwo was vermischt^^
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 ^^°
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
soll
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:
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:
geht ja genauso... mir erschließt sich gerade überhaupt nicht, warum ich das andere skript je benutzt habe... bin also noch am herumprobieren^^°
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)
|
|
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?
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
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
|
|
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!
RPC - Rpg-Maker Community Platform - Spielübergreifende Erfolge und mehr!
Dann schreibst du dir halt ne Methode:
Oder benutzt den Trick von The King.
|
|
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?
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
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)
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:
Ich habe dann meinen Befehl so angepasst (natürlich nur die zweite Zeile):
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

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
|
|
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?
pathfind ist eine Methode vom Interpreter... Mit dem hier sollte es klappen:
Jetzt kannst du es mit $game_map.events[id].pathfind(x, y, id, range, s, f) aufrufen.
|
|
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?
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
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
Danke!!
Hier das steht auch noch im Skript
Das kann ich auch direkt verwenden, also als Methodenaufruf Pathfind.new(...)
Jetzt werde ich mich mal an die verschiedenen Bewegungsmuster machen...
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...
Ich versuche den Befehl für Direction_Fix umzusetzen, leider ist etwas an der Syntax falsch.
Das hier geht ja:
Bloß wie mache ich das beim Direction Fix, der ja ein und ausgeschaltet werden muss:
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!
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!
Ähnliche Themen
-
Skript-Anfragen »-
Character wahl
(12. Oktober 2011, 22:03)
-
RGSS 1 Probleme & Talk »-
Den Befehl "Set Move Route" im Script ausführen
(19. Mai 2011, 18:13)
-
Einsteigerhilfe »-
NPC Move Problem
(28. Oktober 2009, 09:02)
-
Events & Technik »-
Das Anfänger-Joé braucht Hilfe bei ganz vielen Dingen...
(3. Januar 2009, 13:29)
-
RGSS 1 Probleme & Talk »-
Kurze RGSS Frage: Set Event Position
(27. November 2008, 14:46)


