RPG Maker XP 设置问题

1.部分NPC属于剧情,但是离开地图后再回来他就会重新出现,如果设置变量让他在某件事完成后消失或出现并且以后不再出现该怎么设置?2.原系统队伍里只能容纳4人,我想把它改成... 1.部分NPC属于剧情,但是离开地图后再回来他就会重新出现,如果设置变量让他在某件事完成后消失或出现并且以后不再出现该怎么设置?
2.原系统队伍里只能容纳4人,我想把它改成8人,并且可以选择战斗队员和领队,有谁有那个系统配置吗?
展开
 我来答
157238349
推荐于2016-10-01 · TA获得超过505个赞
知道小有建树答主
回答量:546
采纳率:0%
帮助的人:531万
展开全部
  第二个问题的脚本。。

  #队伍最大人数
  ACTORS = 10 #可以修改这个10这个是人数。下面也一样
  #战斗人数
  BATTLER_ACTORS = 10
  #战斗画面修补
  #目标 3人 200, 4人 160, 5人 120
  SPRITES_BATTLER = 120 #这个120是单个角色的显示大小。人数越多,调的越小
  #游戏开始时步行图的显示(1即是角色1的步行图,如此类推)
  CHARACTER_GRAPHIC = 1
  #==============================================================================
  # ■ Game_Actor
  #------------------------------------------------------------------------------
  #==============================================================================

  class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● バトル画面 X 座标の取得
  #--------------------------------------------------------------------------
  def screen_x
  # パーティ内の并び顺から X 座标を计算して返す
  if self.index != nil
  return self.index * SPRITES_BATTLER + 80
  else
  return 0
  end
  end
  end

  #==============================================================================
  # ■ Game_Party
  #------------------------------------------------------------------------------
  #  パーティを扱うクラスです。ゴールドやアイテムなどの情报が含まれます。このク
  # ラスのインスタンスは $game_party で参照されます。
  #==============================================================================

  class Game_Party
  #--------------------------------------------------------------------------
  # ● アクターを加える
  # actor_id : アクター ID
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
  # アクターを取得
  actor = $game_actors[actor_id]
  # パーティ人数が 4 人未満で、このアクターがパーティにいない场合
  if @actors.size < ACTORS and not @actors.include?(actor)
  # アクターを追加
  @actors.push(actor)
  # プレイヤーをリフレッシュ
  $game_player.refresh
  end
  end
  #--------------------------------------------------------------------------
  # ● アクターの配列
  #--------------------------------------------------------------------------
  def actors
  a = []
  if $game_temp.in_battle
  for i in 0...[@actors.size, BATTLER_ACTORS].min
  a.push(@actors[i])
  end
  else
  a = @actors
  end
  return a
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (ステータスウィンドウがアクティブの场合)
  #--------------------------------------------------------------------------
  def change_actor(index1, index2)
  temp_skill1 = @actors[index1]
  temp_skill2 = @actors[index2]
  # 実际に入れ替える
  @actors[index1] = temp_skill2
  @actors[index2] = temp_skill1
  end
  #--------------------------------------------------------------------------
  # ● 全员のアクションクリア
  #--------------------------------------------------------------------------
  def clear_actions
  # パーティ全员のアクションをクリア
  for actor in actors
  actor.current_action.clear
  end
  end
  #--------------------------------------------------------------------------
  # ● コマンド入力可能判定
  #--------------------------------------------------------------------------
  def inputable?
  # 一人でもコマンド入力可能なら true を返す
  for actor in actors
  if actor.inputable?
  return true
  end
  end
  return false
  end
  #--------------------------------------------------------------------------
  # ● 対象アクターのランダムな决定
  # hp0 : HP 0 のアクターに限る
  #--------------------------------------------------------------------------
  def random_target_actor(hp0 = false)
  # ルーレットを初期化
  roulette = []
  # ループ
  for actor in actors
  # 条件に该当する场合
  if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
  # アクターのクラスの [位置] を取得
  position = $data_classes[actor.class_id].position
  # 前卫のとき n = 4、中卫のとき n = 3、後卫のとき n = 2
  n = 4 - position
  # ルーレットにアクターを n 回追加
  n.times do
  roulette.push(actor)
  end
  end
  end
  # ルーレットのサイズが 0 の场合
  if roulette.size == 0
  return nil
  end
  # ルーレットを回し、アクターを决定
  return roulette[rand(roulette.size)]
  end
  #--------------------------------------------------------------------------
  # ● 全灭判定
  #--------------------------------------------------------------------------
  def all_dead?
  # パーティ人数が 0 人の场合
  if $game_party.actors.size == 0
  return false
  end
  # HP 0 以上のアクターがパーティにいる场合
  for actor in actors
  if actor.hp > 0
  return false
  end
  end
  # 全灭
  return true
  end
  #--------------------------------------------------------------------------
  # ● 対象アクターのスムーズな决定
  # actor_index : アクターインデックス
  #--------------------------------------------------------------------------
  def smooth_target_actor(actor_index)
  # アクターを取得
  actor = actors[actor_index]
  # アクターが存在する场合
  if actor != nil and actor.exist?
  return actor
  end
  # ループ
  for actor in actors
  # アクターが存在する场合
  if actor.exist?
  return actor
  end
  end
  end
  end

  #==============================================================================
  # ■ Game_Player
  #------------------------------------------------------------------------------
  #  プレイヤーを扱うクラスです。イベントの起动判定や、マップのスクロールなどの
  # 机能を持っています。このクラスのインスタンスは $game_player で参照されます。
  #==============================================================================

  class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
  # パーティ人数が 0 人の场合
  if $game_party.actors.size == 0
  # キャラクターのファイル名と色相をクリア
  @character_name = ""
  @character_hue = 0
  # メソッド终了
  return
  end
  # アクターを取得
  if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) && CHARACTER_GRAPHIC != 0
  actor = $game_actors[CHARACTER_GRAPHIC]
  else
  actor = $game_party.actors[0]
  end
  # キャラクターのファイル名と色相を设定
  @character_name = actor.character_name
  @character_hue = actor.character_hue
  # 不透明度と合成方法を初期化
  @opacity = 255
  @blend_type = 0
  end
  end

  #==============================================================================
  # ■ Spriteset_Battle
  #------------------------------------------------------------------------------
  #  バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
  # スの内部で使用されます。
  #==============================================================================

  class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
  # ビューポートを作成
  @viewport1 = Viewport.new(0, 0, 640, 640)#320
  @viewport2 = Viewport.new(0, 0, 640, 480)
  @viewport3 = Viewport.new(0, 0, 640, 480)
  @viewport4 = Viewport.new(0, 0, 640, 480)
  @viewport2.z = 101
  @viewport3.z = 200
  @viewport4.z = 5000
  # バトルバックスプライトを作成
  @battleback_sprite = Sprite.new(@viewport1)
  # エネミースプライトを作成
  @enemy_sprites = []
  for enemy in $game_troop.enemies.reverse
  @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  end
  # アクタースプライトを作成
  @actor_sprites = []
  @actor_sprites.push(Sprite_Battler.new(@viewport2))
  @actor_sprites.push(Sprite_Battler.new(@viewport2))
  @actor_sprites.push(Sprite_Battler.new(@viewport2))
  @actor_sprites.push(Sprite_Battler.new(@viewport2))
  @actor_sprites.push(Sprite_Battler.new(@viewport2))
  if BATTLER_ACTORS > 4
  for i in 4...BATTLER_ACTORS
  @actor_sprites.push(Sprite_Battler.new(@viewport2))
  end
  end
  # 天候を作成
  @weather = RPG::Weather.new(@viewport1)
  # ピクチャスプライトを作成
  @picture_sprites = []
  for i in 51..100
  @picture_sprites.push(Sprite_Picture.new(@viewport3,
  $game_screen.pictures[i]))
  end
  # タイマースプライトを作成
  @timer_sprite = Sprite_Timer.new
  # フレーム更新
  update
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_actor_change update
  def update
  if BATTLER_ACTORS > 4
  for i in 4...BATTLER_ACTORS
  @actor_sprites[i].battler = $game_party.actors[i]
  end
  end
  update_actor_change
  end
  end

  #==============================================================================
  # ■ Window_MenuStatus
  #------------------------------------------------------------------------------
  #  メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
  #==============================================================================

  class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
  super(0, 0, 480, 480)
  refresh
  self.active = false
  self.index = -1
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
  if self.contents != nil
  self.contents.dispose
  self.contents = nil
  end
  @item_max = $game_party.actors.size
  self.contents = Bitmap.new(width - 32, self.row_max * 116 - 16)
  for i in 0...$game_party.actors.size
  x = 64
  y = i * 116
  actor = $game_party.actors[i]
  draw_actor_graphic(actor, x - 40, y + 80)
  draw_actor_name(actor, x, y)
  draw_actor_class(actor, x + 144, y)
  draw_actor_level(actor, x, y + 32)
  draw_actor_state(actor, x + 90, y + 32)
  draw_actor_exp(actor, x, y + 64)
  draw_actor_hp(actor, x + 236, y + 32)
  draw_actor_sp(actor, x + 236, y + 64)
  end
  end
  #--------------------------------------------------------------------------
  # ● カーソル矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
  # カーソル位置が 0 未満の场合
  if @index < 0
  self.cursor_rect.empty
  return
  end
  # 现在の行を取得
  row = @index
  # 现在の行が、表示されている先头の行より前の场合
  if row < self.top_row
  # 现在の行が先头になるようにスクロール
  self.top_row = row
  end
  # 现在の行が、表示されている最後尾の行より後ろの场合
  if row > self.top_row + (self.page_row_max - 1)
  # 现在の行が最後尾になるようにスクロール
  self.top_row = row - (self.page_row_max - 1)
  end
  # カーソルの幅を计算
  cursor_width = self.width - 32
  # カーソルの座标を计算
  x = @index % @column_max * (cursor_width + 32)
  y = @index / @column_max * 116 - self.oy
  # カーソルの矩形を更新
  self.cursor_rect.set(x, y, self.width - 32, 100)
  end
  #--------------------------------------------------------------------------
  # ● 先头の行の取得
  #--------------------------------------------------------------------------
  def top_row
  # ウィンドウ内容の転送元 Y 座标を、1 行の高さ 116 で割る
  return self.oy / 116
  end
  #--------------------------------------------------------------------------
  # ● 先头の行の设定
  # row : 先头に表示する行
  #--------------------------------------------------------------------------
  def top_row=(row)
  # row が 0 未満の场合は 0 に修正
  if row < 0
  row = 0
  end
  # row が row_max - 1 超の场合は row_max - 1 に修正
  if row > row_max - 1
  row = row_max - 1
  end
  # row に 1 行の高さ 116 を挂け、ウィンドウ内容の転送元 Y 座标とする
  self.oy = row * 116
  end
  #--------------------------------------------------------------------------
  # ● 1 ページに表示できる行数の取得
  #--------------------------------------------------------------------------
  def page_row_max
  return 4
  end
  end

  #==============================================================================
  # ■ Window_BattleStatus
  #------------------------------------------------------------------------------
  #  バトル画面でパーティメンバーのステータスを表示するウィンドウです。
  #==============================================================================

  class Window_BattleStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_LargeParty initialize
  def initialize
  # 元の処理を実行
  initialize_KGC_LargeParty
  # レベルアップフラグを再作成
  @level_up_flags = []
  for i in 0...BATTLER_ACTORS
  @level_up_flags[i] = false
  end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
  self.contents.clear
  self.contents.font.color = system_color
  # self.contents.font.size = 18
  # self.contents.draw_text(0, 32, 24, 32, "HP")
  # self.contents.draw_text(0, 64, 24, 32, "MP")
  @item_max = $game_party.actors.size
  # self.contents.font.size = 20
  for i in 0...$game_party.actors.size
  actor = $game_party.actors[i]
  actor_x = i * SPRITES_BATTLER + 4
  # draw_actor_name(actor, actor_x, 0)
  # draw_actor_hp(actor, actor_x, 32, 120)
  # draw_actor_sp(actor, actor_x, 64, 120)
  if @level_up_flags[i]
  self.contents.font.color = normal_color
  self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  else
  #draw_actor_state(actor, actor_x, 96)
  end
  end
  end
  end

  #==============================================================================
  # ■ Scene_Menu
  #------------------------------------------------------------------------------
  #  メニュー画面の処理を行うクラスです。
  #==============================================================================

  class Scene_Menu
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  # menu_index : コマンドのカーソル初期位置
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
  @menu_index = menu_index
  @actor_change = false
  @actor_index = nil
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (コマンドウィンドウがアクティブの场合)
  #--------------------------------------------------------------------------
  alias update_command_actor_change update_command
  def update_command
  # 元の処理を実行
  update_command_actor_change
  # 方向ボタンの左か右が押された场合
  if Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT)
  # 决定 SE を演奏
  $game_system.se_play($data_system.decision_se)
  @command_window.active = false
  @status_window.active = true
  @status_window.index = 0
  @actor_change = true
  @actor_index = nil
  return
  end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (ステータスウィンドウがアクティブの场合)
  #--------------------------------------------------------------------------
  def update_status
  # B ボタンが押された场合
  if Input.trigger?(Input::B)
  # キャンセル SE を演奏
  $game_system.se_play($data_system.cancel_se)
  # コマンドウィンドウをアクティブにする
  @command_window.active = true
  @status_window.active = false
  @status_window.index = -1
  @actor_change = false
  return
  end
  # C ボタンが押された场合
  if Input.trigger?(Input::C)
  if @actor_change
  # 决定 SE を演奏
  $game_system.se_play($data_system.decision_se)
  if @actor_index == nil
  @actor_index = @status_window.index
  else
  $game_party.change_actor(@actor_index, @status_window.index)
  @actor_index = nil
  @status_window.refresh
  if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) == false || CHARACTER_GRAPHIC == 0
  $game_player.refresh
  end
  end
  return
  else
  # コマンドウィンドウのカーソル位置で分岐
  case @command_window.index
  when 1 # スキル
  # このアクターの行动制限が 2 以上の场合
  if $game_party.actors[@status_window.index].restriction >= 2
  # ブザー SE を演奏
  $game_system.se_play($data_system.buzzer_se)
  return
  end
  # 决定 SE を演奏
  $game_system.se_play($data_system.decision_se)
  # スキル画面に切り替え
  $scene = Scene_Skill.new(@status_window.index)
  when 2 # 装备
  # 决定 SE を演奏
  $game_system.se_play($data_system.decision_se)
  # 装备画面に切り替え
  $scene = Scene_Equip.new(@status_window.index)
  when 3 # ステータス
  # 决定 SE を演奏
  $game_system.se_play($data_system.decision_se)
  # ステータス画面に切り替え
  $scene = Scene_Status.new(@status_window.index)
  end
  return
  end
  end
  end
  end

  #==============================================================================
  # ■ Scene_Battle (分割定义 2)
  #------------------------------------------------------------------------------
  #  バトル画面の処理を行うクラスです。
  #==============================================================================

  class Scene_Battle
  #--------------------------------------------------------------------------
  # ● アクターコマンドウィンドウのセットアップ
  #--------------------------------------------------------------------------
  alias phase3_setup_command_window_actor_change phase3_setup_command_window
  def phase3_setup_command_window
  # 元の処理を実行
  phase3_setup_command_window_actor_change
  # アクターコマンドウィンドウの位置を设定
  @actor_command_window.x = @actor_index * SPRITES_BATTLER
  end
  end
更多追问追答
追问
……
追答
#队伍最大人数
ACTORS = 10 #可以修改这个10这个是人数。下面也一样
#战斗人数
BATTLER_ACTORS = 10
#战斗画面修补
#目标 3人 200, 4人 160, 5人 120
SPRITES_BATTLER = 120 #这个120是单个角色的显示大小。人数越多,调的越小
#游戏开始时步行图的显示(1即是角色1的步行图,如此类推)
CHARACTER_GRAPHIC = 1
这一段有没有看哦。。。。。。我都有在旁边做注释了的说。。。

参考资料: 我的相同回答。http://zhidao.baidu.com/question/289785434.html

舞神游子
2011-07-21 · 超过11用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
1、楼主可以看看视频系统学习一下,可以设置一个进程变量,例如剧情完后设置变量为10,在npc新建一页设个开关,如果变量大于等于10就执行这一页的事件
2、可以去66rpg找
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式