设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: iisnow
打印 上一主题 下一主题

[原创发布] 任务系统的简单编辑系统【更新中】

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
152 小时
注册时间
2010-7-4
帖子
144
11
发表于 2011-11-26 18:53:39 | 只看该作者
我不确定这个很简单
[/img]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

井蓝

梦石
0
星屑
58
在线时间
351 小时
注册时间
2011-1-14
帖子
277
12
发表于 2011-11-26 19:53:21 | 只看该作者
楼主可以把独立开关换成普通开关么= =我想起了XAS蛋疼的独立开关D的判定……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4621
在线时间
410 小时
注册时间
2008-1-18
帖子
407
13
发表于 2011-12-4 12:22:48 | 只看该作者
这可是好东西啊。谢谢共享
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2011-12-19
帖子
17
14
发表于 2011-12-20 20:34:48 | 只看该作者
拿走
谢了!!
希望没有什么严重的bug。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1323
在线时间
831 小时
注册时间
2007-12-25
帖子
1558
15
发表于 2011-12-21 03:33:43 | 只看该作者
脚本的真谛啊!
想起以前的蛋疼任务系统就难受。

我能提点意见么?

LZ的脚本能更便捷一些。
可以用RM编辑器自带的嵌套格式么,比如说放到一个条件分歧里,只是条件比较特殊(分歧内容可以直接填入任务名,脚本内eval出错就认为这是个任务名),这样脚本可以识别,再来就是自动生成结束标志,而且鼠标点击一下可以直接选中全部内容。有适当的缩进,便于识别。
然后就是获得奖励这一块,还是要留给作者自由空间。比方说可以给一个显示文章的空间用于补充说明。因为好多奖励,比如说交通工具,角色加入,或者开关变量,更有地图传送等等,想不完的,你说是吧,所以还要有一个自由事件执行实际奖励空间。然后你的奖励技能什么的就自然产生了。

说了半天,就两点建议。
一是可以放到某嵌套里,方便使用。
二是从描述到判断到奖励,都给予一个自由空间。

点评

恩恩,最近也在纠结怎么改进,神尊驾到,十分感谢啊,一定会考虑进去的!  发表于 2011-12-21 10:16
精卫赤龙腾   
总是存在一种强大,去完成似乎不可能的事情.
无畏战乾程   
或是需要一种勇气,去挑战几乎不存在的胜利.
一味玄真魂     
这是拥有一种恒心,去化解根本没有解的困难.
烈卫开天径    
只是带着一种决心,去争取残存的最后的希望。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
146 小时
注册时间
2009-8-2
帖子
34
16
发表于 2011-12-30 18:57:15 | 只看该作者
同感 物品得失提示


127521于2011-12-30 19:24补充以下内容:
和物品分类整合后的脚本

#==============================================================================
# ■ Task
#------------------------------------------------------------------------------
#  定义任务的类
#==============================================================================
# 注意!!!在对话后得到物品,请在对话后先用事件等待3帧,否则对话框来不及消失。

# 开关定义:

$不显示金钱窗口 = 41

$不显示物品窗口 = 42

$不显示武器窗口 = 43

$不显示防具窗口 = 44

# 以上开关,当打开的时候,获得物品将不会提示,比如默认打开41号开关,获得金钱不再提示


class Task
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :name      #名称
  attr_accessor :relate_ev #关联事件
  attr_accessor :ev_map    #事件所在地图
  attr_accessor :main      #是否为主线
  attr_accessor :id        #ID   
  attr_accessor :npc       #任务发布NPC
  attr_accessor :num_on    #可以重复接受的次数
  attr_accessor :for_ever  #是否永远可以接受
  attr_accessor :ne_g      #需要的金钱
  attr_accessor :ne_item   #需要物品
  attr_accessor :ne_key    #需要开关
  attr_accessor :ne_va     #需要变量值
  attr_accessor :ne_give   #是否需要扣除
  attr_accessor :re_v      #奖励是否可见
  attr_accessor :re_exp    #奖励经验值
  attr_accessor :re_ski    #奖励技能
  attr_accessor :re_ab     #奖励能力值
  attr_accessor :re_g      #奖励金钱
  attr_accessor :re_item   #奖励物品
  attr_accessor :re_va     #奖励变量改变
  attr_accessor :re_wea    #奖励武器
  attr_accessor :re_arm    #奖励防具
  attr_accessor :over      #是否已经奖励
  attr_accessor :goal_name #目标(目标地点、目标NPC)
  attr_accessor :detail    #介绍
  attr_accessor :finish    #是否完成
  
  def initialize
    @name = ""
    @main = false
    @relate_ev = 0
    @id = 0
    @npc = ""
    @num_on = 1
    @for_ever = false
    @ne_key = []
    @ne_g = 0
    @ne_item = []
    @ne_va = []
    @re_v = true
    @re_exp = 0
    @re_ski = []
    @re_g = 0
    @re_item = []
    @re_ab = []
    @re_va = []
    @re_wea = []
    @re_arm = []
    @over = false
    @goal_name = ""
    @detail = ""
    @finish = false
  end
  
end

#==============================================================================
# ■ Game_Task
#------------------------------------------------------------------------------
#  处理任务的类
# $game_task 。
#==============================================================================

class Game_Task
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def initialize
    @tasks = []
    @tasks[0] = Task.new
  end
  #--------------------------------------------------------------------------
  # ● 获取变量
  #     variable_id : 变量 ID
  #--------------------------------------------------------------------------
  def [](task_id)
    if task_id <= 1000 and @tasks[task_id] != nil
      return @tasks[task_id]
    else
      return nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置变量
  #     variable_id : 变量 ID
  #     value       : 变量的值
  #--------------------------------------------------------------------------
  
  def []=(task_id, value)
    if task_id <= 5000
      @tasks[task_id] = value
    end
  end
  
  def evn_re(event_id, map_id)
    for i in [email][email protected][/email]
      if @tasks[i].ev_map == map_id
        if @tasks[i].relate_ev == event_id
          return @tasks[i]
        end
      end
    end
    return @tasks[0]
  end
  
  # 增加任务(附带分离detail与npc)
  def add_task(event_id , map_id)
    task_new = $game_task[0].clone
    task_new.id = @tasks.size
    task_new.relate_ev = event_id
    task_new.ev_map = map_id
    @tasks << task_new
    @tasks[0] = Task.new
    return @tasks.size
  end
  
  # 完成任务
  def finish(task_id)
    @tasks[task_id].finish = true
  end
   
  def size
    return @tasks.size
  end
  
  def judge(id)   # 判断任务是否完成
    if id == 0
      loop do
        id += 1
        if judge(id)
          return true
        end
      end
    else
      over = judge_g(id) && judge_item(id) && judge_key(id) && judge_va(id)
      @tasks[id].finish = over
      return over
    end
  end
  
  # 判断金钱是否足够
  def judge_g(id)
    if $game_party.gold >= @tasks[id].ne_g
      return true
    end
    return false
  end
  
  # 判断物品是否收集齐
  # index = 0 表示返回整体,其他则返回各个物品情况的数组
  def judge_item(id ,index = 0)
    over = []
    res = true
    for i in 0...@tasks[id].ne_item.size
      infor = @tasks[id].ne_item[i].split("%")
      item_id = infor[0].to_i
      num = infor[1].to_i
      over << ($game_party.item_number(item_id) >= num)
      res = res && ($game_party.item_number(item_id) >= num)
    end
   
    if index == 0
      return res
    else
      return over
    end
  end
  
  # 判断开关
  def judge_key(id)
    res = true
    for i in 0...@tasks[id].ne_key.size
      infor = @tasks[id].ne_key[i].split("%")
      key_id = infor[0].to_i
      num = (infor[1].to_i == 0)
      res = res && ($game_switches[key_id] == num)
    end
    return res
  end
  
  # 判断变量
  def judge_va(id)
    res = true
    for i in 0...@tasks[id].ne_va.size
      infor = @tasks[id].ne_va[i].split("%")
      va_id = infor[0].to_i
      num = infor[1].to_i
      res = res && ($game_variables[va_id] == num)
    end
    return res
  end
  
  # 更新任务情况
  def update
    for i in [email][email protected][/email]
      @tasks[i].finish = judge(i)
    end
    for i in [email][email protected][/email]
      if @tasks[i].num_on < 1
        @tasks[i].over = true && (!@tasks[i].for_ever)
      end
    end
  end
  
end

#==============================================================================
# ■ Scene_Task
#------------------------------------------------------------------------------
#  处理任务的类。
#==============================================================================


class Scene_Task
  
  def main
    # 生成任务列表、任务详细介绍列表
    @detail_window = Window_TaskDetail.new
    @list_window = Window_Task.new(@detail_window)
    @list_window.help_window = @detail_window
    # 执行过度
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换就中断循环
      if $scene != self
        break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放窗口
    @list_window.dispose
    @detail_window.dispose
  end
  
  def update
    @list_window.update
    $game_task.update
    if @list_window.active
      update_list
      return
    end
  end

  def update_list
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Map.new
      return
    end
  end
end

#==============================================================================
# ■ Window_Task
#------------------------------------------------------------------------------
#  任务选择窗口。
#==============================================================================


class Window_Task < Window_Selectable
  def initialize(detail_window,index = false)
    @index = index
    super(0, 0, 160, 480)
    @detail_window = detail_window
    @column_max = 1
    refresh
    self.index = 0
  end
  
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @task = []
      for i in 1...$game_task.size
       # if !$game_task[i].finish
          @task.push($game_task[i])
       # end
      end
    @item_max = @task.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_task(i)
      end
    end
  end
  
  def draw_task(i)
    if @task[i].main
      self.contents.font.color = Color.new(255,128,0,255)
      self.contents.draw_text(4, i * 32, 152, 32, @task[i].name, 0)
    else
      self.contents.font.color = normal_color
      self.contents.draw_text(4, i * 32, 152, 32, @task[i].name, 0)
    end
  end
  
  def update_help
     @detail_window.refresh(@task == nil ? nil : @task[self.index])
   end
   
end

#==============================================================================
# ■ Window_TaskDetail
#------------------------------------------------------------------------------
#  任务详细介绍窗口。
#==============================================================================

class Window_TaskDetail < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化窗口
  #--------------------------------------------------------------------------
  def initialize
    super(160, 0, 480, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.size = 18
  end
  
  def up_color
    return Color.new(0, 255,120, 255)
  end
  
  def down_color
    return Color.new(255, 0,120, 255)
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh(task)
   
    self.contents.clear
    x = 0
    y = 0
   
    if task == nil
      self.contents.font.color = normal_color
      self.contents.draw_text(x, y, 480, 32, "当前无任务", 0)
      return
    end
    @task = task
   
    self.contents.draw_text(x, y, 480, 20, @task.name, 0)
    self.contents.draw_text(x, y, 412, 20, @task.npc, 2)
    y += 20
   
    detail_ad = @task.detail.split("\n")
    for i in 0...detail_ad.size
      self.contents.draw_text(x, y, 480, 20, detail_ad[i], 0)
      y += 20
    end
   
    if @task.for_ever
      self.contents.draw_text(x, y, 480, 20, "无限任务", 0)
      y +=20
    end
   
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 480, 20, "任务需要", 1)
    y += 20
    self.contents.font.color = normal_color
   
    if @task.ne_item.size != 0
      item_co = $game_task.judge_item(@task.id, 1)
      for i in 0...item_co.size
        some_item = @task.ne_item[i].split("%")
        item_id = some_item[0].to_i
        item_num = some_item[1]
        item = $data_items[item_id]
        bitmap = RPG::Cache.icon(item.icon_name)
        self.contents.blt(x + 120, y , bitmap, Rect.new(0, 0, 24, 24), 255)
        self.contents.draw_text(x + 150, y, 480, 20, item.name, 0)
        self.contents.font.color = item_co[i] ? up_color : down_color
        self.contents.draw_text(x + 240, y, 480, 20, $game_party.item_number(item_id).to_s, 0)
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 270, y, 480, 20, "/", 0)
        self.contents.draw_text(x + 280, y, 480, 20, item_num, 0)
        if some_item[2] == "1"
          self.contents.draw_text(x + 330, y, 480, 20, "(无需消耗)", 0)
        end
        y += 20
      end
    end
   
    if @task.ne_g != 0
      self.contents.font.color = $game_task.judge_g(@task.id) ? up_color : down_color
      self.contents.draw_text(x + 20, y, 120, 20, $game_party.gold.to_s, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(x + 140, y, 480, 20, "/", 0)
      self.contents.draw_text(x + 150, y, 480, 20, @task.ne_g.to_s + $data_system.words.gold, 0)
      y += 20
    end
   
    self.contents.font.color = crisis_color
    if @task.finish && (@task.num_on != 0)
      self.contents.draw_text(x + 20, y, 120, 20, "可以完成", 2)
      y += 20
    elsif @task.over
      self.contents.draw_text(x + 20, y, 120, 20, "已经完成", 2)
      y += 20
    end
    self.contents.font.color = normal_color
   
    if @task.re_v || @task.over
      
      self.contents.font.color = system_color
      self.contents.draw_text(x, y, 480, 20, "任务奖励:", 1)
      y += 20
      self.contents.font.color = normal_color
      
      if @task.re_exp != 0
        self.contents.draw_text(x + 4, y, 480, 20, "经验奖励:" + @task.re_exp.to_s, 1)
        y += 20
      end
      
    if @task.re_ab.size != 0
        self.contents.draw_text(x + 4, y, 480, 20, "能力值奖励:", 0)
        y += 20
      for i in [email][email protected]_ab.size[/email]
        string = @task.re_ab[i].split("%")
        case string[0].to_i
        when 0  # MaxHP
          ab_n = "MaxHP"
        when 1  # MaxSP
          ab_n = "MaxSP"
        when 2  # 力量
          ab_n = "力量"
        when 3  # 灵巧
          ab_n = "灵巧"
        when 4  # 速度
          ab_n = "速度"
        when 5  # 魔力
          ab_n = "魔力"
        end
        self.contents.draw_text(x + 10 + (i % 2) * 200 , y + i / 2 * 20, 240, 32, ab_n + string[1], 0)
      end
      y += (i / 2 + 1) * 20
    end
   
    if @task.re_g != 0
      self.contents.draw_text(x + 140, y, 480, 20, @task.re_g.to_s + $data_system.words.gold, 0)
      y += 20
    end
   
    if @task.re_item.size != 0
      for i in [email][email protected]_item.size[/email]
        some_item = @task.re_item[i].split("%")
        item_id = some_item[0].to_i
        item_num = some_item[1]
        item = $data_items[item_id]
        bitmap = RPG::Cache.icon(item.icon_name)
        self.contents.blt(x + 120, y , bitmap, Rect.new(0, 0, 24, 24), 255)
        self.contents.draw_text(x + 150, y, 480, 20, item.name, 0)
        self.contents.draw_text(x + 220, y, 480, 20, item_num, 0)
        y += 20
      end
    end
   
    if @task.re_wea.size != 0
      for i in [email][email protected]_wea.size[/email]
        some_item = @task.re_wea[i].split("%")
        item_id = some_item[0].to_i
        item_num = some_item[1]
        item = $data_weapons[item_id]
        bitmap = RPG::Cache.icon(item.icon_name)
        self.contents.blt(x + 120, y , bitmap, Rect.new(0, 0, 24, 24), 255)
        self.contents.draw_text(x + 150, y, 480, 20, item.name, 0)
        if item_num != "1"
          self.contents.draw_text(x + 220, y, 480, 20, item_num, 0)
        end
        y += 20
      end
    end
   
    if @task.re_arm.size != 0
      for i in [email][email protected]_arm.size[/email]
        some_item = @task.re_arm[i].split("%")
        item_id = some_item[0].to_i
        item_num = some_item[1]
        item = $data_armors[item_id]
        bitmap = RPG::Cache.icon(item.icon_name)
        self.contents.blt(x + 120, y , bitmap, Rect.new(0, 0, 24, 24), 255)
        self.contents.draw_text(x + 150, y, 480, 20, item.name, 0)
        if item_num != "1"
          self.contents.draw_text(x + 220, y, 480, 20, item_num, 0)
        end
        y += 20
      end
    end
  end
   
end

end

#==============================================================================
#修改Scene_Title
#==============================================================================

class Scene_Title
  
def command_new_game
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 停止 BGM
    Audio.bgm_stop
    # 重置测量游戏时间用的画面计数器
    Graphics.frame_count = 0
    # 生成各种游戏对像
    $game_task          = Game_Task.new
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # 设置初期同伴位置
    $game_party.setup_starting_members
    # 设置初期位置的地图
    $game_map.setup($data_system.start_map_id)
    # 主角向初期位置移动
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    # 刷新主角
    $game_player.refresh
    # 执行地图设置的 BGM 与 BGS 的自动切换
    $game_map.autoplay
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 切换地图画面
    $scene = Scene_Map.new
  end
end

#==============================================================================
#修改Interpreter
#==============================================================================

class Interpreter

def initialize(depth = 0, main = false)
    @depth = depth
    @main = main  
    @task_id
    @task_type = false  # 进入任务输入模式
    @reward = false     # 是否可以奖励
    @skip = false       # 忽略事件条
    @re_ed = false      # 事件是否已经奖励
    @con_abl = true     # 物品消耗标志
    @log = ""           # 记录多行文章
    # 深度超过 100 级
    if depth > 100
      print("调用公用事件超过了限制。")
      exit
    end
    # 清除注释器的内部状态
    clear
end

#--------------------------------------------------------------------------
  # ● 任务输入模式切换(task)
  #--------------------------------------------------------------------------
  def task_on
    $game_task.update
    if $game_task.evn_re(@event_id, @map_id).id != 0
      @task_id = $game_task.evn_re(@event_id, @map_id).id
      if $game_task.evn_re(@event_id, @map_id).finish
        if $game_task.evn_re(@event_id, @map_id).over
          @re_ed = true          # 奖励已完成的情况
        else
          @reward = true         # 开启奖励
        end
      else
        @skip = true             # 未完成时忽略事件
      end
    else
      @task_type = true          # 开启任务输入
    end
   
    return true
   
  end
  
  def task_off
   
    if @task_type
      @task_type = false
      $game_task[0].npc = $game_map.events[@event_id].name
      $game_task.add_task(@event_id, @map_id)
    elsif @skip
      @skip = false
    elsif @reward
      @reward = false
      $game_task.evn_re(@event_id, @map_id).num_on -= 1
    else
      @re_ed = false
    end
  
    return true
   
  end

def execute_command
    # 到达执行内容列表末尾的情况下
    if @index >= @list.size - 1
      # 时间结束
      command_end
      # 继续
      return true
    end
   
    if @re_ed && @list[@index].code != 355
      return true
    end
   
    # 事件命令的功能可以参考 @parameters
    @parameters = @list[@index].parameters
    # 命令代码分支
   
    case @list[@index].code
    when 101  # 文章的显示
      return command_101
    when 102  # 显示选择项
      return command_102
    when 402  # [**] 的情况下
      return command_402
    when 403  # 取消的情况下
      return command_403
    when 103  # 处理数值输入
      return command_103
    when 104  # 更改文章选项
      return command_104
    when 105  # 处理按键输入
      return command_105
    when 106  # 等待
      return command_106
    when 111  # 条件分支
      return command_111
    when 411  # 这以外的情况
      return command_411
    when 112  # 循环
      return command_112
    when 413  # 重复上次
      return command_413
    when 113  # 中断循环
      return command_113
    when 115  # 中断时间处理
      return command_115
    when 116  # 暂时删除事件
      return command_116
    when 117  # 公共事件
      return command_117
    when 118  # 标签
      return command_118
    when 119  # 标签跳转
      return command_119
    when 121  # 操作开关
      return command_121
    when 122  # 操作变量
      return command_122
    when 123  # 操作独立开关
      return command_123
    when 124  # 操作计时器
      return command_124
    when 125  # 增减金钱
      return command_125
    when 126  # 增减物品
      return command_126
    when 127  # 增减武器
      return command_127
    when 128  # 增减防具
      return command_128
    when 129  # 替换角色
      return command_129
    when 131  # 更改窗口外关
      return command_131
    when 132  # 更改战斗 BGM
      return command_132
    when 133  # 更改战斗结束 BGS
      return command_133
    when 134  # 更改禁止保存
      return command_134
    when 135  # 更改禁止菜单
      return command_135
    when 136  # 更改禁止遇敌
      return command_136
    when 201  # 場所移動
      return command_201
    when 202  # 设置事件位置
      return command_202
    when 203  # 地图滚动
      return command_203
    when 204  # 更改地图设置
      return command_204
    when 205  # 更改雾的色调
      return command_205
    when 206  # 更改雾的不透明度
      return command_206
    when 207  # 显示动画
      return command_207
    when 208  # 更改透明状态
      return command_208
    when 209  # 设置移动路线
      return command_209
    when 210  # 移动结束后等待
      return command_210
    when 221  # 准备过渡
      return command_221
    when 222  # 执行过渡
      return command_222
    when 223  # 更改画面色调
      return command_223
    when 224  # 画面闪烁
      return command_224
    when 225  # 画面震动
      return command_225
    when 231  # 显示图片
      return command_231
    when 232  # 移动图片
      return command_232
    when 233  # 旋转图片
      return command_233
    when 234  # 更改色调
      return command_234
    when 235  # 删除图片
      return command_235
    when 236  # 设置天候
      return command_236
    when 241  # 演奏 BGM
      return command_241
    when 242  # BGM 的淡入淡出
      return command_242
    when 245  # 演奏 BGS
      return command_245
    when 246  # BGS 的淡入淡出
      return command_246
    when 247  # 记忆 BGM / BGS
      return command_247
    when 248  # 还原 BGM / BGS
      return command_248
    when 249  # 演奏 ME
      return command_249
    when 250  # 演奏 SE
      return command_250
    when 251  # 停止 SE
      return command_251
    when 301  # 战斗处理
      return command_301
    when 601  # 胜利的情况
      return command_601
    when 602  # 逃跑的情况
      return command_602
    when 603  # 失败的情况
      return command_603
    when 302  # 商店的处理
      return command_302
    when 303  # 名称输入的处理
      return command_303
    when 311  # 增减 HP
      return command_311
    when 312  # 增减 SP
      return command_312
    when 313  # 更改状态
      return command_313
    when 314  # 全回复
      return command_314
    when 315  # 增减 EXP
      return command_315
    when 316  # 増減 等级
      return command_316
    when 317  # 増減 能力值
      return command_317
    when 318  # 增减特技
      return command_318
    when 319  # 变更装备
      return command_319
    when 320  # 更改角色名字
      return command_320
    when 321  # 更改角色职业
      return command_321
    when 322  # 更改角色图形
      return command_322
    when 331  # 増減敌人的 HP
      return command_331
    when 332  # 増減敌人的 SP
      return command_332
    when 333  # 更改敌人的状态
      return command_333
    when 334  # 敌人出现
      return command_334
    when 335  # 敌人变身
      return command_335
    when 336  # 敌人全回复
      return command_336
    when 337  # 显示动画
      return command_337
    when 338  # 伤害处理
      return command_338
    when 339  # 强制行动
      return command_339
    when 340  # 战斗中断
      return command_340
    when 351  # 调用菜单画面
      return command_351
    when 352  # 调用存档画面
      return command_352
    when 353  # 游戏结束
      return command_353
    when 354  # 返回标题画面
      return command_354
    when 355  # 脚本
      return command_355
    else      # 其它
      return true
    end
  end

#--------------------------------------------------------------------------
  # ● 显示文章(task)
  #--------------------------------------------------------------------------
  def command_101
    # 另外的文章已经设置过 message_text 的情况下
   if $game_temp.message_text != nil
      # 结束
      return false
   end   
    # 设置信息结束后待机和返回调用标志
    @message_waiting = true
    $game_temp.message_proc = Proc.new { @message_waiting = false }
    # message_text 设置为 1 行
    $game_temp.message_text = @list[@index].parameters[0] + "\n"
   
    if @task_type
        $game_task[0].name = $game_temp.message_text.clone
    end
   
    line_count = 1
    # 循环
    loop do
      # 下一个事件指令为文章两行以上的情况
      if @list[@index+1].code == 401
        # message_text 添加到第 2 行以下
        $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
        line_count += 1
      # 事件指令不在文章两行以下的情况
      else
        # 下一个事件指令为显示选择项的情况下
        if @list[@index+1].code == 102
          # 如果选择项能收纳在画面里
          if @list[@index+1].parameters[0].size <= 4 - line_count
            # 推进索引
            @index += 1
            # 设置选择项
            $game_temp.choice_start = line_count
            setup_choices(@list[@index].parameters)
          end
        # 下一个事件指令为处理输入数值的情况下
        elsif @list[@index+1].code == 103
          # 如果数值输入窗口能收纳在画面里
          if line_count < 4
            # 推进索引
            @index += 1
            # 设置输入数值
            $game_temp.num_input_start = line_count
            $game_temp.num_input_variable_id = @list[@index].parameters[0]
            $game_temp.num_input_digits_max = @list[@index].parameters[1]
          end
        end
        
        
        if @task_type
            all = $game_temp.message_text.split("\n")
            all.delete_at(0)
            $game_task[0].detail = all.join("\n")
            $game_temp.message_text = "接受任务\n\\c[4]" + $game_task[0].name
        elsif @skip
            $game_temp.message_text = "\\n[1]:\n任务还没有完成\n看看还要做些什么吧"
        elsif @reward
            $game_temp.message_text = "完成任务\n\\c[4]" + $game_task[@task_id].name.clone
        end

         
        
        # 继续
        return true
      end
      # 推进索引
      @index += 1
    end
  end

#--------------------------------------------------------------------------
  # ● 开关操作(task)
  #--------------------------------------------------------------------------
  def command_121
   
    if @task_type
      if @parameters[0] == @parameters[1]
        $game_task[0].ne_key << @parameters[0].to_s + "%" + @parameters[2].to_s
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      return true
    end
   
   
    # 循环全部操作
    for i in @parameters[0] .. @parameters[1]
      # 更改开关
      $game_switches[i] = (@parameters[2] == 0)
    end
    # 刷新地图
    $game_map.need_refresh = true
    # 继续
    return true
  end
  #--------------------------------------------------------------------------
  # ● 变量操作(task)
  #--------------------------------------------------------------------------
  def command_122
    # 初始化值
    value = 0
    # 操作数的分支
    case @parameters[3]
    when 0  # 恒量
      value = @parameters[4]
    when 1  # 变量
      value = $game_variables[@parameters[4]]
    when 2  # 随机数
      value = @parameters[4] + rand(@parameters[5] - @parameters[4] + 1)
    when 3  # 物品
      value = $game_party.item_number(@parameters[4])
    when 4  # 角色
      actor = $game_actors[@parameters[4]]
      if actor != nil
        case @parameters[5]
        when 0  # 等级
          value = actor.level
        when 1  # EXP
          value = actor.exp
        when 2  # HP
          value = actor.hp
        when 3  # SP
          value = actor.sp
        when 4  # MaxHP
          value = actor.maxhp
        when 5  # MaxSP
          value = actor.maxsp
        when 6  # 力量
          value = actor.str
        when 7  # 灵巧
          value = actor.dex
        when 8  # 速度
          value = actor.agi
        when 9  # 魔力
          value = actor.int
        when 10  # 攻击力
          value = actor.atk
        when 11  # 物理防御
          value = actor.pdef
        when 12  # 魔法防御
          value = actor.mdef
        when 13  # 回避修正
          value = actor.eva
        end
      end
    when 5  # 敌人
      enemy = $game_troop.enemies[@parameters[4]]
      if enemy != nil
        case @parameters[5]
        when 0  # HP
          value = enemy.hp
        when 1  # SP
          value = enemy.sp
        when 2  # MaxHP
          value = enemy.maxhp
        when 3  # MaxSP
          value = enemy.maxsp
        when 4  # 力量
          value = enemy.str
        when 5  # 灵巧
          value = enemy.dex
        when 6  # 速度
          value = enemy.agi
        when 7  # 魔力
          value = enemy.int
        when 8  # 攻击力
          value = enemy.atk
        when 9  # 物理防御
          value = enemy.pdef
        when 10  # 魔法防御
          value = enemy.mdef
        when 11  # 回避修正
          value = enemy.eva
        end
      end
    when 6  # 角色
      character = get_character(@parameters[4])
      if character != nil
        case @parameters[5]
        when 0  # X 坐标
          value = character.x
        when 1  # Y 坐标
          value = character.y
        when 2  # 朝向
          value = character.direction
        when 3  # 画面 X 坐标
          value = character.screen_x
        when 4  # 画面 Y 坐标
          value = character.screen_y
        when 5  # 地形标记
          value = character.terrain_tag
        end
      end
    when 7  # 其它
      case @parameters[4]
      when 0  # 地图 ID
        value = $game_map.map_id
      when 1  # 同伴人数
        value = $game_party.actors.size
      when 2  # 金钱
        value = $game_party.gold
      when 3  # 步数
        value = $game_party.steps
      when 4  # 游戏时间
        value = Graphics.frame_count / Graphics.frame_rate
      when 5  # 计时器
        value = $game_system.timer / Graphics.frame_rate
      when 6  # 存档次数
        value = $game_system.save_count
      end
    end
   
    if @task_type
      if @parameters[0] == @parameters[1] && (@parameters[2] <= 2)
        if @parameters[2] != 1
          $game_task[0].ne_va << @parameters[0].to_s + "%" + value.to_s + "%" + @parameters[2].to_s
        else
          $game_task[0].re_va << @parameters[0].to_s + "%" + value.to_s
        end
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if @parameters[2] > 2
        return true
      elsif @parameters[2] == 0
        return true
      end
    end
   
      
    # 循环全部操作
    for i in @parameters[0] .. @parameters[1]
      # 操作分支
      case @parameters[2]
      when 0  # 代入
        $game_variables[i] = value
      when 1  # 加法
        $game_variables[i] += value
      when 2  # 减法
        $game_variables[i] -= value
      when 3  # 乘法
        $game_variables[i] *= value
      when 4  # 除法
        if value != 0
          $game_variables[i] /= value
        end
      when 5  # 剩余
        if value != 0
          $game_variables[i] %= value
        end
      end
      # 检查上限
      if $game_variables[i] > 99999999
        $game_variables[i] = 99999999
      end
      # 检查下限
      if $game_variables[i] < -99999999
        $game_variables[i] = -99999999
      end
    end
    # 刷新地图
    $game_map.need_refresh = true
    # 继续
    return true
  end
  #--------------------------------------------------------------------------
  # ● 独立开关操作(task)
  #--------------------------------------------------------------------------
  def command_123
   
    if @task_type
      case @parameters[0]
      when "A"
        $game_task[0].main = (@parameters[1] == 0)
      when "B"
        $game_task[0].re_v = (@parameters[1] == 0)
      when "C"
        $game_task[0].for_ever = (@parameters[1] == 0)
      when "D"
        @con_abl = (@parameters[1] == 0)
      else
      end
      return true
    elsif @skip || @reward
      return true
    end
   
      
    # 事件 ID 有效的情况下
    if @event_id > 0
      # 生成独立开关键
      key = [$game_map.map_id, @event_id, @parameters[0]]
      # 更改独立开关
      $game_self_switches[key] = (@parameters[1] == 0)
    end
    # 刷新地图
    $game_map.need_refresh = true
    # 继续
    return true
  end

#--------------------------------------------------------------------------
  # ● 增减金钱(task)
  #--------------------------------------------------------------------------
  def command_125
    # 获取要操作的值
    value = operate_value(@parameters[0], @parameters[1], @parameters[2])
   
    if @task_type
      if value == 0
        return true
      elsif value < 0
        $game_task[0].ne_g = (0 - value)
      else
        $game_task[0].re_g = value
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
    end
   
   
    # 增减金钱
    $game_party.gain_gold(value)   ################################
    if $game_switches[$不显示金钱窗口]==false
      carol3_66RPG = Window_Base.new((640-160)/2,128,180,100)
      carol3_66RPG.contents = Bitmap.new(carol3_66RPG.width - 32, carol3_66RPG.height - 32)
      if value >= 0
        carol3_66RPG.contents.draw_text(0,0,240,32,"获得金钱:")
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"006-System06",80,100)
      else
        carol3_66RPG.contents.draw_text(0,0,240,32,"失去金钱:")
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"005-System05",80,100)
      end   
      carol3_66RPG.contents.draw_text(0,32,240,32,value.abs.to_s)
      carol3_66RPG.contents.draw_text(0,32,140,32, $data_system.words.gold,2)
      carol3_66RPG.opacity = 160
      for i in 0..30
        Graphics.update
      end
      for i in 0..10
        carol3_66RPG.opacity -= 30
        carol3_66RPG.contents_opacity -= 30
        Graphics.update
      end
      carol3_66RPG.dispose
    end
    return true   
    # 继续
    return true
  end
  #--------------------------------------------------------------------------
  # ● 增减物品(task)
  #--------------------------------------------------------------------------
  def command_126
    # 获取要操作的值
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
   
    if @task_type
      con_str = @con_abl ? "0" : "1"
      if value == 0
        return true
      elsif value < 0
        num = 0 - value
        item_num = @parameters[0].to_s + "%" + num.to_s + "%" + con_str
        $game_task[0].ne_item << item_num
      else
        item_num = @parameters[0].to_s + "%" + value.to_s + "%" + con_str
        $game_task[0].re_item << item_num
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if value < 0
        for i in 0...$game_task.evn_re(@event_id, @map_id).ne_item.size
          id = $game_task.evn_re(@event_id, @map_id).ne_item[i].split("%")[0].to_i
          able = $game_task.evn_re(@event_id, @map_id).ne_item[i].split("%")[2].to_i
          if @parameters[0] == id && (able == 1)
            return
          end
        end
      end
    end
   
    # 增减物品
    $game_party.gain_item(@parameters[0], value)  #######################
    if $game_switches[$不显示物品窗口]==false
      carol3_66RPG_item = $data_items[@parameters[0]]
      carol3_66RPG = Window_Base.new((640-300)/2,128,300,100)
      carol3_66RPG.contents = Bitmap.new(carol3_66RPG.width - 32, carol3_66RPG.height - 32)
      if value >= 0
        carol3_66RPG.contents.draw_text(0,0,240,32,"获得物品:")   
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"006-System06",80,100)
      else
        carol3_66RPG.contents.draw_text(0,0,240,32,"失去物品:")   
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"005-System05",80,100)
      end
      carol3_66RPG_bitmap = RPG::Cache.icon(carol3_66RPG_item.icon_name)
      carol3_66RPG.contents.blt(0, 32, carol3_66RPG_bitmap, Rect.new(0, 0, 24, 24), 255)
      carol3_66RPG.contents.draw_text(0 + 28, 32, 212, 32, carol3_66RPG_item.name, 0)
      carol3_66RPG.contents.draw_text(0, 32, 268, 32, "×"+value.abs.to_s, 2)
      carol3_66RPG.opacity = 160
      for i in 0..30
        Graphics.update
      end
      for i in 0..10
        carol3_66RPG.opacity -= 30
        carol3_66RPG.contents_opacity -= 30
        Graphics.update
      end
      carol3_66RPG.dispose
    end
    return true   
    # 继续
    return true
  end
  #--------------------------------------------------------------------------
  # ● 增减武器(task)
  #--------------------------------------------------------------------------
  def command_127
    # 获取要操作的值
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
   
    if @task_type
      if value <= 0
        return true
      else
       wea_num = @parameters[0].to_s + "%" + value.to_s
        $game_task[0].re_wea << wea_num
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if value < 0
        $game_party.gain_weapon(@parameters[0], value)
      end
      return true
    end
   
    # 增减武器
    $game_party.gain_weapon(@parameters[0], value)   ###################
    if $game_switches[$不显示武器窗口]==false
      carol3_66RPG_item = $data_weapons[@parameters[0]]
      carol3_66RPG = Window_Base.new((640-300)/2,128,300,100)
      carol3_66RPG.contents = Bitmap.new(carol3_66RPG.width - 32, carol3_66RPG.height - 32)
      if value >= 0
        carol3_66RPG.contents.draw_text(0,0,240,32,"获得武器:")   
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"006-System06",80,100)
      else
        carol3_66RPG.contents.draw_text(0,0,240,32,"失去武器:")   
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"005-System05",80,100)
      end
      carol3_66RPG_bitmap = RPG::Cache.icon(carol3_66RPG_item.icon_name)
      carol3_66RPG.contents.blt(0, 32, carol3_66RPG_bitmap, Rect.new(0, 0, 24, 24), 255)
      carol3_66RPG.contents.draw_text(0 + 28, 32, 212, 32, carol3_66RPG_item.name, 0)
      carol3_66RPG.contents.draw_text(0, 32, 268, 32, "×"+value.abs.to_s, 2)
      carol3_66RPG.opacity = 160
      for i in 0..30
        Graphics.update
      end
      for i in 0..10
        carol3_66RPG.opacity -= 30
        carol3_66RPG.contents_opacity -= 30
        Graphics.update
      end
      carol3_66RPG.dispose
    end
    return true   
    # 继续
    return true
  end
  #--------------------------------------------------------------------------
  # ● 增减防具(task)
  #--------------------------------------------------------------------------
  def command_128
    # 获取要操作的值
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
   
    if @task_type
      if value <= 0
        return true
      else
       arm_num = @parameters[0].to_s + "%" + value.to_s
        $game_task[0].re_arm << arm_num
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if value < 0
        $game_party.gain_armor(@parameters[0], value)
      end
      return true
    end
   
    # 增减防具
    $game_party.gain_armor(@parameters[0], value)   ######################
    if $game_switches[$不显示防具窗口]==false
      carol3_66RPG_item = $data_armors[@parameters[0]]
      carol3_66RPG = Window_Base.new((640-300)/2,128,300,100)
      carol3_66RPG.contents = Bitmap.new(carol3_66RPG.width - 32, carol3_66RPG.height - 32)
      if value >= 0
        carol3_66RPG.contents.draw_text(0,0,240,32,"获得防具:")   
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"006-System06",80,100)
      else
        carol3_66RPG.contents.draw_text(0,0,240,32,"失去防具:")   
        #——声效,可以自己改
        Audio.se_play("Audio/SE/"+"005-System05",80,100)
      end
      carol3_66RPG_bitmap = RPG::Cache.icon(carol3_66RPG_item.icon_name)
      carol3_66RPG.contents.blt(0, 32, carol3_66RPG_bitmap, Rect.new(0, 0, 24, 24), 255)
      carol3_66RPG.contents.draw_text(0 + 28, 32, 212, 32, carol3_66RPG_item.name, 0)
      carol3_66RPG.contents.draw_text(0, 32, 268, 32, "×"+value.abs.to_s, 2)
      carol3_66RPG.opacity = 160
      for i in 0..30
        Graphics.update
      end
      for i in 0..10
        carol3_66RPG.opacity -= 30
        carol3_66RPG.contents_opacity -= 30
        Graphics.update
      end
      carol3_66RPG.dispose
    end
    return true   
    # 继续
    return true
  end

  #--------------------------------------------------------------------------
  # ● 增减 EXP(task)
  #--------------------------------------------------------------------------
  def command_315
    # 获取操作值
    value = operate_value(@parameters[1], @parameters[2], @parameters[3])
   
    if @task_type
      if value > 0
        $game_task[0].re_exp = value
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if value > 0
        iterate_actor(0) do |actor|
      # 更改角色 EXP
          actor.exp += value
        end
      end
      return true
    end
   
        
   
    # 处理重复
    iterate_actor(@parameters[0]) do |actor|
      # 更改角色 EXP
      actor.exp += value
    end
    # 继续
    return true
  end
#--------------------------------------------------------------------------
  # ● 增减能力值(task)
  #--------------------------------------------------------------------------
  def command_317
    # 获取操作值
    value = operate_value(@parameters[2], @parameters[3], @parameters[4])
    # 获取角色
    actor = $game_actors[@parameters[0]]
   
    if @task_type
      if value > 0
        str = @parameters[1].to_s + "%" + value.to_s
        $game_task[0].re_ab << str
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if value <= 0
        return true
      end
      iterate_actor(0) do |actor|
      case @parameters[1]
        when 0  # MaxHP
            actor.maxhp += value
        when 1  # MaxSP
           actor.maxsp += value
        when 2  # 力量
            actor.str += value
        when 3  # 灵巧
            actor.dex += value
        when 4  # 速度
            actor.agi += value
        when 5  # 魔力
            actor.int += value
        end
      end
      return true
   end
   
      
    # 继续
    if actor != nil
          case @parameters[1]
          when 0  # MaxHP
            actor.maxhp += value
          when 1  # MaxSP
           actor.maxsp += value
          when 2  # 力量
            actor.str += value
          when 3  # 灵巧
            actor.dex += value
          when 4  # 速度
            actor.agi += value
          when 5  # 魔力
            actor.int += value
          end
        end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 增减特技(task)
  #--------------------------------------------------------------------------
  def command_318
    # 获取角色
    actor = $game_actors[@parameters[0]]
   
    if @task_type
      if @parameters[1] != 0
        $game_task[0].re_ski << actor.id.to_s + "%" + @parameters[2].to_s
      end
      return true
    elsif @skip
      return true
    end
   
    if @reward
      if @parameters[1] != 0
        return true
      end
    end
   
    # 增减特技
    if actor != nil
      if @parameters[1] == 0
        actor.learn_skill(@parameters[2])
      else
        actor.forget_skill(@parameters[2])
      end
    end
    # 继续
    return true
  end

end


#==============================================================================
#修改Game_Event
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :trigger                  # 目标
  attr_reader   :list                     # 执行内容
  attr_accessor :name
  attr_reader   :starting                 # 启动中标志
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     map_id : 地图 ID
  #     event  : 事件 (RPG::Event)
  #--------------------------------------------------------------------------
  def initialize(map_id, event)
    super()
    @map_id = map_id
    @event = event
    @name = event.name
    @id = @event.id
    @erased = false
    @starting = false
    @through = true
    # 初期位置的移动
    moveto(@event.x, @event.y)
    refresh
  end
  
end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
92
在线时间
468 小时
注册时间
2011-9-1
帖子
404
17
发表于 2012-10-28 11:28:49 | 只看该作者
打不开  ,望LZ重新上传附件
男人不懂永远月经的痛,就像女人永远不懂蛋疼的痛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-24 09:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表