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

Project1

 找回密码
 注册会员
搜索
查看: 7512|回复: 25
打印 上一主题 下一主题

[原创发布] 利用rxdata制作的任务文件--然后写的任务脚本

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
跳转到指定楼层
1
发表于 2009-7-14 15:20:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本人利用Tasks.rxdata 生成文件 后 读取此文件 后 做的 脚本

任务大全.rar

199.42 KB, 下载次数: 138

丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
2
 楼主| 发表于 2009-7-9 23:15:17 | 只看该作者

[范例]基于本人所发的任务脚本--思路解析

本帖最后由 kula1900 于 2009-7-15 10:36 编辑

#------------------------------------------------------------------------------
# □模块定义
#------------------------------------------------------------------------------
module RPG
  #----------------------------------------------------------------------------
  # □类定义
  #----------------------------------------------------------------------------
  class Task
    #-------------------------------------------------------------------------
    # □ 常量设置
    # □ 任务难度最大值
    #-------------------------------------------------------------------------
    DIFFICULT = 5
    #-------------------------------------------------------------------------
    # □ 实例变量
    #-------------------------------------------------------------------------
    attr_accessor :id
    attr_accessor :name
    attr_accessor :line
    attr_accessor :description
    attr_accessor :lv_stint
    attr_accessor :difficult
    attr_accessor :glod
    attr_accessor :exp
    attr_accessor :items
    attr_accessor :weapons
    attr_accessor :armors
    attr_accessor :ditto_accept
    attr_accessor :need
    attr_accessor :need_items
    attr_accessor :need_items_no
    attr_accessor :need_weapons
    attr_accessor :need_weapons_no
    attr_accessor :need_armors
    attr_accessor :switch_string
    attr_accessor :need_armors_no
    attr_accessor :need_switch
    attr_accessor :need_variable
    attr_accessor :need_variable_situation
    attr_accessor :need_variable_value
    attr_accessor :signature
    attr_accessor :initialize_signature
    attr_accessor :need_enemie
    attr_accessor :need_enemie_no
    # □初始化
    def initialize
      #------------------------------------------------------------------------
      # □任务一般数据
      #------------------------------------------------------------------------
      # 任务编号
      @id = 0
      # 任务名称
      @name = ""
      # 任务线型--字符串
      @line = ""
      # 任务在任务栏中显示的说明和提示
      @description = ""
      # 任务等级限制--数据
      @lv_stint = 0
      # 任务难度描绘---0……DIFFICULT---会自动生成★☆等等---不要填浮点数
      @difficult = 0
      #------------------------------------------------------------------------
      # □任务奖励数据
      #------------------------------------------------------------------------
      # 金币
      @glod = 0
      # 经验
      @exp = 0
      # 物品ID
      @items = 0
      # 武器ID
      @weapons = 0
      # 防具ID
      @armors = 0
      # 其他情况自己是奖励
      #------------------------------------------------------------------------
      # □任务完成判定数据
      #------------------------------------------------------------------------
      # 任务完成条件--需要下列哪些总数
      @need = 0
      # 任务完成--条件1--需要物品ID
      @need_items = 0
      # 任务完成--条件1--分支--需要物品i 几个
      @need_items_no = 0
      # 任务完成--条件2--需要武器ID
      @need_weapons = 0
      # 任务完成--条件1--分支--需要武器i 几个
      @need_weapons_no = 0
      # 任务完成--条件3--需要防具ID
      @need_armors = 0
      # 任务完成--条件3--分支--需要防具i 几个
      @need_armors_no = 0
      # 任务完成--条件4--需要开关ID 为ON 状态
      @need_switch = 0
      # 任务完成--分歧--用文字描绘开关ID的概念
      # 就是所他为嘛没有打开--你还需要跟"who"对话--跟谁对话一定要写上
      @switch_string = ""
      # 任务完成--条件5--需要变量ID
      @need_variable = 0
      #------------------------------------------------------------------------
      # ●任务完成--条件5--分支情况---如果以上等于0 下面的既不成立
      # ●-3 的时候是 不是数字--即字符串
      # ●-2 的时候是 小于等于
      # ●-1 的时候是 小于
      # ● 0 的时候是 等于
      # ● 1 的时候是 大于
      # ● 2 的时候是 大于等于
      # ● 3 的时候是 以外
      #------------------------------------------------------------------------
      @need_variable_situation = 0
      # 任务完成--条件5--分支-需要变量@need_variable 的值
      @need_variable_value = 0
      # 任务完成--条件6- 需要战胜的敌人数据库ID
      @need_enemie = 0
      # 任务完成--条件6-分支---需要战胜的敌人I---几个
      @need_enemie_no = 0
    end
  end
end
以上是追加的模块RPG定义Task用于以后的读写
以下是写入脚本~~确认无误后 测试游戏后--出现Task.rxdata删除脚本
  no = 1
   task = []
   task[no] = RPG::Task.new
   task[no].id = 0
   task[no].name = "新手任务"
   task[no].line = "主线"
   task[no].description =
   "走到第二个人那里去听完废话,听完后到我身边报道=======
   ========"
   task[no].lv_stint = 0
   task[no].difficult = 0
   task[no].glod = 1000
   task[no].exp = 100
   task[no].need = 3
   task[no].items = 10
   task[no].need_items = 10
   task[no].need_items_no = 20
   task[no].need_switch = 1
   task[no].need_enemie = 1
   task[no].need_enemie_no = 5
   task[no].switch_string = "你好像要跟一位大姐姐对话哦"
   save_data(task, "Data/Task.rxdata")
以下是基于脚本中敌人类没有 计数器的添加
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  处理敌人的类。本类在战斗中起到计数器作用
#==============================================================================
class Game_Enemys < Game_Battler
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @data = []
  end
  #--------------------------------------------------------------------------
  # ● 获取任务
  #     id : 敌人 ID
  #--------------------------------------------------------------------------
  def [](id)
    if id > 999 or $data_enemies[id] == nil
      return nil
    end
    if @data[id] == nil
      @data[id] = Game_Enemys_Count.new
    end
    return @data[id]
  end
end
class Game_Enemys_Count
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     id : 敌人 ID
  #--------------------------------------------------------------------------
  def initialize
    @count = 0
  end
  #--------------------------------------------------------------------------
  # ● 计数器数据
  #--------------------------------------------------------------------------
  def count
    return @count
  end
  #--------------------------------------------------------------------------
  # ● 计数器+
  #--------------------------------------------------------------------------
  def add
    @count += 1
  end
  #--------------------------------------------------------------------------
  # ● 计数器-
  #--------------------------------------------------------------------------
  def by
    @count -= 1
  end
end
然后在Game_Battler (分割定义 3)
在基本攻击 & 特技攻击中的计算公式中加入
      # HP 的伤害计算
      self.hp -= self.damage
      # 如果承受攻击的是敌人
      if self.is_a?(Game_Enemy)
        # 如果敌人hp 小于等于0
        if self.hp <= 0
          # 获取ID
          @enemy_id = self.id
          # 下面有两种方法增加计数器一种是无任务即清零,有任务即即时
          # 第二种是无论是否有任务都会不会清零---这里采用第二种--直接计数
          $game_enemys[@enemy_id].add
        end
      end
然后请在 游戏开始时添加
    $data_tasks         = load_data("Data/Task.rxdata")
      $game_tasks         = Game_Tasks.new
      $game_enemys        = Game_Enemys.new
save 中
         Marshal.dump($game_tasks, file)
         Marshal.dump($game_enemys, file)
load 中
      $game_tasks         = Marshal.load(file)
         $game_enemys        = Marshal.load(file)
而任务主要判断完成过程脚本如下
      #==============================================================================
# ■ Game_Tasks
#------------------------------------------------------------------------------
#  处理任务序列的类。本类的实例请参考
#  $game_tasks。
#==============================================================================
class Game_Tasks
  attr_accessor:all_id
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    @data = []
    @all_id = []
    @all_id[0] = nil
  end
  #--------------------------------------------------------------------------
  # ● 获取任务
  #     task_id : 任务 ID
  #--------------------------------------------------------------------------
  def [](task_id)
    if task_id > 999 or $data_tasks[task_id] == nil or $game_tasks.all_id.include?(task_id) == false
      return nil
    end
    # 获取真正的ID
    @id = @all_id[task_id]
    if @data[task_id] == nil
      @data[task_id] = Game_Task.new(@id)
      # 是否完成初始化
      @data[task_id].completion = false
    end
    return @data[task_id]
  end
  #--------------------------------------------------------------------------
  # ● 接受任务
  #--------------------------------------------------------------------------
  def accept(task_id)
    @all_id[$game_tasks.all_id.size] = task_id
  end
end
#==============================================================================
# ■ Game_Task
#------------------------------------------------------------------------------
#  处理任务的类。本类在 Game_Tasks 类 ($game_tasks)
#   的内部使用
#==============================================================================
class Game_Task
  # 任务数据库ID
  attr_accessor:id
  # 任务完成标志
  attr_accessor:completion
  # 任务从接受到完成总共击杀个数
  attr_accessor:enemie
  # 人物名字
  attr_accessor:name
  # 人物名字
  attr_accessor:need
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     task_id : 任务 ID
  #--------------------------------------------------------------------------
  def initialize(task_id)
    super()
    setup(task_id)
  end
  #--------------------------------------------------------------------------
  # ● 设置
  #     task_id : 任务 ID
  #--------------------------------------------------------------------------
  def setup(task_id)
    task = $data_tasks[task_id]
    @task_id = task_id
    @name = task.name
    i = $data_tasks[task_id].need_enemie
    no = $data_tasks[task_id].need_enemie_no
    no += $game_enemys.count
    @enemie = no
    @need = $data_tasks[task_id].need
  end
  #--------------------------------------------------------------------------
  # ● 获取任务 ID
  #--------------------------------------------------------------------------
  def id
    return @task_id
  end
  #-------------------------------------------------------------------------
  # □ 任务完成--task_id 任务id--自动识别 == 事件中无需加入条件分歧
  #-------------------------------------------------------------------------
  def fulfil
    task_id = @task_id
    # 如果是该脚本能识别的条件下
    if $data_tasks[task_id].need != 0
      if $data_tasks[task_id].need_items != 0
        i = $data_tasks[task_id].need_items
        if $game_party.item_number(i) >= $data_tasks[task_id].need_items_no
          @need -= 1
        else
          p "你身上的物品#{$data_items.name}不够"
        end
      end
      if $data_tasks[task_id].need_weapons != 0
        i = $data_tasks[task_id].need_weapons
        if $game_party.weapon_number(i) >= $data_tasks[task_id].need_weapons_no
          @need -= 1
        else
          p "你身上的物品#{$data_weapons.name}不够"
        end
      end
      if $data_tasks[task_id].need_armors != 0
        i = $data_tasks[task_id].need_armors
        if $game_party.armor_number(i) >= $data_tasks[task_id].need_armors_no
          @need -= 1
        else
          p "你身上的物品#{$data_armors.name}不够"
        end
      end
      if $data_tasks[task_id].need_switch != 0
        i = $data_tasks[task_id].need_switch
        if $game_switches == true
          @need -= 1
        else
          p "#{$data_tasks[task_id].switch_string}"
        end
      end
    if $data_tasks[task_id].need_variable != 0
      i = $data_tasks[task_id].need_variable
      # 变量特定值
      value = $data_tasks[task_id].need_variable_value
      # 游戏变量现在值
      game_value = $game_variables
      #------------------------------------------------------------------------
      # ●-3 的时候是 不是数字--即字符串
      # ●-2 的时候是 小于等于
      # ●-1 的时候是 小于
      # ● 0 的时候是 等于
      # ● 1 的时候是 大于
      # ● 2 的时候是 大于等于
      # ● 3 的时候是 以外
      #------------------------------------------------------------------------
      case $data_tasks[task_id].need_variable_situation
        when -3
           # 是数字的情况下
           if game_value.is_a?(Numeric)
             p "任务尚未完成--仍需要努力啊!"
           else
             @need -= 1
           end
        when -2
           if game_value <= value
             @need -= 1
           else
             p "任务尚未完成--仍需要努力啊!"
           end
        when -1
           if game_value < value
             @need -= 1
           else
             p "任务尚未完成--仍需要努力啊!"
           end
        when 0
           if game_value = value
             @need -= 1
           else
             p "任务尚未完成--仍需要努力啊!"
           end
        when 1
           if game_value > value
             @need -= 1
           else
             p "任务尚未完成--仍需要努力啊!"
           end
        when 2
           if game_value >= value
              @need -= 1
           else
             p "任务尚未完成--仍需要努力啊!"
           end
        when 3
          if game_value != value
            @need -= 1
          else
            p "任务尚未完成--仍需要努力啊!"
          end
        end
      end
      if $data_tasks[task_id].need_enemie != 0
        i = $data_tasks[task_id].need_enemie
        # 当计数器大于等于要求被K的
        if $game_enemys.count >= $game_tasks[task_id].enemie
          @need -= 1
        else
          k = $game_tasks[task_id].enemie - $game_enemys.count
          p "还有#{k}#{$data_enemies.name}"
        end
      end
    end
    # 最后返回@need 的值
    if @need == 0
      @completion = true
    end
  end
end
一些显示等 请参照自己实际情况而定义
思路在于 用一些数组 写入到文件后然后读取出来 生成 类似#{RPG::Task:16进制}代码后用脚本读取
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6545
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

3
发表于 2009-7-10 18:20:22 | 只看该作者
学以自用
F1就是最好的教科书~~
LZ加油~!











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
128 小时
注册时间
2009-1-28
帖子
2790
4
发表于 2009-7-11 16:25:32 | 只看该作者
以前看张永的<运行时设定数据库>就想要类似的教材,
谢谢楼主了!

炼金术的根本法则是等价交换。想要获得,必须失去同等价值的东西。每当烦躁的时候,煎熬在不想做却又正在做的烦心事中的时候,我就安慰自己,提醒自己做这些事情的目的所在,告诉自己不要忽略所获得或者即将获得的回报,物质的,精神的,肉体的,灵魂的回报!只做想做的事情,就会失去不想失去的东西。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

PIG·KIN

梦石
0
星屑
45
在线时间
442 小时
注册时间
2009-1-26
帖子
3298

贵宾

5
发表于 2009-7-14 15:21:07 | 只看该作者
本帖最后由 ★PIG★ 于 2009-7-14 15:26 编辑

貌似有点诡异,研究研究
很深奥的范例...
我是一个风一般的————外卖佬。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6545
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

6
发表于 2009-7-14 18:25:43 | 只看该作者
如果是【成品】 => 写出使用说明&截图

如果是【教程】 => 写出思路&步骤&知识点

只给了个工程没多大用处~!











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
7
发表于 2009-7-14 18:28:49 | 只看该作者
如果能够将制作任务这个过程简单化就是最实际的问题
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
8953
在线时间
4371 小时
注册时间
2005-10-22
帖子
6754

开拓者贵宾

8
发表于 2009-7-14 20:35:58 | 只看该作者
其实只是文件读写而已 囧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
9
 楼主| 发表于 2009-7-14 21:12:48 | 只看该作者
如果你觉得囧 就不要下载~请你记住了~没人强迫你去看~至少你要尊重作者~
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
8953
在线时间
4371 小时
注册时间
2005-10-22
帖子
6754

开拓者贵宾

10
发表于 2009-7-14 21:43:08 | 只看该作者
如果你觉得囧 就不要下载~请你记住了~没人强迫你去看~至少你要尊重作者~
kula1900 发表于 2009-7-14 21:12


呃……只是现在的习惯性表情而已……
从本质上讲,rxdata的扩展名不是重点,重点在于里面写的具体是什么
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 04:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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