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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
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

Lv5.捕梦者

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

开拓者

2
发表于 2019-10-21 07:58:52 | 只看该作者
  1. #==============================================================================
  2. class Game_Actor
  3.   #--------------------------------------------------------------------------
  4.   def skill_use_data
  5.     return @skill_use_data || {}
  6.   end
  7.   #--------------------------------------------------------------------------
  8.   def skill_usage_count(skill_id)
  9.     return skill_use_data[skill_id] || 0
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   def increase_skill_use_times(skill_id, n=nil)
  13.     @skill_use_data ||= {}
  14.     @skill_use_data[skill_id] = skill_usage_count(skill_id) + (n || 1)
  15.   end
  16. end
  17. #==============================================================================
复制代码

点评

请问大神这里的数字51和100咱咋没看到啊..  发表于 2019-10-22 23:44

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
taeckle + 1 大神威武!

查看全部评分

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

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14043
在线时间
2069 小时
注册时间
2016-9-20
帖子
844
3
发表于 2019-10-21 10:30:21 | 只看该作者
看楼主問題就知道楼主根本不知道局部變量是什么,建议你弄清楚局部变量是什么再来问,还有实例變量 ,
有@的不是局部變量<错  , 是实例變量

点评

https://rpg.blue/forum.php?mod=viewthread&tid=476259&page=1#pid2856822 这个貼子討論过,去看  发表于 2019-10-23 10:23
多谢大神指点迷津,那要怎么区分局部变量和实例变量呐?我就知道前面带@的要放到class end 或者def end 里用..  发表于 2019-10-22 23:47

评分

参与人数 1+1 收起 理由
taeckle + 1 我很赞同!

查看全部评分

内容仅供参考,
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33148
在线时间
10485 小时
注册时间
2009-3-15
帖子
4756
4
发表于 2019-10-21 10:56:49 | 只看该作者
公共变量也可以用数组..塞多少个都没问题..

点评

楼下发了..  发表于 2019-10-23 00:45
大神现给你用3个角色+4个技能,你来用实例变量和哈希表做一遍我看看  发表于 2019-10-23 00:34
那用实例变量和哈希表类型咯..  发表于 2019-10-23 00:30
就在class Game_Battler 里啊  发表于 2019-10-23 00:25
你想在哪里计 算..哪里用脚本..  发表于 2019-10-23 00:24

评分

参与人数 1+1 收起 理由
taeckle + 1 求大神指点一二

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3082
在线时间
205 小时
注册时间
2019-9-16
帖子
224
5
发表于 2019-10-22 00:11:10 | 只看该作者
本帖最后由 寒凌天 于 2019-10-25 22:00 编辑

所谓局部变量,就是只能很小范围内使用的临时变量,如果超出范围的话,你这么搞会读取不到的。
比如你右键添加的那种脚本代码框,你在上面声明一个临时变量,下面就读取不到,超过范围了。

之前还看你在研究数组,怎么现在不用了啊,51个人物,100种技能,一个二维数组就能全部搞定。比如$a[18][63] = 5,意思就是第18个人的第63种技能的参数
(这里只是举例,实际数组是从0开始计算的,所以严格讲这么写应该是第19人,第64技能)
这里特别说明一下$a[18][63]没法直接赋值和使用,需要先将$a=[]这样声明成一个数组,然后再$a[18]=[]这样生成一个二维数组,才可以$a[18][63] = 5赋值或调用。

比如
RUBY 代码复制
  1. for i in 1..51
  2. $game_variables[i]=[]       #这其实就是将$game_variables[i]声明成了一个二维数组,所以下面可以直接用。
  3. end

声明完直接$game_variables[18][63] = 5这么赋值用就行了,没有赋值使用过的变量的值则为nil
(如果是C语言一类比较严谨的语言,必须声明数组个数,但是ruby不用,直接赋值使用就好了,有点类似泛型的感觉,数量不受限制,可以随时补充)

点评

$a[18][63] = 5是无法直接赋值的,但是按照我上面写的for循环运行以后,$game_variables[18][63] = 5却是可以赋值的。代码是没问题的,只是怪我没说清楚  发表于 2019-10-25 21:58
我这也是没办法,想利用游戏原有的save/load功能读取数据,才会想用二位数组把数据存进$game_variables[] 不然真不如自己建个数据结构用着方便  发表于 2019-10-25 21:39
说的不够严谨确实是我的问题。另外,你没用过二维数组也是正常,因为自己建立并实例化一个新的数据结构或者类更加实用。这才是多数人的选择  发表于 2019-10-25 21:38
我本来也不会二维数组的, 看了你教我才会的, 然后我去试$a[18][63] = 5 结果不行,以为你教错了,之后才知道, 所以没你教的话我也学不会二维数组谢谢你  发表于 2019-10-25 20:37
我承认我说的对于新手来讲不太严谨,但我的初愿是好的啊,你帮我补充一下我会感激你的,但你也不能就这么怪我在这故意误导人啊,你说是不……  发表于 2019-10-25 19:30

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 我很赞同
taeckle + 1 多谢你了!

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
6
 楼主| 发表于 2019-10-23 00:16:20 | 只看该作者
本帖最后由 taeckle 于 2019-10-23 11:47 编辑
寒凌天 发表于 2019-10-22 00:11
所谓局部变量,就是只能很小范围内使用的临时变量,如果超出范围的话,你这么搞会读取不到的。
比如你右键 ...


那要是我想读取第18角色在战斗中使用第63号技能的次数该怎么搞啊,
比如说这个例子:
当第18号角色使用第63号技能每100次第18号的自身力量加1,上限1000次

点评

有个问题..自身攻击力是指武器攻击力?还是指力量?  发表于 2019-10-23 09:55
我想你应该知道怎么获取技能次数吧?那是你加的脚本 别人不知道你用了什么脚本..如果不会无从谈起..  发表于 2019-10-23 00:56
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33148
在线时间
10485 小时
注册时间
2009-3-15
帖子
4756
7
发表于 2019-10-23 00:42:09 | 只看该作者
本帖最后由 soulsaga 于 2019-10-23 09:53 编辑

RUBY 代码复制
  1. class Game_Battler
  2. attr_accessor :skill_count                    # skill_count                    # 技能次数
  3. #--------------------------------------------------------------------------
  4.   # ● 返回技能次数哈希表
  5.   #--------------------------------------------------------------------------
  6.   def skill_count
  7.     return @skill_count || {}
  8.   end
  9. end

插入到MAIN上面
然后代入时这样写
$game_actors[角色ID].skill_count[技能ID]=技能次数
获取时
p $game_actors[角色ID].skill_count[技能ID]

点评

你不先代入就是空的..自然没法运 算..我觉得我这个不是你需要你的回答你还是用下面大神的吧..  发表于 2019-10-23 11:04
报告大神,我拿去做了个加法运算就出错了,出错提示是“undefined method '+' for nil:NilClass”  发表于 2019-10-23 11:01
哈希表和数组本来就不限制..没有表示..  发表于 2019-10-23 08:18
还有这个脚本哪里表示的是你说的“不限个数”?是那个"{}"吗?  发表于 2019-10-23 01:09
默认系统不存在技能使用次数..那得自己加了..  发表于 2019-10-23 01:03

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
8
 楼主| 发表于 2019-10-23 04:14:03 | 只看该作者
soulsaga 发表于 2019-10-23 00:42
class Game_Battler
attr_accessor :skill_count                    # skill_count                    #  ...

报错大神,测试报错

点评

好多,那咱再去试试!多谢了!  发表于 2019-10-23 10:33
如果想能读存档的话..我改下脚本..已更新  发表于 2019-10-23 09:54
这个要重新开始..否则会报错..  发表于 2019-10-23 08:30
我测试没报错..我后来更新了的..  发表于 2019-10-23 08:20
回复 支持 反对

使用道具 举报

Lv5.捕梦者

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

开拓者

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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3082
在线时间
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 多谢大神!

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-20 06:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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