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

Project1

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

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

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
1
 楼主| 发表于 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%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
4
 楼主| 发表于 2009-7-15 18:12:05 | 显示全部楼层
本帖最后由 kula1900 于 2009-7-15 18:13 编辑

那是干啥用的???版主 喵~~
八云 说过那个可以让文件加密~喵
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
5
 楼主| 发表于 2009-7-15 21:20:32 | 显示全部楼层
可是 Weapons 武器数据库 写入的 都不是 等变量吗????我就不懂了~~你把 $data_weapons 看看~
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
6
 楼主| 发表于 2009-7-16 09:44:21 | 显示全部楼层
那么既然武器 有说明等变量  那么任务说明不可以堪称是.rxdata的变量吗??同理 奖励金币不可以用读写吗?? 难道非要把任务写进脚本里???我就不懂了~~~
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
81
在线时间
54 小时
注册时间
2008-12-24
帖子
345
7
 楼主| 发表于 2009-7-16 11:15:05 | 显示全部楼层
要说明的是:生成Task文件后!你可以把脚本删除啊??那就是我的方法~~一次生成所有任务文件`照你这么说有了新闻媒体 要报纸干嘛?对吧
丧尸语录-终の千年
类型:恐怖
      爱情
      悬疑
      休闲
の名:千年の制裁の
系统--- 50%
画面---  0%
美工---  0%
地图---  0%
数据库-  0%
剧情---  50%
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-14 14:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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