• Anmelden

1

Montag, 22. Juni 2015, 23:45

Zusätzliches Vehicle "Minecart" für den RPG Maker VX Ace

:presentation: Intro


Es gab letztens im Forum die Frage nach einem zusätzlichen Vehicle für den Ace, nachdem der Maker scheinbar im RTP bereits Minecarts vorsah. Da das spannend klang, habe ich mich drangesetzt und kann euch nun Version 1 des Skripts präsentieren. Den ursprünglichen Frage Thread findet ihr hier: RPG Maker VX Ace » Skript-Anfragen » Veteran sucht ein paar Scripts.

:wrench-screwdriver: Benutzung


Fügt das Skript einfach unter Materials ein. Das Minecart kann sich frei innerhalb der Region Acht bewegen, also mappt ein paar Gleise und verteilt dann auf die Gleisstrecke die Region Acht. Ihr braucht dann nurnoch ein Event, das Analog zum Eventbefehl Fahrzeugposition festlegen euch das Minecart auf der Karte platziert. Dafür ruft das Event folgendes Skript auf:

Ruby Quellcode

1
$game_map.minecart.set_location( map_id, 8, 6)

Und schon ist auf der aktuellen Map, an Position (8|6) das Minecart.
Oder ihr kennt euch schon etwas mit dem Skriptsystem aus und macht es über Spielvariablen:

Ruby Quellcode

1
2
3
4
5
$game_map.minecart.set_location(
  $game_variables[4], # Map ID
  $game_variables[5], # X
  $game_variables[6]  # Y
)


:ruby: Quellcode


Spoiler: Sourcecode

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
#==============================================================================
# ** Minecart Vehicle
#==============================================================================
#  Fügt dem Spiel ein weiteres Vehicle, nämlich das Minecart hinzu. Dieses
#  kann sich frei auf Felder mit der Region Acht bewegen (Zeile 74).
#  Um das Minecart zu platzieren, benutze folgenden Skriptaufruf in einem Event
#      $game_map.minecart.set_location( 27, 8, 6)
#  Damit wird das Minecart auf Map 27, auf den Koordinaten (8|6) positioniert.
#  Es ist auch möglich via 
#      $game_map.minecart.set_location( map_id, 8, 6)
#  das Vehicle auf der aktuellen Map zu platzieren, ohne die MapID kennen zu
#  müssen.
#    Das Minecart kann ab Zeile 30 konfiguriert werden, die Geschwindigkeit
#  kann in Zeile 91 festgelegt werden (normalerweise 5 - wie das Schiff).
#------------------------------------------------------------------------------
#  Autor: Playm
#  Datum: Juni 2015
#  Maker: RPG Maker VX Ace
#  Einfache Nutzung in nicht-kommerziellen VX Ace Projekten ist gestattet.
#  Keine kommerzielle Nutzung gestattet. Für Lizenzen an den Autor wenden.
#  Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet.
#==============================================================================
# ** DataManager
#==============================================================================
module DataManager
  def self.vehicles( type )
    vehicle = nil
    if type == :minecart
      vehicle = RPG::System::Vehicle.new
      vehicle.character_name  = 'Vehicle'
      vehicle.character_index = 7
      vehicle.bgm             = RPG::BGM.new
      vehicle.start_map_id    = 0
      vehicle.start_x         = 0
      vehicle.start_y         = 0
    end
    return vehicle
  end
end
#==============================================================================
# ** Game_Map
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # * Create Vehicles
  #--------------------------------------------------------------------------
  def create_vehicles
    @vehicles = []
    @vehicles[0] = Game_Vehicle.new(:boat)
    @vehicles[1] = Game_Vehicle.new(:ship)
    @vehicles[2] = Game_Vehicle.new(:airship)
    @vehicles[3] = Game_Vehicle.new(:minecart)
  end
  #--------------------------------------------------------------------------
  # * Get Vehicle
  #--------------------------------------------------------------------------
  def vehicle(type)
    return @vehicles[0] if type == :boat
    return @vehicles[1] if type == :ship
    return @vehicles[2] if type == :airship
    return @vehicles[3] if type == :minecart
    return nil
  end
  #--------------------------------------------------------------------------
  # * Get Minecart
  #--------------------------------------------------------------------------
  def minecart
    @vehicles[3]
  end
  #--------------------------------------------------------------------------
  # * Determine if Passable by Minecart
  #--------------------------------------------------------------------------
  def minecart_passable?(x, y)
    region_id(x,y) == 8 # Passable if region_id is 8
  end
end
#==============================================================================
# ** Game_Vehicle
#==============================================================================
class Game_Vehicle
  #--------------------------------------------------------------------------
  # * Alias
  #--------------------------------------------------------------------------
  alias_method( :org_init_move_speed_wo_minecart, :init_move_speed )
  alias_method( :org_system_vehicle_wo_minecart, :system_vehicle )
  #--------------------------------------------------------------------------
  # * Initialize Move Speed
  #--------------------------------------------------------------------------
  def init_move_speed
    org_init_move_speed_wo_minecart
    @move_speed = 5 if @type == :minecart
  end
  #--------------------------------------------------------------------------
  # * Get System Settings
  #--------------------------------------------------------------------------
  def system_vehicle
    org_system_vehicle_wo_minecart || DataManager.vehicles( @type )
  end
end
#==============================================================================
# ** Game_Player
#==============================================================================
class Game_Player
  #--------------------------------------------------------------------------
  # * Alias
  #--------------------------------------------------------------------------
  alias_method( :org_map_passable_wo_minecart, :map_passable? )
  alias_method( :org_on_dmge_floor_wo_minecart, :on_damage_floor? )
  #--------------------------------------------------------------------------
  # * Detect Collision with Vehicle
  #--------------------------------------------------------------------------
  def collide_with_vehicles?(x, y)
    $game_map.boat.pos_nt?(x, y) || $game_map.ship.pos_nt?(x, y) ||
    $game_map.vehicles[3].pos_nt?(x, y)
  end
  #--------------------------------------------------------------------------
  # * Determine if Map is Passable
  #     d:  Direction (2,4,6,8)
  #--------------------------------------------------------------------------
  def map_passable?(x, y, d)
    if @vehicle_type == :minecart
      return $game_map.minecart_passable?(x, y)
    end
    org_map_passable_wo_minecart(x, y, d)
  end
  #--------------------------------------------------------------------------
  # * Determine if Riding in Minecart
  #--------------------------------------------------------------------------
  def in_minecart?
    @vehicle_type == :minecart
  end
  #--------------------------------------------------------------------------
  # * Processing of Movement via Input from Directional Buttons
  #--------------------------------------------------------------------------
  def move_by_input
    return if !movable? || $game_map.interpreter.running?
    move_straight(Input.dir4, turn_ok?) if Input.dir4 > 0
  end
  #--------------------------------------------------------------------------
  # * Determine if Player should turn
  #--------------------------------------------------------------------------
  def turn_ok?
    return false if in_minecart?
    return true
  end
  #--------------------------------------------------------------------------
  # * Board Vehicle
  #    Assumes that the player is not currently in a vehicle.
  #--------------------------------------------------------------------------
  def get_on_vehicle
    front_x = $game_map.round_x_with_direction(@x, @direction)
    front_y = $game_map.round_y_with_direction(@y, @direction)
    @vehicle_type = :boat     if $game_map.boat.pos?(front_x, front_y)
    @vehicle_type = :ship     if $game_map.ship.pos?(front_x, front_y)
    @vehicle_type = :airship  if $game_map.airship.pos?(@x, @y)
    @vehicle_type = :minecart if $game_map.minecart.pos?(front_x, front_y)
    if vehicle
      @vehicle_getting_on = true
      force_move_forward unless in_airship?
      @followers.gather
    end
    @vehicle_getting_on
  end
  #--------------------------------------------------------------------------
  # * Determine if Damage Floor
  #--------------------------------------------------------------------------
  def on_damage_floor?
    org_on_dmge_floor_wo_minecart && !in_minecart?
  end
end
zum Lesen den Text mit der Maus markieren

Social Bookmarks