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

Project1

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

RMVX版不同种类SP分开使用

 关闭 [复制链接]

Lv3.寻梦者

梦石
3
星屑
50
在线时间
177 小时
注册时间
2008-3-21
帖子
939
跳转到指定楼层
1
发表于 2008-6-10 03:38:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这个我就不多说了,在武器数据库中使用方法与那个RMXP的基本相同。主要还是看范例。

核心脚本:与RMXP感觉上区别不小,但基本概念是一致的。

任何角色刚登场时SP都是0,因此开场时不要设定初始武器


武器仍可决定技能


不同SP显示颜色也不一样



  1. #不同SP分开用 VX 版 BY SLICK

  2. module RPG
  3.   class Weapon  # 武器名称所能决定SP种类及属性的定义方法(格式像这样:钢匕首,2000,0)
  4.     attr_writer :w_maxsp
  5.     attr_writer :w_akind
  6.     def name
  7.       name = @name.split(/,/)[0]
  8.       return name != nil ? name : ''
  9.     end
  10.     def w_maxsp
  11.       w_maxsp = @name.split(/,/)[1]
  12.       return w_maxsp != nil ? w_maxsp.to_i : 0
  13.     end
  14.     def w_akind
  15.       w_akind = @name.split(/,/)[2]
  16.       return w_akind != nil ? w_akind.to_i : 1
  17.     end  
  18.   end  
  19.   class Item < UsableItem
  20.     attr_writer :i_rkind
  21.     def name
  22.       name = @name.split(/,/)[0]
  23.       return name != nil ? name : ''
  24.     end
  25.     def i_rkind
  26.       i_rkind = @name.split(/,/)[1]
  27.       return i_rkind != nil ? i_rkind.to_i : nil
  28.     end
  29.   end  
  30. end  

  31. class Game_Actor < Game_Battler
  32.   #--------------------------------------------------------------------------
  33.   # ● 公開インスタンス変数
  34.   #--------------------------------------------------------------------------
  35. #这里做修改==================================  
  36.   attr_accessor :ammo                     # SP残留量
  37.   attr_accessor :akind                    # 使用何种SP
  38.   attr_accessor :cta                      # SP最大容量
  39. #=======================================  
  40.   
  41. #感谢禾大人帮助精简==============================
  42.   #--------------------------------------------------------------------------
  43.   # ● セットアップ
  44.   #     actor_id : アクター ID
  45.   #--------------------------------------------------------------------------
  46.   alias ooo_setup setup
  47.   def setup(actor_id)
  48. #=======================================   
  49.         
  50. #这里做修改==================================   
  51.     @ammo = [0,0,0,0,0,0,0,0,0,0,0,0,0]# 目前只使用9-12四种能量
  52.     @akind = 10 # 缺省情况下使用格斗技能量
  53.     @cta = [0,0,0,0,0,0,0,0,0,0,0,0,0]#  每一种能量的最大值都要设定
  54. #=======================================   
  55.     ooo_setup(actor_id)
  56.   end
  57. end

  58. #==============================================================================
  59. # ■ Scene_Equip
  60. #------------------------------------------------------------------------------
  61. #  处理装备画面
  62. #==============================================================================

  63. class Scene_Equip < Scene_Base
  64.   #--------------------------------------------------------------------------
  65.   # ● 更新选择装备部位
  66.   #--------------------------------------------------------------------------
  67.   def update_equip_selection
  68.     if Input.trigger?(Input::B)
  69.       Sound.play_cancel
  70. #装备结束时再次判断一下属性SP值========================      
  71.       if $lammo=[]
  72.         $lkind = @actor.akind #弹药种类是否与以前相同?
  73.         for ii in [email protected]
  74.           $lammo[ii][email protected][ii]
  75.         end
  76.       end  
  77.       neomaxsp=0
  78.       if @actor.weapon_id !=0
  79.         @actor.akind=$data_weapons[@actor.weapon_id].w_akind
  80.         neomaxsp+=$data_weapons[@actor.weapon_id].w_maxsp
  81.         @actor.cta[@actor.akind]=neomaxsp
  82.         @actor.ammo[@actor.akind] = [$lammo[@actor.akind],@actor.cta[@actor.akind]].min#弹药种类相同取弹匣小值
  83.       else      #如果扔掉武器,SP就是0
  84.         @actor.akind=1
  85.         @actor.cta[@actor.akind]=0
  86.         @actor.ammo[@actor.akind]=0
  87.       end        
  88. #=======================================                  
  89.       return_scene
  90.     elsif Input.trigger?(Input::R)
  91.       Sound.play_cursor
  92.       next_actor
  93.     elsif Input.trigger?(Input::L)
  94.       Sound.play_cursor
  95.       prev_actor
  96.     elsif Input.trigger?(Input::C)
  97.       if @actor.fix_equipment
  98.         Sound.play_buzzer
  99.       else
  100.         Sound.play_decision
  101.         @equip_window.active = false
  102.         @item_window.active = true
  103.         @item_window.index = 0
  104.       end
  105.     end
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 更新选择物品
  109.   #--------------------------------------------------------------------------
  110.   def update_item_selection
  111.     if Input.trigger?(Input::B)
  112.       Sound.play_cancel
  113.       @equip_window.active = true
  114.       @item_window.active = false
  115.       @item_window.index = -1
  116.     elsif Input.trigger?(Input::C)
  117.       Sound.play_equip
  118. #开始装备武器时判断一下属性SP值========================      
  119.       $lkind = @actor.akind #弹药种类是否与以前相同?
  120.       $lammo = []
  121.       for ii in [email protected]
  122.         $lammo[ii][email protected][ii]
  123.       end
  124. #=======================================      
  125.       @actor.change_equip(@equip_window.index, @item_window.item)
  126.       @equip_window.active = true
  127.       @item_window.active = false
  128.       @item_window.index = -1
  129.       @equip_window.refresh
  130.       for item_window in @item_windows
  131.         item_window.refresh
  132.       end
  133.     end
  134.   end
  135. end

  136. class Game_Battler
  137. #--------------------------------------------------------------------------
  138. SW_SET = [9,10,11,12] # 此处设定武器和技能关联的属性id
  139. #--------------------------------------------------------------------------
  140.   def skill_can_use?(skill)
  141.     if self.is_a?(Game_Actor) and self.weapon_id > 0
  142.      sw_boolean = false # 判断武器和技能关联
  143.      s = SW_SET & $data_skills[skill.id].element_set
  144.      if s.empty?
  145.        sw_boolean = true
  146.      else
  147.        for i in s
  148.          if  $data_weapons[self.weapon_id].element_set .include?(i)
  149.            sw_boolean = true
  150.            break
  151.          end
  152.        end
  153.      end
  154.      if sw_boolean == false
  155.        return false
  156.      end
  157.      
  158.      
  159. #这里修改为对各种SP的判断===========================     
  160.      current_mp=self.ammo[self.akind]
  161.      current_maxmp=self.cta[self.akind]
  162. #=======================================     
  163.      
  164.      
  165.      if $data_skills[skill.id].mp_cost > current_mp
  166.        return false
  167.      end
  168.     end
  169.     return false unless skill.is_a?(RPG::Skill)
  170.     return false unless movable?
  171.     return false if silent? and skill.spi_f > 0
  172.     return false if calc_mp_cost(skill) > mp
  173.     if $game_temp.in_battle
  174.       return skill.battle_ok?
  175.     else
  176.       return skill.menu_ok?
  177.     end
  178.   end  
  179.   #--------------------------------------------------------------------------
  180.   # ● 物品应用测试
  181.   #     user : 物品使用者
  182.   #     item : 物品
  183.   #    判断在使用对象 HP/MP 满值时禁止回复。
  184.   #--------------------------------------------------------------------------
  185.   def item_test(user, item)
  186.     tester = self.clone
  187.     tester.make_obj_damage_value(user, item)
  188.     tester.apply_state_changes(item)
  189.     if tester.hp_damage < 0 or tester.calc_hp_recovery(user, item) > 0
  190.       return true if tester.hp < tester.maxhp
  191.     end
  192.     if tester.mp_damage < 0 or tester.calc_mp_recovery(user, item) > 0
  193.       return true if tester.ammo[tester.akind] < tester.cta[tester.akind]
  194.       return true if item.i_rkind != tester.akind
  195.     end
  196.     return true unless tester.added_states.empty?
  197.     return true unless tester.removed_states.empty?
  198.     return true if item.parameter_type > 0
  199.     return false
  200.   end
  201.   def item_effect(user, item)
  202.     clear_action_results
  203.     unless item_effective?(user, item)
  204.       @skipped = true
  205.       return
  206.     end
  207.     if rand(100) >= calc_hit(user, item)          # 判断命中
  208.       @missed = true
  209.       return
  210.     end
  211.     if rand(100) < calc_eva(user, item)           # 判断回避
  212.       @evaded = true
  213.       return
  214.     end
  215.     hp_recovery = calc_hp_recovery(user, item)    # 计算 HP 回复量
  216.     mp_recovery = calc_mp_recovery(user, item)    # 计算 MP 回复量
  217.     make_obj_damage_value(user, item)             # 计算伤害
  218.     @hp_damage -= hp_recovery                     # 减去 HP 回复量
  219.     @mp_damage -= mp_recovery                     # 减去 MP 回复量
  220.     case item.i_rkind
  221.       when nil
  222.         user.ammo[user.akind]+=mp_recovery
  223.         if user.ammo[user.akind]>user.cta[user.akind]
  224.           user.ammo[user.akind]=user.cta[user.akind]
  225.         end  
  226.       when 255
  227.         for ii in 0...user.cta.size
  228.           user.ammo[ii]+=mp_recovery
  229.           if user.ammo[ii]>user.cta[ii] and ii==user.akind
  230.             user.ammo[ii]=user.cta[ii]
  231.           end
  232.         end  
  233.       else
  234.         user.ammo[item.i_rkind]+=mp_recovery
  235.         if user.ammo[item.i_rkind]>user.cta[item.i_rkind] and item.i_rkind==user.akind
  236.           user.ammo[item.i_rkind]=user.cta[item.i_rkind]
  237.         end
  238.     end   
  239.     make_obj_absorb_effect(user, item)            # 计算吸收效果
  240.     execute_damage(user)                          # 反映伤害
  241.     item_growth_effect(user, item)                # 应用成长效果
  242.     if item.physical_attack and @hp_damage == 0   # 判断物理攻击无效
  243.       return                                    
  244.     end
  245.     apply_state_changes(item)                     # 状态变化
  246.   end
  247. end

  248. class Scene_Battle
  249.   #--------------------------------------------------------------------------
  250.   # ● 执行战斗行动 : 特技
  251.   #--------------------------------------------------------------------------
  252.   def execute_action_skill
  253.     skill = @active_battler.action.skill
  254.     text = @active_battler.name + skill.message1
  255.     @message_window.add_instant_text(text)
  256.     unless skill.message2.empty?
  257.       wait(10)
  258.       @message_window.add_instant_text(skill.message2)
  259.     end
  260.     targets = @active_battler.action.make_targets
  261.     display_animation(targets, skill.animation_id)
  262. # 消耗 SP(区分不同种类)===========================
  263.     if @active_battler.is_a?(Game_Actor)
  264.       @active_battler.ammo[@active_battler.akind] -= @active_battler.calc_mp_cost(skill)
  265.     else  
  266.       @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  267.     end if  
  268. #=======================================

  269.     $game_temp.common_event_id = skill.common_event_id
  270.     for target in targets
  271.       target.skill_effect(@active_battler, skill)
  272.       display_action_effects(target, skill)
  273.     end
  274.   end
  275. end  

  276. class Window_Base
  277.   #--------------------------------------------------------------------------
  278.   # ● 描绘 MP
  279.   #     actor : 角色
  280.   #     x     : 描绘目标 X 坐标
  281.   #     y     : 描绘目标 Y 坐标
  282.   #     width : 宽
  283.   #--------------------------------------------------------------------------
  284.   def draw_actor_mp(actor, x, y, width = 120)
  285.     draw_actor_mp_gauge(actor, x, y, width)
  286.     self.contents.font.color = system_color
  287.     self.contents.draw_text(x, y, 30, WLH, Vocab::mp_a)
  288.     self.contents.font.color = mp_color(actor)
  289.     xr = x + width
  290.     if width < 120
  291.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.ammo[actor.akind], 2)
  292.     else
  293.       self.contents.draw_text(xr - 90, y, 40, WLH, actor.ammo[actor.akind], 2)
  294.       self.contents.font.color = normal_color
  295.       self.contents.draw_text(xr - 50, y, 10, WLH, "/", 2)
  296.       self.contents.draw_text(xr - 40, y, 40, WLH, actor.cta[actor.akind], 2)
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 描绘 MP 槽
  301.   #     actor : 角色
  302.   #     x     : 描绘目标 X 坐标
  303.   #     y     : 描绘目标 Y 坐标
  304.   #     width : 宽
  305.   #--------------------------------------------------------------------------
  306.   def draw_actor_mp_gauge(actor, x, y, width = 120)
  307.     gw = width * actor.ammo[actor.akind] / [actor.cta[actor.akind], 1].max
  308.     case actor.akind
  309.     when 9
  310.       gc1=Color.new(255,128,128,255)
  311.       gc2=Color.new(192,  0,  0,255)
  312.     when 10
  313.       gc1=Color.new(192,192,192,255)
  314.       gc2=Color.new( 96, 96, 96,255)
  315.     when 11
  316.       gc1=Color.new(128,255,128,255)
  317.       gc2=Color.new(  0,192,  0,255)
  318.     when 12  
  319.       gc1=Color.new(128,128,255,255)
  320.       gc2=Color.new(  0,  0,192,255)
  321.     else  
  322.       gc1 = mp_gauge_color1
  323.       gc2 = mp_gauge_color2
  324.     end  
  325.     self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  326.     self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  327.   end
  328. end  
复制代码


http://rpg.blue/upload_program/f ... ��(VX)_93468951.rar


詳細說明請看XP版的:
http://rpg.blue/viewthread.php?tid=88299
[right]----snstar2006[/right]
我的个人空间:
http://434986751.qzone.qq.com

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

2
发表于 2008-6-10 11:07:37 | 只看该作者
連結出錯
幫你編輯好了

其實LZ可以學習用注釋
參考我發的半成品VX版
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
3
发表于 2008-6-12 02:33:57 | 只看该作者
收起来...
可能以后会用到...{/cy}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 14:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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