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

Project1

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

[有事请教] 经验自动得失窗口异常

[复制链接]

Lv2.观梦者

梦石
0
星屑
539
在线时间
78 小时
注册时间
2023-7-5
帖子
25
跳转到指定楼层
1
发表于 昨天 23:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 君野飞火 于 2025-9-19 23:47 编辑

这个是模仿的代码现在出现的问题是:
多人获得经验时,窗口总会重复弹出,而且exp_uper似乎无法获取加经验的角色名
麻烦大家帮忙看看怎么改


RUBY 代码复制
  1. def command_315
  2. # 获取操作值
  3. value = operate_value(@parameters[1], @parameters[2], @parameters[3])
  4. # 如果 不显示升级窗口开关 关闭,则初始化纪录升级角色和纪录角色学会特级的变量
  5. if $game_switches[$不提示经验窗口] == false
  6. level_uper = []
  7. learned_skill = ""
  8. exp_uper = []
  9. end
  10. #===============增加=============================
  11. first_actor = true
  12. #===============================
  13. # 处理重复
  14. iterate_actor(@parameters[0]) do |actor|
  15. # 如果 不显示经验窗口开关 关闭
  16. last_exp = actor.exp
  17. last_level = actor.level
  18. # 更改角色 EXP
  19. actor.exp += value
  20. if $game_switches[$不提示经验窗口]==false
  21. # 如果是让角色加经验
  22. if first_actor == true #限制多次循环
  23. #============增加处====================
  24. Audio.se_play("Audio/SE/"+"056-Right02",80,100)
  25. # 等待 10 祯
  26. for i in 0..10
  27. Graphics.update
  28. end
  29. #==================================
  30. if exp_uper.size == $game_party.actors.size and $game_party.actors.size > 1
  31. then
  32. #=========如果全体成员升经验,且全体不止一个人=============
  33. # 生成提示窗口
  34. exp_uper_window = Window_Base.new(215, 169, 234, 97)
  35. exp_uper_window.contents = Bitmap.new(200, 64)
  36. exp_uper_window.opacity = 160
  37. # 描绘升级信息
  38. exp_uper_window.contents.draw_text(0, 16, 200, 32, " 全体同伴 EXP + ")
  39. exp_uper_window.contents.draw_text(0, 16, 200, 32, value , 2)
  40. # 此外(如果只有部分角色升级或全队只有一人时)
  41. else
  42. # 生成提示窗口
  43. height = exp_uper.size * 32 + 33
  44. exp_uper_window = Window_Base.new(201, (435 - height) / 2, 262, height)
  45. exp_uper_window.contents = Bitmap.new(230, height - 32)
  46. exp_uper_window.opacity = 160
  47. # 描绘升级信息
  48. y = 0
  49. for exp_up_actor in exp_uper
  50. exp_uper_window.contents.draw_text(10, y, 210, 32, exp_up_actor)
  51. exp_uper_window.contents.draw_text(10, y, 210, 32, "EXP +" , 2)
  52. exp_uper_window.contents.draw_text(10, y, 210, 32, value , 3)
  53. y += 32
  54. end
  55. end
  56. ###########################################
  57. # 显示 30 祯
  58. for i in 0..30
  59. Graphics.update
  60. end
  61. # 用 10 祯过渡消失升级提示窗口
  62. for i in 0..10
  63. exp_uper_window.opacity -= 30
  64. exp_uper_window.contents_opacity -= 30
  65. Graphics.update
  66. end
  67. # 释放升级提示窗口
  68. exp_uper_window.dispose
  69. #======================额外增加的操作(避免重复弹窗)=======================
  70. first_actor = false
  71. end
  72. #===================额外增加的操作============================
  73. end
  74. ###################################
  75. if $game_switches[$不提示经验窗口]==false
  76. # 如果经验增加后角色升级
  77. if actor.level > last_level
  78. #恢复为满状态
  79. actor.hp = actor.maxhp
  80. actor.sp = actor.maxsp
  81. # 在纪录升级角色的变量里纪录升级角色
  82. level_uper.push(actor.name.split(/·/)[0])
  83. # 如果因升级学会特技
  84. for level in last_level+1..actor.level
  85. for j in $data_classes[actor.class_id].learnings
  86. if j.level == level
  87. # 把角色的升级学会技能信息记录入变量
  88. learned_skill += actor.name.split(/·/)[0] + "学会了新特技“" + $data_skills[j.skill_id].name + "”。\n"
  89. end
  90. end
  91. end
  92. else
  93. end
  94. # 此外(如果 不显示升级窗口开关 判断是否经验提示)
  95. else
  96. actor.exp += value
  97. end
  98. end #处理重复结束
  99. # 如果 不显示升经验窗口开关 关闭,且有角色升级
  100. if $game_switches[$不提示经验窗口] == false and level_uper.size > 0
  101. # 播放升级提示 SE,可以自己改
  102. Audio.se_play("Audio/SE/"+"056-Right02",80,100)
  103. # 等待 10 祯
  104. for i in 0..10
  105. Graphics.update
  106. end
  107. # 如果所有同伴都升级了
  108. if level_uper.size == $game_party.actors.size and $game_party.actors.size > 1
  109. then
  110. #=========如果全体成员升级,且队内不止一个人=============
  111. # 生成升级提示窗口
  112. level_uper_window = Window_Base.new(215, 169, 234, 97)
  113. level_uper_window.contents = Bitmap.new(200, 64)
  114. level_uper_window.opacity = 160
  115. # 描绘升级信息
  116. level_uper_window.contents.draw_text(0, 16, 200, 32, " 全体同伴 LEVEL UP! ")
  117. # 此外(如果只有部分角色升级或队内只有一人时)
  118. else
  119. # 生成升级提示窗口
  120. height = level_uper.size * 32 + 33
  121. level_uper_window = Window_Base.new(201, (435 - height) / 2, 262, height)
  122. level_uper_window.contents = Bitmap.new(230, height - 32)
  123. level_uper_window.opacity = 160
  124. # 描绘升级信息
  125. y = 0
  126. for level_up_actor in level_uper
  127. level_uper_window.contents.draw_text(10, y, 210, 32, level_up_actor)
  128. level_uper_window.contents.draw_text(10, y, 210, 32, " LEVEL UP!", 2)
  129. y += 32
  130. end
  131. end
  132. # 显示 30 祯
  133. for i in 0..30
  134. Graphics.update
  135. end
  136. # 用 10 祯过渡消失升级提示窗口
  137. for i in 0..10
  138. level_uper_window.opacity -= 30
  139. level_uper_window.contents_opacity -= 30
  140. Graphics.update
  141. end
  142. # 释放升级提示窗口
  143. level_uper_window.dispose
  144. # 如果有角色因为升级而学会技能
  145. if learned_skill != ""
  146. # 播放学会技能 ME,可以自己改
  147. Audio.me_play("Audio/ME/"+"010-Item01",100,100)
  148. # 更改对话框各个选项
  149. $game_system.message_position = 2
  150. $game_system.message_frame = 0
  151. $mes_id = nil
  152. $mes_name = ""
  153. # 显示学会技能信息
  154. @message_waiting = true
  155. $game_temp.message_proc = Proc.new { @message_waiting = false }
  156. # message_text 设置为 1 行
  157. $game_temp.message_text = "\\c[4]" + learned_skill + "\n"
  158. end
  159. end
  160. # 继续
  161. return true
  162. end #def结束
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-9-20 12:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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