Project1

标题: 血玲珑和法玲珑的修改 [打印本页]

作者: cinderelmini    时间: 2009-12-3 19:02
标题: 血玲珑和法玲珑的修改
本帖最后由 cinderelmini 于 2009-12-13 19:17 编辑

最近的第3个问帖。。。前两个都在孤单中自己解决了。。。但是这个问题明尼真的没办法再研究了。。希望能得到大大们的帮助。。。
实际问题就是当我把血玲珑里剩余的量使用完时,物品数量不减,但是在角色升级时把它满上。。。
这个问题可以解决吗?
PS:明尼决定制作的是单人游戏,所以可以无视队伍人数(就是一个人啦。。)这个有用吗?
  1. #==============================================================================
  2. # 血玲珑和法玲珑 1.0 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 功能: 在物品中添加名为"血玲珑"的药品,说白了就是一大药缸,使用时将全体角色HP加
  5. # 满(如果血玲珑的剩余血量不够,全体角色HP增加量为剩余血量),直到血玲珑的剩
  6. # 余血量为零,物品数量-1.
  7. # 当角色持有多于1个血玲珑时,当前正在使用的血玲珑剩余血量不够加满全体HP的,
  8. # 自动使用下一个血玲珑(如果有).
  9. #
  10. # 使用方法: 1、复制脚本所有内容到main之前
  11. # 2、在系统中新增一个属性,名为"血玲珑"
  12. # 3、设定一个物品如下:
  13. # 效果范围[己方全体];可能使用时[平时或战斗中];消耗[不消耗]
  14. # 该物品必须钩选"血玲珑"属性,其余设定随意
  15. # 4、血玲珑的最大存血量在脚本21行设置
  16. #
  17. # 5、法玲珑的设定方法跟血玲珑相,对应不再重复
  18. #==============================================================================
  19. module STORAGE
  20. HP_MAX = 999 # 血玲珑的最大存血量
  21. SP_MAX = 999 # 法玲珑的最大存法量
  22. HP_VAR = 50 # 存储血玲珑当前存血量的变量id,例如默认是第50号变量
  23. SP_VAR = 51 # 存储法玲珑当前存法量的变量id,例如默认是第51号变量
  24. end
  25. #==============================================================================
  26. class Game_Battler
  27. #--------------------------------------------------------------------------
  28. def hp_storage_id
  29. hp_storage = 0
  30. for i in 1...$data_system.elements.size
  31. if $data_system.elements[i] =~ /血玲珑/
  32. hp_storage = i
  33. break
  34. end
  35. end
  36. return hp_storage
  37. end
  38. #--------------------------------------------------------------------------
  39. def sp_storage_id
  40. hp_storage = 0
  41. for i in 1...$data_system.elements.size
  42. if $data_system.elements[i] =~ /法玲珑/
  43. sp_storage = i
  44. break
  45. end
  46. end
  47. return sp_storage
  48. end
  49. #--------------------------------------------------------------------------
  50. def item_effect(item)
  51. self.critical = false
  52. if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  53. ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  54. # 过程结束(effective = false)
  55. return false
  56. end
  57. effective = false
  58. effective |= item.common_event_id > 0
  59. hit_result = (rand(100) < item.hit)
  60. effective |= item.hit < 100
  61. if hit_result == true
  62. recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  63. recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  64. if recover_hp < 0
  65. recover_hp += self.pdef * item.pdef_f / 20
  66. recover_hp += self.mdef * item.mdef_f / 20
  67. recover_hp = [recover_hp, 0].min
  68. end
  69. recover_hp *= elements_correct(item.element_set)
  70. recover_hp /= 100
  71. recover_sp *= elements_correct(item.element_set)
  72. recover_sp /= 100
  73. if item.variance > 0 and recover_hp.abs > 0
  74. amp = [recover_hp.abs * item.variance / 100, 1].max
  75. recover_hp += rand(amp+1) + rand(amp+1) - amp
  76. end
  77. if item.variance > 0 and recover_sp.abs > 0
  78. amp = [recover_sp.abs * item.variance / 100, 1].max
  79. recover_sp += rand(amp+1) + rand(amp+1) - amp
  80. end
  81. if recover_hp < 0
  82. if self.guarding?
  83. recover_hp /= 2
  84. end
  85. end
  86. self.damage = -recover_hp
  87. last_hp = self.hp
  88. last_sp = self.sp
  89. self.hp += recover_hp
  90. self.sp += recover_sp
  91. effective |= self.hp != last_hp
  92. effective |= self.sp != last_sp
  93. @state_changed = false
  94. effective |= states_plus(item.plus_state_set)
  95. effective |= states_minus(item.minus_state_set)
  96. if item.parameter_type > 0 and item.parameter_points != 0
  97. case item.parameter_type
  98. when 1
  99. @maxhp_plus += item.parameter_points
  100. when 2
  101. @maxsp_plus += item.parameter_points
  102. when 3
  103. @str_plus += item.parameter_points
  104. when 4
  105. @dex_plus += item.parameter_points
  106. when 5
  107. @agi_plus += item.parameter_points
  108. when 6
  109. @int_plus += item.parameter_points
  110. end
  111. effective = true
  112. end
  113. if item.recover_hp_rate == 0 and item.recover_hp == 0
  114. self.damage = ""
  115. if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  116. (item.parameter_type == 0 or item.parameter_points == 0)
  117. unless @state_changed
  118. self.damage = "Miss"
  119. end
  120. end
  121. end
  122. else
  123. self.damage = "Miss"
  124. end
  125. unless $game_temp.in_battle
  126. self.damage = nil
  127. end
  128. # 血玲珑
  129. if item.element_set.include?(hp_storage_id)
  130. self.damage = nil
  131. differ_hp = self.maxhp - self.hp
  132. if $game_variables[STORAGE::HP_VAR] > differ_hp
  133. $game_variables[STORAGE::HP_VAR] -= differ_hp
  134. self.damage = -differ_hp if differ_hp !=0
  135. self.hp = self.maxhp
  136. else
  137. self.damage = -$game_variables[STORAGE::HP_VAR] if $game_variables[STORAGE::HP_VAR] != 0
  138. self.hp += $game_variables[STORAGE::HP_VAR]
  139. $game_variables[STORAGE::HP_VAR] = 0
  140. end
  141. num = $game_party.item_number(item.id)
  142. num_remain = [1 + $game_variables[STORAGE::HP_VAR] / STORAGE::HP_MAX, num].min
  143. num_costed = num - num_remain
  144. if $game_variables[STORAGE::HP_VAR] == 0
  145. num_costed = num
  146. end
  147. $game_party.gain_storage(item.id, -num_costed)
  148. effective |= differ_hp > 0
  149. end
  150. # 法玲珑
  151. if item.element_set.include?(sp_storage_id)
  152. self.damage = nil
  153. differ_sp = self.maxsp - self.sp
  154. if $game_variables[STORAGE::SP_VAR] > differ_sp
  155. $game_variables[STORAGE::SP_VAR] -= differ_sp
  156. self.damage = -differ_sp if differ_sp != 0
  157. self.sp = self.maxsp
  158. else
  159. self.damage = -$game_variables[STORAGE::SP_VAR] if $game_variables[STORAGE::SP_VAR] != 0
  160. self.sp += $game_variables[STORAGE::SP_VAR]
  161. $game_variables[STORAGE::SP_VAR] = 0
  162. end
  163. num = $game_party.item_number(item.id)
  164. num_remain = [1 + $game_variables[STORAGE::SP_VAR] / STORAGE::SP_MAX, num].min
  165. num_costed = num - num_remain
  166. if $game_variables[STORAGE::SP_VAR] == 0
  167. num_costed = num
  168. end
  169. $game_party.gain_storage(item.id, -num_costed)
  170. effective |= differ_sp > 0
  171. end
  172. # 过程结束
  173. return effective
  174. end
  175. end
  176. #==============================================================================
  177. class Game_Party
  178. #--------------------------------------------------------------------------
  179. def hp_storage_id
  180. hp_storage = 0
  181. for i in 1...$data_system.elements.size
  182. if $data_system.elements[i] =~ /血玲珑/
  183. hp_storage = i
  184. break
  185. end
  186. end
  187. return hp_storage
  188. end
  189. #--------------------------------------------------------------------------
  190. def sp_storage_id
  191. hp_storage = 0
  192. for i in 1...$data_system.elements.size
  193. if $data_system.elements[i] =~ /法玲珑/
  194. sp_storage = i
  195. break
  196. end
  197. end
  198. return sp_storage
  199. end
  200. #--------------------------------------------------------------------------
  201. def gain_storage(item_id, n)
  202. if item_id > 0
  203. @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
  204. end
  205. end
  206. #--------------------------------------------------------------------------
  207. def gain_item(item_id, n)
  208. # 血玲珑
  209. if $data_items[item_id].element_set.include?(hp_storage_id)
  210. $game_variables[STORAGE::HP_VAR] += n * STORAGE::HP_MAX
  211. if $game_variables[STORAGE::HP_VAR] < 0
  212. $game_variables[STORAGE::HP_VAR] = 0
  213. end
  214. end
  215. # 法玲珑
  216. if $data_items[item_id].element_set.include?(sp_storage_id)
  217. $game_variables[STORAGE::SP_VAR] += n * STORAGE::SP_MAX
  218. if $game_variables[STORAGE::SP_VAR] < 0
  219. $game_variables[STORAGE::SP_VAR] = 0
  220. end
  221. end
  222. if item_id > 0
  223. @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
  224. end
  225. end
  226. end
  227. #==============================================================================
  228. class Window_Item < Window_Selectable
  229. #--------------------------------------------------------------------------
  230. def hp_storage_id
  231. hp_storage = 0
  232. for i in 1...$data_system.elements.size
  233. if $data_system.elements[i] =~ /血玲珑/
  234. hp_storage = i
  235. break
  236. end
  237. end
  238. return hp_storage
  239. end
  240. #--------------------------------------------------------------------------
  241. def sp_storage_id
  242. hp_storage = 0
  243. for i in 1...$data_system.elements.size
  244. if $data_system.elements[i] =~ /法玲珑/
  245. sp_storage = i
  246. break
  247. end
  248. end
  249. return sp_storage
  250. end
  251. #--------------------------------------------------------------------------
  252. def update_help
  253. description = ""
  254. if self.item != nil
  255. description = self.item.description
  256. # 血玲珑
  257. if $data_items[self.item.id].element_set.include?(hp_storage_id)
  258. hp_remain = $game_variables[STORAGE::HP_VAR] % STORAGE::HP_MAX
  259. if hp_remain == 0
  260. hp_remain = STORAGE::HP_MAX
  261. end
  262. description = description + " 剩余HP: #{hp_remain}"
  263. end
  264. # 法玲珑
  265. if $data_items[self.item.id].element_set.include?(sp_storage_id)
  266. sp_remain = $game_variables[STORAGE::SP_VAR] % STORAGE::SP_MAX
  267. if sp_remain == 0
  268. sp_remain = STORAGE::SP_MAX
  269. end
  270. description = description + " 剩余SP: #{sp_remain}"
  271. end
  272. end
  273. @help_window.set_text(description)
  274. end
  275. end
  276. #==============================================================================
  277. class Scene_Item
  278. alias storage_update_target update_target
  279. #--------------------------------------------------------------------------
  280. def update_target
  281. # 按下 C 键的情况下
  282. if Input.trigger?(Input::C)
  283. if $game_party.item_number(@item.id) == 0
  284. $game_system.se_play($data_system.buzzer_se)
  285. return
  286. end
  287. if @target_window.index == -1
  288. used = false
  289. for i in $game_party.actors
  290. used |= i.item_effect(@item)
  291. end
  292. end
  293. if @target_window.index >= 0
  294. target = $game_party.actors[@target_window.index]
  295. used = target.item_effect(@item)
  296. end
  297. # 使用物品的情况下
  298. if used
  299. $game_system.se_play(@item.menu_se)
  300. if $data_items[@item.id].element_set.include?($game_party.hp_storage_id) or
  301. $data_items[@item.id].element_set.include?($game_party.sp_storage_id)
  302. $game_party.gain_storage(@item.id, -1)
  303. @item_window.draw_item(@item_window.index)
  304. end
  305. if @item.consumable
  306. $game_party.lose_item(@item.id, 1)
  307. @item_window.draw_item(@item_window.index)
  308. end
  309. @target_window.refresh
  310. if $game_party.all_dead?
  311. $scene = Scene_Gameover.new
  312. return
  313. end
  314. if @item.common_event_id > 0
  315. $game_temp.common_event_id = @item.common_event_id
  316. $scene = Scene_Map.new
  317. return
  318. end
  319. end
  320. # 无法使用物品的情况下
  321. unless used
  322. $game_system.se_play($data_system.buzzer_se)
  323. end
  324. return
  325. end
  326. storage_update_target
  327. end
  328. end
复制代码

作者: dbshy    时间: 2009-12-3 21:05
本帖最后由 dbshy 于 2009-12-3 21:16 编辑

- -!
什么是血玲珑和法玲珑??

望详细
作者: 后知后觉    时间: 2009-12-3 23:46
帖代码要用[code ]代码内容[/code ]
不然你看你帖的代码后面都是斜体字
作者: JPF    时间: 2009-12-4 00:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: 后知后觉    时间: 2009-12-4 00:23
他那个血玲珑应该是说这样吧
比如一个血玲珑回复HP的数量是1000
一个角色现在的HP状态是  600/750    被打了150的HP
现在使用这个血玲珑.血玲珑不会消失.而是那1000的回复量-了150.
留下了850还可以下次使用
一些网络游戏里有这样的道具.图的是方便和节省道具栏格子
作者: dbshy    时间: 2009-12-4 13:50
如果可以的话,发个工程更好
可能是脚本冲突?
不是脚本冲突的话,那就是窗口的刷新问题了(没认真看脚本 - -bb)
作者: cinderelmini    时间: 2009-12-4 19:00
本帖最后由 cinderelmini 于 2009-12-4 19:45 编辑

帖子编辑好了,其实这个问题不是关于脚本冲突什么问题的,就是修改一下脚本。。。
原脚本的执行是:一个物品附加了血玲珑属性后,有10000点HP剩余值可以用,
当这10000点用完后物品数量就减1。。。如此如此。。。
所以明尼的意思是:即使把这个物品里的剩余值用完了也不回数量减1,而在角色升级时把它满上,回复到10000点。。。就这样了,这个问题应该不用上传工程吧。。。直接修改帖上的脚本就好了吧。。
作者: 传说中di    时间: 2009-12-6 16:05
使用后不物品数量还在的话那搜索 -1 的地方改成0
作者: cinderelmini    时间: 2009-12-7 19:27
使用后不物品数量还在的话那搜索 -1 的地方改成0
传说中di 发表于 2009-12-6 16:05

但是改过之后好象没什么改变啊。。。怎么办?
作者: dbshy    时间: 2009-12-13 16:18
我试了一下,没有出现用完了不减一得问题

哥们,看这种没有缩进格式的脚本很累的,发个工程吧  =。=

PS:没有当年的激情了,人懒了
作者: cinderelmini    时间: 2009-12-13 19:15
算了。。还是放弃了。。。。。。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1