幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2874|回复: 19

[RMVX] [讨论]弹药和消耗道具系统/武器种类

[复制链接]

8

主题

73

帖子

930

积分

⑤进阶

积分
930
发表于 2006-11-22 21:32:05 | 显示全部楼层 |阅读模式
例如让一种武器消耗一种弹药,或者不同武器消耗弹药的数量不同。
再例如双手武器和单手武器……

用数据库编辑界面是没有这些设定的,自己写脚本保存变量又麻烦,编辑的武器数据时候还要去改脚本里面的数字……

我想是否可以用已经有的属性保存这些数据呢?例如一个物品价格是6位数字,实际可能用不了这么详细,可以把最后两位干别的用,例如240012,实际价格是240000,12可以表示子弹的种类。

还有攻击力,也不一定要精确到个位数字,其他的数值加成都可以拿出一位来干别的。例如1表示单手,0表示双手,2表示单手远程,3表示双手远程,……

消耗的弹药可以放在物品里面,例如101 - 150保留给弹药专用。弹药种类是12,就去112那个位置找。武器攻击的时候就在脚本里面判断该弹药的数量,如果不足的话如何如何……

其他例如防具和武器的损坏率,也可以类似处理……

不知道各位有什么好的办法没有?

-------------------------------------------------------------------------------------------
武器的种类问题
有时候,我们总是希望不同武器用不同的伤害/命中计算公式。
个人感觉最省事的办法还是按照上面的思路,把武器攻击力最后一位保留作武器的种类判断。

例如1表示刀剑类, 3表示敏捷类武器, 5表示钝器, 7表示远程武器, 9表示特殊伤害武器(例如枪,攻击力和力量无关),10单独表示空手

保留偶数的目的是为了区别相应单/双手武器。
回复

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2006-11-22 21:34:12 | 显示全部楼层
目前比较没空,不能研究大的东西= =|||…… [s:5]
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

8

主题

73

帖子

930

积分

⑤进阶

积分
930
 楼主| 发表于 2006-11-22 21:41:52 | 显示全部楼层
只是个设想...我觉着rm的数据库编辑限制还是太多了,当然这也是为了存档方便吧,RPG::Weapon之类的都是内置的类,也不太好扩展……
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
发表于 2006-11-22 21:52:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

8

主题

73

帖子

930

积分

⑤进阶

积分
930
 楼主| 发表于 2006-11-22 21:59:41 | 显示全部楼层
嗯,我去做下看看可行性如何-v-
回复 支持 反对

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2006-11-22 22:10:10 | 显示全部楼层
引用第4楼地道联盟2006-11-22 21:59发表的:
嗯,我去做下看看可行性如何-v-

可行性是肯定有的,以前我都做过。 [s:4]
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

8

主题

73

帖子

930

积分

⑤进阶

积分
930
 楼主| 发表于 2006-11-23 04:16:06 | 显示全部楼层
写了下看看,把物品的价格后3位占用了。

现在物品的价格 = 价格 / 1000 * 1000,如果不足1000就是0了,价格最小单位是1000(*100的话就是100,不过只能到5位字)

具体作用:
个位和十位 - 消耗弹药的物品编号 - 50
百位 - 消耗数量

举例说明下:
20301的某武器,实际价格是20000,它消耗弹药是道具里面的51号,每次消耗3个;
12000的某武器,实际价格12000,不消耗任何弹药。

修改的脚本:
1、Game_Actor类


  #--------------------------------------------------------------------------
  # ● 获取当前武器的弹药id
  #--------------------------------------------------------------------------
  def ammo_id
    weapon = $data_weapons[@weapon_id]
    if weapon != nil
      return (weapon.price % 100) + 50
    end
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 获取当前武器的弹药消耗需求
  #--------------------------------------------------------------------------
  def ammo_req
    weapon = $data_weapons[@weapon_id]
    if weapon != nil
      return weapon.price % 1000 / 100
    end
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 消耗弹药
  #--------------------------------------------------------------------------
  def use_ammo
    $game_party.lose_item(ammo_id, ammo_req)
  end
  #--------------------------------------------------------------------------
  # ● 武器是否可用
  #--------------------------------------------------------------------------
  def weapon_available?
    weapon = $data_weapons[@weapon_id]
    #没有武器
    if weapon == nil
      return false
    end
    #弹药ID是0为该武器不使用弹药的情况
    #否则判断弹药道具的数量是否足够消耗
    if ammo_id == 0 or $game_party.item_number(ammo_id) >= ammo_req
      return true
    end
    #其他否则,判断为不可用
    return false
  end
  #--------------------------------------------------------------------------
  # ● 获取空手攻击力,武器损坏或者无弹药可以使用
  #--------------------------------------------------------------------------
  def _bare_atk
    ####return base_str ** 0.5 * 10 #力量加成
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 获取基本攻击力
  #--------------------------------------------------------------------------
  def base_atk
    weapon = $data_weapons[@weapon_id]
    return weapon_available? ? weapon.atk + _bare_atk : _bare_atk
  end


2、Scene_Battle_4,make_basic_action_result,这行后面修正攻击动画,
  即没有弹药情况下改用空手攻击效果,否则设置为武器攻击的动画,
  并且,攻击之后要执行use_ammo来实现弹药消耗

      # 行动方的战斗者是角色的情况下
      if @active_battler.is_a?(Game_Actor)

        # 设置攻击 ID,是否有武器的情况
      if @active_battler.weapon_available?
          @animation1_id = @active_battler.animation1_id
          @animation2_id = @active_battler.animation2_id
        else
          @animation1_id = 0
          @animation2_id = 0
        end
   
...
      # 应用通常攻击效果
    for target in @target_battlers
        target.attack_effect(@active_battler)
      end

      #消耗弹药1次
    if @active_battler.is_a?(Game_Actor) and @active_battler.weapon_available?
        @active_battler.use_ammo
      end

3、Scene_Shop和Window_Buy等类,牵扯价格显示和计算的地方相应处理,不再冗述。
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
发表于 2006-11-23 10:02:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

8

主题

73

帖子

930

积分

⑤进阶

积分
930
 楼主| 发表于 2006-11-23 18:27:33 | 显示全部楼层
疯了,双手武器装备老是出bug
后来一看是卸了之后需要更新装备界面……
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
发表于 2006-11-23 18:32:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-27 17:33 , Processed in 0.015077 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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