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

Project1

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

[原创发布] 召唤兽脚本(宠物系统、使魔系统)

[复制链接]

Lv3.寻梦者

梦石
2
星屑
1156
在线时间
340 小时
注册时间
2008-2-2
帖子
275

R考场第七期银奖

跳转到指定楼层
1
发表于 2012-11-16 22:14:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这是用RMXP写的召唤兽系统,可以用来做宠物小精灵、暗黑协奏曲等需要使魔或将敌人感化为我方角色的游戏。
修改了一个类 Game_Actor,自己新写了一个类 CallGuardian。将下列脚本插入到工程最后,再将Game_Actor替换掉即可
具体用法与代码如下:
  1. #==============================================================================
  2. # ■ CallGuardian 召唤兽脚本
  3. #------------------------------------------------------------------------------
  4. #  可用来在战斗中召唤一个助阵的家伙,战斗结束后自动消失。可结合魔法、物品使用
  5. #   本脚本由66RPG唐门草楹(哈里)提供,若使用请在说明文件或制作组字幕中注明,谢谢
  6. #==============================================================================

  7.   #==========================使用方法(请务必看懂)============================
  8.   #
  9.   #    如果要在物品或特技中使用,需要通过公共事件调用脚本。脚本内容为:
  10.   #
  11.   #"CallGuardian.new.main(int guardianPlayer,int guardianNo,int ifReality)"
  12.   #
  13.   #    此脚本可以召唤敌人和我方队员。召唤有两种,一种是召唤本体(战斗后不消失),
  14.   #还有一种召唤是召唤(或者说是复制)映像(战斗后消失),细分为以下三种情况
  15.   #
  16.   #    1.如果召唤的是我方队员的本体,那么该队员原本应该不在队伍中,否则召唤无效果。
  17.   #
  18.   #    2.如果召唤的是一个怪物并,那么本脚本实际上是先把一个敌人的属性信息复制到数
  19.   #据库-角色的对应编号位置,然后将该队员加入到队伍中。默认是战斗结束后召唤兽留在队
  20.   #伍中,如果想制作战斗结束后召唤兽消失,请在战斗结束后利用公共事件或脚本将该编号
  21.   #的队员从队伍中去掉。如果该PLAYER编号的信息没有被再次召唤,那么这个召唤兽可以被
  22.   #反复召唤出来(实际上就相当于在游戏中增加了一个角色)
  23.   #
  24.   #    3.如果召唤的是我方角色的一个映像,那么本脚本实际上是将某个角色的信息做了一
  25.   #份拷贝放到了数据库-角色的对应编号位置。其实可以做到重复召唤的,不过要在此脚本的
  26.   #基础上动点手脚(用一个递增的变量作为召唤者的角色编号)
  27.   #
  28.   #    接下来是三个参数的含义:
  29.   #    guardianPlayer 代表在数据库-角色编号为此变量数值的位置创建一个召唤兽对象
  30.   #    guardianNo 代表创建的召唤兽对象的本体编号。正数对应数据库-敌人列表,负数对应数据库-角色 列表
  31.   #    ifReality 代表是否为本体。0为映像,1为本体
  32.   #   
  33.   #    例:
  34.   #       CallGuardian.new.main(9,1,0) 在默认工程中代表创建9号角色为1号敌人(幽灵)的映像召唤进队伍
  35.   #       CallGuardian.new.main(10,-1,0) 在默认工程中代表创建10号角色为1号角色(阿尔西斯)的映像召唤进队伍
  36.   #       CallGuardian.new.main(0,-1,1) 将1号队员召唤进队伍参加战斗(只要ifReality变量为1,guardianNo变量必须是负数,guardianPlayer变量不会用到)
  37.   #
  38.   #============================================================================
  39.   
  40.   
  41.   class CallGuardian
  42.    
  43.     def main(guardianPlayer,guardianNO,ifReality)   #召唤我方队员本体
  44.       if guardianNO < 0 and ifReality ==1 then
  45.         $game_party.add_actor(guardianNO*(-1))
  46.       elsif guardianNO < 0 and ifReality == 0 then  #召唤我方队员映像
  47.         $data_actors[guardianPlayer] = $data_actors[guardianNO*(-1)]
  48.         $game_party.add_actor(guardianPlayer)
  49.       elsif guardianNO > 0                          #召唤敌人
  50.         actor = Game_Actor.new(guardianPlayer)
  51.         actor.EnemyToActor(guardianNO)
  52.         # 同伴人数未满 4 人、本角色不在队伍中的情况下
  53.         if $game_party.actors.size < 4 and not $game_party.actors.include?(actor)
  54.         # 添加角色
  55.         $game_party.actors.push(actor)
  56.         # 还原主角
  57.         $game_player.refresh
  58.         end
  59.       end
  60.     end
  61.   end
复制代码
  1. #==============================================================================
  2. # ■ Game_Actor
  3. # 本脚本由66RPG 唐门草楹 贡献,利用请注明出处,谢谢~
  4. #------------------------------------------------------------------------------
  5. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  6. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  7. #==============================================================================

  8. class Game_Actor < Game_Battler
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   attr_reader   :name                     # 名称
  13.   attr_reader   :character_name           # 角色 文件名
  14.   attr_reader   :character_hue            # 角色 色相
  15.   attr_reader   :class_id                 # 职业 ID
  16.   attr_reader   :weapon_id                # 武器 ID
  17.   attr_reader   :armor1_id                # 盾 ID
  18.   attr_reader   :armor2_id                # 头防具 ID
  19.   attr_reader   :armor3_id                # 身体体防具 ID
  20.   attr_reader   :armor4_id                # 装饰品 ID
  21.   attr_reader   :level                    # 等级
  22.   attr_reader   :exp                      # EXP
  23.   attr_reader   :skills                   # 特技
  24.   #--------------------------------------------------------------------------
  25.   # ● 初始化对像
  26.   #     actor_id : 角色 ID
  27.   #--------------------------------------------------------------------------
  28.   def initialize(actor_id)
  29.     super()
  30.     setup(actor_id)
  31.   end

  32.   #--------------------------------------------------------------------------
  33.   # ● 设置
  34.   #     actor_id : 角色 ID
  35.   #--------------------------------------------------------------------------
  36.   def setup(actor_id)
  37.     actor = $data_actors[actor_id]
  38.     @ifActor = true
  39.     @actor_id = actor_id
  40.     @name = actor.name
  41.     @character_name = actor.character_name
  42.     @character_hue = actor.character_hue
  43.     @battler_name = actor.battler_name
  44.     @battler_hue = actor.battler_hue
  45.     @class_id = actor.class_id
  46.     @weapon_id = actor.weapon_id
  47.     @armor1_id = actor.armor1_id
  48.     @armor2_id = actor.armor2_id
  49.     @armor3_id = actor.armor3_id
  50.     @armor4_id = actor.armor4_id
  51.     @level = actor.initial_level
  52.     @exp_list = Array.new(101)
  53.     make_exp_list
  54.     @exp = @exp_list[@level]
  55.     @skills = []
  56.     @hp = maxhp
  57.     @sp = maxsp
  58.     @states = []
  59.     @states_turn = {}
  60.     @maxhp_plus = 0
  61.     @maxsp_plus = 0
  62.     @str_plus = 0
  63.     @dex_plus = 0
  64.     @agi_plus = 0
  65.     @int_plus = 0
  66.     # 学会特技
  67.     for i in 1..@level
  68.       for j in $data_classes[@class_id].learnings
  69.         if j.level == i
  70.           learn_skill(j.skill_id)
  71.         end
  72.       end
  73.     end
  74.     # 刷新自动状态
  75.     update_auto_state(nil, $data_armors[@armor1_id])
  76.     update_auto_state(nil, $data_armors[@armor2_id])
  77.     update_auto_state(nil, $data_armors[@armor3_id])
  78.     update_auto_state(nil, $data_armors[@armor4_id])
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 获取角色 ID
  82.   #--------------------------------------------------------------------------
  83.   def id
  84.   if @ifActor then
  85.     return @actor_id
  86.   else
  87.     return @enemy_id
  88.   end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 获取索引
  92.   #--------------------------------------------------------------------------
  93.   def index
  94.     return $game_party.actors.index(self)
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 计算 EXP
  98.   #--------------------------------------------------------------------------
  99.   def make_exp_list
  100.     actor = $data_actors[@actor_id]
  101.     @exp_list[1] = 0
  102.     pow_i = 2.4 + actor.exp_inflation / 100.0
  103.     for i in 2..100
  104.       if i > actor.final_level
  105.         @exp_list[i] = 0
  106.       else
  107.         n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  108.         @exp_list[i] = @exp_list[i-1] + Integer(n)
  109.       end
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 取得属性修正值
  114.   #     element_id : 属性 ID
  115.   #--------------------------------------------------------------------------
  116.   def element_rate(element_id)
  117.   if @ifActor then
  118.     # 获取对应属性有效度的数值
  119.     table = [0,200,150,100,50,0,-100]
  120.     result = table[$data_classes[@class_id].element_ranks[element_id]]
  121.     # 防具能防御本属性的情况下效果减半
  122.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  123.       armor = $data_armors[i]
  124.       if armor != nil and armor.guard_element_set.include?(element_id)
  125.         result /= 2
  126.       end
  127.     end
  128.     # 状态能防御本属性的情况下效果减半
  129.     for i in @states
  130.       if $data_states[i].guard_element_set.include?(element_id)
  131.         result /= 2
  132.       end
  133.     end
  134.     # 过程结束
  135.     return result
  136.   else
  137.     # 获取对应属性有效度的数值
  138.     table = [0,200,150,100,50,0,-100]
  139.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  140.     # 状态能防御本属性的情况下效果减半
  141.     for i in @states
  142.       if $data_states[i].guard_element_set.include?(element_id)
  143.         result /= 2
  144.       end
  145.     end
  146.     # 过程结束
  147.     return result
  148.   end
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● 获取属性有效度
  152.   #--------------------------------------------------------------------------
  153.   def state_ranks
  154.   if @ifActor then
  155.     return $data_classes[@class_id].state_ranks
  156.   else
  157.     return $data_enemies[@enemy_id].state_ranks
  158.   end
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 判定防御属性
  162.   #     state_id : 属性 ID
  163.   #--------------------------------------------------------------------------
  164.   def state_guard?(state_id)
  165.   if @ifActor then
  166.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  167.       armor = $data_armors[i]
  168.       if armor != nil
  169.         if armor.guard_state_set.include?(state_id)
  170.           return true
  171.         end
  172.       end
  173.     end
  174.     return false
  175.   else
  176.     return false
  177.   end
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 获取普通攻击属性
  181.   #--------------------------------------------------------------------------
  182.   def element_set
  183.   if @ifActor then
  184.     weapon = $data_weapons[@weapon_id]
  185.     return weapon != nil ? weapon.element_set : []
  186.   else
  187.     return []
  188.   end
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 获取普通攻击状态变化 (+)
  192.   #--------------------------------------------------------------------------
  193.   def plus_state_set
  194.   if @ifActor then
  195.     weapon = $data_weapons[@weapon_id]
  196.     return weapon != nil ? weapon.plus_state_set : []
  197.   else
  198.     return []
  199.   end
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 获取普通攻击状态变化 (-)
  203.   #--------------------------------------------------------------------------
  204.   def minus_state_set
  205.   if @ifActor then
  206.     weapon = $data_weapons[@weapon_id]
  207.     return weapon != nil ? weapon.minus_state_set : []
  208.   else
  209.     return []
  210.   end
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 获取 MaxHP
  214.   #--------------------------------------------------------------------------
  215.   def maxhp

  216.     n = [[base_maxhp + @maxhp_plus, 1].max, 9999].min
  217.     for i in @states
  218.       n *= $data_states[i].maxhp_rate / 100.0
  219.     end
  220.     n = [[Integer(n), 1].max, 9999].min
  221.     return n
  222.   
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● 获取基本 MaxHP
  226.   #--------------------------------------------------------------------------
  227.   def base_maxhp
  228.   if @ifActor then
  229.     return $data_actors[@actor_id].parameters[0, @level]
  230.   else
  231.     return $data_enemies[@enemy_id].maxhp
  232.   end
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● 获取基本 MaxSP
  236.   #--------------------------------------------------------------------------
  237.   def base_maxsp
  238.   if @ifActor then
  239.     return $data_actors[@actor_id].parameters[1, @level]
  240.   else
  241.     return $data_enemies[@enemy_id].maxsp
  242.   end
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ● 获取基本力量
  246.   #--------------------------------------------------------------------------
  247.   def base_str
  248.   if @ifActor then
  249.     n = $data_actors[@actor_id].parameters[2, @level]
  250.     weapon = $data_weapons[@weapon_id]
  251.     armor1 = $data_armors[@armor1_id]
  252.     armor2 = $data_armors[@armor2_id]
  253.     armor3 = $data_armors[@armor3_id]
  254.     armor4 = $data_armors[@armor4_id]
  255.     n += weapon != nil ? weapon.str_plus : 0
  256.     n += armor1 != nil ? armor1.str_plus : 0
  257.     n += armor2 != nil ? armor2.str_plus : 0
  258.     n += armor3 != nil ? armor3.str_plus : 0
  259.     n += armor4 != nil ? armor4.str_plus : 0
  260.     return [[n, 1].max, 999].min
  261.   else
  262.     return $data_enemies[@enemy_id].str
  263.   end
  264.   end
  265.   #--------------------------------------------------------------------------
  266.   # ● 获取基本灵巧
  267.   #--------------------------------------------------------------------------
  268.   def base_dex
  269.   if @ifActor then
  270.     n = $data_actors[@actor_id].parameters[3, @level]
  271.     weapon = $data_weapons[@weapon_id]
  272.     armor1 = $data_armors[@armor1_id]
  273.     armor2 = $data_armors[@armor2_id]
  274.     armor3 = $data_armors[@armor3_id]
  275.     armor4 = $data_armors[@armor4_id]
  276.     n += weapon != nil ? weapon.dex_plus : 0
  277.     n += armor1 != nil ? armor1.dex_plus : 0
  278.     n += armor2 != nil ? armor2.dex_plus : 0
  279.     n += armor3 != nil ? armor3.dex_plus : 0
  280.     n += armor4 != nil ? armor4.dex_plus : 0
  281.     return [[n, 1].max, 999].min
  282.   else
  283.     return $data_enemies[@enemy_id].dex
  284.   end
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● 获取基本速度
  288.   #--------------------------------------------------------------------------
  289.   def base_agi
  290.   if @ifActor then
  291.     n = $data_actors[@actor_id].parameters[4, @level]
  292.     weapon = $data_weapons[@weapon_id]
  293.     armor1 = $data_armors[@armor1_id]
  294.     armor2 = $data_armors[@armor2_id]
  295.     armor3 = $data_armors[@armor3_id]
  296.     armor4 = $data_armors[@armor4_id]
  297.     n += weapon != nil ? weapon.agi_plus : 0
  298.     n += armor1 != nil ? armor1.agi_plus : 0
  299.     n += armor2 != nil ? armor2.agi_plus : 0
  300.     n += armor3 != nil ? armor3.agi_plus : 0
  301.     n += armor4 != nil ? armor4.agi_plus : 0
  302.     return [[n, 1].max, 999].min
  303.   else
  304.     return $data_enemies[@enemy_id].agi
  305.   end
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 获取基本魔力
  309.   #--------------------------------------------------------------------------
  310.   def base_int
  311.   if @ifActor then
  312.     n = $data_actors[@actor_id].parameters[5, @level]
  313.     weapon = $data_weapons[@weapon_id]
  314.     armor1 = $data_armors[@armor1_id]
  315.     armor2 = $data_armors[@armor2_id]
  316.     armor3 = $data_armors[@armor3_id]
  317.     armor4 = $data_armors[@armor4_id]
  318.     n += weapon != nil ? weapon.int_plus : 0
  319.     n += armor1 != nil ? armor1.int_plus : 0
  320.     n += armor2 != nil ? armor2.int_plus : 0
  321.     n += armor3 != nil ? armor3.int_plus : 0
  322.     n += armor4 != nil ? armor4.int_plus : 0
  323.     return [[n, 1].max, 999].min
  324.   else
  325.     return $data_enemies[@enemy_id].int
  326.   end
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● 获取基本攻击力
  330.   #--------------------------------------------------------------------------
  331.   def base_atk
  332.   if @ifActor then
  333.     weapon = $data_weapons[@weapon_id]
  334.     return weapon != nil ? weapon.atk : 0
  335.   else
  336.     return $data_enemies[@enemy_id].atk
  337.   end
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● 获取基本物理防御
  341.   #--------------------------------------------------------------------------
  342.   def base_pdef
  343.   if @ifActor then
  344.     weapon = $data_weapons[@weapon_id]
  345.     armor1 = $data_armors[@armor1_id]
  346.     armor2 = $data_armors[@armor2_id]
  347.     armor3 = $data_armors[@armor3_id]
  348.     armor4 = $data_armors[@armor4_id]
  349.     pdef1 = weapon != nil ? weapon.pdef : 0
  350.     pdef2 = armor1 != nil ? armor1.pdef : 0
  351.     pdef3 = armor2 != nil ? armor2.pdef : 0
  352.     pdef4 = armor3 != nil ? armor3.pdef : 0
  353.     pdef5 = armor4 != nil ? armor4.pdef : 0
  354.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5
  355.   else
  356.     return $data_enemies[@enemy_id].pdef
  357.   end
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● 获取基本魔法防御
  361.   #--------------------------------------------------------------------------
  362.   def base_mdef
  363.   if @ifActor then
  364.     weapon = $data_weapons[@weapon_id]
  365.     armor1 = $data_armors[@armor1_id]
  366.     armor2 = $data_armors[@armor2_id]
  367.     armor3 = $data_armors[@armor3_id]
  368.     armor4 = $data_armors[@armor4_id]
  369.     mdef1 = weapon != nil ? weapon.mdef : 0
  370.     mdef2 = armor1 != nil ? armor1.mdef : 0
  371.     mdef3 = armor2 != nil ? armor2.mdef : 0
  372.     mdef4 = armor3 != nil ? armor3.mdef : 0
  373.     mdef5 = armor4 != nil ? armor4.mdef : 0
  374.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5
  375.   else
  376.     return $data_enemies[@enemy_id].mdef
  377.   end
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 获取基本回避修正
  381.   #--------------------------------------------------------------------------
  382.   def base_eva
  383.   if @ifActor then
  384.     armor1 = $data_armors[@armor1_id]
  385.     armor2 = $data_armors[@armor2_id]
  386.     armor3 = $data_armors[@armor3_id]
  387.     armor4 = $data_armors[@armor4_id]
  388.     eva1 = armor1 != nil ? armor1.eva : 0
  389.     eva2 = armor2 != nil ? armor2.eva : 0
  390.     eva3 = armor3 != nil ? armor3.eva : 0
  391.     eva4 = armor4 != nil ? armor4.eva : 0
  392.     return eva1 + eva2 + eva3 + eva4
  393.   else
  394.     return $data_enemies[@enemy_id].eva
  395.   end
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 普通攻击 获取攻击方动画 ID
  399.   #--------------------------------------------------------------------------
  400.   def animation1_id
  401.   if @ifActor then
  402.     weapon = $data_weapons[@weapon_id]
  403.     return weapon != nil ? weapon.animation1_id : 0
  404.   else
  405.     return $data_enemies[@enemy_id].animation1_id
  406.   end
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● 普通攻击 获取对像方动画 ID
  410.   #--------------------------------------------------------------------------
  411.   def animation2_id
  412.   if @ifActor then
  413.     weapon = $data_weapons[@weapon_id]
  414.     return weapon != nil ? weapon.animation2_id : 0
  415.   else
  416.     return $data_enemies[@enemy_id].animation2_id
  417.   end
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 获取类名
  421.   #--------------------------------------------------------------------------
  422.   def class_name
  423.   if @ifActor then
  424.     return $data_classes[@class_id].name
  425.   else
  426.     return "召唤兽"
  427.   end
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ● 获取 EXP 字符串
  431.   #--------------------------------------------------------------------------
  432.   def exp_s
  433.     return @exp_list[@level+1] > 0 ? @exp.to_s : "-------"
  434.   end
  435.   #--------------------------------------------------------------------------
  436.   # ● 获取下一等级的 EXP 字符串
  437.   #--------------------------------------------------------------------------
  438.   def next_exp_s
  439.     return @exp_list[@level+1] > 0 ? @exp_list[@level+1].to_s : "-------"
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # ● 获取离下一等级还需的 EXP 字符串
  443.   #--------------------------------------------------------------------------
  444.   def next_rest_exp_s
  445.     return @exp_list[@level+1] > 0 ?
  446.       (@exp_list[@level+1] - @exp).to_s : "-------"
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 更新自动状态
  450.   #     old_armor : 卸下防具
  451.   #     new_armor : 装备防具
  452.   #--------------------------------------------------------------------------
  453.   def update_auto_state(old_armor, new_armor)
  454.     # 强制解除卸下防具的自动状态
  455.     if old_armor != nil and old_armor.auto_state_id != 0
  456.       remove_state(old_armor.auto_state_id, true)
  457.     end
  458.     # 强制附加装备防具的自动状态
  459.     if new_armor != nil and new_armor.auto_state_id != 0
  460.       add_state(new_armor.auto_state_id, true)
  461.     end
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● 装备固定判定
  465.   #     equip_type : 装备类型
  466.   #--------------------------------------------------------------------------
  467.   def equip_fix?(equip_type)
  468.     case equip_type
  469.     when 0  # 武器
  470.       return $data_actors[@actor_id].weapon_fix
  471.     when 1  # 盾
  472.       return $data_actors[@actor_id].armor1_fix
  473.     when 2  # 头
  474.       return $data_actors[@actor_id].armor2_fix
  475.     when 3  # 身体
  476.       return $data_actors[@actor_id].armor3_fix
  477.     when 4  # 装饰品
  478.       return $data_actors[@actor_id].armor4_fix
  479.     end
  480.     return false
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 变更装备
  484.   #     equip_type : 装备类型
  485.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  486.   #--------------------------------------------------------------------------
  487.   def equip(equip_type, id)
  488.     case equip_type
  489.     when 0  # 武器
  490.       if id == 0 or $game_party.weapon_number(id) > 0
  491.         $game_party.gain_weapon(@weapon_id, 1)
  492.         @weapon_id = id
  493.         $game_party.lose_weapon(id, 1)
  494.       end
  495.     when 1  # 盾
  496.       if id == 0 or $game_party.armor_number(id) > 0
  497.         update_auto_state($data_armors[@armor1_id], $data_armors[id])
  498.         $game_party.gain_armor(@armor1_id, 1)
  499.         @armor1_id = id
  500.         $game_party.lose_armor(id, 1)
  501.       end
  502.     when 2  # 头
  503.       if id == 0 or $game_party.armor_number(id) > 0
  504.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  505.         $game_party.gain_armor(@armor2_id, 1)
  506.         @armor2_id = id
  507.         $game_party.lose_armor(id, 1)
  508.       end
  509.     when 3  # 身体
  510.       if id == 0 or $game_party.armor_number(id) > 0
  511.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  512.         $game_party.gain_armor(@armor3_id, 1)
  513.         @armor3_id = id
  514.         $game_party.lose_armor(id, 1)
  515.       end
  516.     when 4  # 装饰品
  517.       if id == 0 or $game_party.armor_number(id) > 0
  518.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  519.         $game_party.gain_armor(@armor4_id, 1)
  520.         @armor4_id = id
  521.         $game_party.lose_armor(id, 1)
  522.       end
  523.     end
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # ● 可以装备判定
  527.   #     item : 物品
  528.   #--------------------------------------------------------------------------
  529.   def equippable?(item)
  530.     # 武器的情况
  531.     if item.is_a?(RPG::Weapon)
  532.       # 包含当前的职业可以装备武器的场合
  533.       if $data_classes[@class_id].weapon_set.include?(item.id)
  534.         return true
  535.       end
  536.     end
  537.     # 防具的情况
  538.     if item.is_a?(RPG::Armor)
  539.       # 不包含当前的职业可以装备武器的场合
  540.       if $data_classes[@class_id].armor_set.include?(item.id)
  541.         return true
  542.       end
  543.     end
  544.     return false
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # ● 更改 EXP
  548.   #     exp : 新的 EXP
  549.   #--------------------------------------------------------------------------
  550.   def exp=(exp)
  551.   if @ifActor then
  552.     @exp = [[exp, 9999999].min, 0].max
  553.     # 升级
  554.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  555.       @level += 1
  556.       # 学会特技
  557.       for j in $data_classes[@class_id].learnings
  558.         if j.level == @level
  559.           learn_skill(j.skill_id)
  560.         end
  561.       end
  562.     end
  563.     # 降级
  564.     while @exp < @exp_list[@level]
  565.       @level -= 1
  566.     end
  567.     # 修正当前的 HP 与 SP 超过最大值
  568.     @hp = [@hp, self.maxhp].min
  569.     @sp = [@sp, self.maxsp].min
  570.   end
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # ● 更改等级
  574.   #     level : 新的等级
  575.   #--------------------------------------------------------------------------
  576.   def level=(level)
  577.     # 检查上下限
  578.     level = [[level, $data_actors[@actor_id].final_level].min, 1].max
  579.     # 更改 EXP
  580.     self.exp = @exp_list[level]
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 觉悟特技
  584.   #     skill_id : 特技 ID
  585.   #--------------------------------------------------------------------------
  586.   def learn_skill(skill_id)
  587.     if skill_id > 0 and not skill_learn?(skill_id)
  588.       @skills.push(skill_id)
  589.       @skills.sort!
  590.     end
  591.   end
  592.   #--------------------------------------------------------------------------
  593.   # ● 遗忘特技
  594.   #     skill_id : 特技 ID
  595.   #--------------------------------------------------------------------------
  596.   def forget_skill(skill_id)
  597.     @skills.delete(skill_id)
  598.   end
  599.   #--------------------------------------------------------------------------
  600.   # ● 已经学会的特技判定
  601.   #     skill_id : 特技 ID
  602.   #--------------------------------------------------------------------------
  603.   def skill_learn?(skill_id)
  604.     return @skills.include?(skill_id)
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ● 可以使用特技判定
  608.   #     skill_id : 特技 ID
  609.   #--------------------------------------------------------------------------
  610.   def skill_can_use?(skill_id)
  611.     if not skill_learn?(skill_id)
  612.       return false
  613.     end
  614.     return super
  615.   end
  616.   #--------------------------------------------------------------------------
  617.   # ● 更改名称
  618.   #     name : 新的名称
  619.   #--------------------------------------------------------------------------
  620.   def name=(name)
  621.     @name = name
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ● 更改职业 ID
  625.   #     class_id : 新的职业 ID
  626.   #--------------------------------------------------------------------------
  627.   def class_id=(class_id)
  628.     if $data_classes[class_id] != nil
  629.       @class_id = class_id
  630.       # 避开无法装备的物品
  631.       unless equippable?($data_weapons[@weapon_id])
  632.         equip(0, 0)
  633.       end
  634.       unless equippable?($data_armors[@armor1_id])
  635.         equip(1, 0)
  636.       end
  637.       unless equippable?($data_armors[@armor2_id])
  638.         equip(2, 0)
  639.       end
  640.       unless equippable?($data_armors[@armor3_id])
  641.         equip(3, 0)
  642.       end
  643.       unless equippable?($data_armors[@armor4_id])
  644.         equip(4, 0)
  645.       end
  646.     end
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ● 更改图形
  650.   #     character_name : 新的角色 文件名
  651.   #     character_hue  : 新的角色 色相
  652.   #     battler_name   : 新的战斗者 文件名
  653.   #     battler_hue    : 新的战斗者 色相
  654.   #--------------------------------------------------------------------------
  655.   def set_graphic(character_name, character_hue, battler_name, battler_hue)
  656.     @character_name = character_name
  657.     @character_hue = character_hue
  658.     @battler_name = battler_name
  659.     @battler_hue = battler_hue
  660.   end
  661.   #--------------------------------------------------------------------------
  662.   # ● 取得战斗画面的 X 坐标
  663.   #--------------------------------------------------------------------------
  664.   def screen_x
  665.     # 返回计算后的队伍 X 坐标的排列顺序
  666.     if self.index != nil
  667.       return self.index * 160 + 80
  668.     else
  669.       return 0
  670.     end
  671.   end
  672.   #--------------------------------------------------------------------------
  673.   # ● 取得战斗画面的 Y 坐标
  674.   #--------------------------------------------------------------------------
  675.   def screen_y
  676.     return 464
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● 取得战斗画面的 Z 坐标
  680.   #--------------------------------------------------------------------------
  681.   def screen_z
  682.     # 返回计算后的队伍 Z 坐标的排列顺序
  683.     if self.index != nil
  684.       return 4 - self.index
  685.     else
  686.       return 0
  687.     end
  688.   end
  689.   #--------------------------------------------------------------------------
  690.   # ● 设置 MaxHP
  691.   #     maxhp : 新的 MaxHP
  692.   #--------------------------------------------------------------------------
  693.   def maxhp=(maxhp)
  694.     @maxhp_plus += maxhp - self.maxhp
  695.     @maxhp_plus = [[@maxhp_plus, -9999].max, 9999].min
  696.     @hp = [@hp, self.maxhp].min
  697.   end
  698.   
  699.   #--------------------------------------------------------------------------
  700.   #● 由一个敌人变来的角色
  701.   #--------------------------------------------------------------------------
  702.   def EnemyToActor(guardianNO)
  703.     @ifActor = false
  704.     enemy = $data_enemies[guardianNO]
  705.     @enemy_id = guardianNO
  706.     @name = enemy.name
  707.     @character_name = enemy.battler_name
  708.     @character_hue = enemy.battler_hue
  709.     @battler_name = enemy.battler_name
  710.     @battler_hue = enemy.battler_hue
  711.     @weapon_id = 0
  712.     @armor1_id = 0
  713.     @armor2_id = 0
  714.     @armor3_id = 0
  715.     @armor4_id = 0
  716.     @level = 1
  717.     @exp_list = Array.new(101)
  718.     for i in 1..100
  719.         @exp_list[i] = 999999
  720.     end
  721.     @exp = 0
  722.     @skills = []
  723.     @hp = enemy.maxhp
  724.     @sp = enemy.maxsp
  725.     @states = []
  726.     @states_turn = {}
  727.     @maxhp_plus = 0
  728.     @maxsp_plus = 0
  729.     @str_plus = 0
  730.     @dex_plus = 0
  731.     @agi_plus = 0
  732.     @int_plus = 0
  733.     actions = $data_enemies[@enemy_id].actions
  734.     for action in actions
  735.       # 确认种类条件
  736.       if action.kind != 1 then
  737.         next
  738.       end
  739.       # 确认回合条件
  740.       n = $game_temp.battle_turn
  741.       a = action.condition_turn_a
  742.       b = action.condition_turn_b
  743.       if (b == 0 and n != a) or
  744.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  745.         next
  746.       end
  747.       # 确认 HP 条件
  748.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  749.         next
  750.       end
  751.       # 确认等级条件
  752.       if $game_party.max_level < action.condition_level
  753.         next
  754.       end
  755.       # 确认开关条件
  756.       switch_id = action.condition_switch_id
  757.       if switch_id > 0 and $game_switches[switch_id] == false
  758.         next
  759.       end
  760.       # 符合条件 : 添加本特技
  761.       learn_skill(action.skill_id)
  762.     end
  763.   end
  764. end
复制代码
以下是利用该脚本实现的 战斗中 召唤队友、角色映像复制、召唤特定使魔 的效果图

具体使用方法请参见范例程序~
逆变与召唤.zip (209.75 KB, 下载次数: 543)

评分

参与人数 1星屑 +400 收起 理由
feizhaodan + 400 奖赏条例

查看全部评分

我亲自录制的橙光教学视频
如何用橙光做一款养成游戏:https://www.bilibili.com/video/BV1Js41197pr
蛇梯游戏/大富翁的制作:https://www.bilibili.com/video/BV1yW411a7sv
股票系统:https://www.bilibili.com/video/BV1DW41187BW
龙雏子女系统 的实现方法:https://www.bilibili.com/video/BV1gE411J7Ns
换装捏脸系统:https://www.bilibili.com/video/BV1Yc411h7ds
背包-合成系统:https://www.bilibili.com/video/BV1qg4y187C2

Lv1.梦旅人

梦石
0
星屑
50
在线时间
432 小时
注册时间
2012-7-7
帖子
379
2
发表于 2012-11-17 10:30:18 | 只看该作者
{:2_270:}赞!可发展空间很大耶!

回复 支持 反对

使用道具 举报

Lv2.观梦者 (版主)

HATSUNE★MIKU
KAGAMINE★LEN
KAGAMINE★RIN
MEGURINE★LUKA

梦石
0
星屑
849
在线时间
1172 小时
注册时间
2012-4-2
帖子
5035

开拓者

3
发表于 2012-11-17 11:48:22 | 只看该作者
很不错

己方的右边的鱿鱼好大,比人还大
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
4
发表于 2012-11-19 21:17:33 | 只看该作者
这个冲突大吗 我不太懂脚本
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
2
星屑
1156
在线时间
340 小时
注册时间
2008-2-2
帖子
275

R考场第七期银奖

5
 楼主| 发表于 2012-11-20 20:46:15 | 只看该作者
凡是用到要修改GAME_ACTOR类的脚本都会有冲突,不过整合也好整合
我亲自录制的橙光教学视频
如何用橙光做一款养成游戏:https://www.bilibili.com/video/BV1Js41197pr
蛇梯游戏/大富翁的制作:https://www.bilibili.com/video/BV1yW411a7sv
股票系统:https://www.bilibili.com/video/BV1DW41187BW
龙雏子女系统 的实现方法:https://www.bilibili.com/video/BV1gE411J7Ns
换装捏脸系统:https://www.bilibili.com/video/BV1Yc411h7ds
背包-合成系统:https://www.bilibili.com/video/BV1qg4y187C2
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
933
在线时间
24 小时
注册时间
2011-11-12
帖子
2
6
发表于 2012-11-21 12:37:31 | 只看该作者
谢谢分享
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
7
发表于 2012-11-29 12:17:22 | 只看该作者
呵呵 除了镜像召唤貌似没啥作用
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
129
在线时间
86 小时
注册时间
2012-6-15
帖子
24
8
发表于 2012-12-1 09:24:01 | 只看该作者
好东西!~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
146 小时
注册时间
2009-8-2
帖子
34
9
发表于 2013-3-28 09:50:40 | 只看该作者
大爱!!!口袋妖怪什么的可以进垃圾箱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
146 小时
注册时间
2009-8-2
帖子
34
10
发表于 2013-3-29 09:14:56 | 只看该作者
希望增加升级和替换的功能
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-28 00:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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