Project1

标题: 我想在技能数据库里添加技能,或是修改现有技能消耗 [打印本页]

作者: hanguang85    时间: 2013-9-7 22:33
标题: 我想在技能数据库里添加技能,或是修改现有技能消耗
本帖最后由 hanguang85 于 2013-9-8 23:03 编辑

我使用的版本是 RMVX ACE
我想让 所有技能或动作都消耗 我指定的一个 能量值 不是MP也不是TP 是我自创的一个能量系统

我目前的思路是: 在RPG::SKILL类里加入 能量_COST ,
                             然后 A、修改现有技能 使其 使用条件为消耗 能量
                                或 B、 增加新技能到数据库 $data_skills 让其使用条件为消耗 能量


请各位帅哥美女帮帮我 想想从哪入手好。。。拜谢
作者: hanguang85    时间: 2013-9-7 23:34
回复 @345912390
但是有人说 MP是系统内置的变量  直接调用会引起很多BUG
作者: 绿坝    时间: 2013-9-9 13:37
意思是楼主想做出 魔法值 能力值 外 第三个技能消耗数值?
为什么这么麻烦?
作者: moy    时间: 2013-9-9 19:42
如果你费心做出来,只是为了把mp改个名字,那我建议你直接去数据库改个名字算了…………
或者对于不同职业的角色的mp,改掉描述和色条。
也就是说,你这个新资源SP(假定叫sp),是否与MP有不同的获取和消耗方式。如果没有,那么还是别做这么麻烦的事情了。
作者: hanguang85    时间: 2013-9-9 23:20
moy 发表于 2013-9-9 19:42
如果你费心做出来,只是为了把mp改个名字,那我建议你直接去数据库改个名字算了…………
或者对于不同职业 ...

这么说吧。。。这个 能量值 先叫它SP 是我这个游戏的核心
一切都是以这个SP为主   所以 是的  它的获得方式和消耗方式会很特别
不然我干嘛这么辛苦的去改。。。泪目。。。
作者: 345912390    时间: 2013-9-9 23:38
个人楼主的思维方式有点偏了.
技能不管它是没消耗 MP,TP还是SP对于算法而言也就如下
  1. #消耗 MP:Actor.mp-=Skill.mp_cost
  2. #消耗TP:Actor.tp-=Skill.tp_cost
  3. #消耗SP:Actor.sp-=Skill.sp_cost
复制代码
既然你的MP和TP在游戏中都没有用到,那么你的技能SP消耗值 直接写在MP的那个输入处不就可以了
在算法上写
  1. Actor.sp-=Skill.mp_cost
复制代码
{:4_137:}
作者: hanguang85    时间: 2013-9-9 23:42
345912390 发表于 2013-9-9 23:38
个人楼主的思维方式有点偏了.
技能不管它是没消耗 MP,TP还是SP对于算法而言也就如下既然你的MP和T ...

以下是我的思路  但是ACE好像语法改了  报错提示我没有 $data_skills.size这个method
求助

#-------------------------------------------------------------------------------
# 精魄系统试验版 0.1
#-------------------------------------------------------------------------------
# 重新解释RPG模块里的SKILL类,在系统默认的类里加入精魄
class RPG::Skill < RPG::UsableItem
  def initialize
    super
    @soul_cost = 0                             # 初始化精魄值

  end
  attr_accessor :soul_cost                     # 增加类成员精魄

end

# 重定义精魄方法
#def soul_cost
#  soul_cost =+ 1
#end

# 生成精魄技能的消耗值

# 生成带有精魄消耗的技能
new_skill = RPG::Skill.new                 # 调用技能类生成新技能
new_skill.name = "slash"                   # 技能名为slash
new_skill.soul_cost = 1                    # 定义精魄消耗为1
new_skill.id = $data_skills.size + 1       # 在技能数据库里的位置为最大值+1
$data_skills.push(new_skill)               # 推送到数据库


作者: moy    时间: 2013-9-9 23:51
hanguang85 发表于 2013-9-9 23:42
以下是我的思路  但是ACE好像语法改了  报错提示我没有 $data_skills.size这个method
求助

能用语言描述一下吗。。。我觉得意图不明啊
sp越用越多的意思?
那么如6L,你只要简单的替换+-符号,然后把mp名字改成sp就可以了。。。。
作者: hanguang85    时间: 2013-9-9 23:54
moy 发表于 2013-9-9 23:51
能用语言描述一下吗。。。我觉得意图不明啊
sp越用越多的意思?
那么如6L,你只要简单的替换+-符号,然后 ...

如果用 Actor.sp -= Skill.mp_cost   会不会因为MP本身  有很多关连的参数 导致各种问题?
作者: hanguang85    时间: 2013-9-9 23:55
moy 发表于 2013-9-9 23:51
能用语言描述一下吗。。。我觉得意图不明啊
sp越用越多的意思?
那么如6L,你只要简单的替换+-符号,然后 ...

如果用 Actor.sp -= Skill.mp_cost   会不会因为MP本身  有很多关连的参数 导致各种问题?
作者: 345912390    时间: 2013-9-10 00:08
hanguang85 发表于 2013-9-9 23:55
如果用 Actor.sp -= Skill.mp_cost   会不会因为MP本身  有很多关连的参数 导致各种问题? ...

这个应该不会。你在战斗时生成的skilllist里就对技能是否可用做过判断了。现在用手机上网不方便,明天仔细看看了给予答复
作者: moy    时间: 2013-9-10 00:14
hanguang85 发表于 2013-9-9 23:54
如果用 Actor.sp -= Skill.mp_cost   会不会因为MP本身  有很多关连的参数 导致各种问题? ...

不,首先,不是在脚本里改sp,而是在数据库,在“用语”那一页,将mp改写为sp,或者soul或者别的什么。
脚本内还是mp。这点不要弄混了(否则工作量何止是大)。因为你根本用不到mp,那么只要玩家以为这是sp就没问题。
第二,因为你始终不正面描述需求,我就按照你放技能涨一个魂,通过事件掉魂或者判断剧情进程这么认为。
那么,可以认为你的技能基本没有消耗。因为始终是在增加资源(SP),这样的话大部分冲突可以无视,直接在pay_skill_cost中,将mp的减号换成加号,并在skill_cost_payable?中将关于mp的语句直接删除。(即使要加上限也只需要改成mp + skill_mp_cost(skill) >= 约定值)
这样,你在数据库中,只要将魔力值消耗处填上你需要加的魂数,在使用时就是增加了……

作者: hanguang85    时间: 2013-9-10 00:27
moy 发表于 2013-9-10 00:14
不,首先,不是在脚本里改sp,而是在数据库,在“用语”那一页,将mp改写为sp,或者soul或者别的什么。
...

看到你这么认真的回复 我都不好意思了
其实就是一个很简单的设定  玩过 万智牌魔法风云会之天命战场 的人  会很好理解
就是每回合 涨一个豆  任何动作 技能都要消耗 一定量的 豆   
比如说 你有三个豆  你可以攻击一次  放一个消耗为一个豆的技能  最后再防御一次
所以一切都是围绕这个豆做文章的
所以才担心  冲突之类的 因为我是大新手一只  处理不了这么多脚本
好了  现在你大概应该了解我的意图了吧
请帮我出出主意 拜谢
作者: hanguang85    时间: 2013-9-10 00:30
另外  怎么 修改 已有的技能   比如我想让  某个技能 增加一个 sp_cost = 1
作者: moy    时间: 2013-9-10 00:50
本帖最后由 moy 于 2013-9-10 00:51 编辑
hanguang85 发表于 2013-9-10 00:27
看到你这么认真的回复 我都不好意思了
其实就是一个很简单的设定  玩过 万智牌魔法风云会之天命战场 的人 ...


什么,万智牌
好吧,如果你是指标示物一类的东西,那么确实要稍微考虑下。

首先根据需求,你需要将技能分为三类
1.对SP无影响
2.增加SP
3.减少SP

万幸的是,标示物不存在上限(这也是最万恶的一点…)所以不管是1还是2,都不会造成超出限度
那么着眼点在3上面。而3和通常的mp消耗其实采用的是同样的规则。
那么,只要在pay_skill_cost中加一个判断语句,判断是否是某种特定的技能,就可以方便的识别是加还是减SP。
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 扣除技能的使用消耗
  3.   #--------------------------------------------------------------------------
  4.   def pay_skill_cost(skill)
  5.     if(skill.id==15)
  6.        self.mp -= skill_mp_cost(skill)
  7.     else
  8.        self.mp += skill_mp_cost(skill)
  9.     end
  10.     self.tp -= skill_tp_cost(skill)
  11.   end

同理,在skill_cost_payable?中,加一个判断,看是否需要进行“mp”最小值的限定(也就是SP必须够才能放减少SP的技能)
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 判定是否足够扣除技能的使用消耗
  3.   #--------------------------------------------------------------------------
  4.   def skill_cost_payable?(skill)
  5.     tp >= skill_tp_cost(skill) && if(skill.id==15) mp >= skill_mp_cost(skill)
  6.   end

这里用的15号技能举例。如果有很多,可以设置一个数组,保存着技能的编号,然后判断所使用的技能是否在数组内。

(PS:连帖会被扣分…
作者: hanguang85    时间: 2013-9-10 21:51
moy 发表于 2013-9-10 00:50
什么,万智牌
好吧,如果你是指标示物一类的东西,那么确实要稍微考虑下。

拜谢。。。我回去试下
(PS:扣就扣吧。。。大不了我再写两首BGM传上来。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1