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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9143
在线时间
464 小时
注册时间
2015-5-8
帖子
865
跳转到指定楼层
1
发表于 2019-10-21 03:20:53 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 taeckle 于 2019-10-23 10:43 编辑

咱想在class Game_Battler 下的 def skill_effect(user, skill) 里做这个,保证这5100个变量在 def skill_effect(user, skill) 里可读取可修改

先抛砖引玉建两个数组,方便大神复制粘贴

Charactors_for_times_strike = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51]

Skills_for_times_strike = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]


然后咱就不知道该怎么建立这5100个实例变量了。。

点评

所以你之前学会的定义数组方法*1..100呢...怎么不用..  发表于 2019-10-21 10:33

Lv4.逐梦者

梦石
0
星屑
9143
在线时间
464 小时
注册时间
2015-5-8
帖子
865
17
 楼主| 发表于 2019-11-28 22:25:11 | 只看该作者
问题还没解决,请将此贴继续保持“有事请教”状态,谢了!

点评

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9143
在线时间
464 小时
注册时间
2015-5-8
帖子
865
16
 楼主| 发表于 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,这又该怎么搞呢?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33069
在线时间
5103 小时
注册时间
2012-11-19
帖子
4878

开拓者

15
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36124
在线时间
10712 小时
注册时间
2009-3-15
帖子
4806
14
发表于 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9143
在线时间
464 小时
注册时间
2015-5-8
帖子
865
13
 楼主| 发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

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


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

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


总结来说,实例变量与类无关,但是类变量与实例对象却有关

QQ图片20191023111914.png (9.46 KB, 下载次数: 14)

QQ图片20191023111914.png

点评

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3102
在线时间
205 小时
注册时间
2019-9-16
帖子
224
10
发表于 2019-10-23 10:57:24 | 只看该作者
taeckle 发表于 2019-10-23 00:16
那要是我想读取第18角色在战斗中使用第63号技能的次数该怎么搞啊,
比如说这个例子:
当第18号角色使用第 ...


获取技能数的代码,我相信楼上两位大神已经写的很详细了,我这里用$a变量代表技能使用次数,我来告诉你怎么写剩下的代码,如何判断每次攻击力+1
另外,你还要用一个全新的变量,计算你一共加了多少点攻击力。这里我使用$game_variables[18][101]变量来计算,101的意思是不和那100个技能冲突,另外的变量
只不过在使用这个变量之前,你需要和那100个变量一样初始化它,将它初始化为数组,也就是这么写$game_variables[18][101]=[]

RUBY 代码复制
  1. i =$a/100                                          #用获取数量除以10,由于是整数变量,获取值必然也是整数,会自动删掉小数点后面的数字。(不会四合五入,而是全舍)
  2.  
  3. if $game_variables[18][101]==nil        #如果这个变量一开始没被赋值过,那值为nil,为了避免处理减法时报错,赋值成0
  4. $game_variables[18][101]=0
  5. end
  6. if i>=10                                            #一共可以加10次
  7. i=10
  8. end
  9. if $game_variables[18][101]>=10       #这句理论上讲应该是不需要的,为了避免出现负数BUG还是加上吧。
  10. $game_variables[18][101]=10
  11. end
  12. i-=$game_variables[18][101]             #用i减去曾经加过的数值,避免重复增加攻击力
  13. $game_variables[18][101]+=i            #把此次增加的值,装进计算变量
  14. $game_actors[18].atk+=i                  #增加相应的力量值,据我所知攻击力是通过装备计算出来的值,不是直接靠变量操作的(修改属性我也不是很懂,你也可以问问别人),所以我这里加的是力量。

评分

参与人数 1+1 收起 理由
taeckle + 1 多谢大神!

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33069
在线时间
5103 小时
注册时间
2012-11-19
帖子
4878

开拓者

9
发表于 2019-10-23 07:55:29 | 只看该作者
本帖最后由 芯☆淡茹水 于 2019-10-23 08:18 编辑

在实际中增加使用次数以及次数应用也可以的

  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.     count = user.is_a?(Game_Actor) ? user.skill_usage_count(skill.id) : 0
  14.     user.increase_skill_use_times(skill.id) if user.is_a?(Game_Actor)
  15.     # 例如每使用 1000 次威力就加 1 。(威力为 0 的技能除外)↓
  16.     base_power = skill.base_power
  17.     if base_power != 0
  18.       added = count / 1000
  19.       skill.power = base_power + (base_power < 0 ? -added : added)
  20.     end
  21.     skill_usage_count_skill_effect(user, skill)
  22.   end
  23. end
  24. #==============================================================================
  25. class Game_Actor
  26.   #--------------------------------------------------------------------------
  27.   def skill_use_data
  28.     return @skill_use_data || {}
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   def skill_usage_count(skill_id)
  32.     return skill_use_data[skill_id] || 0
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   def increase_skill_use_times(skill_id, n=nil)
  36.     @skill_use_data ||= {}
  37.     count = skill_usage_count(skill_id)
  38.     @skill_use_data[skill_id] = [count + (n || 1), 0].max
  39.   end
  40. end
  41. #==============================================================================
复制代码


在其他地方获取使用次数,比如获取 5 号角色的 22 号技能使用次数 :$game_actors[5].skill_usage_count(22)

点评

自身攻击力这个概念有点复杂,换自己力量吧,,,  发表于 2019-10-23 11:47
然后你会发现如果技能是群体攻击的话每次就不加1了加的是敌方的总数.......我想再除以个$game_troop.enemies.size  发表于 2019-10-23 11:40
这个就差在加的是技能攻击力吧..还有我问你自身攻击力是指什么你还没答..  发表于 2019-10-23 11:36
这个你不用写+1了..你每用一次技能就自动+1..  发表于 2019-10-23 11:35
还有这个脚本怎么做次数的加法运算,咱一写“$game_actors[5].skill_usage_count(22) +1”就报错,只能代入,然后做判断.......  发表于 2019-10-23 11:29

评分

参与人数 1+1 收起 理由
taeckle + 1 大神出手,摧枯拉朽!

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-21 03:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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