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

Project1

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

[已经解决] 如何让战斗恢复量与变量挂钩?

 关闭 [复制链接]

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
跳转到指定楼层
1
发表于 2009-8-18 15:40:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
使用增益、恢复、减益特技时受魅力属性的影响。
比如:魅力每增加0.8,恢复量+1,魅力每增加1,使用封印特技的命中率+0.2%。
(在数据库中,封印特技的命中率是固定的,并且恢复量是受威力影响的。)
我爱66RPG,但我讨厌66.

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3309
在线时间
3620 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

2
发表于 2009-8-18 15:54:02 | 只看该作者
公共事件。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-8-18
帖子
43
3
发表于 2009-8-18 17:14:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

贵宾

4
发表于 2009-8-18 19:51:07 | 只看该作者
Game_Battler 3
回复 支持 反对

使用道具 举报

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
5
 楼主| 发表于 2009-8-18 20:18:59 | 只看该作者
本帖最后由 奶油Da蛋糕 于 2009-8-18 20:30 编辑
Game_Battler 3
后知后觉 发表于 2009-8-18 19:51


    # 第一命中判定
    @actor = $game_party.actors#[@actor_index]
    hit = skill.hit + $data_actors[@actor.id].max_dex_stars * 0.002
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)

不知道这样会不会生效呢。
我爱66RPG,但我讨厌66.
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

贵宾

6
发表于 2009-8-18 22:05:30 | 只看该作者
本帖最后由 后知后觉 于 2009-8-18 22:10 编辑

有没有用你自己运行下不就知道了么.....
请问你的 @actor_index 是从哪里弄来的?
你可别告诉我是Scene_Battle 里的那个 @actor_index

看看这个特技效果应用的方法的定义的首行吧
  def skill_effect(user, skill)

user 就是使用 后面这个 skill 的人
所以没有必要再去获取一次这个@actor
而这个特技是对谁使用的呢 是对 self 使用的
还有就是 $game_xxx和$data_xxx的关系
$data_xxx是数据库的内容 在默认情况下
$data_xxx的东西在游戏运行的时候是不会发生任何改变的
会发生改变的是$game_xxx
$game_xxx的东西需要获取初始化数据的时候就是从$data_xxx读取的











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
7
 楼主| 发表于 2009-8-19 11:20:22 | 只看该作者
  1.     # 第一命中判定
  2.     hit = skill.hit + $data_actors[@actor.id].max_dex_stars * 0.002
  3.     if skill.atk_f > 0
  4.       hit *= user.hit / 100
  5.     end
  6.     hit_result = (rand(100) < hit)
复制代码
您的意思是说这样就可以了吧?
关于魅力值的变量,是我从加点系统中找到的。
加点系统中并没有出现过$game_XXX的东西。
$temp_dex要么是这个,$data_actors[@actor.id].max_dex_stars要么就是这个。
  1.        # 将角色点数实际加上
  2.        @actor.str += $temp_str
  3.        @actor.dex += $temp_dex
  4.        @actor.agi += $temp_agi
  5.        @actor.int += $temp_int
  6.        @actor.maxhp += $temp_hp
  7.        @actor.maxsp += $temp_sp
  8.        @actor.maxhp = $data_actors[@actor.id].max_hp_stars if @actor.maxhp >= $data_actors[@actor.id].max_hp_stars and $data_actors[@actor.id].max_hp_stars != 0
  9.        @actor.maxsp = $data_actors[@actor.id].max_sp_stars if @actor.maxsp >= $data_actors[@actor.id].max_sp_stars and $data_actors[@actor.id].max_sp_stars != 0
  10.        @actor.str = $data_actors[@actor.id].max_str_stars if @actor.str >= $data_actors[@actor.id].max_str_stars and $data_actors[@actor.id].max_str_stars != 0
  11.        @actor.dex = $data_actors[@actor.id].max_dex_stars if @actor.dex >= $data_actors[@actor.id].max_dex_stars and $data_actors[@actor.id].max_dex_stars != 0
  12.        @actor.agi = $data_actors[@actor.id].max_agi_stars if @actor.agi >= $data_actors[@actor.id].max_agi_stars and $data_actors[@actor.id].max_agi_stars != 0
  13.        @actor.int = $data_actors[@actor.id].max_int_stars if @actor.int >= $data_actors[@actor.id].max_int_stars and $data_actors[@actor.id].max_int_stars != 0
复制代码
经过测试,在我给角色用加点系统增加了500点魅力之后,使用命中率为70%的封印两次均以失败告终。按理而言,500*0.2%=100%。那么命中率高达170%,为何还会失败呢。
我爱66RPG,但我讨厌66.
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

贵宾

8
发表于 2009-8-19 12:37:01 | 只看该作者
本帖最后由 后知后觉 于 2009-8-19 12:39 编辑

我已经说得很清楚了 user 就是使用特技的人 没有必要再去用data_actors获取一次
而且你那样写也是错误的,你根本就不知道什么叫对象
在上面我也说了$data_xxx是数据库,默认情况下根本不会在游戏里发生变化
hit = skill.hit + user.max_dex_stars * 2 / 1000
这个max_dex_stars 默认里没有,是不是你自己想要的数据我不清楚
hit = skill.hit + user.dex * 2 / 1000
可能是这样











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

℃ake

梦石
0
星屑
50
在线时间
8 小时
注册时间
2009-6-6
帖子
787
9
 楼主| 发表于 2009-8-19 14:50:08 | 只看该作者
我已经说得很清楚了 user 就是使用特技的人 没有必要再去用data_actors获取一次
而且你那样写也是错误的,你根本就不知道什么叫对象
在上面我也说了$data_xxx是数据库,默认情况下根本不会在游戏里发生变化
hit = sk ...
后知后觉 发表于 2009-8-19 12:37


    # 第一命中判定
    hit = skill.hit + (user.dex * 2 / 10) / 1.2
    if skill.atk_f > 0
      hit *=     end


先谢谢后知后觉大大了。
这样设置之后,如果灵巧是300点的话,hit就等于特技本身的命中率+(300*0.2)/1.2=70+50=120
然后hit *=user.hit / 100 ,命中率就是1.2,120%。
按理来说不会有失误发生。
但是,在测试中,300灵巧的角色在使用特技“幻雾迷朦”,有70%几率使对方陷入昏睡状态三回合。使用此特技后,仍然有很严重的失误现象,真正的命中率似乎连70%都达不到。
我爱66RPG,但我讨厌66.
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

贵宾

10
发表于 2009-8-19 16:20:28 | 只看该作者
本帖最后由 后知后觉 于 2009-8-19 17:19 编辑

user.hit 是状态追加的命中率
当状态没有追加命中率的时候  user.hit 是 100

而且这个第一命中率并不是状态命中率
而且那一行要这样写才比较合适
hit = skill.hit + (user.dex * 2 / 10) * 10 / 12

除了第一命中还有个第二命中
当第一命中成立的时候才会计算第二命中
当第二命中成立的时候才会计算状态变化
把这3个几率要同时发生才会附加状态
第一命中是技能的命中,也就是数据库-特技 里设置的那个命中
而第二命中是用攻击方的灵巧和对象方的速度来进行的比较
而状态变化是个固定的数组
[0,100,80,60,40,20,0]
     A   B   C   D   E  F

      # 状态变化
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)

全局搜索 def states_plus
可以找到那个数组











你知道得太多了

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-10 18:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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