Project1

标题: 不知道大家有没有脚本伤害算法的教程之类的。 [打印本页]

作者: 恶魔般的天使    时间: 2014-7-21 23:36
标题: 不知道大家有没有脚本伤害算法的教程之类的。
想自力更生,学习一下脚本算法。能有比较完善的教程或者是大家能把各个算法的代码列举出来吗?
如果可以,顺便说明下怎么写在事件脚本框里才能起效。
作者: taroxd    时间: 2014-7-22 05:28
本帖最后由 taroxd 于 2014-7-22 05:53 编辑

伤害算法……脚本里不都写着么……

VA在make_damage_value里面,XP我没看过,但是位置应该差不多的吧……

我只说,RGSS的脚本里几乎不涉及「算法」这个概念……
作者: 冰水金刚    时间: 2014-7-22 08:34
xp的帮助里就有脚本教程
作者: 芯☆淡茹水    时间: 2014-7-22 09:16
XP 的在 Game_Battler 3
42 行:def attack_effect(attacker)  是普通攻击的计算。
103行:def skill_effect(user, skill)    是特技攻击的计算。
其实伤害的计算过程,只要LZ 清楚里面的每个变量代表什么,就知道是怎么计算的了。
作者: 恶魔般的天使    时间: 2014-7-22 13:21
芯☆淡茹水 发表于 2014-7-22 09:16
XP 的在 Game_Battler 3
42 行:def attack_effect(attacker)  是普通攻击的计算。
103行:def skill_effec ...

嗯,大概的意思就是想知道各个代码代表什么含义,怎么组合起来生效= =
作者: 恐惧剑刃    时间: 2014-7-22 14:46
本帖最后由 恐惧剑刃 于 2014-7-22 14:58 编辑

不会被那个范例影响了吧?
提到的算法具体指的就是伤害的算法。
那个范例我现在都觉得几乎可以作废重写了…………
或许应该新建一个类专门记录敌人而不是直接写在Game_Event内,毕竟又不是所有的事件都是敌人…………

如果想要扩展
打开帮助搜索RPG::Enemy下方有内部原码,把所有“attr_accessor :”全部复制过去(当然actions可以删除)并且初始化
这样就定义了属性,至少再当  事件.maxhp 的时候不至于报错(默认事件又没有hp这一说)

新的敌人数据参考
  1. #事件敌人的类
  2. class Event_Enemy
  3.   #——直接从RPG::Enemy复制……
  4.   def initialize(id)#参数敌人id
  5.     #直接拉数据库
  6.     enemy = $data_enemies[id]
  7.    
  8.     @id = enemy.id
  9.     @name = enemy.name
  10.     #@battler_name = ""
  11.     #@battler_hue = 0
  12.     @maxhp = enemy.maxhp
  13.     @maxsp = enemy.maxsp
  14.     @str = enemy.str
  15.     @dex = enemy.dex
  16.     [url=home.php?mod=space&uid=6136]@agi[/url] = enemy.agi
  17.     @int = enemy.int
  18.     [url=home.php?mod=space&uid=101599]@atk[/url] = enemy.atk
  19.     @pdef = enemy.pdef
  20.     @mdef = enemy.mdef
  21.     [url=home.php?mod=space&uid=284635]@eva[/url] = enemy.eva
  22.     @animation1_id = enemy.animation1_id
  23.     @animation2_id = enemy.animation2_id
  24.     @element_ranks = enemy.element_ranks
  25.     @state_ranks = enemy.state_ranks
  26.     #@actions = [RPG::Enemy::Action.new]
  27.     @exp = enemy.exp
  28.     @gold = enemy.gold
  29.     @item_id = enemy.item_id
  30.     @weapon_id = enemy.weapon_id
  31.     @armor_id = enemy.armor_id
  32.     @treasure_prob = enemy.treasure_prob
  33.    
  34.    
  35.     #当前生命与精神
  36.     @hp = @maxhp
  37.     @sp = @maxsp
  38.   end
  39.   attr_accessor :id
  40.   attr_accessor :name
  41.   #attr_accessor :battler_name
  42.   #attr_accessor :battler_hue
  43.   attr_accessor :maxhp
  44.   attr_accessor :maxsp
  45.   attr_accessor :str
  46.   attr_accessor :dex
  47.   attr_accessor :agi
  48.   attr_accessor :int
  49.   attr_accessor :atk
  50.   attr_accessor :pdef
  51.   attr_accessor :mdef
  52.   attr_accessor :eva
  53.   attr_accessor :animation1_id
  54.   attr_accessor :animation2_id
  55.   attr_accessor :element_ranks
  56.   attr_accessor :state_ranks
  57.   #attr_accessor :actions
  58.   attr_accessor :exp
  59.   attr_accessor :gold
  60.   attr_accessor :item_id
  61.   attr_accessor :weapon_id
  62.   attr_accessor :armor_id
  63.   attr_accessor :treasure_prob#宝物出现率
  64.   
  65.   
  66.   #当前生命与精神
  67.   attr_accessor :hp, :sp
  68. end




  69. #系统Game_Temp数据
  70. class Game_Temp
  71.   attr_accessor :events#敌人事件们  
  72.   alias ini_events_old initialize
  73.   #初始化
  74.   def initialize
  75.     ini_events_old
  76.     @events = {}
  77.    
  78.   end
  79.   
  80.   
  81.   #设置敌人
  82.   def set_events(event_id, id)
  83.     @events[event_id] = Event_Enemy.new(id)
  84.   end
  85.   
  86. end






  87. #自动打开一些开关,并且设置敌人数据
  88. class Game_Map
  89.   alias setup_switch_old setup
  90.   def setup(map_id)
  91.     setup_switch_old(map_id)
  92.     # 判断事件
  93.     for event in @events.values
  94.       if event.list[0].code == 108 and
  95.         event.list[0].parameters[0].include?("敌人")
  96.         #禁用菜单
  97.        # $game_system.menu_disabled = true if !$game_system.menu_disabled
  98.         # 设置敌人数据
  99.         $game_temp.set_events(
  100.         event.id, event.list[0].parameters[0].split(/:/)[1].to_i)
  101.       end
  102.     end
  103.   end
  104. end
复制代码
敌人的设置,在事件页的第一页的第一行事件中输入注释  “敌人:敌人ID” 就自动生成了一个敌人
总之比之前写在Game_Event或许要好一些




如果还想使用默认的伤害算法,这可难了(至少比之前都难多了)~
因为Game_Event可不是Game_Battler的子类!!所以就算你补全各种attr,也不能   事件.attack_effect(角色)


不过可以这样,直接用更简单的方式应用伤害就好~
打开帮助找到 战斗计算式   参考计算式  开始写伤害算法

比如:普通攻击的算法
这里没有考虑,可能的状态附加效果
  1. def 普通攻击应用效果(攻击者, 被K者)
  2.   命中 = rand(100) < 攻击者.hit
  3.   if 命中#一般命中
  4.     会心一击 = rand(100) < 4 * 攻击者.dex / 被K者.agi
  5.     伤害 = 攻击者.atk - 被K者.pdef / 2
  6.     if 会心一击#必杀
  7.       伤害 *= 2 #伤害翻倍
  8.     end
  9.   else
  10.     伤害 = 0
  11.   end
  12.   #应用伤害
  13.   被K者.hp -= 伤害
  14.   return
  15. end
复制代码
总之那个范例可扩展和优化的地方很多 抱歉

如果LZ要自己研究的话,或许可以把那个范例当作一中思路参考,打造一个完全属于自己的战斗系统!




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