Project1

标题: 求伤害计算脚本 [打印本页]

作者: piaoy    时间: 2011-3-12 13:57
标题: 求伤害计算脚本
球一段伤害计算,
就是按XP默认的算法,帮我把最终结果代入一个变量就行了,MISS,暴击不用管,我只要伤害算法的结果(用脚本表示)
作者: 忧雪の伤    时间: 2011-3-12 14:02
http://rpg.blue/forum.php?mod=vi ... p;page=1#pid1630007
作者: piaoy    时间: 2011-3-12 14:25
是可以在地图上调用的,原先那个是使用了战斗时的定义吧,
作者: 忧雪の伤    时间: 2011-3-12 14:29
piaoy 发表于 2011-3-12 14:25
是可以在地图上调用的,原先那个是使用了战斗时的定义吧,

可是如果没有战斗你想如何读取目标啊……
作者: piaoy    时间: 2011-3-12 15:20
有战斗,只是不是XP里定义的那个,所以说地图上用嘛
作者: piaoy    时间: 2011-3-12 16:49
回复 piaoy 的帖子

就是说直接在其他地方可以使用,并不用在战斗中!
比如$XXX=$game_actorXXX*$game_actorXXX+$game_actorXXX
这样的
作者: 忧雪の伤    时间: 2011-3-12 16:52
piaoy 发表于 2011-3-12 16:49
回复 piaoy 的帖子

就是说直接在其他地方可以使用,并不用在战斗中!

就是调用两只怪的数据并且计算公式么= =……
作者: piaoy    时间: 2011-3-12 19:24
本帖最后由 piaoy 于 2011-3-12 19:24 编辑

算了,那不如直接告诉我储存“攻击力”的变量吧,伤害不就是和“力量”“武器攻击力”有关吗。。。力量我也已经知道了。。
作者: 忧雪の伤    时间: 2011-3-12 19:29
piaoy 发表于 2011-3-12 19:24
算了,那不如直接告诉我储存“攻击力”的变量吧,伤害不就是和“力量”“武器攻击力”有关吗。。。力量我也 ...

事件里面不是自带攻击力读取吗……
作者: 忧雪の伤    时间: 2011-3-12 19:38
本帖最后由 忧雪の伤 于 2011-3-12 19:38 编辑
  1. def atk_save(actor_id, id)
  2.   actor = $game_actors[actor_id]
  3.   $game_variables[id] = actor.atk
  4.   # => p $game_variables[id]
  5. end
复制代码


事件脚本调用 atk_save(id角色,id变量)。
将会储存 id角色的攻击力到id变量。
当然,这个方法在其他地方也可以调用。
比如一些脚本中。
使用方法?直接插入新脚本就可以了。


还有其他要求?其实可以仿造这个写出很多属性的读取。
作者: 沙漠点灰    时间: 2011-3-12 19:47
回复 piaoy 的帖子

好热闹~~
被攻击者.attack_effect(攻击者)
被攻击者.damage 就为伤害

比如
ar = $game_actors[2]
$game_actors[1].attack_effect(ar)
p $game_actors[1].damage
作者: 忧雪の伤    时间: 2011-3-12 19:50
沙漠点灰 发表于 2011-3-12 19:47
回复 piaoy 的帖子

好热闹~~

1、重复发帖了。
2、你这个也是要在战斗中吧?(似乎不是)
3、热闹?理解不能
4、原来可以这样写?
5、……先留着。
作者: 沙漠点灰    时间: 2011-3-12 20:02
回复 忧雪の伤 的帖子
1、重复发帖了。

不好意思,换页了,以为没有发....
2、你这个也是要在战斗中吧?

地图上测试过....
3、热闹?理解不能

个人认为....个人观点....个人....
4、原来可以这样写?

Game_Battler有
  attr_accessor :damage                   # 伤害值
5、……先留着

我也先留着
作者: 忧雪の伤    时间: 2011-3-12 20:10
沙漠点灰 发表于 2011-3-12 20:02
回复 忧雪の伤 的帖子

那啥,会照成实际伤害吗?如果会的话记得加回去血(——大雾)
作者: 沙漠点灰    时间: 2011-3-12 20:18
回复 忧雪の伤 的帖子

不会,因为没有执行
被攻击者.hp -= 被攻击者.damage
作者: Wind2010    时间: 2011-3-12 20:24
  1. def get_damage_louse(attacker,targer,miss=false)
  2.   louse_damage = 0
  3.   hit_result = (rand(100) < attacker.hit)
  4.   hit_result = false unless miss
  5.   if hit_result == true
  6.     atk = [attacker.atk - targer.pdef / 2, 0].max
  7.     louse_damage = atk * (20 + attacker.str) / 20
  8.     louse_damage *= elements_correct(attacker.element_set)
  9.     louse_damage /= 100
  10.     if louse_damage > 0
  11.       if targer.guarding?
  12.         louse_damage *= 100
  13.         louse_damage /= rand(100)+150
  14.       end
  15.     end
  16.     if louse_damage.abs > 0
  17.       amp = [louse_damage.abs * 15 / 100, 1].max
  18.       louse_damage += rand(amp+1) + rand(amp+1) - amp
  19.     end
  20.     eva = 8 * targer.agi / attacker.dex + targer.eva
  21.     hit = louse_damage < 0 ? 100 : 100 - eva
  22.     hit = targer.cant_evade? ? 100 : hit
  23.     hit_result = (rand(100) < hit)
  24.     hit_result = false unless miss
  25.   end
  26.   unless hit_result
  27.     louse_damage = 0
  28.   end
  29.   return louse_damage
  30. end
复制代码
调用方法:
事件中使用脚本
  1. 计算闪避(如果闪避返回0)
  2. get_damage_louse(攻击方,被攻击方,是否计算闪避)
  3. 不计算闪避:
  4. get_damage_louse(攻击方,被攻击方)
复制代码
注意:

括号中一定要用半角的逗号(,)而不能全角

示例:
  1. 1号角色攻击3号敌人:
  2. get_damage_louse($game_actors[1],$data_enemies[3])
  3. 2号角色攻击6号敌人:
  4. get_damage_louse($game_actors[2],$data_enemies[6])
  5. 1号敌人攻击2号角色:
  6. get_damage_louse($data_enemies[1],$game_actors[2])
复制代码

作者: piaoy    时间: 2011-3-13 08:57
你们这好象是直截调用了原定义的算法吧,我是要“重定义”(虽然算法一样)打个比方,魔塔战斗里不就有这样一段嘛
作者: 忧雪の伤    时间: 2011-3-13 10:03
piaoy 发表于 2011-3-13 08:57
你们这好象是直截调用了原定义的算法吧,我是要“重定义”(虽然算法一样)打个比方,魔塔战斗里不就有这样 ...

虱子君的可是没有调用原算法啊……
作者: piaoy    时间: 2011-3-13 12:51
算了诺,各位至截告诉我攻击力的变量吧,$actor.atk什么的都不对NILCLASS




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