查看: 1743|回复: 6

[已经过期] 我想问下 这些超类 是怎么调用的

[复制链接]
梦石
0
星屑
575
在线时间
1752 小时
注册时间
2008-11-7
回帖
1111
发表于 2015-9-19 09:22:12 | 显示全部楼层 |阅读模式

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

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

×
  我在 这个超类里 建了个备注方法 RPG::BaseItem 我要怎么把这个方法调出来  用在class Game_Enemy的类里
RPG魔塔:http://rpg.blue/thread-254429-1-1.html
魔塔2:http://rpg.blue/thread-303601-1-1.html
魔塔3: 制作中...MV

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-9-19 09:52:25 | 显示全部楼层
本帖最后由 taroxd 于 2015-9-19 09:59 编辑

Game_Enemy#enemy 方法可以获得数据库的信息(RPG::Enemy 的实例),然后就可以通过这个实例调用了(可以参考 F1 的实践篇)

另外 RPG::BaseItem 与 Game_Enemy 并没有 is_a 这种直接的继承关系

点评

是呀。看看 4L,再想想你要做什么  发表于 2015-9-19 13:13
在敌人上备注 要怎么写啊 郁闷了 难不成写在装备上的 给敌人也写一份?  发表于 2015-9-19 13:03
你在敌人上备注了吗?  发表于 2015-9-19 12:53
p @note.match(/<装备倍率\s?(\d+)\s?>/) p这个 只是个空的 虽然不会出错  发表于 2015-9-19 12:19
先出去吃饭  发表于 2015-9-19 11:10
回复

使用道具 举报

梦石
0
星屑
575
在线时间
1752 小时
注册时间
2008-11-7
回帖
1111
 楼主| 发表于 2015-9-19 10:07:23 | 显示全部楼层
taroxd 发表于 2015-9-19 09:52
Game_Enemy#enemy 方法可以获得数据库的信息(RPG::Enemy 的实例),然后就可以通过这个实例调用了(可以参 ...
  1. class RPG::BaseItem   这个备注写在装备里的  装备后可以获取这个数字
  2.   def 装备_获取_倍率   
  3.     return 0 unless @note
  4.     @note.match(/<装备倍率\s?(\d+)\s?>/)
  5.     return 0 unless $1
  6.     return $1.to_i   
  7.   end
  8. end

  9. class Game_Enemy < Game_Battler

  10.   alias 获取_怪物_经验 exp
  11.   def exp
  12.    a = 获取_怪物_经验
  13.    a *= 2 if $game_info.max_suffer_damage < 2
  14.    a *= 装备_获取_倍率  我不知道怎么调用这个方法
  15.   return a.to_i
  16. end
复制代码

点评

另外 $game_info.max_suffer_damage < 2 这个东西我完全不知道是啥;代码里强烈不推荐有中文  发表于 2015-9-19 10:18
enemy.装备_获取_倍率 呀,2L 不是说了么  发表于 2015-9-19 10:18
RPG魔塔:http://rpg.blue/thread-254429-1-1.html
魔塔2:http://rpg.blue/thread-303601-1-1.html
魔塔3: 制作中...MV
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2015-9-19 10:13:33 | 显示全部楼层
一般来说不是在角色类调用装备数据么,为什么要在敌人类调用?

点评

我带了装备 增加敌人掉金币的倍率  发表于 2015-9-19 10:14
回复

使用道具 举报

梦石
0
星屑
575
在线时间
1752 小时
注册时间
2008-11-7
回帖
1111
 楼主| 发表于 2015-9-19 10:33:40 | 显示全部楼层
taroxd 发表于 2015-9-19 09:52
Game_Enemy#enemy 方法可以获得数据库的信息(RPG::Enemy 的实例),然后就可以通过这个实例调用了(可以参 ...

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ◇ 获取 等级
  #--------------------------------------------------------------------------
  def level
    enemy.level
  end  
  #--------------------------------------------------------------------------
  # ● 获取 普通能力 基础值
  #--------------------------------------------------------------------------
  alias 获取_怪物_普通_能力_基础值 param_base
  def param_base(param_id)
    v = 获取_怪物_普通_能力_基础值(param_id)
    v *= $game_huobi.倍率
    v *= S管理::S敌人难度::S精英_加成 if 是否_精英?
    v *= S管理::S敌人难度::Sboss_加成 if 是否_boss?
    return v.to_i
  end
  #--------------------------------------------------------------------------
  # ● 获取 经验值
  #--------------------------------------------------------------------------
  alias 获取_怪物_经验 exp
  def exp
    a = 获取_怪物_经验
    v = $game_huobi.倍率  
    v += S管理::S敌人难度::S精英_加成 if 是否_精英?
    v += S管理::S敌人难度::Sboss_加成 if 是否_boss?
    v += $game_huobi.扫塔加成 if @扫塔模式  
    v += $game_variables[582]  # 会员加成
    v += 2 if $game_info.max_suffer_damage < 2
    v += 2 if $game_info.最大_造成_伤害 >= 500
    v += 2 if $game_system.战斗_士气 <= 1
    a *= v
    return a.to_i
  end   
  #--------------------------------------------------------------------------
  # ● 获取 金钱
  #--------------------------------------------------------------------------
  alias 获取_怪物_金币 gold
  def gold
    a = 获取_怪物_金币
    v = $game_huobi.倍率
    v += S管理::S敌人难度::S精英_加成 if 是否_精英?
    v += S管理::S敌人难度::Sboss_加成 if 是否_boss?
    v += $game_huobi.扫塔加成 if 扫塔模式
    v += $game_variables[582] # 会员加成
    v += 2 if $game_info.max_suffer_damage < 2
    v += 2 if $game_info.最大_造成_伤害 >= 500
    v += 2 if $game_system.战斗_士气 <= 1
    a *= v
    return a.to_i
  end   
  #--------------------------------------------------------------------------
  # ● 获取 物品掉下 倍率
  #--------------------------------------------------------------------------
  def drop_item_rate
    a = $game_party.drop_item_double? ? 2 : 1
    v = $game_huobi.倍率
    v += S管理::S敌人难度::S精英_加成 if 是否_精英?
    v += S管理::S敌人难度::Sboss_加成 if 是否_boss?  
    v += $game_variables[582] # 会员加成
    a *= v
    return a.to_i
  end   
  #--------------------------------------------------------------------------
  # ◇ 获取 装备 经验
  #--------------------------------------------------------------------------
  def equip_exp
    a = enemy.equip_exp
    v = $game_huobi.倍率
    v += S管理::S敌人难度::S精英_加成 if 是否_精英?
    v += S管理::S敌人难度::Sboss_加成 if 是否_boss?   
    v += $game_huobi.扫塔加成 if @扫塔模式
    v += $game_variables[582] # 会员加成
    a *= v
    return a.to_i
  end
  #--------------------------------------------------------------------------
  # ☆ 获取 分配点
  #--------------------------------------------------------------------------
  def status_exp
    a = enemy.status_exp
    v = $game_huobi.倍率
    v += S管理::S敌人难度::S精英_加成 if 是否_精英?
    v += S管理::S敌人难度::Sboss_加成 if 是否_boss?
    v += $game_huobi.扫塔加成 if @扫塔模式
    v += $game_variables[582] # 会员加成
    a *= v
    return a.to_i   
  end
  #--------------------------------------------------------------------------
  # ☆ 获取 技能点
  #--------------------------------------------------------------------------
  def skill_exp
    enemy.skill_exp
  end  
  #--------------------------------------------------------------------------
  # ☆ 获取 AP
  #--------------------------------------------------------------------------
  def ability_exp
    enemy.ability_exp
  end  
end
RPG魔塔:http://rpg.blue/thread-254429-1-1.html
魔塔2:http://rpg.blue/thread-303601-1-1.html
魔塔3: 制作中...MV
回复

使用道具 举报

梦石
0
星屑
575
在线时间
1752 小时
注册时间
2008-11-7
回帖
1111
 楼主| 发表于 2015-9-19 10:39:10 | 显示全部楼层
taroxd 发表于 2015-9-19 09:52
Game_Enemy#enemy 方法可以获得数据库的信息(RPG::Enemy 的实例),然后就可以通过这个实例调用了(可以参 ...

RPG魔塔:http://rpg.blue/thread-254429-1-1.html
魔塔2:http://rpg.blue/thread-303601-1-1.html
魔塔3: 制作中...MV
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-9-19 10:52:42 | 显示全部楼层
參考
特定のスキルで経験値変動


特定のスキルで経験値変動[pre lang="ruby"]#==============================================================================
#特定のスキルで倒した場合経験値取得量を変動させる1.00(For VXAce)
#作成者   :日向 夏樹
#サポートURL:http://mgshellc.lix.jp/
#==============================================================================
#--------------------------------------------------------------------------
#機能:
# 特定のエネミーを、特定スキルで倒した際の獲得経験率を変動させます。
# 他の方が作成した自爆スキルを実装した際、「自爆したときは経験値1だけど
# 特定の攻撃で倒した場合は○○倍の経験値が入る」といったような使い方ができます。
#--------------------------------------------------------------------------
#設置場所:
# ▼素材の直下付近(他の方のスクリプトと併用する際はなるべく上の方に)
# 他の方のベーススクリプトが▼素材直下指定の場合、その下でも大丈夫です。
#--------------------------------------------------------------------------
#設定方法:
# 「設定項目」のEXP_PALMに対象エネミーIDと経験値上昇率を入力します。
# エネミーID => 上昇率(マイナス設定可。その際経験値は減っていきます)
# !注!上昇率の右の「,」の記入を忘れるとエラーが発生します。
# EXP_WORDはスキル(アイテム)のメモ欄に記載するキーワードです。
# EXP_SWITCHは経験値変動制御に使用するスイッチのIDです。
# EXP_VARIは経験値管理に使用する変数のIDです。
# 必要に応じて書き換えてください。
#
# データベースの、経験値変動に使用したいスキル(アイテム)のメモ欄に
# EXP_WORDで指定したキーワードを書き込みます。
# 「使用効果」に「ステート付加」「通常攻撃○○%」を入力します。
# (付加するステートは何でもいいですが、空欄だと経験値が変動しません。
# 特に付加したいステートがない場合は「通常攻撃0%」でも大丈夫です)
#--------------------------------------------------------------------------
#注意事項:
# 再定義を使用しているので他の方のスクリプトと競合する可能性があります。
# このスクリプトはRPGツクールVXAce専用です。XP、VXでは動作しません。
#--------------------------------------------------------------------------

#--------------------------------------------------------------------------
# 設定項目
#--------------------------------------------------------------------------
module HINATSUKI
  # ◆ エネミーIDと経験値の変動倍率
  EXP_PALM = {
     1 => 5, # スライム => 5倍
  }

  # ◆ スキルのメモ欄に記述する文字列設定
  EXP_WORD = "<経験値変動>"

  # ◆ 経験値変動制御のためのスイッチ番号
  EXP_SWITCH = 1

  # ◆ 経験値変動制御のための変数番号
  EXP_VARI = 1
end
#--------------------------------------------------------------------------
# 設定項目ここまで
#--------------------------------------------------------------------------

class RPG::UsableItem < RPG::BaseItem
  def enemy_exp_gain
    return @enemy_exp_gain if @enemy_exp_gain != nil
    #メモ欄の情報に応じて変動率の情報を取得
    if self.note.include?(HINATSUKI::EXP_WORD)
      @enemy_exp_gain = 1
    else
      @enemy_exp_gain = nil
    end
    #付与に関する情報の取得を返す
    return @enemy_exp_gain
    end
end

#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
# は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 経験値変動条件取得
  #--------------------------------------------------------------------------
  alias hinatsuki_enemy_gain_exp item_effect_add_state
  def item_effect_add_state(user, item, effect)
    if item.for_friend?
      else
    #条件に合っているか判定し、合っていない場合は処理を中断する
    if item.enemy_exp_gain == 1
      if enemy = HINATSUKI::EXP_PALM[@enemy_id]
      $game_switches[HINATSUKI::EXP_SWITCH] = true
    else
      $game_switches[HINATSUKI::EXP_SWITCH] = false
      end
    else
      $game_switches[HINATSUKI::EXP_SWITCH] = false
    end
    end
    #元の処理を実行
    hinatsuki_enemy_gain_exp(user, item, effect)
  end
end

#==============================================================================
# ■ Game_Troop
#------------------------------------------------------------------------------
#  敵グループおよび戦闘に関するデータを扱うクラスです。バトルイベントの処理も
# 行います。このクラスのインスタンスは $game_troop で参照されます。
#==============================================================================
class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● 経験値の合計計算(再定義)
  #--------------------------------------------------------------------------
  def exp_total
    $game_variables[HINATSUKI::EXP_VARI].inject(:+)
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  敵キャラを扱うクラスです。このクラスは Game_Troop クラス($game_troop)の
# 内部で使用されます。
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● コラプス効果の実行(再定義)
  #--------------------------------------------------------------------------
  def perform_collapse_effect
    case collapse_type
    when 0
      if $game_switches[HINATSUKI::EXP_SWITCH] == true
      $game_variables[HINATSUKI::EXP_VARI].push($data_enemies[@enemy_id].exp * HINATSUKI::EXP_PALM[@enemy_id])
      $game_switches[HINATSUKI::EXP_SWITCH] = false
    else
      $game_variables[HINATSUKI::EXP_VARI].push($data_enemies[@enemy_id].exp)
      end
      @sprite_effect_type = :collapse
      Sound.play_enemy_collapse
    when 1
      if $game_switches[HINATSUKI::EXP_SWITCH] == true
      $game_variables[HINATSUKI::EXP_VARI].push($data_enemies[@enemy_id].exp * HINATSUKI::EXP_PALM[@enemy_id])
      $game_switches[HINATSUKI::EXP_SWITCH] = false
    else
      $game_variables[HINATSUKI::EXP_VARI].push($data_enemies[@enemy_id].exp)
      end
      @sprite_effect_type = :boss_collapse
      Sound.play_boss_collapse1
    when 2
      if $game_switches[HINATSUKI::EXP_SWITCH] == true
      $game_variables[HINATSUKI::EXP_VARI].push($data_enemies[@enemy_id].exp * HINATSUKI::EXP_PALM[@enemy_id])
      $game_switches[HINATSUKI::EXP_SWITCH] = false
    else
      $game_variables[HINATSUKI::EXP_VARI].push($data_enemies[@enemy_id].exp)
      end
      @sprite_effect_type = :instant_collapse
    end
  end
end

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 開始処理(再定義)
  #--------------------------------------------------------------------------
  def start
    super
    create_spriteset
    create_all_windows
    BattleManager.method_wait_for_message = method(:wait_for_message)
    $game_variables[HINATSUKI::EXP_VARI] = Array.new()
    end
  #--------------------------------------------------------------------------
  # ● 終了処理(再定義)
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_spriteset
    @info_viewport.dispose
    RPG::ME.stop
    $game_variables[HINATSUKI::EXP_VARI].clear
    $game_switches[HINATSUKI::EXP_SWITCH] = false
  end
end
[/pre]
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部