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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: taeckle

[已经解决] 求教不用公共变量计算51个角色使用100种不同技能次数的写法

[复制链接]

Lv5.捕梦者

梦石
0
星屑
33038
在线时间
10469 小时
注册时间
2009-3-15
帖子
4756
发表于 2019-10-23 11:06:50 | 显示全部楼层
如果是默认还好..
如果用了例如彩虹神剑那些连击脚本..
skill_effect
有多少连击就执行多少次..所以不建议在这里加技能使用次数..
如果是默认的就无所谓..

评分

参与人数 1+1 收起 理由
taeckle + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3072
在线时间
205 小时
注册时间
2019-9-16
帖子
224
发表于 2019-10-23 11:28:27 | 显示全部楼层
ppspssss 发表于 2019-10-21 10:30
看楼主問題就知道楼主根本不知道局部變量是什么,建议你弄清楚局部变量是什么再来问,还有实例變量 ,
有@的 ...

补充3楼大神的说明……
局部变量的示范如图所示。


假设把类当成一个模具,那么由模具生产手办的过程,就叫实例化。而随着实例化以后,那些“只与该手办有关,与模具无关的数据,则为实例变量”
比如手办的批次号,手办的生产日期,这些都是以@开头的实例变量,本身与模具(类)没有关系。而调用实例变量的范围,也只仅限于该手办的代码内,超过范围就会报错。
比如你在大街上拽来一个人,问他“生产日期是多少?”,他会问你“什么的生产日期?”,他会不明白你想问的是什么,这在程序里就是典型的超过使用范围的错误示范。

而类本身的变量,则以@@开头,类本身的变量与实例化变量又有区别,他是属于类自己的变量,比如模具的长、宽、高,因此每个以此模具生产的手办数据也都与它有关。


总结来说,实例变量与类无关,但是类变量与实例对象却有关
QQ图片20191023111914.png

点评

事件脚本的执行环境是在一个Interpreter实例内的,可以直接使用其实例变量比如@event_id,或者新建一个实例变量@a,可以在上下脚本中共用。  发表于 2019-11-4 23:34

评分

参与人数 1+1 收起 理由
taeckle + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
 楼主| 发表于 2019-10-23 12:01:30 | 显示全部楼层
本帖最后由 taeckle 于 2019-10-23 12:03 编辑
soulsaga 发表于 2019-10-23 00:42
class Game_Battler
attr_accessor :skill_count                    # skill_count                    #  ...


大神你看这是咱用公共变量在 def skill_effect(user, skill) 里做的,各种操作非常方便:

  if user.is_a?(Game_Actor)  
   if user.id == 5 && skill.id == 10 && user.state?(100)
    if $game_actors[5].skill[10].level >=10 && $game_actors[5].skill[10].level <= 14      
     $game_variables[1000] +=1
     case $game_variables[1000]
      when 160
       $game_actors[5].skill[10].level+=1
       user.pp_damage += user.name.to_s + "大花狗打滚等级提升!"
       user.pp_damage_pop=true      
      when 320
       $game_actors[5].skill[10].level+=1
       user.pp_damage += user.name.to_s + "大花狗打滚等级提升!"
       user.pp_damage_pop=true         
      when 600
       $game_actors[5].skill[10].level+=1
       user.pp_damage += user.name.to_s + "大花狗打滚等级提升!"
       user.pp_damage_pop=true        
      when 800
       $game_actors[5].skill[100].level+=1
       user.pp_damage += user.name.to_s + "大花狗打滚等级提升!"
       user.pp_damage_pop=true        
      when 1000
       $game_actors[5].skill[100].level+=1
       user.pp_damage += user.name.to_s + "大花狗打滚等级提升!"
       user.pp_damage_pop=true                                      
      else
     end
    end
   end
end

当初就是想把上面的脚本除了公共变量换成个实例变量其他都不变就在def skill_effect(user, skill) 里做..

点评

在def make_skill_action_result这里计算比较好..  发表于 2019-10-23 12:12
你这个和自身攻击力有何关系..而且都说了不要在def skill_effect(user, skill)计算..  发表于 2019-10-23 12:11
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33038
在线时间
10469 小时
注册时间
2009-3-15
帖子
4756
发表于 2019-10-23 12:04:38 | 显示全部楼层
本帖最后由 soulsaga 于 2019-10-23 12:20 编辑

RUBY 代码复制
  1. class Game_Battler
  2. attr_accessor :skill_count                    # skill_count                    # 技能次数
  3. alias 技能次数初始化 initialize
  4. def initialize
  5. 技能次数初始化
  6. #@skill_count = {}
  7. end
  8. #--------------------------------------------------------------------------
  9.   # ● 返回技能次数哈希表
  10.   #--------------------------------------------------------------------------
  11.   def skill_count
  12.     return @skill_count || {}
  13.   end
  14. end
  15. #==============================================================================
  16. class Scene_Battle
  17.   #--------------------------------------------------------------------------
  18.   alias 技能结果 make_skill_action_result
  19.   def make_skill_action_result
  20.     技能结果
  21.     count = @active_battler.is_a?(Game_Actor) ? @active_battler.skill_usage_count(@skill.id) : 0
  22.     @active_battler.increase_skill_use_times(@skill.id) if @active_battler.is_a?(Game_Actor)
  23.     #p @active_battler.skill_usage_count(@skill.id)*10
  24.     #p $game_actors[1].skill_usage_count(57)
  25.   end
  26. end
  27. #==============================================================================
  28. class Game_Actor
  29.   attr_accessor :skill_use_data# 技能次数
  30.   #--------------------------------------------------------------------------
  31.   def skill_use_data
  32.     return @skill_use_data || {}
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   def skill_usage_count(skill_id)
  36.     return skill_use_data[skill_id] || 0
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   def increase_skill_use_times(skill_id, n=nil)
  40.     @skill_use_data ||= {}
  41.     count = skill_usage_count(skill_id)
  42.     @skill_use_data[skill_id] = [count + (n || 1), 0].max
  43.   end
  44. end
  45. #==============================================================================


我改了一下芯大的脚本..应该好使了吧..用群体攻击也只加1次

点评

现在你那里几点了?活动时间是多少至多少?早上班..晚上回家搞?  发表于 2019-10-23 12:25
要加减乘除需要修改一下脚本..已更新..你试试  发表于 2019-10-23 12:20
好吧。。我以为大神你把这个脚本更优化一步然后有所提升了  发表于 2019-10-23 12:17
芯大有说的吧..你为什么问我?你到底有没认真看帖..  发表于 2019-10-23 12:13
还有用这个脚本的话能直接加减乘除吗?  发表于 2019-10-23 12:12
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
31679
在线时间
5077 小时
注册时间
2012-11-19
帖子
4877

开拓者

发表于 2019-10-23 12:40:29 | 显示全部楼层
XP 默认脚本,,添加功能非常不方便。
要自动增加使用次数,只有加在 战斗 里,至于菜单里使用技能增加次数,就自己想办法
  1. #==============================================================================
  2. module RPG
  3.   class Skill
  4.     attr_accessor :base_power
  5.   end
  6. end
  7. #==============================================================================
  8. class Game_Battler
  9.   #--------------------------------------------------------------------------
  10.   alias skill_usage_count_skill_effect skill_effect
  11.   def skill_effect(user, skill)
  12.     skill.base_power = skill.power if !skill.base_power
  13.     # 例如每使用 1000 次威力就加 1 。(威力为 0 的技能除外)↓
  14.     base_power = skill.base_power
  15.     count = user.is_a?(Game_Actor) ? user.skill_usage_count(skill.id) : 0
  16.     if base_power != 0
  17.       added = count / 1000
  18.       skill.power = base_power + (base_power < 0 ? -added : added)
  19.     end
  20.     skill_usage_count_skill_effect(user, skill)
  21.   end
  22. end
  23. #==============================================================================
  24. class Game_Actor
  25.   #--------------------------------------------------------------------------
  26.   def skill_use_data
  27.     return @skill_use_data || {}
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   def skill_usage_count(skill_id)
  31.     return skill_use_data[skill_id] || 0
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   def increase_skill_use_times(skill_id, n=1)
  35.     @skill_use_data ||= {}
  36.     count = skill_usage_count(skill_id)
  37.     @skill_use_data[skill_id] = [count + n, 0].max
  38.   end
  39. end
  40. #==============================================================================
  41. class Scene_Battle
  42.   #--------------------------------------------------------------------------
  43.   alias skill_usage_count_make_skill_action_result make_skill_action_result
  44.   def make_skill_action_result
  45.     if @active_battler.is_a?(Game_Actor)
  46.       skill_id = @active_battler.current_action.skill_id
  47.       result = @active_battler.current_action.forcing ||
  48.       @active_battler.skill_can_use?(skill_id)
  49.       result && @active_battler.increase_skill_use_times(skill_id)
  50.     end
  51.     skill_usage_count_make_skill_action_result
  52.   end
  53. end
  54. #==============================================================================
复制代码

点评

大神那要是只让第1、5、8、12号技能对所有人有计算累计,其他技能禁止计算使用次数,且当角色在第100号状态下每次计数额外+1,这又该怎么搞呢?  发表于 2019-10-23 13:27
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
 楼主| 发表于 2019-10-23 13:35:16 | 显示全部楼层
本帖最后由 taeckle 于 2019-10-23 13:36 编辑
芯☆淡茹水 发表于 2019-10-23 12:40
XP 默认脚本,,添加功能非常不方便。
要自动增加使用次数,只有加在 战斗 里,至于菜单里使用技能增加次数 ...


大神我又蹦出来个想法,你看看能不能搞:
那要是只让第1、5、8、12号技能对所有角色有使用次数累计,其他技能使用时禁止累计使用次数,且任何角色在第100号状态下使用第5号技能(仅限第5号技能)时每次计数额外会+1,这又该怎么搞呢?
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
 楼主| 发表于 2019-11-28 22:25:11 | 显示全部楼层
问题还没解决,请将此贴继续保持“有事请教”状态,谢了!

点评

OK!  发表于 2020-3-2 18:18
不建议一帖多问...不方便搜索问题..请开新帖...  发表于 2019-11-29 12:17
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-3-28 21:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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