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

Project1

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

自制敌人数据库文件+敌人等级随我方变化 [发布预备]

 关闭 [复制链接]

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

跳转到指定楼层
1
发表于 2008-7-5 09:56:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
自制敌人数据库文件 + 敌人等级随我方变化

作者:秀秀

由于原敌人数据库没有等级和等级能力变化曲线
所以自己制作了个敌人数据库
里面只定义了等级和能力变化曲线
如果不满足需求,比如还需要定义敌人经验啊 经验曲线 职业 等等
自行添加即可

由于公开了 数据库结构 制作 读取 全过程
是需要比较坚实的基础才能理解
所以小设了一点点vip{/wx}

也希望留给大家研究

最后说下。。。此脚本还赠送了 敌人等级随我方变化

ms 这个系统比较针对某口袋妖怪。。{/cy}

请别见怪...其实自己闲的无聊 才想写{/cy}

有bug请留言~

具体用法见脚本开始的说明

------------下载范例--------------------------------------------------------
http://rpg.blue/upload_program/f ... 变化_95652411.rar
----------------------------------------------------------------------------

脚本部分


=begin

  自制敌人数据库 + 敌人等级随我方变化

  作者:秀秀

  用法:1.数据库设置
          见开始的几个常量
          HP_RATE    表示敌人随等级HP(以下类推)增长倍率
          SP_RATE    公式 maxhp * (HP_RATE) ** level
          STR_RATE   可以自行找到脚本的地方修改公式
          DEX_RATE
          AGI_RATE
          INT_RATE
  
        2.数据库制作:
          (默认已经做好了,要自己做只需要在第一步设置好,
           再制作一遍会覆盖掉,或者删除掉已经做好的文件)
          使用函数 Enemy_data.create_data 来制作
          会产生一个目录SELF_DATA
          里面有个Enemy_data.rxdata文件
          运行时候检测到这个文件会自动读取到
          全局变量$enemy_data
        
        3.数据库使用
          比如要设置1号敌人的等级为30
          $game_system.enemies_level.levels[1] = 30
          要获取10号敌人35级时候的str
          $enemy_data[10].str_list[35]
          以下数据使用方法相同 不说了
          hp_list
          sp_list   
          dex_list
          agi_list         
          int_list
        4.赠送敌人随我方平均等级变化(默认为true)
          等级浮动范围见脚本开始的常量 LEVEL_RANGE
          开始的常量  Enemy_data.with_player_level(true) 则为变化
                      Enemy_data.with_player_level(false) 则不变化
          不随玩家等级变化的话 游戏中需完家自己改变敌人等级 来变化
          改变方法见上 = =
=end


                        
module Enemy_data
  
  # 等级变化范围 (-4..4)
  LEVEL_RANGE = rand(5) - rand(5)
  
  # 敌人随等级能力增长倍率
  HP_RATE = 1.1
  SP_RATE = 1.1
  STR_RATE = 1.1
  DEX_RATE = 1.1
  AGI_RATE = 1.1
  INT_RATE = 1.1
  
  #最大等级
  MAX_LEVEL = 99
  
  @@with_player_level = true
  
  def self.with_player_level(tf)
    @@with_player_level = tf
    return
  end
  
  def self.return_wpl
    return @@with_player_level
  end  
  
  def self.create_data
    Dir.mkdir("SELF_DATA") unless File.exists?("SELF_DATA")
    File.open("SELF_DATA/Enemy_data.rxdata","wb")
    datas = {}
    for i in 1...$data_enemies.size
      datas = (Pm_Enemy.new)
      for j in 1..(MAX_LEVEL)
        datas.hp_list[j] = (
        $data_enemies.maxhp * (HP_RATE) ** j).to_i
      end
      for j in 1..(MAX_LEVEL)
        datas.sp_list[j] = (
        $data_enemies.maxsp * (SP_RATE) ** j).to_i
      end
      for j in 1..(MAX_LEVEL)
        datas.str_list[j] = (
        $data_enemies.str * (STR_RATE) ** j).to_i
      end
      for j in 1..(MAX_LEVEL)
        datas.dex_list[j] = (
        $data_enemies.dex * (DEX_RATE) ** j).to_i
      end
      for j in 1..(MAX_LEVEL)
        datas.agi_list[j] = (
        $data_enemies.agi * (AGI_RATE) ** j).to_i
      end
      for j in 1..(MAX_LEVEL)
        datas.int_list[j] = (
        $data_enemies.int * (INT_RATE) ** j).to_i
      end
    end
    save_data(datas,"SELF_DATA/Enemy_data.rxdata")
    p "数据库制作成功"
    exit
  end  

  
  class Pm_Enemy
    attr_accessor     :hp_list
    attr_accessor     :sp_list
    attr_accessor     :str_list
    attr_accessor     :dex_list
    attr_accessor     :agi_list
    attr_accessor     :int_list
    attr_accessor     :level
    def initialize
      @hp_list = {}
      @sp_list = {}
      @str_list = {}
      @dex_list = {}
      @agi_list = {}
      @int_list = {}
      @level = 1
    end  
  end  
end  

class Game_Party
  #--------------------------------------------------------------------------
  # ● 获取平均等级
  #--------------------------------------------------------------------------
  def avg_level
    # 同伴人数为 0 的情况下
    if @actors.size == 0
      return 0
    end
    # 初始化本地变量 level
    level = 0
    # 求得同伴的最大等级
    for actor in @actors
      level += actor.level
    end
    return Integer(level/@actors.size)
  end
end


class Enemies_Level
  attr_accessor   :levels
  def initialize
    @levels = {}
    create_enemy_level
  end
  def create_enemy_level
     for i in 1...$data_enemies.size
       @levels = 1
     end  
  end  
end  

              
class Game_System
  attr_accessor     :enemies_level
  alias oir_initialize initialize                     
  def initialize                     
    oir_initialize           
    @enemies_level = Enemies_Level.new
  end                     
end

class Game_Enemy < Game_Battler

  def level=(level)
    @level = [[level, Enemy_data::MAX_LEVEL].min, 1].max
  end

  def base_maxhp
    return $enemy_data[@enemy_id].hp_list[
          Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
          $game_party.avg_level) : (
          $game_system.enemies_level.levels[@enemy_id])]
  end

  def base_maxsp
    return $enemy_data[id].sp_list[
           Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
           $game_party.avg_level) : (
           $game_system.enemies_level.levels[@enemy_id])]
  end

  def base_str
    return $enemy_data[id].str_list[
           Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
           $game_party.avg_level) : (
           $game_system.enemies_level.levels[@enemy_id])]
  end

  def base_dex
    return $enemy_data[id].dex_list[
           Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
           $game_party.avg_level) : (
           $game_system.enemies_level.levels[@enemy_id])]
  end

  def base_agi
    return $enemy_data[id].agi_list[
           Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
           $game_party.avg_level) : (
           $game_system.enemies_level.levels[@enemy_id])]
  end

  def base_int
    return $enemy_data[id].int_list[
           Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
           $game_party.avg_level) : (
           $game_system.enemies_level.levels[@enemy_id])]
  end
end

$enemy_data = load_data("SELF_DATA/Enemy_data.rxdata") if File.exists?(
                        "SELF_DATA/Enemy_data.rxdata")
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-27
帖子
46
24
发表于 2008-8-7 07:25:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

23
 楼主| 发表于 2008-8-7 02:00:57 | 只看该作者
谢谢指正~
自制数据库文件当然对vx通用了
懂脚本的话 稍微改动下获取能力值这里就可以了{/wx}
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-27
帖子
46
22
发表于 2008-8-6 23:32:56 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

21
发表于 2008-8-6 19:06:22 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

20
 楼主| 发表于 2008-8-6 18:55:44 | 只看该作者
数据库可以用现成界面编辑器的代替,比如我的过期帖:
http://rpg.blue/viewthread.php?tid=77388

刚发现沉影也做过这个 去看看
不过你这个是利用我方数据库来制作的吧 和我这个生成数据库文件还是有点区别
{/wx}
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

19
发表于 2008-8-6 18:36:39 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-17
帖子
41
18
发表于 2008-7-20 09:00:26 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

17
 楼主| 发表于 2008-7-9 16:03:56 | 只看该作者
请问下,如果我要重新做数据库,怎么实现,谢谢

删除目录下的自制数据库文件夹
使用函数
Enemy_data.create_data
来制作
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

16
 楼主| 发表于 2008-7-9 15:57:48 | 只看该作者
我是说,虽然可以写入,这点不错。
但是,正规一点来说要:
module RPG
class Enemy
   attr_accessor : 变量名
   def initialize
     INIT
   end
end
end


怎么会看不懂呢 我也是这么写的阿

def self.create_data
   Dir.mkdir("SELF_DATA") unless File.exists?("SELF_DATA")
   File.open("SELF_DATA/Enemy_data.rxdata","wb")
   datas = {}
   for i in 1...$data_enemies.size
     datas = (Pm_Enemy.new)
     for j in 1..(MAX_LEVEL)
       datas.hp_list[j] = (
       $data_enemies.maxhp * (HP_RATE) ** j).to_i
     end
    后面省略.......
class Pm_Enemy
   attr_accessor     :hp_list
   attr_accessor     :sp_list
   attr_accessor     :str_list
   attr_accessor     :dex_list
   attr_accessor     :agi_list
   attr_accessor     :int_list
   attr_accessor     :level
   def initialize
     @hp_list = {}
     @sp_list = {}
     @str_list = {}
     @dex_list = {}
     @agi_list = {}
     @int_list = {}
     @level = 1
   end  
end  




ID我故意不写了 因为默认数据库可以访问...只写了原先没有的(升级曲线,等级..)
话说访问还是要用ID的 格式为 ID=>EMENY对象
毕竟只是范例 大家需要可以自己添加 {/wx}
版主对此帖的认可:『我知道的,看来是我误解了。对于我来讲,就是直接覆盖某个文件,不过,id还是最好写入(没说不能不写)不发布,看看最近回更新不 {/hx}』,积分『+20』。
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-4-7 20:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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