RPGXP: Airship

>VoDich<

Legend of Zelda
{@: AirShip

người request hơi nhìu mà lão dương dê chẳng thèm share, tui cũng chưa thấy cái airship bao giờ nhưng nghe tên gọi thì có vẻ là 1 cái thuyền bay,
thôi thì mấy bạn dùng tạm cái airship này vậy, có thể ko = của lão dương nhưng cũng ngon lành lắm

sử dụng 3 event chính:
- airport: dùng để hạ cánh hoặc leo lên airship
- ship_motion_controller : tạo 1 hiệu ứng nhỏ làm airship đong đưa lắc lư
- air_ship: nó đó

về mặt graphics bạn cần 4 hình airship với 4 direction (left,right,up,down) add vô Pictures Resource, 4 hình tiếp theo cho 4 cái bóng của airship theo 4 hướng cũng cho dzô Pictures Resource.

Ok, phần chi tiết xem demo nhé

giờ tới variables: sử dụng 6 variables

0001: ship_x
0002: ship_y
0003: ship_motion
0004: flag
0005: ship_motion2
0006: enter_ship

nếu ko sử dụng mặc định 6 variable đầu này thì bạn cần sửa lại các thứ tự variable cho đúng trong 3 event trên. chú ý, variable 6: enter_ship có sử dụng trong script, vì vậy nhớ thay đồi trong script lun (sửa chỗ nào thì xem tiếp)

tiếp theo là script, airship này có modify vài chỗ nhỏ trong 3 script (tôi có để dấu ** trong demo)

Game_Character 2
Game_Character 3
Game_Event

với 1 số bạn khi đem airship này vào game của mình thì có thể 3 script trên trong game của bạn đã có thể có sự thay đồi so với script mặc định. vì vậy tôi ko thể biết số dòng chính xác để có thể hướng dẫn thêm vào cho các bạn. hướng dẫn thêm vào sau cho script mặc định

---------------------------------------------
trong Game_Character 2 tìm dòng 81

Mã:
distance = 2 ** @move_speed

thay =

Mã:
    if $game_variables[6]==0 #thay số 6 thành variable bạn tự chọn cho (enter_ship)
      @ship_speed=4 #tốc tộ mặc định của character là 4
    else 
       @ship_speed=2 #tốc độ của airship
     end
    distance = 2 ** @ship_speed
--------------------------------------------
thay đồi trong Game_Character 3 thì hơi nhìu nên bạn cứ copy hết đoạn script này rùi paste dzô

Mã:
#==============================================================================
# ■ Game_Character (分割定義 3)
#------------------------------------------------------------------------------
#  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
# クラスのスーパークラスとして使用されます。
#==============================================================================

class Game_Character
  #--------------------------------------------------------------------------
  # ● 下に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 下を向く
    if turn_enabled
      turn_down
    end
     #MODIFY-----------MODIFY--------------MODIFY
     # tiny modify
if $game_variables[6]==0  #false thay số 6 thành variable bạn tự chọn cho (enter_ship)
    if passable?(@x, @y, 2)
      turn_down
      @y += 1
      increase_steps
    else
      check_event_trigger_touch(@x, @y+1)
    end
  else #enter ship
      turn_down
      @y += 1
      increase_steps
end
#end
 #MODIFY-----------MODIFY--------------MODIFY
  end
  #--------------------------------------------------------------------------
  # ● 左に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_left(turn_enabled = true)
    # 左を向く
    if turn_enabled
      turn_left
    end
 #MODIFY-----------MODIFY--------------MODIFY
     # tiny modify 
if $game_variables[6]==0  #false thay số 6 thành variable bạn tự chọn cho (enter_ship)
    if passable?(@x, @y, 4)
      turn_left
      @x -= 1
      increase_steps
    else
      check_event_trigger_touch(@x-1, @y)
    end
else #enter ship
      turn_left
      @x -= 1
      increase_steps
end
#end 
#MODIFY-----------MODIFY--------------MODIFY
  end
  #--------------------------------------------------------------------------
  # ● 右に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_right(turn_enabled = true)
    # 右を向く
    if turn_enabled
      turn_right
    end
 #MODIFY-----------MODIFY--------------MODIFY
 # tiny modify
if $game_variables[6]==0  #false thay số 6 thành variable bạn tự chọn cho (enter_ship)
    if passable?(@x, @y, 6)
      turn_right
      @x += 1
      increase_steps
    else
      check_event_trigger_touch(@x+1, @y)
    end
else #enter ship
      turn_right
      @x += 1
      increase_steps
end
#end
 #MODIFY-----------MODIFY--------------MODIFY
  end
  #--------------------------------------------------------------------------
  # ● 上に移動
  #     turn_enabled : その場での向き変更を許可するフラグ
  #--------------------------------------------------------------------------
  def move_up(turn_enabled = true)
    # 上を向く
    if turn_enabled
      turn_up
    end
 #MODIFY-----------MODIFY--------------MODIFY
     # tiny modify
if $game_variables[6]==0  #false thay số 6 thành variable bạn tự chọn cho (enter_ship)
    if passable?(@x, @y, 8)
      turn_up
      @y -= 1
      increase_steps
    else
      check_event_trigger_touch(@x, @y-1)
    end
else #enter ship
      turn_up
      @y -= 1
      increase_steps
end
#end
 #MODIFY-----------MODIFY--------------MODIFY
  end
  #--------------------------------------------------------------------------
  # ● 左下に移動
  #--------------------------------------------------------------------------
  def move_lower_left
    # 向き固定でない場合
    unless @direction_fix
      # 右向きだった場合は左を、上向きだった場合は下を向く
      @direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
    end
    # 下→左、左→下 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 4)) or
       (passable?(@x, @y, 4) and passable?(@x - 1, @y, 2))
      # 座標を更新
      @x -= 1
      @y += 1
      # 歩数増加
      increase_steps
    end
  end
  #--------------------------------------------------------------------------
  # ● 右下に移動
  #--------------------------------------------------------------------------
  def move_lower_right
    # 向き固定でない場合
    unless @direction_fix
      # 左向きだった場合は右を、上向きだった場合は下を向く
      @direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
    end
    # 下→右、右→下 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, 2) and passable?(@x, @y + 1, 6)) or
       (passable?(@x, @y, 6) and passable?(@x + 1, @y, 2))
      # 座標を更新
      @x += 1
      @y += 1
      # 歩数増加
      increase_steps
    end
  end
  #--------------------------------------------------------------------------
  # ● 左上に移動
  #--------------------------------------------------------------------------
  def move_upper_left
    # 向き固定でない場合
    unless @direction_fix
      # 右向きだった場合は左を、下向きだった場合は上を向く
      @direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
    end
    # 上→左、左→上 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 4)) or
       (passable?(@x, @y, 4) and passable?(@x - 1, @y, 8))
      # 座標を更新
      @x -= 1
      @y -= 1
      # 歩数増加
      increase_steps
    end
  end
  #--------------------------------------------------------------------------
  # ● 右上に移動
  #--------------------------------------------------------------------------
  def move_upper_right
    # 向き固定でない場合
    unless @direction_fix
      # 左向きだった場合は右を、下向きだった場合は上を向く
      @direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
    end
    # 上→右、右→上 のどちらかのコースが通行可能な場合
    if (passable?(@x, @y, 8) and passable?(@x, @y - 1, 6)) or
       (passable?(@x, @y, 6) and passable?(@x + 1, @y, 8))
      # 座標を更新
      @x += 1
      @y -= 1
      # 歩数増加
      increase_steps
    end
  end
  #--------------------------------------------------------------------------
  # ● ランダムに移動
  #--------------------------------------------------------------------------
  def move_random
    case rand(4)
    when 0  # 下に移動
      move_down(false)
    when 1  # 左に移動
      move_left(false)
    when 2  # 右に移動
      move_right(false)
    when 3  # 上に移動
      move_up(false)
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーに近づく
  #--------------------------------------------------------------------------
  def move_toward_player
    # プレイヤーの座標との差を求める
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    # 座標が等しい場合
    if sx == 0 and sy == 0
      return
    end
    # 差の絶対値を求める
    abs_sx = sx.abs
    abs_sy = sy.abs
    # 横の距離と縦の距離が等しい場合
    if abs_sx == abs_sy
      # ランダムでどちらかを 1 増やす
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # 横の距離のほうが長い場合
    if abs_sx > abs_sy
      # 左右方向を優先し、プレイヤーのいるほうへ移動
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    # 縦の距離のほうが長い場合
    else
      # 上下方向を優先し、プレイヤーのいるほうへ移動
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーから遠ざかる
  #--------------------------------------------------------------------------
  def move_away_from_player
    # プレイヤーの座標との差を求める
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    # 座標が等しい場合
    if sx == 0 and sy == 0
      return
    end
    # 差の絶対値を求める
    abs_sx = sx.abs
    abs_sy = sy.abs
    # 横の距離と縦の距離が等しい場合
    if abs_sx == abs_sy
      # ランダムでどちらかを 1 増やす
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    # 横の距離のほうが長い場合
    if abs_sx > abs_sy
      # 左右方向を優先し、プレイヤーのいないほうへ移動
      sx > 0 ? move_right : move_left
      if not moving? and sy != 0
        sy > 0 ? move_down : move_up
      end
    # 縦の距離のほうが長い場合
    else
      # 上下方向を優先し、プレイヤーのいないほうへ移動
      sy > 0 ? move_down : move_up
      if not moving? and sx != 0
        sx > 0 ? move_right : move_left
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 一歩前進
  #--------------------------------------------------------------------------
  def move_forward
    case @direction
    when 2
      move_down(false)
    when 4
      move_left(false)
    when 6
      move_right(false)
    when 8
      move_up(false)
    end
  end
  #--------------------------------------------------------------------------
  # ● 一歩後退
  #--------------------------------------------------------------------------
  def move_backward
    # 向き固定の状態を記憶
    last_direction_fix = @direction_fix
    # 強制的に向き固定
    @direction_fix = true
    # 向きで分岐
    case @direction
    when 2  # 下
      move_up(false)
    when 4  # 左
      move_right(false)
    when 6  # 右
      move_left(false)
    when 8  # 上
      move_down(false)
    end
    # 向き固定の状態を元に戻す
    @direction_fix = last_direction_fix
  end
  #--------------------------------------------------------------------------
  # ● ジャンプ
  #     x_plus : X 座標加算値
  #     y_plus : Y 座標加算値
  #--------------------------------------------------------------------------
  def jump(x_plus, y_plus)
    # 加算値が (0,0) ではない場合
    if x_plus != 0 or y_plus != 0
      # 横の距離のほうが長い場合
      if x_plus.abs > y_plus.abs
        # 左右どちらかに向き変更
        x_plus < 0 ? turn_left : turn_right
      # 縦の距離のほうが長いか等しい場合
      else
        # 上下どちらかに向き変更
        y_plus < 0 ? turn_up : turn_down
      end
    end
    # 新しい座標を計算
    new_x = @x + x_plus
    new_y = @y + y_plus
    # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
      # 姿勢を矯正
      straighten
      # 座標を更新
      @x = new_x
      @y = new_y
      # 距離を計算
      distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
      # ジャンプカウントを設定
      @jump_peak = 10 + distance - @move_speed
      @jump_count = @jump_peak * 2
      # 停止カウントをクリア
      @stop_count = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 下を向く
  #--------------------------------------------------------------------------
  def turn_down
    unless @direction_fix
      @direction = 2
      @stop_count = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 左を向く
  #--------------------------------------------------------------------------
  def turn_left
    unless @direction_fix
      @direction = 4
      @stop_count = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 右を向く
  #--------------------------------------------------------------------------
  def turn_right
    unless @direction_fix
      @direction = 6
      @stop_count = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 上を向く
  #--------------------------------------------------------------------------
  def turn_up
    unless @direction_fix
      @direction = 8
      @stop_count = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 右に 90 度回転
  #--------------------------------------------------------------------------
  def turn_right_90
    case @direction
    when 2
      turn_left
    when 4
      turn_up
    when 6
      turn_down
    when 8
      turn_right
    end
  end
  #--------------------------------------------------------------------------
  # ● 左に 90 度回転
  #--------------------------------------------------------------------------
  def turn_left_90
    case @direction
    when 2
      turn_right
    when 4
      turn_down
    when 6
      turn_up
    when 8
      turn_left
    end
  end
  #--------------------------------------------------------------------------
  # ● 180 度回転
  #--------------------------------------------------------------------------
  def turn_180
    case @direction
    when 2
      turn_up
    when 4
      turn_right
    when 6
      turn_left
    when 8
      turn_down
    end
  end
  #--------------------------------------------------------------------------
  # ● 右か左に 90 度回転
  #--------------------------------------------------------------------------
  def turn_right_or_left_90
    if rand(2) == 0
      turn_right_90
    else
      turn_left_90
    end
  end
  #--------------------------------------------------------------------------
  # ● ランダムに方向転換
  #--------------------------------------------------------------------------
  def turn_random
    case rand(4)
    when 0
      turn_up
    when 1
      turn_right
    when 2
      turn_left
    when 3
      turn_down
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーの方を向く
  #--------------------------------------------------------------------------
  def turn_toward_player
    # プレイヤーの座標との差を求める
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    # 座標が等しい場合
    if sx == 0 and sy == 0
      return
    end
    # 横の距離のほうが長い場合
    if sx.abs > sy.abs
      # 左右方向でプレイヤーのいるほうを向く
      sx > 0 ? turn_left : turn_right
    # 縦の距離のほうが長い場合
    else
      # 上下方向でプレイヤーのいるほうを向く
      sy > 0 ? turn_up : turn_down
    end
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーの逆を向く
  #--------------------------------------------------------------------------
  def turn_away_from_player
    # プレイヤーの座標との差を求める
    sx = @x - $game_player.x
    sy = @y - $game_player.y
    # 座標が等しい場合
    if sx == 0 and sy == 0
      return
    end
    # 横の距離のほうが長い場合
    if sx.abs > sy.abs
      # 左右方向でプレイヤーのいないほうを向く
      sx > 0 ? turn_right : turn_left
    # 縦の距離のほうが長い場合
    else
      # 上下方向でプレイヤーのいないほうを向く
      sy > 0 ? turn_down : turn_up
    end
  end
end
-------------------------------------------------
tìm trong script Game_Event đến dòng 209

Mã:
  def update
    super
    # 自動イベントの起動判定

copy và paste đoạn code sau bên trên dòng 209

Mã:
   def update_move
    distance = 2 ** @move_speed
    if @y * 128 > @real_y
      @real_y = [@real_y + distance, @y * 128].min
    end
    if @x * 128 < @real_x
      @real_x = [@real_x - distance, @x * 128].max
    end
    if @x * 128 > @real_x
      @real_x = [@real_x + distance, @x * 128].min
    end
    if @y * 128 < @real_y
      @real_y = [@real_y - distance, @y * 128].max
    end
    if @walk_anime
      @anime_count += 1.5
    elsif @step_anime
      @anime_count += 1
    end
  end

OK vậy là xong, tôi có gửi kèm demo (not encrypt) bạn mở demo ra vọc là hiểu cách thức nó hoạt động liền
Have fun!!!


:@}
 

Attachments

Cái Air ship của lão dương hay đấy...nhưng kid muốn khi lên airship thì không thêm teleport sang map khác thì phải làm sao

Vodich co' Y!M không...cho kid xi nd9i....on line dễ thảo luận ^__^
 
{@: Y!M: zeroonea
bạn nói ngắn gọn quá tôi ko hiểu bạn mún cái gì nữa ^^ :@}
 
{@: cha ken trừ điểm bậy quá, nhòm giờ post 2 bài đều 9 giờ 01 phút thì 100 % do bug rùi, tui có cố tình đâu nào,
lỗi ở đâu thì nói ra đi cụ dương ới ời ơi

:@}
 
Công nhận, tui test không thấy lỗi..
Hoan nghênh tinh thần của Vodich :D share tại chỗ, kô encrypt, hướng dẫn dễ hiểu
 
Để tui chỉ cho luôn nhe :
_ Cái Air Ship này ko đáp xuống đất BT đc mà chỉ hạ cánh ở những chỗ cố định
_ AS của tui có thể đáp xuống bất cứ lúc nào , trừ biển và 1 số nơi ko cho phép nó đáp
Thế cơ mà ^^ , chắc ông chưa chơi FF nên chưa hỉu cách vận hành AS thui , chơi qua đi nghen :p
 
Tưởng VD chuyên nghề Game Maker sao nghiên cứu cả RPG XP nữa vậy?
Nếu như mà RPG XP làm việc được với phần mềm nhúng thì sẽ có rất nhiều chuyện để nghĩ, tiếc là không có time để tìm hiểu.
 
còn tùy game và nhu cầu sử dụng, chơi qua wild arms 2 sẽ thấy được cái hay của nó.
Còn airship cứ bạ đâu nhét đó thì nó thành 1 cái xe đạp chứ kô được coi trọng = 1 cái máy bay nữa.......

Và nếu ông kô ngại, hay kô giấu diếm thì share bản airship của ông xem
sao cứ gì cũng phải giống FF thế nhỉ?
 
vì thế mới bị bó gọt vào 1 nhãn hiệu, đã RPG là phải như thế, đã RPG là phải giống FF.............
ông share cái as của ông xem nào, hay định làm loãng topic rồi Ken chém?
 
{@: @duong44, dekarvn: thanks, nói cho cùng cái bug ông nói ra cũng ko phải là bug, nó chỉ là 1 tính năng thui,
tui ít chơi game lắm nên, chẳng game nào chơi quá 1 ngày ^^ chơi riết cũng chán, nói chung là modify vài event nhỏ là mún đáp đâu cũng được, cơ bản là vậy.
@HH: e hèm, nói chung là học xong 1 khóa lập trình cơ bản, mình hiểu nó, nó hiểu mình thì việc tìm hiểu các ngôn ngữ khác cũng ko có gì khó đâu bạn, thử xem ^^.
------
tóm lại người 'năm xưa' spam ở đây ko phải tại hạ, sư huynh ken chớ hiểu nhầm, nick này xài của thằng bạn (nó đó), nick trước là hahaha123 gì đó đệ bỏ lâu rùi.
ps:sao ko bỏ điểm trừ đi ken ui
:@}
 
Oái , các ông bằng tuổi nhau mà sao lại huynh đệ gì :(( , ông Ken cũng 1987 như tui thoai :D
Mà cái Air Ship ông thử sửa cho nó đáp đâu cũng đc coi , tui muốn xem 1 số cái nữa xem có Bug ko :-/
 
{@: nói chung 1 là tự làm đi, tui chẳng rãnh mà update lại, trình độ ông thì dư sức rùi, còn ko thích thì thui vậy, dzay nha :@}
 
Back
Top