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

Project1

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

[已经解决] 求技能数量脚本

[复制链接]

Lv2.观梦者

梦石
0
星屑
347
在线时间
280 小时
注册时间
2015-1-29
帖子
105
跳转到指定楼层
1
发表于 2016-7-10 14:23:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在论坛上搜过....可都是VX的...

SO,在这求个脚本

类似这样
↓↓↓
-------------------------------------------
十字斩                                          4/5      l  类似口袋妖怪技能系统
-----------------------------------↑-↑---
                                   技能所剩量↑  ↑技能极限量

评分

参与人数 1星屑 +35 收起 理由
RyanBern + 35 手动认可奖励

查看全部评分

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

2
发表于 2016-7-10 16:32:16 | 只看该作者
本帖最后由 陈大帅帅帅哥 于 2016-7-14 11:24 编辑

主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的
RUBY 代码复制
  1. class Game_Battler
  2.   attr_accessor :skills_pp                #卐 技能pp的数组
  3.   attr_accessor :skills                   #卐 特技
  4.   alias cdsssg_initialize initialize
  5.   def initialize
  6.     cdsssg_initialize
  7.     @skills_pp = []
  8.     @skills = []
  9.   end
  10.   def skill_can_use?(skill_id)
  11.     #卐 PP 不足的情况下不能使用
  12.     if self.skills_pp[self.skills.index(skill_id)] < 1
  13.       return false
  14.     end
  15.     # 战斗不能的情况下不能使用
  16.     if dead?
  17.       return false
  18.     end
  19.     # 沉默状态的情况下、物理特技以外的特技不能使用
  20.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  21.       return false
  22.     end
  23.     # 获取可以使用的时机
  24.     occasion = $data_skills[skill_id].occasion
  25.     # 战斗中的情况下
  26.     if $game_temp.in_battle
  27.       # [平时] 或者是 [战斗中] 可以使用
  28.       return (occasion == 0 or occasion == 1)
  29.     # 不是战斗中的情况下
  30.     else
  31.       # [平时] 或者是 [菜单中] 可以使用
  32.       return (occasion == 0 or occasion == 2)
  33.     end
  34.   end
  35. end
  36.  
  37.  
  38. class Game_Actor < Game_Battler
  39.   def setup(actor_id)
  40.     actor = $data_actors[actor_id]
  41.     @actor_id = actor_id
  42.     @name = actor.name
  43.     @character_name = actor.character_name
  44.     @character_hue = actor.character_hue
  45.     @battler_name = actor.battler_name
  46.     @battler_hue = actor.battler_hue
  47.     @class_id = actor.class_id
  48.     @weapon_id = actor.weapon_id
  49.     @armor1_id = actor.armor1_id
  50.     @armor2_id = actor.armor2_id
  51.     @armor3_id = actor.armor3_id
  52.     @armor4_id = actor.armor4_id
  53.     @level = actor.initial_level
  54.     @exp_list = Array.new(101)
  55.     make_exp_list
  56.     @exp = @exp_list[@level]
  57.     @skills = []
  58.     @hp = maxhp
  59.     @sp = maxsp
  60.     @states = []
  61.     @states_turn = {}
  62.     @maxhp_plus = 0
  63.     @maxsp_plus = 0
  64.     @str_plus = 0
  65.     @dex_plus = 0
  66.     @agi_plus = 0
  67.     @int_plus = 0
  68.     # 学会特技
  69.     for i in 1..@level
  70.       for j in $data_classes[@class_id].learnings
  71.         if j.level == i
  72.           learn_skill(j.skill_id)
  73.         end
  74.       end
  75.     end
  76.     # 刷新自动状态
  77.     update_auto_state(nil, $data_armors[@armor1_id])
  78.     update_auto_state(nil, $data_armors[@armor2_id])
  79.     update_auto_state(nil, $data_armors[@armor3_id])
  80.     update_auto_state(nil, $data_armors[@armor4_id])
  81.   end
  82.   def learn_skill(skill_id)
  83.     if skill_id > 0 and not skill_learn?(skill_id)
  84.       @skills_pp.push($data_skills[skill_id].sp_cost)
  85.       @skills.push(skill_id)
  86.       @skills.sort!
  87.     end
  88.   end
  89.   def forget_skill(skill_id)
  90.     @skills_pp.delete_at(@skills.index(skill_id))
  91.     @skills.delete(skill_id)
  92.   end
  93. end
  94.  
  95.  
  96. class Game_Enemy < Game_Battler
  97.   def actions
  98.     for i in $data_enemies[@enemy_id].actions
  99.       if i.kind == 1 and i.skill_id != 1
  100.         @skills_pp.push($data_skills[i.skill_id].sp_cost)
  101.         @skills.push(i.skill_id)
  102.       end
  103.     end
  104.     return $data_enemies[@enemy_id].actions
  105.   end
  106. end
  107.  
  108.  
  109. class Window_Skill < Window_Selectable
  110.   def draw_item(index)
  111.     skill = @data[index]
  112.     if @actor.skill_can_use?(skill.id)
  113.       self.contents.font.color = normal_color
  114.     else
  115.       self.contents.font.color = disabled_color
  116.     end
  117.     x = 4 + index % 2 * (288 + 32)
  118.     y = index / 2 * 32
  119.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  120.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  121.     bitmap = RPG::Cache.icon(skill.icon_name)
  122.     opacity = self.contents.font.color == normal_color ? 255 : 128
  123.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  124.     self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  125.     self.contents.draw_text(x + 166, y, 112, 32, "PP:" + @actor.skills_pp[@actor.skills.index(skill.id)].to_s + "/" + skill.sp_cost.to_s, 2)
  126.   end
  127. end
  128.  
  129.  
  130. class Scene_Skill
  131.   def update_skill
  132.     # 按下 B 键的情况下
  133.     if Input.trigger?(Input::B)
  134.       # 演奏取消 SE
  135.       $game_system.se_play($data_system.cancel_se)
  136.       # 切换到菜单画面
  137.       $scene = Scene_Menu.new(1)
  138.       return
  139.     end
  140.     # 按下 C 键的情况下
  141.     if Input.trigger?(Input::C)
  142.       # 获取特技窗口现在选择的特技的数据
  143.       @skill = @skill_window.skill
  144.       # 不能使用的情况下
  145.       if @skill == nil or not @actor.skill_can_use?(@skill.id)
  146.         # 演奏冻结 SE
  147.         $game_system.se_play($data_system.buzzer_se)
  148.         return
  149.       end
  150.       # 演奏确定 SE
  151.       $game_system.se_play($data_system.decision_se)
  152.       # 效果范围是我方的情况下
  153.       if @skill.scope >= 3
  154.         # 激活目标窗口
  155.         @skill_window.active = false
  156.         @target_window.x = (@skill_window.index + 1) % 2 * 304
  157.         @target_window.visible = true
  158.         @target_window.active = true
  159.         # 设置效果范围 (单体/全体) 的对应光标位置
  160.         if @skill.scope == 4 || @skill.scope == 6
  161.           @target_window.index = -1
  162.         elsif @skill.scope == 7
  163.           @target_window.index = @actor_index - 10
  164.         else
  165.           @target_window.index = 0
  166.         end
  167.       # 效果在我方以外的情况下
  168.       else
  169.         # 公共事件 ID 有效的情况下
  170.         if @skill.common_event_id > 0
  171.           # 预约调用公共事件
  172.           $game_temp.common_event_id = @skill.common_event_id
  173.           # 演奏特技使用时的 SE
  174.           $game_system.se_play(@skill.menu_se)
  175.           #卐 消耗 PP
  176.           @actor.skills_pp[@actor.skills.index(@skill.id)] -= 1
  177.           # 再生成各窗口的内容
  178.           @status_window.refresh
  179.           @skill_window.refresh
  180.           @target_window.refresh
  181.           # 切换到地图画面
  182.           $scene = Scene_Map.new
  183.           return
  184.         end
  185.       end
  186.       return
  187.     end
  188.     # 按下 R 键的情况下
  189.     if Input.trigger?(Input::R)
  190.       # 演奏光标 SE
  191.       $game_system.se_play($data_system.cursor_se)
  192.       # 移至下一位角色
  193.       @actor_index += 1
  194.       @actor_index %= $game_party.actors.size
  195.       # 切换到别的特技画面
  196.       $scene = Scene_Skill.new(@actor_index)
  197.       return
  198.     end
  199.     # 按下 L 键的情况下
  200.     if Input.trigger?(Input::L)
  201.       # 演奏光标 SE
  202.       $game_system.se_play($data_system.cursor_se)
  203.       # 移至上一位角色
  204.       @actor_index += $game_party.actors.size - 1
  205.       @actor_index %= $game_party.actors.size
  206.       # 切换到别的特技画面
  207.       $scene = Scene_Skill.new(@actor_index)
  208.       return
  209.     end
  210.   end
  211.   def update_target
  212.     # 按下 B 键的情况下
  213.     if Input.trigger?(Input::B)
  214.       # 演奏取消 SE
  215.       $game_system.se_play($data_system.cancel_se)
  216.       # 删除目标窗口
  217.       @skill_window.active = true
  218.       @target_window.visible = false
  219.       @target_window.active = false
  220.       return
  221.     end
  222.     # 按下 C 键的情况下
  223.     if Input.trigger?(Input::C)
  224.       # 因为 PP 不足而无法使用的情况下
  225.       unless @actor.skill_can_use?(@skill.id)
  226.         # 演奏冻结 SE
  227.         $game_system.se_play($data_system.buzzer_se)
  228.         return
  229.       end
  230.       # 目标是全体的情况下
  231.       if @target_window.index == -1
  232.         # 对同伴全体应用特技使用效果
  233.         used = false
  234.         for i in $game_party.actors
  235.           used |= i.skill_effect(@actor, @skill)
  236.         end
  237.       end
  238.       # 目标是使用者的情况下
  239.       if @target_window.index <= -2
  240.         # 对目标角色应用特技的使用效果
  241.         target = $game_party.actors[@target_window.index + 10]
  242.         used = target.skill_effect(@actor, @skill)
  243.       end
  244.       # 目标是单体的情况下
  245.       if @target_window.index >= 0
  246.         # 对目标角色应用特技的使用效果
  247.         target = $game_party.actors[@target_window.index]
  248.         used = target.skill_effect(@actor, @skill)
  249.       end
  250.       # 使用特技的情况下
  251.       if used
  252.         # 演奏特技使用时的 SE
  253.         $game_system.se_play(@skill.menu_se)
  254.         # 消耗 PP
  255.         @actor.skills_pp[@actor.skills.index(@skill.id)] -= 1
  256.         # 再生成各窗口内容
  257.         @status_window.refresh
  258.         @skill_window.refresh
  259.         @target_window.refresh
  260.         # 全灭的情况下
  261.         if $game_party.all_dead?
  262.           # 切换到游戏结束画面
  263.           $scene = Scene_Gameover.new
  264.           return
  265.         end
  266.         # 公共事件 ID 有效的情况下
  267.         if @skill.common_event_id > 0
  268.           # 预约调用公共事件
  269.           $game_temp.common_event_id = @skill.common_event_id
  270.           # 切换到地图画面
  271.           $scene = Scene_Map.new
  272.           return
  273.         end
  274.       end
  275.       # 无法使用特技的情况下
  276.       unless used
  277.         # 演奏冻结 SE
  278.         $game_system.se_play($data_system.buzzer_se)
  279.       end
  280.       return
  281.     end
  282.   end
  283. end
  284.  
  285.  
  286. class Scene_Battle
  287.   def make_skill_action_result
  288.     # 获取特技
  289.     @skill = $data_skills[@active_battler.current_action.skill_id]
  290.     # 如果不是强制行动
  291.     unless @active_battler.current_action.forcing
  292.       # 因为 PP 耗尽而无法使用的情况下
  293.       unless @active_battler.skill_can_use?(@skill.id)
  294.         # 清除强制行动对像的战斗者
  295.         $game_temp.forcing_battler = nil
  296.         # 移至步骤 1
  297.         @phase4_step = 1
  298.         return
  299.       end
  300.     end
  301.     #卐 消耗 PP
  302.     @active_battler.skills_pp[@active_battler.skills.index(@skill.id)] -= 1
  303.     # 刷新状态窗口
  304.     @status_window.refresh
  305.     # 在帮助窗口显示特技名
  306.     @help_window.set_text(@skill.name, 1)
  307.     # 设置动画 ID
  308.     @animation1_id = @skill.animation1_id
  309.     @animation2_id = @skill.animation2_id
  310.     # 设置公共事件 ID
  311.     @common_event_id = @skill.common_event_id
  312.     # 设置对像侧战斗者
  313.     set_target_battlers(@skill.scope)
  314.     # 应用特技效果
  315.     for target in @target_battlers
  316.       target.skill_effect(@active_battler, @skill)
  317.     end
  318.   end
  319. end


已通过测试(呼,累死了,是从我的游戏里一点一点的挖出来的)
另外楼主是打算做口袋妖怪吗?

评分

参与人数 2星屑 +215 收起 理由
RyanBern + 200 认可答案
269155856888 + 15 认可答案

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

梦石
0
星屑
347
在线时间
280 小时
注册时间
2015-1-29
帖子
105
3
 楼主| 发表于 2016-7-10 16:40:59 | 只看该作者
本帖最后由 269155856888 于 2016-7-10 16:42 编辑
陈大帅帅帅哥 发表于 2016-7-10 16:32
主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的


谢谢,不过好像有问题    脚本第143有错误

QQ截图20160710163854.png (9.27 KB, 下载次数: 13)

QQ截图20160710163854.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

4
发表于 2016-7-10 16:46:26 | 只看该作者
269155856888 发表于 2016-7-10 16:40
谢谢,不过好像有问题    脚本第143有错误

论坛的锅,改成@skill = @skill_window.skill
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
347
在线时间
280 小时
注册时间
2015-1-29
帖子
105
5
 楼主| 发表于 2016-7-10 17:16:35 | 只看该作者
陈大帅帅帅哥 发表于 2016-7-10 16:46
论坛的锅,改成@skill = @skill_window.skill

弱弱的问一句怎么用?我不是太懂脚本,脚本里也没有明确说明

点评

没有时间了,明天再写给你  发表于 2016-7-10 17:30
每个技能的sp就是总pp,回复pp的话我得研究一下  发表于 2016-7-10 17:18
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
347
在线时间
280 小时
注册时间
2015-1-29
帖子
105
6
 楼主| 发表于 2016-7-10 17:47:03 | 只看该作者
陈大帅帅帅哥 发表于 2016-7-10 16:32
主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的

效果是达到了,可.....好像不能显示技能还剩多少?



回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
347
在线时间
280 小时
注册时间
2015-1-29
帖子
105
7
 楼主| 发表于 2016-7-10 17:47:40 | 只看该作者
陈大帅帅帅哥 发表于 2016-7-10 16:32
主站上有个xp的,不过有bug,所有同编号技能拥有统一的PP,下面是我自己修改过的


效果是达到了,可.....好像不能显示技能还剩多少{:2_270:}
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

8
发表于 2016-7-10 20:21:07 | 只看该作者

咦这是什么,原来回复也可以加标题

本帖最后由 陈大帅帅帅哥 于 2016-7-10 22:20 编辑
269155856888 发表于 2016-7-10 17:47
效果是达到了,可.....好像不能显示技能还剩多少?


我实验的时候可以,能不能发一下效果图

另:回复PP方法已完成,在我的脚本的Game_Battler下加入
  1.   #--------------------------------------------------------------------------
  2.   # 卐 回复技能PP
  3.   #--------------------------------------------------------------------------
  4.   def recover_skills_pp
  5.     for i in 0..skills.size-1
  6.       @skills_pp[i] = $data_skills[@skills[i]].sp_cost
  7.     end
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # 卐 全回复
  11.   #--------------------------------------------------------------------------
  12.   def recover_all
  13.     @hp = maxhp
  14.     @sp = maxsp
  15.     for i in @states.clone
  16.       remove_state(i)
  17.     end
  18.     recover_skills_pp
  19.   end
复制代码


然后在事件中用
for actor in $game_party.actors
  actor.recover_skills_pp
end
就可以完全回复所有人的PP值
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
347
在线时间
280 小时
注册时间
2015-1-29
帖子
105
9
 楼主| 发表于 2016-7-11 10:53:22 | 只看该作者
本帖最后由 269155856888 于 2016-7-11 10:59 编辑

陈大帅帅帅哥 发表于 2016-7-10 20:21
我实验的时候可以,能不能发一下效果图

另:回复PP方法已完成,在我的脚本的Game_Battler下加入


问题↓
其他的效果是达到了,技能数量是5,用了还是5....       能发个范例么?

QQ截图20160711105042.png (380.98 KB, 下载次数: 18)

QQ截图20160711105042.png

QQ截图20160711105055.png (363.55 KB, 下载次数: 17)

QQ截图20160711105055.png

QQ截图20160711105112.png (392.17 KB, 下载次数: 16)

QQ截图20160711105112.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

10
发表于 2016-7-11 11:42:34 | 只看该作者
269155856888 发表于 2016-7-11 10:53
问题↓
其他的效果是达到了,技能数量是5,用了还是5....       能发个范例么? ...

你这个好像完全没有用到我的脚本吧,能不能发一下你的工程,我看看是哪里有问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 10:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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